{"version":3,"sources":["jsdelivr-header.js","/npm/@startinblox/core@2.0.5/dist/helpers-4GFJ8HI8.js","/npm/@startinblox/core@2.0.5/dist/store-YR4Gxt5W.js","/npm/@startinblox/core@2.0.5/dist/index.js"],"names":[],"mappings":"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C,IAAI,EAAU,EACd,GAAI,EAAM,CACR,IAAK,GAAY,EAAK,GAAY,CAChC,OAAO,EAAK,EAC1B,CACY,GAAI,IAAS,KAAK,SAAU,CAC1B,EAAW,EAAK,GAChB,GAAI,EAAU,CACZ,OAAO,CACvB,CACc,IAAK,EAAU,EAAK,WAAY,GAAW,IAAY,KAAK,SAAU,EAAU,EAAQ,WAAY,CAClG,EAAW,EAAQ,GACnB,GAAI,EAAU,CACZ,OAAO,CACzB,CACA,CACA,CACA,CACA,CACQ,gBAAA,CAAiB,EAAM,EAAW,EAAa,GAC7C,IAAI,EAAU,EAAS,EACvB,GAAI,EAAM,CACR,EAAW,EAAK,GAChB,GAAI,KAAK,UAAY,IAAa,KAAK,SAAU,CAC/C,MACd,CACY,GAAI,EAAU,CACZ,IAAK,EAAU,CACb,IAAK,EAAS,EAAS,GAAY,EAAQ,EAAS,EAAO,GAAY,CACrE,IAAK,EAAO,GAAY,CACtB,OAAO,CAC3B,CACA,CACA,CACc,OAAO,CACrB,CACY,EAAU,EAAK,WACf,GAAI,GAAW,IAAY,KAAK,SAAU,CACxC,OAAO,CACrB,CACA,CACA,EAEM,MAAM,GAAS,CACb,UACA,QACA,UACA,MACA,KACA,aACA,SACA,OACA,WACA,SACA,SACA,OACA,OACA,MACA,UACA,UACA,OACA,IACA,KACA,WACA,KACA,SACA,UACA,SACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,UACA,MACA,MACA,YACA,OACA,MACA,KACA,KACA,KACA,KACA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,WAEF,MAAM,GAAa,CACjB,KACA,MAEF,MAAM,GAAgB,CACpB,QACA,QACA,SAEF,MAAM,GAAa,CACjB,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,UAEF,MAAM,GAAW,CACf,KACA,KACA,KACA,KACA,KACA,MAEF,MAAM,GAAc,CAClB,KACA,KACA,MAEF,MAAM,GAAQ,CACZ,KACA,KACA,MAEF,MAAM,GAAa,CACjB,MACA,SA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ACjC,CACA,CACM,SAAS,GAAS,EAAM,GACtB,GAAI,GAAgB,CAClB,GAAe,EAAM,KAC/B,CACQ,IAAI,EAAK,EAAO,OAChB,MAAO,IAAM,CACX,IAAI,EAAU,EAAO,GACrB,UAAW,IAAY,SAAU,CAC/B,IAAI,EAAY,GAAkB,GAClC,GAAI,IAAc,EAAS,CACzB,IAAK,GAAS,GAAS,CACrB,EAAO,GAAM,CAC7B,CACc,EAAU,CACxB,CACA,CACU,EAAK,GAAW,IAC1B,CACQ,OAAO,CACf,CACM,SAAS,GAAM,GACb,IAAI,EAAY,GAAS,MACzB,IAAI,OAAgB,EACpB,IAAK,KAAY,EAAS,CACxB,GAAI,GAAO,GAAiB,EAAS,CAAC,IAAY,CAChD,EAAU,GAAY,EAAQ,EAC1C,CACA,CACQ,OAAO,CACf,CACM,SAAS,GAAa,EAAS,GAC7B,MAAO,IAAY,KAAM,CACvB,IAAI,EAAO,GAAyB,EAAS,GAC7C,GAAI,EAAM,CACR,GAAI,EAAK,IAAK,CACZ,OAAO,GAAQ,EAAK,IAClC,CACY,UAAW,EAAK,QAAU,WAAY,CACpC,OAAO,GAAQ,EAAK,MAClC,CACA,CACU,EAAU,GAAe,EACnC,CACQ,SAAS,EAAc,GACrB,QAAQ,KAAK,qBAAsB,GACnC,OAAO,IACjB,CACQ,OAAO,CACf,CACM,IAAI,GAAO,GAAO,CAChB,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,SACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,QAEF,IAAI,GAAM,GAAO,CACf,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,UAEF,IAAI,GAAa,GAAO,CACtB,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,iBAEF,IAAI,GAAgB,GAAO,CACzB,UACA,gBACA,SACA,UACA,eACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,QAEF,IAAI,GAAS,GAAO,CAClB,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,eAEF,IAAI,GAAmB,GAAO,CAC5B,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,SAEF,IAAI,GAAQ,GAAO,CAAC,UACpB,IAAI,GAAS,GAAO,CAClB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,UACA,cACA,cACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,QACA,SAEF,IAAI,GAAQ,GAAO,CACjB,gBACA,aACA,WACA,qBACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,UACA,UACA,YACA,mBACA,cACA,kBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,UACA,a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","file":"/npm/@startinblox/core@2.0.5/dist/index.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.\n * Original file: /npm/@startinblox/core@2.0.5/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var __defProp = Object.defineProperty;\nvar __typeError = (msg) => {\n  throw TypeError(msg);\n};\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\nvar __privateMethod = (obj, member, method) => (__accessCheck(obj, member, \"access private method\"), method);\nvar _values, _resolve, _AsyncIterableBuilder_instances, createIterable_fn, next_fn, nextPromise_fn;\nvar jsonldContextParser = {};\nvar ContextParser = {};\nvar relativeToAbsoluteIri = {};\nvar Resolve = {};\nvar hasRequiredResolve;\nfunction requireResolve() {\n  if (hasRequiredResolve) return Resolve;\n  hasRequiredResolve = 1;\n  Object.defineProperty(Resolve, \"__esModule\", { value: true });\n  Resolve.removeDotSegmentsOfPath = Resolve.removeDotSegments = Resolve.resolve = void 0;\n  function resolve(relativeIRI, baseIRI) {\n    baseIRI = baseIRI || \"\";\n    const baseFragmentPos = baseIRI.indexOf(\"#\");\n    if (baseFragmentPos > 0) {\n      baseIRI = baseIRI.substr(0, baseFragmentPos);\n    }\n    if (!relativeIRI.length) {\n      if (baseIRI.indexOf(\":\") < 0) {\n        throw new Error(`Found invalid baseIRI '${baseIRI}' for value '${relativeIRI}'`);\n      }\n      return baseIRI;\n    }\n    if (relativeIRI.startsWith(\"?\")) {\n      const baseQueryPos = baseIRI.indexOf(\"?\");\n      if (baseQueryPos > 0) {\n        baseIRI = baseIRI.substr(0, baseQueryPos);\n      }\n      return baseIRI + relativeIRI;\n    }\n    if (relativeIRI.startsWith(\"#\")) {\n      return baseIRI + relativeIRI;\n    }\n    if (!baseIRI.length) {\n      const relativeColonPos = relativeIRI.indexOf(\":\");\n      if (relativeColonPos < 0) {\n        throw new Error(`Found invalid relative IRI '${relativeIRI}' for a missing baseIRI`);\n      }\n      return removeDotSegmentsOfPath(relativeIRI, relativeColonPos);\n    }\n    const valueColonPos = relativeIRI.indexOf(\":\");\n    if (valueColonPos >= 0) {\n      return removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n    }\n    const baseColonPos = baseIRI.indexOf(\":\");\n    if (baseColonPos < 0) {\n      throw new Error(`Found invalid baseIRI '${baseIRI}' for value '${relativeIRI}'`);\n    }\n    const baseIRIScheme = baseIRI.substr(0, baseColonPos + 1);\n    if (relativeIRI.indexOf(\"//\") === 0) {\n      return baseIRIScheme + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n    }\n    let baseSlashAfterColonPos;\n    if (baseIRI.indexOf(\"//\", baseColonPos) === baseColonPos + 1) {\n      baseSlashAfterColonPos = baseIRI.indexOf(\"/\", baseColonPos + 3);\n      if (baseSlashAfterColonPos < 0) {\n        if (baseIRI.length > baseColonPos + 3) {\n          return baseIRI + \"/\" + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n        } else {\n          return baseIRIScheme + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n        }\n      }\n    } else {\n      baseSlashAfterColonPos = baseIRI.indexOf(\"/\", baseColonPos + 1);\n      if (baseSlashAfterColonPos < 0) {\n        return baseIRIScheme + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n      }\n    }\n    if (relativeIRI.indexOf(\"/\") === 0) {\n      return baseIRI.substr(0, baseSlashAfterColonPos) + removeDotSegments(relativeIRI);\n    }\n    let baseIRIPath = baseIRI.substr(baseSlashAfterColonPos);\n    const baseIRILastSlashPos = baseIRIPath.lastIndexOf(\"/\");\n    if (baseIRILastSlashPos >= 0 && baseIRILastSlashPos < baseIRIPath.length - 1) {\n      baseIRIPath = baseIRIPath.substr(0, baseIRILastSlashPos + 1);\n      if (relativeIRI[0] === \".\" && relativeIRI[1] !== \".\" && relativeIRI[1] !== \"/\" && relativeIRI[2]) {\n        relativeIRI = relativeIRI.substr(1);\n      }\n    }\n    relativeIRI = baseIRIPath + relativeIRI;\n    relativeIRI = removeDotSegments(relativeIRI);\n    return baseIRI.substr(0, baseSlashAfterColonPos) + relativeIRI;\n  }\n  Resolve.resolve = resolve;\n  function removeDotSegments(path) {\n    const segmentBuffers = [];\n    let i = 0;\n    while (i < path.length) {\n      switch (path[i]) {\n        case \"/\":\n          if (path[i + 1] === \".\") {\n            if (path[i + 2] === \".\") {\n              if (!isCharacterAllowedAfterRelativePathSegment(path[i + 3])) {\n                segmentBuffers.push([]);\n                i++;\n                break;\n              }\n              segmentBuffers.pop();\n              if (!path[i + 3]) {\n                segmentBuffers.push([]);\n              }\n              i += 3;\n            } else {\n              if (!isCharacterAllowedAfterRelativePathSegment(path[i + 2])) {\n                segmentBuffers.push([]);\n                i++;\n                break;\n              }\n              if (!path[i + 2]) {\n                segmentBuffers.push([]);\n              }\n              i += 2;\n            }\n          } else {\n            segmentBuffers.push([]);\n            i++;\n          }\n          break;\n        case \"#\":\n        case \"?\":\n          if (!segmentBuffers.length) {\n            segmentBuffers.push([]);\n          }\n          segmentBuffers[segmentBuffers.length - 1].push(path.substr(i));\n          i = path.length;\n          break;\n        default:\n          if (!segmentBuffers.length) {\n            segmentBuffers.push([]);\n          }\n          segmentBuffers[segmentBuffers.length - 1].push(path[i]);\n          i++;\n          break;\n      }\n    }\n    return \"/\" + segmentBuffers.map((buffer) => buffer.join(\"\")).join(\"/\");\n  }\n  Resolve.removeDotSegments = removeDotSegments;\n  function removeDotSegmentsOfPath(iri, colonPosition) {\n    let searchOffset = colonPosition + 1;\n    if (colonPosition >= 0) {\n      if (iri[colonPosition + 1] === \"/\" && iri[colonPosition + 2] === \"/\") {\n        searchOffset = colonPosition + 3;\n      }\n    } else {\n      if (iri[0] === \"/\" && iri[1] === \"/\") {\n        searchOffset = 2;\n      }\n    }\n    const pathSeparator = iri.indexOf(\"/\", searchOffset);\n    if (pathSeparator < 0) {\n      return iri;\n    }\n    const base = iri.substr(0, pathSeparator);\n    const path = iri.substr(pathSeparator);\n    return base + removeDotSegments(path);\n  }\n  Resolve.removeDotSegmentsOfPath = removeDotSegmentsOfPath;\n  function isCharacterAllowedAfterRelativePathSegment(character) {\n    return !character || character === \"#\" || character === \"?\" || character === \"/\";\n  }\n  return Resolve;\n}\nvar hasRequiredRelativeToAbsoluteIri;\nfunction requireRelativeToAbsoluteIri() {\n  if (hasRequiredRelativeToAbsoluteIri) return relativeToAbsoluteIri;\n  hasRequiredRelativeToAbsoluteIri = 1;\n  (function(exports) {\n    var __createBinding = relativeToAbsoluteIri && relativeToAbsoluteIri.__createBinding || (Object.create ? function(o, m, k, k2) {\n      if (k2 === void 0) k2 = k;\n      Object.defineProperty(o, k2, { enumerable: true, get: function() {\n        return m[k];\n      } });\n    } : function(o, m, k, k2) {\n      if (k2 === void 0) k2 = k;\n      o[k2] = m[k];\n    });\n    var __exportStar = relativeToAbsoluteIri && relativeToAbsoluteIri.__exportStar || function(m, exports2) {\n      for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p);\n    };\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    __exportStar(requireResolve(), exports);\n  })(relativeToAbsoluteIri);\n  return relativeToAbsoluteIri;\n}\nvar ErrorCoded = {};\nvar hasRequiredErrorCoded;\nfunction requireErrorCoded() {\n  if (hasRequiredErrorCoded) return ErrorCoded;\n  hasRequiredErrorCoded = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.ERROR_CODES = exports.ErrorCoded = void 0;\n    class ErrorCoded2 extends Error {\n      /* istanbul ignore next */\n      constructor(message, code) {\n        super(message);\n        this.code = code;\n      }\n    }\n    exports.ErrorCoded = ErrorCoded2;\n    (function(ERROR_CODES) {\n      ERROR_CODES[\"COLLIDING_KEYWORDS\"] = \"colliding keywords\";\n      ERROR_CODES[\"CONFLICTING_INDEXES\"] = \"conflicting indexes\";\n      ERROR_CODES[\"CYCLIC_IRI_MAPPING\"] = \"cyclic IRI mapping\";\n      ERROR_CODES[\"INVALID_ID_VALUE\"] = \"invalid @id value\";\n      ERROR_CODES[\"INVALID_INDEX_VALUE\"] = \"invalid @index value\";\n      ERROR_CODES[\"INVALID_NEST_VALUE\"] = \"invalid @nest value\";\n      ERROR_CODES[\"INVALID_PREFIX_VALUE\"] = \"invalid @prefix value\";\n      ERROR_CODES[\"INVALID_PROPAGATE_VALUE\"] = \"invalid @propagate value\";\n      ERROR_CODES[\"INVALID_REVERSE_VALUE\"] = \"invalid @reverse value\";\n      ERROR_CODES[\"INVALID_IMPORT_VALUE\"] = \"invalid @import value\";\n      ERROR_CODES[\"INVALID_VERSION_VALUE\"] = \"invalid @version value\";\n      ERROR_CODES[\"INVALID_BASE_IRI\"] = \"invalid base IRI\";\n      ERROR_CODES[\"INVALID_CONTAINER_MAPPING\"] = \"invalid container mapping\";\n      ERROR_CODES[\"INVALID_CONTEXT_ENTRY\"] = \"invalid context entry\";\n      ERROR_CODES[\"INVALID_CONTEXT_NULLIFICATION\"] = \"invalid context nullification\";\n      ERROR_CODES[\"INVALID_DEFAULT_LANGUAGE\"] = \"invalid default language\";\n      ERROR_CODES[\"INVALID_INCLUDED_VALUE\"] = \"invalid @included value\";\n      ERROR_CODES[\"INVALID_IRI_MAPPING\"] = \"invalid IRI mapping\";\n      ERROR_CODES[\"INVALID_JSON_LITERAL\"] = \"invalid JSON literal\";\n      ERROR_CODES[\"INVALID_KEYWORD_ALIAS\"] = \"invalid keyword alias\";\n      ERROR_CODES[\"INVALID_LANGUAGE_MAP_VALUE\"] = \"invalid language map value\";\n      ERROR_CODES[\"INVALID_LANGUAGE_MAPPING\"] = \"invalid language mapping\";\n      ERROR_CODES[\"INVALID_LANGUAGE_TAGGED_STRING\"] = \"invalid language-tagged string\";\n      ERROR_CODES[\"INVALID_LANGUAGE_TAGGED_VALUE\"] = \"invalid language-tagged value\";\n      ERROR_CODES[\"INVALID_LOCAL_CONTEXT\"] = \"invalid local context\";\n      ERROR_CODES[\"INVALID_REMOTE_CONTEXT\"] = \"invalid remote context\";\n      ERROR_CODES[\"INVALID_REVERSE_PROPERTY\"] = \"invalid reverse property\";\n      ERROR_CODES[\"INVALID_REVERSE_PROPERTY_MAP\"] = \"invalid reverse property map\";\n      ERROR_CODES[\"INVALID_REVERSE_PROPERTY_VALUE\"] = \"invalid reverse property value\";\n      ERROR_CODES[\"INVALID_SCOPED_CONTEXT\"] = \"invalid scoped context\";\n      ERROR_CODES[\"INVALID_SCRIPT_ELEMENT\"] = \"invalid script element\";\n      ERROR_CODES[\"INVALID_SET_OR_LIST_OBJECT\"] = \"invalid set or list object\";\n      ERROR_CODES[\"INVALID_TERM_DEFINITION\"] = \"invalid term definition\";\n      ERROR_CODES[\"INVALID_TYPE_MAPPING\"] = \"invalid type mapping\";\n      ERROR_CODES[\"INVALID_TYPE_VALUE\"] = \"invalid type value\";\n      ERROR_CODES[\"INVALID_TYPED_VALUE\"] = \"invalid typed value\";\n      ERROR_CODES[\"INVALID_VALUE_OBJECT\"] = \"invalid value object\";\n      ERROR_CODES[\"INVALID_VALUE_OBJECT_VALUE\"] = \"invalid value object value\";\n      ERROR_CODES[\"INVALID_VOCAB_MAPPING\"] = \"invalid vocab mapping\";\n      ERROR_CODES[\"IRI_CONFUSED_WITH_PREFIX\"] = \"IRI confused with prefix\";\n      ERROR_CODES[\"KEYWORD_REDEFINITION\"] = \"keyword redefinition\";\n      ERROR_CODES[\"LOADING_DOCUMENT_FAILED\"] = \"loading document failed\";\n      ERROR_CODES[\"LOADING_REMOTE_CONTEXT_FAILED\"] = \"loading remote context failed\";\n      ERROR_CODES[\"MULTIPLE_CONTEXT_LINK_HEADERS\"] = \"multiple context link headers\";\n      ERROR_CODES[\"PROCESSING_MODE_CONFLICT\"] = \"processing mode conflict\";\n      ERROR_CODES[\"PROTECTED_TERM_REDEFINITION\"] = \"protected term redefinition\";\n      ERROR_CODES[\"CONTEXT_OVERFLOW\"] = \"context overflow\";\n      ERROR_CODES[\"INVALID_BASE_DIRECTION\"] = \"invalid base direction\";\n      ERROR_CODES[\"RECURSIVE_CONTEXT_INCLUSION\"] = \"recursive context inclusion\";\n      ERROR_CODES[\"INVALID_STREAMING_KEY_ORDER\"] = \"invalid streaming key order\";\n      ERROR_CODES[\"INVALID_EMBEDDED_NODE\"] = \"invalid embedded node\";\n      ERROR_CODES[\"INVALID_ANNOTATION\"] = \"invalid annotation\";\n    })(exports.ERROR_CODES || (exports.ERROR_CODES = {}));\n  })(ErrorCoded);\n  return ErrorCoded;\n}\nvar FetchDocumentLoader = {};\nvar link;\nvar hasRequiredLink;\nfunction requireLink() {\n  if (hasRequiredLink) return link;\n  hasRequiredLink = 1;\n  var COMPATIBLE_ENCODING_PATTERN = /^utf-?8|ascii|utf-?16-?le|ucs-?2|base-?64|latin-?1$/i;\n  var WS_TRIM_PATTERN = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n  var WS_CHAR_PATTERN = /\\s|\\uFEFF|\\xA0/;\n  var WS_FOLD_PATTERN = /\\r?\\n[\\x20\\x09]+/g;\n  var DELIMITER_PATTERN = /[;,\"]/;\n  var WS_DELIMITER_PATTERN = /[;,\"]|\\s/;\n  var TOKEN_PATTERN = /^[!#$%&'*+\\-\\.^_`|~\\da-zA-Z]+$/;\n  var STATE = {\n    IDLE: 1 << 0,\n    URI: 1 << 1,\n    ATTR: 1 << 2\n  };\n  function trim(value) {\n    return value.replace(WS_TRIM_PATTERN, \"\");\n  }\n  function hasWhitespace(value) {\n    return WS_CHAR_PATTERN.test(value);\n  }\n  function skipWhitespace(value, offset) {\n    while (hasWhitespace(value[offset])) {\n      offset++;\n    }\n    return offset;\n  }\n  function needsQuotes(value) {\n    return WS_DELIMITER_PATTERN.test(value) || !TOKEN_PATTERN.test(value);\n  }\n  function shallowCompareObjects(object1, object2) {\n    return Object.keys(object1).length === Object.keys(object2).length && Object.keys(object1).every(\n      (key) => key in object2 && object1[key] === object2[key]\n    );\n  }\n  class Link {\n    /**\n     * Link\n     * @constructor\n     * @param {String} [value]\n     * @returns {Link}\n     */\n    constructor(value) {\n      this.refs = [];\n      if (value) {\n        this.parse(value);\n      }\n    }\n    /**\n     * Get refs with given relation type\n     * @param {String} value\n     * @returns {Array<Object>}\n     */\n    rel(value) {\n      var links = [];\n      var type = value.toLowerCase();\n      for (var i = 0; i < this.refs.length; i++) {\n        if (typeof this.refs[i].rel === \"string\" && this.refs[i].rel.toLowerCase() === type) {\n          links.push(this.refs[i]);\n        }\n      }\n      return links;\n    }\n    /**\n     * Get refs where given attribute has a given value\n     * @param {String} attr\n     * @param {String} value\n     * @returns {Array<Object>}\n     */\n    get(attr, value) {\n      attr = attr.toLowerCase();\n      value = value.toLowerCase();\n      var links = [];\n      for (var i = 0; i < this.refs.length; i++) {\n        if (typeof this.refs[i][attr] === \"string\" && this.refs[i][attr].toLowerCase() === value) {\n          links.push(this.refs[i]);\n        }\n      }\n      return links;\n    }\n    /** Sets a reference. */\n    set(link2) {\n      this.refs.push(link2);\n      return this;\n    }\n    /**\n     * Sets a reference if a reference with similar properties isn’t already set.\n     */\n    setUnique(link2) {\n      if (!this.refs.some((ref) => shallowCompareObjects(ref, link2))) {\n        this.refs.push(link2);\n      }\n      return this;\n    }\n    has(attr, value) {\n      attr = attr.toLowerCase();\n      value = value.toLowerCase();\n      for (var i = 0; i < this.refs.length; i++) {\n        if (typeof this.refs[i][attr] === \"string\" && this.refs[i][attr].toLowerCase() === value) {\n          return true;\n        }\n      }\n      return false;\n    }\n    parse(value, offset) {\n      offset = offset || 0;\n      value = offset ? value.slice(offset) : value;\n      value = trim(value).replace(WS_FOLD_PATTERN, \"\");\n      var state = STATE.IDLE;\n      var length = value.length;\n      var offset = 0;\n      var ref = null;\n      while (offset < length) {\n        if (state === STATE.IDLE) {\n          if (hasWhitespace(value[offset])) {\n            offset++;\n            continue;\n          } else if (value[offset] === \"<\") {\n            if (ref != null) {\n              ref.rel != null ? this.refs.push(...Link.expandRelations(ref)) : this.refs.push(ref);\n            }\n            var end = value.indexOf(\">\", offset);\n            if (end === -1) throw new Error(\"Expected end of URI delimiter at offset \" + offset);\n            ref = { uri: value.slice(offset + 1, end) };\n            offset = end;\n            state = STATE.URI;\n          } else {\n            throw new Error('Unexpected character \"' + value[offset] + '\" at offset ' + offset);\n          }\n          offset++;\n        } else if (state === STATE.URI) {\n          if (hasWhitespace(value[offset])) {\n            offset++;\n            continue;\n          } else if (value[offset] === \";\") {\n            state = STATE.ATTR;\n            offset++;\n          } else if (value[offset] === \",\") {\n            state = STATE.IDLE;\n            offset++;\n          } else {\n            throw new Error('Unexpected character \"' + value[offset] + '\" at offset ' + offset);\n          }\n        } else if (state === STATE.ATTR) {\n          if (value[offset] === \";\" || hasWhitespace(value[offset])) {\n            offset++;\n            continue;\n          }\n          var end = value.indexOf(\"=\", offset);\n          if (end === -1) end = value.indexOf(\";\", offset);\n          if (end === -1) end = value.length;\n          var attr = trim(value.slice(offset, end)).toLowerCase();\n          var attrValue = \"\";\n          offset = end + 1;\n          offset = skipWhitespace(value, offset);\n          if (value[offset] === '\"') {\n            offset++;\n            while (offset < length) {\n              if (value[offset] === '\"') {\n                offset++;\n                break;\n              }\n              if (value[offset] === \"\\\\\") {\n                offset++;\n              }\n              attrValue += value[offset];\n              offset++;\n            }\n          } else {\n            var end = offset + 1;\n            while (!DELIMITER_PATTERN.test(value[end]) && end < length) {\n              end++;\n            }\n            attrValue = value.slice(offset, end);\n            offset = end;\n          }\n          if (ref[attr] && Link.isSingleOccurenceAttr(attr)) ;\n          else if (attr[attr.length - 1] === \"*\") {\n            ref[attr] = Link.parseExtendedValue(attrValue);\n          } else {\n            attrValue = attr === \"type\" ? attrValue.toLowerCase() : attrValue;\n            if (ref[attr] != null) {\n              if (Array.isArray(ref[attr])) {\n                ref[attr].push(attrValue);\n              } else {\n                ref[attr] = [ref[attr], attrValue];\n              }\n            } else {\n              ref[attr] = attrValue;\n            }\n          }\n          switch (value[offset]) {\n            case \",\":\n              state = STATE.IDLE;\n              break;\n            case \";\":\n              state = STATE.ATTR;\n              break;\n          }\n          offset++;\n        } else {\n          throw new Error('Unknown parser state \"' + state + '\"');\n        }\n      }\n      if (ref != null) {\n        ref.rel != null ? this.refs.push(...Link.expandRelations(ref)) : this.refs.push(ref);\n      }\n      ref = null;\n      return this;\n    }\n    toString() {\n      var refs = [];\n      var link2 = \"\";\n      var ref = null;\n      for (var i = 0; i < this.refs.length; i++) {\n        ref = this.refs[i];\n        link2 = Object.keys(this.refs[i]).reduce(function(link3, attr) {\n          if (attr === \"uri\") return link3;\n          return link3 + \"; \" + Link.formatAttribute(attr, ref[attr]);\n        }, \"<\" + ref.uri + \">\");\n        refs.push(link2);\n      }\n      return refs.join(\", \");\n    }\n  }\n  Link.isCompatibleEncoding = function(value) {\n    return COMPATIBLE_ENCODING_PATTERN.test(value);\n  };\n  Link.parse = function(value, offset) {\n    return new Link().parse(value, offset);\n  };\n  Link.isSingleOccurenceAttr = function(attr) {\n    return attr === \"rel\" || attr === \"type\" || attr === \"media\" || attr === \"title\" || attr === \"title*\";\n  };\n  Link.isTokenAttr = function(attr) {\n    return attr === \"rel\" || attr === \"type\" || attr === \"anchor\";\n  };\n  Link.escapeQuotes = function(value) {\n    return value.replace(/\"/g, '\\\\\"');\n  };\n  Link.expandRelations = function(ref) {\n    var rels = ref.rel.split(\" \");\n    return rels.map(function(rel) {\n      var value = Object.assign({}, ref);\n      value.rel = rel;\n      return value;\n    });\n  };\n  Link.parseExtendedValue = function(value) {\n    var parts = /([^']+)?(?:'([^']*)')?(.+)/.exec(value);\n    return {\n      language: parts[2].toLowerCase(),\n      encoding: Link.isCompatibleEncoding(parts[1]) ? null : parts[1].toLowerCase(),\n      value: Link.isCompatibleEncoding(parts[1]) ? decodeURIComponent(parts[3]) : parts[3]\n    };\n  };\n  Link.formatExtendedAttribute = function(attr, data) {\n    var encoding = (data.encoding || \"utf-8\").toUpperCase();\n    var language = data.language || \"en\";\n    var encodedValue = \"\";\n    if (Buffer.isBuffer(data.value) && Link.isCompatibleEncoding(encoding)) {\n      encodedValue = data.value.toString(encoding);\n    } else if (Buffer.isBuffer(data.value)) {\n      encodedValue = data.value.toString(\"hex\").replace(/[0-9a-f]{2}/gi, \"%$1\");\n    } else {\n      encodedValue = encodeURIComponent(data.value);\n    }\n    return attr + \"=\" + encoding + \"'\" + language + \"'\" + encodedValue;\n  };\n  Link.formatAttribute = function(attr, value) {\n    if (Array.isArray(value)) {\n      return value.map((item) => {\n        return Link.formatAttribute(attr, item);\n      }).join(\"; \");\n    }\n    if (attr[attr.length - 1] === \"*\" || typeof value !== \"string\") {\n      return Link.formatExtendedAttribute(attr, value);\n    }\n    if (Link.isTokenAttr(attr)) {\n      value = needsQuotes(value) ? '\"' + Link.escapeQuotes(value) + '\"' : Link.escapeQuotes(value);\n    } else if (needsQuotes(value)) {\n      value = encodeURIComponent(value);\n      value = value.replace(/%20/g, \" \").replace(/%2C/g, \",\").replace(/%3B/g, \";\");\n      value = '\"' + value + '\"';\n    }\n    return attr + \"=\" + value;\n  };\n  link = Link;\n  return link;\n}\nvar hasRequiredFetchDocumentLoader;\nfunction requireFetchDocumentLoader() {\n  if (hasRequiredFetchDocumentLoader) return FetchDocumentLoader;\n  hasRequiredFetchDocumentLoader = 1;\n  Object.defineProperty(FetchDocumentLoader, \"__esModule\", { value: true });\n  FetchDocumentLoader.FetchDocumentLoader = void 0;\n  const ErrorCoded_1 = /* @__PURE__ */ requireErrorCoded();\n  const http_link_header_1 = requireLink();\n  const relative_to_absolute_iri_1 = requireRelativeToAbsoluteIri();\n  let FetchDocumentLoader$1 = class FetchDocumentLoader {\n    constructor(fetcher) {\n      this.fetcher = fetcher;\n    }\n    async load(url) {\n      const response = await (this.fetcher || fetch)(url, { headers: new Headers({ accept: \"application/ld+json\" }) });\n      if (response.ok && response.headers) {\n        let mediaType = response.headers.get(\"Content-Type\");\n        if (mediaType) {\n          const colonPos = mediaType.indexOf(\";\");\n          if (colonPos > 0) {\n            mediaType = mediaType.substr(0, colonPos);\n          }\n        }\n        if (mediaType === \"application/ld+json\") {\n          return await response.json();\n        } else {\n          if (response.headers.has(\"Link\")) {\n            let alternateUrl;\n            response.headers.forEach((value, key) => {\n              if (key === \"link\") {\n                const linkHeader = (0, http_link_header_1.parse)(value);\n                for (const link2 of linkHeader.get(\"type\", \"application/ld+json\")) {\n                  if (link2.rel === \"alternate\") {\n                    if (alternateUrl) {\n                      throw new Error(\"Multiple JSON-LD alternate links were found on \" + url);\n                    }\n                    alternateUrl = (0, relative_to_absolute_iri_1.resolve)(link2.uri, url);\n                  }\n                }\n              }\n            });\n            if (alternateUrl) {\n              return this.load(alternateUrl);\n            }\n          }\n          throw new ErrorCoded_1.ErrorCoded(`Unsupported JSON-LD media type ${mediaType}`, ErrorCoded_1.ERROR_CODES.LOADING_DOCUMENT_FAILED);\n        }\n      } else {\n        throw new Error(response.statusText || `Status code: ${response.status}`);\n      }\n    }\n  };\n  FetchDocumentLoader.FetchDocumentLoader = FetchDocumentLoader$1;\n  return FetchDocumentLoader;\n}\nvar JsonLdContextNormalized = {};\nvar Util = {};\nvar hasRequiredUtil;\nfunction requireUtil() {\n  if (hasRequiredUtil) return Util;\n  hasRequiredUtil = 1;\n  Object.defineProperty(Util, \"__esModule\", { value: true });\n  Util.Util = void 0;\n  let Util$1 = class Util2 {\n    /**\n     * Check if the given term is a valid compact IRI.\n     * Otherwise, it may be an IRI.\n     * @param {string} term A term.\n     * @return {boolean} If it is a compact IRI.\n     */\n    static isCompactIri(term) {\n      return term.indexOf(\":\") > 0 && !(term && term[0] === \"#\");\n    }\n    /**\n     * Get the prefix from the given term.\n     * @see https://json-ld.org/spec/latest/json-ld/#compact-iris\n     * @param {string} term A term that is an URL or a prefixed URL.\n     * @param {IJsonLdContextNormalizedRaw} context A context.\n     * @return {string} The prefix or null.\n     */\n    static getPrefix(term, context) {\n      if (term && term[0] === \"#\") {\n        return null;\n      }\n      const separatorPos = term.indexOf(\":\");\n      if (separatorPos >= 0) {\n        if (term.length > separatorPos + 1 && term.charAt(separatorPos + 1) === \"/\" && term.charAt(separatorPos + 2) === \"/\") {\n          return null;\n        }\n        const prefix = term.substr(0, separatorPos);\n        if (prefix === \"_\") {\n          return null;\n        }\n        if (context[prefix]) {\n          return prefix;\n        }\n      }\n      return null;\n    }\n    /**\n     * From a given context entry value, get the string value, or the @id field.\n     * @param contextValue A value for a term in a context.\n     * @return {string} The id value, or null.\n     */\n    static getContextValueId(contextValue) {\n      if (contextValue === null || typeof contextValue === \"string\") {\n        return contextValue;\n      }\n      const id = contextValue[\"@id\"];\n      return id ? id : null;\n    }\n    /**\n     * Check if the given simple term definition (string-based value of a context term)\n     * should be considered a prefix.\n     * @param value A simple term definition value.\n     * @param options Options that define the way how expansion must be done.\n     */\n    static isSimpleTermDefinitionPrefix(value, options) {\n      return !Util2.isPotentialKeyword(value) && (options.allowPrefixNonGenDelims || typeof value === \"string\" && (value[0] === \"_\" || Util2.isPrefixIriEndingWithGenDelim(value)));\n    }\n    /**\n     * Check if the given keyword is of the keyword format \"@\"1*ALPHA.\n     * @param {string} keyword A potential keyword.\n     * @return {boolean} If the given keyword is of the keyword format.\n     */\n    static isPotentialKeyword(keyword) {\n      return typeof keyword === \"string\" && Util2.KEYWORD_REGEX.test(keyword);\n    }\n    /**\n     * Check if the given prefix ends with a gen-delim character.\n     * @param {string} prefixIri A prefix IRI.\n     * @return {boolean} If the given prefix IRI is valid.\n     */\n    static isPrefixIriEndingWithGenDelim(prefixIri) {\n      return Util2.ENDS_WITH_GEN_DELIM.test(prefixIri);\n    }\n    /**\n     * Check if the given context value can be a prefix value.\n     * @param value A context value.\n     * @return {boolean} If it can be a prefix value.\n     */\n    static isPrefixValue(value) {\n      return value && (typeof value === \"string\" || value && typeof value === \"object\");\n    }\n    /**\n     * Check if the given IRI is valid.\n     * @param {string} iri A potential IRI.\n     * @return {boolean} If the given IRI is valid.\n     */\n    static isValidIri(iri) {\n      return Boolean(iri && Util2.IRI_REGEX.test(iri));\n    }\n    /**\n     * Check if the given IRI is valid, this includes the possibility of being a relative IRI.\n     * @param {string} iri A potential IRI.\n     * @return {boolean} If the given IRI is valid.\n     */\n    static isValidIriWeak(iri) {\n      return !!iri && iri[0] !== \":\" && Util2.IRI_REGEX_WEAK.test(iri);\n    }\n    /**\n     * Check if the given keyword is a defined according to the JSON-LD specification.\n     * @param {string} keyword A potential keyword.\n     * @return {boolean} If the given keyword is valid.\n     */\n    static isValidKeyword(keyword) {\n      return Util2.VALID_KEYWORDS[keyword];\n    }\n    /**\n     * Check if the given term is protected in the context.\n     * @param {IJsonLdContextNormalizedRaw} context A context.\n     * @param {string} key A context term.\n     * @return {boolean} If the given term has an @protected flag.\n     */\n    static isTermProtected(context, key) {\n      const value = context[key];\n      return !(typeof value === \"string\") && value && value[\"@protected\"];\n    }\n    /**\n     * Check if the given context has at least one protected term.\n     * @param context A context.\n     * @return If the context has a protected term.\n     */\n    static hasProtectedTerms(context) {\n      for (const key of Object.keys(context)) {\n        if (Util2.isTermProtected(context, key)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    /**\n     * Check if the given key is an internal reserved keyword.\n     * @param key A context key.\n     */\n    static isReservedInternalKeyword(key) {\n      return key.startsWith(\"@__\");\n    }\n    /**\n     * Check if two objects are deepEqual to on another.\n     * @param object1 The first object to test.\n     * @param object2 The second object to test.\n     */\n    static deepEqual(object1, object2) {\n      const objKeys1 = Object.keys(object1);\n      const objKeys2 = Object.keys(object2);\n      if (objKeys1.length !== objKeys2.length)\n        return false;\n      return objKeys1.every((key) => {\n        const value1 = object1[key];\n        const value2 = object2[key];\n        return value1 === value2 || value1 !== null && value2 !== null && typeof value1 === \"object\" && typeof value2 === \"object\" && this.deepEqual(value1, value2);\n      });\n    }\n  };\n  Util$1.IRI_REGEX = /^([A-Za-z][A-Za-z0-9+-.]*|_):[^ \"<>{}|\\\\\\[\\]`#]*(#[^#]*)?$/;\n  Util$1.IRI_REGEX_WEAK = /(?::[^:])|\\//;\n  Util$1.KEYWORD_REGEX = /^@[a-z]+$/i;\n  Util$1.ENDS_WITH_GEN_DELIM = /[:/?#\\[\\]@]$/;\n  Util$1.REGEX_LANGUAGE_TAG = /^[a-zA-Z]+(-[a-zA-Z0-9]+)*$/;\n  Util$1.REGEX_DIRECTION_TAG = /^(ltr)|(rtl)$/;\n  Util$1.VALID_KEYWORDS = {\n    \"@annotation\": true,\n    \"@base\": true,\n    \"@container\": true,\n    \"@context\": true,\n    \"@direction\": true,\n    \"@graph\": true,\n    \"@id\": true,\n    \"@import\": true,\n    \"@included\": true,\n    \"@index\": true,\n    \"@json\": true,\n    \"@language\": true,\n    \"@list\": true,\n    \"@nest\": true,\n    \"@none\": true,\n    \"@prefix\": true,\n    \"@propagate\": true,\n    \"@protected\": true,\n    \"@reverse\": true,\n    \"@set\": true,\n    \"@type\": true,\n    \"@value\": true,\n    \"@version\": true,\n    \"@vocab\": true\n  };\n  Util$1.EXPAND_KEYS_BLACKLIST = [\n    \"@base\",\n    \"@vocab\",\n    \"@language\",\n    \"@version\",\n    \"@direction\"\n  ];\n  Util$1.ALIAS_DOMAIN_BLACKLIST = [\n    \"@container\",\n    \"@graph\",\n    \"@id\",\n    \"@index\",\n    \"@list\",\n    \"@nest\",\n    \"@none\",\n    \"@prefix\",\n    \"@reverse\",\n    \"@set\",\n    \"@type\",\n    \"@value\",\n    \"@version\"\n  ];\n  Util$1.ALIAS_RANGE_BLACKLIST = [\n    \"@context\",\n    \"@preserve\"\n  ];\n  Util$1.CONTAINERS = [\n    \"@list\",\n    \"@set\",\n    \"@index\",\n    \"@language\",\n    \"@graph\",\n    \"@id\",\n    \"@type\"\n  ];\n  Util$1.CONTAINERS_1_0 = [\n    \"@list\",\n    \"@set\",\n    \"@index\"\n  ];\n  Util.Util = Util$1;\n  return Util;\n}\nvar hasRequiredJsonLdContextNormalized;\nfunction requireJsonLdContextNormalized() {\n  if (hasRequiredJsonLdContextNormalized) return JsonLdContextNormalized;\n  hasRequiredJsonLdContextNormalized = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.defaultExpandOptions = exports.JsonLdContextNormalized = void 0;\n    const relative_to_absolute_iri_1 = requireRelativeToAbsoluteIri();\n    const ErrorCoded_1 = /* @__PURE__ */ requireErrorCoded();\n    const Util_1 = /* @__PURE__ */ requireUtil();\n    class JsonLdContextNormalized2 {\n      constructor(contextRaw) {\n        this.contextRaw = contextRaw;\n      }\n      /**\n       * @return The raw inner context.\n       */\n      getContextRaw() {\n        return this.contextRaw;\n      }\n      /**\n       * Expand the term or prefix of the given term if it has one,\n       * otherwise return the term as-is.\n       *\n       * This will try to expand the IRI as much as possible.\n       *\n       * Iff in vocab-mode, then other references to other terms in the context can be used,\n       * such as to `myTerm`:\n       * ```\n       * {\n       *   \"myTerm\": \"http://example.org/myLongTerm\"\n       * }\n       * ```\n       *\n       * @param {string} term A term that is an URL or a prefixed URL.\n       * @param {boolean} expandVocab If the term is a predicate or type and should be expanded based on @vocab,\n       *                              otherwise it is considered a regular term that is expanded based on @base.\n       * @param {IExpandOptions} options Options that define the way how expansion must be done.\n       * @return {string} The expanded term, the term as-is, or null if it was explicitly disabled in the context.\n       * @throws If the term is aliased to an invalid value (not a string, IRI or keyword).\n       */\n      expandTerm(term, expandVocab, options = exports.defaultExpandOptions) {\n        const contextValue = this.contextRaw[term];\n        if (contextValue === null || contextValue && contextValue[\"@id\"] === null) {\n          return null;\n        }\n        let validIriMapping = true;\n        if (contextValue && expandVocab) {\n          const value = Util_1.Util.getContextValueId(contextValue);\n          if (value && value !== term) {\n            if (typeof value !== \"string\" || !Util_1.Util.isValidIri(value) && !Util_1.Util.isValidKeyword(value)) {\n              if (!Util_1.Util.isPotentialKeyword(value)) {\n                validIriMapping = false;\n              }\n            } else {\n              return value;\n            }\n          }\n        }\n        const prefix = Util_1.Util.getPrefix(term, this.contextRaw);\n        const vocab = this.contextRaw[\"@vocab\"];\n        const vocabRelative = (!!vocab || vocab === \"\") && vocab.indexOf(\":\") < 0;\n        const base = this.contextRaw[\"@base\"];\n        const potentialKeyword = Util_1.Util.isPotentialKeyword(term);\n        if (prefix) {\n          const contextPrefixValue = this.contextRaw[prefix];\n          const value = Util_1.Util.getContextValueId(contextPrefixValue);\n          if (value) {\n            if (typeof contextPrefixValue === \"string\" || !options.allowPrefixForcing) {\n              if (!Util_1.Util.isSimpleTermDefinitionPrefix(value, options)) {\n                return term;\n              }\n            } else {\n              if (value[0] !== \"_\" && !potentialKeyword && !contextPrefixValue[\"@prefix\"] && !(term in this.contextRaw)) {\n                return term;\n              }\n            }\n            return value + term.substr(prefix.length + 1);\n          }\n        } else if (expandVocab && (vocab || vocab === \"\" || options.allowVocabRelativeToBase && (base && vocabRelative)) && !potentialKeyword && !Util_1.Util.isCompactIri(term)) {\n          if (vocabRelative) {\n            if (options.allowVocabRelativeToBase) {\n              return (vocab || base ? (0, relative_to_absolute_iri_1.resolve)(vocab, base) : \"\") + term;\n            } else {\n              throw new ErrorCoded_1.ErrorCoded(`Relative vocab expansion for term '${term}' with vocab '${vocab}' is not allowed.`, ErrorCoded_1.ERROR_CODES.INVALID_VOCAB_MAPPING);\n            }\n          } else {\n            return vocab + term;\n          }\n        } else if (!expandVocab && base && !potentialKeyword && !Util_1.Util.isCompactIri(term)) {\n          return (0, relative_to_absolute_iri_1.resolve)(term, base);\n        }\n        if (validIriMapping) {\n          return term;\n        } else {\n          throw new ErrorCoded_1.ErrorCoded(`Invalid IRI mapping found for context entry '${term}': '${JSON.stringify(contextValue)}'`, ErrorCoded_1.ERROR_CODES.INVALID_IRI_MAPPING);\n        }\n      }\n      /**\n       * Compact the given term using @base, @vocab, an aliased term, or a prefixed term.\n       *\n       * This will try to compact the IRI as much as possible.\n       *\n       * @param {string} iri An IRI to compact.\n       * @param {boolean} vocab If the term is a predicate or type and should be compacted based on @vocab,\n       *                        otherwise it is considered a regular term that is compacted based on @base.\n       * @return {string} The compacted term or the IRI as-is.\n       */\n      compactIri(iri, vocab) {\n        if (vocab && this.contextRaw[\"@vocab\"] && iri.startsWith(this.contextRaw[\"@vocab\"])) {\n          return iri.substr(this.contextRaw[\"@vocab\"].length);\n        }\n        if (!vocab && this.contextRaw[\"@base\"] && iri.startsWith(this.contextRaw[\"@base\"])) {\n          return iri.substr(this.contextRaw[\"@base\"].length);\n        }\n        const shortestPrefixing = { prefix: \"\", suffix: iri };\n        for (const key in this.contextRaw) {\n          const value = this.contextRaw[key];\n          if (value && !Util_1.Util.isPotentialKeyword(key)) {\n            const contextIri = Util_1.Util.getContextValueId(value);\n            if (iri.startsWith(contextIri)) {\n              const suffix = iri.substr(contextIri.length);\n              if (!suffix) {\n                if (vocab) {\n                  return key;\n                }\n              } else if (suffix.length < shortestPrefixing.suffix.length) {\n                shortestPrefixing.prefix = key;\n                shortestPrefixing.suffix = suffix;\n              }\n            }\n          }\n        }\n        if (shortestPrefixing.prefix) {\n          return shortestPrefixing.prefix + \":\" + shortestPrefixing.suffix;\n        }\n        return iri;\n      }\n    }\n    exports.JsonLdContextNormalized = JsonLdContextNormalized2;\n    exports.defaultExpandOptions = {\n      allowPrefixForcing: true,\n      allowPrefixNonGenDelims: false,\n      allowVocabRelativeToBase: true\n    };\n  })(JsonLdContextNormalized);\n  return JsonLdContextNormalized;\n}\nvar hasRequiredContextParser;\nfunction requireContextParser() {\n  if (hasRequiredContextParser) return ContextParser;\n  hasRequiredContextParser = 1;\n  Object.defineProperty(ContextParser, \"__esModule\", { value: true });\n  ContextParser.ContextParser = void 0;\n  const relative_to_absolute_iri_1 = requireRelativeToAbsoluteIri();\n  const ErrorCoded_1 = /* @__PURE__ */ requireErrorCoded();\n  const FetchDocumentLoader_1 = /* @__PURE__ */ requireFetchDocumentLoader();\n  const JsonLdContextNormalized_1 = /* @__PURE__ */ requireJsonLdContextNormalized();\n  const Util_1 = /* @__PURE__ */ requireUtil();\n  let ContextParser$1 = class ContextParser2 {\n    constructor(options) {\n      options = options || {};\n      this.documentLoader = options.documentLoader || new FetchDocumentLoader_1.FetchDocumentLoader();\n      this.documentCache = {};\n      this.validateContext = !options.skipValidation;\n      this.expandContentTypeToBase = !!options.expandContentTypeToBase;\n      this.remoteContextsDepthLimit = options.remoteContextsDepthLimit || 32;\n      this.redirectSchemaOrgHttps = \"redirectSchemaOrgHttps\" in options ? !!options.redirectSchemaOrgHttps : true;\n    }\n    /**\n     * Validate the given @language value.\n     * An error will be thrown if it is invalid.\n     * @param value An @language value.\n     * @param {boolean} strictRange If the string value should be strictly checked against a regex.\n     * @param {string} errorCode The error code to emit on errors.\n     * @return {boolean} If validation passed.\n     *                   Can only be false if strictRange is false and the string value did not pass the regex.\n     */\n    static validateLanguage(value, strictRange, errorCode) {\n      if (typeof value !== \"string\") {\n        throw new ErrorCoded_1.ErrorCoded(`The value of an '@language' must be a string, got '${JSON.stringify(value)}'`, errorCode);\n      }\n      if (!Util_1.Util.REGEX_LANGUAGE_TAG.test(value)) {\n        if (strictRange) {\n          throw new ErrorCoded_1.ErrorCoded(`The value of an '@language' must be a valid language tag, got '${JSON.stringify(value)}'`, errorCode);\n        } else {\n          return false;\n        }\n      }\n      return true;\n    }\n    /**\n     * Validate the given @direction value.\n     * An error will be thrown if it is invalid.\n     * @param value An @direction value.\n     * @param {boolean} strictValues If the string value should be strictly checked against a regex.\n     * @return {boolean} If validation passed.\n     *                   Can only be false if strictRange is false and the string value did not pass the regex.\n     */\n    static validateDirection(value, strictValues) {\n      if (typeof value !== \"string\") {\n        throw new ErrorCoded_1.ErrorCoded(`The value of an '@direction' must be a string, got '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.INVALID_BASE_DIRECTION);\n      }\n      if (!Util_1.Util.REGEX_DIRECTION_TAG.test(value)) {\n        if (strictValues) {\n          throw new ErrorCoded_1.ErrorCoded(`The value of an '@direction' must be 'ltr' or 'rtl', got '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.INVALID_BASE_DIRECTION);\n        } else {\n          return false;\n        }\n      }\n      return true;\n    }\n    /**\n     * Add an @id term for all @reverse terms.\n     * @param {IJsonLdContextNormalizedRaw} context A context.\n     * @return {IJsonLdContextNormalizedRaw} The mutated input context.\n     */\n    idifyReverseTerms(context) {\n      for (const key of Object.keys(context)) {\n        let value = context[key];\n        if (value && typeof value === \"object\") {\n          if (value[\"@reverse\"] && !value[\"@id\"]) {\n            if (typeof value[\"@reverse\"] !== \"string\" || Util_1.Util.isValidKeyword(value[\"@reverse\"])) {\n              throw new ErrorCoded_1.ErrorCoded(`Invalid @reverse value, must be absolute IRI or blank node: '${value[\"@reverse\"]}'`, ErrorCoded_1.ERROR_CODES.INVALID_IRI_MAPPING);\n            }\n            value = context[key] = Object.assign(Object.assign({}, value), { \"@id\": value[\"@reverse\"] });\n            value[\"@id\"] = value[\"@reverse\"];\n            if (Util_1.Util.isPotentialKeyword(value[\"@reverse\"])) {\n              delete value[\"@reverse\"];\n            } else {\n              value[\"@reverse\"] = true;\n            }\n          }\n        }\n      }\n      return context;\n    }\n    /**\n     * Expand all prefixed terms in the given context.\n     * @param {IJsonLdContextNormalizedRaw} context A context.\n     * @param {boolean} expandContentTypeToBase If @type inside the context may be expanded\n     *                                          via @base if @vocab is set to null.\n     * @param {string[]} keys Optional set of keys from the context to expand. If left undefined, all\n     * keys in the context will be expanded.\n     */\n    expandPrefixedTerms(context, expandContentTypeToBase, keys) {\n      const contextRaw = context.getContextRaw();\n      for (const key of keys || Object.keys(contextRaw)) {\n        if (Util_1.Util.EXPAND_KEYS_BLACKLIST.indexOf(key) < 0 && !Util_1.Util.isReservedInternalKeyword(key)) {\n          const keyValue = contextRaw[key];\n          if (Util_1.Util.isPotentialKeyword(key) && Util_1.Util.ALIAS_DOMAIN_BLACKLIST.indexOf(key) >= 0) {\n            if (key !== \"@type\" || typeof contextRaw[key] === \"object\" && !(contextRaw[key][\"@protected\"] || contextRaw[key][\"@container\"] === \"@set\")) {\n              throw new ErrorCoded_1.ErrorCoded(`Keywords can not be aliased to something else.\nTried mapping ${key} to ${JSON.stringify(keyValue)}`, ErrorCoded_1.ERROR_CODES.KEYWORD_REDEFINITION);\n            }\n          }\n          if (Util_1.Util.ALIAS_RANGE_BLACKLIST.indexOf(Util_1.Util.getContextValueId(keyValue)) >= 0) {\n            throw new ErrorCoded_1.ErrorCoded(`Aliasing to certain keywords is not allowed.\nTried mapping ${key} to ${JSON.stringify(keyValue)}`, ErrorCoded_1.ERROR_CODES.INVALID_KEYWORD_ALIAS);\n          }\n          if (keyValue && Util_1.Util.isPotentialKeyword(Util_1.Util.getContextValueId(keyValue)) && keyValue[\"@prefix\"] === true) {\n            throw new ErrorCoded_1.ErrorCoded(`Tried to use keyword aliases as prefix: '${key}': '${JSON.stringify(keyValue)}'`, ErrorCoded_1.ERROR_CODES.INVALID_TERM_DEFINITION);\n          }\n          while (Util_1.Util.isPrefixValue(contextRaw[key])) {\n            const value = contextRaw[key];\n            let changed = false;\n            if (typeof value === \"string\") {\n              contextRaw[key] = context.expandTerm(value, true);\n              changed = changed || value !== contextRaw[key];\n            } else {\n              const id = value[\"@id\"];\n              const type = value[\"@type\"];\n              const canAddIdEntry = !(\"@prefix\" in value) || Util_1.Util.isValidIri(key);\n              if (\"@id\" in value) {\n                if (id !== void 0 && id !== null && typeof id === \"string\") {\n                  contextRaw[key] = Object.assign(Object.assign({}, contextRaw[key]), { \"@id\": context.expandTerm(id, true) });\n                  changed = changed || id !== contextRaw[key][\"@id\"];\n                }\n              } else if (!Util_1.Util.isPotentialKeyword(key) && canAddIdEntry) {\n                const newId = context.expandTerm(key, true);\n                if (newId !== key) {\n                  contextRaw[key] = Object.assign(Object.assign({}, contextRaw[key]), { \"@id\": newId });\n                  changed = true;\n                }\n              }\n              if (type && typeof type === \"string\" && type !== \"@vocab\" && (!value[\"@container\"] || !value[\"@container\"][\"@type\"]) && canAddIdEntry) {\n                let expandedType = context.expandTerm(type, true);\n                if (expandContentTypeToBase && type === expandedType) {\n                  expandedType = context.expandTerm(type, false);\n                }\n                if (expandedType !== type) {\n                  changed = true;\n                  contextRaw[key] = Object.assign(Object.assign({}, contextRaw[key]), { \"@type\": expandedType });\n                }\n              }\n            }\n            if (!changed) {\n              break;\n            }\n          }\n        }\n      }\n    }\n    /**\n     * Normalize the @language entries in the given context to lowercase.\n     * @param {IJsonLdContextNormalizedRaw} context A context.\n     * @param {IParseOptions} parseOptions The parsing options.\n     */\n    normalize(context, { processingMode, normalizeLanguageTags }) {\n      if (normalizeLanguageTags || processingMode === 1) {\n        for (const key of Object.keys(context)) {\n          if (key === \"@language\" && typeof context[key] === \"string\") {\n            context[key] = context[key].toLowerCase();\n          } else {\n            const value = context[key];\n            if (value && typeof value === \"object\") {\n              if (typeof value[\"@language\"] === \"string\") {\n                const lowercase = value[\"@language\"].toLowerCase();\n                if (lowercase !== value[\"@language\"]) {\n                  context[key] = Object.assign(Object.assign({}, value), { \"@language\": lowercase });\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    /**\n     * Convert all @container strings and array values to hash-based values.\n     * @param {IJsonLdContextNormalizedRaw} context A context.\n     */\n    containersToHash(context) {\n      for (const key of Object.keys(context)) {\n        const value = context[key];\n        if (value && typeof value === \"object\") {\n          if (typeof value[\"@container\"] === \"string\") {\n            context[key] = Object.assign(Object.assign({}, value), { \"@container\": { [value[\"@container\"]]: true } });\n          } else if (Array.isArray(value[\"@container\"])) {\n            const newValue = {};\n            for (const containerValue of value[\"@container\"]) {\n              newValue[containerValue] = true;\n            }\n            context[key] = Object.assign(Object.assign({}, value), { \"@container\": newValue });\n          }\n        }\n      }\n    }\n    /**\n     * Normalize and apply context-level @protected terms onto each term separately.\n     * @param {IJsonLdContextNormalizedRaw} context A context.\n     * @param {number} processingMode The processing mode.\n     */\n    applyScopedProtected(context, { processingMode }, expandOptions) {\n      if (processingMode && processingMode >= 1.1) {\n        if (context[\"@protected\"]) {\n          for (const key of Object.keys(context)) {\n            if (Util_1.Util.isReservedInternalKeyword(key)) {\n              continue;\n            }\n            if (!Util_1.Util.isPotentialKeyword(key) && !Util_1.Util.isTermProtected(context, key)) {\n              const value = context[key];\n              if (value && typeof value === \"object\") {\n                if (!(\"@protected\" in context[key])) {\n                  context[key] = Object.assign(Object.assign({}, context[key]), { \"@protected\": true });\n                }\n              } else {\n                context[key] = {\n                  \"@id\": value,\n                  \"@protected\": true\n                };\n                if (Util_1.Util.isSimpleTermDefinitionPrefix(value, expandOptions)) {\n                  context[key] = Object.assign(Object.assign({}, context[key]), { \"@prefix\": true });\n                }\n              }\n            }\n          }\n          delete context[\"@protected\"];\n        }\n      }\n    }\n    /**\n     * Check if the given context inheritance does not contain any overrides of protected terms.\n     * @param {IJsonLdContextNormalizedRaw} contextBefore The context that may contain some protected terms.\n     * @param {IJsonLdContextNormalizedRaw} contextAfter A new context that is being applied on the first one.\n     * @param {IExpandOptions} expandOptions Options that are needed for any expansions during this validation.\n     * @param {string[]} keys Optional set of keys from the context to validate. If left undefined, all\n     * keys defined in contextAfter will be checked.\n     */\n    validateKeywordRedefinitions(contextBefore, contextAfter, expandOptions, keys) {\n      for (const key of keys !== null && keys !== void 0 ? keys : Object.keys(contextAfter)) {\n        if (Util_1.Util.isTermProtected(contextBefore, key)) {\n          if (typeof contextAfter[key] === \"string\") {\n            contextAfter[key] = { \"@id\": contextAfter[key], \"@protected\": true };\n          } else {\n            contextAfter[key] = Object.assign(Object.assign({}, contextAfter[key]), { \"@protected\": true });\n          }\n          if (!Util_1.Util.deepEqual(contextBefore[key], contextAfter[key])) {\n            throw new ErrorCoded_1.ErrorCoded(`Attempted to override the protected keyword ${key} from ${JSON.stringify(Util_1.Util.getContextValueId(contextBefore[key]))} to ${JSON.stringify(Util_1.Util.getContextValueId(contextAfter[key]))}`, ErrorCoded_1.ERROR_CODES.PROTECTED_TERM_REDEFINITION);\n          }\n        }\n      }\n    }\n    /**\n     * Validate the entries of the given context.\n     * @param {IJsonLdContextNormalizedRaw} context A context.\n     * @param {IParseOptions} options The parse options.\n     */\n    validate(context, { processingMode }) {\n      for (const key of Object.keys(context)) {\n        if (Util_1.Util.isReservedInternalKeyword(key)) {\n          continue;\n        }\n        if (key === \"\") {\n          throw new ErrorCoded_1.ErrorCoded(`The empty term is not allowed, got: '${key}': '${JSON.stringify(context[key])}'`, ErrorCoded_1.ERROR_CODES.INVALID_TERM_DEFINITION);\n        }\n        const value = context[key];\n        const valueType = typeof value;\n        if (Util_1.Util.isPotentialKeyword(key)) {\n          switch (key.substr(1)) {\n            case \"vocab\":\n              if (value !== null && valueType !== \"string\") {\n                throw new ErrorCoded_1.ErrorCoded(`Found an invalid @vocab IRI: ${value}`, ErrorCoded_1.ERROR_CODES.INVALID_VOCAB_MAPPING);\n              }\n              break;\n            case \"base\":\n              if (value !== null && valueType !== \"string\") {\n                throw new ErrorCoded_1.ErrorCoded(`Found an invalid @base IRI: ${context[key]}`, ErrorCoded_1.ERROR_CODES.INVALID_BASE_IRI);\n              }\n              break;\n            case \"language\":\n              if (value !== null) {\n                ContextParser2.validateLanguage(value, true, ErrorCoded_1.ERROR_CODES.INVALID_DEFAULT_LANGUAGE);\n              }\n              break;\n            case \"version\":\n              if (value !== null && valueType !== \"number\") {\n                throw new ErrorCoded_1.ErrorCoded(`Found an invalid @version number: ${value}`, ErrorCoded_1.ERROR_CODES.INVALID_VERSION_VALUE);\n              }\n              break;\n            case \"direction\":\n              if (value !== null) {\n                ContextParser2.validateDirection(value, true);\n              }\n              break;\n            case \"propagate\":\n              if (processingMode === 1) {\n                throw new ErrorCoded_1.ErrorCoded(`Found an illegal @propagate keyword: ${value}`, ErrorCoded_1.ERROR_CODES.INVALID_CONTEXT_ENTRY);\n              }\n              if (value !== null && valueType !== \"boolean\") {\n                throw new ErrorCoded_1.ErrorCoded(`Found an invalid @propagate value: ${value}`, ErrorCoded_1.ERROR_CODES.INVALID_PROPAGATE_VALUE);\n              }\n              break;\n          }\n          if (Util_1.Util.isValidKeyword(key) && Util_1.Util.isValidKeyword(Util_1.Util.getContextValueId(value))) {\n            throw new ErrorCoded_1.ErrorCoded(`Illegal keyword alias in term value, found: '${key}': '${Util_1.Util.getContextValueId(value)}'`, ErrorCoded_1.ERROR_CODES.KEYWORD_REDEFINITION);\n          }\n          continue;\n        }\n        if (value !== null) {\n          switch (valueType) {\n            case \"string\":\n              if (Util_1.Util.getPrefix(value, context) === key) {\n                throw new ErrorCoded_1.ErrorCoded(`Detected cyclical IRI mapping in context entry: '${key}': '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.CYCLIC_IRI_MAPPING);\n              }\n              if (Util_1.Util.isValidIriWeak(key)) {\n                if (value === \"@type\") {\n                  throw new ErrorCoded_1.ErrorCoded(`IRIs can not be mapped to @type, found: '${key}': '${value}'`, ErrorCoded_1.ERROR_CODES.INVALID_IRI_MAPPING);\n                } else if (Util_1.Util.isValidIri(value) && value !== new JsonLdContextNormalized_1.JsonLdContextNormalized(context).expandTerm(key)) {\n                  throw new ErrorCoded_1.ErrorCoded(`IRIs can not be mapped to other IRIs, found: '${key}': '${value}'`, ErrorCoded_1.ERROR_CODES.INVALID_IRI_MAPPING);\n                }\n              }\n              break;\n            case \"object\":\n              if (!Util_1.Util.isCompactIri(key) && !(\"@id\" in value) && (value[\"@type\"] === \"@id\" ? !context[\"@base\"] : !context[\"@vocab\"])) {\n                throw new ErrorCoded_1.ErrorCoded(`Missing @id in context entry: '${key}': '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.INVALID_IRI_MAPPING);\n              }\n              for (const objectKey of Object.keys(value)) {\n                const objectValue = value[objectKey];\n                if (!objectValue) {\n                  continue;\n                }\n                switch (objectKey) {\n                  case \"@id\":\n                    if (Util_1.Util.isValidKeyword(objectValue) && objectValue !== \"@type\" && objectValue !== \"@id\" && objectValue !== \"@graph\" && objectValue !== \"@nest\") {\n                      throw new ErrorCoded_1.ErrorCoded(`Illegal keyword alias in term value, found: '${key}': '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.INVALID_IRI_MAPPING);\n                    }\n                    if (Util_1.Util.isValidIriWeak(key)) {\n                      if (objectValue === \"@type\") {\n                        throw new ErrorCoded_1.ErrorCoded(`IRIs can not be mapped to @type, found: '${key}': '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.INVALID_IRI_MAPPING);\n                      } else if (Util_1.Util.isValidIri(objectValue) && objectValue !== new JsonLdContextNormalized_1.JsonLdContextNormalized(context).expandTerm(key)) {\n                        throw new ErrorCoded_1.ErrorCoded(`IRIs can not be mapped to other IRIs, found: '${key}': '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.INVALID_IRI_MAPPING);\n                      }\n                    }\n                    if (typeof objectValue !== \"string\") {\n                      throw new ErrorCoded_1.ErrorCoded(`Detected non-string @id in context entry: '${key}': '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.INVALID_IRI_MAPPING);\n                    }\n                    if (Util_1.Util.getPrefix(objectValue, context) === key) {\n                      throw new ErrorCoded_1.ErrorCoded(`Detected cyclical IRI mapping in context entry: '${key}': '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.CYCLIC_IRI_MAPPING);\n                    }\n                    break;\n                  case \"@type\":\n                    if (value[\"@container\"] === \"@type\" && objectValue !== \"@id\" && objectValue !== \"@vocab\") {\n                      throw new ErrorCoded_1.ErrorCoded(`@container: @type only allows @type: @id or @vocab, but got: '${key}': '${objectValue}'`, ErrorCoded_1.ERROR_CODES.INVALID_TYPE_MAPPING);\n                    }\n                    if (typeof objectValue !== \"string\") {\n                      throw new ErrorCoded_1.ErrorCoded(`The value of an '@type' must be a string, got '${JSON.stringify(valueType)}'`, ErrorCoded_1.ERROR_CODES.INVALID_TYPE_MAPPING);\n                    }\n                    if (objectValue !== \"@id\" && objectValue !== \"@vocab\" && (processingMode === 1 || objectValue !== \"@json\") && (processingMode === 1 || objectValue !== \"@none\") && (objectValue[0] === \"_\" || !Util_1.Util.isValidIri(objectValue))) {\n                      throw new ErrorCoded_1.ErrorCoded(`A context @type must be an absolute IRI, found: '${key}': '${objectValue}'`, ErrorCoded_1.ERROR_CODES.INVALID_TYPE_MAPPING);\n                    }\n                    break;\n                  case \"@reverse\":\n                    if (typeof objectValue === \"string\" && value[\"@id\"] && value[\"@id\"] !== objectValue) {\n                      throw new ErrorCoded_1.ErrorCoded(`Found non-matching @id and @reverse term values in '${key}':'${objectValue}' and '${value[\"@id\"]}'`, ErrorCoded_1.ERROR_CODES.INVALID_REVERSE_PROPERTY);\n                    }\n                    if (\"@nest\" in value) {\n                      throw new ErrorCoded_1.ErrorCoded(`@nest is not allowed in the reverse property '${key}'`, ErrorCoded_1.ERROR_CODES.INVALID_REVERSE_PROPERTY);\n                    }\n                    break;\n                  case \"@container\":\n                    if (processingMode === 1) {\n                      if (Object.keys(objectValue).length > 1 || Util_1.Util.CONTAINERS_1_0.indexOf(Object.keys(objectValue)[0]) < 0) {\n                        throw new ErrorCoded_1.ErrorCoded(`Invalid term @container for '${key}' ('${Object.keys(objectValue)}') in 1.0, must be only one of ${Util_1.Util.CONTAINERS_1_0.join(\", \")}`, ErrorCoded_1.ERROR_CODES.INVALID_CONTAINER_MAPPING);\n                      }\n                    }\n                    for (const containerValue of Object.keys(objectValue)) {\n                      if (containerValue === \"@list\" && value[\"@reverse\"]) {\n                        throw new ErrorCoded_1.ErrorCoded(`Term value can not be @container: @list and @reverse at the same time on '${key}'`, ErrorCoded_1.ERROR_CODES.INVALID_REVERSE_PROPERTY);\n                      }\n                      if (Util_1.Util.CONTAINERS.indexOf(containerValue) < 0) {\n                        throw new ErrorCoded_1.ErrorCoded(`Invalid term @container for '${key}' ('${containerValue}'), must be one of ${Util_1.Util.CONTAINERS.join(\", \")}`, ErrorCoded_1.ERROR_CODES.INVALID_CONTAINER_MAPPING);\n                      }\n                    }\n                    break;\n                  case \"@language\":\n                    ContextParser2.validateLanguage(objectValue, true, ErrorCoded_1.ERROR_CODES.INVALID_LANGUAGE_MAPPING);\n                    break;\n                  case \"@direction\":\n                    ContextParser2.validateDirection(objectValue, true);\n                    break;\n                  case \"@prefix\":\n                    if (objectValue !== null && typeof objectValue !== \"boolean\") {\n                      throw new ErrorCoded_1.ErrorCoded(`Found an invalid term @prefix boolean in: '${key}': '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.INVALID_PREFIX_VALUE);\n                    }\n                    if (!(\"@id\" in value) && !Util_1.Util.isValidIri(key)) {\n                      throw new ErrorCoded_1.ErrorCoded(`Invalid @prefix definition for '${key}' ('${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.INVALID_TERM_DEFINITION);\n                    }\n                    break;\n                  case \"@index\":\n                    if (processingMode === 1 || !value[\"@container\"] || !value[\"@container\"][\"@index\"]) {\n                      throw new ErrorCoded_1.ErrorCoded(`Attempt to add illegal key to value object: '${key}': '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.INVALID_TERM_DEFINITION);\n                    }\n                    break;\n                  case \"@nest\":\n                    if (Util_1.Util.isPotentialKeyword(objectValue) && objectValue !== \"@nest\") {\n                      throw new ErrorCoded_1.ErrorCoded(`Found an invalid term @nest value in: '${key}': '${JSON.stringify(value)}'`, ErrorCoded_1.ERROR_CODES.INVALID_NEST_VALUE);\n                    }\n                }\n              }\n              break;\n            default:\n              throw new ErrorCoded_1.ErrorCoded(`Found an invalid term value: '${key}': '${value}'`, ErrorCoded_1.ERROR_CODES.INVALID_TERM_DEFINITION);\n          }\n        }\n      }\n    }\n    /**\n     * Apply the @base context entry to the given context under certain circumstances.\n     * @param context A context.\n     * @param options Parsing options.\n     * @param inheritFromParent If the @base value from the parent context can be inherited.\n     * @return The given context.\n     */\n    applyBaseEntry(context, options, inheritFromParent) {\n      if (typeof context === \"string\") {\n        return context;\n      }\n      if (inheritFromParent && !(\"@base\" in context) && options.parentContext && typeof options.parentContext === \"object\" && \"@base\" in options.parentContext) {\n        context[\"@base\"] = options.parentContext[\"@base\"];\n        if (options.parentContext[\"@__baseDocument\"]) {\n          context[\"@__baseDocument\"] = true;\n        }\n      }\n      if (options.baseIRI && !options.external) {\n        if (!(\"@base\" in context)) {\n          context[\"@base\"] = options.baseIRI;\n          context[\"@__baseDocument\"] = true;\n        } else if (context[\"@base\"] !== null && typeof context[\"@base\"] === \"string\" && !Util_1.Util.isValidIri(context[\"@base\"])) {\n          context[\"@base\"] = (0, relative_to_absolute_iri_1.resolve)(context[\"@base\"], options.parentContext && options.parentContext[\"@base\"] || options.baseIRI);\n        }\n      }\n      return context;\n    }\n    /**\n     * Resolve relative context IRIs, or return full IRIs as-is.\n     * @param {string} contextIri A context IRI.\n     * @param {string} baseIRI A base IRI.\n     * @return {string} The normalized context IRI.\n     */\n    normalizeContextIri(contextIri, baseIRI) {\n      if (!Util_1.Util.isValidIri(contextIri)) {\n        try {\n          contextIri = (0, relative_to_absolute_iri_1.resolve)(contextIri, baseIRI);\n        } catch (_a) {\n          throw new Error(`Invalid context IRI: ${contextIri}`);\n        }\n      }\n      if (this.redirectSchemaOrgHttps && contextIri.startsWith(\"http://schema.org\")) {\n        contextIri = \"https://schema.org/\";\n      }\n      return contextIri;\n    }\n    /**\n     * Parse scoped contexts in the given context.\n     * @param {IJsonLdContextNormalizedRaw} context A context.\n     * @param {IParseOptions} options Parsing options.\n     * @return {IJsonLdContextNormalizedRaw} The mutated input context.\n     * @param {string[]} keys Optional set of keys from the context to parseInnerContexts of. If left undefined, all\n     * keys in the context will be iterated over.\n     */\n    async parseInnerContexts(context, options, keys) {\n      for (const key of keys !== null && keys !== void 0 ? keys : Object.keys(context)) {\n        const value = context[key];\n        if (value && typeof value === \"object\") {\n          if (\"@context\" in value && value[\"@context\"] !== null && !options.ignoreScopedContexts) {\n            if (this.validateContext) {\n              try {\n                const parentContext = Object.assign(Object.assign({}, context), { [key]: Object.assign({}, context[key]) });\n                delete parentContext[key][\"@context\"];\n                await this.parse(value[\"@context\"], Object.assign(Object.assign({}, options), { external: false, parentContext, ignoreProtection: true, ignoreRemoteScopedContexts: true, ignoreScopedContexts: true }));\n              } catch (e) {\n                throw new ErrorCoded_1.ErrorCoded(e.message, ErrorCoded_1.ERROR_CODES.INVALID_SCOPED_CONTEXT);\n              }\n            }\n            context[key] = Object.assign(Object.assign({}, value), { \"@context\": (await this.parse(value[\"@context\"], Object.assign(Object.assign({}, options), { external: false, minimalProcessing: true, ignoreRemoteScopedContexts: true, parentContext: context }))).getContextRaw() });\n          }\n        }\n      }\n      return context;\n    }\n    async parse(context, options = {}, internalOptions = {}) {\n      const { baseIRI, parentContext, external, processingMode = ContextParser2.DEFAULT_PROCESSING_MODE, normalizeLanguageTags, ignoreProtection, minimalProcessing } = options;\n      const remoteContexts = options.remoteContexts || {};\n      if (Object.keys(remoteContexts).length >= this.remoteContextsDepthLimit) {\n        throw new ErrorCoded_1.ErrorCoded(\"Detected an overflow in remote context inclusions: \" + Object.keys(remoteContexts), ErrorCoded_1.ERROR_CODES.CONTEXT_OVERFLOW);\n      }\n      if (context === null || context === void 0) {\n        if (!ignoreProtection && parentContext && Util_1.Util.hasProtectedTerms(parentContext)) {\n          throw new ErrorCoded_1.ErrorCoded(\"Illegal context nullification when terms are protected\", ErrorCoded_1.ERROR_CODES.INVALID_CONTEXT_NULLIFICATION);\n        }\n        return new JsonLdContextNormalized_1.JsonLdContextNormalized(this.applyBaseEntry({}, options, false));\n      } else if (typeof context === \"string\") {\n        const contextIri = this.normalizeContextIri(context, baseIRI);\n        const overriddenLoad = this.getOverriddenLoad(contextIri, options);\n        if (overriddenLoad) {\n          return new JsonLdContextNormalized_1.JsonLdContextNormalized(overriddenLoad);\n        }\n        const parsedStringContext = await this.parse(await this.load(contextIri), Object.assign(Object.assign({}, options), { baseIRI: contextIri, external: true, remoteContexts: Object.assign(Object.assign({}, remoteContexts), { [contextIri]: true }) }));\n        this.applyBaseEntry(parsedStringContext.getContextRaw(), options, true);\n        return parsedStringContext;\n      } else if (Array.isArray(context)) {\n        const contextIris = [];\n        const contexts = await Promise.all(context.map((subContext, i) => {\n          if (typeof subContext === \"string\") {\n            const contextIri = this.normalizeContextIri(subContext, baseIRI);\n            contextIris[i] = contextIri;\n            const overriddenLoad = this.getOverriddenLoad(contextIri, options);\n            if (overriddenLoad) {\n              return overriddenLoad;\n            }\n            return this.load(contextIri);\n          } else {\n            return subContext;\n          }\n        }));\n        if (minimalProcessing) {\n          return new JsonLdContextNormalized_1.JsonLdContextNormalized(contexts);\n        }\n        const reducedContexts = await contexts.reduce((accContextPromise, contextEntry, i) => accContextPromise.then((accContext) => this.parse(\n          contextEntry,\n          Object.assign(Object.assign({}, options), { baseIRI: contextIris[i] || options.baseIRI, external: !!contextIris[i] || options.external, parentContext: accContext.getContextRaw(), remoteContexts: contextIris[i] ? Object.assign(Object.assign({}, remoteContexts), { [contextIris[i]]: true }) : remoteContexts }),\n          // @ts-expect-error: This third argument causes a type error because we have hidden it from consumers\n          {\n            skipValidation: i < contexts.length - 1\n          }\n        )), Promise.resolve(new JsonLdContextNormalized_1.JsonLdContextNormalized(parentContext || {})));\n        this.applyBaseEntry(reducedContexts.getContextRaw(), options, true);\n        return reducedContexts;\n      } else if (typeof context === \"object\") {\n        if (\"@context\" in context) {\n          return await this.parse(context[\"@context\"], options);\n        }\n        context = Object.assign({}, context);\n        if (external) {\n          delete context[\"@base\"];\n        }\n        this.applyBaseEntry(context, options, true);\n        this.containersToHash(context);\n        if (minimalProcessing) {\n          return new JsonLdContextNormalized_1.JsonLdContextNormalized(context);\n        }\n        let importContext = {};\n        if (\"@import\" in context) {\n          if (processingMode >= 1.1) {\n            if (typeof context[\"@import\"] !== \"string\") {\n              throw new ErrorCoded_1.ErrorCoded(\"An @import value must be a string, but got \" + typeof context[\"@import\"], ErrorCoded_1.ERROR_CODES.INVALID_IMPORT_VALUE);\n            }\n            importContext = await this.loadImportContext(this.normalizeContextIri(context[\"@import\"], baseIRI));\n            delete context[\"@import\"];\n          } else {\n            throw new ErrorCoded_1.ErrorCoded(\"Context importing is not supported in JSON-LD 1.0\", ErrorCoded_1.ERROR_CODES.INVALID_CONTEXT_ENTRY);\n          }\n        }\n        this.applyScopedProtected(importContext, { processingMode }, JsonLdContextNormalized_1.defaultExpandOptions);\n        const newContext = Object.assign(importContext, context);\n        this.idifyReverseTerms(newContext);\n        this.normalize(newContext, { processingMode, normalizeLanguageTags });\n        this.applyScopedProtected(newContext, { processingMode }, JsonLdContextNormalized_1.defaultExpandOptions);\n        const keys = Object.keys(newContext);\n        const overlappingKeys = [];\n        if (typeof parentContext === \"object\") {\n          for (const key in parentContext) {\n            if (key in newContext) {\n              overlappingKeys.push(key);\n            } else {\n              newContext[key] = parentContext[key];\n            }\n          }\n        }\n        await this.parseInnerContexts(newContext, options, keys);\n        const newContextWrapped = new JsonLdContextNormalized_1.JsonLdContextNormalized(newContext);\n        if ((newContext && newContext[\"@version\"] || ContextParser2.DEFAULT_PROCESSING_MODE) >= 1.1 && (context[\"@vocab\"] && typeof context[\"@vocab\"] === \"string\" || context[\"@vocab\"] === \"\")) {\n          if (parentContext && \"@vocab\" in parentContext && context[\"@vocab\"].indexOf(\":\") < 0) {\n            newContext[\"@vocab\"] = parentContext[\"@vocab\"] + context[\"@vocab\"];\n          } else if (Util_1.Util.isCompactIri(context[\"@vocab\"]) || context[\"@vocab\"] in newContext) {\n            newContext[\"@vocab\"] = newContextWrapped.expandTerm(context[\"@vocab\"], true);\n          }\n        }\n        this.expandPrefixedTerms(newContextWrapped, this.expandContentTypeToBase, keys);\n        if (!ignoreProtection && parentContext && processingMode >= 1.1) {\n          this.validateKeywordRedefinitions(parentContext, newContext, JsonLdContextNormalized_1.defaultExpandOptions, overlappingKeys);\n        }\n        if (this.validateContext && !internalOptions.skipValidation) {\n          this.validate(newContext, { processingMode });\n        }\n        return newContextWrapped;\n      } else {\n        throw new ErrorCoded_1.ErrorCoded(`Tried parsing a context that is not a string, array or object, but got ${context}`, ErrorCoded_1.ERROR_CODES.INVALID_LOCAL_CONTEXT);\n      }\n    }\n    /**\n     * Fetch the given URL as a raw JSON-LD context.\n     * @param url An URL.\n     * @return A promise resolving to a raw JSON-LD context.\n     */\n    async load(url) {\n      const cached = this.documentCache[url];\n      if (cached) {\n        return cached;\n      }\n      let document2;\n      try {\n        document2 = await this.documentLoader.load(url);\n      } catch (e) {\n        throw new ErrorCoded_1.ErrorCoded(`Failed to load remote context ${url}: ${e.message}`, ErrorCoded_1.ERROR_CODES.LOADING_REMOTE_CONTEXT_FAILED);\n      }\n      if (!(\"@context\" in document2)) {\n        throw new ErrorCoded_1.ErrorCoded(`Missing @context in remote context at ${url}`, ErrorCoded_1.ERROR_CODES.INVALID_REMOTE_CONTEXT);\n      }\n      return this.documentCache[url] = document2[\"@context\"];\n    }\n    /**\n     * Override the given context that may be loaded.\n     *\n     * This will check whether or not the url is recursively being loaded.\n     * @param url An URL.\n     * @param options Parsing options.\n     * @return An overridden context, or null.\n     *         Optionally an error can be thrown if a cyclic context is detected.\n     */\n    getOverriddenLoad(url, options) {\n      if (url in (options.remoteContexts || {})) {\n        if (options.ignoreRemoteScopedContexts) {\n          return url;\n        } else {\n          throw new ErrorCoded_1.ErrorCoded(\"Detected a cyclic context inclusion of \" + url, ErrorCoded_1.ERROR_CODES.RECURSIVE_CONTEXT_INCLUSION);\n        }\n      }\n      return null;\n    }\n    /**\n     * Load an @import'ed context.\n     * @param importContextIri The full URI of an @import value.\n     */\n    async loadImportContext(importContextIri) {\n      let importContext = await this.load(importContextIri);\n      if (typeof importContext !== \"object\" || Array.isArray(importContext)) {\n        throw new ErrorCoded_1.ErrorCoded(\"An imported context must be a single object: \" + importContextIri, ErrorCoded_1.ERROR_CODES.INVALID_REMOTE_CONTEXT);\n      }\n      if (\"@import\" in importContext) {\n        throw new ErrorCoded_1.ErrorCoded(\"An imported context can not import another context: \" + importContextIri, ErrorCoded_1.ERROR_CODES.INVALID_CONTEXT_ENTRY);\n      }\n      importContext = Object.assign({}, importContext);\n      this.containersToHash(importContext);\n      return importContext;\n    }\n  };\n  ContextParser$1.DEFAULT_PROCESSING_MODE = 1.1;\n  ContextParser.ContextParser = ContextParser$1;\n  return ContextParser;\n}\nvar IDocumentLoader = {};\nvar hasRequiredIDocumentLoader;\nfunction requireIDocumentLoader() {\n  if (hasRequiredIDocumentLoader) return IDocumentLoader;\n  hasRequiredIDocumentLoader = 1;\n  Object.defineProperty(IDocumentLoader, \"__esModule\", { value: true });\n  return IDocumentLoader;\n}\nvar JsonLdContext = {};\nvar hasRequiredJsonLdContext;\nfunction requireJsonLdContext() {\n  if (hasRequiredJsonLdContext) return JsonLdContext;\n  hasRequiredJsonLdContext = 1;\n  Object.defineProperty(JsonLdContext, \"__esModule\", { value: true });\n  return JsonLdContext;\n}\nvar hasRequiredJsonldContextParser;\nfunction requireJsonldContextParser() {\n  if (hasRequiredJsonldContextParser) return jsonldContextParser;\n  hasRequiredJsonldContextParser = 1;\n  (function(exports) {\n    var __createBinding = jsonldContextParser && jsonldContextParser.__createBinding || (Object.create ? function(o, m, k, k2) {\n      if (k2 === void 0) k2 = k;\n      var desc = Object.getOwnPropertyDescriptor(m, k);\n      if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n        desc = { enumerable: true, get: function() {\n          return m[k];\n        } };\n      }\n      Object.defineProperty(o, k2, desc);\n    } : function(o, m, k, k2) {\n      if (k2 === void 0) k2 = k;\n      o[k2] = m[k];\n    });\n    var __exportStar = jsonldContextParser && jsonldContextParser.__exportStar || function(m, exports2) {\n      for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p);\n    };\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    __exportStar(/* @__PURE__ */ requireContextParser(), exports);\n    __exportStar(/* @__PURE__ */ requireErrorCoded(), exports);\n    __exportStar(/* @__PURE__ */ requireFetchDocumentLoader(), exports);\n    __exportStar(/* @__PURE__ */ requireIDocumentLoader(), exports);\n    __exportStar(/* @__PURE__ */ requireJsonLdContext(), exports);\n    __exportStar(/* @__PURE__ */ requireJsonLdContextNormalized(), exports);\n    __exportStar(/* @__PURE__ */ requireUtil(), exports);\n  })(jsonldContextParser);\n  return jsonldContextParser;\n}\nvar jsonldContextParserExports = /* @__PURE__ */ requireJsonldContextParser();\nfunction uniqID() {\n  return `_${(Math.random() * 36 ** 20).toString(36).slice(0, 10)}`;\n}\nfunction stringToDom(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content;\n}\nconst AsyncFunction = Object.getPrototypeOf(async () => {\n}).constructor;\nasync function evalTemplateString(str, variables = {}) {\n  const keys = Object.keys(variables);\n  const values = keys.map((key) => variables[key]);\n  try {\n    const func = AsyncFunction.call(null, ...keys, `return \\`${str}\\``);\n    return await func(...values);\n  } catch (e) {\n    console.log(e);\n    throw new SyntaxError(`\\`${str}\\``);\n  }\n}\nfunction importCSS(...stylesheets) {\n  const linksElements = [];\n  for (let url of stylesheets) {\n    url = relativeSource(url);\n    let link2 = Array.from(document.head.querySelectorAll(\"link\")).find(\n      (link22) => link22.href === url\n    );\n    if (link2) return link2;\n    link2 = document.createElement(\"link\");\n    link2.rel = \"stylesheet\";\n    link2.href = url;\n    document.head.appendChild(link2);\n    linksElements.push(link2);\n  }\n  return linksElements;\n}\nfunction importInlineCSS(id, importer) {\n  id = `sib-inline-css-${id}`;\n  let style = document.head.querySelector(`style#${id}`);\n  if (style) return style;\n  style = document.createElement(\"style\");\n  style.id = id;\n  document.head.appendChild(style);\n  (async () => {\n    let textContent;\n    if (typeof importer === \"string\") textContent = importer;\n    else {\n      const imported = await importer();\n      if (typeof imported === \"string\") textContent = imported;\n      else textContent = imported.default || \"\";\n    }\n    style.textContent = textContent;\n  })();\n  return style;\n}\nfunction importJS(...plugins) {\n  return plugins.map((url) => {\n    url = new URL(url, document.baseURI).href;\n    let script = Array.from(document.querySelectorAll(\"script\")).find(\n      (script2) => script2.src === url\n    );\n    if (script) return script;\n    script = document.createElement(\"script\");\n    script.src = url;\n    document.head.appendChild(script);\n    return script;\n  });\n}\nfunction relativeSource(source) {\n  if (!source.match(/^\\..?\\//)) return new URL(source, document.baseURI).href;\n  const e = new Error();\n  if (!e.stack) return source;\n  const f2 = e.stack.split(\"\\n\").filter((l) => l.includes(\":\"))[2];\n  const line = f2.match(/[a-z]+:.*$/);\n  if (!line) return source;\n  const calledFile = line[0].replace(/(\\:[0-9]+){2}\\)?$/, \"\");\n  source = new URL(source, calledFile).href;\n  return source;\n}\nfunction loadScript(source) {\n  source = relativeSource(source);\n  return new Promise((resolve) => {\n    const script = document.createElement(\"script\");\n    const head = document.querySelector(\"head\");\n    script.async = true;\n    script.onload = () => setTimeout(resolve, 0);\n    script.src = source;\n    if (head) head.appendChild(script);\n  });\n}\nfunction domIsReady() {\n  return new Promise((resolve) => {\n    if (document.readyState === \"complete\") {\n      resolve();\n    } else {\n      document.addEventListener(\"DOMContentLoaded\", () => resolve());\n    }\n  });\n}\nfunction setDeepProperty(obj, path, value) {\n  const name = path.shift();\n  if (name) {\n    if (!(name in obj)) obj[name] = {};\n    if (path.length > 0) setDeepProperty(obj[name], path, value);\n    else obj[name] = value;\n  }\n}\nfunction parseFieldsString(fields) {\n  if (!fields) return [];\n  while (fields.indexOf(\"(\") > 0) {\n    const firstBracket = fields.indexOf(\"(\");\n    const noset = fields.substring(\n      firstBracket,\n      findClosingBracketMatchIndex(fields, firstBracket) + 1\n    );\n    fields = fields.replace(noset, \"\");\n  }\n  const re = /((^\\s*|,)\\s*)((\"(\\\\\"|[^\"])*\")|('(\\\\'|[^'])*')|[^,]*)/gm;\n  const fieldsArray = fields.match(re) || [];\n  if (!fieldsArray) return [];\n  return fieldsArray.map((a) => a.replace(/^[\\s,]+/, \"\"));\n}\nfunction findClosingBracketMatchIndex(str, pos) {\n  if (str[pos] !== \"(\") throw new Error(`No '(' at index ${pos}`);\n  let depth = 1;\n  for (let i = pos + 1; i < str.length; i++) {\n    switch (str[i]) {\n      case \"(\":\n        depth++;\n        break;\n      case \")\":\n        if (--depth === 0) return i;\n        break;\n    }\n  }\n  return -1;\n}\nfunction defineComponent(tagName, componentClass) {\n  if (!customElements.get(tagName)) {\n    customElements.define(tagName, componentClass);\n  } else {\n    console.warn(\n      `Warning: the component \"${tagName}\" has already been loaded in another version of sib-core.`\n    );\n  }\n}\nfunction fuzzyCompare(subject, search) {\n  return compareTransform(subject).includes(compareTransform(String(search)));\n}\nfunction compareTransform(str) {\n  return str.normalize(\"NFD\").replaceAll(new RegExp(\"\\\\p{Diacritic}\", \"gu\"), \"\").toLowerCase().replaceAll(\"œ\", \"oe\").replaceAll(\"æ\", \"ae\").replaceAll(/[ ,.!?;:-`\"]+/g, \" \").trim();\n}\nconst compare = {\n  string(subject, query) {\n    if (typeof subject !== \"string\" || typeof query !== \"string\")\n      throw new TypeError(\"not a string\");\n    if (query === \"\") return true;\n    return fuzzyCompare(subject, String(query));\n  },\n  boolean(subject, query) {\n    if (!query) return true;\n    return subject;\n  },\n  number(subject, query) {\n    return subject === query;\n  },\n  list(subject, list) {\n    return list.includes(subject);\n  },\n  range(subject, range) {\n    return (range[0] == null || range[0] === \"\" || subject >= range[0]) && (range[1] == null || range[1] === \"\" || subject <= range[1]);\n  },\n  resource(subject, query) {\n    if (query === \"\") return true;\n    if (!query[\"@id\"]) return false;\n    const ret = subject[\"@id\"] === query[\"@id\"];\n    return ret;\n  }\n};\nfunction generalComparator(a, b, order = \"asc\") {\n  if (order === \"desc\") return generalComparator(b, a);\n  if (a == null && b == null) return 0;\n  if (a === b || Object.is(a, b)) return 0;\n  if (typeof a === \"boolean\" && typeof b === \"boolean\") {\n    return a === b ? 0 : a ? 1 : -1;\n  }\n  if (!Number.isNaN(Number(a)) && !Number.isNaN(Number(b))) {\n    return Number(a) - Number(b);\n  }\n  if (Array.isArray(a) && Array.isArray(b)) {\n    return a.length - b.length;\n  }\n  const dateA = Date.parse(String(a));\n  const dateB = Date.parse(String(b));\n  if (!Number.isNaN(dateA) && !Number.isNaN(dateB)) {\n    return dateA - dateB;\n  }\n  if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n    const aKeys = Object.keys(a);\n    const bKeys = Object.keys(b);\n    return aKeys.length - bKeys.length;\n  }\n  if (a == null) return -1;\n  if (b == null) return 1;\n  return String(a).localeCompare(String(b));\n}\nfunction transformArrayToContainer(resource) {\n  const newValue = { ...resource };\n  for (const predicate of Object.keys(newValue)) {\n    const predicateValue = newValue[predicate];\n    if (!predicateValue || typeof predicateValue !== \"object\") continue;\n    if ([\"permissions\", \"@context\"].includes(predicate)) continue;\n    if (!Array.isArray(predicateValue) && predicateValue[\"@id\"]) {\n      newValue[predicate] = transformArrayToContainer(resource[predicate]);\n    }\n    if (Array.isArray(predicateValue) && predicateValue[\"@id\"]) {\n      newValue[predicate] = {\n        \"@id\": predicateValue[\"@id\"],\n        \"ldp:contains\": [...predicateValue]\n        // ???? why only ldp:contains?\n      };\n      newValue[predicate][\"ldp:contains\"].forEach(\n        (childPredicate, index) => {\n          newValue[predicate][\"ldp:contains\"][index] = transformArrayToContainer(childPredicate);\n        }\n      );\n    }\n  }\n  return newValue;\n}\nfunction doesResourceContainList(resource) {\n  const predicates = [\"ldp:contains\", \"dcat:dataset\"];\n  return predicates.some(\n    (predicate) => typeof resource === \"object\" ? predicate in resource : typeof resource === \"string\" && resource.includes(predicate)\n  );\n}\nclass AsyncIterableBuilder {\n  constructor() {\n    __privateAdd(this, _AsyncIterableBuilder_instances);\n    __privateAdd(this, _values, []);\n    __privateAdd(this, _resolve);\n    __publicField(this, \"iterable\");\n    __publicField(this, \"next\");\n    __privateMethod(this, _AsyncIterableBuilder_instances, nextPromise_fn).call(this);\n    this.iterable = __privateMethod(this, _AsyncIterableBuilder_instances, createIterable_fn).call(this);\n    this.next = __privateMethod(this, _AsyncIterableBuilder_instances, next_fn).bind(this);\n  }\n}\n_values = new WeakMap();\n_resolve = new WeakMap();\n_AsyncIterableBuilder_instances = new WeakSet();\ncreateIterable_fn = async function* () {\n  for (let index = 0; ; index++) {\n    const { value, done } = await __privateGet(this, _values)[index];\n    delete __privateGet(this, _values)[index];\n    yield value;\n    if (done) return;\n  }\n};\nnext_fn = function(value, done = false) {\n  __privateGet(this, _resolve).call(this, { value, done });\n  __privateMethod(this, _AsyncIterableBuilder_instances, nextPromise_fn).call(this);\n};\nnextPromise_fn = function() {\n  __privateGet(this, _values).push(\n    new Promise((resolve) => {\n      __privateSet(this, _resolve, resolve);\n    })\n  );\n};\nconst asyncQuerySelector = (selector, parent = document) => new Promise((resolve) => {\n  const element = parent.querySelector(selector);\n  if (element) return resolve(element);\n  const observer = new MutationObserver(() => {\n    const element2 = parent.querySelector(selector);\n    if (!element2) return;\n    observer.disconnect();\n    return resolve(element2);\n  });\n  observer.observe(parent, {\n    subtree: true,\n    childList: true,\n    attributes: true\n  });\n});\nfunction isUrlOrRelativePath(value) {\n  if (typeof value !== \"string\") return false;\n  if (value.startsWith(\"_:\")) return false;\n  if (/^[a-zA-Z][a-zA-Z0-9+.-]*:\\/\\//.test(value)) return true;\n  if (value.startsWith(\"/\")) return true;\n  return false;\n}\nconst asyncQuerySelectorAll = (selector, parent = document) => {\n  const delivered = /* @__PURE__ */ new WeakSet();\n  const { next, iterable } = new AsyncIterableBuilder();\n  function checkNewElement() {\n    for (const element of parent.querySelectorAll(selector)) {\n      if (delivered.has(element)) continue;\n      delivered.add(element);\n      next(element);\n    }\n  }\n  checkNewElement();\n  const observer = new MutationObserver(checkNewElement);\n  observer.observe(parent, {\n    subtree: true,\n    childList: true,\n    attributes: true\n  });\n  return iterable;\n};\nconst mergeContexts = (client, server) => ({\n  ...getRawContext(client),\n  ...getRawContext(server)\n});\nconst normalizeContext = (ctx, fallbackCtx = null) => {\n  if (ctx && !(ctx instanceof jsonldContextParserExports.JsonLdContextNormalized)) {\n    return new jsonldContextParserExports.JsonLdContextNormalized(ctx);\n  }\n  if (!ctx && fallbackCtx) {\n    return normalizeContext(fallbackCtx);\n  }\n  return ctx;\n};\nconst getRawContext = (ctx) => {\n  if (!ctx) return ctx;\n  if (ctx instanceof jsonldContextParserExports.JsonLdContextNormalized) {\n    return ctx.getContextRaw();\n  }\n  if (Array.isArray(ctx)) {\n    return ctx.map(getRawContext);\n  }\n  if (ctx && typeof ctx === \"object\" && \"contextRaw\" in ctx) {\n    return ctx.contextRaw;\n  }\n  return ctx;\n};\nconst helpers = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  AsyncIterableBuilder,\n  asyncQuerySelector,\n  asyncQuerySelectorAll,\n  compare,\n  default: AsyncIterableBuilder,\n  defineComponent,\n  doesResourceContainList,\n  domIsReady,\n  evalTemplateString,\n  findClosingBracketMatchIndex,\n  fuzzyCompare,\n  generalComparator,\n  getRawContext,\n  importCSS,\n  importInlineCSS,\n  importJS,\n  isUrlOrRelativePath,\n  loadScript,\n  mergeContexts,\n  normalizeContext,\n  parseFieldsString,\n  setDeepProperty,\n  stringToDom,\n  transformArrayToContainer,\n  uniqID\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n  AsyncIterableBuilder as A,\n  doesResourceContainList as a,\n  fuzzyCompare as b,\n  compare as c,\n  defineComponent as d,\n  evalTemplateString as e,\n  findClosingBracketMatchIndex as f,\n  generalComparator as g,\n  asyncQuerySelector as h,\n  importInlineCSS as i,\n  importCSS as j,\n  helpers as k,\n  getRawContext as l,\n  mergeContexts as m,\n  normalizeContext as n,\n  isUrlOrRelativePath as o,\n  parseFieldsString as p,\n  jsonldContextParserExports as q,\n  stringToDom as r,\n  setDeepProperty as s,\n  transformArrayToContainer as t,\n  uniqID as u,\n  importJS as v,\n  loadScript as w,\n  domIsReady as x,\n  asyncQuerySelectorAll as y\n};\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nimport { m as mergeContexts, l as getRawContext, n as normalizeContext, o as isUrlOrRelativePath, q as jsonldContextParserExports, a as doesResourceContainList } from \"./helpers-4GFJ8HI8.js\";\nvar commonjsGlobal = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nfunction getDefaultExportFromCjs(x) {\n  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nfunction getAugmentedNamespace(n) {\n  if (n.__esModule) return n;\n  var f = n.default;\n  if (typeof f == \"function\") {\n    var a = function a2() {\n      if (this instanceof a2) {\n        return Reflect.construct(f, arguments, this.constructor);\n      }\n      return f.apply(this, arguments);\n    };\n    a.prototype = f.prototype;\n  } else a = {};\n  Object.defineProperty(a, \"__esModule\", { value: true });\n  Object.keys(n).forEach(function(k) {\n    var d = Object.getOwnPropertyDescriptor(n, k);\n    Object.defineProperty(a, k, d.get ? d : {\n      enumerable: true,\n      get: function() {\n        return n[k];\n      }\n    });\n  });\n  return a;\n}\nfunction formatAttributesToServerPaginationOptions(elementAttributes) {\n  const attributes = new Map(\n    Array.from(elementAttributes).map(({ name, value }) => [name, value])\n  );\n  const limit = attributes.get(\"limit\");\n  const offset = attributes.get(\"offset\");\n  if (!offset || !limit) return;\n  return {\n    limit,\n    offset\n  };\n}\nfunction appendServerPaginationToIri(iri, options) {\n  const first = iri.includes(\"?\") ? \"&\" : \"?\";\n  const limit = options.limit;\n  const offset = options.offset;\n  return `${iri}${first}limit=${limit}&offset=${offset}`;\n}\nfunction formatAttributesToServerSearchOptions(elementAttributes) {\n  var _a, _b, _c;\n  const attributes = new Map(\n    Array.from(elementAttributes).map(({ name, value: value2 }) => [name, value2])\n  );\n  const fields = (_a = attributes.get(\"server-search-fields\")) == null ? void 0 : _a.split(\",\").map((field) => field.trim());\n  const value = (_b = attributes.get(\"server-search-value\")) == null ? void 0 : _b.trim();\n  const method = (_c = attributes.get(\"server-search-method\")) == null ? void 0 : _c.trim();\n  return {\n    fields: fields && fields.length > 0 ? fields : void 0,\n    value: value ? value : void 0,\n    method: method ? method : void 0\n  };\n}\nfunction mergeServerSearchOptions(attributesOptions, dynamicOptions) {\n  const fields = (attributesOptions == null ? void 0 : attributesOptions.fields) ?? (dynamicOptions == null ? void 0 : dynamicOptions.fields);\n  const value = (dynamicOptions == null ? void 0 : dynamicOptions.value) ?? (attributesOptions == null ? void 0 : attributesOptions.value);\n  const method = (attributesOptions == null ? void 0 : attributesOptions.method) ?? (dynamicOptions == null ? void 0 : dynamicOptions.method);\n  if (!fields || fields.length === 0 || !value) return;\n  return { fields, value, method };\n}\nfunction appendServerSearchToIri(iri, options) {\n  const first = iri.includes(\"?\") ? \"&\" : \"?\";\n  const fields = options.fields.map(encodeURIComponent).join(\",\");\n  const value = encodeURIComponent(options.value);\n  const method = encodeURIComponent(options.method ?? \"ibasic\");\n  return `${iri}${first}search-fields=${fields}&search-terms=${value}&search-method=${method}`;\n}\nvar pubsub$1 = { exports: {} };\nvar pubsub = pubsub$1.exports;\nvar hasRequiredPubsub;\nfunction requirePubsub() {\n  if (hasRequiredPubsub) return pubsub$1.exports;\n  hasRequiredPubsub = 1;\n  (function(module, exports) {\n    (function(root, factory) {\n      var PubSub2 = {};\n      if (root.PubSub) {\n        PubSub2 = root.PubSub;\n        console.warn(\"PubSub already loaded, using existing version\");\n      } else {\n        root.PubSub = PubSub2;\n        factory(PubSub2);\n      }\n      {\n        if (module !== void 0 && module.exports) {\n          exports = module.exports = PubSub2;\n        }\n        exports.PubSub = PubSub2;\n        module.exports = exports = PubSub2;\n      }\n    })(typeof window === \"object\" && window || pubsub || commonjsGlobal, function(PubSub2) {\n      var messages = {}, lastUid = -1, ALL_SUBSCRIBING_MSG = \"*\";\n      function hasKeys(obj) {\n        var key;\n        for (key in obj) {\n          if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            return true;\n          }\n        }\n        return false;\n      }\n      function throwException(ex) {\n        return function reThrowException() {\n          throw ex;\n        };\n      }\n      function callSubscriberWithDelayedExceptions(subscriber, message, data) {\n        try {\n          subscriber(message, data);\n        } catch (ex) {\n          setTimeout(throwException(ex), 0);\n        }\n      }\n      function callSubscriberWithImmediateExceptions(subscriber, message, data) {\n        subscriber(message, data);\n      }\n      function deliverMessage(originalMessage, matchedMessage, data, immediateExceptions) {\n        var subscribers = messages[matchedMessage], callSubscriber = immediateExceptions ? callSubscriberWithImmediateExceptions : callSubscriberWithDelayedExceptions, s;\n        if (!Object.prototype.hasOwnProperty.call(messages, matchedMessage)) {\n          return;\n        }\n        for (s in subscribers) {\n          if (Object.prototype.hasOwnProperty.call(subscribers, s)) {\n            callSubscriber(subscribers[s], originalMessage, data);\n          }\n        }\n      }\n      function createDeliveryFunction(message, data, immediateExceptions) {\n        return function deliverNamespaced() {\n          var topic = String(message), position = topic.lastIndexOf(\".\");\n          deliverMessage(message, message, data, immediateExceptions);\n          while (position !== -1) {\n            topic = topic.substr(0, position);\n            position = topic.lastIndexOf(\".\");\n            deliverMessage(message, topic, data, immediateExceptions);\n          }\n          deliverMessage(message, ALL_SUBSCRIBING_MSG, data, immediateExceptions);\n        };\n      }\n      function hasDirectSubscribersFor(message) {\n        var topic = String(message), found = Boolean(Object.prototype.hasOwnProperty.call(messages, topic) && hasKeys(messages[topic]));\n        return found;\n      }\n      function messageHasSubscribers(message) {\n        var topic = String(message), found = hasDirectSubscribersFor(topic) || hasDirectSubscribersFor(ALL_SUBSCRIBING_MSG), position = topic.lastIndexOf(\".\");\n        while (!found && position !== -1) {\n          topic = topic.substr(0, position);\n          position = topic.lastIndexOf(\".\");\n          found = hasDirectSubscribersFor(topic);\n        }\n        return found;\n      }\n      function publish(message, data, sync, immediateExceptions) {\n        message = typeof message === \"symbol\" ? message.toString() : message;\n        var deliver = createDeliveryFunction(message, data, immediateExceptions), hasSubscribers = messageHasSubscribers(message);\n        if (!hasSubscribers) {\n          return false;\n        }\n        if (sync === true) {\n          deliver();\n        } else {\n          setTimeout(deliver, 0);\n        }\n        return true;\n      }\n      PubSub2.publish = function(message, data) {\n        return publish(message, data, false, PubSub2.immediateExceptions);\n      };\n      PubSub2.publishSync = function(message, data) {\n        return publish(message, data, true, PubSub2.immediateExceptions);\n      };\n      PubSub2.subscribe = function(message, func) {\n        if (typeof func !== \"function\") {\n          return false;\n        }\n        message = typeof message === \"symbol\" ? message.toString() : message;\n        if (!Object.prototype.hasOwnProperty.call(messages, message)) {\n          messages[message] = {};\n        }\n        var token = \"uid_\" + String(++lastUid);\n        messages[message][token] = func;\n        return token;\n      };\n      PubSub2.subscribeAll = function(func) {\n        return PubSub2.subscribe(ALL_SUBSCRIBING_MSG, func);\n      };\n      PubSub2.subscribeOnce = function(message, func) {\n        var token = PubSub2.subscribe(message, function() {\n          PubSub2.unsubscribe(token);\n          func.apply(this, arguments);\n        });\n        return PubSub2;\n      };\n      PubSub2.clearAllSubscriptions = function clearAllSubscriptions() {\n        messages = {};\n      };\n      PubSub2.clearSubscriptions = function clearSubscriptions(topic) {\n        var m;\n        for (m in messages) {\n          if (Object.prototype.hasOwnProperty.call(messages, m) && m.indexOf(topic) === 0) {\n            delete messages[m];\n          }\n        }\n      };\n      PubSub2.countSubscriptions = function countSubscriptions(topic) {\n        var m;\n        var token;\n        var count = 0;\n        for (m in messages) {\n          if (Object.prototype.hasOwnProperty.call(messages, m) && m.indexOf(topic) === 0) {\n            for (token in messages[m]) {\n              count++;\n            }\n            break;\n          }\n        }\n        return count;\n      };\n      PubSub2.getSubscriptions = function getSubscriptions(topic) {\n        var m;\n        var list = [];\n        for (m in messages) {\n          if (Object.prototype.hasOwnProperty.call(messages, m) && m.indexOf(topic) === 0) {\n            list.push(m);\n          }\n        }\n        return list;\n      };\n      PubSub2.unsubscribe = function(value) {\n        var descendantTopicExists = function(topic) {\n          var m2;\n          for (m2 in messages) {\n            if (Object.prototype.hasOwnProperty.call(messages, m2) && m2.indexOf(topic) === 0) {\n              return true;\n            }\n          }\n          return false;\n        }, isTopic = typeof value === \"string\" && (Object.prototype.hasOwnProperty.call(messages, value) || descendantTopicExists(value)), isToken = !isTopic && typeof value === \"string\", isFunction = typeof value === \"function\", result = false, m, message, t;\n        if (isTopic) {\n          PubSub2.clearSubscriptions(value);\n          return;\n        }\n        for (m in messages) {\n          if (Object.prototype.hasOwnProperty.call(messages, m)) {\n            message = messages[m];\n            if (isToken && message[value]) {\n              delete message[value];\n              result = value;\n              break;\n            }\n            if (isFunction) {\n              for (t in message) {\n                if (Object.prototype.hasOwnProperty.call(message, t) && message[t] === value) {\n                  delete message[t];\n                  result = true;\n                }\n              }\n            }\n          }\n        }\n        return result;\n      };\n    });\n  })(pubsub$1, pubsub$1.exports);\n  return pubsub$1.exports;\n}\nvar pubsubExports = requirePubsub();\nconst PubSub = /* @__PURE__ */ getDefaultExportFromCjs(pubsubExports);\nvar lib = {};\nvar IdentifierIssuer_1;\nvar hasRequiredIdentifierIssuer;\nfunction requireIdentifierIssuer() {\n  if (hasRequiredIdentifierIssuer) return IdentifierIssuer_1;\n  hasRequiredIdentifierIssuer = 1;\n  IdentifierIssuer_1 = class IdentifierIssuer {\n    /**\n     * Creates a new IdentifierIssuer. A IdentifierIssuer issues unique\n     * identifiers, keeping track of any previously issued identifiers.\n     *\n     * @param prefix the prefix to use ('<prefix><counter>').\n     * @param existing an existing Map to use.\n     * @param counter the counter to use.\n     */\n    constructor(prefix, existing = /* @__PURE__ */ new Map(), counter = 0) {\n      this.prefix = prefix;\n      this._existing = existing;\n      this.counter = counter;\n    }\n    /**\n     * Copies this IdentifierIssuer.\n     *\n     * @return a copy of this IdentifierIssuer.\n     */\n    clone() {\n      const { prefix, _existing, counter } = this;\n      return new IdentifierIssuer(prefix, new Map(_existing), counter);\n    }\n    /**\n     * Gets the new identifier for the given old identifier, where if no old\n     * identifier is given a new identifier will be generated.\n     *\n     * @param [old] the old identifier to get the new identifier for.\n     *\n     * @return the new identifier.\n     */\n    getId(old) {\n      const existing = old && this._existing.get(old);\n      if (existing) {\n        return existing;\n      }\n      const identifier = this.prefix + this.counter;\n      this.counter++;\n      if (old) {\n        this._existing.set(old, identifier);\n      }\n      return identifier;\n    }\n    /**\n     * Returns true if the given old identifer has already been assigned a new\n     * identifier.\n     *\n     * @param old the old identifier to check.\n     *\n     * @return true if the old identifier has been assigned a new identifier,\n     *   false if not.\n     */\n    hasId(old) {\n      return this._existing.has(old);\n    }\n    /**\n     * Returns all of the IDs that have been issued new IDs in the order in\n     * which they were issued new IDs.\n     *\n     * @return the list of old IDs that has been issued new IDs in order.\n     */\n    getOldIds() {\n      return [...this._existing.keys()];\n    }\n  };\n  return IdentifierIssuer_1;\n}\nvar setImmediate$1 = {};\nvar hasRequiredSetImmediate;\nfunction requireSetImmediate() {\n  if (hasRequiredSetImmediate) return setImmediate$1;\n  hasRequiredSetImmediate = 1;\n  (function(global2, undefined$1) {\n    if (global2.setImmediate) {\n      return;\n    }\n    var nextHandle = 1;\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global2.document;\n    var registerImmediate;\n    function setImmediate2(callback) {\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n        args[i] = arguments[i + 1];\n      }\n      var task = { callback, args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n    function clearImmediate(handle) {\n      delete tasksByHandle[handle];\n    }\n    function run(task) {\n      var callback = task.callback;\n      var args = task.args;\n      switch (args.length) {\n        case 0:\n          callback();\n          break;\n        case 1:\n          callback(args[0]);\n          break;\n        case 2:\n          callback(args[0], args[1]);\n          break;\n        case 3:\n          callback(args[0], args[1], args[2]);\n          break;\n        default:\n          callback.apply(undefined$1, args);\n          break;\n      }\n    }\n    function runIfPresent(handle) {\n      if (currentlyRunningATask) {\n        setTimeout(runIfPresent, 0, handle);\n      } else {\n        var task = tasksByHandle[handle];\n        if (task) {\n          currentlyRunningATask = true;\n          try {\n            run(task);\n          } finally {\n            clearImmediate(handle);\n            currentlyRunningATask = false;\n          }\n        }\n      }\n    }\n    function installNextTickImplementation() {\n      registerImmediate = function(handle) {\n        process.nextTick(function() {\n          runIfPresent(handle);\n        });\n      };\n    }\n    function canUsePostMessage() {\n      if (global2.postMessage && !global2.importScripts) {\n        var postMessageIsAsynchronous = true;\n        var oldOnMessage = global2.onmessage;\n        global2.onmessage = function() {\n          postMessageIsAsynchronous = false;\n        };\n        global2.postMessage(\"\", \"*\");\n        global2.onmessage = oldOnMessage;\n        return postMessageIsAsynchronous;\n      }\n    }\n    function installPostMessageImplementation() {\n      var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n      var onGlobalMessage = function(event) {\n        if (event.source === global2 && typeof event.data === \"string\" && event.data.indexOf(messagePrefix) === 0) {\n          runIfPresent(+event.data.slice(messagePrefix.length));\n        }\n      };\n      if (global2.addEventListener) {\n        global2.addEventListener(\"message\", onGlobalMessage, false);\n      } else {\n        global2.attachEvent(\"onmessage\", onGlobalMessage);\n      }\n      registerImmediate = function(handle) {\n        global2.postMessage(messagePrefix + handle, \"*\");\n      };\n    }\n    function installMessageChannelImplementation() {\n      var channel = new MessageChannel();\n      channel.port1.onmessage = function(event) {\n        var handle = event.data;\n        runIfPresent(handle);\n      };\n      registerImmediate = function(handle) {\n        channel.port2.postMessage(handle);\n      };\n    }\n    function installReadyStateChangeImplementation() {\n      var html = doc.documentElement;\n      registerImmediate = function(handle) {\n        var script = doc.createElement(\"script\");\n        script.onreadystatechange = function() {\n          runIfPresent(handle);\n          script.onreadystatechange = null;\n          html.removeChild(script);\n          script = null;\n        };\n        html.appendChild(script);\n      };\n    }\n    function installSetTimeoutImplementation() {\n      registerImmediate = function(handle) {\n        setTimeout(runIfPresent, 0, handle);\n      };\n    }\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global2);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global2;\n    if ({}.toString.call(global2.process) === \"[object process]\") {\n      installNextTickImplementation();\n    } else if (canUsePostMessage()) {\n      installPostMessageImplementation();\n    } else if (global2.MessageChannel) {\n      installMessageChannelImplementation();\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n      installReadyStateChangeImplementation();\n    } else {\n      installSetTimeoutImplementation();\n    }\n    attachTo.setImmediate = setImmediate2;\n    attachTo.clearImmediate = clearImmediate;\n  })(typeof self === \"undefined\" ? typeof commonjsGlobal === \"undefined\" ? setImmediate$1 : commonjsGlobal : self);\n  return setImmediate$1;\n}\n/*!\n * Copyright (c) 2016-2022 Digital Bazaar, Inc. All rights reserved.\n */\nvar MessageDigestBrowser;\nvar hasRequiredMessageDigestBrowser;\nfunction requireMessageDigestBrowser() {\n  if (hasRequiredMessageDigestBrowser) return MessageDigestBrowser;\n  hasRequiredMessageDigestBrowser = 1;\n  requireSetImmediate();\n  const crypto = self.crypto || self.msCrypto;\n  MessageDigestBrowser = class MessageDigest {\n    /**\n     * Creates a new MessageDigest.\n     *\n     * @param algorithm the algorithm to use.\n     */\n    constructor(algorithm) {\n      if (!(crypto && crypto.subtle)) {\n        throw new Error(\"crypto.subtle not found.\");\n      }\n      if (algorithm === \"sha256\") {\n        this.algorithm = { name: \"SHA-256\" };\n      } else if (algorithm === \"sha1\") {\n        this.algorithm = { name: \"SHA-1\" };\n      } else {\n        throw new Error(`Unsupported algorithm \"${algorithm}\".`);\n      }\n      this._content = \"\";\n    }\n    update(msg) {\n      this._content += msg;\n    }\n    async digest() {\n      const data = new TextEncoder().encode(this._content);\n      const buffer = new Uint8Array(\n        await crypto.subtle.digest(this.algorithm, data)\n      );\n      let hex = \"\";\n      for (let i = 0; i < buffer.length; ++i) {\n        hex += buffer[i].toString(16).padStart(2, \"0\");\n      }\n      return hex;\n    }\n  };\n  return MessageDigestBrowser;\n}\n/*!\n * Copyright (c) 2016-2022 Digital Bazaar, Inc. All rights reserved.\n */\nvar Permuter_1;\nvar hasRequiredPermuter;\nfunction requirePermuter() {\n  if (hasRequiredPermuter) return Permuter_1;\n  hasRequiredPermuter = 1;\n  Permuter_1 = class Permuter {\n    /**\n     * A Permuter iterates over all possible permutations of the given array\n     * of elements.\n     *\n     * @param list the array of elements to iterate over.\n     */\n    constructor(list) {\n      this.current = list.sort();\n      this.done = false;\n      this.dir = /* @__PURE__ */ new Map();\n      for (let i = 0; i < list.length; ++i) {\n        this.dir.set(list[i], true);\n      }\n    }\n    /**\n     * Returns true if there is another permutation.\n     *\n     * @return true if there is another permutation, false if not.\n     */\n    hasNext() {\n      return !this.done;\n    }\n    /**\n     * Gets the next permutation. Call hasNext() to ensure there is another one\n     * first.\n     *\n     * @return the next permutation.\n     */\n    next() {\n      const { current, dir } = this;\n      const rval = current.slice();\n      let k = null;\n      let pos = 0;\n      const length = current.length;\n      for (let i = 0; i < length; ++i) {\n        const element = current[i];\n        const left = dir.get(element);\n        if ((k === null || element > k) && (left && i > 0 && element > current[i - 1] || !left && i < length - 1 && element > current[i + 1])) {\n          k = element;\n          pos = i;\n        }\n      }\n      if (k === null) {\n        this.done = true;\n      } else {\n        const swap = dir.get(k) ? pos - 1 : pos + 1;\n        current[pos] = current[swap];\n        current[swap] = k;\n        for (const element of current) {\n          if (element > k) {\n            dir.set(element, !dir.get(element));\n          }\n        }\n      }\n      return rval;\n    }\n  };\n  return Permuter_1;\n}\n/*!\n * Copyright (c) 2016-2022 Digital Bazaar, Inc. All rights reserved.\n */\nvar NQuads_1;\nvar hasRequiredNQuads$1;\nfunction requireNQuads$1() {\n  if (hasRequiredNQuads$1) return NQuads_1;\n  hasRequiredNQuads$1 = 1;\n  const RDF = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#\";\n  const RDF_LANGSTRING = RDF + \"langString\";\n  const XSD_STRING = \"http://www.w3.org/2001/XMLSchema#string\";\n  const TYPE_NAMED_NODE = \"NamedNode\";\n  const TYPE_BLANK_NODE = \"BlankNode\";\n  const TYPE_LITERAL = \"Literal\";\n  const TYPE_DEFAULT_GRAPH = \"DefaultGraph\";\n  const REGEX = {};\n  (() => {\n    const iri = \"(?:<([^:]+:[^>]*)>)\";\n    const PN_CHARS_BASE = \"A-Za-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�\";\n    const PN_CHARS_U = PN_CHARS_BASE + \"_\";\n    const PN_CHARS = PN_CHARS_U + \"0-9-·̀-ͯ‿-⁀\";\n    const BLANK_NODE_LABEL = \"(_:(?:[\" + PN_CHARS_U + \"0-9])(?:(?:[\" + PN_CHARS + \".])*(?:[\" + PN_CHARS + \"]))?)\";\n    const bnode = BLANK_NODE_LABEL;\n    const plain = '\"([^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*)\"';\n    const datatype = \"(?:\\\\^\\\\^\" + iri + \")\";\n    const language = \"(?:@([a-zA-Z]+(?:-[a-zA-Z0-9]+)*))\";\n    const literal = \"(?:\" + plain + \"(?:\" + datatype + \"|\" + language + \")?)\";\n    const ws = \"[ \\\\t]+\";\n    const wso = \"[ \\\\t]*\";\n    const subject = \"(?:\" + iri + \"|\" + bnode + \")\" + ws;\n    const property = iri + ws;\n    const object = \"(?:\" + iri + \"|\" + bnode + \"|\" + literal + \")\" + wso;\n    const graphName = \"(?:\\\\.|(?:(?:\" + iri + \"|\" + bnode + \")\" + wso + \"\\\\.))\";\n    REGEX.eoln = /(?:\\r\\n)|(?:\\n)|(?:\\r)/g;\n    REGEX.empty = new RegExp(\"^\" + wso + \"$\");\n    REGEX.quad = new RegExp(\n      \"^\" + wso + subject + property + object + graphName + wso + \"$\"\n    );\n  })();\n  NQuads_1 = class NQuads2 {\n    /**\n     * Parses RDF in the form of N-Quads.\n     *\n     * @param input the N-Quads input to parse.\n     *\n     * @return an RDF dataset (an array of quads per http://rdf.js.org/).\n     */\n    static parse(input) {\n      const dataset = [];\n      const graphs = {};\n      const lines = input.split(REGEX.eoln);\n      let lineNumber = 0;\n      for (const line of lines) {\n        lineNumber++;\n        if (REGEX.empty.test(line)) {\n          continue;\n        }\n        const match = line.match(REGEX.quad);\n        if (match === null) {\n          throw new Error(\"N-Quads parse error on line \" + lineNumber + \".\");\n        }\n        const quad = { subject: null, predicate: null, object: null, graph: null };\n        if (match[1] !== void 0) {\n          quad.subject = { termType: TYPE_NAMED_NODE, value: match[1] };\n        } else {\n          quad.subject = { termType: TYPE_BLANK_NODE, value: match[2] };\n        }\n        quad.predicate = { termType: TYPE_NAMED_NODE, value: match[3] };\n        if (match[4] !== void 0) {\n          quad.object = { termType: TYPE_NAMED_NODE, value: match[4] };\n        } else if (match[5] !== void 0) {\n          quad.object = { termType: TYPE_BLANK_NODE, value: match[5] };\n        } else {\n          quad.object = {\n            termType: TYPE_LITERAL,\n            value: void 0,\n            datatype: {\n              termType: TYPE_NAMED_NODE\n            }\n          };\n          if (match[7] !== void 0) {\n            quad.object.datatype.value = match[7];\n          } else if (match[8] !== void 0) {\n            quad.object.datatype.value = RDF_LANGSTRING;\n            quad.object.language = match[8];\n          } else {\n            quad.object.datatype.value = XSD_STRING;\n          }\n          quad.object.value = _unescape(match[6]);\n        }\n        if (match[9] !== void 0) {\n          quad.graph = {\n            termType: TYPE_NAMED_NODE,\n            value: match[9]\n          };\n        } else if (match[10] !== void 0) {\n          quad.graph = {\n            termType: TYPE_BLANK_NODE,\n            value: match[10]\n          };\n        } else {\n          quad.graph = {\n            termType: TYPE_DEFAULT_GRAPH,\n            value: \"\"\n          };\n        }\n        if (!(quad.graph.value in graphs)) {\n          graphs[quad.graph.value] = [quad];\n          dataset.push(quad);\n        } else {\n          let unique = true;\n          const quads = graphs[quad.graph.value];\n          for (const q of quads) {\n            if (_compareTriples(q, quad)) {\n              unique = false;\n              break;\n            }\n          }\n          if (unique) {\n            quads.push(quad);\n            dataset.push(quad);\n          }\n        }\n      }\n      return dataset;\n    }\n    /**\n     * Converts an RDF dataset to N-Quads.\n     *\n     * @param dataset (array of quads) the RDF dataset to convert.\n     *\n     * @return the N-Quads string.\n     */\n    static serialize(dataset) {\n      if (!Array.isArray(dataset)) {\n        dataset = NQuads2.legacyDatasetToQuads(dataset);\n      }\n      const quads = [];\n      for (const quad of dataset) {\n        quads.push(NQuads2.serializeQuad(quad));\n      }\n      return quads.sort().join(\"\");\n    }\n    /**\n     * Converts RDF quad components to an N-Quad string (a single quad).\n     *\n     * @param {Object} s - N-Quad subject component.\n     * @param {Object} p - N-Quad predicate component.\n     * @param {Object} o - N-Quad object component.\n     * @param {Object} g - N-Quad graph component.\n     *\n     * @return {string} the N-Quad.\n     */\n    static serializeQuadComponents(s, p, o, g) {\n      let nquad = \"\";\n      if (s.termType === TYPE_NAMED_NODE) {\n        nquad += `<${s.value}>`;\n      } else {\n        nquad += `${s.value}`;\n      }\n      nquad += ` <${p.value}> `;\n      if (o.termType === TYPE_NAMED_NODE) {\n        nquad += `<${o.value}>`;\n      } else if (o.termType === TYPE_BLANK_NODE) {\n        nquad += o.value;\n      } else {\n        nquad += `\"${_escape(o.value)}\"`;\n        if (o.datatype.value === RDF_LANGSTRING) {\n          if (o.language) {\n            nquad += `@${o.language}`;\n          }\n        } else if (o.datatype.value !== XSD_STRING) {\n          nquad += `^^<${o.datatype.value}>`;\n        }\n      }\n      if (g.termType === TYPE_NAMED_NODE) {\n        nquad += ` <${g.value}>`;\n      } else if (g.termType === TYPE_BLANK_NODE) {\n        nquad += ` ${g.value}`;\n      }\n      nquad += \" .\\n\";\n      return nquad;\n    }\n    /**\n     * Converts an RDF quad to an N-Quad string (a single quad).\n     *\n     * @param quad the RDF quad convert.\n     *\n     * @return the N-Quad string.\n     */\n    static serializeQuad(quad) {\n      return NQuads2.serializeQuadComponents(\n        quad.subject,\n        quad.predicate,\n        quad.object,\n        quad.graph\n      );\n    }\n    /**\n     * Converts a legacy-formatted dataset to an array of quads dataset per\n     * http://rdf.js.org/.\n     *\n     * @param dataset the legacy dataset to convert.\n     *\n     * @return the array of quads dataset.\n     */\n    static legacyDatasetToQuads(dataset) {\n      const quads = [];\n      const termTypeMap = {\n        \"blank node\": TYPE_BLANK_NODE,\n        IRI: TYPE_NAMED_NODE,\n        literal: TYPE_LITERAL\n      };\n      for (const graphName in dataset) {\n        const triples = dataset[graphName];\n        triples.forEach((triple) => {\n          const quad = {};\n          for (const componentName in triple) {\n            const oldComponent = triple[componentName];\n            const newComponent = {\n              termType: termTypeMap[oldComponent.type],\n              value: oldComponent.value\n            };\n            if (newComponent.termType === TYPE_LITERAL) {\n              newComponent.datatype = {\n                termType: TYPE_NAMED_NODE\n              };\n              if (\"datatype\" in oldComponent) {\n                newComponent.datatype.value = oldComponent.datatype;\n              }\n              if (\"language\" in oldComponent) {\n                if (!(\"datatype\" in oldComponent)) {\n                  newComponent.datatype.value = RDF_LANGSTRING;\n                }\n                newComponent.language = oldComponent.language;\n              } else if (!(\"datatype\" in oldComponent)) {\n                newComponent.datatype.value = XSD_STRING;\n              }\n            }\n            quad[componentName] = newComponent;\n          }\n          if (graphName === \"@default\") {\n            quad.graph = {\n              termType: TYPE_DEFAULT_GRAPH,\n              value: \"\"\n            };\n          } else {\n            quad.graph = {\n              termType: graphName.startsWith(\"_:\") ? TYPE_BLANK_NODE : TYPE_NAMED_NODE,\n              value: graphName\n            };\n          }\n          quads.push(quad);\n        });\n      }\n      return quads;\n    }\n  };\n  function _compareTriples(t1, t2) {\n    if (!(t1.subject.termType === t2.subject.termType && t1.object.termType === t2.object.termType)) {\n      return false;\n    }\n    if (!(t1.subject.value === t2.subject.value && t1.predicate.value === t2.predicate.value && t1.object.value === t2.object.value)) {\n      return false;\n    }\n    if (t1.object.termType !== TYPE_LITERAL) {\n      return true;\n    }\n    return t1.object.datatype.termType === t2.object.datatype.termType && t1.object.language === t2.object.language && t1.object.datatype.value === t2.object.datatype.value;\n  }\n  const _escapeRegex = /[\"\\\\\\n\\r]/g;\n  function _escape(s) {\n    return s.replace(_escapeRegex, function(match) {\n      switch (match) {\n        case '\"':\n          return '\\\\\"';\n        case \"\\\\\":\n          return \"\\\\\\\\\";\n        case \"\\n\":\n          return \"\\\\n\";\n        case \"\\r\":\n          return \"\\\\r\";\n      }\n    });\n  }\n  const _unescapeRegex = /(?:\\\\([tbnrf\"'\\\\]))|(?:\\\\u([0-9A-Fa-f]{4}))|(?:\\\\U([0-9A-Fa-f]{8}))/g;\n  function _unescape(s) {\n    return s.replace(_unescapeRegex, function(match, code, u, U) {\n      if (code) {\n        switch (code) {\n          case \"t\":\n            return \"\t\";\n          case \"b\":\n            return \"\\b\";\n          case \"n\":\n            return \"\\n\";\n          case \"r\":\n            return \"\\r\";\n          case \"f\":\n            return \"\\f\";\n          case '\"':\n            return '\"';\n          case \"'\":\n            return \"'\";\n          case \"\\\\\":\n            return \"\\\\\";\n        }\n      }\n      if (u) {\n        return String.fromCharCode(parseInt(u, 16));\n      }\n      if (U) {\n        throw new Error(\"Unsupported U escape\");\n      }\n    });\n  }\n  return NQuads_1;\n}\n/*!\n * Copyright (c) 2016-2022 Digital Bazaar, Inc. All rights reserved.\n */\nvar URDNA2015_1;\nvar hasRequiredURDNA2015;\nfunction requireURDNA2015() {\n  if (hasRequiredURDNA2015) return URDNA2015_1;\n  hasRequiredURDNA2015 = 1;\n  const IdentifierIssuer = requireIdentifierIssuer();\n  const MessageDigest = requireMessageDigestBrowser();\n  const Permuter = requirePermuter();\n  const NQuads2 = requireNQuads$1();\n  URDNA2015_1 = class URDNA2015 {\n    constructor({\n      createMessageDigest = () => new MessageDigest(\"sha256\"),\n      canonicalIdMap = /* @__PURE__ */ new Map(),\n      maxDeepIterations = Infinity\n    } = {}) {\n      this.name = \"URDNA2015\";\n      this.blankNodeInfo = /* @__PURE__ */ new Map();\n      this.canonicalIssuer = new IdentifierIssuer(\"_:c14n\", canonicalIdMap);\n      this.createMessageDigest = createMessageDigest;\n      this.maxDeepIterations = maxDeepIterations;\n      this.quads = null;\n      this.deepIterations = null;\n    }\n    // 4.4) Normalization Algorithm\n    async main(dataset) {\n      this.deepIterations = /* @__PURE__ */ new Map();\n      this.quads = dataset;\n      for (const quad of dataset) {\n        this._addBlankNodeQuadInfo({ quad, component: quad.subject });\n        this._addBlankNodeQuadInfo({ quad, component: quad.object });\n        this._addBlankNodeQuadInfo({ quad, component: quad.graph });\n      }\n      const hashToBlankNodes = /* @__PURE__ */ new Map();\n      const nonNormalized = [...this.blankNodeInfo.keys()];\n      let i = 0;\n      for (const id of nonNormalized) {\n        if (++i % 100 === 0) {\n          await this._yield();\n        }\n        await this._hashAndTrackBlankNode({ id, hashToBlankNodes });\n      }\n      const hashes = [...hashToBlankNodes.keys()].sort();\n      const nonUnique = [];\n      for (const hash of hashes) {\n        const idList = hashToBlankNodes.get(hash);\n        if (idList.length > 1) {\n          nonUnique.push(idList);\n          continue;\n        }\n        const id = idList[0];\n        this.canonicalIssuer.getId(id);\n      }\n      for (const idList of nonUnique) {\n        const hashPathList = [];\n        for (const id of idList) {\n          if (this.canonicalIssuer.hasId(id)) {\n            continue;\n          }\n          const issuer = new IdentifierIssuer(\"_:b\");\n          issuer.getId(id);\n          const result = await this.hashNDegreeQuads(id, issuer);\n          hashPathList.push(result);\n        }\n        hashPathList.sort(_stringHashCompare);\n        for (const result of hashPathList) {\n          const oldIds = result.issuer.getOldIds();\n          for (const id of oldIds) {\n            this.canonicalIssuer.getId(id);\n          }\n        }\n      }\n      const normalized = [];\n      for (const quad of this.quads) {\n        const nQuad = NQuads2.serializeQuadComponents(\n          this._componentWithCanonicalId(quad.subject),\n          quad.predicate,\n          this._componentWithCanonicalId(quad.object),\n          this._componentWithCanonicalId(quad.graph)\n        );\n        normalized.push(nQuad);\n      }\n      normalized.sort();\n      return normalized.join(\"\");\n    }\n    // 4.6) Hash First Degree Quads\n    async hashFirstDegreeQuads(id) {\n      const nquads = [];\n      const info = this.blankNodeInfo.get(id);\n      const quads = info.quads;\n      for (const quad of quads) {\n        const copy = {\n          subject: null,\n          predicate: quad.predicate,\n          object: null,\n          graph: null\n        };\n        copy.subject = this.modifyFirstDegreeComponent(\n          id,\n          quad.subject,\n          \"subject\"\n        );\n        copy.object = this.modifyFirstDegreeComponent(\n          id,\n          quad.object,\n          \"object\"\n        );\n        copy.graph = this.modifyFirstDegreeComponent(\n          id,\n          quad.graph,\n          \"graph\"\n        );\n        nquads.push(NQuads2.serializeQuad(copy));\n      }\n      nquads.sort();\n      const md = this.createMessageDigest();\n      for (const nquad of nquads) {\n        md.update(nquad);\n      }\n      info.hash = await md.digest();\n      return info.hash;\n    }\n    // 4.7) Hash Related Blank Node\n    async hashRelatedBlankNode(related, quad, issuer, position) {\n      let id;\n      if (this.canonicalIssuer.hasId(related)) {\n        id = this.canonicalIssuer.getId(related);\n      } else if (issuer.hasId(related)) {\n        id = issuer.getId(related);\n      } else {\n        id = this.blankNodeInfo.get(related).hash;\n      }\n      const md = this.createMessageDigest();\n      md.update(position);\n      if (position !== \"g\") {\n        md.update(this.getRelatedPredicate(quad));\n      }\n      md.update(id);\n      return md.digest();\n    }\n    // 4.8) Hash N-Degree Quads\n    async hashNDegreeQuads(id, issuer) {\n      const deepIterations = this.deepIterations.get(id) || 0;\n      if (deepIterations > this.maxDeepIterations) {\n        throw new Error(\n          `Maximum deep iterations (${this.maxDeepIterations}) exceeded.`\n        );\n      }\n      this.deepIterations.set(id, deepIterations + 1);\n      const md = this.createMessageDigest();\n      const hashToRelated = await this.createHashToRelated(id, issuer);\n      const hashes = [...hashToRelated.keys()].sort();\n      for (const hash of hashes) {\n        md.update(hash);\n        let chosenPath = \"\";\n        let chosenIssuer;\n        const permuter = new Permuter(hashToRelated.get(hash));\n        let i = 0;\n        while (permuter.hasNext()) {\n          const permutation = permuter.next();\n          if (++i % 3 === 0) {\n            await this._yield();\n          }\n          let issuerCopy = issuer.clone();\n          let path = \"\";\n          const recursionList = [];\n          let nextPermutation = false;\n          for (const related of permutation) {\n            if (this.canonicalIssuer.hasId(related)) {\n              path += this.canonicalIssuer.getId(related);\n            } else {\n              if (!issuerCopy.hasId(related)) {\n                recursionList.push(related);\n              }\n              path += issuerCopy.getId(related);\n            }\n            if (chosenPath.length !== 0 && path > chosenPath) {\n              nextPermutation = true;\n              break;\n            }\n          }\n          if (nextPermutation) {\n            continue;\n          }\n          for (const related of recursionList) {\n            const result = await this.hashNDegreeQuads(related, issuerCopy);\n            path += issuerCopy.getId(related);\n            path += `<${result.hash}>`;\n            issuerCopy = result.issuer;\n            if (chosenPath.length !== 0 && path > chosenPath) {\n              nextPermutation = true;\n              break;\n            }\n          }\n          if (nextPermutation) {\n            continue;\n          }\n          if (chosenPath.length === 0 || path < chosenPath) {\n            chosenPath = path;\n            chosenIssuer = issuerCopy;\n          }\n        }\n        md.update(chosenPath);\n        issuer = chosenIssuer;\n      }\n      return { hash: await md.digest(), issuer };\n    }\n    // helper for modifying component during Hash First Degree Quads\n    modifyFirstDegreeComponent(id, component) {\n      if (component.termType !== \"BlankNode\") {\n        return component;\n      }\n      return {\n        termType: \"BlankNode\",\n        value: component.value === id ? \"_:a\" : \"_:z\"\n      };\n    }\n    // helper for getting a related predicate\n    getRelatedPredicate(quad) {\n      return `<${quad.predicate.value}>`;\n    }\n    // helper for creating hash to related blank nodes map\n    async createHashToRelated(id, issuer) {\n      const hashToRelated = /* @__PURE__ */ new Map();\n      const quads = this.blankNodeInfo.get(id).quads;\n      let i = 0;\n      for (const quad of quads) {\n        if (++i % 100 === 0) {\n          await this._yield();\n        }\n        await Promise.all([\n          this._addRelatedBlankNodeHash({\n            quad,\n            component: quad.subject,\n            position: \"s\",\n            id,\n            issuer,\n            hashToRelated\n          }),\n          this._addRelatedBlankNodeHash({\n            quad,\n            component: quad.object,\n            position: \"o\",\n            id,\n            issuer,\n            hashToRelated\n          }),\n          this._addRelatedBlankNodeHash({\n            quad,\n            component: quad.graph,\n            position: \"g\",\n            id,\n            issuer,\n            hashToRelated\n          })\n        ]);\n      }\n      return hashToRelated;\n    }\n    async _hashAndTrackBlankNode({ id, hashToBlankNodes }) {\n      const hash = await this.hashFirstDegreeQuads(id);\n      const idList = hashToBlankNodes.get(hash);\n      if (!idList) {\n        hashToBlankNodes.set(hash, [id]);\n      } else {\n        idList.push(id);\n      }\n    }\n    _addBlankNodeQuadInfo({ quad, component }) {\n      if (component.termType !== \"BlankNode\") {\n        return;\n      }\n      const id = component.value;\n      const info = this.blankNodeInfo.get(id);\n      if (info) {\n        info.quads.add(quad);\n      } else {\n        this.blankNodeInfo.set(id, { quads: /* @__PURE__ */ new Set([quad]), hash: null });\n      }\n    }\n    async _addRelatedBlankNodeHash({ quad, component, position, id, issuer, hashToRelated }) {\n      if (!(component.termType === \"BlankNode\" && component.value !== id)) {\n        return;\n      }\n      const related = component.value;\n      const hash = await this.hashRelatedBlankNode(\n        related,\n        quad,\n        issuer,\n        position\n      );\n      const entries = hashToRelated.get(hash);\n      if (entries) {\n        entries.push(related);\n      } else {\n        hashToRelated.set(hash, [related]);\n      }\n    }\n    // canonical ids for 7.1\n    _componentWithCanonicalId(component) {\n      if (component.termType === \"BlankNode\" && !component.value.startsWith(this.canonicalIssuer.prefix)) {\n        return {\n          termType: \"BlankNode\",\n          value: this.canonicalIssuer.getId(component.value)\n        };\n      }\n      return component;\n    }\n    async _yield() {\n      return new Promise((resolve) => setImmediate(resolve));\n    }\n  };\n  function _stringHashCompare(a, b) {\n    return a.hash < b.hash ? -1 : a.hash > b.hash ? 1 : 0;\n  }\n  return URDNA2015_1;\n}\n/*!\n * Copyright (c) 2016-2022 Digital Bazaar, Inc. All rights reserved.\n */\nvar URGNA2012;\nvar hasRequiredURGNA2012;\nfunction requireURGNA2012() {\n  if (hasRequiredURGNA2012) return URGNA2012;\n  hasRequiredURGNA2012 = 1;\n  const MessageDigest = requireMessageDigestBrowser();\n  const URDNA2015 = requireURDNA2015();\n  URGNA2012 = class URDNA2012 extends URDNA2015 {\n    constructor() {\n      super();\n      this.name = \"URGNA2012\";\n      this.createMessageDigest = () => new MessageDigest(\"sha1\");\n    }\n    // helper for modifying component during Hash First Degree Quads\n    modifyFirstDegreeComponent(id, component, key) {\n      if (component.termType !== \"BlankNode\") {\n        return component;\n      }\n      if (key === \"graph\") {\n        return {\n          termType: \"BlankNode\",\n          value: \"_:g\"\n        };\n      }\n      return {\n        termType: \"BlankNode\",\n        value: component.value === id ? \"_:a\" : \"_:z\"\n      };\n    }\n    // helper for getting a related predicate\n    getRelatedPredicate(quad) {\n      return quad.predicate.value;\n    }\n    // helper for creating hash to related blank nodes map\n    async createHashToRelated(id, issuer) {\n      const hashToRelated = /* @__PURE__ */ new Map();\n      const quads = this.blankNodeInfo.get(id).quads;\n      let i = 0;\n      for (const quad of quads) {\n        let position;\n        let related;\n        if (quad.subject.termType === \"BlankNode\" && quad.subject.value !== id) {\n          related = quad.subject.value;\n          position = \"p\";\n        } else if (quad.object.termType === \"BlankNode\" && quad.object.value !== id) {\n          related = quad.object.value;\n          position = \"r\";\n        } else {\n          continue;\n        }\n        if (++i % 100 === 0) {\n          await this._yield();\n        }\n        const hash = await this.hashRelatedBlankNode(\n          related,\n          quad,\n          issuer,\n          position\n        );\n        const entries = hashToRelated.get(hash);\n        if (entries) {\n          entries.push(related);\n        } else {\n          hashToRelated.set(hash, [related]);\n        }\n      }\n      return hashToRelated;\n    }\n  };\n  return URGNA2012;\n}\n/*!\n * Copyright (c) 2016-2022 Digital Bazaar, Inc. All rights reserved.\n */\nvar URDNA2015Sync_1;\nvar hasRequiredURDNA2015Sync;\nfunction requireURDNA2015Sync() {\n  if (hasRequiredURDNA2015Sync) return URDNA2015Sync_1;\n  hasRequiredURDNA2015Sync = 1;\n  const IdentifierIssuer = requireIdentifierIssuer();\n  const MessageDigest = requireMessageDigestBrowser();\n  const Permuter = requirePermuter();\n  const NQuads2 = requireNQuads$1();\n  URDNA2015Sync_1 = class URDNA2015Sync {\n    constructor({\n      createMessageDigest = () => new MessageDigest(\"sha256\"),\n      canonicalIdMap = /* @__PURE__ */ new Map(),\n      maxDeepIterations = Infinity\n    } = {}) {\n      this.name = \"URDNA2015\";\n      this.blankNodeInfo = /* @__PURE__ */ new Map();\n      this.canonicalIssuer = new IdentifierIssuer(\"_:c14n\", canonicalIdMap);\n      this.createMessageDigest = createMessageDigest;\n      this.maxDeepIterations = maxDeepIterations;\n      this.quads = null;\n      this.deepIterations = null;\n    }\n    // 4.4) Normalization Algorithm\n    main(dataset) {\n      this.deepIterations = /* @__PURE__ */ new Map();\n      this.quads = dataset;\n      for (const quad of dataset) {\n        this._addBlankNodeQuadInfo({ quad, component: quad.subject });\n        this._addBlankNodeQuadInfo({ quad, component: quad.object });\n        this._addBlankNodeQuadInfo({ quad, component: quad.graph });\n      }\n      const hashToBlankNodes = /* @__PURE__ */ new Map();\n      const nonNormalized = [...this.blankNodeInfo.keys()];\n      for (const id of nonNormalized) {\n        this._hashAndTrackBlankNode({ id, hashToBlankNodes });\n      }\n      const hashes = [...hashToBlankNodes.keys()].sort();\n      const nonUnique = [];\n      for (const hash of hashes) {\n        const idList = hashToBlankNodes.get(hash);\n        if (idList.length > 1) {\n          nonUnique.push(idList);\n          continue;\n        }\n        const id = idList[0];\n        this.canonicalIssuer.getId(id);\n      }\n      for (const idList of nonUnique) {\n        const hashPathList = [];\n        for (const id of idList) {\n          if (this.canonicalIssuer.hasId(id)) {\n            continue;\n          }\n          const issuer = new IdentifierIssuer(\"_:b\");\n          issuer.getId(id);\n          const result = this.hashNDegreeQuads(id, issuer);\n          hashPathList.push(result);\n        }\n        hashPathList.sort(_stringHashCompare);\n        for (const result of hashPathList) {\n          const oldIds = result.issuer.getOldIds();\n          for (const id of oldIds) {\n            this.canonicalIssuer.getId(id);\n          }\n        }\n      }\n      const normalized = [];\n      for (const quad of this.quads) {\n        const nQuad = NQuads2.serializeQuadComponents(\n          this._componentWithCanonicalId({ component: quad.subject }),\n          quad.predicate,\n          this._componentWithCanonicalId({ component: quad.object }),\n          this._componentWithCanonicalId({ component: quad.graph })\n        );\n        normalized.push(nQuad);\n      }\n      normalized.sort();\n      return normalized.join(\"\");\n    }\n    // 4.6) Hash First Degree Quads\n    hashFirstDegreeQuads(id) {\n      const nquads = [];\n      const info = this.blankNodeInfo.get(id);\n      const quads = info.quads;\n      for (const quad of quads) {\n        const copy = {\n          subject: null,\n          predicate: quad.predicate,\n          object: null,\n          graph: null\n        };\n        copy.subject = this.modifyFirstDegreeComponent(\n          id,\n          quad.subject,\n          \"subject\"\n        );\n        copy.object = this.modifyFirstDegreeComponent(\n          id,\n          quad.object,\n          \"object\"\n        );\n        copy.graph = this.modifyFirstDegreeComponent(\n          id,\n          quad.graph,\n          \"graph\"\n        );\n        nquads.push(NQuads2.serializeQuad(copy));\n      }\n      nquads.sort();\n      const md = this.createMessageDigest();\n      for (const nquad of nquads) {\n        md.update(nquad);\n      }\n      info.hash = md.digest();\n      return info.hash;\n    }\n    // 4.7) Hash Related Blank Node\n    hashRelatedBlankNode(related, quad, issuer, position) {\n      let id;\n      if (this.canonicalIssuer.hasId(related)) {\n        id = this.canonicalIssuer.getId(related);\n      } else if (issuer.hasId(related)) {\n        id = issuer.getId(related);\n      } else {\n        id = this.blankNodeInfo.get(related).hash;\n      }\n      const md = this.createMessageDigest();\n      md.update(position);\n      if (position !== \"g\") {\n        md.update(this.getRelatedPredicate(quad));\n      }\n      md.update(id);\n      return md.digest();\n    }\n    // 4.8) Hash N-Degree Quads\n    hashNDegreeQuads(id, issuer) {\n      const deepIterations = this.deepIterations.get(id) || 0;\n      if (deepIterations > this.maxDeepIterations) {\n        throw new Error(\n          `Maximum deep iterations (${this.maxDeepIterations}) exceeded.`\n        );\n      }\n      this.deepIterations.set(id, deepIterations + 1);\n      const md = this.createMessageDigest();\n      const hashToRelated = this.createHashToRelated(id, issuer);\n      const hashes = [...hashToRelated.keys()].sort();\n      for (const hash of hashes) {\n        md.update(hash);\n        let chosenPath = \"\";\n        let chosenIssuer;\n        const permuter = new Permuter(hashToRelated.get(hash));\n        while (permuter.hasNext()) {\n          const permutation = permuter.next();\n          let issuerCopy = issuer.clone();\n          let path = \"\";\n          const recursionList = [];\n          let nextPermutation = false;\n          for (const related of permutation) {\n            if (this.canonicalIssuer.hasId(related)) {\n              path += this.canonicalIssuer.getId(related);\n            } else {\n              if (!issuerCopy.hasId(related)) {\n                recursionList.push(related);\n              }\n              path += issuerCopy.getId(related);\n            }\n            if (chosenPath.length !== 0 && path > chosenPath) {\n              nextPermutation = true;\n              break;\n            }\n          }\n          if (nextPermutation) {\n            continue;\n          }\n          for (const related of recursionList) {\n            const result = this.hashNDegreeQuads(related, issuerCopy);\n            path += issuerCopy.getId(related);\n            path += `<${result.hash}>`;\n            issuerCopy = result.issuer;\n            if (chosenPath.length !== 0 && path > chosenPath) {\n              nextPermutation = true;\n              break;\n            }\n          }\n          if (nextPermutation) {\n            continue;\n          }\n          if (chosenPath.length === 0 || path < chosenPath) {\n            chosenPath = path;\n            chosenIssuer = issuerCopy;\n          }\n        }\n        md.update(chosenPath);\n        issuer = chosenIssuer;\n      }\n      return { hash: md.digest(), issuer };\n    }\n    // helper for modifying component during Hash First Degree Quads\n    modifyFirstDegreeComponent(id, component) {\n      if (component.termType !== \"BlankNode\") {\n        return component;\n      }\n      return {\n        termType: \"BlankNode\",\n        value: component.value === id ? \"_:a\" : \"_:z\"\n      };\n    }\n    // helper for getting a related predicate\n    getRelatedPredicate(quad) {\n      return `<${quad.predicate.value}>`;\n    }\n    // helper for creating hash to related blank nodes map\n    createHashToRelated(id, issuer) {\n      const hashToRelated = /* @__PURE__ */ new Map();\n      const quads = this.blankNodeInfo.get(id).quads;\n      for (const quad of quads) {\n        this._addRelatedBlankNodeHash({\n          quad,\n          component: quad.subject,\n          position: \"s\",\n          id,\n          issuer,\n          hashToRelated\n        });\n        this._addRelatedBlankNodeHash({\n          quad,\n          component: quad.object,\n          position: \"o\",\n          id,\n          issuer,\n          hashToRelated\n        });\n        this._addRelatedBlankNodeHash({\n          quad,\n          component: quad.graph,\n          position: \"g\",\n          id,\n          issuer,\n          hashToRelated\n        });\n      }\n      return hashToRelated;\n    }\n    _hashAndTrackBlankNode({ id, hashToBlankNodes }) {\n      const hash = this.hashFirstDegreeQuads(id);\n      const idList = hashToBlankNodes.get(hash);\n      if (!idList) {\n        hashToBlankNodes.set(hash, [id]);\n      } else {\n        idList.push(id);\n      }\n    }\n    _addBlankNodeQuadInfo({ quad, component }) {\n      if (component.termType !== \"BlankNode\") {\n        return;\n      }\n      const id = component.value;\n      const info = this.blankNodeInfo.get(id);\n      if (info) {\n        info.quads.add(quad);\n      } else {\n        this.blankNodeInfo.set(id, { quads: /* @__PURE__ */ new Set([quad]), hash: null });\n      }\n    }\n    _addRelatedBlankNodeHash({ quad, component, position, id, issuer, hashToRelated }) {\n      if (!(component.termType === \"BlankNode\" && component.value !== id)) {\n        return;\n      }\n      const related = component.value;\n      const hash = this.hashRelatedBlankNode(related, quad, issuer, position);\n      const entries = hashToRelated.get(hash);\n      if (entries) {\n        entries.push(related);\n      } else {\n        hashToRelated.set(hash, [related]);\n      }\n    }\n    // canonical ids for 7.1\n    _componentWithCanonicalId({ component }) {\n      if (component.termType === \"BlankNode\" && !component.value.startsWith(this.canonicalIssuer.prefix)) {\n        return {\n          termType: \"BlankNode\",\n          value: this.canonicalIssuer.getId(component.value)\n        };\n      }\n      return component;\n    }\n  };\n  function _stringHashCompare(a, b) {\n    return a.hash < b.hash ? -1 : a.hash > b.hash ? 1 : 0;\n  }\n  return URDNA2015Sync_1;\n}\n/*!\n * Copyright (c) 2016-2021 Digital Bazaar, Inc. All rights reserved.\n */\nvar URGNA2012Sync;\nvar hasRequiredURGNA2012Sync;\nfunction requireURGNA2012Sync() {\n  if (hasRequiredURGNA2012Sync) return URGNA2012Sync;\n  hasRequiredURGNA2012Sync = 1;\n  const MessageDigest = requireMessageDigestBrowser();\n  const URDNA2015Sync = requireURDNA2015Sync();\n  URGNA2012Sync = class URDNA2012Sync extends URDNA2015Sync {\n    constructor() {\n      super();\n      this.name = \"URGNA2012\";\n      this.createMessageDigest = () => new MessageDigest(\"sha1\");\n    }\n    // helper for modifying component during Hash First Degree Quads\n    modifyFirstDegreeComponent(id, component, key) {\n      if (component.termType !== \"BlankNode\") {\n        return component;\n      }\n      if (key === \"graph\") {\n        return {\n          termType: \"BlankNode\",\n          value: \"_:g\"\n        };\n      }\n      return {\n        termType: \"BlankNode\",\n        value: component.value === id ? \"_:a\" : \"_:z\"\n      };\n    }\n    // helper for getting a related predicate\n    getRelatedPredicate(quad) {\n      return quad.predicate.value;\n    }\n    // helper for creating hash to related blank nodes map\n    createHashToRelated(id, issuer) {\n      const hashToRelated = /* @__PURE__ */ new Map();\n      const quads = this.blankNodeInfo.get(id).quads;\n      for (const quad of quads) {\n        let position;\n        let related;\n        if (quad.subject.termType === \"BlankNode\" && quad.subject.value !== id) {\n          related = quad.subject.value;\n          position = \"p\";\n        } else if (quad.object.termType === \"BlankNode\" && quad.object.value !== id) {\n          related = quad.object.value;\n          position = \"r\";\n        } else {\n          continue;\n        }\n        const hash = this.hashRelatedBlankNode(related, quad, issuer, position);\n        const entries = hashToRelated.get(hash);\n        if (entries) {\n          entries.push(related);\n        } else {\n          hashToRelated.set(hash, [related]);\n        }\n      }\n      return hashToRelated;\n    }\n  };\n  return URGNA2012Sync;\n}\nconst __viteBrowserExternal = {};\nconst __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  default: __viteBrowserExternal\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst require$$4 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1);\nvar hasRequiredLib;\nfunction requireLib() {\n  if (hasRequiredLib) return lib;\n  hasRequiredLib = 1;\n  (function(exports) {\n    const URDNA2015 = requireURDNA2015();\n    const URGNA20122 = requireURGNA2012();\n    const URDNA2015Sync = requireURDNA2015Sync();\n    const URGNA2012Sync2 = requireURGNA2012Sync();\n    let rdfCanonizeNative;\n    try {\n      rdfCanonizeNative = require$$4;\n    } catch (e) {\n    }\n    function _inputToDataset(input) {\n      if (!Array.isArray(input)) {\n        return exports.NQuads.legacyDatasetToQuads(input);\n      }\n      return input;\n    }\n    exports.NQuads = requireNQuads$1();\n    exports.IdentifierIssuer = requireIdentifierIssuer();\n    exports._rdfCanonizeNative = function(api) {\n      if (api) {\n        rdfCanonizeNative = api;\n      }\n      return rdfCanonizeNative;\n    };\n    exports.canonize = async function(input, options) {\n      const dataset = _inputToDataset(input);\n      if (options.useNative) {\n        if (!rdfCanonizeNative) {\n          throw new Error(\"rdf-canonize-native not available\");\n        }\n        if (options.createMessageDigest) {\n          throw new Error(\n            '\"createMessageDigest\" cannot be used with \"useNative\".'\n          );\n        }\n        return new Promise((resolve, reject) => rdfCanonizeNative.canonize(dataset, options, (err, canonical) => err ? reject(err) : resolve(canonical)));\n      }\n      if (options.algorithm === \"URDNA2015\") {\n        return new URDNA2015(options).main(dataset);\n      }\n      if (options.algorithm === \"URGNA2012\") {\n        if (options.createMessageDigest) {\n          throw new Error(\n            '\"createMessageDigest\" cannot be used with \"URGNA2012\".'\n          );\n        }\n        return new URGNA20122(options).main(dataset);\n      }\n      if (!(\"algorithm\" in options)) {\n        throw new Error(\"No RDF Dataset Canonicalization algorithm specified.\");\n      }\n      throw new Error(\n        \"Invalid RDF Dataset Canonicalization algorithm: \" + options.algorithm\n      );\n    };\n    exports._canonizeSync = function(input, options) {\n      const dataset = _inputToDataset(input);\n      if (options.useNative) {\n        if (!rdfCanonizeNative) {\n          throw new Error(\"rdf-canonize-native not available\");\n        }\n        if (options.createMessageDigest) {\n          throw new Error(\n            '\"createMessageDigest\" cannot be used with \"useNative\".'\n          );\n        }\n        return rdfCanonizeNative.canonizeSync(dataset, options);\n      }\n      if (options.algorithm === \"URDNA2015\") {\n        return new URDNA2015Sync(options).main(dataset);\n      }\n      if (options.algorithm === \"URGNA2012\") {\n        if (options.createMessageDigest) {\n          throw new Error(\n            '\"createMessageDigest\" cannot be used with \"URGNA2012\".'\n          );\n        }\n        return new URGNA2012Sync2(options).main(dataset);\n      }\n      if (!(\"algorithm\" in options)) {\n        throw new Error(\"No RDF Dataset Canonicalization algorithm specified.\");\n      }\n      throw new Error(\n        \"Invalid RDF Dataset Canonicalization algorithm: \" + options.algorithm\n      );\n    };\n  })(lib);\n  return lib;\n}\nvar rdfCanonize;\nvar hasRequiredRdfCanonize;\nfunction requireRdfCanonize() {\n  if (hasRequiredRdfCanonize) return rdfCanonize;\n  hasRequiredRdfCanonize = 1;\n  rdfCanonize = requireLib();\n  return rdfCanonize;\n}\nvar types;\nvar hasRequiredTypes;\nfunction requireTypes() {\n  if (hasRequiredTypes) return types;\n  hasRequiredTypes = 1;\n  const api = {};\n  types = api;\n  api.isArray = Array.isArray;\n  api.isBoolean = (v) => typeof v === \"boolean\" || Object.prototype.toString.call(v) === \"[object Boolean]\";\n  api.isDouble = (v) => api.isNumber(v) && (String(v).indexOf(\".\") !== -1 || Math.abs(v) >= 1e21);\n  api.isEmptyObject = (v) => api.isObject(v) && Object.keys(v).length === 0;\n  api.isNumber = (v) => typeof v === \"number\" || Object.prototype.toString.call(v) === \"[object Number]\";\n  api.isNumeric = (v) => !isNaN(parseFloat(v)) && isFinite(v);\n  api.isObject = (v) => Object.prototype.toString.call(v) === \"[object Object]\";\n  api.isString = (v) => typeof v === \"string\" || Object.prototype.toString.call(v) === \"[object String]\";\n  api.isUndefined = (v) => typeof v === \"undefined\";\n  return types;\n}\nvar graphTypes;\nvar hasRequiredGraphTypes;\nfunction requireGraphTypes() {\n  if (hasRequiredGraphTypes) return graphTypes;\n  hasRequiredGraphTypes = 1;\n  const types2 = requireTypes();\n  const api = {};\n  graphTypes = api;\n  api.isSubject = (v) => {\n    if (types2.isObject(v) && !(\"@value\" in v || \"@set\" in v || \"@list\" in v)) {\n      const keyCount = Object.keys(v).length;\n      return keyCount > 1 || !(\"@id\" in v);\n    }\n    return false;\n  };\n  api.isSubjectReference = (v) => (\n    // Note: A value is a subject reference if all of these hold true:\n    // 1. It is an Object.\n    // 2. It has a single key: @id.\n    types2.isObject(v) && Object.keys(v).length === 1 && \"@id\" in v\n  );\n  api.isValue = (v) => (\n    // Note: A value is a @value if all of these hold true:\n    // 1. It is an Object.\n    // 2. It has the @value property.\n    types2.isObject(v) && \"@value\" in v\n  );\n  api.isList = (v) => (\n    // Note: A value is a @list if all of these hold true:\n    // 1. It is an Object.\n    // 2. It has the @list property.\n    types2.isObject(v) && \"@list\" in v\n  );\n  api.isGraph = (v) => {\n    return types2.isObject(v) && \"@graph\" in v && Object.keys(v).filter((key) => key !== \"@id\" && key !== \"@index\").length === 1;\n  };\n  api.isSimpleGraph = (v) => {\n    return api.isGraph(v) && !(\"@id\" in v);\n  };\n  api.isBlankNode = (v) => {\n    if (types2.isObject(v)) {\n      if (\"@id\" in v) {\n        const id = v[\"@id\"];\n        return !types2.isString(id) || id.indexOf(\"_:\") === 0;\n      }\n      return Object.keys(v).length === 0 || !(\"@value\" in v || \"@set\" in v || \"@list\" in v);\n    }\n    return false;\n  };\n  return graphTypes;\n}\nvar JsonLdError_1;\nvar hasRequiredJsonLdError;\nfunction requireJsonLdError() {\n  if (hasRequiredJsonLdError) return JsonLdError_1;\n  hasRequiredJsonLdError = 1;\n  JsonLdError_1 = class JsonLdError extends Error {\n    /**\n     * Creates a JSON-LD Error.\n     *\n     * @param msg the error message.\n     * @param type the error type.\n     * @param details the error details.\n     */\n    constructor(message = \"An unspecified JSON-LD error occurred.\", name = \"jsonld.Error\", details = {}) {\n      super(message);\n      this.name = name;\n      this.message = message;\n      this.details = details;\n    }\n  };\n  return JsonLdError_1;\n}\nvar util;\nvar hasRequiredUtil;\nfunction requireUtil() {\n  if (hasRequiredUtil) return util;\n  hasRequiredUtil = 1;\n  const graphTypes2 = requireGraphTypes();\n  const types2 = requireTypes();\n  const IdentifierIssuer = requireRdfCanonize().IdentifierIssuer;\n  const JsonLdError = requireJsonLdError();\n  const REGEX_BCP47 = /^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$/;\n  const REGEX_LINK_HEADERS = /(?:<[^>]*?>|\"[^\"]*?\"|[^,])+/g;\n  const REGEX_LINK_HEADER = /\\s*<([^>]*?)>\\s*(?:;\\s*(.*))?/;\n  const REGEX_LINK_HEADER_PARAMS = /(.*?)=(?:(?:\"([^\"]*?)\")|([^\"]*?))\\s*(?:(?:;\\s*)|$)/g;\n  const REGEX_KEYWORD = /^@[a-zA-Z]+$/;\n  const DEFAULTS = {\n    headers: {\n      accept: \"application/ld+json, application/json\"\n    }\n  };\n  const api = {};\n  util = api;\n  api.IdentifierIssuer = IdentifierIssuer;\n  api.REGEX_BCP47 = REGEX_BCP47;\n  api.REGEX_KEYWORD = REGEX_KEYWORD;\n  api.clone = function(value) {\n    if (value && typeof value === \"object\") {\n      let rval;\n      if (types2.isArray(value)) {\n        rval = [];\n        for (let i = 0; i < value.length; ++i) {\n          rval[i] = api.clone(value[i]);\n        }\n      } else if (value instanceof Map) {\n        rval = /* @__PURE__ */ new Map();\n        for (const [k, v] of value) {\n          rval.set(k, api.clone(v));\n        }\n      } else if (value instanceof Set) {\n        rval = /* @__PURE__ */ new Set();\n        for (const v of value) {\n          rval.add(api.clone(v));\n        }\n      } else if (types2.isObject(value)) {\n        rval = {};\n        for (const key in value) {\n          rval[key] = api.clone(value[key]);\n        }\n      } else {\n        rval = value.toString();\n      }\n      return rval;\n    }\n    return value;\n  };\n  api.asArray = function(value) {\n    return Array.isArray(value) ? value : [value];\n  };\n  api.buildHeaders = (headers = {}) => {\n    const hasAccept = Object.keys(headers).some(\n      (h) => h.toLowerCase() === \"accept\"\n    );\n    if (hasAccept) {\n      throw new RangeError(\n        'Accept header may not be specified; only \"' + DEFAULTS.headers.accept + '\" is supported.'\n      );\n    }\n    return Object.assign({ Accept: DEFAULTS.headers.accept }, headers);\n  };\n  api.parseLinkHeader = (header) => {\n    const rval = {};\n    const entries = header.match(REGEX_LINK_HEADERS);\n    for (let i = 0; i < entries.length; ++i) {\n      let match = entries[i].match(REGEX_LINK_HEADER);\n      if (!match) {\n        continue;\n      }\n      const result = { target: match[1] };\n      const params = match[2];\n      while (match = REGEX_LINK_HEADER_PARAMS.exec(params)) {\n        result[match[1]] = match[2] === void 0 ? match[3] : match[2];\n      }\n      const rel = result.rel || \"\";\n      if (Array.isArray(rval[rel])) {\n        rval[rel].push(result);\n      } else if (rval.hasOwnProperty(rel)) {\n        rval[rel] = [rval[rel], result];\n      } else {\n        rval[rel] = result;\n      }\n    }\n    return rval;\n  };\n  api.validateTypeValue = (v, isFrame) => {\n    if (types2.isString(v)) {\n      return;\n    }\n    if (types2.isArray(v) && v.every((vv) => types2.isString(vv))) {\n      return;\n    }\n    if (isFrame && types2.isObject(v)) {\n      switch (Object.keys(v).length) {\n        case 0:\n          return;\n        case 1:\n          if (\"@default\" in v && api.asArray(v[\"@default\"]).every((vv) => types2.isString(vv))) {\n            return;\n          }\n      }\n    }\n    throw new JsonLdError(\n      'Invalid JSON-LD syntax; \"@type\" value must a string, an array of strings, an empty object, or a default object.',\n      \"jsonld.SyntaxError\",\n      { code: \"invalid type value\", value: v }\n    );\n  };\n  api.hasProperty = (subject, property) => {\n    if (subject.hasOwnProperty(property)) {\n      const value = subject[property];\n      return !types2.isArray(value) || value.length > 0;\n    }\n    return false;\n  };\n  api.hasValue = (subject, property, value) => {\n    if (api.hasProperty(subject, property)) {\n      let val = subject[property];\n      const isList = graphTypes2.isList(val);\n      if (types2.isArray(val) || isList) {\n        if (isList) {\n          val = val[\"@list\"];\n        }\n        for (let i = 0; i < val.length; ++i) {\n          if (api.compareValues(value, val[i])) {\n            return true;\n          }\n        }\n      } else if (!types2.isArray(value)) {\n        return api.compareValues(value, val);\n      }\n    }\n    return false;\n  };\n  api.addValue = (subject, property, value, options) => {\n    options = options || {};\n    if (!(\"propertyIsArray\" in options)) {\n      options.propertyIsArray = false;\n    }\n    if (!(\"valueIsArray\" in options)) {\n      options.valueIsArray = false;\n    }\n    if (!(\"allowDuplicate\" in options)) {\n      options.allowDuplicate = true;\n    }\n    if (!(\"prependValue\" in options)) {\n      options.prependValue = false;\n    }\n    if (options.valueIsArray) {\n      subject[property] = value;\n    } else if (types2.isArray(value)) {\n      if (value.length === 0 && options.propertyIsArray && !subject.hasOwnProperty(property)) {\n        subject[property] = [];\n      }\n      if (options.prependValue) {\n        value = value.concat(subject[property]);\n        subject[property] = [];\n      }\n      for (let i = 0; i < value.length; ++i) {\n        api.addValue(subject, property, value[i], options);\n      }\n    } else if (subject.hasOwnProperty(property)) {\n      const hasValue = !options.allowDuplicate && api.hasValue(subject, property, value);\n      if (!types2.isArray(subject[property]) && (!hasValue || options.propertyIsArray)) {\n        subject[property] = [subject[property]];\n      }\n      if (!hasValue) {\n        if (options.prependValue) {\n          subject[property].unshift(value);\n        } else {\n          subject[property].push(value);\n        }\n      }\n    } else {\n      subject[property] = options.propertyIsArray ? [value] : value;\n    }\n  };\n  api.getValues = (subject, property) => [].concat(subject[property] || []);\n  api.removeProperty = (subject, property) => {\n    delete subject[property];\n  };\n  api.removeValue = (subject, property, value, options) => {\n    options = options || {};\n    if (!(\"propertyIsArray\" in options)) {\n      options.propertyIsArray = false;\n    }\n    const values = api.getValues(subject, property).filter(\n      (e) => !api.compareValues(e, value)\n    );\n    if (values.length === 0) {\n      api.removeProperty(subject, property);\n    } else if (values.length === 1 && !options.propertyIsArray) {\n      subject[property] = values[0];\n    } else {\n      subject[property] = values;\n    }\n  };\n  api.relabelBlankNodes = (input, options) => {\n    options = options || {};\n    const issuer = options.issuer || new IdentifierIssuer(\"_:b\");\n    return _labelBlankNodes(issuer, input);\n  };\n  api.compareValues = (v1, v2) => {\n    if (v1 === v2) {\n      return true;\n    }\n    if (graphTypes2.isValue(v1) && graphTypes2.isValue(v2) && v1[\"@value\"] === v2[\"@value\"] && v1[\"@type\"] === v2[\"@type\"] && v1[\"@language\"] === v2[\"@language\"] && v1[\"@index\"] === v2[\"@index\"]) {\n      return true;\n    }\n    if (types2.isObject(v1) && \"@id\" in v1 && types2.isObject(v2) && \"@id\" in v2) {\n      return v1[\"@id\"] === v2[\"@id\"];\n    }\n    return false;\n  };\n  api.compareShortestLeast = (a, b) => {\n    if (a.length < b.length) {\n      return -1;\n    }\n    if (b.length < a.length) {\n      return 1;\n    }\n    if (a === b) {\n      return 0;\n    }\n    return a < b ? -1 : 1;\n  };\n  function _labelBlankNodes(issuer, element) {\n    if (types2.isArray(element)) {\n      for (let i = 0; i < element.length; ++i) {\n        element[i] = _labelBlankNodes(issuer, element[i]);\n      }\n    } else if (graphTypes2.isList(element)) {\n      element[\"@list\"] = _labelBlankNodes(issuer, element[\"@list\"]);\n    } else if (types2.isObject(element)) {\n      if (graphTypes2.isBlankNode(element)) {\n        element[\"@id\"] = issuer.getId(element[\"@id\"]);\n      }\n      const keys = Object.keys(element).sort();\n      for (let ki = 0; ki < keys.length; ++ki) {\n        const key = keys[ki];\n        if (key !== \"@id\") {\n          element[key] = _labelBlankNodes(issuer, element[key]);\n        }\n      }\n    }\n    return element;\n  }\n  return util;\n}\nvar constants;\nvar hasRequiredConstants;\nfunction requireConstants() {\n  if (hasRequiredConstants) return constants;\n  hasRequiredConstants = 1;\n  const RDF = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#\";\n  const XSD = \"http://www.w3.org/2001/XMLSchema#\";\n  constants = {\n    // TODO: Deprecated and will be removed later. Use LINK_HEADER_CONTEXT.\n    LINK_HEADER_REL: \"http://www.w3.org/ns/json-ld#context\",\n    LINK_HEADER_CONTEXT: \"http://www.w3.org/ns/json-ld#context\",\n    RDF,\n    RDF_LIST: RDF + \"List\",\n    RDF_FIRST: RDF + \"first\",\n    RDF_REST: RDF + \"rest\",\n    RDF_NIL: RDF + \"nil\",\n    RDF_TYPE: RDF + \"type\",\n    RDF_PLAIN_LITERAL: RDF + \"PlainLiteral\",\n    RDF_XML_LITERAL: RDF + \"XMLLiteral\",\n    RDF_JSON_LITERAL: RDF + \"JSON\",\n    RDF_OBJECT: RDF + \"object\",\n    RDF_LANGSTRING: RDF + \"langString\",\n    XSD,\n    XSD_BOOLEAN: XSD + \"boolean\",\n    XSD_DOUBLE: XSD + \"double\",\n    XSD_INTEGER: XSD + \"integer\",\n    XSD_STRING: XSD + \"string\"\n  };\n  return constants;\n}\nvar RequestQueue_1;\nvar hasRequiredRequestQueue;\nfunction requireRequestQueue() {\n  if (hasRequiredRequestQueue) return RequestQueue_1;\n  hasRequiredRequestQueue = 1;\n  RequestQueue_1 = class RequestQueue {\n    /**\n     * Creates a simple queue for requesting documents.\n     */\n    constructor() {\n      this._requests = {};\n    }\n    wrapLoader(loader) {\n      const self2 = this;\n      self2._loader = loader;\n      return function() {\n        return self2.add.apply(self2, arguments);\n      };\n    }\n    async add(url2) {\n      let promise = this._requests[url2];\n      if (promise) {\n        return Promise.resolve(promise);\n      }\n      promise = this._requests[url2] = this._loader(url2);\n      try {\n        return await promise;\n      } finally {\n        delete this._requests[url2];\n      }\n    }\n  };\n  return RequestQueue_1;\n}\nvar url;\nvar hasRequiredUrl;\nfunction requireUrl() {\n  if (hasRequiredUrl) return url;\n  hasRequiredUrl = 1;\n  const types2 = requireTypes();\n  const api = {};\n  url = api;\n  api.parsers = {\n    simple: {\n      // RFC 3986 basic parts\n      keys: [\n        \"href\",\n        \"scheme\",\n        \"authority\",\n        \"path\",\n        \"query\",\n        \"fragment\"\n      ],\n      /* eslint-disable-next-line max-len */\n      regex: /^(?:([^:\\/?#]+):)?(?:\\/\\/([^\\/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?/\n    },\n    full: {\n      keys: [\n        \"href\",\n        \"protocol\",\n        \"scheme\",\n        \"authority\",\n        \"auth\",\n        \"user\",\n        \"password\",\n        \"hostname\",\n        \"port\",\n        \"path\",\n        \"directory\",\n        \"file\",\n        \"query\",\n        \"fragment\"\n      ],\n      /* eslint-disable-next-line max-len */\n      regex: /^(([a-zA-Z][a-zA-Z0-9+-.]*):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?(?:(((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/\n    }\n  };\n  api.parse = (str, parser) => {\n    const parsed = {};\n    const o = api.parsers[parser || \"full\"];\n    const m = o.regex.exec(str);\n    let i = o.keys.length;\n    while (i--) {\n      parsed[o.keys[i]] = m[i] === void 0 ? null : m[i];\n    }\n    if (parsed.scheme === \"https\" && parsed.port === \"443\" || parsed.scheme === \"http\" && parsed.port === \"80\") {\n      parsed.href = parsed.href.replace(\":\" + parsed.port, \"\");\n      parsed.authority = parsed.authority.replace(\":\" + parsed.port, \"\");\n      parsed.port = null;\n    }\n    parsed.normalizedPath = api.removeDotSegments(parsed.path);\n    return parsed;\n  };\n  api.prependBase = (base, iri) => {\n    if (base === null) {\n      return iri;\n    }\n    if (api.isAbsolute(iri)) {\n      return iri;\n    }\n    if (!base || types2.isString(base)) {\n      base = api.parse(base || \"\");\n    }\n    const rel = api.parse(iri);\n    const transform = {\n      protocol: base.protocol || \"\"\n    };\n    if (rel.authority !== null) {\n      transform.authority = rel.authority;\n      transform.path = rel.path;\n      transform.query = rel.query;\n    } else {\n      transform.authority = base.authority;\n      if (rel.path === \"\") {\n        transform.path = base.path;\n        if (rel.query !== null) {\n          transform.query = rel.query;\n        } else {\n          transform.query = base.query;\n        }\n      } else {\n        if (rel.path.indexOf(\"/\") === 0) {\n          transform.path = rel.path;\n        } else {\n          let path = base.path;\n          path = path.substr(0, path.lastIndexOf(\"/\") + 1);\n          if ((path.length > 0 || base.authority) && path.substr(-1) !== \"/\") {\n            path += \"/\";\n          }\n          path += rel.path;\n          transform.path = path;\n        }\n        transform.query = rel.query;\n      }\n    }\n    if (rel.path !== \"\") {\n      transform.path = api.removeDotSegments(transform.path);\n    }\n    let rval = transform.protocol;\n    if (transform.authority !== null) {\n      rval += \"//\" + transform.authority;\n    }\n    rval += transform.path;\n    if (transform.query !== null) {\n      rval += \"?\" + transform.query;\n    }\n    if (rel.fragment !== null) {\n      rval += \"#\" + rel.fragment;\n    }\n    if (rval === \"\") {\n      rval = \"./\";\n    }\n    return rval;\n  };\n  api.removeBase = (base, iri) => {\n    if (base === null) {\n      return iri;\n    }\n    if (!base || types2.isString(base)) {\n      base = api.parse(base || \"\");\n    }\n    let root = \"\";\n    if (base.href !== \"\") {\n      root += (base.protocol || \"\") + \"//\" + (base.authority || \"\");\n    } else if (iri.indexOf(\"//\")) {\n      root += \"//\";\n    }\n    if (iri.indexOf(root) !== 0) {\n      return iri;\n    }\n    const rel = api.parse(iri.substr(root.length));\n    const baseSegments = base.normalizedPath.split(\"/\");\n    const iriSegments = rel.normalizedPath.split(\"/\");\n    const last = rel.fragment || rel.query ? 0 : 1;\n    while (baseSegments.length > 0 && iriSegments.length > last) {\n      if (baseSegments[0] !== iriSegments[0]) {\n        break;\n      }\n      baseSegments.shift();\n      iriSegments.shift();\n    }\n    let rval = \"\";\n    if (baseSegments.length > 0) {\n      baseSegments.pop();\n      for (let i = 0; i < baseSegments.length; ++i) {\n        rval += \"../\";\n      }\n    }\n    rval += iriSegments.join(\"/\");\n    if (rel.query !== null) {\n      rval += \"?\" + rel.query;\n    }\n    if (rel.fragment !== null) {\n      rval += \"#\" + rel.fragment;\n    }\n    if (rval === \"\") {\n      rval = \"./\";\n    }\n    return rval;\n  };\n  api.removeDotSegments = (path) => {\n    if (path.length === 0) {\n      return \"\";\n    }\n    const input = path.split(\"/\");\n    const output = [];\n    while (input.length > 0) {\n      const next = input.shift();\n      const done = input.length === 0;\n      if (next === \".\") {\n        if (done) {\n          output.push(\"\");\n        }\n        continue;\n      }\n      if (next === \"..\") {\n        output.pop();\n        if (done) {\n          output.push(\"\");\n        }\n        continue;\n      }\n      output.push(next);\n    }\n    if (path[0] === \"/\" && output.length > 0 && output[0] !== \"\") {\n      output.unshift(\"\");\n    }\n    if (output.length === 1 && output[0] === \"\") {\n      return \"/\";\n    }\n    return output.join(\"/\");\n  };\n  const isAbsoluteRegex = /^([A-Za-z][A-Za-z0-9+-.]*|_):[^\\s]*$/;\n  api.isAbsolute = (v) => types2.isString(v) && isAbsoluteRegex.test(v);\n  api.isRelative = (v) => types2.isString(v);\n  return url;\n}\nvar xhr;\nvar hasRequiredXhr;\nfunction requireXhr() {\n  if (hasRequiredXhr) return xhr;\n  hasRequiredXhr = 1;\n  const { parseLinkHeader, buildHeaders } = requireUtil();\n  const { LINK_HEADER_CONTEXT } = requireConstants();\n  const JsonLdError = requireJsonLdError();\n  const RequestQueue = requireRequestQueue();\n  const { prependBase } = requireUrl();\n  const REGEX_LINK_HEADER = /(^|(\\r\\n))link:/i;\n  xhr = ({\n    secure,\n    headers = {},\n    xhr: xhr2\n  } = { headers: {} }) => {\n    headers = buildHeaders(headers);\n    const queue = new RequestQueue();\n    return queue.wrapLoader(loader);\n    async function loader(url2) {\n      if (url2.indexOf(\"http:\") !== 0 && url2.indexOf(\"https:\") !== 0) {\n        throw new JsonLdError(\n          'URL could not be dereferenced; only \"http\" and \"https\" URLs are supported.',\n          \"jsonld.InvalidUrl\",\n          { code: \"loading document failed\", url: url2 }\n        );\n      }\n      if (secure && url2.indexOf(\"https\") !== 0) {\n        throw new JsonLdError(\n          `URL could not be dereferenced; secure mode is enabled and the URL's scheme is not \"https\".`,\n          \"jsonld.InvalidUrl\",\n          { code: \"loading document failed\", url: url2 }\n        );\n      }\n      let req;\n      try {\n        req = await _get(xhr2, url2, headers);\n      } catch (e) {\n        throw new JsonLdError(\n          \"URL could not be dereferenced, an error occurred.\",\n          \"jsonld.LoadDocumentError\",\n          { code: \"loading document failed\", url: url2, cause: e }\n        );\n      }\n      if (req.status >= 400) {\n        throw new JsonLdError(\n          \"URL could not be dereferenced: \" + req.statusText,\n          \"jsonld.LoadDocumentError\",\n          {\n            code: \"loading document failed\",\n            url: url2,\n            httpStatusCode: req.status\n          }\n        );\n      }\n      let doc = { contextUrl: null, documentUrl: url2, document: req.response };\n      let alternate = null;\n      const contentType = req.getResponseHeader(\"Content-Type\");\n      let linkHeader;\n      if (REGEX_LINK_HEADER.test(req.getAllResponseHeaders())) {\n        linkHeader = req.getResponseHeader(\"Link\");\n      }\n      if (linkHeader && contentType !== \"application/ld+json\") {\n        const linkHeaders = parseLinkHeader(linkHeader);\n        const linkedContext = linkHeaders[LINK_HEADER_CONTEXT];\n        if (Array.isArray(linkedContext)) {\n          throw new JsonLdError(\n            \"URL could not be dereferenced, it has more than one associated HTTP Link Header.\",\n            \"jsonld.InvalidUrl\",\n            { code: \"multiple context link headers\", url: url2 }\n          );\n        }\n        if (linkedContext) {\n          doc.contextUrl = linkedContext.target;\n        }\n        alternate = linkHeaders.alternate;\n        if (alternate && alternate.type == \"application/ld+json\" && !(contentType || \"\").match(/^application\\/(\\w*\\+)?json$/)) {\n          doc = await loader(prependBase(url2, alternate.target));\n        }\n      }\n      return doc;\n    }\n  };\n  function _get(xhr2, url2, headers) {\n    xhr2 = xhr2 || XMLHttpRequest;\n    const req = new xhr2();\n    return new Promise((resolve, reject) => {\n      req.onload = () => resolve(req);\n      req.onerror = (err) => reject(err);\n      req.open(\"GET\", url2, true);\n      for (const k in headers) {\n        req.setRequestHeader(k, headers[k]);\n      }\n      req.send();\n    });\n  }\n  return xhr;\n}\nvar platformBrowser;\nvar hasRequiredPlatformBrowser;\nfunction requirePlatformBrowser() {\n  if (hasRequiredPlatformBrowser) return platformBrowser;\n  hasRequiredPlatformBrowser = 1;\n  const xhrLoader = requireXhr();\n  const api = {};\n  platformBrowser = api;\n  api.setupDocumentLoaders = function(jsonld2) {\n    if (typeof XMLHttpRequest !== \"undefined\") {\n      jsonld2.documentLoaders.xhr = xhrLoader;\n      jsonld2.useDocumentLoader(\"xhr\");\n    }\n  };\n  api.setupGlobals = function(jsonld2) {\n    if (typeof globalThis.JsonLdProcessor === \"undefined\") {\n      Object.defineProperty(globalThis, \"JsonLdProcessor\", {\n        writable: true,\n        enumerable: false,\n        configurable: true,\n        value: jsonld2.JsonLdProcessor\n      });\n    }\n  };\n  return platformBrowser;\n}\nvar iterator;\nvar hasRequiredIterator;\nfunction requireIterator() {\n  if (hasRequiredIterator) return iterator;\n  hasRequiredIterator = 1;\n  iterator = function(Yallist) {\n    Yallist.prototype[Symbol.iterator] = function* () {\n      for (let walker = this.head; walker; walker = walker.next) {\n        yield walker.value;\n      }\n    };\n  };\n  return iterator;\n}\nvar yallist;\nvar hasRequiredYallist;\nfunction requireYallist() {\n  if (hasRequiredYallist) return yallist;\n  hasRequiredYallist = 1;\n  yallist = Yallist;\n  Yallist.Node = Node;\n  Yallist.create = Yallist;\n  function Yallist(list) {\n    var self2 = this;\n    if (!(self2 instanceof Yallist)) {\n      self2 = new Yallist();\n    }\n    self2.tail = null;\n    self2.head = null;\n    self2.length = 0;\n    if (list && typeof list.forEach === \"function\") {\n      list.forEach(function(item) {\n        self2.push(item);\n      });\n    } else if (arguments.length > 0) {\n      for (var i = 0, l = arguments.length; i < l; i++) {\n        self2.push(arguments[i]);\n      }\n    }\n    return self2;\n  }\n  Yallist.prototype.removeNode = function(node) {\n    if (node.list !== this) {\n      throw new Error(\"removing node which does not belong to this list\");\n    }\n    var next = node.next;\n    var prev = node.prev;\n    if (next) {\n      next.prev = prev;\n    }\n    if (prev) {\n      prev.next = next;\n    }\n    if (node === this.head) {\n      this.head = next;\n    }\n    if (node === this.tail) {\n      this.tail = prev;\n    }\n    node.list.length--;\n    node.next = null;\n    node.prev = null;\n    node.list = null;\n    return next;\n  };\n  Yallist.prototype.unshiftNode = function(node) {\n    if (node === this.head) {\n      return;\n    }\n    if (node.list) {\n      node.list.removeNode(node);\n    }\n    var head = this.head;\n    node.list = this;\n    node.next = head;\n    if (head) {\n      head.prev = node;\n    }\n    this.head = node;\n    if (!this.tail) {\n      this.tail = node;\n    }\n    this.length++;\n  };\n  Yallist.prototype.pushNode = function(node) {\n    if (node === this.tail) {\n      return;\n    }\n    if (node.list) {\n      node.list.removeNode(node);\n    }\n    var tail = this.tail;\n    node.list = this;\n    node.prev = tail;\n    if (tail) {\n      tail.next = node;\n    }\n    this.tail = node;\n    if (!this.head) {\n      this.head = node;\n    }\n    this.length++;\n  };\n  Yallist.prototype.push = function() {\n    for (var i = 0, l = arguments.length; i < l; i++) {\n      push(this, arguments[i]);\n    }\n    return this.length;\n  };\n  Yallist.prototype.unshift = function() {\n    for (var i = 0, l = arguments.length; i < l; i++) {\n      unshift(this, arguments[i]);\n    }\n    return this.length;\n  };\n  Yallist.prototype.pop = function() {\n    if (!this.tail) {\n      return void 0;\n    }\n    var res = this.tail.value;\n    this.tail = this.tail.prev;\n    if (this.tail) {\n      this.tail.next = null;\n    } else {\n      this.head = null;\n    }\n    this.length--;\n    return res;\n  };\n  Yallist.prototype.shift = function() {\n    if (!this.head) {\n      return void 0;\n    }\n    var res = this.head.value;\n    this.head = this.head.next;\n    if (this.head) {\n      this.head.prev = null;\n    } else {\n      this.tail = null;\n    }\n    this.length--;\n    return res;\n  };\n  Yallist.prototype.forEach = function(fn, thisp) {\n    thisp = thisp || this;\n    for (var walker = this.head, i = 0; walker !== null; i++) {\n      fn.call(thisp, walker.value, i, this);\n      walker = walker.next;\n    }\n  };\n  Yallist.prototype.forEachReverse = function(fn, thisp) {\n    thisp = thisp || this;\n    for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n      fn.call(thisp, walker.value, i, this);\n      walker = walker.prev;\n    }\n  };\n  Yallist.prototype.get = function(n) {\n    for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n      walker = walker.next;\n    }\n    if (i === n && walker !== null) {\n      return walker.value;\n    }\n  };\n  Yallist.prototype.getReverse = function(n) {\n    for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n      walker = walker.prev;\n    }\n    if (i === n && walker !== null) {\n      return walker.value;\n    }\n  };\n  Yallist.prototype.map = function(fn, thisp) {\n    thisp = thisp || this;\n    var res = new Yallist();\n    for (var walker = this.head; walker !== null; ) {\n      res.push(fn.call(thisp, walker.value, this));\n      walker = walker.next;\n    }\n    return res;\n  };\n  Yallist.prototype.mapReverse = function(fn, thisp) {\n    thisp = thisp || this;\n    var res = new Yallist();\n    for (var walker = this.tail; walker !== null; ) {\n      res.push(fn.call(thisp, walker.value, this));\n      walker = walker.prev;\n    }\n    return res;\n  };\n  Yallist.prototype.reduce = function(fn, initial) {\n    var acc;\n    var walker = this.head;\n    if (arguments.length > 1) {\n      acc = initial;\n    } else if (this.head) {\n      walker = this.head.next;\n      acc = this.head.value;\n    } else {\n      throw new TypeError(\"Reduce of empty list with no initial value\");\n    }\n    for (var i = 0; walker !== null; i++) {\n      acc = fn(acc, walker.value, i);\n      walker = walker.next;\n    }\n    return acc;\n  };\n  Yallist.prototype.reduceReverse = function(fn, initial) {\n    var acc;\n    var walker = this.tail;\n    if (arguments.length > 1) {\n      acc = initial;\n    } else if (this.tail) {\n      walker = this.tail.prev;\n      acc = this.tail.value;\n    } else {\n      throw new TypeError(\"Reduce of empty list with no initial value\");\n    }\n    for (var i = this.length - 1; walker !== null; i--) {\n      acc = fn(acc, walker.value, i);\n      walker = walker.prev;\n    }\n    return acc;\n  };\n  Yallist.prototype.toArray = function() {\n    var arr = new Array(this.length);\n    for (var i = 0, walker = this.head; walker !== null; i++) {\n      arr[i] = walker.value;\n      walker = walker.next;\n    }\n    return arr;\n  };\n  Yallist.prototype.toArrayReverse = function() {\n    var arr = new Array(this.length);\n    for (var i = 0, walker = this.tail; walker !== null; i++) {\n      arr[i] = walker.value;\n      walker = walker.prev;\n    }\n    return arr;\n  };\n  Yallist.prototype.slice = function(from, to) {\n    to = to || this.length;\n    if (to < 0) {\n      to += this.length;\n    }\n    from = from || 0;\n    if (from < 0) {\n      from += this.length;\n    }\n    var ret = new Yallist();\n    if (to < from || to < 0) {\n      return ret;\n    }\n    if (from < 0) {\n      from = 0;\n    }\n    if (to > this.length) {\n      to = this.length;\n    }\n    for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n      walker = walker.next;\n    }\n    for (; walker !== null && i < to; i++, walker = walker.next) {\n      ret.push(walker.value);\n    }\n    return ret;\n  };\n  Yallist.prototype.sliceReverse = function(from, to) {\n    to = to || this.length;\n    if (to < 0) {\n      to += this.length;\n    }\n    from = from || 0;\n    if (from < 0) {\n      from += this.length;\n    }\n    var ret = new Yallist();\n    if (to < from || to < 0) {\n      return ret;\n    }\n    if (from < 0) {\n      from = 0;\n    }\n    if (to > this.length) {\n      to = this.length;\n    }\n    for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n      walker = walker.prev;\n    }\n    for (; walker !== null && i > from; i--, walker = walker.prev) {\n      ret.push(walker.value);\n    }\n    return ret;\n  };\n  Yallist.prototype.splice = function(start, deleteCount, ...nodes) {\n    if (start > this.length) {\n      start = this.length - 1;\n    }\n    if (start < 0) {\n      start = this.length + start;\n    }\n    for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n      walker = walker.next;\n    }\n    var ret = [];\n    for (var i = 0; walker && i < deleteCount; i++) {\n      ret.push(walker.value);\n      walker = this.removeNode(walker);\n    }\n    if (walker === null) {\n      walker = this.tail;\n    }\n    if (walker !== this.head && walker !== this.tail) {\n      walker = walker.prev;\n    }\n    for (var i = 0; i < nodes.length; i++) {\n      walker = insert(this, walker, nodes[i]);\n    }\n    return ret;\n  };\n  Yallist.prototype.reverse = function() {\n    var head = this.head;\n    var tail = this.tail;\n    for (var walker = head; walker !== null; walker = walker.prev) {\n      var p = walker.prev;\n      walker.prev = walker.next;\n      walker.next = p;\n    }\n    this.head = tail;\n    this.tail = head;\n    return this;\n  };\n  function insert(self2, node, value) {\n    var inserted = node === self2.head ? new Node(value, null, node, self2) : new Node(value, node, node.next, self2);\n    if (inserted.next === null) {\n      self2.tail = inserted;\n    }\n    if (inserted.prev === null) {\n      self2.head = inserted;\n    }\n    self2.length++;\n    return inserted;\n  }\n  function push(self2, item) {\n    self2.tail = new Node(item, self2.tail, null, self2);\n    if (!self2.head) {\n      self2.head = self2.tail;\n    }\n    self2.length++;\n  }\n  function unshift(self2, item) {\n    self2.head = new Node(item, null, self2.head, self2);\n    if (!self2.tail) {\n      self2.tail = self2.head;\n    }\n    self2.length++;\n  }\n  function Node(value, prev, next, list) {\n    if (!(this instanceof Node)) {\n      return new Node(value, prev, next, list);\n    }\n    this.list = list;\n    this.value = value;\n    if (prev) {\n      prev.next = this;\n      this.prev = prev;\n    } else {\n      this.prev = null;\n    }\n    if (next) {\n      next.prev = this;\n      this.next = next;\n    } else {\n      this.next = null;\n    }\n  }\n  try {\n    requireIterator()(Yallist);\n  } catch (er) {\n  }\n  return yallist;\n}\nvar lruCache;\nvar hasRequiredLruCache;\nfunction requireLruCache() {\n  if (hasRequiredLruCache) return lruCache;\n  hasRequiredLruCache = 1;\n  const Yallist = requireYallist();\n  const MAX = Symbol(\"max\");\n  const LENGTH = Symbol(\"length\");\n  const LENGTH_CALCULATOR = Symbol(\"lengthCalculator\");\n  const ALLOW_STALE = Symbol(\"allowStale\");\n  const MAX_AGE = Symbol(\"maxAge\");\n  const DISPOSE = Symbol(\"dispose\");\n  const NO_DISPOSE_ON_SET = Symbol(\"noDisposeOnSet\");\n  const LRU_LIST = Symbol(\"lruList\");\n  const CACHE = Symbol(\"cache\");\n  const UPDATE_AGE_ON_GET = Symbol(\"updateAgeOnGet\");\n  const naiveLength = () => 1;\n  class LRUCache {\n    constructor(options) {\n      if (typeof options === \"number\")\n        options = { max: options };\n      if (!options)\n        options = {};\n      if (options.max && (typeof options.max !== \"number\" || options.max < 0))\n        throw new TypeError(\"max must be a non-negative number\");\n      this[MAX] = options.max || Infinity;\n      const lc = options.length || naiveLength;\n      this[LENGTH_CALCULATOR] = typeof lc !== \"function\" ? naiveLength : lc;\n      this[ALLOW_STALE] = options.stale || false;\n      if (options.maxAge && typeof options.maxAge !== \"number\")\n        throw new TypeError(\"maxAge must be a number\");\n      this[MAX_AGE] = options.maxAge || 0;\n      this[DISPOSE] = options.dispose;\n      this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;\n      this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;\n      this.reset();\n    }\n    // resize the cache when the max changes.\n    set max(mL) {\n      if (typeof mL !== \"number\" || mL < 0)\n        throw new TypeError(\"max must be a non-negative number\");\n      this[MAX] = mL || Infinity;\n      trim(this);\n    }\n    get max() {\n      return this[MAX];\n    }\n    set allowStale(allowStale) {\n      this[ALLOW_STALE] = !!allowStale;\n    }\n    get allowStale() {\n      return this[ALLOW_STALE];\n    }\n    set maxAge(mA) {\n      if (typeof mA !== \"number\")\n        throw new TypeError(\"maxAge must be a non-negative number\");\n      this[MAX_AGE] = mA;\n      trim(this);\n    }\n    get maxAge() {\n      return this[MAX_AGE];\n    }\n    // resize the cache when the lengthCalculator changes.\n    set lengthCalculator(lC) {\n      if (typeof lC !== \"function\")\n        lC = naiveLength;\n      if (lC !== this[LENGTH_CALCULATOR]) {\n        this[LENGTH_CALCULATOR] = lC;\n        this[LENGTH] = 0;\n        this[LRU_LIST].forEach((hit) => {\n          hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);\n          this[LENGTH] += hit.length;\n        });\n      }\n      trim(this);\n    }\n    get lengthCalculator() {\n      return this[LENGTH_CALCULATOR];\n    }\n    get length() {\n      return this[LENGTH];\n    }\n    get itemCount() {\n      return this[LRU_LIST].length;\n    }\n    rforEach(fn, thisp) {\n      thisp = thisp || this;\n      for (let walker = this[LRU_LIST].tail; walker !== null; ) {\n        const prev = walker.prev;\n        forEachStep(this, fn, walker, thisp);\n        walker = prev;\n      }\n    }\n    forEach(fn, thisp) {\n      thisp = thisp || this;\n      for (let walker = this[LRU_LIST].head; walker !== null; ) {\n        const next = walker.next;\n        forEachStep(this, fn, walker, thisp);\n        walker = next;\n      }\n    }\n    keys() {\n      return this[LRU_LIST].toArray().map((k) => k.key);\n    }\n    values() {\n      return this[LRU_LIST].toArray().map((k) => k.value);\n    }\n    reset() {\n      if (this[DISPOSE] && this[LRU_LIST] && this[LRU_LIST].length) {\n        this[LRU_LIST].forEach((hit) => this[DISPOSE](hit.key, hit.value));\n      }\n      this[CACHE] = /* @__PURE__ */ new Map();\n      this[LRU_LIST] = new Yallist();\n      this[LENGTH] = 0;\n    }\n    dump() {\n      return this[LRU_LIST].map((hit) => isStale(this, hit) ? false : {\n        k: hit.key,\n        v: hit.value,\n        e: hit.now + (hit.maxAge || 0)\n      }).toArray().filter((h) => h);\n    }\n    dumpLru() {\n      return this[LRU_LIST];\n    }\n    set(key, value, maxAge) {\n      maxAge = maxAge || this[MAX_AGE];\n      if (maxAge && typeof maxAge !== \"number\")\n        throw new TypeError(\"maxAge must be a number\");\n      const now = maxAge ? Date.now() : 0;\n      const len = this[LENGTH_CALCULATOR](value, key);\n      if (this[CACHE].has(key)) {\n        if (len > this[MAX]) {\n          del(this, this[CACHE].get(key));\n          return false;\n        }\n        const node = this[CACHE].get(key);\n        const item = node.value;\n        if (this[DISPOSE]) {\n          if (!this[NO_DISPOSE_ON_SET])\n            this[DISPOSE](key, item.value);\n        }\n        item.now = now;\n        item.maxAge = maxAge;\n        item.value = value;\n        this[LENGTH] += len - item.length;\n        item.length = len;\n        this.get(key);\n        trim(this);\n        return true;\n      }\n      const hit = new Entry(key, value, len, now, maxAge);\n      if (hit.length > this[MAX]) {\n        if (this[DISPOSE])\n          this[DISPOSE](key, value);\n        return false;\n      }\n      this[LENGTH] += hit.length;\n      this[LRU_LIST].unshift(hit);\n      this[CACHE].set(key, this[LRU_LIST].head);\n      trim(this);\n      return true;\n    }\n    has(key) {\n      if (!this[CACHE].has(key)) return false;\n      const hit = this[CACHE].get(key).value;\n      return !isStale(this, hit);\n    }\n    get(key) {\n      return get(this, key, true);\n    }\n    peek(key) {\n      return get(this, key, false);\n    }\n    pop() {\n      const node = this[LRU_LIST].tail;\n      if (!node)\n        return null;\n      del(this, node);\n      return node.value;\n    }\n    del(key) {\n      del(this, this[CACHE].get(key));\n    }\n    load(arr) {\n      this.reset();\n      const now = Date.now();\n      for (let l = arr.length - 1; l >= 0; l--) {\n        const hit = arr[l];\n        const expiresAt = hit.e || 0;\n        if (expiresAt === 0)\n          this.set(hit.k, hit.v);\n        else {\n          const maxAge = expiresAt - now;\n          if (maxAge > 0) {\n            this.set(hit.k, hit.v, maxAge);\n          }\n        }\n      }\n    }\n    prune() {\n      this[CACHE].forEach((value, key) => get(this, key, false));\n    }\n  }\n  const get = (self2, key, doUse) => {\n    const node = self2[CACHE].get(key);\n    if (node) {\n      const hit = node.value;\n      if (isStale(self2, hit)) {\n        del(self2, node);\n        if (!self2[ALLOW_STALE])\n          return void 0;\n      } else {\n        if (doUse) {\n          if (self2[UPDATE_AGE_ON_GET])\n            node.value.now = Date.now();\n          self2[LRU_LIST].unshiftNode(node);\n        }\n      }\n      return hit.value;\n    }\n  };\n  const isStale = (self2, hit) => {\n    if (!hit || !hit.maxAge && !self2[MAX_AGE])\n      return false;\n    const diff = Date.now() - hit.now;\n    return hit.maxAge ? diff > hit.maxAge : self2[MAX_AGE] && diff > self2[MAX_AGE];\n  };\n  const trim = (self2) => {\n    if (self2[LENGTH] > self2[MAX]) {\n      for (let walker = self2[LRU_LIST].tail; self2[LENGTH] > self2[MAX] && walker !== null; ) {\n        const prev = walker.prev;\n        del(self2, walker);\n        walker = prev;\n      }\n    }\n  };\n  const del = (self2, node) => {\n    if (node) {\n      const hit = node.value;\n      if (self2[DISPOSE])\n        self2[DISPOSE](hit.key, hit.value);\n      self2[LENGTH] -= hit.length;\n      self2[CACHE].delete(hit.key);\n      self2[LRU_LIST].removeNode(node);\n    }\n  };\n  class Entry {\n    constructor(key, value, length, now, maxAge) {\n      this.key = key;\n      this.value = value;\n      this.length = length;\n      this.now = now;\n      this.maxAge = maxAge || 0;\n    }\n  }\n  const forEachStep = (self2, fn, node, thisp) => {\n    let hit = node.value;\n    if (isStale(self2, hit)) {\n      del(self2, node);\n      if (!self2[ALLOW_STALE])\n        hit = void 0;\n    }\n    if (hit)\n      fn.call(thisp, hit.value, hit.key, self2);\n  };\n  lruCache = LRUCache;\n  return lruCache;\n}\nvar ResolvedContext_1;\nvar hasRequiredResolvedContext;\nfunction requireResolvedContext() {\n  if (hasRequiredResolvedContext) return ResolvedContext_1;\n  hasRequiredResolvedContext = 1;\n  const LRU = requireLruCache();\n  const MAX_ACTIVE_CONTEXTS = 10;\n  ResolvedContext_1 = class ResolvedContext {\n    /**\n     * Creates a ResolvedContext.\n     *\n     * @param document the context document.\n     */\n    constructor({ document: document2 }) {\n      this.document = document2;\n      this.cache = new LRU({ max: MAX_ACTIVE_CONTEXTS });\n    }\n    getProcessed(activeCtx) {\n      return this.cache.get(activeCtx);\n    }\n    setProcessed(activeCtx, processedCtx) {\n      this.cache.set(activeCtx, processedCtx);\n    }\n  };\n  return ResolvedContext_1;\n}\nvar ContextResolver_1;\nvar hasRequiredContextResolver;\nfunction requireContextResolver() {\n  if (hasRequiredContextResolver) return ContextResolver_1;\n  hasRequiredContextResolver = 1;\n  const {\n    isArray: _isArray,\n    isObject: _isObject,\n    isString: _isString\n  } = requireTypes();\n  const {\n    asArray: _asArray\n  } = requireUtil();\n  const { prependBase } = requireUrl();\n  const JsonLdError = requireJsonLdError();\n  const ResolvedContext = requireResolvedContext();\n  const MAX_CONTEXT_URLS = 10;\n  ContextResolver_1 = class ContextResolver {\n    /**\n     * Creates a ContextResolver.\n     *\n     * @param sharedCache a shared LRU cache with `get` and `set` APIs.\n     */\n    constructor({ sharedCache }) {\n      this.perOpCache = /* @__PURE__ */ new Map();\n      this.sharedCache = sharedCache;\n    }\n    async resolve({\n      activeCtx,\n      context: context2,\n      documentLoader,\n      base,\n      cycles = /* @__PURE__ */ new Set()\n    }) {\n      if (context2 && _isObject(context2) && context2[\"@context\"]) {\n        context2 = context2[\"@context\"];\n      }\n      context2 = _asArray(context2);\n      const allResolved = [];\n      for (const ctx of context2) {\n        if (_isString(ctx)) {\n          let resolved2 = this._get(ctx);\n          if (!resolved2) {\n            resolved2 = await this._resolveRemoteContext(\n              { activeCtx, url: ctx, documentLoader, base, cycles }\n            );\n          }\n          if (_isArray(resolved2)) {\n            allResolved.push(...resolved2);\n          } else {\n            allResolved.push(resolved2);\n          }\n          continue;\n        }\n        if (ctx === null) {\n          allResolved.push(new ResolvedContext({ document: null }));\n          continue;\n        }\n        if (!_isObject(ctx)) {\n          _throwInvalidLocalContext(context2);\n        }\n        const key = JSON.stringify(ctx);\n        let resolved = this._get(key);\n        if (!resolved) {\n          resolved = new ResolvedContext({ document: ctx });\n          this._cacheResolvedContext({ key, resolved, tag: \"static\" });\n        }\n        allResolved.push(resolved);\n      }\n      return allResolved;\n    }\n    _get(key) {\n      let resolved = this.perOpCache.get(key);\n      if (!resolved) {\n        const tagMap = this.sharedCache.get(key);\n        if (tagMap) {\n          resolved = tagMap.get(\"static\");\n          if (resolved) {\n            this.perOpCache.set(key, resolved);\n          }\n        }\n      }\n      return resolved;\n    }\n    _cacheResolvedContext({ key, resolved, tag }) {\n      this.perOpCache.set(key, resolved);\n      if (tag !== void 0) {\n        let tagMap = this.sharedCache.get(key);\n        if (!tagMap) {\n          tagMap = /* @__PURE__ */ new Map();\n          this.sharedCache.set(key, tagMap);\n        }\n        tagMap.set(tag, resolved);\n      }\n      return resolved;\n    }\n    async _resolveRemoteContext({ activeCtx, url: url2, documentLoader, base, cycles }) {\n      url2 = prependBase(base, url2);\n      const { context: context2, remoteDoc } = await this._fetchContext(\n        { activeCtx, url: url2, documentLoader, cycles }\n      );\n      base = remoteDoc.documentUrl || url2;\n      _resolveContextUrls({ context: context2, base });\n      const resolved = await this.resolve(\n        { activeCtx, context: context2, documentLoader, base, cycles }\n      );\n      this._cacheResolvedContext({ key: url2, resolved, tag: remoteDoc.tag });\n      return resolved;\n    }\n    async _fetchContext({ activeCtx, url: url2, documentLoader, cycles }) {\n      if (cycles.size > MAX_CONTEXT_URLS) {\n        throw new JsonLdError(\n          \"Maximum number of @context URLs exceeded.\",\n          \"jsonld.ContextUrlError\",\n          {\n            code: activeCtx.processingMode === \"json-ld-1.0\" ? \"loading remote context failed\" : \"context overflow\",\n            max: MAX_CONTEXT_URLS\n          }\n        );\n      }\n      if (cycles.has(url2)) {\n        throw new JsonLdError(\n          \"Cyclical @context URLs detected.\",\n          \"jsonld.ContextUrlError\",\n          {\n            code: activeCtx.processingMode === \"json-ld-1.0\" ? \"recursive context inclusion\" : \"context overflow\",\n            url: url2\n          }\n        );\n      }\n      cycles.add(url2);\n      let context2;\n      let remoteDoc;\n      try {\n        remoteDoc = await documentLoader(url2);\n        context2 = remoteDoc.document || null;\n        if (_isString(context2)) {\n          context2 = JSON.parse(context2);\n        }\n      } catch (e) {\n        throw new JsonLdError(\n          `Dereferencing a URL did not result in a valid JSON-LD object. Possible causes are an inaccessible URL perhaps due to a same-origin policy (ensure the server uses CORS if you are using client-side JavaScript), too many redirects, a non-JSON response, or more than one HTTP Link Header was provided for a remote context. URL: \"${url2}\".`,\n          \"jsonld.InvalidUrl\",\n          { code: \"loading remote context failed\", url: url2, cause: e }\n        );\n      }\n      if (!_isObject(context2)) {\n        throw new JsonLdError(\n          `Dereferencing a URL did not result in a JSON object. The response was valid JSON, but it was not a JSON object. URL: \"${url2}\".`,\n          \"jsonld.InvalidUrl\",\n          { code: \"invalid remote context\", url: url2 }\n        );\n      }\n      if (!(\"@context\" in context2)) {\n        context2 = { \"@context\": {} };\n      } else {\n        context2 = { \"@context\": context2[\"@context\"] };\n      }\n      if (remoteDoc.contextUrl) {\n        if (!_isArray(context2[\"@context\"])) {\n          context2[\"@context\"] = [context2[\"@context\"]];\n        }\n        context2[\"@context\"].push(remoteDoc.contextUrl);\n      }\n      return { context: context2, remoteDoc };\n    }\n  };\n  function _throwInvalidLocalContext(ctx) {\n    throw new JsonLdError(\n      \"Invalid JSON-LD syntax; @context must be an object.\",\n      \"jsonld.SyntaxError\",\n      {\n        code: \"invalid local context\",\n        context: ctx\n      }\n    );\n  }\n  function _resolveContextUrls({ context: context2, base }) {\n    if (!context2) {\n      return;\n    }\n    const ctx = context2[\"@context\"];\n    if (_isString(ctx)) {\n      context2[\"@context\"] = prependBase(base, ctx);\n      return;\n    }\n    if (_isArray(ctx)) {\n      for (let i = 0; i < ctx.length; ++i) {\n        const element = ctx[i];\n        if (_isString(element)) {\n          ctx[i] = prependBase(base, element);\n          continue;\n        }\n        if (_isObject(element)) {\n          _resolveContextUrls({ context: { \"@context\": element }, base });\n        }\n      }\n      return;\n    }\n    if (!_isObject(ctx)) {\n      return;\n    }\n    for (const term in ctx) {\n      _resolveContextUrls({ context: ctx[term], base });\n    }\n  }\n  return ContextResolver_1;\n}\nvar NQuads;\nvar hasRequiredNQuads;\nfunction requireNQuads() {\n  if (hasRequiredNQuads) return NQuads;\n  hasRequiredNQuads = 1;\n  NQuads = requireRdfCanonize().NQuads;\n  return NQuads;\n}\nvar events;\nvar hasRequiredEvents;\nfunction requireEvents() {\n  if (hasRequiredEvents) return events;\n  hasRequiredEvents = 1;\n  const JsonLdError = requireJsonLdError();\n  const {\n    isArray: _isArray\n  } = requireTypes();\n  const {\n    asArray: _asArray\n  } = requireUtil();\n  const api = {};\n  events = api;\n  api.defaultEventHandler = null;\n  api.setupEventHandler = ({ options = {} }) => {\n    const eventHandler = [].concat(\n      options.safe ? api.safeEventHandler : [],\n      options.eventHandler ? _asArray(options.eventHandler) : [],\n      api.defaultEventHandler ? api.defaultEventHandler : []\n    );\n    return eventHandler.length === 0 ? null : eventHandler;\n  };\n  api.handleEvent = ({\n    event,\n    options\n  }) => {\n    _handle({ event, handlers: options.eventHandler });\n  };\n  function _handle({ event, handlers }) {\n    let doNext = true;\n    for (let i = 0; doNext && i < handlers.length; ++i) {\n      doNext = false;\n      const handler = handlers[i];\n      if (_isArray(handler)) {\n        doNext = _handle({ event, handlers: handler });\n      } else if (typeof handler === \"function\") {\n        handler({ event, next: () => {\n          doNext = true;\n        } });\n      } else if (typeof handler === \"object\") {\n        if (event.code in handler) {\n          handler[event.code]({ event, next: () => {\n            doNext = true;\n          } });\n        } else {\n          doNext = true;\n        }\n      } else {\n        throw new JsonLdError(\n          \"Invalid event handler.\",\n          \"jsonld.InvalidEventHandler\",\n          { event }\n        );\n      }\n    }\n    return doNext;\n  }\n  const _notSafeEventCodes = /* @__PURE__ */ new Set([\n    \"empty object\",\n    \"free-floating scalar\",\n    \"invalid @language value\",\n    \"invalid property\",\n    // NOTE: spec edge case\n    \"null @id value\",\n    \"null @value value\",\n    \"object with only @id\",\n    \"object with only @language\",\n    \"object with only @list\",\n    \"object with only @value\",\n    \"relative @id reference\",\n    \"relative @type reference\",\n    \"relative @vocab reference\",\n    \"reserved @id value\",\n    \"reserved @reverse value\",\n    \"reserved term\",\n    // toRDF\n    \"blank node predicate\",\n    \"relative graph reference\",\n    \"relative object reference\",\n    \"relative predicate reference\",\n    \"relative subject reference\",\n    // toRDF / fromRDF\n    \"rdfDirection not set\"\n  ]);\n  api.safeEventHandler = function safeEventHandler({ event, next }) {\n    if (event.level === \"warning\" && _notSafeEventCodes.has(event.code)) {\n      throw new JsonLdError(\n        \"Safe mode validation error.\",\n        \"jsonld.ValidationError\",\n        { event }\n      );\n    }\n    next();\n  };\n  api.logEventHandler = function logEventHandler({ event, next }) {\n    console.log(`EVENT: ${event.message}`, { event });\n    next();\n  };\n  api.logWarningEventHandler = function logWarningEventHandler({ event, next }) {\n    if (event.level === \"warning\") {\n      console.warn(`WARNING: ${event.message}`, { event });\n    }\n    next();\n  };\n  api.unhandledEventHandler = function unhandledEventHandler({ event }) {\n    throw new JsonLdError(\n      \"No handler for event.\",\n      \"jsonld.UnhandledEvent\",\n      { event }\n    );\n  };\n  api.setDefaultEventHandler = function({ eventHandler } = {}) {\n    api.defaultEventHandler = eventHandler ? _asArray(eventHandler) : null;\n  };\n  return events;\n}\nvar context;\nvar hasRequiredContext;\nfunction requireContext() {\n  if (hasRequiredContext) return context;\n  hasRequiredContext = 1;\n  const util2 = requireUtil();\n  const JsonLdError = requireJsonLdError();\n  const {\n    isArray: _isArray,\n    isObject: _isObject,\n    isString: _isString,\n    isUndefined: _isUndefined\n  } = requireTypes();\n  const {\n    isAbsolute: _isAbsoluteIri,\n    isRelative: _isRelativeIri,\n    prependBase\n  } = requireUrl();\n  const {\n    handleEvent: _handleEvent\n  } = requireEvents();\n  const {\n    REGEX_BCP47,\n    REGEX_KEYWORD,\n    asArray: _asArray,\n    compareShortestLeast: _compareShortestLeast\n  } = requireUtil();\n  const INITIAL_CONTEXT_CACHE = /* @__PURE__ */ new Map();\n  const INITIAL_CONTEXT_CACHE_MAX_SIZE = 1e4;\n  const api = {};\n  context = api;\n  api.process = async ({\n    activeCtx,\n    localCtx,\n    options,\n    propagate = true,\n    overrideProtected = false,\n    cycles = /* @__PURE__ */ new Set()\n  }) => {\n    if (_isObject(localCtx) && \"@context\" in localCtx && _isArray(localCtx[\"@context\"])) {\n      localCtx = localCtx[\"@context\"];\n    }\n    const ctxs = _asArray(localCtx);\n    if (ctxs.length === 0) {\n      return activeCtx;\n    }\n    const events2 = [];\n    const eventCaptureHandler = [\n      ({ event, next }) => {\n        events2.push(event);\n        next();\n      }\n    ];\n    if (options.eventHandler) {\n      eventCaptureHandler.push(options.eventHandler);\n    }\n    const originalOptions = options;\n    options = { ...options, eventHandler: eventCaptureHandler };\n    const resolved = await options.contextResolver.resolve({\n      activeCtx,\n      context: localCtx,\n      documentLoader: options.documentLoader,\n      base: options.base\n    });\n    if (_isObject(resolved[0].document) && typeof resolved[0].document[\"@propagate\"] === \"boolean\") {\n      propagate = resolved[0].document[\"@propagate\"];\n    }\n    let rval = activeCtx;\n    if (!propagate && !rval.previousContext) {\n      rval = rval.clone();\n      rval.previousContext = activeCtx;\n    }\n    for (const resolvedContext of resolved) {\n      let { document: ctx } = resolvedContext;\n      activeCtx = rval;\n      if (ctx === null) {\n        if (!overrideProtected && Object.keys(activeCtx.protected).length !== 0) {\n          throw new JsonLdError(\n            \"Tried to nullify a context with protected terms outside of a term definition.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid context nullification\" }\n          );\n        }\n        rval = activeCtx = api.getInitialContext(options).clone();\n        continue;\n      }\n      const processed = resolvedContext.getProcessed(activeCtx);\n      if (processed) {\n        if (originalOptions.eventHandler) {\n          for (const event of processed.events) {\n            _handleEvent({ event, options: originalOptions });\n          }\n        }\n        rval = activeCtx = processed.context;\n        continue;\n      }\n      if (_isObject(ctx) && \"@context\" in ctx) {\n        ctx = ctx[\"@context\"];\n      }\n      if (!_isObject(ctx)) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; @context must be an object.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid local context\", context: ctx }\n        );\n      }\n      rval = rval.clone();\n      const defined = /* @__PURE__ */ new Map();\n      if (\"@version\" in ctx) {\n        if (ctx[\"@version\"] !== 1.1) {\n          throw new JsonLdError(\n            \"Unsupported JSON-LD version: \" + ctx[\"@version\"],\n            \"jsonld.UnsupportedVersion\",\n            { code: \"invalid @version value\", context: ctx }\n          );\n        }\n        if (activeCtx.processingMode && activeCtx.processingMode === \"json-ld-1.0\") {\n          throw new JsonLdError(\n            \"@version: \" + ctx[\"@version\"] + \" not compatible with \" + activeCtx.processingMode,\n            \"jsonld.ProcessingModeConflict\",\n            { code: \"processing mode conflict\", context: ctx }\n          );\n        }\n        rval.processingMode = \"json-ld-1.1\";\n        rval[\"@version\"] = ctx[\"@version\"];\n        defined.set(\"@version\", true);\n      }\n      rval.processingMode = rval.processingMode || activeCtx.processingMode;\n      if (\"@base\" in ctx) {\n        let base = ctx[\"@base\"];\n        if (base === null || _isAbsoluteIri(base)) ;\n        else if (_isRelativeIri(base)) {\n          base = prependBase(rval[\"@base\"], base);\n        } else {\n          throw new JsonLdError(\n            'Invalid JSON-LD syntax; the value of \"@base\" in a @context must be an absolute IRI, a relative IRI, or null.',\n            \"jsonld.SyntaxError\",\n            { code: \"invalid base IRI\", context: ctx }\n          );\n        }\n        rval[\"@base\"] = base;\n        defined.set(\"@base\", true);\n      }\n      if (\"@vocab\" in ctx) {\n        const value = ctx[\"@vocab\"];\n        if (value === null) {\n          delete rval[\"@vocab\"];\n        } else if (!_isString(value)) {\n          throw new JsonLdError(\n            'Invalid JSON-LD syntax; the value of \"@vocab\" in a @context must be a string or null.',\n            \"jsonld.SyntaxError\",\n            { code: \"invalid vocab mapping\", context: ctx }\n          );\n        } else if (!_isAbsoluteIri(value) && api.processingMode(rval, 1)) {\n          throw new JsonLdError(\n            'Invalid JSON-LD syntax; the value of \"@vocab\" in a @context must be an absolute IRI.',\n            \"jsonld.SyntaxError\",\n            { code: \"invalid vocab mapping\", context: ctx }\n          );\n        } else {\n          const vocab = _expandIri(\n            rval,\n            value,\n            { vocab: true, base: true },\n            void 0,\n            void 0,\n            options\n          );\n          if (!_isAbsoluteIri(vocab)) {\n            if (options.eventHandler) {\n              _handleEvent({\n                event: {\n                  type: [\"JsonLdEvent\"],\n                  code: \"relative @vocab reference\",\n                  level: \"warning\",\n                  message: \"Relative @vocab reference found.\",\n                  details: {\n                    vocab\n                  }\n                },\n                options\n              });\n            }\n          }\n          rval[\"@vocab\"] = vocab;\n        }\n        defined.set(\"@vocab\", true);\n      }\n      if (\"@language\" in ctx) {\n        const value = ctx[\"@language\"];\n        if (value === null) {\n          delete rval[\"@language\"];\n        } else if (!_isString(value)) {\n          throw new JsonLdError(\n            'Invalid JSON-LD syntax; the value of \"@language\" in a @context must be a string or null.',\n            \"jsonld.SyntaxError\",\n            { code: \"invalid default language\", context: ctx }\n          );\n        } else {\n          if (!value.match(REGEX_BCP47)) {\n            if (options.eventHandler) {\n              _handleEvent({\n                event: {\n                  type: [\"JsonLdEvent\"],\n                  code: \"invalid @language value\",\n                  level: \"warning\",\n                  message: \"@language value must be valid BCP47.\",\n                  details: {\n                    language: value\n                  }\n                },\n                options\n              });\n            }\n          }\n          rval[\"@language\"] = value.toLowerCase();\n        }\n        defined.set(\"@language\", true);\n      }\n      if (\"@direction\" in ctx) {\n        const value = ctx[\"@direction\"];\n        if (activeCtx.processingMode === \"json-ld-1.0\") {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; @direction not compatible with \" + activeCtx.processingMode,\n            \"jsonld.SyntaxError\",\n            { code: \"invalid context member\", context: ctx }\n          );\n        }\n        if (value === null) {\n          delete rval[\"@direction\"];\n        } else if (value !== \"ltr\" && value !== \"rtl\") {\n          throw new JsonLdError(\n            'Invalid JSON-LD syntax; the value of \"@direction\" in a @context must be null, \"ltr\", or \"rtl\".',\n            \"jsonld.SyntaxError\",\n            { code: \"invalid base direction\", context: ctx }\n          );\n        } else {\n          rval[\"@direction\"] = value;\n        }\n        defined.set(\"@direction\", true);\n      }\n      if (\"@propagate\" in ctx) {\n        const value = ctx[\"@propagate\"];\n        if (activeCtx.processingMode === \"json-ld-1.0\") {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; @propagate not compatible with \" + activeCtx.processingMode,\n            \"jsonld.SyntaxError\",\n            { code: \"invalid context entry\", context: ctx }\n          );\n        }\n        if (typeof value !== \"boolean\") {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; @propagate value must be a boolean.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid @propagate value\", context: localCtx }\n          );\n        }\n        defined.set(\"@propagate\", true);\n      }\n      if (\"@import\" in ctx) {\n        const value = ctx[\"@import\"];\n        if (activeCtx.processingMode === \"json-ld-1.0\") {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; @import not compatible with \" + activeCtx.processingMode,\n            \"jsonld.SyntaxError\",\n            { code: \"invalid context entry\", context: ctx }\n          );\n        }\n        if (!_isString(value)) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; @import must be a string.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid @import value\", context: localCtx }\n          );\n        }\n        const resolvedImport = await options.contextResolver.resolve({\n          activeCtx,\n          context: value,\n          documentLoader: options.documentLoader,\n          base: options.base\n        });\n        if (resolvedImport.length !== 1) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; @import must reference a single context.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid remote context\", context: localCtx }\n          );\n        }\n        const processedImport = resolvedImport[0].getProcessed(activeCtx);\n        if (processedImport) {\n          ctx = processedImport;\n        } else {\n          const importCtx = resolvedImport[0].document;\n          if (\"@import\" in importCtx) {\n            throw new JsonLdError(\n              \"Invalid JSON-LD syntax: imported context must not include @import.\",\n              \"jsonld.SyntaxError\",\n              { code: \"invalid context entry\", context: localCtx }\n            );\n          }\n          for (const key in importCtx) {\n            if (!ctx.hasOwnProperty(key)) {\n              ctx[key] = importCtx[key];\n            }\n          }\n          resolvedImport[0].setProcessed(activeCtx, ctx);\n        }\n        defined.set(\"@import\", true);\n      }\n      defined.set(\"@protected\", ctx[\"@protected\"] || false);\n      for (const key in ctx) {\n        api.createTermDefinition({\n          activeCtx: rval,\n          localCtx: ctx,\n          term: key,\n          defined,\n          options,\n          overrideProtected\n        });\n        if (_isObject(ctx[key]) && \"@context\" in ctx[key]) {\n          const keyCtx = ctx[key][\"@context\"];\n          let process2 = true;\n          if (_isString(keyCtx)) {\n            const url2 = prependBase(options.base, keyCtx);\n            if (cycles.has(url2)) {\n              process2 = false;\n            } else {\n              cycles.add(url2);\n            }\n          }\n          if (process2) {\n            try {\n              await api.process({\n                activeCtx: rval.clone(),\n                localCtx: ctx[key][\"@context\"],\n                overrideProtected: true,\n                options,\n                cycles\n              });\n            } catch (e) {\n              throw new JsonLdError(\n                \"Invalid JSON-LD syntax; invalid scoped context.\",\n                \"jsonld.SyntaxError\",\n                {\n                  code: \"invalid scoped context\",\n                  context: ctx[key][\"@context\"],\n                  term: key\n                }\n              );\n            }\n          }\n        }\n      }\n      resolvedContext.setProcessed(activeCtx, {\n        context: rval,\n        events: events2\n      });\n    }\n    return rval;\n  };\n  api.createTermDefinition = ({\n    activeCtx,\n    localCtx,\n    term,\n    defined,\n    options,\n    overrideProtected = false\n  }) => {\n    if (defined.has(term)) {\n      if (defined.get(term)) {\n        return;\n      }\n      throw new JsonLdError(\n        \"Cyclical context definition detected.\",\n        \"jsonld.CyclicalContext\",\n        { code: \"cyclic IRI mapping\", context: localCtx, term }\n      );\n    }\n    defined.set(term, false);\n    let value;\n    if (localCtx.hasOwnProperty(term)) {\n      value = localCtx[term];\n    }\n    if (term === \"@type\" && _isObject(value) && (value[\"@container\"] || \"@set\") === \"@set\" && api.processingMode(activeCtx, 1.1)) {\n      const validKeys2 = [\"@container\", \"@id\", \"@protected\"];\n      const keys = Object.keys(value);\n      if (keys.length === 0 || keys.some((k) => !validKeys2.includes(k))) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; keywords cannot be overridden.\",\n          \"jsonld.SyntaxError\",\n          { code: \"keyword redefinition\", context: localCtx, term }\n        );\n      }\n    } else if (api.isKeyword(term)) {\n      throw new JsonLdError(\n        \"Invalid JSON-LD syntax; keywords cannot be overridden.\",\n        \"jsonld.SyntaxError\",\n        { code: \"keyword redefinition\", context: localCtx, term }\n      );\n    } else if (term.match(REGEX_KEYWORD)) {\n      if (options.eventHandler) {\n        _handleEvent({\n          event: {\n            type: [\"JsonLdEvent\"],\n            code: \"reserved term\",\n            level: \"warning\",\n            message: 'Terms beginning with \"@\" are reserved for future use and dropped.',\n            details: {\n              term\n            }\n          },\n          options\n        });\n      }\n      return;\n    } else if (term === \"\") {\n      throw new JsonLdError(\n        \"Invalid JSON-LD syntax; a term cannot be an empty string.\",\n        \"jsonld.SyntaxError\",\n        { code: \"invalid term definition\", context: localCtx }\n      );\n    }\n    const previousMapping = activeCtx.mappings.get(term);\n    if (activeCtx.mappings.has(term)) {\n      activeCtx.mappings.delete(term);\n    }\n    let simpleTerm = false;\n    if (_isString(value) || value === null) {\n      simpleTerm = true;\n      value = { \"@id\": value };\n    }\n    if (!_isObject(value)) {\n      throw new JsonLdError(\n        \"Invalid JSON-LD syntax; @context term values must be strings or objects.\",\n        \"jsonld.SyntaxError\",\n        { code: \"invalid term definition\", context: localCtx }\n      );\n    }\n    const mapping = {};\n    activeCtx.mappings.set(term, mapping);\n    mapping.reverse = false;\n    const validKeys = [\"@container\", \"@id\", \"@language\", \"@reverse\", \"@type\"];\n    if (api.processingMode(activeCtx, 1.1)) {\n      validKeys.push(\n        \"@context\",\n        \"@direction\",\n        \"@index\",\n        \"@nest\",\n        \"@prefix\",\n        \"@protected\"\n      );\n    }\n    for (const kw in value) {\n      if (!validKeys.includes(kw)) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; a term definition must not contain \" + kw,\n          \"jsonld.SyntaxError\",\n          { code: \"invalid term definition\", context: localCtx }\n        );\n      }\n    }\n    const colon = term.indexOf(\":\");\n    mapping._termHasColon = colon > 0;\n    if (\"@reverse\" in value) {\n      if (\"@id\" in value) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; a @reverse term definition must not contain @id.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid reverse property\", context: localCtx }\n        );\n      }\n      if (\"@nest\" in value) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; a @reverse term definition must not contain @nest.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid reverse property\", context: localCtx }\n        );\n      }\n      const reverse = value[\"@reverse\"];\n      if (!_isString(reverse)) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; a @context @reverse value must be a string.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid IRI mapping\", context: localCtx }\n        );\n      }\n      if (reverse.match(REGEX_KEYWORD)) {\n        if (options.eventHandler) {\n          _handleEvent({\n            event: {\n              type: [\"JsonLdEvent\"],\n              code: \"reserved @reverse value\",\n              level: \"warning\",\n              message: '@reverse values beginning with \"@\" are reserved for future use and dropped.',\n              details: {\n                reverse\n              }\n            },\n            options\n          });\n        }\n        if (previousMapping) {\n          activeCtx.mappings.set(term, previousMapping);\n        } else {\n          activeCtx.mappings.delete(term);\n        }\n        return;\n      }\n      const id2 = _expandIri(\n        activeCtx,\n        reverse,\n        { vocab: true, base: false },\n        localCtx,\n        defined,\n        options\n      );\n      if (!_isAbsoluteIri(id2)) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; a @context @reverse value must be an absolute IRI or a blank node identifier.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid IRI mapping\", context: localCtx }\n        );\n      }\n      mapping[\"@id\"] = id2;\n      mapping.reverse = true;\n    } else if (\"@id\" in value) {\n      let id2 = value[\"@id\"];\n      if (id2 && !_isString(id2)) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; a @context @id value must be an array of strings or a string.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid IRI mapping\", context: localCtx }\n        );\n      }\n      if (id2 === null) {\n        mapping[\"@id\"] = null;\n      } else if (!api.isKeyword(id2) && id2.match(REGEX_KEYWORD)) {\n        if (options.eventHandler) {\n          _handleEvent({\n            event: {\n              type: [\"JsonLdEvent\"],\n              code: \"reserved @id value\",\n              level: \"warning\",\n              message: '@id values beginning with \"@\" are reserved for future use and dropped.',\n              details: {\n                id: id2\n              }\n            },\n            options\n          });\n        }\n        if (previousMapping) {\n          activeCtx.mappings.set(term, previousMapping);\n        } else {\n          activeCtx.mappings.delete(term);\n        }\n        return;\n      } else if (id2 !== term) {\n        id2 = _expandIri(\n          activeCtx,\n          id2,\n          { vocab: true, base: false },\n          localCtx,\n          defined,\n          options\n        );\n        if (!_isAbsoluteIri(id2) && !api.isKeyword(id2)) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; a @context @id value must be an absolute IRI, a blank node identifier, or a keyword.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid IRI mapping\", context: localCtx }\n          );\n        }\n        if (term.match(/(?::[^:])|\\//)) {\n          const termDefined = new Map(defined).set(term, true);\n          const termIri = _expandIri(\n            activeCtx,\n            term,\n            { vocab: true, base: false },\n            localCtx,\n            termDefined,\n            options\n          );\n          if (termIri !== id2) {\n            throw new JsonLdError(\n              \"Invalid JSON-LD syntax; term in form of IRI must expand to definition.\",\n              \"jsonld.SyntaxError\",\n              { code: \"invalid IRI mapping\", context: localCtx }\n            );\n          }\n        }\n        mapping[\"@id\"] = id2;\n        mapping._prefix = simpleTerm && !mapping._termHasColon && id2.match(/[:\\/\\?#\\[\\]@]$/) !== null;\n      }\n    }\n    if (!(\"@id\" in mapping)) {\n      if (mapping._termHasColon) {\n        const prefix = term.substr(0, colon);\n        if (localCtx.hasOwnProperty(prefix)) {\n          api.createTermDefinition({\n            activeCtx,\n            localCtx,\n            term: prefix,\n            defined,\n            options\n          });\n        }\n        if (activeCtx.mappings.has(prefix)) {\n          const suffix = term.substr(colon + 1);\n          mapping[\"@id\"] = activeCtx.mappings.get(prefix)[\"@id\"] + suffix;\n        } else {\n          mapping[\"@id\"] = term;\n        }\n      } else if (term === \"@type\") {\n        mapping[\"@id\"] = term;\n      } else {\n        if (!(\"@vocab\" in activeCtx)) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; @context terms must define an @id.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid IRI mapping\", context: localCtx, term }\n          );\n        }\n        mapping[\"@id\"] = activeCtx[\"@vocab\"] + term;\n      }\n    }\n    if (value[\"@protected\"] === true || defined.get(\"@protected\") === true && value[\"@protected\"] !== false) {\n      activeCtx.protected[term] = true;\n      mapping.protected = true;\n    }\n    defined.set(term, true);\n    if (\"@type\" in value) {\n      let type = value[\"@type\"];\n      if (!_isString(type)) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; an @context @type value must be a string.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid type mapping\", context: localCtx }\n        );\n      }\n      if (type === \"@json\" || type === \"@none\") {\n        if (api.processingMode(activeCtx, 1)) {\n          throw new JsonLdError(\n            `Invalid JSON-LD syntax; an @context @type value must not be \"${type}\" in JSON-LD 1.0 mode.`,\n            \"jsonld.SyntaxError\",\n            { code: \"invalid type mapping\", context: localCtx }\n          );\n        }\n      } else if (type !== \"@id\" && type !== \"@vocab\") {\n        type = _expandIri(\n          activeCtx,\n          type,\n          { vocab: true, base: false },\n          localCtx,\n          defined,\n          options\n        );\n        if (!_isAbsoluteIri(type)) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; an @context @type value must be an absolute IRI.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid type mapping\", context: localCtx }\n          );\n        }\n        if (type.indexOf(\"_:\") === 0) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; an @context @type value must be an IRI, not a blank node identifier.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid type mapping\", context: localCtx }\n          );\n        }\n      }\n      mapping[\"@type\"] = type;\n    }\n    if (\"@container\" in value) {\n      const container = _isString(value[\"@container\"]) ? [value[\"@container\"]] : value[\"@container\"] || [];\n      const validContainers = [\"@list\", \"@set\", \"@index\", \"@language\"];\n      let isValid = true;\n      const hasSet = container.includes(\"@set\");\n      if (api.processingMode(activeCtx, 1.1)) {\n        validContainers.push(\"@graph\", \"@id\", \"@type\");\n        if (container.includes(\"@list\")) {\n          if (container.length !== 1) {\n            throw new JsonLdError(\n              \"Invalid JSON-LD syntax; @context @container with @list must have no other values\",\n              \"jsonld.SyntaxError\",\n              { code: \"invalid container mapping\", context: localCtx }\n            );\n          }\n        } else if (container.includes(\"@graph\")) {\n          if (container.some((key) => key !== \"@graph\" && key !== \"@id\" && key !== \"@index\" && key !== \"@set\")) {\n            throw new JsonLdError(\n              \"Invalid JSON-LD syntax; @context @container with @graph must have no other values other than @id, @index, and @set\",\n              \"jsonld.SyntaxError\",\n              { code: \"invalid container mapping\", context: localCtx }\n            );\n          }\n        } else {\n          isValid &= container.length <= (hasSet ? 2 : 1);\n        }\n        if (container.includes(\"@type\")) {\n          mapping[\"@type\"] = mapping[\"@type\"] || \"@id\";\n          if (![\"@id\", \"@vocab\"].includes(mapping[\"@type\"])) {\n            throw new JsonLdError(\n              \"Invalid JSON-LD syntax; container: @type requires @type to be @id or @vocab.\",\n              \"jsonld.SyntaxError\",\n              { code: \"invalid type mapping\", context: localCtx }\n            );\n          }\n        }\n      } else {\n        isValid &= !_isArray(value[\"@container\"]);\n        isValid &= container.length <= 1;\n      }\n      isValid &= container.every((c) => validContainers.includes(c));\n      isValid &= !(hasSet && container.includes(\"@list\"));\n      if (!isValid) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; @context @container value must be one of the following: \" + validContainers.join(\", \"),\n          \"jsonld.SyntaxError\",\n          { code: \"invalid container mapping\", context: localCtx }\n        );\n      }\n      if (mapping.reverse && !container.every((c) => [\"@index\", \"@set\"].includes(c))) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; @context @container value for a @reverse type definition must be @index or @set.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid reverse property\", context: localCtx }\n        );\n      }\n      mapping[\"@container\"] = container;\n    }\n    if (\"@index\" in value) {\n      if (!(\"@container\" in value) || !mapping[\"@container\"].includes(\"@index\")) {\n        throw new JsonLdError(\n          `Invalid JSON-LD syntax; @index without @index in @container: \"${value[\"@index\"]}\" on term \"${term}\".`,\n          \"jsonld.SyntaxError\",\n          { code: \"invalid term definition\", context: localCtx }\n        );\n      }\n      if (!_isString(value[\"@index\"]) || value[\"@index\"].indexOf(\"@\") === 0) {\n        throw new JsonLdError(\n          `Invalid JSON-LD syntax; @index must expand to an IRI: \"${value[\"@index\"]}\" on term \"${term}\".`,\n          \"jsonld.SyntaxError\",\n          { code: \"invalid term definition\", context: localCtx }\n        );\n      }\n      mapping[\"@index\"] = value[\"@index\"];\n    }\n    if (\"@context\" in value) {\n      mapping[\"@context\"] = value[\"@context\"];\n    }\n    if (\"@language\" in value && !(\"@type\" in value)) {\n      let language = value[\"@language\"];\n      if (language !== null && !_isString(language)) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; @context @language value must be a string or null.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid language mapping\", context: localCtx }\n        );\n      }\n      if (language !== null) {\n        language = language.toLowerCase();\n      }\n      mapping[\"@language\"] = language;\n    }\n    if (\"@prefix\" in value) {\n      if (term.match(/:|\\//)) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; @context @prefix used on a compact IRI term\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid term definition\", context: localCtx }\n        );\n      }\n      if (api.isKeyword(mapping[\"@id\"])) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; keywords may not be used as prefixes\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid term definition\", context: localCtx }\n        );\n      }\n      if (typeof value[\"@prefix\"] === \"boolean\") {\n        mapping._prefix = value[\"@prefix\"] === true;\n      } else {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; @context value for @prefix must be boolean\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid @prefix value\", context: localCtx }\n        );\n      }\n    }\n    if (\"@direction\" in value) {\n      const direction = value[\"@direction\"];\n      if (direction !== null && direction !== \"ltr\" && direction !== \"rtl\") {\n        throw new JsonLdError(\n          'Invalid JSON-LD syntax; @direction value must be null, \"ltr\", or \"rtl\".',\n          \"jsonld.SyntaxError\",\n          { code: \"invalid base direction\", context: localCtx }\n        );\n      }\n      mapping[\"@direction\"] = direction;\n    }\n    if (\"@nest\" in value) {\n      const nest = value[\"@nest\"];\n      if (!_isString(nest) || nest !== \"@nest\" && nest.indexOf(\"@\") === 0) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; @context @nest value must be a string which is not a keyword other than @nest.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid @nest value\", context: localCtx }\n        );\n      }\n      mapping[\"@nest\"] = nest;\n    }\n    // disallow aliasing @context and @preserve\n    const id = mapping[\"@id\"];\n    if (id === \"@context\" || id === \"@preserve\") {\n      throw new JsonLdError(\n        \"Invalid JSON-LD syntax; @context and @preserve cannot be aliased.\",\n        \"jsonld.SyntaxError\",\n        { code: \"invalid keyword alias\", context: localCtx }\n      );\n    }\n    if (previousMapping && previousMapping.protected && !overrideProtected) {\n      activeCtx.protected[term] = true;\n      mapping.protected = true;\n      if (!_deepCompare(previousMapping, mapping)) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; tried to redefine a protected term.\",\n          \"jsonld.SyntaxError\",\n          { code: \"protected term redefinition\", context: localCtx, term }\n        );\n      }\n    }\n  };\n  api.expandIri = (activeCtx, value, relativeTo, options) => {\n    return _expandIri(\n      activeCtx,\n      value,\n      relativeTo,\n      void 0,\n      void 0,\n      options\n    );\n  };\n  function _expandIri(activeCtx, value, relativeTo, localCtx, defined, options) {\n    if (value === null || !_isString(value) || api.isKeyword(value)) {\n      return value;\n    }\n    if (value.match(REGEX_KEYWORD)) {\n      return null;\n    }\n    if (localCtx && localCtx.hasOwnProperty(value) && defined.get(value) !== true) {\n      api.createTermDefinition({\n        activeCtx,\n        localCtx,\n        term: value,\n        defined,\n        options\n      });\n    }\n    relativeTo = relativeTo || {};\n    if (relativeTo.vocab) {\n      const mapping = activeCtx.mappings.get(value);\n      if (mapping === null) {\n        return null;\n      }\n      if (_isObject(mapping) && \"@id\" in mapping) {\n        return mapping[\"@id\"];\n      }\n    }\n    const colon = value.indexOf(\":\");\n    if (colon > 0) {\n      const prefix = value.substr(0, colon);\n      const suffix = value.substr(colon + 1);\n      if (prefix === \"_\" || suffix.indexOf(\"//\") === 0) {\n        return value;\n      }\n      if (localCtx && localCtx.hasOwnProperty(prefix)) {\n        api.createTermDefinition({\n          activeCtx,\n          localCtx,\n          term: prefix,\n          defined,\n          options\n        });\n      }\n      const mapping = activeCtx.mappings.get(prefix);\n      if (mapping && mapping._prefix) {\n        return mapping[\"@id\"] + suffix;\n      }\n      if (_isAbsoluteIri(value)) {\n        return value;\n      }\n    }\n    if (relativeTo.vocab && \"@vocab\" in activeCtx) {\n      const prependedResult = activeCtx[\"@vocab\"] + value;\n      value = prependedResult;\n    } else if (relativeTo.base) {\n      let prependedResult;\n      let base;\n      if (\"@base\" in activeCtx) {\n        if (activeCtx[\"@base\"]) {\n          base = prependBase(options.base, activeCtx[\"@base\"]);\n          prependedResult = prependBase(base, value);\n        } else {\n          base = activeCtx[\"@base\"];\n          prependedResult = value;\n        }\n      } else {\n        base = options.base;\n        prependedResult = prependBase(options.base, value);\n      }\n      value = prependedResult;\n    }\n    return value;\n  }\n  api.getInitialContext = (options) => {\n    const key = JSON.stringify({ processingMode: options.processingMode });\n    const cached = INITIAL_CONTEXT_CACHE.get(key);\n    if (cached) {\n      return cached;\n    }\n    const initialContext = {\n      processingMode: options.processingMode,\n      mappings: /* @__PURE__ */ new Map(),\n      inverse: null,\n      getInverse: _createInverseContext,\n      clone: _cloneActiveContext,\n      revertToPreviousContext: _revertToPreviousContext,\n      protected: {}\n    };\n    if (INITIAL_CONTEXT_CACHE.size === INITIAL_CONTEXT_CACHE_MAX_SIZE) {\n      INITIAL_CONTEXT_CACHE.clear();\n    }\n    INITIAL_CONTEXT_CACHE.set(key, initialContext);\n    return initialContext;\n    function _createInverseContext() {\n      const activeCtx = this;\n      if (activeCtx.inverse) {\n        return activeCtx.inverse;\n      }\n      const inverse = activeCtx.inverse = {};\n      const fastCurieMap = activeCtx.fastCurieMap = {};\n      const irisToTerms = {};\n      const defaultLanguage = (activeCtx[\"@language\"] || \"@none\").toLowerCase();\n      const defaultDirection = activeCtx[\"@direction\"];\n      const mappings = activeCtx.mappings;\n      const terms = [...mappings.keys()].sort(_compareShortestLeast);\n      for (const term of terms) {\n        const mapping = mappings.get(term);\n        if (mapping === null) {\n          continue;\n        }\n        let container = mapping[\"@container\"] || \"@none\";\n        container = [].concat(container).sort().join(\"\");\n        if (mapping[\"@id\"] === null) {\n          continue;\n        }\n        const ids = _asArray(mapping[\"@id\"]);\n        for (const iri of ids) {\n          let entry = inverse[iri];\n          const isKeyword = api.isKeyword(iri);\n          if (!entry) {\n            inverse[iri] = entry = {};\n            if (!isKeyword && !mapping._termHasColon) {\n              irisToTerms[iri] = [term];\n              const fastCurieEntry = { iri, terms: irisToTerms[iri] };\n              if (iri[0] in fastCurieMap) {\n                fastCurieMap[iri[0]].push(fastCurieEntry);\n              } else {\n                fastCurieMap[iri[0]] = [fastCurieEntry];\n              }\n            }\n          } else if (!isKeyword && !mapping._termHasColon) {\n            irisToTerms[iri].push(term);\n          }\n          if (!entry[container]) {\n            entry[container] = {\n              \"@language\": {},\n              \"@type\": {},\n              \"@any\": {}\n            };\n          }\n          entry = entry[container];\n          _addPreferredTerm(term, entry[\"@any\"], \"@none\");\n          if (mapping.reverse) {\n            _addPreferredTerm(term, entry[\"@type\"], \"@reverse\");\n          } else if (mapping[\"@type\"] === \"@none\") {\n            _addPreferredTerm(term, entry[\"@any\"], \"@none\");\n            _addPreferredTerm(term, entry[\"@language\"], \"@none\");\n            _addPreferredTerm(term, entry[\"@type\"], \"@none\");\n          } else if (\"@type\" in mapping) {\n            _addPreferredTerm(term, entry[\"@type\"], mapping[\"@type\"]);\n          } else if (\"@language\" in mapping && \"@direction\" in mapping) {\n            const language = mapping[\"@language\"];\n            const direction = mapping[\"@direction\"];\n            if (language && direction) {\n              _addPreferredTerm(\n                term,\n                entry[\"@language\"],\n                `${language}_${direction}`.toLowerCase()\n              );\n            } else if (language) {\n              _addPreferredTerm(term, entry[\"@language\"], language.toLowerCase());\n            } else if (direction) {\n              _addPreferredTerm(term, entry[\"@language\"], `_${direction}`);\n            } else {\n              _addPreferredTerm(term, entry[\"@language\"], \"@null\");\n            }\n          } else if (\"@language\" in mapping) {\n            _addPreferredTerm(\n              term,\n              entry[\"@language\"],\n              (mapping[\"@language\"] || \"@null\").toLowerCase()\n            );\n          } else if (\"@direction\" in mapping) {\n            if (mapping[\"@direction\"]) {\n              _addPreferredTerm(\n                term,\n                entry[\"@language\"],\n                `_${mapping[\"@direction\"]}`\n              );\n            } else {\n              _addPreferredTerm(term, entry[\"@language\"], \"@none\");\n            }\n          } else if (defaultDirection) {\n            _addPreferredTerm(term, entry[\"@language\"], `_${defaultDirection}`);\n            _addPreferredTerm(term, entry[\"@language\"], \"@none\");\n            _addPreferredTerm(term, entry[\"@type\"], \"@none\");\n          } else {\n            _addPreferredTerm(term, entry[\"@language\"], defaultLanguage);\n            _addPreferredTerm(term, entry[\"@language\"], \"@none\");\n            _addPreferredTerm(term, entry[\"@type\"], \"@none\");\n          }\n        }\n      }\n      for (const key2 in fastCurieMap) {\n        _buildIriMap(fastCurieMap, key2, 1);\n      }\n      return inverse;\n    }\n    function _buildIriMap(iriMap, key2, idx) {\n      const entries = iriMap[key2];\n      const next = iriMap[key2] = {};\n      let iri;\n      let letter;\n      for (const entry of entries) {\n        iri = entry.iri;\n        if (idx >= iri.length) {\n          letter = \"\";\n        } else {\n          letter = iri[idx];\n        }\n        if (letter in next) {\n          next[letter].push(entry);\n        } else {\n          next[letter] = [entry];\n        }\n      }\n      for (const key3 in next) {\n        if (key3 === \"\") {\n          continue;\n        }\n        _buildIriMap(next, key3, idx + 1);\n      }\n    }\n    function _addPreferredTerm(term, entry, typeOrLanguageValue) {\n      if (!entry.hasOwnProperty(typeOrLanguageValue)) {\n        entry[typeOrLanguageValue] = term;\n      }\n    }\n    function _cloneActiveContext() {\n      const child = {};\n      child.mappings = util2.clone(this.mappings);\n      child.clone = this.clone;\n      child.inverse = null;\n      child.getInverse = this.getInverse;\n      child.protected = util2.clone(this.protected);\n      if (this.previousContext) {\n        child.previousContext = this.previousContext.clone();\n      }\n      child.revertToPreviousContext = this.revertToPreviousContext;\n      if (\"@base\" in this) {\n        child[\"@base\"] = this[\"@base\"];\n      }\n      if (\"@language\" in this) {\n        child[\"@language\"] = this[\"@language\"];\n      }\n      if (\"@vocab\" in this) {\n        child[\"@vocab\"] = this[\"@vocab\"];\n      }\n      return child;\n    }\n    function _revertToPreviousContext() {\n      if (!this.previousContext) {\n        return this;\n      }\n      return this.previousContext.clone();\n    }\n  };\n  api.getContextValue = (ctx, key, type) => {\n    if (key === null) {\n      if (type === \"@context\") {\n        return void 0;\n      }\n      return null;\n    }\n    if (ctx.mappings.has(key)) {\n      const entry = ctx.mappings.get(key);\n      if (_isUndefined(type)) {\n        return entry;\n      }\n      if (entry.hasOwnProperty(type)) {\n        return entry[type];\n      }\n    }\n    if (type === \"@language\" && type in ctx) {\n      return ctx[type];\n    }\n    if (type === \"@direction\" && type in ctx) {\n      return ctx[type];\n    }\n    if (type === \"@context\") {\n      return void 0;\n    }\n    return null;\n  };\n  api.processingMode = (activeCtx, version) => {\n    if (version.toString() >= \"1.1\") {\n      return !activeCtx.processingMode || activeCtx.processingMode >= \"json-ld-\" + version.toString();\n    } else {\n      return activeCtx.processingMode === \"json-ld-1.0\";\n    }\n  };\n  api.isKeyword = (v) => {\n    if (!_isString(v) || v[0] !== \"@\") {\n      return false;\n    }\n    switch (v) {\n      case \"@base\":\n      case \"@container\":\n      case \"@context\":\n      case \"@default\":\n      case \"@direction\":\n      case \"@embed\":\n      case \"@explicit\":\n      case \"@graph\":\n      case \"@id\":\n      case \"@included\":\n      case \"@index\":\n      case \"@json\":\n      case \"@language\":\n      case \"@list\":\n      case \"@nest\":\n      case \"@none\":\n      case \"@omitDefault\":\n      case \"@prefix\":\n      case \"@preserve\":\n      case \"@protected\":\n      case \"@requireAll\":\n      case \"@reverse\":\n      case \"@set\":\n      case \"@type\":\n      case \"@value\":\n      case \"@version\":\n      case \"@vocab\":\n        return true;\n    }\n    return false;\n  };\n  function _deepCompare(x1, x2) {\n    if (!(x1 && typeof x1 === \"object\") || !(x2 && typeof x2 === \"object\")) {\n      return x1 === x2;\n    }\n    const x1Array = Array.isArray(x1);\n    if (x1Array !== Array.isArray(x2)) {\n      return false;\n    }\n    if (x1Array) {\n      if (x1.length !== x2.length) {\n        return false;\n      }\n      for (let i = 0; i < x1.length; ++i) {\n        if (!_deepCompare(x1[i], x2[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    const k1s = Object.keys(x1);\n    const k2s = Object.keys(x2);\n    if (k1s.length !== k2s.length) {\n      return false;\n    }\n    for (const k1 in x1) {\n      let v1 = x1[k1];\n      let v2 = x2[k1];\n      if (k1 === \"@container\") {\n        if (Array.isArray(v1) && Array.isArray(v2)) {\n          v1 = v1.slice().sort();\n          v2 = v2.slice().sort();\n        }\n      }\n      if (!_deepCompare(v1, v2)) {\n        return false;\n      }\n    }\n    return true;\n  }\n  return context;\n}\nvar expand;\nvar hasRequiredExpand;\nfunction requireExpand() {\n  if (hasRequiredExpand) return expand;\n  hasRequiredExpand = 1;\n  const JsonLdError = requireJsonLdError();\n  const {\n    isArray: _isArray,\n    isObject: _isObject,\n    isEmptyObject: _isEmptyObject,\n    isString: _isString,\n    isUndefined: _isUndefined\n  } = requireTypes();\n  const {\n    isList: _isList,\n    isValue: _isValue,\n    isGraph: _isGraph,\n    isSubject: _isSubject\n  } = requireGraphTypes();\n  const {\n    expandIri: _expandIri,\n    getContextValue: _getContextValue,\n    isKeyword: _isKeyword,\n    process: _processContext,\n    processingMode: _processingMode\n  } = requireContext();\n  const {\n    isAbsolute: _isAbsoluteIri\n  } = requireUrl();\n  const {\n    REGEX_BCP47,\n    REGEX_KEYWORD,\n    addValue: _addValue,\n    asArray: _asArray,\n    getValues: _getValues,\n    validateTypeValue: _validateTypeValue\n  } = requireUtil();\n  const {\n    handleEvent: _handleEvent\n  } = requireEvents();\n  const api = {};\n  expand = api;\n  api.expand = async ({\n    activeCtx,\n    activeProperty = null,\n    element,\n    options = {},\n    insideList = false,\n    insideIndex = false,\n    typeScopedContext = null\n  }) => {\n    if (element === null || element === void 0) {\n      return null;\n    }\n    if (activeProperty === \"@default\") {\n      options = Object.assign({}, options, { isFrame: false });\n    }\n    if (!_isArray(element) && !_isObject(element)) {\n      if (!insideList && (activeProperty === null || _expandIri(\n        activeCtx,\n        activeProperty,\n        { vocab: true },\n        options\n      ) === \"@graph\")) {\n        if (options.eventHandler) {\n          _handleEvent({\n            event: {\n              type: [\"JsonLdEvent\"],\n              code: \"free-floating scalar\",\n              level: \"warning\",\n              message: \"Dropping free-floating scalar not in a list.\",\n              details: {\n                value: element\n                //activeProperty\n                //insideList\n              }\n            },\n            options\n          });\n        }\n        return null;\n      }\n      return _expandValue({ activeCtx, activeProperty, value: element, options });\n    }\n    if (_isArray(element)) {\n      let rval2 = [];\n      const container = _getContextValue(\n        activeCtx,\n        activeProperty,\n        \"@container\"\n      ) || [];\n      insideList = insideList || container.includes(\"@list\");\n      for (let i = 0; i < element.length; ++i) {\n        let e = await api.expand({\n          activeCtx,\n          activeProperty,\n          element: element[i],\n          options,\n          insideIndex,\n          typeScopedContext\n        });\n        if (insideList && _isArray(e)) {\n          e = { \"@list\": e };\n        }\n        if (e === null) {\n          continue;\n        }\n        if (_isArray(e)) {\n          rval2 = rval2.concat(e);\n        } else {\n          rval2.push(e);\n        }\n      }\n      return rval2;\n    }\n    const expandedActiveProperty = _expandIri(\n      activeCtx,\n      activeProperty,\n      { vocab: true },\n      options\n    );\n    const propertyScopedCtx = _getContextValue(activeCtx, activeProperty, \"@context\");\n    typeScopedContext = typeScopedContext || (activeCtx.previousContext ? activeCtx : null);\n    let keys = Object.keys(element).sort();\n    let mustRevert = !insideIndex;\n    if (mustRevert && typeScopedContext && keys.length <= 2 && !keys.includes(\"@context\")) {\n      for (const key of keys) {\n        const expandedProperty = _expandIri(\n          typeScopedContext,\n          key,\n          { vocab: true },\n          options\n        );\n        if (expandedProperty === \"@value\") {\n          mustRevert = false;\n          activeCtx = typeScopedContext;\n          break;\n        }\n        if (expandedProperty === \"@id\" && keys.length === 1) {\n          mustRevert = false;\n          break;\n        }\n      }\n    }\n    if (mustRevert) {\n      activeCtx = activeCtx.revertToPreviousContext();\n    }\n    if (!_isUndefined(propertyScopedCtx)) {\n      activeCtx = await _processContext({\n        activeCtx,\n        localCtx: propertyScopedCtx,\n        propagate: true,\n        overrideProtected: true,\n        options\n      });\n    }\n    if (\"@context\" in element) {\n      activeCtx = await _processContext(\n        { activeCtx, localCtx: element[\"@context\"], options }\n      );\n    }\n    typeScopedContext = activeCtx;\n    let typeKey = null;\n    for (const key of keys) {\n      const expandedProperty = _expandIri(activeCtx, key, { vocab: true }, options);\n      if (expandedProperty === \"@type\") {\n        typeKey = typeKey || key;\n        const value = element[key];\n        const types2 = Array.isArray(value) ? value.length > 1 ? value.slice().sort() : value : [value];\n        for (const type of types2) {\n          const ctx = _getContextValue(typeScopedContext, type, \"@context\");\n          if (!_isUndefined(ctx)) {\n            activeCtx = await _processContext({\n              activeCtx,\n              localCtx: ctx,\n              options,\n              propagate: false\n            });\n          }\n        }\n      }\n    }\n    let rval = {};\n    await _expandObject({\n      activeCtx,\n      activeProperty,\n      expandedActiveProperty,\n      element,\n      expandedParent: rval,\n      options,\n      insideList,\n      typeKey,\n      typeScopedContext\n    });\n    keys = Object.keys(rval);\n    let count = keys.length;\n    if (\"@value\" in rval) {\n      if (\"@type\" in rval && (\"@language\" in rval || \"@direction\" in rval)) {\n        throw new JsonLdError(\n          'Invalid JSON-LD syntax; an element containing \"@value\" may not contain both \"@type\" and either \"@language\" or \"@direction\".',\n          \"jsonld.SyntaxError\",\n          { code: \"invalid value object\", element: rval }\n        );\n      }\n      let validCount = count - 1;\n      if (\"@type\" in rval) {\n        validCount -= 1;\n      }\n      if (\"@index\" in rval) {\n        validCount -= 1;\n      }\n      if (\"@language\" in rval) {\n        validCount -= 1;\n      }\n      if (\"@direction\" in rval) {\n        validCount -= 1;\n      }\n      if (validCount !== 0) {\n        throw new JsonLdError(\n          'Invalid JSON-LD syntax; an element containing \"@value\" may only have an \"@index\" property and either \"@type\" or either or both \"@language\" or \"@direction\".',\n          \"jsonld.SyntaxError\",\n          { code: \"invalid value object\", element: rval }\n        );\n      }\n      const values = rval[\"@value\"] === null ? [] : _asArray(rval[\"@value\"]);\n      const types2 = _getValues(rval, \"@type\");\n      if (_processingMode(activeCtx, 1.1) && types2.includes(\"@json\") && types2.length === 1) ;\n      else if (values.length === 0) {\n        if (options.eventHandler) {\n          _handleEvent({\n            event: {\n              type: [\"JsonLdEvent\"],\n              code: \"null @value value\",\n              level: \"warning\",\n              message: \"Dropping null @value value.\",\n              details: {\n                value: rval\n              }\n            },\n            options\n          });\n        }\n        rval = null;\n      } else if (!values.every((v) => _isString(v) || _isEmptyObject(v)) && \"@language\" in rval) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; only strings may be language-tagged.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid language-tagged value\", element: rval }\n        );\n      } else if (!types2.every((t) => _isAbsoluteIri(t) && !(_isString(t) && t.indexOf(\"_:\") === 0) || _isEmptyObject(t))) {\n        throw new JsonLdError(\n          'Invalid JSON-LD syntax; an element containing \"@value\" and \"@type\" must have an absolute IRI for the value of \"@type\".',\n          \"jsonld.SyntaxError\",\n          { code: \"invalid typed value\", element: rval }\n        );\n      }\n    } else if (\"@type\" in rval && !_isArray(rval[\"@type\"])) {\n      rval[\"@type\"] = [rval[\"@type\"]];\n    } else if (\"@set\" in rval || \"@list\" in rval) {\n      if (count > 1 && !(count === 2 && \"@index\" in rval)) {\n        throw new JsonLdError(\n          'Invalid JSON-LD syntax; if an element has the property \"@set\" or \"@list\", then it can have at most one other property that is \"@index\".',\n          \"jsonld.SyntaxError\",\n          { code: \"invalid set or list object\", element: rval }\n        );\n      }\n      if (\"@set\" in rval) {\n        rval = rval[\"@set\"];\n        keys = Object.keys(rval);\n        count = keys.length;\n      }\n    } else if (count === 1 && \"@language\" in rval) {\n      if (options.eventHandler) {\n        _handleEvent({\n          event: {\n            type: [\"JsonLdEvent\"],\n            code: \"object with only @language\",\n            level: \"warning\",\n            message: \"Dropping object with only @language.\",\n            details: {\n              value: rval\n            }\n          },\n          options\n        });\n      }\n      rval = null;\n    }\n    if (_isObject(rval) && !options.keepFreeFloatingNodes && !insideList && (activeProperty === null || expandedActiveProperty === \"@graph\" || (_getContextValue(activeCtx, activeProperty, \"@container\") || []).includes(\"@graph\"))) {\n      rval = _dropUnsafeObject({ value: rval, count, options });\n    }\n    return rval;\n  };\n  function _dropUnsafeObject({\n    value,\n    count,\n    options\n  }) {\n    if (count === 0 || \"@value\" in value || \"@list\" in value || count === 1 && \"@id\" in value) {\n      if (options.eventHandler) {\n        let code;\n        let message;\n        if (count === 0) {\n          code = \"empty object\";\n          message = \"Dropping empty object.\";\n        } else if (\"@value\" in value) {\n          code = \"object with only @value\";\n          message = \"Dropping object with only @value.\";\n        } else if (\"@list\" in value) {\n          code = \"object with only @list\";\n          message = \"Dropping object with only @list.\";\n        } else if (count === 1 && \"@id\" in value) {\n          code = \"object with only @id\";\n          message = \"Dropping object with only @id.\";\n        }\n        _handleEvent({\n          event: {\n            type: [\"JsonLdEvent\"],\n            code,\n            level: \"warning\",\n            message,\n            details: {\n              value\n            }\n          },\n          options\n        });\n      }\n      return null;\n    }\n    return value;\n  }\n  async function _expandObject({\n    activeCtx,\n    activeProperty,\n    expandedActiveProperty,\n    element,\n    expandedParent,\n    options = {},\n    insideList,\n    typeKey,\n    typeScopedContext\n  }) {\n    const keys = Object.keys(element).sort();\n    const nests = [];\n    let unexpandedValue;\n    const isJsonType = element[typeKey] && _expandIri(\n      activeCtx,\n      _isArray(element[typeKey]) ? element[typeKey][0] : element[typeKey],\n      { vocab: true },\n      {\n        ...options,\n        typeExpansion: true\n      }\n    ) === \"@json\";\n    for (const key of keys) {\n      let value = element[key];\n      let expandedValue;\n      if (key === \"@context\") {\n        continue;\n      }\n      const expandedProperty = _expandIri(activeCtx, key, { vocab: true }, options);\n      if (expandedProperty === null || !(_isAbsoluteIri(expandedProperty) || _isKeyword(expandedProperty))) {\n        if (options.eventHandler) {\n          _handleEvent({\n            event: {\n              type: [\"JsonLdEvent\"],\n              code: \"invalid property\",\n              level: \"warning\",\n              message: \"Dropping property that did not expand into an absolute IRI or keyword.\",\n              details: {\n                property: key,\n                expandedProperty\n              }\n            },\n            options\n          });\n        }\n        continue;\n      }\n      if (_isKeyword(expandedProperty)) {\n        if (expandedActiveProperty === \"@reverse\") {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; a keyword cannot be used as a @reverse property.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid reverse property map\", value }\n          );\n        }\n        if (expandedProperty in expandedParent && expandedProperty !== \"@included\" && expandedProperty !== \"@type\") {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; colliding keywords detected.\",\n            \"jsonld.SyntaxError\",\n            { code: \"colliding keywords\", keyword: expandedProperty }\n          );\n        }\n      }\n      if (expandedProperty === \"@id\") {\n        if (!_isString(value)) {\n          if (!options.isFrame) {\n            throw new JsonLdError(\n              'Invalid JSON-LD syntax; \"@id\" value must a string.',\n              \"jsonld.SyntaxError\",\n              { code: \"invalid @id value\", value }\n            );\n          }\n          if (_isObject(value)) {\n            if (!_isEmptyObject(value)) {\n              throw new JsonLdError(\n                'Invalid JSON-LD syntax; \"@id\" value an empty object or array of strings, if framing',\n                \"jsonld.SyntaxError\",\n                { code: \"invalid @id value\", value }\n              );\n            }\n          } else if (_isArray(value)) {\n            if (!value.every((v) => _isString(v))) {\n              throw new JsonLdError(\n                'Invalid JSON-LD syntax; \"@id\" value an empty object or array of strings, if framing',\n                \"jsonld.SyntaxError\",\n                { code: \"invalid @id value\", value }\n              );\n            }\n          } else {\n            throw new JsonLdError(\n              'Invalid JSON-LD syntax; \"@id\" value an empty object or array of strings, if framing',\n              \"jsonld.SyntaxError\",\n              { code: \"invalid @id value\", value }\n            );\n          }\n        }\n        _addValue(\n          expandedParent,\n          \"@id\",\n          _asArray(value).map((v) => {\n            if (_isString(v)) {\n              const ve = _expandIri(activeCtx, v, { base: true }, options);\n              if (options.eventHandler) {\n                if (ve === null) {\n                  if (v === null) {\n                    _handleEvent({\n                      event: {\n                        type: [\"JsonLdEvent\"],\n                        code: \"null @id value\",\n                        level: \"warning\",\n                        message: \"Null @id found.\",\n                        details: {\n                          id: v\n                        }\n                      },\n                      options\n                    });\n                  } else {\n                    _handleEvent({\n                      event: {\n                        type: [\"JsonLdEvent\"],\n                        code: \"reserved @id value\",\n                        level: \"warning\",\n                        message: \"Reserved @id found.\",\n                        details: {\n                          id: v\n                        }\n                      },\n                      options\n                    });\n                  }\n                } else if (!_isAbsoluteIri(ve)) {\n                  _handleEvent({\n                    event: {\n                      type: [\"JsonLdEvent\"],\n                      code: \"relative @id reference\",\n                      level: \"warning\",\n                      message: \"Relative @id reference found.\",\n                      details: {\n                        id: v,\n                        expandedId: ve\n                      }\n                    },\n                    options\n                  });\n                }\n              }\n              return ve;\n            }\n            return v;\n          }),\n          { propertyIsArray: options.isFrame }\n        );\n        continue;\n      }\n      if (expandedProperty === \"@type\") {\n        if (_isObject(value)) {\n          value = Object.fromEntries(Object.entries(value).map(([k, v]) => [\n            _expandIri(typeScopedContext, k, { vocab: true }),\n            _asArray(v).map(\n              (vv) => _expandIri(\n                typeScopedContext,\n                vv,\n                { base: true, vocab: true },\n                { ...options, typeExpansion: true }\n              )\n            )\n          ]));\n        }\n        _validateTypeValue(value, options.isFrame);\n        _addValue(\n          expandedParent,\n          \"@type\",\n          _asArray(value).map((v) => {\n            if (_isString(v)) {\n              const ve = _expandIri(\n                typeScopedContext,\n                v,\n                { base: true, vocab: true },\n                { ...options, typeExpansion: true }\n              );\n              if (ve !== \"@json\" && !_isAbsoluteIri(ve)) {\n                if (options.eventHandler) {\n                  _handleEvent({\n                    event: {\n                      type: [\"JsonLdEvent\"],\n                      code: \"relative @type reference\",\n                      level: \"warning\",\n                      message: \"Relative @type reference found.\",\n                      details: {\n                        type: v\n                      }\n                    },\n                    options\n                  });\n                }\n              }\n              return ve;\n            }\n            return v;\n          }),\n          { propertyIsArray: !!options.isFrame }\n        );\n        continue;\n      }\n      if (expandedProperty === \"@included\" && _processingMode(activeCtx, 1.1)) {\n        const includedResult = _asArray(await api.expand({\n          activeCtx,\n          activeProperty,\n          element: value,\n          options\n        }));\n        if (!includedResult.every((v) => _isSubject(v))) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; values of @included must expand to node objects.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid @included value\", value }\n          );\n        }\n        _addValue(\n          expandedParent,\n          \"@included\",\n          includedResult,\n          { propertyIsArray: true }\n        );\n        continue;\n      }\n      if (expandedProperty === \"@graph\" && !(_isObject(value) || _isArray(value))) {\n        throw new JsonLdError(\n          'Invalid JSON-LD syntax; \"@graph\" value must not be an object or an array.',\n          \"jsonld.SyntaxError\",\n          { code: \"invalid @graph value\", value }\n        );\n      }\n      if (expandedProperty === \"@value\") {\n        unexpandedValue = value;\n        if (isJsonType && _processingMode(activeCtx, 1.1)) {\n          expandedParent[\"@value\"] = value;\n        } else {\n          _addValue(\n            expandedParent,\n            \"@value\",\n            value,\n            { propertyIsArray: options.isFrame }\n          );\n        }\n        continue;\n      }\n      if (expandedProperty === \"@language\") {\n        if (value === null) {\n          continue;\n        }\n        if (!_isString(value) && !options.isFrame) {\n          throw new JsonLdError(\n            'Invalid JSON-LD syntax; \"@language\" value must be a string.',\n            \"jsonld.SyntaxError\",\n            { code: \"invalid language-tagged string\", value }\n          );\n        }\n        value = _asArray(value).map((v) => _isString(v) ? v.toLowerCase() : v);\n        for (const language of value) {\n          if (_isString(language) && !language.match(REGEX_BCP47)) {\n            if (options.eventHandler) {\n              _handleEvent({\n                event: {\n                  type: [\"JsonLdEvent\"],\n                  code: \"invalid @language value\",\n                  level: \"warning\",\n                  message: \"@language value must be valid BCP47.\",\n                  details: {\n                    language\n                  }\n                },\n                options\n              });\n            }\n          }\n        }\n        _addValue(\n          expandedParent,\n          \"@language\",\n          value,\n          { propertyIsArray: options.isFrame }\n        );\n        continue;\n      }\n      if (expandedProperty === \"@direction\") {\n        if (!_isString(value) && !options.isFrame) {\n          throw new JsonLdError(\n            'Invalid JSON-LD syntax; \"@direction\" value must be a string.',\n            \"jsonld.SyntaxError\",\n            { code: \"invalid base direction\", value }\n          );\n        }\n        value = _asArray(value);\n        for (const dir of value) {\n          if (_isString(dir) && dir !== \"ltr\" && dir !== \"rtl\") {\n            throw new JsonLdError(\n              'Invalid JSON-LD syntax; \"@direction\" must be \"ltr\" or \"rtl\".',\n              \"jsonld.SyntaxError\",\n              { code: \"invalid base direction\", value }\n            );\n          }\n        }\n        _addValue(\n          expandedParent,\n          \"@direction\",\n          value,\n          { propertyIsArray: options.isFrame }\n        );\n        continue;\n      }\n      if (expandedProperty === \"@index\") {\n        if (!_isString(value)) {\n          throw new JsonLdError(\n            'Invalid JSON-LD syntax; \"@index\" value must be a string.',\n            \"jsonld.SyntaxError\",\n            { code: \"invalid @index value\", value }\n          );\n        }\n        _addValue(expandedParent, \"@index\", value);\n        continue;\n      }\n      if (expandedProperty === \"@reverse\") {\n        if (!_isObject(value)) {\n          throw new JsonLdError(\n            'Invalid JSON-LD syntax; \"@reverse\" value must be an object.',\n            \"jsonld.SyntaxError\",\n            { code: \"invalid @reverse value\", value }\n          );\n        }\n        expandedValue = await api.expand({\n          activeCtx,\n          activeProperty: \"@reverse\",\n          element: value,\n          options\n        });\n        if (\"@reverse\" in expandedValue) {\n          for (const property in expandedValue[\"@reverse\"]) {\n            _addValue(\n              expandedParent,\n              property,\n              expandedValue[\"@reverse\"][property],\n              { propertyIsArray: true }\n            );\n          }\n        }\n        let reverseMap = expandedParent[\"@reverse\"] || null;\n        for (const property in expandedValue) {\n          if (property === \"@reverse\") {\n            continue;\n          }\n          if (reverseMap === null) {\n            reverseMap = expandedParent[\"@reverse\"] = {};\n          }\n          _addValue(reverseMap, property, [], { propertyIsArray: true });\n          const items = expandedValue[property];\n          for (let ii = 0; ii < items.length; ++ii) {\n            const item = items[ii];\n            if (_isValue(item) || _isList(item)) {\n              throw new JsonLdError(\n                'Invalid JSON-LD syntax; \"@reverse\" value must not be a @value or an @list.',\n                \"jsonld.SyntaxError\",\n                { code: \"invalid reverse property value\", value: expandedValue }\n              );\n            }\n            _addValue(reverseMap, property, item, { propertyIsArray: true });\n          }\n        }\n        continue;\n      }\n      if (expandedProperty === \"@nest\") {\n        nests.push(key);\n        continue;\n      }\n      let termCtx = activeCtx;\n      const ctx = _getContextValue(activeCtx, key, \"@context\");\n      if (!_isUndefined(ctx)) {\n        termCtx = await _processContext({\n          activeCtx,\n          localCtx: ctx,\n          propagate: true,\n          overrideProtected: true,\n          options\n        });\n      }\n      const container = _getContextValue(activeCtx, key, \"@container\") || [];\n      if (container.includes(\"@language\") && _isObject(value)) {\n        const direction = _getContextValue(termCtx, key, \"@direction\");\n        expandedValue = _expandLanguageMap(termCtx, value, direction, options);\n      } else if (container.includes(\"@index\") && _isObject(value)) {\n        const asGraph = container.includes(\"@graph\");\n        const indexKey = _getContextValue(termCtx, key, \"@index\") || \"@index\";\n        const propertyIndex = indexKey !== \"@index\" && _expandIri(activeCtx, indexKey, { vocab: true }, options);\n        expandedValue = await _expandIndexMap({\n          activeCtx: termCtx,\n          options,\n          activeProperty: key,\n          value,\n          asGraph,\n          indexKey,\n          propertyIndex\n        });\n      } else if (container.includes(\"@id\") && _isObject(value)) {\n        const asGraph = container.includes(\"@graph\");\n        expandedValue = await _expandIndexMap({\n          activeCtx: termCtx,\n          options,\n          activeProperty: key,\n          value,\n          asGraph,\n          indexKey: \"@id\"\n        });\n      } else if (container.includes(\"@type\") && _isObject(value)) {\n        expandedValue = await _expandIndexMap({\n          // since container is `@type`, revert type scoped context when expanding\n          activeCtx: termCtx.revertToPreviousContext(),\n          options,\n          activeProperty: key,\n          value,\n          asGraph: false,\n          indexKey: \"@type\"\n        });\n      } else {\n        const isList = expandedProperty === \"@list\";\n        if (isList || expandedProperty === \"@set\") {\n          let nextActiveProperty = activeProperty;\n          if (isList && expandedActiveProperty === \"@graph\") {\n            nextActiveProperty = null;\n          }\n          expandedValue = await api.expand({\n            activeCtx: termCtx,\n            activeProperty: nextActiveProperty,\n            element: value,\n            options,\n            insideList: isList\n          });\n        } else if (_getContextValue(activeCtx, key, \"@type\") === \"@json\") {\n          expandedValue = {\n            \"@type\": \"@json\",\n            \"@value\": value\n          };\n        } else {\n          expandedValue = await api.expand({\n            activeCtx: termCtx,\n            activeProperty: key,\n            element: value,\n            options,\n            insideList: false\n          });\n        }\n      }\n      if (expandedValue === null && expandedProperty !== \"@value\") {\n        continue;\n      }\n      if (expandedProperty !== \"@list\" && !_isList(expandedValue) && container.includes(\"@list\")) {\n        expandedValue = { \"@list\": _asArray(expandedValue) };\n      }\n      if (container.includes(\"@graph\") && !container.some((key2) => key2 === \"@id\" || key2 === \"@index\")) {\n        expandedValue = _asArray(expandedValue);\n        if (!options.isFrame) {\n          expandedValue = expandedValue.filter((v) => {\n            const count = Object.keys(v).length;\n            return _dropUnsafeObject({ value: v, count, options }) !== null;\n          });\n        }\n        if (expandedValue.length === 0) {\n          continue;\n        }\n        expandedValue = expandedValue.map((v) => ({ \"@graph\": _asArray(v) }));\n      }\n      if (termCtx.mappings.has(key) && termCtx.mappings.get(key).reverse) {\n        const reverseMap = expandedParent[\"@reverse\"] = expandedParent[\"@reverse\"] || {};\n        expandedValue = _asArray(expandedValue);\n        for (let ii = 0; ii < expandedValue.length; ++ii) {\n          const item = expandedValue[ii];\n          if (_isValue(item) || _isList(item)) {\n            throw new JsonLdError(\n              'Invalid JSON-LD syntax; \"@reverse\" value must not be a @value or an @list.',\n              \"jsonld.SyntaxError\",\n              { code: \"invalid reverse property value\", value: expandedValue }\n            );\n          }\n          _addValue(reverseMap, expandedProperty, item, { propertyIsArray: true });\n        }\n        continue;\n      }\n      _addValue(expandedParent, expandedProperty, expandedValue, {\n        propertyIsArray: true\n      });\n    }\n    if (\"@value\" in expandedParent) {\n      if (expandedParent[\"@type\"] === \"@json\" && _processingMode(activeCtx, 1.1)) ;\n      else if ((_isObject(unexpandedValue) || _isArray(unexpandedValue)) && !options.isFrame) {\n        throw new JsonLdError(\n          'Invalid JSON-LD syntax; \"@value\" value must not be an object or an array.',\n          \"jsonld.SyntaxError\",\n          { code: \"invalid value object value\", value: unexpandedValue }\n        );\n      }\n    }\n    for (const key of nests) {\n      const nestedValues = _isArray(element[key]) ? element[key] : [element[key]];\n      for (const nv of nestedValues) {\n        if (!_isObject(nv) || Object.keys(nv).some((k) => _expandIri(activeCtx, k, { vocab: true }, options) === \"@value\")) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; nested value must be a node object.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid @nest value\", value: nv }\n          );\n        }\n        await _expandObject({\n          activeCtx,\n          activeProperty,\n          expandedActiveProperty,\n          element: nv,\n          expandedParent,\n          options,\n          insideList,\n          typeScopedContext,\n          typeKey\n        });\n      }\n    }\n  }\n  function _expandValue({ activeCtx, activeProperty, value, options }) {\n    if (value === null || value === void 0) {\n      return null;\n    }\n    const expandedProperty = _expandIri(\n      activeCtx,\n      activeProperty,\n      { vocab: true },\n      options\n    );\n    if (expandedProperty === \"@id\") {\n      return _expandIri(activeCtx, value, { base: true }, options);\n    } else if (expandedProperty === \"@type\") {\n      return _expandIri(\n        activeCtx,\n        value,\n        { vocab: true, base: true },\n        { ...options, typeExpansion: true }\n      );\n    }\n    const type = _getContextValue(activeCtx, activeProperty, \"@type\");\n    if ((type === \"@id\" || expandedProperty === \"@graph\") && _isString(value)) {\n      const expandedValue = _expandIri(activeCtx, value, { base: true }, options);\n      if (expandedValue === null && value.match(REGEX_KEYWORD)) {\n        if (options.eventHandler) {\n          _handleEvent({\n            event: {\n              type: [\"JsonLdEvent\"],\n              code: \"reserved @id value\",\n              level: \"warning\",\n              message: \"Reserved @id found.\",\n              details: {\n                id: activeProperty\n              }\n            },\n            options\n          });\n        }\n      }\n      return { \"@id\": expandedValue };\n    }\n    if (type === \"@vocab\" && _isString(value)) {\n      return {\n        \"@id\": _expandIri(activeCtx, value, { vocab: true, base: true }, options)\n      };\n    }\n    if (_isKeyword(expandedProperty)) {\n      return value;\n    }\n    const rval = {};\n    if (type && ![\"@id\", \"@vocab\", \"@none\"].includes(type)) {\n      rval[\"@type\"] = type;\n    } else if (_isString(value)) {\n      const language = _getContextValue(activeCtx, activeProperty, \"@language\");\n      if (language !== null) {\n        rval[\"@language\"] = language;\n      }\n      const direction = _getContextValue(activeCtx, activeProperty, \"@direction\");\n      if (direction !== null) {\n        rval[\"@direction\"] = direction;\n      }\n    }\n    if (![\"boolean\", \"number\", \"string\"].includes(typeof value)) {\n      value = value.toString();\n    }\n    rval[\"@value\"] = value;\n    return rval;\n  }\n  function _expandLanguageMap(activeCtx, languageMap, direction, options) {\n    const rval = [];\n    const keys = Object.keys(languageMap).sort();\n    for (const key of keys) {\n      const expandedKey = _expandIri(activeCtx, key, { vocab: true }, options);\n      let val = languageMap[key];\n      if (!_isArray(val)) {\n        val = [val];\n      }\n      for (const item of val) {\n        if (item === null) {\n          continue;\n        }\n        if (!_isString(item)) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; language map values must be strings.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid language map value\", languageMap }\n          );\n        }\n        const val2 = { \"@value\": item };\n        if (expandedKey !== \"@none\") {\n          if (!key.match(REGEX_BCP47)) {\n            if (options.eventHandler) {\n              _handleEvent({\n                event: {\n                  type: [\"JsonLdEvent\"],\n                  code: \"invalid @language value\",\n                  level: \"warning\",\n                  message: \"@language value must be valid BCP47.\",\n                  details: {\n                    language: key\n                  }\n                },\n                options\n              });\n            }\n          }\n          val2[\"@language\"] = key.toLowerCase();\n        }\n        if (direction) {\n          val2[\"@direction\"] = direction;\n        }\n        rval.push(val2);\n      }\n    }\n    return rval;\n  }\n  async function _expandIndexMap({\n    activeCtx,\n    options,\n    activeProperty,\n    value,\n    asGraph,\n    indexKey,\n    propertyIndex\n  }) {\n    const rval = [];\n    const keys = Object.keys(value).sort();\n    const isTypeIndex = indexKey === \"@type\";\n    for (let key of keys) {\n      if (isTypeIndex) {\n        const ctx = _getContextValue(activeCtx, key, \"@context\");\n        if (!_isUndefined(ctx)) {\n          activeCtx = await _processContext({\n            activeCtx,\n            localCtx: ctx,\n            propagate: false,\n            options\n          });\n        }\n      }\n      let val = value[key];\n      if (!_isArray(val)) {\n        val = [val];\n      }\n      val = await api.expand({\n        activeCtx,\n        activeProperty,\n        element: val,\n        options,\n        insideList: false,\n        insideIndex: true\n      });\n      let expandedKey;\n      if (propertyIndex) {\n        if (key === \"@none\") {\n          expandedKey = \"@none\";\n        } else {\n          expandedKey = _expandValue(\n            { activeCtx, activeProperty: indexKey, value: key, options }\n          );\n        }\n      } else {\n        expandedKey = _expandIri(activeCtx, key, { vocab: true }, options);\n      }\n      if (indexKey === \"@id\") {\n        key = _expandIri(activeCtx, key, { base: true }, options);\n      } else if (isTypeIndex) {\n        key = expandedKey;\n      }\n      for (let item of val) {\n        if (asGraph && !_isGraph(item)) {\n          item = { \"@graph\": [item] };\n        }\n        if (indexKey === \"@type\") {\n          if (expandedKey === \"@none\") ;\n          else if (item[\"@type\"]) {\n            item[\"@type\"] = [key].concat(item[\"@type\"]);\n          } else {\n            item[\"@type\"] = [key];\n          }\n        } else if (_isValue(item) && ![\"@language\", \"@type\", \"@index\"].includes(indexKey)) {\n          throw new JsonLdError(\n            `Invalid JSON-LD syntax; Attempt to add illegal key to value object: \"${indexKey}\".`,\n            \"jsonld.SyntaxError\",\n            { code: \"invalid value object\", value: item }\n          );\n        } else if (propertyIndex) {\n          if (expandedKey !== \"@none\") {\n            _addValue(item, propertyIndex, expandedKey, {\n              propertyIsArray: true,\n              prependValue: true\n            });\n          }\n        } else if (expandedKey !== \"@none\" && !(indexKey in item)) {\n          item[indexKey] = key;\n        }\n        rval.push(item);\n      }\n    }\n    return rval;\n  }\n  return expand;\n}\nvar nodeMap;\nvar hasRequiredNodeMap;\nfunction requireNodeMap() {\n  if (hasRequiredNodeMap) return nodeMap;\n  hasRequiredNodeMap = 1;\n  const { isKeyword } = requireContext();\n  const graphTypes2 = requireGraphTypes();\n  const types2 = requireTypes();\n  const util2 = requireUtil();\n  const JsonLdError = requireJsonLdError();\n  const api = {};\n  nodeMap = api;\n  api.createMergedNodeMap = (input, options) => {\n    options = options || {};\n    const issuer = options.issuer || new util2.IdentifierIssuer(\"_:b\");\n    const graphs = { \"@default\": {} };\n    api.createNodeMap(input, graphs, \"@default\", issuer);\n    return api.mergeNodeMaps(graphs);\n  };\n  api.createNodeMap = (input, graphs, graph, issuer, name, list) => {\n    if (types2.isArray(input)) {\n      for (const node of input) {\n        api.createNodeMap(node, graphs, graph, issuer, void 0, list);\n      }\n      return;\n    }\n    if (!types2.isObject(input)) {\n      if (list) {\n        list.push(input);\n      }\n      return;\n    }\n    if (graphTypes2.isValue(input)) {\n      if (\"@type\" in input) {\n        let type = input[\"@type\"];\n        if (type.indexOf(\"_:\") === 0) {\n          input[\"@type\"] = type = issuer.getId(type);\n        }\n      }\n      if (list) {\n        list.push(input);\n      }\n      return;\n    } else if (list && graphTypes2.isList(input)) {\n      const _list = [];\n      api.createNodeMap(input[\"@list\"], graphs, graph, issuer, name, _list);\n      list.push({ \"@list\": _list });\n      return;\n    }\n    if (\"@type\" in input) {\n      const types3 = input[\"@type\"];\n      for (const type of types3) {\n        if (type.indexOf(\"_:\") === 0) {\n          issuer.getId(type);\n        }\n      }\n    }\n    if (types2.isUndefined(name)) {\n      name = graphTypes2.isBlankNode(input) ? issuer.getId(input[\"@id\"]) : input[\"@id\"];\n    }\n    if (list) {\n      list.push({ \"@id\": name });\n    }\n    const subjects = graphs[graph];\n    const subject = subjects[name] = subjects[name] || {};\n    subject[\"@id\"] = name;\n    const properties = Object.keys(input).sort();\n    for (let property of properties) {\n      if (property === \"@id\") {\n        continue;\n      }\n      if (property === \"@reverse\") {\n        const referencedNode = { \"@id\": name };\n        const reverseMap = input[\"@reverse\"];\n        for (const reverseProperty in reverseMap) {\n          const items = reverseMap[reverseProperty];\n          for (const item of items) {\n            let itemName = item[\"@id\"];\n            if (graphTypes2.isBlankNode(item)) {\n              itemName = issuer.getId(itemName);\n            }\n            api.createNodeMap(item, graphs, graph, issuer, itemName);\n            util2.addValue(\n              subjects[itemName],\n              reverseProperty,\n              referencedNode,\n              { propertyIsArray: true, allowDuplicate: false }\n            );\n          }\n        }\n        continue;\n      }\n      if (property === \"@graph\") {\n        if (!(name in graphs)) {\n          graphs[name] = {};\n        }\n        api.createNodeMap(input[property], graphs, name, issuer);\n        continue;\n      }\n      if (property === \"@included\") {\n        api.createNodeMap(input[property], graphs, graph, issuer);\n        continue;\n      }\n      if (property !== \"@type\" && isKeyword(property)) {\n        if (property === \"@index\" && property in subject && (input[property] !== subject[property] || input[property][\"@id\"] !== subject[property][\"@id\"])) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; conflicting @index property detected.\",\n            \"jsonld.SyntaxError\",\n            { code: \"conflicting indexes\", subject }\n          );\n        }\n        subject[property] = input[property];\n        continue;\n      }\n      const objects = input[property];\n      if (property.indexOf(\"_:\") === 0) {\n        property = issuer.getId(property);\n      }\n      if (objects.length === 0) {\n        util2.addValue(subject, property, [], { propertyIsArray: true });\n        continue;\n      }\n      for (let o of objects) {\n        if (property === \"@type\") {\n          o = o.indexOf(\"_:\") === 0 ? issuer.getId(o) : o;\n        }\n        if (graphTypes2.isSubject(o) || graphTypes2.isSubjectReference(o)) {\n          if (\"@id\" in o && !o[\"@id\"]) {\n            continue;\n          }\n          const id = graphTypes2.isBlankNode(o) ? issuer.getId(o[\"@id\"]) : o[\"@id\"];\n          util2.addValue(\n            subject,\n            property,\n            { \"@id\": id },\n            { propertyIsArray: true, allowDuplicate: false }\n          );\n          api.createNodeMap(o, graphs, graph, issuer, id);\n        } else if (graphTypes2.isValue(o)) {\n          util2.addValue(\n            subject,\n            property,\n            o,\n            { propertyIsArray: true, allowDuplicate: false }\n          );\n        } else if (graphTypes2.isList(o)) {\n          const _list = [];\n          api.createNodeMap(o[\"@list\"], graphs, graph, issuer, name, _list);\n          o = { \"@list\": _list };\n          util2.addValue(\n            subject,\n            property,\n            o,\n            { propertyIsArray: true, allowDuplicate: false }\n          );\n        } else {\n          api.createNodeMap(o, graphs, graph, issuer, name);\n          util2.addValue(\n            subject,\n            property,\n            o,\n            { propertyIsArray: true, allowDuplicate: false }\n          );\n        }\n      }\n    }\n  };\n  api.mergeNodeMapGraphs = (graphs) => {\n    const merged = {};\n    for (const name of Object.keys(graphs).sort()) {\n      for (const id of Object.keys(graphs[name]).sort()) {\n        const node = graphs[name][id];\n        if (!(id in merged)) {\n          merged[id] = { \"@id\": id };\n        }\n        const mergedNode = merged[id];\n        for (const property of Object.keys(node).sort()) {\n          if (isKeyword(property) && property !== \"@type\") {\n            mergedNode[property] = util2.clone(node[property]);\n          } else {\n            for (const value of node[property]) {\n              util2.addValue(\n                mergedNode,\n                property,\n                util2.clone(value),\n                { propertyIsArray: true, allowDuplicate: false }\n              );\n            }\n          }\n        }\n      }\n    }\n    return merged;\n  };\n  api.mergeNodeMaps = (graphs) => {\n    const defaultGraph = graphs[\"@default\"];\n    const graphNames = Object.keys(graphs).sort();\n    for (const graphName of graphNames) {\n      if (graphName === \"@default\") {\n        continue;\n      }\n      const nodeMap2 = graphs[graphName];\n      let subject = defaultGraph[graphName];\n      if (!subject) {\n        defaultGraph[graphName] = subject = {\n          \"@id\": graphName,\n          \"@graph\": []\n        };\n      } else if (!(\"@graph\" in subject)) {\n        subject[\"@graph\"] = [];\n      }\n      const graph = subject[\"@graph\"];\n      for (const id of Object.keys(nodeMap2).sort()) {\n        const node = nodeMap2[id];\n        if (!graphTypes2.isSubjectReference(node)) {\n          graph.push(node);\n        }\n      }\n    }\n    return defaultGraph;\n  };\n  return nodeMap;\n}\nvar flatten;\nvar hasRequiredFlatten;\nfunction requireFlatten() {\n  if (hasRequiredFlatten) return flatten;\n  hasRequiredFlatten = 1;\n  const {\n    isSubjectReference: _isSubjectReference\n  } = requireGraphTypes();\n  const {\n    createMergedNodeMap: _createMergedNodeMap\n  } = requireNodeMap();\n  const api = {};\n  flatten = api;\n  api.flatten = (input) => {\n    const defaultGraph = _createMergedNodeMap(input);\n    const flattened = [];\n    const keys = Object.keys(defaultGraph).sort();\n    for (let ki = 0; ki < keys.length; ++ki) {\n      const node = defaultGraph[keys[ki]];\n      if (!_isSubjectReference(node)) {\n        flattened.push(node);\n      }\n    }\n    return flattened;\n  };\n  return flatten;\n}\nvar fromRdf;\nvar hasRequiredFromRdf;\nfunction requireFromRdf() {\n  if (hasRequiredFromRdf) return fromRdf;\n  hasRequiredFromRdf = 1;\n  const JsonLdError = requireJsonLdError();\n  const graphTypes2 = requireGraphTypes();\n  const types2 = requireTypes();\n  const {\n    REGEX_BCP47,\n    addValue: _addValue\n  } = requireUtil();\n  const {\n    handleEvent: _handleEvent\n  } = requireEvents();\n  const {\n    // RDF,\n    RDF_LIST,\n    RDF_FIRST,\n    RDF_REST,\n    RDF_NIL,\n    RDF_TYPE,\n    // RDF_PLAIN_LITERAL,\n    // RDF_XML_LITERAL,\n    RDF_JSON_LITERAL,\n    // RDF_OBJECT,\n    // RDF_LANGSTRING,\n    // XSD,\n    XSD_BOOLEAN,\n    XSD_DOUBLE,\n    XSD_INTEGER,\n    XSD_STRING\n  } = requireConstants();\n  const api = {};\n  fromRdf = api;\n  api.fromRDF = async (dataset, options) => {\n    const {\n      useRdfType = false,\n      useNativeTypes = false,\n      rdfDirection = null\n    } = options;\n    const defaultGraph = {};\n    const graphMap = { \"@default\": defaultGraph };\n    const referencedOnce = {};\n    if (rdfDirection) {\n      if (rdfDirection === \"compound-literal\") {\n        throw new JsonLdError(\n          \"Unsupported rdfDirection value.\",\n          \"jsonld.InvalidRdfDirection\",\n          { value: rdfDirection }\n        );\n      } else if (rdfDirection !== \"i18n-datatype\") {\n        throw new JsonLdError(\n          \"Unknown rdfDirection value.\",\n          \"jsonld.InvalidRdfDirection\",\n          { value: rdfDirection }\n        );\n      }\n    }\n    for (const quad of dataset) {\n      const name = quad.graph.termType === \"DefaultGraph\" ? \"@default\" : quad.graph.value;\n      if (!(name in graphMap)) {\n        graphMap[name] = {};\n      }\n      if (name !== \"@default\" && !(name in defaultGraph)) {\n        defaultGraph[name] = { \"@id\": name };\n      }\n      const nodeMap2 = graphMap[name];\n      const s = quad.subject.value;\n      const p = quad.predicate.value;\n      const o = quad.object;\n      if (!(s in nodeMap2)) {\n        nodeMap2[s] = { \"@id\": s };\n      }\n      const node = nodeMap2[s];\n      const objectIsNode = o.termType.endsWith(\"Node\");\n      if (objectIsNode && !(o.value in nodeMap2)) {\n        nodeMap2[o.value] = { \"@id\": o.value };\n      }\n      if (p === RDF_TYPE && !useRdfType && objectIsNode) {\n        _addValue(node, \"@type\", o.value, { propertyIsArray: true });\n        continue;\n      }\n      const value = _RDFToObject(o, useNativeTypes, rdfDirection, options);\n      _addValue(node, p, value, { propertyIsArray: true });\n      if (objectIsNode) {\n        if (o.value === RDF_NIL) {\n          const object = nodeMap2[o.value];\n          if (!(\"usages\" in object)) {\n            object.usages = [];\n          }\n          object.usages.push({\n            node,\n            property: p,\n            value\n          });\n        } else if (o.value in referencedOnce) {\n          referencedOnce[o.value] = false;\n        } else {\n          referencedOnce[o.value] = {\n            node,\n            property: p,\n            value\n          };\n        }\n      }\n    }\n    for (const name in graphMap) {\n      const graphObject = graphMap[name];\n      if (!(RDF_NIL in graphObject)) {\n        continue;\n      }\n      const nil = graphObject[RDF_NIL];\n      if (!nil.usages) {\n        continue;\n      }\n      for (let usage of nil.usages) {\n        let node = usage.node;\n        let property = usage.property;\n        let head = usage.value;\n        const list = [];\n        const listNodes = [];\n        let nodeKeyCount = Object.keys(node).length;\n        while (property === RDF_REST && types2.isObject(referencedOnce[node[\"@id\"]]) && types2.isArray(node[RDF_FIRST]) && node[RDF_FIRST].length === 1 && types2.isArray(node[RDF_REST]) && node[RDF_REST].length === 1 && (nodeKeyCount === 3 || nodeKeyCount === 4 && types2.isArray(node[\"@type\"]) && node[\"@type\"].length === 1 && node[\"@type\"][0] === RDF_LIST)) {\n          list.push(node[RDF_FIRST][0]);\n          listNodes.push(node[\"@id\"]);\n          usage = referencedOnce[node[\"@id\"]];\n          node = usage.node;\n          property = usage.property;\n          head = usage.value;\n          nodeKeyCount = Object.keys(node).length;\n          if (!graphTypes2.isBlankNode(node)) {\n            break;\n          }\n        }\n        delete head[\"@id\"];\n        head[\"@list\"] = list.reverse();\n        for (const listNode of listNodes) {\n          delete graphObject[listNode];\n        }\n      }\n      delete nil.usages;\n    }\n    const result = [];\n    const subjects = Object.keys(defaultGraph).sort();\n    for (const subject of subjects) {\n      const node = defaultGraph[subject];\n      if (subject in graphMap) {\n        const graph = node[\"@graph\"] = [];\n        const graphObject = graphMap[subject];\n        const graphSubjects = Object.keys(graphObject).sort();\n        for (const graphSubject of graphSubjects) {\n          const node2 = graphObject[graphSubject];\n          if (!graphTypes2.isSubjectReference(node2)) {\n            graph.push(node2);\n          }\n        }\n      }\n      if (!graphTypes2.isSubjectReference(node)) {\n        result.push(node);\n      }\n    }\n    return result;\n  };\n  function _RDFToObject(o, useNativeTypes, rdfDirection, options) {\n    if (o.termType.endsWith(\"Node\")) {\n      return { \"@id\": o.value };\n    }\n    const rval = { \"@value\": o.value };\n    if (o.language) {\n      if (!o.language.match(REGEX_BCP47)) {\n        if (options.eventHandler) {\n          _handleEvent({\n            event: {\n              type: [\"JsonLdEvent\"],\n              code: \"invalid @language value\",\n              level: \"warning\",\n              message: \"@language value must be valid BCP47.\",\n              details: {\n                language: o.language\n              }\n            },\n            options\n          });\n        }\n      }\n      rval[\"@language\"] = o.language;\n    } else {\n      let type = o.datatype.value;\n      if (!type) {\n        type = XSD_STRING;\n      }\n      if (type === RDF_JSON_LITERAL) {\n        type = \"@json\";\n        try {\n          rval[\"@value\"] = JSON.parse(rval[\"@value\"]);\n        } catch (e) {\n          throw new JsonLdError(\n            \"JSON literal could not be parsed.\",\n            \"jsonld.InvalidJsonLiteral\",\n            { code: \"invalid JSON literal\", value: rval[\"@value\"], cause: e }\n          );\n        }\n      }\n      if (useNativeTypes) {\n        if (type === XSD_BOOLEAN) {\n          if (rval[\"@value\"] === \"true\") {\n            rval[\"@value\"] = true;\n          } else if (rval[\"@value\"] === \"false\") {\n            rval[\"@value\"] = false;\n          }\n        } else if (types2.isNumeric(rval[\"@value\"])) {\n          if (type === XSD_INTEGER) {\n            const i = parseInt(rval[\"@value\"], 10);\n            if (i.toFixed(0) === rval[\"@value\"]) {\n              rval[\"@value\"] = i;\n            }\n          } else if (type === XSD_DOUBLE) {\n            rval[\"@value\"] = parseFloat(rval[\"@value\"]);\n          }\n        }\n        if (![XSD_BOOLEAN, XSD_INTEGER, XSD_DOUBLE, XSD_STRING].includes(type)) {\n          rval[\"@type\"] = type;\n        }\n      } else if (rdfDirection === \"i18n-datatype\" && type.startsWith(\"https://www.w3.org/ns/i18n#\")) {\n        const [, language, direction] = type.split(/[#_]/);\n        if (language.length > 0) {\n          rval[\"@language\"] = language;\n          if (!language.match(REGEX_BCP47)) {\n            if (options.eventHandler) {\n              _handleEvent({\n                event: {\n                  type: [\"JsonLdEvent\"],\n                  code: \"invalid @language value\",\n                  level: \"warning\",\n                  message: \"@language value must be valid BCP47.\",\n                  details: {\n                    language\n                  }\n                },\n                options\n              });\n            }\n          }\n        }\n        rval[\"@direction\"] = direction;\n      } else if (type !== XSD_STRING) {\n        rval[\"@type\"] = type;\n      }\n    }\n    return rval;\n  }\n  return fromRdf;\n}\nvar canonicalize;\nvar hasRequiredCanonicalize;\nfunction requireCanonicalize() {\n  if (hasRequiredCanonicalize) return canonicalize;\n  hasRequiredCanonicalize = 1;\n  canonicalize = function serialize(object) {\n    if (object === null || typeof object !== \"object\" || object.toJSON != null) {\n      return JSON.stringify(object);\n    }\n    if (Array.isArray(object)) {\n      return \"[\" + object.reduce((t, cv, ci) => {\n        const comma = ci === 0 ? \"\" : \",\";\n        const value = cv === void 0 || typeof cv === \"symbol\" ? null : cv;\n        return t + comma + serialize(value);\n      }, \"\") + \"]\";\n    }\n    return \"{\" + Object.keys(object).sort().reduce((t, cv, ci) => {\n      if (object[cv] === void 0 || typeof object[cv] === \"symbol\") {\n        return t;\n      }\n      const comma = t.length === 0 ? \"\" : \",\";\n      return t + comma + serialize(cv) + \":\" + serialize(object[cv]);\n    }, \"\") + \"}\";\n  };\n  return canonicalize;\n}\nvar toRdf;\nvar hasRequiredToRdf;\nfunction requireToRdf() {\n  if (hasRequiredToRdf) return toRdf;\n  hasRequiredToRdf = 1;\n  const { createNodeMap } = requireNodeMap();\n  const { isKeyword } = requireContext();\n  const graphTypes2 = requireGraphTypes();\n  const jsonCanonicalize = requireCanonicalize();\n  const JsonLdError = requireJsonLdError();\n  const types2 = requireTypes();\n  const util2 = requireUtil();\n  const {\n    handleEvent: _handleEvent\n  } = requireEvents();\n  const {\n    // RDF,\n    // RDF_LIST,\n    RDF_FIRST,\n    RDF_REST,\n    RDF_NIL,\n    RDF_TYPE,\n    // RDF_PLAIN_LITERAL,\n    // RDF_XML_LITERAL,\n    RDF_JSON_LITERAL,\n    // RDF_OBJECT,\n    RDF_LANGSTRING,\n    // XSD,\n    XSD_BOOLEAN,\n    XSD_DOUBLE,\n    XSD_INTEGER,\n    XSD_STRING\n  } = requireConstants();\n  const {\n    isAbsolute: _isAbsoluteIri\n  } = requireUrl();\n  const api = {};\n  toRdf = api;\n  api.toRDF = (input, options) => {\n    const issuer = new util2.IdentifierIssuer(\"_:b\");\n    const nodeMap2 = { \"@default\": {} };\n    createNodeMap(input, nodeMap2, \"@default\", issuer);\n    const dataset = [];\n    const graphNames = Object.keys(nodeMap2).sort();\n    for (const graphName of graphNames) {\n      let graphTerm;\n      if (graphName === \"@default\") {\n        graphTerm = { termType: \"DefaultGraph\", value: \"\" };\n      } else if (_isAbsoluteIri(graphName)) {\n        if (graphName.startsWith(\"_:\")) {\n          graphTerm = { termType: \"BlankNode\" };\n        } else {\n          graphTerm = { termType: \"NamedNode\" };\n        }\n        graphTerm.value = graphName;\n      } else {\n        if (options.eventHandler) {\n          _handleEvent({\n            event: {\n              type: [\"JsonLdEvent\"],\n              code: \"relative graph reference\",\n              level: \"warning\",\n              message: \"Relative graph reference found.\",\n              details: {\n                graph: graphName\n              }\n            },\n            options\n          });\n        }\n        continue;\n      }\n      _graphToRDF(dataset, nodeMap2[graphName], graphTerm, issuer, options);\n    }\n    return dataset;\n  };\n  function _graphToRDF(dataset, graph, graphTerm, issuer, options) {\n    const ids = Object.keys(graph).sort();\n    for (const id of ids) {\n      const node = graph[id];\n      const properties = Object.keys(node).sort();\n      for (let property of properties) {\n        const items = node[property];\n        if (property === \"@type\") {\n          property = RDF_TYPE;\n        } else if (isKeyword(property)) {\n          continue;\n        }\n        for (const item of items) {\n          const subject = {\n            termType: id.startsWith(\"_:\") ? \"BlankNode\" : \"NamedNode\",\n            value: id\n          };\n          if (!_isAbsoluteIri(id)) {\n            if (options.eventHandler) {\n              _handleEvent({\n                event: {\n                  type: [\"JsonLdEvent\"],\n                  code: \"relative subject reference\",\n                  level: \"warning\",\n                  message: \"Relative subject reference found.\",\n                  details: {\n                    subject: id\n                  }\n                },\n                options\n              });\n            }\n            continue;\n          }\n          const predicate = {\n            termType: property.startsWith(\"_:\") ? \"BlankNode\" : \"NamedNode\",\n            value: property\n          };\n          if (!_isAbsoluteIri(property)) {\n            if (options.eventHandler) {\n              _handleEvent({\n                event: {\n                  type: [\"JsonLdEvent\"],\n                  code: \"relative predicate reference\",\n                  level: \"warning\",\n                  message: \"Relative predicate reference found.\",\n                  details: {\n                    predicate: property\n                  }\n                },\n                options\n              });\n            }\n            continue;\n          }\n          if (predicate.termType === \"BlankNode\" && !options.produceGeneralizedRdf) {\n            if (options.eventHandler) {\n              _handleEvent({\n                event: {\n                  type: [\"JsonLdEvent\"],\n                  code: \"blank node predicate\",\n                  level: \"warning\",\n                  message: \"Dropping blank node predicate.\",\n                  details: {\n                    // FIXME: add better issuer API to get reverse mapping\n                    property: issuer.getOldIds().find((key) => issuer.getId(key) === property)\n                  }\n                },\n                options\n              });\n            }\n            continue;\n          }\n          const object = _objectToRDF(\n            item,\n            issuer,\n            dataset,\n            graphTerm,\n            options.rdfDirection,\n            options\n          );\n          if (object) {\n            dataset.push({\n              subject,\n              predicate,\n              object,\n              graph: graphTerm\n            });\n          }\n        }\n      }\n    }\n  }\n  function _listToRDF(list, issuer, dataset, graphTerm, rdfDirection, options) {\n    const first = { termType: \"NamedNode\", value: RDF_FIRST };\n    const rest = { termType: \"NamedNode\", value: RDF_REST };\n    const nil = { termType: \"NamedNode\", value: RDF_NIL };\n    const last = list.pop();\n    const result = last ? { termType: \"BlankNode\", value: issuer.getId() } : nil;\n    let subject = result;\n    for (const item of list) {\n      const object = _objectToRDF(\n        item,\n        issuer,\n        dataset,\n        graphTerm,\n        rdfDirection,\n        options\n      );\n      const next = { termType: \"BlankNode\", value: issuer.getId() };\n      dataset.push({\n        subject,\n        predicate: first,\n        object,\n        graph: graphTerm\n      });\n      dataset.push({\n        subject,\n        predicate: rest,\n        object: next,\n        graph: graphTerm\n      });\n      subject = next;\n    }\n    if (last) {\n      const object = _objectToRDF(\n        last,\n        issuer,\n        dataset,\n        graphTerm,\n        rdfDirection,\n        options\n      );\n      dataset.push({\n        subject,\n        predicate: first,\n        object,\n        graph: graphTerm\n      });\n      dataset.push({\n        subject,\n        predicate: rest,\n        object: nil,\n        graph: graphTerm\n      });\n    }\n    return result;\n  }\n  function _objectToRDF(item, issuer, dataset, graphTerm, rdfDirection, options) {\n    const object = {};\n    if (graphTypes2.isValue(item)) {\n      object.termType = \"Literal\";\n      object.value = void 0;\n      object.datatype = {\n        termType: \"NamedNode\"\n      };\n      let value = item[\"@value\"];\n      const datatype = item[\"@type\"] || null;\n      if (datatype === \"@json\") {\n        object.value = jsonCanonicalize(value);\n        object.datatype.value = RDF_JSON_LITERAL;\n      } else if (types2.isBoolean(value)) {\n        object.value = value.toString();\n        object.datatype.value = datatype || XSD_BOOLEAN;\n      } else if (types2.isDouble(value) || datatype === XSD_DOUBLE) {\n        if (!types2.isDouble(value)) {\n          value = parseFloat(value);\n        }\n        object.value = value.toExponential(15).replace(/(\\d)0*e\\+?/, \"$1E\");\n        object.datatype.value = datatype || XSD_DOUBLE;\n      } else if (types2.isNumber(value)) {\n        object.value = value.toFixed(0);\n        object.datatype.value = datatype || XSD_INTEGER;\n      } else if (\"@direction\" in item && rdfDirection === \"i18n-datatype\") {\n        const language = (item[\"@language\"] || \"\").toLowerCase();\n        const direction = item[\"@direction\"];\n        const datatype2 = `https://www.w3.org/ns/i18n#${language}_${direction}`;\n        object.datatype.value = datatype2;\n        object.value = value;\n      } else if (\"@direction\" in item && rdfDirection === \"compound-literal\") {\n        throw new JsonLdError(\n          \"Unsupported rdfDirection value.\",\n          \"jsonld.InvalidRdfDirection\",\n          { value: rdfDirection }\n        );\n      } else if (\"@direction\" in item && rdfDirection) {\n        throw new JsonLdError(\n          \"Unknown rdfDirection value.\",\n          \"jsonld.InvalidRdfDirection\",\n          { value: rdfDirection }\n        );\n      } else if (\"@language\" in item) {\n        if (\"@direction\" in item && !rdfDirection) {\n          if (options.eventHandler) {\n            _handleEvent({\n              event: {\n                type: [\"JsonLdEvent\"],\n                code: \"rdfDirection not set\",\n                level: \"warning\",\n                message: \"rdfDirection not set for @direction.\",\n                details: {\n                  object: object.value\n                }\n              },\n              options\n            });\n          }\n        }\n        object.value = value;\n        object.datatype.value = datatype || RDF_LANGSTRING;\n        object.language = item[\"@language\"];\n      } else {\n        if (\"@direction\" in item && !rdfDirection) {\n          if (options.eventHandler) {\n            _handleEvent({\n              event: {\n                type: [\"JsonLdEvent\"],\n                code: \"rdfDirection not set\",\n                level: \"warning\",\n                message: \"rdfDirection not set for @direction.\",\n                details: {\n                  object: object.value\n                }\n              },\n              options\n            });\n          }\n        }\n        object.value = value;\n        object.datatype.value = datatype || XSD_STRING;\n      }\n    } else if (graphTypes2.isList(item)) {\n      const _list = _listToRDF(\n        item[\"@list\"],\n        issuer,\n        dataset,\n        graphTerm,\n        rdfDirection,\n        options\n      );\n      object.termType = _list.termType;\n      object.value = _list.value;\n    } else {\n      const id = types2.isObject(item) ? item[\"@id\"] : item;\n      object.termType = id.startsWith(\"_:\") ? \"BlankNode\" : \"NamedNode\";\n      object.value = id;\n    }\n    if (object.termType === \"NamedNode\" && !_isAbsoluteIri(object.value)) {\n      if (options.eventHandler) {\n        _handleEvent({\n          event: {\n            type: [\"JsonLdEvent\"],\n            code: \"relative object reference\",\n            level: \"warning\",\n            message: \"Relative object reference found.\",\n            details: {\n              object: object.value\n            }\n          },\n          options\n        });\n      }\n      return null;\n    }\n    return object;\n  }\n  return toRdf;\n}\nvar frame;\nvar hasRequiredFrame;\nfunction requireFrame() {\n  if (hasRequiredFrame) return frame;\n  hasRequiredFrame = 1;\n  const { isKeyword } = requireContext();\n  const graphTypes2 = requireGraphTypes();\n  const types2 = requireTypes();\n  const util2 = requireUtil();\n  const url2 = requireUrl();\n  const JsonLdError = requireJsonLdError();\n  const {\n    createNodeMap: _createNodeMap,\n    mergeNodeMapGraphs: _mergeNodeMapGraphs\n  } = requireNodeMap();\n  const api = {};\n  frame = api;\n  api.frameMergedOrDefault = (input, frame2, options) => {\n    const state = {\n      options,\n      embedded: false,\n      graph: \"@default\",\n      graphMap: { \"@default\": {} },\n      subjectStack: [],\n      link: {},\n      bnodeMap: {}\n    };\n    const issuer = new util2.IdentifierIssuer(\"_:b\");\n    _createNodeMap(input, state.graphMap, \"@default\", issuer);\n    if (options.merged) {\n      state.graphMap[\"@merged\"] = _mergeNodeMapGraphs(state.graphMap);\n      state.graph = \"@merged\";\n    }\n    state.subjects = state.graphMap[state.graph];\n    const framed = [];\n    api.frame(state, Object.keys(state.subjects).sort(), frame2, framed);\n    if (options.pruneBlankNodeIdentifiers) {\n      options.bnodesToClear = Object.keys(state.bnodeMap).filter((id) => state.bnodeMap[id].length === 1);\n    }\n    // remove @preserve from results\n    options.link = {};\n    return _cleanupPreserve(framed, options);\n  };\n  api.frame = (state, subjects, frame2, parent, property = null) => {\n    _validateFrame(frame2);\n    frame2 = frame2[0];\n    const options = state.options;\n    const flags = {\n      embed: _getFrameFlag(frame2, options, \"embed\"),\n      explicit: _getFrameFlag(frame2, options, \"explicit\"),\n      requireAll: _getFrameFlag(frame2, options, \"requireAll\")\n    };\n    if (!state.link.hasOwnProperty(state.graph)) {\n      state.link[state.graph] = {};\n    }\n    const link = state.link[state.graph];\n    const matches = _filterSubjects(state, subjects, frame2, flags);\n    const ids = Object.keys(matches).sort();\n    for (const id of ids) {\n      const subject = matches[id];\n      if (property === null) {\n        state.uniqueEmbeds = { [state.graph]: {} };\n      } else {\n        state.uniqueEmbeds[state.graph] = state.uniqueEmbeds[state.graph] || {};\n      }\n      if (flags.embed === \"@link\" && id in link) {\n        _addFrameOutput(parent, property, link[id]);\n        continue;\n      }\n      const output = { \"@id\": id };\n      if (id.indexOf(\"_:\") === 0) {\n        util2.addValue(state.bnodeMap, id, output, { propertyIsArray: true });\n      }\n      link[id] = output;\n      if ((flags.embed === \"@first\" || flags.embed === \"@last\") && state.is11) {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; invalid value of @embed.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid @embed value\", frame: frame2 }\n        );\n      }\n      if (!state.embedded && state.uniqueEmbeds[state.graph].hasOwnProperty(id)) {\n        continue;\n      }\n      if (state.embedded && (flags.embed === \"@never\" || _createsCircularReference(subject, state.graph, state.subjectStack))) {\n        _addFrameOutput(parent, property, output);\n        continue;\n      }\n      if (state.embedded && (flags.embed == \"@first\" || flags.embed == \"@once\") && state.uniqueEmbeds[state.graph].hasOwnProperty(id)) {\n        _addFrameOutput(parent, property, output);\n        continue;\n      }\n      if (flags.embed === \"@last\") {\n        if (id in state.uniqueEmbeds[state.graph]) {\n          _removeEmbed(state, id);\n        }\n      }\n      state.uniqueEmbeds[state.graph][id] = { parent, property };\n      state.subjectStack.push({ subject, graph: state.graph });\n      if (id in state.graphMap) {\n        let recurse = false;\n        let subframe = null;\n        if (!(\"@graph\" in frame2)) {\n          recurse = state.graph !== \"@merged\";\n          subframe = {};\n        } else {\n          subframe = frame2[\"@graph\"][0];\n          recurse = !(id === \"@merged\" || id === \"@default\");\n          if (!types2.isObject(subframe)) {\n            subframe = {};\n          }\n        }\n        if (recurse) {\n          api.frame(\n            { ...state, graph: id, embedded: false },\n            Object.keys(state.graphMap[id]).sort(),\n            [subframe],\n            output,\n            \"@graph\"\n          );\n        }\n      }\n      if (\"@included\" in frame2) {\n        api.frame(\n          { ...state, embedded: false },\n          subjects,\n          frame2[\"@included\"],\n          output,\n          \"@included\"\n        );\n      }\n      for (const prop of Object.keys(subject).sort()) {\n        if (isKeyword(prop)) {\n          output[prop] = util2.clone(subject[prop]);\n          if (prop === \"@type\") {\n            for (const type of subject[\"@type\"]) {\n              if (type.indexOf(\"_:\") === 0) {\n                util2.addValue(\n                  state.bnodeMap,\n                  type,\n                  output,\n                  { propertyIsArray: true }\n                );\n              }\n            }\n          }\n          continue;\n        }\n        if (flags.explicit && !(prop in frame2)) {\n          continue;\n        }\n        for (const o of subject[prop]) {\n          const subframe = prop in frame2 ? frame2[prop] : _createImplicitFrame(flags);\n          if (graphTypes2.isList(o)) {\n            const subframe2 = frame2[prop] && frame2[prop][0] && frame2[prop][0][\"@list\"] ? frame2[prop][0][\"@list\"] : _createImplicitFrame(flags);\n            const list = { \"@list\": [] };\n            _addFrameOutput(output, prop, list);\n            const src = o[\"@list\"];\n            for (const oo of src) {\n              if (graphTypes2.isSubjectReference(oo)) {\n                api.frame(\n                  { ...state, embedded: true },\n                  [oo[\"@id\"]],\n                  subframe2,\n                  list,\n                  \"@list\"\n                );\n              } else {\n                _addFrameOutput(list, \"@list\", util2.clone(oo));\n              }\n            }\n          } else if (graphTypes2.isSubjectReference(o)) {\n            api.frame(\n              { ...state, embedded: true },\n              [o[\"@id\"]],\n              subframe,\n              output,\n              prop\n            );\n          } else if (_valueMatch(subframe[0], o)) {\n            _addFrameOutput(output, prop, util2.clone(o));\n          }\n        }\n      }\n      for (const prop of Object.keys(frame2).sort()) {\n        if (prop === \"@type\") {\n          if (!types2.isObject(frame2[prop][0]) || !(\"@default\" in frame2[prop][0])) {\n            continue;\n          }\n        } else if (isKeyword(prop)) {\n          continue;\n        }\n        const next = frame2[prop][0] || {};\n        const omitDefaultOn = _getFrameFlag(next, options, \"omitDefault\");\n        if (!omitDefaultOn && !(prop in output)) {\n          let preserve = \"@null\";\n          if (\"@default\" in next) {\n            preserve = util2.clone(next[\"@default\"]);\n          }\n          if (!types2.isArray(preserve)) {\n            preserve = [preserve];\n          }\n          output[prop] = [{ \"@preserve\": preserve }];\n        }\n      }\n      for (const reverseProp of Object.keys(frame2[\"@reverse\"] || {}).sort()) {\n        const subframe = frame2[\"@reverse\"][reverseProp];\n        for (const subject2 of Object.keys(state.subjects)) {\n          const nodeValues = util2.getValues(state.subjects[subject2], reverseProp);\n          if (nodeValues.some((v) => v[\"@id\"] === id)) {\n            output[\"@reverse\"] = output[\"@reverse\"] || {};\n            util2.addValue(\n              output[\"@reverse\"],\n              reverseProp,\n              [],\n              { propertyIsArray: true }\n            );\n            api.frame(\n              { ...state, embedded: true },\n              [subject2],\n              subframe,\n              output[\"@reverse\"][reverseProp],\n              property\n            );\n          }\n        }\n      }\n      _addFrameOutput(parent, property, output);\n      state.subjectStack.pop();\n    }\n  };\n  api.cleanupNull = (input, options) => {\n    if (types2.isArray(input)) {\n      const noNulls = input.map((v) => api.cleanupNull(v, options));\n      return noNulls.filter((v) => v);\n    }\n    if (input === \"@null\") {\n      return null;\n    }\n    if (types2.isObject(input)) {\n      if (\"@id\" in input) {\n        const id = input[\"@id\"];\n        if (options.link.hasOwnProperty(id)) {\n          const idx = options.link[id].indexOf(input);\n          if (idx !== -1) {\n            return options.link[id][idx];\n          }\n          options.link[id].push(input);\n        } else {\n          options.link[id] = [input];\n        }\n      }\n      for (const key in input) {\n        input[key] = api.cleanupNull(input[key], options);\n      }\n    }\n    return input;\n  };\n  function _createImplicitFrame(flags) {\n    const frame2 = {};\n    for (const key in flags) {\n      if (flags[key] !== void 0) {\n        frame2[\"@\" + key] = [flags[key]];\n      }\n    }\n    return [frame2];\n  }\n  function _createsCircularReference(subjectToEmbed, graph, subjectStack) {\n    for (let i = subjectStack.length - 1; i >= 0; --i) {\n      const subject = subjectStack[i];\n      if (subject.graph === graph && subject.subject[\"@id\"] === subjectToEmbed[\"@id\"]) {\n        return true;\n      }\n    }\n    return false;\n  }\n  function _getFrameFlag(frame2, options, name) {\n    const flag = \"@\" + name;\n    let rval = flag in frame2 ? frame2[flag][0] : options[name];\n    if (name === \"embed\") {\n      if (rval === true) {\n        rval = \"@once\";\n      } else if (rval === false) {\n        rval = \"@never\";\n      } else if (rval !== \"@always\" && rval !== \"@never\" && rval !== \"@link\" && rval !== \"@first\" && rval !== \"@last\" && rval !== \"@once\") {\n        throw new JsonLdError(\n          \"Invalid JSON-LD syntax; invalid value of @embed.\",\n          \"jsonld.SyntaxError\",\n          { code: \"invalid @embed value\", frame: frame2 }\n        );\n      }\n    }\n    return rval;\n  }\n  function _validateFrame(frame2) {\n    if (!types2.isArray(frame2) || frame2.length !== 1 || !types2.isObject(frame2[0])) {\n      throw new JsonLdError(\n        \"Invalid JSON-LD syntax; a JSON-LD frame must be a single object.\",\n        \"jsonld.SyntaxError\",\n        { frame: frame2 }\n      );\n    }\n    if (\"@id\" in frame2[0]) {\n      for (const id of util2.asArray(frame2[0][\"@id\"])) {\n        if (!(types2.isObject(id) || url2.isAbsolute(id)) || types2.isString(id) && id.indexOf(\"_:\") === 0) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; invalid @id in frame.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid frame\", frame: frame2 }\n          );\n        }\n      }\n    }\n    if (\"@type\" in frame2[0]) {\n      for (const type of util2.asArray(frame2[0][\"@type\"])) {\n        if (!(types2.isObject(type) || url2.isAbsolute(type) || type === \"@json\") || types2.isString(type) && type.indexOf(\"_:\") === 0) {\n          throw new JsonLdError(\n            \"Invalid JSON-LD syntax; invalid @type in frame.\",\n            \"jsonld.SyntaxError\",\n            { code: \"invalid frame\", frame: frame2 }\n          );\n        }\n      }\n    }\n  }\n  function _filterSubjects(state, subjects, frame2, flags) {\n    const rval = {};\n    for (const id of subjects) {\n      const subject = state.graphMap[state.graph][id];\n      if (_filterSubject(state, subject, frame2, flags)) {\n        rval[id] = subject;\n      }\n    }\n    return rval;\n  }\n  function _filterSubject(state, subject, frame2, flags) {\n    let wildcard = true;\n    let matchesSome = false;\n    for (const key in frame2) {\n      let matchThis = false;\n      const nodeValues = util2.getValues(subject, key);\n      const isEmpty = util2.getValues(frame2, key).length === 0;\n      if (key === \"@id\") {\n        if (types2.isEmptyObject(frame2[\"@id\"][0] || {})) {\n          matchThis = true;\n        } else if (frame2[\"@id\"].length >= 0) {\n          matchThis = frame2[\"@id\"].includes(nodeValues[0]);\n        }\n        if (!flags.requireAll) {\n          return matchThis;\n        }\n      } else if (key === \"@type\") {\n        wildcard = false;\n        if (isEmpty) {\n          if (nodeValues.length > 0) {\n            return false;\n          }\n          matchThis = true;\n        } else if (frame2[\"@type\"].length === 1 && types2.isEmptyObject(frame2[\"@type\"][0])) {\n          matchThis = nodeValues.length > 0;\n        } else {\n          for (const type of frame2[\"@type\"]) {\n            if (types2.isObject(type) && \"@default\" in type) {\n              matchThis = true;\n            } else {\n              matchThis = matchThis || nodeValues.some((tt) => tt === type);\n            }\n          }\n        }\n        if (!flags.requireAll) {\n          return matchThis;\n        }\n      } else if (isKeyword(key)) {\n        continue;\n      } else {\n        const thisFrame = util2.getValues(frame2, key)[0];\n        let hasDefault = false;\n        if (thisFrame) {\n          _validateFrame([thisFrame]);\n          hasDefault = \"@default\" in thisFrame;\n        }\n        wildcard = false;\n        if (nodeValues.length === 0 && hasDefault) {\n          continue;\n        }\n        if (nodeValues.length > 0 && isEmpty) {\n          return false;\n        }\n        if (thisFrame === void 0) {\n          if (nodeValues.length > 0) {\n            return false;\n          }\n          matchThis = true;\n        } else {\n          if (graphTypes2.isList(thisFrame)) {\n            const listValue = thisFrame[\"@list\"][0];\n            if (graphTypes2.isList(nodeValues[0])) {\n              const nodeListValues = nodeValues[0][\"@list\"];\n              if (graphTypes2.isValue(listValue)) {\n                matchThis = nodeListValues.some((lv) => _valueMatch(listValue, lv));\n              } else if (graphTypes2.isSubject(listValue) || graphTypes2.isSubjectReference(listValue)) {\n                matchThis = nodeListValues.some((lv) => _nodeMatch(\n                  state,\n                  listValue,\n                  lv,\n                  flags\n                ));\n              }\n            }\n          } else if (graphTypes2.isValue(thisFrame)) {\n            matchThis = nodeValues.some((nv) => _valueMatch(thisFrame, nv));\n          } else if (graphTypes2.isSubjectReference(thisFrame)) {\n            matchThis = nodeValues.some((nv) => _nodeMatch(state, thisFrame, nv, flags));\n          } else if (types2.isObject(thisFrame)) {\n            matchThis = nodeValues.length > 0;\n          } else {\n            matchThis = false;\n          }\n        }\n      }\n      if (!matchThis && flags.requireAll) {\n        return false;\n      }\n      matchesSome = matchesSome || matchThis;\n    }\n    return wildcard || matchesSome;\n  }\n  function _removeEmbed(state, id) {\n    const embeds = state.uniqueEmbeds[state.graph];\n    const embed = embeds[id];\n    const parent = embed.parent;\n    const property = embed.property;\n    const subject = { \"@id\": id };\n    if (types2.isArray(parent)) {\n      for (let i = 0; i < parent.length; ++i) {\n        if (util2.compareValues(parent[i], subject)) {\n          parent[i] = subject;\n          break;\n        }\n      }\n    } else {\n      const useArray = types2.isArray(parent[property]);\n      util2.removeValue(parent, property, subject, { propertyIsArray: useArray });\n      util2.addValue(parent, property, subject, { propertyIsArray: useArray });\n    }\n    const removeDependents = (id2) => {\n      const ids = Object.keys(embeds);\n      for (const next of ids) {\n        if (next in embeds && types2.isObject(embeds[next].parent) && embeds[next].parent[\"@id\"] === id2) {\n          delete embeds[next];\n          removeDependents(next);\n        }\n      }\n    };\n    removeDependents(id);\n  }\n  /**\n   * Removes the @preserve keywords from expanded result of framing.\n   *\n   * @param input the framed, framed output.\n   * @param options the framing options used.\n   *\n   * @return the resulting output.\n   */\n  function _cleanupPreserve(input, options) {\n    if (types2.isArray(input)) {\n      return input.map((value) => _cleanupPreserve(value, options));\n    }\n    if (types2.isObject(input)) {\n      // remove @preserve\n      if (\"@preserve\" in input) {\n        return input[\"@preserve\"][0];\n      }\n      if (graphTypes2.isValue(input)) {\n        return input;\n      }\n      if (graphTypes2.isList(input)) {\n        input[\"@list\"] = _cleanupPreserve(input[\"@list\"], options);\n        return input;\n      }\n      if (\"@id\" in input) {\n        const id = input[\"@id\"];\n        if (options.link.hasOwnProperty(id)) {\n          const idx = options.link[id].indexOf(input);\n          if (idx !== -1) {\n            return options.link[id][idx];\n          }\n          options.link[id].push(input);\n        } else {\n          options.link[id] = [input];\n        }\n      }\n      for (const prop in input) {\n        if (prop === \"@id\" && options.bnodesToClear.includes(input[prop])) {\n          delete input[\"@id\"];\n          continue;\n        }\n        input[prop] = _cleanupPreserve(input[prop], options);\n      }\n    }\n    return input;\n  }\n  function _addFrameOutput(parent, property, output) {\n    if (types2.isObject(parent)) {\n      util2.addValue(parent, property, output, { propertyIsArray: true });\n    } else {\n      parent.push(output);\n    }\n  }\n  function _nodeMatch(state, pattern, value, flags) {\n    if (!(\"@id\" in value)) {\n      return false;\n    }\n    const nodeObject = state.subjects[value[\"@id\"]];\n    return nodeObject && _filterSubject(state, nodeObject, pattern, flags);\n  }\n  function _valueMatch(pattern, value) {\n    const v1 = value[\"@value\"];\n    const t1 = value[\"@type\"];\n    const l1 = value[\"@language\"];\n    const v2 = pattern[\"@value\"] ? types2.isArray(pattern[\"@value\"]) ? pattern[\"@value\"] : [pattern[\"@value\"]] : [];\n    const t2 = pattern[\"@type\"] ? types2.isArray(pattern[\"@type\"]) ? pattern[\"@type\"] : [pattern[\"@type\"]] : [];\n    const l2 = pattern[\"@language\"] ? types2.isArray(pattern[\"@language\"]) ? pattern[\"@language\"] : [pattern[\"@language\"]] : [];\n    if (v2.length === 0 && t2.length === 0 && l2.length === 0) {\n      return true;\n    }\n    if (!(v2.includes(v1) || types2.isEmptyObject(v2[0]))) {\n      return false;\n    }\n    if (!(!t1 && t2.length === 0 || t2.includes(t1) || t1 && types2.isEmptyObject(t2[0]))) {\n      return false;\n    }\n    if (!(!l1 && l2.length === 0 || l2.includes(l1) || l1 && types2.isEmptyObject(l2[0]))) {\n      return false;\n    }\n    return true;\n  }\n  return frame;\n}\nvar compact;\nvar hasRequiredCompact;\nfunction requireCompact() {\n  if (hasRequiredCompact) return compact;\n  hasRequiredCompact = 1;\n  const JsonLdError = requireJsonLdError();\n  const {\n    isArray: _isArray,\n    isObject: _isObject,\n    isString: _isString,\n    isUndefined: _isUndefined\n  } = requireTypes();\n  const {\n    isList: _isList,\n    isValue: _isValue,\n    isGraph: _isGraph,\n    isSimpleGraph: _isSimpleGraph,\n    isSubjectReference: _isSubjectReference\n  } = requireGraphTypes();\n  const {\n    expandIri: _expandIri,\n    getContextValue: _getContextValue,\n    isKeyword: _isKeyword,\n    process: _processContext,\n    processingMode: _processingMode\n  } = requireContext();\n  const {\n    removeBase: _removeBase,\n    prependBase: _prependBase\n  } = requireUrl();\n  const {\n    REGEX_KEYWORD,\n    addValue: _addValue,\n    asArray: _asArray,\n    compareShortestLeast: _compareShortestLeast\n  } = requireUtil();\n  const api = {};\n  compact = api;\n  api.compact = async ({\n    activeCtx,\n    activeProperty = null,\n    element,\n    options = {}\n  }) => {\n    if (_isArray(element)) {\n      let rval = [];\n      for (let i = 0; i < element.length; ++i) {\n        const compacted = await api.compact({\n          activeCtx,\n          activeProperty,\n          element: element[i],\n          options\n        });\n        if (compacted === null) {\n          continue;\n        }\n        rval.push(compacted);\n      }\n      if (options.compactArrays && rval.length === 1) {\n        const container = _getContextValue(\n          activeCtx,\n          activeProperty,\n          \"@container\"\n        ) || [];\n        if (container.length === 0) {\n          rval = rval[0];\n        }\n      }\n      return rval;\n    }\n    const ctx = _getContextValue(activeCtx, activeProperty, \"@context\");\n    if (!_isUndefined(ctx)) {\n      activeCtx = await _processContext({\n        activeCtx,\n        localCtx: ctx,\n        propagate: true,\n        overrideProtected: true,\n        options\n      });\n    }\n    if (_isObject(element)) {\n      if (options.link && \"@id\" in element && options.link.hasOwnProperty(element[\"@id\"])) {\n        const linked = options.link[element[\"@id\"]];\n        for (let i = 0; i < linked.length; ++i) {\n          if (linked[i].expanded === element) {\n            return linked[i].compacted;\n          }\n        }\n      }\n      if (_isValue(element) || _isSubjectReference(element)) {\n        const rval2 = api.compactValue({ activeCtx, activeProperty, value: element, options });\n        if (options.link && _isSubjectReference(element)) {\n          if (!options.link.hasOwnProperty(element[\"@id\"])) {\n            options.link[element[\"@id\"]] = [];\n          }\n          options.link[element[\"@id\"]].push({ expanded: element, compacted: rval2 });\n        }\n        return rval2;\n      }\n      if (_isList(element)) {\n        const container = _getContextValue(\n          activeCtx,\n          activeProperty,\n          \"@container\"\n        ) || [];\n        if (container.includes(\"@list\")) {\n          return api.compact({\n            activeCtx,\n            activeProperty,\n            element: element[\"@list\"],\n            options\n          });\n        }\n      }\n      const insideReverse = activeProperty === \"@reverse\";\n      const rval = {};\n      const inputCtx = activeCtx;\n      if (!_isValue(element) && !_isSubjectReference(element)) {\n        activeCtx = activeCtx.revertToPreviousContext();\n      }\n      const propertyScopedCtx = _getContextValue(inputCtx, activeProperty, \"@context\");\n      if (!_isUndefined(propertyScopedCtx)) {\n        activeCtx = await _processContext({\n          activeCtx,\n          localCtx: propertyScopedCtx,\n          propagate: true,\n          overrideProtected: true,\n          options\n        });\n      }\n      if (options.link && \"@id\" in element) {\n        if (!options.link.hasOwnProperty(element[\"@id\"])) {\n          options.link[element[\"@id\"]] = [];\n        }\n        options.link[element[\"@id\"]].push({ expanded: element, compacted: rval });\n      }\n      let types2 = element[\"@type\"] || [];\n      if (types2.length > 1) {\n        types2 = Array.from(types2).sort();\n      }\n      const typeContext = activeCtx;\n      for (const type of types2) {\n        const compactedType = api.compactIri(\n          { activeCtx: typeContext, iri: type, relativeTo: { vocab: true } }\n        );\n        const ctx2 = _getContextValue(inputCtx, compactedType, \"@context\");\n        if (!_isUndefined(ctx2)) {\n          activeCtx = await _processContext({\n            activeCtx,\n            localCtx: ctx2,\n            options,\n            propagate: false\n          });\n        }\n      }\n      const keys = Object.keys(element).sort();\n      for (const expandedProperty of keys) {\n        const expandedValue = element[expandedProperty];\n        if (expandedProperty === \"@id\") {\n          let compactedValue = _asArray(expandedValue).map(\n            (expandedIri) => api.compactIri({\n              activeCtx,\n              iri: expandedIri,\n              relativeTo: { vocab: false },\n              base: options.base\n            })\n          );\n          if (compactedValue.length === 1) {\n            compactedValue = compactedValue[0];\n          }\n          const alias = api.compactIri(\n            { activeCtx, iri: \"@id\", relativeTo: { vocab: true } }\n          );\n          rval[alias] = compactedValue;\n          continue;\n        }\n        if (expandedProperty === \"@type\") {\n          let compactedValue = _asArray(expandedValue).map(\n            (expandedIri) => api.compactIri({\n              activeCtx: inputCtx,\n              iri: expandedIri,\n              relativeTo: { vocab: true }\n            })\n          );\n          if (compactedValue.length === 1) {\n            compactedValue = compactedValue[0];\n          }\n          const alias = api.compactIri(\n            { activeCtx, iri: \"@type\", relativeTo: { vocab: true } }\n          );\n          const container = _getContextValue(\n            activeCtx,\n            alias,\n            \"@container\"\n          ) || [];\n          const typeAsSet = container.includes(\"@set\") && _processingMode(activeCtx, 1.1);\n          const isArray = typeAsSet || _isArray(compactedValue) && expandedValue.length === 0;\n          _addValue(rval, alias, compactedValue, { propertyIsArray: isArray });\n          continue;\n        }\n        if (expandedProperty === \"@reverse\") {\n          const compactedValue = await api.compact({\n            activeCtx,\n            activeProperty: \"@reverse\",\n            element: expandedValue,\n            options\n          });\n          for (const compactedProperty in compactedValue) {\n            if (activeCtx.mappings.has(compactedProperty) && activeCtx.mappings.get(compactedProperty).reverse) {\n              const value = compactedValue[compactedProperty];\n              const container = _getContextValue(\n                activeCtx,\n                compactedProperty,\n                \"@container\"\n              ) || [];\n              const useArray = container.includes(\"@set\") || !options.compactArrays;\n              _addValue(\n                rval,\n                compactedProperty,\n                value,\n                { propertyIsArray: useArray }\n              );\n              delete compactedValue[compactedProperty];\n            }\n          }\n          if (Object.keys(compactedValue).length > 0) {\n            const alias = api.compactIri({\n              activeCtx,\n              iri: expandedProperty,\n              relativeTo: { vocab: true }\n            });\n            _addValue(rval, alias, compactedValue);\n          }\n          continue;\n        }\n        if (expandedProperty === \"@preserve\") {\n          const compactedValue = await api.compact({\n            activeCtx,\n            activeProperty,\n            element: expandedValue,\n            options\n          });\n          if (!(_isArray(compactedValue) && compactedValue.length === 0)) {\n            _addValue(rval, expandedProperty, compactedValue);\n          }\n          continue;\n        }\n        if (expandedProperty === \"@index\") {\n          const container = _getContextValue(\n            activeCtx,\n            activeProperty,\n            \"@container\"\n          ) || [];\n          if (container.includes(\"@index\")) {\n            continue;\n          }\n          const alias = api.compactIri({\n            activeCtx,\n            iri: expandedProperty,\n            relativeTo: { vocab: true }\n          });\n          _addValue(rval, alias, expandedValue);\n          continue;\n        }\n        if (expandedProperty !== \"@graph\" && expandedProperty !== \"@list\" && expandedProperty !== \"@included\" && _isKeyword(expandedProperty)) {\n          const alias = api.compactIri({\n            activeCtx,\n            iri: expandedProperty,\n            relativeTo: { vocab: true }\n          });\n          _addValue(rval, alias, expandedValue);\n          continue;\n        }\n        if (!_isArray(expandedValue)) {\n          throw new JsonLdError(\n            \"JSON-LD expansion error; expanded value must be an array.\",\n            \"jsonld.SyntaxError\"\n          );\n        }\n        if (expandedValue.length === 0) {\n          const itemActiveProperty = api.compactIri({\n            activeCtx,\n            iri: expandedProperty,\n            value: expandedValue,\n            relativeTo: { vocab: true },\n            reverse: insideReverse\n          });\n          const nestProperty = activeCtx.mappings.has(itemActiveProperty) ? activeCtx.mappings.get(itemActiveProperty)[\"@nest\"] : null;\n          let nestResult = rval;\n          if (nestProperty) {\n            _checkNestProperty(activeCtx, nestProperty, options);\n            if (!_isObject(rval[nestProperty])) {\n              rval[nestProperty] = {};\n            }\n            nestResult = rval[nestProperty];\n          }\n          _addValue(\n            nestResult,\n            itemActiveProperty,\n            expandedValue,\n            {\n              propertyIsArray: true\n            }\n          );\n        }\n        for (const expandedItem of expandedValue) {\n          const itemActiveProperty = api.compactIri({\n            activeCtx,\n            iri: expandedProperty,\n            value: expandedItem,\n            relativeTo: { vocab: true },\n            reverse: insideReverse\n          });\n          const nestProperty = activeCtx.mappings.has(itemActiveProperty) ? activeCtx.mappings.get(itemActiveProperty)[\"@nest\"] : null;\n          let nestResult = rval;\n          if (nestProperty) {\n            _checkNestProperty(activeCtx, nestProperty, options);\n            if (!_isObject(rval[nestProperty])) {\n              rval[nestProperty] = {};\n            }\n            nestResult = rval[nestProperty];\n          }\n          const container = _getContextValue(\n            activeCtx,\n            itemActiveProperty,\n            \"@container\"\n          ) || [];\n          const isGraph = _isGraph(expandedItem);\n          const isList = _isList(expandedItem);\n          let inner;\n          if (isList) {\n            inner = expandedItem[\"@list\"];\n          } else if (isGraph) {\n            inner = expandedItem[\"@graph\"];\n          }\n          let compactedItem = await api.compact({\n            activeCtx,\n            activeProperty: itemActiveProperty,\n            element: isList || isGraph ? inner : expandedItem,\n            options\n          });\n          if (isList) {\n            if (!_isArray(compactedItem)) {\n              compactedItem = [compactedItem];\n            }\n            if (!container.includes(\"@list\")) {\n              compactedItem = {\n                [api.compactIri({\n                  activeCtx,\n                  iri: \"@list\",\n                  relativeTo: { vocab: true }\n                })]: compactedItem\n              };\n              if (\"@index\" in expandedItem) {\n                compactedItem[api.compactIri({\n                  activeCtx,\n                  iri: \"@index\",\n                  relativeTo: { vocab: true }\n                })] = expandedItem[\"@index\"];\n              }\n            } else {\n              _addValue(nestResult, itemActiveProperty, compactedItem, {\n                valueIsArray: true,\n                allowDuplicate: true\n              });\n              continue;\n            }\n          }\n          if (isGraph) {\n            if (container.includes(\"@graph\") && (container.includes(\"@id\") || container.includes(\"@index\") && _isSimpleGraph(expandedItem))) {\n              let mapObject;\n              if (nestResult.hasOwnProperty(itemActiveProperty)) {\n                mapObject = nestResult[itemActiveProperty];\n              } else {\n                nestResult[itemActiveProperty] = mapObject = {};\n              }\n              const key = (container.includes(\"@id\") ? expandedItem[\"@id\"] : expandedItem[\"@index\"]) || api.compactIri({\n                activeCtx,\n                iri: \"@none\",\n                relativeTo: { vocab: true }\n              });\n              _addValue(\n                mapObject,\n                key,\n                compactedItem,\n                {\n                  propertyIsArray: !options.compactArrays || container.includes(\"@set\")\n                }\n              );\n            } else if (container.includes(\"@graph\") && _isSimpleGraph(expandedItem)) {\n              if (_isArray(compactedItem) && compactedItem.length > 1) {\n                compactedItem = { \"@included\": compactedItem };\n              }\n              _addValue(\n                nestResult,\n                itemActiveProperty,\n                compactedItem,\n                {\n                  propertyIsArray: !options.compactArrays || container.includes(\"@set\")\n                }\n              );\n            } else {\n              if (_isArray(compactedItem) && compactedItem.length === 1 && options.compactArrays) {\n                compactedItem = compactedItem[0];\n              }\n              compactedItem = {\n                [api.compactIri({\n                  activeCtx,\n                  iri: \"@graph\",\n                  relativeTo: { vocab: true }\n                })]: compactedItem\n              };\n              if (\"@id\" in expandedItem) {\n                compactedItem[api.compactIri({\n                  activeCtx,\n                  iri: \"@id\",\n                  relativeTo: { vocab: true }\n                })] = expandedItem[\"@id\"];\n              }\n              if (\"@index\" in expandedItem) {\n                compactedItem[api.compactIri({\n                  activeCtx,\n                  iri: \"@index\",\n                  relativeTo: { vocab: true }\n                })] = expandedItem[\"@index\"];\n              }\n              _addValue(\n                nestResult,\n                itemActiveProperty,\n                compactedItem,\n                {\n                  propertyIsArray: !options.compactArrays || container.includes(\"@set\")\n                }\n              );\n            }\n          } else if (container.includes(\"@language\") || container.includes(\"@index\") || container.includes(\"@id\") || container.includes(\"@type\")) {\n            let mapObject;\n            if (nestResult.hasOwnProperty(itemActiveProperty)) {\n              mapObject = nestResult[itemActiveProperty];\n            } else {\n              nestResult[itemActiveProperty] = mapObject = {};\n            }\n            let key;\n            if (container.includes(\"@language\")) {\n              if (_isValue(compactedItem)) {\n                compactedItem = compactedItem[\"@value\"];\n              }\n              key = expandedItem[\"@language\"];\n            } else if (container.includes(\"@index\")) {\n              const indexKey = _getContextValue(\n                activeCtx,\n                itemActiveProperty,\n                \"@index\"\n              ) || \"@index\";\n              const containerKey = api.compactIri(\n                { activeCtx, iri: indexKey, relativeTo: { vocab: true } }\n              );\n              if (indexKey === \"@index\") {\n                key = expandedItem[\"@index\"];\n                delete compactedItem[containerKey];\n              } else {\n                let others;\n                [key, ...others] = _asArray(compactedItem[indexKey] || []);\n                if (!_isString(key)) {\n                  key = null;\n                } else {\n                  switch (others.length) {\n                    case 0:\n                      delete compactedItem[indexKey];\n                      break;\n                    case 1:\n                      compactedItem[indexKey] = others[0];\n                      break;\n                    default:\n                      compactedItem[indexKey] = others;\n                      break;\n                  }\n                }\n              }\n            } else if (container.includes(\"@id\")) {\n              const idKey = api.compactIri({\n                activeCtx,\n                iri: \"@id\",\n                relativeTo: { vocab: true }\n              });\n              key = compactedItem[idKey];\n              delete compactedItem[idKey];\n            } else if (container.includes(\"@type\")) {\n              const typeKey = api.compactIri({\n                activeCtx,\n                iri: \"@type\",\n                relativeTo: { vocab: true }\n              });\n              let types3;\n              [key, ...types3] = _asArray(compactedItem[typeKey] || []);\n              switch (types3.length) {\n                case 0:\n                  delete compactedItem[typeKey];\n                  break;\n                case 1:\n                  compactedItem[typeKey] = types3[0];\n                  break;\n                default:\n                  compactedItem[typeKey] = types3;\n                  break;\n              }\n              if (Object.keys(compactedItem).length === 1 && \"@id\" in expandedItem) {\n                compactedItem = await api.compact({\n                  activeCtx,\n                  activeProperty: itemActiveProperty,\n                  element: { \"@id\": expandedItem[\"@id\"] },\n                  options\n                });\n              }\n            }\n            if (!key) {\n              key = api.compactIri({\n                activeCtx,\n                iri: \"@none\",\n                relativeTo: { vocab: true }\n              });\n            }\n            _addValue(\n              mapObject,\n              key,\n              compactedItem,\n              {\n                propertyIsArray: container.includes(\"@set\")\n              }\n            );\n          } else {\n            const isArray = !options.compactArrays || container.includes(\"@set\") || container.includes(\"@list\") || _isArray(compactedItem) && compactedItem.length === 0 || expandedProperty === \"@list\" || expandedProperty === \"@graph\";\n            _addValue(\n              nestResult,\n              itemActiveProperty,\n              compactedItem,\n              { propertyIsArray: isArray }\n            );\n          }\n        }\n      }\n      return rval;\n    }\n    return element;\n  };\n  api.compactIri = ({\n    activeCtx,\n    iri,\n    value = null,\n    relativeTo = { vocab: false },\n    reverse = false,\n    base = null\n  }) => {\n    if (iri === null) {\n      return iri;\n    }\n    if (activeCtx.isPropertyTermScoped && activeCtx.previousContext) {\n      activeCtx = activeCtx.previousContext;\n    }\n    const inverseCtx = activeCtx.getInverse();\n    if (_isKeyword(iri) && iri in inverseCtx && \"@none\" in inverseCtx[iri] && \"@type\" in inverseCtx[iri][\"@none\"] && \"@none\" in inverseCtx[iri][\"@none\"][\"@type\"]) {\n      return inverseCtx[iri][\"@none\"][\"@type\"][\"@none\"];\n    }\n    if (relativeTo.vocab && iri in inverseCtx) {\n      const defaultLanguage = activeCtx[\"@language\"] || \"@none\";\n      const containers = [];\n      if (_isObject(value) && \"@index\" in value && !(\"@graph\" in value)) {\n        containers.push(\"@index\", \"@index@set\");\n      }\n      if (_isObject(value) && \"@preserve\" in value) {\n        value = value[\"@preserve\"][0];\n      }\n      if (_isGraph(value)) {\n        if (\"@index\" in value) {\n          containers.push(\n            \"@graph@index\",\n            \"@graph@index@set\",\n            \"@index\",\n            \"@index@set\"\n          );\n        }\n        if (\"@id\" in value) {\n          containers.push(\n            \"@graph@id\",\n            \"@graph@id@set\"\n          );\n        }\n        containers.push(\"@graph\", \"@graph@set\", \"@set\");\n        if (!(\"@index\" in value)) {\n          containers.push(\n            \"@graph@index\",\n            \"@graph@index@set\",\n            \"@index\",\n            \"@index@set\"\n          );\n        }\n        if (!(\"@id\" in value)) {\n          containers.push(\"@graph@id\", \"@graph@id@set\");\n        }\n      } else if (_isObject(value) && !_isValue(value)) {\n        containers.push(\"@id\", \"@id@set\", \"@type\", \"@set@type\");\n      }\n      let typeOrLanguage = \"@language\";\n      let typeOrLanguageValue = \"@null\";\n      if (reverse) {\n        typeOrLanguage = \"@type\";\n        typeOrLanguageValue = \"@reverse\";\n        containers.push(\"@set\");\n      } else if (_isList(value)) {\n        if (!(\"@index\" in value)) {\n          containers.push(\"@list\");\n        }\n        const list = value[\"@list\"];\n        if (list.length === 0) {\n          typeOrLanguage = \"@any\";\n          typeOrLanguageValue = \"@none\";\n        } else {\n          let commonLanguage = list.length === 0 ? defaultLanguage : null;\n          let commonType = null;\n          for (let i = 0; i < list.length; ++i) {\n            const item = list[i];\n            let itemLanguage = \"@none\";\n            let itemType = \"@none\";\n            if (_isValue(item)) {\n              if (\"@direction\" in item) {\n                const lang = (item[\"@language\"] || \"\").toLowerCase();\n                const dir = item[\"@direction\"];\n                itemLanguage = `${lang}_${dir}`;\n              } else if (\"@language\" in item) {\n                itemLanguage = item[\"@language\"].toLowerCase();\n              } else if (\"@type\" in item) {\n                itemType = item[\"@type\"];\n              } else {\n                itemLanguage = \"@null\";\n              }\n            } else {\n              itemType = \"@id\";\n            }\n            if (commonLanguage === null) {\n              commonLanguage = itemLanguage;\n            } else if (itemLanguage !== commonLanguage && _isValue(item)) {\n              commonLanguage = \"@none\";\n            }\n            if (commonType === null) {\n              commonType = itemType;\n            } else if (itemType !== commonType) {\n              commonType = \"@none\";\n            }\n            if (commonLanguage === \"@none\" && commonType === \"@none\") {\n              break;\n            }\n          }\n          commonLanguage = commonLanguage || \"@none\";\n          commonType = commonType || \"@none\";\n          if (commonType !== \"@none\") {\n            typeOrLanguage = \"@type\";\n            typeOrLanguageValue = commonType;\n          } else {\n            typeOrLanguageValue = commonLanguage;\n          }\n        }\n      } else {\n        if (_isValue(value)) {\n          if (\"@language\" in value && !(\"@index\" in value)) {\n            containers.push(\"@language\", \"@language@set\");\n            typeOrLanguageValue = value[\"@language\"];\n            const dir = value[\"@direction\"];\n            if (dir) {\n              typeOrLanguageValue = `${typeOrLanguageValue}_${dir}`;\n            }\n          } else if (\"@direction\" in value && !(\"@index\" in value)) {\n            typeOrLanguageValue = `_${value[\"@direction\"]}`;\n          } else if (\"@type\" in value) {\n            typeOrLanguage = \"@type\";\n            typeOrLanguageValue = value[\"@type\"];\n          }\n        } else {\n          typeOrLanguage = \"@type\";\n          typeOrLanguageValue = \"@id\";\n        }\n        containers.push(\"@set\");\n      }\n      containers.push(\"@none\");\n      if (_isObject(value) && !(\"@index\" in value)) {\n        containers.push(\"@index\", \"@index@set\");\n      }\n      if (_isValue(value) && Object.keys(value).length === 1) {\n        containers.push(\"@language\", \"@language@set\");\n      }\n      const term = _selectTerm(\n        activeCtx,\n        iri,\n        value,\n        containers,\n        typeOrLanguage,\n        typeOrLanguageValue\n      );\n      if (term !== null) {\n        return term;\n      }\n    }\n    if (relativeTo.vocab) {\n      if (\"@vocab\" in activeCtx) {\n        const vocab = activeCtx[\"@vocab\"];\n        if (iri.indexOf(vocab) === 0 && iri !== vocab) {\n          const suffix = iri.substr(vocab.length);\n          if (!activeCtx.mappings.has(suffix)) {\n            return suffix;\n          }\n        }\n      }\n    }\n    let choice = null;\n    const partialMatches = [];\n    let iriMap = activeCtx.fastCurieMap;\n    const maxPartialLength = iri.length - 1;\n    for (let i = 0; i < maxPartialLength && iri[i] in iriMap; ++i) {\n      iriMap = iriMap[iri[i]];\n      if (\"\" in iriMap) {\n        partialMatches.push(iriMap[\"\"][0]);\n      }\n    }\n    for (let i = partialMatches.length - 1; i >= 0; --i) {\n      const entry = partialMatches[i];\n      const terms = entry.terms;\n      for (const term of terms) {\n        const curie = term + \":\" + iri.substr(entry.iri.length);\n        const isUsableCurie = activeCtx.mappings.get(term)._prefix && (!activeCtx.mappings.has(curie) || value === null && activeCtx.mappings.get(curie)[\"@id\"] === iri);\n        if (isUsableCurie && (choice === null || _compareShortestLeast(curie, choice) < 0)) {\n          choice = curie;\n        }\n      }\n    }\n    if (choice !== null) {\n      return choice;\n    }\n    for (const [term, td] of activeCtx.mappings) {\n      if (td && td._prefix && iri.startsWith(term + \":\")) {\n        throw new JsonLdError(\n          `Absolute IRI \"${iri}\" confused with prefix \"${term}\".`,\n          \"jsonld.SyntaxError\",\n          { code: \"IRI confused with prefix\", context: activeCtx }\n        );\n      }\n    }\n    if (!relativeTo.vocab) {\n      if (\"@base\" in activeCtx) {\n        if (!activeCtx[\"@base\"]) {\n          return iri;\n        } else {\n          const _iri = _removeBase(_prependBase(base, activeCtx[\"@base\"]), iri);\n          return REGEX_KEYWORD.test(_iri) ? `./${_iri}` : _iri;\n        }\n      } else {\n        return _removeBase(base, iri);\n      }\n    }\n    return iri;\n  };\n  api.compactValue = ({ activeCtx, activeProperty, value, options }) => {\n    if (_isValue(value)) {\n      const type2 = _getContextValue(activeCtx, activeProperty, \"@type\");\n      const language = _getContextValue(activeCtx, activeProperty, \"@language\");\n      const direction = _getContextValue(activeCtx, activeProperty, \"@direction\");\n      const container = _getContextValue(activeCtx, activeProperty, \"@container\") || [];\n      const preserveIndex = \"@index\" in value && !container.includes(\"@index\");\n      if (!preserveIndex && type2 !== \"@none\") {\n        if (value[\"@type\"] === type2) {\n          return value[\"@value\"];\n        }\n        if (\"@language\" in value && value[\"@language\"] === language && \"@direction\" in value && value[\"@direction\"] === direction) {\n          return value[\"@value\"];\n        }\n        if (\"@language\" in value && value[\"@language\"] === language) {\n          return value[\"@value\"];\n        }\n        if (\"@direction\" in value && value[\"@direction\"] === direction) {\n          return value[\"@value\"];\n        }\n      }\n      const keyCount = Object.keys(value).length;\n      const isValueOnlyKey = keyCount === 1 || keyCount === 2 && \"@index\" in value && !preserveIndex;\n      const hasDefaultLanguage = \"@language\" in activeCtx;\n      const isValueString = _isString(value[\"@value\"]);\n      const hasNullMapping = activeCtx.mappings.has(activeProperty) && activeCtx.mappings.get(activeProperty)[\"@language\"] === null;\n      if (isValueOnlyKey && type2 !== \"@none\" && (!hasDefaultLanguage || !isValueString || hasNullMapping)) {\n        return value[\"@value\"];\n      }\n      const rval = {};\n      if (preserveIndex) {\n        rval[api.compactIri({\n          activeCtx,\n          iri: \"@index\",\n          relativeTo: { vocab: true }\n        })] = value[\"@index\"];\n      }\n      if (\"@type\" in value) {\n        rval[api.compactIri({\n          activeCtx,\n          iri: \"@type\",\n          relativeTo: { vocab: true }\n        })] = api.compactIri(\n          { activeCtx, iri: value[\"@type\"], relativeTo: { vocab: true } }\n        );\n      } else if (\"@language\" in value) {\n        rval[api.compactIri({\n          activeCtx,\n          iri: \"@language\",\n          relativeTo: { vocab: true }\n        })] = value[\"@language\"];\n      }\n      if (\"@direction\" in value) {\n        rval[api.compactIri({\n          activeCtx,\n          iri: \"@direction\",\n          relativeTo: { vocab: true }\n        })] = value[\"@direction\"];\n      }\n      rval[api.compactIri({\n        activeCtx,\n        iri: \"@value\",\n        relativeTo: { vocab: true }\n      })] = value[\"@value\"];\n      return rval;\n    }\n    const expandedProperty = _expandIri(\n      activeCtx,\n      activeProperty,\n      { vocab: true },\n      options\n    );\n    const type = _getContextValue(activeCtx, activeProperty, \"@type\");\n    const compacted = api.compactIri({\n      activeCtx,\n      iri: value[\"@id\"],\n      relativeTo: { vocab: type === \"@vocab\" },\n      base: options.base\n    });\n    if (type === \"@id\" || type === \"@vocab\" || expandedProperty === \"@graph\") {\n      return compacted;\n    }\n    return {\n      [api.compactIri({\n        activeCtx,\n        iri: \"@id\",\n        relativeTo: { vocab: true }\n      })]: compacted\n    };\n  };\n  function _selectTerm(activeCtx, iri, value, containers, typeOrLanguage, typeOrLanguageValue) {\n    if (typeOrLanguageValue === null) {\n      typeOrLanguageValue = \"@null\";\n    }\n    const prefs = [];\n    if ((typeOrLanguageValue === \"@id\" || typeOrLanguageValue === \"@reverse\") && _isObject(value) && \"@id\" in value) {\n      if (typeOrLanguageValue === \"@reverse\") {\n        prefs.push(\"@reverse\");\n      }\n      const term = api.compactIri(\n        { activeCtx, iri: value[\"@id\"], relativeTo: { vocab: true } }\n      );\n      if (activeCtx.mappings.has(term) && activeCtx.mappings.get(term) && activeCtx.mappings.get(term)[\"@id\"] === value[\"@id\"]) {\n        prefs.push.apply(prefs, [\"@vocab\", \"@id\"]);\n      } else {\n        prefs.push.apply(prefs, [\"@id\", \"@vocab\"]);\n      }\n    } else {\n      prefs.push(typeOrLanguageValue);\n      const langDir = prefs.find((el) => el.includes(\"_\"));\n      if (langDir) {\n        prefs.push(langDir.replace(/^[^_]+_/, \"_\"));\n      }\n    }\n    prefs.push(\"@none\");\n    const containerMap = activeCtx.inverse[iri];\n    for (const container of containers) {\n      if (!(container in containerMap)) {\n        continue;\n      }\n      const typeOrLanguageValueMap = containerMap[container][typeOrLanguage];\n      for (const pref of prefs) {\n        if (!(pref in typeOrLanguageValueMap)) {\n          continue;\n        }\n        return typeOrLanguageValueMap[pref];\n      }\n    }\n    return null;\n  }\n  function _checkNestProperty(activeCtx, nestProperty, options) {\n    if (_expandIri(activeCtx, nestProperty, { vocab: true }, options) !== \"@nest\") {\n      throw new JsonLdError(\n        \"JSON-LD compact error; nested property must have an @nest value resolving to @nest.\",\n        \"jsonld.SyntaxError\",\n        { code: \"invalid @nest value\" }\n      );\n    }\n  }\n  return compact;\n}\nvar JsonLdProcessor;\nvar hasRequiredJsonLdProcessor;\nfunction requireJsonLdProcessor() {\n  if (hasRequiredJsonLdProcessor) return JsonLdProcessor;\n  hasRequiredJsonLdProcessor = 1;\n  JsonLdProcessor = (jsonld2) => {\n    class JsonLdProcessor2 {\n      toString() {\n        return \"[object JsonLdProcessor]\";\n      }\n    }\n    Object.defineProperty(JsonLdProcessor2, \"prototype\", {\n      writable: false,\n      enumerable: false\n    });\n    Object.defineProperty(JsonLdProcessor2.prototype, \"constructor\", {\n      writable: true,\n      enumerable: false,\n      configurable: true,\n      value: JsonLdProcessor2\n    });\n    JsonLdProcessor2.compact = function(input, ctx) {\n      if (arguments.length < 2) {\n        return Promise.reject(\n          new TypeError(\"Could not compact, too few arguments.\")\n        );\n      }\n      return jsonld2.compact(input, ctx);\n    };\n    JsonLdProcessor2.expand = function(input) {\n      if (arguments.length < 1) {\n        return Promise.reject(\n          new TypeError(\"Could not expand, too few arguments.\")\n        );\n      }\n      return jsonld2.expand(input);\n    };\n    JsonLdProcessor2.flatten = function(input) {\n      if (arguments.length < 1) {\n        return Promise.reject(\n          new TypeError(\"Could not flatten, too few arguments.\")\n        );\n      }\n      return jsonld2.flatten(input);\n    };\n    return JsonLdProcessor2;\n  };\n  return JsonLdProcessor;\n}\n/**\n * A JavaScript implementation of the JSON-LD API.\n *\n * @author Dave Longley\n *\n * @license BSD 3-Clause License\n * Copyright (c) 2011-2022 Digital Bazaar, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * Neither the name of the Digital Bazaar, Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n * IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\n * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nvar jsonld$1;\nvar hasRequiredJsonld;\nfunction requireJsonld() {\n  if (hasRequiredJsonld) return jsonld$1;\n  hasRequiredJsonld = 1;\n  const canonize = requireRdfCanonize();\n  const platform = requirePlatformBrowser();\n  const util2 = requireUtil();\n  const ContextResolver = requireContextResolver();\n  const IdentifierIssuer = util2.IdentifierIssuer;\n  const JsonLdError = requireJsonLdError();\n  const LRU = requireLruCache();\n  const NQuads2 = requireNQuads();\n  const { expand: _expand } = requireExpand();\n  const { flatten: _flatten } = requireFlatten();\n  const { fromRDF: _fromRDF } = requireFromRdf();\n  const { toRDF: _toRDF } = requireToRdf();\n  const {\n    frameMergedOrDefault: _frameMergedOrDefault,\n    cleanupNull: _cleanupNull\n  } = requireFrame();\n  const {\n    isArray: _isArray,\n    isObject: _isObject,\n    isString: _isString\n  } = requireTypes();\n  const {\n    isSubjectReference: _isSubjectReference\n  } = requireGraphTypes();\n  const {\n    expandIri: _expandIri,\n    getInitialContext: _getInitialContext,\n    process: _processContext,\n    processingMode: _processingMode\n  } = requireContext();\n  const {\n    compact: _compact,\n    compactIri: _compactIri\n  } = requireCompact();\n  const {\n    createNodeMap: _createNodeMap,\n    createMergedNodeMap: _createMergedNodeMap,\n    mergeNodeMaps: _mergeNodeMaps\n  } = requireNodeMap();\n  const {\n    logEventHandler: _logEventHandler,\n    logWarningEventHandler: _logWarningEventHandler,\n    safeEventHandler: _safeEventHandler,\n    setDefaultEventHandler: _setDefaultEventHandler,\n    setupEventHandler: _setupEventHandler,\n    strictEventHandler: _strictEventHandler,\n    unhandledEventHandler: _unhandledEventHandler\n  } = requireEvents();\n  const wrapper = function(jsonld2) {\n    const _rdfParsers = {};\n    const RESOLVED_CONTEXT_CACHE_MAX_SIZE = 100;\n    const _resolvedContextCache = new LRU({ max: RESOLVED_CONTEXT_CACHE_MAX_SIZE });\n    jsonld2.compact = async function(input, ctx, options) {\n      if (arguments.length < 2) {\n        throw new TypeError(\"Could not compact, too few arguments.\");\n      }\n      if (ctx === null) {\n        throw new JsonLdError(\n          \"The compaction context must not be null.\",\n          \"jsonld.CompactError\",\n          { code: \"invalid local context\" }\n        );\n      }\n      if (input === null) {\n        return null;\n      }\n      options = _setDefaults(options, {\n        base: _isString(input) ? input : \"\",\n        compactArrays: true,\n        compactToRelative: true,\n        graph: false,\n        skipExpansion: false,\n        link: false,\n        issuer: new IdentifierIssuer(\"_:b\"),\n        contextResolver: new ContextResolver(\n          { sharedCache: _resolvedContextCache }\n        )\n      });\n      if (options.link) {\n        options.skipExpansion = true;\n      }\n      if (!options.compactToRelative) {\n        delete options.base;\n      }\n      let expanded;\n      if (options.skipExpansion) {\n        expanded = input;\n      } else {\n        expanded = await jsonld2.expand(input, options);\n      }\n      const activeCtx = await jsonld2.processContext(\n        _getInitialContext(options),\n        ctx,\n        options\n      );\n      let compacted = await _compact({\n        activeCtx,\n        element: expanded,\n        options\n      });\n      if (options.compactArrays && !options.graph && _isArray(compacted)) {\n        if (compacted.length === 1) {\n          compacted = compacted[0];\n        } else if (compacted.length === 0) {\n          compacted = {};\n        }\n      } else if (options.graph && _isObject(compacted)) {\n        compacted = [compacted];\n      }\n      if (_isObject(ctx) && \"@context\" in ctx) {\n        ctx = ctx[\"@context\"];\n      }\n      ctx = util2.clone(ctx);\n      if (!_isArray(ctx)) {\n        ctx = [ctx];\n      }\n      const tmp = ctx;\n      ctx = [];\n      for (let i = 0; i < tmp.length; ++i) {\n        if (!_isObject(tmp[i]) || Object.keys(tmp[i]).length > 0) {\n          ctx.push(tmp[i]);\n        }\n      }\n      const hasContext = ctx.length > 0;\n      if (ctx.length === 1) {\n        ctx = ctx[0];\n      }\n      if (_isArray(compacted)) {\n        const graphAlias = _compactIri({\n          activeCtx,\n          iri: \"@graph\",\n          relativeTo: { vocab: true }\n        });\n        const graph = compacted;\n        compacted = {};\n        if (hasContext) {\n          compacted[\"@context\"] = ctx;\n        }\n        compacted[graphAlias] = graph;\n      } else if (_isObject(compacted) && hasContext) {\n        const graph = compacted;\n        compacted = { \"@context\": ctx };\n        for (const key in graph) {\n          compacted[key] = graph[key];\n        }\n      }\n      return compacted;\n    };\n    jsonld2.expand = async function(input, options) {\n      if (arguments.length < 1) {\n        throw new TypeError(\"Could not expand, too few arguments.\");\n      }\n      options = _setDefaults(options, {\n        keepFreeFloatingNodes: false,\n        contextResolver: new ContextResolver(\n          { sharedCache: _resolvedContextCache }\n        )\n      });\n      const toResolve = {};\n      const contextsToProcess = [];\n      if (\"expandContext\" in options) {\n        const expandContext = util2.clone(options.expandContext);\n        if (_isObject(expandContext) && \"@context\" in expandContext) {\n          toResolve.expandContext = expandContext;\n        } else {\n          toResolve.expandContext = { \"@context\": expandContext };\n        }\n        contextsToProcess.push(toResolve.expandContext);\n      }\n      let defaultBase;\n      if (!_isString(input)) {\n        toResolve.input = util2.clone(input);\n      } else {\n        const remoteDoc = await jsonld2.get(input, options);\n        defaultBase = remoteDoc.documentUrl;\n        toResolve.input = remoteDoc.document;\n        if (remoteDoc.contextUrl) {\n          toResolve.remoteContext = { \"@context\": remoteDoc.contextUrl };\n          contextsToProcess.push(toResolve.remoteContext);\n        }\n      }\n      if (!(\"base\" in options)) {\n        options.base = defaultBase || \"\";\n      }\n      let activeCtx = _getInitialContext(options);\n      for (const localCtx of contextsToProcess) {\n        activeCtx = await _processContext({ activeCtx, localCtx, options });\n      }\n      let expanded = await _expand({\n        activeCtx,\n        element: toResolve.input,\n        options\n      });\n      if (_isObject(expanded) && \"@graph\" in expanded && Object.keys(expanded).length === 1) {\n        expanded = expanded[\"@graph\"];\n      } else if (expanded === null) {\n        expanded = [];\n      }\n      if (!_isArray(expanded)) {\n        expanded = [expanded];\n      }\n      return expanded;\n    };\n    jsonld2.flatten = async function(input, ctx, options) {\n      if (arguments.length < 1) {\n        return new TypeError(\"Could not flatten, too few arguments.\");\n      }\n      if (typeof ctx === \"function\") {\n        ctx = null;\n      } else {\n        ctx = ctx || null;\n      }\n      options = _setDefaults(options, {\n        base: _isString(input) ? input : \"\",\n        contextResolver: new ContextResolver(\n          { sharedCache: _resolvedContextCache }\n        )\n      });\n      const expanded = await jsonld2.expand(input, options);\n      const flattened = _flatten(expanded);\n      if (ctx === null) {\n        return flattened;\n      }\n      options.graph = true;\n      options.skipExpansion = true;\n      const compacted = await jsonld2.compact(flattened, ctx, options);\n      return compacted;\n    };\n    jsonld2.frame = async function(input, frame2, options) {\n      if (arguments.length < 2) {\n        throw new TypeError(\"Could not frame, too few arguments.\");\n      }\n      options = _setDefaults(options, {\n        base: _isString(input) ? input : \"\",\n        embed: \"@once\",\n        explicit: false,\n        requireAll: false,\n        omitDefault: false,\n        bnodesToClear: [],\n        contextResolver: new ContextResolver(\n          { sharedCache: _resolvedContextCache }\n        )\n      });\n      if (_isString(frame2)) {\n        const remoteDoc = await jsonld2.get(frame2, options);\n        frame2 = remoteDoc.document;\n        if (remoteDoc.contextUrl) {\n          let ctx = frame2[\"@context\"];\n          if (!ctx) {\n            ctx = remoteDoc.contextUrl;\n          } else if (_isArray(ctx)) {\n            ctx.push(remoteDoc.contextUrl);\n          } else {\n            ctx = [ctx, remoteDoc.contextUrl];\n          }\n          frame2[\"@context\"] = ctx;\n        }\n      }\n      const frameContext = frame2 ? frame2[\"@context\"] || {} : {};\n      const activeCtx = await jsonld2.processContext(\n        _getInitialContext(options),\n        frameContext,\n        options\n      );\n      if (!options.hasOwnProperty(\"omitGraph\")) {\n        options.omitGraph = _processingMode(activeCtx, 1.1);\n      }\n      if (!options.hasOwnProperty(\"pruneBlankNodeIdentifiers\")) {\n        options.pruneBlankNodeIdentifiers = _processingMode(activeCtx, 1.1);\n      }\n      const expanded = await jsonld2.expand(input, options);\n      const opts = { ...options };\n      opts.isFrame = true;\n      opts.keepFreeFloatingNodes = true;\n      const expandedFrame = await jsonld2.expand(frame2, opts);\n      const frameKeys = Object.keys(frame2).map((key) => _expandIri(activeCtx, key, { vocab: true }));\n      opts.merged = !frameKeys.includes(\"@graph\");\n      opts.is11 = _processingMode(activeCtx, 1.1);\n      const framed = _frameMergedOrDefault(expanded, expandedFrame, opts);\n      opts.graph = !options.omitGraph;\n      opts.skipExpansion = true;\n      opts.link = {};\n      opts.framing = true;\n      let compacted = await jsonld2.compact(framed, frameContext, opts);\n      opts.link = {};\n      compacted = _cleanupNull(compacted, opts);\n      return compacted;\n    };\n    jsonld2.link = async function(input, ctx, options) {\n      const frame2 = {};\n      if (ctx) {\n        frame2[\"@context\"] = ctx;\n      }\n      frame2[\"@embed\"] = \"@link\";\n      return jsonld2.frame(input, frame2, options);\n    };\n    jsonld2.normalize = jsonld2.canonize = async function(input, options) {\n      if (arguments.length < 1) {\n        throw new TypeError(\"Could not canonize, too few arguments.\");\n      }\n      options = _setDefaults(options, {\n        base: _isString(input) ? input : null,\n        algorithm: \"URDNA2015\",\n        skipExpansion: false,\n        safe: true,\n        contextResolver: new ContextResolver(\n          { sharedCache: _resolvedContextCache }\n        )\n      });\n      if (\"inputFormat\" in options) {\n        if (options.inputFormat !== \"application/n-quads\" && options.inputFormat !== \"application/nquads\") {\n          throw new JsonLdError(\n            \"Unknown canonicalization input format.\",\n            \"jsonld.CanonizeError\"\n          );\n        }\n        const parsedInput = NQuads2.parse(input);\n        return canonize.canonize(parsedInput, options);\n      }\n      const opts = { ...options };\n      delete opts.format;\n      opts.produceGeneralizedRdf = false;\n      const dataset = await jsonld2.toRDF(input, opts);\n      return canonize.canonize(dataset, options);\n    };\n    jsonld2.fromRDF = async function(dataset, options) {\n      if (arguments.length < 1) {\n        throw new TypeError(\"Could not convert from RDF, too few arguments.\");\n      }\n      options = _setDefaults(options, {\n        format: _isString(dataset) ? \"application/n-quads\" : void 0\n      });\n      const { format } = options;\n      let { rdfParser } = options;\n      if (format) {\n        rdfParser = rdfParser || _rdfParsers[format];\n        if (!rdfParser) {\n          throw new JsonLdError(\n            \"Unknown input format.\",\n            \"jsonld.UnknownFormat\",\n            { format }\n          );\n        }\n      } else {\n        rdfParser = () => dataset;\n      }\n      const parsedDataset = await rdfParser(dataset);\n      return _fromRDF(parsedDataset, options);\n    };\n    jsonld2.toRDF = async function(input, options) {\n      if (arguments.length < 1) {\n        throw new TypeError(\"Could not convert to RDF, too few arguments.\");\n      }\n      options = _setDefaults(options, {\n        base: _isString(input) ? input : \"\",\n        skipExpansion: false,\n        contextResolver: new ContextResolver(\n          { sharedCache: _resolvedContextCache }\n        )\n      });\n      let expanded;\n      if (options.skipExpansion) {\n        expanded = input;\n      } else {\n        expanded = await jsonld2.expand(input, options);\n      }\n      const dataset = _toRDF(expanded, options);\n      if (options.format) {\n        if (options.format === \"application/n-quads\" || options.format === \"application/nquads\") {\n          return NQuads2.serialize(dataset);\n        }\n        throw new JsonLdError(\n          \"Unknown output format.\",\n          \"jsonld.UnknownFormat\",\n          { format: options.format }\n        );\n      }\n      return dataset;\n    };\n    jsonld2.createNodeMap = async function(input, options) {\n      if (arguments.length < 1) {\n        throw new TypeError(\"Could not create node map, too few arguments.\");\n      }\n      options = _setDefaults(options, {\n        base: _isString(input) ? input : \"\",\n        contextResolver: new ContextResolver(\n          { sharedCache: _resolvedContextCache }\n        )\n      });\n      const expanded = await jsonld2.expand(input, options);\n      return _createMergedNodeMap(expanded, options);\n    };\n    jsonld2.merge = async function(docs, ctx, options) {\n      if (arguments.length < 1) {\n        throw new TypeError(\"Could not merge, too few arguments.\");\n      }\n      if (!_isArray(docs)) {\n        throw new TypeError('Could not merge, \"docs\" must be an array.');\n      }\n      if (typeof ctx === \"function\") {\n        ctx = null;\n      } else {\n        ctx = ctx || null;\n      }\n      options = _setDefaults(options, {\n        contextResolver: new ContextResolver(\n          { sharedCache: _resolvedContextCache }\n        )\n      });\n      const expanded = await Promise.all(docs.map((doc) => {\n        const opts = { ...options };\n        return jsonld2.expand(doc, opts);\n      }));\n      let mergeNodes = true;\n      if (\"mergeNodes\" in options) {\n        mergeNodes = options.mergeNodes;\n      }\n      const issuer = options.issuer || new IdentifierIssuer(\"_:b\");\n      const graphs = { \"@default\": {} };\n      for (let i = 0; i < expanded.length; ++i) {\n        const doc = util2.relabelBlankNodes(expanded[i], {\n          issuer: new IdentifierIssuer(\"_:b\" + i + \"-\")\n        });\n        const _graphs = mergeNodes || i === 0 ? graphs : { \"@default\": {} };\n        _createNodeMap(doc, _graphs, \"@default\", issuer);\n        if (_graphs !== graphs) {\n          for (const graphName in _graphs) {\n            const _nodeMap = _graphs[graphName];\n            if (!(graphName in graphs)) {\n              graphs[graphName] = _nodeMap;\n              continue;\n            }\n            const nodeMap2 = graphs[graphName];\n            for (const key in _nodeMap) {\n              if (!(key in nodeMap2)) {\n                nodeMap2[key] = _nodeMap[key];\n              }\n            }\n          }\n        }\n      }\n      const defaultGraph = _mergeNodeMaps(graphs);\n      const flattened = [];\n      const keys = Object.keys(defaultGraph).sort();\n      for (let ki = 0; ki < keys.length; ++ki) {\n        const node = defaultGraph[keys[ki]];\n        if (!_isSubjectReference(node)) {\n          flattened.push(node);\n        }\n      }\n      if (ctx === null) {\n        return flattened;\n      }\n      options.graph = true;\n      options.skipExpansion = true;\n      const compacted = await jsonld2.compact(flattened, ctx, options);\n      return compacted;\n    };\n    Object.defineProperty(jsonld2, \"documentLoader\", {\n      get: () => jsonld2._documentLoader,\n      set: (v) => jsonld2._documentLoader = v\n    });\n    jsonld2.documentLoader = async (url2) => {\n      throw new JsonLdError(\n        \"Could not retrieve a JSON-LD document from the URL. URL dereferencing not implemented.\",\n        \"jsonld.LoadDocumentError\",\n        { code: \"loading document failed\", url: url2 }\n      );\n    };\n    jsonld2.get = async function(url2, options) {\n      let load;\n      if (typeof options.documentLoader === \"function\") {\n        load = options.documentLoader;\n      } else {\n        load = jsonld2.documentLoader;\n      }\n      const remoteDoc = await load(url2);\n      try {\n        if (!remoteDoc.document) {\n          throw new JsonLdError(\n            \"No remote document found at the given URL.\",\n            \"jsonld.NullRemoteDocument\"\n          );\n        }\n        if (_isString(remoteDoc.document)) {\n          remoteDoc.document = JSON.parse(remoteDoc.document);\n        }\n      } catch (e) {\n        throw new JsonLdError(\n          \"Could not retrieve a JSON-LD document from the URL.\",\n          \"jsonld.LoadDocumentError\",\n          {\n            code: \"loading document failed\",\n            cause: e,\n            remoteDoc\n          }\n        );\n      }\n      return remoteDoc;\n    };\n    jsonld2.processContext = async function(activeCtx, localCtx, options) {\n      options = _setDefaults(options, {\n        base: \"\",\n        contextResolver: new ContextResolver(\n          { sharedCache: _resolvedContextCache }\n        )\n      });\n      if (localCtx === null) {\n        return _getInitialContext(options);\n      }\n      localCtx = util2.clone(localCtx);\n      if (!(_isObject(localCtx) && \"@context\" in localCtx)) {\n        localCtx = { \"@context\": localCtx };\n      }\n      return _processContext({ activeCtx, localCtx, options });\n    };\n    jsonld2.getContextValue = requireContext().getContextValue;\n    jsonld2.documentLoaders = {};\n    jsonld2.useDocumentLoader = function(type) {\n      if (!(type in jsonld2.documentLoaders)) {\n        throw new JsonLdError(\n          'Unknown document loader type: \"' + type + '\"',\n          \"jsonld.UnknownDocumentLoader\",\n          { type }\n        );\n      }\n      jsonld2.documentLoader = jsonld2.documentLoaders[type].apply(\n        jsonld2,\n        Array.prototype.slice.call(arguments, 1)\n      );\n    };\n    jsonld2.registerRDFParser = function(contentType, parser) {\n      _rdfParsers[contentType] = parser;\n    };\n    jsonld2.unregisterRDFParser = function(contentType) {\n      delete _rdfParsers[contentType];\n    };\n    jsonld2.registerRDFParser(\"application/n-quads\", NQuads2.parse);\n    jsonld2.registerRDFParser(\"application/nquads\", NQuads2.parse);\n    jsonld2.url = requireUrl();\n    jsonld2.logEventHandler = _logEventHandler;\n    jsonld2.logWarningEventHandler = _logWarningEventHandler;\n    jsonld2.safeEventHandler = _safeEventHandler;\n    jsonld2.setDefaultEventHandler = _setDefaultEventHandler;\n    jsonld2.strictEventHandler = _strictEventHandler;\n    jsonld2.unhandledEventHandler = _unhandledEventHandler;\n    jsonld2.util = util2;\n    Object.assign(jsonld2, util2);\n    jsonld2.promises = jsonld2;\n    jsonld2.RequestQueue = requireRequestQueue();\n    jsonld2.JsonLdProcessor = requireJsonLdProcessor()(jsonld2);\n    platform.setupGlobals(jsonld2);\n    platform.setupDocumentLoaders(jsonld2);\n    function _setDefaults(options, {\n      documentLoader = jsonld2.documentLoader,\n      ...defaults\n    }) {\n      if (options && \"compactionMap\" in options) {\n        throw new JsonLdError(\n          '\"compactionMap\" not supported.',\n          \"jsonld.OptionsError\"\n        );\n      }\n      if (options && \"expansionMap\" in options) {\n        throw new JsonLdError(\n          '\"expansionMap\" not supported.',\n          \"jsonld.OptionsError\"\n        );\n      }\n      return Object.assign(\n        {},\n        { documentLoader },\n        defaults,\n        options,\n        { eventHandler: _setupEventHandler({ options }) }\n      );\n    }\n    return jsonld2;\n  };\n  const factory = function() {\n    return wrapper(function() {\n      return factory();\n    });\n  };\n  wrapper(factory);\n  jsonld$1 = factory;\n  return jsonld$1;\n}\nvar jsonldExports = requireJsonld();\nconst jsonld = /* @__PURE__ */ getDefaultExportFromCjs(jsonldExports);\nclass CustomGetter {\n  // search attributes to give to server\n  constructor(resourceId, resource, clientContext, serverContext, parentId = \"\", serverPagination = {}, serverSearch = {}) {\n    __publicField(this, \"resource\");\n    // content of the requested resource\n    __publicField(this, \"resourceId\");\n    __publicField(this, \"clientContext\");\n    // context given by the app\n    __publicField(this, \"serverContext\");\n    // context given by the server\n    __publicField(this, \"parentId\");\n    // id of the parent resource, used to get the absolute url of the current resource\n    __publicField(this, \"listTypes\");\n    // types of resources interpreted as containers\n    __publicField(this, \"serverPagination\");\n    // pagination attributes to give to server\n    __publicField(this, \"serverSearch\");\n    this.clientContext = clientContext;\n    this.serverContext = serverContext;\n    this.parentId = parentId;\n    this.resource = resource;\n    this.resourceId = resourceId;\n    this.serverPagination = serverPagination;\n    this.serverSearch = serverSearch;\n    this.listTypes = [\n      this.getExpandedPredicate(\"ldp:Container\"),\n      this.getExpandedPredicate(\"dcat:Catalog\"),\n      this.getExpandedPredicate(\"ldp:BasicContainer\"),\n      this.getExpandedPredicate(\"ldp:DirectContainer\"),\n      this.getExpandedPredicate(\"ldp:IndirectContainer\"),\n      this.getExpandedPredicate(\"sib:federatedContainer\")\n    ].filter(Boolean);\n  }\n  /**\n   * Get the property of a resource for a given path\n   * Which means that if the resource is not complete, it will fetch it\n   * And that we handle the `.` notation, traversing the path recursively\n   * @param path: string\n   */\n  async get(path) {\n    if (!path) return;\n    try {\n      const isUrl = new URL(path);\n      if (!isUrl.protocol.startsWith(\"http\"))\n        throw new Error(\"Not a valid HTTP url\");\n      if (isUrl) {\n        let resources = this.getList(path);\n        if (!resources || Array.isArray(resources) && resources.length === 0)\n          return void 0;\n        if (!Array.isArray(resources)) resources = [resources];\n        const result = resources ? resources.map((res) => {\n          let resource = store.get(res[\"@id\"]);\n          if (resource) return resource;\n          resource = new CustomGetter(\n            res[\"@id\"],\n            { \"@id\": res[\"@id\"] },\n            this.clientContext,\n            this.serverContext,\n            this.parentId\n          ).getProxy();\n          store.cacheResource(res[\"@id\"], resource);\n          return resource;\n        }) : [];\n        return result;\n      }\n    } catch {\n      if (!path.split) return void 0;\n      const path1 = path.split(\".\");\n      const path2 = [];\n      let value;\n      if (!this.isFullResource()) {\n        await this.getResource(\n          this.resourceId,\n          { ...this.clientContext, ...this.serverContext },\n          this.parentId\n        );\n      }\n      while (true) {\n        value = await this.getList(path1[0]);\n        if (path1.length <= 1) break;\n        const lastPath1El = path1.pop();\n        if (lastPath1El) path2.unshift(lastPath1El);\n      }\n      if (path2.length === 0) {\n        if (!value || !value[\"@id\"]) return this.getLiteralValue(value);\n        const valueKeys = Object.keys(value).filter((k) => k !== \"@type\");\n        if (valueKeys.length === 1 && valueKeys[0] === \"@id\") {\n          const cachedResource = store.get(value[\"@id\"]);\n          if (cachedResource) {\n            return cachedResource;\n          }\n          try {\n            const mergedContext = mergeContexts(\n              this.clientContext,\n              this.serverContext\n            );\n            const rawContext = getRawContext(mergedContext);\n            if ((rawContext == null ? void 0 : rawContext[path]) && typeof rawContext[path] === \"object\" && rawContext[path][\"@type\"] === \"@id\") {\n              return value[\"@id\"];\n            }\n          } catch (error) {\n            console.warn(\"Context parsing failed in CustomGetter:\", error);\n          }\n          const resource2 = await this.getResource(\n            value[\"@id\"],\n            mergeContexts(this.clientContext, this.serverContext),\n            this.parentId || this.resourceId\n          );\n          if (resource2 === null) {\n            return value[\"@id\"];\n          }\n          return resource2;\n        }\n        return await this.getResource(\n          value[\"@id\"],\n          mergeContexts(this.clientContext, this.serverContext),\n          this.parentId || this.resourceId\n        );\n      }\n      if (!value || !value[\"@id\"]) return void 0;\n      const resource = await this.getResource(\n        value[\"@id\"],\n        mergeContexts(this.clientContext, this.serverContext),\n        this.parentId || this.resourceId\n      );\n      store.subscribeResourceTo(this.resourceId, value[\"@id\"]);\n      return resource ? await resource[path2.join(\".\")] : void 0;\n    }\n  }\n  static getEmptyResource(id, clientContext, parentContext) {\n    return new CustomGetter(\n      id,\n      { \"@id\": id },\n      clientContext,\n      parentContext\n    ).getProxy();\n  }\n  /**\n   * Return value depending of the current language\n   * @param value\n   * @returns\n   */\n  getLiteralValue(value) {\n    if (typeof value !== \"object\" || value === null) return value;\n    if (value[\"@value\"]) return value[\"@value\"];\n    if (!Array.isArray(value)) return value;\n    if (value.length === 0) return null;\n    if (!Array.isArray(value[0])) return value;\n    const ln = store._getLanguage();\n    let translatedValue = value.find(\n      (v) => v[\"@language\"] && v[\"@language\"] === ln\n    );\n    if (!translatedValue)\n      translatedValue = value.find(\n        (v) => v[\"@language\"] && v[\"@language\"] === \"en\"\n      );\n    return (translatedValue == null ? void 0 : translatedValue[\"@value\"]) ?? null;\n  }\n  /**\n   * Cache resource in the store, and return the created proxy\n   * @param id\n   * @param context\n   * @param iriParent\n   */\n  async getResource(id, context2, iriParent, forceFetch = false) {\n    if (id.startsWith(\"_:b\")) return await store.get(id + iriParent);\n    return store.getData(id, context2, iriParent, void 0, forceFetch);\n  }\n  /**\n   * Return true if the resource is a container\n   */\n  isContainer() {\n    if (this.resource[\"@type\"]) {\n      if (Array.isArray(this.resource[\"@type\"]))\n        return this.listTypes.some(\n          (type) => this.resource[\"@type\"].includes(type)\n        );\n      return this.listTypes.includes(this.resource[\"@type\"]);\n    }\n    if (!this.resource.type) return false;\n    if (Array.isArray(this.resource.type))\n      return this.listTypes.some((type) => this.resource.type.includes(type));\n    return this.listTypes.includes(this.resource.type);\n  }\n  /**\n   * Return true if the given key in the current resource in an array\n   */\n  isArray() {\n    if (Array.isArray(this.resource)) return true;\n    return false;\n  }\n  /**\n   * Get all properties of a resource\n   */\n  getProperties() {\n    return Object.keys(this.resource).map(\n      (prop) => this.getCompactedPredicate(prop)\n    );\n  }\n  /**\n   * Get children of container as objects\n   */\n  getList(predicateName) {\n    let value = this.resource[predicateName];\n    if (!value) {\n      const index = this.getExpandedPredicate(predicateName);\n      if (index) {\n        value = this.resource[index];\n      }\n    }\n    if (value === void 0 || value === null) {\n      return [];\n    }\n    return value;\n  }\n  getListAndCacheIt(predicate) {\n    let children = this.getList(predicate);\n    if (!children) return null;\n    if (!Array.isArray(children)) children = [children];\n    const result = children ? children.map((res) => {\n      let resource = store.get(res[\"@id\"]);\n      if (resource) return resource;\n      resource = new CustomGetter(\n        res[\"@id\"],\n        { \"@id\": res[\"@id\"] },\n        this.clientContext,\n        this.serverContext,\n        this.parentId\n      ).getProxy();\n      store.cacheResource(res[\"@id\"], resource);\n      return resource;\n    }) : [];\n    return result;\n  }\n  getDcatDataset() {\n    return this.getListAndCacheIt(\"dcat:dataset\");\n  }\n  /**\n   * Get children of container as Proxys\n   */\n  getLdpContains() {\n    return this.getListAndCacheIt(\"ldp:contains\");\n  }\n  merge(resource) {\n    this.resource = {\n      ...this.getResourceData(),\n      ...resource.getResourceData()\n    };\n  }\n  getResourceData() {\n    return this.resource;\n  }\n  /**\n   * Get the list of resources associated with the list predicate of the resource\n   * If the resource is a container, it will return the ldp:contains list\n   * If the resource is a dcat:Catalog, it will return the dcat:dataset list\n   * If the resource is not a container or a catalog, it will return null\n   * @returns object[] | null\n   */\n  getContainerList() {\n    if (this.hasType(\"ldp:Container\")) {\n      return this.getLdpContains();\n    }\n    if (this.getType() === \"dcat:Catalog\") {\n      return this.getDcatDataset();\n    }\n    return null;\n  }\n  /**\n   * return true if resource seems complete\n   * A resource is considered complete if it has at least one property which is not a permission\n   */\n  isFullResource() {\n    const propertiesKeys = Object.keys(this.resource).filter(\n      (p) => !p.startsWith(\"@\")\n    );\n    if (this.resource[\"@id\"].startsWith(\"_:b\")) return true;\n    if (propertiesKeys.length === 1 && propertiesKeys[0] === this.getExpandedPredicate(\"permissions\"))\n      return false;\n    if (propertiesKeys.length > 0) return true;\n    return false;\n  }\n  /**\n   * Get permissions of a resource\n   * @param resourceId\n   * @returns\n   */\n  async getPermissions() {\n    const perms = this.getExpandedPredicate(\"permissions\");\n    if (!perms) return [];\n    let permissions = this.resource[perms];\n    if (!permissions) {\n      await this.getResource(\n        this.resourceId,\n        { ...this.clientContext, ...this.serverContext },\n        this.parentId,\n        true\n      );\n      permissions = this.resource[perms];\n    }\n    if (!Array.isArray(permissions)) permissions = [permissions];\n    return permissions ? permissions : [];\n  }\n  /**\n   * returns compacted @type of resource\n   */\n  getType() {\n    if (Array.isArray(this.resource[\"@type\"])) {\n      return this.resource[\"@type\"].map((type) => this.getCompactedIri(type));\n    }\n    return this.resource[\"@type\"] ? this.getCompactedIri(this.resource[\"@type\"]) : \"\";\n  }\n  /**\n   * Check if the resource has a specific type\n   * @param type\n   */\n  hasType(type) {\n    const types2 = this.getType();\n    if (!types2) return false;\n    if (Array.isArray(types2)) {\n      return types2.includes(this.getCompactedIri(type));\n    }\n    return types2 === this.getCompactedIri(type);\n  }\n  /**\n   * Remove the resource from the cache\n   */\n  clearCache() {\n    store.clearCache(this.resourceId);\n  }\n  getExpandedPredicate(property) {\n    const context2 = normalizeContext(\n      mergeContexts(this.clientContext, this.serverContext)\n    );\n    return context2.expandTerm(property, true);\n  }\n  getCompactedPredicate(property) {\n    const context2 = normalizeContext(\n      mergeContexts(this.clientContext, this.serverContext)\n    );\n    return context2.compactIri(property, true);\n  }\n  getCompactedIri(id) {\n    const context2 = normalizeContext(\n      mergeContexts(this.clientContext, this.serverContext)\n    );\n    return context2.compactIri(id);\n  }\n  toString() {\n    return this.getCompactedIri(this.resource[\"@id\"]);\n  }\n  [Symbol.toPrimitive]() {\n    return this.getCompactedIri(this.resource[\"@id\"]);\n  }\n  /**\n   * Returns a Proxy which handles the different get requests\n   */\n  getProxy() {\n    return new Proxy(this, {\n      get: (resource, property) => {\n        if (!this.resource) return void 0;\n        if (typeof resource[property] === \"function\")\n          return resource[property].bind(resource);\n        switch (property) {\n          case \"@id\":\n            if (this.resource[\"@id\"])\n              return this.getCompactedIri(this.resource[\"@id\"]);\n            return;\n          case \"@type\":\n            return this.resource[\"@type\"];\n          // return synchronously\n          case \"properties\":\n            return this.getProperties();\n          case \"ldp:contains\":\n          case \"listPredicate\":\n            return this.getContainerList();\n          // returns standard arrays synchronously\n          case \"permissions\":\n            return this.getPermissions();\n          // get expanded permissions\n          case \"clientContext\":\n            return getRawContext(this.clientContext);\n          // get saved client context to re-fetch easily a resource\n          case \"serverContext\":\n            return getRawContext(this.serverContext);\n          // get saved client context to re-fetch easily a resource\n          case \"then\":\n            return;\n          default:\n            return resource.get(property);\n        }\n      }\n    });\n  }\n}\nclass CacheManager {\n  constructor() {\n    __publicField(this, \"resourceCache\", /* @__PURE__ */ new Map());\n    __publicField(this, \"urlToIdMap\", /* @__PURE__ */ new Map());\n  }\n  /**\n   * Retrieves a cached resource based on the URL it was originally fetched from.\n   * Internally resolves the associated @id and returns the corresponding resource.\n   *\n   * @param url - The original URL used to fetch the resource.\n   * @returns The cached resource, or undefined if not found.\n   */\n  getByUrl(url2) {\n    const id = this.urlToIdMap.get(url2);\n    if (!id) return void 0;\n    return this.resourceCache.get(id);\n  }\n  hasUrlMatch(url2) {\n    if (!this.urlToIdMap.get(url2)) return false;\n    return true;\n  }\n  /**\n   * Retrieves a cached resource by its unique @id.\n   *\n   * @param id - The @id of the resource (can be a URI, URN, or UUID).\n   * @returns The cached resource, or undefined if not found.\n   */\n  getById(id) {\n    return this.resourceCache.get(id);\n  }\n  /**\n   * Retrieves a resource from the cache by either @id or fetch URL.\n   * If the input is an ID, returns directly.\n   * If it's a URL, attempts to resolve the associated @id first.\n   *\n   * @param idOrUrl - A resource @id or its original fetch URL.\n   * @returns The cached resource, or undefined if not found.\n   */\n  get(ref) {\n    if (this.resourceCache.has(ref)) {\n      return this.resourceCache.get(ref);\n    }\n    const id = this.urlToIdMap.get(ref);\n    if (id) {\n      return this.resourceCache.get(id);\n    }\n    return void 0;\n  }\n  length() {\n    return this.resourceCache.size;\n  }\n  /**\n   * Stores a resource in the cache and creates a mapping from the given URL to the resource's @id.\n   *\n   * @param url - The URL from which the resource was fetched.\n   * @param resource - The JSON-LD resource to store. Must contain a valid @id.\n   */\n  set(url2, resource) {\n    const id = resource == null ? void 0 : resource[\"@id\"];\n    if (!id) {\n      console.warn(\"[CacheManager] Resource has no @id\", resource);\n      return;\n    }\n    this.resourceCache.set(id, resource);\n    this.urlToIdMap.set(url2, id);\n  }\n  /**\n   * Links a data source URL or relative path to a given resource ID (`@id`)\n   *\n   * Used to establish a lookup path when the resource is first accessed by URL\n   * and later by its actual `@id`.\n   *\n   * @param url - Data source (absolute or relative path).\n   * @param emptyResource - The resource to associate with this URL. Must include a valid `@id`.\n   */\n  linkUrlWithId(url2, emptyResource) {\n    if (!isUrlOrRelativePath(url2)) return;\n    if (this.hasUrlMatch(url2)) return;\n    this.set(url2, emptyResource);\n  }\n  /**\n   * Checks if a resource is cached.\n   * Can be checked either by @id or by the original fetch URL.\n   *\n   * @param urlOrId - The @id or URL to check for.\n   * @returns True if the resource exists in cache, false otherwise.\n   */\n  has(urlOrId) {\n    if (this.resourceCache.has(urlOrId)) return true;\n    const id = this.urlToIdMap.get(urlOrId);\n    return id ? this.resourceCache.has(id) : false;\n  }\n  /**\n   * Returns the @id associated with a given fetch URL.\n   *\n   * @param url - The original fetch URL.\n   * @returns The associated @id, or undefined if no mapping exists.\n   */\n  getIdByUrl(url2) {\n    return this.urlToIdMap.get(url2);\n  }\n  /**\n   * Clears the entire cache and all URL-to-ID mappings.\n   */\n  clear() {\n    this.resourceCache.clear();\n    this.urlToIdMap.clear();\n  }\n  /**\n   * Removes a resource from the cache by @id or original fetch URL.\n   * Both the resource and its URL mapping will be removed if applicable.\n   *\n   * @param idOrUrl - The @id or URL of the resource to delete.\n   * @returns True if the resource was found and deleted, false otherwise.\n   */\n  delete(idOrUrl) {\n    if (this.resourceCache.has(idOrUrl)) {\n      this.resourceCache.delete(idOrUrl);\n      for (const [url2, id2] of this.urlToIdMap.entries()) {\n        if (id2 === idOrUrl) {\n          this.urlToIdMap.delete(url2);\n          break;\n        }\n      }\n      return true;\n    }\n    const id = this.urlToIdMap.get(idOrUrl);\n    if (id && this.resourceCache.has(id)) {\n      this.resourceCache.delete(id);\n      this.urlToIdMap.delete(idOrUrl);\n      return true;\n    }\n    return false;\n  }\n}\nconst base_context = {\n  \"@vocab\": \"https://cdn.startinblox.com/owl#\",\n  foaf: \"http://xmlns.com/foaf/0.1/\",\n  doap: \"http://usefulinc.com/ns/doap#\",\n  ldp: \"http://www.w3.org/ns/ldp#\",\n  rdfs: \"http://www.w3.org/2000/01/rdf-schema#\",\n  rdf: \"http://www.w3.org/1999/02/22-rdf-syntax-ns#\",\n  xsd: \"http://www.w3.org/2001/XMLSchema#\",\n  geo: \"http://www.w3.org/2003/01/geo/wgs84_pos#\",\n  acl: \"http://www.w3.org/ns/auth/acl#\",\n  hd: \"http://cdn.startinblox.com/owl/ttl/vocab.ttl#\",\n  sib: \"http://cdn.startinblox.com/owl/ttl/vocab.ttl#\",\n  dcat: \"https://www.w3.org/ns/dcat3.jsonld#\",\n  name: \"rdfs:label\",\n  deadline: \"xsd:dateTime\",\n  lat: \"geo:lat\",\n  lng: \"geo:long\",\n  jabberID: \"foaf:jabberID\",\n  permissions: \"acl:accessControl\",\n  mode: \"acl:mode\",\n  view: \"acl:Read\",\n  change: \"acl:Write\",\n  add: \"acl:Append\",\n  delete: \"acl:Delete\",\n  control: \"acl:Control\"\n};\nclass Store {\n  constructor(storeOptions) {\n    __publicField(this, \"cache\");\n    __publicField(this, \"subscriptionIndex\");\n    // index of all the containers per resource\n    __publicField(this, \"subscriptionVirtualContainersIndex\");\n    // index of all the containers per resource\n    __publicField(this, \"loadingList\");\n    __publicField(this, \"headers\");\n    __publicField(this, \"fetch\");\n    __publicField(this, \"session\");\n    __publicField(this, \"contextParser\");\n    __publicField(this, \"resolveResource\", (id, resolve) => {\n      const handler = (event) => {\n        if (event.detail.id === id) {\n          if (event.detail.resource) {\n            resolve(event.detail.resource);\n          } else {\n            resolve(event.detail.fetchedResource);\n          }\n          document.removeEventListener(\"resourceReady\", handler);\n        }\n      };\n      return handler;\n    });\n    this.storeOptions = storeOptions;\n    this.cache = new CacheManager();\n    this.subscriptionIndex = /* @__PURE__ */ new Map();\n    this.subscriptionVirtualContainersIndex = /* @__PURE__ */ new Map();\n    this.loadingList = /* @__PURE__ */ new Set();\n    this.headers = {\n      Accept: \"application/ld+json\",\n      \"Content-Type\": \"application/ld+json\",\n      \"Cache-Control\": \"must-revalidate\"\n    };\n    this.fetch = this.storeOptions.fetchMethod;\n    this.session = this.storeOptions.session;\n    this.contextParser = new jsonldContextParserExports.ContextParser();\n  }\n  /**\n   * Fetch data and cache it\n   * @param id - uri of the resource to fetch\n   * @param context - context used to expand id and predicates when accessing the resource\n   * @param parentId - uri of the parent caller used to expand uri for local files\n   * @param localData - data to put in cache\n   * @param forceFetch - force the fetch of data\n   * @param serverPagination - Server pagination options\n   * @param serverSearch - Server search options\n   * @param predicateName - predicate name if we target a specific predicate from the resource, useful for arrays\n   *\n   * @returns The fetched resource\n   *\n   * @async\n   */\n  async getData(id, context2 = [], parentId = \"\", localData, forceFetch = false, serverPagination, serverSearch, headers) {\n    var _a;\n    let key = id;\n    if (serverPagination) {\n      key = appendServerPaginationToIri(key, serverPagination);\n    }\n    if (serverSearch) {\n      key = appendServerSearchToIri(key, serverSearch);\n    }\n    if (localData == null && this.cache.has(key) && !this.loadingList.has(key)) {\n      const resource = this.get(key);\n      if (((_a = resource == null ? void 0 : resource.isFullResource) == null ? void 0 : _a.call(resource)) && !forceFetch) return await resource;\n    }\n    return new Promise(async (resolve) => {\n      document.addEventListener(\n        \"resourceReady\",\n        this.resolveResource(key, resolve)\n      );\n      if (this.loadingList.has(key)) return;\n      this.loadingList.add(key);\n      const clientContext = await this.contextParser.parse(\n        getRawContext(context2)\n      );\n      let resource = null;\n      if (this._isLocalId(id)) {\n        if (localData == null) localData = {};\n        localData[\"@id\"] = id;\n        resource = localData;\n      } else\n        try {\n          resource = localData || await this.fetchData(\n            id,\n            clientContext,\n            parentId,\n            serverPagination,\n            serverSearch,\n            headers\n          );\n        } catch (error) {\n          console.error(error);\n        }\n      if (!resource) {\n        this.loadingList.delete(key);\n        document.dispatchEvent(\n          new CustomEvent(\"resourceReady\", {\n            detail: { id: key, resource: null, fetchedResource: null }\n          })\n        );\n        return;\n      }\n      const serverContext = await this.contextParser.parse([\n        resource[\"@context\"] || base_context\n      ]);\n      await this.cacheGraph(\n        resource,\n        clientContext,\n        serverContext,\n        parentId ? parentId : key,\n        serverPagination,\n        serverSearch\n      );\n      this.loadingList.delete(key);\n      document.dispatchEvent(\n        new CustomEvent(\"resourceReady\", {\n          detail: {\n            id: key,\n            resource: this.get(key),\n            fetchedResource: resource\n          }\n        })\n      );\n    });\n  }\n  async fetchAuthn(iri, options) {\n    let authenticated = false;\n    if (this.session) authenticated = await this.session;\n    if (this.fetch && authenticated) {\n      return this.fetch.then((fn) => fn(iri, options));\n    }\n    if (options.headers)\n      options.headers = this._convertHeaders(options.headers);\n    return fetch(iri, options).then((response) => response);\n  }\n  /**\n   * Fetch resource\n   * @param id - id of the resource\n   * @param context - context used to expand id\n   * @param idParent - id of the caller resource. Needed to expand id\n   * @param serverPagination - Server pagination query params\n   * @param serverSearch - Server search query params\n   * @returns data in json\n   */\n  async fetchData(id, context2 = null, parentId = \"\", serverPagination, serverSearch, headers) {\n    let iri = this._getAbsoluteIri(id, context2, parentId);\n    if (serverPagination)\n      iri = appendServerPaginationToIri(iri, serverPagination);\n    if (serverSearch) iri = appendServerSearchToIri(iri, serverSearch);\n    let requestHeaders = {\n      ...this.headers,\n      \"accept-language\": this._getLanguage()\n      // 'Prefer' : 'return=representation; max-triple-count=\"100\"' // Commenting out for now as it raises CORS errors\n    };\n    if (headers) requestHeaders = { ...requestHeaders, ...headers };\n    return this.fetchAuthn(iri, {\n      method: \"GET\",\n      headers: requestHeaders,\n      credentials: \"include\"\n    }).then((response) => {\n      if (!response.ok) return;\n      return response.json();\n    });\n  }\n  /**\n   * Cache the whole graph\n   * @param resource - graph fetched\n   * @param clientContext - context of the client app\n   * @param parentContext - context of the server\n   * @param parentId - id of the parent caller\n   * @param serverPagination - Server pagination query params\n   * @param serverSearch - Server search query params\n   */\n  async cacheGraph(resources, clientContext, parentContext, parentId, serverPagination, serverSearch) {\n    var _a;\n    this.cache.linkUrlWithId(\n      parentId,\n      CustomGetter.getEmptyResource(\n        resources[\"@id\"],\n        clientContext,\n        parentContext\n      )\n    );\n    const flattenedResources = await jsonld.flatten(resources);\n    const compactedResources = await Promise.all(\n      flattenedResources.map((r) => jsonld.compact(r, {}))\n    );\n    for (const resource of compactedResources) {\n      const id = resource[\"@id\"] || resource.id;\n      let key = resource[\"@id\"] || resource.id;\n      if (!key) console.log(\"No key or id for resource:\", resource);\n      if (key === \"/\") key = parentId;\n      if (key.startsWith(\"_:b\")) key = key + parentId;\n      if (key === id && resource[\"@type\"] === this.getExpandedPredicate(\"ldp:Container\", clientContext) || resource[\"@type\"] === this.getExpandedPredicate(\"dcat:Catalog\", clientContext)) {\n        if (serverPagination)\n          key = appendServerPaginationToIri(key, serverPagination);\n        if (serverSearch) key = appendServerSearchToIri(key, serverSearch);\n      }\n      const resourceProxy = new CustomGetter(\n        key,\n        resource,\n        clientContext,\n        parentContext,\n        parentId,\n        serverPagination,\n        serverSearch\n      ).getProxy();\n      if (resourceProxy.isContainer())\n        this.subscribeChildren(resourceProxy, id);\n      if (this.get(key)) {\n        (_a = this.cache.get(key)) == null ? void 0 : _a.merge(resourceProxy);\n      } else {\n        this.cacheResource(key, resourceProxy);\n      }\n    }\n  }\n  /**\n   * Put proxy in cache\n   * @param key\n   * @param resourceProxy\n   */\n  cacheResource(key, resourceProxy) {\n    this.cache.set(key, resourceProxy);\n  }\n  /**\n   * Update fetch\n   * @param method - 'POST', 'PATCH', 'PUT', '_LOCAL'\n   * @param resource - resource to send\n   * @param id - uri to update\n   * @returns - object\n   */\n  async _fetch(method, resource, id) {\n    if (method !== \"_LOCAL\")\n      return this.fetchAuthn(id, {\n        method,\n        headers: this.headers,\n        body: JSON.stringify(resource),\n        credentials: \"include\"\n      });\n    const resourceProxy = store.get(id);\n    const clientContext = resourceProxy ? mergeContexts(resourceProxy.clientContext, resource[\"@context\"]) : resource[\"@context\"];\n    this.clearCache(id);\n    await this.getData(id, clientContext, \"\", resource);\n    return { ok: true };\n  }\n  /**\n   * Subscribe all the children of a container to its parent\n   * @param container\n   */\n  subscribeChildren(container, containerId) {\n    const children = container[\"listPredicate\"];\n    if (!children) return;\n    for (const res of children) {\n      this.subscribeResourceTo(containerId, res[\"@id\"] || res.id);\n    }\n  }\n  /**\n   * Update a resource\n   * @param method - can be POST, PUT or PATCH\n   * @param resource - content of the updated resource\n   * @param id - id of the resource to update\n   * @returns void\n   */\n  async _updateResource(method, resource, id, skipFetch = false) {\n    if (![\"POST\", \"PUT\", \"PATCH\", \"_LOCAL\"].includes(method))\n      throw new Error(\"Error: method not allowed\");\n    const context2 = await this.contextParser.parse([\n      resource[\"@context\"] || {}\n    ]);\n    const expandedId = this._getExpandedId(id, context2);\n    if (!expandedId) return null;\n    return this._fetch(method, resource, id).then(async (response) => {\n      var _a;\n      if (response.ok) {\n        if (!skipFetch) {\n          if (method !== \"_LOCAL\") {\n            this.clearCache(expandedId);\n          }\n          await this.getData(expandedId, resource[\"@context\"]);\n          const nestedResources = await this.getNestedResources(resource, id);\n          const resourcesToRefresh = this.subscriptionVirtualContainersIndex.get(expandedId) || [];\n          const resourcesToNotify = this.subscriptionIndex.get(expandedId) || [];\n          await this.refreshResources([\n            ...nestedResources,\n            ...resourcesToRefresh\n          ]).then(\n            (resourceIds) => this.notifyResources([\n              expandedId,\n              ...resourceIds,\n              ...resourcesToNotify\n            ])\n          );\n        }\n        return ((_a = response.headers) == null ? void 0 : _a.get(\"Location\")) || null;\n      }\n      throw response;\n    });\n  }\n  /**\n   * Clear cache and refetch data for a list of ids\n   * @param resourceIds -\n   * @returns - all the resource ids\n   */\n  async refreshResources(resourceIds) {\n    resourceIds = [...new Set(resourceIds.filter((id) => this.cache.has(id)))];\n    const resourceWithContexts = resourceIds.map((resourceId) => {\n      var _a;\n      return {\n        id: resourceId,\n        context: (_a = store.get(resourceId)) == null ? void 0 : _a.clientContext\n      };\n    });\n    for (const resource of resourceWithContexts) {\n      if (!this._isLocalId(resource.id)) this.clearCache(resource.id);\n    }\n    await Promise.all(\n      resourceWithContexts.map(\n        ({ id, context: context2 }) => this.getData(id, context2 || base_context)\n      )\n    );\n    return resourceIds;\n  }\n  /**\n   * Notifies all components for a list of ids\n   * @param resourceIds -\n   */\n  notifyResources(resourceIds) {\n    resourceIds = [...new Set(resourceIds)];\n    for (const id of resourceIds) PubSub.publish(id);\n  }\n  /**\n   * Return id of nested properties of a resource\n   * @param resource - object\n   * @param id - string\n   */\n  getNestedResources(resource, id) {\n    var _a;\n    const cachedResource = store.get(id);\n    if (!cachedResource || ((_a = cachedResource.isContainer) == null ? void 0 : _a.call(cachedResource))) return [];\n    const nestedProperties = [];\n    const excludeKeys = [\"@context\"];\n    for (const p of Object.keys(resource)) {\n      if (resource[p] && typeof resource[p] === \"object\" && !excludeKeys.includes(p) && resource[p][\"@id\"]) {\n        nestedProperties.push(resource[p][\"@id\"]);\n      }\n    }\n    return nestedProperties;\n  }\n  /**\n   * Returns the resource with id from the cache\n   * @param id - id of the resource to retrieve\n   *\n   * @returns Resource (Proxy) if in the cache, null otherwise\n   */\n  get(id, serverPagination, serverSearch) {\n    if (serverPagination) {\n      id = appendServerPaginationToIri(id, serverPagination);\n    }\n    if (serverSearch) {\n      id = appendServerSearchToIri(id, serverSearch);\n    }\n    return this.cache.get(id) || null;\n  }\n  /**\n   * Removes a resource from the cache\n   * @param id - id of the resource to remove from the cache\n   */\n  clearCache(id) {\n    if (this.cache.has(id)) {\n      const resource = this.cache.get(id);\n      const predicate = resource ? resource[\"listPredicate\"] : null;\n      if (predicate) {\n        for (const child of predicate) {\n          if ((child == null ? void 0 : child[\"@type\"]) && doesResourceContainList(child))\n            this.cache.delete(child[\"@id\"]);\n        }\n      }\n      this.cache.delete(id);\n    }\n  }\n  /**\n   * Send data to create a local resource in a container\n   * @param resource - resource to create\n   * @param id - uri of the container to add resource. should start with ``\n   *\n   * @returns id of the posted resource\n   */\n  setLocalData(resource, id, skipFetch = false) {\n    return this._updateResource(\"_LOCAL\", resource, id, skipFetch);\n  }\n  /**\n   * Send a POST request to create a resource in a container\n   * @param resource - resource to create\n   * @param id - uri of the container to add resource\n   *\n   * @returns id of the posted resource\n   */\n  post(resource, id, skipFetch = false) {\n    return this._updateResource(\"POST\", resource, id, skipFetch);\n  }\n  /**\n   * Send a PUT request to edit a resource\n   * @param resource - resource data to send\n   * @param id - uri of the resource to edit\n   *\n   * @returns id of the edited resource\n   */\n  put(resource, id, skipFetch = false) {\n    return this._updateResource(\"PUT\", resource, id, skipFetch);\n  }\n  /**\n   * Send a PATCH request to edit a resource\n   * @param resource - resource data to send\n   * @param id - uri of the resource to patch\n   *\n   * @returns id of the edited resource\n   */\n  patch(resource, id, skipFetch = false) {\n    return this._updateResource(\"PATCH\", resource, id, skipFetch);\n  }\n  /**\n   * Send a DELETE request to delete a resource\n   * @param id - uri of the resource to delete\n   * @param context - can be used to expand id\n   *\n   * @returns id of the deleted resource\n   */\n  async delete(id, context2 = null) {\n    const expandedId = this._getExpandedId(id, context2);\n    if (!expandedId) return null;\n    const deleted = await this.fetchAuthn(expandedId, {\n      method: \"DELETE\",\n      headers: this.headers,\n      credentials: \"include\"\n    });\n    const resourcesToNotify = this.subscriptionIndex.get(expandedId) || [];\n    const resourcesToRefresh = this.subscriptionVirtualContainersIndex.get(expandedId) || [];\n    this.refreshResources([...resourcesToNotify, ...resourcesToRefresh]).then(\n      (resourceIds) => this.notifyResources(resourceIds)\n    );\n    return deleted;\n  }\n  /**\n   * Convert headers object to Headers\n   * @param headersObject - object\n   * @returns {Headers}\n   */\n  _convertHeaders(headersObject) {\n    const headers = new Headers();\n    for (const [key, value] of Object.entries(headersObject)) {\n      headers.set(key, value);\n    }\n    return headers;\n  }\n  _getExpandedId(id, context2) {\n    if (!context2 || Object.keys(context2).length === 0) return id;\n    return normalizeContext(context2).expandTerm(id);\n  }\n  /**\n   * Returns the expanded predicate based on provided context or the base one.\n   * @param property The property to expand\n   * @param context Your current context\n   * @returns The fully expanded term\n   */\n  getExpandedPredicate(property, context2) {\n    return normalizeContext(context2, base_context).expandTerm(property, true);\n  }\n  /**\n   * Returns the compacted IRI based on provided context or the base one.\n   * @param property The property to compact\n   * @param context Your current context\n   * @returns The compacted term\n   */\n  getCompactedIri(property, context2) {\n    return normalizeContext(context2, base_context).compactIri(property, true);\n  }\n  /**\n   * Check if the id is a local id\n   * @param id - string\n   * @returns boolean\n   */\n  _isLocalId(id) {\n    return id == null ? void 0 : id.startsWith(\"store://local.\");\n  }\n  /**\n   * Make a resource listen changes of another one\n   * @param resourceId - id of the resource which needs to be updated\n   * @param nestedResourceId - id of the resource which will change\n   */\n  subscribeResourceTo(resourceId, nestedResourceId) {\n    const existingSubscriptions = this.subscriptionIndex.get(nestedResourceId) || [];\n    this.subscriptionIndex.set(nestedResourceId, [\n      .../* @__PURE__ */ new Set([...existingSubscriptions, resourceId])\n    ]);\n  }\n  /**\n   * Make a virtual container listen for changes of a resource\n   * @param virtualContainerId - id of the container which needs to be updated\n   * @param nestedResourceId - id of the resource which will change\n   */\n  subscribeVirtualContainerTo(virtualContainerId, nestedResourceId) {\n    const existingSubscriptions = this.subscriptionVirtualContainersIndex.get(nestedResourceId) || [];\n    this.subscriptionVirtualContainersIndex.set(nestedResourceId, [\n      .../* @__PURE__ */ new Set([...existingSubscriptions, virtualContainerId])\n    ]);\n  }\n  /**\n   * Return absolute IRI of the resource\n   * @param id\n   * @param context\n   * @param parentId\n   */\n  _getAbsoluteIri(id, context2, parentId) {\n    let iri = normalizeContext(context2, base_context).expandTerm(id);\n    if (!iri) return \"\";\n    if (parentId && !parentId.startsWith(\"store://local\")) {\n      const parentIri = new URL(parentId, document.location.href).href;\n      iri = new URL(iri, parentIri).href;\n    } else {\n      iri = new URL(iri, document.location.href).href;\n    }\n    return iri;\n  }\n  /**\n   * Return the user session information\n   */\n  async getSession() {\n    return await this.session;\n  }\n  /**\n   * Return language of the users\n   */\n  _getLanguage() {\n    return localStorage.getItem(\"language\") || window.navigator.language.slice(0, 2);\n  }\n  /**\n   * Save the preferred language of the user\n   * @param selectedLanguageCode\n   */\n  selectLanguage(selectedLanguageCode) {\n    localStorage.setItem(\"language\", selectedLanguageCode);\n  }\n}\nlet store;\nif (window.sibStore) {\n  store = window.sibStore;\n} else {\n  const sibAuth = document.querySelector(\"sib-auth\");\n  const storeOptions = {};\n  if (sibAuth) {\n    const sibAuthDefined = customElements.whenDefined(sibAuth.localName);\n    storeOptions.session = sibAuthDefined.then(() => sibAuth.session);\n    storeOptions.fetchMethod = sibAuthDefined.then(\n      () => sibAuth.getFetch()\n    );\n  }\n  store = new Store(storeOptions);\n  window.sibStore = store;\n}\nexport {\n  formatAttributesToServerSearchOptions as a,\n  base_context as b,\n  commonjsGlobal as c,\n  formatAttributesToServerPaginationOptions as f,\n  getDefaultExportFromCjs as g,\n  mergeServerSearchOptions as m,\n  store as s\n};\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar _a2;\nimport { g as getDefaultExportFromCjs, s as store, b as base_context, f as formatAttributesToServerPaginationOptions, m as mergeServerSearchOptions, a as formatAttributesToServerSearchOptions, c as commonjsGlobal } from \"./store-YR4Gxt5W.js\";\nimport { d as defineComponent, n as normalizeContext, u as uniqID, e as evalTemplateString, a as doesResourceContainList, c as compare, p as parseFieldsString, f as findClosingBracketMatchIndex, g as generalComparator, b as fuzzyCompare, h as asyncQuerySelector, i as importInlineCSS, j as importCSS, t as transformArrayToContainer, s as setDeepProperty } from \"./helpers-4GFJ8HI8.js\";\nimport { k } from \"./helpers-4GFJ8HI8.js\";\nif (!(\"flat\" in Array.prototype)) {\n  Object.defineProperty(Array.prototype, \"flat\", {\n    configurable: true,\n    value: function flat(depth = 1) {\n      depth = Number.isNaN(depth) ? 1 : Number(depth);\n      if (depth === 0) return Array.prototype.slice.call(this);\n      return Array.prototype.reduce.call(\n        this,\n        (acc, cur) => {\n          if (Array.isArray(cur)) {\n            acc.push.apply(acc, flat.call(cur, depth - 1));\n          } else {\n            acc.push(cur);\n          }\n          return acc;\n        },\n        []\n      );\n    },\n    writable: true\n  });\n}\nif (!Element.prototype.toggleAttribute) {\n  Element.prototype.toggleAttribute = function(name, force = void 0) {\n    if (force !== void 0) force = !!force;\n    if (this.hasAttribute(name)) {\n      if (force) return true;\n      this.removeAttribute(name);\n      return false;\n    }\n    if (force === false) return false;\n    this.setAttribute(name, \"\");\n    return true;\n  };\n}\nvar loglevel$1 = { exports: {} };\nvar loglevel = loglevel$1.exports;\nvar hasRequiredLoglevel;\nfunction requireLoglevel() {\n  if (hasRequiredLoglevel) return loglevel$1.exports;\n  hasRequiredLoglevel = 1;\n  (function(module2) {\n    (function(root2, definition) {\n      if (module2.exports) {\n        module2.exports = definition();\n      } else {\n        root2.log = definition();\n      }\n    })(loglevel, function() {\n      var noop = function() {\n      };\n      var undefinedType = \"undefined\";\n      var isIE = typeof window !== undefinedType && typeof window.navigator !== undefinedType && /Trident\\/|MSIE /.test(window.navigator.userAgent);\n      var logMethods = [\n        \"trace\",\n        \"debug\",\n        \"info\",\n        \"warn\",\n        \"error\"\n      ];\n      var _loggersByName = {};\n      var defaultLogger = null;\n      function bindMethod(obj, methodName) {\n        var method = obj[methodName];\n        if (typeof method.bind === \"function\") {\n          return method.bind(obj);\n        } else {\n          try {\n            return Function.prototype.bind.call(method, obj);\n          } catch (e2) {\n            return function() {\n              return Function.prototype.apply.apply(method, [obj, arguments]);\n            };\n          }\n        }\n      }\n      function traceForIE() {\n        if (console.log) {\n          if (console.log.apply) {\n            console.log.apply(console, arguments);\n          } else {\n            Function.prototype.apply.apply(console.log, [console, arguments]);\n          }\n        }\n        if (console.trace) console.trace();\n      }\n      function realMethod(methodName) {\n        if (methodName === \"debug\") {\n          methodName = \"log\";\n        }\n        if (typeof console === undefinedType) {\n          return false;\n        } else if (methodName === \"trace\" && isIE) {\n          return traceForIE;\n        } else if (console[methodName] !== void 0) {\n          return bindMethod(console, methodName);\n        } else if (console.log !== void 0) {\n          return bindMethod(console, \"log\");\n        } else {\n          return noop;\n        }\n      }\n      function replaceLoggingMethods() {\n        var level2 = this.getLevel();\n        for (var i3 = 0; i3 < logMethods.length; i3++) {\n          var methodName = logMethods[i3];\n          this[methodName] = i3 < level2 ? noop : this.methodFactory(methodName, level2, this.name);\n        }\n        this.log = this.debug;\n        if (typeof console === undefinedType && level2 < this.levels.SILENT) {\n          return \"No console available for logging\";\n        }\n      }\n      function enableLoggingWhenConsoleArrives(methodName) {\n        return function() {\n          if (typeof console !== undefinedType) {\n            replaceLoggingMethods.call(this);\n            this[methodName].apply(this, arguments);\n          }\n        };\n      }\n      function defaultMethodFactory(methodName, _level, _loggerName) {\n        return realMethod(methodName) || enableLoggingWhenConsoleArrives.apply(this, arguments);\n      }\n      function Logger(name, factory) {\n        var self2 = this;\n        var inheritedLevel;\n        var defaultLevel;\n        var userLevel;\n        var storageKey = \"loglevel\";\n        if (typeof name === \"string\") {\n          storageKey += \":\" + name;\n        } else if (typeof name === \"symbol\") {\n          storageKey = void 0;\n        }\n        function persistLevelIfPossible(levelNum) {\n          var levelName = (logMethods[levelNum] || \"silent\").toUpperCase();\n          if (typeof window === undefinedType || !storageKey) return;\n          try {\n            window.localStorage[storageKey] = levelName;\n            return;\n          } catch (ignore) {\n          }\n          try {\n            window.document.cookie = encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n          } catch (ignore) {\n          }\n        }\n        function getPersistedLevel() {\n          var storedLevel;\n          if (typeof window === undefinedType || !storageKey) return;\n          try {\n            storedLevel = window.localStorage[storageKey];\n          } catch (ignore) {\n          }\n          if (typeof storedLevel === undefinedType) {\n            try {\n              var cookie = window.document.cookie;\n              var cookieName = encodeURIComponent(storageKey);\n              var location2 = cookie.indexOf(cookieName + \"=\");\n              if (location2 !== -1) {\n                storedLevel = /^([^;]+)/.exec(\n                  cookie.slice(location2 + cookieName.length + 1)\n                )[1];\n              }\n            } catch (ignore) {\n            }\n          }\n          if (self2.levels[storedLevel] === void 0) {\n            storedLevel = void 0;\n          }\n          return storedLevel;\n        }\n        function clearPersistedLevel() {\n          if (typeof window === undefinedType || !storageKey) return;\n          try {\n            window.localStorage.removeItem(storageKey);\n          } catch (ignore) {\n          }\n          try {\n            window.document.cookie = encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n          } catch (ignore) {\n          }\n        }\n        function normalizeLevel(input) {\n          var level2 = input;\n          if (typeof level2 === \"string\" && self2.levels[level2.toUpperCase()] !== void 0) {\n            level2 = self2.levels[level2.toUpperCase()];\n          }\n          if (typeof level2 === \"number\" && level2 >= 0 && level2 <= self2.levels.SILENT) {\n            return level2;\n          } else {\n            throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n          }\n        }\n        self2.name = name;\n        self2.levels = {\n          \"TRACE\": 0,\n          \"DEBUG\": 1,\n          \"INFO\": 2,\n          \"WARN\": 3,\n          \"ERROR\": 4,\n          \"SILENT\": 5\n        };\n        self2.methodFactory = factory || defaultMethodFactory;\n        self2.getLevel = function() {\n          if (userLevel != null) {\n            return userLevel;\n          } else if (defaultLevel != null) {\n            return defaultLevel;\n          } else {\n            return inheritedLevel;\n          }\n        };\n        self2.setLevel = function(level2, persist) {\n          userLevel = normalizeLevel(level2);\n          if (persist !== false) {\n            persistLevelIfPossible(userLevel);\n          }\n          return replaceLoggingMethods.call(self2);\n        };\n        self2.setDefaultLevel = function(level2) {\n          defaultLevel = normalizeLevel(level2);\n          if (!getPersistedLevel()) {\n            self2.setLevel(level2, false);\n          }\n        };\n        self2.resetLevel = function() {\n          userLevel = null;\n          clearPersistedLevel();\n          replaceLoggingMethods.call(self2);\n        };\n        self2.enableAll = function(persist) {\n          self2.setLevel(self2.levels.TRACE, persist);\n        };\n        self2.disableAll = function(persist) {\n          self2.setLevel(self2.levels.SILENT, persist);\n        };\n        self2.rebuild = function() {\n          if (defaultLogger !== self2) {\n            inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n          }\n          replaceLoggingMethods.call(self2);\n          if (defaultLogger === self2) {\n            for (var childName in _loggersByName) {\n              _loggersByName[childName].rebuild();\n            }\n          }\n        };\n        inheritedLevel = normalizeLevel(\n          defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n        );\n        var initialLevel = getPersistedLevel();\n        if (initialLevel != null) {\n          userLevel = normalizeLevel(initialLevel);\n        }\n        replaceLoggingMethods.call(self2);\n      }\n      defaultLogger = new Logger();\n      defaultLogger.getLogger = function getLogger(name) {\n        if (typeof name !== \"symbol\" && typeof name !== \"string\" || name === \"\") {\n          throw new TypeError(\"You must supply a name when creating a logger.\");\n        }\n        var logger = _loggersByName[name];\n        if (!logger) {\n          logger = _loggersByName[name] = new Logger(\n            name,\n            defaultLogger.methodFactory\n          );\n        }\n        return logger;\n      };\n      var _log = typeof window !== undefinedType ? window.log : void 0;\n      defaultLogger.noConflict = function() {\n        if (typeof window !== undefinedType && window.log === defaultLogger) {\n          window.log = _log;\n        }\n        return defaultLogger;\n      };\n      defaultLogger.getLoggers = function getLoggers() {\n        return _loggersByName;\n      };\n      defaultLogger[\"default\"] = defaultLogger;\n      return defaultLogger;\n    });\n  })(loglevel$1);\n  return loglevel$1.exports;\n}\nvar loglevelExports = requireLoglevel();\nconst log = /* @__PURE__ */ getDefaultExportFromCjs(loglevelExports);\nconst __vite_import_meta_env__ = {};\nconst colors = {\n  reset: \"\\x1B[0m\",\n  trace: \"\\x1B[38;2;169;169;169m\",\n  // Gray\n  debug: \"\\x1B[38;2;0;0;255m\",\n  // Blue\n  info: \"\\x1B[38;2;0;128;0m\",\n  // Green\n  warn: \"\\x1B[38;2;218;165;32m\",\n  // Yellow\n  error: \"\\x1B[38;2;255;0;0m\"\n  // Red\n};\nfunction formatMessage(level2, messages) {\n  const timestamp = (/* @__PURE__ */ new Date()).toISOString();\n  const color = colors[level2] || colors.reset;\n  const formattedMessages = messages.map((msg) => {\n    if (typeof msg === \"object\") {\n      try {\n        return JSON.stringify(msg, null, 2);\n      } catch {\n        return String(msg);\n      }\n    }\n    return String(msg);\n  }).join(\" \");\n  return `${color}[${timestamp}] ${formattedMessages}${colors.reset}`;\n}\nconst originalFactory = log.methodFactory;\nlog.methodFactory = (methodName, logLevel, loggerName) => {\n  const rawMethod = originalFactory(methodName, logLevel, loggerName);\n  return (...messages) => {\n    rawMethod(formatMessage(methodName, messages));\n  };\n};\nif ((__vite_import_meta_env__ == null ? void 0 : __vite_import_meta_env__.VITE_DEBUG) === \"True\") {\n  log.setLevel(\"debug\");\n} else {\n  log.setLevel(\"warn\");\n}\nfunction trackRenderAsync(fn, context) {\n  return async function(...args) {\n    let componentName = context ? context : this.name ? this.name : this.constructor.name;\n    if (this.element.id) {\n      componentName += ` (id: ${this.element.id})`;\n    } else if (this.dataSrc) {\n      componentName += ` (data-src: ${this.dataSrc})`;\n    } else if (this.resourceId) {\n      componentName += ` (resourceId: ${this.resourceId})`;\n    }\n    const startTime = performance.now();\n    const result = await fn.apply(this, args);\n    const endTime = performance.now();\n    const renderTime = endTime - startTime;\n    if (this.profiler) {\n      this.profiler.updateStats(componentName, renderTime);\n      this.profiler.printStats();\n    } else {\n      log.debug(\n        `Component ${componentName} rendered in ${renderTime.toFixed(2)} ms`\n      );\n    }\n    return result;\n  };\n}\nclass Profiler {\n  constructor() {\n    __publicField(this, \"stats\", {});\n    this.stats = {};\n  }\n  getOrCreateStats(componentName) {\n    if (!this.stats[componentName]) {\n      this.stats[componentName] = {\n        renderCount: 0,\n        totalExecutionTime: 0,\n        lastExecutionTime: 0,\n        averageExecutionTime: 0,\n        minExecutionTime: Number.POSITIVE_INFINITY,\n        maxExecutionTime: 0\n      };\n    }\n    return this.stats[componentName];\n  }\n  getStats(componentName) {\n    return this.stats[componentName];\n  }\n  updateStats(componentName, renderTime) {\n    const stats = this.getOrCreateStats(componentName);\n    stats.renderCount++;\n    stats.lastExecutionTime = renderTime;\n    stats.totalExecutionTime += renderTime;\n    stats.averageExecutionTime = stats.totalExecutionTime / stats.renderCount;\n    stats.minExecutionTime = Math.min(stats.minExecutionTime, renderTime);\n    stats.maxExecutionTime = Math.max(stats.maxExecutionTime, renderTime);\n  }\n  formatTime(time) {\n    if (time >= 1e3) {\n      return `${(time / 1e3).toFixed(2)} seconds`;\n    }\n    return `${time.toFixed(2)} ms`;\n  }\n  formatComponentStats(componentName, stats) {\n    return `\nComponent: ${componentName}\n  Render Count: ${stats.renderCount}\n  Total Execution Time: ${this.formatTime(stats.totalExecutionTime)}\n  Last Execution Time: ${this.formatTime(stats.lastExecutionTime)}\n  Average Execution Time: ${this.formatTime(stats.averageExecutionTime)}\n  Min Execution Time: ${this.formatTime(stats.minExecutionTime)}\n  Max Execution Time: ${this.formatTime(stats.maxExecutionTime)}\n`;\n  }\n  printStats(componentName) {\n    let output = \"Component Performance Stats:\\n\";\n    if (componentName) {\n      const stats = this.stats[componentName];\n      if (!stats) {\n        output += `Component ${componentName} not found.\n`;\n      } else {\n        output += this.formatComponentStats(componentName, stats);\n      }\n    } else {\n      for (const [name, stats] of Object.entries(this.stats)) {\n        output += this.formatComponentStats(name, stats);\n      }\n    }\n    log.debug(output);\n  }\n}\nclass Component {\n  constructor(element) {\n    __publicField(this, \"element\");\n    __publicField(this, \"profiler\");\n    this.element = element;\n    this.profiler = new Profiler();\n  }\n  created() {\n  }\n  attached() {\n  }\n  detached() {\n  }\n  attributesCallback(_key, _value, _oldValue) {\n  }\n}\nconst HOOKS = [\"created\", \"attached\", \"detached\"];\nconst API = [\"name\", \"use\", \"attributes\", \"initialState\", ...HOOKS];\nconst Compositor = {\n  merge(component, mixins) {\n    return {\n      name: component.name,\n      attributes: Compositor.mergeAttributes([component, ...mixins]),\n      initialState: Compositor.mergeInitialState([component, ...mixins]),\n      methods: Compositor.mergeMethods([component, ...mixins]),\n      accessors: Compositor.mergeAccessors([component, ...mixins]),\n      hooks: Compositor.mergeHooks([component, ...mixins])\n    };\n  },\n  mergeMixin(component) {\n    function deepMergeMixin(mixinAccumulator, currentMixin) {\n      const { use: currentMixins } = currentMixin;\n      if (currentMixins) {\n        for (const mix of currentMixins) {\n          if (!mixinAccumulator.has(mix)) {\n            mixinAccumulator.set(mix, mix);\n            deepMergeMixin(mixinAccumulator, mix);\n          } else {\n            console.warn(`Duplicate mixin import (${mix.name})`);\n          }\n        }\n      }\n    }\n    const mixins = /* @__PURE__ */ new Map();\n    deepMergeMixin(mixins, component);\n    return Array.from(mixins.values());\n  },\n  mergeAttributes(mixins) {\n    let attributes = {};\n    for (const mixin of mixins) {\n      if (mixin.attributes) {\n        attributes = { ...mixin.attributes, ...attributes };\n      }\n    }\n    return attributes;\n  },\n  mergeInitialState(mixins) {\n    let initialState = {};\n    for (const mixin of mixins) {\n      if (!mixin.initialState) continue;\n      initialState = { ...mixin.initialState, ...initialState };\n    }\n    return initialState;\n  },\n  mergeHooks(mixins) {\n    const hooks = {\n      created: [],\n      attached: [],\n      detached: []\n    };\n    for (const mixin of mixins.reverse()) {\n      for (const hookName of HOOKS) {\n        if (!!mixin[hookName] && typeof mixin[hookName] === \"function\") {\n          hooks[hookName].push(mixin[hookName]);\n        }\n      }\n    }\n    return hooks;\n  },\n  mergeMethods(mixins) {\n    const methods = /* @__PURE__ */ new Map();\n    for (const mixin of mixins.reverse()) {\n      for (const key of Reflect.ownKeys(mixin)) {\n        if (typeof key !== \"string\") continue;\n        if (API.includes(key)) continue;\n        const descriptor = Object.getOwnPropertyDescriptor(mixin, key);\n        if ((descriptor == null ? void 0 : descriptor.get) || (descriptor == null ? void 0 : descriptor.set)) continue;\n        if (typeof mixin[key] !== \"function\") continue;\n        methods.set(key, mixin[key]);\n      }\n    }\n    return methods;\n  },\n  mergeAccessors(mixins) {\n    const accessors = {};\n    for (const mixin of mixins.reverse()) {\n      for (const prop of Reflect.ownKeys(mixin)) {\n        if (typeof prop !== \"string\") continue;\n        if (API.includes(prop)) continue;\n        const descriptor = Object.getOwnPropertyDescriptor(mixin, prop);\n        if (!descriptor) continue;\n        if (!descriptor.get && !descriptor.set) continue;\n        accessors[prop] = { ...accessors[prop] };\n        if (descriptor.get) accessors[prop].get = descriptor.get;\n        if (descriptor.set) accessors[prop].set = descriptor.set;\n      }\n    }\n    return accessors;\n  }\n};\nconst ComponentFactory = {\n  build(component) {\n    const { initialState, attributes, methods, hooks, accessors, name } = Compositor.merge(component, Compositor.mergeMixin(component));\n    let componentConstructor = class extends Component {\n    };\n    componentConstructor = ComponentFactory.bindInitialState(\n      componentConstructor,\n      initialState\n    );\n    componentConstructor = ComponentFactory.bindAttributes(\n      componentConstructor,\n      attributes\n    );\n    componentConstructor = ComponentFactory.bindMethods(\n      componentConstructor,\n      methods\n    );\n    componentConstructor = ComponentFactory.bindAccessors(\n      componentConstructor,\n      accessors\n    );\n    componentConstructor = ComponentFactory.bindHooks(\n      componentConstructor,\n      hooks\n    );\n    Reflect.defineProperty(componentConstructor, \"name\", {\n      value: name\n    });\n    return componentConstructor;\n  },\n  bindInitialState(componentConstructor, initialState) {\n    if (initialState) {\n      for (const key of Reflect.ownKeys(initialState)) {\n        Reflect.defineProperty(componentConstructor.prototype, key, {\n          enumerable: true,\n          writable: true,\n          value: initialState[key]\n        });\n      }\n    }\n    return componentConstructor;\n  },\n  bindAttributes(componentConstructor, attributes) {\n    if (attributes) {\n      const attributesList = Reflect.ownKeys(attributes).map(\n        (key) => String(key)\n      );\n      const attributesCallback = {};\n      for (const key of attributesList) {\n        const { default: def, type, required, callback } = attributes[key];\n        let fromType;\n        let toType;\n        switch (type) {\n          case String:\n            fromType = (value) => String(value);\n            toType = (value) => value;\n            break;\n          case Object:\n            fromType = (value) => JSON.parse(value);\n            toType = (value) => JSON.stringify(value);\n            break;\n          case Number:\n            fromType = (value) => Number(value);\n            toType = (value) => Number(value).toString();\n            break;\n          case Boolean:\n            fromType = (value) => Boolean(value);\n            toType = (value) => value;\n            break;\n          default:\n            fromType = (value) => value;\n            toType = (value) => value;\n            break;\n        }\n        const attribute2 = key.replace(/([a-z0-9])([A-Z0-9])/g, \"$1-$2\").toLowerCase();\n        Reflect.defineProperty(componentConstructor.prototype, key, {\n          enumerable: true,\n          configurable: false,\n          get: function() {\n            const element = this.element;\n            if (!element.hasAttribute(attribute2)) {\n              if (required && type !== Boolean) {\n                throw new Error(`Attribute ${key} is required`);\n              }\n              return def;\n            }\n            return fromType(element.getAttribute(attribute2));\n          },\n          set: function(value) {\n            const element = this.element;\n            if (type === Boolean) {\n              if (!value) {\n                element.removeAttribute(attribute2);\n              } else {\n                element.setAttribute(attribute2, \"\");\n              }\n            } else {\n              element.setAttribute(attribute2, toType(value));\n            }\n          }\n        });\n        if (callback && typeof callback === \"function\") {\n          attributesCallback[key] = callback;\n        }\n      }\n      Reflect.defineProperty(componentConstructor, \"observedAttributes\", {\n        get: () => attributesList.map(\n          (attr) => attr.replace(/([a-z0-9])([A-Z0-9])/g, \"$1-$2\").toLowerCase()\n        )\n      });\n      Reflect.defineProperty(\n        componentConstructor.prototype,\n        \"attributesCallback\",\n        {\n          value: function(key, newValue, oldValue) {\n            if (key in attributesCallback) {\n              Reflect.apply(attributesCallback[key], this, [\n                newValue,\n                oldValue\n              ]);\n            }\n          }\n        }\n      );\n      Reflect.defineProperty(\n        componentConstructor.prototype,\n        \"attributesCallback\",\n        attributesCallback\n      );\n    }\n    return componentConstructor;\n  },\n  bindAccessors(componentConstructor, accessors) {\n    if (accessors) {\n      for (const property of Object.keys(accessors)) {\n        Reflect.defineProperty(componentConstructor.prototype, property, {\n          get: function() {\n            return Reflect.apply(accessors[property].get, this, []);\n          },\n          set: function(value) {\n            return Reflect.apply(accessors[property].set, this, [value]);\n          }\n        });\n      }\n    }\n    return componentConstructor;\n  },\n  bindMethods(componentConstructor, methods) {\n    methods.forEach((method, methodName) => {\n      Reflect.defineProperty(componentConstructor.prototype, methodName, {\n        value: function(...args) {\n          return Reflect.apply(method, this, args);\n        }\n      });\n    });\n    return componentConstructor;\n  },\n  bindHooks(componentConstructor, hooks) {\n    Reflect.defineProperty(componentConstructor.prototype, \"created\", {\n      value: function() {\n        for (const hook of hooks.created) {\n          Reflect.apply(hook, this, []);\n        }\n      }\n    });\n    Reflect.defineProperty(componentConstructor.prototype, \"attached\", {\n      value: function() {\n        for (const hook of hooks.attached) {\n          Reflect.apply(hook, this, []);\n        }\n      }\n    });\n    Reflect.defineProperty(componentConstructor.prototype, \"detached\", {\n      value: function() {\n        for (const hook of hooks.detached) {\n          Reflect.apply(hook, this, []);\n        }\n      }\n    });\n    return componentConstructor;\n  }\n};\nconst Sib = {\n  register(componentDefinition) {\n    const component = ComponentFactory.build(componentDefinition);\n    const cls = Sib.toElement(component);\n    defineComponent(component.name, cls);\n  },\n  toElement(component) {\n    return class extends HTMLElement {\n      constructor() {\n        super();\n        __publicField(this, \"component\");\n        this.component = new component(this);\n        this.component.created();\n      }\n      /** @deprecated use `component` instead */\n      get _component() {\n        return this.component;\n      }\n      set _component(_component) {\n        this.component = _component;\n      }\n      static get observedAttributes() {\n        return component.observedAttributes;\n      }\n      attributeChangedCallback(name, oldValue, newValue) {\n        const attr = name.replace(\n          /([a-z0-9])-([a-z0-9])/g,\n          (_c, p1, p2) => `${p1}${p2.toUpperCase()}`\n        );\n        this.component.attributesCallback(attr, newValue, oldValue);\n      }\n      connectedCallback() {\n        this.component.attached();\n      }\n      disconnectedCallback() {\n        this.component.detached();\n      }\n    };\n  }\n};\nconst AttributeBinderMixin = {\n  name: \"attribute-binder-mixin\",\n  use: [],\n  initialState: {\n    bindedAttributes: null\n  },\n  created() {\n    this.bindedAttributes = {};\n  },\n  /**\n   * Reset attributes values\n   */\n  resetAttributesData() {\n    for (const attr of Object.keys(this.bindedAttributes)) {\n      this.element.setAttribute(attr, this.bindedAttributes[attr]);\n    }\n  },\n  /**\n   * Replace store://XXX attributes by corresponding data\n   * @param reset - set to false if no need to reset data\n   */\n  async replaceAttributesData(reset = true) {\n    if (reset) this.resetAttributesData();\n    const oldAttributes = {};\n    for (const attr of this.element.attributes) {\n      if (!attr.value.match(/^store:\\/\\/(resource|container|user)/)) continue;\n      if (!this.bindedAttributes[attr.name])\n        this.bindedAttributes[attr.name] = attr.value;\n      oldAttributes[attr.name] = attr.value;\n    }\n    const newAttributes = await this.transformAttributes(\n      { ...oldAttributes },\n      this.resource\n    );\n    for (const attr of Object.keys(newAttributes)) {\n      if (oldAttributes[attr] === newAttributes[attr]) continue;\n      this.element.setAttribute(attr, newAttributes[attr]);\n    }\n  },\n  /**\n   * Transform attributes from `store://...` to their actual value\n   * @param attributes - object representing attributes of an element\n   * @param resource - resource to use to resolve attributes\n   * @returns - object representing attributes of an element with resolved values\n   */\n  async transformAttributes(attributes, resource) {\n    var _a3;\n    const isContainer = (_a3 = resource == null ? void 0 : resource.isContainer) == null ? void 0 : _a3.call(resource);\n    for (const attr of Object.keys(attributes)) {\n      const value = attributes[attr];\n      if (typeof value === \"string\") {\n        if (!isContainer && resource && value.startsWith(\"store://resource\")) {\n          const path = value.replace(\"store://resource.\", \"\");\n          attributes[attr] = resource ? await resource[path] : \"\";\n        } else if (isContainer && resource && value.startsWith(\"store://container\")) {\n          const path = value.replace(\"store://container.\", \"\");\n          attributes[attr] = resource ? await resource[path] : \"\";\n        } else if (value.startsWith(\"store://user\")) {\n          const userId = await this.retry(this.getUser.bind(this));\n          const user = (userId == null ? void 0 : userId[\"@id\"]) ? await store.getData(userId[\"@id\"], this.context || base_context) : null;\n          if (!user) {\n            attributes[attr] = \"\";\n            continue;\n          }\n          const path = value.replace(\"store://user.\", \"\");\n          attributes[attr] = user ? await user[path] : \"\";\n        }\n      }\n    }\n    return attributes;\n  },\n  /**\n   * Returns logged in user from sib-auth\n   * @returns userId\n   */\n  async getUser() {\n    const sibAuth = document.querySelector(\"sib-auth\");\n    return await sibAuth.getUser();\n  },\n  /**\n   * Retry [fn] for [maxRetries] times every [ms]\n   * @param fn\n   * @param ms\n   * @param maxRetries\n   * @returns\n   */\n  async retry(fn, ms = 200, maxRetries = 5) {\n    return new Promise((resolve, reject) => {\n      let retries = 0;\n      fn().then(resolve).catch(() => {\n        setTimeout(() => {\n          ++retries;\n          if (retries >= maxRetries) return reject();\n          this.retry(fn, ms).then(resolve);\n        }, ms);\n      });\n    });\n  }\n};\nconst ContextMixin = {\n  name: \"store-mixin\",\n  use: [],\n  attributes: {\n    extraContext: {\n      type: String,\n      default: null\n    }\n  },\n  get context() {\n    return { ...base_context, ...this.extra_context };\n  },\n  get extra_context() {\n    const extraContextElement = this.extraContext ? document.getElementById(this.extraContext) : (\n      // take element extra context first\n      document.querySelector(\"[data-default-context]\")\n    );\n    if (extraContextElement)\n      return JSON.parse(extraContextElement.textContent || \"{}\");\n    return {};\n  }\n};\n/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t$2 = globalThis, e$4 = t$2.ShadowRoot && (void 0 === t$2.ShadyCSS || t$2.ShadyCSS.nativeShadow) && \"adoptedStyleSheets\" in Document.prototype && \"replace\" in CSSStyleSheet.prototype, s$3 = Symbol(), o$5 = /* @__PURE__ */ new WeakMap();\nlet n$4 = class n {\n  constructor(t2, e2, o2) {\n    if (this._$cssResult$ = true, o2 !== s$3) throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");\n    this.cssText = t2, this.t = e2;\n  }\n  get styleSheet() {\n    let t2 = this.o;\n    const s2 = this.t;\n    if (e$4 && void 0 === t2) {\n      const e2 = void 0 !== s2 && 1 === s2.length;\n      e2 && (t2 = o$5.get(s2)), void 0 === t2 && ((this.o = t2 = new CSSStyleSheet()).replaceSync(this.cssText), e2 && o$5.set(s2, t2));\n    }\n    return t2;\n  }\n  toString() {\n    return this.cssText;\n  }\n};\nconst r$4 = (t2) => new n$4(\"string\" == typeof t2 ? t2 : t2 + \"\", void 0, s$3), S$1 = (s2, o2) => {\n  if (e$4) s2.adoptedStyleSheets = o2.map((t2) => t2 instanceof CSSStyleSheet ? t2 : t2.styleSheet);\n  else for (const e2 of o2) {\n    const o3 = document.createElement(\"style\"), n3 = t$2.litNonce;\n    void 0 !== n3 && o3.setAttribute(\"nonce\", n3), o3.textContent = e2.cssText, s2.appendChild(o3);\n  }\n}, c$4 = e$4 ? (t2) => t2 : (t2) => t2 instanceof CSSStyleSheet ? ((t3) => {\n  let e2 = \"\";\n  for (const s2 of t3.cssRules) e2 += s2.cssText;\n  return r$4(e2);\n})(t2) : t2;\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst { is: i$5, defineProperty: e$3, getOwnPropertyDescriptor: r$3, getOwnPropertyNames: h$3, getOwnPropertySymbols: o$4, getPrototypeOf: n$3 } = Object, a$1 = globalThis, c$3 = a$1.trustedTypes, l$1 = c$3 ? c$3.emptyScript : \"\", p$1 = a$1.reactiveElementPolyfillSupport, d$1 = (t2, s2) => t2, u$1 = { toAttribute(t2, s2) {\n  switch (s2) {\n    case Boolean:\n      t2 = t2 ? l$1 : null;\n      break;\n    case Object:\n    case Array:\n      t2 = null == t2 ? t2 : JSON.stringify(t2);\n  }\n  return t2;\n}, fromAttribute(t2, s2) {\n  let i3 = t2;\n  switch (s2) {\n    case Boolean:\n      i3 = null !== t2;\n      break;\n    case Number:\n      i3 = null === t2 ? null : Number(t2);\n      break;\n    case Object:\n    case Array:\n      try {\n        i3 = JSON.parse(t2);\n      } catch (t3) {\n        i3 = null;\n      }\n  }\n  return i3;\n} }, f$3 = (t2, s2) => !i$5(t2, s2), y$1 = { attribute: true, type: String, converter: u$1, reflect: false, hasChanged: f$3 };\nSymbol.metadata ?? (Symbol.metadata = Symbol(\"metadata\")), a$1.litPropertyMetadata ?? (a$1.litPropertyMetadata = /* @__PURE__ */ new WeakMap());\nclass b extends HTMLElement {\n  static addInitializer(t2) {\n    this._$Ei(), (this.l ?? (this.l = [])).push(t2);\n  }\n  static get observedAttributes() {\n    return this.finalize(), this._$Eh && [...this._$Eh.keys()];\n  }\n  static createProperty(t2, s2 = y$1) {\n    if (s2.state && (s2.attribute = false), this._$Ei(), this.elementProperties.set(t2, s2), !s2.noAccessor) {\n      const i3 = Symbol(), r3 = this.getPropertyDescriptor(t2, i3, s2);\n      void 0 !== r3 && e$3(this.prototype, t2, r3);\n    }\n  }\n  static getPropertyDescriptor(t2, s2, i3) {\n    const { get: e2, set: h2 } = r$3(this.prototype, t2) ?? { get() {\n      return this[s2];\n    }, set(t3) {\n      this[s2] = t3;\n    } };\n    return { get() {\n      return e2 == null ? void 0 : e2.call(this);\n    }, set(s3) {\n      const r3 = e2 == null ? void 0 : e2.call(this);\n      h2.call(this, s3), this.requestUpdate(t2, r3, i3);\n    }, configurable: true, enumerable: true };\n  }\n  static getPropertyOptions(t2) {\n    return this.elementProperties.get(t2) ?? y$1;\n  }\n  static _$Ei() {\n    if (this.hasOwnProperty(d$1(\"elementProperties\"))) return;\n    const t2 = n$3(this);\n    t2.finalize(), void 0 !== t2.l && (this.l = [...t2.l]), this.elementProperties = new Map(t2.elementProperties);\n  }\n  static finalize() {\n    if (this.hasOwnProperty(d$1(\"finalized\"))) return;\n    if (this.finalized = true, this._$Ei(), this.hasOwnProperty(d$1(\"properties\"))) {\n      const t3 = this.properties, s2 = [...h$3(t3), ...o$4(t3)];\n      for (const i3 of s2) this.createProperty(i3, t3[i3]);\n    }\n    const t2 = this[Symbol.metadata];\n    if (null !== t2) {\n      const s2 = litPropertyMetadata.get(t2);\n      if (void 0 !== s2) for (const [t3, i3] of s2) this.elementProperties.set(t3, i3);\n    }\n    this._$Eh = /* @__PURE__ */ new Map();\n    for (const [t3, s2] of this.elementProperties) {\n      const i3 = this._$Eu(t3, s2);\n      void 0 !== i3 && this._$Eh.set(i3, t3);\n    }\n    this.elementStyles = this.finalizeStyles(this.styles);\n  }\n  static finalizeStyles(s2) {\n    const i3 = [];\n    if (Array.isArray(s2)) {\n      const e2 = new Set(s2.flat(1 / 0).reverse());\n      for (const s3 of e2) i3.unshift(c$4(s3));\n    } else void 0 !== s2 && i3.push(c$4(s2));\n    return i3;\n  }\n  static _$Eu(t2, s2) {\n    const i3 = s2.attribute;\n    return false === i3 ? void 0 : \"string\" == typeof i3 ? i3 : \"string\" == typeof t2 ? t2.toLowerCase() : void 0;\n  }\n  constructor() {\n    super(), this._$Ep = void 0, this.isUpdatePending = false, this.hasUpdated = false, this._$Em = null, this._$Ev();\n  }\n  _$Ev() {\n    var _a3;\n    this._$ES = new Promise((t2) => this.enableUpdating = t2), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), (_a3 = this.constructor.l) == null ? void 0 : _a3.forEach((t2) => t2(this));\n  }\n  addController(t2) {\n    var _a3;\n    (this._$EO ?? (this._$EO = /* @__PURE__ */ new Set())).add(t2), void 0 !== this.renderRoot && this.isConnected && ((_a3 = t2.hostConnected) == null ? void 0 : _a3.call(t2));\n  }\n  removeController(t2) {\n    var _a3;\n    (_a3 = this._$EO) == null ? void 0 : _a3.delete(t2);\n  }\n  _$E_() {\n    const t2 = /* @__PURE__ */ new Map(), s2 = this.constructor.elementProperties;\n    for (const i3 of s2.keys()) this.hasOwnProperty(i3) && (t2.set(i3, this[i3]), delete this[i3]);\n    t2.size > 0 && (this._$Ep = t2);\n  }\n  createRenderRoot() {\n    const t2 = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);\n    return S$1(t2, this.constructor.elementStyles), t2;\n  }\n  connectedCallback() {\n    var _a3;\n    this.renderRoot ?? (this.renderRoot = this.createRenderRoot()), this.enableUpdating(true), (_a3 = this._$EO) == null ? void 0 : _a3.forEach((t2) => {\n      var _a4;\n      return (_a4 = t2.hostConnected) == null ? void 0 : _a4.call(t2);\n    });\n  }\n  enableUpdating(t2) {\n  }\n  disconnectedCallback() {\n    var _a3;\n    (_a3 = this._$EO) == null ? void 0 : _a3.forEach((t2) => {\n      var _a4;\n      return (_a4 = t2.hostDisconnected) == null ? void 0 : _a4.call(t2);\n    });\n  }\n  attributeChangedCallback(t2, s2, i3) {\n    this._$AK(t2, i3);\n  }\n  _$EC(t2, s2) {\n    var _a3;\n    const i3 = this.constructor.elementProperties.get(t2), e2 = this.constructor._$Eu(t2, i3);\n    if (void 0 !== e2 && true === i3.reflect) {\n      const r3 = (void 0 !== ((_a3 = i3.converter) == null ? void 0 : _a3.toAttribute) ? i3.converter : u$1).toAttribute(s2, i3.type);\n      this._$Em = t2, null == r3 ? this.removeAttribute(e2) : this.setAttribute(e2, r3), this._$Em = null;\n    }\n  }\n  _$AK(t2, s2) {\n    var _a3;\n    const i3 = this.constructor, e2 = i3._$Eh.get(t2);\n    if (void 0 !== e2 && this._$Em !== e2) {\n      const t3 = i3.getPropertyOptions(e2), r3 = \"function\" == typeof t3.converter ? { fromAttribute: t3.converter } : void 0 !== ((_a3 = t3.converter) == null ? void 0 : _a3.fromAttribute) ? t3.converter : u$1;\n      this._$Em = e2, this[e2] = r3.fromAttribute(s2, t3.type), this._$Em = null;\n    }\n  }\n  requestUpdate(t2, s2, i3) {\n    if (void 0 !== t2) {\n      if (i3 ?? (i3 = this.constructor.getPropertyOptions(t2)), !(i3.hasChanged ?? f$3)(this[t2], s2)) return;\n      this.P(t2, s2, i3);\n    }\n    false === this.isUpdatePending && (this._$ES = this._$ET());\n  }\n  P(t2, s2, i3) {\n    this._$AL.has(t2) || this._$AL.set(t2, s2), true === i3.reflect && this._$Em !== t2 && (this._$Ej ?? (this._$Ej = /* @__PURE__ */ new Set())).add(t2);\n  }\n  async _$ET() {\n    this.isUpdatePending = true;\n    try {\n      await this._$ES;\n    } catch (t3) {\n      Promise.reject(t3);\n    }\n    const t2 = this.scheduleUpdate();\n    return null != t2 && await t2, !this.isUpdatePending;\n  }\n  scheduleUpdate() {\n    return this.performUpdate();\n  }\n  performUpdate() {\n    var _a3;\n    if (!this.isUpdatePending) return;\n    if (!this.hasUpdated) {\n      if (this.renderRoot ?? (this.renderRoot = this.createRenderRoot()), this._$Ep) {\n        for (const [t4, s3] of this._$Ep) this[t4] = s3;\n        this._$Ep = void 0;\n      }\n      const t3 = this.constructor.elementProperties;\n      if (t3.size > 0) for (const [s3, i3] of t3) true !== i3.wrapped || this._$AL.has(s3) || void 0 === this[s3] || this.P(s3, this[s3], i3);\n    }\n    let t2 = false;\n    const s2 = this._$AL;\n    try {\n      t2 = this.shouldUpdate(s2), t2 ? (this.willUpdate(s2), (_a3 = this._$EO) == null ? void 0 : _a3.forEach((t3) => {\n        var _a4;\n        return (_a4 = t3.hostUpdate) == null ? void 0 : _a4.call(t3);\n      }), this.update(s2)) : this._$EU();\n    } catch (s3) {\n      throw t2 = false, this._$EU(), s3;\n    }\n    t2 && this._$AE(s2);\n  }\n  willUpdate(t2) {\n  }\n  _$AE(t2) {\n    var _a3;\n    (_a3 = this._$EO) == null ? void 0 : _a3.forEach((t3) => {\n      var _a4;\n      return (_a4 = t3.hostUpdated) == null ? void 0 : _a4.call(t3);\n    }), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t2)), this.updated(t2);\n  }\n  _$EU() {\n    this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = false;\n  }\n  get updateComplete() {\n    return this.getUpdateComplete();\n  }\n  getUpdateComplete() {\n    return this._$ES;\n  }\n  shouldUpdate(t2) {\n    return true;\n  }\n  update(t2) {\n    this._$Ej && (this._$Ej = this._$Ej.forEach((t3) => this._$EC(t3, this[t3]))), this._$EU();\n  }\n  updated(t2) {\n  }\n  firstUpdated(t2) {\n  }\n}\nb.elementStyles = [], b.shadowRootOptions = { mode: \"open\" }, b[d$1(\"elementProperties\")] = /* @__PURE__ */ new Map(), b[d$1(\"finalized\")] = /* @__PURE__ */ new Map(), p$1 == null ? void 0 : p$1({ ReactiveElement: b }), (a$1.reactiveElementVersions ?? (a$1.reactiveElementVersions = [])).push(\"2.0.4\");\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t$1 = globalThis, i$4 = t$1.trustedTypes, s$2 = i$4 ? i$4.createPolicy(\"lit-html\", { createHTML: (t2) => t2 }) : void 0, e$2 = \"$lit$\", h$2 = `lit$${Math.random().toFixed(9).slice(2)}$`, o$3 = \"?\" + h$2, n$2 = `<${o$3}>`, r$2 = document, l = () => r$2.createComment(\"\"), c$2 = (t2) => null === t2 || \"object\" != typeof t2 && \"function\" != typeof t2, a = Array.isArray, u = (t2) => a(t2) || \"function\" == typeof (t2 == null ? void 0 : t2[Symbol.iterator]), d = \"[ \t\\n\\f\\r]\", f$2 = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g, v = /-->/g, _ = />/g, m$1 = RegExp(`>|${d}(?:([^\\\\s\"'>=/]+)(${d}*=${d}*(?:[^ \t\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`, \"g\"), p = /'/g, g = /\"/g, $ = /^(?:script|style|textarea|title)$/i, y = (t2) => (i3, ...s2) => ({ _$litType$: t2, strings: i3, values: s2 }), x = y(1), T = Symbol.for(\"lit-noChange\"), E = Symbol.for(\"lit-nothing\"), A = /* @__PURE__ */ new WeakMap(), C = r$2.createTreeWalker(r$2, 129);\nfunction P$1(t2, i3) {\n  if (!a(t2) || !t2.hasOwnProperty(\"raw\")) throw Error(\"invalid template strings array\");\n  return void 0 !== s$2 ? s$2.createHTML(i3) : i3;\n}\nconst V = (t2, i3) => {\n  const s2 = t2.length - 1, o2 = [];\n  let r3, l2 = 2 === i3 ? \"<svg>\" : 3 === i3 ? \"<math>\" : \"\", c2 = f$2;\n  for (let i4 = 0; i4 < s2; i4++) {\n    const s3 = t2[i4];\n    let a2, u2, d2 = -1, y2 = 0;\n    for (; y2 < s3.length && (c2.lastIndex = y2, u2 = c2.exec(s3), null !== u2); ) y2 = c2.lastIndex, c2 === f$2 ? \"!--\" === u2[1] ? c2 = v : void 0 !== u2[1] ? c2 = _ : void 0 !== u2[2] ? ($.test(u2[2]) && (r3 = RegExp(\"</\" + u2[2], \"g\")), c2 = m$1) : void 0 !== u2[3] && (c2 = m$1) : c2 === m$1 ? \">\" === u2[0] ? (c2 = r3 ?? f$2, d2 = -1) : void 0 === u2[1] ? d2 = -2 : (d2 = c2.lastIndex - u2[2].length, a2 = u2[1], c2 = void 0 === u2[3] ? m$1 : '\"' === u2[3] ? g : p) : c2 === g || c2 === p ? c2 = m$1 : c2 === v || c2 === _ ? c2 = f$2 : (c2 = m$1, r3 = void 0);\n    const x2 = c2 === m$1 && t2[i4 + 1].startsWith(\"/>\") ? \" \" : \"\";\n    l2 += c2 === f$2 ? s3 + n$2 : d2 >= 0 ? (o2.push(a2), s3.slice(0, d2) + e$2 + s3.slice(d2) + h$2 + x2) : s3 + h$2 + (-2 === d2 ? i4 : x2);\n  }\n  return [P$1(t2, l2 + (t2[s2] || \"<?>\") + (2 === i3 ? \"</svg>\" : 3 === i3 ? \"</math>\" : \"\")), o2];\n};\nclass N {\n  constructor({ strings: t2, _$litType$: s2 }, n3) {\n    let r3;\n    this.parts = [];\n    let c2 = 0, a2 = 0;\n    const u2 = t2.length - 1, d2 = this.parts, [f2, v2] = V(t2, s2);\n    if (this.el = N.createElement(f2, n3), C.currentNode = this.el.content, 2 === s2 || 3 === s2) {\n      const t3 = this.el.content.firstChild;\n      t3.replaceWith(...t3.childNodes);\n    }\n    for (; null !== (r3 = C.nextNode()) && d2.length < u2; ) {\n      if (1 === r3.nodeType) {\n        if (r3.hasAttributes()) for (const t3 of r3.getAttributeNames()) if (t3.endsWith(e$2)) {\n          const i3 = v2[a2++], s3 = r3.getAttribute(t3).split(h$2), e2 = /([.?@])?(.*)/.exec(i3);\n          d2.push({ type: 1, index: c2, name: e2[2], strings: s3, ctor: \".\" === e2[1] ? H : \"?\" === e2[1] ? I : \"@\" === e2[1] ? L : k2 }), r3.removeAttribute(t3);\n        } else t3.startsWith(h$2) && (d2.push({ type: 6, index: c2 }), r3.removeAttribute(t3));\n        if ($.test(r3.tagName)) {\n          const t3 = r3.textContent.split(h$2), s3 = t3.length - 1;\n          if (s3 > 0) {\n            r3.textContent = i$4 ? i$4.emptyScript : \"\";\n            for (let i3 = 0; i3 < s3; i3++) r3.append(t3[i3], l()), C.nextNode(), d2.push({ type: 2, index: ++c2 });\n            r3.append(t3[s3], l());\n          }\n        }\n      } else if (8 === r3.nodeType) if (r3.data === o$3) d2.push({ type: 2, index: c2 });\n      else {\n        let t3 = -1;\n        for (; -1 !== (t3 = r3.data.indexOf(h$2, t3 + 1)); ) d2.push({ type: 7, index: c2 }), t3 += h$2.length - 1;\n      }\n      c2++;\n    }\n  }\n  static createElement(t2, i3) {\n    const s2 = r$2.createElement(\"template\");\n    return s2.innerHTML = t2, s2;\n  }\n}\nfunction S(t2, i3, s2 = t2, e2) {\n  var _a3, _b;\n  if (i3 === T) return i3;\n  let h2 = void 0 !== e2 ? (_a3 = s2._$Co) == null ? void 0 : _a3[e2] : s2._$Cl;\n  const o2 = c$2(i3) ? void 0 : i3._$litDirective$;\n  return (h2 == null ? void 0 : h2.constructor) !== o2 && ((_b = h2 == null ? void 0 : h2._$AO) == null ? void 0 : _b.call(h2, false), void 0 === o2 ? h2 = void 0 : (h2 = new o2(t2), h2._$AT(t2, s2, e2)), void 0 !== e2 ? (s2._$Co ?? (s2._$Co = []))[e2] = h2 : s2._$Cl = h2), void 0 !== h2 && (i3 = S(t2, h2._$AS(t2, i3.values), h2, e2)), i3;\n}\nclass M {\n  constructor(t2, i3) {\n    this._$AV = [], this._$AN = void 0, this._$AD = t2, this._$AM = i3;\n  }\n  get parentNode() {\n    return this._$AM.parentNode;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  u(t2) {\n    const { el: { content: i3 }, parts: s2 } = this._$AD, e2 = ((t2 == null ? void 0 : t2.creationScope) ?? r$2).importNode(i3, true);\n    C.currentNode = e2;\n    let h2 = C.nextNode(), o2 = 0, n3 = 0, l2 = s2[0];\n    for (; void 0 !== l2; ) {\n      if (o2 === l2.index) {\n        let i4;\n        2 === l2.type ? i4 = new R(h2, h2.nextSibling, this, t2) : 1 === l2.type ? i4 = new l2.ctor(h2, l2.name, l2.strings, this, t2) : 6 === l2.type && (i4 = new z(h2, this, t2)), this._$AV.push(i4), l2 = s2[++n3];\n      }\n      o2 !== (l2 == null ? void 0 : l2.index) && (h2 = C.nextNode(), o2++);\n    }\n    return C.currentNode = r$2, e2;\n  }\n  p(t2) {\n    let i3 = 0;\n    for (const s2 of this._$AV) void 0 !== s2 && (void 0 !== s2.strings ? (s2._$AI(t2, s2, i3), i3 += s2.strings.length - 2) : s2._$AI(t2[i3])), i3++;\n  }\n}\nclass R {\n  get _$AU() {\n    var _a3;\n    return ((_a3 = this._$AM) == null ? void 0 : _a3._$AU) ?? this._$Cv;\n  }\n  constructor(t2, i3, s2, e2) {\n    this.type = 2, this._$AH = E, this._$AN = void 0, this._$AA = t2, this._$AB = i3, this._$AM = s2, this.options = e2, this._$Cv = (e2 == null ? void 0 : e2.isConnected) ?? true;\n  }\n  get parentNode() {\n    let t2 = this._$AA.parentNode;\n    const i3 = this._$AM;\n    return void 0 !== i3 && 11 === (t2 == null ? void 0 : t2.nodeType) && (t2 = i3.parentNode), t2;\n  }\n  get startNode() {\n    return this._$AA;\n  }\n  get endNode() {\n    return this._$AB;\n  }\n  _$AI(t2, i3 = this) {\n    t2 = S(this, t2, i3), c$2(t2) ? t2 === E || null == t2 || \"\" === t2 ? (this._$AH !== E && this._$AR(), this._$AH = E) : t2 !== this._$AH && t2 !== T && this._(t2) : void 0 !== t2._$litType$ ? this.$(t2) : void 0 !== t2.nodeType ? this.T(t2) : u(t2) ? this.k(t2) : this._(t2);\n  }\n  O(t2) {\n    return this._$AA.parentNode.insertBefore(t2, this._$AB);\n  }\n  T(t2) {\n    this._$AH !== t2 && (this._$AR(), this._$AH = this.O(t2));\n  }\n  _(t2) {\n    this._$AH !== E && c$2(this._$AH) ? this._$AA.nextSibling.data = t2 : this.T(r$2.createTextNode(t2)), this._$AH = t2;\n  }\n  $(t2) {\n    var _a3;\n    const { values: i3, _$litType$: s2 } = t2, e2 = \"number\" == typeof s2 ? this._$AC(t2) : (void 0 === s2.el && (s2.el = N.createElement(P$1(s2.h, s2.h[0]), this.options)), s2);\n    if (((_a3 = this._$AH) == null ? void 0 : _a3._$AD) === e2) this._$AH.p(i3);\n    else {\n      const t3 = new M(e2, this), s3 = t3.u(this.options);\n      t3.p(i3), this.T(s3), this._$AH = t3;\n    }\n  }\n  _$AC(t2) {\n    let i3 = A.get(t2.strings);\n    return void 0 === i3 && A.set(t2.strings, i3 = new N(t2)), i3;\n  }\n  k(t2) {\n    a(this._$AH) || (this._$AH = [], this._$AR());\n    const i3 = this._$AH;\n    let s2, e2 = 0;\n    for (const h2 of t2) e2 === i3.length ? i3.push(s2 = new R(this.O(l()), this.O(l()), this, this.options)) : s2 = i3[e2], s2._$AI(h2), e2++;\n    e2 < i3.length && (this._$AR(s2 && s2._$AB.nextSibling, e2), i3.length = e2);\n  }\n  _$AR(t2 = this._$AA.nextSibling, i3) {\n    var _a3;\n    for ((_a3 = this._$AP) == null ? void 0 : _a3.call(this, false, true, i3); t2 && t2 !== this._$AB; ) {\n      const i4 = t2.nextSibling;\n      t2.remove(), t2 = i4;\n    }\n  }\n  setConnected(t2) {\n    var _a3;\n    void 0 === this._$AM && (this._$Cv = t2, (_a3 = this._$AP) == null ? void 0 : _a3.call(this, t2));\n  }\n}\nclass k2 {\n  get tagName() {\n    return this.element.tagName;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  constructor(t2, i3, s2, e2, h2) {\n    this.type = 1, this._$AH = E, this._$AN = void 0, this.element = t2, this.name = i3, this._$AM = e2, this.options = h2, s2.length > 2 || \"\" !== s2[0] || \"\" !== s2[1] ? (this._$AH = Array(s2.length - 1).fill(new String()), this.strings = s2) : this._$AH = E;\n  }\n  _$AI(t2, i3 = this, s2, e2) {\n    const h2 = this.strings;\n    let o2 = false;\n    if (void 0 === h2) t2 = S(this, t2, i3, 0), o2 = !c$2(t2) || t2 !== this._$AH && t2 !== T, o2 && (this._$AH = t2);\n    else {\n      const e3 = t2;\n      let n3, r3;\n      for (t2 = h2[0], n3 = 0; n3 < h2.length - 1; n3++) r3 = S(this, e3[s2 + n3], i3, n3), r3 === T && (r3 = this._$AH[n3]), o2 || (o2 = !c$2(r3) || r3 !== this._$AH[n3]), r3 === E ? t2 = E : t2 !== E && (t2 += (r3 ?? \"\") + h2[n3 + 1]), this._$AH[n3] = r3;\n    }\n    o2 && !e2 && this.j(t2);\n  }\n  j(t2) {\n    t2 === E ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t2 ?? \"\");\n  }\n}\nclass H extends k2 {\n  constructor() {\n    super(...arguments), this.type = 3;\n  }\n  j(t2) {\n    this.element[this.name] = t2 === E ? void 0 : t2;\n  }\n}\nclass I extends k2 {\n  constructor() {\n    super(...arguments), this.type = 4;\n  }\n  j(t2) {\n    this.element.toggleAttribute(this.name, !!t2 && t2 !== E);\n  }\n}\nclass L extends k2 {\n  constructor(t2, i3, s2, e2, h2) {\n    super(t2, i3, s2, e2, h2), this.type = 5;\n  }\n  _$AI(t2, i3 = this) {\n    if ((t2 = S(this, t2, i3, 0) ?? E) === T) return;\n    const s2 = this._$AH, e2 = t2 === E && s2 !== E || t2.capture !== s2.capture || t2.once !== s2.once || t2.passive !== s2.passive, h2 = t2 !== E && (s2 === E || e2);\n    e2 && this.element.removeEventListener(this.name, this, s2), h2 && this.element.addEventListener(this.name, this, t2), this._$AH = t2;\n  }\n  handleEvent(t2) {\n    var _a3;\n    \"function\" == typeof this._$AH ? this._$AH.call(((_a3 = this.options) == null ? void 0 : _a3.host) ?? this.element, t2) : this._$AH.handleEvent(t2);\n  }\n}\nclass z {\n  constructor(t2, i3, s2) {\n    this.element = t2, this.type = 6, this._$AN = void 0, this._$AM = i3, this.options = s2;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AI(t2) {\n    S(this, t2);\n  }\n}\nconst j = t$1.litHtmlPolyfillSupport;\nj == null ? void 0 : j(N, R), (t$1.litHtmlVersions ?? (t$1.litHtmlVersions = [])).push(\"3.2.1\");\nconst B = (t2, i3, s2) => {\n  const e2 = (s2 == null ? void 0 : s2.renderBefore) ?? i3;\n  let h2 = e2._$litPart$;\n  if (void 0 === h2) {\n    const t3 = (s2 == null ? void 0 : s2.renderBefore) ?? null;\n    e2._$litPart$ = h2 = new R(i3.insertBefore(l(), t3), t3, void 0, s2 ?? {});\n  }\n  return h2._$AI(t2), h2;\n};\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nlet r$1 = class r extends b {\n  constructor() {\n    super(...arguments), this.renderOptions = { host: this }, this._$Do = void 0;\n  }\n  createRenderRoot() {\n    var _a3;\n    const t2 = super.createRenderRoot();\n    return (_a3 = this.renderOptions).renderBefore ?? (_a3.renderBefore = t2.firstChild), t2;\n  }\n  update(t2) {\n    const s2 = this.render();\n    this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t2), this._$Do = B(s2, this.renderRoot, this.renderOptions);\n  }\n  connectedCallback() {\n    var _a3;\n    super.connectedCallback(), (_a3 = this._$Do) == null ? void 0 : _a3.setConnected(true);\n  }\n  disconnectedCallback() {\n    var _a3;\n    super.disconnectedCallback(), (_a3 = this._$Do) == null ? void 0 : _a3.setConnected(false);\n  }\n  render() {\n    return T;\n  }\n};\nr$1._$litElement$ = true, r$1[\"finalized\"] = true, (_a2 = globalThis.litElementHydrateSupport) == null ? void 0 : _a2.call(globalThis, { LitElement: r$1 });\nconst i$3 = globalThis.litElementPolyfillSupport;\ni$3 == null ? void 0 : i$3({ LitElement: r$1 });\n(globalThis.litElementVersions ?? (globalThis.litElementVersions = [])).push(\"4.1.1\");\nconst ServerPaginationMixin = {\n  name: \"server-pagination-mixin\",\n  use: [],\n  attributes: {\n    limit: {\n      type: Number,\n      default: void 0\n    },\n    offset: {\n      type: Number,\n      default: void 0\n    },\n    pageCount: {\n      type: Number,\n      default: 1e3\n    },\n    pageNumber: {\n      type: Number,\n      default: 0\n    }\n  },\n  initialState: {\n    currentOffset: []\n  },\n  attached() {\n    if (this.limit) {\n      this.setCurrentOffset(this.resourceId, 0);\n      const parentDiv = this.initServerPaginationDiv(this.div);\n      this.renderCallbacks.push({\n        template: this.renderServerPaginationNav(this.resourceId, parentDiv),\n        parent: parentDiv\n      });\n    }\n  },\n  getCurrentOffset(resourceId, limit) {\n    return this.currentOffset[`${resourceId}#p${limit}`];\n  },\n  async setCurrentOffset(resourceId, offset) {\n    const index2 = `${resourceId}#p${this.limit}`;\n    this.currentOffset[index2] = this.offset = offset;\n    this.pageNumber = Number(this.offset / this.limit);\n    this.currentPage[resourceId] = this.pageNumber;\n    await this.fetchData(this.dataSrc);\n  },\n  async decreaseCurrentOffset(resourceId) {\n    const index2 = `${resourceId}#p${this.limit}`;\n    this.currentOffset[index2] = this.offset = this.offset - this.limit;\n    this.currentPage[index2] = this.offset / this.limit;\n    this.pageNumber = this.offset / this.limit;\n    this.updateNavButtons(resourceId, index2, -1);\n    await this.fetchData(this.dataSrc);\n  },\n  async increaseCurrentOffset(resourceId) {\n    const index2 = `${resourceId}#p${this.limit}`;\n    this.currentOffset[index2] = this.offset = this.offset + this.limit;\n    this.currentPage[index2] = this.offset / this.limit;\n    this.updateNavButtons(resourceId, index2, 1);\n    await this.fetchData(this.dataSrc);\n  },\n  updateNavButtons(resourceId, index2, variance) {\n    this.element.querySelector(\"[data-id='prev']\").disabled = this.currentOffset[index2] <= 0;\n    this.element.querySelector(\"[data-id='current']\").innerText = this.getCurrentServedPage(resourceId, variance);\n  },\n  getServerNavElement(div) {\n    if (div) {\n      const insertNode = div.parentNode || div;\n      return insertNode.querySelector(`nav[data-id=\"nav\"]`);\n    }\n    return null;\n  },\n  getCurrentServedPage(context, variance) {\n    this.currentPage[context] = Number(this.currentPage[context]) + variance;\n    this.pageNumber = this.currentPage[context];\n    return this.currentPage[context];\n  },\n  /**\n   * Find nav element or create it if not existing\n   * @param div - insert nav next to this div\n   */\n  initServerPaginationDiv(div) {\n    let nav = this.getServerNavElement(div);\n    if (!nav) {\n      nav = document.createElement(\"nav\");\n      nav.setAttribute(\"data-id\", \"nav\");\n      const insertNode = div.parentNode || div;\n      insertNode.appendChild(nav);\n    }\n    return nav;\n  },\n  /**\n   * Create pagination template\n   */\n  renderServerPaginationNav(resourceId, div) {\n    if (this.limit) {\n      const currentOffset = this.getCurrentOffset(resourceId, this.limit);\n      const currentPageNumber = this.getCurrentServedPage(resourceId, 1);\n      const pageCount = Math.ceil(this.pageCount / this.limit);\n      B(\n        x`\n        <button\n          data-id=\"prev\"\n          ?disabled=${currentOffset <= 0}\n          @click=${() => this.decreaseCurrentOffset(resourceId)}\n        >←</button>\n        <span data-id=\"current\">\n          ${currentPageNumber}\n        </span>\n        <button\n          data-id=\"next\"\n          ?disabled=${currentOffset >= (pageCount - 1) * this.limit}\n          @click=${() => this.increaseCurrentOffset(resourceId)}\n        >→</button>\n        <span>\n        </span>\n      `,\n        div\n      );\n    }\n  }\n};\nconst StoreMixin = {\n  name: \"store-mixin\",\n  use: [AttributeBinderMixin, ContextMixin, ServerPaginationMixin],\n  attributes: {\n    noRender: {\n      type: String,\n      default: null,\n      callback: function(value) {\n        if (value === null) this.fetchData(this.dataSrc);\n      }\n    },\n    dataSrc: {\n      type: String,\n      default: null,\n      callback: async function(value) {\n        var _a3, _b;\n        const filteredOnServer = ((_a3 = this.element.attributes[\"filtered-on\"]) == null ? void 0 : _a3.value) === \"server\";\n        const limited = ((_b = this.element.attributes.limit) == null ? void 0 : _b.value) !== void 0;\n        if (this.noRender === null && !filteredOnServer && !limited) {\n          await this.fetchData(value);\n        } else if (this.noRender === null && !filteredOnServer) {\n          this.resourceId = value;\n        }\n      }\n    },\n    loaderId: {\n      type: String,\n      default: \"\"\n    },\n    nestedField: {\n      type: String,\n      default: null\n    },\n    arrayField: {\n      type: String,\n      default: null,\n      callback: function(value) {\n        if (value)\n          this.predicateName = store.getExpandedPredicate(\n            this.arrayField,\n            this.context\n          );\n      }\n    },\n    predicateName: {\n      type: String,\n      default: null\n    }\n  },\n  initialState: {\n    resources: [],\n    resourceId: null,\n    subscription: null\n  },\n  created() {\n    if (this.element.closest(\"[no-render]\")) this.noRender = \"\";\n  },\n  detached() {\n    if (this.subscription) PubSub.unsubscribe(this.subscription);\n  },\n  get resource() {\n    var _a3;\n    const id = this.resourceId;\n    const serverPagination = formatAttributesToServerPaginationOptions(\n      this.element.attributes\n    );\n    const serverSearch = mergeServerSearchOptions(\n      formatAttributesToServerSearchOptions(this.element.attributes),\n      (_a3 = this.getDynamicServerSearch) == null ? void 0 : _a3.call(this)\n      // from `filterMixin`\n    );\n    return id ? store.get(id, serverPagination, serverSearch) : null;\n  },\n  get loader() {\n    return this.loaderId ? document.getElementById(this.loaderId) : null;\n  },\n  async fetchData(value) {\n    var _a3;\n    this.empty();\n    if (this.subscription) PubSub.unsubscribe(this.subscription);\n    if (!value || value === \"undefined\") return;\n    this.resourceId = value;\n    if (this.nestedField) {\n      const resource = await store.getData(value, this.context);\n      const nestedResource = resource ? await resource[this.nestedField] : null;\n      this.resourceId = nestedResource ? await nestedResource[\"@id\"] : null;\n      if (resource && !this.resourceId && !nestedResource) {\n        for (const property in await resource) {\n          console.log(`${property}: ${await resource[property]}`);\n        }\n        throw `Error: the key \"${this.nestedField}\" does not exist on the resource at id \"${await resource[\"@id\"]}\"`;\n      }\n    }\n    this.updateNavigateSubscription();\n    this.subscription = PubSub.subscribe(\n      this.resourceId,\n      this.updateDOM.bind(this)\n    );\n    const serverPagination = formatAttributesToServerPaginationOptions(\n      this.element.attributes\n    );\n    const dynamicServerSearch = (_a3 = this.getDynamicServerSearch) == null ? void 0 : _a3.call(this);\n    const serverSearch = mergeServerSearchOptions(\n      formatAttributesToServerSearchOptions(this.element.attributes),\n      dynamicServerSearch\n    );\n    const forceRefetch = !!dynamicServerSearch;\n    await store.getData(\n      this.resourceId,\n      this.context,\n      void 0,\n      void 0,\n      forceRefetch,\n      serverPagination,\n      serverSearch\n    );\n    this.updateDOM();\n  },\n  toggleLoaderHidden(toggle) {\n    if (this.loader) this.loader.toggleAttribute(\"hidden\", toggle);\n  },\n  updateNavigateSubscription() {\n  },\n  async updateDOM() {\n    this.toggleLoaderHidden(false);\n    this.empty();\n    await this.replaceAttributesData();\n    await this.populate();\n    setTimeout(\n      () => (\n        // Brings the dispatchEvent at the end of the queue\n        this.element.dispatchEvent(\n          new CustomEvent(\"populate\", {\n            detail: { resource: { \"@id\": this.dataSrc } }\n          })\n        )\n      )\n    );\n    this.toggleLoaderHidden(true);\n  },\n  empty() {\n  },\n  update() {\n    if (this.noRender === null) this.updateDOM();\n  }\n};\nconst SolidAcChecker = {\n  name: \"solid-ac-checker\",\n  use: [StoreMixin],\n  attributes: {\n    permission: {\n      type: String,\n      default: \"\"\n    },\n    noPermission: {\n      type: String,\n      default: \"\"\n    }\n  },\n  populate: trackRenderAsync(async function() {\n    if (!this.resource) return;\n    let displayElement;\n    const permissions = await this.resource.permissions;\n    if (this.permission) {\n      displayElement = permissions.some((p2) => {\n        const context = normalizeContext(this.context);\n        return context.expandTerm(p2, true) === this.permission;\n      });\n    } else if (this.noPermission) {\n      displayElement = permissions.every((p2) => {\n        const context = normalizeContext(this.context);\n        return context.expandTerm(p2, true) !== this.noPermission;\n      });\n    } else {\n      console.warn(\n        'solid-ac-checker: you should define at least one of \"permission\" or \"no-permission\" attribute.'\n      );\n      return;\n    }\n    if (displayElement) this.element.removeAttribute(\"hidden\");\n  }, \"SolidAcChecker:populate\"),\n  empty() {\n    this.element.setAttribute(\"hidden\", \"\");\n  }\n};\nSib.register(SolidAcChecker);\nconst NextMixin = {\n  name: \"next-mixin\",\n  use: [],\n  attributes: {\n    next: {\n      type: String,\n      default: \"\"\n    }\n  },\n  // Here \"even.target\" points to the content of the widgets of the children of solid-display\n  goToNext(resource) {\n    if (this.next) {\n      this.element.dispatchEvent(\n        new CustomEvent(\"requestNavigation\", {\n          bubbles: true,\n          detail: { route: this.next, resource }\n        })\n      );\n    }\n  }\n};\nvar supportCustomEvent = window.CustomEvent;\nif (!supportCustomEvent || typeof supportCustomEvent === \"object\") {\n  supportCustomEvent = function CustomEvent2(event, x2) {\n    x2 = x2 || {};\n    var ev = document.createEvent(\"CustomEvent\");\n    ev.initCustomEvent(event, !!x2.bubbles, !!x2.cancelable, x2.detail || null);\n    return ev;\n  };\n  supportCustomEvent.prototype = window.Event.prototype;\n}\nfunction safeDispatchEvent(target, event) {\n  var check = \"on\" + event.type.toLowerCase();\n  if (typeof target[check] === \"function\") {\n    target[check](event);\n  }\n  return target.dispatchEvent(event);\n}\nfunction createsStackingContext(el) {\n  while (el && el !== document.body) {\n    var s2 = window.getComputedStyle(el);\n    var invalid = function(k3, ok) {\n      return !(s2[k3] === void 0 || s2[k3] === ok);\n    };\n    if (s2.opacity < 1 || invalid(\"zIndex\", \"auto\") || invalid(\"transform\", \"none\") || invalid(\"mixBlendMode\", \"normal\") || invalid(\"filter\", \"none\") || invalid(\"perspective\", \"none\") || s2[\"isolation\"] === \"isolate\" || s2.position === \"fixed\" || s2.webkitOverflowScrolling === \"touch\") {\n      return true;\n    }\n    el = el.parentElement;\n  }\n  return false;\n}\nfunction findNearestDialog(el) {\n  while (el) {\n    if (el.localName === \"dialog\") {\n      return (\n        /** @type {HTMLDialogElement} */\n        el\n      );\n    }\n    if (el.parentElement) {\n      el = el.parentElement;\n    } else if (el.parentNode) {\n      el = el.parentNode.host;\n    } else {\n      el = null;\n    }\n  }\n  return null;\n}\nfunction safeBlur(el) {\n  while (el && el.shadowRoot && el.shadowRoot.activeElement) {\n    el = el.shadowRoot.activeElement;\n  }\n  if (el && el.blur && el !== document.body) {\n    el.blur();\n  }\n}\nfunction inNodeList(nodeList, node) {\n  for (var i3 = 0; i3 < nodeList.length; ++i3) {\n    if (nodeList[i3] === node) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction isFormMethodDialog(el) {\n  if (!el || !el.hasAttribute(\"method\")) {\n    return false;\n  }\n  return el.getAttribute(\"method\").toLowerCase() === \"dialog\";\n}\nfunction findFocusableElementWithin(hostElement) {\n  var opts = [\"button\", \"input\", \"keygen\", \"select\", \"textarea\"];\n  var query = opts.map(function(el) {\n    return el + \":not([disabled])\";\n  });\n  query.push('[tabindex]:not([disabled]):not([tabindex=\"\"])');\n  var target = hostElement.querySelector(query.join(\", \"));\n  if (!target && \"attachShadow\" in Element.prototype) {\n    var elems = hostElement.querySelectorAll(\"*\");\n    for (var i3 = 0; i3 < elems.length; i3++) {\n      if (elems[i3].tagName && elems[i3].shadowRoot) {\n        target = findFocusableElementWithin(elems[i3].shadowRoot);\n        if (target) {\n          break;\n        }\n      }\n    }\n  }\n  return target;\n}\nfunction isConnected(element) {\n  return element.isConnected || document.body.contains(element);\n}\nfunction findFormSubmitter(event) {\n  if (event.submitter) {\n    return event.submitter;\n  }\n  var form = event.target;\n  if (!(form instanceof HTMLFormElement)) {\n    return null;\n  }\n  var submitter = dialogPolyfill.formSubmitter;\n  if (!submitter) {\n    var target = event.target;\n    var root2 = \"getRootNode\" in target && target.getRootNode() || document;\n    submitter = root2.activeElement;\n  }\n  if (!submitter || submitter.form !== form) {\n    return null;\n  }\n  return submitter;\n}\nfunction maybeHandleSubmit(event) {\n  if (event.defaultPrevented) {\n    return;\n  }\n  var form = (\n    /** @type {!HTMLFormElement} */\n    event.target\n  );\n  var value = dialogPolyfill.imagemapUseValue;\n  var submitter = findFormSubmitter(event);\n  if (value === null && submitter) {\n    value = submitter.value;\n  }\n  var dialog = findNearestDialog(form);\n  if (!dialog) {\n    return;\n  }\n  var formmethod = submitter && submitter.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n  if (formmethod !== \"dialog\") {\n    return;\n  }\n  event.preventDefault();\n  if (value != null) {\n    dialog.close(value);\n  } else {\n    dialog.close();\n  }\n}\nfunction dialogPolyfillInfo(dialog) {\n  this.dialog_ = dialog;\n  this.replacedStyleTop_ = false;\n  this.openAsModal_ = false;\n  if (!dialog.hasAttribute(\"role\")) {\n    dialog.setAttribute(\"role\", \"dialog\");\n  }\n  dialog.show = this.show.bind(this);\n  dialog.showModal = this.showModal.bind(this);\n  dialog.close = this.close.bind(this);\n  dialog.addEventListener(\"submit\", maybeHandleSubmit, false);\n  if (!(\"returnValue\" in dialog)) {\n    dialog.returnValue = \"\";\n  }\n  if (\"MutationObserver\" in window) {\n    var mo = new MutationObserver(this.maybeHideModal.bind(this));\n    mo.observe(dialog, { attributes: true, attributeFilter: [\"open\"] });\n  } else {\n    var removed = false;\n    var cb = (function() {\n      removed ? this.downgradeModal() : this.maybeHideModal();\n      removed = false;\n    }).bind(this);\n    var timeout;\n    var delayModel = function(ev) {\n      if (ev.target !== dialog) {\n        return;\n      }\n      var cand = \"DOMNodeRemoved\";\n      removed |= ev.type.substr(0, cand.length) === cand;\n      window.clearTimeout(timeout);\n      timeout = window.setTimeout(cb, 0);\n    };\n    [\"DOMAttrModified\", \"DOMNodeRemoved\", \"DOMNodeRemovedFromDocument\"].forEach(function(name) {\n      dialog.addEventListener(name, delayModel);\n    });\n  }\n  Object.defineProperty(dialog, \"open\", {\n    set: this.setOpen.bind(this),\n    get: dialog.hasAttribute.bind(dialog, \"open\")\n  });\n  this.backdrop_ = document.createElement(\"div\");\n  this.backdrop_.className = \"backdrop\";\n  this.backdrop_.addEventListener(\"mouseup\", this.backdropMouseEvent_.bind(this));\n  this.backdrop_.addEventListener(\"mousedown\", this.backdropMouseEvent_.bind(this));\n  this.backdrop_.addEventListener(\"click\", this.backdropMouseEvent_.bind(this));\n}\ndialogPolyfillInfo.prototype = /** @type {HTMLDialogElement.prototype} */\n{\n  get dialog() {\n    return this.dialog_;\n  },\n  /**\n   * Maybe remove this dialog from the modal top layer. This is called when\n   * a modal dialog may no longer be tenable, e.g., when the dialog is no\n   * longer open or is no longer part of the DOM.\n   */\n  maybeHideModal: function() {\n    if (this.dialog_.hasAttribute(\"open\") && isConnected(this.dialog_)) {\n      return;\n    }\n    this.downgradeModal();\n  },\n  /**\n   * Remove this dialog from the modal top layer, leaving it as a non-modal.\n   */\n  downgradeModal: function() {\n    if (!this.openAsModal_) {\n      return;\n    }\n    this.openAsModal_ = false;\n    this.dialog_.style.zIndex = \"\";\n    if (this.replacedStyleTop_) {\n      this.dialog_.style.top = \"\";\n      this.replacedStyleTop_ = false;\n    }\n    this.backdrop_.parentNode && this.backdrop_.parentNode.removeChild(this.backdrop_);\n    dialogPolyfill.dm.removeDialog(this);\n  },\n  /**\n   * @param {boolean} value whether to open or close this dialog\n   */\n  setOpen: function(value) {\n    if (value) {\n      this.dialog_.hasAttribute(\"open\") || this.dialog_.setAttribute(\"open\", \"\");\n    } else {\n      this.dialog_.removeAttribute(\"open\");\n      this.maybeHideModal();\n    }\n  },\n  /**\n   * Handles mouse events ('mouseup', 'mousedown', 'click') on the fake .backdrop element, redirecting them as if\n   * they were on the dialog itself.\n   *\n   * @param {!Event} e to redirect\n   */\n  backdropMouseEvent_: function(e2) {\n    if (!this.dialog_.hasAttribute(\"tabindex\")) {\n      var fake = document.createElement(\"div\");\n      this.dialog_.insertBefore(fake, this.dialog_.firstChild);\n      fake.tabIndex = -1;\n      fake.focus();\n      this.dialog_.removeChild(fake);\n    } else {\n      this.dialog_.focus();\n    }\n    var redirectedEvent = document.createEvent(\"MouseEvents\");\n    redirectedEvent.initMouseEvent(\n      e2.type,\n      e2.bubbles,\n      e2.cancelable,\n      window,\n      e2.detail,\n      e2.screenX,\n      e2.screenY,\n      e2.clientX,\n      e2.clientY,\n      e2.ctrlKey,\n      e2.altKey,\n      e2.shiftKey,\n      e2.metaKey,\n      e2.button,\n      e2.relatedTarget\n    );\n    this.dialog_.dispatchEvent(redirectedEvent);\n    e2.stopPropagation();\n  },\n  /**\n   * Focuses on the first focusable element within the dialog. This will always blur the current\n   * focus, even if nothing within the dialog is found.\n   */\n  focus_: function() {\n    var target = this.dialog_.querySelector(\"[autofocus]:not([disabled])\");\n    if (!target && this.dialog_.tabIndex >= 0) {\n      target = this.dialog_;\n    }\n    if (!target) {\n      target = findFocusableElementWithin(this.dialog_);\n    }\n    safeBlur(document.activeElement);\n    target && target.focus();\n  },\n  /**\n   * Sets the zIndex for the backdrop and dialog.\n   *\n   * @param {number} dialogZ\n   * @param {number} backdropZ\n   */\n  updateZIndex: function(dialogZ, backdropZ) {\n    if (dialogZ < backdropZ) {\n      throw new Error(\"dialogZ should never be < backdropZ\");\n    }\n    this.dialog_.style.zIndex = dialogZ;\n    this.backdrop_.style.zIndex = backdropZ;\n  },\n  /**\n   * Shows the dialog. If the dialog is already open, this does nothing.\n   */\n  show: function() {\n    if (!this.dialog_.open) {\n      this.setOpen(true);\n      this.focus_();\n    }\n  },\n  /**\n   * Show this dialog modally.\n   */\n  showModal: function() {\n    if (this.dialog_.hasAttribute(\"open\")) {\n      throw new Error(\"Failed to execute 'showModal' on dialog: The element is already open, and therefore cannot be opened modally.\");\n    }\n    if (!isConnected(this.dialog_)) {\n      throw new Error(\"Failed to execute 'showModal' on dialog: The element is not in a Document.\");\n    }\n    if (!dialogPolyfill.dm.pushDialog(this)) {\n      throw new Error(\"Failed to execute 'showModal' on dialog: There are too many open modal dialogs.\");\n    }\n    if (createsStackingContext(this.dialog_.parentElement)) {\n      console.warn(\"A dialog is being shown inside a stacking context. This may cause it to be unusable. For more information, see this link: https://github.com/GoogleChrome/dialog-polyfill/#stacking-context\");\n    }\n    this.setOpen(true);\n    this.openAsModal_ = true;\n    if (dialogPolyfill.needsCentering(this.dialog_)) {\n      dialogPolyfill.reposition(this.dialog_);\n      this.replacedStyleTop_ = true;\n    } else {\n      this.replacedStyleTop_ = false;\n    }\n    this.dialog_.parentNode.insertBefore(this.backdrop_, this.dialog_.nextSibling);\n    this.focus_();\n  },\n  /**\n   * Closes this HTMLDialogElement. This is optional vs clearing the open\n   * attribute, however this fires a 'close' event.\n   *\n   * @param {string=} opt_returnValue to use as the returnValue\n   */\n  close: function(opt_returnValue) {\n    if (!this.dialog_.hasAttribute(\"open\")) {\n      throw new Error(\"Failed to execute 'close' on dialog: The element does not have an 'open' attribute, and therefore cannot be closed.\");\n    }\n    this.setOpen(false);\n    if (opt_returnValue !== void 0) {\n      this.dialog_.returnValue = opt_returnValue;\n    }\n    var closeEvent = new supportCustomEvent(\"close\", {\n      bubbles: false,\n      cancelable: false\n    });\n    safeDispatchEvent(this.dialog_, closeEvent);\n  }\n};\nvar dialogPolyfill = {};\ndialogPolyfill.reposition = function(element) {\n  var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;\n  var topValue = scrollTop + (window.innerHeight - element.offsetHeight) / 2;\n  element.style.top = Math.max(scrollTop, topValue) + \"px\";\n};\ndialogPolyfill.isInlinePositionSetByStylesheet = function(element) {\n  for (var i3 = 0; i3 < document.styleSheets.length; ++i3) {\n    var styleSheet = document.styleSheets[i3];\n    var cssRules = null;\n    try {\n      cssRules = styleSheet.cssRules;\n    } catch (e2) {\n    }\n    if (!cssRules) {\n      continue;\n    }\n    for (var j2 = 0; j2 < cssRules.length; ++j2) {\n      var rule = cssRules[j2];\n      var selectedNodes = null;\n      try {\n        selectedNodes = document.querySelectorAll(rule.selectorText);\n      } catch (e2) {\n      }\n      if (!selectedNodes || !inNodeList(selectedNodes, element)) {\n        continue;\n      }\n      var cssTop = rule.style.getPropertyValue(\"top\");\n      var cssBottom = rule.style.getPropertyValue(\"bottom\");\n      if (cssTop && cssTop !== \"auto\" || cssBottom && cssBottom !== \"auto\") {\n        return true;\n      }\n    }\n  }\n  return false;\n};\ndialogPolyfill.needsCentering = function(dialog) {\n  var computedStyle = window.getComputedStyle(dialog);\n  if (computedStyle.position !== \"absolute\") {\n    return false;\n  }\n  if (dialog.style.top !== \"auto\" && dialog.style.top !== \"\" || dialog.style.bottom !== \"auto\" && dialog.style.bottom !== \"\") {\n    return false;\n  }\n  return !dialogPolyfill.isInlinePositionSetByStylesheet(dialog);\n};\ndialogPolyfill.forceRegisterDialog = function(element) {\n  if (window.HTMLDialogElement || element.showModal) {\n    console.warn(\"This browser already supports <dialog>, the polyfill may not work correctly\", element);\n  }\n  if (element.localName !== \"dialog\") {\n    throw new Error(\"Failed to register dialog: The element is not a dialog.\");\n  }\n  new dialogPolyfillInfo(\n    /** @type {!HTMLDialogElement} */\n    element\n  );\n};\ndialogPolyfill.registerDialog = function(element) {\n  if (!element.showModal) {\n    dialogPolyfill.forceRegisterDialog(element);\n  }\n};\ndialogPolyfill.DialogManager = function() {\n  this.pendingDialogStack = [];\n  var checkDOM = this.checkDOM_.bind(this);\n  this.overlay = document.createElement(\"div\");\n  this.overlay.className = \"_dialog_overlay\";\n  this.overlay.addEventListener(\"click\", (function(e2) {\n    this.forwardTab_ = void 0;\n    e2.stopPropagation();\n    checkDOM([]);\n  }).bind(this));\n  this.handleKey_ = this.handleKey_.bind(this);\n  this.handleFocus_ = this.handleFocus_.bind(this);\n  this.zIndexLow_ = 1e5;\n  this.zIndexHigh_ = 1e5 + 150;\n  this.forwardTab_ = void 0;\n  if (\"MutationObserver\" in window) {\n    this.mo_ = new MutationObserver(function(records) {\n      var removed = [];\n      records.forEach(function(rec) {\n        for (var i3 = 0, c2; c2 = rec.removedNodes[i3]; ++i3) {\n          if (!(c2 instanceof Element)) {\n            continue;\n          } else if (c2.localName === \"dialog\") {\n            removed.push(c2);\n          }\n          removed = removed.concat(c2.querySelectorAll(\"dialog\"));\n        }\n      });\n      removed.length && checkDOM(removed);\n    });\n  }\n};\ndialogPolyfill.DialogManager.prototype.blockDocument = function() {\n  document.documentElement.addEventListener(\"focus\", this.handleFocus_, true);\n  document.addEventListener(\"keydown\", this.handleKey_);\n  this.mo_ && this.mo_.observe(document, { childList: true, subtree: true });\n};\ndialogPolyfill.DialogManager.prototype.unblockDocument = function() {\n  document.documentElement.removeEventListener(\"focus\", this.handleFocus_, true);\n  document.removeEventListener(\"keydown\", this.handleKey_);\n  this.mo_ && this.mo_.disconnect();\n};\ndialogPolyfill.DialogManager.prototype.updateStacking = function() {\n  var zIndex = this.zIndexHigh_;\n  for (var i3 = 0, dpi; dpi = this.pendingDialogStack[i3]; ++i3) {\n    dpi.updateZIndex(--zIndex, --zIndex);\n    if (i3 === 0) {\n      this.overlay.style.zIndex = --zIndex;\n    }\n  }\n  var last = this.pendingDialogStack[0];\n  if (last) {\n    var p2 = last.dialog.parentNode || document.body;\n    p2.appendChild(this.overlay);\n  } else if (this.overlay.parentNode) {\n    this.overlay.parentNode.removeChild(this.overlay);\n  }\n};\ndialogPolyfill.DialogManager.prototype.containedByTopDialog_ = function(candidate) {\n  while (candidate = findNearestDialog(candidate)) {\n    for (var i3 = 0, dpi; dpi = this.pendingDialogStack[i3]; ++i3) {\n      if (dpi.dialog === candidate) {\n        return i3 === 0;\n      }\n    }\n    candidate = candidate.parentElement;\n  }\n  return false;\n};\ndialogPolyfill.DialogManager.prototype.handleFocus_ = function(event) {\n  var target = event.composedPath ? event.composedPath()[0] : event.target;\n  if (this.containedByTopDialog_(target)) {\n    return;\n  }\n  if (document.activeElement === document.documentElement) {\n    return;\n  }\n  event.preventDefault();\n  event.stopPropagation();\n  safeBlur(\n    /** @type {Element} */\n    target\n  );\n  if (this.forwardTab_ === void 0) {\n    return;\n  }\n  var dpi = this.pendingDialogStack[0];\n  var dialog = dpi.dialog;\n  var position = dialog.compareDocumentPosition(target);\n  if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n    if (this.forwardTab_) {\n      dpi.focus_();\n    } else if (target !== document.documentElement) {\n      document.documentElement.focus();\n    }\n  }\n  return false;\n};\ndialogPolyfill.DialogManager.prototype.handleKey_ = function(event) {\n  this.forwardTab_ = void 0;\n  if (event.keyCode === 27) {\n    event.preventDefault();\n    event.stopPropagation();\n    var cancelEvent = new supportCustomEvent(\"cancel\", {\n      bubbles: false,\n      cancelable: true\n    });\n    var dpi = this.pendingDialogStack[0];\n    if (dpi && safeDispatchEvent(dpi.dialog, cancelEvent)) {\n      dpi.dialog.close();\n    }\n  } else if (event.keyCode === 9) {\n    this.forwardTab_ = !event.shiftKey;\n  }\n};\ndialogPolyfill.DialogManager.prototype.checkDOM_ = function(removed) {\n  var clone = this.pendingDialogStack.slice();\n  clone.forEach(function(dpi) {\n    if (removed.indexOf(dpi.dialog) !== -1) {\n      dpi.downgradeModal();\n    } else {\n      dpi.maybeHideModal();\n    }\n  });\n};\ndialogPolyfill.DialogManager.prototype.pushDialog = function(dpi) {\n  var allowed = (this.zIndexHigh_ - this.zIndexLow_) / 2 - 1;\n  if (this.pendingDialogStack.length >= allowed) {\n    return false;\n  }\n  if (this.pendingDialogStack.unshift(dpi) === 1) {\n    this.blockDocument();\n  }\n  this.updateStacking();\n  return true;\n};\ndialogPolyfill.DialogManager.prototype.removeDialog = function(dpi) {\n  var index2 = this.pendingDialogStack.indexOf(dpi);\n  if (index2 === -1) {\n    return;\n  }\n  this.pendingDialogStack.splice(index2, 1);\n  if (this.pendingDialogStack.length === 0) {\n    this.unblockDocument();\n  }\n  this.updateStacking();\n};\ndialogPolyfill.dm = new dialogPolyfill.DialogManager();\ndialogPolyfill.formSubmitter = null;\ndialogPolyfill.imagemapUseValue = null;\nif (window.HTMLDialogElement === void 0) {\n  var testForm = document.createElement(\"form\");\n  testForm.setAttribute(\"method\", \"dialog\");\n  if (testForm.method !== \"dialog\") {\n    var methodDescriptor = Object.getOwnPropertyDescriptor(HTMLFormElement.prototype, \"method\");\n    if (methodDescriptor) {\n      var realGet = methodDescriptor.get;\n      methodDescriptor.get = function() {\n        if (isFormMethodDialog(this)) {\n          return \"dialog\";\n        }\n        return realGet.call(this);\n      };\n      var realSet = methodDescriptor.set;\n      methodDescriptor.set = function(v2) {\n        if (typeof v2 === \"string\" && v2.toLowerCase() === \"dialog\") {\n          return this.setAttribute(\"method\", v2);\n        }\n        return realSet.call(this, v2);\n      };\n      Object.defineProperty(HTMLFormElement.prototype, \"method\", methodDescriptor);\n    }\n  }\n  document.addEventListener(\"click\", function(ev) {\n    dialogPolyfill.formSubmitter = null;\n    dialogPolyfill.imagemapUseValue = null;\n    if (ev.defaultPrevented) {\n      return;\n    }\n    var target = (\n      /** @type {Element} */\n      ev.target\n    );\n    if (\"composedPath\" in ev) {\n      var path = ev.composedPath();\n      target = path.shift() || target;\n    }\n    if (!target || !isFormMethodDialog(target.form)) {\n      return;\n    }\n    var valid = target.type === \"submit\" && [\"button\", \"input\"].indexOf(target.localName) > -1;\n    if (!valid) {\n      if (!(target.localName === \"input\" && target.type === \"image\")) {\n        return;\n      }\n      dialogPolyfill.imagemapUseValue = ev.offsetX + \",\" + ev.offsetY;\n    }\n    var dialog = findNearestDialog(target);\n    if (!dialog) {\n      return;\n    }\n    dialogPolyfill.formSubmitter = target;\n  }, false);\n  document.addEventListener(\"submit\", function(ev) {\n    var form = ev.target;\n    var dialog = findNearestDialog(form);\n    if (dialog) {\n      return;\n    }\n    var submitter = findFormSubmitter(ev);\n    var formmethod = submitter && submitter.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n    if (formmethod === \"dialog\") {\n      ev.preventDefault();\n    }\n  });\n  var nativeFormSubmit = HTMLFormElement.prototype.submit;\n  var replacementFormSubmit = function() {\n    if (!isFormMethodDialog(this)) {\n      return nativeFormSubmit.call(this);\n    }\n    var dialog = findNearestDialog(this);\n    dialog && dialog.close();\n  };\n  HTMLFormElement.prototype.submit = replacementFormSubmit;\n}\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst o$2 = (o2) => o2 ?? E;\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3 }, e$1 = (t2) => (...e2) => ({ _$litDirective$: t2, values: e2 });\nlet i$2 = class i {\n  constructor(t2) {\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AT(t2, e2, i3) {\n    this._$Ct = t2, this._$AM = e2, this._$Ci = i3;\n  }\n  _$AS(t2, e2) {\n    return this.update(t2, e2);\n  }\n  update(t2, e2) {\n    return this.render(...e2);\n  }\n};\nconst prevCache = /* @__PURE__ */ new WeakMap();\nclass SpreadDirective extends i$2 {\n  constructor(partInfo) {\n    super(partInfo);\n    __publicField(this, \"spreadData\");\n    this.spreadData = null;\n  }\n  render(spreadData) {\n    this.spreadData = spreadData;\n    return T;\n  }\n  update(part, [spreadData]) {\n    const prevData = prevCache.get(part);\n    if (prevData === spreadData) {\n      return T;\n    }\n    let element;\n    prevCache.set(part, spreadData);\n    if (part.type === t.ATTRIBUTE || part.type === t.PROPERTY) {\n      element = part.element;\n    } else {\n      console.warn(\n        \"Unsupported part type or missing element, skipping update.\"\n      );\n      return T;\n    }\n    if (spreadData) {\n      for (const key in spreadData) {\n        const value = spreadData[key];\n        if (value === T) continue;\n        const prefix = key[0];\n        if (prefix === \"@\") {\n          const prevHandler = prevData == null ? void 0 : prevData[key];\n          if (!prevHandler || prevHandler !== value) {\n            const name = key.slice(1);\n            if (prevHandler) element.removeEventListener(name, prevHandler);\n            element.addEventListener(name, value);\n          }\n          continue;\n        }\n        if (prefix === \".\") {\n          if (!prevData || prevData[key] !== value) {\n            element[key.slice(1)] = value;\n          }\n          continue;\n        }\n        if (prefix === \"?\") {\n          const attrName = key.slice(1);\n          if (!prevData || prevData[key] !== value) {\n            if (value) {\n              element.setAttribute(attrName, \"\");\n            } else {\n              element.removeAttribute(attrName);\n            }\n          }\n          continue;\n        }\n        if (!prevData || prevData[key] !== value) {\n          if (value != null) {\n            element.setAttribute(key, String(value));\n          } else {\n            element.removeAttribute(key);\n          }\n        }\n      }\n    }\n    if (prevData) {\n      for (const key in prevData) {\n        if (!spreadData || !(key in spreadData)) {\n          const prefix = key[0];\n          if (prefix === \"@\") {\n            element.removeEventListener(key.slice(1), prevData[key]);\n            continue;\n          }\n          if (prefix === \".\") {\n            element[key.slice(1)] = void 0;\n            continue;\n          }\n          if (prefix === \"?\") {\n            element.removeAttribute(key.slice(1));\n            continue;\n          }\n          element.removeAttribute(key);\n        }\n      }\n    }\n    return T;\n  }\n}\nconst spread = e$1(SpreadDirective);\nconst templateStringsCache = /* @__PURE__ */ new WeakMap();\nfunction filterOutNeedlessValues(arr, needlessValues) {\n  return arr.filter((_2, i3) => !needlessValues.some((nv) => nv.index === i3));\n}\nfunction preHTML(strings, ...values) {\n  let cachedStrings = templateStringsCache.get(strings);\n  if (cachedStrings) {\n    for (const cached of cachedStrings) {\n      const { needlessValues: needlessValues2 } = cached;\n      const isSame = needlessValues2.every((nv) => values[nv.index] === nv.value);\n      if (isSame) {\n        return x(\n          cached.strings,\n          ...filterOutNeedlessValues(values, needlessValues2)\n        );\n      }\n    }\n  }\n  const needlessValues = [];\n  const newStrings = [];\n  for (let i3 = 0; i3 < strings.length; i3++) {\n    let str = strings[i3];\n    while (str.endsWith(\"<\") || str.length >= 2 && str.endsWith(\"</\")) {\n      needlessValues.push({ value: values[i3], index: i3 });\n      str += values[i3] + strings[++i3];\n    }\n    newStrings.push(str);\n  }\n  const finalStrings = Object.assign([...newStrings], { raw: strings.raw });\n  if (!cachedStrings) {\n    cachedStrings = [];\n    templateStringsCache.set(strings, cachedStrings);\n  }\n  cachedStrings.push({\n    strings: finalStrings,\n    needlessValues\n  });\n  return x(\n    finalStrings,\n    ...filterOutNeedlessValues(values, needlessValues)\n  );\n}\nconst TranslationMixin = {\n  name: \"translation-mixin\",\n  use: [],\n  initialState: {\n    translationData: {}\n  },\n  created() {\n    this.getLang();\n  },\n  /**\n   * Returns the translation module\n   * @param langCode - string: language needed in 2 char\n   * @returns - object: {key: translation}\n   */\n  async getTranslationModule(langCode) {\n    const translationsModules = {\n      // define modules in a static way, snowpack does not support dynamic strings here\n      en: () => import(\"./en-D7xQ8_VL.js\"),\n      fr: () => import(\"./fr-ClQZ5-J-.js\")\n    };\n    if (!translationsModules[langCode]) {\n      console.warn(\n        `${langCode}.json translation file may not exist, English is setted by default`\n      );\n      langCode = \"en\";\n    }\n    const module2 = await translationsModules[langCode]();\n    return module2.default;\n  },\n  /**\n   * Loads the right translation file and reload the component\n   */\n  getLang() {\n    const languageStorage = store._getLanguage();\n    if (languageStorage) {\n      if (window.fetchTranslationPromise === void 0) {\n        window.fetchTranslationPromise = this.getTranslationModule(languageStorage);\n      }\n      window.fetchTranslationPromise.then((res) => {\n        if (res) {\n          this.translationData = res;\n          this.update();\n        }\n      });\n    }\n  },\n  /**\n   * Returns translation for a given key\n   * @param tradKey - string: key\n   * @returns - string: translation\n   */\n  t(tradKey) {\n    return this.translationData[tradKey] || \"\";\n  }\n};\nconst ValidationMixin = {\n  name: \"validation-mixin\",\n  use: [TranslationMixin],\n  attributes: {\n    confirmationMessage: {\n      type: String,\n      default: null\n    },\n    confirmationType: {\n      type: String,\n      default: null\n    },\n    confirmationSubmitText: {\n      type: String,\n      default: null\n    },\n    confirmationCancelText: {\n      type: String,\n      default: null\n    },\n    confirmationSubmitClass: {\n      type: String,\n      default: void 0\n    },\n    confirmationCancelClass: {\n      type: String,\n      default: void 0\n    },\n    confirmationWidget: {\n      type: String,\n      default: void 0\n    }\n  },\n  created() {\n    this.dialogID = uniqID();\n  },\n  showModal() {\n    const dialog = document.getElementById(this.dialogID);\n    dialogPolyfill.registerDialog(dialog);\n    return dialog.showModal();\n  },\n  performAction() {\n    if (this.element.hasAttribute(\"confirmation-message\") && !this.confirmationType)\n      console.warn(\"confirmation-type attribute is missing.\");\n    if (!this.confirmationType || this.confirmationType === \"confirm\" && confirm(this.confirmationMessage || this.t(\"validation.message\")))\n      this.validateModal();\n    if (this.confirmationType === \"dialog\") {\n      this.showModal();\n    }\n  },\n  getModalDialog() {\n    if (this.confirmationType !== \"dialog\") return \"\";\n    const quitDialog = () => {\n      const dialog = document.getElementById(this.dialogID);\n      if (dialog == null) return;\n      dialog.close();\n    };\n    const confirmChoice = () => {\n      this.validateModal();\n      quitDialog();\n    };\n    return x`\n      <dialog id=\"${this.dialogID}\">\n      ${this.confirmationWidget ? preHTML`<${this.confirmationWidget} value=${this.resourceId}></${this.confirmationWidget}>` : x`<p>${this.confirmationMessage || this.t(\"validation.message\")}</p>`}\n        <div>\n          <button\n            @click=${confirmChoice} \n            class=${o$2(this.confirmationSubmitClass)}\n          >\n          ${this.confirmationSubmitText || this.t(\"validation.submit-text\")}\n          </button>\n          <button\n            @click=${quitDialog}\n            class=${o$2(this.confirmationCancelClass)}\n          >\n          ${this.confirmationCancelText || this.t(\"validation.cancel-text\")}\n          </button>\n        </div>\n      </dialog>\n    `;\n  }\n};\nconst SolidDelete = {\n  name: \"solid-delete\",\n  use: [NextMixin, ValidationMixin, AttributeBinderMixin, ContextMixin],\n  attributes: {\n    dataSrc: {\n      type: String,\n      default: null,\n      callback: function() {\n        this.resourceId = this.dataSrc;\n      }\n    },\n    dataLabel: {\n      type: String,\n      default: null,\n      callback: function(newValue, oldValue) {\n        if (newValue !== oldValue) this.planRender();\n      }\n    }\n  },\n  initialState: {\n    renderPlanned: false\n  },\n  created() {\n    this.planRender();\n  },\n  planRender() {\n    if (!this.renderPlanned) {\n      this.renderPlanned = true;\n      setTimeout(() => {\n        this.render();\n        this.renderPlanned = false;\n      });\n    }\n  },\n  delete(e2) {\n    e2.stopPropagation();\n    if (!this.dataSrc) return;\n    this.performAction();\n  },\n  deletion() {\n    return store.delete(this.dataSrc, this.context).then((response) => {\n      if (!response.ok) return;\n      this.goToNext(null);\n      const eventData = {\n        detail: { resource: { \"@id\": this.dataSrc } },\n        bubbles: true\n      };\n      this.element.dispatchEvent(new CustomEvent(\"save\", eventData));\n      this.element.dispatchEvent(new CustomEvent(\"resourceDeleted\", eventData));\n    });\n  },\n  validateModal() {\n    return this.deletion();\n  },\n  update() {\n    this.render();\n  },\n  render: trackRenderAsync(async function() {\n    await this.replaceAttributesData(false);\n    const button = x`<button @click=${this.delete.bind(this)}>${this.dataLabel || this.t(\"solid-delete.button\")}</button>${this.getModalDialog()}`;\n    B(button, this.element);\n  }, \"SolidDelete:render\")\n};\nSib.register(SolidDelete);\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nclass e extends i$2 {\n  constructor(i3) {\n    if (super(i3), this.it = E, i3.type !== t.CHILD) throw Error(this.constructor.directiveName + \"() can only be used in child bindings\");\n  }\n  render(r3) {\n    if (r3 === E || null == r3) return this._t = void 0, this.it = r3;\n    if (r3 === T) return r3;\n    if (\"string\" != typeof r3) throw Error(this.constructor.directiveName + \"() called with a non-string value\");\n    if (r3 === this.it) return this._t;\n    this.it = r3;\n    const s2 = [r3];\n    return s2.raw = s2, this._t = { _$litType$: this.constructor.resultType, strings: s2, values: [] };\n  }\n}\ne.directiveName = \"unsafeHTML\", e.resultType = 1;\nconst o$1 = e$1(e);\nconst CounterMixin = {\n  name: \"counter-mixin\",\n  use: [],\n  attributes: {\n    counterTemplate: {\n      type: String,\n      default: null\n    }\n  },\n  initialState: {\n    counter: null,\n    parentCounterDiv: null\n  },\n  attached() {\n    this.listPostProcessors.attach(\n      this.countResources.bind(this),\n      \"CounterMixin:countResources\"\n    );\n  },\n  async countResources(resources, listPostProcessors, div, context) {\n    if (this.counterTemplate) {\n      this.initParentCounterDiv(div);\n      this.renderCallbacks.push({\n        // add counter template to render callback\n        template: await this.renderCounter(resources.length),\n        parent: this.parentCounterDiv\n      });\n    }\n    const nextProcessor = listPostProcessors.shift();\n    if (nextProcessor)\n      await nextProcessor(resources, listPostProcessors, div, context);\n  },\n  /**\n   * Create the parent div of the counter in the component.\n   * @param div: parent div where to insert the counter div\n   */\n  initParentCounterDiv(div) {\n    if (this.parentCounterDiv) return;\n    this.parentCounterDiv = document.createElement(\"div\");\n    this.element.insertBefore(this.parentCounterDiv, div);\n  },\n  async renderCounter(resourceNumber) {\n    let htmlCounter;\n    try {\n      htmlCounter = await evalTemplateString(this.counterTemplate, {\n        counter: resourceNumber\n      });\n    } catch (e2) {\n      console.error(new Error(\"error in counter-template\"), e2);\n      throw e2;\n    }\n    return x`${o$1(htmlCounter)}`;\n  }\n};\nconst FederationMixin = {\n  name: \"federation-mixin\",\n  use: [],\n  initialState: {\n    containerFetched: null\n  },\n  attached() {\n    this.listPostProcessors.attach(\n      this.fetchSources.bind(this),\n      \"FederationMixin:fetchSources\"\n    );\n  },\n  async fetchSources(resources, listPostProcessors, div, context) {\n    this.containerFetched = [];\n    let newResources = await this.getResources(resources);\n    newResources = [...new Set(newResources)];\n    this.resources = [...newResources];\n    const nextProcessor = listPostProcessors.shift();\n    if (nextProcessor)\n      await nextProcessor(newResources, listPostProcessors, div, context);\n  },\n  async getResources(resources) {\n    if (!resources && this.resources) resources = this.resources;\n    if (!resources) return [];\n    const newResources = [];\n    const getChildResources = async (res) => {\n      var _a3;\n      if (!res) return;\n      if ((_a3 = res.isContainer) == null ? void 0 : _a3.call(res)) {\n        const containerId = res[\"@id\"];\n        if (!this.containerFetched.includes(containerId)) {\n          this.containerFetched.push(containerId);\n          const resourcesFetched = await this.fetchSource(containerId);\n          if (resourcesFetched)\n            newResources.push(...await this.getResources(resourcesFetched));\n        }\n      } else {\n        newResources.push(res);\n      }\n    };\n    if (!Array.isArray(resources)) resources = [resources];\n    await Promise.all(resources.map((res) => getChildResources(res)));\n    return newResources;\n  },\n  async fetchSource(containerId) {\n    const cachedContainer = store.get(containerId);\n    if (!cachedContainer || cachedContainer.getContainerList() === null) {\n      store.clearCache(containerId);\n    }\n    const container = await store.getData(containerId, this.context);\n    return container == null ? void 0 : container[\"listPredicate\"];\n  }\n};\nconst isSet$1 = (field, fields) => {\n  if (!fields) return false;\n  const foundSets = fields.match(getSetRegexp(field));\n  return foundSets ? foundSets.length > 0 : false;\n};\nconst getSet = (field, fields) => {\n  const setString = fields.match(getSetRegexp(field));\n  if (!setString) return [];\n  const firstSetBracket = fields.indexOf(setString[0]) + setString[0].length - 1;\n  const lastSetBracket = findClosingBracketMatchIndex(fields, firstSetBracket);\n  const set2 = fields.substring(firstSetBracket + 1, lastSetBracket);\n  return parseFieldsString(set2);\n};\nconst getSetRegexp = (field) => {\n  return new RegExp(`(^|\\\\,|\\\\(|\\\\s)\\\\s*${field}\\\\s*\\\\(`, \"g\");\n};\nconst isSearchField = (field, searchForm) => {\n  return searchForm.hasAttribute(`search-${field}`);\n};\nconst getSearchField = (field, searchForm) => {\n  return parseFieldsString(searchForm.getAttribute(`search-${field}`) || \"\");\n};\nconst orThrow = (throwOn, ret) => {\n  if (throwOn === true && ret) throw true;\n  if (throwOn === false && !ret) throw false;\n  return ret;\n};\nconst matchValue = async (val, query, throwOn) => {\n  var _a3;\n  const subject = await val;\n  if (subject == null && query.value === \"\") return orThrow(throwOn, true);\n  if (subject == null) return orThrow(throwOn, false);\n  if (query.list) {\n    if (query.value.length === 0) return orThrow(throwOn, true);\n    for (const v2 of query.value) {\n      if (await matchValue(subject, { type: query.type, value: v2, list: false })) {\n        return orThrow(throwOn, true);\n      }\n    }\n    return orThrow(throwOn, false);\n  }\n  if ((_a3 = subject.isContainer) == null ? void 0 : _a3.call(subject)) {\n    let ret = Promise.resolve(query.value === \"\");\n    for (const value of subject[\"listPredicate\"]) {\n      ret = await ret || await matchValue(value, query);\n      if (ret) return orThrow(throwOn, true);\n    }\n    return orThrow(throwOn, await ret);\n  }\n  if (Array.isArray(subject)) {\n    let ret = Promise.resolve(query.value === \"\");\n    for (const value of subject) {\n      ret = await ret || await matchValue(value, query);\n      if (ret) {\n        return true;\n      }\n    }\n    return orThrow(throwOn, await ret);\n  }\n  if (query.type === \"string\" && typeof subject !== \"string\")\n    return orThrow(throwOn, compare.string(subject[\"@id\"], query.value));\n  return orThrow(throwOn, compare[query.type](subject, query.value));\n};\nconst cacheFieldsProps = (cacheKey, filter, fields, searchForm) => {\n  if (!window.cachePropsSearchFilter[cacheKey]) {\n    window.cachePropsSearchFilter[cacheKey] = {\n      setFields: isSet$1(filter, fields) ? getSet(filter, fields) : null,\n      setSearchFields: isSearchField(filter, searchForm) ? getSearchField(filter, searchForm) : null\n    };\n  }\n};\nconst traversePath = async (resource, path, targetedType) => {\n  var _a3;\n  let result = [];\n  let currentRes;\n  let remainingPath = path;\n  if (path.length === 0) return [];\n  try {\n    currentRes = await resource[path[0]];\n    const lastPath1El = path.shift();\n    if (lastPath1El) remainingPath = path;\n    if (currentRes && remainingPath.length > 1) {\n      result = await traversePath(currentRes, remainingPath, targetedType);\n    } else if (currentRes && Array.isArray(currentRes)) {\n      for (const res of currentRes) {\n        if (remainingPath.length > 1) {\n          result = await traversePath(res, remainingPath, targetedType);\n        } else {\n          let targetsRes = await res[remainingPath[0]];\n          if (!targetsRes) return [];\n          if ((_a3 = targetsRes.isContainer) == null ? void 0 : _a3.call(targetsRes)) {\n            targetsRes = targetsRes[\"listPredicate\"];\n          }\n          if (!Array.isArray(targetsRes)) targetsRes = [targetsRes];\n          for (const targetRes of targetsRes) {\n            if (!result.some((item) => item[\"@id\"] === targetRes[\"@id\"])) {\n              result.push({ \"@id\": targetRes[\"@id\"] });\n            }\n          }\n        }\n      }\n    }\n  } catch (e2) {\n    console.error(e2);\n    return [];\n  }\n  return result;\n};\nconst matchFilter = async (resource, filter, query, fieldsAttr, searchForm, filterId, throwOn) => {\n  let fields = null;\n  const cacheKey = `${filter}_${filterId}`;\n  cacheFieldsProps(cacheKey, filter, fieldsAttr, searchForm);\n  if (window.cachePropsSearchFilter[cacheKey].setFields !== null) {\n    fields = window.cachePropsSearchFilter[cacheKey].setFields;\n  } else if (window.cachePropsSearchFilter[cacheKey].setSearchFields !== null) {\n    fields = window.cachePropsSearchFilter[cacheKey].setSearchFields;\n  } else {\n    if (!await resource[filter] && doesResourceContainList(filter)) {\n      const path1 = filter.split(\".\");\n      const targetedType = path1[path1.length - 1];\n      let targetIds = [];\n      targetIds = await traversePath(resource, path1, targetedType);\n      if (!Array.isArray(targetIds) || targetIds.length === 0 && query.value !== \"\") {\n        throw !throwOn;\n      }\n      return await matchValue(targetIds, query, throwOn);\n    }\n    return matchValue(resource[filter], query, throwOn);\n  }\n  try {\n    await Promise.all(\n      (fields || []).map(\n        (field) => matchFilter(\n          resource,\n          field,\n          query,\n          fieldsAttr,\n          searchForm,\n          filterId,\n          true\n          // stop searching when 1 filter is true (= OR)\n        )\n      )\n    );\n  } catch {\n    return true;\n  }\n  throw false;\n};\nconst matchFilters = async (resource, filters, filterNames, fields, searchForm, filterId) => {\n  try {\n    await Promise.all(\n      filterNames.map(async (filter) => {\n        const match3 = await matchFilter(\n          resource,\n          filter,\n          filters[filter],\n          fields,\n          searchForm,\n          filterId,\n          false\n          // stop searching when 1 filter is false (= AND)\n        );\n        return match3;\n      })\n    );\n  } catch (_e) {\n    return false;\n  }\n  return true;\n};\nconst searchInResources = (resources, filters, fields, searchForm) => {\n  const filterNames = Object.keys(filters);\n  const filterId = uniqID();\n  window.cachePropsSearchFilter = {};\n  return Promise.all(\n    resources.map(async (resource) => {\n      const match3 = await matchFilters(\n        resource,\n        filters,\n        filterNames,\n        fields,\n        searchForm,\n        filterId\n      );\n      return match3;\n    })\n  );\n};\nconst FilterMixin = {\n  name: \"filter-mixin\",\n  use: [],\n  initialState: {\n    searchCount: null\n  },\n  attributes: {\n    searchFields: {\n      type: String,\n      default: null\n    },\n    filteredBy: {\n      type: String,\n      default: null,\n      callback(newValue) {\n        if (newValue && this.searchForm && newValue !== this.searchForm.getAttribute(\"id\")) {\n          this.searchForm.component.detach(this);\n          this.searchForm = null;\n          this.populate();\n        }\n      }\n    },\n    filteredOn: {\n      type: String,\n      // 'server' | 'client'\n      default: \"client\"\n    }\n  },\n  created() {\n    this.searchCount = /* @__PURE__ */ new Map();\n    this.element.addEventListener(\"populate\", () => {\n      var _a3;\n      if (!window.document.contains(this.element)) return;\n      (_a3 = this.searchForm) == null ? void 0 : _a3.component.updateAutoRanges();\n    });\n  },\n  attached() {\n    const filteredBy = this.filteredBy;\n    if (this.isFilteredOnServer() && filteredBy) {\n      this.searchForm = document.getElementById(filteredBy);\n      if (!this.searchForm) throw `#${filteredBy} is not in DOM`;\n      this.searchForm.addEventListener(\n        \"formChange\",\n        () => this.onServerSearchChange()\n      );\n    } else {\n      this.listPostProcessors.attach(\n        this.filterCallback.bind(this),\n        \"FilterMixin:filterCallback\"\n      );\n    }\n  },\n  get filters() {\n    var _a3, _b;\n    return ((_b = (_a3 = this.searchForm) == null ? void 0 : _a3.component) == null ? void 0 : _b.value) ?? {};\n  },\n  set filters(filters) {\n    var _a3, _b;\n    if ((_b = (_a3 = this.searchForm) == null ? void 0 : _a3.component) == null ? void 0 : _b.value) {\n      this.searchForm.component.value = filters;\n      this.filterList();\n    }\n  },\n  isFilteredOnServer() {\n    return this.filteredOn === \"server\" && !!this.fetchData;\n  },\n  async onServerSearchChange() {\n    await this.fetchData(this.dataSrc);\n    this.empty();\n    await this.populate();\n  },\n  getDynamicServerSearch() {\n    const filters = this.filters;\n    if (this.isFilteredOnServer() && filters) {\n      const fields = Object.keys(filters);\n      const value = Object.values(filters).map(({ value: value2 }) => value2).filter((value2) => !!value2).join(\" \").trim();\n      if (fields.length > 0 && value) {\n        return { fields, value };\n      }\n    }\n    return;\n  },\n  async filterCallback(resources, listPostProcessors, div, context) {\n    if (this.filteredBy || this.searchFields) {\n      if (!this.searchCount.has(context)) this.searchCount.set(context, 1);\n      if (!this.searchForm) await this.createFilter(context);\n      const filteredResources = await searchInResources(\n        resources,\n        this.filters,\n        this.fields,\n        this.searchForm\n      );\n      resources = resources.filter((_v, index2) => filteredResources[index2]);\n      this.resources = [...resources];\n    }\n    const nextProcessor = listPostProcessors.shift();\n    if (nextProcessor)\n      await nextProcessor(\n        resources,\n        listPostProcessors,\n        div,\n        context + (this.searchCount.get(context) || \"\")\n      );\n  },\n  async filterList(context) {\n    this.searchCount.set(context, this.searchCount.get(context) + 1);\n    if (!this.resource) return;\n    this.empty();\n    await this.populate();\n  },\n  async getValuesOfField(field) {\n    const arrayOfDataObjects = this.resource[\"listPredicate\"];\n    const arrayOfDataIds = [];\n    for (const obj of arrayOfDataObjects) {\n      const nextArrayOfObjects = await obj[field];\n      if (!nextArrayOfObjects) continue;\n      if (typeof nextArrayOfObjects !== \"object\") {\n        console.warn(\n          `The format value of ${field} is not suitable with auto-range-[field] attribute`\n        );\n        continue;\n      }\n      if (!nextArrayOfObjects.isContainer()) {\n        arrayOfDataIds.push(nextArrayOfObjects[\"@id\"]);\n        continue;\n      }\n      const children = nextArrayOfObjects[\"listPredicate\"];\n      if (!children) continue;\n      arrayOfDataIds.push(...children.map((child) => child[\"@id\"]));\n    }\n    return arrayOfDataIds;\n  },\n  async createFilter(context) {\n    const filteredBy = this.filteredBy;\n    if (filteredBy != null) {\n      this.searchForm = document.getElementById(filteredBy);\n      if (!this.searchForm) throw `#${filteredBy} is not in DOM`;\n    } else {\n      this.searchForm = document.createElement(\"solid-form-search\");\n    }\n    this.searchForm.component.attach(this);\n    this.searchForm.addEventListener(\"formChange\", () => {\n      this.filterList(context);\n    });\n    this.searchForm.toggleAttribute(\"naked\", true);\n    if (filteredBy) return;\n    const searchAttributes = Array.from(this.element.attributes).filter((attr) => attr.name.startsWith(\"search-\")).map((attr) => ({\n      name: attr.name.replace(\"search-\", \"\"),\n      value: attr.value\n    }));\n    for (const { name, value } of searchAttributes) {\n      this.searchForm.setAttribute(name, value);\n    }\n    this.element.insertBefore(this.searchForm, this.element.firstChild);\n    await this.searchForm.component.populate();\n  }\n};\nconst GrouperMixin = {\n  name: \"grouper-mixin\",\n  use: [],\n  attributes: {\n    groupBy: {\n      type: String,\n      default: null\n    },\n    groupWidget: {\n      type: String,\n      default: \"solid-group-default\"\n    },\n    groupClass: {\n      type: String,\n      default: \"\"\n    },\n    orderGroupAsc: {\n      type: Boolean,\n      default: null\n    },\n    orderGroupDesc: {\n      type: Boolean,\n      default: null\n    }\n  },\n  attached() {\n    this.listPostProcessors.attach(\n      this.groupResources.bind(this),\n      \"GrouperMixin:groupResources\"\n    );\n  },\n  async groupResources(resources, listPostProcessors, div, context) {\n    const nextProcessor = listPostProcessors.shift();\n    if (this.groupBy) {\n      const groups = {};\n      for (const resource of resources) {\n        const valueGroup = await resource[this.groupBy];\n        if (valueGroup == null) continue;\n        if (!groups[valueGroup]) groups[valueGroup] = { resources: [] };\n        groups[valueGroup].resources.push(resource);\n      }\n      let sortedKeys = Object.keys(groups);\n      if (this.orderGroupAsc !== null || this.orderGroupDesc !== null) {\n        const order = this.orderGroupDesc !== null ? \"desc\" : \"asc\";\n        sortedKeys = Object.keys(groups).sort((a2, b2) => {\n          return generalComparator(a2, b2, order);\n        });\n      }\n      const parents = sortedKeys.map((g2) => ({\n        group: g2,\n        parent: this.renderGroup(g2, div)\n      }));\n      for (const { group, parent } of parents) {\n        if (nextProcessor)\n          await nextProcessor(\n            groups[group].resources,\n            // give only resources from group\n            listPostProcessors.deepCopy(),\n            // copy post processors\n            parent,\n            // parent is group widget\n            `${context}_${group}`\n          );\n      }\n    } else {\n      if (nextProcessor)\n        await nextProcessor(resources, listPostProcessors, div, context);\n    }\n  },\n  /**\n   * Create a group widget or find if it already exists\n   * @param groupName\n   */\n  renderGroup(groupName, div) {\n    let groupElt = this.element.querySelector(\n      `${this.groupWidget}[value=\"${groupName}\"]`\n    );\n    if (!groupElt) {\n      groupElt = document.createElement(this.groupWidget);\n      groupElt.setAttribute(\"value\", groupName);\n      if (this.groupClass) groupElt.setAttribute(\"class\", this.groupClass);\n      if (groupElt.component) groupElt.component.render();\n      div.appendChild(groupElt);\n    }\n    return groupElt.querySelector(\"[data-content]\") || groupElt;\n  }\n};\nconst HighlighterMixin = {\n  name: \"highlighter-mixin\",\n  use: [],\n  attached() {\n    this.listPostProcessors.attach(\n      this.hightlightCallback.bind(this),\n      \"HighlighterMixin:hightlightCallback\"\n    );\n  },\n  async hightlightCallback(resources, listPostProcessors, div, context) {\n    for (const attr of this.element.attributes) {\n      if (attr.name.startsWith(\"highlight-\")) {\n        const field = attr.name.split(\"highlight-\")[1];\n        resources = await Promise.all(\n          resources.map(async (resource) => ({\n            sortingKey: await resource[field],\n            // fetch sorting value\n            proxy: resource\n            // and keep proxy\n          }))\n        );\n        resources = this.sortHighlighted(resources, \"sortingKey\", attr.value);\n        resources = resources.map((resource) => resource.proxy);\n      }\n    }\n    this.resources = [...resources];\n    const nextProcessor = listPostProcessors.shift();\n    if (nextProcessor)\n      await nextProcessor(resources, listPostProcessors, div, context);\n  },\n  sortHighlighted(resources, field, value) {\n    for (const [index2, res] of resources.entries()) {\n      if (res[field] && res[field] === value) {\n        resources.splice(0, 0, resources.splice(index2, 1)[0]);\n      }\n    }\n    return resources;\n  }\n};\nclass PostProcessorRegistry {\n  constructor(currentPostProcessors = []) {\n    __publicField(this, \"currentPostProcessors\");\n    this.currentPostProcessors = [...currentPostProcessors];\n  }\n  attach(callback, callbackName) {\n    this.currentPostProcessors.push({ name: callbackName, fn: callback });\n  }\n  getPostProcessors() {\n    return this.currentPostProcessors;\n  }\n  printCurrentCallbacks() {\n    if (this.currentPostProcessors.length === 0) {\n      console.log(\"No post-processors registered.\");\n    } else {\n      console.log(\"Registered post-processors:\");\n      for (const postProcessor of this.currentPostProcessors) {\n        console.log(`- ${postProcessor.name}`);\n      }\n    }\n  }\n  getFormattedCallbacks() {\n    if (this.currentPostProcessors.length === 0) {\n      return \"No post-processors registered.\";\n    }\n    let formattedText = \"Registered post-processors:\\n\";\n    for (const postProcessor of this.currentPostProcessors) {\n      formattedText += `- ${postProcessor.name}\n`;\n    }\n    return formattedText.trim();\n  }\n  static printFormattedCallbacks(currentPostProcessors) {\n    if (currentPostProcessors.length === 0) {\n      return \"No post-processors registered.\";\n    }\n    let formattedText = \"Registered post-processors:\\n\";\n    for (const postProcessor of currentPostProcessors) {\n      formattedText += `- ${postProcessor.name}\n`;\n    }\n    return formattedText.trim();\n  }\n  whichCallbackExecutedNext() {\n    if (this.currentPostProcessors.length === 0) {\n      return \"No post-processors registered.\";\n    }\n    return `Next post-processor to be executed is: ${this.currentPostProcessors[0].name}`;\n  }\n  deepCopy() {\n    const copy = new PostProcessorRegistry(this.currentPostProcessors);\n    return copy;\n  }\n  shift() {\n    const res = this.currentPostProcessors.shift();\n    if (res) {\n      return res.fn;\n    }\n    return void 0;\n  }\n}\nconst ListMixin = {\n  name: \"list-mixin\",\n  use: [],\n  attributes: {\n    emptyWidget: {\n      type: String,\n      default: null\n    },\n    emptyValue: {\n      type: String,\n      default: \"\"\n    }\n  },\n  initialState: {\n    // Processors functions to execute on the list before rendering\n    listPostProcessors: new PostProcessorRegistry(),\n    // Rendering to execute after all the processors have been executed\n    renderCallbacks: []\n  },\n  created() {\n    this.listPostProcessors = new PostProcessorRegistry();\n    this.renderCallbacks = [];\n  },\n  appendSingleElt(parent) {\n    this.appendChildElt(this.resource[\"@id\"], parent);\n  },\n  setElementAttribute(attr) {\n    const containerAttribute = \"solid-container\";\n    const resourceAttribute = \"solid-resource\";\n    if (attr === \"resource\") {\n      this.element.removeAttribute(containerAttribute);\n      this.element.setAttribute(resourceAttribute, \"\");\n    } else {\n      this.element.removeAttribute(resourceAttribute);\n      this.element.setAttribute(containerAttribute, \"\");\n    }\n  },\n  async populate() {\n    var _a3, _b, _c, _d;\n    const listPostProcessorsCopy = this.listPostProcessors.deepCopy();\n    const div = this.div;\n    if (!this.resource) return;\n    if (!((_b = (_a3 = this.resource).isContainer) == null ? void 0 : _b.call(_a3)) && !this.arrayField && !this.predicateName) {\n      this.setElementAttribute(\"resource\");\n      this.appendSingleElt(div);\n      return;\n    }\n    if ((_d = (_c = this.resource).isContainer) == null ? void 0 : _d.call(_c)) {\n      this.setElementAttribute(\"container\");\n      this.renderCallbacks = [];\n      listPostProcessorsCopy.attach(\n        this.renderDOM.bind(this),\n        \"ListMixin:renderDOM\"\n      );\n      listPostProcessorsCopy.attach(\n        this.handleEmptyWidget.bind(this),\n        \"ListMixin:handleEmptyWidget\"\n      );\n      const nextProcessor = listPostProcessorsCopy.shift();\n      await nextProcessor(\n        this.resource[\"listPredicate\"],\n        listPostProcessorsCopy,\n        div,\n        this.dataSrc\n      );\n    } else if (this.arrayField && this.predicateName && this.resource[this.predicateName]) {\n      this.setElementAttribute(\"container\");\n      this.renderCallbacks = [];\n      listPostProcessorsCopy.attach(\n        this.renderDOM.bind(this),\n        \"ListMixin:renderDOM\"\n      );\n      listPostProcessorsCopy.attach(\n        this.handleEmptyWidget.bind(this),\n        \"ListMixin:handleEmptyWidget\"\n      );\n      const nextProcessor = listPostProcessorsCopy.shift();\n      await nextProcessor(\n        await this.resource[this.predicateName],\n        listPostProcessorsCopy,\n        div,\n        this.dataSrc\n      );\n    }\n    for (const renderCallback of this.renderCallbacks) {\n      B(renderCallback.template, renderCallback.parent);\n    }\n  },\n  /**\n   * Render resources in the DOM\n   * @param resources\n   * @param listPostProcessors\n   * @param div\n   * @param context\n   */\n  async renderDOM(resources, listPostProcessors, div, context) {\n    for (const resource of resources) {\n      if (!resource) continue;\n      this.appendChildElt(resource[\"@id\"], div);\n    }\n    const nextProcessor = listPostProcessors.shift();\n    if (nextProcessor)\n      await nextProcessor(resources, listPostProcessors, div, context);\n  },\n  /**\n   * Show empty widget if no resources in the list\n   * @param resources\n   * @param listPostProcessors\n   * @param div\n   * @param context\n   */\n  async handleEmptyWidget(resources, listPostProcessors, div, context) {\n    if (this.emptyWidget) {\n      const emptyWidgetTemplate = preHTML`\n        <${this.emptyWidget}\n          class=${this.emptyWidget}\n          value=${o$2(this.emptyValue)}\n        ></${this.emptyWidget}>\n      `;\n      if (!this.emptyWrapper) {\n        this.emptyWrapper = document.createElement(\"span\");\n        this.element.appendChild(this.emptyWrapper);\n      }\n      B(\n        resources.length > 0 ? x`` : emptyWidgetTemplate,\n        this.emptyWrapper\n      );\n    }\n    const nextProcessor = listPostProcessors.shift();\n    if (nextProcessor)\n      await nextProcessor(resources, listPostProcessors, div, context);\n  }\n};\nconst PaginateMixin = {\n  name: \"paginate-mixin\",\n  use: [],\n  attributes: {\n    paginateBy: {\n      type: Number,\n      default: 0\n    },\n    paginateLoop: {\n      type: String,\n      default: null\n    }\n  },\n  initialState: {\n    currentPage: []\n  },\n  created() {\n    this.currentPage = [];\n  },\n  attached() {\n    this.listPostProcessors.attach(\n      this.paginateCallback.bind(this),\n      \"PaginateMixin:paginateCallback\"\n    );\n  },\n  async paginateCallback(resources, listPostProcessors, div, context) {\n    if (this.paginateBy > 0) {\n      if (!this.currentPage[context]) this.currentPage[context] = 1;\n      const parentDiv = this.initParentPaginationDiv(div, context);\n      this.renderCallbacks.push({\n        template: this.renderPaginationNav(\n          this.getPageCount(resources.length),\n          context,\n          div\n        ),\n        parent: parentDiv\n      });\n      const firstElementIndex = (this.getCurrentPage(context) - 1) * this.paginateBy;\n      resources = resources.slice(\n        firstElementIndex,\n        firstElementIndex + this.paginateBy\n      );\n    }\n    const nextProcessor = listPostProcessors.shift();\n    if (nextProcessor)\n      await nextProcessor(resources, listPostProcessors, div, context);\n  },\n  getNavElement(div) {\n    const insertNode = div.parentNode || div;\n    return insertNode.querySelector(`nav[data-id=\"nav\"]`);\n  },\n  /**\n   * Find nav element or create it if not existing\n   * @param div - insert nav next to this div\n   */\n  initParentPaginationDiv(div) {\n    let nav = this.getNavElement(div);\n    if (!nav) {\n      nav = document.createElement(\"nav\");\n      nav.setAttribute(\"data-id\", \"nav\");\n      const insertNode = div.parentNode || div;\n      insertNode.appendChild(nav);\n    }\n    return nav;\n  },\n  getCurrentPage(context) {\n    return this.currentPage[context];\n  },\n  setCurrentPage(page, context, pageCount) {\n    if (page < 1) page = !this.shouldLoop() ? 1 : pageCount;\n    if (page > pageCount) page = !this.shouldLoop() ? pageCount : 1;\n    this.currentPage[context] = page;\n    this.empty();\n    this.populate();\n  },\n  getPageCount(size) {\n    return Math.max(1, Math.ceil(size / this.paginateBy));\n  },\n  shouldLoop() {\n    return this.paginateLoop !== null;\n  },\n  /**\n   * Create pagination template\n   * @param pageCount\n   * @param context\n   */\n  renderPaginationNav(pageCount, context, div) {\n    this.getNavElement(div).toggleAttribute(\"hidden\", pageCount <= 1);\n    const currentPage = this.getCurrentPage(context);\n    return x`\n      <button\n        data-id=\"prev\"\n        ?disabled=${!this.shouldLoop() && currentPage <= 1}\n        @click=${() => this.setCurrentPage(currentPage - 1, context, pageCount)}\n      >←</button>\n      <button\n        data-id=\"next\"\n        ?disabled=${!this.shouldLoop() && currentPage >= pageCount}\n        @click=${() => this.setCurrentPage(currentPage + 1, context, pageCount)}\n      >→</button>\n      <span>\n        <span data-id=\"current\">${currentPage}</span> / <span data-id=\"count\">${String(pageCount)}</span>\n      </span>\n    `;\n  }\n};\nconst RequiredMixin = {\n  name: \"required-mixin\",\n  use: [],\n  attached() {\n    this.listPostProcessors.attach(\n      this.requiredResources.bind(this),\n      \"RequiredMixin:requiredResources\"\n    );\n  },\n  async requiredResources(resources, listPostProcessors, div, context) {\n    const displays = [];\n    const requiredFields = Array.from(this.element.attributes).filter((attr) => attr.name.startsWith(\"required-\")).map((attr) => {\n      return attr.value !== \"\" ? attr.value : attr.name.replace(\"required-\", \"\");\n    });\n    if (requiredFields.length > 0) {\n      for (const resource of resources) {\n        let hasProps = true;\n        for (const field of requiredFields) {\n          const res = await resource[field];\n          if (!res || typeof res === \"object\" && \"@value\" in res && !res[\"@value\"]) {\n            hasProps = false;\n            break;\n          }\n        }\n        if (hasProps) displays.push(resource);\n      }\n    }\n    const nextProcessor = listPostProcessors.shift();\n    if (nextProcessor)\n      await nextProcessor(\n        requiredFields.length > 0 ? displays : resources,\n        listPostProcessors,\n        div,\n        context\n      );\n  }\n};\nconst SorterMixin = {\n  name: \"sorter-mixin\",\n  use: [],\n  attributes: {\n    orderBy: {\n      type: String,\n      default: null\n    },\n    orderAsc: {\n      type: String,\n      default: null\n    },\n    orderDesc: {\n      type: String,\n      default: null\n    },\n    orderByRandom: {\n      type: String,\n      default: null\n    },\n    sortedBy: {\n      type: String,\n      default: null,\n      callback(newValue) {\n        if (newValue && this.sortForm && newValue !== this.sortForm.getAttribute(\"id\")) {\n          this.sortForm = null;\n          this.populate();\n        }\n      }\n    }\n  },\n  initialState: {\n    randomOrder: null\n  },\n  attached() {\n    this.listPostProcessors.attach(\n      this.orderCallback.bind(this),\n      \"SorterMixin:orderCallback\"\n    );\n  },\n  created() {\n    this.randomOrder = [];\n  },\n  async sorterList() {\n    if (!this.resource) return;\n    this.empty();\n    await this.populate();\n  },\n  linkSorterForm() {\n    this.sortForm.addEventListener(\"formChange\", () => {\n      this.sorterList();\n    });\n  },\n  async orderCallback(resources, listPostProcessors, div, context) {\n    if (this.orderBy) this.orderAsc = this.orderBy;\n    let sortingKey = \"\";\n    let orderValueToSort = \"\";\n    if (this.orderAsc || this.orderDesc) {\n      sortingKey = this.orderAsc || this.orderDesc;\n    } else if (this.sortedBy) {\n      const sortedBy = this.sortedBy;\n      if (sortedBy != null) {\n        if (!this.sortForm) {\n          this.sortForm = document.getElementById(sortedBy);\n          if (!this.sortForm) throw `#${sortedBy} is not in DOM`;\n          this.linkSorterForm();\n        }\n        if (!this.sortForm.component.value.field) {\n          console.warn(\"The attribute field does not exist\");\n        } else {\n          sortingKey = this.sortForm.component.value.field.value;\n        }\n        const orderField = this.sortForm.component.value.order;\n        orderValueToSort = (orderField == null ? void 0 : orderField.value) ? orderField.value : \"asc\";\n      }\n    }\n    if (sortingKey) {\n      let orderToSort = true;\n      if (this.orderDesc || orderValueToSort === \"desc\") orderToSort = false;\n      resources = (await Promise.all(\n        resources.map(async (resource) => ({\n          sortingKey: await resource[sortingKey],\n          // fetch sorting value\n          proxy: resource\n          // and keep proxy\n        }))\n      )).sort(this.sortValuesByKey(\"sortingKey\", orderToSort)).map((r3) => r3.proxy);\n    } else if (this.isRandomSorted()) {\n      resources = this.shuffleResources(resources);\n    }\n    this.resources = [...resources];\n    const nextProcessor = listPostProcessors.shift();\n    if (nextProcessor)\n      await nextProcessor(resources, listPostProcessors, div, context);\n  },\n  isRandomSorted() {\n    return this.orderByRandom !== null;\n  },\n  sortValuesByKey(key, asc) {\n    return (a2, b2) => {\n      if (!Object.hasOwn(a2, key)) return 1;\n      if (!Object.hasOwn(b2, key)) return -1;\n      const varA = a2[key];\n      const varB = b2[key];\n      let comparison = 0;\n      if (typeof varA === \"string\" && typeof varB === \"string\") {\n        comparison = varA.localeCompare(varB, void 0, {\n          sensitivity: \"base\"\n        });\n        comparison = asc ? comparison : -comparison;\n      } else {\n        if (varA > varB) comparison = asc ? 1 : -1;\n        else if (varA < varB) comparison = asc ? -1 : 1;\n      }\n      return comparison;\n    };\n  },\n  shuffleResources(array2) {\n    let currentIndex = array2.length;\n    let temporaryValue;\n    let randomIndex;\n    if (this.randomOrder.length !== array2.length) {\n      this.randomOrder = [...Array(array2.length).keys()];\n      while (currentIndex !== 0) {\n        randomIndex = Math.floor(Math.random() * currentIndex);\n        currentIndex -= 1;\n        temporaryValue = this.randomOrder[currentIndex];\n        this.randomOrder[currentIndex] = this.randomOrder[randomIndex];\n        this.randomOrder[randomIndex] = temporaryValue;\n      }\n    }\n    return this.randomOrder.map((i3) => array2[i3]);\n  }\n};\nconst ActionMixin = {\n  name: \"action-mixin\",\n  attributes: {\n    src: {\n      type: String,\n      default: \"\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"src\");\n      }\n    },\n    targetSrc: {\n      type: String,\n      default: \"\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"target-src\");\n      }\n    }\n  }\n};\nconst BlankMixin = {\n  name: \"blank-mixin\",\n  created() {\n    this.listAttributes.target = \"_blank\";\n  }\n};\nconst BooleanMixin = {\n  name: \"boolean-mixin\",\n  get type() {\n    return \"boolean\";\n  }\n};\nconst MailtoMixin = {\n  name: \"mailto-mixin\",\n  created() {\n    this.listAttributes.mailto = \"mailto:\";\n  }\n};\nconst MultipleMixin = {\n  name: \"multiple-mixin\",\n  attributes: {\n    fields: {\n      type: String,\n      default: \"\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"fields\");\n      }\n    },\n    next: {\n      type: String,\n      default: \"\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"next\");\n      }\n    },\n    emptyWidget: {\n      type: String,\n      default: \"\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"emptyWidget\");\n      }\n    }\n  }\n};\nconst NumberMixin = {\n  name: \"number-mixin\",\n  get type() {\n    return \"number\";\n  }\n};\nconst PlaceholderMixin = {\n  name: \"placeholder-mixin\",\n  attributes: {\n    placeholder: {\n      type: String,\n      default: \"\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"placeholder\");\n      }\n    }\n  },\n  attached() {\n    this.listAttributes.placeholder = this.placeholder || this.label || this.name || \"\";\n  }\n};\nconst TelMixin = {\n  name: \"tel-mixin\",\n  created() {\n    this.listAttributes.tel = \"tel:\";\n  }\n};\nconst attributeDirectory = {\n  multiple: MultipleMixin,\n  action: ActionMixin,\n  blank: BlankMixin,\n  mailto: MailtoMixin,\n  tel: TelMixin,\n  placeholder: PlaceholderMixin,\n  bool: BooleanMixin,\n  num: NumberMixin\n};\nconst index$4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  ActionMixin,\n  BlankMixin,\n  MailtoMixin,\n  MultipleMixin,\n  PlaceholderMixin,\n  TelMixin,\n  attributeDirectory\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst BaseWidgetMixin = {\n  name: \"widget-mixin\",\n  use: [],\n  attributes: {\n    value: {\n      type: String,\n      default: \"\",\n      callback: function() {\n        this.planRender();\n      }\n    },\n    name: {\n      type: String,\n      default: \"\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"name\");\n      }\n    },\n    label: {\n      type: String,\n      default: null,\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"label\");\n      }\n    },\n    autoSubscribe: {\n      type: String,\n      default: null,\n      callback: function(newValue) {\n        if (this.subscription) PubSub.unsubscribe(this.subscription);\n        this.subscribe(newValue);\n      }\n    }\n  },\n  initialState: {\n    listValueTransformations: new PostProcessorRegistry(),\n    listTemplateAdditions: new PostProcessorRegistry(),\n    listAttributes: {},\n    listCallbacks: new PostProcessorRegistry(),\n    renderPlanned: false\n  },\n  get template() {\n    return null;\n  },\n  created() {\n    this.listValueTransformations = new PostProcessorRegistry();\n    this.listAttributes = {};\n    this.listTemplateAdditions = new PostProcessorRegistry();\n    this.listCallbacks = new PostProcessorRegistry();\n    this.subscription = null;\n  },\n  attached() {\n    this.planRender();\n  },\n  detached() {\n    if (this.subscription) PubSub.unsubscribe(this.subscription);\n  },\n  planRender() {\n    if (!this.renderPlanned && document.body.contains(this.element)) {\n      this.renderPlanned = true;\n      setTimeout(() => {\n        this.render();\n        this.renderPlanned = false;\n      });\n    }\n  },\n  render() {\n    const listValueTransformationsCopy = this.listValueTransformations.deepCopy();\n    listValueTransformationsCopy.attach(\n      this.renderTemplate.bind(this),\n      \"BaseWidgetMixin:renderTemplate\"\n    );\n    const nextProcessor = listValueTransformationsCopy.shift();\n    nextProcessor(this.value, listValueTransformationsCopy);\n    const listCallbacksCopy = this.listCallbacks.deepCopy();\n    const nextCallback = listCallbacksCopy.shift();\n    if (nextCallback) {\n      nextCallback(this.value, listCallbacksCopy);\n    }\n    this.element.dispatchEvent(\n      new CustomEvent(\"widgetRendered\", { bubbles: true })\n    );\n  },\n  renderTemplate(value) {\n    const template = this.template(value, { ...this.listAttributes });\n    const listTemplateAdditionsCopy = this.listTemplateAdditions.deepCopy();\n    listTemplateAdditionsCopy.attach(\n      this.templateToDOM.bind(this),\n      \"BaseWidgetMixin:templateToDOM\"\n    );\n    const nextProcessor = listTemplateAdditionsCopy.shift();\n    nextProcessor(template, listTemplateAdditionsCopy);\n  },\n  templateToDOM(template) {\n    B(template, this.element);\n  },\n  addToAttributes(value, attrKey) {\n    if (value !== null && value !== this.listAttributes[attrKey]) {\n      this.listAttributes[attrKey] = value;\n      this.planRender();\n    }\n  },\n  subscribe(event) {\n    this.subscription = PubSub.subscribe(event, () => this.planRender());\n  },\n  update() {\n    this.planRender();\n  }\n};\nvar slimselect$1 = { exports: {} };\nvar slimselect = slimselect$1.exports;\nvar hasRequiredSlimselect;\nfunction requireSlimselect() {\n  if (hasRequiredSlimselect) return slimselect$1.exports;\n  hasRequiredSlimselect = 1;\n  (function(module2, exports2) {\n    (function(global2, factory) {\n      module2.exports = factory();\n    })(slimselect, function() {\n      class CssClasses {\n        constructor(classes) {\n          if (!classes) {\n            classes = {};\n          }\n          this.main = classes.main || \"ss-main\";\n          this.placeholder = classes.placeholder || \"ss-placeholder\";\n          this.values = classes.values || \"ss-values\";\n          this.single = classes.single || \"ss-single\";\n          this.max = classes.max || \"ss-max\";\n          this.value = classes.value || \"ss-value\";\n          this.valueText = classes.valueText || \"ss-value-text\";\n          this.valueDelete = classes.valueDelete || \"ss-value-delete\";\n          this.valueOut = classes.valueOut || \"ss-value-out\";\n          this.deselect = classes.deselect || \"ss-deselect\";\n          this.deselectPath = classes.deselectPath || \"M10,10 L90,90 M10,90 L90,10\";\n          this.arrow = classes.arrow || \"ss-arrow\";\n          this.arrowClose = classes.arrowClose || \"M10,30 L50,70 L90,30\";\n          this.arrowOpen = classes.arrowOpen || \"M10,70 L50,30 L90,70\";\n          this.content = classes.content || \"ss-content\";\n          this.openAbove = classes.openAbove || \"ss-open-above\";\n          this.openBelow = classes.openBelow || \"ss-open-below\";\n          this.search = classes.search || \"ss-search\";\n          this.searchHighlighter = classes.searchHighlighter || \"ss-search-highlight\";\n          this.searching = classes.searching || \"ss-searching\";\n          this.addable = classes.addable || \"ss-addable\";\n          this.addablePath = classes.addablePath || \"M50,10 L50,90 M10,50 L90,50\";\n          this.list = classes.list || \"ss-list\";\n          this.optgroup = classes.optgroup || \"ss-optgroup\";\n          this.optgroupLabel = classes.optgroupLabel || \"ss-optgroup-label\";\n          this.optgroupLabelText = classes.optgroupLabelText || \"ss-optgroup-label-text\";\n          this.optgroupActions = classes.optgroupActions || \"ss-optgroup-actions\";\n          this.optgroupSelectAll = classes.optgroupSelectAll || \"ss-selectall\";\n          this.optgroupSelectAllBox = classes.optgroupSelectAllBox || \"M60,10 L10,10 L10,90 L90,90 L90,50\";\n          this.optgroupSelectAllCheck = classes.optgroupSelectAllCheck || \"M30,45 L50,70 L90,10\";\n          this.optgroupClosable = classes.optgroupClosable || \"ss-closable\";\n          this.option = classes.option || \"ss-option\";\n          this.optionDelete = classes.optionDelete || \"M10,10 L90,90 M10,90 L90,10\";\n          this.highlighted = classes.highlighted || \"ss-highlighted\";\n          this.open = classes.open || \"ss-open\";\n          this.close = classes.close || \"ss-close\";\n          this.selected = classes.selected || \"ss-selected\";\n          this.error = classes.error || \"ss-error\";\n          this.disabled = classes.disabled || \"ss-disabled\";\n          this.hide = classes.hide || \"ss-hide\";\n        }\n      }\n      function generateID() {\n        return Math.random().toString(36).substring(2, 10);\n      }\n      function hasClassInTree(element, className) {\n        function hasClass(e2, c2) {\n          if (c2 && e2 && e2.classList && e2.classList.contains(c2)) {\n            return e2;\n          }\n          if (c2 && e2 && e2.dataset && e2.dataset.id && e2.dataset.id === className) {\n            return e2;\n          }\n          return null;\n        }\n        function parentByClass(e2, c2) {\n          if (!e2 || e2 === document) {\n            return null;\n          } else if (hasClass(e2, c2)) {\n            return e2;\n          } else {\n            return parentByClass(e2.parentNode, c2);\n          }\n        }\n        return hasClass(element, className) || parentByClass(element, className);\n      }\n      function debounce(func, wait = 50, immediate = false) {\n        let timeout;\n        return function(...args) {\n          const context = self;\n          const later = () => {\n            timeout = null;\n            if (!immediate) {\n              func.apply(context, args);\n            }\n          };\n          const callNow = immediate && !timeout;\n          clearTimeout(timeout);\n          timeout = setTimeout(later, wait);\n          if (callNow) {\n            func.apply(context, args);\n          }\n        };\n      }\n      function isEqual2(a2, b2) {\n        return JSON.stringify(a2) === JSON.stringify(b2);\n      }\n      function kebabCase(str) {\n        const result = str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match3) => \"-\" + match3.toLowerCase());\n        return str[0] === str[0].toUpperCase() ? result.substring(1) : result;\n      }\n      class Optgroup {\n        constructor(optgroup) {\n          this.id = !optgroup.id || optgroup.id === \"\" ? generateID() : optgroup.id;\n          this.label = optgroup.label || \"\";\n          this.selectAll = optgroup.selectAll === void 0 ? false : optgroup.selectAll;\n          this.selectAllText = optgroup.selectAllText || \"Select All\";\n          this.closable = optgroup.closable || \"off\";\n          this.options = [];\n          if (optgroup.options) {\n            for (const o2 of optgroup.options) {\n              this.options.push(new Option(o2));\n            }\n          }\n        }\n      }\n      class Option {\n        constructor(option) {\n          this.id = !option.id || option.id === \"\" ? generateID() : option.id;\n          this.value = option.value === void 0 ? option.text : option.value;\n          this.text = option.text || \"\";\n          this.html = option.html || \"\";\n          this.selected = option.selected !== void 0 ? option.selected : false;\n          this.display = option.display !== void 0 ? option.display : true;\n          this.disabled = option.disabled !== void 0 ? option.disabled : false;\n          this.mandatory = option.mandatory !== void 0 ? option.mandatory : false;\n          this.placeholder = option.placeholder !== void 0 ? option.placeholder : false;\n          this.class = option.class || \"\";\n          this.style = option.style || \"\";\n          this.data = option.data || {};\n        }\n      }\n      class Store {\n        constructor(type, data) {\n          this.selectType = \"single\";\n          this.data = [];\n          this.selectedOrder = [];\n          this.selectType = type;\n          this.setData(data);\n        }\n        validateDataArray(data) {\n          if (!Array.isArray(data)) {\n            return new Error(\"Data must be an array\");\n          }\n          for (let dataObj of data) {\n            if (dataObj instanceof Optgroup || \"label\" in dataObj) {\n              if (!(\"label\" in dataObj)) {\n                return new Error(\"Optgroup must have a label\");\n              }\n              if (\"options\" in dataObj && dataObj.options) {\n                for (let option of dataObj.options) {\n                  const validationError = this.validateOption(option);\n                  if (validationError) {\n                    return validationError;\n                  }\n                }\n              }\n            } else if (dataObj instanceof Option || \"text\" in dataObj) {\n              const validationError = this.validateOption(dataObj);\n              if (validationError) {\n                return validationError;\n              }\n            } else {\n              return new Error(\"Data object must be a valid optgroup or option\");\n            }\n          }\n          return null;\n        }\n        validateOption(option) {\n          if (!(\"text\" in option)) {\n            return new Error(\"Option must have a text\");\n          }\n          return null;\n        }\n        partialToFullData(data) {\n          let dataFinal = [];\n          data.forEach((dataObj) => {\n            if (dataObj instanceof Optgroup || \"label\" in dataObj) {\n              let optOptions = [];\n              if (\"options\" in dataObj && dataObj.options) {\n                dataObj.options.forEach((option) => {\n                  optOptions.push(new Option(option));\n                });\n              }\n              if (optOptions.length > 0) {\n                dataFinal.push(new Optgroup(dataObj));\n              }\n            }\n            if (dataObj instanceof Option || \"text\" in dataObj) {\n              dataFinal.push(new Option(dataObj));\n            }\n          });\n          return dataFinal;\n        }\n        setData(data) {\n          this.data = this.partialToFullData(data);\n          if (this.selectType === \"single\") {\n            this.setSelectedBy(\"id\", this.getSelected());\n          }\n        }\n        getData() {\n          return this.filter(null, true);\n        }\n        getDataOptions() {\n          return this.filter(null, false);\n        }\n        addOption(option, addToStart = false) {\n          if (addToStart) {\n            let data = [new Option(option)];\n            this.setData(data.concat(this.getData()));\n          } else {\n            this.setData(this.getData().concat(new Option(option)));\n          }\n        }\n        setSelectedBy(selectedType, selectedValues) {\n          let firstOption = null;\n          let hasSelected = false;\n          const selectedObjects = [];\n          for (let dataObj of this.data) {\n            if (dataObj instanceof Optgroup) {\n              for (let option of dataObj.options) {\n                if (!firstOption) {\n                  firstOption = option;\n                }\n                option.selected = hasSelected ? false : selectedValues.includes(option[selectedType]);\n                if (option.selected) {\n                  selectedObjects.push(option);\n                  if (this.selectType === \"single\") {\n                    hasSelected = true;\n                  }\n                }\n              }\n            }\n            if (dataObj instanceof Option) {\n              if (!firstOption) {\n                firstOption = dataObj;\n              }\n              dataObj.selected = hasSelected ? false : selectedValues.includes(dataObj[selectedType]);\n              if (dataObj.selected) {\n                selectedObjects.push(dataObj);\n                if (this.selectType === \"single\") {\n                  hasSelected = true;\n                }\n              }\n            }\n          }\n          if (this.selectType === \"single\" && firstOption && !hasSelected) {\n            firstOption.selected = true;\n            selectedObjects.push(firstOption);\n          }\n          const selectedIds = selectedValues.map((value) => {\n            var _a3;\n            return ((_a3 = selectedObjects.find((option) => option[selectedType] === value)) === null || _a3 === void 0 ? void 0 : _a3.id) || \"\";\n          });\n          this.selectedOrder = selectedIds;\n        }\n        getSelected() {\n          return this.getSelectedOptions().map((option) => option.id);\n        }\n        getSelectedValues() {\n          return this.getSelectedOptions().map((option) => option.value);\n        }\n        getSelectedOptions() {\n          return this.filter((opt) => {\n            return opt.selected;\n          }, false);\n        }\n        getOptgroupByID(id) {\n          for (let dataObj of this.data) {\n            if (dataObj instanceof Optgroup && dataObj.id === id) {\n              return dataObj;\n            }\n          }\n          return null;\n        }\n        getOptionByID(id) {\n          let options = this.filter((opt) => {\n            return opt.id === id;\n          }, false);\n          return options.length ? options[0] : null;\n        }\n        getSelectType() {\n          return this.selectType;\n        }\n        getFirstOption() {\n          let option = null;\n          for (let dataObj of this.data) {\n            if (dataObj instanceof Optgroup) {\n              option = dataObj.options[0];\n            } else if (dataObj instanceof Option) {\n              option = dataObj;\n            }\n            if (option) {\n              break;\n            }\n          }\n          return option;\n        }\n        search(search, searchFilter) {\n          search = search.trim();\n          if (search === \"\") {\n            return this.getData();\n          }\n          return this.filter((opt) => {\n            return searchFilter(opt, search);\n          }, true);\n        }\n        filter(filter, includeOptgroup) {\n          const dataSearch = [];\n          this.data.forEach((dataObj) => {\n            if (dataObj instanceof Optgroup) {\n              let optOptions = [];\n              dataObj.options.forEach((option) => {\n                if (!filter || filter(option)) {\n                  if (!includeOptgroup) {\n                    dataSearch.push(new Option(option));\n                  } else {\n                    optOptions.push(new Option(option));\n                  }\n                }\n              });\n              if (optOptions.length > 0) {\n                let optgroup = new Optgroup(dataObj);\n                optgroup.options = optOptions;\n                dataSearch.push(optgroup);\n              }\n            }\n            if (dataObj instanceof Option) {\n              if (!filter || filter(dataObj)) {\n                dataSearch.push(new Option(dataObj));\n              }\n            }\n          });\n          return dataSearch;\n        }\n        selectedOrderOptions(options) {\n          const newOrder = [];\n          this.selectedOrder.forEach((id) => {\n            const option = options.find((opt) => opt.id === id);\n            if (option) {\n              newOrder.push(option);\n            }\n          });\n          options.forEach((option) => {\n            let isIn = false;\n            newOrder.forEach((selectedOption) => {\n              if (option.id === selectedOption.id) {\n                isIn = true;\n                return;\n              }\n            });\n            if (!isIn) {\n              newOrder.push(option);\n            }\n          });\n          return newOrder;\n        }\n      }\n      class Render {\n        constructor(settings, classes, store2, callbacks) {\n          this.store = store2;\n          this.settings = settings;\n          this.classes = classes;\n          this.callbacks = callbacks;\n          this.main = this.mainDiv();\n          this.content = this.contentDiv();\n          this.updateClassStyles();\n          this.updateAriaAttributes();\n          if (this.settings.contentLocation) {\n            this.settings.contentLocation.appendChild(this.content.main);\n          }\n        }\n        enable() {\n          this.main.main.classList.remove(this.classes.disabled);\n          this.content.search.input.disabled = false;\n        }\n        disable() {\n          this.main.main.classList.add(this.classes.disabled);\n          this.content.search.input.disabled = true;\n        }\n        open() {\n          this.main.arrow.path.setAttribute(\"d\", this.classes.arrowOpen);\n          this.main.main.classList.add(this.settings.openPosition === \"up\" ? this.classes.openAbove : this.classes.openBelow);\n          this.main.main.setAttribute(\"aria-expanded\", \"true\");\n          this.moveContent();\n          const selectedOptions = this.store.getSelectedOptions();\n          if (selectedOptions.length) {\n            const selectedId = selectedOptions[selectedOptions.length - 1].id;\n            const selectedOption = this.content.list.querySelector('[data-id=\"' + selectedId + '\"]');\n            if (selectedOption) {\n              this.ensureElementInView(this.content.list, selectedOption);\n            }\n          }\n        }\n        close() {\n          this.main.main.classList.remove(this.classes.openAbove);\n          this.main.main.classList.remove(this.classes.openBelow);\n          this.main.main.setAttribute(\"aria-expanded\", \"false\");\n          this.content.main.classList.remove(this.classes.openAbove);\n          this.content.main.classList.remove(this.classes.openBelow);\n          this.main.arrow.path.setAttribute(\"d\", this.classes.arrowClose);\n        }\n        updateClassStyles() {\n          this.main.main.className = \"\";\n          this.main.main.removeAttribute(\"style\");\n          this.content.main.className = \"\";\n          this.content.main.removeAttribute(\"style\");\n          this.main.main.classList.add(this.classes.main);\n          this.content.main.classList.add(this.classes.content);\n          if (this.settings.style !== \"\") {\n            this.main.main.style.cssText = this.settings.style;\n            this.content.main.style.cssText = this.settings.style;\n          }\n          if (this.settings.class.length) {\n            for (const c2 of this.settings.class) {\n              if (c2.trim() !== \"\") {\n                this.main.main.classList.add(c2.trim());\n                this.content.main.classList.add(c2.trim());\n              }\n            }\n          }\n          if (this.settings.contentPosition === \"relative\" || this.settings.contentPosition === \"fixed\") {\n            this.content.main.classList.add(\"ss-\" + this.settings.contentPosition);\n          }\n        }\n        updateAriaAttributes() {\n          this.main.main.role = \"combobox\";\n          this.main.main.setAttribute(\"aria-haspopup\", \"listbox\");\n          this.main.main.setAttribute(\"aria-controls\", this.content.main.id);\n          this.main.main.setAttribute(\"aria-expanded\", \"false\");\n          this.content.main.setAttribute(\"role\", \"listbox\");\n        }\n        mainDiv() {\n          var _a3;\n          const main2 = document.createElement(\"div\");\n          main2.dataset.id = this.settings.id;\n          main2.setAttribute(\"aria-label\", this.settings.ariaLabel);\n          main2.tabIndex = 0;\n          main2.onkeydown = (e2) => {\n            switch (e2.key) {\n              case \"ArrowUp\":\n              case \"ArrowDown\":\n                this.callbacks.open();\n                e2.key === \"ArrowDown\" ? this.highlight(\"down\") : this.highlight(\"up\");\n                return false;\n              case \"Tab\":\n                this.callbacks.close();\n                return true;\n              case \"Enter\":\n              case \" \":\n                this.callbacks.open();\n                const highlighted = this.content.list.querySelector(\".\" + this.classes.highlighted);\n                if (highlighted) {\n                  highlighted.click();\n                }\n                return false;\n              case \"Escape\":\n                this.callbacks.close();\n                return false;\n            }\n            if (e2.key.length === 1) {\n              this.callbacks.open();\n            }\n            return true;\n          };\n          main2.onclick = (e2) => {\n            if (this.settings.disabled) {\n              return;\n            }\n            this.settings.isOpen ? this.callbacks.close() : this.callbacks.open();\n          };\n          const values = document.createElement(\"div\");\n          values.classList.add(this.classes.values);\n          main2.appendChild(values);\n          const deselect = document.createElement(\"div\");\n          deselect.classList.add(this.classes.deselect);\n          const selectedOptions = (_a3 = this.store) === null || _a3 === void 0 ? void 0 : _a3.getSelectedOptions();\n          if (!this.settings.allowDeselect || this.settings.isMultiple && selectedOptions && selectedOptions.length <= 0) {\n            deselect.classList.add(this.classes.hide);\n          } else {\n            deselect.classList.remove(this.classes.hide);\n          }\n          deselect.onclick = (e2) => {\n            e2.stopPropagation();\n            if (this.settings.disabled) {\n              return;\n            }\n            let shouldDelete = true;\n            const before = this.store.getSelectedOptions();\n            const after = [];\n            if (this.callbacks.beforeChange) {\n              shouldDelete = this.callbacks.beforeChange(after, before) === true;\n            }\n            if (shouldDelete) {\n              if (this.settings.isMultiple) {\n                this.callbacks.setSelected([], false);\n                this.updateDeselectAll();\n              } else {\n                const firstOption = this.store.getFirstOption();\n                const id = firstOption ? firstOption.id : \"\";\n                this.callbacks.setSelected(id, false);\n              }\n              if (this.settings.closeOnSelect) {\n                this.callbacks.close();\n              }\n              if (this.callbacks.afterChange) {\n                this.callbacks.afterChange(this.store.getSelectedOptions());\n              }\n            }\n          };\n          const deselectSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n          deselectSvg.setAttribute(\"viewBox\", \"0 0 100 100\");\n          const deselectPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n          deselectPath.setAttribute(\"d\", this.classes.deselectPath);\n          deselectSvg.appendChild(deselectPath);\n          deselect.appendChild(deselectSvg);\n          main2.appendChild(deselect);\n          const arrow = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n          arrow.classList.add(this.classes.arrow);\n          arrow.setAttribute(\"viewBox\", \"0 0 100 100\");\n          const arrowPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n          arrowPath.setAttribute(\"d\", this.classes.arrowClose);\n          if (this.settings.alwaysOpen) {\n            arrow.classList.add(this.classes.hide);\n          }\n          arrow.appendChild(arrowPath);\n          main2.appendChild(arrow);\n          return {\n            main: main2,\n            values,\n            deselect: {\n              main: deselect,\n              svg: deselectSvg,\n              path: deselectPath\n            },\n            arrow: {\n              main: arrow,\n              path: arrowPath\n            }\n          };\n        }\n        mainFocus(eventType) {\n          if (eventType !== \"click\") {\n            this.main.main.focus({ preventScroll: true });\n          }\n        }\n        placeholder() {\n          const placeholderOption = this.store.filter((o2) => o2.placeholder, false);\n          let placeholderText = this.settings.placeholderText;\n          if (placeholderOption.length) {\n            if (placeholderOption[0].html !== \"\") {\n              placeholderText = placeholderOption[0].html;\n            } else if (placeholderOption[0].text !== \"\") {\n              placeholderText = placeholderOption[0].text;\n            }\n          }\n          const placeholder = document.createElement(\"div\");\n          placeholder.classList.add(this.classes.placeholder);\n          placeholder.innerHTML = placeholderText;\n          return placeholder;\n        }\n        renderValues() {\n          if (!this.settings.isMultiple) {\n            this.renderSingleValue();\n            return;\n          }\n          this.renderMultipleValues();\n          this.updateDeselectAll();\n        }\n        renderSingleValue() {\n          const selected = this.store.filter((o2) => {\n            return o2.selected && !o2.placeholder;\n          }, false);\n          const selectedSingle = selected.length > 0 ? selected[0] : null;\n          if (!selectedSingle) {\n            this.main.values.innerHTML = this.placeholder().outerHTML;\n          } else {\n            const singleValue = document.createElement(\"div\");\n            singleValue.classList.add(this.classes.single);\n            if (selectedSingle.html) {\n              singleValue.innerHTML = selectedSingle.html;\n            } else {\n              singleValue.innerText = selectedSingle.text;\n            }\n            this.main.values.innerHTML = singleValue.outerHTML;\n          }\n          if (!this.settings.allowDeselect || !selected.length) {\n            this.main.deselect.main.classList.add(this.classes.hide);\n          } else {\n            this.main.deselect.main.classList.remove(this.classes.hide);\n          }\n        }\n        renderMultipleValues() {\n          let currentNodes = this.main.values.childNodes;\n          let selectedOptions = this.store.filter((opt) => {\n            return opt.selected && opt.display;\n          }, false);\n          if (selectedOptions.length === 0) {\n            this.main.values.innerHTML = this.placeholder().outerHTML;\n            return;\n          } else {\n            const placeholder = this.main.values.querySelector(\".\" + this.classes.placeholder);\n            if (placeholder) {\n              placeholder.remove();\n            }\n          }\n          if (selectedOptions.length > this.settings.maxValuesShown) {\n            const singleValue = document.createElement(\"div\");\n            singleValue.classList.add(this.classes.max);\n            singleValue.textContent = this.settings.maxValuesMessage.replace(\"{number}\", selectedOptions.length.toString());\n            this.main.values.innerHTML = singleValue.outerHTML;\n            return;\n          } else {\n            const maxValuesMessage = this.main.values.querySelector(\".\" + this.classes.max);\n            if (maxValuesMessage) {\n              maxValuesMessage.remove();\n            }\n          }\n          if (this.settings.keepOrder) {\n            selectedOptions = this.store.selectedOrderOptions(selectedOptions);\n          }\n          let removeNodes = [];\n          for (let i3 = 0; i3 < currentNodes.length; i3++) {\n            const node = currentNodes[i3];\n            const id = node.getAttribute(\"data-id\");\n            if (id) {\n              const found = selectedOptions.filter((opt) => {\n                return opt.id === id;\n              }, false);\n              if (!found.length) {\n                removeNodes.push(node);\n              }\n            }\n          }\n          for (const n3 of removeNodes) {\n            n3.classList.add(this.classes.valueOut);\n            setTimeout(() => {\n              if (this.main.values.hasChildNodes() && this.main.values.contains(n3)) {\n                this.main.values.removeChild(n3);\n              }\n            }, 100);\n          }\n          currentNodes = this.main.values.childNodes;\n          for (let d2 = 0; d2 < selectedOptions.length; d2++) {\n            let shouldAdd = true;\n            for (let i3 = 0; i3 < currentNodes.length; i3++) {\n              if (selectedOptions[d2].id === String(currentNodes[i3].dataset.id)) {\n                shouldAdd = false;\n              }\n            }\n            if (shouldAdd) {\n              if (this.settings.keepOrder) {\n                this.main.values.appendChild(this.multipleValue(selectedOptions[d2]));\n              } else {\n                if (currentNodes.length === 0) {\n                  this.main.values.appendChild(this.multipleValue(selectedOptions[d2]));\n                } else if (d2 === 0) {\n                  this.main.values.insertBefore(this.multipleValue(selectedOptions[d2]), currentNodes[d2]);\n                } else {\n                  currentNodes[d2 - 1].insertAdjacentElement(\"afterend\", this.multipleValue(selectedOptions[d2]));\n                }\n              }\n            }\n          }\n        }\n        multipleValue(option) {\n          const value = document.createElement(\"div\");\n          value.classList.add(this.classes.value);\n          value.dataset.id = option.id;\n          const text2 = document.createElement(\"div\");\n          text2.classList.add(this.classes.valueText);\n          text2.textContent = option.text;\n          value.appendChild(text2);\n          if (!option.mandatory) {\n            const deleteDiv = document.createElement(\"div\");\n            deleteDiv.classList.add(this.classes.valueDelete);\n            deleteDiv.onclick = (e2) => {\n              e2.preventDefault();\n              e2.stopPropagation();\n              if (this.settings.disabled) {\n                return;\n              }\n              let shouldDelete = true;\n              const before = this.store.getSelectedOptions();\n              const after = before.filter((o2) => {\n                return o2.selected && o2.id !== option.id;\n              }, true);\n              if (this.settings.minSelected && after.length < this.settings.minSelected) {\n                return;\n              }\n              if (this.callbacks.beforeChange) {\n                shouldDelete = this.callbacks.beforeChange(after, before) === true;\n              }\n              if (shouldDelete) {\n                let selectedIds = [];\n                for (const o2 of after) {\n                  if (o2 instanceof Optgroup) {\n                    for (const c2 of o2.options) {\n                      selectedIds.push(c2.id);\n                    }\n                  }\n                  if (o2 instanceof Option) {\n                    selectedIds.push(o2.id);\n                  }\n                }\n                this.callbacks.setSelected(selectedIds, false);\n                if (this.settings.closeOnSelect) {\n                  this.callbacks.close();\n                }\n                if (this.callbacks.afterChange) {\n                  this.callbacks.afterChange(after);\n                }\n                this.updateDeselectAll();\n              }\n            };\n            const deleteSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n            deleteSvg.setAttribute(\"viewBox\", \"0 0 100 100\");\n            const deletePath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n            deletePath.setAttribute(\"d\", this.classes.optionDelete);\n            deleteSvg.appendChild(deletePath);\n            deleteDiv.appendChild(deleteSvg);\n            value.appendChild(deleteDiv);\n          }\n          return value;\n        }\n        contentDiv() {\n          const main2 = document.createElement(\"div\");\n          main2.dataset.id = this.settings.id;\n          const search = this.searchDiv();\n          main2.appendChild(search.main);\n          const list2 = this.listDiv();\n          main2.appendChild(list2);\n          return {\n            main: main2,\n            search,\n            list: list2\n          };\n        }\n        moveContent() {\n          if (this.settings.contentPosition === \"relative\") {\n            this.moveContentBelow();\n            return;\n          }\n          if (this.settings.openPosition === \"down\") {\n            this.moveContentBelow();\n            return;\n          } else if (this.settings.openPosition === \"up\") {\n            this.moveContentAbove();\n            return;\n          }\n          if (this.putContent() === \"up\") {\n            this.moveContentAbove();\n          } else {\n            this.moveContentBelow();\n          }\n        }\n        searchDiv() {\n          const main2 = document.createElement(\"div\");\n          const input = document.createElement(\"input\");\n          const addable = document.createElement(\"div\");\n          main2.classList.add(this.classes.search);\n          const searchReturn = {\n            main: main2,\n            input\n          };\n          if (!this.settings.showSearch) {\n            main2.classList.add(this.classes.hide);\n            input.readOnly = true;\n          }\n          input.type = \"search\";\n          input.placeholder = this.settings.searchPlaceholder;\n          input.tabIndex = -1;\n          input.setAttribute(\"aria-label\", this.settings.searchPlaceholder);\n          input.setAttribute(\"autocapitalize\", \"off\");\n          input.setAttribute(\"autocomplete\", \"off\");\n          input.setAttribute(\"autocorrect\", \"off\");\n          input.oninput = debounce((e2) => {\n            this.callbacks.search(e2.target.value);\n          }, 100);\n          input.onkeydown = (e2) => {\n            switch (e2.key) {\n              case \"ArrowUp\":\n              case \"ArrowDown\":\n                e2.key === \"ArrowDown\" ? this.highlight(\"down\") : this.highlight(\"up\");\n                return false;\n              case \"Tab\":\n                this.callbacks.close();\n                return true;\n              case \"Escape\":\n                this.callbacks.close();\n                return false;\n              case \" \":\n                const highlighted = this.content.list.querySelector(\".\" + this.classes.highlighted);\n                if (highlighted) {\n                  highlighted.click();\n                  return false;\n                }\n                return true;\n              case \"Enter\":\n                if (this.callbacks.addable) {\n                  addable.click();\n                  return false;\n                } else {\n                  const highlighted2 = this.content.list.querySelector(\".\" + this.classes.highlighted);\n                  if (highlighted2) {\n                    highlighted2.click();\n                    return false;\n                  }\n                }\n                return true;\n            }\n            return true;\n          };\n          main2.appendChild(input);\n          if (this.callbacks.addable) {\n            addable.classList.add(this.classes.addable);\n            const plus = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n            plus.setAttribute(\"viewBox\", \"0 0 100 100\");\n            const plusPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n            plusPath.setAttribute(\"d\", this.classes.addablePath);\n            plus.appendChild(plusPath);\n            addable.appendChild(plus);\n            addable.onclick = (e2) => {\n              e2.preventDefault();\n              e2.stopPropagation();\n              if (!this.callbacks.addable) {\n                return;\n              }\n              const inputValue = this.content.search.input.value.trim();\n              if (inputValue === \"\") {\n                this.content.search.input.focus();\n                return;\n              }\n              const runFinish = (oo) => {\n                let newOption = new Option(oo);\n                this.callbacks.addOption(newOption);\n                if (this.settings.isMultiple) {\n                  let ids = this.store.getSelected();\n                  ids.push(newOption.id);\n                  this.callbacks.setSelected(ids, true);\n                } else {\n                  this.callbacks.setSelected([newOption.id], true);\n                }\n                this.callbacks.search(\"\");\n                if (this.settings.closeOnSelect) {\n                  setTimeout(() => {\n                    this.callbacks.close();\n                  }, 100);\n                }\n              };\n              const addableValue = this.callbacks.addable(inputValue);\n              if (addableValue === false || addableValue === void 0 || addableValue === null) {\n                return;\n              }\n              if (addableValue instanceof Promise) {\n                addableValue.then((value) => {\n                  if (typeof value === \"string\") {\n                    runFinish({\n                      text: value,\n                      value\n                    });\n                  } else if (addableValue instanceof Error) {\n                    this.renderError(addableValue.message);\n                  } else {\n                    runFinish(value);\n                  }\n                });\n              } else if (typeof addableValue === \"string\") {\n                runFinish({\n                  text: addableValue,\n                  value: addableValue\n                });\n              } else if (addableValue instanceof Error) {\n                this.renderError(addableValue.message);\n              } else {\n                runFinish(addableValue);\n              }\n              return;\n            };\n            main2.appendChild(addable);\n            searchReturn.addable = {\n              main: addable,\n              svg: plus,\n              path: plusPath\n            };\n          }\n          return searchReturn;\n        }\n        searchFocus() {\n          this.content.search.input.focus();\n        }\n        getOptions(notPlaceholder = false, notDisabled = false, notHidden = false) {\n          let query = \".\" + this.classes.option;\n          if (notPlaceholder) {\n            query += \":not(.\" + this.classes.placeholder + \")\";\n          }\n          if (notDisabled) {\n            query += \":not(.\" + this.classes.disabled + \")\";\n          }\n          if (notHidden) {\n            query += \":not(.\" + this.classes.hide + \")\";\n          }\n          return Array.from(this.content.list.querySelectorAll(query));\n        }\n        highlight(dir) {\n          const options = this.getOptions(true, true, true);\n          if (options.length === 0) {\n            return;\n          }\n          if (options.length === 1) {\n            if (!options[0].classList.contains(this.classes.highlighted)) {\n              options[0].classList.add(this.classes.highlighted);\n              return;\n            }\n          }\n          let highlighted = false;\n          for (const o2 of options) {\n            if (o2.classList.contains(this.classes.highlighted)) {\n              highlighted = true;\n            }\n          }\n          if (!highlighted) {\n            for (const o2 of options) {\n              if (o2.classList.contains(this.classes.selected)) {\n                o2.classList.add(this.classes.highlighted);\n                break;\n              }\n            }\n          }\n          for (let i3 = 0; i3 < options.length; i3++) {\n            if (options[i3].classList.contains(this.classes.highlighted)) {\n              const prevOption = options[i3];\n              prevOption.classList.remove(this.classes.highlighted);\n              const prevParent = prevOption.parentElement;\n              if (prevParent && prevParent.classList.contains(this.classes.open)) {\n                const optgroupLabel = prevParent.querySelector(\".\" + this.classes.optgroupLabel);\n                if (optgroupLabel) {\n                  optgroupLabel.click();\n                }\n              }\n              let selectOption = options[dir === \"down\" ? i3 + 1 < options.length ? i3 + 1 : 0 : i3 - 1 >= 0 ? i3 - 1 : options.length - 1];\n              selectOption.classList.add(this.classes.highlighted);\n              this.ensureElementInView(this.content.list, selectOption);\n              const selectParent = selectOption.parentElement;\n              if (selectParent && selectParent.classList.contains(this.classes.close)) {\n                const optgroupLabel = selectParent.querySelector(\".\" + this.classes.optgroupLabel);\n                if (optgroupLabel) {\n                  optgroupLabel.click();\n                }\n              }\n              return;\n            }\n          }\n          options[dir === \"down\" ? 0 : options.length - 1].classList.add(this.classes.highlighted);\n          this.ensureElementInView(this.content.list, options[dir === \"down\" ? 0 : options.length - 1]);\n        }\n        listDiv() {\n          const options = document.createElement(\"div\");\n          options.classList.add(this.classes.list);\n          return options;\n        }\n        renderError(error2) {\n          this.content.list.innerHTML = \"\";\n          const errorDiv = document.createElement(\"div\");\n          errorDiv.classList.add(this.classes.error);\n          errorDiv.textContent = error2;\n          this.content.list.appendChild(errorDiv);\n        }\n        renderSearching() {\n          this.content.list.innerHTML = \"\";\n          const searchingDiv = document.createElement(\"div\");\n          searchingDiv.classList.add(this.classes.searching);\n          searchingDiv.textContent = this.settings.searchingText;\n          this.content.list.appendChild(searchingDiv);\n        }\n        renderOptions(data) {\n          this.content.list.innerHTML = \"\";\n          if (data.length === 0) {\n            const noResults = document.createElement(\"div\");\n            noResults.classList.add(this.classes.search);\n            if (this.callbacks.addable) {\n              noResults.innerHTML = this.settings.addableText.replace(\"{value}\", this.content.search.input.value);\n            } else {\n              noResults.innerHTML = this.settings.searchText;\n            }\n            this.content.list.appendChild(noResults);\n            return;\n          }\n          if (this.settings.allowDeselect && !this.settings.isMultiple) {\n            const placeholderOption = this.store.filter((o2) => o2.placeholder, false);\n            if (!placeholderOption.length) {\n              this.store.addOption(new Option({\n                text: \"\",\n                value: \"\",\n                selected: false,\n                placeholder: true\n              }), true);\n            }\n          }\n          for (const d2 of data) {\n            if (d2 instanceof Optgroup) {\n              const optgroupEl = document.createElement(\"div\");\n              optgroupEl.classList.add(this.classes.optgroup);\n              const optgroupLabel = document.createElement(\"div\");\n              optgroupLabel.classList.add(this.classes.optgroupLabel);\n              optgroupEl.appendChild(optgroupLabel);\n              const optgroupLabelText = document.createElement(\"div\");\n              optgroupLabelText.classList.add(this.classes.optgroupLabelText);\n              optgroupLabelText.textContent = d2.label;\n              optgroupLabel.appendChild(optgroupLabelText);\n              const optgroupActions = document.createElement(\"div\");\n              optgroupActions.classList.add(this.classes.optgroupActions);\n              optgroupLabel.appendChild(optgroupActions);\n              if (this.settings.isMultiple && d2.selectAll) {\n                const selectAll = document.createElement(\"div\");\n                selectAll.classList.add(this.classes.optgroupSelectAll);\n                let allSelected = true;\n                for (const o2 of d2.options) {\n                  if (!o2.selected) {\n                    allSelected = false;\n                    break;\n                  }\n                }\n                if (allSelected) {\n                  selectAll.classList.add(this.classes.selected);\n                }\n                const selectAllText = document.createElement(\"span\");\n                selectAllText.textContent = d2.selectAllText;\n                selectAll.appendChild(selectAllText);\n                const selectAllSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n                selectAllSvg.setAttribute(\"viewBox\", \"0 0 100 100\");\n                selectAll.appendChild(selectAllSvg);\n                const selectAllBox = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n                selectAllBox.setAttribute(\"d\", this.classes.optgroupSelectAllBox);\n                selectAllSvg.appendChild(selectAllBox);\n                const selectAllCheck = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n                selectAllCheck.setAttribute(\"d\", this.classes.optgroupSelectAllCheck);\n                selectAllSvg.appendChild(selectAllCheck);\n                selectAll.addEventListener(\"click\", (e2) => {\n                  e2.preventDefault();\n                  e2.stopPropagation();\n                  const currentSelected = this.store.getSelected();\n                  if (allSelected) {\n                    const newSelected = currentSelected.filter((s2) => {\n                      for (const o2 of d2.options) {\n                        if (s2 === o2.id) {\n                          return false;\n                        }\n                      }\n                      return true;\n                    });\n                    this.callbacks.setSelected(newSelected, true);\n                    return;\n                  } else {\n                    const newSelected = currentSelected.concat(d2.options.map((o2) => o2.id));\n                    for (const o2 of d2.options) {\n                      if (!this.store.getOptionByID(o2.id)) {\n                        this.callbacks.addOption(o2);\n                      }\n                    }\n                    this.callbacks.setSelected(newSelected, true);\n                    return;\n                  }\n                });\n                optgroupActions.appendChild(selectAll);\n              }\n              if (d2.closable !== \"off\") {\n                const optgroupClosable = document.createElement(\"div\");\n                optgroupClosable.classList.add(this.classes.optgroupClosable);\n                const optgroupClosableSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n                optgroupClosableSvg.setAttribute(\"viewBox\", \"0 0 100 100\");\n                optgroupClosableSvg.classList.add(this.classes.arrow);\n                optgroupClosable.appendChild(optgroupClosableSvg);\n                const optgroupClosableArrow = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n                optgroupClosableSvg.appendChild(optgroupClosableArrow);\n                if (d2.options.some((o2) => o2.selected) || this.content.search.input.value.trim() !== \"\") {\n                  optgroupClosable.classList.add(this.classes.open);\n                  optgroupClosableArrow.setAttribute(\"d\", this.classes.arrowOpen);\n                } else if (d2.closable === \"open\") {\n                  optgroupEl.classList.add(this.classes.open);\n                  optgroupClosableArrow.setAttribute(\"d\", this.classes.arrowOpen);\n                } else if (d2.closable === \"close\") {\n                  optgroupEl.classList.add(this.classes.close);\n                  optgroupClosableArrow.setAttribute(\"d\", this.classes.arrowClose);\n                }\n                optgroupLabel.addEventListener(\"click\", (e2) => {\n                  e2.preventDefault();\n                  e2.stopPropagation();\n                  if (optgroupEl.classList.contains(this.classes.close)) {\n                    optgroupEl.classList.remove(this.classes.close);\n                    optgroupEl.classList.add(this.classes.open);\n                    optgroupClosableArrow.setAttribute(\"d\", this.classes.arrowOpen);\n                  } else {\n                    optgroupEl.classList.remove(this.classes.open);\n                    optgroupEl.classList.add(this.classes.close);\n                    optgroupClosableArrow.setAttribute(\"d\", this.classes.arrowClose);\n                  }\n                });\n                optgroupActions.appendChild(optgroupClosable);\n              }\n              optgroupEl.appendChild(optgroupLabel);\n              for (const o2 of d2.options) {\n                optgroupEl.appendChild(this.option(o2));\n              }\n              this.content.list.appendChild(optgroupEl);\n            }\n            if (d2 instanceof Option) {\n              this.content.list.appendChild(this.option(d2));\n            }\n          }\n        }\n        option(option) {\n          if (option.placeholder) {\n            const placeholder = document.createElement(\"div\");\n            placeholder.classList.add(this.classes.option);\n            placeholder.classList.add(this.classes.hide);\n            return placeholder;\n          }\n          const optionEl = document.createElement(\"div\");\n          optionEl.dataset.id = option.id;\n          optionEl.classList.add(this.classes.option);\n          optionEl.setAttribute(\"role\", \"option\");\n          if (option.class) {\n            option.class.split(\" \").forEach((dataClass) => {\n              optionEl.classList.add(dataClass);\n            });\n          }\n          if (option.style) {\n            optionEl.style.cssText = option.style;\n          }\n          if (this.settings.searchHighlight && this.content.search.input.value.trim() !== \"\") {\n            optionEl.innerHTML = this.highlightText(option.html !== \"\" ? option.html : option.text, this.content.search.input.value, this.classes.searchHighlighter);\n          } else if (option.html !== \"\") {\n            optionEl.innerHTML = option.html;\n          } else {\n            optionEl.textContent = option.text;\n          }\n          if (this.settings.showOptionTooltips && optionEl.textContent) {\n            optionEl.setAttribute(\"title\", optionEl.textContent);\n          }\n          if (!option.display) {\n            optionEl.classList.add(this.classes.hide);\n          }\n          if (option.disabled) {\n            optionEl.classList.add(this.classes.disabled);\n          }\n          if (option.selected && this.settings.hideSelected) {\n            optionEl.classList.add(this.classes.hide);\n          }\n          if (option.selected) {\n            optionEl.classList.add(this.classes.selected);\n            optionEl.setAttribute(\"aria-selected\", \"true\");\n            this.main.main.setAttribute(\"aria-activedescendant\", optionEl.id);\n          } else {\n            optionEl.classList.remove(this.classes.selected);\n            optionEl.setAttribute(\"aria-selected\", \"false\");\n          }\n          optionEl.addEventListener(\"click\", (e2) => {\n            e2.preventDefault();\n            e2.stopPropagation();\n            const selectedOptions = this.store.getSelected();\n            const element = e2.currentTarget;\n            const elementID = String(element.dataset.id);\n            if (option.disabled || option.selected && !this.settings.allowDeselect) {\n              return;\n            }\n            if (this.settings.isMultiple && this.settings.maxSelected <= selectedOptions.length && !option.selected || this.settings.isMultiple && this.settings.minSelected >= selectedOptions.length && option.selected) {\n              return;\n            }\n            let shouldUpdate = false;\n            const before = this.store.getSelectedOptions();\n            let after = [];\n            if (this.settings.isMultiple) {\n              if (option.selected) {\n                after = before.filter((o2) => o2.id !== elementID);\n              } else {\n                after = before.concat(option);\n              }\n            }\n            if (!this.settings.isMultiple) {\n              if (option.selected) {\n                after = [];\n              } else {\n                after = [option];\n              }\n            }\n            if (!this.callbacks.beforeChange) {\n              shouldUpdate = true;\n            }\n            if (this.callbacks.beforeChange) {\n              if (this.callbacks.beforeChange(after, before) === false) {\n                shouldUpdate = false;\n              } else {\n                shouldUpdate = true;\n              }\n            }\n            if (shouldUpdate) {\n              if (!this.store.getOptionByID(elementID)) {\n                this.callbacks.addOption(option);\n              }\n              this.callbacks.setSelected(after.map((o2) => o2.id), false);\n              if (this.settings.closeOnSelect) {\n                this.callbacks.close();\n              }\n              if (this.callbacks.afterChange) {\n                this.callbacks.afterChange(after);\n              }\n            }\n          });\n          return optionEl;\n        }\n        destroy() {\n          this.main.main.remove();\n          this.content.main.remove();\n        }\n        highlightText(str, search, className) {\n          let completedString = str;\n          const regex2 = new RegExp(\"(?![^<]*>)(\" + search.trim() + \")(?![^<]*>[^<>]*</)\", \"i\");\n          if (!str.match(regex2)) {\n            return str;\n          }\n          const matchStartPosition = str.match(regex2).index;\n          const matchEndPosition = matchStartPosition + str.match(regex2)[0].toString().length;\n          const originalTextFoundByRegex = str.substring(matchStartPosition, matchEndPosition);\n          completedString = completedString.replace(regex2, `<mark class=\"${className}\">${originalTextFoundByRegex}</mark>`);\n          return completedString;\n        }\n        moveContentAbove() {\n          const mainHeight = this.main.main.offsetHeight;\n          const contentHeight = this.content.main.offsetHeight;\n          this.main.main.classList.remove(this.classes.openBelow);\n          this.main.main.classList.add(this.classes.openAbove);\n          this.content.main.classList.remove(this.classes.openBelow);\n          this.content.main.classList.add(this.classes.openAbove);\n          const containerRect = this.main.main.getBoundingClientRect();\n          this.content.main.style.margin = \"-\" + (mainHeight + contentHeight - 1) + \"px 0px 0px 0px\";\n          this.content.main.style.top = containerRect.top + containerRect.height + (this.settings.contentPosition === \"fixed\" ? 0 : window.scrollY) + \"px\";\n          this.content.main.style.left = containerRect.left + (this.settings.contentPosition === \"fixed\" ? 0 : window.scrollX) + \"px\";\n          this.content.main.style.width = containerRect.width + \"px\";\n        }\n        moveContentBelow() {\n          this.main.main.classList.remove(this.classes.openAbove);\n          this.main.main.classList.add(this.classes.openBelow);\n          this.content.main.classList.remove(this.classes.openAbove);\n          this.content.main.classList.add(this.classes.openBelow);\n          const containerRect = this.main.main.getBoundingClientRect();\n          this.content.main.style.margin = \"-1px 0px 0px 0px\";\n          if (this.settings.contentPosition !== \"relative\") {\n            this.content.main.style.top = containerRect.top + containerRect.height + (this.settings.contentPosition === \"fixed\" ? 0 : window.scrollY) + \"px\";\n            this.content.main.style.left = containerRect.left + (this.settings.contentPosition === \"fixed\" ? 0 : window.scrollX) + \"px\";\n            this.content.main.style.width = containerRect.width + \"px\";\n          }\n        }\n        ensureElementInView(container, element) {\n          const cTop = container.scrollTop + container.offsetTop;\n          const cBottom = cTop + container.clientHeight;\n          const eTop = element.offsetTop;\n          const eBottom = eTop + element.clientHeight;\n          if (eTop < cTop) {\n            container.scrollTop -= cTop - eTop;\n          } else if (eBottom > cBottom) {\n            container.scrollTop += eBottom - cBottom;\n          }\n        }\n        putContent() {\n          const mainHeight = this.main.main.offsetHeight;\n          const mainRect = this.main.main.getBoundingClientRect();\n          const contentHeight = this.content.main.offsetHeight;\n          const spaceBelow = window.innerHeight - (mainRect.top + mainHeight);\n          if (spaceBelow <= contentHeight) {\n            if (mainRect.top > contentHeight) {\n              return \"up\";\n            } else {\n              return \"down\";\n            }\n          }\n          return \"down\";\n        }\n        updateDeselectAll() {\n          if (!this.store || !this.settings) {\n            return;\n          }\n          const selected = this.store.getSelectedOptions();\n          const hasSelectedItems = selected && selected.length > 0;\n          const isMultiple = this.settings.isMultiple;\n          const allowDeselect = this.settings.allowDeselect;\n          const deselectButton = this.main.deselect.main;\n          const hideClass = this.classes.hide;\n          if (allowDeselect && !(isMultiple && !hasSelectedItems)) {\n            deselectButton.classList.remove(hideClass);\n          } else {\n            deselectButton.classList.add(hideClass);\n          }\n        }\n      }\n      class Select {\n        constructor(select) {\n          this.listen = false;\n          this.observer = null;\n          this.select = select;\n          this.valueChange = this.valueChange.bind(this);\n          this.select.addEventListener(\"change\", this.valueChange, {\n            passive: true\n          });\n          this.observer = new MutationObserver(this.observeCall.bind(this));\n          this.changeListen(true);\n        }\n        enable() {\n          this.select.disabled = false;\n        }\n        disable() {\n          this.select.disabled = true;\n        }\n        hideUI() {\n          this.select.tabIndex = -1;\n          this.select.style.display = \"none\";\n          this.select.setAttribute(\"aria-hidden\", \"true\");\n        }\n        showUI() {\n          this.select.removeAttribute(\"tabindex\");\n          this.select.style.display = \"\";\n          this.select.removeAttribute(\"aria-hidden\");\n        }\n        changeListen(listen) {\n          this.listen = listen;\n          if (listen) {\n            if (this.observer) {\n              this.observer.observe(this.select, {\n                subtree: true,\n                childList: true,\n                attributes: true\n              });\n            }\n          }\n          if (!listen) {\n            if (this.observer) {\n              this.observer.disconnect();\n            }\n          }\n        }\n        valueChange(ev) {\n          if (this.listen && this.onValueChange) {\n            this.onValueChange(this.getSelectedOptions());\n          }\n          return true;\n        }\n        observeCall(mutations) {\n          if (!this.listen) {\n            return;\n          }\n          let classChanged = false;\n          let disabledChanged = false;\n          let optgroupOptionChanged = false;\n          for (const m2 of mutations) {\n            if (m2.target === this.select) {\n              if (m2.attributeName === \"disabled\") {\n                disabledChanged = true;\n              }\n              if (m2.attributeName === \"class\") {\n                classChanged = true;\n              }\n              if (m2.type === \"childList\") {\n                for (const n3 of m2.addedNodes) {\n                  if (n3.nodeName === \"OPTION\" && n3.value === this.select.value) {\n                    this.select.dispatchEvent(new Event(\"change\"));\n                    break;\n                  }\n                }\n                optgroupOptionChanged = true;\n              }\n            }\n            if (m2.target.nodeName === \"OPTGROUP\" || m2.target.nodeName === \"OPTION\") {\n              optgroupOptionChanged = true;\n            }\n          }\n          if (classChanged && this.onClassChange) {\n            this.onClassChange(this.select.className.split(\" \"));\n          }\n          if (disabledChanged && this.onDisabledChange) {\n            this.changeListen(false);\n            this.onDisabledChange(this.select.disabled);\n            this.changeListen(true);\n          }\n          if (optgroupOptionChanged && this.onOptionsChange) {\n            this.changeListen(false);\n            this.onOptionsChange(this.getData());\n            this.changeListen(true);\n          }\n        }\n        getData() {\n          let data = [];\n          const nodes = this.select.childNodes;\n          for (const n3 of nodes) {\n            if (n3.nodeName === \"OPTGROUP\") {\n              data.push(this.getDataFromOptgroup(n3));\n            }\n            if (n3.nodeName === \"OPTION\") {\n              data.push(this.getDataFromOption(n3));\n            }\n          }\n          return data;\n        }\n        getDataFromOptgroup(optgroup) {\n          let data = {\n            id: optgroup.id,\n            label: optgroup.label,\n            selectAll: optgroup.dataset ? optgroup.dataset.selectall === \"true\" : false,\n            selectAllText: optgroup.dataset ? optgroup.dataset.selectalltext : \"Select all\",\n            closable: optgroup.dataset ? optgroup.dataset.closable : \"off\",\n            options: []\n          };\n          const options = optgroup.childNodes;\n          for (const o2 of options) {\n            if (o2.nodeName === \"OPTION\") {\n              data.options.push(this.getDataFromOption(o2));\n            }\n          }\n          return data;\n        }\n        getDataFromOption(option) {\n          return {\n            id: option.id,\n            value: option.value,\n            text: option.text,\n            html: option.dataset && option.dataset.html ? option.dataset.html : \"\",\n            selected: option.selected,\n            display: option.style.display !== \"none\",\n            disabled: option.disabled,\n            mandatory: option.dataset ? option.dataset.mandatory === \"true\" : false,\n            placeholder: option.dataset.placeholder === \"true\",\n            class: option.className,\n            style: option.style.cssText,\n            data: option.dataset\n          };\n        }\n        getSelectedOptions() {\n          let options = [];\n          const opts = this.select.childNodes;\n          for (const o2 of opts) {\n            if (o2.nodeName === \"OPTGROUP\") {\n              const optgroupOptions = o2.childNodes;\n              for (const oo of optgroupOptions) {\n                if (oo.nodeName === \"OPTION\") {\n                  const option = oo;\n                  if (option.selected) {\n                    options.push(this.getDataFromOption(option));\n                  }\n                }\n              }\n            }\n            if (o2.nodeName === \"OPTION\") {\n              const option = o2;\n              if (option.selected) {\n                options.push(this.getDataFromOption(option));\n              }\n            }\n          }\n          return options;\n        }\n        getSelectedValues() {\n          return this.getSelectedOptions().map((option) => option.value);\n        }\n        setSelected(ids) {\n          this.changeListen(false);\n          const options = this.select.childNodes;\n          for (const o2 of options) {\n            if (o2.nodeName === \"OPTGROUP\") {\n              const optgroup = o2;\n              const optgroupOptions = optgroup.childNodes;\n              for (const oo of optgroupOptions) {\n                if (oo.nodeName === \"OPTION\") {\n                  const option = oo;\n                  option.selected = ids.includes(option.id);\n                }\n              }\n            }\n            if (o2.nodeName === \"OPTION\") {\n              const option = o2;\n              option.selected = ids.includes(option.id);\n            }\n          }\n          this.changeListen(true);\n        }\n        setSelectedByValue(values) {\n          this.changeListen(false);\n          const options = this.select.childNodes;\n          for (const o2 of options) {\n            if (o2.nodeName === \"OPTGROUP\") {\n              const optgroup = o2;\n              const optgroupOptions = optgroup.childNodes;\n              for (const oo of optgroupOptions) {\n                if (oo.nodeName === \"OPTION\") {\n                  const option = oo;\n                  option.selected = values.includes(option.value);\n                }\n              }\n            }\n            if (o2.nodeName === \"OPTION\") {\n              const option = o2;\n              option.selected = values.includes(option.value);\n            }\n          }\n          this.changeListen(true);\n        }\n        updateSelect(id, style, classes) {\n          this.changeListen(false);\n          if (id) {\n            this.select.dataset.id = id;\n          }\n          if (style) {\n            this.select.style.cssText = style;\n          }\n          if (classes) {\n            this.select.className = \"\";\n            classes.forEach((c2) => {\n              if (c2.trim() !== \"\") {\n                this.select.classList.add(c2.trim());\n              }\n            });\n          }\n          this.changeListen(true);\n        }\n        updateOptions(data) {\n          this.changeListen(false);\n          this.select.innerHTML = \"\";\n          for (const d2 of data) {\n            if (d2 instanceof Optgroup) {\n              this.select.appendChild(this.createOptgroup(d2));\n            }\n            if (d2 instanceof Option) {\n              this.select.appendChild(this.createOption(d2));\n            }\n          }\n          this.select.dispatchEvent(new Event(\"change\", { bubbles: true }));\n          this.changeListen(true);\n        }\n        createOptgroup(optgroup) {\n          const optgroupEl = document.createElement(\"optgroup\");\n          optgroupEl.id = optgroup.id;\n          optgroupEl.label = optgroup.label;\n          if (optgroup.selectAll) {\n            optgroupEl.dataset.selectAll = \"true\";\n          }\n          if (optgroup.closable !== \"off\") {\n            optgroupEl.dataset.closable = optgroup.closable;\n          }\n          if (optgroup.options) {\n            for (const o2 of optgroup.options) {\n              optgroupEl.appendChild(this.createOption(o2));\n            }\n          }\n          return optgroupEl;\n        }\n        createOption(info) {\n          const optionEl = document.createElement(\"option\");\n          optionEl.id = info.id;\n          optionEl.value = info.value;\n          optionEl.textContent = info.text;\n          if (info.html !== \"\") {\n            optionEl.setAttribute(\"data-html\", info.html);\n          }\n          if (info.selected) {\n            optionEl.selected = info.selected;\n          }\n          if (info.disabled) {\n            optionEl.disabled = true;\n          }\n          if (!info.display) {\n            optionEl.style.display = \"none\";\n          }\n          if (info.placeholder) {\n            optionEl.setAttribute(\"data-placeholder\", \"true\");\n          }\n          if (info.mandatory) {\n            optionEl.setAttribute(\"data-mandatory\", \"true\");\n          }\n          if (info.class) {\n            info.class.split(\" \").forEach((optionClass) => {\n              optionEl.classList.add(optionClass);\n            });\n          }\n          if (info.data && typeof info.data === \"object\") {\n            Object.keys(info.data).forEach((key) => {\n              optionEl.setAttribute(\"data-\" + kebabCase(key), info.data[key]);\n            });\n          }\n          return optionEl;\n        }\n        destroy() {\n          this.changeListen(false);\n          this.select.removeEventListener(\"change\", this.valueChange);\n          if (this.observer) {\n            this.observer.disconnect();\n            this.observer = null;\n          }\n          delete this.select.dataset.id;\n          this.showUI();\n        }\n      }\n      class Settings {\n        constructor(settings) {\n          this.id = \"\";\n          this.style = \"\";\n          this.class = [];\n          this.isMultiple = false;\n          this.isOpen = false;\n          this.isFullOpen = false;\n          this.intervalMove = null;\n          if (!settings) {\n            settings = {};\n          }\n          this.id = \"ss-\" + generateID();\n          this.style = settings.style || \"\";\n          this.class = settings.class || [];\n          this.disabled = settings.disabled !== void 0 ? settings.disabled : false;\n          this.alwaysOpen = settings.alwaysOpen !== void 0 ? settings.alwaysOpen : false;\n          this.showSearch = settings.showSearch !== void 0 ? settings.showSearch : true;\n          this.focusSearch = settings.focusSearch !== void 0 ? settings.focusSearch : true;\n          this.ariaLabel = settings.ariaLabel || \"Combobox\";\n          this.searchPlaceholder = settings.searchPlaceholder || \"Search\";\n          this.searchText = settings.searchText || \"No Results\";\n          this.searchingText = settings.searchingText || \"Searching...\";\n          this.searchHighlight = settings.searchHighlight !== void 0 ? settings.searchHighlight : false;\n          this.closeOnSelect = settings.closeOnSelect !== void 0 ? settings.closeOnSelect : true;\n          this.contentLocation = settings.contentLocation || document.body;\n          this.contentPosition = settings.contentPosition || \"absolute\";\n          this.openPosition = settings.openPosition || \"auto\";\n          this.placeholderText = settings.placeholderText !== void 0 ? settings.placeholderText : \"Select Value\";\n          this.allowDeselect = settings.allowDeselect !== void 0 ? settings.allowDeselect : false;\n          this.hideSelected = settings.hideSelected !== void 0 ? settings.hideSelected : false;\n          this.keepOrder = settings.keepOrder !== void 0 ? settings.keepOrder : false;\n          this.showOptionTooltips = settings.showOptionTooltips !== void 0 ? settings.showOptionTooltips : false;\n          this.minSelected = settings.minSelected || 0;\n          this.maxSelected = settings.maxSelected || 1e3;\n          this.timeoutDelay = settings.timeoutDelay || 200;\n          this.maxValuesShown = settings.maxValuesShown || 20;\n          this.maxValuesMessage = settings.maxValuesMessage || \"{number} selected\";\n          this.addableText = settings.addableText || 'Press \"Enter\" to add {value}';\n        }\n      }\n      class SlimSelect2 {\n        constructor(config2) {\n          var _a3;\n          this.events = {\n            search: void 0,\n            searchFilter: (opt, search) => {\n              return opt.text.toLowerCase().indexOf(search.toLowerCase()) !== -1;\n            },\n            addable: void 0,\n            beforeChange: void 0,\n            afterChange: void 0,\n            beforeOpen: void 0,\n            afterOpen: void 0,\n            beforeClose: void 0,\n            afterClose: void 0\n          };\n          this.windowResize = debounce(() => {\n            if (!this.settings.isOpen && !this.settings.isFullOpen) {\n              return;\n            }\n            this.render.moveContent();\n          });\n          this.windowScroll = debounce(() => {\n            if (!this.settings.isOpen && !this.settings.isFullOpen) {\n              return;\n            }\n            this.render.moveContent();\n          });\n          this.documentClick = (e2) => {\n            if (!this.settings.isOpen) {\n              return;\n            }\n            if (e2.target && !hasClassInTree(e2.target, this.settings.id)) {\n              this.close(e2.type);\n            }\n          };\n          this.windowVisibilityChange = () => {\n            if (document.hidden) {\n              this.close();\n            }\n          };\n          this.selectEl = typeof config2.select === \"string\" ? document.querySelector(config2.select) : config2.select;\n          if (!this.selectEl) {\n            if (config2.events && config2.events.error) {\n              config2.events.error(new Error(\"Could not find select element\"));\n            }\n            return;\n          }\n          if (this.selectEl.tagName !== \"SELECT\") {\n            if (config2.events && config2.events.error) {\n              config2.events.error(new Error(\"Element isnt of type select\"));\n            }\n            return;\n          }\n          if (this.selectEl.dataset.ssid) {\n            this.destroy();\n          }\n          this.settings = new Settings(config2.settings);\n          this.cssClasses = new CssClasses(config2.cssClasses);\n          const debounceEvents = [\"afterChange\", \"beforeOpen\", \"afterOpen\", \"beforeClose\", \"afterClose\"];\n          for (const key in config2.events) {\n            if (!config2.events.hasOwnProperty(key)) {\n              continue;\n            }\n            if (debounceEvents.indexOf(key) !== -1) {\n              this.events[key] = debounce(config2.events[key], 100);\n            } else {\n              this.events[key] = config2.events[key];\n            }\n          }\n          this.settings.disabled = ((_a3 = config2.settings) === null || _a3 === void 0 ? void 0 : _a3.disabled) ? config2.settings.disabled : this.selectEl.disabled;\n          this.settings.isMultiple = this.selectEl.multiple;\n          this.settings.style = this.selectEl.style.cssText;\n          this.settings.class = this.selectEl.className.split(\" \");\n          this.select = new Select(this.selectEl);\n          this.select.updateSelect(this.settings.id, this.settings.style, this.settings.class);\n          this.select.hideUI();\n          this.select.onValueChange = (options) => {\n            this.setSelected(options.map((option) => option.id));\n          };\n          this.select.onClassChange = (classes) => {\n            this.settings.class = classes;\n            this.render.updateClassStyles();\n          };\n          this.select.onDisabledChange = (disabled) => {\n            if (disabled) {\n              this.disable();\n            } else {\n              this.enable();\n            }\n          };\n          this.select.onOptionsChange = (data) => {\n            this.setData(data);\n          };\n          this.store = new Store(this.settings.isMultiple ? \"multiple\" : \"single\", config2.data ? config2.data : this.select.getData());\n          if (config2.data) {\n            this.select.updateOptions(this.store.getData());\n          }\n          const renderCallbacks = {\n            open: this.open.bind(this),\n            close: this.close.bind(this),\n            addable: this.events.addable ? this.events.addable : void 0,\n            setSelected: this.setSelected.bind(this),\n            addOption: this.addOption.bind(this),\n            search: this.search.bind(this),\n            beforeChange: this.events.beforeChange,\n            afterChange: this.events.afterChange\n          };\n          this.render = new Render(this.settings, this.cssClasses, this.store, renderCallbacks);\n          this.render.renderValues();\n          this.render.renderOptions(this.store.getData());\n          const selectAriaLabel = this.selectEl.getAttribute(\"aria-label\");\n          const selectAriaLabelledBy = this.selectEl.getAttribute(\"aria-labelledby\");\n          if (selectAriaLabel) {\n            this.render.main.main.setAttribute(\"aria-label\", selectAriaLabel);\n          } else if (selectAriaLabelledBy) {\n            this.render.main.main.setAttribute(\"aria-labelledby\", selectAriaLabelledBy);\n          }\n          if (this.selectEl.parentNode) {\n            this.selectEl.parentNode.insertBefore(this.render.main.main, this.selectEl.nextSibling);\n          }\n          window.addEventListener(\"resize\", this.windowResize, false);\n          if (this.settings.openPosition === \"auto\") {\n            window.addEventListener(\"scroll\", this.windowScroll, false);\n          }\n          document.addEventListener(\"visibilitychange\", this.windowVisibilityChange);\n          if (this.settings.disabled) {\n            this.disable();\n          }\n          if (this.settings.alwaysOpen) {\n            this.open();\n          }\n          this.selectEl.slim = this;\n        }\n        enable() {\n          this.settings.disabled = false;\n          this.select.enable();\n          this.render.enable();\n        }\n        disable() {\n          this.settings.disabled = true;\n          this.select.disable();\n          this.render.disable();\n        }\n        getData() {\n          return this.store.getData();\n        }\n        setData(data) {\n          const selected = this.store.getSelected();\n          const err = this.store.validateDataArray(data);\n          if (err) {\n            if (this.events.error) {\n              this.events.error(err);\n            }\n            return;\n          }\n          this.store.setData(data);\n          const dataClean = this.store.getData();\n          this.select.updateOptions(dataClean);\n          this.render.renderValues();\n          this.render.renderOptions(dataClean);\n          if (this.events.afterChange && !isEqual2(selected, this.store.getSelected())) {\n            this.events.afterChange(this.store.getSelectedOptions());\n          }\n        }\n        getSelected() {\n          let options = this.store.getSelectedOptions();\n          if (this.settings.keepOrder) {\n            options = this.store.selectedOrderOptions(options);\n          }\n          return options.map((option) => option.value);\n        }\n        setSelected(values, runAfterChange = true) {\n          const selected = this.store.getSelected();\n          const options = this.store.getDataOptions();\n          values = Array.isArray(values) ? values : [values];\n          const ids = [];\n          for (const value of values) {\n            if (options.find((option) => option.id == value)) {\n              ids.push(value);\n              continue;\n            }\n            for (const option of options.filter((option2) => option2.value == value)) {\n              ids.push(option.id);\n            }\n          }\n          this.store.setSelectedBy(\"id\", ids);\n          const data = this.store.getData();\n          this.select.updateOptions(data);\n          this.render.renderValues();\n          if (this.render.content.search.input.value !== \"\") {\n            this.search(this.render.content.search.input.value);\n          } else {\n            this.render.renderOptions(data);\n          }\n          if (runAfterChange && this.events.afterChange && !isEqual2(selected, this.store.getSelected())) {\n            this.events.afterChange(this.store.getSelectedOptions());\n          }\n        }\n        addOption(option) {\n          const selected = this.store.getSelected();\n          if (!this.store.getDataOptions().some((o2) => {\n            var _a3;\n            return o2.value === ((_a3 = option.value) !== null && _a3 !== void 0 ? _a3 : option.text);\n          })) {\n            this.store.addOption(option);\n          }\n          const data = this.store.getData();\n          this.select.updateOptions(data);\n          this.render.renderValues();\n          this.render.renderOptions(data);\n          if (this.events.afterChange && !isEqual2(selected, this.store.getSelected())) {\n            this.events.afterChange(this.store.getSelectedOptions());\n          }\n        }\n        open() {\n          if (this.settings.disabled || this.settings.isOpen) {\n            return;\n          }\n          if (this.events.beforeOpen) {\n            this.events.beforeOpen();\n          }\n          this.render.open();\n          if (this.settings.showSearch && this.settings.focusSearch) {\n            this.render.searchFocus();\n          }\n          this.settings.isOpen = true;\n          setTimeout(() => {\n            if (this.events.afterOpen) {\n              this.events.afterOpen();\n            }\n            if (this.settings.isOpen) {\n              this.settings.isFullOpen = true;\n            }\n            document.addEventListener(\"click\", this.documentClick);\n          }, this.settings.timeoutDelay);\n          if (this.settings.contentPosition === \"absolute\") {\n            if (this.settings.intervalMove) {\n              clearInterval(this.settings.intervalMove);\n            }\n            this.settings.intervalMove = setInterval(this.render.moveContent.bind(this.render), 500);\n          }\n        }\n        close(eventType = null) {\n          if (!this.settings.isOpen || this.settings.alwaysOpen) {\n            return;\n          }\n          if (this.events.beforeClose) {\n            this.events.beforeClose();\n          }\n          this.render.close();\n          if (this.render.content.search.input.value !== \"\") {\n            this.search(\"\");\n          }\n          this.render.mainFocus(eventType);\n          this.settings.isOpen = false;\n          this.settings.isFullOpen = false;\n          setTimeout(() => {\n            if (this.events.afterClose) {\n              this.events.afterClose();\n            }\n            document.removeEventListener(\"click\", this.documentClick);\n          }, this.settings.timeoutDelay);\n          if (this.settings.intervalMove) {\n            clearInterval(this.settings.intervalMove);\n          }\n        }\n        search(value) {\n          if (this.render.content.search.input.value !== value) {\n            this.render.content.search.input.value = value;\n          }\n          if (!this.events.search) {\n            this.render.renderOptions(value === \"\" ? this.store.getData() : this.store.search(value, this.events.searchFilter));\n            return;\n          }\n          this.render.renderSearching();\n          const searchResp = this.events.search(value, this.store.getSelectedOptions());\n          if (searchResp instanceof Promise) {\n            searchResp.then((data) => {\n              this.render.renderOptions(this.store.partialToFullData(data));\n            }).catch((err) => {\n              this.render.renderError(typeof err === \"string\" ? err : err.message);\n            });\n            return;\n          } else if (Array.isArray(searchResp)) {\n            this.render.renderOptions(this.store.partialToFullData(searchResp));\n          } else {\n            this.render.renderError(\"Search event must return a promise or an array of data\");\n          }\n        }\n        destroy() {\n          document.removeEventListener(\"click\", this.documentClick);\n          window.removeEventListener(\"resize\", this.windowResize, false);\n          if (this.settings.openPosition === \"auto\") {\n            window.removeEventListener(\"scroll\", this.windowScroll, false);\n          }\n          document.removeEventListener(\"visibilitychange\", this.windowVisibilityChange);\n          this.store.setData([]);\n          this.render.destroy();\n          this.select.destroy();\n        }\n      }\n      return SlimSelect2;\n    });\n  })(slimselect$1);\n  return slimselect$1.exports;\n}\nvar slimselectExports = requireSlimselect();\nconst SlimSelect = /* @__PURE__ */ getDefaultExportFromCjs(slimselectExports);\nconst AutocompletionMixin = {\n  name: \"autocompletion-mixin\",\n  use: [TranslationMixin],\n  attributes: {\n    searchText: {\n      type: String,\n      default: null,\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"searchText\");\n      }\n    },\n    searchPlaceholder: {\n      type: String,\n      default: null,\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"searchPlaceholder\");\n      }\n    }\n  },\n  initialState: {\n    slimSelect: null\n  },\n  created() {\n    importInlineCSS(\n      \"slimselect-base\",\n      () => import(\"./slimselect-CT2Oyr_0.js\")\n    );\n    this.slimSelect = null;\n    this.addToAttributes(true, \"autocomplete\");\n    this.listCallbacks.attach(\n      this.addCallback.bind(this),\n      \"AutocompletionMixin:addCallback\"\n    );\n  },\n  detached() {\n    var _a3;\n    (_a3 = this.slimSelect) == null ? void 0 : _a3.destroy();\n    this.slimSelect = null;\n  },\n  addCallback(value, listCallbacks) {\n    asyncQuerySelector(\"select:has(option)\", this.element).then((select) => {\n      this.initSlimSelect(select);\n    });\n    const nextProcessor = listCallbacks.shift();\n    if (nextProcessor) nextProcessor(value, listCallbacks);\n  },\n  async initSlimSelect(select) {\n    var _a3;\n    (_a3 = this.slimSelect) == null ? void 0 : _a3.destroy();\n    const slimSelect = new SlimSelect({\n      select,\n      settings: {\n        contentPosition: \"fixed\",\n        placeholderText: this.placeholder || this.t(\"autocompletion.placeholder\"),\n        searchText: this.searchText || this.t(\"autocompletion.searchText\"),\n        searchPlaceholder: this.searchPlaceholder || this.t(\"autocompletion.searchPlaceholder\"),\n        contentLocation: this.element\n      },\n      events: {\n        afterChange: () => {\n          this.element.dispatchEvent(new Event(\"input\", { bubbles: true }));\n        },\n        searchFilter: (option, filterValue) => fuzzyCompare(option.text, filterValue)\n      }\n    });\n    this.slimSelect = slimSelect;\n    this.element.addEventListener(\"input\", (e2) => {\n      if (e2.target !== this.element) {\n        e2.stopPropagation();\n      }\n    });\n  }\n};\nvar tinymce$2 = { exports: {} };\nvar hasRequiredTinymce;\nfunction requireTinymce() {\n  if (hasRequiredTinymce) return tinymce$2.exports;\n  hasRequiredTinymce = 1;\n  (function(module2) {\n    (function() {\n      var typeOf$1 = function(x2) {\n        if (x2 === null) {\n          return \"null\";\n        }\n        if (x2 === void 0) {\n          return \"undefined\";\n        }\n        var t2 = typeof x2;\n        if (t2 === \"object\" && (Array.prototype.isPrototypeOf(x2) || x2.constructor && x2.constructor.name === \"Array\")) {\n          return \"array\";\n        }\n        if (t2 === \"object\" && (String.prototype.isPrototypeOf(x2) || x2.constructor && x2.constructor.name === \"String\")) {\n          return \"string\";\n        }\n        return t2;\n      };\n      var isEquatableType = function(x2) {\n        return [\n          \"undefined\",\n          \"boolean\",\n          \"number\",\n          \"string\",\n          \"function\",\n          \"xml\",\n          \"null\"\n        ].indexOf(x2) !== -1;\n      };\n      var sort$1 = function(xs, compareFn) {\n        var clone2 = Array.prototype.slice.call(xs);\n        return clone2.sort(compareFn);\n      };\n      var contramap = function(eqa, f2) {\n        return eq$2(function(x2, y2) {\n          return eqa.eq(f2(x2), f2(y2));\n        });\n      };\n      var eq$2 = function(f2) {\n        return { eq: f2 };\n      };\n      var tripleEq = eq$2(function(x2, y2) {\n        return x2 === y2;\n      });\n      var eqString = tripleEq;\n      var eqArray = function(eqa) {\n        return eq$2(function(x2, y2) {\n          if (x2.length !== y2.length) {\n            return false;\n          }\n          var len = x2.length;\n          for (var i3 = 0; i3 < len; i3++) {\n            if (!eqa.eq(x2[i3], y2[i3])) {\n              return false;\n            }\n          }\n          return true;\n        });\n      };\n      var eqSortedArray = function(eqa, compareFn) {\n        return contramap(eqArray(eqa), function(xs) {\n          return sort$1(xs, compareFn);\n        });\n      };\n      var eqRecord = function(eqa) {\n        return eq$2(function(x2, y2) {\n          var kx = Object.keys(x2);\n          var ky = Object.keys(y2);\n          if (!eqSortedArray(eqString).eq(kx, ky)) {\n            return false;\n          }\n          var len = kx.length;\n          for (var i3 = 0; i3 < len; i3++) {\n            var q = kx[i3];\n            if (!eqa.eq(x2[q], y2[q])) {\n              return false;\n            }\n          }\n          return true;\n        });\n      };\n      var eqAny = eq$2(function(x2, y2) {\n        if (x2 === y2) {\n          return true;\n        }\n        var tx = typeOf$1(x2);\n        var ty = typeOf$1(y2);\n        if (tx !== ty) {\n          return false;\n        }\n        if (isEquatableType(tx)) {\n          return x2 === y2;\n        } else if (tx === \"array\") {\n          return eqArray(eqAny).eq(x2, y2);\n        } else if (tx === \"object\") {\n          return eqRecord(eqAny).eq(x2, y2);\n        }\n        return false;\n      });\n      const getPrototypeOf$1 = Object.getPrototypeOf;\n      const hasProto = (v2, constructor, predicate) => {\n        var _a3;\n        if (predicate(v2, constructor.prototype)) {\n          return true;\n        } else {\n          return ((_a3 = v2.constructor) === null || _a3 === void 0 ? void 0 : _a3.name) === constructor.name;\n        }\n      };\n      const typeOf = (x2) => {\n        const t2 = typeof x2;\n        if (x2 === null) {\n          return \"null\";\n        } else if (t2 === \"object\" && Array.isArray(x2)) {\n          return \"array\";\n        } else if (t2 === \"object\" && hasProto(x2, String, (o2, proto) => proto.isPrototypeOf(o2))) {\n          return \"string\";\n        } else {\n          return t2;\n        }\n      };\n      const isType$1 = (type2) => (value2) => typeOf(value2) === type2;\n      const isSimpleType = (type2) => (value2) => typeof value2 === type2;\n      const eq$1 = (t2) => (a2) => t2 === a2;\n      const is$4 = (value2, constructor) => isObject2(value2) && hasProto(value2, constructor, (o2, proto) => getPrototypeOf$1(o2) === proto);\n      const isString2 = isType$1(\"string\");\n      const isObject2 = isType$1(\"object\");\n      const isPlainObject2 = (value2) => is$4(value2, Object);\n      const isArray$1 = isType$1(\"array\");\n      const isNull = eq$1(null);\n      const isBoolean2 = isSimpleType(\"boolean\");\n      const isUndefined2 = eq$1(void 0);\n      const isNullable = (a2) => a2 === null || a2 === void 0;\n      const isNonNullable = (a2) => !isNullable(a2);\n      const isFunction2 = isSimpleType(\"function\");\n      const isNumber2 = isSimpleType(\"number\");\n      const isArrayOf = (value2, pred) => {\n        if (isArray$1(value2)) {\n          for (let i3 = 0, len = value2.length; i3 < len; ++i3) {\n            if (!pred(value2[i3])) {\n              return false;\n            }\n          }\n          return true;\n        }\n        return false;\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) => (a2) => fbc(fab(a2));\n      const constant2 = (value2) => {\n        return () => {\n          return value2;\n        };\n      };\n      const identity2 = (x2) => {\n        return x2;\n      };\n      const tripleEquals = (a2, b2) => {\n        return a2 === b2;\n      };\n      function curry(fn, ...initialArgs) {\n        return (...restArgs) => {\n          const all2 = initialArgs.concat(restArgs);\n          return fn.apply(null, all2);\n        };\n      }\n      const not = (f2) => (t2) => !f2(t2);\n      const die = (msg) => {\n        return () => {\n          throw new Error(msg);\n        };\n      };\n      const apply$1 = (f2) => {\n        return f2();\n      };\n      const call = (f2) => {\n        f2();\n      };\n      const never = constant2(false);\n      const always = constant2(true);\n      class Optional {\n        constructor(tag, value2) {\n          this.tag = tag;\n          this.value = value2;\n        }\n        static some(value2) {\n          return new Optional(true, value2);\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(binder2) {\n          if (this.tag) {\n            return binder2(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(value2) {\n          return isNonNullable(value2) ? Optional.some(value2) : 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      const nativeSlice = Array.prototype.slice;\n      const nativeIndexOf = Array.prototype.indexOf;\n      const nativePush = Array.prototype.push;\n      const rawIndexOf = (ts, t2) => nativeIndexOf.call(ts, t2);\n      const indexOf$1 = (xs, x2) => {\n        const r4 = rawIndexOf(xs, x2);\n        return r4 === -1 ? Optional.none() : Optional.some(r4);\n      };\n      const contains$2 = (xs, x2) => rawIndexOf(xs, x2) > -1;\n      const exists = (xs, pred) => {\n        for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n          const x2 = xs[i3];\n          if (pred(x2, i3)) {\n            return true;\n          }\n        }\n        return false;\n      };\n      const map$3 = (xs, f2) => {\n        const len = xs.length;\n        const r4 = new Array(len);\n        for (let i3 = 0; i3 < len; i3++) {\n          const x2 = xs[i3];\n          r4[i3] = f2(x2, i3);\n        }\n        return r4;\n      };\n      const each$g = (xs, f2) => {\n        for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n          const x2 = xs[i3];\n          f2(x2, i3);\n        }\n      };\n      const eachr = (xs, f2) => {\n        for (let i3 = xs.length - 1; i3 >= 0; i3--) {\n          const x2 = xs[i3];\n          f2(x2, i3);\n        }\n      };\n      const partition$2 = (xs, pred) => {\n        const pass = [];\n        const fail = [];\n        for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n          const x2 = xs[i3];\n          const arr = pred(x2, i3) ? pass : fail;\n          arr.push(x2);\n        }\n        return {\n          pass,\n          fail\n        };\n      };\n      const filter$6 = (xs, pred) => {\n        const r4 = [];\n        for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n          const x2 = xs[i3];\n          if (pred(x2, i3)) {\n            r4.push(x2);\n          }\n        }\n        return r4;\n      };\n      const foldr = (xs, f2, acc) => {\n        eachr(xs, (x2, i3) => {\n          acc = f2(acc, x2, i3);\n        });\n        return acc;\n      };\n      const foldl = (xs, f2, acc) => {\n        each$g(xs, (x2, i3) => {\n          acc = f2(acc, x2, i3);\n        });\n        return acc;\n      };\n      const findUntil$1 = (xs, pred, until) => {\n        for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n          const x2 = xs[i3];\n          if (pred(x2, i3)) {\n            return Optional.some(x2);\n          } else if (until(x2, i3)) {\n            break;\n          }\n        }\n        return Optional.none();\n      };\n      const find$2 = (xs, pred) => {\n        return findUntil$1(xs, pred, never);\n      };\n      const findIndex$2 = (xs, pred) => {\n        for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n          const x2 = xs[i3];\n          if (pred(x2, i3)) {\n            return Optional.some(i3);\n          }\n        }\n        return Optional.none();\n      };\n      const flatten = (xs) => {\n        const r4 = [];\n        for (let i3 = 0, len = xs.length; i3 < len; ++i3) {\n          if (!isArray$1(xs[i3])) {\n            throw new Error(\"Arr.flatten item \" + i3 + \" was not an array, input: \" + xs);\n          }\n          nativePush.apply(r4, xs[i3]);\n        }\n        return r4;\n      };\n      const bind$3 = (xs, f2) => flatten(map$3(xs, f2));\n      const forall = (xs, pred) => {\n        for (let i3 = 0, len = xs.length; i3 < len; ++i3) {\n          const x2 = xs[i3];\n          if (pred(x2, i3) !== true) {\n            return false;\n          }\n        }\n        return true;\n      };\n      const reverse = (xs) => {\n        const r4 = nativeSlice.call(xs, 0);\n        r4.reverse();\n        return r4;\n      };\n      const difference = (a1, a2) => filter$6(a1, (x2) => !contains$2(a2, x2));\n      const mapToObject = (xs, f2) => {\n        const r4 = {};\n        for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n          const x2 = xs[i3];\n          r4[String(x2)] = f2(x2, i3);\n        }\n        return r4;\n      };\n      const sort = (xs, comparator) => {\n        const copy2 = nativeSlice.call(xs, 0);\n        copy2.sort(comparator);\n        return copy2;\n      };\n      const get$b = (xs, i3) => i3 >= 0 && i3 < xs.length ? Optional.some(xs[i3]) : Optional.none();\n      const head = (xs) => get$b(xs, 0);\n      const last$3 = (xs) => get$b(xs, xs.length - 1);\n      const from = isFunction2(Array.from) ? Array.from : (x2) => nativeSlice.call(x2);\n      const findMap = (arr, f2) => {\n        for (let i3 = 0; i3 < arr.length; i3++) {\n          const r4 = f2(arr[i3], i3);\n          if (r4.isSome()) {\n            return r4;\n          }\n        }\n        return Optional.none();\n      };\n      const unique$1 = (xs, comparator) => {\n        const r4 = [];\n        const isDuplicated = isFunction2(comparator) ? (x2) => exists(r4, (i3) => comparator(i3, x2)) : (x2) => contains$2(r4, x2);\n        for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n          const x2 = xs[i3];\n          if (!isDuplicated(x2)) {\n            r4.push(x2);\n          }\n        }\n        return r4;\n      };\n      const keys2 = Object.keys;\n      const hasOwnProperty$22 = Object.hasOwnProperty;\n      const each$f = (obj, f2) => {\n        const props = keys2(obj);\n        for (let k3 = 0, len = props.length; k3 < len; k3++) {\n          const i3 = props[k3];\n          const x2 = obj[i3];\n          f2(x2, i3);\n        }\n      };\n      const map$2 = (obj, f2) => {\n        return tupleMap(obj, (x2, i3) => ({\n          k: i3,\n          v: f2(x2, i3)\n        }));\n      };\n      const tupleMap = (obj, f2) => {\n        const r4 = {};\n        each$f(obj, (x2, i3) => {\n          const tuple = f2(x2, i3);\n          r4[tuple.k] = tuple.v;\n        });\n        return r4;\n      };\n      const objAcc = (r4) => (x2, i3) => {\n        r4[i3] = x2;\n      };\n      const internalFilter = (obj, pred, onTrue, onFalse) => {\n        const r4 = {};\n        each$f(obj, (x2, i3) => {\n          (pred(x2, i3) ? onTrue : onFalse)(x2, i3);\n        });\n        return r4;\n      };\n      const bifilter = (obj, pred) => {\n        const t2 = {};\n        const f2 = {};\n        internalFilter(obj, pred, objAcc(t2), objAcc(f2));\n        return {\n          t: t2,\n          f: f2\n        };\n      };\n      const filter$5 = (obj, pred) => {\n        const t2 = {};\n        internalFilter(obj, pred, objAcc(t2), noop);\n        return t2;\n      };\n      const mapToArray2 = (obj, f2) => {\n        const r4 = [];\n        each$f(obj, (value2, name2) => {\n          r4.push(f2(value2, name2));\n        });\n        return r4;\n      };\n      const values = (obj) => {\n        return mapToArray2(obj, identity2);\n      };\n      const get$a = (obj, key) => {\n        return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n      };\n      const has$2 = (obj, key) => hasOwnProperty$22.call(obj, key);\n      const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== void 0 && obj[key] !== null;\n      const equal$1 = (a1, a2, eq3 = eqAny) => eqRecord(eq3).eq(a1, a2);\n      const stringArray = (a2) => {\n        const all2 = {};\n        each$g(a2, (key) => {\n          all2[key] = {};\n        });\n        return keys2(all2);\n      };\n      const isArray2 = Array.isArray;\n      const toArray$1 = (obj) => {\n        if (!isArray2(obj)) {\n          const array2 = [];\n          for (let i3 = 0, l2 = obj.length; i3 < l2; i3++) {\n            array2[i3] = obj[i3];\n          }\n          return array2;\n        } else {\n          return obj;\n        }\n      };\n      const each$e = (o2, cb, s2) => {\n        let n3, l2;\n        if (!o2) {\n          return false;\n        }\n        s2 = s2 || o2;\n        if (o2.length !== void 0) {\n          for (n3 = 0, l2 = o2.length; n3 < l2; n3++) {\n            if (cb.call(s2, o2[n3], n3, o2) === false) {\n              return false;\n            }\n          }\n        } else {\n          for (n3 in o2) {\n            if (has$2(o2, n3)) {\n              if (cb.call(s2, o2[n3], n3, o2) === false) {\n                return false;\n              }\n            }\n          }\n        }\n        return true;\n      };\n      const map$1 = (array2, callback) => {\n        const out = [];\n        each$e(array2, (item, index2) => {\n          out.push(callback(item, index2, array2));\n        });\n        return out;\n      };\n      const filter$4 = (a2, f2) => {\n        const o2 = [];\n        each$e(a2, (v2, index2) => {\n          if (!f2 || f2(v2, index2, a2)) {\n            o2.push(v2);\n          }\n        });\n        return o2;\n      };\n      const indexOf = (a2, v2) => {\n        if (a2) {\n          for (let i3 = 0, l2 = a2.length; i3 < l2; i3++) {\n            if (a2[i3] === v2) {\n              return i3;\n            }\n          }\n        }\n        return -1;\n      };\n      const reduce = (collection, iteratee, accumulator, thisArg) => {\n        let acc = isUndefined2(accumulator) ? collection[0] : accumulator;\n        for (let i3 = 0; i3 < collection.length; i3++) {\n          acc = iteratee.call(thisArg, acc, collection[i3], i3);\n        }\n        return acc;\n      };\n      const findIndex$1 = (array2, predicate, thisArg) => {\n        let i3, l2;\n        for (i3 = 0, l2 = array2.length; i3 < l2; i3++) {\n          if (predicate.call(thisArg, array2[i3], i3, array2)) {\n            return i3;\n          }\n        }\n        return -1;\n      };\n      const last$2 = (collection) => collection[collection.length - 1];\n      const cached = (f2) => {\n        let called = false;\n        let r4;\n        return (...args) => {\n          if (!called) {\n            called = true;\n            r4 = f2.apply(null, args);\n          }\n          return r4;\n        };\n      };\n      const DeviceType = (os2, browser2, userAgent2, mediaMatch2) => {\n        const isiPad = os2.isiOS() && /ipad/i.test(userAgent2) === true;\n        const isiPhone = os2.isiOS() && !isiPad;\n        const isMobile = os2.isiOS() || os2.isAndroid();\n        const isTouch2 = isMobile || mediaMatch2(\"(pointer:coarse)\");\n        const isTablet2 = isiPad || !isiPhone && isMobile && mediaMatch2(\"(min-device-width:768px)\");\n        const isPhone2 = isiPhone || isMobile && !isTablet2;\n        const iOSwebview = browser2.isSafari() && os2.isiOS() && /safari/i.test(userAgent2) === false;\n        const isDesktop = !isPhone2 && !isTablet2 && !iOSwebview;\n        return {\n          isiPad: constant2(isiPad),\n          isiPhone: constant2(isiPhone),\n          isTablet: constant2(isTablet2),\n          isPhone: constant2(isPhone2),\n          isTouch: constant2(isTouch2),\n          isAndroid: os2.isAndroid,\n          isiOS: os2.isiOS,\n          isWebView: constant2(iOSwebview),\n          isDesktop: constant2(isDesktop)\n        };\n      };\n      const firstMatch = (regexes, s2) => {\n        for (let i3 = 0; i3 < regexes.length; i3++) {\n          const x2 = regexes[i3];\n          if (x2.test(s2)) {\n            return x2;\n          }\n        }\n        return void 0;\n      };\n      const find$1 = (regexes, agent) => {\n        const r4 = firstMatch(regexes, agent);\n        if (!r4) {\n          return {\n            major: 0,\n            minor: 0\n          };\n        }\n        const group = (i3) => {\n          return Number(agent.replace(r4, \"$\" + i3));\n        };\n        return nu$3(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$1(versionRegexes, cleanedAgent);\n      };\n      const unknown$2 = () => {\n        return nu$3(0, 0);\n      };\n      const nu$3 = (major, minor) => {\n        return {\n          major,\n          minor\n        };\n      };\n      const Version = {\n        nu: nu$3,\n        detect: detect$5,\n        unknown: unknown$2\n      };\n      const detectBrowser$1 = (browsers2, userAgentData) => {\n        return findMap(userAgentData.brands, (uaBrand) => {\n          const lcBrand = uaBrand.brand.toLowerCase();\n          return find$2(browsers2, (browser2) => {\n            var _a3;\n            return lcBrand === ((_a3 = browser2.brand) === null || _a3 === void 0 ? void 0 : _a3.toLowerCase());\n          }).map((info) => ({\n            current: info.name,\n            version: Version.nu(parseInt(uaBrand.version, 10), 0)\n          }));\n        });\n      };\n      const detect$4 = (candidates, userAgent2) => {\n        const agent = String(userAgent2).toLowerCase();\n        return find$2(candidates, (candidate) => {\n          return candidate.search(agent);\n        });\n      };\n      const detectBrowser = (browsers2, userAgent2) => {\n        return detect$4(browsers2, userAgent2).map((browser2) => {\n          const version2 = Version.detect(browser2.versionRegexes, userAgent2);\n          return {\n            current: browser2.name,\n            version: version2\n          };\n        });\n      };\n      const detectOs = (oses2, userAgent2) => {\n        return detect$4(oses2, userAgent2).map((os2) => {\n          const version2 = Version.detect(os2.versionRegexes, userAgent2);\n          return {\n            current: os2.name,\n            version: version2\n          };\n        });\n      };\n      const removeFromStart = (str, numChars) => {\n        return str.substring(numChars);\n      };\n      const checkRange = (str, substr, start2) => substr === \"\" || str.length >= substr.length && str.substr(start2, start2 + substr.length) === substr;\n      const removeLeading = (str, prefix) => {\n        return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n      };\n      const contains$1 = (str, substr) => {\n        return str.indexOf(substr) !== -1;\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 = (r4) => (s2) => s2.replace(r4, \"\");\n      const trim$3 = blank(/^\\s+|\\s+$/g);\n      const lTrim = blank(/^\\s+/g);\n      const rTrim = blank(/\\s+$/g);\n      const isNotEmpty = (s2) => s2.length > 0;\n      const isEmpty$3 = (s2) => !isNotEmpty(s2);\n      const repeat = (s2, count2) => count2 <= 0 ? \"\" : new Array(count2 + 1).join(s2);\n      const toInt = (value2, radix = 10) => {\n        const num = parseInt(value2, radix);\n        return isNaN(num) ? Optional.none() : Optional.some(num);\n      };\n      const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n      const checkContains = (target) => {\n        return (uastring) => {\n          return contains$1(uastring, target);\n        };\n      };\n      const browsers = [\n        {\n          name: \"Edge\",\n          versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n          search: (uastring) => {\n            return contains$1(uastring, \"edge/\") && contains$1(uastring, \"chrome\") && contains$1(uastring, \"safari\") && contains$1(uastring, \"applewebkit\");\n          }\n        },\n        {\n          name: \"Chromium\",\n          brand: \"Chromium\",\n          versionRegexes: [\n            /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n            normalVersionRegex\n          ],\n          search: (uastring) => {\n            return contains$1(uastring, \"chrome\") && !contains$1(uastring, \"chromeframe\");\n          }\n        },\n        {\n          name: \"IE\",\n          versionRegexes: [\n            /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n            /.*?rv:([0-9]+)\\.([0-9]+).*/\n          ],\n          search: (uastring) => {\n            return contains$1(uastring, \"msie\") || contains$1(uastring, \"trident\");\n          }\n        },\n        {\n          name: \"Opera\",\n          versionRegexes: [\n            normalVersionRegex,\n            /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n          ],\n          search: checkContains(\"opera\")\n        },\n        {\n          name: \"Firefox\",\n          versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n          search: checkContains(\"firefox\")\n        },\n        {\n          name: \"Safari\",\n          versionRegexes: [\n            normalVersionRegex,\n            /.*?cpu os ([0-9]+)_([0-9]+).*/\n          ],\n          search: (uastring) => {\n            return (contains$1(uastring, \"safari\") || contains$1(uastring, \"mobile/\")) && contains$1(uastring, \"applewebkit\");\n          }\n        }\n      ];\n      const oses = [\n        {\n          name: \"Windows\",\n          search: checkContains(\"win\"),\n          versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n        },\n        {\n          name: \"iOS\",\n          search: (uastring) => {\n            return contains$1(uastring, \"iphone\") || contains$1(uastring, \"ipad\");\n          },\n          versionRegexes: [\n            /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n            /.*cpu os ([0-9]+)_([0-9]+).*/,\n            /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n          ]\n        },\n        {\n          name: \"Android\",\n          search: checkContains(\"android\"),\n          versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n        },\n        {\n          name: \"macOS\",\n          search: checkContains(\"mac os x\"),\n          versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n        },\n        {\n          name: \"Linux\",\n          search: checkContains(\"linux\"),\n          versionRegexes: []\n        },\n        {\n          name: \"Solaris\",\n          search: checkContains(\"sunos\"),\n          versionRegexes: []\n        },\n        {\n          name: \"FreeBSD\",\n          search: checkContains(\"freebsd\"),\n          versionRegexes: []\n        },\n        {\n          name: \"ChromeOS\",\n          search: checkContains(\"cros\"),\n          versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n        }\n      ];\n      const PlatformInfo = {\n        browsers: constant2(browsers),\n        oses: constant2(oses)\n      };\n      const edge = \"Edge\";\n      const chromium = \"Chromium\";\n      const ie = \"IE\";\n      const opera = \"Opera\";\n      const firefox = \"Firefox\";\n      const safari = \"Safari\";\n      const unknown$1 = () => {\n        return nu$2({\n          current: void 0,\n          version: Version.unknown()\n        });\n      };\n      const nu$2 = (info) => {\n        const current = info.current;\n        const version2 = info.version;\n        const isBrowser = (name2) => () => current === name2;\n        return {\n          current,\n          version: version2,\n          isEdge: isBrowser(edge),\n          isChromium: isBrowser(chromium),\n          isIE: isBrowser(ie),\n          isOpera: isBrowser(opera),\n          isFirefox: isBrowser(firefox),\n          isSafari: isBrowser(safari)\n        };\n      };\n      const Browser = {\n        unknown: unknown$1,\n        nu: nu$2\n      };\n      const windows = \"Windows\";\n      const ios = \"iOS\";\n      const android = \"Android\";\n      const linux = \"Linux\";\n      const macos = \"macOS\";\n      const solaris = \"Solaris\";\n      const freebsd = \"FreeBSD\";\n      const chromeos = \"ChromeOS\";\n      const unknown = () => {\n        return nu$1({\n          current: void 0,\n          version: Version.unknown()\n        });\n      };\n      const nu$1 = (info) => {\n        const current = info.current;\n        const version2 = info.version;\n        const isOS = (name2) => () => current === name2;\n        return {\n          current,\n          version: version2,\n          isWindows: isOS(windows),\n          isiOS: isOS(ios),\n          isAndroid: isOS(android),\n          isMacOS: isOS(macos),\n          isLinux: isOS(linux),\n          isSolaris: isOS(solaris),\n          isFreeBSD: isOS(freebsd),\n          isChromeOS: isOS(chromeos)\n        };\n      };\n      const OperatingSystem = {\n        unknown,\n        nu: nu$1\n      };\n      const detect$3 = (userAgent2, userAgentDataOpt, mediaMatch2) => {\n        const browsers2 = PlatformInfo.browsers();\n        const oses2 = PlatformInfo.oses();\n        const browser2 = userAgentDataOpt.bind((userAgentData) => detectBrowser$1(browsers2, userAgentData)).orThunk(() => detectBrowser(browsers2, userAgent2)).fold(Browser.unknown, Browser.nu);\n        const os2 = detectOs(oses2, userAgent2).fold(OperatingSystem.unknown, OperatingSystem.nu);\n        const deviceType2 = DeviceType(os2, browser2, userAgent2, mediaMatch2);\n        return {\n          browser: browser2,\n          os: os2,\n          deviceType: deviceType2\n        };\n      };\n      const PlatformDetection = { detect: detect$3 };\n      const mediaMatch = (query) => window.matchMedia(query).matches;\n      let platform$2 = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n      const detect$2 = () => platform$2();\n      const userAgent = navigator.userAgent;\n      const platform$1 = detect$2();\n      const browser$1 = platform$1.browser;\n      const os = platform$1.os;\n      const deviceType = platform$1.deviceType;\n      const windowsPhone = userAgent.indexOf(\"Windows Phone\") !== -1;\n      const Env = {\n        transparentSrc: \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",\n        documentMode: browser$1.isIE() ? document.documentMode || 7 : 10,\n        cacheSuffix: null,\n        container: null,\n        canHaveCSP: !browser$1.isIE(),\n        windowsPhone,\n        browser: {\n          current: browser$1.current,\n          version: browser$1.version,\n          isChromium: browser$1.isChromium,\n          isEdge: browser$1.isEdge,\n          isFirefox: browser$1.isFirefox,\n          isIE: browser$1.isIE,\n          isOpera: browser$1.isOpera,\n          isSafari: browser$1.isSafari\n        },\n        os: {\n          current: os.current,\n          version: os.version,\n          isAndroid: os.isAndroid,\n          isChromeOS: os.isChromeOS,\n          isFreeBSD: os.isFreeBSD,\n          isiOS: os.isiOS,\n          isLinux: os.isLinux,\n          isMacOS: os.isMacOS,\n          isSolaris: os.isSolaris,\n          isWindows: os.isWindows\n        },\n        deviceType: {\n          isDesktop: deviceType.isDesktop,\n          isiPad: deviceType.isiPad,\n          isiPhone: deviceType.isiPhone,\n          isPhone: deviceType.isPhone,\n          isTablet: deviceType.isTablet,\n          isTouch: deviceType.isTouch,\n          isWebView: deviceType.isWebView\n        }\n      };\n      const whiteSpaceRegExp$1 = /^\\s*|\\s*$/g;\n      const trim$2 = (str) => {\n        return str === null || str === void 0 ? \"\" : (\"\" + str).replace(whiteSpaceRegExp$1, \"\");\n      };\n      const is$3 = (obj, type2) => {\n        if (!type2) {\n          return obj !== void 0;\n        }\n        if (type2 === \"array\" && isArray2(obj)) {\n          return true;\n        }\n        return typeof obj === type2;\n      };\n      const makeMap$4 = (items, delim, map3) => {\n        let i3;\n        items = items || [];\n        delim = delim || \",\";\n        if (typeof items === \"string\") {\n          items = items.split(delim);\n        }\n        map3 = map3 || {};\n        i3 = items.length;\n        while (i3--) {\n          map3[items[i3]] = {};\n        }\n        return map3;\n      };\n      const hasOwnProperty$12 = has$2;\n      const extend$3 = (obj, ...exts) => {\n        for (let i3 = 0; i3 < exts.length; i3++) {\n          const ext = exts[i3];\n          for (const name2 in ext) {\n            if (has$2(ext, name2)) {\n              const value2 = ext[name2];\n              if (value2 !== void 0) {\n                obj[name2] = value2;\n              }\n            }\n          }\n        }\n        return obj;\n      };\n      const walk$4 = function(o2, f2, n3, s2) {\n        s2 = s2 || this;\n        if (o2) {\n          if (n3) {\n            o2 = o2[n3];\n          }\n          each$e(o2, (o3, i3) => {\n            if (f2.call(s2, o3, i3, n3) === false) {\n              return false;\n            }\n            walk$4(o3, f2, n3, s2);\n          });\n        }\n      };\n      const resolve$2 = (n3, o2) => {\n        let i3, l2;\n        o2 = o2 || window;\n        n3 = n3.split(\".\");\n        for (i3 = 0, l2 = n3.length; i3 < l2; i3++) {\n          o2 = o2[n3[i3]];\n          if (!o2) {\n            break;\n          }\n        }\n        return o2;\n      };\n      const explode$3 = (s2, d2) => {\n        if (!s2 || is$3(s2, \"array\")) {\n          return s2;\n        }\n        return map$1(s2.split(d2 || \",\"), trim$2);\n      };\n      const _addCacheSuffix = (url2) => {\n        const cacheSuffix = Env.cacheSuffix;\n        if (cacheSuffix) {\n          url2 += (url2.indexOf(\"?\") === -1 ? \"?\" : \"&\") + cacheSuffix;\n        }\n        return url2;\n      };\n      const Tools = {\n        trim: trim$2,\n        isArray: isArray2,\n        is: is$3,\n        toArray: toArray$1,\n        makeMap: makeMap$4,\n        each: each$e,\n        map: map$1,\n        grep: filter$4,\n        inArray: indexOf,\n        hasOwn: hasOwnProperty$12,\n        extend: extend$3,\n        walk: walk$4,\n        resolve: resolve$2,\n        explode: explode$3,\n        _addCacheSuffix\n      };\n      const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists((left) => comparator(left, rhs));\n      const cat = (arr) => {\n        const r4 = [];\n        const push = (x2) => {\n          r4.push(x2);\n        };\n        for (let i3 = 0; i3 < arr.length; i3++) {\n          arr[i3].each(push);\n        }\n        return r4;\n      };\n      const lift2 = (oa, ob, f2) => oa.isSome() && ob.isSome() ? Optional.some(f2(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n      const lift3 = (oa, ob, oc, f2) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f2(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n      const someIf = (b2, a2) => b2 ? Optional.some(a2) : Optional.none();\n      typeof window !== \"undefined\" ? window : Function(\"return this;\")();\n      const COMMENT = 8;\n      const DOCUMENT = 9;\n      const DOCUMENT_FRAGMENT = 11;\n      const ELEMENT = 1;\n      const TEXT = 3;\n      const name = (element) => {\n        const r4 = element.dom.nodeName;\n        return r4.toLowerCase();\n      };\n      const type$1 = (element) => element.dom.nodeType;\n      const isType = (t2) => (element) => type$1(element) === t2;\n      const isComment$1 = (element) => type$1(element) === COMMENT || name(element) === \"#comment\";\n      const isElement$7 = isType(ELEMENT);\n      const isText$9 = isType(TEXT);\n      const isDocument$2 = isType(DOCUMENT);\n      const isDocumentFragment$1 = isType(DOCUMENT_FRAGMENT);\n      const isTag = (tag) => (e2) => isElement$7(e2) && name(e2) === tag;\n      const rawSet = (dom3, key, value2) => {\n        if (isString2(value2) || isBoolean2(value2) || isNumber2(value2)) {\n          dom3.setAttribute(key, value2 + \"\");\n        } else {\n          console.error(\"Invalid call to Attribute.set. Key \", key, \":: Value \", value2, \":: Element \", dom3);\n          throw new Error(\"Attribute value was not simple\");\n        }\n      };\n      const set$2 = (element, key, value2) => {\n        rawSet(element.dom, key, value2);\n      };\n      const setAll$1 = (element, attrs) => {\n        const dom3 = element.dom;\n        each$f(attrs, (v2, k3) => {\n          rawSet(dom3, k3, v2);\n        });\n      };\n      const get$9 = (element, key) => {\n        const v2 = element.dom.getAttribute(key);\n        return v2 === null ? void 0 : v2;\n      };\n      const getOpt = (element, key) => Optional.from(get$9(element, key));\n      const has$1 = (element, key) => {\n        const dom3 = element.dom;\n        return dom3 && dom3.hasAttribute ? dom3.hasAttribute(key) : false;\n      };\n      const remove$a = (element, key) => {\n        element.dom.removeAttribute(key);\n      };\n      const hasNone = (element) => {\n        const attrs = element.dom.attributes;\n        return attrs === void 0 || attrs === null || attrs.length === 0;\n      };\n      const clone$4 = (element) => foldl(element.dom.attributes, (acc, attr) => {\n        acc[attr.name] = attr.value;\n        return acc;\n      }, {});\n      const read$4 = (element, attr) => {\n        const value2 = get$9(element, attr);\n        return value2 === void 0 || value2 === \"\" ? [] : value2.split(\" \");\n      };\n      const add$4 = (element, attr, id) => {\n        const old = read$4(element, attr);\n        const nu2 = old.concat([id]);\n        set$2(element, attr, nu2.join(\" \"));\n        return true;\n      };\n      const remove$9 = (element, attr, id) => {\n        const nu2 = filter$6(read$4(element, attr), (v2) => v2 !== id);\n        if (nu2.length > 0) {\n          set$2(element, attr, nu2.join(\" \"));\n        } else {\n          remove$a(element, attr);\n        }\n        return false;\n      };\n      const supports = (element) => element.dom.classList !== void 0;\n      const get$8 = (element) => read$4(element, \"class\");\n      const add$3 = (element, clazz) => add$4(element, \"class\", clazz);\n      const remove$8 = (element, clazz) => remove$9(element, \"class\", clazz);\n      const toggle$2 = (element, clazz) => {\n        if (contains$2(get$8(element), clazz)) {\n          return remove$8(element, clazz);\n        } else {\n          return add$3(element, clazz);\n        }\n      };\n      const add$2 = (element, clazz) => {\n        if (supports(element)) {\n          element.dom.classList.add(clazz);\n        } else {\n          add$3(element, clazz);\n        }\n      };\n      const cleanClass = (element) => {\n        const classList = supports(element) ? element.dom.classList : get$8(element);\n        if (classList.length === 0) {\n          remove$a(element, \"class\");\n        }\n      };\n      const remove$7 = (element, clazz) => {\n        if (supports(element)) {\n          const classList = element.dom.classList;\n          classList.remove(clazz);\n        } else {\n          remove$8(element, clazz);\n        }\n        cleanClass(element);\n      };\n      const toggle$1 = (element, clazz) => {\n        const result = supports(element) ? element.dom.classList.toggle(clazz) : toggle$2(element, clazz);\n        cleanClass(element);\n        return result;\n      };\n      const has2 = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n      const isSupported$1 = (dom3) => dom3.style !== void 0 && isFunction2(dom3.style.getPropertyValue);\n      const fromHtml$1 = (html2, scope) => {\n        const doc = scope || document;\n        const div = doc.createElement(\"div\");\n        div.innerHTML = html2;\n        if (!div.hasChildNodes() || div.childNodes.length > 1) {\n          const message = \"HTML does not have a single root node\";\n          console.error(message, html2);\n          throw new Error(message);\n        }\n        return fromDom$2(div.childNodes[0]);\n      };\n      const fromTag = (tag, scope) => {\n        const doc = scope || document;\n        const node = doc.createElement(tag);\n        return fromDom$2(node);\n      };\n      const fromText = (text3, scope) => {\n        const doc = scope || document;\n        const node = doc.createTextNode(text3);\n        return fromDom$2(node);\n      };\n      const fromDom$2 = (node) => {\n        if (node === null || node === void 0) {\n          throw new Error(\"Node cannot be null or undefined\");\n        }\n        return { dom: node };\n      };\n      const fromPoint$2 = (docElm, x2, y2) => Optional.from(docElm.dom.elementFromPoint(x2, y2)).map(fromDom$2);\n      const SugarElement = {\n        fromHtml: fromHtml$1,\n        fromTag,\n        fromText,\n        fromDom: fromDom$2,\n        fromPoint: fromPoint$2\n      };\n      const toArray = (target, f2) => {\n        const r4 = [];\n        const recurse = (e2) => {\n          r4.push(e2);\n          return f2(e2);\n        };\n        let cur = f2(target);\n        do {\n          cur = cur.bind(recurse);\n        } while (cur.isSome());\n        return r4;\n      };\n      const is$1 = (element, selector) => {\n        const dom3 = element.dom;\n        if (dom3.nodeType !== ELEMENT) {\n          return false;\n        } else {\n          const elem = dom3;\n          if (elem.matches !== void 0) {\n            return elem.matches(selector);\n          } else if (elem.msMatchesSelector !== void 0) {\n            return elem.msMatchesSelector(selector);\n          } else if (elem.webkitMatchesSelector !== void 0) {\n            return elem.webkitMatchesSelector(selector);\n          } else if (elem.mozMatchesSelector !== void 0) {\n            return elem.mozMatchesSelector(selector);\n          } else {\n            throw new Error(\"Browser lacks native selectors\");\n          }\n        }\n      };\n      const bypassSelector = (dom3) => dom3.nodeType !== ELEMENT && dom3.nodeType !== DOCUMENT && dom3.nodeType !== DOCUMENT_FRAGMENT || dom3.childElementCount === 0;\n      const all = (selector, scope) => {\n        const base2 = scope === void 0 ? document : scope.dom;\n        return bypassSelector(base2) ? [] : map$3(base2.querySelectorAll(selector), SugarElement.fromDom);\n      };\n      const one = (selector, scope) => {\n        const base2 = scope === void 0 ? document : scope.dom;\n        return bypassSelector(base2) ? Optional.none() : Optional.from(base2.querySelector(selector)).map(SugarElement.fromDom);\n      };\n      const eq2 = (e1, e2) => e1.dom === e2.dom;\n      const contains2 = (e1, e2) => {\n        const d1 = e1.dom;\n        const d2 = e2.dom;\n        return d1 === d2 ? false : d1.contains(d2);\n      };\n      const owner$1 = (element) => SugarElement.fromDom(element.dom.ownerDocument);\n      const documentOrOwner = (dos) => isDocument$2(dos) ? dos : owner$1(dos);\n      const documentElement = (element) => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n      const defaultView = (element) => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n      const parent = (element) => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n      const parentElement = (element) => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n      const parents$1 = (element, isRoot) => {\n        const stop2 = isFunction2(isRoot) ? isRoot : never;\n        let dom3 = element.dom;\n        const ret = [];\n        while (dom3.parentNode !== null && dom3.parentNode !== void 0) {\n          const rawParent = dom3.parentNode;\n          const p2 = SugarElement.fromDom(rawParent);\n          ret.push(p2);\n          if (stop2(p2) === true) {\n            break;\n          } else {\n            dom3 = rawParent;\n          }\n        }\n        return ret;\n      };\n      const siblings = (element) => {\n        const filterSelf = (elements) => filter$6(elements, (x2) => !eq2(element, x2));\n        return parent(element).map(children).map(filterSelf).getOr([]);\n      };\n      const prevSibling = (element) => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n      const nextSibling = (element) => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n      const prevSiblings = (element) => reverse(toArray(element, prevSibling));\n      const nextSiblings = (element) => toArray(element, nextSibling);\n      const children = (element) => map$3(element.dom.childNodes, SugarElement.fromDom);\n      const child$1 = (element, index2) => {\n        const cs = element.dom.childNodes;\n        return Optional.from(cs[index2]).map(SugarElement.fromDom);\n      };\n      const firstChild = (element) => child$1(element, 0);\n      const lastChild = (element) => child$1(element, element.dom.childNodes.length - 1);\n      const childNodesCount = (element) => element.dom.childNodes.length;\n      const getHead = (doc) => {\n        const b2 = doc.dom.head;\n        if (b2 === null || b2 === void 0) {\n          throw new Error(\"Head is not available yet\");\n        }\n        return SugarElement.fromDom(b2);\n      };\n      const isShadowRoot = (dos) => isDocumentFragment$1(dos) && isNonNullable(dos.dom.host);\n      const supported = isFunction2(Element.prototype.attachShadow) && isFunction2(Node.prototype.getRootNode);\n      const isSupported = constant2(supported);\n      const getRootNode = supported ? (e2) => SugarElement.fromDom(e2.dom.getRootNode()) : documentOrOwner;\n      const getStyleContainer = (dos) => isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n      const getShadowRoot = (e2) => {\n        const r4 = getRootNode(e2);\n        return isShadowRoot(r4) ? Optional.some(r4) : Optional.none();\n      };\n      const getShadowHost = (e2) => SugarElement.fromDom(e2.dom.host);\n      const getOriginalEventTarget = (event) => {\n        if (isSupported() && isNonNullable(event.target)) {\n          const el = SugarElement.fromDom(event.target);\n          if (isElement$7(el) && isOpenShadowHost(el)) {\n            if (event.composed && event.composedPath) {\n              const composedPath = event.composedPath();\n              if (composedPath) {\n                return head(composedPath);\n              }\n            }\n          }\n        }\n        return Optional.from(event.target);\n      };\n      const isOpenShadowHost = (element) => isNonNullable(element.dom.shadowRoot);\n      const inBody = (element) => {\n        const dom3 = isText$9(element) ? element.dom.parentNode : element.dom;\n        if (dom3 === void 0 || dom3 === null || dom3.ownerDocument === null) {\n          return false;\n        }\n        const doc = dom3.ownerDocument;\n        return getShadowRoot(SugarElement.fromDom(dom3)).fold(() => doc.body.contains(dom3), compose1(inBody, getShadowHost));\n      };\n      const internalSet = (dom3, property, value2) => {\n        if (!isString2(value2)) {\n          console.error(\"Invalid call to CSS.set. Property \", property, \":: Value \", value2, \":: Element \", dom3);\n          throw new Error(\"CSS value must be a string: \" + value2);\n        }\n        if (isSupported$1(dom3)) {\n          dom3.style.setProperty(property, value2);\n        }\n      };\n      const internalRemove = (dom3, property) => {\n        if (isSupported$1(dom3)) {\n          dom3.style.removeProperty(property);\n        }\n      };\n      const set$1 = (element, property, value2) => {\n        const dom3 = element.dom;\n        internalSet(dom3, property, value2);\n      };\n      const setAll = (element, css) => {\n        const dom3 = element.dom;\n        each$f(css, (v2, k3) => {\n          internalSet(dom3, k3, v2);\n        });\n      };\n      const get$7 = (element, property) => {\n        const dom3 = element.dom;\n        const styles = window.getComputedStyle(dom3);\n        const r4 = styles.getPropertyValue(property);\n        return r4 === \"\" && !inBody(element) ? getUnsafeProperty(dom3, property) : r4;\n      };\n      const getUnsafeProperty = (dom3, property) => isSupported$1(dom3) ? dom3.style.getPropertyValue(property) : \"\";\n      const getRaw$1 = (element, property) => {\n        const dom3 = element.dom;\n        const raw = getUnsafeProperty(dom3, property);\n        return Optional.from(raw).filter((r4) => r4.length > 0);\n      };\n      const getAllRaw = (element) => {\n        const css = {};\n        const dom3 = element.dom;\n        if (isSupported$1(dom3)) {\n          for (let i3 = 0; i3 < dom3.style.length; i3++) {\n            const ruleName = dom3.style.item(i3);\n            css[ruleName] = dom3.style[ruleName];\n          }\n        }\n        return css;\n      };\n      const remove$6 = (element, property) => {\n        const dom3 = element.dom;\n        internalRemove(dom3, property);\n        if (is$2(getOpt(element, \"style\").map(trim$3), \"\")) {\n          remove$a(element, \"style\");\n        }\n      };\n      const reflow = (e2) => e2.dom.offsetWidth;\n      const before$3 = (marker, element) => {\n        const parent$1 = parent(marker);\n        parent$1.each((v2) => {\n          v2.dom.insertBefore(element.dom, marker.dom);\n        });\n      };\n      const after$4 = (marker, element) => {\n        const sibling2 = nextSibling(marker);\n        sibling2.fold(() => {\n          const parent$1 = parent(marker);\n          parent$1.each((v2) => {\n            append$1(v2, element);\n          });\n        }, (v2) => {\n          before$3(v2, element);\n        });\n      };\n      const prepend = (parent2, element) => {\n        const firstChild$1 = firstChild(parent2);\n        firstChild$1.fold(() => {\n          append$1(parent2, element);\n        }, (v2) => {\n          parent2.dom.insertBefore(element.dom, v2.dom);\n        });\n      };\n      const append$1 = (parent2, element) => {\n        parent2.dom.appendChild(element.dom);\n      };\n      const wrap$2 = (element, wrapper) => {\n        before$3(element, wrapper);\n        append$1(wrapper, element);\n      };\n      const after$3 = (marker, elements) => {\n        each$g(elements, (x2, i3) => {\n          const e2 = i3 === 0 ? marker : elements[i3 - 1];\n          after$4(e2, x2);\n        });\n      };\n      const append = (parent2, elements) => {\n        each$g(elements, (x2) => {\n          append$1(parent2, x2);\n        });\n      };\n      const empty = (element) => {\n        element.dom.textContent = \"\";\n        each$g(children(element), (rogue) => {\n          remove$5(rogue);\n        });\n      };\n      const remove$5 = (element) => {\n        const dom3 = element.dom;\n        if (dom3.parentNode !== null) {\n          dom3.parentNode.removeChild(dom3);\n        }\n      };\n      const unwrap = (wrapper) => {\n        const children$1 = children(wrapper);\n        if (children$1.length > 0) {\n          after$3(wrapper, children$1);\n        }\n        remove$5(wrapper);\n      };\n      const fromHtml = (html2, scope) => {\n        const doc = scope || document;\n        const div = doc.createElement(\"div\");\n        div.innerHTML = html2;\n        return children(SugarElement.fromDom(div));\n      };\n      const fromDom$1 = (nodes) => map$3(nodes, SugarElement.fromDom);\n      const get$6 = (element) => element.dom.innerHTML;\n      const set2 = (element, content) => {\n        const owner2 = owner$1(element);\n        const docDom = owner2.dom;\n        const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n        const contentElements = fromHtml(content, docDom);\n        append(fragment, contentElements);\n        empty(element);\n        append$1(element, fragment);\n      };\n      const getOuter = (element) => {\n        const container = SugarElement.fromTag(\"div\");\n        const clone2 = SugarElement.fromDom(element.dom.cloneNode(true));\n        append$1(container, clone2);\n        return get$6(container);\n      };\n      const mkEvent = (target, x2, y2, stop2, prevent, kill, raw) => ({\n        target,\n        x: x2,\n        y: y2,\n        stop: stop2,\n        prevent,\n        kill,\n        raw\n      });\n      const fromRawEvent = (rawEvent) => {\n        const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n        const stop2 = () => rawEvent.stopPropagation();\n        const prevent = () => rawEvent.preventDefault();\n        const kill = compose(prevent, stop2);\n        return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop2, prevent, kill, rawEvent);\n      };\n      const handle$1 = (filter2, handler) => (rawEvent) => {\n        if (filter2(rawEvent)) {\n          handler(fromRawEvent(rawEvent));\n        }\n      };\n      const binder = (element, event, filter2, handler, useCapture) => {\n        const wrapped = handle$1(filter2, handler);\n        element.dom.addEventListener(event, wrapped, useCapture);\n        return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n      };\n      const bind$2 = (element, event, filter2, handler) => binder(element, event, filter2, handler, false);\n      const unbind = (element, event, handler, useCapture) => {\n        element.dom.removeEventListener(event, handler, useCapture);\n      };\n      const r3 = (left, top) => {\n        const translate2 = (x2, y2) => r3(left + x2, top + y2);\n        return {\n          left,\n          top,\n          translate: translate2\n        };\n      };\n      const SugarPosition = r3;\n      const boxPosition = (dom3) => {\n        const box = dom3.getBoundingClientRect();\n        return SugarPosition(box.left, box.top);\n      };\n      const firstDefinedOrZero = (a2, b2) => {\n        if (a2 !== void 0) {\n          return a2;\n        } else {\n          return b2 !== void 0 ? b2 : 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 html2 = 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, html2.scrollTop);\n        const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html2.scrollLeft);\n        const clientTop = firstDefinedOrZero(html2.clientTop, body.clientTop);\n        const clientLeft = firstDefinedOrZero(html2.clientLeft, body.clientLeft);\n        return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n      };\n      const viewport = (element) => {\n        const dom3 = element.dom;\n        const doc = dom3.ownerDocument;\n        const body = doc.body;\n        if (body === dom3) {\n          return SugarPosition(body.offsetLeft, body.offsetTop);\n        }\n        if (!inBody(element)) {\n          return SugarPosition(0, 0);\n        }\n        return boxPosition(dom3);\n      };\n      const get$5 = (_DOC) => {\n        const doc = _DOC !== void 0 ? _DOC.dom : document;\n        const x2 = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n        const y2 = doc.body.scrollTop || doc.documentElement.scrollTop;\n        return SugarPosition(x2, y2);\n      };\n      const to = (x2, y2, _DOC) => {\n        const doc = _DOC !== void 0 ? _DOC.dom : document;\n        const win = doc.defaultView;\n        if (win) {\n          win.scrollTo(x2, y2);\n        }\n      };\n      const intoView = (element, alignToTop) => {\n        const isSafari = detect$2().browser.isSafari();\n        if (isSafari && isFunction2(element.dom.scrollIntoViewIfNeeded)) {\n          element.dom.scrollIntoViewIfNeeded(false);\n        } else {\n          element.dom.scrollIntoView(alignToTop);\n        }\n      };\n      const get$4 = (_win) => {\n        const win = _win === void 0 ? window : _win;\n        if (detect$2().browser.isFirefox()) {\n          return Optional.none();\n        } else {\n          return Optional.from(win.visualViewport);\n        }\n      };\n      const bounds = (x2, y2, width, height) => ({\n        x: x2,\n        y: y2,\n        width,\n        height,\n        right: x2 + width,\n        bottom: y2 + height\n      });\n      const getBounds = (_win) => {\n        const win = _win === void 0 ? window : _win;\n        const doc = win.document;\n        const scroll = get$5(SugarElement.fromDom(doc));\n        return get$4(win).fold(() => {\n          const html2 = win.document.documentElement;\n          const width = html2.clientWidth;\n          const height = html2.clientHeight;\n          return bounds(scroll.left, scroll.top, width, height);\n        }, (visualViewport) => bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n      };\n      const isNodeType = (type2) => {\n        return (node) => {\n          return !!node && node.nodeType === type2;\n        };\n      };\n      const isRestrictedNode = (node) => !!node && !Object.getPrototypeOf(node);\n      const isElement$6 = isNodeType(1);\n      const matchNodeNames = (names) => {\n        const lowercasedNames = names.map((s2) => s2.toLowerCase());\n        return (node) => {\n          if (node && node.nodeName) {\n            const nodeName = node.nodeName.toLowerCase();\n            return contains$2(lowercasedNames, nodeName);\n          }\n          return false;\n        };\n      };\n      const matchStyleValues = (name2, values2) => {\n        const items = values2.toLowerCase().split(\" \");\n        return (node) => {\n          if (isElement$6(node)) {\n            for (let i3 = 0; i3 < items.length; i3++) {\n              const computed = node.ownerDocument.defaultView.getComputedStyle(node, null);\n              const cssValue = computed ? computed.getPropertyValue(name2) : null;\n              if (cssValue === items[i3]) {\n                return true;\n              }\n            }\n          }\n          return false;\n        };\n      };\n      const hasAttribute = (attrName) => {\n        return (node) => {\n          return isElement$6(node) && node.hasAttribute(attrName);\n        };\n      };\n      const hasAttributeValue = (attrName, attrValue) => {\n        return (node) => {\n          return isElement$6(node) && node.getAttribute(attrName) === attrValue;\n        };\n      };\n      const isBogus$2 = (node) => isElement$6(node) && node.hasAttribute(\"data-mce-bogus\");\n      const isBogusAll$1 = (node) => isElement$6(node) && node.getAttribute(\"data-mce-bogus\") === \"all\";\n      const isTable$3 = (node) => isElement$6(node) && node.tagName === \"TABLE\";\n      const hasContentEditableState = (value2) => {\n        return (node) => {\n          if (isElement$6(node)) {\n            if (node.contentEditable === value2) {\n              return true;\n            }\n            if (node.getAttribute(\"data-mce-contenteditable\") === value2) {\n              return true;\n            }\n          }\n          return false;\n        };\n      };\n      const isTextareaOrInput = matchNodeNames([\n        \"textarea\",\n        \"input\"\n      ]);\n      const isText$8 = isNodeType(3);\n      const isCData = isNodeType(4);\n      const isPi = isNodeType(7);\n      const isComment = isNodeType(8);\n      const isDocument$1 = isNodeType(9);\n      const isDocumentFragment = isNodeType(11);\n      const isBr$5 = matchNodeNames([\"br\"]);\n      const isImg = matchNodeNames([\"img\"]);\n      const isContentEditableTrue$4 = hasContentEditableState(\"true\");\n      const isContentEditableFalse$a = hasContentEditableState(\"false\");\n      const isTableCell$5 = matchNodeNames([\n        \"td\",\n        \"th\"\n      ]);\n      const isMedia$2 = matchNodeNames([\n        \"video\",\n        \"audio\",\n        \"object\",\n        \"embed\"\n      ]);\n      const browser = detect$2().browser;\n      const firstElement = (nodes) => find$2(nodes, isElement$7);\n      const getTableCaptionDeltaY = (elm) => {\n        if (browser.isFirefox() && name(elm) === \"table\") {\n          return firstElement(children(elm)).filter((elm2) => {\n            return name(elm2) === \"caption\";\n          }).bind((caption) => {\n            return firstElement(nextSiblings(caption)).map((body) => {\n              const bodyTop = body.dom.offsetTop;\n              const captionTop = caption.dom.offsetTop;\n              const captionHeight = caption.dom.offsetHeight;\n              return bodyTop <= captionTop ? -captionHeight : 0;\n            });\n          }).getOr(0);\n        } else {\n          return 0;\n        }\n      };\n      const hasChild = (elm, child2) => elm.children && contains$2(elm.children, child2);\n      const getPos = (body, elm, rootElm) => {\n        let x2 = 0, y2 = 0;\n        const doc = body.ownerDocument;\n        rootElm = rootElm ? rootElm : body;\n        if (elm) {\n          if (rootElm === body && elm.getBoundingClientRect && get$7(SugarElement.fromDom(body), \"position\") === \"static\") {\n            const pos = elm.getBoundingClientRect();\n            x2 = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\n            y2 = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\n            return {\n              x: x2,\n              y: y2\n            };\n          }\n          let offsetParent = elm;\n          while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n            const castOffsetParent = offsetParent;\n            x2 += castOffsetParent.offsetLeft || 0;\n            y2 += castOffsetParent.offsetTop || 0;\n            offsetParent = castOffsetParent.offsetParent;\n          }\n          offsetParent = elm.parentNode;\n          while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n            x2 -= offsetParent.scrollLeft || 0;\n            y2 -= offsetParent.scrollTop || 0;\n            offsetParent = offsetParent.parentNode;\n          }\n          y2 += getTableCaptionDeltaY(SugarElement.fromDom(elm));\n        }\n        return {\n          x: x2,\n          y: y2\n        };\n      };\n      var ClosestOrAncestor = (is2, ancestor2, scope, a2, isRoot) => {\n        if (is2(scope, a2)) {\n          return Optional.some(scope);\n        } else if (isFunction2(isRoot) && isRoot(scope)) {\n          return Optional.none();\n        } else {\n          return ancestor2(scope, a2, isRoot);\n        }\n      };\n      const ancestor$3 = (scope, predicate, isRoot) => {\n        let element = scope.dom;\n        const stop2 = isFunction2(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 (stop2(el)) {\n            break;\n          }\n        }\n        return Optional.none();\n      };\n      const closest$4 = (scope, predicate, isRoot) => {\n        const is2 = (s2, test2) => test2(s2);\n        return ClosestOrAncestor(is2, ancestor$3, scope, predicate, isRoot);\n      };\n      const sibling$1 = (scope, predicate) => {\n        const element = scope.dom;\n        if (!element.parentNode) {\n          return Optional.none();\n        }\n        return child(SugarElement.fromDom(element.parentNode), (x2) => !eq2(scope, x2) && predicate(x2));\n      };\n      const child = (scope, predicate) => {\n        const pred = (node) => predicate(SugarElement.fromDom(node));\n        const result = find$2(scope.dom.childNodes, pred);\n        return result.map(SugarElement.fromDom);\n      };\n      const descendant$1 = (scope, predicate) => {\n        const descend2 = (node) => {\n          for (let i3 = 0; i3 < node.childNodes.length; i3++) {\n            const child2 = SugarElement.fromDom(node.childNodes[i3]);\n            if (predicate(child2)) {\n              return Optional.some(child2);\n            }\n            const res = descend2(node.childNodes[i3]);\n            if (res.isSome()) {\n              return res;\n            }\n          }\n          return Optional.none();\n        };\n        return descend2(scope.dom);\n      };\n      const ancestor$2 = (scope, selector, isRoot) => ancestor$3(scope, (e2) => is$1(e2, selector), isRoot);\n      const descendant = (scope, selector) => one(selector, scope);\n      const closest$3 = (scope, selector, isRoot) => {\n        const is2 = (element, selector2) => is$1(element, selector2);\n        return ClosestOrAncestor(is2, ancestor$2, scope, selector, isRoot);\n      };\n      const StyleSheetLoader = (documentOrShadowRoot, settings = {}) => {\n        let idCount = 0;\n        const loadedStates = {};\n        const edos = SugarElement.fromDom(documentOrShadowRoot);\n        const doc = documentOrOwner(edos);\n        const maxLoadTime = settings.maxLoadTime || 5e3;\n        const _setReferrerPolicy = (referrerPolicy) => {\n          settings.referrerPolicy = referrerPolicy;\n        };\n        const addStyle = (element) => {\n          append$1(getStyleContainer(edos), element);\n        };\n        const removeStyle = (id) => {\n          const styleContainer = getStyleContainer(edos);\n          descendant(styleContainer, \"#\" + id).each(remove$5);\n        };\n        const getOrCreateState = (url2) => get$a(loadedStates, url2).getOrThunk(() => ({\n          id: \"mce-u\" + idCount++,\n          passed: [],\n          failed: [],\n          count: 0\n        }));\n        const load = (url2) => new Promise((success, failure) => {\n          let link2;\n          const urlWithSuffix = Tools._addCacheSuffix(url2);\n          const state = getOrCreateState(urlWithSuffix);\n          loadedStates[urlWithSuffix] = state;\n          state.count++;\n          const resolve2 = (callbacks, status) => {\n            each$g(callbacks, call);\n            state.status = status;\n            state.passed = [];\n            state.failed = [];\n            if (link2) {\n              link2.onload = null;\n              link2.onerror = null;\n              link2 = null;\n            }\n          };\n          const passed = () => resolve2(state.passed, 2);\n          const failed = () => resolve2(state.failed, 3);\n          const wait = (testCallback, waitCallback) => {\n            if (!testCallback()) {\n              if (Date.now() - startTime < maxLoadTime) {\n                setTimeout(waitCallback);\n              } else {\n                failed();\n              }\n            }\n          };\n          const waitForWebKitLinkLoaded = () => {\n            wait(() => {\n              const styleSheets = documentOrShadowRoot.styleSheets;\n              let i3 = styleSheets.length;\n              while (i3--) {\n                const styleSheet = styleSheets[i3];\n                const owner2 = styleSheet.ownerNode;\n                if (owner2 && owner2.id === link2.id) {\n                  passed();\n                  return true;\n                }\n              }\n              return false;\n            }, waitForWebKitLinkLoaded);\n          };\n          if (success) {\n            state.passed.push(success);\n          }\n          if (failure) {\n            state.failed.push(failure);\n          }\n          if (state.status === 1) {\n            return;\n          }\n          if (state.status === 2) {\n            passed();\n            return;\n          }\n          if (state.status === 3) {\n            failed();\n            return;\n          }\n          state.status = 1;\n          const linkElem = SugarElement.fromTag(\"link\", doc.dom);\n          setAll$1(linkElem, {\n            rel: \"stylesheet\",\n            type: \"text/css\",\n            id: state.id\n          });\n          const startTime = Date.now();\n          if (settings.contentCssCors) {\n            set$2(linkElem, \"crossOrigin\", \"anonymous\");\n          }\n          if (settings.referrerPolicy) {\n            set$2(linkElem, \"referrerpolicy\", settings.referrerPolicy);\n          }\n          link2 = linkElem.dom;\n          link2.onload = waitForWebKitLinkLoaded;\n          link2.onerror = failed;\n          addStyle(linkElem);\n          set$2(linkElem, \"href\", urlWithSuffix);\n        });\n        const loadAll = (urls) => {\n          const loadedUrls = Promise.allSettled(map$3(urls, (url2) => load(url2).then(constant2(url2))));\n          return loadedUrls.then((results) => {\n            const parts = partition$2(results, (r4) => r4.status === \"fulfilled\");\n            if (parts.fail.length > 0) {\n              return Promise.reject(map$3(parts.fail, (result) => result.reason));\n            } else {\n              return map$3(parts.pass, (result) => result.value);\n            }\n          });\n        };\n        const unload = (url2) => {\n          const urlWithSuffix = Tools._addCacheSuffix(url2);\n          get$a(loadedStates, urlWithSuffix).each((state) => {\n            const count2 = --state.count;\n            if (count2 === 0) {\n              delete loadedStates[urlWithSuffix];\n              removeStyle(state.id);\n            }\n          });\n        };\n        const unloadAll = (urls) => {\n          each$g(urls, (url2) => {\n            unload(url2);\n          });\n        };\n        return {\n          load,\n          loadAll,\n          unload,\n          unloadAll,\n          _setReferrerPolicy\n        };\n      };\n      const create$c = () => {\n        const map3 = /* @__PURE__ */ new WeakMap();\n        const forElement = (referenceElement, settings) => {\n          const root2 = getRootNode(referenceElement);\n          const rootDom = root2.dom;\n          return Optional.from(map3.get(rootDom)).getOrThunk(() => {\n            const sl = StyleSheetLoader(rootDom, settings);\n            map3.set(rootDom, sl);\n            return sl;\n          });\n        };\n        return { forElement };\n      };\n      const instance = create$c();\n      class DomTreeWalker {\n        constructor(startNode, rootNode) {\n          this.node = startNode;\n          this.rootNode = rootNode;\n          this.current = this.current.bind(this);\n          this.next = this.next.bind(this);\n          this.prev = this.prev.bind(this);\n          this.prev2 = this.prev2.bind(this);\n        }\n        current() {\n          return this.node;\n        }\n        next(shallow2) {\n          this.node = this.findSibling(this.node, \"firstChild\", \"nextSibling\", shallow2);\n          return this.node;\n        }\n        prev(shallow2) {\n          this.node = this.findSibling(this.node, \"lastChild\", \"previousSibling\", shallow2);\n          return this.node;\n        }\n        prev2(shallow2) {\n          this.node = this.findPreviousNode(this.node, \"lastChild\", \"previousSibling\", shallow2);\n          return this.node;\n        }\n        findSibling(node, startName, siblingName, shallow2) {\n          let sibling2, parent2;\n          if (node) {\n            if (!shallow2 && node[startName]) {\n              return node[startName];\n            }\n            if (node !== this.rootNode) {\n              sibling2 = node[siblingName];\n              if (sibling2) {\n                return sibling2;\n              }\n              for (parent2 = node.parentNode; parent2 && parent2 !== this.rootNode; parent2 = parent2.parentNode) {\n                sibling2 = parent2[siblingName];\n                if (sibling2) {\n                  return sibling2;\n                }\n              }\n            }\n          }\n        }\n        findPreviousNode(node, startName, siblingName, shallow2) {\n          let sibling2, parent2, child2;\n          if (node) {\n            sibling2 = node[siblingName];\n            if (this.rootNode && sibling2 === this.rootNode) {\n              return;\n            }\n            if (sibling2) {\n              if (!shallow2) {\n                for (child2 = sibling2[startName]; child2; child2 = child2[startName]) {\n                  if (!child2[startName]) {\n                    return child2;\n                  }\n                }\n              }\n              return sibling2;\n            }\n            parent2 = node.parentNode;\n            if (parent2 && parent2 !== this.rootNode) {\n              return parent2;\n            }\n          }\n        }\n      }\n      const blocks = [\n        \"article\",\n        \"aside\",\n        \"details\",\n        \"div\",\n        \"dt\",\n        \"figcaption\",\n        \"footer\",\n        \"form\",\n        \"fieldset\",\n        \"header\",\n        \"hgroup\",\n        \"html\",\n        \"main\",\n        \"nav\",\n        \"section\",\n        \"summary\",\n        \"body\",\n        \"p\",\n        \"dl\",\n        \"multicol\",\n        \"dd\",\n        \"figure\",\n        \"address\",\n        \"center\",\n        \"blockquote\",\n        \"h1\",\n        \"h2\",\n        \"h3\",\n        \"h4\",\n        \"h5\",\n        \"h6\",\n        \"listing\",\n        \"xmp\",\n        \"pre\",\n        \"plaintext\",\n        \"menu\",\n        \"dir\",\n        \"ul\",\n        \"ol\",\n        \"li\",\n        \"hr\",\n        \"table\",\n        \"tbody\",\n        \"thead\",\n        \"tfoot\",\n        \"th\",\n        \"tr\",\n        \"td\",\n        \"caption\"\n      ];\n      const tableCells = [\n        \"td\",\n        \"th\"\n      ];\n      const tableSections = [\n        \"thead\",\n        \"tbody\",\n        \"tfoot\"\n      ];\n      const textBlocks = [\n        \"h1\",\n        \"h2\",\n        \"h3\",\n        \"h4\",\n        \"h5\",\n        \"h6\",\n        \"p\",\n        \"div\",\n        \"address\",\n        \"pre\",\n        \"form\",\n        \"blockquote\",\n        \"center\",\n        \"dir\",\n        \"fieldset\",\n        \"header\",\n        \"footer\",\n        \"article\",\n        \"section\",\n        \"hgroup\",\n        \"aside\",\n        \"nav\",\n        \"figure\"\n      ];\n      const headings = [\n        \"h1\",\n        \"h2\",\n        \"h3\",\n        \"h4\",\n        \"h5\",\n        \"h6\"\n      ];\n      const listItems$1 = [\n        \"li\",\n        \"dd\",\n        \"dt\"\n      ];\n      const lists = [\n        \"ul\",\n        \"ol\",\n        \"dl\"\n      ];\n      const wsElements = [\n        \"pre\",\n        \"script\",\n        \"textarea\",\n        \"style\"\n      ];\n      const lazyLookup = (items) => {\n        let lookup2;\n        return (node) => {\n          lookup2 = lookup2 ? lookup2 : mapToObject(items, always);\n          return has$2(lookup2, name(node));\n        };\n      };\n      const isHeading = lazyLookup(headings);\n      const isBlock$2 = lazyLookup(blocks);\n      const isTable$2 = (node) => name(node) === \"table\";\n      const isInline$1 = (node) => isElement$7(node) && !isBlock$2(node);\n      const isBr$4 = (node) => isElement$7(node) && name(node) === \"br\";\n      const isTextBlock$2 = lazyLookup(textBlocks);\n      const isList = lazyLookup(lists);\n      const isListItem = lazyLookup(listItems$1);\n      const isTableSection = lazyLookup(tableSections);\n      const isTableCell$4 = lazyLookup(tableCells);\n      const isWsPreserveElement = lazyLookup(wsElements);\n      const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, selector, isRoot).isSome();\n      const zeroWidth = \"\\uFEFF\";\n      const nbsp = \" \";\n      const isZwsp$1 = (char) => char === zeroWidth;\n      const removeZwsp = (s2) => s2.replace(/\\uFEFF/g, \"\");\n      const ZWSP$1 = zeroWidth;\n      const isZwsp = isZwsp$1;\n      const trim$1 = removeZwsp;\n      const isElement$5 = isElement$6;\n      const isText$7 = isText$8;\n      const isCaretContainerBlock$1 = (node) => {\n        if (isText$7(node)) {\n          node = node.parentNode;\n        }\n        return isElement$5(node) && node.hasAttribute(\"data-mce-caret\");\n      };\n      const isCaretContainerInline = (node) => isText$7(node) && isZwsp(node.data);\n      const isCaretContainer$2 = (node) => isCaretContainerBlock$1(node) || isCaretContainerInline(node);\n      const hasContent = (node) => node.firstChild !== node.lastChild || !isBr$5(node.firstChild);\n      const insertInline$1 = (node, before2) => {\n        const doc = node.ownerDocument;\n        const textNode = doc.createTextNode(ZWSP$1);\n        const parentNode = node.parentNode;\n        if (!before2) {\n          const sibling2 = node.nextSibling;\n          if (isText$7(sibling2)) {\n            if (isCaretContainer$2(sibling2)) {\n              return sibling2;\n            }\n            if (startsWithCaretContainer$1(sibling2)) {\n              sibling2.splitText(1);\n              return sibling2;\n            }\n          }\n          if (node.nextSibling) {\n            parentNode.insertBefore(textNode, node.nextSibling);\n          } else {\n            parentNode.appendChild(textNode);\n          }\n        } else {\n          const sibling2 = node.previousSibling;\n          if (isText$7(sibling2)) {\n            if (isCaretContainer$2(sibling2)) {\n              return sibling2;\n            }\n            if (endsWithCaretContainer$1(sibling2)) {\n              return sibling2.splitText(sibling2.data.length - 1);\n            }\n          }\n          parentNode.insertBefore(textNode, node);\n        }\n        return textNode;\n      };\n      const isBeforeInline = (pos) => {\n        const container = pos.container();\n        if (!isText$8(container)) {\n          return false;\n        }\n        return container.data.charAt(pos.offset()) === ZWSP$1 || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n      };\n      const isAfterInline = (pos) => {\n        const container = pos.container();\n        if (!isText$8(container)) {\n          return false;\n        }\n        return container.data.charAt(pos.offset() - 1) === ZWSP$1 || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n      };\n      const createBogusBr = () => {\n        const br = document.createElement(\"br\");\n        br.setAttribute(\"data-mce-bogus\", \"1\");\n        return br;\n      };\n      const insertBlock = (blockName, node, before2) => {\n        const doc = node.ownerDocument;\n        const blockNode = doc.createElement(blockName);\n        blockNode.setAttribute(\"data-mce-caret\", before2 ? \"before\" : \"after\");\n        blockNode.setAttribute(\"data-mce-bogus\", \"all\");\n        blockNode.appendChild(createBogusBr());\n        const parentNode = node.parentNode;\n        if (!before2) {\n          if (node.nextSibling) {\n            parentNode.insertBefore(blockNode, node.nextSibling);\n          } else {\n            parentNode.appendChild(blockNode);\n          }\n        } else {\n          parentNode.insertBefore(blockNode, node);\n        }\n        return blockNode;\n      };\n      const startsWithCaretContainer$1 = (node) => isText$7(node) && node.data[0] === ZWSP$1;\n      const endsWithCaretContainer$1 = (node) => isText$7(node) && node.data[node.data.length - 1] === ZWSP$1;\n      const trimBogusBr = (elm) => {\n        const brs = elm.getElementsByTagName(\"br\");\n        const lastBr = brs[brs.length - 1];\n        if (isBogus$2(lastBr)) {\n          lastBr.parentNode.removeChild(lastBr);\n        }\n      };\n      const showCaretContainerBlock = (caretContainer) => {\n        if (caretContainer && caretContainer.hasAttribute(\"data-mce-caret\")) {\n          trimBogusBr(caretContainer);\n          caretContainer.removeAttribute(\"data-mce-caret\");\n          caretContainer.removeAttribute(\"data-mce-bogus\");\n          caretContainer.removeAttribute(\"style\");\n          caretContainer.removeAttribute(\"data-mce-style\");\n          caretContainer.removeAttribute(\"_moz_abspos\");\n          return caretContainer;\n        }\n        return null;\n      };\n      const isRangeInCaretContainerBlock = (range2) => isCaretContainerBlock$1(range2.startContainer);\n      const isContentEditableTrue$3 = isContentEditableTrue$4;\n      const isContentEditableFalse$9 = isContentEditableFalse$a;\n      const isBr$3 = isBr$5;\n      const isText$6 = isText$8;\n      const isInvalidTextElement = matchNodeNames([\n        \"script\",\n        \"style\",\n        \"textarea\"\n      ]);\n      const isAtomicInline = matchNodeNames([\n        \"img\",\n        \"input\",\n        \"textarea\",\n        \"hr\",\n        \"iframe\",\n        \"video\",\n        \"audio\",\n        \"object\",\n        \"embed\"\n      ]);\n      const isTable$1 = matchNodeNames([\"table\"]);\n      const isCaretContainer$1 = isCaretContainer$2;\n      const isCaretCandidate$3 = (node) => {\n        if (isCaretContainer$1(node)) {\n          return false;\n        }\n        if (isText$6(node)) {\n          return !isInvalidTextElement(node.parentNode);\n        }\n        return isAtomicInline(node) || isBr$3(node) || isTable$1(node) || isNonUiContentEditableFalse(node);\n      };\n      const isUnselectable = (node) => isElement$6(node) && node.getAttribute(\"unselectable\") === \"true\";\n      const isNonUiContentEditableFalse = (node) => isUnselectable(node) === false && isContentEditableFalse$9(node);\n      const isInEditable = (node, root2) => {\n        for (node = node.parentNode; node && node !== root2; node = node.parentNode) {\n          if (isNonUiContentEditableFalse(node)) {\n            return false;\n          }\n          if (isContentEditableTrue$3(node)) {\n            return true;\n          }\n        }\n        return true;\n      };\n      const isAtomicContentEditableFalse = (node) => {\n        if (!isNonUiContentEditableFalse(node)) {\n          return false;\n        }\n        return foldl(from(node.getElementsByTagName(\"*\")), (result, elm) => {\n          return result || isContentEditableTrue$3(elm);\n        }, false) !== true;\n      };\n      const isAtomic$1 = (node) => isAtomicInline(node) || isAtomicContentEditableFalse(node);\n      const isEditableCaretCandidate$1 = (node, root2) => isCaretCandidate$3(node) && isInEditable(node, root2);\n      const whiteSpaceRegExp = /^[ \\t\\r\\n]*$/;\n      const isWhitespaceText = (text3) => whiteSpaceRegExp.test(text3);\n      const isCollapsibleWhitespace$1 = (c2) => \" \\f\t\\v\".indexOf(c2) !== -1;\n      const isNewLineChar = (c2) => c2 === \"\\n\" || c2 === \"\\r\";\n      const isNewline = (text3, idx) => idx < text3.length && idx >= 0 ? isNewLineChar(text3[idx]) : false;\n      const normalize$4 = (text3, tabSpaces = 4, isStartOfContent = true, isEndOfContent = true) => {\n        const tabSpace = repeat(\" \", tabSpaces);\n        const normalizedText = text3.replace(/\\t/g, tabSpace);\n        const result = foldl(normalizedText, (acc, c2) => {\n          if (isCollapsibleWhitespace$1(c2) || c2 === nbsp) {\n            if (acc.pcIsSpace || acc.str === \"\" && isStartOfContent || acc.str.length === normalizedText.length - 1 && isEndOfContent || isNewline(normalizedText, acc.str.length + 1)) {\n              return {\n                pcIsSpace: false,\n                str: acc.str + nbsp\n              };\n            } else {\n              return {\n                pcIsSpace: true,\n                str: acc.str + \" \"\n              };\n            }\n          } else {\n            return {\n              pcIsSpace: isNewLineChar(c2),\n              str: acc.str + c2\n            };\n          }\n        }, {\n          pcIsSpace: false,\n          str: \"\"\n        });\n        return result.str;\n      };\n      const hasWhitespacePreserveParent = (node, rootNode) => {\n        const rootElement = SugarElement.fromDom(rootNode);\n        const startNode = SugarElement.fromDom(node);\n        return ancestor$1(startNode, \"pre,code\", curry(eq2, rootElement));\n      };\n      const isWhitespace$1 = (node, rootNode) => {\n        return isText$8(node) && isWhitespaceText(node.data) && hasWhitespacePreserveParent(node, rootNode) === false;\n      };\n      const isNamedAnchor = (node) => {\n        return isElement$6(node) && node.nodeName === \"A\" && !node.hasAttribute(\"href\") && (node.hasAttribute(\"name\") || node.hasAttribute(\"id\"));\n      };\n      const isContent$1 = (node, rootNode) => {\n        return isCaretCandidate$3(node) && isWhitespace$1(node, rootNode) === false || isNamedAnchor(node) || isBookmark(node);\n      };\n      const isBookmark = hasAttribute(\"data-mce-bookmark\");\n      const isBogus$1 = hasAttribute(\"data-mce-bogus\");\n      const isBogusAll = hasAttributeValue(\"data-mce-bogus\", \"all\");\n      const isEmptyNode = (targetNode, skipBogus) => {\n        let brCount = 0;\n        if (isContent$1(targetNode, targetNode)) {\n          return false;\n        } else {\n          let node = targetNode.firstChild;\n          if (!node) {\n            return true;\n          }\n          const walker = new DomTreeWalker(node, targetNode);\n          do {\n            if (skipBogus) {\n              if (isBogusAll(node)) {\n                node = walker.next(true);\n                continue;\n              }\n              if (isBogus$1(node)) {\n                node = walker.next();\n                continue;\n              }\n            }\n            if (isBr$5(node)) {\n              brCount++;\n              node = walker.next();\n              continue;\n            }\n            if (isContent$1(node, targetNode)) {\n              return false;\n            }\n            node = walker.next();\n          } while (node);\n          return brCount <= 1;\n        }\n      };\n      const isEmpty$2 = (elm, skipBogus = true) => isEmptyNode(elm.dom, skipBogus);\n      const isSpan = (node) => node.nodeName.toLowerCase() === \"span\";\n      const isInlineContent = (node, root2) => isNonNullable(node) && (isContent$1(node, root2) || isInline$1(SugarElement.fromDom(node)));\n      const surroundedByInlineContent = (node, root2) => {\n        const prev2 = new DomTreeWalker(node, root2).prev(false);\n        const next2 = new DomTreeWalker(node, root2).next(false);\n        const prevIsInline = isUndefined2(prev2) || isInlineContent(prev2, root2);\n        const nextIsInline = isUndefined2(next2) || isInlineContent(next2, root2);\n        return prevIsInline && nextIsInline;\n      };\n      const isBookmarkNode$2 = (node) => isSpan(node) && node.getAttribute(\"data-mce-type\") === \"bookmark\";\n      const isKeepTextNode = (node, root2) => isText$8(node) && node.data.length > 0 && surroundedByInlineContent(node, root2);\n      const isKeepElement = (node) => isElement$6(node) ? node.childNodes.length > 0 : false;\n      const isDocument = (node) => isDocumentFragment(node) || isDocument$1(node);\n      const trimNode = (dom3, node, root2) => {\n        const rootNode = root2 || node;\n        if (isElement$6(node) && isBookmarkNode$2(node)) {\n          return node;\n        }\n        const children2 = node.childNodes;\n        for (let i3 = children2.length - 1; i3 >= 0; i3--) {\n          trimNode(dom3, children2[i3], rootNode);\n        }\n        if (isElement$6(node)) {\n          const currentChildren = node.childNodes;\n          if (currentChildren.length === 1 && isBookmarkNode$2(currentChildren[0])) {\n            node.parentNode.insertBefore(currentChildren[0], node);\n          }\n        }\n        if (!isDocument(node) && !isContent$1(node, rootNode) && !isKeepElement(node) && !isKeepTextNode(node, rootNode)) {\n          dom3.remove(node);\n        }\n        return node;\n      };\n      const makeMap$3 = Tools.makeMap;\n      const attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n      const textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n      const rawCharsRegExp = /[<>&\\\"\\']/g;\n      const entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n      const asciiMap = {\n        128: \"€\",\n        130: \"‚\",\n        131: \"ƒ\",\n        132: \"„\",\n        133: \"…\",\n        134: \"†\",\n        135: \"‡\",\n        136: \"ˆ\",\n        137: \"‰\",\n        138: \"Š\",\n        139: \"‹\",\n        140: \"Œ\",\n        142: \"Ž\",\n        145: \"‘\",\n        146: \"’\",\n        147: \"“\",\n        148: \"”\",\n        149: \"•\",\n        150: \"–\",\n        151: \"—\",\n        152: \"˜\",\n        153: \"™\",\n        154: \"š\",\n        155: \"›\",\n        156: \"œ\",\n        158: \"ž\",\n        159: \"Ÿ\"\n      };\n      const baseEntities = {\n        '\"': \"&quot;\",\n        \"'\": \"&#39;\",\n        \"<\": \"&lt;\",\n        \">\": \"&gt;\",\n        \"&\": \"&amp;\",\n        \"`\": \"&#96;\"\n      };\n      const reverseEntities = {\n        \"&lt;\": \"<\",\n        \"&gt;\": \">\",\n        \"&amp;\": \"&\",\n        \"&quot;\": '\"',\n        \"&apos;\": `'`\n      };\n      const nativeDecode = (text3) => {\n        const elm = SugarElement.fromTag(\"div\").dom;\n        elm.innerHTML = text3;\n        return elm.textContent || elm.innerText || text3;\n      };\n      const buildEntitiesLookup = (items, radix) => {\n        let i3, chr, entity2;\n        const lookup2 = {};\n        if (items) {\n          items = items.split(\",\");\n          radix = radix || 10;\n          for (i3 = 0; i3 < items.length; i3 += 2) {\n            chr = String.fromCharCode(parseInt(items[i3], radix));\n            if (!baseEntities[chr]) {\n              entity2 = \"&\" + items[i3 + 1] + \";\";\n              lookup2[chr] = entity2;\n              lookup2[entity2] = chr;\n            }\n          }\n          return lookup2;\n        }\n      };\n      const namedEntities = buildEntitiesLookup(\"50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro\", 32);\n      const encodeRaw = (text3, attr) => text3.replace(attr ? attrsCharsRegExp : textCharsRegExp, (chr) => {\n        return baseEntities[chr] || chr;\n      });\n      const encodeAllRaw = (text3) => (\"\" + text3).replace(rawCharsRegExp, (chr) => {\n        return baseEntities[chr] || chr;\n      });\n      const encodeNumeric = (text3, attr) => text3.replace(attr ? attrsCharsRegExp : textCharsRegExp, (chr) => {\n        if (chr.length > 1) {\n          return \"&#\" + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + \";\";\n        }\n        return baseEntities[chr] || \"&#\" + chr.charCodeAt(0) + \";\";\n      });\n      const encodeNamed = (text3, attr, entities) => {\n        entities = entities || namedEntities;\n        return text3.replace(attr ? attrsCharsRegExp : textCharsRegExp, (chr) => {\n          return baseEntities[chr] || entities[chr] || chr;\n        });\n      };\n      const getEncodeFunc = (name2, entities) => {\n        const entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n        const encodeNamedAndNumeric = (text3, attr) => text3.replace(attr ? attrsCharsRegExp : textCharsRegExp, (chr) => {\n          if (baseEntities[chr] !== void 0) {\n            return baseEntities[chr];\n          }\n          if (entitiesMap[chr] !== void 0) {\n            return entitiesMap[chr];\n          }\n          if (chr.length > 1) {\n            return \"&#\" + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + \";\";\n          }\n          return \"&#\" + chr.charCodeAt(0) + \";\";\n        });\n        const encodeCustomNamed = (text3, attr) => {\n          return encodeNamed(text3, attr, entitiesMap);\n        };\n        const nameMap = makeMap$3(name2.replace(/\\+/g, \",\"));\n        if (nameMap.named && nameMap.numeric) {\n          return encodeNamedAndNumeric;\n        }\n        if (nameMap.named) {\n          if (entities) {\n            return encodeCustomNamed;\n          }\n          return encodeNamed;\n        }\n        if (nameMap.numeric) {\n          return encodeNumeric;\n        }\n        return encodeRaw;\n      };\n      const decode2 = (text3) => text3.replace(entityRegExp, (all2, numeric) => {\n        if (numeric) {\n          if (numeric.charAt(0).toLowerCase() === \"x\") {\n            numeric = parseInt(numeric.substr(1), 16);\n          } else {\n            numeric = parseInt(numeric, 10);\n          }\n          if (numeric > 65535) {\n            numeric -= 65536;\n            return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n          }\n          return asciiMap[numeric] || String.fromCharCode(numeric);\n        }\n        return reverseEntities[all2] || namedEntities[all2] || nativeDecode(all2);\n      });\n      const Entities = {\n        encodeRaw,\n        encodeAllRaw,\n        encodeNumeric,\n        encodeNamed,\n        getEncodeFunc,\n        decode: decode2\n      };\n      const mapCache = {}, dummyObj = {};\n      const makeMap$2 = Tools.makeMap, each$d = Tools.each, extend$2 = Tools.extend, explode$2 = Tools.explode, inArray = Tools.inArray;\n      const split$1 = (items, delim) => {\n        items = Tools.trim(items);\n        return items ? items.split(delim || \" \") : [];\n      };\n      const compileSchema = (type2) => {\n        const schema = {};\n        let globalAttributes, blockContent;\n        let phrasingContent, flowContent, html4BlockContent, html4PhrasingContent;\n        const add3 = (name2, attributes = \"\", children2 = \"\") => {\n          const childNames = split$1(children2);\n          const names = split$1(name2);\n          let ni = names.length;\n          while (ni--) {\n            const attributesOrder = split$1([\n              globalAttributes,\n              attributes\n            ].join(\" \"));\n            schema[names[ni]] = {\n              attributes: mapToObject(attributesOrder, () => ({})),\n              attributesOrder,\n              children: mapToObject(childNames, constant2(dummyObj))\n            };\n          }\n        };\n        const addAttrs = (name2, attributes) => {\n          const names = split$1(name2);\n          const attrs = split$1(attributes);\n          let ni = names.length;\n          while (ni--) {\n            const schemaItem = schema[names[ni]];\n            for (let i3 = 0, l2 = attrs.length; i3 < l2; i3++) {\n              schemaItem.attributes[attrs[i3]] = {};\n              schemaItem.attributesOrder.push(attrs[i3]);\n            }\n          }\n        };\n        if (mapCache[type2]) {\n          return mapCache[type2];\n        }\n        globalAttributes = \"id accesskey class dir lang style tabindex title role\";\n        blockContent = \"address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul\";\n        phrasingContent = \"a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment\";\n        if (type2 !== \"html4\") {\n          globalAttributes += \" contenteditable contextmenu draggable dropzone hidden spellcheck translate\";\n          blockContent += \" article aside details dialog figure main header footer hgroup section nav\";\n          phrasingContent += \" audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen\";\n        }\n        if (type2 !== \"html5-strict\") {\n          globalAttributes += \" xml:lang\";\n          html4PhrasingContent = \"acronym applet basefont big font strike tt\";\n          phrasingContent = [\n            phrasingContent,\n            html4PhrasingContent\n          ].join(\" \");\n          each$d(split$1(html4PhrasingContent), (name2) => {\n            add3(name2, \"\", phrasingContent);\n          });\n          html4BlockContent = \"center dir isindex noframes\";\n          blockContent = [\n            blockContent,\n            html4BlockContent\n          ].join(\" \");\n          flowContent = [\n            blockContent,\n            phrasingContent\n          ].join(\" \");\n          each$d(split$1(html4BlockContent), (name2) => {\n            add3(name2, \"\", flowContent);\n          });\n        }\n        flowContent = flowContent || [\n          blockContent,\n          phrasingContent\n        ].join(\" \");\n        add3(\"html\", \"manifest\", \"head body\");\n        add3(\"head\", \"\", \"base command link meta noscript script style title\");\n        add3(\"title hr noscript br\");\n        add3(\"base\", \"href target\");\n        add3(\"link\", \"href rel media hreflang type sizes hreflang\");\n        add3(\"meta\", \"name http-equiv content charset\");\n        add3(\"style\", \"media type scoped\");\n        add3(\"script\", \"src async defer type charset\");\n        add3(\"body\", \"onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload\", flowContent);\n        add3(\"address dt dd div caption\", \"\", flowContent);\n        add3(\"h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn\", \"\", phrasingContent);\n        add3(\"blockquote\", \"cite\", flowContent);\n        add3(\"ol\", \"reversed start type\", \"li\");\n        add3(\"ul\", \"\", \"li\");\n        add3(\"li\", \"value\", flowContent);\n        add3(\"dl\", \"\", \"dt dd\");\n        add3(\"a\", \"href target rel media hreflang type\", phrasingContent);\n        add3(\"q\", \"cite\", phrasingContent);\n        add3(\"ins del\", \"cite datetime\", flowContent);\n        add3(\"img\", \"src sizes srcset alt usemap ismap width height\");\n        add3(\"iframe\", \"src name width height\", flowContent);\n        add3(\"embed\", \"src type width height\");\n        add3(\"object\", \"data type typemustmatch name usemap form width height\", [\n          flowContent,\n          \"param\"\n        ].join(\" \"));\n        add3(\"param\", \"name value\");\n        add3(\"map\", \"name\", [\n          flowContent,\n          \"area\"\n        ].join(\" \"));\n        add3(\"area\", \"alt coords shape href target rel media hreflang type\");\n        add3(\"table\", \"border\", \"caption colgroup thead tfoot tbody tr\" + (type2 === \"html4\" ? \" col\" : \"\"));\n        add3(\"colgroup\", \"span\", \"col\");\n        add3(\"col\", \"span\");\n        add3(\"tbody thead tfoot\", \"\", \"tr\");\n        add3(\"tr\", \"\", \"td th\");\n        add3(\"td\", \"colspan rowspan headers\", flowContent);\n        add3(\"th\", \"colspan rowspan headers scope abbr\", flowContent);\n        add3(\"form\", \"accept-charset action autocomplete enctype method name novalidate target\", flowContent);\n        add3(\"fieldset\", \"disabled form name\", [\n          flowContent,\n          \"legend\"\n        ].join(\" \"));\n        add3(\"label\", \"form for\", phrasingContent);\n        add3(\"input\", \"accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width\");\n        add3(\"button\", \"disabled form formaction formenctype formmethod formnovalidate formtarget name type value\", type2 === \"html4\" ? flowContent : phrasingContent);\n        add3(\"select\", \"disabled form multiple name required size\", \"option optgroup\");\n        add3(\"optgroup\", \"disabled label\", \"option\");\n        add3(\"option\", \"disabled label selected value\");\n        add3(\"textarea\", \"cols dirname disabled form maxlength name readonly required rows wrap\");\n        add3(\"menu\", \"type label\", [\n          flowContent,\n          \"li\"\n        ].join(\" \"));\n        add3(\"noscript\", \"\", flowContent);\n        if (type2 !== \"html4\") {\n          add3(\"wbr\");\n          add3(\"ruby\", \"\", [\n            phrasingContent,\n            \"rt rp\"\n          ].join(\" \"));\n          add3(\"figcaption\", \"\", flowContent);\n          add3(\"mark rt rp summary bdi\", \"\", phrasingContent);\n          add3(\"canvas\", \"width height\", flowContent);\n          add3(\"video\", \"src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered\", [\n            flowContent,\n            \"track source\"\n          ].join(\" \"));\n          add3(\"audio\", \"src crossorigin preload autoplay mediagroup loop muted controls buffered volume\", [\n            flowContent,\n            \"track source\"\n          ].join(\" \"));\n          add3(\"picture\", \"\", \"img source\");\n          add3(\"source\", \"src srcset type media sizes\");\n          add3(\"track\", \"kind src srclang label default\");\n          add3(\"datalist\", \"\", [\n            phrasingContent,\n            \"option\"\n          ].join(\" \"));\n          add3(\"article section nav aside main header footer\", \"\", flowContent);\n          add3(\"hgroup\", \"\", \"h1 h2 h3 h4 h5 h6\");\n          add3(\"figure\", \"\", [\n            flowContent,\n            \"figcaption\"\n          ].join(\" \"));\n          add3(\"time\", \"datetime\", phrasingContent);\n          add3(\"dialog\", \"open\", flowContent);\n          add3(\"command\", \"type label icon disabled checked radiogroup command\");\n          add3(\"output\", \"for form name\", phrasingContent);\n          add3(\"progress\", \"value max\", phrasingContent);\n          add3(\"meter\", \"value min max low high optimum\", phrasingContent);\n          add3(\"details\", \"open\", [\n            flowContent,\n            \"summary\"\n          ].join(\" \"));\n          add3(\"keygen\", \"autofocus challenge disabled form keytype name\");\n        }\n        if (type2 !== \"html5-strict\") {\n          addAttrs(\"script\", \"language xml:space\");\n          addAttrs(\"style\", \"xml:space\");\n          addAttrs(\"object\", \"declare classid code codebase codetype archive standby align border hspace vspace\");\n          addAttrs(\"embed\", \"align name hspace vspace\");\n          addAttrs(\"param\", \"valuetype type\");\n          addAttrs(\"a\", \"charset name rev shape coords\");\n          addAttrs(\"br\", \"clear\");\n          addAttrs(\"applet\", \"codebase archive code object alt name width height align hspace vspace\");\n          addAttrs(\"img\", \"name longdesc align border hspace vspace\");\n          addAttrs(\"iframe\", \"longdesc frameborder marginwidth marginheight scrolling align\");\n          addAttrs(\"font basefont\", \"size color face\");\n          addAttrs(\"input\", \"usemap align\");\n          addAttrs(\"select\");\n          addAttrs(\"textarea\");\n          addAttrs(\"h1 h2 h3 h4 h5 h6 div p legend caption\", \"align\");\n          addAttrs(\"ul\", \"type compact\");\n          addAttrs(\"li\", \"type\");\n          addAttrs(\"ol dl menu dir\", \"compact\");\n          addAttrs(\"pre\", \"width xml:space\");\n          addAttrs(\"hr\", \"align noshade size width\");\n          addAttrs(\"isindex\", \"prompt\");\n          addAttrs(\"table\", \"summary width frame rules cellspacing cellpadding align bgcolor\");\n          addAttrs(\"col\", \"width align char charoff valign\");\n          addAttrs(\"colgroup\", \"width align char charoff valign\");\n          addAttrs(\"thead\", \"align char charoff valign\");\n          addAttrs(\"tr\", \"align char charoff valign bgcolor\");\n          addAttrs(\"th\", \"axis align char charoff valign nowrap bgcolor width height\");\n          addAttrs(\"form\", \"accept\");\n          addAttrs(\"td\", \"abbr axis scope align char charoff valign nowrap bgcolor width height\");\n          addAttrs(\"tfoot\", \"align char charoff valign\");\n          addAttrs(\"tbody\", \"align char charoff valign\");\n          addAttrs(\"area\", \"nohref\");\n          addAttrs(\"body\", \"background bgcolor text link vlink alink\");\n        }\n        if (type2 !== \"html4\") {\n          addAttrs(\"input button select textarea\", \"autofocus\");\n          addAttrs(\"input textarea\", \"placeholder\");\n          addAttrs(\"a\", \"download\");\n          addAttrs(\"link script img\", \"crossorigin\");\n          addAttrs(\"img\", \"loading\");\n          addAttrs(\"iframe\", \"sandbox seamless allowfullscreen loading\");\n        }\n        if (type2 !== \"html4\") {\n          each$g([\n            schema.video,\n            schema.audio\n          ], (item) => {\n            delete item.children.audio;\n            delete item.children.video;\n          });\n        }\n        each$d(split$1(\"a form meter progress dfn\"), (name2) => {\n          if (schema[name2]) {\n            delete schema[name2].children[name2];\n          }\n        });\n        delete schema.caption.children.table;\n        delete schema.script;\n        mapCache[type2] = schema;\n        return schema;\n      };\n      const compileElementMap = (value2, mode) => {\n        let styles;\n        if (value2) {\n          styles = {};\n          if (typeof value2 === \"string\") {\n            value2 = { \"*\": value2 };\n          }\n          each$d(value2, (value3, key) => {\n            styles[key] = styles[key.toUpperCase()] = mode === \"map\" ? makeMap$2(value3, /[, ]/) : explode$2(value3, /[, ]/);\n          });\n        }\n        return styles;\n      };\n      const Schema = (settings) => {\n        var _a3;\n        const elements = {};\n        const children2 = {};\n        let patternElements = [];\n        const customElementsMap = {}, specialElements = {};\n        const createLookupTable = (option2, defaultValue, extendWith) => {\n          let value2 = settings[option2];\n          if (!value2) {\n            value2 = mapCache[option2];\n            if (!value2) {\n              value2 = makeMap$2(defaultValue, \" \", makeMap$2(defaultValue.toUpperCase(), \" \"));\n              value2 = extend$2(value2, extendWith);\n              mapCache[option2] = value2;\n            }\n          } else {\n            value2 = makeMap$2(value2, /[, ]/, makeMap$2(value2.toUpperCase(), /[, ]/));\n          }\n          return value2;\n        };\n        settings = settings || {};\n        const schemaType = (_a3 = settings.schema) !== null && _a3 !== void 0 ? _a3 : \"html5\";\n        const schemaItems = compileSchema(schemaType);\n        if (settings.verify_html === false) {\n          settings.valid_elements = \"*[*]\";\n        }\n        const validStyles = compileElementMap(settings.valid_styles);\n        const invalidStyles = compileElementMap(settings.invalid_styles, \"map\");\n        const validClasses = compileElementMap(settings.valid_classes, \"map\");\n        const whitespaceElementsMap = createLookupTable(\"whitespace_elements\", \"pre script noscript style textarea video audio iframe object code\");\n        const selfClosingElementsMap = createLookupTable(\"self_closing_elements\", \"colgroup dd dt li option p td tfoot th thead tr\");\n        const voidElementsMap = createLookupTable(\"void_elements\", \"area base basefont br col frame hr img input isindex link meta param embed source wbr track\");\n        const boolAttrMap = createLookupTable(\"boolean_attributes\", \"checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls allowfullscreen\");\n        const nonEmptyOrMoveCaretBeforeOnEnter = \"td th iframe video audio object script code\";\n        const nonEmptyElementsMap = createLookupTable(\"non_empty_elements\", nonEmptyOrMoveCaretBeforeOnEnter + \" pre\", voidElementsMap);\n        const moveCaretBeforeOnEnterElementsMap = createLookupTable(\"move_caret_before_on_enter_elements\", nonEmptyOrMoveCaretBeforeOnEnter + \" table\", voidElementsMap);\n        const textBlockElementsMap = createLookupTable(\"text_block_elements\", \"h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside main nav figure\");\n        const blockElementsMap = createLookupTable(\"block_elements\", \"hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption details summary\", textBlockElementsMap);\n        const textInlineElementsMap = createLookupTable(\"text_inline_elements\", \"span strong b em i font strike u var cite dfn code mark q sup sub samp\");\n        each$d(\"script noscript iframe noframes noembed title style textarea xmp plaintext\".split(\" \"), (name2) => {\n          specialElements[name2] = new RegExp(\"</\" + name2 + \"[^>]*>\", \"gi\");\n        });\n        const patternToRegExp = (str) => new RegExp(\"^\" + str.replace(/([?+*])/g, \".$1\") + \"$\");\n        const addValidElements = (validElements) => {\n          let ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, value2;\n          const elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/, attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=~<]+)?(?:([=~<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\n          if (validElements) {\n            const validElementsArr = split$1(validElements, \",\");\n            if (elements[\"@\"]) {\n              globalAttributes = elements[\"@\"].attributes;\n              globalAttributesOrder = elements[\"@\"].attributesOrder;\n            }\n            for (ei = 0, el = validElementsArr.length; ei < el; ei++) {\n              matches = elementRuleRegExp.exec(validElementsArr[ei]);\n              if (matches) {\n                prefix = matches[1];\n                elementName = matches[2];\n                outputName = matches[3];\n                attrData = matches[5];\n                attributes = {};\n                attributesOrder = [];\n                element = {\n                  attributes,\n                  attributesOrder\n                };\n                if (prefix === \"#\") {\n                  element.paddEmpty = true;\n                }\n                if (prefix === \"-\") {\n                  element.removeEmpty = true;\n                }\n                if (matches[4] === \"!\") {\n                  element.removeEmptyAttrs = true;\n                }\n                if (globalAttributes) {\n                  each$f(globalAttributes, (value3, key) => {\n                    attributes[key] = value3;\n                  });\n                  attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\n                }\n                if (attrData) {\n                  attrData = split$1(attrData, \"|\");\n                  for (ai = 0, al = attrData.length; ai < al; ai++) {\n                    matches = attrRuleRegExp.exec(attrData[ai]);\n                    if (matches) {\n                      attr = {};\n                      attrType = matches[1];\n                      attrName = matches[2].replace(/[\\\\:]:/g, \":\");\n                      prefix = matches[3];\n                      value2 = matches[4];\n                      if (attrType === \"!\") {\n                        element.attributesRequired = element.attributesRequired || [];\n                        element.attributesRequired.push(attrName);\n                        attr.required = true;\n                      }\n                      if (attrType === \"-\") {\n                        delete attributes[attrName];\n                        attributesOrder.splice(inArray(attributesOrder, attrName), 1);\n                        continue;\n                      }\n                      if (prefix) {\n                        if (prefix === \"=\") {\n                          element.attributesDefault = element.attributesDefault || [];\n                          element.attributesDefault.push({\n                            name: attrName,\n                            value: value2\n                          });\n                          attr.defaultValue = value2;\n                        }\n                        if (prefix === \"~\") {\n                          element.attributesForced = element.attributesForced || [];\n                          element.attributesForced.push({\n                            name: attrName,\n                            value: value2\n                          });\n                          attr.forcedValue = value2;\n                        }\n                        if (prefix === \"<\") {\n                          attr.validValues = makeMap$2(value2, \"?\");\n                        }\n                      }\n                      if (hasPatternsRegExp.test(attrName)) {\n                        element.attributePatterns = element.attributePatterns || [];\n                        attr.pattern = patternToRegExp(attrName);\n                        element.attributePatterns.push(attr);\n                      } else {\n                        if (!attributes[attrName]) {\n                          attributesOrder.push(attrName);\n                        }\n                        attributes[attrName] = attr;\n                      }\n                    }\n                  }\n                }\n                if (!globalAttributes && elementName === \"@\") {\n                  globalAttributes = attributes;\n                  globalAttributesOrder = attributesOrder;\n                }\n                if (outputName) {\n                  element.outputName = elementName;\n                  elements[outputName] = element;\n                }\n                if (hasPatternsRegExp.test(elementName)) {\n                  element.pattern = patternToRegExp(elementName);\n                  patternElements.push(element);\n                } else {\n                  elements[elementName] = element;\n                }\n              }\n            }\n          }\n        };\n        const setValidElements = (validElements) => {\n          patternElements = [];\n          each$g(keys2(elements), (name2) => {\n            delete elements[name2];\n          });\n          addValidElements(validElements);\n          each$d(schemaItems, (element, name2) => {\n            children2[name2] = element.children;\n          });\n        };\n        const addCustomElements = (customElements2) => {\n          const customElementRegExp = /^(~)?(.+)$/;\n          if (customElements2) {\n            mapCache.text_block_elements = mapCache.block_elements = null;\n            each$d(split$1(customElements2, \",\"), (rule) => {\n              const matches = customElementRegExp.exec(rule), inline2 = matches[1] === \"~\", cloneName = inline2 ? \"span\" : \"div\", name2 = matches[2];\n              children2[name2] = children2[cloneName];\n              customElementsMap[name2] = cloneName;\n              if (!inline2) {\n                blockElementsMap[name2.toUpperCase()] = {};\n                blockElementsMap[name2] = {};\n              }\n              if (!elements[name2]) {\n                let customRule = elements[cloneName];\n                customRule = extend$2({}, customRule);\n                delete customRule.removeEmptyAttrs;\n                delete customRule.removeEmpty;\n                elements[name2] = customRule;\n              }\n              each$d(children2, (element, elmName) => {\n                if (element[cloneName]) {\n                  children2[elmName] = element = extend$2({}, children2[elmName]);\n                  element[name2] = element[cloneName];\n                }\n              });\n            });\n          }\n        };\n        const addValidChildren = (validChildren) => {\n          const childRuleRegExp = /^([+\\-]?)([A-Za-z0-9_\\-.\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f-\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]+)\\[([^\\]]+)]$/;\n          mapCache[schemaType] = null;\n          if (validChildren) {\n            each$d(split$1(validChildren, \",\"), (rule) => {\n              const matches = childRuleRegExp.exec(rule);\n              let parent2, prefix;\n              if (matches) {\n                prefix = matches[1];\n                if (prefix) {\n                  parent2 = children2[matches[2]];\n                } else {\n                  parent2 = children2[matches[2]] = { \"#comment\": {} };\n                }\n                parent2 = children2[matches[2]];\n                each$d(split$1(matches[3], \"|\"), (child2) => {\n                  if (prefix === \"-\") {\n                    delete parent2[child2];\n                  } else {\n                    parent2[child2] = {};\n                  }\n                });\n              }\n            });\n          }\n        };\n        const getElementRule = (name2) => {\n          let element = elements[name2], i3;\n          if (element) {\n            return element;\n          }\n          i3 = patternElements.length;\n          while (i3--) {\n            element = patternElements[i3];\n            if (element.pattern.test(name2)) {\n              return element;\n            }\n          }\n        };\n        if (!settings.valid_elements) {\n          each$d(schemaItems, (element, name2) => {\n            elements[name2] = {\n              attributes: element.attributes,\n              attributesOrder: element.attributesOrder\n            };\n            children2[name2] = element.children;\n          });\n          each$d(split$1(\"strong/b em/i\"), (item) => {\n            const items = split$1(item, \"/\");\n            elements[items[1]].outputName = items[0];\n          });\n          each$d(split$1(\"ol ul sub sup blockquote span font a table tbody strong em b i\"), (name2) => {\n            if (elements[name2]) {\n              elements[name2].removeEmpty = true;\n            }\n          });\n          each$d(split$1(\"p h1 h2 h3 h4 h5 h6 th td pre div address caption li\"), (name2) => {\n            elements[name2].paddEmpty = true;\n          });\n          each$d(split$1(\"span\"), (name2) => {\n            elements[name2].removeEmptyAttrs = true;\n          });\n        } else {\n          setValidElements(settings.valid_elements);\n        }\n        addCustomElements(settings.custom_elements);\n        addValidChildren(settings.valid_children);\n        addValidElements(settings.extended_valid_elements);\n        addValidChildren(\"+ol[ul|ol],+ul[ul|ol]\");\n        each$d({\n          dd: \"dl\",\n          dt: \"dl\",\n          li: \"ul ol\",\n          td: \"tr\",\n          th: \"tr\",\n          tr: \"tbody thead tfoot\",\n          tbody: \"table\",\n          thead: \"table\",\n          tfoot: \"table\",\n          legend: \"fieldset\",\n          area: \"map\",\n          param: \"video audio object\"\n        }, (parents2, item) => {\n          if (elements[item]) {\n            elements[item].parentsRequired = split$1(parents2);\n          }\n        });\n        if (settings.invalid_elements) {\n          each$d(explode$2(settings.invalid_elements), (item) => {\n            if (elements[item]) {\n              delete elements[item];\n            }\n          });\n        }\n        if (!getElementRule(\"span\")) {\n          addValidElements(\"span[!data-mce-type|*]\");\n        }\n        const getValidStyles = constant2(validStyles);\n        const getInvalidStyles = constant2(invalidStyles);\n        const getValidClasses = constant2(validClasses);\n        const getBoolAttrs = constant2(boolAttrMap);\n        const getBlockElements = constant2(blockElementsMap);\n        const getTextBlockElements = constant2(textBlockElementsMap);\n        const getTextInlineElements = constant2(textInlineElementsMap);\n        const getVoidElements = constant2(Object.seal(voidElementsMap));\n        const getSelfClosingElements = constant2(selfClosingElementsMap);\n        const getNonEmptyElements = constant2(nonEmptyElementsMap);\n        const getMoveCaretBeforeOnEnterElements = constant2(moveCaretBeforeOnEnterElementsMap);\n        const getWhitespaceElements = constant2(whitespaceElementsMap);\n        const getSpecialElements = constant2(Object.seal(specialElements));\n        const isValidChild = (name2, child2) => {\n          const parent2 = children2[name2.toLowerCase()];\n          return !!(parent2 && parent2[child2.toLowerCase()]);\n        };\n        const isValid2 = (name2, attr) => {\n          let attrPatterns, i3;\n          const rule = getElementRule(name2);\n          if (rule) {\n            if (attr) {\n              if (rule.attributes[attr]) {\n                return true;\n              }\n              attrPatterns = rule.attributePatterns;\n              if (attrPatterns) {\n                i3 = attrPatterns.length;\n                while (i3--) {\n                  if (attrPatterns[i3].pattern.test(attr)) {\n                    return true;\n                  }\n                }\n              }\n            } else {\n              return true;\n            }\n          }\n          return false;\n        };\n        const getCustomElements = constant2(customElementsMap);\n        return {\n          type: schemaType,\n          children: children2,\n          elements,\n          getValidStyles,\n          getValidClasses,\n          getBlockElements,\n          getInvalidStyles,\n          getVoidElements,\n          getTextBlockElements,\n          getTextInlineElements,\n          getBoolAttrs,\n          getElementRule,\n          getSelfClosingElements,\n          getNonEmptyElements,\n          getMoveCaretBeforeOnEnterElements,\n          getWhitespaceElements,\n          getSpecialElements,\n          isValidChild,\n          isValid: isValid2,\n          getCustomElements,\n          addValidElements,\n          setValidElements,\n          addCustomElements,\n          addValidChildren\n        };\n      };\n      const Styles = (settings, schema) => {\n        const urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n        const styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n        const trimRightRegExp = /\\s+$/;\n        let i3;\n        const encodingLookup = {};\n        let validStyles;\n        let invalidStyles;\n        const invisibleChar = zeroWidth;\n        settings = settings || {};\n        if (schema) {\n          validStyles = schema.getValidStyles();\n          invalidStyles = schema.getInvalidStyles();\n        }\n        const encodingItems = (`\\\\\" \\\\' \\\\; \\\\: ; : ` + invisibleChar).split(\" \");\n        for (i3 = 0; i3 < encodingItems.length; i3++) {\n          encodingLookup[encodingItems[i3]] = invisibleChar + i3;\n          encodingLookup[invisibleChar + i3] = encodingItems[i3];\n        }\n        const self2 = {\n          parse: (css) => {\n            const styles = {};\n            let matches, name2, value2, isEncoded;\n            const urlConverter = settings.url_converter;\n            const urlConverterScope = settings.url_converter_scope || self2;\n            const compress = (prefix, suffix, noJoin) => {\n              const top = styles[prefix + \"-top\" + suffix];\n              if (!top) {\n                return;\n              }\n              const right = styles[prefix + \"-right\" + suffix];\n              if (!right) {\n                return;\n              }\n              const bottom = styles[prefix + \"-bottom\" + suffix];\n              if (!bottom) {\n                return;\n              }\n              const left = styles[prefix + \"-left\" + suffix];\n              if (!left) {\n                return;\n              }\n              const box = [\n                top,\n                right,\n                bottom,\n                left\n              ];\n              i3 = box.length - 1;\n              while (i3--) {\n                if (box[i3] !== box[i3 + 1]) {\n                  break;\n                }\n              }\n              if (i3 > -1 && noJoin) {\n                return;\n              }\n              styles[prefix + suffix] = i3 === -1 ? box[0] : box.join(\" \");\n              delete styles[prefix + \"-top\" + suffix];\n              delete styles[prefix + \"-right\" + suffix];\n              delete styles[prefix + \"-bottom\" + suffix];\n              delete styles[prefix + \"-left\" + suffix];\n            };\n            const canCompress = (key) => {\n              let value3 = styles[key], i4;\n              if (!value3) {\n                return;\n              }\n              value3 = value3.split(\" \");\n              i4 = value3.length;\n              while (i4--) {\n                if (value3[i4] !== value3[0]) {\n                  return false;\n                }\n              }\n              styles[key] = value3[0];\n              return true;\n            };\n            const compress2 = (target, a2, b2, c2) => {\n              if (!canCompress(a2)) {\n                return;\n              }\n              if (!canCompress(b2)) {\n                return;\n              }\n              if (!canCompress(c2)) {\n                return;\n              }\n              styles[target] = styles[a2] + \" \" + styles[b2] + \" \" + styles[c2];\n              delete styles[a2];\n              delete styles[b2];\n              delete styles[c2];\n            };\n            const encode2 = (str) => {\n              isEncoded = true;\n              return encodingLookup[str];\n            };\n            const decode3 = (str, keepSlashes) => {\n              if (isEncoded) {\n                str = str.replace(/\\uFEFF[0-9]/g, (str2) => {\n                  return encodingLookup[str2];\n                });\n              }\n              if (!keepSlashes) {\n                str = str.replace(/\\\\([\\'\\\";:])/g, \"$1\");\n              }\n              return str;\n            };\n            const decodeSingleHexSequence = (escSeq) => {\n              return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n            };\n            const decodeHexSequences = (value3) => {\n              return value3.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n            };\n            const processUrl = (match4, url2, url22, url3, str, str2) => {\n              str = str || str2;\n              if (str) {\n                str = decode3(str);\n                return `'` + str.replace(/\\'/g, `\\\\'`) + `'`;\n              }\n              url2 = decode3(url2 || url22 || url3);\n              if (!settings.allow_script_urls) {\n                const scriptUrl = url2.replace(/[\\s\\r\\n]+/g, \"\");\n                if (/(java|vb)script:/i.test(scriptUrl)) {\n                  return \"\";\n                }\n                if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n                  return \"\";\n                }\n              }\n              if (urlConverter) {\n                url2 = urlConverter.call(urlConverterScope, url2, \"style\");\n              }\n              return `url('` + url2.replace(/\\'/g, `\\\\'`) + `')`;\n            };\n            if (css) {\n              css = css.replace(/[\\u0000-\\u001F]/g, \"\");\n              css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode2).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, (str) => {\n                return str.replace(/[;:]/g, encode2);\n              });\n              while (matches = styleRegExp.exec(css)) {\n                styleRegExp.lastIndex = matches.index + matches[0].length;\n                name2 = matches[1].replace(trimRightRegExp, \"\").toLowerCase();\n                value2 = matches[2].replace(trimRightRegExp, \"\");\n                if (name2 && value2) {\n                  name2 = decodeHexSequences(name2);\n                  value2 = decodeHexSequences(value2);\n                  if (name2.indexOf(invisibleChar) !== -1 || name2.indexOf('\"') !== -1) {\n                    continue;\n                  }\n                  if (!settings.allow_script_urls && (name2 === \"behavior\" || /expression\\s*\\(|\\/\\*|\\*\\//.test(value2))) {\n                    continue;\n                  }\n                  if (name2 === \"font-weight\" && value2 === \"700\") {\n                    value2 = \"bold\";\n                  } else if (name2 === \"color\" || name2 === \"background-color\") {\n                    value2 = value2.toLowerCase();\n                  }\n                  value2 = value2.replace(urlOrStrRegExp, processUrl);\n                  styles[name2] = isEncoded ? decode3(value2, true) : value2;\n                }\n              }\n              compress(\"border\", \"\", true);\n              compress(\"border\", \"-width\");\n              compress(\"border\", \"-color\");\n              compress(\"border\", \"-style\");\n              compress(\"padding\", \"\");\n              compress(\"margin\", \"\");\n              compress2(\"border\", \"border-width\", \"border-style\", \"border-color\");\n              if (styles.border === \"medium none\") {\n                delete styles.border;\n              }\n              if (styles[\"border-image\"] === \"none\") {\n                delete styles[\"border-image\"];\n              }\n            }\n            return styles;\n          },\n          serialize: (styles, elementName) => {\n            let css = \"\";\n            const serializeStyles = (name2) => {\n              let value2;\n              const styleList = validStyles[name2];\n              if (styleList) {\n                for (let i4 = 0, l2 = styleList.length; i4 < l2; i4++) {\n                  name2 = styleList[i4];\n                  value2 = styles[name2];\n                  if (value2) {\n                    css += (css.length > 0 ? \" \" : \"\") + name2 + \": \" + value2 + \";\";\n                  }\n                }\n              }\n            };\n            const isValid2 = (name2, elementName2) => {\n              let styleMap = invalidStyles[\"*\"];\n              if (styleMap && styleMap[name2]) {\n                return false;\n              }\n              styleMap = invalidStyles[elementName2];\n              return !(styleMap && styleMap[name2]);\n            };\n            if (elementName && validStyles) {\n              serializeStyles(\"*\");\n              serializeStyles(elementName);\n            } else {\n              each$f(styles, (value2, name2) => {\n                if (value2 && (!invalidStyles || isValid2(name2, elementName))) {\n                  css += (css.length > 0 ? \" \" : \"\") + name2 + \": \" + value2 + \";\";\n                }\n              });\n            }\n            return css;\n          }\n        };\n        return self2;\n      };\n      const deprecated = {\n        keyLocation: true,\n        layerX: true,\n        layerY: true,\n        returnValue: true,\n        webkitMovementX: true,\n        webkitMovementY: true,\n        keyIdentifier: true,\n        mozPressure: true\n      };\n      const isNativeEvent = (event) => event instanceof Event || isFunction2(event.initEvent);\n      const hasIsDefaultPrevented = (event) => event.isDefaultPrevented === always || event.isDefaultPrevented === never;\n      const needsNormalizing = (event) => isNullable(event.preventDefault) || isNativeEvent(event);\n      const clone$3 = (originalEvent, data2) => {\n        const event = data2 !== null && data2 !== void 0 ? data2 : {};\n        for (const name2 in originalEvent) {\n          if (!has$2(deprecated, name2)) {\n            event[name2] = originalEvent[name2];\n          }\n        }\n        if (isNonNullable(event.composedPath)) {\n          event.composedPath = () => originalEvent.composedPath();\n        }\n        return event;\n      };\n      const normalize$32 = (type2, originalEvent, fallbackTarget, data2) => {\n        var _a3;\n        const event = clone$3(originalEvent, data2);\n        event.type = type2;\n        if (isNullable(event.target)) {\n          event.target = (_a3 = event.srcElement) !== null && _a3 !== void 0 ? _a3 : fallbackTarget;\n        }\n        if (needsNormalizing(originalEvent)) {\n          event.preventDefault = () => {\n            event.defaultPrevented = true;\n            event.isDefaultPrevented = always;\n            if (isFunction2(originalEvent.preventDefault)) {\n              originalEvent.preventDefault();\n            }\n          };\n          event.stopPropagation = () => {\n            event.cancelBubble = true;\n            event.isPropagationStopped = always;\n            if (isFunction2(originalEvent.stopPropagation)) {\n              originalEvent.stopPropagation();\n            }\n          };\n          event.stopImmediatePropagation = () => {\n            event.isImmediatePropagationStopped = always;\n            event.stopPropagation();\n          };\n          if (!hasIsDefaultPrevented(event)) {\n            event.isDefaultPrevented = event.defaultPrevented === true ? always : never;\n            event.isPropagationStopped = event.cancelBubble === true ? always : never;\n            event.isImmediatePropagationStopped = never;\n          }\n        }\n        return event;\n      };\n      const eventExpandoPrefix = \"mce-data-\";\n      const mouseEventRe = /^(?:mouse|contextmenu)|click/;\n      const addEvent = (target, name2, callback, capture) => {\n        if (target.addEventListener) {\n          target.addEventListener(name2, callback, capture || false);\n        } else if (target.attachEvent) {\n          target.attachEvent(\"on\" + name2, callback);\n        }\n      };\n      const removeEvent = (target, name2, callback, capture) => {\n        if (target.removeEventListener) {\n          target.removeEventListener(name2, callback, capture || false);\n        } else if (target.detachEvent) {\n          target.detachEvent(\"on\" + name2, callback);\n        }\n      };\n      const isMouseEvent = (event) => isNonNullable(event) && mouseEventRe.test(event.type);\n      const fix = (originalEvent, data2) => {\n        const event = normalize$32(originalEvent.type, originalEvent, document, data2);\n        if (isMouseEvent(originalEvent) && isUndefined2(originalEvent.pageX) && !isUndefined2(originalEvent.clientX)) {\n          const eventDoc = event.target.ownerDocument || document;\n          const doc = eventDoc.documentElement;\n          const body = eventDoc.body;\n          const mouseEvent = event;\n          mouseEvent.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n          mouseEvent.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n        }\n        return event;\n      };\n      const bindOnReady = (win, callback, eventUtils) => {\n        const doc = win.document, event = { type: \"ready\" };\n        if (eventUtils.domLoaded) {\n          callback(event);\n          return;\n        }\n        const isDocReady = () => {\n          return doc.readyState === \"complete\" || doc.readyState === \"interactive\" && doc.body;\n        };\n        const readyHandler = () => {\n          removeEvent(win, \"DOMContentLoaded\", readyHandler);\n          removeEvent(win, \"load\", readyHandler);\n          if (!eventUtils.domLoaded) {\n            eventUtils.domLoaded = true;\n            callback(event);\n          }\n          win = null;\n        };\n        if (isDocReady()) {\n          readyHandler();\n        } else {\n          addEvent(win, \"DOMContentLoaded\", readyHandler);\n        }\n        if (!eventUtils.domLoaded) {\n          addEvent(win, \"load\", readyHandler);\n        }\n      };\n      class EventUtils {\n        constructor() {\n          this.domLoaded = false;\n          this.events = {};\n          this.count = 1;\n          this.expando = eventExpandoPrefix + (+/* @__PURE__ */ new Date()).toString(32);\n          this.hasMouseEnterLeave = \"onmouseenter\" in document.documentElement;\n          this.hasFocusIn = \"onfocusin\" in document.documentElement;\n          this.count = 1;\n        }\n        bind(target, names, callback, scope) {\n          const self2 = this;\n          let id, callbackList, i3, name2, fakeName, nativeHandler, capture;\n          const win = window;\n          const defaultNativeHandler = (evt) => {\n            self2.executeHandlers(fix(evt || win.event), id);\n          };\n          if (!target || target.nodeType === 3 || target.nodeType === 8) {\n            return;\n          }\n          if (!target[self2.expando]) {\n            id = self2.count++;\n            target[self2.expando] = id;\n            self2.events[id] = {};\n          } else {\n            id = target[self2.expando];\n          }\n          scope = scope || target;\n          const namesList = names.split(\" \");\n          i3 = namesList.length;\n          while (i3--) {\n            name2 = namesList[i3];\n            nativeHandler = defaultNativeHandler;\n            fakeName = capture = false;\n            if (name2 === \"DOMContentLoaded\") {\n              name2 = \"ready\";\n            }\n            if (self2.domLoaded && name2 === \"ready\" && target.readyState === \"complete\") {\n              callback.call(scope, fix({ type: name2 }));\n              continue;\n            }\n            if (!self2.hasMouseEnterLeave) {\n              fakeName = self2.mouseEnterLeave[name2];\n              if (fakeName) {\n                nativeHandler = (evt) => {\n                  const current = evt.currentTarget;\n                  let related = evt.relatedTarget;\n                  if (related && current.contains) {\n                    related = current.contains(related);\n                  } else {\n                    while (related && related !== current) {\n                      related = related.parentNode;\n                    }\n                  }\n                  if (!related) {\n                    evt = fix(evt || win.event);\n                    evt.type = evt.type === \"mouseout\" ? \"mouseleave\" : \"mouseenter\";\n                    evt.target = current;\n                    self2.executeHandlers(evt, id);\n                  }\n                };\n              }\n            }\n            if (!self2.hasFocusIn && (name2 === \"focusin\" || name2 === \"focusout\")) {\n              capture = true;\n              fakeName = name2 === \"focusin\" ? \"focus\" : \"blur\";\n              nativeHandler = (evt) => {\n                evt = fix(evt || win.event);\n                evt.type = evt.type === \"focus\" ? \"focusin\" : \"focusout\";\n                self2.executeHandlers(evt, id);\n              };\n            }\n            callbackList = self2.events[id][name2];\n            if (!callbackList) {\n              self2.events[id][name2] = callbackList = [{\n                func: callback,\n                scope\n              }];\n              callbackList.fakeName = fakeName;\n              callbackList.capture = capture;\n              callbackList.nativeHandler = nativeHandler;\n              if (name2 === \"ready\") {\n                bindOnReady(target, nativeHandler, self2);\n              } else {\n                addEvent(target, fakeName || name2, nativeHandler, capture);\n              }\n            } else {\n              if (name2 === \"ready\" && self2.domLoaded) {\n                callback(fix({ type: name2 }));\n              } else {\n                callbackList.push({\n                  func: callback,\n                  scope\n                });\n              }\n            }\n          }\n          target = callbackList = null;\n          return callback;\n        }\n        unbind(target, names, callback) {\n          let callbackList, i3, ci, name2, eventMap;\n          if (!target || target.nodeType === 3 || target.nodeType === 8) {\n            return this;\n          }\n          const id = target[this.expando];\n          if (id) {\n            eventMap = this.events[id];\n            if (names) {\n              const namesList = names.split(\" \");\n              i3 = namesList.length;\n              while (i3--) {\n                name2 = namesList[i3];\n                callbackList = eventMap[name2];\n                if (callbackList) {\n                  if (callback) {\n                    ci = callbackList.length;\n                    while (ci--) {\n                      if (callbackList[ci].func === callback) {\n                        const nativeHandler = callbackList.nativeHandler;\n                        const fakeName = callbackList.fakeName, capture = callbackList.capture;\n                        callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n                        callbackList.nativeHandler = nativeHandler;\n                        callbackList.fakeName = fakeName;\n                        callbackList.capture = capture;\n                        eventMap[name2] = callbackList;\n                      }\n                    }\n                  }\n                  if (!callback || callbackList.length === 0) {\n                    delete eventMap[name2];\n                    removeEvent(target, callbackList.fakeName || name2, callbackList.nativeHandler, callbackList.capture);\n                  }\n                }\n              }\n            } else {\n              each$f(eventMap, (callbackList2, name3) => {\n                removeEvent(target, callbackList2.fakeName || name3, callbackList2.nativeHandler, callbackList2.capture);\n              });\n              eventMap = {};\n            }\n            for (name2 in eventMap) {\n              if (has$2(eventMap, name2)) {\n                return this;\n              }\n            }\n            delete this.events[id];\n            try {\n              delete target[this.expando];\n            } catch (ex) {\n              target[this.expando] = null;\n            }\n          }\n          return this;\n        }\n        fire(target, name2, args) {\n          return this.dispatch(target, name2, args);\n        }\n        dispatch(target, name2, args) {\n          let id;\n          if (!target || target.nodeType === 3 || target.nodeType === 8) {\n            return this;\n          }\n          const event = fix({\n            type: name2,\n            target\n          }, args);\n          do {\n            id = target[this.expando];\n            if (id) {\n              this.executeHandlers(event, id);\n            }\n            target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n          } while (target && !event.isPropagationStopped());\n          return this;\n        }\n        clean(target) {\n          let i3, children2;\n          if (!target || target.nodeType === 3 || target.nodeType === 8) {\n            return this;\n          }\n          if (target[this.expando]) {\n            this.unbind(target);\n          }\n          if (!target.getElementsByTagName) {\n            target = target.document;\n          }\n          if (target && target.getElementsByTagName) {\n            this.unbind(target);\n            children2 = target.getElementsByTagName(\"*\");\n            i3 = children2.length;\n            while (i3--) {\n              target = children2[i3];\n              if (target[this.expando]) {\n                this.unbind(target);\n              }\n            }\n          }\n          return this;\n        }\n        destroy() {\n          this.events = {};\n        }\n        cancel(e2) {\n          if (e2) {\n            e2.preventDefault();\n            e2.stopImmediatePropagation();\n          }\n          return false;\n        }\n        executeHandlers(evt, id) {\n          const container = this.events[id];\n          const callbackList = container && container[evt.type];\n          if (callbackList) {\n            for (let i3 = 0, l2 = callbackList.length; i3 < l2; i3++) {\n              const callback = callbackList[i3];\n              if (callback && callback.func.call(callback.scope, evt) === false) {\n                evt.preventDefault();\n              }\n              if (evt.isImmediatePropagationStopped()) {\n                return;\n              }\n            }\n          }\n        }\n      }\n      EventUtils.Event = new EventUtils();\n      const each$c = Tools.each;\n      const grep = Tools.grep;\n      const internalStyleName = \"data-mce-style\";\n      const legacySetAttribute = (elm, name2, value2) => {\n        if (isNullable(value2) || value2 === \"\") {\n          remove$a(elm, name2);\n        } else {\n          set$2(elm, name2, value2);\n        }\n      };\n      const setupAttrHooks = (styles, settings, getContext2) => {\n        const keepValues = settings.keep_values;\n        const keepUrlHook = {\n          set: (elm, value2, name2) => {\n            const sugarElm = SugarElement.fromDom(elm);\n            if (isFunction2(settings.url_converter) && isNonNullable(value2)) {\n              value2 = settings.url_converter.call(settings.url_converter_scope || getContext2(), value2, name2, elm[0]);\n            }\n            const internalName = \"data-mce-\" + name2;\n            legacySetAttribute(sugarElm, internalName, value2);\n            legacySetAttribute(sugarElm, name2, value2);\n          },\n          get: (elm, name2) => {\n            const sugarElm = SugarElement.fromDom(elm);\n            return get$9(sugarElm, \"data-mce-\" + name2) || get$9(sugarElm, name2);\n          }\n        };\n        const attrHooks = {\n          style: {\n            set: (elm, value2) => {\n              const sugarElm = SugarElement.fromDom(elm);\n              if (isObject2(value2)) {\n                setAll(sugarElm, value2);\n                return;\n              }\n              if (keepValues) {\n                legacySetAttribute(sugarElm, internalStyleName, value2);\n              }\n              remove$a(sugarElm, \"style\");\n              if (isString2(value2)) {\n                setAll(sugarElm, styles.parse(value2));\n              }\n            },\n            get: (elm) => {\n              const sugarElm = SugarElement.fromDom(elm);\n              const value2 = get$9(sugarElm, internalStyleName) || get$9(sugarElm, \"style\");\n              return styles.serialize(styles.parse(value2), name(sugarElm));\n            }\n          }\n        };\n        if (keepValues) {\n          attrHooks.href = attrHooks.src = keepUrlHook;\n        }\n        return attrHooks;\n      };\n      const updateInternalStyleAttr = (styles, elm) => {\n        const rawValue = get$9(elm, \"style\");\n        const value2 = styles.serialize(styles.parse(rawValue), name(elm));\n        legacySetAttribute(elm, internalStyleName, value2);\n      };\n      const findNodeIndex = (node, normalized) => {\n        let idx = 0, lastNodeType, nodeType;\n        if (node) {\n          for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {\n            nodeType = node.nodeType;\n            if (normalized && nodeType === 3) {\n              if (nodeType === lastNodeType || !node.nodeValue.length) {\n                continue;\n              }\n            }\n            idx++;\n            lastNodeType = nodeType;\n          }\n        }\n        return idx;\n      };\n      const numericalCssMap = Tools.makeMap(\"fill-opacity font-weight line-height opacity orphans widows z-index zoom\", \" \");\n      const camelCaseToHyphens = (name2) => name2.replace(/[A-Z]/g, (v2) => \"-\" + v2.toLowerCase());\n      const DOMUtils = (doc, settings = {}) => {\n        const addedStyles = {};\n        const win = window;\n        const files = {};\n        let counter = 0;\n        const stdMode = true;\n        const boxModel = true;\n        const styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), {\n          contentCssCors: settings.contentCssCors,\n          referrerPolicy: settings.referrerPolicy\n        });\n        const boundEvents = [];\n        const schema = settings.schema ? settings.schema : Schema({});\n        const styles = Styles({\n          url_converter: settings.url_converter,\n          url_converter_scope: settings.url_converter_scope\n        }, settings.schema);\n        const events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n        const blockElementsMap = schema.getBlockElements();\n        const isBlock2 = (node) => {\n          if (isString2(node)) {\n            return has$2(blockElementsMap, node);\n          } else {\n            return isElement$6(node) && has$2(blockElementsMap, node.nodeName);\n          }\n        };\n        const get2 = (elm) => elm && doc && isString2(elm) ? doc.getElementById(elm) : elm;\n        const _get = (elm) => {\n          const value2 = get2(elm);\n          return isNonNullable(value2) ? SugarElement.fromDom(value2) : null;\n        };\n        const getAttrib = (elm, name2, defaultVal) => {\n          let value2;\n          const $elm = _get(elm);\n          if (isNonNullable($elm) && isElement$7($elm)) {\n            const hook = attrHooks[name2];\n            if (hook && hook.get) {\n              value2 = hook.get($elm.dom, name2);\n            } else {\n              value2 = get$9($elm, name2);\n            }\n          }\n          return isNonNullable(value2) ? value2 : defaultVal !== null && defaultVal !== void 0 ? defaultVal : \"\";\n        };\n        const getAttribs = (elm) => {\n          const node = get2(elm);\n          return isNullable(node) ? [] : node.attributes;\n        };\n        const setAttrib = (elm, name2, value2) => {\n          run(elm, (e2) => {\n            if (isElement$6(e2)) {\n              const $elm = SugarElement.fromDom(e2);\n              if (value2 === \"\") {\n                value2 = null;\n              }\n              const originalValue = get$9($elm, name2);\n              const hook = attrHooks[name2];\n              if (hook && hook.set) {\n                hook.set($elm.dom, value2, name2);\n              } else {\n                legacySetAttribute($elm, name2, value2);\n              }\n              if (originalValue !== value2 && settings.onSetAttrib) {\n                settings.onSetAttrib({\n                  attrElm: $elm,\n                  attrName: name2,\n                  attrValue: value2\n                });\n              }\n            }\n          });\n        };\n        const clone2 = (node, deep2) => {\n          return node.cloneNode(deep2);\n        };\n        const getRoot = () => settings.root_element || doc.body;\n        const getViewPort = (argWin) => {\n          const vp = getBounds(argWin);\n          return {\n            x: vp.x,\n            y: vp.y,\n            w: vp.width,\n            h: vp.height\n          };\n        };\n        const getPos$1 = (elm, rootElm) => getPos(doc.body, get2(elm), rootElm);\n        const setStyle = (elm, name2, value2) => {\n          const convertStyleToString = (cssValue, cssName) => {\n            if (isString2(cssValue)) {\n              return cssValue;\n            } else if (isNumber2(cssValue)) {\n              return has$2(numericalCssMap, cssName) ? cssValue + \"\" : cssValue + \"px\";\n            } else {\n              return map$2(cssValue, convertStyleToString);\n            }\n          };\n          const applyStyle2 = ($elm, cssName, cssValue) => {\n            const normalizedName = camelCaseToHyphens(cssName);\n            if (isNullable(cssValue) || cssValue === \"\") {\n              remove$6($elm, normalizedName);\n            } else {\n              set$1($elm, normalizedName, convertStyleToString(cssValue, normalizedName));\n            }\n          };\n          run(elm, (e2) => {\n            const $elm = SugarElement.fromDom(e2);\n            if (isString2(name2)) {\n              applyStyle2($elm, name2, value2);\n            } else {\n              each$f(name2, (v2, n3) => {\n                applyStyle2($elm, n3, v2);\n              });\n            }\n            if (settings.update_styles) {\n              updateInternalStyleAttr(styles, $elm);\n            }\n          });\n        };\n        const setStyles = (elm, stylesArg) => {\n          setStyle(elm, stylesArg);\n        };\n        const getStyle2 = (elm, name2, computed) => {\n          const $elm = get2(elm);\n          if (isNullable($elm) || !isElement$6($elm)) {\n            return void 0;\n          }\n          if (computed) {\n            return get$7(SugarElement.fromDom($elm), camelCaseToHyphens(name2));\n          } else {\n            name2 = name2.replace(/-(\\D)/g, (a2, b2) => b2.toUpperCase());\n            if (name2 === \"float\") {\n              name2 = \"cssFloat\";\n            }\n            return $elm.style ? $elm.style[name2] : void 0;\n          }\n        };\n        const getSize = (elm) => {\n          let w, h2;\n          const $elm = get2(elm);\n          w = getStyle2($elm, \"width\");\n          h2 = getStyle2($elm, \"height\");\n          if (w.indexOf(\"px\") === -1) {\n            w = 0;\n          }\n          if (h2.indexOf(\"px\") === -1) {\n            h2 = 0;\n          }\n          return {\n            w: parseInt(w, 10) || $elm.offsetWidth || $elm.clientWidth,\n            h: parseInt(h2, 10) || $elm.offsetHeight || $elm.clientHeight\n          };\n        };\n        const getRect = (elm) => {\n          const $elm = get2(elm);\n          const pos = getPos$1($elm);\n          const size = getSize($elm);\n          return {\n            x: pos.x,\n            y: pos.y,\n            w: size.w,\n            h: size.h\n          };\n        };\n        const is2 = (elm, selector) => {\n          if (!elm) {\n            return false;\n          }\n          const elms = isArray$1(elm) ? elm : [elm];\n          return exists(elms, (e2) => {\n            return is$1(SugarElement.fromDom(e2), selector);\n          });\n        };\n        const getParents2 = (elm, selector, root2, collect) => {\n          const result = [];\n          let selectorVal;\n          let node = get2(elm);\n          collect = collect === void 0;\n          root2 = root2 || (getRoot().nodeName !== \"BODY\" ? getRoot().parentNode : null);\n          if (isString2(selector)) {\n            selectorVal = selector;\n            if (selector === \"*\") {\n              selector = isElement$6;\n            } else {\n              selector = (node2) => is2(node2, selectorVal);\n            }\n          }\n          while (node) {\n            if (node === root2 || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment(node)) {\n              break;\n            }\n            if (!selector || selector(node)) {\n              if (collect) {\n                result.push(node);\n              } else {\n                return [node];\n              }\n            }\n            node = node.parentNode;\n          }\n          return collect ? result : null;\n        };\n        const getParent = (node, selector, root2) => {\n          const parents2 = getParents2(node, selector, root2, false);\n          return parents2 && parents2.length > 0 ? parents2[0] : null;\n        };\n        const _findSib = (node, selector, name2) => {\n          let func = selector;\n          if (node) {\n            if (isString2(selector)) {\n              func = (node2) => {\n                return is2(node2, selector);\n              };\n            }\n            for (node = node[name2]; node; node = node[name2]) {\n              if (isFunction2(func) && func(node)) {\n                return node;\n              }\n            }\n          }\n          return null;\n        };\n        const getNext = (node, selector) => _findSib(node, selector, \"nextSibling\");\n        const getPrev = (node, selector) => _findSib(node, selector, \"previousSibling\");\n        const select2 = (selector, scope) => {\n          var _a3, _b;\n          const elm = (_b = (_a3 = get2(scope)) !== null && _a3 !== void 0 ? _a3 : settings.root_element) !== null && _b !== void 0 ? _b : doc;\n          return from(elm.querySelectorAll(selector));\n        };\n        const run = function(elm, func, scope) {\n          const context2 = scope !== null && scope !== void 0 ? scope : this;\n          const node = isString2(elm) ? get2(elm) : elm;\n          if (!node) {\n            return false;\n          }\n          if (isArray$1(node) && (node.length || node.length === 0)) {\n            const result = [];\n            each$c(node, (elm2, i3) => {\n              if (elm2) {\n                result.push(func.call(context2, isString2(elm2) ? get2(elm2) : elm2, i3));\n              }\n            });\n            return result;\n          } else {\n            return func.call(context2, node);\n          }\n        };\n        const setAttribs = (elm, attrs) => {\n          run(elm, ($elm) => {\n            each$f(attrs, (value2, name2) => {\n              setAttrib($elm, name2, value2);\n            });\n          });\n        };\n        const setHTML = (elm, html2) => {\n          run(elm, (e2) => {\n            const $elm = SugarElement.fromDom(e2);\n            set2($elm, html2);\n          });\n        };\n        const add3 = (parentElm, name2, attrs, html2, create3) => run(parentElm, (parentElm2) => {\n          const newElm = isString2(name2) ? doc.createElement(name2) : name2;\n          if (isNonNullable(attrs)) {\n            setAttribs(newElm, attrs);\n          }\n          if (html2) {\n            if (!isString2(html2) && html2.nodeType) {\n              newElm.appendChild(html2);\n            } else if (isString2(html2)) {\n              setHTML(newElm, html2);\n            }\n          }\n          return !create3 ? parentElm2.appendChild(newElm) : newElm;\n        });\n        const create2 = (name2, attrs, html2) => add3(doc.createElement(name2), name2, attrs, html2, true);\n        const decode3 = Entities.decode;\n        const encode2 = Entities.encodeAllRaw;\n        const createHTML = (name2, attrs, html2 = \"\") => {\n          let outHtml = \"\", key;\n          outHtml += \"<\" + name2;\n          for (key in attrs) {\n            if (hasNonNullableKey(attrs, key)) {\n              outHtml += \" \" + key + '=\"' + encode2(attrs[key]) + '\"';\n            }\n          }\n          if (isEmpty$3(html2) && has$2(schema.getVoidElements(), name2)) {\n            return outHtml + \" />\";\n          } else {\n            return outHtml + \">\" + html2 + \"</\" + name2 + \">\";\n          }\n        };\n        const createFragment2 = (html2) => {\n          let node;\n          const container = doc.createElement(\"div\");\n          const frag = doc.createDocumentFragment();\n          frag.appendChild(container);\n          if (html2) {\n            container.innerHTML = html2;\n          }\n          while (node = container.firstChild) {\n            frag.appendChild(node);\n          }\n          frag.removeChild(container);\n          return frag;\n        };\n        const remove3 = (node, keepChildren) => {\n          return run(node, (n3) => {\n            const $node = SugarElement.fromDom(n3);\n            if (keepChildren) {\n              each$g(children($node), (child2) => {\n                if (isText$9(child2) && child2.dom.length === 0) {\n                  remove$5(child2);\n                } else {\n                  before$3($node, child2);\n                }\n              });\n            }\n            remove$5($node);\n            return $node.dom;\n          });\n        };\n        const removeAllAttribs = (e2) => run(e2, (e3) => {\n          const attrs = e3.attributes;\n          for (let i3 = attrs.length - 1; i3 >= 0; i3--) {\n            e3.removeAttributeNode(attrs.item(i3));\n          }\n        });\n        const parseStyle = (cssText) => styles.parse(cssText);\n        const serializeStyle = (stylesArg, name2) => styles.serialize(stylesArg, name2);\n        const addStyle = (cssText) => {\n          let head2, styleElm;\n          if (self2 !== DOMUtils.DOM && doc === document) {\n            if (addedStyles[cssText]) {\n              return;\n            }\n            addedStyles[cssText] = true;\n          }\n          styleElm = doc.getElementById(\"mceDefaultStyles\");\n          if (!styleElm) {\n            styleElm = doc.createElement(\"style\");\n            styleElm.id = \"mceDefaultStyles\";\n            styleElm.type = \"text/css\";\n            head2 = doc.getElementsByTagName(\"head\")[0];\n            if (head2.firstChild) {\n              head2.insertBefore(styleElm, head2.firstChild);\n            } else {\n              head2.appendChild(styleElm);\n            }\n          }\n          if (styleElm.styleSheet) {\n            styleElm.styleSheet.cssText += cssText;\n          } else {\n            styleElm.appendChild(doc.createTextNode(cssText));\n          }\n        };\n        const loadCSS = (urls) => {\n          if (!urls) {\n            urls = \"\";\n          }\n          each$g(urls.split(\",\"), (url2) => {\n            files[url2] = true;\n            styleSheetLoader.load(url2).catch(noop);\n          });\n        };\n        const toggleClass2 = (elm, cls, state) => {\n          run(elm, (e2) => {\n            if (isElement$6(e2)) {\n              const $elm = SugarElement.fromDom(e2);\n              const classes = cls.split(\" \");\n              each$g(classes, (c2) => {\n                if (isNonNullable(state)) {\n                  const fn = state ? add$2 : remove$7;\n                  fn($elm, c2);\n                } else {\n                  toggle$1($elm, c2);\n                }\n              });\n            }\n          });\n        };\n        const addClass = (elm, cls) => {\n          toggleClass2(elm, cls, true);\n        };\n        const removeClass = (elm, cls) => {\n          toggleClass2(elm, cls, false);\n        };\n        const hasClass2 = (elm, cls) => {\n          const $elm = _get(elm);\n          const classes = cls.split(\" \");\n          return forall(classes, (c2) => has2($elm, c2));\n        };\n        const show = (elm) => {\n          run(elm, (e2) => remove$6(SugarElement.fromDom(e2), \"display\"));\n        };\n        const hide = (elm) => {\n          run(elm, (e2) => set$1(SugarElement.fromDom(e2), \"display\", \"none\"));\n        };\n        const isHidden = (elm) => {\n          const $elm = _get(elm);\n          return is$2(getRaw$1($elm, \"display\"), \"none\");\n        };\n        const uniqueId2 = (prefix) => (!prefix ? \"mce_\" : prefix) + counter++;\n        const getOuterHTML = (elm) => {\n          const $elm = _get(elm);\n          return isElement$6($elm.dom) ? $elm.dom.outerHTML : getOuter($elm);\n        };\n        const setOuterHTML = (elm, html2) => {\n          run(elm, ($elm) => {\n            if (isElement$6($elm)) {\n              $elm.outerHTML = html2;\n            }\n          });\n        };\n        const insertAfter2 = (node, reference2) => {\n          const referenceNode = get2(reference2);\n          return run(node, (node2) => {\n            const parent2 = referenceNode.parentNode;\n            const nextSibling2 = referenceNode.nextSibling;\n            if (nextSibling2) {\n              parent2.insertBefore(node2, nextSibling2);\n            } else {\n              parent2.appendChild(node2);\n            }\n            return node2;\n          });\n        };\n        const replace2 = (newElm, oldElm, keepChildren) => run(oldElm, (oldElm2) => {\n          if (isArray$1(oldElm2)) {\n            newElm = newElm.cloneNode(true);\n          }\n          if (keepChildren) {\n            each$c(grep(oldElm2.childNodes), (node) => {\n              newElm.appendChild(node);\n            });\n          }\n          return oldElm2.parentNode.replaceChild(newElm, oldElm2);\n        });\n        const rename = (elm, name2) => {\n          let newElm;\n          if (elm.nodeName !== name2.toUpperCase()) {\n            newElm = create2(name2);\n            each$c(getAttribs(elm), (attrNode) => {\n              setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n            });\n            replace2(newElm, elm, true);\n          }\n          return newElm || elm;\n        };\n        const findCommonAncestor = (a2, b2) => {\n          let ps = a2, pe;\n          while (ps) {\n            pe = b2;\n            while (pe && ps !== pe) {\n              pe = pe.parentNode;\n            }\n            if (ps === pe) {\n              break;\n            }\n            ps = ps.parentNode;\n          }\n          if (!ps && a2.ownerDocument) {\n            return a2.ownerDocument.documentElement;\n          }\n          return ps;\n        };\n        const isNonEmptyElement2 = (node) => {\n          if (isElement$6(node)) {\n            const isNamedAnchor2 = node.nodeName.toLowerCase() === \"a\" && !getAttrib(node, \"href\") && getAttrib(node, \"id\");\n            if (getAttrib(node, \"name\") || getAttrib(node, \"data-mce-bookmark\") || isNamedAnchor2) {\n              return true;\n            }\n          }\n          return false;\n        };\n        const isEmpty3 = (node, elements) => {\n          let type2, name2, brCount = 0;\n          if (isNonEmptyElement2(node)) {\n            return false;\n          }\n          node = node.firstChild;\n          if (node) {\n            const walker = new DomTreeWalker(node, node.parentNode);\n            const whitespace = schema ? schema.getWhitespaceElements() : {};\n            elements = elements || (schema ? schema.getNonEmptyElements() : null);\n            do {\n              type2 = node.nodeType;\n              if (isElement$6(node)) {\n                const bogusVal = node.getAttribute(\"data-mce-bogus\");\n                if (bogusVal) {\n                  node = walker.next(bogusVal === \"all\");\n                  continue;\n                }\n                name2 = node.nodeName.toLowerCase();\n                if (elements && elements[name2]) {\n                  if (name2 === \"br\") {\n                    brCount++;\n                    node = walker.next();\n                    continue;\n                  }\n                  return false;\n                }\n                if (isNonEmptyElement2(node)) {\n                  return false;\n                }\n              }\n              if (type2 === 8) {\n                return false;\n              }\n              if (type2 === 3 && !isWhitespaceText(node.nodeValue)) {\n                return false;\n              }\n              if (type2 === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && isWhitespaceText(node.nodeValue)) {\n                return false;\n              }\n              node = walker.next();\n            } while (node);\n          }\n          return brCount <= 1;\n        };\n        const createRng = () => doc.createRange();\n        const split2 = (parentElm, splitElm, replacementElm) => {\n          let range2 = createRng();\n          let beforeFragment;\n          let afterFragment;\n          let parentNode;\n          if (parentElm && splitElm) {\n            range2.setStart(parentElm.parentNode, findNodeIndex(parentElm));\n            range2.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n            beforeFragment = range2.extractContents();\n            range2 = createRng();\n            range2.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n            range2.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);\n            afterFragment = range2.extractContents();\n            parentNode = parentElm.parentNode;\n            parentNode.insertBefore(trimNode(self2, beforeFragment), parentElm);\n            if (replacementElm) {\n              parentNode.insertBefore(replacementElm, parentElm);\n            } else {\n              parentNode.insertBefore(splitElm, parentElm);\n            }\n            parentNode.insertBefore(trimNode(self2, afterFragment), parentElm);\n            remove3(parentElm);\n            return replacementElm || splitElm;\n          }\n        };\n        const bind2 = (target, name2, func, scope) => {\n          if (isArray$1(target)) {\n            let i3 = target.length;\n            const rv = [];\n            while (i3--) {\n              rv[i3] = bind2(target[i3], name2, func, scope);\n            }\n            return rv;\n          } else {\n            if (settings.collect && (target === doc || target === win)) {\n              boundEvents.push([\n                target,\n                name2,\n                func,\n                scope\n              ]);\n            }\n            return events.bind(target, name2, func, scope || self2);\n          }\n        };\n        const unbind2 = (target, name2, func) => {\n          if (isArray$1(target)) {\n            let i3 = target.length;\n            const rv = [];\n            while (i3--) {\n              rv[i3] = unbind2(target[i3], name2, func);\n            }\n            return rv;\n          } else {\n            if (boundEvents.length > 0 && (target === doc || target === win)) {\n              let i3 = boundEvents.length;\n              while (i3--) {\n                const item = boundEvents[i3];\n                if (target === item[0] && (!name2 || name2 === item[1]) && (!func || func === item[2])) {\n                  events.unbind(item[0], item[1], item[2]);\n                }\n              }\n            }\n            return events.unbind(target, name2, func);\n          }\n        };\n        const dispatch = (target, name2, evt) => events.dispatch(target, name2, evt);\n        const fire = (target, name2, evt) => events.dispatch(target, name2, evt);\n        const getContentEditable = (node) => {\n          if (node && isElement$6(node)) {\n            const contentEditable = node.getAttribute(\"data-mce-contenteditable\");\n            if (contentEditable && contentEditable !== \"inherit\") {\n              return contentEditable;\n            }\n            return node.contentEditable !== \"inherit\" ? node.contentEditable : null;\n          } else {\n            return null;\n          }\n        };\n        const getContentEditableParent = (node) => {\n          const root2 = getRoot();\n          let state = null;\n          for (; node && node !== root2; node = node.parentNode) {\n            state = getContentEditable(node);\n            if (state !== null) {\n              break;\n            }\n          }\n          return state;\n        };\n        const destroy2 = () => {\n          if (boundEvents.length > 0) {\n            let i3 = boundEvents.length;\n            while (i3--) {\n              const item = boundEvents[i3];\n              events.unbind(item[0], item[1], item[2]);\n            }\n          }\n          each$f(files, (_2, url2) => {\n            styleSheetLoader.unload(url2);\n            delete files[url2];\n          });\n        };\n        const isChildOf = (node, parent2) => {\n          return node === parent2 || parent2.contains(node);\n        };\n        const dumpRng = (r4) => \"startContainer: \" + r4.startContainer.nodeName + \", startOffset: \" + r4.startOffset + \", endContainer: \" + r4.endContainer.nodeName + \", endOffset: \" + r4.endOffset;\n        const self2 = {\n          doc,\n          settings,\n          win,\n          files,\n          stdMode,\n          boxModel,\n          styleSheetLoader,\n          boundEvents,\n          styles,\n          schema,\n          events,\n          isBlock: isBlock2,\n          root: null,\n          clone: clone2,\n          getRoot,\n          getViewPort,\n          getRect,\n          getSize,\n          getParent,\n          getParents: getParents2,\n          get: get2,\n          getNext,\n          getPrev,\n          select: select2,\n          is: is2,\n          add: add3,\n          create: create2,\n          createHTML,\n          createFragment: createFragment2,\n          remove: remove3,\n          setStyle,\n          getStyle: getStyle2,\n          setStyles,\n          removeAllAttribs,\n          setAttrib,\n          setAttribs,\n          getAttrib,\n          getPos: getPos$1,\n          parseStyle,\n          serializeStyle,\n          addStyle,\n          loadCSS,\n          addClass,\n          removeClass,\n          hasClass: hasClass2,\n          toggleClass: toggleClass2,\n          show,\n          hide,\n          isHidden,\n          uniqueId: uniqueId2,\n          setHTML,\n          getOuterHTML,\n          setOuterHTML,\n          decode: decode3,\n          encode: encode2,\n          insertAfter: insertAfter2,\n          replace: replace2,\n          rename,\n          findCommonAncestor,\n          run,\n          getAttribs,\n          isEmpty: isEmpty3,\n          createRng,\n          nodeIndex: findNodeIndex,\n          split: split2,\n          bind: bind2,\n          unbind: unbind2,\n          fire,\n          dispatch,\n          getContentEditable,\n          getContentEditableParent,\n          destroy: destroy2,\n          isChildOf,\n          dumpRng\n        };\n        const attrHooks = setupAttrHooks(styles, settings, constant2(self2));\n        return self2;\n      };\n      DOMUtils.DOM = DOMUtils(document);\n      DOMUtils.nodeIndex = findNodeIndex;\n      const DOM$b = DOMUtils.DOM;\n      const QUEUED = 0;\n      const LOADING = 1;\n      const LOADED = 2;\n      const FAILED = 3;\n      class ScriptLoader {\n        constructor(settings = {}) {\n          this.states = {};\n          this.queue = [];\n          this.scriptLoadedCallbacks = {};\n          this.queueLoadedCallbacks = [];\n          this.loading = false;\n          this.settings = settings;\n        }\n        _setReferrerPolicy(referrerPolicy) {\n          this.settings.referrerPolicy = referrerPolicy;\n        }\n        loadScript(url2) {\n          return new Promise((resolve2, reject) => {\n            const dom3 = DOM$b;\n            let elm;\n            const cleanup = () => {\n              dom3.remove(id);\n              if (elm) {\n                elm.onerror = elm.onload = elm = null;\n              }\n            };\n            const done = () => {\n              cleanup();\n              resolve2();\n            };\n            const error3 = () => {\n              cleanup();\n              reject(\"Failed to load script: \" + url2);\n            };\n            const id = dom3.uniqueId();\n            elm = document.createElement(\"script\");\n            elm.id = id;\n            elm.type = \"text/javascript\";\n            elm.src = Tools._addCacheSuffix(url2);\n            if (this.settings.referrerPolicy) {\n              dom3.setAttrib(elm, \"referrerpolicy\", this.settings.referrerPolicy);\n            }\n            elm.onload = done;\n            elm.onerror = error3;\n            (document.getElementsByTagName(\"head\")[0] || document.body).appendChild(elm);\n          });\n        }\n        isDone(url2) {\n          return this.states[url2] === LOADED;\n        }\n        markDone(url2) {\n          this.states[url2] = LOADED;\n        }\n        add(url2) {\n          const self2 = this;\n          self2.queue.push(url2);\n          const state = self2.states[url2];\n          if (state === void 0) {\n            self2.states[url2] = QUEUED;\n          }\n          return new Promise((resolve2, reject) => {\n            if (!self2.scriptLoadedCallbacks[url2]) {\n              self2.scriptLoadedCallbacks[url2] = [];\n            }\n            self2.scriptLoadedCallbacks[url2].push({\n              resolve: resolve2,\n              reject\n            });\n          });\n        }\n        load(url2) {\n          return this.add(url2);\n        }\n        remove(url2) {\n          delete this.states[url2];\n          delete this.scriptLoadedCallbacks[url2];\n        }\n        loadQueue() {\n          const queue = this.queue;\n          this.queue = [];\n          return this.loadScripts(queue);\n        }\n        loadScripts(scripts) {\n          const self2 = this;\n          const execCallbacks = (name2, url2) => {\n            get$a(self2.scriptLoadedCallbacks, url2).each((callbacks) => {\n              each$g(callbacks, (callback) => callback[name2](url2));\n            });\n            delete self2.scriptLoadedCallbacks[url2];\n          };\n          const processResults = (results) => {\n            const failures = filter$6(results, (result) => result.status === \"rejected\");\n            if (failures.length > 0) {\n              return Promise.reject(bind$3(failures, ({ reason }) => isArray$1(reason) ? reason : [reason]));\n            } else {\n              return Promise.resolve();\n            }\n          };\n          const load = (urls) => Promise.allSettled(map$3(urls, (url2) => {\n            if (self2.states[url2] === LOADED) {\n              execCallbacks(\"resolve\", url2);\n              return Promise.resolve();\n            } else if (self2.states[url2] === FAILED) {\n              execCallbacks(\"reject\", url2);\n              return Promise.reject(url2);\n            } else {\n              self2.states[url2] = LOADING;\n              return self2.loadScript(url2).then(() => {\n                self2.states[url2] = LOADED;\n                execCallbacks(\"resolve\", url2);\n                const queue = self2.queue;\n                if (queue.length > 0) {\n                  self2.queue = [];\n                  return load(queue).then(processResults);\n                }\n              }, () => {\n                self2.states[url2] = FAILED;\n                execCallbacks(\"reject\", url2);\n                return Promise.reject(url2);\n              });\n            }\n          }));\n          const processQueue = (urls) => {\n            self2.loading = true;\n            return load(urls).then((results) => {\n              self2.loading = false;\n              const nextQueuedItem = self2.queueLoadedCallbacks.shift();\n              Optional.from(nextQueuedItem).each(call);\n              return processResults(results);\n            });\n          };\n          const uniqueScripts = stringArray(scripts);\n          if (self2.loading) {\n            return new Promise((resolve2, reject) => {\n              self2.queueLoadedCallbacks.push(() => processQueue(uniqueScripts).then(resolve2, reject));\n            });\n          } else {\n            return processQueue(uniqueScripts);\n          }\n        }\n      }\n      ScriptLoader.ScriptLoader = new ScriptLoader();\n      const Cell = (initial) => {\n        let value2 = initial;\n        const get2 = () => {\n          return value2;\n        };\n        const set3 = (v2) => {\n          value2 = v2;\n        };\n        return {\n          get: get2,\n          set: set3\n        };\n      };\n      const isRaw = (str) => isObject2(str) && has$2(str, \"raw\");\n      const isTokenised = (str) => isArray$1(str) && str.length > 1;\n      const data = {};\n      const currentCode = Cell(\"en\");\n      const getLanguageData = () => get$a(data, currentCode.get());\n      const getData$1 = () => map$2(data, (value2) => ({ ...value2 }));\n      const setCode = (newCode) => {\n        if (newCode) {\n          currentCode.set(newCode);\n        }\n      };\n      const getCode = () => currentCode.get();\n      const add$1 = (code2, items) => {\n        let langData = data[code2];\n        if (!langData) {\n          data[code2] = langData = {};\n        }\n        each$f(items, (translation, name2) => {\n          langData[name2.toLowerCase()] = translation;\n        });\n      };\n      const translate = (text3) => {\n        const langData = getLanguageData().getOr({});\n        const toString = (obj) => {\n          if (isFunction2(obj)) {\n            return Object.prototype.toString.call(obj);\n          }\n          return !isEmpty3(obj) ? \"\" + obj : \"\";\n        };\n        const isEmpty3 = (text4) => text4 === \"\" || text4 === null || text4 === void 0;\n        const getLangData = (text4) => {\n          const textstr = toString(text4);\n          return get$a(langData, textstr.toLowerCase()).map(toString).getOr(textstr);\n        };\n        const removeContext = (str) => str.replace(/{context:\\w+}$/, \"\");\n        if (isEmpty3(text3)) {\n          return \"\";\n        }\n        if (isRaw(text3)) {\n          return toString(text3.raw);\n        }\n        if (isTokenised(text3)) {\n          const values2 = text3.slice(1);\n          const substitued = getLangData(text3[0]).replace(/\\{([0-9]+)\\}/g, ($1, $2) => has$2(values2, $2) ? toString(values2[$2]) : $1);\n          return removeContext(substitued);\n        }\n        return removeContext(getLangData(text3));\n      };\n      const isRtl$1 = () => getLanguageData().bind((items) => get$a(items, \"_dir\")).exists((dir) => dir === \"rtl\");\n      const hasCode = (code2) => has$2(data, code2);\n      const I18n = {\n        getData: getData$1,\n        setCode,\n        getCode,\n        add: add$1,\n        translate,\n        isRtl: isRtl$1,\n        hasCode\n      };\n      const AddOnManager = () => {\n        const items = [];\n        const urls = {};\n        const lookup2 = {};\n        const _listeners = [];\n        const runListeners = (name2, state) => {\n          const matchedListeners = filter$6(_listeners, (listener) => listener.name === name2 && listener.state === state);\n          each$g(matchedListeners, (listener) => listener.resolve());\n        };\n        const isLoaded = (name2) => has$2(urls, name2);\n        const isAdded = (name2) => has$2(lookup2, name2);\n        const get2 = (name2) => {\n          if (lookup2[name2]) {\n            return lookup2[name2].instance;\n          }\n          return void 0;\n        };\n        const loadLanguagePack = (name2, languages) => {\n          const language = I18n.getCode();\n          const wrappedLanguages = \",\" + (languages || \"\") + \",\";\n          if (!language || languages && wrappedLanguages.indexOf(\",\" + language + \",\") === -1) {\n            return;\n          }\n          ScriptLoader.ScriptLoader.add(urls[name2] + \"/langs/\" + language + \".js\");\n        };\n        const requireLangPack = (name2, languages) => {\n          if (AddOnManager.languageLoad !== false) {\n            if (isLoaded(name2)) {\n              loadLanguagePack(name2, languages);\n            } else {\n              waitFor(name2, \"loaded\").then(() => loadLanguagePack(name2, languages));\n            }\n          }\n        };\n        const add3 = (id, addOn) => {\n          items.push(addOn);\n          lookup2[id] = { instance: addOn };\n          runListeners(id, \"added\");\n          return addOn;\n        };\n        const remove3 = (name2) => {\n          delete urls[name2];\n          delete lookup2[name2];\n        };\n        const createUrl = (baseUrl, dep) => {\n          if (isString2(dep)) {\n            return isString2(baseUrl) ? {\n              prefix: \"\",\n              resource: dep,\n              suffix: \"\"\n            } : {\n              prefix: baseUrl.prefix,\n              resource: dep,\n              suffix: baseUrl.suffix\n            };\n          } else {\n            return dep;\n          }\n        };\n        const load = (name2, addOnUrl) => {\n          if (urls[name2]) {\n            return Promise.resolve();\n          }\n          let urlString = isString2(addOnUrl) ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\n          if (urlString.indexOf(\"/\") !== 0 && urlString.indexOf(\"://\") === -1) {\n            urlString = AddOnManager.baseURL + \"/\" + urlString;\n          }\n          urls[name2] = urlString.substring(0, urlString.lastIndexOf(\"/\"));\n          const done = () => {\n            runListeners(name2, \"loaded\");\n            return Promise.resolve();\n          };\n          if (lookup2[name2]) {\n            return done();\n          } else {\n            return ScriptLoader.ScriptLoader.add(urlString).then(done);\n          }\n        };\n        const waitFor = (name2, state = \"added\") => {\n          if (state === \"added\" && isAdded(name2)) {\n            return Promise.resolve();\n          } else if (state === \"loaded\" && isLoaded(name2)) {\n            return Promise.resolve();\n          } else {\n            return new Promise((resolve2) => {\n              _listeners.push({\n                name: name2,\n                state,\n                resolve: resolve2\n              });\n            });\n          }\n        };\n        return {\n          items,\n          urls,\n          lookup: lookup2,\n          get: get2,\n          requireLangPack,\n          add: add3,\n          remove: remove3,\n          createUrl,\n          load,\n          waitFor\n        };\n      };\n      AddOnManager.languageLoad = true;\n      AddOnManager.baseURL = \"\";\n      AddOnManager.PluginManager = AddOnManager();\n      AddOnManager.ThemeManager = AddOnManager();\n      AddOnManager.ModelManager = AddOnManager();\n      const singleton = (doRevoke) => {\n        const subject = Cell(Optional.none());\n        const revoke = () => subject.get().each(doRevoke);\n        const clear2 = () => {\n          revoke();\n          subject.set(Optional.none());\n        };\n        const isSet2 = () => subject.get().isSome();\n        const get2 = () => subject.get();\n        const set3 = (s2) => {\n          revoke();\n          subject.set(Optional.some(s2));\n        };\n        return {\n          clear: clear2,\n          isSet: isSet2,\n          get: get2,\n          set: set3\n        };\n      };\n      const value$2 = () => {\n        const subject = singleton(noop);\n        const on2 = (f2) => subject.get().each(f2);\n        return {\n          ...subject,\n          on: on2\n        };\n      };\n      const first$1 = (fn, rate) => {\n        let timer = null;\n        const cancel = () => {\n          if (!isNull(timer)) {\n            clearTimeout(timer);\n            timer = null;\n          }\n        };\n        const throttle = (...args) => {\n          if (isNull(timer)) {\n            timer = setTimeout(() => {\n              timer = null;\n              fn.apply(null, args);\n            }, rate);\n          }\n        };\n        return {\n          cancel,\n          throttle\n        };\n      };\n      const last$1 = (fn, rate) => {\n        let timer = null;\n        const cancel = () => {\n          if (!isNull(timer)) {\n            clearTimeout(timer);\n            timer = null;\n          }\n        };\n        const throttle = (...args) => {\n          cancel();\n          timer = setTimeout(() => {\n            timer = null;\n            fn.apply(null, args);\n          }, rate);\n        };\n        return {\n          cancel,\n          throttle\n        };\n      };\n      const descendants$1 = (scope, predicate) => {\n        let result = [];\n        each$g(children(scope), (x2) => {\n          if (predicate(x2)) {\n            result = result.concat([x2]);\n          }\n          result = result.concat(descendants$1(x2, predicate));\n        });\n        return result;\n      };\n      const descendants = (scope, selector) => all(selector, scope);\n      const annotation = constant2(\"mce-annotation\");\n      const dataAnnotation = constant2(\"data-mce-annotation\");\n      const dataAnnotationId = constant2(\"data-mce-annotation-uid\");\n      const dataAnnotationActive = constant2(\"data-mce-annotation-active\");\n      const identify = (editor, annotationName) => {\n        const rng = editor.selection.getRng();\n        const start2 = SugarElement.fromDom(rng.startContainer);\n        const root2 = SugarElement.fromDom(editor.getBody());\n        const selector = annotationName.fold(() => \".\" + annotation(), (an) => `[${dataAnnotation()}=\"${an}\"]`);\n        const newStart = child$1(start2, rng.startOffset).getOr(start2);\n        const closest2 = closest$3(newStart, selector, (n3) => eq2(n3, root2));\n        const getAttr = (c2, property) => {\n          if (has$1(c2, property)) {\n            return Optional.some(get$9(c2, property));\n          } else {\n            return Optional.none();\n          }\n        };\n        return closest2.bind((c2) => getAttr(c2, `${dataAnnotationId()}`).bind((uid) => getAttr(c2, `${dataAnnotation()}`).map((name2) => {\n          const elements = findMarkers(editor, uid);\n          return {\n            uid,\n            name: name2,\n            elements\n          };\n        })));\n      };\n      const isAnnotation = (elem) => isElement$7(elem) && has2(elem, annotation());\n      const findMarkers = (editor, uid) => {\n        const body = SugarElement.fromDom(editor.getBody());\n        return descendants(body, `[${dataAnnotationId()}=\"${uid}\"]`);\n      };\n      const findAll = (editor, name2) => {\n        const body = SugarElement.fromDom(editor.getBody());\n        const markers = descendants(body, `[${dataAnnotation()}=\"${name2}\"]`);\n        const directory = {};\n        each$g(markers, (m2) => {\n          const uid = get$9(m2, dataAnnotationId());\n          const nodesAlready = get$a(directory, uid).getOr([]);\n          directory[uid] = nodesAlready.concat([m2]);\n        });\n        return directory;\n      };\n      const setup$x = (editor, registry2) => {\n        const changeCallbacks = Cell({});\n        const initData = () => ({\n          listeners: [],\n          previous: value$2()\n        });\n        const withCallbacks = (name2, f2) => {\n          updateCallbacks(name2, (data2) => {\n            f2(data2);\n            return data2;\n          });\n        };\n        const updateCallbacks = (name2, f2) => {\n          const callbackMap = changeCallbacks.get();\n          const data2 = get$a(callbackMap, name2).getOrThunk(initData);\n          const outputData = f2(data2);\n          callbackMap[name2] = outputData;\n          changeCallbacks.set(callbackMap);\n        };\n        const fireCallbacks = (name2, uid, elements) => {\n          withCallbacks(name2, (data2) => {\n            each$g(data2.listeners, (f2) => f2(true, name2, {\n              uid,\n              nodes: map$3(elements, (elem) => elem.dom)\n            }));\n          });\n        };\n        const fireNoAnnotation = (name2) => {\n          withCallbacks(name2, (data2) => {\n            each$g(data2.listeners, (f2) => f2(false, name2));\n          });\n        };\n        const toggleActiveAttr = (uid, state) => {\n          each$g(findMarkers(editor, uid), (span) => {\n            if (state) {\n              set$2(span, dataAnnotationActive(), \"true\");\n            } else {\n              remove$a(span, dataAnnotationActive());\n            }\n          });\n        };\n        const onNodeChange = last$1(() => {\n          const annotations = sort(registry2.getNames());\n          each$g(annotations, (name2) => {\n            updateCallbacks(name2, (data2) => {\n              const prev2 = data2.previous.get();\n              identify(editor, Optional.some(name2)).fold(() => {\n                prev2.each((uid) => {\n                  fireNoAnnotation(name2);\n                  data2.previous.clear();\n                  toggleActiveAttr(uid, false);\n                });\n              }, ({ uid, name: name3, elements }) => {\n                if (!is$2(prev2, uid)) {\n                  prev2.each((uid2) => toggleActiveAttr(uid2, false));\n                  fireCallbacks(name3, uid, elements);\n                  data2.previous.set(uid);\n                  toggleActiveAttr(uid, true);\n                }\n              });\n              return {\n                previous: data2.previous,\n                listeners: data2.listeners\n              };\n            });\n          });\n        }, 30);\n        editor.on(\"remove\", () => {\n          onNodeChange.cancel();\n        });\n        editor.on(\"NodeChange\", () => {\n          onNodeChange.throttle();\n        });\n        const addListener = (name2, f2) => {\n          updateCallbacks(name2, (data2) => ({\n            previous: data2.previous,\n            listeners: data2.listeners.concat([f2])\n          }));\n        };\n        return { addListener };\n      };\n      const setup$w = (editor, registry2) => {\n        const identifyParserNode = (span) => Optional.from(span.attr(dataAnnotation())).bind(registry2.lookup);\n        editor.serializer.addTempAttr(dataAnnotationActive());\n        editor.serializer.addNodeFilter(\"span\", (spans) => {\n          each$g(spans, (span) => {\n            identifyParserNode(span).each((settings) => {\n              if (settings.persistent === false) {\n                span.unwrap();\n              }\n            });\n          });\n        });\n      };\n      const create$b = () => {\n        const annotations = {};\n        const register2 = (name2, settings) => {\n          annotations[name2] = {\n            name: name2,\n            settings\n          };\n        };\n        const lookup2 = (name2) => get$a(annotations, name2).map((a2) => a2.settings);\n        const getNames = () => keys2(annotations);\n        return {\n          register: register2,\n          lookup: lookup2,\n          getNames\n        };\n      };\n      let unique = 0;\n      const generate$1 = (prefix) => {\n        const date = /* @__PURE__ */ new Date();\n        const time = date.getTime();\n        const random = Math.floor(Math.random() * 1e9);\n        unique++;\n        return prefix + \"_\" + random + unique + String(time);\n      };\n      const add2 = (element, classes) => {\n        each$g(classes, (x2) => {\n          add$2(element, x2);\n        });\n      };\n      const clone$2 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n      const shallow$1 = (original) => clone$2(original, false);\n      const deep$1 = (original) => clone$2(original, true);\n      const shallowAs = (original, tag) => {\n        const nu2 = SugarElement.fromTag(tag);\n        const attributes = clone$4(original);\n        setAll$1(nu2, attributes);\n        return nu2;\n      };\n      const mutate = (original, tag) => {\n        const nu2 = shallowAs(original, tag);\n        after$4(original, nu2);\n        const children$1 = children(original);\n        append(nu2, children$1);\n        remove$5(original);\n        return nu2;\n      };\n      const TextWalker = (startNode, rootNode, isBoundary2 = never) => {\n        const walker = new DomTreeWalker(startNode, rootNode);\n        const walk2 = (direction) => {\n          let next2;\n          do {\n            next2 = walker[direction]();\n          } while (next2 && !isText$8(next2) && !isBoundary2(next2));\n          return Optional.from(next2).filter(isText$8);\n        };\n        return {\n          current: () => Optional.from(walker.current()).filter(isText$8),\n          next: () => walk2(\"next\"),\n          prev: () => walk2(\"prev\"),\n          prev2: () => walk2(\"prev2\")\n        };\n      };\n      const TextSeeker = (dom3, isBoundary2) => {\n        const isBlockBoundary = isBoundary2 ? isBoundary2 : (node) => dom3.isBlock(node) || isBr$5(node) || isContentEditableFalse$a(node);\n        const walk2 = (node, offset, walker, process2) => {\n          if (isText$8(node)) {\n            const newOffset = process2(node, offset, node.data);\n            if (newOffset !== -1) {\n              return Optional.some({\n                container: node,\n                offset: newOffset\n              });\n            }\n          }\n          return walker().bind((next2) => walk2(next2.container, next2.offset, walker, process2));\n        };\n        const backwards = (node, offset, process2, root2) => {\n          const walker = TextWalker(node, root2, isBlockBoundary);\n          return walk2(node, offset, () => walker.prev().map((prev2) => ({\n            container: prev2,\n            offset: prev2.length\n          })), process2).getOrNull();\n        };\n        const forwards = (node, offset, process2, root2) => {\n          const walker = TextWalker(node, root2, isBlockBoundary);\n          return walk2(node, offset, () => walker.next().map((next2) => ({\n            container: next2,\n            offset: 0\n          })), process2).getOrNull();\n        };\n        return {\n          backwards,\n          forwards\n        };\n      };\n      const round$1 = Math.round;\n      const clone$1 = (rect) => {\n        if (!rect) {\n          return {\n            left: 0,\n            top: 0,\n            bottom: 0,\n            right: 0,\n            width: 0,\n            height: 0\n          };\n        }\n        return {\n          left: round$1(rect.left),\n          top: round$1(rect.top),\n          bottom: round$1(rect.bottom),\n          right: round$1(rect.right),\n          width: round$1(rect.width),\n          height: round$1(rect.height)\n        };\n      };\n      const collapse = (rect, toStart) => {\n        rect = clone$1(rect);\n        if (toStart) {\n          rect.right = rect.left;\n        } else {\n          rect.left = rect.left + rect.width;\n          rect.right = rect.left;\n        }\n        rect.width = 0;\n        return rect;\n      };\n      const isEqual2 = (rect1, rect2) => rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n      const isValidOverflow = (overflowY, rect1, rect2) => overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n      const isAbove$1 = (rect1, rect2) => {\n        const halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n        if (rect1.bottom - halfHeight < rect2.top) {\n          return true;\n        }\n        if (rect1.top > rect2.bottom) {\n          return false;\n        }\n        return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n      };\n      const isBelow$1 = (rect1, rect2) => {\n        if (rect1.top > rect2.bottom) {\n          return true;\n        }\n        if (rect1.bottom < rect2.top) {\n          return false;\n        }\n        return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\n      };\n      const containsXY = (rect, clientX, clientY) => clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n      const boundingClientRectFromRects = (rects) => {\n        return foldl(rects, (acc, rect) => {\n          return acc.fold(() => Optional.some(rect), (prevRect) => {\n            const left = Math.min(rect.left, prevRect.left);\n            const top = Math.min(rect.top, prevRect.top);\n            const right = Math.max(rect.right, prevRect.right);\n            const bottom = Math.max(rect.bottom, prevRect.bottom);\n            return Optional.some({\n              top,\n              right,\n              bottom,\n              left,\n              width: right - left,\n              height: bottom - top\n            });\n          });\n        }, Optional.none());\n      };\n      const distanceToRectEdgeFromXY = (rect, x2, y2) => {\n        const cx = Math.max(Math.min(x2, rect.left + rect.width), rect.left);\n        const cy = Math.max(Math.min(y2, rect.top + rect.height), rect.top);\n        return Math.sqrt((x2 - cx) * (x2 - cx) + (y2 - cy) * (y2 - cy));\n      };\n      const overlapY = (r1, r22) => Math.max(0, Math.min(r1.bottom, r22.bottom) - Math.max(r1.top, r22.top));\n      const clamp$2 = (value2, min2, max2) => Math.min(Math.max(value2, min2), max2);\n      const getSelectedNode = (range2) => {\n        const startContainer = range2.startContainer, startOffset = range2.startOffset;\n        if (startContainer.hasChildNodes() && range2.endOffset === startOffset + 1) {\n          return startContainer.childNodes[startOffset];\n        }\n        return null;\n      };\n      const getNode$1 = (container, offset) => {\n        if (isElement$6(container) && container.hasChildNodes()) {\n          const childNodes = container.childNodes;\n          const safeOffset = clamp$2(offset, 0, childNodes.length - 1);\n          return childNodes[safeOffset];\n        } else {\n          return container;\n        }\n      };\n      const getNodeUnsafe = (container, offset) => {\n        if (offset < 0 && isElement$6(container) && container.hasChildNodes()) {\n          return void 0;\n        } else {\n          return getNode$1(container, offset);\n        }\n      };\n      const extendingChars = new RegExp(\"[̀-ͯ҃-҇҈-҉֑-ֽֿׁ-ׂׄ-ׇׅؐ-ًؚ-ٰٟۖ-ۜ۟-ۤۧ-۪ۨ-ܑۭܰ-݊ަ-ް߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣣ-ंऺ़ु-ै्॑-ॗॢ-ॣঁ়াু-ৄ্ৗৢ-ৣਁ-ਂ਼ੁ-ੂੇ-ੈੋ-੍ੑੰ-ੱੵઁ-ં઼ુ-ૅે-ૈ્ૢ-ૣଁ଼ାିୁ-ୄ୍ୖୗୢ-ୣஂாீ்ௗఀా-ీె-ైొ-్ౕ-ౖౢ-ౣಁ಼ಿೂೆೌ-್ೕ-ೖೢ-ೣഁാു-ൄ്ൗൢ-ൣ්ාි-ුූෟัิ-ฺ็-๎ັິ-ູົ-ຼ່-ໍ༘-ཱ༹༙༵༷-ཾྀ-྄྆-྇ྍ-ྗྙ-ྼ࿆ိ-ူဲ-့္-်ွ-ှၘ-ၙၞ-ၠၱ-ၴႂႅ-ႆႍႝ፝-፟ᜒ-᜔ᜲ-᜴ᝒ-ᝓᝲ-ᝳ឴-឵ិ-ួំ៉-៓៝᠋-᠍ᢩᤠ-ᤢᤧ-ᤨᤲ᤹-᤻ᨗ-ᨘᨛᩖᩘ-ᩞ᩠ᩢᩥ-ᩬᩳ-᩿᩼᪰-᪽᪾ᬀ-ᬃ᬴ᬶ-ᬺᬼᭂ᭫-᭳ᮀ-ᮁᮢ-ᮥᮨ-ᮩ᮫-ᮭ᯦ᯨ-ᯩᯭᯯ-ᯱᰬ-ᰳᰶ-᰷᳐-᳔᳒-᳢᳠-᳨᳭᳴᳸-᳹᷀-᷵᷼-᷿‌-‍⃐-⃜⃝-⃠⃡⃢-⃤⃥-⃰⳯-⵿⳱ⷠ-〪ⷿ-〭〮-゙〯-゚꙯꙰-꙲ꙴ-꙽ꚞ-ꚟ꛰-꛱ꠂ꠆ꠋꠥ-ꠦ꣄꣠-꣱ꤦ-꤭ꥇ-ꥑꦀ-ꦂ꦳ꦶ-ꦹꦼꧥꨩ-ꨮꨱ-ꨲꨵ-ꨶꩃꩌꩼꪰꪲ-ꪴꪷ-ꪸꪾ-꪿꫁ꫬ-ꫭ꫶ꯥꯨ꯭ﬞ︀-️︠-︯ﾞ-ﾟ]\");\n      const isExtendingChar = (ch) => typeof ch === \"string\" && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n      const or = (...args) => {\n        return (x2) => {\n          for (let i3 = 0; i3 < args.length; i3++) {\n            if (args[i3](x2)) {\n              return true;\n            }\n          }\n          return false;\n        };\n      };\n      const and = (...args) => {\n        return (x2) => {\n          for (let i3 = 0; i3 < args.length; i3++) {\n            if (!args[i3](x2)) {\n              return false;\n            }\n          }\n          return true;\n        };\n      };\n      const isElement$4 = isElement$6;\n      const isCaretCandidate$2 = isCaretCandidate$3;\n      const isBlock$1 = matchStyleValues(\"display\", \"block table\");\n      const isFloated = matchStyleValues(\"float\", \"left right\");\n      const isValidElementCaretCandidate = and(isElement$4, isCaretCandidate$2, not(isFloated));\n      const isNotPre = not(matchStyleValues(\"white-space\", \"pre pre-line pre-wrap\"));\n      const isText$5 = isText$8;\n      const isBr$2 = isBr$5;\n      const nodeIndex$1 = DOMUtils.nodeIndex;\n      const resolveIndex$1 = getNodeUnsafe;\n      const createRange$1 = (doc) => \"createRange\" in doc ? doc.createRange() : DOMUtils.DOM.createRng();\n      const isWhiteSpace$1 = (chr) => chr && /[\\r\\n\\t ]/.test(chr);\n      const isRange = (rng) => !!rng.setStart && !!rng.setEnd;\n      const isHiddenWhiteSpaceRange = (range2) => {\n        const container = range2.startContainer;\n        const offset = range2.startOffset;\n        if (isWhiteSpace$1(range2.toString()) && isNotPre(container.parentNode) && isText$8(container)) {\n          const text3 = container.data;\n          if (isWhiteSpace$1(text3[offset - 1]) || isWhiteSpace$1(text3[offset + 1])) {\n            return true;\n          }\n        }\n        return false;\n      };\n      const getBrClientRect = (brNode) => {\n        const doc = brNode.ownerDocument;\n        const rng = createRange$1(doc);\n        const nbsp$1 = doc.createTextNode(nbsp);\n        const parentNode = brNode.parentNode;\n        parentNode.insertBefore(nbsp$1, brNode);\n        rng.setStart(nbsp$1, 0);\n        rng.setEnd(nbsp$1, 1);\n        const clientRect = clone$1(rng.getBoundingClientRect());\n        parentNode.removeChild(nbsp$1);\n        return clientRect;\n      };\n      const getBoundingClientRectWebKitText = (rng) => {\n        const sc = rng.startContainer;\n        const ec = rng.endContainer;\n        const so = rng.startOffset;\n        const eo = rng.endOffset;\n        if (sc === ec && isText$8(ec) && so === 0 && eo === 1) {\n          const newRng = rng.cloneRange();\n          newRng.setEndAfter(ec);\n          return getBoundingClientRect$1(newRng);\n        } else {\n          return null;\n        }\n      };\n      const isZeroRect = (r4) => r4.left === 0 && r4.right === 0 && r4.top === 0 && r4.bottom === 0;\n      const getBoundingClientRect$1 = (item) => {\n        let clientRect;\n        const clientRects = item.getClientRects();\n        if (clientRects.length > 0) {\n          clientRect = clone$1(clientRects[0]);\n        } else {\n          clientRect = clone$1(item.getBoundingClientRect());\n        }\n        if (!isRange(item) && isBr$2(item) && isZeroRect(clientRect)) {\n          return getBrClientRect(item);\n        }\n        if (isZeroRect(clientRect) && isRange(item)) {\n          return getBoundingClientRectWebKitText(item);\n        }\n        return clientRect;\n      };\n      const collapseAndInflateWidth = (clientRect, toStart) => {\n        const newClientRect = collapse(clientRect, toStart);\n        newClientRect.width = 1;\n        newClientRect.right = newClientRect.left + 1;\n        return newClientRect;\n      };\n      const getCaretPositionClientRects = (caretPosition) => {\n        const clientRects = [];\n        const addUniqueAndValidRect = (clientRect) => {\n          if (clientRect.height === 0) {\n            return;\n          }\n          if (clientRects.length > 0) {\n            if (isEqual2(clientRect, clientRects[clientRects.length - 1])) {\n              return;\n            }\n          }\n          clientRects.push(clientRect);\n        };\n        const addCharacterOffset = (container2, offset2) => {\n          const range2 = createRange$1(container2.ownerDocument);\n          if (offset2 < container2.data.length) {\n            if (isExtendingChar(container2.data[offset2])) {\n              return clientRects;\n            }\n            if (isExtendingChar(container2.data[offset2 - 1])) {\n              range2.setStart(container2, offset2);\n              range2.setEnd(container2, offset2 + 1);\n              if (!isHiddenWhiteSpaceRange(range2)) {\n                addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range2), false));\n                return clientRects;\n              }\n            }\n          }\n          if (offset2 > 0) {\n            range2.setStart(container2, offset2 - 1);\n            range2.setEnd(container2, offset2);\n            if (!isHiddenWhiteSpaceRange(range2)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range2), false));\n            }\n          }\n          if (offset2 < container2.data.length) {\n            range2.setStart(container2, offset2);\n            range2.setEnd(container2, offset2 + 1);\n            if (!isHiddenWhiteSpaceRange(range2)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range2), true));\n            }\n          }\n        };\n        const container = caretPosition.container();\n        const offset = caretPosition.offset();\n        if (isText$5(container)) {\n          addCharacterOffset(container, offset);\n          return clientRects;\n        }\n        if (isElement$4(container)) {\n          if (caretPosition.isAtEnd()) {\n            const node = resolveIndex$1(container, offset);\n            if (isText$5(node)) {\n              addCharacterOffset(node, node.data.length);\n            }\n            if (isValidElementCaretCandidate(node) && !isBr$2(node)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n            }\n          } else {\n            const node = resolveIndex$1(container, offset);\n            if (isText$5(node)) {\n              addCharacterOffset(node, 0);\n            }\n            if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n              return clientRects;\n            }\n            const beforeNode = resolveIndex$1(caretPosition.container(), caretPosition.offset() - 1);\n            if (isValidElementCaretCandidate(beforeNode) && !isBr$2(beforeNode)) {\n              if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n                addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(beforeNode), false));\n              }\n            }\n            if (isValidElementCaretCandidate(node)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), true));\n            }\n          }\n        }\n        return clientRects;\n      };\n      const CaretPosition = (container, offset, clientRects) => {\n        const isAtStart = () => {\n          if (isText$5(container)) {\n            return offset === 0;\n          }\n          return offset === 0;\n        };\n        const isAtEnd = () => {\n          if (isText$5(container)) {\n            return offset >= container.data.length;\n          }\n          return offset >= container.childNodes.length;\n        };\n        const toRange = () => {\n          const range2 = createRange$1(container.ownerDocument);\n          range2.setStart(container, offset);\n          range2.setEnd(container, offset);\n          return range2;\n        };\n        const getClientRects2 = () => {\n          if (!clientRects) {\n            clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n          }\n          return clientRects;\n        };\n        const isVisible = () => getClientRects2().length > 0;\n        const isEqual3 = (caretPosition) => caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n        const getNode2 = (before2) => resolveIndex$1(container, before2 ? offset - 1 : offset);\n        return {\n          container: constant2(container),\n          offset: constant2(offset),\n          toRange,\n          getClientRects: getClientRects2,\n          isVisible,\n          isAtStart,\n          isAtEnd,\n          isEqual: isEqual3,\n          getNode: getNode2\n        };\n      };\n      CaretPosition.fromRangeStart = (range2) => CaretPosition(range2.startContainer, range2.startOffset);\n      CaretPosition.fromRangeEnd = (range2) => CaretPosition(range2.endContainer, range2.endOffset);\n      CaretPosition.after = (node) => CaretPosition(node.parentNode, nodeIndex$1(node) + 1);\n      CaretPosition.before = (node) => CaretPosition(node.parentNode, nodeIndex$1(node));\n      CaretPosition.isAbove = (pos1, pos2) => lift2(head(pos2.getClientRects()), last$3(pos1.getClientRects()), isAbove$1).getOr(false);\n      CaretPosition.isBelow = (pos1, pos2) => lift2(last$3(pos2.getClientRects()), head(pos1.getClientRects()), isBelow$1).getOr(false);\n      CaretPosition.isAtStart = (pos) => pos ? pos.isAtStart() : false;\n      CaretPosition.isAtEnd = (pos) => pos ? pos.isAtEnd() : false;\n      CaretPosition.isTextPosition = (pos) => pos ? isText$8(pos.container()) : false;\n      CaretPosition.isElementPosition = (pos) => CaretPosition.isTextPosition(pos) === false;\n      const trimEmptyTextNode$1 = (dom3, node) => {\n        if (isText$8(node) && node.data.length === 0) {\n          dom3.remove(node);\n        }\n      };\n      const insertNode = (dom3, rng, node) => {\n        rng.insertNode(node);\n        trimEmptyTextNode$1(dom3, node.previousSibling);\n        trimEmptyTextNode$1(dom3, node.nextSibling);\n      };\n      const insertFragment = (dom3, rng, frag) => {\n        const firstChild2 = Optional.from(frag.firstChild);\n        const lastChild2 = Optional.from(frag.lastChild);\n        rng.insertNode(frag);\n        firstChild2.each((child2) => trimEmptyTextNode$1(dom3, child2.previousSibling));\n        lastChild2.each((child2) => trimEmptyTextNode$1(dom3, child2.nextSibling));\n      };\n      const rangeInsertNode = (dom3, rng, node) => {\n        if (isDocumentFragment(node)) {\n          insertFragment(dom3, rng, node);\n        } else {\n          insertNode(dom3, rng, node);\n        }\n      };\n      const isText$4 = isText$8;\n      const isBogus = isBogus$2;\n      const nodeIndex = DOMUtils.nodeIndex;\n      const normalizedParent = (node) => {\n        const parentNode = node.parentNode;\n        if (isBogus(parentNode)) {\n          return normalizedParent(parentNode);\n        }\n        return parentNode;\n      };\n      const getChildNodes = (node) => {\n        if (!node) {\n          return [];\n        }\n        return reduce(node.childNodes, (result, node2) => {\n          if (isBogus(node2) && node2.nodeName !== \"BR\") {\n            result = result.concat(getChildNodes(node2));\n          } else {\n            result.push(node2);\n          }\n          return result;\n        }, []);\n      };\n      const normalizedTextOffset = (node, offset) => {\n        while (node = node.previousSibling) {\n          if (!isText$4(node)) {\n            break;\n          }\n          offset += node.data.length;\n        }\n        return offset;\n      };\n      const equal = (a2) => (b2) => a2 === b2;\n      const normalizedNodeIndex = (node) => {\n        let nodes, index2;\n        nodes = getChildNodes(normalizedParent(node));\n        index2 = findIndex$1(nodes, equal(node), node);\n        nodes = nodes.slice(0, index2 + 1);\n        const numTextFragments = reduce(nodes, (result, node2, i3) => {\n          if (isText$4(node2) && isText$4(nodes[i3 - 1])) {\n            result++;\n          }\n          return result;\n        }, 0);\n        nodes = filter$4(nodes, matchNodeNames([node.nodeName]));\n        index2 = findIndex$1(nodes, equal(node), node);\n        return index2 - numTextFragments;\n      };\n      const createPathItem = (node) => {\n        let name2;\n        if (isText$4(node)) {\n          name2 = \"text()\";\n        } else {\n          name2 = node.nodeName.toLowerCase();\n        }\n        return name2 + \"[\" + normalizedNodeIndex(node) + \"]\";\n      };\n      const parentsUntil$1 = (root2, node, predicate) => {\n        const parents2 = [];\n        for (node = node.parentNode; node !== root2; node = node.parentNode) {\n          parents2.push(node);\n        }\n        return parents2;\n      };\n      const create$a = (root2, caretPosition) => {\n        let container, offset, path = [], outputOffset, childNodes, parents2;\n        container = caretPosition.container();\n        offset = caretPosition.offset();\n        if (isText$4(container)) {\n          outputOffset = normalizedTextOffset(container, offset);\n        } else {\n          childNodes = container.childNodes;\n          if (offset >= childNodes.length) {\n            outputOffset = \"after\";\n            offset = childNodes.length - 1;\n          } else {\n            outputOffset = \"before\";\n          }\n          container = childNodes[offset];\n        }\n        path.push(createPathItem(container));\n        parents2 = parentsUntil$1(root2, container);\n        parents2 = filter$4(parents2, not(isBogus$2));\n        path = path.concat(map$1(parents2, (node) => {\n          return createPathItem(node);\n        }));\n        return path.reverse().join(\"/\") + \",\" + outputOffset;\n      };\n      const resolvePathItem = (node, name2, index2) => {\n        let nodes = getChildNodes(node);\n        nodes = filter$4(nodes, (node2, index3) => {\n          return !isText$4(node2) || !isText$4(nodes[index3 - 1]);\n        });\n        nodes = filter$4(nodes, matchNodeNames([name2]));\n        return nodes[index2];\n      };\n      const findTextPosition = (container, offset) => {\n        let node = container, targetOffset = 0, dataLen;\n        while (isText$4(node)) {\n          dataLen = node.data.length;\n          if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n            container = node;\n            offset = offset - targetOffset;\n            break;\n          }\n          if (!isText$4(node.nextSibling)) {\n            container = node;\n            offset = dataLen;\n            break;\n          }\n          targetOffset += dataLen;\n          node = node.nextSibling;\n        }\n        if (isText$4(container) && offset > container.data.length) {\n          offset = container.data.length;\n        }\n        return CaretPosition(container, offset);\n      };\n      const resolve$1 = (root2, path) => {\n        let offset;\n        if (!path) {\n          return null;\n        }\n        const parts = path.split(\",\");\n        const paths = parts[0].split(\"/\");\n        offset = parts.length > 1 ? parts[1] : \"before\";\n        const container = reduce(paths, (result, value2) => {\n          const match4 = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value2);\n          if (!match4) {\n            return null;\n          }\n          if (match4[1] === \"text()\") {\n            match4[1] = \"#text\";\n          }\n          return resolvePathItem(result, match4[1], parseInt(match4[2], 10));\n        }, root2);\n        if (!container) {\n          return null;\n        }\n        if (!isText$4(container)) {\n          if (offset === \"after\") {\n            offset = nodeIndex(container) + 1;\n          } else {\n            offset = nodeIndex(container);\n          }\n          return CaretPosition(container.parentNode, offset);\n        }\n        return findTextPosition(container, parseInt(offset, 10));\n      };\n      const isContentEditableFalse$8 = isContentEditableFalse$a;\n      const getNormalizedTextOffset = (trim2, container, offset) => {\n        let node, trimmedOffset;\n        trimmedOffset = trim2(container.data.slice(0, offset)).length;\n        for (node = container.previousSibling; node && isText$8(node); node = node.previousSibling) {\n          trimmedOffset += trim2(node.data).length;\n        }\n        return trimmedOffset;\n      };\n      const getPoint = (dom3, trim2, normalized, rng, start2) => {\n        let container = rng[start2 ? \"startContainer\" : \"endContainer\"];\n        let offset = rng[start2 ? \"startOffset\" : \"endOffset\"];\n        const point2 = [];\n        let childNodes, after2 = 0;\n        const root2 = dom3.getRoot();\n        if (isText$8(container)) {\n          point2.push(normalized ? getNormalizedTextOffset(trim2, container, offset) : offset);\n        } else {\n          childNodes = container.childNodes;\n          if (offset >= childNodes.length && childNodes.length) {\n            after2 = 1;\n            offset = Math.max(0, childNodes.length - 1);\n          }\n          point2.push(dom3.nodeIndex(childNodes[offset], normalized) + after2);\n        }\n        for (; container && container !== root2; container = container.parentNode) {\n          point2.push(dom3.nodeIndex(container, normalized));\n        }\n        return point2;\n      };\n      const getLocation = (trim2, selection, normalized, rng) => {\n        const dom3 = selection.dom, bookmark = {};\n        bookmark.start = getPoint(dom3, trim2, normalized, rng, true);\n        if (!selection.isCollapsed()) {\n          bookmark.end = getPoint(dom3, trim2, normalized, rng, false);\n        }\n        if (isRangeInCaretContainerBlock(rng)) {\n          bookmark.isFakeCaret = true;\n        }\n        return bookmark;\n      };\n      const findIndex = (dom3, name2, element) => {\n        let count2 = 0;\n        Tools.each(dom3.select(name2), (node) => {\n          if (node.getAttribute(\"data-mce-bogus\") === \"all\") {\n            return;\n          }\n          if (node === element) {\n            return false;\n          }\n          count2++;\n        });\n        return count2;\n      };\n      const moveEndPoint$1 = (rng, start2) => {\n        let container, offset, childNodes;\n        const prefix = start2 ? \"start\" : \"end\";\n        container = rng[prefix + \"Container\"];\n        offset = rng[prefix + \"Offset\"];\n        if (isElement$6(container) && container.nodeName === \"TR\") {\n          childNodes = container.childNodes;\n          container = childNodes[Math.min(start2 ? offset : offset - 1, childNodes.length - 1)];\n          if (container) {\n            offset = start2 ? 0 : container.childNodes.length;\n            rng[\"set\" + (start2 ? \"Start\" : \"End\")](container, offset);\n          }\n        }\n      };\n      const normalizeTableCellSelection = (rng) => {\n        moveEndPoint$1(rng, true);\n        moveEndPoint$1(rng, false);\n        return rng;\n      };\n      const findSibling = (node, offset) => {\n        let sibling2;\n        if (isElement$6(node)) {\n          node = getNode$1(node, offset);\n          if (isContentEditableFalse$8(node)) {\n            return node;\n          }\n        }\n        if (isCaretContainer$2(node)) {\n          if (isText$8(node) && isCaretContainerBlock$1(node)) {\n            node = node.parentNode;\n          }\n          sibling2 = node.previousSibling;\n          if (isContentEditableFalse$8(sibling2)) {\n            return sibling2;\n          }\n          sibling2 = node.nextSibling;\n          if (isContentEditableFalse$8(sibling2)) {\n            return sibling2;\n          }\n        }\n      };\n      const findAdjacentContentEditableFalseElm = (rng) => {\n        return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n      };\n      const getOffsetBookmark = (trim2, normalized, selection) => {\n        const element = selection.getNode();\n        let name2 = element ? element.nodeName : null;\n        const rng = selection.getRng();\n        if (isContentEditableFalse$8(element) || name2 === \"IMG\") {\n          return {\n            name: name2,\n            index: findIndex(selection.dom, name2, element)\n          };\n        }\n        const sibling2 = findAdjacentContentEditableFalseElm(rng);\n        if (sibling2) {\n          name2 = sibling2.tagName;\n          return {\n            name: name2,\n            index: findIndex(selection.dom, name2, sibling2)\n          };\n        }\n        return getLocation(trim2, selection, normalized, rng);\n      };\n      const getCaretBookmark = (selection) => {\n        const rng = selection.getRng();\n        return {\n          start: create$a(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n          end: create$a(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng))\n        };\n      };\n      const getRangeBookmark = (selection) => {\n        return { rng: selection.getRng() };\n      };\n      const createBookmarkSpan = (dom3, id, filled) => {\n        const args = {\n          \"data-mce-type\": \"bookmark\",\n          id,\n          \"style\": \"overflow:hidden;line-height:0px\"\n        };\n        return filled ? dom3.create(\"span\", args, \"&#xFEFF;\") : dom3.create(\"span\", args);\n      };\n      const getPersistentBookmark = (selection, filled) => {\n        const dom3 = selection.dom;\n        let rng = selection.getRng();\n        const id = dom3.uniqueId();\n        const collapsed = selection.isCollapsed();\n        const element = selection.getNode();\n        const name2 = element.nodeName;\n        if (name2 === \"IMG\") {\n          return {\n            name: name2,\n            index: findIndex(dom3, name2, element)\n          };\n        }\n        const rng2 = normalizeTableCellSelection(rng.cloneRange());\n        if (!collapsed) {\n          rng2.collapse(false);\n          const endBookmarkNode = createBookmarkSpan(dom3, id + \"_end\", filled);\n          rangeInsertNode(dom3, rng2, endBookmarkNode);\n        }\n        rng = normalizeTableCellSelection(rng);\n        rng.collapse(true);\n        const startBookmarkNode = createBookmarkSpan(dom3, id + \"_start\", filled);\n        rangeInsertNode(dom3, rng, startBookmarkNode);\n        selection.moveToBookmark({\n          id,\n          keep: true\n        });\n        return { id };\n      };\n      const getBookmark$2 = (selection, type2, normalized) => {\n        if (type2 === 2) {\n          return getOffsetBookmark(trim$1, normalized, selection);\n        } else if (type2 === 3) {\n          return getCaretBookmark(selection);\n        } else if (type2) {\n          return getRangeBookmark(selection);\n        } else {\n          return getPersistentBookmark(selection, false);\n        }\n      };\n      const getUndoBookmark = curry(getOffsetBookmark, identity2, true);\n      const value$1 = (value2) => {\n        const applyHelper = (fn) => fn(value2);\n        const constHelper = constant2(value2);\n        const outputHelper = () => output;\n        const output = {\n          tag: true,\n          inner: value2,\n          fold: (_onError, onValue) => onValue(value2),\n          isValue: always,\n          isError: never,\n          map: (mapper) => Result.value(mapper(value2)),\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(value2);\n          },\n          toOptional: () => Optional.some(value2)\n        };\n        return output;\n      };\n      const error2 = (error3) => {\n        const outputHelper = () => output;\n        const output = {\n          tag: false,\n          inner: error3,\n          fold: (onError, _onValue) => onError(error3),\n          isValue: never,\n          isError: always,\n          map: outputHelper,\n          mapError: (mapper) => Result.error(mapper(error3)),\n          bind: outputHelper,\n          exists: never,\n          forall: always,\n          getOr: identity2,\n          or: identity2,\n          getOrThunk: apply$1,\n          orThunk: apply$1,\n          getOrDie: die(String(error3)),\n          each: noop,\n          toOptional: Optional.none\n        };\n        return output;\n      };\n      const fromOption = (optional, err) => optional.fold(() => error2(err), value$1);\n      const Result = {\n        value: value$1,\n        error: error2,\n        fromOption\n      };\n      const generate = (cases) => {\n        if (!isArray$1(cases)) {\n          throw new Error(\"cases must be an array\");\n        }\n        if (cases.length === 0) {\n          throw new Error(\"there must be at least one case\");\n        }\n        const constructors = [];\n        const adt2 = {};\n        each$g(cases, (acase, count2) => {\n          const keys$1 = keys2(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 value2 = acase[key];\n          if (adt2[key] !== void 0) {\n            throw new Error(\"duplicate key detected:\" + key);\n          } else if (key === \"cata\") {\n            throw new Error(\"cannot have a case named cata (sorry)\");\n          } else if (!isArray$1(value2)) {\n            throw new Error(\"case arguments must be an array\");\n          }\n          constructors.push(key);\n          adt2[key] = (...args) => {\n            const argLength = args.length;\n            if (argLength !== value2.length) {\n              throw new Error(\"Wrong number of arguments to case \" + key + \". Expected \" + value2.length + \" (\" + value2 + \"), got \" + argLength);\n            }\n            const match4 = (branches) => {\n              const branchKeys = keys2(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[count2];\n                return target.apply(null, args);\n              },\n              match: match4,\n              log: (label) => {\n                console.log(label, {\n                  constructors,\n                  constructor: key,\n                  params: args\n                });\n              }\n            };\n          };\n        });\n        return adt2;\n      };\n      const Adt = { generate };\n      Adt.generate([\n        {\n          bothErrors: [\n            \"error1\",\n            \"error2\"\n          ]\n        },\n        {\n          firstError: [\n            \"error1\",\n            \"value2\"\n          ]\n        },\n        {\n          secondError: [\n            \"value1\",\n            \"error2\"\n          ]\n        },\n        {\n          bothValues: [\n            \"value1\",\n            \"value2\"\n          ]\n        }\n      ]);\n      const partition$1 = (results) => {\n        const errors2 = [];\n        const values2 = [];\n        each$g(results, (result) => {\n          result.fold((err) => {\n            errors2.push(err);\n          }, (value2) => {\n            values2.push(value2);\n          });\n        });\n        return {\n          errors: errors2,\n          values: values2\n        };\n      };\n      const isInlinePattern = (pattern) => pattern.type === \"inline-command\" || pattern.type === \"inline-format\";\n      const isBlockPattern = (pattern) => pattern.type === \"block-command\" || pattern.type === \"block-format\";\n      const sortPatterns = (patterns) => sort(patterns, (a2, b2) => {\n        if (a2.start.length === b2.start.length) {\n          return 0;\n        }\n        return a2.start.length > b2.start.length ? -1 : 1;\n      });\n      const normalizePattern = (pattern) => {\n        const err = (message) => Result.error({\n          message,\n          pattern\n        });\n        const formatOrCmd = (name2, onFormat, onCommand) => {\n          if (pattern.format !== void 0) {\n            let formats;\n            if (isArray$1(pattern.format)) {\n              if (!forall(pattern.format, isString2)) {\n                return err(name2 + \" pattern has non-string items in the `format` array\");\n              }\n              formats = pattern.format;\n            } else if (isString2(pattern.format)) {\n              formats = [pattern.format];\n            } else {\n              return err(name2 + \" pattern has non-string `format` parameter\");\n            }\n            return Result.value(onFormat(formats));\n          } else if (pattern.cmd !== void 0) {\n            if (!isString2(pattern.cmd)) {\n              return err(name2 + \" pattern has non-string `cmd` parameter\");\n            }\n            return Result.value(onCommand(pattern.cmd, pattern.value));\n          } else {\n            return err(name2 + \" pattern is missing both `format` and `cmd` parameters\");\n          }\n        };\n        if (!isObject2(pattern)) {\n          return err(\"Raw pattern is not an object\");\n        }\n        if (!isString2(pattern.start)) {\n          return err(\"Raw pattern is missing `start` parameter\");\n        }\n        if (pattern.end !== void 0) {\n          if (!isString2(pattern.end)) {\n            return err(\"Inline pattern has non-string `end` parameter\");\n          }\n          if (pattern.start.length === 0 && pattern.end.length === 0) {\n            return err(\"Inline pattern has empty `start` and `end` parameters\");\n          }\n          let start2 = pattern.start;\n          let end2 = pattern.end;\n          if (end2.length === 0) {\n            end2 = start2;\n            start2 = \"\";\n          }\n          return formatOrCmd(\"Inline\", (format2) => ({\n            type: \"inline-format\",\n            start: start2,\n            end: end2,\n            format: format2\n          }), (cmd, value2) => ({\n            type: \"inline-command\",\n            start: start2,\n            end: end2,\n            cmd,\n            value: value2\n          }));\n        } else if (pattern.replacement !== void 0) {\n          if (!isString2(pattern.replacement)) {\n            return err(\"Replacement pattern has non-string `replacement` parameter\");\n          }\n          if (pattern.start.length === 0) {\n            return err(\"Replacement pattern has empty `start` parameter\");\n          }\n          return Result.value({\n            type: \"inline-command\",\n            start: \"\",\n            end: pattern.start,\n            cmd: \"mceInsertContent\",\n            value: pattern.replacement\n          });\n        } else {\n          if (pattern.start.length === 0) {\n            return err(\"Block pattern has empty `start` parameter\");\n          }\n          return formatOrCmd(\"Block\", (formats) => ({\n            type: \"block-format\",\n            start: pattern.start,\n            format: formats[0]\n          }), (command, commandValue) => ({\n            type: \"block-command\",\n            start: pattern.start,\n            cmd: command,\n            value: commandValue\n          }));\n        }\n      };\n      const getBlockPatterns = (patterns) => sortPatterns(filter$6(patterns, isBlockPattern));\n      const getInlinePatterns = (patterns) => filter$6(patterns, isInlinePattern);\n      const createPatternSet = (patterns) => ({\n        inlinePatterns: getInlinePatterns(patterns),\n        blockPatterns: getBlockPatterns(patterns)\n      });\n      const fromRawPatterns = (patterns) => {\n        const normalized = partition$1(map$3(patterns, normalizePattern));\n        each$g(normalized.errors, (err) => console.error(err.message, err.pattern));\n        return normalized.values;\n      };\n      const deviceDetection$1 = detect$2().deviceType;\n      const isTouch = deviceDetection$1.isTouch();\n      const DOM$a = DOMUtils.DOM;\n      const getHash = (value2) => {\n        const items = value2.indexOf(\"=\") > 0 ? value2.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value2.split(\",\");\n        return foldl(items, (output, item) => {\n          const arr = item.split(\"=\");\n          const key = arr[0];\n          const val = arr.length > 1 ? arr[1] : key;\n          output[trim$3(key)] = trim$3(val);\n          return output;\n        }, {});\n      };\n      const isRegExp2 = (x2) => is$4(x2, RegExp);\n      const option = (name2) => (editor) => editor.options.get(name2);\n      const stringOrObjectProcessor = (value2) => isString2(value2) || isObject2(value2);\n      const bodyOptionProcessor = (editor, defaultValue = \"\") => (value2) => {\n        const valid = isString2(value2);\n        if (valid) {\n          if (value2.indexOf(\"=\") !== -1) {\n            const bodyObj = getHash(value2);\n            return {\n              value: get$a(bodyObj, editor.id).getOr(defaultValue),\n              valid\n            };\n          } else {\n            return {\n              value: value2,\n              valid\n            };\n          }\n        } else {\n          return {\n            valid: false,\n            message: \"Must be a string.\"\n          };\n        }\n      };\n      const register$7 = (editor) => {\n        const registerOption = editor.options.register;\n        registerOption(\"id\", {\n          processor: \"string\",\n          default: editor.id\n        });\n        registerOption(\"selector\", { processor: \"string\" });\n        registerOption(\"target\", { processor: \"object\" });\n        registerOption(\"suffix\", { processor: \"string\" });\n        registerOption(\"cache_suffix\", { processor: \"string\" });\n        registerOption(\"base_url\", { processor: \"string\" });\n        registerOption(\"referrer_policy\", {\n          processor: \"string\",\n          default: \"\"\n        });\n        registerOption(\"language_load\", { processor: \"boolean\" });\n        registerOption(\"inline\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"iframe_attrs\", {\n          processor: \"object\",\n          default: {}\n        });\n        registerOption(\"doctype\", {\n          processor: \"string\",\n          default: \"<!DOCTYPE html>\"\n        });\n        registerOption(\"document_base_url\", {\n          processor: \"string\",\n          default: editor.documentBaseUrl\n        });\n        registerOption(\"body_id\", {\n          processor: bodyOptionProcessor(editor, \"tinymce\"),\n          default: \"tinymce\"\n        });\n        registerOption(\"body_class\", {\n          processor: bodyOptionProcessor(editor),\n          default: \"\"\n        });\n        registerOption(\"content_security_policy\", {\n          processor: \"string\",\n          default: \"\"\n        });\n        registerOption(\"br_in_pre\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"forced_root_block\", {\n          processor: (value2) => {\n            const valid = isString2(value2) && isNotEmpty(value2);\n            if (valid) {\n              return {\n                value: value2,\n                valid\n              };\n            } else {\n              return {\n                valid: false,\n                message: \"Must be a non-empty string.\"\n              };\n            }\n          },\n          default: \"p\"\n        });\n        registerOption(\"forced_root_block_attrs\", {\n          processor: \"object\",\n          default: {}\n        });\n        registerOption(\"br_newline_selector\", {\n          processor: \"string\",\n          default: \".mce-toc h2,figcaption,caption\"\n        });\n        registerOption(\"no_newline_selector\", {\n          processor: \"string\",\n          default: \"\"\n        });\n        registerOption(\"keep_styles\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"end_container_on_empty_block\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"font_size_style_values\", {\n          processor: \"string\",\n          default: \"xx-small,x-small,small,medium,large,x-large,xx-large\"\n        });\n        registerOption(\"font_size_legacy_values\", {\n          processor: \"string\",\n          default: \"xx-small,small,medium,large,x-large,xx-large,300%\"\n        });\n        registerOption(\"font_size_classes\", {\n          processor: \"string\",\n          default: \"\"\n        });\n        registerOption(\"automatic_uploads\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"images_reuse_filename\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"images_replace_blob_uris\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"icons\", {\n          processor: \"string\",\n          default: \"\"\n        });\n        registerOption(\"icons_url\", {\n          processor: \"string\",\n          default: \"\"\n        });\n        registerOption(\"images_upload_url\", {\n          processor: \"string\",\n          default: \"\"\n        });\n        registerOption(\"images_upload_base_path\", {\n          processor: \"string\",\n          default: \"\"\n        });\n        registerOption(\"images_upload_base_path\", {\n          processor: \"string\",\n          default: \"\"\n        });\n        registerOption(\"images_upload_credentials\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"images_upload_handler\", { processor: \"function\" });\n        registerOption(\"language\", {\n          processor: \"string\",\n          default: \"en\"\n        });\n        registerOption(\"language_url\", {\n          processor: \"string\",\n          default: \"\"\n        });\n        registerOption(\"entity_encoding\", {\n          processor: \"string\",\n          default: \"named\"\n        });\n        registerOption(\"indent\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"indent_before\", {\n          processor: \"string\",\n          default: \"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist\"\n        });\n        registerOption(\"indent_after\", {\n          processor: \"string\",\n          default: \"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist\"\n        });\n        registerOption(\"indent_use_margin\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"indentation\", {\n          processor: \"string\",\n          default: \"40px\"\n        });\n        registerOption(\"content_css\", {\n          processor: (value2) => {\n            const valid = value2 === false || isString2(value2) || isArrayOf(value2, isString2);\n            if (valid) {\n              if (isString2(value2)) {\n                return {\n                  value: map$3(value2.split(\",\"), trim$3),\n                  valid\n                };\n              } else if (isArray$1(value2)) {\n                return {\n                  value: value2,\n                  valid\n                };\n              } else if (value2 === false) {\n                return {\n                  value: [],\n                  valid\n                };\n              } else {\n                return {\n                  value: value2,\n                  valid\n                };\n              }\n            } else {\n              return {\n                valid: false,\n                message: \"Must be false, a string or an array of strings.\"\n              };\n            }\n          },\n          default: isInline(editor) ? [] : [\"default\"]\n        });\n        registerOption(\"content_style\", { processor: \"string\" });\n        registerOption(\"content_css_cors\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"font_css\", {\n          processor: (value2) => {\n            const valid = isString2(value2) || isArrayOf(value2, isString2);\n            if (valid) {\n              const newValue = isArray$1(value2) ? value2 : map$3(value2.split(\",\"), trim$3);\n              return {\n                value: newValue,\n                valid\n              };\n            } else {\n              return {\n                valid: false,\n                message: \"Must be a string or an array of strings.\"\n              };\n            }\n          },\n          default: []\n        });\n        registerOption(\"inline_boundaries\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"inline_boundaries_selector\", {\n          processor: \"string\",\n          default: \"a[href],code,.mce-annotation\"\n        });\n        registerOption(\"object_resizing\", {\n          processor: (value2) => {\n            const valid = isBoolean2(value2) || isString2(value2);\n            if (valid) {\n              if (value2 === false || deviceDetection$1.isiPhone() || deviceDetection$1.isiPad()) {\n                return {\n                  value: \"\",\n                  valid\n                };\n              } else {\n                return {\n                  value: value2 === true ? \"table,img,figure.image,div,video,iframe\" : value2,\n                  valid\n                };\n              }\n            } else {\n              return {\n                valid: false,\n                message: \"Must be boolean or a string\"\n              };\n            }\n          },\n          default: !isTouch\n        });\n        registerOption(\"resize_img_proportional\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"event_root\", { processor: \"object\" });\n        registerOption(\"service_message\", { processor: \"string\" });\n        registerOption(\"theme\", {\n          processor: (value2) => value2 === false || isString2(value2) || isFunction2(value2),\n          default: \"silver\"\n        });\n        registerOption(\"theme_url\", { processor: \"string\" });\n        registerOption(\"formats\", { processor: \"object\" });\n        registerOption(\"format_empty_lines\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"preview_styles\", {\n          processor: (value2) => {\n            const valid = value2 === false || isString2(value2);\n            if (valid) {\n              return {\n                value: value2 === false ? \"\" : value2,\n                valid\n              };\n            } else {\n              return {\n                valid: false,\n                message: \"Must be false or a string\"\n              };\n            }\n          },\n          default: \"font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow\"\n        });\n        registerOption(\"custom_ui_selector\", {\n          processor: \"string\",\n          default: \"\"\n        });\n        registerOption(\"hidden_input\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"submit_patch\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"encoding\", { processor: \"string\" });\n        registerOption(\"add_form_submit_trigger\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"add_unload_trigger\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"custom_undo_redo_levels\", {\n          processor: \"number\",\n          default: 0\n        });\n        registerOption(\"disable_nodechange\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"readonly\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"plugins\", {\n          processor: \"string[]\",\n          default: []\n        });\n        registerOption(\"external_plugins\", { processor: \"object\" });\n        registerOption(\"forced_plugins\", { processor: \"string[]\" });\n        registerOption(\"model\", {\n          processor: \"string\",\n          default: editor.hasPlugin(\"rtc\") ? \"plugin\" : \"dom\"\n        });\n        registerOption(\"model_url\", { processor: \"string\" });\n        registerOption(\"block_unsupported_drop\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"visual\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"visual_table_class\", {\n          processor: \"string\",\n          default: \"mce-item-table\"\n        });\n        registerOption(\"visual_anchor_class\", {\n          processor: \"string\",\n          default: \"mce-item-anchor\"\n        });\n        registerOption(\"iframe_aria_text\", {\n          processor: \"string\",\n          default: \"Rich Text Area. Press ALT-0 for help.\"\n        });\n        registerOption(\"setup\", { processor: \"function\" });\n        registerOption(\"init_instance_callback\", { processor: \"function\" });\n        registerOption(\"url_converter\", {\n          processor: \"function\",\n          default: editor.convertURL\n        });\n        registerOption(\"url_converter_scope\", {\n          processor: \"object\",\n          default: editor\n        });\n        registerOption(\"urlconverter_callback\", { processor: \"function\" });\n        registerOption(\"allow_conditional_comments\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"allow_html_data_urls\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"allow_svg_data_urls\", { processor: \"boolean\" });\n        registerOption(\"allow_html_in_named_anchor\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"allow_script_urls\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"allow_unsafe_link_target\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"convert_fonts_to_spans\", {\n          processor: \"boolean\",\n          default: true,\n          deprecated: true\n        });\n        registerOption(\"fix_list_elements\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"preserve_cdata\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"remove_trailing_brs\", { processor: \"boolean\" });\n        registerOption(\"inline_styles\", {\n          processor: \"boolean\",\n          default: true,\n          deprecated: true\n        });\n        registerOption(\"element_format\", {\n          processor: \"string\",\n          default: \"html\"\n        });\n        registerOption(\"entities\", { processor: \"string\" });\n        registerOption(\"schema\", {\n          processor: \"string\",\n          default: \"html5\"\n        });\n        registerOption(\"convert_urls\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"relative_urls\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"remove_script_host\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"custom_elements\", { processor: \"string\" });\n        registerOption(\"extended_valid_elements\", { processor: \"string\" });\n        registerOption(\"invalid_elements\", { processor: \"string\" });\n        registerOption(\"invalid_styles\", { processor: stringOrObjectProcessor });\n        registerOption(\"valid_children\", { processor: \"string\" });\n        registerOption(\"valid_classes\", { processor: stringOrObjectProcessor });\n        registerOption(\"valid_elements\", { processor: \"string\" });\n        registerOption(\"valid_styles\", { processor: stringOrObjectProcessor });\n        registerOption(\"verify_html\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"auto_focus\", { processor: (value2) => isString2(value2) || value2 === true });\n        registerOption(\"browser_spellcheck\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"protect\", { processor: \"array\" });\n        registerOption(\"images_file_types\", {\n          processor: \"string\",\n          default: \"jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp\"\n        });\n        registerOption(\"deprecation_warnings\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"a11y_advanced_options\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"api_key\", { processor: \"string\" });\n        registerOption(\"paste_block_drop\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"paste_data_images\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"paste_preprocess\", { processor: \"function\" });\n        registerOption(\"paste_postprocess\", { processor: \"function\" });\n        registerOption(\"paste_webkit_styles\", {\n          processor: \"string\",\n          default: \"none\"\n        });\n        registerOption(\"paste_remove_styles_if_webkit\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"paste_merge_formats\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"smart_paste\", {\n          processor: \"boolean\",\n          default: true\n        });\n        registerOption(\"paste_as_text\", {\n          processor: \"boolean\",\n          default: false\n        });\n        registerOption(\"paste_tab_spaces\", {\n          processor: \"number\",\n          default: 4\n        });\n        registerOption(\"text_patterns\", {\n          processor: (value2) => {\n            if (isArrayOf(value2, isObject2) || value2 === false) {\n              const patterns = value2 === false ? [] : value2;\n              return {\n                value: fromRawPatterns(patterns),\n                valid: true\n              };\n            } else {\n              return {\n                valid: false,\n                message: \"Must be an array of objects or false.\"\n              };\n            }\n          },\n          default: [\n            {\n              start: \"*\",\n              end: \"*\",\n              format: \"italic\"\n            },\n            {\n              start: \"**\",\n              end: \"**\",\n              format: \"bold\"\n            },\n            {\n              start: \"#\",\n              format: \"h1\"\n            },\n            {\n              start: \"##\",\n              format: \"h2\"\n            },\n            {\n              start: \"###\",\n              format: \"h3\"\n            },\n            {\n              start: \"####\",\n              format: \"h4\"\n            },\n            {\n              start: \"#####\",\n              format: \"h5\"\n            },\n            {\n              start: \"######\",\n              format: \"h6\"\n            },\n            {\n              start: \"1. \",\n              cmd: \"InsertOrderedList\"\n            },\n            {\n              start: \"* \",\n              cmd: \"InsertUnorderedList\"\n            },\n            {\n              start: \"- \",\n              cmd: \"InsertUnorderedList\"\n            }\n          ]\n        });\n        registerOption(\"noneditable_class\", {\n          processor: \"string\",\n          default: \"mceNonEditable\"\n        });\n        registerOption(\"editable_class\", {\n          processor: \"string\",\n          default: \"mceEditable\"\n        });\n        registerOption(\"noneditable_regexp\", {\n          processor: (value2) => {\n            if (isArrayOf(value2, isRegExp2)) {\n              return {\n                value: value2,\n                valid: true\n              };\n            } else if (isRegExp2(value2)) {\n              return {\n                value: [value2],\n                valid: true\n              };\n            } else {\n              return {\n                valid: false,\n                message: \"Must be a RegExp or an array of RegExp.\"\n              };\n            }\n          },\n          default: []\n        });\n        registerOption(\"table_tab_navigation\", {\n          processor: \"boolean\",\n          default: true\n        });\n        editor.on(\"ScriptsLoaded\", () => {\n          registerOption(\"directionality\", {\n            processor: \"string\",\n            default: I18n.isRtl() ? \"rtl\" : void 0\n          });\n          registerOption(\"placeholder\", {\n            processor: \"string\",\n            default: DOM$a.getAttrib(editor.getElement(), \"placeholder\")\n          });\n        });\n      };\n      const getIframeAttrs = option(\"iframe_attrs\");\n      const getDocType = option(\"doctype\");\n      const getDocumentBaseUrl = option(\"document_base_url\");\n      const getBodyId = option(\"body_id\");\n      const getBodyClass = option(\"body_class\");\n      const getContentSecurityPolicy = option(\"content_security_policy\");\n      const shouldPutBrInPre$1 = option(\"br_in_pre\");\n      const getForcedRootBlock = option(\"forced_root_block\");\n      const getForcedRootBlockAttrs = option(\"forced_root_block_attrs\");\n      const getBrNewLineSelector = option(\"br_newline_selector\");\n      const getNoNewLineSelector = option(\"no_newline_selector\");\n      const shouldKeepStyles = option(\"keep_styles\");\n      const shouldEndContainerOnEmptyBlock = option(\"end_container_on_empty_block\");\n      const isAutomaticUploadsEnabled = option(\"automatic_uploads\");\n      const shouldReuseFileName = option(\"images_reuse_filename\");\n      const shouldReplaceBlobUris = option(\"images_replace_blob_uris\");\n      const getIconPackName = option(\"icons\");\n      const getIconsUrl = option(\"icons_url\");\n      const getImageUploadUrl = option(\"images_upload_url\");\n      const getImageUploadBasePath = option(\"images_upload_base_path\");\n      const getImagesUploadCredentials = option(\"images_upload_credentials\");\n      const getImagesUploadHandler = option(\"images_upload_handler\");\n      const shouldUseContentCssCors = option(\"content_css_cors\");\n      const getReferrerPolicy = option(\"referrer_policy\");\n      const getLanguageCode = option(\"language\");\n      const getLanguageUrl = option(\"language_url\");\n      const shouldIndentUseMargin = option(\"indent_use_margin\");\n      const getIndentation = option(\"indentation\");\n      const getContentCss = option(\"content_css\");\n      const getContentStyle = option(\"content_style\");\n      const getFontCss = option(\"font_css\");\n      const getDirectionality = option(\"directionality\");\n      const getInlineBoundarySelector = option(\"inline_boundaries_selector\");\n      const getObjectResizing = option(\"object_resizing\");\n      const getResizeImgProportional = option(\"resize_img_proportional\");\n      const getPlaceholder = option(\"placeholder\");\n      const getEventRoot = option(\"event_root\");\n      const getServiceMessage = option(\"service_message\");\n      const getTheme = option(\"theme\");\n      const getThemeUrl = option(\"theme_url\");\n      const getModel = option(\"model\");\n      const getModelUrl = option(\"model_url\");\n      const isInlineBoundariesEnabled = option(\"inline_boundaries\");\n      const getFormats = option(\"formats\");\n      const getPreviewStyles = option(\"preview_styles\");\n      const canFormatEmptyLines = option(\"format_empty_lines\");\n      const getCustomUiSelector = option(\"custom_ui_selector\");\n      const isInline = option(\"inline\");\n      const hasHiddenInput = option(\"hidden_input\");\n      const shouldPatchSubmit = option(\"submit_patch\");\n      const shouldAddFormSubmitTrigger = option(\"add_form_submit_trigger\");\n      const shouldAddUnloadTrigger = option(\"add_unload_trigger\");\n      const getCustomUndoRedoLevels = option(\"custom_undo_redo_levels\");\n      const shouldDisableNodeChange = option(\"disable_nodechange\");\n      const isReadOnly$1 = option(\"readonly\");\n      const hasContentCssCors = option(\"content_css_cors\");\n      const getPlugins = option(\"plugins\");\n      const getExternalPlugins$1 = option(\"external_plugins\");\n      const shouldBlockUnsupportedDrop = option(\"block_unsupported_drop\");\n      const isVisualAidsEnabled = option(\"visual\");\n      const getVisualAidsTableClass = option(\"visual_table_class\");\n      const getVisualAidsAnchorClass = option(\"visual_anchor_class\");\n      const getIframeAriaText = option(\"iframe_aria_text\");\n      const getSetupCallback = option(\"setup\");\n      const getInitInstanceCallback = option(\"init_instance_callback\");\n      const getUrlConverterCallback = option(\"urlconverter_callback\");\n      const getAutoFocus = option(\"auto_focus\");\n      const shouldBrowserSpellcheck = option(\"browser_spellcheck\");\n      const getProtect = option(\"protect\");\n      const shouldPasteBlockDrop = option(\"paste_block_drop\");\n      const shouldPasteDataImages = option(\"paste_data_images\");\n      const getPastePreProcess = option(\"paste_preprocess\");\n      const getPastePostProcess = option(\"paste_postprocess\");\n      const getPasteWebkitStyles = option(\"paste_webkit_styles\");\n      const shouldPasteRemoveWebKitStyles = option(\"paste_remove_styles_if_webkit\");\n      const shouldPasteMergeFormats = option(\"paste_merge_formats\");\n      const isSmartPasteEnabled = option(\"smart_paste\");\n      const isPasteAsTextEnabled = option(\"paste_as_text\");\n      const getPasteTabSpaces = option(\"paste_tab_spaces\");\n      const shouldAllowHtmlDataUrls = option(\"allow_html_data_urls\");\n      const getTextPatterns = option(\"text_patterns\");\n      const getNonEditableClass = option(\"noneditable_class\");\n      const getEditableClass = option(\"editable_class\");\n      const getNonEditableRegExps = option(\"noneditable_regexp\");\n      const getFontStyleValues = (editor) => Tools.explode(editor.options.get(\"font_size_style_values\"));\n      const getFontSizeClasses = (editor) => Tools.explode(editor.options.get(\"font_size_classes\"));\n      const isEncodingXml = (editor) => editor.options.get(\"encoding\") === \"xml\";\n      const getAllowedImageFileTypes = (editor) => Tools.explode(editor.options.get(\"images_file_types\"));\n      const hasTableTabNavigation = option(\"table_tab_navigation\");\n      const isElement$3 = isElement$6;\n      const isText$3 = isText$8;\n      const removeNode$1 = (node) => {\n        const parentNode = node.parentNode;\n        if (parentNode) {\n          parentNode.removeChild(node);\n        }\n      };\n      const trimCount = (text3) => {\n        const trimmedText = trim$1(text3);\n        return {\n          count: text3.length - trimmedText.length,\n          text: trimmedText\n        };\n      };\n      const deleteZwspChars = (caretContainer) => {\n        let idx;\n        while ((idx = caretContainer.data.lastIndexOf(ZWSP$1)) !== -1) {\n          caretContainer.deleteData(idx, 1);\n        }\n      };\n      const removeUnchanged = (caretContainer, pos) => {\n        remove$4(caretContainer);\n        return pos;\n      };\n      const removeTextAndReposition = (caretContainer, pos) => {\n        const before2 = trimCount(caretContainer.data.substr(0, pos.offset()));\n        const after2 = trimCount(caretContainer.data.substr(pos.offset()));\n        const text3 = before2.text + after2.text;\n        if (text3.length > 0) {\n          deleteZwspChars(caretContainer);\n          return CaretPosition(caretContainer, pos.offset() - before2.count);\n        } else {\n          return pos;\n        }\n      };\n      const removeElementAndReposition = (caretContainer, pos) => {\n        const parentNode = pos.container();\n        const newPosition = indexOf$1(from(parentNode.childNodes), caretContainer).map((index2) => {\n          return index2 < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos;\n        }).getOr(pos);\n        remove$4(caretContainer);\n        return newPosition;\n      };\n      const removeTextCaretContainer = (caretContainer, pos) => isText$3(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n      const removeElementCaretContainer = (caretContainer, pos) => pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n      const removeAndReposition = (container, pos) => CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n      const remove$4 = (caretContainerNode) => {\n        if (isElement$3(caretContainerNode) && isCaretContainer$2(caretContainerNode)) {\n          if (hasContent(caretContainerNode)) {\n            caretContainerNode.removeAttribute(\"data-mce-caret\");\n          } else {\n            removeNode$1(caretContainerNode);\n          }\n        }\n        if (isText$3(caretContainerNode)) {\n          deleteZwspChars(caretContainerNode);\n          if (caretContainerNode.data.length === 0) {\n            removeNode$1(caretContainerNode);\n          }\n        }\n      };\n      const isContentEditableFalse$7 = isContentEditableFalse$a;\n      const isMedia$1 = isMedia$2;\n      const isTableCell$3 = isTableCell$5;\n      const inlineFakeCaretSelector = \"*[contentEditable=false],video,audio,embed,object\";\n      const getAbsoluteClientRect = (root2, element, before2) => {\n        const clientRect = collapse(element.getBoundingClientRect(), before2);\n        let scrollX;\n        let scrollY;\n        if (root2.tagName === \"BODY\") {\n          const docElm = root2.ownerDocument.documentElement;\n          scrollX = root2.scrollLeft || docElm.scrollLeft;\n          scrollY = root2.scrollTop || docElm.scrollTop;\n        } else {\n          const rootRect = root2.getBoundingClientRect();\n          scrollX = root2.scrollLeft - rootRect.left;\n          scrollY = root2.scrollTop - rootRect.top;\n        }\n        clientRect.left += scrollX;\n        clientRect.right += scrollX;\n        clientRect.top += scrollY;\n        clientRect.bottom += scrollY;\n        clientRect.width = 1;\n        let margin = element.offsetWidth - element.clientWidth;\n        if (margin > 0) {\n          if (before2) {\n            margin *= -1;\n          }\n          clientRect.left += margin;\n          clientRect.right += margin;\n        }\n        return clientRect;\n      };\n      const trimInlineCaretContainers = (root2) => {\n        const fakeCaretTargetNodes = descendants(SugarElement.fromDom(root2), inlineFakeCaretSelector);\n        for (let i3 = 0; i3 < fakeCaretTargetNodes.length; i3++) {\n          const node = fakeCaretTargetNodes[i3].dom;\n          let sibling2 = node.previousSibling;\n          if (endsWithCaretContainer$1(sibling2)) {\n            const data2 = sibling2.data;\n            if (data2.length === 1) {\n              sibling2.parentNode.removeChild(sibling2);\n            } else {\n              sibling2.deleteData(data2.length - 1, 1);\n            }\n          }\n          sibling2 = node.nextSibling;\n          if (startsWithCaretContainer$1(sibling2)) {\n            const data2 = sibling2.data;\n            if (data2.length === 1) {\n              sibling2.parentNode.removeChild(sibling2);\n            } else {\n              sibling2.deleteData(0, 1);\n            }\n          }\n        }\n      };\n      const FakeCaret = (editor, root2, isBlock2, hasFocus2) => {\n        const lastVisualCaret = value$2();\n        let cursorInterval;\n        let caretContainerNode;\n        const caretBlock = getForcedRootBlock(editor);\n        const dom3 = editor.dom;\n        const show = (before2, element) => {\n          let rng;\n          hide();\n          if (isTableCell$3(element)) {\n            return null;\n          }\n          if (isBlock2(element)) {\n            caretContainerNode = insertBlock(caretBlock, element, before2);\n            const clientRect = getAbsoluteClientRect(root2, element, before2);\n            dom3.setStyle(caretContainerNode, \"top\", clientRect.top);\n            const caret = dom3.create(\"div\", {\n              \"class\": \"mce-visual-caret\",\n              \"data-mce-bogus\": \"all\"\n            });\n            dom3.setStyles(caret, { ...clientRect });\n            dom3.add(root2, caret);\n            lastVisualCaret.set({\n              caret,\n              element,\n              before: before2\n            });\n            if (before2) {\n              dom3.addClass(caret, \"mce-visual-caret-before\");\n            }\n            startBlink();\n            rng = element.ownerDocument.createRange();\n            rng.setStart(caretContainerNode, 0);\n            rng.setEnd(caretContainerNode, 0);\n          } else {\n            caretContainerNode = insertInline$1(element, before2);\n            rng = element.ownerDocument.createRange();\n            if (isInlineFakeCaretTarget(caretContainerNode.nextSibling)) {\n              rng.setStart(caretContainerNode, 0);\n              rng.setEnd(caretContainerNode, 0);\n            } else {\n              rng.setStart(caretContainerNode, 1);\n              rng.setEnd(caretContainerNode, 1);\n            }\n            return rng;\n          }\n          return rng;\n        };\n        const hide = () => {\n          trimInlineCaretContainers(root2);\n          if (caretContainerNode) {\n            remove$4(caretContainerNode);\n            caretContainerNode = null;\n          }\n          lastVisualCaret.on((caretState) => {\n            dom3.remove(caretState.caret);\n            lastVisualCaret.clear();\n          });\n          if (cursorInterval) {\n            clearInterval(cursorInterval);\n            cursorInterval = void 0;\n          }\n        };\n        const startBlink = () => {\n          cursorInterval = setInterval(() => {\n            lastVisualCaret.on((caretState) => {\n              if (hasFocus2()) {\n                dom3.toggleClass(caretState.caret, \"mce-visual-caret-hidden\");\n              } else {\n                dom3.addClass(caretState.caret, \"mce-visual-caret-hidden\");\n              }\n            });\n          }, 500);\n        };\n        const reposition2 = () => {\n          lastVisualCaret.on((caretState) => {\n            const clientRect = getAbsoluteClientRect(root2, caretState.element, caretState.before);\n            dom3.setStyles(caretState.caret, { ...clientRect });\n          });\n        };\n        const destroy2 = () => clearInterval(cursorInterval);\n        const getCss = () => \".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}\";\n        return {\n          show,\n          hide,\n          getCss,\n          reposition: reposition2,\n          destroy: destroy2\n        };\n      };\n      const isFakeCaretTableBrowser = () => Env.browser.isFirefox();\n      const isInlineFakeCaretTarget = (node) => isContentEditableFalse$7(node) || isMedia$1(node);\n      const isFakeCaretTarget = (node) => isInlineFakeCaretTarget(node) || isTable$3(node) && isFakeCaretTableBrowser();\n      const isContentEditableTrue$2 = isContentEditableTrue$4;\n      const isContentEditableFalse$6 = isContentEditableFalse$a;\n      const isMedia = isMedia$2;\n      const isBlockLike = matchStyleValues(\"display\", \"block table table-cell table-caption list-item\");\n      const isCaretContainer = isCaretContainer$2;\n      const isCaretContainerBlock = isCaretContainerBlock$1;\n      const isElement$2 = isElement$6;\n      const isCaretCandidate$1 = isCaretCandidate$3;\n      const isForwards = (direction) => direction > 0;\n      const isBackwards = (direction) => direction < 0;\n      const skipCaretContainers = (walk2, shallow2) => {\n        let node;\n        while (node = walk2(shallow2)) {\n          if (!isCaretContainerBlock(node)) {\n            return node;\n          }\n        }\n        return null;\n      };\n      const findNode = (node, direction, predicateFn, rootNode, shallow2) => {\n        const walker = new DomTreeWalker(node, rootNode);\n        const isCefOrCaretContainer = isContentEditableFalse$6(node) || isCaretContainerBlock(node);\n        if (isBackwards(direction)) {\n          if (isCefOrCaretContainer) {\n            node = skipCaretContainers(walker.prev.bind(walker), true);\n            if (predicateFn(node)) {\n              return node;\n            }\n          }\n          while (node = skipCaretContainers(walker.prev.bind(walker), shallow2)) {\n            if (predicateFn(node)) {\n              return node;\n            }\n          }\n        }\n        if (isForwards(direction)) {\n          if (isCefOrCaretContainer) {\n            node = skipCaretContainers(walker.next.bind(walker), true);\n            if (predicateFn(node)) {\n              return node;\n            }\n          }\n          while (node = skipCaretContainers(walker.next.bind(walker), shallow2)) {\n            if (predicateFn(node)) {\n              return node;\n            }\n          }\n        }\n        return null;\n      };\n      const getEditingHost = (node, rootNode) => {\n        const isCETrue = (node2) => isContentEditableTrue$2(node2.dom);\n        const isRoot = (node2) => node2.dom === rootNode;\n        return ancestor$3(SugarElement.fromDom(node), isCETrue, isRoot).map((elm) => elm.dom).getOr(rootNode);\n      };\n      const getParentBlock$3 = (node, rootNode) => {\n        while (node && node !== rootNode) {\n          if (isBlockLike(node)) {\n            return node;\n          }\n          node = node.parentNode;\n        }\n        return null;\n      };\n      const isInSameBlock = (caretPosition1, caretPosition2, rootNode) => getParentBlock$3(caretPosition1.container(), rootNode) === getParentBlock$3(caretPosition2.container(), rootNode);\n      const getChildNodeAtRelativeOffset = (relativeOffset, caretPosition) => {\n        if (!caretPosition) {\n          return null;\n        }\n        const container = caretPosition.container();\n        const offset = caretPosition.offset();\n        if (!isElement$2(container)) {\n          return null;\n        }\n        return container.childNodes[offset + relativeOffset];\n      };\n      const beforeAfter = (before2, node) => {\n        const range2 = node.ownerDocument.createRange();\n        if (before2) {\n          range2.setStartBefore(node);\n          range2.setEndBefore(node);\n        } else {\n          range2.setStartAfter(node);\n          range2.setEndAfter(node);\n        }\n        return range2;\n      };\n      const isNodesInSameBlock = (root2, node1, node2) => getParentBlock$3(node1, root2) === getParentBlock$3(node2, root2);\n      const lean = (left, root2, node) => {\n        const siblingName = left ? \"previousSibling\" : \"nextSibling\";\n        while (node && node !== root2) {\n          let sibling2 = node[siblingName];\n          if (isCaretContainer(sibling2)) {\n            sibling2 = sibling2[siblingName];\n          }\n          if (isContentEditableFalse$6(sibling2) || isMedia(sibling2)) {\n            if (isNodesInSameBlock(root2, sibling2, node)) {\n              return sibling2;\n            }\n            break;\n          }\n          if (isCaretCandidate$1(sibling2)) {\n            break;\n          }\n          node = node.parentNode;\n        }\n        return null;\n      };\n      const before$2 = curry(beforeAfter, true);\n      const after$2 = curry(beforeAfter, false);\n      const normalizeRange = (direction, root2, range2) => {\n        let node;\n        const leanLeft = curry(lean, true, root2);\n        const leanRight2 = curry(lean, false, root2);\n        let container = range2.startContainer;\n        const offset = range2.startOffset;\n        if (isCaretContainerBlock$1(container)) {\n          if (!isElement$2(container)) {\n            container = container.parentNode;\n          }\n          const location2 = container.getAttribute(\"data-mce-caret\");\n          if (location2 === \"before\") {\n            node = container.nextSibling;\n            if (isFakeCaretTarget(node)) {\n              return before$2(node);\n            }\n          }\n          if (location2 === \"after\") {\n            node = container.previousSibling;\n            if (isFakeCaretTarget(node)) {\n              return after$2(node);\n            }\n          }\n        }\n        if (!range2.collapsed) {\n          return range2;\n        }\n        if (isText$8(container)) {\n          if (isCaretContainer(container)) {\n            if (direction === 1) {\n              node = leanRight2(container);\n              if (node) {\n                return before$2(node);\n              }\n              node = leanLeft(container);\n              if (node) {\n                return after$2(node);\n              }\n            }\n            if (direction === -1) {\n              node = leanLeft(container);\n              if (node) {\n                return after$2(node);\n              }\n              node = leanRight2(container);\n              if (node) {\n                return before$2(node);\n              }\n            }\n            return range2;\n          }\n          if (endsWithCaretContainer$1(container) && offset >= container.data.length - 1) {\n            if (direction === 1) {\n              node = leanRight2(container);\n              if (node) {\n                return before$2(node);\n              }\n            }\n            return range2;\n          }\n          if (startsWithCaretContainer$1(container) && offset <= 1) {\n            if (direction === -1) {\n              node = leanLeft(container);\n              if (node) {\n                return after$2(node);\n              }\n            }\n            return range2;\n          }\n          if (offset === container.data.length) {\n            node = leanRight2(container);\n            if (node) {\n              return before$2(node);\n            }\n            return range2;\n          }\n          if (offset === 0) {\n            node = leanLeft(container);\n            if (node) {\n              return after$2(node);\n            }\n            return range2;\n          }\n        }\n        return range2;\n      };\n      const getRelativeCefElm = (forward, caretPosition) => Optional.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$6);\n      const getNormalizedRangeEndPoint = (direction, root2, range2) => {\n        const normalizedRange = normalizeRange(direction, root2, range2);\n        if (direction === -1) {\n          return CaretPosition.fromRangeStart(normalizedRange);\n        }\n        return CaretPosition.fromRangeEnd(normalizedRange);\n      };\n      const getElementFromPosition = (pos) => Optional.from(pos.getNode()).map(SugarElement.fromDom);\n      const getElementFromPrevPosition = (pos) => Optional.from(pos.getNode(true)).map(SugarElement.fromDom);\n      const getVisualCaretPosition = (walkFn, caretPosition) => {\n        while (caretPosition = walkFn(caretPosition)) {\n          if (caretPosition.isVisible()) {\n            return caretPosition;\n          }\n        }\n        return caretPosition;\n      };\n      const isMoveInsideSameBlock = (from2, to2) => {\n        const inSameBlock = isInSameBlock(from2, to2);\n        if (!inSameBlock && isBr$5(from2.getNode())) {\n          return true;\n        }\n        return inSameBlock;\n      };\n      var HDirection;\n      (function(HDirection2) {\n        HDirection2[HDirection2[\"Backwards\"] = -1] = \"Backwards\";\n        HDirection2[HDirection2[\"Forwards\"] = 1] = \"Forwards\";\n      })(HDirection || (HDirection = {}));\n      const isContentEditableFalse$5 = isContentEditableFalse$a;\n      const isText$2 = isText$8;\n      const isElement$1 = isElement$6;\n      const isBr$1 = isBr$5;\n      const isCaretCandidate = isCaretCandidate$3;\n      const isAtomic = isAtomic$1;\n      const isEditableCaretCandidate = isEditableCaretCandidate$1;\n      const getParents$3 = (node, root2) => {\n        const parents2 = [];\n        while (node && node !== root2) {\n          parents2.push(node);\n          node = node.parentNode;\n        }\n        return parents2;\n      };\n      const nodeAtIndex = (container, offset) => {\n        if (container.hasChildNodes() && offset < container.childNodes.length) {\n          return container.childNodes[offset];\n        }\n        return null;\n      };\n      const getCaretCandidatePosition = (direction, node) => {\n        if (isForwards(direction)) {\n          if (isCaretCandidate(node.previousSibling) && !isText$2(node.previousSibling)) {\n            return CaretPosition.before(node);\n          }\n          if (isText$2(node)) {\n            return CaretPosition(node, 0);\n          }\n        }\n        if (isBackwards(direction)) {\n          if (isCaretCandidate(node.nextSibling) && !isText$2(node.nextSibling)) {\n            return CaretPosition.after(node);\n          }\n          if (isText$2(node)) {\n            return CaretPosition(node, node.data.length);\n          }\n        }\n        if (isBackwards(direction)) {\n          if (isBr$1(node)) {\n            return CaretPosition.before(node);\n          }\n          return CaretPosition.after(node);\n        }\n        return CaretPosition.before(node);\n      };\n      const moveForwardFromBr = (root2, nextNode) => {\n        const nextSibling2 = nextNode.nextSibling;\n        if (nextSibling2 && isCaretCandidate(nextSibling2)) {\n          if (isText$2(nextSibling2)) {\n            return CaretPosition(nextSibling2, 0);\n          } else {\n            return CaretPosition.before(nextSibling2);\n          }\n        } else {\n          return findCaretPosition$1(HDirection.Forwards, CaretPosition.after(nextNode), root2);\n        }\n      };\n      const findCaretPosition$1 = (direction, startPos, root2) => {\n        let node;\n        let nextNode;\n        let innerNode;\n        let caretPosition;\n        if (!isElement$1(root2) || !startPos) {\n          return null;\n        }\n        if (startPos.isEqual(CaretPosition.after(root2)) && root2.lastChild) {\n          caretPosition = CaretPosition.after(root2.lastChild);\n          if (isBackwards(direction) && isCaretCandidate(root2.lastChild) && isElement$1(root2.lastChild)) {\n            return isBr$1(root2.lastChild) ? CaretPosition.before(root2.lastChild) : caretPosition;\n          }\n        } else {\n          caretPosition = startPos;\n        }\n        const container = caretPosition.container();\n        let offset = caretPosition.offset();\n        if (isText$2(container)) {\n          if (isBackwards(direction) && offset > 0) {\n            return CaretPosition(container, --offset);\n          }\n          if (isForwards(direction) && offset < container.length) {\n            return CaretPosition(container, ++offset);\n          }\n          node = container;\n        } else {\n          if (isBackwards(direction) && offset > 0) {\n            nextNode = nodeAtIndex(container, offset - 1);\n            if (isCaretCandidate(nextNode)) {\n              if (!isAtomic(nextNode)) {\n                innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n                if (innerNode) {\n                  if (isText$2(innerNode)) {\n                    return CaretPosition(innerNode, innerNode.data.length);\n                  }\n                  return CaretPosition.after(innerNode);\n                }\n              }\n              if (isText$2(nextNode)) {\n                return CaretPosition(nextNode, nextNode.data.length);\n              }\n              return CaretPosition.before(nextNode);\n            }\n          }\n          if (isForwards(direction) && offset < container.childNodes.length) {\n            nextNode = nodeAtIndex(container, offset);\n            if (isCaretCandidate(nextNode)) {\n              if (isBr$1(nextNode)) {\n                return moveForwardFromBr(root2, nextNode);\n              }\n              if (!isAtomic(nextNode)) {\n                innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n                if (innerNode) {\n                  if (isText$2(innerNode)) {\n                    return CaretPosition(innerNode, 0);\n                  }\n                  return CaretPosition.before(innerNode);\n                }\n              }\n              if (isText$2(nextNode)) {\n                return CaretPosition(nextNode, 0);\n              }\n              return CaretPosition.after(nextNode);\n            }\n          }\n          node = nextNode ? nextNode : caretPosition.getNode();\n        }\n        if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {\n          node = findNode(node, direction, always, root2, true);\n          if (isEditableCaretCandidate(node, root2)) {\n            return getCaretCandidatePosition(direction, node);\n          }\n        }\n        nextNode = findNode(node, direction, isEditableCaretCandidate, root2);\n        const rootContentEditableFalseElm = last$2(filter$6(getParents$3(container, root2), isContentEditableFalse$5));\n        if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n          if (isForwards(direction)) {\n            caretPosition = CaretPosition.after(rootContentEditableFalseElm);\n          } else {\n            caretPosition = CaretPosition.before(rootContentEditableFalseElm);\n          }\n          return caretPosition;\n        }\n        if (nextNode) {\n          return getCaretCandidatePosition(direction, nextNode);\n        }\n        return null;\n      };\n      const CaretWalker = (root2) => ({\n        next: (caretPosition) => {\n          return findCaretPosition$1(HDirection.Forwards, caretPosition, root2);\n        },\n        prev: (caretPosition) => {\n          return findCaretPosition$1(HDirection.Backwards, caretPosition, root2);\n        }\n      });\n      const walkToPositionIn = (forward, root2, start2) => {\n        const position = forward ? CaretPosition.before(start2) : CaretPosition.after(start2);\n        return fromPosition(forward, root2, position);\n      };\n      const afterElement = (node) => isBr$5(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n      const isBeforeOrStart = (position) => {\n        if (CaretPosition.isTextPosition(position)) {\n          return position.offset() === 0;\n        } else {\n          return isCaretCandidate$3(position.getNode());\n        }\n      };\n      const isAfterOrEnd = (position) => {\n        if (CaretPosition.isTextPosition(position)) {\n          const container = position.container();\n          return position.offset() === container.data.length;\n        } else {\n          return isCaretCandidate$3(position.getNode(true));\n        }\n      };\n      const isBeforeAfterSameElement = (from2, to2) => !CaretPosition.isTextPosition(from2) && !CaretPosition.isTextPosition(to2) && from2.getNode() === to2.getNode(true);\n      const isAtBr = (position) => !CaretPosition.isTextPosition(position) && isBr$5(position.getNode());\n      const shouldSkipPosition = (forward, from2, to2) => {\n        if (forward) {\n          return !isBeforeAfterSameElement(from2, to2) && !isAtBr(from2) && isAfterOrEnd(from2) && isBeforeOrStart(to2);\n        } else {\n          return !isBeforeAfterSameElement(to2, from2) && isBeforeOrStart(from2) && isAfterOrEnd(to2);\n        }\n      };\n      const fromPosition = (forward, root2, pos) => {\n        const walker = CaretWalker(root2);\n        return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n      };\n      const navigate = (forward, root2, from2) => fromPosition(forward, root2, from2).bind((to2) => {\n        if (isInSameBlock(from2, to2, root2) && shouldSkipPosition(forward, from2, to2)) {\n          return fromPosition(forward, root2, to2);\n        } else {\n          return Optional.some(to2);\n        }\n      });\n      const navigateIgnore = (forward, root2, from2, ignoreFilter) => navigate(forward, root2, from2).bind((pos) => ignoreFilter(pos) ? navigateIgnore(forward, root2, pos, ignoreFilter) : Optional.some(pos));\n      const positionIn = (forward, element) => {\n        const startNode = forward ? element.firstChild : element.lastChild;\n        if (isText$8(startNode)) {\n          return Optional.some(CaretPosition(startNode, forward ? 0 : startNode.data.length));\n        } else if (startNode) {\n          if (isCaretCandidate$3(startNode)) {\n            return Optional.some(forward ? CaretPosition.before(startNode) : afterElement(startNode));\n          } else {\n            return walkToPositionIn(forward, element, startNode);\n          }\n        } else {\n          return Optional.none();\n        }\n      };\n      const nextPosition = curry(fromPosition, true);\n      const prevPosition = curry(fromPosition, false);\n      const firstPositionIn = curry(positionIn, true);\n      const lastPositionIn = curry(positionIn, false);\n      const CARET_ID$1 = \"_mce_caret\";\n      const isCaretNode = (node) => isElement$6(node) && node.id === CARET_ID$1;\n      const getParentCaretContainer = (body, node) => {\n        while (node && node !== body) {\n          if (node.id === CARET_ID$1) {\n            return node;\n          }\n          node = node.parentNode;\n        }\n        return null;\n      };\n      const isStringPathBookmark = (bookmark) => isString2(bookmark.start);\n      const isRangeBookmark = (bookmark) => has$2(bookmark, \"rng\");\n      const isIdBookmark = (bookmark) => has$2(bookmark, \"id\");\n      const isIndexBookmark = (bookmark) => has$2(bookmark, \"name\");\n      const isPathBookmark = (bookmark) => Tools.isArray(bookmark.start);\n      const addBogus = (dom3, node) => {\n        if (isElement$6(node) && dom3.isBlock(node) && !node.innerHTML) {\n          node.innerHTML = '<br data-mce-bogus=\"1\" />';\n        }\n        return node;\n      };\n      const resolveCaretPositionBookmark = (dom3, bookmark) => {\n        let pos;\n        const rng = dom3.createRng();\n        pos = resolve$1(dom3.getRoot(), bookmark.start);\n        rng.setStart(pos.container(), pos.offset());\n        pos = resolve$1(dom3.getRoot(), bookmark.end);\n        rng.setEnd(pos.container(), pos.offset());\n        return rng;\n      };\n      const insertZwsp = (node, rng) => {\n        const textNode = node.ownerDocument.createTextNode(ZWSP$1);\n        node.appendChild(textNode);\n        rng.setStart(textNode, 0);\n        rng.setEnd(textNode, 0);\n      };\n      const isEmpty$1 = (node) => node.hasChildNodes() === false;\n      const tryFindRangePosition = (node, rng) => lastPositionIn(node).fold(never, (pos) => {\n        rng.setStart(pos.container(), pos.offset());\n        rng.setEnd(pos.container(), pos.offset());\n        return true;\n      });\n      const padEmptyCaretContainer = (root2, node, rng) => {\n        if (isEmpty$1(node) && getParentCaretContainer(root2, node)) {\n          insertZwsp(node, rng);\n          return true;\n        } else {\n          return false;\n        }\n      };\n      const setEndPoint = (dom3, start2, bookmark, rng) => {\n        const point2 = bookmark[start2 ? \"start\" : \"end\"];\n        let i3, node, offset, children2;\n        const root2 = dom3.getRoot();\n        if (point2) {\n          offset = point2[0];\n          for (node = root2, i3 = point2.length - 1; i3 >= 1; i3--) {\n            children2 = node.childNodes;\n            if (padEmptyCaretContainer(root2, node, rng)) {\n              return true;\n            }\n            if (point2[i3] > children2.length - 1) {\n              if (padEmptyCaretContainer(root2, node, rng)) {\n                return true;\n              }\n              return tryFindRangePosition(node, rng);\n            }\n            node = children2[point2[i3]];\n          }\n          if (node.nodeType === 3) {\n            offset = Math.min(point2[0], node.nodeValue.length);\n          }\n          if (node.nodeType === 1) {\n            offset = Math.min(point2[0], node.childNodes.length);\n          }\n          if (start2) {\n            rng.setStart(node, offset);\n          } else {\n            rng.setEnd(node, offset);\n          }\n        }\n        return true;\n      };\n      const isValidTextNode = (node) => isText$8(node) && node.data.length > 0;\n      const restoreEndPoint = (dom3, suffix, bookmark) => {\n        let marker = dom3.get(bookmark.id + \"_\" + suffix), node, idx, next2, prev2;\n        const keep = bookmark.keep;\n        let container, offset;\n        if (marker) {\n          node = marker.parentNode;\n          if (suffix === \"start\") {\n            if (!keep) {\n              idx = dom3.nodeIndex(marker);\n            } else {\n              if (marker.hasChildNodes()) {\n                node = marker.firstChild;\n                idx = 1;\n              } else if (isValidTextNode(marker.nextSibling)) {\n                node = marker.nextSibling;\n                idx = 0;\n              } else if (isValidTextNode(marker.previousSibling)) {\n                node = marker.previousSibling;\n                idx = marker.previousSibling.data.length;\n              } else {\n                node = marker.parentNode;\n                idx = dom3.nodeIndex(marker) + 1;\n              }\n            }\n            container = node;\n            offset = idx;\n          } else {\n            if (!keep) {\n              idx = dom3.nodeIndex(marker);\n            } else {\n              if (marker.hasChildNodes()) {\n                node = marker.firstChild;\n                idx = 1;\n              } else if (isValidTextNode(marker.previousSibling)) {\n                node = marker.previousSibling;\n                idx = marker.previousSibling.data.length;\n              } else {\n                node = marker.parentNode;\n                idx = dom3.nodeIndex(marker);\n              }\n            }\n            container = node;\n            offset = idx;\n          }\n          if (!keep) {\n            prev2 = marker.previousSibling;\n            next2 = marker.nextSibling;\n            Tools.each(Tools.grep(marker.childNodes), (node2) => {\n              if (isText$8(node2)) {\n                node2.nodeValue = node2.nodeValue.replace(/\\uFEFF/g, \"\");\n              }\n            });\n            while (marker = dom3.get(bookmark.id + \"_\" + suffix)) {\n              dom3.remove(marker, true);\n            }\n            if (prev2 && next2 && prev2.nodeType === next2.nodeType && isText$8(prev2) && !Env.browser.isOpera()) {\n              idx = prev2.nodeValue.length;\n              prev2.appendData(next2.nodeValue);\n              dom3.remove(next2);\n              container = prev2;\n              offset = idx;\n            }\n          }\n          return Optional.some(CaretPosition(container, offset));\n        } else {\n          return Optional.none();\n        }\n      };\n      const resolvePaths = (dom3, bookmark) => {\n        const rng = dom3.createRng();\n        if (setEndPoint(dom3, true, bookmark, rng) && setEndPoint(dom3, false, bookmark, rng)) {\n          return Optional.some(rng);\n        } else {\n          return Optional.none();\n        }\n      };\n      const resolveId = (dom3, bookmark) => {\n        const startPos = restoreEndPoint(dom3, \"start\", bookmark);\n        const endPos = restoreEndPoint(dom3, \"end\", bookmark);\n        return lift2(startPos, endPos.or(startPos), (spos, epos) => {\n          const rng = dom3.createRng();\n          rng.setStart(addBogus(dom3, spos.container()), spos.offset());\n          rng.setEnd(addBogus(dom3, epos.container()), epos.offset());\n          return rng;\n        });\n      };\n      const resolveIndex = (dom3, bookmark) => Optional.from(dom3.select(bookmark.name)[bookmark.index]).map((elm) => {\n        const rng = dom3.createRng();\n        rng.selectNode(elm);\n        return rng;\n      });\n      const resolve = (selection, bookmark) => {\n        const dom3 = selection.dom;\n        if (bookmark) {\n          if (isPathBookmark(bookmark)) {\n            return resolvePaths(dom3, bookmark);\n          } else if (isStringPathBookmark(bookmark)) {\n            return Optional.some(resolveCaretPositionBookmark(dom3, bookmark));\n          } else if (isIdBookmark(bookmark)) {\n            return resolveId(dom3, bookmark);\n          } else if (isIndexBookmark(bookmark)) {\n            return resolveIndex(dom3, bookmark);\n          } else if (isRangeBookmark(bookmark)) {\n            return Optional.some(bookmark.rng);\n          }\n        }\n        return Optional.none();\n      };\n      const getBookmark$1 = (selection, type2, normalized) => {\n        return getBookmark$2(selection, type2, normalized);\n      };\n      const moveToBookmark = (selection, bookmark) => {\n        resolve(selection, bookmark).each((rng) => {\n          selection.setRng(rng);\n        });\n      };\n      const isBookmarkNode$1 = (node) => {\n        return isElement$6(node) && node.tagName === \"SPAN\" && node.getAttribute(\"data-mce-type\") === \"bookmark\";\n      };\n      const is = (expected) => (actual) => expected === actual;\n      const isNbsp = is(nbsp);\n      const isWhiteSpace2 = (chr) => chr !== \"\" && \" \\f\\n\\r\t\\v\".indexOf(chr) !== -1;\n      const isContent = (chr) => !isWhiteSpace2(chr) && !isNbsp(chr) && !isZwsp$1(chr);\n      const hexColour = (value2) => ({ value: value2 });\n      const toHex = (component) => {\n        const hex = component.toString(16);\n        return (hex.length === 1 ? \"0\" + hex : hex).toUpperCase();\n      };\n      const fromRgba = (rgbaColour2) => {\n        const value2 = toHex(rgbaColour2.red) + toHex(rgbaColour2.green) + toHex(rgbaColour2.blue);\n        return hexColour(value2);\n      };\n      const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i;\n      const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i;\n      const rgbaColour = (red, green, blue, alpha) => ({\n        red,\n        green,\n        blue,\n        alpha\n      });\n      const fromStringValues = (red, green, blue, alpha) => {\n        const r4 = parseInt(red, 10);\n        const g2 = parseInt(green, 10);\n        const b2 = parseInt(blue, 10);\n        const a2 = parseFloat(alpha);\n        return rgbaColour(r4, g2, b2, a2);\n      };\n      const fromString = (rgbaString) => {\n        if (rgbaString === \"transparent\") {\n          return Optional.some(rgbaColour(0, 0, 0, 0));\n        }\n        const rgbMatch = rgbRegex.exec(rgbaString);\n        if (rgbMatch !== null) {\n          return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], \"1\"));\n        }\n        const rgbaMatch = rgbaRegex.exec(rgbaString);\n        if (rgbaMatch !== null) {\n          return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n        }\n        return Optional.none();\n      };\n      const rgbaToHexString = (color) => fromString(color).map(fromRgba).map((h2) => \"#\" + h2.value).getOr(color);\n      const isNode = (node) => !!node.nodeType;\n      const isInlineBlock = (node) => {\n        return node && /^(IMG)$/.test(node.nodeName);\n      };\n      const moveStart = (dom3, selection, rng) => {\n        const offset = rng.startOffset;\n        let container = rng.startContainer;\n        if (container === rng.endContainer) {\n          if (isInlineBlock(container.childNodes[offset])) {\n            return;\n          }\n        }\n        if (isElement$6(container)) {\n          const nodes = container.childNodes;\n          let walker;\n          if (offset < nodes.length) {\n            container = nodes[offset];\n            walker = new DomTreeWalker(container, dom3.getParent(container, dom3.isBlock));\n          } else {\n            container = nodes[nodes.length - 1];\n            walker = new DomTreeWalker(container, dom3.getParent(container, dom3.isBlock));\n            walker.next(true);\n          }\n          for (let node = walker.current(); node; node = walker.next()) {\n            if (isText$8(node) && !isWhiteSpaceNode$1(node)) {\n              rng.setStart(node, 0);\n              selection.setRng(rng);\n              return;\n            }\n          }\n        }\n      };\n      const getNonWhiteSpaceSibling = (node, next2, inc) => {\n        if (node) {\n          const nextName = next2 ? \"nextSibling\" : \"previousSibling\";\n          for (node = node[nextName]; node; node = node[nextName]) {\n            if (isElement$6(node) || !isWhiteSpaceNode$1(node)) {\n              return node;\n            }\n          }\n        }\n      };\n      const isTextBlock$1 = (editor, name2) => {\n        if (isNode(name2)) {\n          name2 = name2.nodeName;\n        }\n        return !!editor.schema.getTextBlockElements()[name2.toLowerCase()];\n      };\n      const isValid = (ed, parent2, child2) => {\n        return ed.schema.isValidChild(parent2, child2);\n      };\n      const isWhiteSpaceNode$1 = (node, allowSpaces = false) => {\n        if (isNonNullable(node) && isText$8(node)) {\n          const data2 = allowSpaces ? node.data.replace(/ /g, \" \") : node.data;\n          return isWhitespaceText(data2);\n        } else {\n          return false;\n        }\n      };\n      const isEmptyTextNode$1 = (node) => {\n        return isNonNullable(node) && isText$8(node) && node.length === 0;\n      };\n      const replaceVars = (value2, vars) => {\n        if (isFunction2(value2)) {\n          value2 = value2(vars);\n        } else if (isNonNullable(vars)) {\n          value2 = value2.replace(/%(\\w+)/g, (str, name2) => {\n            return vars[name2] || str;\n          });\n        }\n        return value2;\n      };\n      const isEq$5 = (str1, str2) => {\n        str1 = str1 || \"\";\n        str2 = str2 || \"\";\n        str1 = \"\" + (str1.nodeName || str1);\n        str2 = \"\" + (str2.nodeName || str2);\n        return str1.toLowerCase() === str2.toLowerCase();\n      };\n      const normalizeStyleValue = (value2, name2) => {\n        if (name2 === \"color\" || name2 === \"backgroundColor\") {\n          value2 = rgbaToHexString(value2);\n        }\n        if (name2 === \"fontWeight\" && value2 === 700) {\n          value2 = \"bold\";\n        }\n        if (name2 === \"fontFamily\") {\n          value2 = value2.replace(/[\\'\\\"]/g, \"\").replace(/,\\s+/g, \",\");\n        }\n        return \"\" + value2;\n      };\n      const getStyle = (dom3, node, name2) => {\n        return normalizeStyleValue(dom3.getStyle(node, name2), name2);\n      };\n      const getTextDecoration = (dom3, node) => {\n        let decoration;\n        dom3.getParent(node, (n3) => {\n          decoration = dom3.getStyle(n3, \"text-decoration\");\n          return decoration && decoration !== \"none\";\n        });\n        return decoration;\n      };\n      const getParents$2 = (dom3, node, selector) => {\n        return dom3.getParents(node, selector, dom3.getRoot());\n      };\n      const isVariableFormatName = (editor, formatName) => {\n        const hasVariableValues = (format2) => {\n          const isVariableValue = (val) => val.length > 1 && val.charAt(0) === \"%\";\n          return exists([\n            \"styles\",\n            \"attributes\"\n          ], (key) => get$a(format2, key).exists((field2) => {\n            const fieldValues = isArray$1(field2) ? field2 : values(field2);\n            return exists(fieldValues, isVariableValue);\n          }));\n        };\n        return exists(editor.formatter.get(formatName), hasVariableValues);\n      };\n      const areSimilarFormats = (editor, formatName, otherFormatName) => {\n        const validKeys = [\n          \"inline\",\n          \"block\",\n          \"selector\",\n          \"attributes\",\n          \"styles\",\n          \"classes\"\n        ];\n        const filterObj = (format2) => filter$5(format2, (_2, key) => exists(validKeys, (validKey) => validKey === key));\n        return exists(editor.formatter.get(formatName), (fmt1) => {\n          const filteredFmt1 = filterObj(fmt1);\n          return exists(editor.formatter.get(otherFormatName), (fmt2) => {\n            const filteredFmt2 = filterObj(fmt2);\n            return equal$1(filteredFmt1, filteredFmt2);\n          });\n        });\n      };\n      const isBlockFormat = (format2) => hasNonNullableKey(format2, \"block\");\n      const isSelectorFormat = (format2) => hasNonNullableKey(format2, \"selector\");\n      const isInlineFormat = (format2) => hasNonNullableKey(format2, \"inline\");\n      const isMixedFormat = (format2) => isSelectorFormat(format2) && isInlineFormat(format2) && is$2(get$a(format2, \"mixed\"), true);\n      const shouldExpandToSelector = (format2) => isSelectorFormat(format2) && format2.expand !== false && !isInlineFormat(format2);\n      const isBookmarkNode = isBookmarkNode$1;\n      const getParents$1 = getParents$2;\n      const isWhiteSpaceNode = isWhiteSpaceNode$1;\n      const isTextBlock = isTextBlock$1;\n      const isBogusBr = (node) => {\n        return isBr$5(node) && node.getAttribute(\"data-mce-bogus\") && !node.nextSibling;\n      };\n      const findParentContentEditable = (dom3, node) => {\n        let parent2 = node;\n        while (parent2) {\n          if (isElement$6(parent2) && dom3.getContentEditable(parent2)) {\n            return dom3.getContentEditable(parent2) === \"false\" ? parent2 : node;\n          }\n          parent2 = parent2.parentNode;\n        }\n        return node;\n      };\n      const walkText = (start2, node, offset, predicate) => {\n        const str = node.data;\n        for (let i3 = offset; start2 ? i3 >= 0 : i3 < str.length; start2 ? i3-- : i3++) {\n          if (predicate(str.charAt(i3))) {\n            return start2 ? i3 + 1 : i3;\n          }\n        }\n        return -1;\n      };\n      const findSpace = (start2, node, offset) => walkText(start2, node, offset, (c2) => isNbsp(c2) || isWhiteSpace2(c2));\n      const findContent = (start2, node, offset) => walkText(start2, node, offset, isContent);\n      const findWordEndPoint = (dom3, body, container, offset, start2, includeTrailingSpaces) => {\n        let lastTextNode;\n        const rootNode = dom3.getParent(container, dom3.isBlock) || body;\n        const walk2 = (container2, offset2, pred) => {\n          const textSeeker = TextSeeker(dom3);\n          const walker = start2 ? textSeeker.backwards : textSeeker.forwards;\n          return Optional.from(walker(container2, offset2, (text3, textOffset) => {\n            if (isBookmarkNode(text3.parentNode)) {\n              return -1;\n            } else {\n              lastTextNode = text3;\n              return pred(start2, text3, textOffset);\n            }\n          }, rootNode));\n        };\n        const spaceResult = walk2(container, offset, findSpace);\n        return spaceResult.bind((result) => includeTrailingSpaces ? walk2(result.container, result.offset + (start2 ? -1 : 0), findContent) : Optional.some(result)).orThunk(() => lastTextNode ? Optional.some({\n          container: lastTextNode,\n          offset: start2 ? 0 : lastTextNode.length\n        }) : Optional.none());\n      };\n      const findSelectorEndPoint = (dom3, formatList, rng, container, siblingName) => {\n        if (isText$8(container) && isEmpty$3(container.data) && container[siblingName]) {\n          container = container[siblingName];\n        }\n        const parents2 = getParents$1(dom3, container);\n        for (let i3 = 0; i3 < parents2.length; i3++) {\n          for (let y2 = 0; y2 < formatList.length; y2++) {\n            const curFormat = formatList[y2];\n            if (isNonNullable(curFormat.collapsed) && curFormat.collapsed !== rng.collapsed) {\n              continue;\n            }\n            if (isSelectorFormat(curFormat) && dom3.is(parents2[i3], curFormat.selector)) {\n              return parents2[i3];\n            }\n          }\n        }\n        return container;\n      };\n      const findBlockEndPoint = (editor, formatList, container, siblingName) => {\n        let node = container;\n        const dom3 = editor.dom;\n        const root2 = dom3.getRoot();\n        const format2 = formatList[0];\n        if (isBlockFormat(format2)) {\n          node = format2.wrapper ? null : dom3.getParent(container, format2.block, root2);\n        }\n        if (!node) {\n          const scopeRoot = dom3.getParent(container, \"LI,TD,TH\");\n          node = dom3.getParent(isText$8(container) ? container.parentNode : container, (node2) => node2 !== root2 && isTextBlock(editor, node2), scopeRoot);\n        }\n        if (node && isBlockFormat(format2) && format2.wrapper) {\n          node = getParents$1(dom3, node, \"ul,ol\").reverse()[0] || node;\n        }\n        if (!node) {\n          node = container;\n          while (node[siblingName] && !dom3.isBlock(node[siblingName])) {\n            node = node[siblingName];\n            if (isEq$5(node, \"br\")) {\n              break;\n            }\n          }\n        }\n        return node || container;\n      };\n      const isAtBlockBoundary$1 = (dom3, root2, container, siblingName) => {\n        const parent2 = container.parentNode;\n        if (isNonNullable(container[siblingName])) {\n          return false;\n        } else if (parent2 === root2 || isNullable(parent2) || dom3.isBlock(parent2)) {\n          return true;\n        } else {\n          return isAtBlockBoundary$1(dom3, root2, parent2, siblingName);\n        }\n      };\n      const findParentContainer = (dom3, formatList, container, offset, start2) => {\n        let parent2 = container;\n        const siblingName = start2 ? \"previousSibling\" : \"nextSibling\";\n        const root2 = dom3.getRoot();\n        if (isText$8(container) && !isWhiteSpaceNode(container)) {\n          if (start2 ? offset > 0 : offset < container.data.length) {\n            return container;\n          }\n        }\n        while (true) {\n          if (!formatList[0].block_expand && dom3.isBlock(parent2)) {\n            return parent2;\n          }\n          for (let sibling2 = parent2[siblingName]; sibling2; sibling2 = sibling2[siblingName]) {\n            const allowSpaces = isText$8(sibling2) && !isAtBlockBoundary$1(dom3, root2, sibling2, siblingName);\n            if (!isBookmarkNode(sibling2) && !isBogusBr(sibling2) && !isWhiteSpaceNode(sibling2, allowSpaces)) {\n              return parent2;\n            }\n          }\n          if (parent2 === root2 || parent2.parentNode === root2) {\n            container = parent2;\n            break;\n          }\n          parent2 = parent2.parentNode;\n        }\n        return container;\n      };\n      const isSelfOrParentBookmark = (container) => isBookmarkNode(container.parentNode) || isBookmarkNode(container);\n      const expandRng = (editor, rng, formatList, includeTrailingSpace = false) => {\n        let { startContainer, startOffset, endContainer, endOffset } = rng;\n        const dom3 = editor.dom;\n        const format2 = formatList[0];\n        if (isElement$6(startContainer) && startContainer.hasChildNodes()) {\n          startContainer = getNode$1(startContainer, startOffset);\n          if (isText$8(startContainer)) {\n            startOffset = 0;\n          }\n        }\n        if (isElement$6(endContainer) && endContainer.hasChildNodes()) {\n          endContainer = getNode$1(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n          if (isText$8(endContainer)) {\n            endOffset = endContainer.nodeValue.length;\n          }\n        }\n        startContainer = findParentContentEditable(dom3, startContainer);\n        endContainer = findParentContentEditable(dom3, endContainer);\n        if (isSelfOrParentBookmark(startContainer)) {\n          startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode;\n          if (rng.collapsed) {\n            startContainer = startContainer.previousSibling || startContainer;\n          } else {\n            startContainer = startContainer.nextSibling || startContainer;\n          }\n          if (isText$8(startContainer)) {\n            startOffset = rng.collapsed ? startContainer.length : 0;\n          }\n        }\n        if (isSelfOrParentBookmark(endContainer)) {\n          endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode;\n          if (rng.collapsed) {\n            endContainer = endContainer.nextSibling || endContainer;\n          } else {\n            endContainer = endContainer.previousSibling || endContainer;\n          }\n          if (isText$8(endContainer)) {\n            endOffset = rng.collapsed ? 0 : endContainer.length;\n          }\n        }\n        if (rng.collapsed) {\n          const startPoint = findWordEndPoint(dom3, editor.getBody(), startContainer, startOffset, true, includeTrailingSpace);\n          startPoint.each(({ container, offset }) => {\n            startContainer = container;\n            startOffset = offset;\n          });\n          const endPoint = findWordEndPoint(dom3, editor.getBody(), endContainer, endOffset, false, includeTrailingSpace);\n          endPoint.each(({ container, offset }) => {\n            endContainer = container;\n            endOffset = offset;\n          });\n        }\n        if (isInlineFormat(format2) || format2.block_expand) {\n          if (!isInlineFormat(format2) || (!isText$8(startContainer) || startOffset === 0)) {\n            startContainer = findParentContainer(dom3, formatList, startContainer, startOffset, true);\n          }\n          if (!isInlineFormat(format2) || (!isText$8(endContainer) || endOffset === endContainer.nodeValue.length)) {\n            endContainer = findParentContainer(dom3, formatList, endContainer, endOffset, false);\n          }\n        }\n        if (shouldExpandToSelector(format2)) {\n          startContainer = findSelectorEndPoint(dom3, formatList, rng, startContainer, \"previousSibling\");\n          endContainer = findSelectorEndPoint(dom3, formatList, rng, endContainer, \"nextSibling\");\n        }\n        if (isBlockFormat(format2) || isSelectorFormat(format2)) {\n          startContainer = findBlockEndPoint(editor, formatList, startContainer, \"previousSibling\");\n          endContainer = findBlockEndPoint(editor, formatList, endContainer, \"nextSibling\");\n          if (isBlockFormat(format2)) {\n            if (!dom3.isBlock(startContainer)) {\n              startContainer = findParentContainer(dom3, formatList, startContainer, startOffset, true);\n            }\n            if (!dom3.isBlock(endContainer)) {\n              endContainer = findParentContainer(dom3, formatList, endContainer, endOffset, false);\n            }\n          }\n        }\n        if (isElement$6(startContainer)) {\n          startOffset = dom3.nodeIndex(startContainer);\n          startContainer = startContainer.parentNode;\n        }\n        if (isElement$6(endContainer)) {\n          endOffset = dom3.nodeIndex(endContainer) + 1;\n          endContainer = endContainer.parentNode;\n        }\n        return {\n          startContainer,\n          startOffset,\n          endContainer,\n          endOffset\n        };\n      };\n      const walk$3 = (dom3, rng, callback) => {\n        const startOffset = rng.startOffset;\n        const startContainer = getNode$1(rng.startContainer, startOffset);\n        const endOffset = rng.endOffset;\n        const endContainer = getNode$1(rng.endContainer, endOffset - 1);\n        const exclude = (nodes) => {\n          const firstNode = nodes[0];\n          if (isText$8(firstNode) && firstNode === startContainer && startOffset >= firstNode.data.length) {\n            nodes.splice(0, 1);\n          }\n          const lastNode = nodes[nodes.length - 1];\n          if (endOffset === 0 && nodes.length > 0 && lastNode === endContainer && isText$8(lastNode)) {\n            nodes.splice(nodes.length - 1, 1);\n          }\n          return nodes;\n        };\n        const collectSiblings = (node, name2, endNode) => {\n          const siblings3 = [];\n          for (; node && node !== endNode; node = node[name2]) {\n            siblings3.push(node);\n          }\n          return siblings3;\n        };\n        const findEndPoint = (node, root2) => dom3.getParent(node, (node2) => node2.parentNode === root2, root2);\n        const walkBoundary = (startNode, endNode, next2) => {\n          const siblingName = next2 ? \"nextSibling\" : \"previousSibling\";\n          for (let node = startNode, parent2 = node.parentNode; node && node !== endNode; node = parent2) {\n            parent2 = node.parentNode;\n            const siblings3 = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n            if (siblings3.length) {\n              if (!next2) {\n                siblings3.reverse();\n              }\n              callback(exclude(siblings3));\n            }\n          }\n        };\n        if (startContainer === endContainer) {\n          return callback(exclude([startContainer]));\n        }\n        const ancestor2 = dom3.findCommonAncestor(startContainer, endContainer);\n        if (dom3.isChildOf(startContainer, endContainer)) {\n          return walkBoundary(startContainer, ancestor2, true);\n        }\n        if (dom3.isChildOf(endContainer, startContainer)) {\n          return walkBoundary(endContainer, ancestor2);\n        }\n        const startPoint = findEndPoint(startContainer, ancestor2) || startContainer;\n        const endPoint = findEndPoint(endContainer, ancestor2) || endContainer;\n        walkBoundary(startContainer, startPoint, true);\n        const siblings2 = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, \"nextSibling\", endPoint === endContainer ? endPoint.nextSibling : endPoint);\n        if (siblings2.length) {\n          callback(exclude(siblings2));\n        }\n        walkBoundary(endContainer, endPoint);\n      };\n      const getRanges$1 = (selection) => {\n        const ranges = [];\n        if (selection) {\n          for (let i3 = 0; i3 < selection.rangeCount; i3++) {\n            ranges.push(selection.getRangeAt(i3));\n          }\n        }\n        return ranges;\n      };\n      const getSelectedNodes = (ranges) => {\n        return bind$3(ranges, (range2) => {\n          const node = getSelectedNode(range2);\n          return node ? [SugarElement.fromDom(node)] : [];\n        });\n      };\n      const hasMultipleRanges = (selection) => {\n        return getRanges$1(selection).length > 1;\n      };\n      const getCellsFromRanges = (ranges) => filter$6(getSelectedNodes(ranges), isTableCell$4);\n      const getCellsFromElement = (elm) => descendants(elm, \"td[data-mce-selected],th[data-mce-selected]\");\n      const getCellsFromElementOrRanges = (ranges, element) => {\n        const selectedCells = getCellsFromElement(element);\n        return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n      };\n      const getCellsFromEditor = (editor) => getCellsFromElementOrRanges(getRanges$1(editor.selection.getSel()), SugarElement.fromDom(editor.getBody()));\n      const getClosestTable = (cell2, isRoot) => ancestor$2(cell2, \"table\", isRoot);\n      const getStartNode = (rng) => {\n        const sc = rng.startContainer, so = rng.startOffset;\n        if (isText$8(sc)) {\n          return so === 0 ? Optional.some(SugarElement.fromDom(sc)) : Optional.none();\n        } else {\n          return Optional.from(sc.childNodes[so]).map(SugarElement.fromDom);\n        }\n      };\n      const getEndNode = (rng) => {\n        const ec = rng.endContainer, eo = rng.endOffset;\n        if (isText$8(ec)) {\n          return eo === ec.data.length ? Optional.some(SugarElement.fromDom(ec)) : Optional.none();\n        } else {\n          return Optional.from(ec.childNodes[eo - 1]).map(SugarElement.fromDom);\n        }\n      };\n      const getFirstChildren = (node) => {\n        return firstChild(node).fold(constant2([node]), (child2) => {\n          return [node].concat(getFirstChildren(child2));\n        });\n      };\n      const getLastChildren$1 = (node) => {\n        return lastChild(node).fold(constant2([node]), (child2) => {\n          if (name(child2) === \"br\") {\n            return prevSibling(child2).map((sibling2) => {\n              return [node].concat(getLastChildren$1(sibling2));\n            }).getOr([]);\n          } else {\n            return [node].concat(getLastChildren$1(child2));\n          }\n        });\n      };\n      const hasAllContentsSelected = (elm, rng) => {\n        return lift2(getStartNode(rng), getEndNode(rng), (startNode, endNode) => {\n          const start2 = find$2(getFirstChildren(elm), curry(eq2, startNode));\n          const end2 = find$2(getLastChildren$1(elm), curry(eq2, endNode));\n          return start2.isSome() && end2.isSome();\n        }).getOr(false);\n      };\n      const moveEndPoint = (dom3, rng, node, start2) => {\n        const root2 = node, walker = new DomTreeWalker(node, root2);\n        const moveCaretBeforeOnEnterElementsMap = filter$5(dom3.schema.getMoveCaretBeforeOnEnterElements(), (_2, name2) => !contains$2([\n          \"td\",\n          \"th\",\n          \"table\"\n        ], name2.toLowerCase()));\n        do {\n          if (isText$8(node) && Tools.trim(node.nodeValue).length !== 0) {\n            if (start2) {\n              rng.setStart(node, 0);\n            } else {\n              rng.setEnd(node, node.nodeValue.length);\n            }\n            return;\n          }\n          if (moveCaretBeforeOnEnterElementsMap[node.nodeName]) {\n            if (start2) {\n              rng.setStartBefore(node);\n            } else {\n              if (node.nodeName === \"BR\") {\n                rng.setEndBefore(node);\n              } else {\n                rng.setEndAfter(node);\n              }\n            }\n            return;\n          }\n        } while (node = start2 ? walker.next() : walker.prev());\n        if (root2.nodeName === \"BODY\") {\n          if (start2) {\n            rng.setStart(root2, 0);\n          } else {\n            rng.setEnd(root2, root2.childNodes.length);\n          }\n        }\n      };\n      const hasAnyRanges = (editor) => {\n        const sel = editor.selection.getSel();\n        return sel && sel.rangeCount > 0;\n      };\n      const runOnRanges = (editor, executor) => {\n        const fakeSelectionNodes = getCellsFromEditor(editor);\n        if (fakeSelectionNodes.length > 0) {\n          each$g(fakeSelectionNodes, (elem) => {\n            const node = elem.dom;\n            const fakeNodeRng = editor.dom.createRng();\n            fakeNodeRng.setStartBefore(node);\n            fakeNodeRng.setEndAfter(node);\n            executor(fakeNodeRng, true);\n          });\n        } else {\n          executor(editor.selection.getRng(), false);\n        }\n      };\n      const preserve = (selection, fillBookmark, executor) => {\n        const bookmark = getPersistentBookmark(selection, fillBookmark);\n        executor(bookmark);\n        selection.moveToBookmark(bookmark);\n      };\n      const NodeValue = (is2, name2) => {\n        const get2 = (element) => {\n          if (!is2(element)) {\n            throw new Error(\"Can only get \" + name2 + \" value of a \" + name2 + \" node\");\n          }\n          return getOption2(element).getOr(\"\");\n        };\n        const getOption2 = (element) => is2(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n        const set3 = (element, value2) => {\n          if (!is2(element)) {\n            throw new Error(\"Can only set raw \" + name2 + \" value of a \" + name2 + \" node\");\n          }\n          element.dom.nodeValue = value2;\n        };\n        return {\n          get: get2,\n          getOption: getOption2,\n          set: set3\n        };\n      };\n      const api$1 = NodeValue(isText$9, \"text\");\n      const get$3 = (element) => api$1.get(element);\n      const getOption = (element) => api$1.getOption(element);\n      const isZeroWidth = (elem) => isText$9(elem) && get$3(elem) === ZWSP$1;\n      const context = (editor, elem, wrapName, nodeName) => parent(elem).fold(() => \"skipping\", (parent2) => {\n        if (nodeName === \"br\" || isZeroWidth(elem)) {\n          return \"valid\";\n        } else if (isAnnotation(elem)) {\n          return \"existing\";\n        } else if (isCaretNode(elem.dom)) {\n          return \"caret\";\n        } else if (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent2), wrapName)) {\n          return \"invalid-child\";\n        } else {\n          return \"valid\";\n        }\n      });\n      const applyWordGrab = (editor, rng) => {\n        const r4 = expandRng(editor, rng, [{ inline: \"span\" }]);\n        rng.setStart(r4.startContainer, r4.startOffset);\n        rng.setEnd(r4.endContainer, r4.endOffset);\n        editor.selection.setRng(rng);\n      };\n      const makeAnnotation = (eDoc, { uid = generate$1(\"mce-annotation\"), ...data2 }, annotationName, decorate) => {\n        const master = SugarElement.fromTag(\"span\", eDoc);\n        add$2(master, annotation());\n        set$2(master, `${dataAnnotationId()}`, uid);\n        set$2(master, `${dataAnnotation()}`, annotationName);\n        const { attributes = {}, classes = [] } = decorate(uid, data2);\n        setAll$1(master, attributes);\n        add2(master, classes);\n        return master;\n      };\n      const annotate = (editor, rng, annotationName, decorate, data2) => {\n        const newWrappers = [];\n        const master = makeAnnotation(editor.getDoc(), data2, annotationName, decorate);\n        const wrapper = value$2();\n        const finishWrapper = () => {\n          wrapper.clear();\n        };\n        const getOrOpenWrapper = () => wrapper.get().getOrThunk(() => {\n          const nu2 = shallow$1(master);\n          newWrappers.push(nu2);\n          wrapper.set(nu2);\n          return nu2;\n        });\n        const processElements = (elems) => {\n          each$g(elems, processElement);\n        };\n        const processElement = (elem) => {\n          const ctx = context(editor, elem, \"span\", name(elem));\n          switch (ctx) {\n            case \"invalid-child\": {\n              finishWrapper();\n              const children$1 = children(elem);\n              processElements(children$1);\n              finishWrapper();\n              break;\n            }\n            case \"valid\": {\n              const w = getOrOpenWrapper();\n              wrap$2(elem, w);\n              break;\n            }\n          }\n        };\n        const processNodes = (nodes) => {\n          const elems = map$3(nodes, SugarElement.fromDom);\n          processElements(elems);\n        };\n        walk$3(editor.dom, rng, (nodes) => {\n          finishWrapper();\n          processNodes(nodes);\n        });\n        return newWrappers;\n      };\n      const annotateWithBookmark = (editor, name2, settings, data2) => {\n        editor.undoManager.transact(() => {\n          const selection = editor.selection;\n          const initialRng = selection.getRng();\n          const hasFakeSelection = getCellsFromEditor(editor).length > 0;\n          if (initialRng.collapsed && !hasFakeSelection) {\n            applyWordGrab(editor, initialRng);\n          }\n          if (selection.getRng().collapsed && !hasFakeSelection) {\n            const wrapper = makeAnnotation(editor.getDoc(), data2, name2, settings.decorate);\n            set2(wrapper, nbsp);\n            selection.getRng().insertNode(wrapper.dom);\n            selection.select(wrapper.dom);\n          } else {\n            preserve(selection, false, () => {\n              runOnRanges(editor, (selectionRng) => {\n                annotate(editor, selectionRng, name2, settings.decorate, data2);\n              });\n            });\n          }\n        });\n      };\n      const Annotator = (editor) => {\n        const registry2 = create$b();\n        setup$w(editor, registry2);\n        const changes = setup$x(editor, registry2);\n        return {\n          register: (name2, settings) => {\n            registry2.register(name2, settings);\n          },\n          annotate: (name2, data2) => {\n            registry2.lookup(name2).each((settings) => {\n              annotateWithBookmark(editor, name2, settings, data2);\n            });\n          },\n          annotationChanged: (name2, callback) => {\n            changes.addListener(name2, callback);\n          },\n          remove: (name2) => {\n            const bookmark = editor.selection.getBookmark();\n            identify(editor, Optional.some(name2)).each(({ elements }) => {\n              each$g(elements, unwrap);\n            });\n            editor.selection.moveToBookmark(bookmark);\n          },\n          removeAll: (name2) => {\n            const bookmark = editor.selection.getBookmark();\n            each$f(findAll(editor, name2), (spans, _2) => each$g(spans, unwrap));\n            editor.selection.moveToBookmark(bookmark);\n          },\n          getAll: (name2) => {\n            const directory = findAll(editor, name2);\n            return map$2(directory, (elems) => map$3(elems, (elem) => elem.dom));\n          }\n        };\n      };\n      const BookmarkManager = (selection) => {\n        return {\n          getBookmark: curry(getBookmark$1, selection),\n          moveToBookmark: curry(moveToBookmark, selection)\n        };\n      };\n      BookmarkManager.isBookmarkNode = isBookmarkNode$1;\n      const isXYWithinRange = (clientX, clientY, range2) => {\n        if (range2.collapsed) {\n          return false;\n        } else {\n          return exists(range2.getClientRects(), (rect) => containsXY(rect, clientX, clientY));\n        }\n      };\n      const firePreProcess = (editor, args) => editor.dispatch(\"PreProcess\", args);\n      const firePostProcess = (editor, args) => editor.dispatch(\"PostProcess\", args);\n      const fireRemove = (editor) => editor.dispatch(\"remove\");\n      const fireDetach = (editor) => editor.dispatch(\"detach\");\n      const fireSwitchMode = (editor, mode) => editor.dispatch(\"SwitchMode\", { mode });\n      const fireObjectResizeStart = (editor, target, width, height, origin) => {\n        editor.dispatch(\"ObjectResizeStart\", {\n          target,\n          width,\n          height,\n          origin\n        });\n      };\n      const fireObjectResized = (editor, target, width, height, origin) => {\n        editor.dispatch(\"ObjectResized\", {\n          target,\n          width,\n          height,\n          origin\n        });\n      };\n      const firePreInit = (editor) => editor.dispatch(\"PreInit\");\n      const firePostRender = (editor) => editor.dispatch(\"PostRender\");\n      const fireInit = (editor) => editor.dispatch(\"Init\");\n      const firePlaceholderToggle = (editor, state) => editor.dispatch(\"PlaceholderToggle\", { state });\n      const fireError = (editor, errorType, error3) => editor.dispatch(errorType, error3);\n      const fireFormatApply = (editor, format2, node, vars) => editor.dispatch(\"FormatApply\", {\n        format: format2,\n        node,\n        vars\n      });\n      const fireFormatRemove = (editor, format2, node, vars) => editor.dispatch(\"FormatRemove\", {\n        format: format2,\n        node,\n        vars\n      });\n      const fireBeforeSetContent = (editor, args) => editor.dispatch(\"BeforeSetContent\", args);\n      const fireSetContent = (editor, args) => editor.dispatch(\"SetContent\", args);\n      const fireBeforeGetContent = (editor, args) => editor.dispatch(\"BeforeGetContent\", args);\n      const fireGetContent = (editor, args) => editor.dispatch(\"GetContent\", args);\n      const fireAutocompleterStart = (editor, args) => editor.dispatch(\"AutocompleterStart\", args);\n      const fireAutocompleterUpdate = (editor, args) => editor.dispatch(\"AutocompleterUpdate\", args);\n      const fireAutocompleterEnd = (editor) => editor.dispatch(\"AutocompleterEnd\");\n      const firePastePreProcess = (editor, html2, internal) => editor.dispatch(\"PastePreProcess\", {\n        content: html2,\n        internal\n      });\n      const firePastePostProcess = (editor, node, internal) => editor.dispatch(\"PastePostProcess\", {\n        node,\n        internal\n      });\n      const firePastePlainTextToggle = (editor, state) => editor.dispatch(\"PastePlainTextToggle\", { state });\n      const VK = {\n        BACKSPACE: 8,\n        DELETE: 46,\n        DOWN: 40,\n        ENTER: 13,\n        ESC: 27,\n        LEFT: 37,\n        RIGHT: 39,\n        SPACEBAR: 32,\n        TAB: 9,\n        UP: 38,\n        PAGE_UP: 33,\n        PAGE_DOWN: 34,\n        END: 35,\n        HOME: 36,\n        modifierPressed: (e2) => {\n          return e2.shiftKey || e2.ctrlKey || e2.altKey || VK.metaKeyPressed(e2);\n        },\n        metaKeyPressed: (e2) => {\n          return Env.os.isMacOS() || Env.os.isiOS() ? e2.metaKey : e2.ctrlKey && !e2.altKey;\n        }\n      };\n      const ControlSelection = (selection, editor) => {\n        const elementSelectionAttr = \"data-mce-selected\";\n        const dom3 = editor.dom, each2 = Tools.each;\n        let selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop;\n        let startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n        let width, height;\n        const editableDoc = editor.getDoc(), rootDocument = document;\n        const abs = Math.abs, round2 = Math.round, rootElement = editor.getBody();\n        let startScrollWidth, startScrollHeight;\n        const resizeHandles = {\n          nw: [\n            0,\n            0,\n            -1,\n            -1\n          ],\n          ne: [\n            1,\n            0,\n            1,\n            -1\n          ],\n          se: [\n            1,\n            1,\n            1,\n            1\n          ],\n          sw: [\n            0,\n            1,\n            -1,\n            1\n          ]\n        };\n        const isImage2 = (elm) => isNonNullable(elm) && (isImg(elm) || editor.dom.is(elm, \"figure.image\"));\n        const isMedia2 = (elm) => isMedia$2(elm) || dom3.hasClass(elm, \"mce-preview-object\");\n        const isEventOnImageOutsideRange = (evt, range2) => {\n          if (evt.type === \"longpress\" || evt.type.indexOf(\"touch\") === 0) {\n            const touch = evt.touches[0];\n            return isImage2(evt.target) && !isXYWithinRange(touch.clientX, touch.clientY, range2);\n          } else {\n            return isImage2(evt.target) && !isXYWithinRange(evt.clientX, evt.clientY, range2);\n          }\n        };\n        const contextMenuSelectImage = (evt) => {\n          const target = evt.target;\n          if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n            editor.selection.select(target);\n          }\n        };\n        const getResizeTargets = (elm) => {\n          if (dom3.is(elm, \"figure.image\")) {\n            return [elm.querySelector(\"img\")];\n          } else if (dom3.hasClass(elm, \"mce-preview-object\") && isNonNullable(elm.firstElementChild)) {\n            return [\n              elm,\n              elm.firstElementChild\n            ];\n          } else {\n            return [elm];\n          }\n        };\n        const isResizable = (elm) => {\n          const selector = getObjectResizing(editor);\n          if (!selector) {\n            return false;\n          }\n          if (elm.getAttribute(\"data-mce-resize\") === \"false\") {\n            return false;\n          }\n          if (elm === editor.getBody()) {\n            return false;\n          }\n          if (dom3.hasClass(elm, \"mce-preview-object\")) {\n            return is$1(SugarElement.fromDom(elm.firstElementChild), selector);\n          } else {\n            return is$1(SugarElement.fromDom(elm), selector);\n          }\n        };\n        const createGhostElement = (elm) => {\n          if (isMedia2(elm)) {\n            return dom3.create(\"img\", { src: Env.transparentSrc });\n          } else {\n            return elm.cloneNode(true);\n          }\n        };\n        const setSizeProp = (element, name2, value2) => {\n          if (isNonNullable(value2)) {\n            const targets = getResizeTargets(element);\n            each$g(targets, (target) => {\n              if (target.style[name2] || !editor.schema.isValid(target.nodeName.toLowerCase(), name2)) {\n                dom3.setStyle(target, name2, value2);\n              } else {\n                dom3.setAttrib(target, name2, \"\" + value2);\n              }\n            });\n          }\n        };\n        const setGhostElmSize = (ghostElm, width2, height2) => {\n          setSizeProp(ghostElm, \"width\", width2);\n          setSizeProp(ghostElm, \"height\", height2);\n        };\n        const resizeGhostElement = (e2) => {\n          let deltaX, deltaY, proportional;\n          let resizeHelperX, resizeHelperY;\n          deltaX = e2.screenX - startX;\n          deltaY = e2.screenY - startY;\n          width = deltaX * selectedHandle[2] + startW;\n          height = deltaY * selectedHandle[3] + startH;\n          width = width < 5 ? 5 : width;\n          height = height < 5 ? 5 : height;\n          if ((isImage2(selectedElm) || isMedia2(selectedElm)) && getResizeImgProportional(editor) !== false) {\n            proportional = !VK.modifierPressed(e2);\n          } else {\n            proportional = VK.modifierPressed(e2);\n          }\n          if (proportional) {\n            if (abs(deltaX) > abs(deltaY)) {\n              height = round2(width * ratio);\n              width = round2(height / ratio);\n            } else {\n              width = round2(height / ratio);\n              height = round2(width * ratio);\n            }\n          }\n          setGhostElmSize(selectedElmGhost, width, height);\n          resizeHelperX = selectedHandle.startPos.x + deltaX;\n          resizeHelperY = selectedHandle.startPos.y + deltaY;\n          resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n          resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n          dom3.setStyles(resizeHelper, {\n            left: resizeHelperX,\n            top: resizeHelperY,\n            display: \"block\"\n          });\n          resizeHelper.innerHTML = width + \" &times; \" + height;\n          if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n            dom3.setStyle(selectedElmGhost, \"left\", selectedElmX + (startW - width));\n          }\n          if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n            dom3.setStyle(selectedElmGhost, \"top\", selectedElmY + (startH - height));\n          }\n          deltaX = rootElement.scrollWidth - startScrollWidth;\n          deltaY = rootElement.scrollHeight - startScrollHeight;\n          if (deltaX + deltaY !== 0) {\n            dom3.setStyles(resizeHelper, {\n              left: resizeHelperX - deltaX,\n              top: resizeHelperY - deltaY\n            });\n          }\n          if (!resizeStarted) {\n            fireObjectResizeStart(editor, selectedElm, startW, startH, \"corner-\" + selectedHandle.name);\n            resizeStarted = true;\n          }\n        };\n        const endGhostResize = () => {\n          const wasResizeStarted = resizeStarted;\n          resizeStarted = false;\n          if (wasResizeStarted) {\n            setSizeProp(selectedElm, \"width\", width);\n            setSizeProp(selectedElm, \"height\", height);\n          }\n          dom3.unbind(editableDoc, \"mousemove\", resizeGhostElement);\n          dom3.unbind(editableDoc, \"mouseup\", endGhostResize);\n          if (rootDocument !== editableDoc) {\n            dom3.unbind(rootDocument, \"mousemove\", resizeGhostElement);\n            dom3.unbind(rootDocument, \"mouseup\", endGhostResize);\n          }\n          dom3.remove(selectedElmGhost);\n          dom3.remove(resizeHelper);\n          dom3.remove(resizeBackdrop);\n          showResizeRect(selectedElm);\n          if (wasResizeStarted) {\n            fireObjectResized(editor, selectedElm, width, height, \"corner-\" + selectedHandle.name);\n            dom3.setAttrib(selectedElm, \"style\", dom3.getAttrib(selectedElm, \"style\"));\n          }\n          editor.nodeChanged();\n        };\n        const showResizeRect = (targetElm) => {\n          unbindResizeHandleEvents();\n          const position = dom3.getPos(targetElm, rootElement);\n          const selectedElmX2 = position.x;\n          const selectedElmY2 = position.y;\n          const rect = targetElm.getBoundingClientRect();\n          const targetWidth = rect.width || rect.right - rect.left;\n          const targetHeight = rect.height || rect.bottom - rect.top;\n          if (selectedElm !== targetElm) {\n            hideResizeRect();\n            selectedElm = targetElm;\n            width = height = 0;\n          }\n          const e2 = editor.dispatch(\"ObjectSelected\", { target: targetElm });\n          const selectedValue = dom3.getAttrib(selectedElm, elementSelectionAttr, \"1\");\n          if (isResizable(targetElm) && !e2.isDefaultPrevented()) {\n            each2(resizeHandles, (handle2, name2) => {\n              let handleElm;\n              const startDrag = (e3) => {\n                const target = getResizeTargets(selectedElm)[0];\n                startX = e3.screenX;\n                startY = e3.screenY;\n                startW = target.clientWidth;\n                startH = target.clientHeight;\n                ratio = startH / startW;\n                selectedHandle = handle2;\n                selectedHandle.name = name2;\n                selectedHandle.startPos = {\n                  x: targetWidth * handle2[0] + selectedElmX2,\n                  y: targetHeight * handle2[1] + selectedElmY2\n                };\n                startScrollWidth = rootElement.scrollWidth;\n                startScrollHeight = rootElement.scrollHeight;\n                resizeBackdrop = dom3.add(rootElement, \"div\", {\n                  \"class\": \"mce-resize-backdrop\",\n                  \"data-mce-bogus\": \"all\"\n                });\n                dom3.setStyles(resizeBackdrop, {\n                  position: \"fixed\",\n                  left: \"0\",\n                  top: \"0\",\n                  width: \"100%\",\n                  height: \"100%\"\n                });\n                selectedElmGhost = createGhostElement(selectedElm);\n                dom3.addClass(selectedElmGhost, \"mce-clonedresizable\");\n                dom3.setAttrib(selectedElmGhost, \"data-mce-bogus\", \"all\");\n                selectedElmGhost.contentEditable = \"false\";\n                dom3.setStyles(selectedElmGhost, {\n                  left: selectedElmX2,\n                  top: selectedElmY2,\n                  margin: 0\n                });\n                setGhostElmSize(selectedElmGhost, targetWidth, targetHeight);\n                selectedElmGhost.removeAttribute(elementSelectionAttr);\n                rootElement.appendChild(selectedElmGhost);\n                dom3.bind(editableDoc, \"mousemove\", resizeGhostElement);\n                dom3.bind(editableDoc, \"mouseup\", endGhostResize);\n                if (rootDocument !== editableDoc) {\n                  dom3.bind(rootDocument, \"mousemove\", resizeGhostElement);\n                  dom3.bind(rootDocument, \"mouseup\", endGhostResize);\n                }\n                resizeHelper = dom3.add(rootElement, \"div\", {\n                  \"class\": \"mce-resize-helper\",\n                  \"data-mce-bogus\": \"all\"\n                }, startW + \" &times; \" + startH);\n              };\n              handleElm = dom3.get(\"mceResizeHandle\" + name2);\n              if (handleElm) {\n                dom3.remove(handleElm);\n              }\n              handleElm = dom3.add(rootElement, \"div\", {\n                \"id\": \"mceResizeHandle\" + name2,\n                \"data-mce-bogus\": \"all\",\n                \"class\": \"mce-resizehandle\",\n                \"unselectable\": true,\n                \"style\": \"cursor:\" + name2 + \"-resize; margin:0; padding:0\"\n              });\n              dom3.bind(handleElm, \"mousedown\", (e3) => {\n                e3.stopImmediatePropagation();\n                e3.preventDefault();\n                startDrag(e3);\n              });\n              handle2.elm = handleElm;\n              dom3.setStyles(handleElm, {\n                left: targetWidth * handle2[0] + selectedElmX2 - handleElm.offsetWidth / 2,\n                top: targetHeight * handle2[1] + selectedElmY2 - handleElm.offsetHeight / 2\n              });\n            });\n          } else {\n            hideResizeRect();\n          }\n          if (!dom3.getAttrib(selectedElm, elementSelectionAttr)) {\n            selectedElm.setAttribute(elementSelectionAttr, selectedValue);\n          }\n        };\n        const hideResizeRect = () => {\n          unbindResizeHandleEvents();\n          if (selectedElm) {\n            selectedElm.removeAttribute(elementSelectionAttr);\n          }\n          each$f(resizeHandles, (value2, name2) => {\n            const handleElm = dom3.get(\"mceResizeHandle\" + name2);\n            if (handleElm) {\n              dom3.unbind(handleElm);\n              dom3.remove(handleElm);\n            }\n          });\n        };\n        const updateResizeRect = (e2) => {\n          var _a3;\n          let startElm, controlElm;\n          const isChildOrEqual = (node, parent2) => {\n            if (node) {\n              do {\n                if (node === parent2) {\n                  return true;\n                }\n              } while (node = node.parentNode);\n            }\n          };\n          if (resizeStarted || editor.removed) {\n            return;\n          }\n          each2(dom3.select(\"img[data-mce-selected],hr[data-mce-selected]\"), (img) => {\n            img.removeAttribute(elementSelectionAttr);\n          });\n          controlElm = e2.type === \"mousedown\" ? e2.target : selection.getNode();\n          controlElm = (_a3 = closest$3(SugarElement.fromDom(controlElm), \"table,img,figure.image,hr,video,span.mce-preview-object\").getOrUndefined()) === null || _a3 === void 0 ? void 0 : _a3.dom;\n          if (isChildOrEqual(controlElm, rootElement)) {\n            disableGeckoResize();\n            startElm = selection.getStart(true);\n            if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n              showResizeRect(controlElm);\n              return;\n            }\n          }\n          hideResizeRect();\n        };\n        const unbindResizeHandleEvents = () => {\n          each$f(resizeHandles, (handle2) => {\n            if (handle2.elm) {\n              dom3.unbind(handle2.elm);\n              delete handle2.elm;\n            }\n          });\n        };\n        const disableGeckoResize = () => {\n          try {\n            editor.getDoc().execCommand(\"enableObjectResizing\", false, \"false\");\n          } catch (ex) {\n          }\n        };\n        editor.on(\"init\", () => {\n          disableGeckoResize();\n          const throttledUpdateResizeRect = first$1((e2) => {\n            if (!editor.composing) {\n              updateResizeRect(e2);\n            }\n          }, 0);\n          editor.on(\"nodechange ResizeEditor ResizeWindow ResizeContent drop FullscreenStateChanged\", throttledUpdateResizeRect.throttle);\n          editor.on(\"keyup compositionend\", (e2) => {\n            if (selectedElm && selectedElm.nodeName === \"TABLE\") {\n              throttledUpdateResizeRect.throttle(e2);\n            }\n          });\n          editor.on(\"hide blur\", hideResizeRect);\n          editor.on(\"contextmenu longpress\", contextMenuSelectImage, true);\n        });\n        editor.on(\"remove\", unbindResizeHandleEvents);\n        const destroy2 = () => {\n          selectedElm = selectedElmGhost = resizeBackdrop = null;\n        };\n        return {\n          isResizable,\n          showResizeRect,\n          hideResizeRect,\n          updateResizeRect,\n          destroy: destroy2\n        };\n      };\n      const setStart = (rng, situ) => {\n        situ.fold((e2) => {\n          rng.setStartBefore(e2.dom);\n        }, (e2, o2) => {\n          rng.setStart(e2.dom, o2);\n        }, (e2) => {\n          rng.setStartAfter(e2.dom);\n        });\n      };\n      const setFinish = (rng, situ) => {\n        situ.fold((e2) => {\n          rng.setEndBefore(e2.dom);\n        }, (e2, o2) => {\n          rng.setEnd(e2.dom, o2);\n        }, (e2) => {\n          rng.setEndAfter(e2.dom);\n        });\n      };\n      const relativeToNative = (win, startSitu, finishSitu) => {\n        const range2 = win.document.createRange();\n        setStart(range2, startSitu);\n        setFinish(range2, finishSitu);\n        return range2;\n      };\n      const exactToNative = (win, start2, soffset, finish, foffset) => {\n        const rng = win.document.createRange();\n        rng.setStart(start2.dom, soffset);\n        rng.setEnd(finish.dom, foffset);\n        return rng;\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, type2, range2) => type2(SugarElement.fromDom(range2.startContainer), range2.startOffset, SugarElement.fromDom(range2.endContainer), range2.endOffset);\n      const getRanges = (win, selection) => selection.match({\n        domRange: (rng) => {\n          return {\n            ltr: constant2(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: (start2, soffset, finish, foffset) => {\n          return {\n            ltr: cached(() => exactToNative(win, start2, soffset, finish, foffset)),\n            rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start2, 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      adt$3.ltr;\n      adt$3.rtl;\n      const create$9 = (start2, soffset, finish, foffset) => ({\n        start: start2,\n        soffset,\n        finish,\n        foffset\n      });\n      const SimRange = { create: create$9 };\n      const caretPositionFromPoint = (doc, x2, y2) => {\n        var _a3, _b;\n        return Optional.from((_b = (_a3 = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a3, x2, y2)).bind((pos) => {\n          if (pos.offsetNode === null) {\n            return Optional.none();\n          }\n          const r4 = doc.dom.createRange();\n          r4.setStart(pos.offsetNode, pos.offset);\n          r4.collapse();\n          return Optional.some(r4);\n        });\n      };\n      const caretRangeFromPoint = (doc, x2, y2) => {\n        var _a3, _b;\n        return Optional.from((_b = (_a3 = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a3, x2, y2));\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$1 = (win, x2, y2) => {\n        const doc = SugarElement.fromDom(win.document);\n        return availableSearch(doc, x2, y2).map((rng) => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n      };\n      const adt$2 = Adt.generate([\n        { before: [\"element\"] },\n        {\n          on: [\n            \"element\",\n            \"offset\"\n          ]\n        },\n        { after: [\"element\"] }\n      ]);\n      const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n      const getStart$2 = (situ) => situ.fold(identity2, identity2, identity2);\n      const before$1 = adt$2.before;\n      const on = adt$2.on;\n      const after$1 = adt$2.after;\n      const Situ = {\n        before: before$1,\n        on,\n        after: after$1,\n        cata,\n        getStart: getStart$2\n      };\n      const adt$1 = 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$1.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n      const getStart$1 = (selection) => selection.match({\n        domRange: (rng) => SugarElement.fromDom(rng.startContainer),\n        relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n        exact: (start2, _soffset, _finish, _foffset) => start2\n      });\n      const domRange = adt$1.domRange;\n      const relative = adt$1.relative;\n      const exact = adt$1.exact;\n      const getWin = (selection) => {\n        const start2 = getStart$1(selection);\n        return defaultView(start2);\n      };\n      const range = SimRange.create;\n      const SimSelection = {\n        domRange,\n        relative,\n        exact,\n        exactFromRange,\n        getWin,\n        range\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 start2 = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n        const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n        return SimSelection.relative(start2, finish);\n      };\n      const preprocessExact = (start2, soffset, finish, foffset) => {\n        const startSitu = beforeSpecial(start2, soffset);\n        const finishSitu = beforeSpecial(finish, foffset);\n        return SimSelection.relative(startSitu, finishSitu);\n      };\n      const preprocess = (selection) => selection.match({\n        domRange: (rng) => {\n          const start2 = SugarElement.fromDom(rng.startContainer);\n          const finish = SugarElement.fromDom(rng.endContainer);\n          return preprocessExact(start2, rng.startOffset, finish, rng.endOffset);\n        },\n        relative: preprocessRelative,\n        exact: preprocessExact\n      });\n      const fromElements = (elements, scope) => {\n        const doc = document;\n        const fragment = doc.createDocumentFragment();\n        each$g(elements, (element) => {\n          fragment.appendChild(element.dom);\n        });\n        return SugarElement.fromDom(fragment);\n      };\n      const toNative = (selection) => {\n        const win = SimSelection.getWin(selection).dom;\n        const getDomRange = (start2, soffset, finish, foffset) => exactToNative(win, start2, soffset, finish, foffset);\n        const filtered = preprocess(selection);\n        return diagnose(win, filtered).match({\n          ltr: getDomRange,\n          rtl: getDomRange\n        });\n      };\n      const getAtPoint = (win, x2, y2) => fromPoint$1(win, x2, y2);\n      const fromPoint = (clientX, clientY, doc) => getAtPoint(doc.defaultView, clientX, clientY).map((simRange) => {\n        const rng = doc.createRange();\n        rng.setStart(simRange.start.dom, simRange.soffset);\n        rng.setEnd(simRange.finish.dom, simRange.foffset);\n        return rng;\n      }).getOrUndefined();\n      const isEq$4 = (rng1, rng2) => {\n        return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n      };\n      const findParent = (node, rootNode, predicate) => {\n        while (node && node !== rootNode) {\n          if (predicate(node)) {\n            return node;\n          }\n          node = node.parentNode;\n        }\n        return null;\n      };\n      const hasParent$1 = (node, rootNode, predicate) => findParent(node, rootNode, predicate) !== null;\n      const hasParentWithName = (node, rootNode, name2) => hasParent$1(node, rootNode, (node2) => {\n        return node2.nodeName === name2;\n      });\n      const isTable = (node) => node && node.nodeName === \"TABLE\";\n      const isTableCell$2 = (node) => node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n      const isCeFalseCaretContainer = (node, rootNode) => isCaretContainer$2(node) && hasParent$1(node, rootNode, isCaretNode) === false;\n      const hasBrBeforeAfter = (dom3, node, left) => {\n        const walker = new DomTreeWalker(node, dom3.getParent(node.parentNode, dom3.isBlock) || dom3.getRoot());\n        while (node = walker[left ? \"prev\" : \"next\"]()) {\n          if (isBr$5(node)) {\n            return true;\n          }\n        }\n      };\n      const isPrevNode = (node, name2) => node.previousSibling && node.previousSibling.nodeName === name2;\n      const hasContentEditableFalseParent = (body, node) => {\n        while (node && node !== body) {\n          if (isContentEditableFalse$a(node)) {\n            return true;\n          }\n          node = node.parentNode;\n        }\n        return false;\n      };\n      const findTextNodeRelative = (dom3, isAfterNode, collapsed, left, startNode) => {\n        let lastInlineElement;\n        const body = dom3.getRoot();\n        let node;\n        const nonEmptyElementsMap = dom3.schema.getNonEmptyElements();\n        const parentBlockContainer = dom3.getParent(startNode.parentNode, dom3.isBlock) || body;\n        if (left && isBr$5(startNode) && isAfterNode && dom3.isEmpty(parentBlockContainer)) {\n          return Optional.some(CaretPosition(startNode.parentNode, dom3.nodeIndex(startNode)));\n        }\n        const walker = new DomTreeWalker(startNode, parentBlockContainer);\n        while (node = walker[left ? \"prev\" : \"next\"]()) {\n          if (dom3.getContentEditableParent(node) === \"false\" || isCeFalseCaretContainer(node, body)) {\n            return Optional.none();\n          }\n          if (isText$8(node) && node.nodeValue.length > 0) {\n            if (hasParentWithName(node, body, \"A\") === false) {\n              return Optional.some(CaretPosition(node, left ? node.nodeValue.length : 0));\n            }\n            return Optional.none();\n          }\n          if (dom3.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n            return Optional.none();\n          }\n          lastInlineElement = node;\n        }\n        if (collapsed && lastInlineElement) {\n          return Optional.some(CaretPosition(lastInlineElement, 0));\n        }\n        return Optional.none();\n      };\n      const normalizeEndPoint = (dom3, collapsed, start2, rng) => {\n        let container, offset;\n        const body = dom3.getRoot();\n        let node;\n        let directionLeft, normalized = false;\n        container = rng[(start2 ? \"start\" : \"end\") + \"Container\"];\n        offset = rng[(start2 ? \"start\" : \"end\") + \"Offset\"];\n        const isAfterNode = isElement$6(container) && offset === container.childNodes.length;\n        const nonEmptyElementsMap = dom3.schema.getNonEmptyElements();\n        directionLeft = start2;\n        if (isCaretContainer$2(container)) {\n          return Optional.none();\n        }\n        if (isElement$6(container) && offset > container.childNodes.length - 1) {\n          directionLeft = false;\n        }\n        if (isDocument$1(container)) {\n          container = body;\n          offset = 0;\n        }\n        if (container === body) {\n          if (directionLeft) {\n            node = container.childNodes[offset > 0 ? offset - 1 : 0];\n            if (node) {\n              if (isCaretContainer$2(node)) {\n                return Optional.none();\n              }\n              if (nonEmptyElementsMap[node.nodeName] || isTable(node)) {\n                return Optional.none();\n              }\n            }\n          }\n          if (container.hasChildNodes()) {\n            offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n            container = container.childNodes[offset];\n            offset = isText$8(container) && isAfterNode ? container.data.length : 0;\n            if (!collapsed && container === body.lastChild && isTable(container)) {\n              return Optional.none();\n            }\n            if (hasContentEditableFalseParent(body, container) || isCaretContainer$2(container)) {\n              return Optional.none();\n            }\n            if (container.hasChildNodes() && isTable(container) === false) {\n              node = container;\n              const walker = new DomTreeWalker(container, body);\n              do {\n                if (isContentEditableFalse$a(node) || isCaretContainer$2(node)) {\n                  normalized = false;\n                  break;\n                }\n                if (isText$8(node) && node.nodeValue.length > 0) {\n                  offset = directionLeft ? 0 : node.nodeValue.length;\n                  container = node;\n                  normalized = true;\n                  break;\n                }\n                if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$2(node)) {\n                  offset = dom3.nodeIndex(node);\n                  container = node.parentNode;\n                  if (!directionLeft) {\n                    offset++;\n                  }\n                  normalized = true;\n                  break;\n                }\n              } while (node = directionLeft ? walker.next() : walker.prev());\n            }\n          }\n        }\n        if (collapsed) {\n          if (isText$8(container) && offset === 0) {\n            findTextNodeRelative(dom3, isAfterNode, collapsed, true, container).each((pos) => {\n              container = pos.container();\n              offset = pos.offset();\n              normalized = true;\n            });\n          }\n          if (isElement$6(container)) {\n            node = container.childNodes[offset];\n            if (!node) {\n              node = container.childNodes[offset - 1];\n            }\n            if (node && isBr$5(node) && !isPrevNode(node, \"A\") && !hasBrBeforeAfter(dom3, node, false) && !hasBrBeforeAfter(dom3, node, true)) {\n              findTextNodeRelative(dom3, isAfterNode, collapsed, true, node).each((pos) => {\n                container = pos.container();\n                offset = pos.offset();\n                normalized = true;\n              });\n            }\n          }\n        }\n        if (directionLeft && !collapsed && isText$8(container) && offset === container.nodeValue.length) {\n          findTextNodeRelative(dom3, isAfterNode, collapsed, false, container).each((pos) => {\n            container = pos.container();\n            offset = pos.offset();\n            normalized = true;\n          });\n        }\n        return normalized ? Optional.some(CaretPosition(container, offset)) : Optional.none();\n      };\n      const normalize$22 = (dom3, rng) => {\n        const collapsed = rng.collapsed, normRng = rng.cloneRange();\n        const startPos = CaretPosition.fromRangeStart(rng);\n        normalizeEndPoint(dom3, collapsed, true, normRng).each((pos) => {\n          if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n            normRng.setStart(pos.container(), pos.offset());\n          }\n        });\n        if (!collapsed) {\n          normalizeEndPoint(dom3, collapsed, false, normRng).each((pos) => {\n            normRng.setEnd(pos.container(), pos.offset());\n          });\n        }\n        if (collapsed) {\n          normRng.collapse(true);\n        }\n        return isEq$4(rng, normRng) ? Optional.none() : Optional.some(normRng);\n      };\n      const splitText = (node, offset) => {\n        return node.splitText(offset);\n      };\n      const split = (rng) => {\n        let startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n        if (startContainer === endContainer && isText$8(startContainer)) {\n          if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n            endContainer = splitText(startContainer, startOffset);\n            startContainer = endContainer.previousSibling;\n            if (endOffset > startOffset) {\n              endOffset = endOffset - startOffset;\n              startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;\n              endOffset = endContainer.nodeValue.length;\n              startOffset = 0;\n            } else {\n              endOffset = 0;\n            }\n          }\n        } else {\n          if (isText$8(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n            startContainer = splitText(startContainer, startOffset);\n            startOffset = 0;\n          }\n          if (isText$8(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) {\n            endContainer = splitText(endContainer, endOffset).previousSibling;\n            endOffset = endContainer.nodeValue.length;\n          }\n        }\n        return {\n          startContainer,\n          startOffset,\n          endContainer,\n          endOffset\n        };\n      };\n      const RangeUtils = (dom3) => {\n        const walk2 = (rng, callback) => {\n          return walk$3(dom3, rng, callback);\n        };\n        const split$12 = split;\n        const normalize4 = (rng) => {\n          return normalize$22(dom3, rng).fold(never, (normalizedRng) => {\n            rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n            rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n            return true;\n          });\n        };\n        return {\n          walk: walk2,\n          split: split$12,\n          normalize: normalize4\n        };\n      };\n      RangeUtils.compareRanges = isEq$4;\n      RangeUtils.getCaretRangeFromPoint = fromPoint;\n      RangeUtils.getSelectedNode = getSelectedNode;\n      RangeUtils.getNode = getNode$1;\n      const Dimension = (name2, getOffset) => {\n        const set3 = (element, h2) => {\n          if (!isNumber2(h2) && !h2.match(/^[0-9]+$/)) {\n            throw new Error(name2 + \".set accepts only positive integer values. Value was \" + h2);\n          }\n          const dom3 = element.dom;\n          if (isSupported$1(dom3)) {\n            dom3.style[name2] = h2 + \"px\";\n          }\n        };\n        const get2 = (element) => {\n          const r4 = getOffset(element);\n          if (r4 <= 0 || r4 === null) {\n            const css = get$7(element, name2);\n            return parseFloat(css) || 0;\n          }\n          return r4;\n        };\n        const getOuter2 = get2;\n        const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n          const val = get$7(element, property);\n          const value2 = val === void 0 ? 0 : parseInt(val, 10);\n          return isNaN(value2) ? acc : acc + value2;\n        }, 0);\n        const max2 = (element, value2, properties) => {\n          const cumulativeInclusions = aggregate(element, properties);\n          const absoluteMax = value2 > cumulativeInclusions ? value2 - cumulativeInclusions : 0;\n          return absoluteMax;\n        };\n        return {\n          set: set3,\n          get: get2,\n          getOuter: getOuter2,\n          aggregate,\n          max: max2\n        };\n      };\n      const api = Dimension(\"height\", (element) => {\n        const dom3 = element.dom;\n        return inBody(element) ? dom3.getBoundingClientRect().height : dom3.offsetHeight;\n      });\n      const get$2 = (element) => api.get(element);\n      const getDocument = () => SugarElement.fromDom(document);\n      const walkUp = (navigation, doc) => {\n        const frame = navigation.view(doc);\n        return frame.fold(constant2([]), (f2) => {\n          const parent2 = navigation.owner(f2);\n          const rest = walkUp(navigation, parent2);\n          return [f2].concat(rest);\n        });\n      };\n      const pathTo = (element, navigation) => {\n        const d2 = navigation.owner(element);\n        return walkUp(navigation, d2);\n      };\n      const view = (doc) => {\n        var _a3;\n        const element = doc.dom === document ? Optional.none() : Optional.from((_a3 = doc.dom.defaultView) === null || _a3 === void 0 ? void 0 : _a3.frameElement);\n        return element.map(SugarElement.fromDom);\n      };\n      const owner = (element) => documentOrOwner(element);\n      var Navigation = /* @__PURE__ */ Object.freeze({\n        __proto__: null,\n        view,\n        owner\n      });\n      const find = (element) => {\n        const doc = getDocument();\n        const scroll = get$5(doc);\n        const frames = pathTo(element, Navigation);\n        const offset = viewport(element);\n        const r4 = foldr(frames, (b2, a2) => {\n          const loc = viewport(a2);\n          return {\n            left: b2.left + loc.left,\n            top: b2.top + loc.top\n          };\n        }, {\n          left: 0,\n          top: 0\n        });\n        return SugarPosition(r4.left + offset.left + scroll.left, r4.top + offset.top + scroll.top);\n      };\n      const excludeFromDescend = (element) => name(element) === \"textarea\";\n      const fireScrollIntoViewEvent = (editor, data2) => {\n        const scrollEvent = editor.dispatch(\"ScrollIntoView\", data2);\n        return scrollEvent.isDefaultPrevented();\n      };\n      const fireAfterScrollIntoViewEvent = (editor, data2) => {\n        editor.dispatch(\"AfterScrollIntoView\", data2);\n      };\n      const descend = (element, offset) => {\n        const children$1 = children(element);\n        if (children$1.length === 0 || excludeFromDescend(element)) {\n          return {\n            element,\n            offset\n          };\n        } else if (offset < children$1.length && !excludeFromDescend(children$1[offset])) {\n          return {\n            element: children$1[offset],\n            offset: 0\n          };\n        } else {\n          const last2 = children$1[children$1.length - 1];\n          if (excludeFromDescend(last2)) {\n            return {\n              element,\n              offset\n            };\n          } else {\n            if (name(last2) === \"img\") {\n              return {\n                element: last2,\n                offset: 1\n              };\n            } else if (isText$9(last2)) {\n              return {\n                element: last2,\n                offset: get$3(last2).length\n              };\n            } else {\n              return {\n                element: last2,\n                offset: children(last2).length\n              };\n            }\n          }\n        }\n      };\n      const markerInfo = (element, cleanupFun) => {\n        const pos = absolute(element);\n        const height = get$2(element);\n        return {\n          element,\n          bottom: pos.top + height,\n          height,\n          pos,\n          cleanup: cleanupFun\n        };\n      };\n      const createMarker$1 = (element, offset) => {\n        const startPoint = descend(element, offset);\n        const span = SugarElement.fromHtml('<span data-mce-bogus=\"all\" style=\"display: inline-block;\">' + ZWSP$1 + \"</span>\");\n        before$3(startPoint.element, span);\n        return markerInfo(span, () => remove$5(span));\n      };\n      const elementMarker = (element) => markerInfo(SugarElement.fromDom(element), noop);\n      const withMarker = (editor, f2, rng, alignToTop) => {\n        preserveWith(editor, (_s, _e) => applyWithMarker(editor, f2, rng, alignToTop), rng);\n      };\n      const withScrollEvents = (editor, doc, f2, marker, alignToTop) => {\n        const data2 = {\n          elm: marker.element.dom,\n          alignToTop\n        };\n        if (fireScrollIntoViewEvent(editor, data2)) {\n          return;\n        }\n        const scrollTop = get$5(doc).top;\n        f2(doc, scrollTop, marker, alignToTop);\n        fireAfterScrollIntoViewEvent(editor, data2);\n      };\n      const applyWithMarker = (editor, f2, rng, alignToTop) => {\n        const body = SugarElement.fromDom(editor.getBody());\n        const doc = SugarElement.fromDom(editor.getDoc());\n        reflow(body);\n        const marker = createMarker$1(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n        withScrollEvents(editor, doc, f2, marker, alignToTop);\n        marker.cleanup();\n      };\n      const withElement = (editor, element, f2, alignToTop) => {\n        const doc = SugarElement.fromDom(editor.getDoc());\n        withScrollEvents(editor, doc, f2, elementMarker(element), alignToTop);\n      };\n      const preserveWith = (editor, f2, rng) => {\n        const startElement = rng.startContainer;\n        const startOffset = rng.startOffset;\n        const endElement = rng.endContainer;\n        const endOffset = rng.endOffset;\n        f2(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement));\n        const newRng = editor.dom.createRng();\n        newRng.setStart(startElement, startOffset);\n        newRng.setEnd(endElement, endOffset);\n        editor.selection.setRng(rng);\n      };\n      const scrollToMarker = (marker, viewHeight, alignToTop, doc) => {\n        const pos = marker.pos;\n        if (alignToTop) {\n          to(pos.left, pos.top, doc);\n        } else {\n          const y2 = pos.top - viewHeight + marker.height;\n          to(pos.left, y2, doc);\n        }\n      };\n      const intoWindowIfNeeded = (doc, scrollTop, viewHeight, marker, alignToTop) => {\n        const viewportBottom = viewHeight + scrollTop;\n        const markerTop = marker.pos.top;\n        const markerBottom = marker.bottom;\n        const largerThanViewport = markerBottom - markerTop >= viewHeight;\n        if (markerTop < scrollTop) {\n          scrollToMarker(marker, viewHeight, alignToTop !== false, doc);\n        } else if (markerTop > viewportBottom) {\n          const align = largerThanViewport ? alignToTop !== false : alignToTop === true;\n          scrollToMarker(marker, viewHeight, align, doc);\n        } else if (markerBottom > viewportBottom && !largerThanViewport) {\n          scrollToMarker(marker, viewHeight, alignToTop === true, doc);\n        }\n      };\n      const intoWindow = (doc, scrollTop, marker, alignToTop) => {\n        const viewHeight = doc.dom.defaultView.innerHeight;\n        intoWindowIfNeeded(doc, scrollTop, viewHeight, marker, alignToTop);\n      };\n      const intoFrame = (doc, scrollTop, marker, alignToTop) => {\n        const frameViewHeight = doc.dom.defaultView.innerHeight;\n        intoWindowIfNeeded(doc, scrollTop, frameViewHeight, marker, alignToTop);\n        const op = find(marker.element);\n        const viewportBounds = getBounds(window);\n        if (op.top < viewportBounds.y) {\n          intoView(marker.element, alignToTop !== false);\n        } else if (op.top > viewportBounds.bottom) {\n          intoView(marker.element, alignToTop === true);\n        }\n      };\n      const rangeIntoWindow = (editor, rng, alignToTop) => withMarker(editor, intoWindow, rng, alignToTop);\n      const elementIntoWindow = (editor, element, alignToTop) => withElement(editor, element, intoWindow, alignToTop);\n      const rangeIntoFrame = (editor, rng, alignToTop) => withMarker(editor, intoFrame, rng, alignToTop);\n      const elementIntoFrame = (editor, element, alignToTop) => withElement(editor, element, intoFrame, alignToTop);\n      const scrollElementIntoView = (editor, element, alignToTop) => {\n        const scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n        scroller(editor, element, alignToTop);\n      };\n      const scrollRangeIntoView = (editor, rng, alignToTop) => {\n        const scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n        scroller(editor, rng, alignToTop);\n      };\n      const focus$1 = (element) => element.dom.focus();\n      const hasFocus$1 = (element) => {\n        const root2 = getRootNode(element).dom;\n        return element.dom === root2.activeElement;\n      };\n      const active$1 = (root2 = getDocument()) => Optional.from(root2.dom.activeElement).map(SugarElement.fromDom);\n      const search = (element) => active$1(getRootNode(element)).filter((e2) => element.dom.contains(e2.dom));\n      const clamp$1 = (offset, element) => {\n        const max2 = isText$9(element) ? get$3(element).length : children(element).length + 1;\n        if (offset > max2) {\n          return max2;\n        } else if (offset < 0) {\n          return 0;\n        }\n        return offset;\n      };\n      const normalizeRng = (rng) => SimSelection.range(rng.start, clamp$1(rng.soffset, rng.start), rng.finish, clamp$1(rng.foffset, rng.finish));\n      const isOrContains = (root2, elm) => !isRestrictedNode(elm.dom) && (contains2(root2, elm) || eq2(root2, elm));\n      const isRngInRoot = (root2) => (rng) => isOrContains(root2, rng.start) && isOrContains(root2, rng.finish);\n      const shouldStore = (editor) => editor.inline;\n      const nativeRangeToSelectionRange = (r4) => SimSelection.range(SugarElement.fromDom(r4.startContainer), r4.startOffset, SugarElement.fromDom(r4.endContainer), r4.endOffset);\n      const readRange = (win) => {\n        const selection = win.getSelection();\n        const rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));\n        return rng.map(nativeRangeToSelectionRange);\n      };\n      const getBookmark = (root2) => {\n        const win = defaultView(root2);\n        return readRange(win.dom).filter(isRngInRoot(root2));\n      };\n      const validate = (root2, bookmark) => Optional.from(bookmark).filter(isRngInRoot(root2)).map(normalizeRng);\n      const bookmarkToNativeRng = (bookmark) => {\n        const rng = document.createRange();\n        try {\n          rng.setStart(bookmark.start.dom, bookmark.soffset);\n          rng.setEnd(bookmark.finish.dom, bookmark.foffset);\n          return Optional.some(rng);\n        } catch (_2) {\n          return Optional.none();\n        }\n      };\n      const store2 = (editor) => {\n        const newBookmark = shouldStore(editor) ? getBookmark(SugarElement.fromDom(editor.getBody())) : Optional.none();\n        editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n      };\n      const getRng = (editor) => {\n        const bookmark = editor.bookmark ? editor.bookmark : Optional.none();\n        return bookmark.bind((x2) => validate(SugarElement.fromDom(editor.getBody()), x2)).bind(bookmarkToNativeRng);\n      };\n      const restore = (editor) => {\n        getRng(editor).each((rng) => editor.selection.setRng(rng));\n      };\n      const isEditorUIElement$1 = (elm) => {\n        const className = elm.className.toString();\n        return className.indexOf(\"tox-\") !== -1 || className.indexOf(\"mce-\") !== -1;\n      };\n      const FocusManager = { isEditorUIElement: isEditorUIElement$1 };\n      const wrappedSetTimeout = (callback, time) => {\n        if (!isNumber2(time)) {\n          time = 0;\n        }\n        return setTimeout(callback, time);\n      };\n      const wrappedSetInterval = (callback, time) => {\n        if (!isNumber2(time)) {\n          time = 0;\n        }\n        return setInterval(callback, time);\n      };\n      const Delay = {\n        setEditorTimeout: (editor, callback, time) => {\n          return wrappedSetTimeout(() => {\n            if (!editor.removed) {\n              callback();\n            }\n          }, time);\n        },\n        setEditorInterval: (editor, callback, time) => {\n          const timer = wrappedSetInterval(() => {\n            if (!editor.removed) {\n              callback();\n            } else {\n              clearInterval(timer);\n            }\n          }, time);\n          return timer;\n        }\n      };\n      const isManualNodeChange = (e2) => {\n        return e2.type === \"nodechange\" && e2.selectionChange;\n      };\n      const registerPageMouseUp = (editor, throttledStore) => {\n        const mouseUpPage = () => {\n          throttledStore.throttle();\n        };\n        DOMUtils.DOM.bind(document, \"mouseup\", mouseUpPage);\n        editor.on(\"remove\", () => {\n          DOMUtils.DOM.unbind(document, \"mouseup\", mouseUpPage);\n        });\n      };\n      const registerMouseUp = (editor, throttledStore) => {\n        editor.on(\"mouseup touchend\", (_e) => {\n          throttledStore.throttle();\n        });\n      };\n      const registerEditorEvents = (editor, throttledStore) => {\n        registerMouseUp(editor, throttledStore);\n        editor.on(\"keyup NodeChange AfterSetSelectionRange\", (e2) => {\n          if (!isManualNodeChange(e2)) {\n            store2(editor);\n          }\n        });\n      };\n      const register$6 = (editor) => {\n        const throttledStore = first$1(() => {\n          store2(editor);\n        }, 0);\n        editor.on(\"init\", () => {\n          if (editor.inline) {\n            registerPageMouseUp(editor, throttledStore);\n          }\n          registerEditorEvents(editor, throttledStore);\n        });\n        editor.on(\"remove\", () => {\n          throttledStore.cancel();\n        });\n      };\n      let documentFocusInHandler;\n      const DOM$9 = DOMUtils.DOM;\n      const isEditorUIElement = (elm) => {\n        return FocusManager.isEditorUIElement(elm);\n      };\n      const isEditorContentAreaElement = (elm) => {\n        const classList = elm.classList;\n        if (classList !== void 0) {\n          return classList.contains(\"tox-edit-area\") || classList.contains(\"tox-edit-area__iframe\") || classList.contains(\"mce-content-body\");\n        } else {\n          return false;\n        }\n      };\n      const isUIElement = (editor, elm) => {\n        const customSelector = getCustomUiSelector(editor);\n        const parent2 = DOM$9.getParent(elm, (elm2) => {\n          return isEditorUIElement(elm2) || (customSelector ? editor.dom.is(elm2, customSelector) : false);\n        });\n        return parent2 !== null;\n      };\n      const getActiveElement = (editor) => {\n        try {\n          const root2 = getRootNode(SugarElement.fromDom(editor.getElement()));\n          return active$1(root2).fold(() => document.body, (x2) => x2.dom);\n        } catch (ex) {\n          return document.body;\n        }\n      };\n      const registerEvents$1 = (editorManager, e2) => {\n        const editor = e2.editor;\n        register$6(editor);\n        editor.on(\"focusin\", () => {\n          const focusedEditor = editorManager.focusedEditor;\n          if (focusedEditor !== editor) {\n            if (focusedEditor) {\n              focusedEditor.dispatch(\"blur\", { focusedEditor: editor });\n            }\n            editorManager.setActive(editor);\n            editorManager.focusedEditor = editor;\n            editor.dispatch(\"focus\", { blurredEditor: focusedEditor });\n            editor.focus(true);\n          }\n        });\n        editor.on(\"focusout\", () => {\n          Delay.setEditorTimeout(editor, () => {\n            const focusedEditor = editorManager.focusedEditor;\n            if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) {\n              editor.dispatch(\"blur\", { focusedEditor: null });\n              editorManager.focusedEditor = null;\n            }\n          });\n        });\n        if (!documentFocusInHandler) {\n          documentFocusInHandler = (e3) => {\n            const activeEditor = editorManager.activeEditor;\n            if (activeEditor) {\n              getOriginalEventTarget(e3).each((target) => {\n                if (target.ownerDocument === document) {\n                  if (target !== document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {\n                    activeEditor.dispatch(\"blur\", { focusedEditor: null });\n                    editorManager.focusedEditor = null;\n                  }\n                }\n              });\n            }\n          };\n          DOM$9.bind(document, \"focusin\", documentFocusInHandler);\n        }\n      };\n      const unregisterDocumentEvents = (editorManager, e2) => {\n        if (editorManager.focusedEditor === e2.editor) {\n          editorManager.focusedEditor = null;\n        }\n        if (!editorManager.activeEditor) {\n          DOM$9.unbind(document, \"focusin\", documentFocusInHandler);\n          documentFocusInHandler = null;\n        }\n      };\n      const setup$v = (editorManager) => {\n        editorManager.on(\"AddEditor\", curry(registerEvents$1, editorManager));\n        editorManager.on(\"RemoveEditor\", curry(unregisterDocumentEvents, editorManager));\n      };\n      const getContentEditableHost = (editor, node) => editor.dom.getParent(node, (node2) => editor.dom.getContentEditable(node2) === \"true\");\n      const getCollapsedNode = (rng) => rng.collapsed ? Optional.from(getNode$1(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none();\n      const getFocusInElement = (root2, rng) => getCollapsedNode(rng).bind((node) => {\n        if (isTableSection(node)) {\n          return Optional.some(node);\n        } else if (contains2(root2, node) === false) {\n          return Optional.some(root2);\n        } else {\n          return Optional.none();\n        }\n      });\n      const normalizeSelection$1 = (editor, rng) => {\n        getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind((elm) => {\n          return firstPositionIn(elm.dom);\n        }).fold(() => {\n          editor.selection.normalize();\n          return;\n        }, (caretPos) => editor.selection.setRng(caretPos.toRange()));\n      };\n      const focusBody = (body) => {\n        if (body.setActive) {\n          try {\n            body.setActive();\n          } catch (ex) {\n            body.focus();\n          }\n        } else {\n          body.focus();\n        }\n      };\n      const hasElementFocus = (elm) => hasFocus$1(elm) || search(elm).isSome();\n      const hasIframeFocus = (editor) => editor.iframeElement && hasFocus$1(SugarElement.fromDom(editor.iframeElement));\n      const hasInlineFocus = (editor) => {\n        const rawBody = editor.getBody();\n        return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n      };\n      const hasUiFocus = (editor) => {\n        const dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n        return active$1(dos).filter((elem) => !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom)).isSome();\n      };\n      const hasFocus = (editor) => editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n      const hasEditorOrUiFocus = (editor) => hasFocus(editor) || hasUiFocus(editor);\n      const focusEditor = (editor) => {\n        const selection = editor.selection;\n        const body = editor.getBody();\n        let rng = selection.getRng();\n        editor.quirks.refreshContentEditable();\n        if (editor.bookmark !== void 0 && hasFocus(editor) === false) {\n          getRng(editor).each((bookmarkRng) => {\n            editor.selection.setRng(bookmarkRng);\n            rng = bookmarkRng;\n          });\n        }\n        const contentEditableHost = getContentEditableHost(editor, selection.getNode());\n        if (editor.dom.isChildOf(contentEditableHost, body)) {\n          focusBody(contentEditableHost);\n          normalizeSelection$1(editor, rng);\n          activateEditor(editor);\n          return;\n        }\n        if (!editor.inline) {\n          if (!Env.browser.isOpera()) {\n            focusBody(body);\n          }\n          editor.getWin().focus();\n        }\n        if (Env.browser.isFirefox() || editor.inline) {\n          focusBody(body);\n          normalizeSelection$1(editor, rng);\n        }\n        activateEditor(editor);\n      };\n      const activateEditor = (editor) => editor.editorManager.setActive(editor);\n      const focus = (editor, skipFocus) => {\n        if (editor.removed) {\n          return;\n        }\n        if (skipFocus) {\n          activateEditor(editor);\n        } else {\n          focusEditor(editor);\n        }\n      };\n      const getEndpointElement = (root2, rng, start2, real, resolve2) => {\n        const container = start2 ? rng.startContainer : rng.endContainer;\n        const offset = start2 ? rng.startOffset : rng.endOffset;\n        return Optional.from(container).map(SugarElement.fromDom).map((elm) => !real || !rng.collapsed ? child$1(elm, resolve2(elm, offset)).getOr(elm) : elm).bind((elm) => isElement$7(elm) ? Optional.some(elm) : parent(elm).filter(isElement$7)).map((elm) => elm.dom).getOr(root2);\n      };\n      const getStart = (root2, rng, real) => getEndpointElement(root2, rng, true, real, (elm, offset) => Math.min(childNodesCount(elm), offset));\n      const getEnd$1 = (root2, rng, real) => getEndpointElement(root2, rng, false, real, (elm, offset) => offset > 0 ? offset - 1 : offset);\n      const skipEmptyTextNodes = (node, forwards) => {\n        const orig = node;\n        while (node && isText$8(node) && node.length === 0) {\n          node = forwards ? node.nextSibling : node.previousSibling;\n        }\n        return node || orig;\n      };\n      const getNode = (root2, rng) => {\n        let elm, startContainer, endContainer;\n        if (!rng) {\n          return root2;\n        }\n        startContainer = rng.startContainer;\n        endContainer = rng.endContainer;\n        const startOffset = rng.startOffset;\n        const endOffset = rng.endOffset;\n        elm = rng.commonAncestorContainer;\n        if (!rng.collapsed) {\n          if (startContainer === endContainer) {\n            if (endOffset - startOffset < 2) {\n              if (startContainer.hasChildNodes()) {\n                elm = startContainer.childNodes[startOffset];\n              }\n            }\n          }\n          if (startContainer.nodeType === 3 && endContainer.nodeType === 3) {\n            if (startContainer.length === startOffset) {\n              startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n            } else {\n              startContainer = startContainer.parentNode;\n            }\n            if (endOffset === 0) {\n              endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n            } else {\n              endContainer = endContainer.parentNode;\n            }\n            if (startContainer && startContainer === endContainer) {\n              return startContainer;\n            }\n          }\n        }\n        if (elm && elm.nodeType === 3) {\n          return elm.parentNode;\n        }\n        return elm;\n      };\n      const getSelectedBlocks = (dom3, rng, startElm, endElm) => {\n        let node;\n        const selectedBlocks = [];\n        const root2 = dom3.getRoot();\n        startElm = dom3.getParent(startElm || getStart(root2, rng, rng.collapsed), dom3.isBlock);\n        endElm = dom3.getParent(endElm || getEnd$1(root2, rng, rng.collapsed), dom3.isBlock);\n        if (startElm && startElm !== root2) {\n          selectedBlocks.push(startElm);\n        }\n        if (startElm && endElm && startElm !== endElm) {\n          node = startElm;\n          const walker = new DomTreeWalker(startElm, root2);\n          while ((node = walker.next()) && node !== endElm) {\n            if (dom3.isBlock(node)) {\n              selectedBlocks.push(node);\n            }\n          }\n        }\n        if (endElm && startElm !== endElm && endElm !== root2) {\n          selectedBlocks.push(endElm);\n        }\n        return selectedBlocks;\n      };\n      const select = (dom3, node, content) => Optional.from(node).map((node2) => {\n        const idx = dom3.nodeIndex(node2);\n        const rng = dom3.createRng();\n        rng.setStart(node2.parentNode, idx);\n        rng.setEnd(node2.parentNode, idx + 1);\n        if (content) {\n          moveEndPoint(dom3, rng, node2, true);\n          moveEndPoint(dom3, rng, node2, false);\n        }\n        return rng;\n      });\n      const processRanges = (editor, ranges) => map$3(ranges, (range2) => {\n        const evt = editor.dispatch(\"GetSelectionRange\", { range: range2 });\n        return evt.range !== range2 ? evt.range : range2;\n      });\n      const getEnd = (element) => name(element) === \"img\" ? 1 : getOption(element).fold(() => children(element).length, (v2) => v2.length);\n      const isTextNodeWithCursorPosition = (el) => getOption(el).filter((text3) => text3.trim().length !== 0 || text3.indexOf(nbsp) > -1).isSome();\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));\n      };\n      const first = (element) => descendant$1(element, isCursorPosition);\n      const last = (element) => descendantRtl(element, isCursorPosition);\n      const descendantRtl = (scope, predicate) => {\n        const descend2 = (element) => {\n          const children$1 = children(element);\n          for (let i3 = children$1.length - 1; i3 >= 0; i3--) {\n            const child2 = children$1[i3];\n            if (predicate(child2)) {\n              return Optional.some(child2);\n            }\n            const res = descend2(child2);\n            if (res.isSome()) {\n              return res;\n            }\n          }\n          return Optional.none();\n        };\n        return descend2(scope);\n      };\n      const autocompleteSelector = \"[data-mce-autocompleter]\";\n      const create$8 = (editor, range2) => {\n        if (findIn(SugarElement.fromDom(editor.getBody())).isNone()) {\n          const wrapper = SugarElement.fromHtml('<span data-mce-autocompleter=\"1\" data-mce-bogus=\"1\"></span>', editor.getDoc());\n          append$1(wrapper, SugarElement.fromDom(range2.extractContents()));\n          range2.insertNode(wrapper.dom);\n          parent(wrapper).each((elm) => elm.dom.normalize());\n          last(wrapper).map((last2) => {\n            editor.selection.setCursorLocation(last2.dom, getEnd(last2));\n          });\n        }\n      };\n      const detect$1 = (elm) => closest$3(elm, autocompleteSelector);\n      const findIn = (elm) => descendant(elm, autocompleteSelector);\n      const remove$3 = (editor, elm) => findIn(elm).each((wrapper) => {\n        const bookmark = editor.selection.getBookmark();\n        unwrap(wrapper);\n        editor.selection.moveToBookmark(bookmark);\n      });\n      const typeLookup = {\n        \"#text\": 3,\n        \"#comment\": 8,\n        \"#cdata\": 4,\n        \"#pi\": 7,\n        \"#doctype\": 10,\n        \"#document-fragment\": 11\n      };\n      const walk$2 = (node, root2, prev2) => {\n        const startName = prev2 ? \"lastChild\" : \"firstChild\";\n        const siblingName = prev2 ? \"prev\" : \"next\";\n        if (node[startName]) {\n          return node[startName];\n        }\n        if (node !== root2) {\n          let sibling2 = node[siblingName];\n          if (sibling2) {\n            return sibling2;\n          }\n          for (let parent2 = node.parent; parent2 && parent2 !== root2; parent2 = parent2.parent) {\n            sibling2 = parent2[siblingName];\n            if (sibling2) {\n              return sibling2;\n            }\n          }\n        }\n      };\n      const isEmptyTextNode = (node) => {\n        if (!isWhitespaceText(node.value)) {\n          return false;\n        }\n        const parentNode = node.parent;\n        if (parentNode && (parentNode.name !== \"span\" || parentNode.attr(\"style\")) && /^[ ]+$/.test(node.value)) {\n          return false;\n        }\n        return true;\n      };\n      const isNonEmptyElement = (node) => {\n        const isNamedAnchor2 = node.name === \"a\" && !node.attr(\"href\") && node.attr(\"id\");\n        return node.attr(\"name\") || node.attr(\"id\") && !node.firstChild || node.attr(\"data-mce-bookmark\") || isNamedAnchor2;\n      };\n      class AstNode {\n        constructor(name2, type2) {\n          this.name = name2;\n          this.type = type2;\n          if (type2 === 1) {\n            this.attributes = [];\n            this.attributes.map = {};\n          }\n        }\n        static create(name2, attrs) {\n          const node = new AstNode(name2, typeLookup[name2] || 1);\n          if (attrs) {\n            each$f(attrs, (value2, attrName) => {\n              node.attr(attrName, value2);\n            });\n          }\n          return node;\n        }\n        replace(node) {\n          const self2 = this;\n          if (node.parent) {\n            node.remove();\n          }\n          self2.insert(node, self2);\n          self2.remove();\n          return self2;\n        }\n        attr(name2, value2) {\n          const self2 = this;\n          let attrs;\n          if (typeof name2 !== \"string\") {\n            if (name2 !== void 0 && name2 !== null) {\n              each$f(name2, (value3, key) => {\n                self2.attr(key, value3);\n              });\n            }\n            return self2;\n          }\n          if (attrs = self2.attributes) {\n            if (value2 !== void 0) {\n              if (value2 === null) {\n                if (name2 in attrs.map) {\n                  delete attrs.map[name2];\n                  let i3 = attrs.length;\n                  while (i3--) {\n                    if (attrs[i3].name === name2) {\n                      attrs.splice(i3, 1);\n                      return self2;\n                    }\n                  }\n                }\n                return self2;\n              }\n              if (name2 in attrs.map) {\n                let i3 = attrs.length;\n                while (i3--) {\n                  if (attrs[i3].name === name2) {\n                    attrs[i3].value = value2;\n                    break;\n                  }\n                }\n              } else {\n                attrs.push({\n                  name: name2,\n                  value: value2\n                });\n              }\n              attrs.map[name2] = value2;\n              return self2;\n            }\n            return attrs.map[name2];\n          }\n        }\n        clone() {\n          const self2 = this;\n          const clone2 = new AstNode(self2.name, self2.type);\n          let selfAttrs;\n          if (selfAttrs = self2.attributes) {\n            const cloneAttrs = [];\n            cloneAttrs.map = {};\n            for (let i3 = 0, l2 = selfAttrs.length; i3 < l2; i3++) {\n              const selfAttr = selfAttrs[i3];\n              if (selfAttr.name !== \"id\") {\n                cloneAttrs[cloneAttrs.length] = {\n                  name: selfAttr.name,\n                  value: selfAttr.value\n                };\n                cloneAttrs.map[selfAttr.name] = selfAttr.value;\n              }\n            }\n            clone2.attributes = cloneAttrs;\n          }\n          clone2.value = self2.value;\n          return clone2;\n        }\n        wrap(wrapper) {\n          const self2 = this;\n          self2.parent.insert(wrapper, self2);\n          wrapper.append(self2);\n          return self2;\n        }\n        unwrap() {\n          const self2 = this;\n          for (let node = self2.firstChild; node; ) {\n            const next2 = node.next;\n            self2.insert(node, self2, true);\n            node = next2;\n          }\n          self2.remove();\n        }\n        remove() {\n          const self2 = this, parent2 = self2.parent, next2 = self2.next, prev2 = self2.prev;\n          if (parent2) {\n            if (parent2.firstChild === self2) {\n              parent2.firstChild = next2;\n              if (next2) {\n                next2.prev = null;\n              }\n            } else {\n              prev2.next = next2;\n            }\n            if (parent2.lastChild === self2) {\n              parent2.lastChild = prev2;\n              if (prev2) {\n                prev2.next = null;\n              }\n            } else {\n              next2.prev = prev2;\n            }\n            self2.parent = self2.next = self2.prev = null;\n          }\n          return self2;\n        }\n        append(node) {\n          const self2 = this;\n          if (node.parent) {\n            node.remove();\n          }\n          const last2 = self2.lastChild;\n          if (last2) {\n            last2.next = node;\n            node.prev = last2;\n            self2.lastChild = node;\n          } else {\n            self2.lastChild = self2.firstChild = node;\n          }\n          node.parent = self2;\n          return node;\n        }\n        insert(node, refNode, before2) {\n          if (node.parent) {\n            node.remove();\n          }\n          const parent2 = refNode.parent || this;\n          if (before2) {\n            if (refNode === parent2.firstChild) {\n              parent2.firstChild = node;\n            } else {\n              refNode.prev.next = node;\n            }\n            node.prev = refNode.prev;\n            node.next = refNode;\n            refNode.prev = node;\n          } else {\n            if (refNode === parent2.lastChild) {\n              parent2.lastChild = node;\n            } else {\n              refNode.next.prev = node;\n            }\n            node.next = refNode.next;\n            node.prev = refNode;\n            refNode.next = node;\n          }\n          node.parent = parent2;\n          return node;\n        }\n        getAll(name2) {\n          const self2 = this;\n          const collection = [];\n          for (let node = self2.firstChild; node; node = walk$2(node, self2)) {\n            if (node.name === name2) {\n              collection.push(node);\n            }\n          }\n          return collection;\n        }\n        children() {\n          const self2 = this;\n          const collection = [];\n          for (let node = self2.firstChild; node; node = node.next) {\n            collection.push(node);\n          }\n          return collection;\n        }\n        empty() {\n          const self2 = this;\n          if (self2.firstChild) {\n            const nodes = [];\n            for (let node = self2.firstChild; node; node = walk$2(node, self2)) {\n              nodes.push(node);\n            }\n            let i3 = nodes.length;\n            while (i3--) {\n              const node = nodes[i3];\n              node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n            }\n          }\n          self2.firstChild = self2.lastChild = null;\n          return self2;\n        }\n        isEmpty(elements, whitespace = {}, predicate) {\n          const self2 = this;\n          let node = self2.firstChild;\n          if (isNonEmptyElement(self2)) {\n            return false;\n          }\n          if (node) {\n            do {\n              if (node.type === 1) {\n                if (node.attr(\"data-mce-bogus\")) {\n                  continue;\n                }\n                if (elements[node.name]) {\n                  return false;\n                }\n                if (isNonEmptyElement(node)) {\n                  return false;\n                }\n              }\n              if (node.type === 8) {\n                return false;\n              }\n              if (node.type === 3 && !isEmptyTextNode(node)) {\n                return false;\n              }\n              if (node.type === 3 && node.parent && whitespace[node.parent.name] && isWhitespaceText(node.value)) {\n                return false;\n              }\n              if (predicate && predicate(node)) {\n                return false;\n              }\n            } while (node = walk$2(node, self2));\n          }\n          return true;\n        }\n        walk(prev2) {\n          return walk$2(this, null, prev2);\n        }\n      }\n      const isConditionalComment = (html2, startIndex) => /^\\s*\\[if [\\w\\W]+\\]>.*<!\\[endif\\](--!?)?>/.test(html2.substr(startIndex));\n      const findCommentEndIndex = (html2, isBogus2, startIndex = 0) => {\n        const lcHtml = html2.toLowerCase();\n        if (lcHtml.indexOf(\"[if \", startIndex) !== -1 && isConditionalComment(lcHtml, startIndex)) {\n          const endIfIndex = lcHtml.indexOf(\"[endif]\", startIndex);\n          return lcHtml.indexOf(\">\", endIfIndex);\n        } else {\n          if (isBogus2) {\n            const endIndex = lcHtml.indexOf(\">\", startIndex);\n            return endIndex !== -1 ? endIndex : lcHtml.length;\n          } else {\n            const endCommentRegexp = /--!?>/g;\n            endCommentRegexp.lastIndex = startIndex;\n            const match4 = endCommentRegexp.exec(html2);\n            return match4 ? match4.index + match4[0].length : lcHtml.length;\n          }\n        }\n      };\n      const findMatchingEndTagIndex = (schema, html2, startIndex) => {\n        const startTagRegExp = /<([!?\\/])?([A-Za-z0-9\\-_:.]+)/g;\n        const endTagRegExp = /(?:\\s(?:[^'\">]+(?:\"[^\"]*\"|'[^']*'))*[^\"'>]*(?:\"[^\">]*|'[^'>]*)?|\\s*|\\/)>/g;\n        const voidElements = schema.getVoidElements();\n        let count2 = 1, index2 = startIndex;\n        while (count2 !== 0) {\n          startTagRegExp.lastIndex = index2;\n          while (true) {\n            const startMatch = startTagRegExp.exec(html2);\n            if (startMatch === null) {\n              return index2;\n            } else if (startMatch[1] === \"!\") {\n              if (startsWith(startMatch[2], \"--\")) {\n                index2 = findCommentEndIndex(html2, false, startMatch.index + \"!--\".length);\n              } else {\n                index2 = findCommentEndIndex(html2, true, startMatch.index + 1);\n              }\n              break;\n            } else {\n              endTagRegExp.lastIndex = startTagRegExp.lastIndex;\n              const endMatch = endTagRegExp.exec(html2);\n              if (isNull(endMatch) || endMatch.index !== startTagRegExp.lastIndex) {\n                continue;\n              }\n              if (startMatch[1] === \"/\") {\n                count2 -= 1;\n              } else if (!has$2(voidElements, startMatch[2])) {\n                count2 += 1;\n              }\n              index2 = startTagRegExp.lastIndex + endMatch[0].length;\n              break;\n            }\n          }\n        }\n        return index2;\n      };\n      const trimHtml$1 = (tempAttrs, html2) => {\n        const trimContentRegExp = new RegExp([\"\\\\s?(\" + tempAttrs.join(\"|\") + ')=\"[^\"]+\"'].join(\"|\"), \"gi\");\n        return html2.replace(trimContentRegExp, \"\");\n      };\n      const trimInternal = (serializer, html2) => {\n        const bogusAllRegExp = /<(\\w+) [^>]*data-mce-bogus=\"all\"[^>]*>/g;\n        const schema = serializer.schema;\n        let content = trimHtml$1(serializer.getTempAttrs(), html2);\n        const voidElements = schema.getVoidElements();\n        let matches;\n        while (matches = bogusAllRegExp.exec(content)) {\n          const index2 = bogusAllRegExp.lastIndex;\n          const matchLength = matches[0].length;\n          let endTagIndex;\n          if (voidElements[matches[1]]) {\n            endTagIndex = index2;\n          } else {\n            endTagIndex = findMatchingEndTagIndex(schema, content, index2);\n          }\n          content = content.substring(0, index2 - matchLength) + content.substring(endTagIndex);\n          bogusAllRegExp.lastIndex = index2 - matchLength;\n        }\n        return trim$1(content);\n      };\n      const trimExternal = trimInternal;\n      const trimEmptyContents = (editor, html2) => {\n        const blockName = getForcedRootBlock(editor);\n        const emptyRegExp = new RegExp(`^(<${blockName}[^>]*>(&nbsp;|&#160;|\\\\s| |<br \\\\/>|)<\\\\/${blockName}>[\\r\n]*|<br \\\\/>[\\r\n]*)$`);\n        return html2.replace(emptyRegExp, \"\");\n      };\n      const getContentFromBody = (editor, args, body) => {\n        let content;\n        if (args.format === \"raw\") {\n          content = Tools.trim(trimExternal(editor.serializer, body.innerHTML));\n        } else if (args.format === \"text\") {\n          content = editor.dom.isEmpty(body) ? \"\" : trim$1(body.innerText || body.textContent);\n        } else if (args.format === \"tree\") {\n          content = editor.serializer.serialize(body, args);\n        } else {\n          content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n        }\n        const shouldTrim = args.format !== \"text\" && !isWsPreserveElement(SugarElement.fromDom(body));\n        return shouldTrim && isString2(content) ? Tools.trim(content) : content;\n      };\n      const getContentInternal = (editor, args) => Optional.from(editor.getBody()).fold(constant2(args.format === \"tree\" ? new AstNode(\"body\", 11) : \"\"), (body) => getContentFromBody(editor, args, body));\n      const each$b = Tools.each;\n      const ElementUtils = (dom3) => {\n        const compare2 = (node1, node2) => {\n          if (node1.nodeName !== node2.nodeName) {\n            return false;\n          }\n          const getAttribs = (node) => {\n            const attribs = {};\n            each$b(dom3.getAttribs(node), (attr) => {\n              const name2 = attr.nodeName.toLowerCase();\n              if (name2.indexOf(\"_\") !== 0 && name2 !== \"style\" && name2.indexOf(\"data-\") !== 0) {\n                attribs[name2] = dom3.getAttrib(node, name2);\n              }\n            });\n            return attribs;\n          };\n          const compareObjects = (obj1, obj2) => {\n            let value2, name2;\n            for (name2 in obj1) {\n              if (has$2(obj1, name2)) {\n                value2 = obj2[name2];\n                if (typeof value2 === \"undefined\") {\n                  return false;\n                }\n                if (obj1[name2] !== value2) {\n                  return false;\n                }\n                delete obj2[name2];\n              }\n            }\n            for (name2 in obj2) {\n              if (has$2(obj2, name2)) {\n                return false;\n              }\n            }\n            return true;\n          };\n          if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n            return false;\n          }\n          if (!compareObjects(dom3.parseStyle(dom3.getAttrib(node1, \"style\")), dom3.parseStyle(dom3.getAttrib(node2, \"style\")))) {\n            return false;\n          }\n          return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n        };\n        return { compare: compare2 };\n      };\n      const makeMap$1 = Tools.makeMap;\n      const Writer = (settings) => {\n        const html2 = [];\n        settings = settings || {};\n        const indent2 = settings.indent;\n        const indentBefore = makeMap$1(settings.indent_before || \"\");\n        const indentAfter = makeMap$1(settings.indent_after || \"\");\n        const encode2 = Entities.getEncodeFunc(settings.entity_encoding || \"raw\", settings.entities);\n        const htmlOutput = settings.element_format !== \"xhtml\";\n        return {\n          start: (name2, attrs, empty2) => {\n            let i3, l2, attr, value2;\n            if (indent2 && indentBefore[name2] && html2.length > 0) {\n              value2 = html2[html2.length - 1];\n              if (value2.length > 0 && value2 !== \"\\n\") {\n                html2.push(\"\\n\");\n              }\n            }\n            html2.push(\"<\", name2);\n            if (attrs) {\n              for (i3 = 0, l2 = attrs.length; i3 < l2; i3++) {\n                attr = attrs[i3];\n                html2.push(\" \", attr.name, '=\"', encode2(attr.value, true), '\"');\n              }\n            }\n            if (!empty2 || htmlOutput) {\n              html2[html2.length] = \">\";\n            } else {\n              html2[html2.length] = \" />\";\n            }\n            if (empty2 && indent2 && indentAfter[name2] && html2.length > 0) {\n              value2 = html2[html2.length - 1];\n              if (value2.length > 0 && value2 !== \"\\n\") {\n                html2.push(\"\\n\");\n              }\n            }\n          },\n          end: (name2) => {\n            let value2;\n            html2.push(\"</\", name2, \">\");\n            if (indent2 && indentAfter[name2] && html2.length > 0) {\n              value2 = html2[html2.length - 1];\n              if (value2.length > 0 && value2 !== \"\\n\") {\n                html2.push(\"\\n\");\n              }\n            }\n          },\n          text: (text3, raw) => {\n            if (text3.length > 0) {\n              html2[html2.length] = raw ? text3 : encode2(text3);\n            }\n          },\n          cdata: (text3) => {\n            html2.push(\"<![CDATA[\", text3, \"]]>\");\n          },\n          comment: (text3) => {\n            html2.push(\"<!--\", text3, \"-->\");\n          },\n          pi: (name2, text3) => {\n            if (text3) {\n              html2.push(\"<?\", name2, \" \", encode2(text3), \"?>\");\n            } else {\n              html2.push(\"<?\", name2, \"?>\");\n            }\n            if (indent2) {\n              html2.push(\"\\n\");\n            }\n          },\n          doctype: (text3) => {\n            html2.push(\"<!DOCTYPE\", text3, \">\", indent2 ? \"\\n\" : \"\");\n          },\n          reset: () => {\n            html2.length = 0;\n          },\n          getContent: () => {\n            return html2.join(\"\").replace(/\\n$/, \"\");\n          }\n        };\n      };\n      const HtmlSerializer = (settings, schema = Schema()) => {\n        const writer = Writer(settings);\n        settings = settings || {};\n        settings.validate = \"validate\" in settings ? settings.validate : true;\n        const serialize = (node) => {\n          const validate2 = settings.validate;\n          const handlers = {\n            3: (node2) => {\n              writer.text(node2.value, node2.raw);\n            },\n            8: (node2) => {\n              writer.comment(node2.value);\n            },\n            7: (node2) => {\n              writer.pi(node2.name, node2.value);\n            },\n            10: (node2) => {\n              writer.doctype(node2.value);\n            },\n            4: (node2) => {\n              writer.cdata(node2.value);\n            },\n            11: (node2) => {\n              if (node2 = node2.firstChild) {\n                do {\n                  walk2(node2);\n                } while (node2 = node2.next);\n              }\n            }\n          };\n          writer.reset();\n          const walk2 = (node2) => {\n            const handler = handlers[node2.type];\n            if (!handler) {\n              const name2 = node2.name;\n              const isEmpty3 = name2 in schema.getVoidElements();\n              let attrs = node2.attributes;\n              if (validate2 && attrs && attrs.length > 1) {\n                const sortedAttrs = [];\n                sortedAttrs.map = {};\n                const elementRule = schema.getElementRule(node2.name);\n                if (elementRule) {\n                  for (let i3 = 0, l2 = elementRule.attributesOrder.length; i3 < l2; i3++) {\n                    const attrName = elementRule.attributesOrder[i3];\n                    if (attrName in attrs.map) {\n                      const attrValue = attrs.map[attrName];\n                      sortedAttrs.map[attrName] = attrValue;\n                      sortedAttrs.push({\n                        name: attrName,\n                        value: attrValue\n                      });\n                    }\n                  }\n                  for (let i3 = 0, l2 = attrs.length; i3 < l2; i3++) {\n                    const attrName = attrs[i3].name;\n                    if (!(attrName in sortedAttrs.map)) {\n                      const attrValue = attrs.map[attrName];\n                      sortedAttrs.map[attrName] = attrValue;\n                      sortedAttrs.push({\n                        name: attrName,\n                        value: attrValue\n                      });\n                    }\n                  }\n                  attrs = sortedAttrs;\n                }\n              }\n              writer.start(name2, attrs, isEmpty3);\n              if (!isEmpty3) {\n                let child2 = node2.firstChild;\n                if (child2) {\n                  if ((name2 === \"pre\" || name2 === \"textarea\") && child2.type === 3 && child2.value[0] === \"\\n\") {\n                    writer.text(\"\\n\", true);\n                  }\n                  do {\n                    walk2(child2);\n                  } while (child2 = child2.next);\n                }\n                writer.end(name2);\n              }\n            } else {\n              handler(node2);\n            }\n          };\n          if (node.type === 1 && !settings.inner) {\n            walk2(node);\n          } else if (node.type === 3) {\n            handlers[3](node);\n          } else {\n            handlers[11](node);\n          }\n          return writer.getContent();\n        };\n        return { serialize };\n      };\n      const nonInheritableStyles = /* @__PURE__ */ new Set();\n      (() => {\n        const nonInheritableStylesArr = [\n          \"margin\",\n          \"margin-left\",\n          \"margin-right\",\n          \"margin-top\",\n          \"margin-bottom\",\n          \"padding\",\n          \"padding-left\",\n          \"padding-right\",\n          \"padding-top\",\n          \"padding-bottom\",\n          \"border\",\n          \"border-width\",\n          \"border-style\",\n          \"border-color\",\n          \"background\",\n          \"background-attachment\",\n          \"background-clip\",\n          \"background-color\",\n          \"background-image\",\n          \"background-origin\",\n          \"background-position\",\n          \"background-repeat\",\n          \"background-size\",\n          \"float\",\n          \"position\",\n          \"left\",\n          \"right\",\n          \"top\",\n          \"bottom\",\n          \"z-index\",\n          \"display\",\n          \"transform\",\n          \"width\",\n          \"max-width\",\n          \"min-width\",\n          \"height\",\n          \"max-height\",\n          \"min-height\",\n          \"overflow\",\n          \"overflow-x\",\n          \"overflow-y\",\n          \"text-overflow\",\n          \"vertical-align\",\n          \"transition\",\n          \"transition-delay\",\n          \"transition-duration\",\n          \"transition-property\",\n          \"transition-timing-function\"\n        ];\n        each$g(nonInheritableStylesArr, (style) => {\n          nonInheritableStyles.add(style);\n        });\n      })();\n      const shorthandStyleProps = [\n        \"font\",\n        \"text-decoration\",\n        \"text-emphasis\"\n      ];\n      const getStyleProps = (dom3, node) => keys2(dom3.parseStyle(dom3.getAttrib(node, \"style\")));\n      const isNonInheritableStyle = (style) => nonInheritableStyles.has(style);\n      const hasInheritableStyles = (dom3, node) => forall(getStyleProps(dom3, node), (style) => !isNonInheritableStyle(style));\n      const getLonghandStyleProps = (styles) => filter$6(styles, (style) => exists(shorthandStyleProps, (prop) => startsWith(style, prop)));\n      const hasStyleConflict = (dom3, node, parentNode) => {\n        const nodeStyleProps = getStyleProps(dom3, node);\n        const parentNodeStyleProps = getStyleProps(dom3, parentNode);\n        const valueMismatch = (prop) => {\n          var _a3, _b;\n          const nodeValue = (_a3 = dom3.getStyle(node, prop)) !== null && _a3 !== void 0 ? _a3 : \"\";\n          const parentValue = (_b = dom3.getStyle(parentNode, prop)) !== null && _b !== void 0 ? _b : \"\";\n          return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue;\n        };\n        return exists(nodeStyleProps, (nodeStyleProp) => {\n          const propExists = (props) => exists(props, (prop) => prop === nodeStyleProp);\n          if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) {\n            const longhandProps = getLonghandStyleProps(parentNodeStyleProps);\n            return exists(longhandProps, valueMismatch);\n          } else {\n            return valueMismatch(nodeStyleProp);\n          }\n        });\n      };\n      const isChar = (forward, predicate, pos) => Optional.from(pos.container()).filter(isText$8).exists((text3) => {\n        const delta = forward ? 0 : -1;\n        return predicate(text3.data.charAt(pos.offset() + delta));\n      });\n      const isBeforeSpace = curry(isChar, true, isWhiteSpace2);\n      const isAfterSpace = curry(isChar, false, isWhiteSpace2);\n      const isEmptyText = (pos) => {\n        const container = pos.container();\n        return isText$8(container) && (container.data.length === 0 || isZwsp(container.data) && BookmarkManager.isBookmarkNode(container.parentNode));\n      };\n      const matchesElementPosition = (before2, predicate) => (pos) => Optional.from(getChildNodeAtRelativeOffset(before2 ? 0 : -1, pos)).filter(predicate).isSome();\n      const isImageBlock = (node) => isImg(node) && get$7(SugarElement.fromDom(node), \"display\") === \"block\";\n      const isCefNode = (node) => isContentEditableFalse$a(node) && !isBogusAll$1(node);\n      const isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n      const isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n      const isBeforeMedia = matchesElementPosition(true, isMedia$2);\n      const isAfterMedia = matchesElementPosition(false, isMedia$2);\n      const isBeforeTable = matchesElementPosition(true, isTable$3);\n      const isAfterTable = matchesElementPosition(false, isTable$3);\n      const isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n      const isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n      const getLastChildren = (elm) => {\n        const children2 = [];\n        let rawNode = elm.dom;\n        while (rawNode) {\n          children2.push(SugarElement.fromDom(rawNode));\n          rawNode = rawNode.lastChild;\n        }\n        return children2;\n      };\n      const removeTrailingBr = (elm) => {\n        const allBrs = descendants(elm, \"br\");\n        const brs = filter$6(getLastChildren(elm).slice(-1), isBr$4);\n        if (allBrs.length === brs.length) {\n          each$g(brs, remove$5);\n        }\n      };\n      const fillWithPaddingBr = (elm) => {\n        empty(elm);\n        append$1(elm, SugarElement.fromHtml('<br data-mce-bogus=\"1\">'));\n      };\n      const trimBlockTrailingBr = (elm) => {\n        lastChild(elm).each((lastChild2) => {\n          prevSibling(lastChild2).each((lastChildPrevSibling) => {\n            if (isBlock$2(elm) && isBr$4(lastChild2) && isBlock$2(lastChildPrevSibling)) {\n              remove$5(lastChild2);\n            }\n          });\n        });\n      };\n      const dropLast = (xs) => xs.slice(0, -1);\n      const parentsUntil = (start2, root2, predicate) => {\n        if (contains2(root2, start2)) {\n          return dropLast(parents$1(start2, (elm) => {\n            return predicate(elm) || eq2(elm, root2);\n          }));\n        } else {\n          return [];\n        }\n      };\n      const parents = (start2, root2) => parentsUntil(start2, root2, never);\n      const parentsAndSelf = (start2, root2) => [start2].concat(parents(start2, root2));\n      const navigateIgnoreEmptyTextNodes = (forward, root2, from2) => navigateIgnore(forward, root2, from2, isEmptyText);\n      const getClosestBlock$1 = (root2, pos) => find$2(parentsAndSelf(SugarElement.fromDom(pos.container()), root2), isBlock$2);\n      const isAtBeforeAfterBlockBoundary = (forward, root2, pos) => navigateIgnoreEmptyTextNodes(forward, root2.dom, pos).forall((newPos) => getClosestBlock$1(root2, pos).fold(() => isInSameBlock(newPos, pos, root2.dom) === false, (fromBlock) => isInSameBlock(newPos, pos, root2.dom) === false && contains2(fromBlock, SugarElement.fromDom(newPos.container()))));\n      const isAtBlockBoundary = (forward, root2, pos) => getClosestBlock$1(root2, pos).fold(() => navigateIgnoreEmptyTextNodes(forward, root2.dom, pos).forall((newPos) => isInSameBlock(newPos, pos, root2.dom) === false), (parent2) => navigateIgnoreEmptyTextNodes(forward, parent2.dom, pos).isNone());\n      const isAtStartOfBlock = curry(isAtBlockBoundary, false);\n      const isAtEndOfBlock = curry(isAtBlockBoundary, true);\n      const isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n      const isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n      const isBr = (pos) => getElementFromPosition(pos).exists(isBr$4);\n      const findBr = (forward, root2, pos) => {\n        const parentBlocks = filter$6(parentsAndSelf(SugarElement.fromDom(pos.container()), root2), isBlock$2);\n        const scope = head(parentBlocks).getOr(root2);\n        return fromPosition(forward, scope.dom, pos).filter(isBr);\n      };\n      const isBeforeBr$1 = (root2, pos) => getElementFromPosition(pos).exists(isBr$4) || findBr(true, root2, pos).isSome();\n      const isAfterBr = (root2, pos) => getElementFromPrevPosition(pos).exists(isBr$4) || findBr(false, root2, pos).isSome();\n      const findPreviousBr = curry(findBr, false);\n      const findNextBr = curry(findBr, true);\n      const isInMiddleOfText = (pos) => CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n      const getClosestBlock = (root2, pos) => {\n        const parentBlocks = filter$6(parentsAndSelf(SugarElement.fromDom(pos.container()), root2), isBlock$2);\n        return head(parentBlocks).getOr(root2);\n      };\n      const hasSpaceBefore = (root2, pos) => {\n        if (isInMiddleOfText(pos)) {\n          return isAfterSpace(pos);\n        } else {\n          return isAfterSpace(pos) || prevPosition(getClosestBlock(root2, pos).dom, pos).exists(isAfterSpace);\n        }\n      };\n      const hasSpaceAfter = (root2, pos) => {\n        if (isInMiddleOfText(pos)) {\n          return isBeforeSpace(pos);\n        } else {\n          return isBeforeSpace(pos) || nextPosition(getClosestBlock(root2, pos).dom, pos).exists(isBeforeSpace);\n        }\n      };\n      const isPreValue = (value2) => contains$2([\n        \"pre\",\n        \"pre-wrap\"\n      ], value2);\n      const isInPre = (pos) => getElementFromPosition(pos).bind((elm) => closest$4(elm, isElement$7)).exists((elm) => isPreValue(get$7(elm, \"white-space\")));\n      const isAtBeginningOfBody = (root2, pos) => prevPosition(root2.dom, pos).isNone();\n      const isAtEndOfBody = (root2, pos) => nextPosition(root2.dom, pos).isNone();\n      const isAtLineBoundary = (root2, pos) => isAtBeginningOfBody(root2, pos) || isAtEndOfBody(root2, pos) || isAtStartOfBlock(root2, pos) || isAtEndOfBlock(root2, pos) || isAfterBr(root2, pos) || isBeforeBr$1(root2, pos);\n      const needsToHaveNbsp = (root2, pos) => {\n        if (isInPre(pos)) {\n          return false;\n        } else {\n          return isAtLineBoundary(root2, pos) || hasSpaceBefore(root2, pos) || hasSpaceAfter(root2, pos);\n        }\n      };\n      const needsToBeNbspLeft = (root2, pos) => {\n        if (isInPre(pos)) {\n          return false;\n        } else {\n          return isAtStartOfBlock(root2, pos) || isBeforeBlock(root2, pos) || isAfterBr(root2, pos) || hasSpaceBefore(root2, pos);\n        }\n      };\n      const leanRight = (pos) => {\n        const container = pos.container();\n        const offset = pos.offset();\n        if (isText$8(container) && offset < container.data.length) {\n          return CaretPosition(container, offset + 1);\n        } else {\n          return pos;\n        }\n      };\n      const needsToBeNbspRight = (root2, pos) => {\n        if (isInPre(pos)) {\n          return false;\n        } else {\n          return isAtEndOfBlock(root2, pos) || isAfterBlock(root2, pos) || isBeforeBr$1(root2, pos) || hasSpaceAfter(root2, pos);\n        }\n      };\n      const needsToBeNbsp = (root2, pos) => needsToBeNbspLeft(root2, pos) || needsToBeNbspRight(root2, leanRight(pos));\n      const isNbspAt = (text3, offset) => isNbsp(text3.charAt(offset));\n      const hasNbsp = (pos) => {\n        const container = pos.container();\n        return isText$8(container) && contains$1(container.data, nbsp);\n      };\n      const normalizeNbspMiddle = (text3) => {\n        const chars = text3.split(\"\");\n        return map$3(chars, (chr, i3) => {\n          if (isNbsp(chr) && i3 > 0 && i3 < chars.length - 1 && isContent(chars[i3 - 1]) && isContent(chars[i3 + 1])) {\n            return \" \";\n          } else {\n            return chr;\n          }\n        }).join(\"\");\n      };\n      const normalizeNbspAtStart = (root2, node) => {\n        const text3 = node.data;\n        const firstPos = CaretPosition(node, 0);\n        if (isNbspAt(text3, 0) && !needsToBeNbsp(root2, firstPos)) {\n          node.data = \" \" + text3.slice(1);\n          return true;\n        } else {\n          return false;\n        }\n      };\n      const normalizeNbspInMiddleOfTextNode = (node) => {\n        const text3 = node.data;\n        const newText = normalizeNbspMiddle(text3);\n        if (newText !== text3) {\n          node.data = newText;\n          return true;\n        } else {\n          return false;\n        }\n      };\n      const normalizeNbspAtEnd = (root2, node) => {\n        const text3 = node.data;\n        const lastPos = CaretPosition(node, text3.length - 1);\n        if (isNbspAt(text3, text3.length - 1) && !needsToBeNbsp(root2, lastPos)) {\n          node.data = text3.slice(0, -1) + \" \";\n          return true;\n        } else {\n          return false;\n        }\n      };\n      const normalizeNbsps = (root2, pos) => Optional.some(pos).filter(hasNbsp).bind((pos2) => {\n        const container = pos2.container();\n        const normalized = normalizeNbspAtStart(root2, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root2, container);\n        return normalized ? Optional.some(pos2) : Optional.none();\n      });\n      const normalizeNbspsInEditor = (editor) => {\n        const root2 = SugarElement.fromDom(editor.getBody());\n        if (editor.selection.isCollapsed()) {\n          normalizeNbsps(root2, CaretPosition.fromRangeStart(editor.selection.getRng())).each((pos) => {\n            editor.selection.setRng(pos.toRange());\n          });\n        }\n      };\n      const normalize$12 = (node, offset, count2) => {\n        if (count2 === 0) {\n          return;\n        }\n        const elm = SugarElement.fromDom(node);\n        const root2 = ancestor$3(elm, isBlock$2).getOr(elm);\n        const whitespace = node.data.slice(offset, offset + count2);\n        const isEndOfContent = offset + count2 >= node.data.length && needsToBeNbspRight(root2, CaretPosition(node, node.data.length));\n        const isStartOfContent = offset === 0 && needsToBeNbspLeft(root2, CaretPosition(node, 0));\n        node.replaceData(offset, count2, normalize$4(whitespace, 4, isStartOfContent, isEndOfContent));\n      };\n      const normalizeWhitespaceAfter = (node, offset) => {\n        const content = node.data.slice(offset);\n        const whitespaceCount = content.length - lTrim(content).length;\n        normalize$12(node, offset, whitespaceCount);\n      };\n      const normalizeWhitespaceBefore = (node, offset) => {\n        const content = node.data.slice(0, offset);\n        const whitespaceCount = content.length - rTrim(content).length;\n        normalize$12(node, offset - whitespaceCount, whitespaceCount);\n      };\n      const mergeTextNodes = (prevNode, nextNode, normalizeWhitespace, mergeToPrev = true) => {\n        const whitespaceOffset = rTrim(prevNode.data).length;\n        const newNode = mergeToPrev ? prevNode : nextNode;\n        const removeNode2 = mergeToPrev ? nextNode : prevNode;\n        if (mergeToPrev) {\n          newNode.appendData(removeNode2.data);\n        } else {\n          newNode.insertData(0, removeNode2.data);\n        }\n        remove$5(SugarElement.fromDom(removeNode2));\n        if (normalizeWhitespace) {\n          normalizeWhitespaceAfter(newNode, whitespaceOffset);\n        }\n        return newNode;\n      };\n      const needsReposition = (pos, elm) => {\n        const container = pos.container();\n        const offset = pos.offset();\n        return CaretPosition.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition.before(elm).offset();\n      };\n      const reposition = (elm, pos) => needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos;\n      const beforeOrStartOf = (node) => isText$8(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n      const afterOrEndOf = (node) => isText$8(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node);\n      const getPreviousSiblingCaretPosition = (elm) => {\n        if (isCaretCandidate$3(elm.previousSibling)) {\n          return Optional.some(afterOrEndOf(elm.previousSibling));\n        } else {\n          return elm.previousSibling ? lastPositionIn(elm.previousSibling) : Optional.none();\n        }\n      };\n      const getNextSiblingCaretPosition = (elm) => {\n        if (isCaretCandidate$3(elm.nextSibling)) {\n          return Optional.some(beforeOrStartOf(elm.nextSibling));\n        } else {\n          return elm.nextSibling ? firstPositionIn(elm.nextSibling) : Optional.none();\n        }\n      };\n      const findCaretPositionBackwardsFromElm = (rootElement, elm) => {\n        const startPosition = CaretPosition.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);\n        return prevPosition(rootElement, startPosition).fold(() => nextPosition(rootElement, CaretPosition.after(elm)), Optional.some);\n      };\n      const findCaretPositionForwardsFromElm = (rootElement, elm) => nextPosition(rootElement, CaretPosition.after(elm)).fold(() => prevPosition(rootElement, CaretPosition.before(elm)), Optional.some);\n      const findCaretPositionBackwards = (rootElement, elm) => getPreviousSiblingCaretPosition(elm).orThunk(() => getNextSiblingCaretPosition(elm)).orThunk(() => findCaretPositionBackwardsFromElm(rootElement, elm));\n      const findCaretPositionForward = (rootElement, elm) => getNextSiblingCaretPosition(elm).orThunk(() => getPreviousSiblingCaretPosition(elm)).orThunk(() => findCaretPositionForwardsFromElm(rootElement, elm));\n      const findCaretPosition = (forward, rootElement, elm) => forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n      const findCaretPosOutsideElmAfterDelete = (forward, rootElement, elm) => findCaretPosition(forward, rootElement, elm).map(curry(reposition, elm));\n      const setSelection$1 = (editor, forward, pos) => {\n        pos.fold(() => {\n          editor.focus();\n        }, (pos2) => {\n          editor.selection.setRng(pos2.toRange(), forward);\n        });\n      };\n      const eqRawNode = (rawNode) => (elm) => elm.dom === rawNode;\n      const isBlock = (editor, elm) => elm && has$2(editor.schema.getBlockElements(), name(elm));\n      const paddEmptyBlock = (elm) => {\n        if (isEmpty$2(elm)) {\n          const br = SugarElement.fromHtml('<br data-mce-bogus=\"1\">');\n          empty(elm);\n          append$1(elm, br);\n          return Optional.some(CaretPosition.before(br.dom));\n        } else {\n          return Optional.none();\n        }\n      };\n      const deleteNormalized = (elm, afterDeletePosOpt, normalizeWhitespace) => {\n        const prevTextOpt = prevSibling(elm).filter(isText$9);\n        const nextTextOpt = nextSibling(elm).filter(isText$9);\n        remove$5(elm);\n        return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, (prev2, next2, pos) => {\n          const prevNode = prev2.dom, nextNode = next2.dom;\n          const offset = prevNode.data.length;\n          mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n          return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos;\n        }).orThunk(() => {\n          if (normalizeWhitespace) {\n            prevTextOpt.each((elm2) => normalizeWhitespaceBefore(elm2.dom, elm2.dom.length));\n            nextTextOpt.each((elm2) => normalizeWhitespaceAfter(elm2.dom, 0));\n          }\n          return afterDeletePosOpt;\n        });\n      };\n      const isInlineElement = (editor, element) => has$2(editor.schema.getTextInlineElements(), name(element));\n      const deleteElement$2 = (editor, forward, elm, moveCaret2 = true) => {\n        const afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom);\n        const parentBlock = ancestor$3(elm, curry(isBlock, editor), eqRawNode(editor.getBody()));\n        const normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm));\n        if (editor.dom.isEmpty(editor.getBody())) {\n          editor.setContent(\"\");\n          editor.selection.setCursorLocation();\n        } else {\n          parentBlock.bind(paddEmptyBlock).fold(() => {\n            if (moveCaret2) {\n              setSelection$1(editor, forward, normalizedAfterDeletePos);\n            }\n          }, (paddPos) => {\n            if (moveCaret2) {\n              setSelection$1(editor, forward, Optional.some(paddPos));\n            }\n          });\n        }\n      };\n      const isRootFromElement = (root2) => (cur) => eq2(root2, cur);\n      const getTableCells = (table3) => descendants(table3, \"td,th\");\n      const getTableDetailsFromRange = (rng, isRoot) => {\n        const getTable2 = (node) => getClosestTable(SugarElement.fromDom(node), isRoot);\n        const startTable = getTable2(rng.startContainer);\n        const endTable = getTable2(rng.endContainer);\n        const isStartInTable = startTable.isSome();\n        const isEndInTable = endTable.isSome();\n        const isSameTable = lift2(startTable, endTable, eq2).getOr(false);\n        const isMultiTable = !isSameTable && isStartInTable && isEndInTable;\n        return {\n          startTable,\n          endTable,\n          isStartInTable,\n          isEndInTable,\n          isSameTable,\n          isMultiTable\n        };\n      };\n      const tableCellRng = (start2, end2) => ({\n        start: start2,\n        end: end2\n      });\n      const tableSelection = (rng, table3, cells2) => ({\n        rng,\n        table: table3,\n        cells: cells2\n      });\n      const deleteAction = Adt.generate([\n        {\n          singleCellTable: [\n            \"rng\",\n            \"cell\"\n          ]\n        },\n        { fullTable: [\"table\"] },\n        {\n          partialTable: [\n            \"cells\",\n            \"outsideDetails\"\n          ]\n        },\n        {\n          multiTable: [\n            \"startTableCells\",\n            \"endTableCells\",\n            \"betweenRng\"\n          ]\n        }\n      ]);\n      const getClosestCell$1 = (container, isRoot) => closest$3(SugarElement.fromDom(container), \"td,th\", isRoot);\n      const isExpandedCellRng = (cellRng) => !eq2(cellRng.start, cellRng.end);\n      const getTableFromCellRng = (cellRng, isRoot) => getClosestTable(cellRng.start, isRoot).bind((startParentTable) => getClosestTable(cellRng.end, isRoot).bind((endParentTable) => someIf(eq2(startParentTable, endParentTable), startParentTable)));\n      const isSingleCellTable = (cellRng, isRoot) => !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists((table3) => {\n        const rows = table3.dom.rows;\n        return rows.length === 1 && rows[0].cells.length === 1;\n      });\n      const getCellRng = (rng, isRoot) => {\n        const startCell = getClosestCell$1(rng.startContainer, isRoot);\n        const endCell = getClosestCell$1(rng.endContainer, isRoot);\n        return lift2(startCell, endCell, tableCellRng);\n      };\n      const getCellRangeFromStartTable = (isRoot) => (startCell) => getClosestTable(startCell, isRoot).bind((table3) => last$3(getTableCells(table3)).map((endCell) => tableCellRng(startCell, endCell)));\n      const getCellRangeFromEndTable = (isRoot) => (endCell) => getClosestTable(endCell, isRoot).bind((table3) => head(getTableCells(table3)).map((startCell) => tableCellRng(startCell, endCell)));\n      const getTableSelectionFromCellRng = (isRoot) => (cellRng) => getTableFromCellRng(cellRng, isRoot).map((table3) => tableSelection(cellRng, table3, getTableCells(table3)));\n      const getTableSelections = (cellRng, selectionDetails, rng, isRoot) => {\n        if (rng.collapsed || !cellRng.forall(isExpandedCellRng)) {\n          return Optional.none();\n        } else if (selectionDetails.isSameTable) {\n          const sameTableSelection = cellRng.bind(getTableSelectionFromCellRng(isRoot));\n          return Optional.some({\n            start: sameTableSelection,\n            end: sameTableSelection\n          });\n        } else {\n          const startCell = getClosestCell$1(rng.startContainer, isRoot);\n          const endCell = getClosestCell$1(rng.endContainer, isRoot);\n          const startTableSelection = startCell.bind(getCellRangeFromStartTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n          const endTableSelection = endCell.bind(getCellRangeFromEndTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n          return Optional.some({\n            start: startTableSelection,\n            end: endTableSelection\n          });\n        }\n      };\n      const getCellIndex = (cells2, cell2) => findIndex$2(cells2, (x2) => eq2(x2, cell2));\n      const getSelectedCells = (tableSelection2) => lift2(getCellIndex(tableSelection2.cells, tableSelection2.rng.start), getCellIndex(tableSelection2.cells, tableSelection2.rng.end), (startIndex, endIndex) => tableSelection2.cells.slice(startIndex, endIndex + 1));\n      const isSingleCellTableContentSelected = (optCellRng, rng, isRoot) => optCellRng.exists((cellRng) => isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng));\n      const unselectCells = (rng, selectionDetails) => {\n        const { startTable, endTable } = selectionDetails;\n        const otherContentRng = rng.cloneRange();\n        startTable.each((table3) => otherContentRng.setStartAfter(table3.dom));\n        endTable.each((table3) => otherContentRng.setEndBefore(table3.dom));\n        return otherContentRng;\n      };\n      const handleSingleTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({ start: start2, end: end2 }) => start2.or(end2)).bind((tableSelection2) => {\n        const { isSameTable } = selectionDetails;\n        const selectedCells = getSelectedCells(tableSelection2).getOr([]);\n        if (isSameTable && tableSelection2.cells.length === selectedCells.length) {\n          return Optional.some(deleteAction.fullTable(tableSelection2.table));\n        } else if (selectedCells.length > 0) {\n          if (isSameTable) {\n            return Optional.some(deleteAction.partialTable(selectedCells, Optional.none()));\n          } else {\n            const otherContentRng = unselectCells(rng, selectionDetails);\n            return Optional.some(deleteAction.partialTable(selectedCells, Optional.some({\n              ...selectionDetails,\n              rng: otherContentRng\n            })));\n          }\n        } else {\n          return Optional.none();\n        }\n      });\n      const handleMultiTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({ start: start2, end: end2 }) => {\n        const startTableSelectedCells = start2.bind(getSelectedCells).getOr([]);\n        const endTableSelectedCells = end2.bind(getSelectedCells).getOr([]);\n        if (startTableSelectedCells.length > 0 && endTableSelectedCells.length > 0) {\n          const otherContentRng = unselectCells(rng, selectionDetails);\n          return Optional.some(deleteAction.multiTable(startTableSelectedCells, endTableSelectedCells, otherContentRng));\n        } else {\n          return Optional.none();\n        }\n      });\n      const getActionFromRange = (root2, rng) => {\n        const isRoot = isRootFromElement(root2);\n        const optCellRng = getCellRng(rng, isRoot);\n        const selectionDetails = getTableDetailsFromRange(rng, isRoot);\n        if (isSingleCellTableContentSelected(optCellRng, rng, isRoot)) {\n          return optCellRng.map((cellRng) => deleteAction.singleCellTable(rng, cellRng.start));\n        } else if (selectionDetails.isMultiTable) {\n          return handleMultiTable(optCellRng, selectionDetails, rng, isRoot);\n        } else {\n          return handleSingleTable(optCellRng, selectionDetails, rng, isRoot);\n        }\n      };\n      const freefallRtl = (root2) => {\n        const child2 = isComment$1(root2) ? prevSibling(root2) : lastChild(root2);\n        return child2.bind(freefallRtl).orThunk(() => Optional.some(root2));\n      };\n      const cleanCells = (cells2) => each$g(cells2, (cell2) => {\n        remove$a(cell2, \"contenteditable\");\n        fillWithPaddingBr(cell2);\n      });\n      const getOutsideBlock = (editor, container) => Optional.from(editor.dom.getParent(container, editor.dom.isBlock)).map(SugarElement.fromDom);\n      const handleEmptyBlock = (editor, startInTable, emptyBlock2) => {\n        emptyBlock2.each((block2) => {\n          if (startInTable) {\n            remove$5(block2);\n          } else {\n            fillWithPaddingBr(block2);\n            editor.selection.setCursorLocation(block2.dom, 0);\n          }\n        });\n      };\n      const deleteContentInsideCell = (editor, cell2, rng, isFirstCellInSelection) => {\n        const insideTableRng = rng.cloneRange();\n        if (isFirstCellInSelection) {\n          insideTableRng.setStart(rng.startContainer, rng.startOffset);\n          insideTableRng.setEndAfter(cell2.dom.lastChild);\n        } else {\n          insideTableRng.setStartBefore(cell2.dom.firstChild);\n          insideTableRng.setEnd(rng.endContainer, rng.endOffset);\n        }\n        deleteCellContents(editor, insideTableRng, cell2, false).each((action2) => action2());\n      };\n      const collapseAndRestoreCellSelection = (editor) => {\n        const selectedCells = getCellsFromEditor(editor);\n        const selectedNode = SugarElement.fromDom(editor.selection.getNode());\n        if (isTableCell$5(selectedNode.dom) && isEmpty$2(selectedNode)) {\n          editor.selection.setCursorLocation(selectedNode.dom, 0);\n        } else {\n          editor.selection.collapse(true);\n        }\n        if (selectedCells.length > 1 && exists(selectedCells, (cell2) => eq2(cell2, selectedNode))) {\n          set$2(selectedNode, \"data-mce-selected\", \"1\");\n        }\n      };\n      const emptySingleTableCells = (editor, cells2, outsideDetails) => Optional.some(() => {\n        const editorRng = editor.selection.getRng();\n        const cellsToClean = outsideDetails.bind(({ rng, isStartInTable }) => {\n          const outsideBlock = getOutsideBlock(editor, isStartInTable ? rng.endContainer : rng.startContainer);\n          rng.deleteContents();\n          handleEmptyBlock(editor, isStartInTable, outsideBlock.filter(isEmpty$2));\n          const endPointCell = isStartInTable ? cells2[0] : cells2[cells2.length - 1];\n          deleteContentInsideCell(editor, endPointCell, editorRng, isStartInTable);\n          if (!isEmpty$2(endPointCell)) {\n            return Optional.some(isStartInTable ? cells2.slice(1) : cells2.slice(0, -1));\n          } else {\n            return Optional.none();\n          }\n        }).getOr(cells2);\n        cleanCells(cellsToClean);\n        collapseAndRestoreCellSelection(editor);\n      });\n      const emptyMultiTableCells = (editor, startTableCells, endTableCells, betweenRng) => Optional.some(() => {\n        const rng = editor.selection.getRng();\n        const startCell = startTableCells[0];\n        const endCell = endTableCells[endTableCells.length - 1];\n        deleteContentInsideCell(editor, startCell, rng, true);\n        deleteContentInsideCell(editor, endCell, rng, false);\n        const startTableCellsToClean = isEmpty$2(startCell) ? startTableCells : startTableCells.slice(1);\n        const endTableCellsToClean = isEmpty$2(endCell) ? endTableCells : endTableCells.slice(0, -1);\n        cleanCells(startTableCellsToClean.concat(endTableCellsToClean));\n        betweenRng.deleteContents();\n        collapseAndRestoreCellSelection(editor);\n      });\n      const deleteCellContents = (editor, rng, cell2, moveSelection2 = true) => Optional.some(() => {\n        rng.deleteContents();\n        const lastNode = freefallRtl(cell2).getOr(cell2);\n        const lastBlock = SugarElement.fromDom(editor.dom.getParent(lastNode.dom, editor.dom.isBlock));\n        if (isEmpty$2(lastBlock)) {\n          fillWithPaddingBr(lastBlock);\n          if (moveSelection2) {\n            editor.selection.setCursorLocation(lastBlock.dom, 0);\n          }\n        }\n        if (!eq2(cell2, lastBlock)) {\n          const additionalCleanupNodes = is$2(parent(lastBlock), cell2) ? [] : siblings(lastBlock);\n          each$g(additionalCleanupNodes.concat(children(cell2)), (node) => {\n            if (!eq2(node, lastBlock) && !contains2(node, lastBlock) && isEmpty$2(node)) {\n              remove$5(node);\n            }\n          });\n        }\n      });\n      const deleteTableElement = (editor, table3) => Optional.some(() => deleteElement$2(editor, false, table3));\n      const deleteCellRange = (editor, rootElm, rng) => getActionFromRange(rootElm, rng).bind((action2) => action2.fold(curry(deleteCellContents, editor), curry(deleteTableElement, editor), curry(emptySingleTableCells, editor), curry(emptyMultiTableCells, editor)));\n      const deleteCaptionRange = (editor, caption) => emptyElement(editor, caption);\n      const deleteTableRange = (editor, rootElm, rng, startElm) => getParentCaption(rootElm, startElm).fold(() => deleteCellRange(editor, rootElm, rng), (caption) => deleteCaptionRange(editor, caption));\n      const deleteRange$2 = (editor, startElm, selectedCells) => {\n        const rootNode = SugarElement.fromDom(editor.getBody());\n        const rng = editor.selection.getRng();\n        return selectedCells.length !== 0 ? emptySingleTableCells(editor, selectedCells, Optional.none()) : deleteTableRange(editor, rootNode, rng, startElm);\n      };\n      const getParentCell = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTableCell$4);\n      const getParentCaption = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTag(\"caption\"));\n      const deleteBetweenCells = (editor, rootElm, forward, fromCell, from2) => navigate(forward, editor.getBody(), from2).bind((to2) => getParentCell(rootElm, SugarElement.fromDom(to2.getNode())).bind((toCell) => eq2(toCell, fromCell) ? Optional.none() : Optional.some(noop)));\n      const emptyElement = (editor, elm) => Optional.some(() => {\n        fillWithPaddingBr(elm);\n        editor.selection.setCursorLocation(elm.dom, 0);\n      });\n      const isDeleteOfLastCharPos = (fromCaption, forward, from2, to2) => firstPositionIn(fromCaption.dom).bind((first2) => lastPositionIn(fromCaption.dom).map((last2) => forward ? from2.isEqual(first2) && to2.isEqual(last2) : from2.isEqual(last2) && to2.isEqual(first2))).getOr(true);\n      const emptyCaretCaption = (editor, elm) => emptyElement(editor, elm);\n      const validateCaretCaption = (rootElm, fromCaption, to2) => getParentCaption(rootElm, SugarElement.fromDom(to2.getNode())).fold(() => Optional.some(noop), (toCaption) => someIf(!eq2(toCaption, fromCaption), noop));\n      const deleteCaretInsideCaption = (editor, rootElm, forward, fromCaption, from2) => navigate(forward, editor.getBody(), from2).fold(() => Optional.some(noop), (to2) => isDeleteOfLastCharPos(fromCaption, forward, from2, to2) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to2));\n      const deleteCaretCells = (editor, forward, rootElm, startElm) => {\n        const from2 = CaretPosition.fromRangeStart(editor.selection.getRng());\n        return getParentCell(rootElm, startElm).bind((fromCell) => isEmpty$2(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from2));\n      };\n      const deleteCaretCaption = (editor, forward, rootElm, fromCaption) => {\n        const from2 = CaretPosition.fromRangeStart(editor.selection.getRng());\n        return isEmpty$2(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from2);\n      };\n      const isNearTable = (forward, pos) => forward ? isBeforeTable(pos) : isAfterTable(pos);\n      const isBeforeOrAfterTable = (editor, forward) => {\n        const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n        return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists((pos) => isNearTable(forward, pos));\n      };\n      const deleteCaret$3 = (editor, forward, startElm) => {\n        const rootElm = SugarElement.fromDom(editor.getBody());\n        return getParentCaption(rootElm, startElm).fold(() => deleteCaretCells(editor, forward, rootElm, startElm).orThunk(() => someIf(isBeforeOrAfterTable(editor, forward), noop)), (fromCaption) => deleteCaretCaption(editor, forward, rootElm, fromCaption));\n      };\n      const backspaceDelete$9 = (editor, forward) => {\n        const startElm = SugarElement.fromDom(editor.selection.getStart(true));\n        const cells2 = getCellsFromEditor(editor);\n        return editor.selection.isCollapsed() && cells2.length === 0 ? deleteCaret$3(editor, forward, startElm) : deleteRange$2(editor, startElm, cells2);\n      };\n      const getContentEditableRoot$1 = (root2, node) => {\n        while (node && node !== root2) {\n          if (isContentEditableTrue$4(node) || isContentEditableFalse$a(node)) {\n            return node;\n          }\n          node = node.parentNode;\n        }\n        return null;\n      };\n      const traverse2 = (node, fn) => {\n        fn(node);\n        if (node.firstChild) {\n          traverse2(node.firstChild, fn);\n        }\n        if (node.next) {\n          traverse2(node.next, fn);\n        }\n      };\n      const matchNode$1 = (nodeFilters, attributeFilters, node, matches) => {\n        const name2 = node.name;\n        for (let ni = 0, nl = nodeFilters.length; ni < nl; ni++) {\n          const filter2 = nodeFilters[ni];\n          if (filter2.name === name2) {\n            const match4 = matches.nodes[name2];\n            if (match4) {\n              match4.nodes.push(node);\n            } else {\n              matches.nodes[name2] = {\n                filter: filter2,\n                nodes: [node]\n              };\n            }\n          }\n        }\n        if (node.attributes) {\n          for (let ai = 0, al = attributeFilters.length; ai < al; ai++) {\n            const filter2 = attributeFilters[ai];\n            const attrName = filter2.name;\n            if (attrName in node.attributes.map) {\n              const match4 = matches.attributes[attrName];\n              if (match4) {\n                match4.nodes.push(node);\n              } else {\n                matches.attributes[attrName] = {\n                  filter: filter2,\n                  nodes: [node]\n                };\n              }\n            }\n          }\n        }\n      };\n      const findMatchingNodes = (nodeFilters, attributeFilters, node) => {\n        const matches = {\n          nodes: {},\n          attributes: {}\n        };\n        if (node.firstChild) {\n          traverse2(node.firstChild, (node2) => {\n            matchNode$1(nodeFilters, attributeFilters, node2, matches);\n          });\n        }\n        return matches;\n      };\n      const runFilters = (matches, args) => {\n        const run = (matchRecord) => {\n          each$f(matchRecord, (match4) => {\n            const nodes = filter$6(match4.nodes, (node) => isNonNullable(node.parent));\n            each$g(match4.filter.callbacks, (callback) => {\n              callback(nodes, match4.filter.name, args);\n            });\n          });\n        };\n        run(matches.nodes);\n        run(matches.attributes);\n      };\n      const filter$3 = (nodeFilters, attributeFilters, node, args = {}) => {\n        const matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n        runFilters(matches, args);\n      };\n      const paddEmptyNode = (settings, args, blockElements, node) => {\n        if (args.insert && blockElements[node.name]) {\n          node.empty().append(new AstNode(\"br\", 1));\n        } else {\n          node.empty().append(new AstNode(\"#text\", 3)).value = nbsp;\n        }\n      };\n      const isPaddedWithNbsp = (node) => hasOnlyChild(node, \"#text\") && node.firstChild.value === nbsp;\n      const hasOnlyChild = (node, name2) => node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name2;\n      const isPadded = (schema, node) => {\n        const rule = schema.getElementRule(node.name);\n        return rule && rule.paddEmpty;\n      };\n      const isEmpty2 = (schema, nonEmptyElements, whitespaceElements, node) => node.isEmpty(nonEmptyElements, whitespaceElements, (node2) => isPadded(schema, node2));\n      const isLineBreakNode = (node, blockElements) => node && (node.name in blockElements || node.name === \"br\");\n      const removeOrUnwrapInvalidNode = (node, schema, originalNodeParent = node.parent) => {\n        if (schema.getSpecialElements()[node.name]) {\n          node.empty().remove();\n        } else {\n          const children2 = node.children();\n          for (const childNode of children2) {\n            if (!schema.isValidChild(originalNodeParent.name, childNode.name)) {\n              removeOrUnwrapInvalidNode(childNode, schema, originalNodeParent);\n            }\n          }\n          node.unwrap();\n        }\n      };\n      const cleanInvalidNodes = (nodes, schema, onCreate = noop) => {\n        const textBlockElements = schema.getTextBlockElements();\n        const nonEmptyElements = schema.getNonEmptyElements();\n        const whitespaceElements = schema.getWhitespaceElements();\n        const nonSplittableElements = Tools.makeMap(\"tr,td,th,tbody,thead,tfoot,table\");\n        const fixed = /* @__PURE__ */ new Set();\n        for (let ni = 0; ni < nodes.length; ni++) {\n          const node = nodes[ni];\n          let parent2;\n          let newParent;\n          let tempNode;\n          if (!node.parent || fixed.has(node)) {\n            continue;\n          }\n          if (textBlockElements[node.name] && node.parent.name === \"li\") {\n            let sibling2 = node.next;\n            while (sibling2) {\n              if (textBlockElements[sibling2.name]) {\n                sibling2.name = \"li\";\n                fixed.add(sibling2);\n                node.parent.insert(sibling2, node.parent);\n              } else {\n                break;\n              }\n              sibling2 = sibling2.next;\n            }\n            node.unwrap();\n            continue;\n          }\n          const parents2 = [node];\n          for (parent2 = node.parent; parent2 && !schema.isValidChild(parent2.name, node.name) && !nonSplittableElements[parent2.name]; parent2 = parent2.parent) {\n            parents2.push(parent2);\n          }\n          if (parent2 && parents2.length > 1) {\n            if (schema.isValidChild(parent2.name, node.name)) {\n              parents2.reverse();\n              newParent = parents2[0].clone();\n              onCreate(newParent);\n              let currentNode = newParent;\n              for (let i3 = 0; i3 < parents2.length - 1; i3++) {\n                if (schema.isValidChild(currentNode.name, parents2[i3].name)) {\n                  tempNode = parents2[i3].clone();\n                  onCreate(tempNode);\n                  currentNode.append(tempNode);\n                } else {\n                  tempNode = currentNode;\n                }\n                for (let childNode = parents2[i3].firstChild; childNode && childNode !== parents2[i3 + 1]; ) {\n                  const nextNode = childNode.next;\n                  tempNode.append(childNode);\n                  childNode = nextNode;\n                }\n                currentNode = tempNode;\n              }\n              if (!isEmpty2(schema, nonEmptyElements, whitespaceElements, newParent)) {\n                parent2.insert(newParent, parents2[0], true);\n                parent2.insert(node, newParent);\n              } else {\n                parent2.insert(node, parents2[0], true);\n              }\n              parent2 = parents2[0];\n              if (isEmpty2(schema, nonEmptyElements, whitespaceElements, parent2) || hasOnlyChild(parent2, \"br\")) {\n                parent2.empty().remove();\n              }\n            } else {\n              removeOrUnwrapInvalidNode(node, schema);\n            }\n          } else if (node.parent) {\n            if (node.name === \"li\") {\n              let sibling2 = node.prev;\n              if (sibling2 && (sibling2.name === \"ul\" || sibling2.name === \"ol\")) {\n                sibling2.append(node);\n                continue;\n              }\n              sibling2 = node.next;\n              if (sibling2 && (sibling2.name === \"ul\" || sibling2.name === \"ol\")) {\n                sibling2.insert(node, sibling2.firstChild, true);\n                continue;\n              }\n              const wrapper = new AstNode(\"ul\", 1);\n              onCreate(wrapper);\n              node.wrap(wrapper);\n              continue;\n            }\n            if (schema.isValidChild(node.parent.name, \"div\") && schema.isValidChild(\"div\", node.name)) {\n              const wrapper = new AstNode(\"div\", 1);\n              onCreate(wrapper);\n              node.wrap(wrapper);\n            } else {\n              removeOrUnwrapInvalidNode(node, schema);\n            }\n          }\n        }\n      };\n      const createRange = (sc, so, ec, eo) => {\n        const rng = document.createRange();\n        rng.setStart(sc, so);\n        rng.setEnd(ec, eo);\n        return rng;\n      };\n      const normalizeBlockSelectionRange = (rng) => {\n        const startPos = CaretPosition.fromRangeStart(rng);\n        const endPos = CaretPosition.fromRangeEnd(rng);\n        const rootNode = rng.commonAncestorContainer;\n        return fromPosition(false, rootNode, endPos).map((newEndPos) => {\n          if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n            return createRange(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n          } else {\n            return rng;\n          }\n        }).getOr(rng);\n      };\n      const normalize3 = (rng) => rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n      const hasOnlyOneChild$1 = (node) => {\n        return node.firstChild && node.firstChild === node.lastChild;\n      };\n      const isPaddingNode = (node) => {\n        return node.name === \"br\" || node.value === nbsp;\n      };\n      const isPaddedEmptyBlock = (schema, node) => {\n        const blockElements = schema.getBlockElements();\n        return blockElements[node.name] && hasOnlyOneChild$1(node) && isPaddingNode(node.firstChild);\n      };\n      const isEmptyFragmentElement = (schema, node) => {\n        const nonEmptyElements = schema.getNonEmptyElements();\n        return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n      };\n      const isListFragment = (schema, fragment) => {\n        let firstChild2 = fragment.firstChild;\n        let lastChild2 = fragment.lastChild;\n        if (firstChild2 && firstChild2.name === \"meta\") {\n          firstChild2 = firstChild2.next;\n        }\n        if (lastChild2 && lastChild2.attr(\"id\") === \"mce_marker\") {\n          lastChild2 = lastChild2.prev;\n        }\n        if (isEmptyFragmentElement(schema, lastChild2)) {\n          lastChild2 = lastChild2.prev;\n        }\n        if (!firstChild2 || firstChild2 !== lastChild2) {\n          return false;\n        }\n        return firstChild2.name === \"ul\" || firstChild2.name === \"ol\";\n      };\n      const cleanupDomFragment = (domFragment) => {\n        const firstChild2 = domFragment.firstChild;\n        const lastChild2 = domFragment.lastChild;\n        if (firstChild2 && firstChild2.nodeName === \"META\") {\n          firstChild2.parentNode.removeChild(firstChild2);\n        }\n        if (lastChild2 && lastChild2.id === \"mce_marker\") {\n          lastChild2.parentNode.removeChild(lastChild2);\n        }\n        return domFragment;\n      };\n      const toDomFragment = (dom3, serializer, fragment) => {\n        const html2 = serializer.serialize(fragment);\n        const domFragment = dom3.createFragment(html2);\n        return cleanupDomFragment(domFragment);\n      };\n      const listItems = (elm) => {\n        return filter$6(elm.childNodes, (child2) => {\n          return child2.nodeName === \"LI\";\n        });\n      };\n      const isPadding = (node) => {\n        return node.data === nbsp || isBr$5(node);\n      };\n      const isListItemPadded = (node) => {\n        return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild);\n      };\n      const isEmptyOrPadded = (elm) => {\n        return !elm.firstChild || isListItemPadded(elm);\n      };\n      const trimListItems = (elms) => {\n        return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n      };\n      const getParentLi = (dom3, node) => {\n        const parentBlock = dom3.getParent(node, dom3.isBlock);\n        return parentBlock && parentBlock.nodeName === \"LI\" ? parentBlock : null;\n      };\n      const isParentBlockLi = (dom3, node) => {\n        return !!getParentLi(dom3, node);\n      };\n      const getSplit = (parentNode, rng) => {\n        const beforeRng = rng.cloneRange();\n        const afterRng = rng.cloneRange();\n        beforeRng.setStartBefore(parentNode);\n        afterRng.setEndAfter(parentNode);\n        return [\n          beforeRng.cloneContents(),\n          afterRng.cloneContents()\n        ];\n      };\n      const findFirstIn = (node, rootNode) => {\n        const caretPos = CaretPosition.before(node);\n        const caretWalker = CaretWalker(rootNode);\n        const newCaretPos = caretWalker.next(caretPos);\n        return newCaretPos ? newCaretPos.toRange() : null;\n      };\n      const findLastOf = (node, rootNode) => {\n        const caretPos = CaretPosition.after(node);\n        const caretWalker = CaretWalker(rootNode);\n        const newCaretPos = caretWalker.prev(caretPos);\n        return newCaretPos ? newCaretPos.toRange() : null;\n      };\n      const insertMiddle = (target, elms, rootNode, rng) => {\n        const parts = getSplit(target, rng);\n        const parentElm = target.parentNode;\n        parentElm.insertBefore(parts[0], target);\n        Tools.each(elms, (li) => {\n          parentElm.insertBefore(li, target);\n        });\n        parentElm.insertBefore(parts[1], target);\n        parentElm.removeChild(target);\n        return findLastOf(elms[elms.length - 1], rootNode);\n      };\n      const insertBefore$1 = (target, elms, rootNode) => {\n        const parentElm = target.parentNode;\n        Tools.each(elms, (elm) => {\n          parentElm.insertBefore(elm, target);\n        });\n        return findFirstIn(target, rootNode);\n      };\n      const insertAfter$1 = (target, elms, rootNode, dom3) => {\n        dom3.insertAfter(elms.reverse(), target);\n        return findLastOf(elms[0], rootNode);\n      };\n      const insertAtCaret$1 = (serializer, dom3, rng, fragment) => {\n        const domFragment = toDomFragment(dom3, serializer, fragment);\n        const liTarget = getParentLi(dom3, rng.startContainer);\n        const liElms = trimListItems(listItems(domFragment.firstChild));\n        const BEGINNING = 1, END = 2;\n        const rootNode = dom3.getRoot();\n        const isAt = (location2) => {\n          const caretPos = CaretPosition.fromRangeStart(rng);\n          const caretWalker = CaretWalker(dom3.getRoot());\n          const newPos = location2 === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n          return newPos ? getParentLi(dom3, newPos.getNode()) !== liTarget : true;\n        };\n        if (isAt(BEGINNING)) {\n          return insertBefore$1(liTarget, liElms, rootNode);\n        } else if (isAt(END)) {\n          return insertAfter$1(liTarget, liElms, rootNode, dom3);\n        }\n        return insertMiddle(liTarget, liElms, rootNode, rng);\n      };\n      const isTableCell$1 = isTableCell$5;\n      const isTableCellContentSelected = (dom3, rng, cell2) => {\n        if (cell2 !== null) {\n          const endCell = dom3.getParent(rng.endContainer, isTableCell$1);\n          return cell2 === endCell && hasAllContentsSelected(SugarElement.fromDom(cell2), rng);\n        } else {\n          return false;\n        }\n      };\n      const validInsertion = (editor, value2, parentNode) => {\n        if (parentNode.getAttribute(\"data-mce-bogus\") === \"all\") {\n          parentNode.parentNode.insertBefore(editor.dom.createFragment(value2), parentNode);\n        } else {\n          const node = parentNode.firstChild;\n          const node2 = parentNode.lastChild;\n          if (!node || node === node2 && node.nodeName === \"BR\") {\n            editor.dom.setHTML(parentNode, value2);\n          } else {\n            editor.selection.setContent(value2, { no_events: true });\n          }\n        }\n      };\n      const trimBrsFromTableCell = (dom3, elm) => {\n        Optional.from(dom3.getParent(elm, \"td,th\")).map(SugarElement.fromDom).each(trimBlockTrailingBr);\n      };\n      const reduceInlineTextElements = (editor, merge3) => {\n        const textInlineElements = editor.schema.getTextInlineElements();\n        const dom3 = editor.dom;\n        if (merge3) {\n          const root2 = editor.getBody();\n          const elementUtils = ElementUtils(dom3);\n          Tools.each(dom3.select(\"*[data-mce-fragment]\"), (node) => {\n            const isInline2 = isNonNullable(textInlineElements[node.nodeName.toLowerCase()]);\n            if (isInline2 && hasInheritableStyles(dom3, node)) {\n              for (let parentNode = node.parentNode; isNonNullable(parentNode) && parentNode !== root2; parentNode = parentNode.parentNode) {\n                const styleConflict = hasStyleConflict(dom3, node, parentNode);\n                if (styleConflict) {\n                  break;\n                }\n                if (elementUtils.compare(parentNode, node)) {\n                  dom3.remove(node, true);\n                  break;\n                }\n              }\n            }\n          });\n        }\n      };\n      const markFragmentElements = (fragment) => {\n        let node = fragment;\n        while (node = node.walk()) {\n          if (node.type === 1) {\n            node.attr(\"data-mce-fragment\", \"1\");\n          }\n        }\n      };\n      const unmarkFragmentElements = (elm) => {\n        Tools.each(elm.getElementsByTagName(\"*\"), (elm2) => {\n          elm2.removeAttribute(\"data-mce-fragment\");\n        });\n      };\n      const isPartOfFragment = (node) => {\n        return !!node.getAttribute(\"data-mce-fragment\");\n      };\n      const canHaveChildren = (editor, node) => {\n        return node && !editor.schema.getVoidElements()[node.nodeName];\n      };\n      const moveSelectionToMarker = (editor, marker) => {\n        let nextRng;\n        const dom3 = editor.dom;\n        const selection = editor.selection;\n        if (!marker) {\n          return;\n        }\n        selection.scrollIntoView(marker);\n        const parentEditableElm = getContentEditableRoot$1(editor.getBody(), marker);\n        if (dom3.getContentEditable(parentEditableElm) === \"false\") {\n          dom3.remove(marker);\n          selection.select(parentEditableElm);\n          return;\n        }\n        let rng = dom3.createRng();\n        const node = marker.previousSibling;\n        if (isText$8(node)) {\n          rng.setStart(node, node.nodeValue.length);\n          const node2 = marker.nextSibling;\n          if (isText$8(node2)) {\n            node.appendData(node2.data);\n            node2.parentNode.removeChild(node2);\n          }\n        } else {\n          rng.setStartBefore(marker);\n          rng.setEndBefore(marker);\n        }\n        const findNextCaretRng = (rng2) => {\n          let caretPos = CaretPosition.fromRangeStart(rng2);\n          const caretWalker = CaretWalker(editor.getBody());\n          caretPos = caretWalker.next(caretPos);\n          if (caretPos) {\n            return caretPos.toRange();\n          }\n        };\n        const parentBlock = dom3.getParent(marker, dom3.isBlock);\n        dom3.remove(marker);\n        if (parentBlock && dom3.isEmpty(parentBlock)) {\n          empty(SugarElement.fromDom(parentBlock));\n          rng.setStart(parentBlock, 0);\n          rng.setEnd(parentBlock, 0);\n          if (!isTableCell$1(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n            rng = nextRng;\n            dom3.remove(parentBlock);\n          } else {\n            dom3.add(parentBlock, dom3.create(\"br\", { \"data-mce-bogus\": \"1\" }));\n          }\n        }\n        selection.setRng(rng);\n      };\n      const deleteSelectedContent = (editor) => {\n        const dom3 = editor.dom;\n        const rng = normalize3(editor.selection.getRng());\n        editor.selection.setRng(rng);\n        const startCell = dom3.getParent(rng.startContainer, isTableCell$1);\n        if (isTableCellContentSelected(dom3, rng, startCell)) {\n          deleteCellContents(editor, rng, SugarElement.fromDom(startCell));\n        } else {\n          editor.getDoc().execCommand(\"Delete\", false, null);\n        }\n      };\n      const insertHtmlAtCaret = (editor, value2, details) => {\n        let parentNode;\n        let rng, node;\n        const selection = editor.selection;\n        const dom3 = editor.dom;\n        const parser = editor.parser;\n        const merge3 = details.merge;\n        const serializer = HtmlSerializer({ validate: true }, editor.schema);\n        const bookmarkHtml = '<span id=\"mce_marker\" data-mce-type=\"bookmark\">&#xFEFF;</span>';\n        if (value2.indexOf(\"{$caret}\") === -1) {\n          value2 += \"{$caret}\";\n        }\n        value2 = value2.replace(/\\{\\$caret\\}/, bookmarkHtml);\n        rng = selection.getRng();\n        const caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null);\n        const body = editor.getBody();\n        if (caretElement === body && selection.isCollapsed()) {\n          if (dom3.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom3.isEmpty(body.firstChild)) {\n            rng = dom3.createRng();\n            rng.setStart(body.firstChild, 0);\n            rng.setEnd(body.firstChild, 0);\n            selection.setRng(rng);\n          }\n        }\n        if (!selection.isCollapsed()) {\n          deleteSelectedContent(editor);\n        }\n        parentNode = selection.getNode();\n        const parserArgs = {\n          context: parentNode.nodeName.toLowerCase(),\n          data: details.data,\n          insert: true\n        };\n        const fragment = parser.parse(value2, parserArgs);\n        if (details.paste === true && isListFragment(editor.schema, fragment) && isParentBlockLi(dom3, parentNode)) {\n          rng = insertAtCaret$1(serializer, dom3, selection.getRng(), fragment);\n          selection.setRng(rng);\n          return value2;\n        }\n        markFragmentElements(fragment);\n        node = fragment.lastChild;\n        if (node.attr(\"id\") === \"mce_marker\") {\n          const marker = node;\n          for (node = node.prev; node; node = node.walk(true)) {\n            if (node.type === 3 || !dom3.isBlock(node.name)) {\n              if (editor.schema.isValidChild(node.parent.name, \"span\")) {\n                node.parent.insert(marker, node, node.name === \"br\");\n              }\n              break;\n            }\n          }\n        }\n        editor._selectionOverrides.showBlockCaretContainer(parentNode);\n        if (!parserArgs.invalid) {\n          value2 = serializer.serialize(fragment);\n          validInsertion(editor, value2, parentNode);\n        } else {\n          editor.selection.setContent(bookmarkHtml);\n          parentNode = selection.getNode();\n          const rootNode = editor.getBody();\n          if (parentNode.nodeType === 9) {\n            parentNode = node = rootNode;\n          } else {\n            node = parentNode;\n          }\n          while (node !== rootNode) {\n            parentNode = node;\n            node = node.parentNode;\n          }\n          value2 = parentNode === rootNode ? rootNode.innerHTML : dom3.getOuterHTML(parentNode);\n          const root2 = parser.parse(value2);\n          for (let markerNode = root2; markerNode; markerNode = markerNode.walk()) {\n            if (markerNode.attr(\"id\") === \"mce_marker\") {\n              markerNode.replace(fragment);\n              break;\n            }\n          }\n          const toExtract = fragment.children();\n          const parent2 = fragment.parent.name;\n          fragment.unwrap();\n          const invalidChildren = filter$6(toExtract, (node2) => !editor.schema.isValidChild(parent2, node2.name));\n          cleanInvalidNodes(invalidChildren, editor.schema);\n          filter$3(parser.getNodeFilters(), parser.getAttributeFilters(), root2);\n          value2 = serializer.serialize(root2);\n          if (parentNode === rootNode) {\n            dom3.setHTML(rootNode, value2);\n          } else {\n            dom3.setOuterHTML(parentNode, value2);\n          }\n        }\n        reduceInlineTextElements(editor, merge3);\n        moveSelectionToMarker(editor, dom3.get(\"mce_marker\"));\n        unmarkFragmentElements(editor.getBody());\n        trimBrsFromTableCell(dom3, selection.getStart());\n        return value2;\n      };\n      const isTreeNode = (content) => content instanceof AstNode;\n      const moveSelection = (editor) => {\n        if (hasFocus(editor)) {\n          firstPositionIn(editor.getBody()).each((pos) => {\n            const node = pos.getNode();\n            const caretPos = isTable$3(node) ? firstPositionIn(node).getOr(pos) : pos;\n            editor.selection.setRng(caretPos.toRange());\n          });\n        }\n      };\n      const setEditorHtml = (editor, html2, noSelection) => {\n        editor.dom.setHTML(editor.getBody(), html2);\n        if (noSelection !== true) {\n          moveSelection(editor);\n        }\n      };\n      const setContentString = (editor, body, content, args) => {\n        if (content.length === 0 || /^\\s+$/.test(content)) {\n          const padd = '<br data-mce-bogus=\"1\">';\n          if (body.nodeName === \"TABLE\") {\n            content = \"<tr><td>\" + padd + \"</td></tr>\";\n          } else if (/^(UL|OL)$/.test(body.nodeName)) {\n            content = \"<li>\" + padd + \"</li>\";\n          }\n          const forcedRootBlockName = getForcedRootBlock(editor);\n          if (editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n            content = padd;\n            content = editor.dom.createHTML(forcedRootBlockName, getForcedRootBlockAttrs(editor), content);\n          } else if (!content) {\n            content = padd;\n          }\n          setEditorHtml(editor, content, args.no_selection);\n          return {\n            content,\n            html: content\n          };\n        } else {\n          if (args.format !== \"raw\") {\n            content = HtmlSerializer({ validate: false }, editor.schema).serialize(editor.parser.parse(content, {\n              isRootContent: true,\n              insert: true\n            }));\n          }\n          const trimmedHtml = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content);\n          setEditorHtml(editor, trimmedHtml, args.no_selection);\n          return {\n            content: trimmedHtml,\n            html: trimmedHtml\n          };\n        }\n      };\n      const setContentTree = (editor, body, content, args) => {\n        filter$3(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n        const html2 = HtmlSerializer({ validate: false }, editor.schema).serialize(content);\n        const trimmedHtml = isWsPreserveElement(SugarElement.fromDom(body)) ? html2 : Tools.trim(html2);\n        setEditorHtml(editor, trimmedHtml, args.no_selection);\n        return {\n          content,\n          html: trimmedHtml\n        };\n      };\n      const setContentInternal = (editor, content, args) => {\n        return Optional.from(editor.getBody()).map((body) => {\n          if (isTreeNode(content)) {\n            return setContentTree(editor, body, content, args);\n          } else {\n            return setContentString(editor, body, content, args);\n          }\n        }).getOr({\n          content,\n          html: isTreeNode(args.content) ? \"\" : args.content\n        });\n      };\n      const sibling = (scope, predicate) => sibling$1(scope, predicate).isSome();\n      const ensureIsRoot = (isRoot) => isFunction2(isRoot) ? isRoot : never;\n      const ancestor = (scope, transform, isRoot) => {\n        let element = scope.dom;\n        const stop2 = ensureIsRoot(isRoot);\n        while (element.parentNode) {\n          element = element.parentNode;\n          const el = SugarElement.fromDom(element);\n          const transformed = transform(el);\n          if (transformed.isSome()) {\n            return transformed;\n          } else if (stop2(el)) {\n            break;\n          }\n        }\n        return Optional.none();\n      };\n      const closest$2 = (scope, transform, isRoot) => {\n        const current = transform(scope);\n        const stop2 = ensureIsRoot(isRoot);\n        return current.orThunk(() => stop2(scope) ? Optional.none() : ancestor(scope, transform, stop2));\n      };\n      const isEq$3 = isEq$5;\n      const matchesUnInheritedFormatSelector = (ed, node, name2) => {\n        const formatList = ed.formatter.get(name2);\n        if (formatList) {\n          for (let i3 = 0; i3 < formatList.length; i3++) {\n            const format2 = formatList[i3];\n            if (isSelectorFormat(format2) && format2.inherit === false && ed.dom.is(node, format2.selector)) {\n              return true;\n            }\n          }\n        }\n        return false;\n      };\n      const matchParents = (editor, node, name2, vars, similar) => {\n        const root2 = editor.dom.getRoot();\n        if (node === root2) {\n          return false;\n        }\n        node = editor.dom.getParent(node, (node2) => {\n          if (matchesUnInheritedFormatSelector(editor, node2, name2)) {\n            return true;\n          }\n          return node2.parentNode === root2 || !!matchNode(editor, node2, name2, vars, true);\n        });\n        return !!matchNode(editor, node, name2, vars, similar);\n      };\n      const matchName = (dom3, node, format2) => {\n        if (isInlineFormat(format2) && isEq$3(node, format2.inline)) {\n          return true;\n        }\n        if (isBlockFormat(format2) && isEq$3(node, format2.block)) {\n          return true;\n        }\n        if (isSelectorFormat(format2)) {\n          return isElement$6(node) && dom3.is(node, format2.selector);\n        }\n        return false;\n      };\n      const matchItems = (dom3, node, format2, itemName, similar, vars) => {\n        const items = format2[itemName];\n        if (isFunction2(format2.onmatch)) {\n          return format2.onmatch(node, format2, itemName);\n        }\n        if (items) {\n          if (isUndefined2(items.length)) {\n            for (const key in items) {\n              if (has$2(items, key)) {\n                const value2 = itemName === \"attributes\" ? dom3.getAttrib(node, key) : getStyle(dom3, node, key);\n                const expectedValue = replaceVars(items[key], vars);\n                const isEmptyValue = isNullable(value2) || isEmpty$3(value2);\n                if (isEmptyValue && isNullable(expectedValue)) {\n                  continue;\n                }\n                if (similar && isEmptyValue && !format2.exact) {\n                  return false;\n                }\n                if ((!similar || format2.exact) && !isEq$3(value2, normalizeStyleValue(expectedValue, key))) {\n                  return false;\n                }\n              }\n            }\n          } else {\n            for (let i3 = 0; i3 < items.length; i3++) {\n              if (itemName === \"attributes\" ? dom3.getAttrib(node, items[i3]) : getStyle(dom3, node, items[i3])) {\n                return true;\n              }\n            }\n          }\n        }\n        return true;\n      };\n      const matchNode = (ed, node, name2, vars, similar) => {\n        const formatList = ed.formatter.get(name2);\n        const dom3 = ed.dom;\n        if (formatList && node) {\n          for (let i3 = 0; i3 < formatList.length; i3++) {\n            const format2 = formatList[i3];\n            if (matchName(ed.dom, node, format2) && matchItems(dom3, node, format2, \"attributes\", similar, vars) && matchItems(dom3, node, format2, \"styles\", similar, vars)) {\n              const classes = format2.classes;\n              if (classes) {\n                for (let x2 = 0; x2 < classes.length; x2++) {\n                  if (!ed.dom.hasClass(node, replaceVars(classes[x2], vars))) {\n                    return;\n                  }\n                }\n              }\n              return format2;\n            }\n          }\n        }\n      };\n      const match$2 = (editor, name2, vars, node, similar) => {\n        if (node) {\n          return matchParents(editor, node, name2, vars, similar);\n        }\n        node = editor.selection.getNode();\n        if (matchParents(editor, node, name2, vars, similar)) {\n          return true;\n        }\n        const startNode = editor.selection.getStart();\n        if (startNode !== node) {\n          if (matchParents(editor, startNode, name2, vars, similar)) {\n            return true;\n          }\n        }\n        return false;\n      };\n      const matchAll = (editor, names, vars) => {\n        const matchedFormatNames = [];\n        const checkedMap = {};\n        const startElement = editor.selection.getStart();\n        editor.dom.getParent(startElement, (node) => {\n          for (let i3 = 0; i3 < names.length; i3++) {\n            const name2 = names[i3];\n            if (!checkedMap[name2] && matchNode(editor, node, name2, vars)) {\n              checkedMap[name2] = true;\n              matchedFormatNames.push(name2);\n            }\n          }\n        }, editor.dom.getRoot());\n        return matchedFormatNames;\n      };\n      const closest$1 = (editor, names) => {\n        const isRoot = (elm) => eq2(elm, SugarElement.fromDom(editor.getBody()));\n        const match4 = (elm, name2) => matchNode(editor, elm.dom, name2) ? Optional.some(name2) : Optional.none();\n        return Optional.from(editor.selection.getStart(true)).bind((rawElm) => closest$2(SugarElement.fromDom(rawElm), (elm) => findMap(names, (name2) => match4(elm, name2)), isRoot)).getOrNull();\n      };\n      const canApply = (editor, name2) => {\n        const formatList = editor.formatter.get(name2);\n        const dom3 = editor.dom;\n        if (formatList) {\n          const startNode = editor.selection.getStart();\n          const parents2 = getParents$2(dom3, startNode);\n          for (let x2 = formatList.length - 1; x2 >= 0; x2--) {\n            const format2 = formatList[x2];\n            if (!isSelectorFormat(format2)) {\n              return true;\n            }\n            for (let i3 = parents2.length - 1; i3 >= 0; i3--) {\n              if (dom3.is(parents2[i3], format2.selector)) {\n                return true;\n              }\n            }\n          }\n        }\n        return false;\n      };\n      const matchAllOnNode = (editor, node, formatNames) => foldl(formatNames, (acc, name2) => {\n        const matchSimilar = isVariableFormatName(editor, name2);\n        if (editor.formatter.matchNode(node, name2, {}, matchSimilar)) {\n          return acc.concat([name2]);\n        } else {\n          return acc;\n        }\n      }, []);\n      const ZWSP = ZWSP$1, CARET_ID = \"_mce_caret\";\n      const importNode = (ownerDocument, node) => {\n        return ownerDocument.importNode(node, true);\n      };\n      const getEmptyCaretContainers = (node) => {\n        const nodes = [];\n        while (node) {\n          if (node.nodeType === 3 && node.nodeValue !== ZWSP || node.childNodes.length > 1) {\n            return [];\n          }\n          if (node.nodeType === 1) {\n            nodes.push(node);\n          }\n          node = node.firstChild;\n        }\n        return nodes;\n      };\n      const isCaretContainerEmpty = (node) => {\n        return getEmptyCaretContainers(node).length > 0;\n      };\n      const findFirstTextNode = (node) => {\n        if (node) {\n          const walker = new DomTreeWalker(node, node);\n          for (node = walker.current(); node; node = walker.next()) {\n            if (isText$8(node)) {\n              return node;\n            }\n          }\n        }\n        return null;\n      };\n      const createCaretContainer = (fill) => {\n        const caretContainer = SugarElement.fromTag(\"span\");\n        setAll$1(caretContainer, {\n          \"id\": CARET_ID,\n          \"data-mce-bogus\": \"1\",\n          \"data-mce-type\": \"format-caret\"\n        });\n        if (fill) {\n          append$1(caretContainer, SugarElement.fromText(ZWSP));\n        }\n        return caretContainer;\n      };\n      const trimZwspFromCaretContainer = (caretContainerNode) => {\n        const textNode = findFirstTextNode(caretContainerNode);\n        if (textNode && textNode.nodeValue.charAt(0) === ZWSP) {\n          textNode.deleteData(0, 1);\n        }\n        return textNode;\n      };\n      const removeCaretContainerNode = (editor, node, moveCaret2 = true) => {\n        const dom3 = editor.dom, selection = editor.selection;\n        if (isCaretContainerEmpty(node)) {\n          deleteElement$2(editor, false, SugarElement.fromDom(node), moveCaret2);\n        } else {\n          const rng = selection.getRng();\n          const block2 = dom3.getParent(node, dom3.isBlock);\n          const startContainer = rng.startContainer;\n          const startOffset = rng.startOffset;\n          const endContainer = rng.endContainer;\n          const endOffset = rng.endOffset;\n          const textNode = trimZwspFromCaretContainer(node);\n          dom3.remove(node, true);\n          if (startContainer === textNode && startOffset > 0) {\n            rng.setStart(textNode, startOffset - 1);\n          }\n          if (endContainer === textNode && endOffset > 0) {\n            rng.setEnd(textNode, endOffset - 1);\n          }\n          if (block2 && dom3.isEmpty(block2)) {\n            fillWithPaddingBr(SugarElement.fromDom(block2));\n          }\n          selection.setRng(rng);\n        }\n      };\n      const removeCaretContainer = (editor, node, moveCaret2 = true) => {\n        const dom3 = editor.dom, selection = editor.selection;\n        if (!node) {\n          node = getParentCaretContainer(editor.getBody(), selection.getStart());\n          if (!node) {\n            while (node = dom3.get(CARET_ID)) {\n              removeCaretContainerNode(editor, node, false);\n            }\n          }\n        } else {\n          removeCaretContainerNode(editor, node, moveCaret2);\n        }\n      };\n      const insertCaretContainerNode = (editor, caretContainer, formatNode) => {\n        const dom3 = editor.dom, block2 = dom3.getParent(formatNode, curry(isTextBlock$1, editor));\n        if (block2 && dom3.isEmpty(block2)) {\n          formatNode.parentNode.replaceChild(caretContainer, formatNode);\n        } else {\n          removeTrailingBr(SugarElement.fromDom(formatNode));\n          if (dom3.isEmpty(formatNode)) {\n            formatNode.parentNode.replaceChild(caretContainer, formatNode);\n          } else {\n            dom3.insertAfter(caretContainer, formatNode);\n          }\n        }\n      };\n      const appendNode = (parentNode, node) => {\n        parentNode.appendChild(node);\n        return node;\n      };\n      const insertFormatNodesIntoCaretContainer = (formatNodes, caretContainer) => {\n        const innerMostFormatNode = foldr(formatNodes, (parentNode, formatNode) => {\n          return appendNode(parentNode, formatNode.cloneNode(false));\n        }, caretContainer);\n        return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP));\n      };\n      const cleanFormatNode = (editor, caretContainer, formatNode, name2, vars, similar) => {\n        const formatter = editor.formatter;\n        const dom3 = editor.dom;\n        const validFormats = filter$6(keys2(formatter.get()), (formatName) => formatName !== name2 && !contains$1(formatName, \"removeformat\"));\n        const matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n        const uniqueFormats = filter$6(matchedFormats, (fmtName) => !areSimilarFormats(editor, fmtName, name2));\n        if (uniqueFormats.length > 0) {\n          const clonedFormatNode = formatNode.cloneNode(false);\n          dom3.add(caretContainer, clonedFormatNode);\n          formatter.remove(name2, vars, clonedFormatNode, similar);\n          dom3.remove(clonedFormatNode);\n          return Optional.some(clonedFormatNode);\n        } else {\n          return Optional.none();\n        }\n      };\n      const applyCaretFormat = (editor, name2, vars) => {\n        let caretContainer, textNode;\n        const selection = editor.selection;\n        const selectionRng = selection.getRng();\n        let offset = selectionRng.startOffset;\n        const container = selectionRng.startContainer;\n        const text3 = container.nodeValue;\n        caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n        if (caretContainer) {\n          textNode = findFirstTextNode(caretContainer);\n        }\n        const wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n        if (text3 && offset > 0 && offset < text3.length && wordcharRegex.test(text3.charAt(offset)) && wordcharRegex.test(text3.charAt(offset - 1))) {\n          const bookmark = selection.getBookmark();\n          selectionRng.collapse(true);\n          let rng = expandRng(editor, selectionRng, editor.formatter.get(name2));\n          rng = split(rng);\n          editor.formatter.apply(name2, vars, rng);\n          selection.moveToBookmark(bookmark);\n        } else {\n          if (!caretContainer || textNode.nodeValue !== ZWSP) {\n            caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom);\n            textNode = caretContainer.firstChild;\n            selectionRng.insertNode(caretContainer);\n            offset = 1;\n            editor.formatter.apply(name2, vars, caretContainer);\n          } else {\n            editor.formatter.apply(name2, vars, caretContainer);\n          }\n          selection.setCursorLocation(textNode, offset);\n        }\n      };\n      const removeCaretFormat = (editor, name2, vars, similar) => {\n        const dom3 = editor.dom;\n        const selection = editor.selection;\n        let hasContentAfter, node, formatNode;\n        const parents2 = [];\n        const rng = selection.getRng();\n        const container = rng.startContainer;\n        const offset = rng.startOffset;\n        node = container;\n        if (container.nodeType === 3) {\n          if (offset !== container.nodeValue.length) {\n            hasContentAfter = true;\n          }\n          node = node.parentNode;\n        }\n        while (node) {\n          if (matchNode(editor, node, name2, vars, similar)) {\n            formatNode = node;\n            break;\n          }\n          if (node.nextSibling) {\n            hasContentAfter = true;\n          }\n          parents2.push(node);\n          node = node.parentNode;\n        }\n        if (!formatNode) {\n          return;\n        }\n        if (hasContentAfter) {\n          const bookmark = selection.getBookmark();\n          rng.collapse(true);\n          let expandedRng = expandRng(editor, rng, editor.formatter.get(name2), true);\n          expandedRng = split(expandedRng);\n          editor.formatter.remove(name2, vars, expandedRng, similar);\n          selection.moveToBookmark(bookmark);\n        } else {\n          const caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n          const newCaretContainer = createCaretContainer(false).dom;\n          insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null ? caretContainer : formatNode);\n          const cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name2, vars, similar);\n          const caretTextNode = insertFormatNodesIntoCaretContainer(parents2.concat(cleanedFormatNode.toArray()), newCaretContainer);\n          removeCaretContainerNode(editor, caretContainer, false);\n          selection.setCursorLocation(caretTextNode, 1);\n          if (dom3.isEmpty(formatNode)) {\n            dom3.remove(formatNode);\n          }\n        }\n      };\n      const disableCaretContainer = (editor, keyCode) => {\n        const selection = editor.selection, body = editor.getBody();\n        removeCaretContainer(editor, null, false);\n        if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP) {\n          removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n        }\n        if (keyCode === 37 || keyCode === 39) {\n          removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n        }\n      };\n      const setup$u = (editor) => {\n        editor.on(\"mouseup keydown\", (e2) => {\n          disableCaretContainer(editor, e2.keyCode);\n        });\n      };\n      const replaceWithCaretFormat = (targetNode, formatNodes) => {\n        const caretContainer = createCaretContainer(false);\n        const innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom);\n        before$3(SugarElement.fromDom(targetNode), caretContainer);\n        remove$5(SugarElement.fromDom(targetNode));\n        return CaretPosition(innerMost, 0);\n      };\n      const isFormatElement = (editor, element) => {\n        const inlineElements = editor.schema.getTextInlineElements();\n        return has$2(inlineElements, name(element)) && !isCaretNode(element.dom) && !isBogus$2(element.dom);\n      };\n      const isEmptyCaretFormatElement = (element) => {\n        return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n      };\n      const postProcessHooks = {};\n      const filter$2 = filter$4;\n      const each$a = each$e;\n      const addPostProcessHook = (name2, hook) => {\n        const hooks = postProcessHooks[name2];\n        if (!hooks) {\n          postProcessHooks[name2] = [];\n        }\n        postProcessHooks[name2].push(hook);\n      };\n      const postProcess$12 = (name2, editor) => {\n        each$a(postProcessHooks[name2], (hook) => {\n          hook(editor);\n        });\n      };\n      addPostProcessHook(\"pre\", (editor) => {\n        const rng = editor.selection.getRng();\n        let blocks2;\n        const hasPreSibling = (pre) => {\n          return isPre2(pre.previousSibling) && indexOf(blocks2, pre.previousSibling) !== -1;\n        };\n        const joinPre = (pre1, pre2) => {\n          const sPre2 = SugarElement.fromDom(pre2);\n          const doc = documentOrOwner(sPre2).dom;\n          remove$5(sPre2);\n          append(SugarElement.fromDom(pre1), [\n            SugarElement.fromTag(\"br\", doc),\n            SugarElement.fromTag(\"br\", doc),\n            ...children(sPre2)\n          ]);\n        };\n        const isPre2 = matchNodeNames([\"pre\"]);\n        if (!rng.collapsed) {\n          blocks2 = editor.selection.getSelectedBlocks();\n          each$a(filter$2(filter$2(blocks2, isPre2), hasPreSibling), (pre) => {\n            joinPre(pre.previousSibling, pre);\n          });\n        }\n      });\n      const each$9 = Tools.each;\n      const isElementNode$1 = (node) => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n      const findElementSibling = (node, siblingName) => {\n        for (let sibling2 = node; sibling2; sibling2 = sibling2[siblingName]) {\n          if (isText$8(sibling2) && isNotEmpty(sibling2.data)) {\n            return node;\n          }\n          if (isElement$6(sibling2) && !isBookmarkNode$1(sibling2)) {\n            return sibling2;\n          }\n        }\n        return node;\n      };\n      const mergeSiblingsNodes = (dom3, prev2, next2) => {\n        const elementUtils = ElementUtils(dom3);\n        if (prev2 && next2) {\n          prev2 = findElementSibling(prev2, \"previousSibling\");\n          next2 = findElementSibling(next2, \"nextSibling\");\n          if (elementUtils.compare(prev2, next2)) {\n            for (let sibling2 = prev2.nextSibling; sibling2 && sibling2 !== next2; ) {\n              const tmpSibling = sibling2;\n              sibling2 = sibling2.nextSibling;\n              prev2.appendChild(tmpSibling);\n            }\n            dom3.remove(next2);\n            Tools.each(Tools.grep(next2.childNodes), (node) => {\n              prev2.appendChild(node);\n            });\n            return prev2;\n          }\n        }\n        return next2;\n      };\n      const mergeSiblings = (dom3, format2, vars, node) => {\n        if (node && format2.merge_siblings !== false) {\n          const newNode = mergeSiblingsNodes(dom3, getNonWhiteSpaceSibling(node), node);\n          mergeSiblingsNodes(dom3, newNode, getNonWhiteSpaceSibling(newNode, true));\n        }\n      };\n      const clearChildStyles = (dom3, format2, node) => {\n        if (format2.clear_child_styles) {\n          const selector = format2.links ? \"*:not(a)\" : \"*\";\n          each$9(dom3.select(selector, node), (node2) => {\n            if (isElementNode$1(node2)) {\n              each$9(format2.styles, (value2, name2) => {\n                dom3.setStyle(node2, name2, \"\");\n              });\n            }\n          });\n        }\n      };\n      const processChildElements = (node, filter2, process2) => {\n        each$9(node.childNodes, (node2) => {\n          if (isElementNode$1(node2)) {\n            if (filter2(node2)) {\n              process2(node2);\n            }\n            if (node2.hasChildNodes()) {\n              processChildElements(node2, filter2, process2);\n            }\n          }\n        });\n      };\n      const unwrapEmptySpan = (dom3, node) => {\n        if (node.nodeName === \"SPAN\" && dom3.getAttribs(node).length === 0) {\n          dom3.remove(node, true);\n        }\n      };\n      const hasStyle = (dom3, name2) => (node) => !!(node && getStyle(dom3, node, name2));\n      const applyStyle = (dom3, name2, value2) => (node) => {\n        dom3.setStyle(node, name2, value2);\n        if (node.getAttribute(\"style\") === \"\") {\n          node.removeAttribute(\"style\");\n        }\n        unwrapEmptySpan(dom3, node);\n      };\n      const removeResult = Adt.generate([\n        { keep: [] },\n        { rename: [\"name\"] },\n        { removed: [] }\n      ]);\n      const MCE_ATTR_RE = /^(src|href|style)$/;\n      const each$8 = Tools.each;\n      const isEq$2 = isEq$5;\n      const isTableCellOrRow = (node) => /^(TR|TH|TD)$/.test(node.nodeName);\n      const isChildOfInlineParent = (dom3, node, parent2) => dom3.isChildOf(node, parent2) && node !== parent2 && !dom3.isBlock(parent2);\n      const getContainer = (ed, rng, start2) => {\n        let container = rng[start2 ? \"startContainer\" : \"endContainer\"];\n        let offset = rng[start2 ? \"startOffset\" : \"endOffset\"];\n        if (isElement$6(container)) {\n          const lastIdx = container.childNodes.length - 1;\n          if (!start2 && offset) {\n            offset--;\n          }\n          container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n        }\n        if (isText$8(container) && start2 && offset >= container.nodeValue.length) {\n          container = new DomTreeWalker(container, ed.getBody()).next() || container;\n        }\n        if (isText$8(container) && !start2 && offset === 0) {\n          container = new DomTreeWalker(container, ed.getBody()).prev() || container;\n        }\n        return container;\n      };\n      const normalizeTableSelection = (node, start2) => {\n        const prop = start2 ? \"firstChild\" : \"lastChild\";\n        if (isTableCellOrRow(node) && node[prop]) {\n          const childNode = node[prop];\n          if (node.nodeName === \"TR\") {\n            return childNode[prop] || childNode;\n          } else {\n            return childNode;\n          }\n        }\n        return node;\n      };\n      const wrap$1 = (dom3, node, name2, attrs) => {\n        const wrapper = dom3.create(name2, attrs);\n        node.parentNode.insertBefore(wrapper, node);\n        wrapper.appendChild(node);\n        return wrapper;\n      };\n      const wrapWithSiblings = (dom3, node, next2, name2, attrs) => {\n        const start2 = SugarElement.fromDom(node);\n        const wrapper = SugarElement.fromDom(dom3.create(name2, attrs));\n        const siblings2 = next2 ? nextSiblings(start2) : prevSiblings(start2);\n        append(wrapper, siblings2);\n        if (next2) {\n          before$3(start2, wrapper);\n          prepend(wrapper, start2);\n        } else {\n          after$4(start2, wrapper);\n          append$1(wrapper, start2);\n        }\n        return wrapper.dom;\n      };\n      const isColorFormatAndAnchor = (node, format2) => format2.links && node.nodeName === \"A\";\n      const removeNode = (ed, node, format2) => {\n        const parentNode = node.parentNode;\n        let rootBlockElm;\n        const dom3 = ed.dom;\n        const forcedRootBlock = getForcedRootBlock(ed);\n        if (isBlockFormat(format2)) {\n          if (parentNode === dom3.getRoot()) {\n            if (!format2.list_block || !isEq$2(node, format2.list_block)) {\n              each$g(from(node.childNodes), (node2) => {\n                if (isValid(ed, forcedRootBlock, node2.nodeName.toLowerCase())) {\n                  if (!rootBlockElm) {\n                    rootBlockElm = wrap$1(dom3, node2, forcedRootBlock);\n                    dom3.setAttribs(rootBlockElm, getForcedRootBlockAttrs(ed));\n                  } else {\n                    rootBlockElm.appendChild(node2);\n                  }\n                } else {\n                  rootBlockElm = null;\n                }\n              });\n            }\n          }\n        }\n        if (isMixedFormat(format2) && !isEq$2(format2.inline, node)) {\n          return;\n        }\n        dom3.remove(node, true);\n      };\n      const removeFormatInternal = (ed, format2, vars, node, compareNode) => {\n        let stylesModified;\n        const dom3 = ed.dom;\n        if (!matchName(dom3, node, format2) && !isColorFormatAndAnchor(node, format2)) {\n          return removeResult.keep();\n        }\n        const elm = node;\n        if (isInlineFormat(format2) && format2.remove === \"all\" && isArray$1(format2.preserve_attributes)) {\n          const attrsToPreserve = filter$6(dom3.getAttribs(elm), (attr) => contains$2(format2.preserve_attributes, attr.name.toLowerCase()));\n          dom3.removeAllAttribs(elm);\n          each$g(attrsToPreserve, (attr) => dom3.setAttrib(elm, attr.name, attr.value));\n          if (attrsToPreserve.length > 0) {\n            return removeResult.rename(\"span\");\n          }\n        }\n        if (format2.remove !== \"all\") {\n          each$8(format2.styles, (value2, name2) => {\n            value2 = normalizeStyleValue(replaceVars(value2, vars), name2 + \"\");\n            if (isNumber2(name2)) {\n              name2 = value2;\n              compareNode = null;\n            }\n            if (format2.remove_similar || (!compareNode || isEq$2(getStyle(dom3, compareNode, name2), value2))) {\n              dom3.setStyle(elm, name2, \"\");\n            }\n            stylesModified = true;\n          });\n          if (stylesModified && dom3.getAttrib(elm, \"style\") === \"\") {\n            elm.removeAttribute(\"style\");\n            elm.removeAttribute(\"data-mce-style\");\n          }\n          each$8(format2.attributes, (value2, name2) => {\n            let valueOut;\n            value2 = replaceVars(value2, vars);\n            if (isNumber2(name2)) {\n              name2 = value2;\n              compareNode = null;\n            }\n            if (format2.remove_similar || (!compareNode || isEq$2(dom3.getAttrib(compareNode, name2), value2))) {\n              if (name2 === \"class\") {\n                value2 = dom3.getAttrib(elm, name2);\n                if (value2) {\n                  valueOut = \"\";\n                  each$g(value2.split(/\\s+/), (cls) => {\n                    if (/mce\\-\\w+/.test(cls)) {\n                      valueOut += (valueOut ? \" \" : \"\") + cls;\n                    }\n                  });\n                  if (valueOut) {\n                    dom3.setAttrib(elm, name2, valueOut);\n                    return;\n                  }\n                }\n              }\n              if (MCE_ATTR_RE.test(name2)) {\n                elm.removeAttribute(\"data-mce-\" + name2);\n              }\n              if (name2 === \"style\" && matchNodeNames([\"li\"])(elm) && dom3.getStyle(elm, \"list-style-type\") === \"none\") {\n                elm.removeAttribute(name2);\n                dom3.setStyle(elm, \"list-style-type\", \"none\");\n                return;\n              }\n              if (name2 === \"class\") {\n                elm.removeAttribute(\"className\");\n              }\n              elm.removeAttribute(name2);\n            }\n          });\n          each$8(format2.classes, (value2) => {\n            value2 = replaceVars(value2, vars);\n            if (!compareNode || dom3.hasClass(compareNode, value2)) {\n              dom3.removeClass(elm, value2);\n            }\n          });\n          const attrs = dom3.getAttribs(elm);\n          for (let i3 = 0; i3 < attrs.length; i3++) {\n            const attrName = attrs[i3].nodeName;\n            if (attrName.indexOf(\"_\") !== 0 && attrName.indexOf(\"data-\") !== 0) {\n              return removeResult.keep();\n            }\n          }\n        }\n        if (format2.remove !== \"none\") {\n          removeNode(ed, elm, format2);\n          return removeResult.removed();\n        }\n        return removeResult.keep();\n      };\n      const removeFormat$1 = (ed, format2, vars, node, compareNode) => removeFormatInternal(ed, format2, vars, node, compareNode).fold(never, (newName) => {\n        ed.dom.rename(node, newName);\n        return true;\n      }, always);\n      const findFormatRoot = (editor, container, name2, vars, similar) => {\n        let formatRoot;\n        each$g(getParents$2(editor.dom, container.parentNode).reverse(), (parent2) => {\n          if (!formatRoot && parent2.id !== \"_start\" && parent2.id !== \"_end\") {\n            const format2 = matchNode(editor, parent2, name2, vars, similar);\n            if (format2 && format2.split !== false) {\n              formatRoot = parent2;\n            }\n          }\n        });\n        return formatRoot;\n      };\n      const removeFormatFromClone = (editor, format2, vars, clone2) => removeFormatInternal(editor, format2, vars, clone2, clone2).fold(constant2(clone2), (newName) => {\n        const fragment = editor.dom.createFragment();\n        fragment.appendChild(clone2);\n        return editor.dom.rename(clone2, newName);\n      }, constant2(null));\n      const wrapAndSplit = (editor, formatList, formatRoot, container, target, split2, format2, vars) => {\n        let clone2, lastClone, firstClone;\n        const dom3 = editor.dom;\n        if (formatRoot) {\n          const formatRootParent = formatRoot.parentNode;\n          for (let parent2 = container.parentNode; parent2 && parent2 !== formatRootParent; parent2 = parent2.parentNode) {\n            clone2 = dom3.clone(parent2, false);\n            for (let i3 = 0; i3 < formatList.length; i3++) {\n              clone2 = removeFormatFromClone(editor, formatList[i3], vars, clone2);\n              if (clone2 === null) {\n                break;\n              }\n            }\n            if (clone2) {\n              if (lastClone) {\n                clone2.appendChild(lastClone);\n              }\n              if (!firstClone) {\n                firstClone = clone2;\n              }\n              lastClone = clone2;\n            }\n          }\n          if (!format2.mixed || !dom3.isBlock(formatRoot)) {\n            container = dom3.split(formatRoot, container);\n          }\n          if (lastClone) {\n            target.parentNode.insertBefore(lastClone, target);\n            firstClone.appendChild(target);\n            if (isInlineFormat(format2)) {\n              mergeSiblings(dom3, format2, vars, lastClone);\n            }\n          }\n        }\n        return container;\n      };\n      const remove$2 = (ed, name2, vars, node, similar) => {\n        const formatList = ed.formatter.get(name2);\n        const format2 = formatList[0];\n        let contentEditable = true;\n        const dom3 = ed.dom;\n        const selection = ed.selection;\n        const splitToFormatRoot = (container) => {\n          const formatRoot = findFormatRoot(ed, container, name2, vars, similar);\n          return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format2, vars);\n        };\n        const isRemoveBookmarkNode = (node2) => isBookmarkNode$1(node2) && isElement$6(node2) && (node2.id === \"_start\" || node2.id === \"_end\");\n        const removeNodeFormat = (node2) => exists(formatList, (fmt) => removeFormat$1(ed, fmt, vars, node2, node2));\n        const process2 = (node2) => {\n          let lastContentEditable = true;\n          let hasContentEditableState2 = false;\n          if (isElement$6(node2) && dom3.getContentEditable(node2)) {\n            lastContentEditable = contentEditable;\n            contentEditable = dom3.getContentEditable(node2) === \"true\";\n            hasContentEditableState2 = true;\n          }\n          const children2 = from(node2.childNodes);\n          if (contentEditable && !hasContentEditableState2) {\n            const removed = removeNodeFormat(node2);\n            const currentNodeMatches = removed || exists(formatList, (f2) => matchName(dom3, node2, f2));\n            const parentNode = node2.parentNode;\n            if (!currentNodeMatches && isNonNullable(parentNode) && shouldExpandToSelector(format2)) {\n              removeNodeFormat(parentNode);\n            }\n          }\n          if (format2.deep) {\n            if (children2.length) {\n              for (let i3 = 0; i3 < children2.length; i3++) {\n                process2(children2[i3]);\n              }\n              if (hasContentEditableState2) {\n                contentEditable = lastContentEditable;\n              }\n            }\n          }\n          const textDecorations = [\n            \"underline\",\n            \"line-through\",\n            \"overline\"\n          ];\n          each$g(textDecorations, (decoration) => {\n            if (isElement$6(node2) && ed.dom.getStyle(node2, \"text-decoration\") === decoration && node2.parentNode && getTextDecoration(dom3, node2.parentNode) === decoration) {\n              removeFormat$1(ed, {\n                deep: false,\n                exact: true,\n                inline: \"span\",\n                styles: { textDecoration: decoration }\n              }, null, node2);\n            }\n          });\n        };\n        const unwrap2 = (start2) => {\n          const node2 = dom3.get(start2 ? \"_start\" : \"_end\");\n          let out = node2[start2 ? \"firstChild\" : \"lastChild\"];\n          if (isRemoveBookmarkNode(out)) {\n            out = out[start2 ? \"firstChild\" : \"lastChild\"];\n          }\n          if (isText$8(out) && out.data.length === 0) {\n            out = start2 ? node2.previousSibling || node2.nextSibling : node2.nextSibling || node2.previousSibling;\n          }\n          dom3.remove(node2, true);\n          return out;\n        };\n        const removeRngStyle = (rng) => {\n          let startContainer, endContainer;\n          let expandedRng = expandRng(ed, rng, formatList, rng.collapsed);\n          if (format2.split) {\n            expandedRng = split(expandedRng);\n            startContainer = getContainer(ed, expandedRng, true);\n            endContainer = getContainer(ed, expandedRng);\n            if (startContainer !== endContainer) {\n              startContainer = normalizeTableSelection(startContainer, true);\n              endContainer = normalizeTableSelection(endContainer, false);\n              if (isChildOfInlineParent(dom3, startContainer, endContainer)) {\n                const marker = Optional.from(startContainer.firstChild).getOr(startContainer);\n                splitToFormatRoot(wrapWithSiblings(dom3, marker, true, \"span\", {\n                  \"id\": \"_start\",\n                  \"data-mce-type\": \"bookmark\"\n                }));\n                unwrap2(true);\n                return;\n              }\n              if (isChildOfInlineParent(dom3, endContainer, startContainer)) {\n                const marker = Optional.from(endContainer.lastChild).getOr(endContainer);\n                splitToFormatRoot(wrapWithSiblings(dom3, marker, false, \"span\", {\n                  \"id\": \"_end\",\n                  \"data-mce-type\": \"bookmark\"\n                }));\n                unwrap2(false);\n                return;\n              }\n              startContainer = wrap$1(dom3, startContainer, \"span\", {\n                \"id\": \"_start\",\n                \"data-mce-type\": \"bookmark\"\n              });\n              endContainer = wrap$1(dom3, endContainer, \"span\", {\n                \"id\": \"_end\",\n                \"data-mce-type\": \"bookmark\"\n              });\n              const newRng = dom3.createRng();\n              newRng.setStartAfter(startContainer);\n              newRng.setEndBefore(endContainer);\n              walk$3(dom3, newRng, (nodes) => {\n                each$g(nodes, (n3) => {\n                  if (!isBookmarkNode$1(n3) && !isBookmarkNode$1(n3.parentNode)) {\n                    splitToFormatRoot(n3);\n                  }\n                });\n              });\n              splitToFormatRoot(startContainer);\n              splitToFormatRoot(endContainer);\n              startContainer = unwrap2(true);\n              endContainer = unwrap2();\n            } else {\n              startContainer = endContainer = splitToFormatRoot(startContainer);\n            }\n            expandedRng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n            expandedRng.startOffset = dom3.nodeIndex(startContainer);\n            expandedRng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n            expandedRng.endOffset = dom3.nodeIndex(endContainer) + 1;\n          }\n          walk$3(dom3, expandedRng, (nodes) => {\n            each$g(nodes, process2);\n          });\n        };\n        if (node) {\n          if (isNode(node)) {\n            const rng = dom3.createRng();\n            rng.setStartBefore(node);\n            rng.setEndAfter(node);\n            removeRngStyle(rng);\n          } else {\n            removeRngStyle(node);\n          }\n          fireFormatRemove(ed, name2, node, vars);\n          return;\n        }\n        if (dom3.getContentEditable(selection.getNode()) === \"false\") {\n          node = selection.getNode();\n          for (let i3 = 0; i3 < formatList.length; i3++) {\n            if (formatList[i3].ceFalseOverride) {\n              if (removeFormat$1(ed, formatList[i3], vars, node, node)) {\n                break;\n              }\n            }\n          }\n          fireFormatRemove(ed, name2, node, vars);\n          return;\n        }\n        if (!selection.isCollapsed() || !isInlineFormat(format2) || getCellsFromEditor(ed).length) {\n          preserve(selection, true, () => {\n            runOnRanges(ed, removeRngStyle);\n          });\n          if (isInlineFormat(format2) && match$2(ed, name2, vars, selection.getStart())) {\n            moveStart(dom3, selection, selection.getRng());\n          }\n          ed.nodeChanged();\n        } else {\n          removeCaretFormat(ed, name2, vars, similar);\n        }\n        fireFormatRemove(ed, name2, node, vars);\n      };\n      const each$7 = Tools.each;\n      const mergeTextDecorationsAndColor = (dom3, format2, vars, node) => {\n        const processTextDecorationsAndColor = (n3) => {\n          if (n3.nodeType === 1 && n3.parentNode && n3.parentNode.nodeType === 1) {\n            const textDecoration = getTextDecoration(dom3, n3.parentNode);\n            if (dom3.getStyle(n3, \"color\") && textDecoration) {\n              dom3.setStyle(n3, \"text-decoration\", textDecoration);\n            } else if (dom3.getStyle(n3, \"text-decoration\") === textDecoration) {\n              dom3.setStyle(n3, \"text-decoration\", null);\n            }\n          }\n        };\n        if (format2.styles && (format2.styles.color || format2.styles.textDecoration)) {\n          Tools.walk(node, processTextDecorationsAndColor, \"childNodes\");\n          processTextDecorationsAndColor(node);\n        }\n      };\n      const mergeBackgroundColorAndFontSize = (dom3, format2, vars, node) => {\n        if (format2.styles && format2.styles.backgroundColor) {\n          processChildElements(node, hasStyle(dom3, \"fontSize\"), applyStyle(dom3, \"backgroundColor\", replaceVars(format2.styles.backgroundColor, vars)));\n        }\n      };\n      const mergeSubSup = (dom3, format2, vars, node) => {\n        if (isInlineFormat(format2) && (format2.inline === \"sub\" || format2.inline === \"sup\")) {\n          processChildElements(node, hasStyle(dom3, \"fontSize\"), applyStyle(dom3, \"fontSize\", \"\"));\n          dom3.remove(dom3.select(format2.inline === \"sup\" ? \"sub\" : \"sup\", node), true);\n        }\n      };\n      const mergeWithChildren = (editor, formatList, vars, node) => {\n        each$7(formatList, (format2) => {\n          if (isInlineFormat(format2)) {\n            each$7(editor.dom.select(format2.inline, node), (child2) => {\n              if (!isElementNode$1(child2)) {\n                return;\n              }\n              removeFormat$1(editor, format2, vars, child2, format2.exact ? child2 : null);\n            });\n          }\n          clearChildStyles(editor.dom, format2, node);\n        });\n      };\n      const mergeWithParents = (editor, format2, name2, vars, node) => {\n        if (matchNode(editor, node.parentNode, name2, vars)) {\n          if (removeFormat$1(editor, format2, vars, node)) {\n            return;\n          }\n        }\n        if (format2.merge_with_parents) {\n          editor.dom.getParent(node.parentNode, (parent2) => {\n            if (matchNode(editor, parent2, name2, vars)) {\n              removeFormat$1(editor, format2, vars, node);\n              return true;\n            }\n          });\n        }\n      };\n      const each$6 = Tools.each;\n      const isElementNode = (node) => {\n        return isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n      };\n      const canFormatBR = (editor, format2, node, parentName) => {\n        if (canFormatEmptyLines(editor) && isInlineFormat(format2)) {\n          const validBRParentElements = {\n            ...editor.schema.getTextBlockElements(),\n            td: {},\n            th: {},\n            li: {},\n            dt: {},\n            dd: {},\n            figcaption: {},\n            caption: {},\n            details: {},\n            summary: {}\n          };\n          const hasCaretNodeSibling = sibling(SugarElement.fromDom(node), (sibling2) => isCaretNode(sibling2.dom));\n          return hasNonNullableKey(validBRParentElements, parentName) && isEmpty$2(SugarElement.fromDom(node.parentNode), false) && !hasCaretNodeSibling;\n        } else {\n          return false;\n        }\n      };\n      const applyFormat$1 = (ed, name2, vars, node) => {\n        const formatList = ed.formatter.get(name2);\n        const format2 = formatList[0];\n        const isCollapsed = !node && ed.selection.isCollapsed();\n        const dom3 = ed.dom;\n        const selection = ed.selection;\n        const setElementFormat = (elm, fmt = format2) => {\n          if (isFunction2(fmt.onformat)) {\n            fmt.onformat(elm, fmt, vars, node);\n          }\n          each$6(fmt.styles, (value2, name3) => {\n            dom3.setStyle(elm, name3, replaceVars(value2, vars));\n          });\n          if (fmt.styles) {\n            const styleVal = dom3.getAttrib(elm, \"style\");\n            if (styleVal) {\n              dom3.setAttrib(elm, \"data-mce-style\", styleVal);\n            }\n          }\n          each$6(fmt.attributes, (value2, name3) => {\n            dom3.setAttrib(elm, name3, replaceVars(value2, vars));\n          });\n          each$6(fmt.classes, (value2) => {\n            value2 = replaceVars(value2, vars);\n            if (!dom3.hasClass(elm, value2)) {\n              dom3.addClass(elm, value2);\n            }\n          });\n        };\n        const applyNodeStyle = (formatList2, node2) => {\n          let found = false;\n          each$6(formatList2, (format3) => {\n            if (!isSelectorFormat(format3)) {\n              return false;\n            }\n            if (isNonNullable(format3.collapsed) && format3.collapsed !== isCollapsed) {\n              return;\n            }\n            if (dom3.is(node2, format3.selector) && !isCaretNode(node2)) {\n              setElementFormat(node2, format3);\n              found = true;\n              return false;\n            }\n          });\n          return found;\n        };\n        const createWrapElement = (wrapName) => {\n          if (isString2(wrapName)) {\n            const wrapElm = dom3.create(wrapName);\n            setElementFormat(wrapElm);\n            return wrapElm;\n          } else {\n            return null;\n          }\n        };\n        const applyRngStyle = (dom4, rng, nodeSpecific) => {\n          const newWrappers = [];\n          let contentEditable = true;\n          const wrapName = format2.inline || format2.block;\n          const wrapElm = createWrapElement(wrapName);\n          walk$3(dom4, rng, (nodes) => {\n            let currentWrapElm;\n            const process2 = (node2) => {\n              let hasContentEditableState2 = false;\n              let lastContentEditable = contentEditable;\n              const nodeName = node2.nodeName.toLowerCase();\n              const parentNode = node2.parentNode;\n              const parentName = parentNode.nodeName.toLowerCase();\n              if (isElement$6(node2) && dom4.getContentEditable(node2)) {\n                lastContentEditable = contentEditable;\n                contentEditable = dom4.getContentEditable(node2) === \"true\";\n                hasContentEditableState2 = true;\n              }\n              if (isBr$5(node2) && !canFormatBR(ed, format2, node2, parentName)) {\n                currentWrapElm = null;\n                if (isBlockFormat(format2)) {\n                  dom4.remove(node2);\n                }\n                return;\n              }\n              if (isBlockFormat(format2) && format2.wrapper && matchNode(ed, node2, name2, vars)) {\n                currentWrapElm = null;\n                return;\n              }\n              if (contentEditable && !hasContentEditableState2 && isBlockFormat(format2) && !format2.wrapper && isTextBlock$1(ed, nodeName) && isValid(ed, parentName, wrapName)) {\n                const elm = dom4.rename(node2, wrapName);\n                setElementFormat(elm);\n                newWrappers.push(elm);\n                currentWrapElm = null;\n                return;\n              }\n              if (isSelectorFormat(format2)) {\n                let found = applyNodeStyle(formatList, node2);\n                if (!found && isNonNullable(parentNode) && shouldExpandToSelector(format2)) {\n                  found = applyNodeStyle(formatList, parentNode);\n                }\n                if (!isInlineFormat(format2) || found) {\n                  currentWrapElm = null;\n                  return;\n                }\n              }\n              if (contentEditable && !hasContentEditableState2 && isValid(ed, wrapName, nodeName) && isValid(ed, parentName, wrapName) && !(!nodeSpecific && isText$8(node2) && isZwsp(node2.data)) && !isCaretNode(node2) && (!isInlineFormat(format2) || !dom4.isBlock(node2))) {\n                if (!currentWrapElm) {\n                  currentWrapElm = dom4.clone(wrapElm, false);\n                  node2.parentNode.insertBefore(currentWrapElm, node2);\n                  newWrappers.push(currentWrapElm);\n                }\n                currentWrapElm.appendChild(node2);\n              } else {\n                currentWrapElm = null;\n                each$g(from(node2.childNodes), process2);\n                if (hasContentEditableState2) {\n                  contentEditable = lastContentEditable;\n                }\n                currentWrapElm = null;\n              }\n            };\n            each$g(nodes, process2);\n          });\n          if (format2.links === true) {\n            each$g(newWrappers, (node2) => {\n              const process2 = (node3) => {\n                if (node3.nodeName === \"A\") {\n                  setElementFormat(node3, format2);\n                }\n                each$g(from(node3.childNodes), process2);\n              };\n              process2(node2);\n            });\n          }\n          each$g(newWrappers, (node2) => {\n            const getChildCount = (node3) => {\n              let count2 = 0;\n              each$g(node3.childNodes, (node4) => {\n                if (!isEmptyTextNode$1(node4) && !isBookmarkNode$1(node4)) {\n                  count2++;\n                }\n              });\n              return count2;\n            };\n            const mergeStyles = (node3) => {\n              const childElement = find$2(node3.childNodes, isElementNode).filter((child2) => matchName(dom4, child2, format2));\n              return childElement.map((child2) => {\n                const clone2 = dom4.clone(child2, false);\n                setElementFormat(clone2);\n                dom4.replace(clone2, node3, true);\n                dom4.remove(child2, true);\n                return clone2;\n              }).getOr(node3);\n            };\n            const childCount = getChildCount(node2);\n            if ((newWrappers.length > 1 || !dom4.isBlock(node2)) && childCount === 0) {\n              dom4.remove(node2, true);\n              return;\n            }\n            if (isInlineFormat(format2) || isBlockFormat(format2) && format2.wrapper) {\n              if (!format2.exact && childCount === 1) {\n                node2 = mergeStyles(node2);\n              }\n              mergeWithChildren(ed, formatList, vars, node2);\n              mergeWithParents(ed, format2, name2, vars, node2);\n              mergeBackgroundColorAndFontSize(dom4, format2, vars, node2);\n              mergeTextDecorationsAndColor(dom4, format2, vars, node2);\n              mergeSubSup(dom4, format2, vars, node2);\n              mergeSiblings(dom4, format2, vars, node2);\n            }\n          });\n        };\n        if (dom3.getContentEditable(selection.getNode()) === \"false\") {\n          node = selection.getNode();\n          for (let i3 = 0, l2 = formatList.length; i3 < l2; i3++) {\n            const formatItem = formatList[i3];\n            if (formatItem.ceFalseOverride && isSelectorFormat(formatItem) && dom3.is(node, formatItem.selector)) {\n              setElementFormat(node, formatItem);\n              break;\n            }\n          }\n          fireFormatApply(ed, name2, node, vars);\n          return;\n        }\n        if (format2) {\n          if (node) {\n            if (isNode(node)) {\n              if (!applyNodeStyle(formatList, node)) {\n                const rng = dom3.createRng();\n                rng.setStartBefore(node);\n                rng.setEndAfter(node);\n                applyRngStyle(dom3, expandRng(ed, rng, formatList), true);\n              }\n            } else {\n              applyRngStyle(dom3, node, true);\n            }\n          } else {\n            if (!isCollapsed || !isInlineFormat(format2) || getCellsFromEditor(ed).length) {\n              selection.setRng(normalize3(selection.getRng()));\n              preserve(selection, true, () => {\n                runOnRanges(ed, (selectionRng, fake) => {\n                  const expandedRng = fake ? selectionRng : expandRng(ed, selectionRng, formatList);\n                  applyRngStyle(dom3, expandedRng, false);\n                });\n              });\n              moveStart(dom3, selection, selection.getRng());\n              ed.nodeChanged();\n            } else {\n              applyCaretFormat(ed, name2, vars);\n            }\n          }\n          postProcess$12(name2, ed);\n        }\n        fireFormatApply(ed, name2, node, vars);\n      };\n      const hasVars = (value2) => has$2(value2, \"vars\");\n      const setup$t = (registeredFormatListeners, editor) => {\n        registeredFormatListeners.set({});\n        editor.on(\"NodeChange\", (e2) => {\n          updateAndFireChangeCallbacks(editor, e2.element, registeredFormatListeners.get());\n        });\n        editor.on(\"FormatApply FormatRemove\", (e2) => {\n          const element = Optional.from(e2.node).map((nodeOrRange) => isNode(nodeOrRange) ? nodeOrRange : nodeOrRange.startContainer).bind((node) => isElement$6(node) ? Optional.some(node) : Optional.from(node.parentElement)).getOrThunk(() => fallbackElement(editor));\n          updateAndFireChangeCallbacks(editor, element, registeredFormatListeners.get());\n        });\n      };\n      const fallbackElement = (editor) => editor.selection.getStart();\n      const matchingNode = (editor, parents2, format2, similar, vars) => {\n        const isMatchingNode = (node) => {\n          const matchingFormat = editor.formatter.matchNode(node, format2, vars !== null && vars !== void 0 ? vars : {}, similar);\n          return !isUndefined2(matchingFormat);\n        };\n        const isUnableToMatch = (node) => {\n          if (matchesUnInheritedFormatSelector(editor, node, format2)) {\n            return true;\n          } else {\n            if (!similar) {\n              return isNonNullable(editor.formatter.matchNode(node, format2, vars, true));\n            } else {\n              return false;\n            }\n          }\n        };\n        return findUntil$1(parents2, isMatchingNode, isUnableToMatch);\n      };\n      const getParents = (editor, elm) => {\n        const element = elm !== null && elm !== void 0 ? elm : fallbackElement(editor);\n        return filter$6(getParents$2(editor.dom, element), (node) => isElement$6(node) && !isBogus$2(node));\n      };\n      const updateAndFireChangeCallbacks = (editor, elm, registeredCallbacks) => {\n        const parents2 = getParents(editor, elm);\n        each$f(registeredCallbacks, (data2, format2) => {\n          const runIfChanged = (spec) => {\n            const match4 = matchingNode(editor, parents2, format2, spec.similar, hasVars(spec) ? spec.vars : void 0);\n            const isSet2 = match4.isSome();\n            if (spec.state.get() !== isSet2) {\n              spec.state.set(isSet2);\n              const node = match4.getOr(elm);\n              if (hasVars(spec)) {\n                spec.callback(isSet2, {\n                  node,\n                  format: format2,\n                  parents: parents2\n                });\n              } else {\n                each$g(spec.callbacks, (callback) => callback(isSet2, {\n                  node,\n                  format: format2,\n                  parents: parents2\n                }));\n              }\n            }\n          };\n          each$g([\n            data2.withSimilar,\n            data2.withoutSimilar\n          ], runIfChanged);\n          each$g(data2.withVars, runIfChanged);\n        });\n      };\n      const addListeners = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n        const formatChangeItems = registeredFormatListeners.get();\n        each$g(formats.split(\",\"), (format2) => {\n          const group = get$a(formatChangeItems, format2).getOrThunk(() => {\n            const base2 = {\n              withSimilar: {\n                state: Cell(false),\n                similar: true,\n                callbacks: []\n              },\n              withoutSimilar: {\n                state: Cell(false),\n                similar: false,\n                callbacks: []\n              },\n              withVars: []\n            };\n            formatChangeItems[format2] = base2;\n            return base2;\n          });\n          const getCurrent = () => {\n            const parents2 = getParents(editor);\n            return matchingNode(editor, parents2, format2, similar, vars).isSome();\n          };\n          if (isUndefined2(vars)) {\n            const toAppendTo = similar ? group.withSimilar : group.withoutSimilar;\n            toAppendTo.callbacks.push(callback);\n            if (toAppendTo.callbacks.length === 1) {\n              toAppendTo.state.set(getCurrent());\n            }\n          } else {\n            group.withVars.push({\n              state: Cell(getCurrent()),\n              similar,\n              vars,\n              callback\n            });\n          }\n        });\n        registeredFormatListeners.set(formatChangeItems);\n      };\n      const removeListeners = (registeredFormatListeners, formats, callback) => {\n        const formatChangeItems = registeredFormatListeners.get();\n        each$g(formats.split(\",\"), (format2) => get$a(formatChangeItems, format2).each((group) => {\n          formatChangeItems[format2] = {\n            withSimilar: {\n              ...group.withSimilar,\n              callbacks: filter$6(group.withSimilar.callbacks, (cb) => cb !== callback)\n            },\n            withoutSimilar: {\n              ...group.withoutSimilar,\n              callbacks: filter$6(group.withoutSimilar.callbacks, (cb) => cb !== callback)\n            },\n            withVars: filter$6(group.withVars, (item) => item.callback !== callback)\n          };\n        }));\n        registeredFormatListeners.set(formatChangeItems);\n      };\n      const formatChangedInternal = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n        if (registeredFormatListeners.get() === null) {\n          setup$t(registeredFormatListeners, editor);\n        }\n        addListeners(editor, registeredFormatListeners, formats, callback, similar, vars);\n        return { unbind: () => removeListeners(registeredFormatListeners, formats, callback) };\n      };\n      const toggle = (editor, name2, vars, node) => {\n        const fmt = editor.formatter.get(name2);\n        if (match$2(editor, name2, vars, node) && (!(\"toggle\" in fmt[0]) || fmt[0].toggle)) {\n          remove$2(editor, name2, vars, node);\n        } else {\n          applyFormat$1(editor, name2, vars, node);\n        }\n      };\n      function _toConsumableArray(arr) {\n        if (Array.isArray(arr)) {\n          for (var i3 = 0, arr2 = Array(arr.length); i3 < arr.length; i3++) {\n            arr2[i3] = arr[i3];\n          }\n          return arr2;\n        } else {\n          return Array.from(arr);\n        }\n      }\n      var hasOwnProperty2 = Object.hasOwnProperty, setPrototypeOf = Object.setPrototypeOf, isFrozen = Object.isFrozen, getPrototypeOf = Object.getPrototypeOf, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n      var freeze = Object.freeze, seal = Object.seal, create$7 = Object.create;\n      var _ref = typeof Reflect !== \"undefined\" && Reflect, apply2 = _ref.apply, construct = _ref.construct;\n      if (!apply2) {\n        apply2 = function apply3(fun, thisValue, args) {\n          return fun.apply(thisValue, args);\n        };\n      }\n      if (!freeze) {\n        freeze = function freeze2(x2) {\n          return x2;\n        };\n      }\n      if (!seal) {\n        seal = function seal2(x2) {\n          return x2;\n        };\n      }\n      if (!construct) {\n        construct = function construct2(Func, args) {\n          return new (Function.prototype.bind.apply(Func, [null].concat(_toConsumableArray(args))))();\n        };\n      }\n      var arrayForEach = unapply(Array.prototype.forEach);\n      var arrayPop = unapply(Array.prototype.pop);\n      var arrayPush2 = unapply(Array.prototype.push);\n      var stringToLowerCase = unapply(String.prototype.toLowerCase);\n      var stringMatch = unapply(String.prototype.match);\n      var stringReplace = unapply(String.prototype.replace);\n      var stringIndexOf = unapply(String.prototype.indexOf);\n      var stringTrim = unapply(String.prototype.trim);\n      var regExpTest = unapply(RegExp.prototype.test);\n      var typeErrorCreate = unconstruct(TypeError);\n      function unapply(func) {\n        return function(thisArg) {\n          for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n            args[_key - 1] = arguments[_key];\n          }\n          return apply2(func, thisArg, args);\n        };\n      }\n      function unconstruct(func) {\n        return function() {\n          for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            args[_key2] = arguments[_key2];\n          }\n          return construct(func, args);\n        };\n      }\n      function addToSet(set3, array2) {\n        if (setPrototypeOf) {\n          setPrototypeOf(set3, null);\n        }\n        var l2 = array2.length;\n        while (l2--) {\n          var element = array2[l2];\n          if (typeof element === \"string\") {\n            var lcElement = stringToLowerCase(element);\n            if (lcElement !== element) {\n              if (!isFrozen(array2)) {\n                array2[l2] = lcElement;\n              }\n              element = lcElement;\n            }\n          }\n          set3[element] = true;\n        }\n        return set3;\n      }\n      function clone(object2) {\n        var newObject = create$7(null);\n        var property = void 0;\n        for (property in object2) {\n          if (apply2(hasOwnProperty2, object2, [property])) {\n            newObject[property] = object2[property];\n          }\n        }\n        return newObject;\n      }\n      function lookupGetter(object2, prop) {\n        while (object2 !== null) {\n          var desc = getOwnPropertyDescriptor(object2, prop);\n          if (desc) {\n            if (desc.get) {\n              return unapply(desc.get);\n            }\n            if (typeof desc.value === \"function\") {\n              return unapply(desc.value);\n            }\n          }\n          object2 = getPrototypeOf(object2);\n        }\n        function fallbackValue(element) {\n          console.warn(\"fallback value for\", element);\n          return null;\n        }\n        return fallbackValue;\n      }\n      var html = freeze([\n        \"a\",\n        \"abbr\",\n        \"acronym\",\n        \"address\",\n        \"area\",\n        \"article\",\n        \"aside\",\n        \"audio\",\n        \"b\",\n        \"bdi\",\n        \"bdo\",\n        \"big\",\n        \"blink\",\n        \"blockquote\",\n        \"body\",\n        \"br\",\n        \"button\",\n        \"canvas\",\n        \"caption\",\n        \"center\",\n        \"cite\",\n        \"code\",\n        \"col\",\n        \"colgroup\",\n        \"content\",\n        \"data\",\n        \"datalist\",\n        \"dd\",\n        \"decorator\",\n        \"del\",\n        \"details\",\n        \"dfn\",\n        \"dialog\",\n        \"dir\",\n        \"div\",\n        \"dl\",\n        \"dt\",\n        \"element\",\n        \"em\",\n        \"fieldset\",\n        \"figcaption\",\n        \"figure\",\n        \"font\",\n        \"footer\",\n        \"form\",\n        \"h1\",\n        \"h2\",\n        \"h3\",\n        \"h4\",\n        \"h5\",\n        \"h6\",\n        \"head\",\n        \"header\",\n        \"hgroup\",\n        \"hr\",\n        \"html\",\n        \"i\",\n        \"img\",\n        \"input\",\n        \"ins\",\n        \"kbd\",\n        \"label\",\n        \"legend\",\n        \"li\",\n        \"main\",\n        \"map\",\n        \"mark\",\n        \"marquee\",\n        \"menu\",\n        \"menuitem\",\n        \"meter\",\n        \"nav\",\n        \"nobr\",\n        \"ol\",\n        \"optgroup\",\n        \"option\",\n        \"output\",\n        \"p\",\n        \"picture\",\n        \"pre\",\n        \"progress\",\n        \"q\",\n        \"rp\",\n        \"rt\",\n        \"ruby\",\n        \"s\",\n        \"samp\",\n        \"section\",\n        \"select\",\n        \"shadow\",\n        \"small\",\n        \"source\",\n        \"spacer\",\n        \"span\",\n        \"strike\",\n        \"strong\",\n        \"style\",\n        \"sub\",\n        \"summary\",\n        \"sup\",\n        \"table\",\n        \"tbody\",\n        \"td\",\n        \"template\",\n        \"textarea\",\n        \"tfoot\",\n        \"th\",\n        \"thead\",\n        \"time\",\n        \"tr\",\n        \"track\",\n        \"tt\",\n        \"u\",\n        \"ul\",\n        \"var\",\n        \"video\",\n        \"wbr\"\n      ]);\n      var svg = freeze([\n        \"svg\",\n        \"a\",\n        \"altglyph\",\n        \"altglyphdef\",\n        \"altglyphitem\",\n        \"animatecolor\",\n        \"animatemotion\",\n        \"animatetransform\",\n        \"circle\",\n        \"clippath\",\n        \"defs\",\n        \"desc\",\n        \"ellipse\",\n        \"filter\",\n        \"font\",\n        \"g\",\n        \"glyph\",\n        \"glyphref\",\n        \"hkern\",\n        \"image\",\n        \"line\",\n        \"lineargradient\",\n        \"marker\",\n        \"mask\",\n        \"metadata\",\n        \"mpath\",\n        \"path\",\n        \"pattern\",\n        \"polygon\",\n        \"polyline\",\n        \"radialgradient\",\n        \"rect\",\n        \"stop\",\n        \"style\",\n        \"switch\",\n        \"symbol\",\n        \"text\",\n        \"textpath\",\n        \"title\",\n        \"tref\",\n        \"tspan\",\n        \"view\",\n        \"vkern\"\n      ]);\n      var svgFilters = freeze([\n        \"feBlend\",\n        \"feColorMatrix\",\n        \"feComponentTransfer\",\n        \"feComposite\",\n        \"feConvolveMatrix\",\n        \"feDiffuseLighting\",\n        \"feDisplacementMap\",\n        \"feDistantLight\",\n        \"feFlood\",\n        \"feFuncA\",\n        \"feFuncB\",\n        \"feFuncG\",\n        \"feFuncR\",\n        \"feGaussianBlur\",\n        \"feImage\",\n        \"feMerge\",\n        \"feMergeNode\",\n        \"feMorphology\",\n        \"feOffset\",\n        \"fePointLight\",\n        \"feSpecularLighting\",\n        \"feSpotLight\",\n        \"feTile\",\n        \"feTurbulence\"\n      ]);\n      var svgDisallowed = freeze([\n        \"animate\",\n        \"color-profile\",\n        \"cursor\",\n        \"discard\",\n        \"fedropshadow\",\n        \"font-face\",\n        \"font-face-format\",\n        \"font-face-name\",\n        \"font-face-src\",\n        \"font-face-uri\",\n        \"foreignobject\",\n        \"hatch\",\n        \"hatchpath\",\n        \"mesh\",\n        \"meshgradient\",\n        \"meshpatch\",\n        \"meshrow\",\n        \"missing-glyph\",\n        \"script\",\n        \"set\",\n        \"solidcolor\",\n        \"unknown\",\n        \"use\"\n      ]);\n      var mathMl = freeze([\n        \"math\",\n        \"menclose\",\n        \"merror\",\n        \"mfenced\",\n        \"mfrac\",\n        \"mglyph\",\n        \"mi\",\n        \"mlabeledtr\",\n        \"mmultiscripts\",\n        \"mn\",\n        \"mo\",\n        \"mover\",\n        \"mpadded\",\n        \"mphantom\",\n        \"mroot\",\n        \"mrow\",\n        \"ms\",\n        \"mspace\",\n        \"msqrt\",\n        \"mstyle\",\n        \"msub\",\n        \"msup\",\n        \"msubsup\",\n        \"mtable\",\n        \"mtd\",\n        \"mtext\",\n        \"mtr\",\n        \"munder\",\n        \"munderover\"\n      ]);\n      var mathMlDisallowed = freeze([\n        \"maction\",\n        \"maligngroup\",\n        \"malignmark\",\n        \"mlongdiv\",\n        \"mscarries\",\n        \"mscarry\",\n        \"msgroup\",\n        \"mstack\",\n        \"msline\",\n        \"msrow\",\n        \"semantics\",\n        \"annotation\",\n        \"annotation-xml\",\n        \"mprescripts\",\n        \"none\"\n      ]);\n      var text2 = freeze([\"#text\"]);\n      var html$1 = freeze([\n        \"accept\",\n        \"action\",\n        \"align\",\n        \"alt\",\n        \"autocapitalize\",\n        \"autocomplete\",\n        \"autopictureinpicture\",\n        \"autoplay\",\n        \"background\",\n        \"bgcolor\",\n        \"border\",\n        \"capture\",\n        \"cellpadding\",\n        \"cellspacing\",\n        \"checked\",\n        \"cite\",\n        \"class\",\n        \"clear\",\n        \"color\",\n        \"cols\",\n        \"colspan\",\n        \"controls\",\n        \"controlslist\",\n        \"coords\",\n        \"crossorigin\",\n        \"datetime\",\n        \"decoding\",\n        \"default\",\n        \"dir\",\n        \"disabled\",\n        \"disablepictureinpicture\",\n        \"disableremoteplayback\",\n        \"download\",\n        \"draggable\",\n        \"enctype\",\n        \"enterkeyhint\",\n        \"face\",\n        \"for\",\n        \"headers\",\n        \"height\",\n        \"hidden\",\n        \"high\",\n        \"href\",\n        \"hreflang\",\n        \"id\",\n        \"inputmode\",\n        \"integrity\",\n        \"ismap\",\n        \"kind\",\n        \"label\",\n        \"lang\",\n        \"list\",\n        \"loading\",\n        \"loop\",\n        \"low\",\n        \"max\",\n        \"maxlength\",\n        \"media\",\n        \"method\",\n        \"min\",\n        \"minlength\",\n        \"multiple\",\n        \"muted\",\n        \"name\",\n        \"nonce\",\n        \"noshade\",\n        \"novalidate\",\n        \"nowrap\",\n        \"open\",\n        \"optimum\",\n        \"pattern\",\n        \"placeholder\",\n        \"playsinline\",\n        \"poster\",\n        \"preload\",\n        \"pubdate\",\n        \"radiogroup\",\n        \"readonly\",\n        \"rel\",\n        \"required\",\n        \"rev\",\n        \"reversed\",\n        \"role\",\n        \"rows\",\n        \"rowspan\",\n        \"spellcheck\",\n        \"scope\",\n        \"selected\",\n        \"shape\",\n        \"size\",\n        \"sizes\",\n        \"span\",\n        \"srclang\",\n        \"start\",\n        \"src\",\n        \"srcset\",\n        \"step\",\n        \"style\",\n        \"summary\",\n        \"tabindex\",\n        \"title\",\n        \"translate\",\n        \"type\",\n        \"usemap\",\n        \"valign\",\n        \"value\",\n        \"width\",\n        \"xmlns\",\n        \"slot\"\n      ]);\n      var svg$1 = freeze([\n        \"accent-height\",\n        \"accumulate\",\n        \"additive\",\n        \"alignment-baseline\",\n        \"ascent\",\n        \"attributename\",\n        \"attributetype\",\n        \"azimuth\",\n        \"basefrequency\",\n        \"baseline-shift\",\n        \"begin\",\n        \"bias\",\n        \"by\",\n        \"class\",\n        \"clip\",\n        \"clippathunits\",\n        \"clip-path\",\n        \"clip-rule\",\n        \"color\",\n        \"color-interpolation\",\n        \"color-interpolation-filters\",\n        \"color-profile\",\n        \"color-rendering\",\n        \"cx\",\n        \"cy\",\n        \"d\",\n        \"dx\",\n        \"dy\",\n        \"diffuseconstant\",\n        \"direction\",\n        \"display\",\n        \"divisor\",\n        \"dur\",\n        \"edgemode\",\n        \"elevation\",\n        \"end\",\n        \"fill\",\n        \"fill-opacity\",\n        \"fill-rule\",\n        \"filter\",\n        \"filterunits\",\n        \"flood-color\",\n        \"flood-opacity\",\n        \"font-family\",\n        \"font-size\",\n        \"font-size-adjust\",\n        \"font-stretch\",\n        \"font-style\",\n        \"font-variant\",\n        \"font-weight\",\n        \"fx\",\n        \"fy\",\n        \"g1\",\n        \"g2\",\n        \"glyph-name\",\n        \"glyphref\",\n        \"gradientunits\",\n        \"gradienttransform\",\n        \"height\",\n        \"href\",\n        \"id\",\n        \"image-rendering\",\n        \"in\",\n        \"in2\",\n        \"k\",\n        \"k1\",\n        \"k2\",\n        \"k3\",\n        \"k4\",\n        \"kerning\",\n        \"keypoints\",\n        \"keysplines\",\n        \"keytimes\",\n        \"lang\",\n        \"lengthadjust\",\n        \"letter-spacing\",\n        \"kernelmatrix\",\n        \"kernelunitlength\",\n        \"lighting-color\",\n        \"local\",\n        \"marker-end\",\n        \"marker-mid\",\n        \"marker-start\",\n        \"markerheight\",\n        \"markerunits\",\n        \"markerwidth\",\n        \"maskcontentunits\",\n        \"maskunits\",\n        \"max\",\n        \"mask\",\n        \"media\",\n        \"method\",\n        \"mode\",\n        \"min\",\n        \"name\",\n        \"numoctaves\",\n        \"offset\",\n        \"operator\",\n        \"opacity\",\n        \"order\",\n        \"orient\",\n        \"orientation\",\n        \"origin\",\n        \"overflow\",\n        \"paint-order\",\n        \"path\",\n        \"pathlength\",\n        \"patterncontentunits\",\n        \"patterntransform\",\n        \"patternunits\",\n        \"points\",\n        \"preservealpha\",\n        \"preserveaspectratio\",\n        \"primitiveunits\",\n        \"r\",\n        \"rx\",\n        \"ry\",\n        \"radius\",\n        \"refx\",\n        \"refy\",\n        \"repeatcount\",\n        \"repeatdur\",\n        \"restart\",\n        \"result\",\n        \"rotate\",\n        \"scale\",\n        \"seed\",\n        \"shape-rendering\",\n        \"specularconstant\",\n        \"specularexponent\",\n        \"spreadmethod\",\n        \"startoffset\",\n        \"stddeviation\",\n        \"stitchtiles\",\n        \"stop-color\",\n        \"stop-opacity\",\n        \"stroke-dasharray\",\n        \"stroke-dashoffset\",\n        \"stroke-linecap\",\n        \"stroke-linejoin\",\n        \"stroke-miterlimit\",\n        \"stroke-opacity\",\n        \"stroke\",\n        \"stroke-width\",\n        \"style\",\n        \"surfacescale\",\n        \"systemlanguage\",\n        \"tabindex\",\n        \"targetx\",\n        \"targety\",\n        \"transform\",\n        \"transform-origin\",\n        \"text-anchor\",\n        \"text-decoration\",\n        \"text-rendering\",\n        \"textlength\",\n        \"type\",\n        \"u1\",\n        \"u2\",\n        \"unicode\",\n        \"values\",\n        \"viewbox\",\n        \"visibility\",\n        \"version\",\n        \"vert-adv-y\",\n        \"vert-origin-x\",\n        \"vert-origin-y\",\n        \"width\",\n        \"word-spacing\",\n        \"wrap\",\n        \"writing-mode\",\n        \"xchannelselector\",\n        \"ychannelselector\",\n        \"x\",\n        \"x1\",\n        \"x2\",\n        \"xmlns\",\n        \"y\",\n        \"y1\",\n        \"y2\",\n        \"z\",\n        \"zoomandpan\"\n      ]);\n      var mathMl$1 = freeze([\n        \"accent\",\n        \"accentunder\",\n        \"align\",\n        \"bevelled\",\n        \"close\",\n        \"columnsalign\",\n        \"columnlines\",\n        \"columnspan\",\n        \"denomalign\",\n        \"depth\",\n        \"dir\",\n        \"display\",\n        \"displaystyle\",\n        \"encoding\",\n        \"fence\",\n        \"frame\",\n        \"height\",\n        \"href\",\n        \"id\",\n        \"largeop\",\n        \"length\",\n        \"linethickness\",\n        \"lspace\",\n        \"lquote\",\n        \"mathbackground\",\n        \"mathcolor\",\n        \"mathsize\",\n        \"mathvariant\",\n        \"maxsize\",\n        \"minsize\",\n        \"movablelimits\",\n        \"notation\",\n        \"numalign\",\n        \"open\",\n        \"rowalign\",\n        \"rowlines\",\n        \"rowspacing\",\n        \"rowspan\",\n        \"rspace\",\n        \"rquote\",\n        \"scriptlevel\",\n        \"scriptminsize\",\n        \"scriptsizemultiplier\",\n        \"selection\",\n        \"separator\",\n        \"separators\",\n        \"stretchy\",\n        \"subscriptshift\",\n        \"supscriptshift\",\n        \"symmetric\",\n        \"voffset\",\n        \"width\",\n        \"xmlns\"\n      ]);\n      var xml = freeze([\n        \"xlink:href\",\n        \"xml:id\",\n        \"xlink:title\",\n        \"xml:space\",\n        \"xmlns:xlink\"\n      ]);\n      var MUSTACHE_EXPR = seal(/\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm);\n      var ERB_EXPR = seal(/<%[\\s\\S]*|[\\s\\S]*%>/gm);\n      var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/);\n      var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/);\n      var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i);\n      var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n      var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g);\n      var DOCTYPE_NAME = seal(/^html$/i);\n      var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function(obj) {\n        return typeof obj;\n      } : function(obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n      };\n      function _toConsumableArray$1(arr) {\n        if (Array.isArray(arr)) {\n          for (var i3 = 0, arr2 = Array(arr.length); i3 < arr.length; i3++) {\n            arr2[i3] = arr[i3];\n          }\n          return arr2;\n        } else {\n          return Array.from(arr);\n        }\n      }\n      var getGlobal = function getGlobal2() {\n        return typeof window === \"undefined\" ? null : window;\n      };\n      var _createTrustedTypesPolicy = function _createTrustedTypesPolicy2(trustedTypes, document2) {\n        if ((typeof trustedTypes === \"undefined\" ? \"undefined\" : _typeof(trustedTypes)) !== \"object\" || typeof trustedTypes.createPolicy !== \"function\") {\n          return null;\n        }\n        var suffix = null;\n        var ATTR_NAME = \"data-tt-policy-suffix\";\n        if (document2.currentScript && document2.currentScript.hasAttribute(ATTR_NAME)) {\n          suffix = document2.currentScript.getAttribute(ATTR_NAME);\n        }\n        var policyName = \"dompurify\" + (suffix ? \"#\" + suffix : \"\");\n        try {\n          return trustedTypes.createPolicy(policyName, {\n            createHTML: function createHTML(html$$1) {\n              return html$$1;\n            }\n          });\n        } catch (_2) {\n          console.warn(\"TrustedTypes policy \" + policyName + \" could not be created.\");\n          return null;\n        }\n      };\n      function createDOMPurify() {\n        var window2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();\n        var DOMPurify = function DOMPurify2(root2) {\n          return createDOMPurify(root2);\n        };\n        DOMPurify.version = \"2.3.6\";\n        DOMPurify.removed = [];\n        if (!window2 || !window2.document || window2.document.nodeType !== 9) {\n          DOMPurify.isSupported = false;\n          return DOMPurify;\n        }\n        var originalDocument = window2.document;\n        var document2 = window2.document;\n        var DocumentFragment = window2.DocumentFragment, HTMLTemplateElement = window2.HTMLTemplateElement, Node2 = window2.Node, Element2 = window2.Element, NodeFilter = window2.NodeFilter, _window$NamedNodeMap = window2.NamedNodeMap, NamedNodeMap = _window$NamedNodeMap === void 0 ? window2.NamedNodeMap || window2.MozNamedAttrMap : _window$NamedNodeMap, HTMLFormElement2 = window2.HTMLFormElement, DOMParser2 = window2.DOMParser, trustedTypes = window2.trustedTypes;\n        var ElementPrototype = Element2.prototype;\n        var cloneNode = lookupGetter(ElementPrototype, \"cloneNode\");\n        var getNextSibling = lookupGetter(ElementPrototype, \"nextSibling\");\n        var getChildNodes2 = lookupGetter(ElementPrototype, \"childNodes\");\n        var getParentNode = lookupGetter(ElementPrototype, \"parentNode\");\n        if (typeof HTMLTemplateElement === \"function\") {\n          var template = document2.createElement(\"template\");\n          if (template.content && template.content.ownerDocument) {\n            document2 = template.content.ownerDocument;\n          }\n        }\n        var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n        var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML(\"\") : \"\";\n        var _document = document2, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;\n        var importNode2 = originalDocument.importNode;\n        var documentMode = {};\n        try {\n          documentMode = clone(document2).documentMode ? document2.documentMode : {};\n        } catch (_2) {\n        }\n        var hooks = {};\n        DOMPurify.isSupported = typeof getParentNode === \"function\" && implementation && typeof implementation.createHTMLDocument !== \"undefined\" && documentMode !== 9;\n        var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR, ERB_EXPR$$1 = ERB_EXPR, DATA_ATTR$$1 = DATA_ATTR, ARIA_ATTR$$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$$1 = ATTR_WHITESPACE;\n        var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI;\n        var ALLOWED_TAGS = null;\n        var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(html), _toConsumableArray$1(svg), _toConsumableArray$1(svgFilters), _toConsumableArray$1(mathMl), _toConsumableArray$1(text2)));\n        var ALLOWED_ATTR = null;\n        var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray$1(html$1), _toConsumableArray$1(svg$1), _toConsumableArray$1(mathMl$1), _toConsumableArray$1(xml)));\n        var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n          tagNameCheck: {\n            writable: true,\n            configurable: false,\n            enumerable: true,\n            value: null\n          },\n          attributeNameCheck: {\n            writable: true,\n            configurable: false,\n            enumerable: true,\n            value: null\n          },\n          allowCustomizedBuiltInElements: {\n            writable: true,\n            configurable: false,\n            enumerable: true,\n            value: false\n          }\n        }));\n        var FORBID_TAGS = null;\n        var FORBID_ATTR = null;\n        var ALLOW_ARIA_ATTR = true;\n        var ALLOW_DATA_ATTR = true;\n        var ALLOW_UNKNOWN_PROTOCOLS = false;\n        var SAFE_FOR_TEMPLATES = false;\n        var WHOLE_DOCUMENT = false;\n        var SET_CONFIG = false;\n        var FORCE_BODY = false;\n        var RETURN_DOM = false;\n        var RETURN_DOM_FRAGMENT = false;\n        var RETURN_TRUSTED_TYPE = false;\n        var SANITIZE_DOM = true;\n        var KEEP_CONTENT = true;\n        var IN_PLACE = false;\n        var USE_PROFILES = {};\n        var FORBID_CONTENTS = null;\n        var DEFAULT_FORBID_CONTENTS = addToSet({}, [\n          \"annotation-xml\",\n          \"audio\",\n          \"colgroup\",\n          \"desc\",\n          \"foreignobject\",\n          \"head\",\n          \"iframe\",\n          \"math\",\n          \"mi\",\n          \"mn\",\n          \"mo\",\n          \"ms\",\n          \"mtext\",\n          \"noembed\",\n          \"noframes\",\n          \"noscript\",\n          \"plaintext\",\n          \"script\",\n          \"style\",\n          \"svg\",\n          \"template\",\n          \"thead\",\n          \"title\",\n          \"video\",\n          \"xmp\"\n        ]);\n        var DATA_URI_TAGS = null;\n        var DEFAULT_DATA_URI_TAGS = addToSet({}, [\n          \"audio\",\n          \"video\",\n          \"img\",\n          \"source\",\n          \"image\",\n          \"track\"\n        ]);\n        var URI_SAFE_ATTRIBUTES = null;\n        var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n          \"alt\",\n          \"class\",\n          \"for\",\n          \"id\",\n          \"label\",\n          \"name\",\n          \"pattern\",\n          \"placeholder\",\n          \"role\",\n          \"summary\",\n          \"title\",\n          \"value\",\n          \"style\",\n          \"xmlns\"\n        ]);\n        var MATHML_NAMESPACE = \"http://www.w3.org/1998/Math/MathML\";\n        var SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\n        var HTML_NAMESPACE = \"http://www.w3.org/1999/xhtml\";\n        var NAMESPACE = HTML_NAMESPACE;\n        var IS_EMPTY_INPUT = false;\n        var PARSER_MEDIA_TYPE = void 0;\n        var SUPPORTED_PARSER_MEDIA_TYPES = [\n          \"application/xhtml+xml\",\n          \"text/html\"\n        ];\n        var DEFAULT_PARSER_MEDIA_TYPE = \"text/html\";\n        var transformCaseFunc = void 0;\n        var CONFIG = null;\n        var formElement = document2.createElement(\"form\");\n        var isRegexOrFunction = function isRegexOrFunction2(testValue) {\n          return testValue instanceof RegExp || testValue instanceof Function;\n        };\n        var _parseConfig = function _parseConfig2(cfg) {\n          if (CONFIG && CONFIG === cfg) {\n            return;\n          }\n          if (!cfg || (typeof cfg === \"undefined\" ? \"undefined\" : _typeof(cfg)) !== \"object\") {\n            cfg = {};\n          }\n          cfg = clone(cfg);\n          ALLOWED_TAGS = \"ALLOWED_TAGS\" in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n          ALLOWED_ATTR = \"ALLOWED_ATTR\" in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n          URI_SAFE_ATTRIBUTES = \"ADD_URI_SAFE_ATTR\" in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;\n          DATA_URI_TAGS = \"ADD_DATA_URI_TAGS\" in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS;\n          FORBID_CONTENTS = \"FORBID_CONTENTS\" in cfg ? addToSet({}, cfg.FORBID_CONTENTS) : DEFAULT_FORBID_CONTENTS;\n          FORBID_TAGS = \"FORBID_TAGS\" in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n          FORBID_ATTR = \"FORBID_ATTR\" in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n          USE_PROFILES = \"USE_PROFILES\" in cfg ? cfg.USE_PROFILES : false;\n          ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;\n          ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;\n          ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;\n          SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;\n          WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;\n          RETURN_DOM = cfg.RETURN_DOM || false;\n          RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;\n          RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;\n          FORCE_BODY = cfg.FORCE_BODY || false;\n          SANITIZE_DOM = cfg.SANITIZE_DOM !== false;\n          KEEP_CONTENT = cfg.KEEP_CONTENT !== false;\n          IN_PLACE = cfg.IN_PLACE || false;\n          IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1;\n          NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n          if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n            CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n          }\n          if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n            CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n          }\n          if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === \"boolean\") {\n            CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n          }\n          PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE;\n          transformCaseFunc = PARSER_MEDIA_TYPE === \"application/xhtml+xml\" ? function(x2) {\n            return x2;\n          } : stringToLowerCase;\n          if (SAFE_FOR_TEMPLATES) {\n            ALLOW_DATA_ATTR = false;\n          }\n          if (RETURN_DOM_FRAGMENT) {\n            RETURN_DOM = true;\n          }\n          if (USE_PROFILES) {\n            ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(text2)));\n            ALLOWED_ATTR = [];\n            if (USE_PROFILES.html === true) {\n              addToSet(ALLOWED_TAGS, html);\n              addToSet(ALLOWED_ATTR, html$1);\n            }\n            if (USE_PROFILES.svg === true) {\n              addToSet(ALLOWED_TAGS, svg);\n              addToSet(ALLOWED_ATTR, svg$1);\n              addToSet(ALLOWED_ATTR, xml);\n            }\n            if (USE_PROFILES.svgFilters === true) {\n              addToSet(ALLOWED_TAGS, svgFilters);\n              addToSet(ALLOWED_ATTR, svg$1);\n              addToSet(ALLOWED_ATTR, xml);\n            }\n            if (USE_PROFILES.mathMl === true) {\n              addToSet(ALLOWED_TAGS, mathMl);\n              addToSet(ALLOWED_ATTR, mathMl$1);\n              addToSet(ALLOWED_ATTR, xml);\n            }\n          }\n          if (cfg.ADD_TAGS) {\n            if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n              ALLOWED_TAGS = clone(ALLOWED_TAGS);\n            }\n            addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n          }\n          if (cfg.ADD_ATTR) {\n            if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n              ALLOWED_ATTR = clone(ALLOWED_ATTR);\n            }\n            addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n          }\n          if (cfg.ADD_URI_SAFE_ATTR) {\n            addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n          }\n          if (cfg.FORBID_CONTENTS) {\n            if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n              FORBID_CONTENTS = clone(FORBID_CONTENTS);\n            }\n            addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS);\n          }\n          if (KEEP_CONTENT) {\n            ALLOWED_TAGS[\"#text\"] = true;\n          }\n          if (WHOLE_DOCUMENT) {\n            addToSet(ALLOWED_TAGS, [\n              \"html\",\n              \"head\",\n              \"body\"\n            ]);\n          }\n          if (ALLOWED_TAGS.table) {\n            addToSet(ALLOWED_TAGS, [\"tbody\"]);\n            delete FORBID_TAGS.tbody;\n          }\n          if (freeze) {\n            freeze(cfg);\n          }\n          CONFIG = cfg;\n        };\n        var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n          \"mi\",\n          \"mo\",\n          \"mn\",\n          \"ms\",\n          \"mtext\"\n        ]);\n        var HTML_INTEGRATION_POINTS = addToSet({}, [\n          \"foreignobject\",\n          \"desc\",\n          \"title\",\n          \"annotation-xml\"\n        ]);\n        var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n          \"title\",\n          \"style\",\n          \"font\",\n          \"a\",\n          \"script\"\n        ]);\n        var ALL_SVG_TAGS = addToSet({}, svg);\n        addToSet(ALL_SVG_TAGS, svgFilters);\n        addToSet(ALL_SVG_TAGS, svgDisallowed);\n        var ALL_MATHML_TAGS = addToSet({}, mathMl);\n        addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n        var _checkValidNamespace = function _checkValidNamespace2(element) {\n          var parent2 = getParentNode(element);\n          if (!parent2 || !parent2.tagName) {\n            parent2 = {\n              namespaceURI: HTML_NAMESPACE,\n              tagName: \"template\"\n            };\n          }\n          var tagName = stringToLowerCase(element.tagName);\n          var parentTagName = stringToLowerCase(parent2.tagName);\n          if (element.namespaceURI === SVG_NAMESPACE) {\n            if (parent2.namespaceURI === HTML_NAMESPACE) {\n              return tagName === \"svg\";\n            }\n            if (parent2.namespaceURI === MATHML_NAMESPACE) {\n              return tagName === \"svg\" && (parentTagName === \"annotation-xml\" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n            }\n            return Boolean(ALL_SVG_TAGS[tagName]);\n          }\n          if (element.namespaceURI === MATHML_NAMESPACE) {\n            if (parent2.namespaceURI === HTML_NAMESPACE) {\n              return tagName === \"math\";\n            }\n            if (parent2.namespaceURI === SVG_NAMESPACE) {\n              return tagName === \"math\" && HTML_INTEGRATION_POINTS[parentTagName];\n            }\n            return Boolean(ALL_MATHML_TAGS[tagName]);\n          }\n          if (element.namespaceURI === HTML_NAMESPACE) {\n            if (parent2.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n              return false;\n            }\n            if (parent2.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n              return false;\n            }\n            return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n          }\n          return false;\n        };\n        var _forceRemove = function _forceRemove2(node) {\n          arrayPush2(DOMPurify.removed, { element: node });\n          try {\n            node.parentNode.removeChild(node);\n          } catch (_2) {\n            try {\n              node.outerHTML = emptyHTML;\n            } catch (_3) {\n              node.remove();\n            }\n          }\n        };\n        var _removeAttribute = function _removeAttribute2(name2, node) {\n          try {\n            arrayPush2(DOMPurify.removed, {\n              attribute: node.getAttributeNode(name2),\n              from: node\n            });\n          } catch (_2) {\n            arrayPush2(DOMPurify.removed, {\n              attribute: null,\n              from: node\n            });\n          }\n          node.removeAttribute(name2);\n          if (name2 === \"is\" && !ALLOWED_ATTR[name2]) {\n            if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n              try {\n                _forceRemove(node);\n              } catch (_2) {\n              }\n            } else {\n              try {\n                node.setAttribute(name2, \"\");\n              } catch (_2) {\n              }\n            }\n          }\n        };\n        var _initDocument = function _initDocument2(dirty) {\n          var doc = void 0;\n          var leadingWhitespace = void 0;\n          if (FORCE_BODY) {\n            dirty = \"<remove></remove>\" + dirty;\n          } else {\n            var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n            leadingWhitespace = matches && matches[0];\n          }\n          if (PARSER_MEDIA_TYPE === \"application/xhtml+xml\") {\n            dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + \"</body></html>\";\n          }\n          var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n          if (NAMESPACE === HTML_NAMESPACE) {\n            try {\n              doc = new DOMParser2().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n            } catch (_2) {\n            }\n          }\n          if (!doc || !doc.documentElement) {\n            doc = implementation.createDocument(NAMESPACE, \"template\", null);\n            try {\n              doc.documentElement.innerHTML = IS_EMPTY_INPUT ? \"\" : dirtyPayload;\n            } catch (_2) {\n            }\n          }\n          var body = doc.body || doc.documentElement;\n          if (dirty && leadingWhitespace) {\n            body.insertBefore(document2.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n          }\n          if (NAMESPACE === HTML_NAMESPACE) {\n            return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? \"html\" : \"body\")[0];\n          }\n          return WHOLE_DOCUMENT ? doc.documentElement : body;\n        };\n        var _createIterator = function _createIterator2(root2) {\n          return createNodeIterator.call(root2.ownerDocument || root2, root2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n        };\n        var _isClobbered = function _isClobbered2(elm) {\n          return elm instanceof HTMLFormElement2 && (typeof elm.nodeName !== \"string\" || typeof elm.textContent !== \"string\" || typeof elm.removeChild !== \"function\" || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== \"function\" || typeof elm.setAttribute !== \"function\" || typeof elm.namespaceURI !== \"string\" || typeof elm.insertBefore !== \"function\");\n        };\n        var _isNode = function _isNode2(object2) {\n          return (typeof Node2 === \"undefined\" ? \"undefined\" : _typeof(Node2)) === \"object\" ? object2 instanceof Node2 : object2 && (typeof object2 === \"undefined\" ? \"undefined\" : _typeof(object2)) === \"object\" && typeof object2.nodeType === \"number\" && typeof object2.nodeName === \"string\";\n        };\n        var _executeHook = function _executeHook2(entryPoint, currentNode, data2) {\n          if (!hooks[entryPoint]) {\n            return;\n          }\n          arrayForEach(hooks[entryPoint], function(hook) {\n            hook.call(DOMPurify, currentNode, data2, CONFIG);\n          });\n        };\n        var _sanitizeElements = function _sanitizeElements2(currentNode) {\n          var content = void 0;\n          _executeHook(\"beforeSanitizeElements\", currentNode, null);\n          if (_isClobbered(currentNode)) {\n            _forceRemove(currentNode);\n            return true;\n          }\n          if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n            _forceRemove(currentNode);\n            return true;\n          }\n          var tagName = transformCaseFunc(currentNode.nodeName);\n          _executeHook(\"uponSanitizeElement\", currentNode, {\n            tagName,\n            allowedTags: ALLOWED_TAGS\n          });\n          if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n            _forceRemove(currentNode);\n            return true;\n          }\n          if (tagName === \"select\" && regExpTest(/<template/i, currentNode.innerHTML)) {\n            _forceRemove(currentNode);\n            return true;\n          }\n          if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n            if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n              if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName))\n                return false;\n              if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName))\n                return false;\n            }\n            if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n              var parentNode = getParentNode(currentNode) || currentNode.parentNode;\n              var childNodes = getChildNodes2(currentNode) || currentNode.childNodes;\n              if (childNodes && parentNode) {\n                var childCount = childNodes.length;\n                for (var i3 = childCount - 1; i3 >= 0; --i3) {\n                  parentNode.insertBefore(cloneNode(childNodes[i3], true), getNextSibling(currentNode));\n                }\n              }\n            }\n            _forceRemove(currentNode);\n            return true;\n          }\n          if (currentNode instanceof Element2 && !_checkValidNamespace(currentNode)) {\n            _forceRemove(currentNode);\n            return true;\n          }\n          if ((tagName === \"noscript\" || tagName === \"noembed\") && regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)) {\n            _forceRemove(currentNode);\n            return true;\n          }\n          if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n            content = currentNode.textContent;\n            content = stringReplace(content, MUSTACHE_EXPR$$1, \" \");\n            content = stringReplace(content, ERB_EXPR$$1, \" \");\n            if (currentNode.textContent !== content) {\n              arrayPush2(DOMPurify.removed, { element: currentNode.cloneNode() });\n              currentNode.textContent = content;\n            }\n          }\n          _executeHook(\"afterSanitizeElements\", currentNode, null);\n          return false;\n        };\n        var _isValidAttribute = function _isValidAttribute2(lcTag, lcName, value2) {\n          if (SANITIZE_DOM && (lcName === \"id\" || lcName === \"name\") && (value2 in document2 || value2 in formElement)) {\n            return false;\n          }\n          if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$$1, lcName)) ;\n          else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$$1, lcName)) ;\n          else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n            if (_basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || lcName === \"is\" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value2) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value2))) ;\n            else {\n              return false;\n            }\n          } else if (URI_SAFE_ATTRIBUTES[lcName]) ;\n          else if (regExpTest(IS_ALLOWED_URI$$1, stringReplace(value2, ATTR_WHITESPACE$$1, \"\"))) ;\n          else if ((lcName === \"src\" || lcName === \"xlink:href\" || lcName === \"href\") && lcTag !== \"script\" && stringIndexOf(value2, \"data:\") === 0 && DATA_URI_TAGS[lcTag]) ;\n          else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$$1, stringReplace(value2, ATTR_WHITESPACE$$1, \"\"))) ;\n          else if (!value2) ;\n          else {\n            return false;\n          }\n          return true;\n        };\n        var _basicCustomElementTest = function _basicCustomElementTest2(tagName) {\n          return tagName.indexOf(\"-\") > 0;\n        };\n        var _sanitizeAttributes = function _sanitizeAttributes2(currentNode) {\n          var attr = void 0;\n          var value2 = void 0;\n          var lcName = void 0;\n          var l2 = void 0;\n          _executeHook(\"beforeSanitizeAttributes\", currentNode, null);\n          var attributes = currentNode.attributes;\n          if (!attributes) {\n            return;\n          }\n          var hookEvent = {\n            attrName: \"\",\n            attrValue: \"\",\n            keepAttr: true,\n            allowedAttributes: ALLOWED_ATTR\n          };\n          l2 = attributes.length;\n          while (l2--) {\n            attr = attributes[l2];\n            var _attr = attr, name2 = _attr.name, namespaceURI = _attr.namespaceURI;\n            value2 = stringTrim(attr.value);\n            lcName = transformCaseFunc(name2);\n            var initValue = value2;\n            hookEvent.attrName = lcName;\n            hookEvent.attrValue = value2;\n            hookEvent.keepAttr = true;\n            hookEvent.forceKeepAttr = void 0;\n            _executeHook(\"uponSanitizeAttribute\", currentNode, hookEvent);\n            value2 = hookEvent.attrValue;\n            if (hookEvent.forceKeepAttr) {\n              continue;\n            }\n            if (!hookEvent.keepAttr) {\n              _removeAttribute(name2, currentNode);\n              continue;\n            }\n            if (regExpTest(/\\/>/i, value2)) {\n              _removeAttribute(name2, currentNode);\n              continue;\n            }\n            if (SAFE_FOR_TEMPLATES) {\n              value2 = stringReplace(value2, MUSTACHE_EXPR$$1, \" \");\n              value2 = stringReplace(value2, ERB_EXPR$$1, \" \");\n            }\n            var lcTag = transformCaseFunc(currentNode.nodeName);\n            if (!_isValidAttribute(lcTag, lcName, value2)) {\n              _removeAttribute(name2, currentNode);\n              continue;\n            }\n            if (value2 !== initValue) {\n              try {\n                if (namespaceURI) {\n                  currentNode.setAttributeNS(namespaceURI, name2, value2);\n                } else {\n                  currentNode.setAttribute(name2, value2);\n                }\n              } catch (_2) {\n                _removeAttribute(name2, currentNode);\n              }\n            }\n          }\n          _executeHook(\"afterSanitizeAttributes\", currentNode, null);\n        };\n        var _sanitizeShadowDOM = function _sanitizeShadowDOM2(fragment) {\n          var shadowNode = void 0;\n          var shadowIterator = _createIterator(fragment);\n          _executeHook(\"beforeSanitizeShadowDOM\", fragment, null);\n          while (shadowNode = shadowIterator.nextNode()) {\n            _executeHook(\"uponSanitizeShadowNode\", shadowNode, null);\n            if (_sanitizeElements(shadowNode)) {\n              continue;\n            }\n            if (shadowNode.content instanceof DocumentFragment) {\n              _sanitizeShadowDOM2(shadowNode.content);\n            }\n            _sanitizeAttributes(shadowNode);\n          }\n          _executeHook(\"afterSanitizeShadowDOM\", fragment, null);\n        };\n        DOMPurify.sanitize = function(dirty, cfg) {\n          var body = void 0;\n          var importedNode = void 0;\n          var currentNode = void 0;\n          var oldNode = void 0;\n          var returnNode = void 0;\n          IS_EMPTY_INPUT = !dirty;\n          if (IS_EMPTY_INPUT) {\n            dirty = \"<!-->\";\n          }\n          if (typeof dirty !== \"string\" && !_isNode(dirty)) {\n            if (typeof dirty.toString !== \"function\") {\n              throw typeErrorCreate(\"toString is not a function\");\n            } else {\n              dirty = dirty.toString();\n              if (typeof dirty !== \"string\") {\n                throw typeErrorCreate(\"dirty is not a string, aborting\");\n              }\n            }\n          }\n          if (!DOMPurify.isSupported) {\n            if (_typeof(window2.toStaticHTML) === \"object\" || typeof window2.toStaticHTML === \"function\") {\n              if (typeof dirty === \"string\") {\n                return window2.toStaticHTML(dirty);\n              }\n              if (_isNode(dirty)) {\n                return window2.toStaticHTML(dirty.outerHTML);\n              }\n            }\n            return dirty;\n          }\n          if (!SET_CONFIG) {\n            _parseConfig(cfg);\n          }\n          DOMPurify.removed = [];\n          if (typeof dirty === \"string\") {\n            IN_PLACE = false;\n          }\n          if (IN_PLACE) {\n            if (dirty.nodeName) {\n              var tagName = transformCaseFunc(dirty.nodeName);\n              if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n                throw typeErrorCreate(\"root node is forbidden and cannot be sanitized in-place\");\n              }\n            }\n          } else if (dirty instanceof Node2) {\n            body = _initDocument(\"<!---->\");\n            importedNode = body.ownerDocument.importNode(dirty, true);\n            if (importedNode.nodeType === 1 && importedNode.nodeName === \"BODY\") {\n              body = importedNode;\n            } else if (importedNode.nodeName === \"HTML\") {\n              body = importedNode;\n            } else {\n              body.appendChild(importedNode);\n            }\n          } else {\n            if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf(\"<\") === -1) {\n              return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n            }\n            body = _initDocument(dirty);\n            if (!body) {\n              return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : \"\";\n            }\n          }\n          if (body && FORCE_BODY) {\n            _forceRemove(body.firstChild);\n          }\n          var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n          while (currentNode = nodeIterator.nextNode()) {\n            if (currentNode.nodeType === 3 && currentNode === oldNode) {\n              continue;\n            }\n            if (_sanitizeElements(currentNode)) {\n              continue;\n            }\n            if (currentNode.content instanceof DocumentFragment) {\n              _sanitizeShadowDOM(currentNode.content);\n            }\n            _sanitizeAttributes(currentNode);\n            oldNode = currentNode;\n          }\n          oldNode = null;\n          if (IN_PLACE) {\n            return dirty;\n          }\n          if (RETURN_DOM) {\n            if (RETURN_DOM_FRAGMENT) {\n              returnNode = createDocumentFragment.call(body.ownerDocument);\n              while (body.firstChild) {\n                returnNode.appendChild(body.firstChild);\n              }\n            } else {\n              returnNode = body;\n            }\n            if (ALLOWED_ATTR.shadowroot) {\n              returnNode = importNode2.call(originalDocument, returnNode, true);\n            }\n            return returnNode;\n          }\n          var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n          if (WHOLE_DOCUMENT && ALLOWED_TAGS[\"!doctype\"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n            serializedHTML = \"<!DOCTYPE \" + body.ownerDocument.doctype.name + \">\\n\" + serializedHTML;\n          }\n          if (SAFE_FOR_TEMPLATES) {\n            serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$$1, \" \");\n            serializedHTML = stringReplace(serializedHTML, ERB_EXPR$$1, \" \");\n          }\n          return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n        };\n        DOMPurify.setConfig = function(cfg) {\n          _parseConfig(cfg);\n          SET_CONFIG = true;\n        };\n        DOMPurify.clearConfig = function() {\n          CONFIG = null;\n          SET_CONFIG = false;\n        };\n        DOMPurify.isValidAttribute = function(tag, attr, value2) {\n          if (!CONFIG) {\n            _parseConfig({});\n          }\n          var lcTag = transformCaseFunc(tag);\n          var lcName = transformCaseFunc(attr);\n          return _isValidAttribute(lcTag, lcName, value2);\n        };\n        DOMPurify.addHook = function(entryPoint, hookFunction) {\n          if (typeof hookFunction !== \"function\") {\n            return;\n          }\n          hooks[entryPoint] = hooks[entryPoint] || [];\n          arrayPush2(hooks[entryPoint], hookFunction);\n        };\n        DOMPurify.removeHook = function(entryPoint) {\n          if (hooks[entryPoint]) {\n            arrayPop(hooks[entryPoint]);\n          }\n        };\n        DOMPurify.removeHooks = function(entryPoint) {\n          if (hooks[entryPoint]) {\n            hooks[entryPoint] = [];\n          }\n        };\n        DOMPurify.removeAllHooks = function() {\n          hooks = {};\n        };\n        return DOMPurify;\n      }\n      var purify = createDOMPurify();\n      const removeAttrs = (node, names) => {\n        each$g(names, (name2) => {\n          node.attr(name2, null);\n        });\n      };\n      const addFontToSpansFilter = (domParser, styles, fontSizes) => {\n        domParser.addNodeFilter(\"font\", (nodes) => {\n          each$g(nodes, (node) => {\n            const props = styles.parse(node.attr(\"style\"));\n            const color = node.attr(\"color\");\n            const face = node.attr(\"face\");\n            const size = node.attr(\"size\");\n            if (color) {\n              props.color = color;\n            }\n            if (face) {\n              props[\"font-family\"] = face;\n            }\n            if (size) {\n              props[\"font-size\"] = fontSizes[parseInt(node.attr(\"size\"), 10) - 1];\n            }\n            node.name = \"span\";\n            node.attr(\"style\", styles.serialize(props));\n            removeAttrs(node, [\n              \"color\",\n              \"face\",\n              \"size\"\n            ]);\n          });\n        });\n      };\n      const addStrikeFilter = (domParser, schema, styles) => {\n        domParser.addNodeFilter(\"strike\", (nodes) => {\n          const convertToSTag = schema.type !== \"html4\";\n          each$g(nodes, (node) => {\n            if (convertToSTag) {\n              node.name = \"s\";\n            } else {\n              const props = styles.parse(node.attr(\"style\"));\n              props[\"text-decoration\"] = \"line-through\";\n              node.name = \"span\";\n              node.attr(\"style\", styles.serialize(props));\n            }\n          });\n        });\n      };\n      const addFilters = (domParser, settings, schema) => {\n        const styles = Styles();\n        if (settings.convert_fonts_to_spans) {\n          addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values));\n        }\n        addStrikeFilter(domParser, schema, styles);\n      };\n      const register$5 = (domParser, settings, schema) => {\n        if (settings.inline_styles) {\n          addFilters(domParser, settings, schema);\n        }\n      };\n      const blobUriToBlob = (url2) => {\n        return new Promise((resolve2, reject) => {\n          const rejectWithError = () => {\n            reject(\"Cannot convert \" + url2 + \" to Blob. Resource might not exist or is inaccessible.\");\n          };\n          try {\n            const xhr = new XMLHttpRequest();\n            xhr.open(\"GET\", url2, true);\n            xhr.responseType = \"blob\";\n            xhr.onload = () => {\n              if (xhr.status === 200) {\n                resolve2(xhr.response);\n              } else {\n                rejectWithError();\n              }\n            };\n            xhr.onerror = rejectWithError;\n            xhr.send();\n          } catch (ex) {\n            rejectWithError();\n          }\n        });\n      };\n      const parseDataUri$1 = (uri) => {\n        let type2;\n        const uriParts = decodeURIComponent(uri).split(\",\");\n        const matches = /data:([^;]+)/.exec(uriParts[0]);\n        if (matches) {\n          type2 = matches[1];\n        }\n        return {\n          type: type2,\n          data: uriParts[1]\n        };\n      };\n      const buildBlob = (type2, data2) => {\n        let str;\n        try {\n          str = atob(data2);\n        } catch (e2) {\n          return Optional.none();\n        }\n        const arr = new Uint8Array(str.length);\n        for (let i3 = 0; i3 < arr.length; i3++) {\n          arr[i3] = str.charCodeAt(i3);\n        }\n        return Optional.some(new Blob([arr], { type: type2 }));\n      };\n      const dataUriToBlob = (uri) => {\n        return new Promise((resolve2) => {\n          const { type: type2, data: data2 } = parseDataUri$1(uri);\n          buildBlob(type2, data2).fold(() => resolve2(new Blob([])), resolve2);\n        });\n      };\n      const uriToBlob = (url2) => {\n        if (url2.indexOf(\"blob:\") === 0) {\n          return blobUriToBlob(url2);\n        }\n        if (url2.indexOf(\"data:\") === 0) {\n          return dataUriToBlob(url2);\n        }\n        return null;\n      };\n      const blobToDataUri = (blob) => {\n        return new Promise((resolve2) => {\n          const reader = new FileReader();\n          reader.onloadend = () => {\n            resolve2(reader.result);\n          };\n          reader.readAsDataURL(blob);\n        });\n      };\n      let count$1 = 0;\n      const uniqueId$1 = (prefix) => {\n        return \"blobid\" + count$1++;\n      };\n      const imageToBlobInfo = (blobCache, img, resolve2, reject) => {\n        let base64, blobInfo;\n        if (img.src.indexOf(\"blob:\") === 0) {\n          blobInfo = blobCache.getByUri(img.src);\n          if (blobInfo) {\n            resolve2({\n              image: img,\n              blobInfo\n            });\n          } else {\n            uriToBlob(img.src).then((blob) => {\n              blobToDataUri(blob).then((dataUri) => {\n                base64 = parseDataUri$1(dataUri).data;\n                blobInfo = blobCache.create(uniqueId$1(), blob, base64);\n                blobCache.add(blobInfo);\n                resolve2({\n                  image: img,\n                  blobInfo\n                });\n              });\n            }, (err) => {\n              reject(err);\n            });\n          }\n          return;\n        }\n        const { data: data2, type: type2 } = parseDataUri$1(img.src);\n        base64 = data2;\n        blobInfo = blobCache.getByData(base64, type2);\n        if (blobInfo) {\n          resolve2({\n            image: img,\n            blobInfo\n          });\n        } else {\n          uriToBlob(img.src).then((blob) => {\n            blobInfo = blobCache.create(uniqueId$1(), blob, base64);\n            blobCache.add(blobInfo);\n            resolve2({\n              image: img,\n              blobInfo\n            });\n          }, (err) => {\n            reject(err);\n          });\n        }\n      };\n      const getAllImages = (elm) => {\n        return elm ? from(elm.getElementsByTagName(\"img\")) : [];\n      };\n      const ImageScanner = (uploadStatus, blobCache) => {\n        const cachedPromises = {};\n        const findAll2 = (elm, predicate) => {\n          if (!predicate) {\n            predicate = always;\n          }\n          const images = filter$6(getAllImages(elm), (img) => {\n            const src = img.src;\n            if (img.hasAttribute(\"data-mce-bogus\")) {\n              return false;\n            }\n            if (img.hasAttribute(\"data-mce-placeholder\")) {\n              return false;\n            }\n            if (!src || src === Env.transparentSrc) {\n              return false;\n            }\n            if (src.indexOf(\"blob:\") === 0) {\n              return !uploadStatus.isUploaded(src) && predicate(img);\n            }\n            if (src.indexOf(\"data:\") === 0) {\n              return predicate(img);\n            }\n            return false;\n          });\n          const promises = map$3(images, (img) => {\n            if (cachedPromises[img.src] !== void 0) {\n              return new Promise((resolve2) => {\n                cachedPromises[img.src].then((imageInfo) => {\n                  if (typeof imageInfo === \"string\") {\n                    return imageInfo;\n                  }\n                  resolve2({\n                    image: img,\n                    blobInfo: imageInfo.blobInfo\n                  });\n                });\n              });\n            }\n            const newPromise = new Promise((resolve2, reject) => {\n              imageToBlobInfo(blobCache, img, resolve2, reject);\n            }).then((result) => {\n              delete cachedPromises[result.image.src];\n              return result;\n            }).catch((error3) => {\n              delete cachedPromises[img.src];\n              return error3;\n            });\n            cachedPromises[img.src] = newPromise;\n            return newPromise;\n          });\n          return Promise.all(promises);\n        };\n        return { findAll: findAll2 };\n      };\n      const parseDataUri = (uri) => {\n        const matches = /data:([^;]+);base64,([a-z0-9\\+\\/=\\s]+)/i.exec(uri);\n        if (matches) {\n          return Optional.some({\n            type: matches[1],\n            data: decodeURIComponent(matches[2])\n          });\n        } else {\n          return Optional.none();\n        }\n      };\n      const isBogusImage = (img) => isNonNullable(img.attr(\"data-mce-bogus\"));\n      const isInternalImageSource = (img) => img.attr(\"src\") === Env.transparentSrc || isNonNullable(img.attr(\"data-mce-placeholder\"));\n      const registerBase64ImageFilter = (parser, settings) => {\n        const { blob_cache: blobCache } = settings;\n        const processImage = (img) => {\n          const inputSrc = img.attr(\"src\");\n          if (isInternalImageSource(img) || isBogusImage(img)) {\n            return;\n          }\n          parseDataUri(inputSrc).bind(({ type: type2, data: data2 }) => Optional.from(blobCache.getByData(data2, type2)).orThunk(() => buildBlob(type2, data2).map((blob) => {\n            const blobInfo = blobCache.create(uniqueId$1(), blob, data2);\n            blobCache.add(blobInfo);\n            return blobInfo;\n          }))).each((blobInfo) => {\n            img.attr(\"src\", blobInfo.blobUri());\n          });\n        };\n        if (blobCache) {\n          parser.addAttributeFilter(\"src\", (nodes) => each$g(nodes, processImage));\n        }\n      };\n      const register$4 = (parser, settings) => {\n        const schema = parser.schema;\n        if (settings.remove_trailing_brs) {\n          parser.addNodeFilter(\"br\", (nodes, _2, args) => {\n            const blockElements = Tools.extend({}, schema.getBlockElements());\n            const nonEmptyElements = schema.getNonEmptyElements();\n            const whitespaceElements = schema.getWhitespaceElements();\n            blockElements.body = 1;\n            for (let i3 = 0, l2 = nodes.length; i3 < l2; i3++) {\n              let node = nodes[i3];\n              let parent2 = node.parent;\n              if (blockElements[node.parent.name] && node === parent2.lastChild) {\n                let prev2 = node.prev;\n                while (prev2) {\n                  const prevName = prev2.name;\n                  if (prevName !== \"span\" || prev2.attr(\"data-mce-type\") !== \"bookmark\") {\n                    if (prevName === \"br\") {\n                      node = null;\n                    }\n                    break;\n                  }\n                  prev2 = prev2.prev;\n                }\n                if (node) {\n                  node.remove();\n                  if (isEmpty2(schema, nonEmptyElements, whitespaceElements, parent2)) {\n                    const elementRule = schema.getElementRule(parent2.name);\n                    if (elementRule) {\n                      if (elementRule.removeEmpty) {\n                        parent2.remove();\n                      } else if (elementRule.paddEmpty) {\n                        paddEmptyNode(settings, args, blockElements, parent2);\n                      }\n                    }\n                  }\n                }\n              } else {\n                let lastParent = node;\n                while (parent2 && parent2.firstChild === lastParent && parent2.lastChild === lastParent) {\n                  lastParent = parent2;\n                  if (blockElements[parent2.name]) {\n                    break;\n                  }\n                  parent2 = parent2.parent;\n                }\n                if (lastParent === parent2) {\n                  const textNode = new AstNode(\"#text\", 3);\n                  textNode.value = nbsp;\n                  node.replace(textNode);\n                }\n              }\n            }\n          });\n        }\n        parser.addAttributeFilter(\"href\", (nodes) => {\n          let i3 = nodes.length;\n          const appendRel = (rel) => {\n            const parts = rel.split(\" \").filter((p2) => p2.length > 0);\n            return parts.concat([\"noopener\"]).sort().join(\" \");\n          };\n          const addNoOpener = (rel) => {\n            const newRel = rel ? Tools.trim(rel) : \"\";\n            if (!/\\b(noopener)\\b/g.test(newRel)) {\n              return appendRel(newRel);\n            } else {\n              return newRel;\n            }\n          };\n          if (!settings.allow_unsafe_link_target) {\n            while (i3--) {\n              const node = nodes[i3];\n              if (node.name === \"a\" && node.attr(\"target\") === \"_blank\") {\n                node.attr(\"rel\", addNoOpener(node.attr(\"rel\")));\n              }\n            }\n          }\n        });\n        if (!settings.allow_html_in_named_anchor) {\n          parser.addAttributeFilter(\"id,name\", (nodes) => {\n            let i3 = nodes.length, sibling2, prevSibling2, parent2, node;\n            while (i3--) {\n              node = nodes[i3];\n              if (node.name === \"a\" && node.firstChild && !node.attr(\"href\")) {\n                parent2 = node.parent;\n                sibling2 = node.lastChild;\n                do {\n                  prevSibling2 = sibling2.prev;\n                  parent2.insert(sibling2, node);\n                  sibling2 = prevSibling2;\n                } while (sibling2);\n              }\n            }\n          });\n        }\n        if (settings.fix_list_elements) {\n          parser.addNodeFilter(\"ul,ol\", (nodes) => {\n            let i3 = nodes.length, node, parentNode;\n            while (i3--) {\n              node = nodes[i3];\n              parentNode = node.parent;\n              if (parentNode.name === \"ul\" || parentNode.name === \"ol\") {\n                if (node.prev && node.prev.name === \"li\") {\n                  node.prev.append(node);\n                } else {\n                  const li = new AstNode(\"li\", 1);\n                  li.attr(\"style\", \"list-style-type: none\");\n                  node.wrap(li);\n                }\n              }\n            }\n          });\n        }\n        if (settings.validate && schema.getValidClasses()) {\n          parser.addAttributeFilter(\"class\", (nodes) => {\n            const validClasses = schema.getValidClasses();\n            let i3 = nodes.length;\n            while (i3--) {\n              const node = nodes[i3];\n              const classList = node.attr(\"class\").split(\" \");\n              let classValue = \"\";\n              for (let ci = 0; ci < classList.length; ci++) {\n                const className = classList[ci];\n                let valid = false;\n                let validClassesMap = validClasses[\"*\"];\n                if (validClassesMap && validClassesMap[className]) {\n                  valid = true;\n                }\n                validClassesMap = validClasses[node.name];\n                if (!valid && validClassesMap && validClassesMap[className]) {\n                  valid = true;\n                }\n                if (valid) {\n                  if (classValue) {\n                    classValue += \" \";\n                  }\n                  classValue += className;\n                }\n              }\n              if (!classValue.length) {\n                classValue = null;\n              }\n              node.attr(\"class\", classValue);\n            }\n          });\n        }\n        registerBase64ImageFilter(parser, settings);\n      };\n      const each$5 = Tools.each, trim = Tools.trim;\n      const queryParts = \"source protocol authority userInfo user password host port relative path directory file query anchor\".split(\" \");\n      const DEFAULT_PORTS = {\n        ftp: 21,\n        http: 80,\n        https: 443,\n        mailto: 25\n      };\n      const safeSvgDataUrlElements = [\n        \"img\",\n        \"video\"\n      ];\n      const blockSvgDataUris = (allowSvgDataUrls, tagName) => {\n        if (isNonNullable(allowSvgDataUrls)) {\n          return !allowSvgDataUrls;\n        } else {\n          return isNonNullable(tagName) ? !contains$2(safeSvgDataUrlElements, tagName) : true;\n        }\n      };\n      const decodeUri = (encodedUri) => {\n        try {\n          return decodeURIComponent(encodedUri);\n        } catch (ex) {\n          return unescape(encodedUri);\n        }\n      };\n      const isInvalidUri = (settings, uri, tagName) => {\n        const decodedUri = decodeUri(uri);\n        if (settings.allow_script_urls) {\n          return false;\n        } else if (/((java|vb)script|mhtml):/i.test(decodedUri)) {\n          return true;\n        } else if (settings.allow_html_data_urls) {\n          return false;\n        } else if (/^data:image\\//i.test(decodedUri)) {\n          return blockSvgDataUris(settings.allow_svg_data_urls, tagName) && /^data:image\\/svg\\+xml/i.test(decodedUri);\n        } else {\n          return /^data:/i.test(decodedUri);\n        }\n      };\n      class URI {\n        constructor(url2, settings) {\n          url2 = trim(url2);\n          this.settings = settings || {};\n          const baseUri = this.settings.base_uri;\n          const self2 = this;\n          if (/^([\\w\\-]+):([^\\/]{2})/i.test(url2) || /^\\s*#/.test(url2)) {\n            self2.source = url2;\n            return;\n          }\n          const isProtocolRelative = url2.indexOf(\"//\") === 0;\n          if (url2.indexOf(\"/\") === 0 && !isProtocolRelative) {\n            url2 = (baseUri ? baseUri.protocol || \"http\" : \"http\") + \"://mce_host\" + url2;\n          }\n          if (!/^[\\w\\-]*:?\\/\\//.test(url2)) {\n            const baseUrl = this.settings.base_uri ? this.settings.base_uri.path : new URI(document.location.href).directory;\n            if (this.settings.base_uri && this.settings.base_uri.protocol == \"\") {\n              url2 = \"//mce_host\" + self2.toAbsPath(baseUrl, url2);\n            } else {\n              const match4 = /([^#?]*)([#?]?.*)/.exec(url2);\n              url2 = (baseUri && baseUri.protocol || \"http\") + \"://mce_host\" + self2.toAbsPath(baseUrl, match4[1]) + match4[2];\n            }\n          }\n          url2 = url2.replace(/@@/g, \"(mce_at)\");\n          const urlMatch = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?(\\[[a-zA-Z0-9:.%]+\\]|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url2);\n          each$5(queryParts, (v2, i3) => {\n            let part = urlMatch[i3];\n            if (part) {\n              part = part.replace(/\\(mce_at\\)/g, \"@@\");\n            }\n            self2[v2] = part;\n          });\n          if (baseUri) {\n            if (!self2.protocol) {\n              self2.protocol = baseUri.protocol;\n            }\n            if (!self2.userInfo) {\n              self2.userInfo = baseUri.userInfo;\n            }\n            if (!self2.port && self2.host === \"mce_host\") {\n              self2.port = baseUri.port;\n            }\n            if (!self2.host || self2.host === \"mce_host\") {\n              self2.host = baseUri.host;\n            }\n            self2.source = \"\";\n          }\n          if (isProtocolRelative) {\n            self2.protocol = \"\";\n          }\n        }\n        static parseDataUri(uri) {\n          let type2;\n          const uriComponents = decodeURIComponent(uri).split(\",\");\n          const matches = /data:([^;]+)/.exec(uriComponents[0]);\n          if (matches) {\n            type2 = matches[1];\n          }\n          return {\n            type: type2,\n            data: uriComponents[1]\n          };\n        }\n        static isDomSafe(uri, context2, options = {}) {\n          if (options.allow_script_urls) {\n            return true;\n          } else {\n            const decodedUri = Entities.decode(uri).replace(/[\\s\\u0000-\\u001F]+/g, \"\");\n            return !isInvalidUri(options, decodedUri, context2);\n          }\n        }\n        static getDocumentBaseUrl(loc) {\n          let baseUrl;\n          if (loc.protocol.indexOf(\"http\") !== 0 && loc.protocol !== \"file:\") {\n            baseUrl = loc.href;\n          } else {\n            baseUrl = loc.protocol + \"//\" + loc.host + loc.pathname;\n          }\n          if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(baseUrl)) {\n            baseUrl = baseUrl.replace(/[\\?#].*$/, \"\").replace(/[\\/\\\\][^\\/]+$/, \"\");\n            if (!/[\\/\\\\]$/.test(baseUrl)) {\n              baseUrl += \"/\";\n            }\n          }\n          return baseUrl;\n        }\n        setPath(path) {\n          const pathMatch = /^(.*?)\\/?(\\w+)?$/.exec(path);\n          this.path = pathMatch[0];\n          this.directory = pathMatch[1];\n          this.file = pathMatch[2];\n          this.source = \"\";\n          this.getURI();\n        }\n        toRelative(uri) {\n          let output;\n          if (uri === \"./\") {\n            return uri;\n          }\n          const relativeUri = new URI(uri, { base_uri: this });\n          if (relativeUri.host !== \"mce_host\" && this.host !== relativeUri.host && relativeUri.host || this.port !== relativeUri.port || this.protocol !== relativeUri.protocol && relativeUri.protocol !== \"\") {\n            return relativeUri.getURI();\n          }\n          const tu = this.getURI(), uu = relativeUri.getURI();\n          if (tu === uu || tu.charAt(tu.length - 1) === \"/\" && tu.substr(0, tu.length - 1) === uu) {\n            return tu;\n          }\n          output = this.toRelPath(this.path, relativeUri.path);\n          if (relativeUri.query) {\n            output += \"?\" + relativeUri.query;\n          }\n          if (relativeUri.anchor) {\n            output += \"#\" + relativeUri.anchor;\n          }\n          return output;\n        }\n        toAbsolute(uri, noHost) {\n          const absoluteUri = new URI(uri, { base_uri: this });\n          return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri));\n        }\n        isSameOrigin(uri) {\n          if (this.host == uri.host && this.protocol == uri.protocol) {\n            if (this.port == uri.port) {\n              return true;\n            }\n            const defaultPort = DEFAULT_PORTS[this.protocol];\n            if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n              return true;\n            }\n          }\n          return false;\n        }\n        toRelPath(base2, path) {\n          let breakPoint = 0, out = \"\", i3, l2;\n          const normalizedBase = base2.substring(0, base2.lastIndexOf(\"/\")).split(\"/\");\n          const items = path.split(\"/\");\n          if (normalizedBase.length >= items.length) {\n            for (i3 = 0, l2 = normalizedBase.length; i3 < l2; i3++) {\n              if (i3 >= items.length || normalizedBase[i3] !== items[i3]) {\n                breakPoint = i3 + 1;\n                break;\n              }\n            }\n          }\n          if (normalizedBase.length < items.length) {\n            for (i3 = 0, l2 = items.length; i3 < l2; i3++) {\n              if (i3 >= normalizedBase.length || normalizedBase[i3] !== items[i3]) {\n                breakPoint = i3 + 1;\n                break;\n              }\n            }\n          }\n          if (breakPoint === 1) {\n            return path;\n          }\n          for (i3 = 0, l2 = normalizedBase.length - (breakPoint - 1); i3 < l2; i3++) {\n            out += \"../\";\n          }\n          for (i3 = breakPoint - 1, l2 = items.length; i3 < l2; i3++) {\n            if (i3 !== breakPoint - 1) {\n              out += \"/\" + items[i3];\n            } else {\n              out += items[i3];\n            }\n          }\n          return out;\n        }\n        toAbsPath(base2, path) {\n          let i3, nb = 0, o2 = [], outPath;\n          const tr = /\\/$/.test(path) ? \"/\" : \"\";\n          let normalizedBase = base2.split(\"/\");\n          const normalizedPath = path.split(\"/\");\n          each$5(normalizedBase, (k3) => {\n            if (k3) {\n              o2.push(k3);\n            }\n          });\n          normalizedBase = o2;\n          for (i3 = normalizedPath.length - 1, o2 = []; i3 >= 0; i3--) {\n            if (normalizedPath[i3].length === 0 || normalizedPath[i3] === \".\") {\n              continue;\n            }\n            if (normalizedPath[i3] === \"..\") {\n              nb++;\n              continue;\n            }\n            if (nb > 0) {\n              nb--;\n              continue;\n            }\n            o2.push(normalizedPath[i3]);\n          }\n          i3 = normalizedBase.length - nb;\n          if (i3 <= 0) {\n            outPath = reverse(o2).join(\"/\");\n          } else {\n            outPath = normalizedBase.slice(0, i3).join(\"/\") + \"/\" + reverse(o2).join(\"/\");\n          }\n          if (outPath.indexOf(\"/\") !== 0) {\n            outPath = \"/\" + outPath;\n          }\n          if (tr && outPath.lastIndexOf(\"/\") !== outPath.length - 1) {\n            outPath += tr;\n          }\n          return outPath;\n        }\n        getURI(noProtoHost = false) {\n          let s2;\n          if (!this.source || noProtoHost) {\n            s2 = \"\";\n            if (!noProtoHost) {\n              if (this.protocol) {\n                s2 += this.protocol + \"://\";\n              } else {\n                s2 += \"//\";\n              }\n              if (this.userInfo) {\n                s2 += this.userInfo + \"@\";\n              }\n              if (this.host) {\n                s2 += this.host;\n              }\n              if (this.port) {\n                s2 += \":\" + this.port;\n              }\n            }\n            if (this.path) {\n              s2 += this.path;\n            }\n            if (this.query) {\n              s2 += \"?\" + this.query;\n            }\n            if (this.anchor) {\n              s2 += \"#\" + this.anchor;\n            }\n            this.source = s2;\n          }\n          return this.source;\n        }\n      }\n      const makeMap = Tools.makeMap, each$4 = Tools.each, explode$1 = Tools.explode, extend$1 = Tools.extend;\n      const basePurifyConfig = {\n        IN_PLACE: true,\n        ALLOW_UNKNOWN_PROTOCOLS: true,\n        ALLOWED_TAGS: [\n          \"#comment\",\n          \"#cdata-section\",\n          \"body\"\n        ],\n        ALLOWED_ATTR: []\n      };\n      const filteredUrlAttrs = Tools.makeMap(\"src,href,data,background,action,formaction,poster,xlink:href\");\n      const internalElementAttr = \"data-mce-type\";\n      const getPurifyConfig = (settings, mimeType) => {\n        const config2 = { ...basePurifyConfig };\n        config2.PARSER_MEDIA_TYPE = mimeType;\n        if (settings.allow_script_urls) {\n          config2.ALLOWED_URI_REGEXP = /.*/;\n        } else if (settings.allow_html_data_urls) {\n          config2.ALLOWED_URI_REGEXP = /^(?!(\\w+script|mhtml):)/i;\n        }\n        return config2;\n      };\n      const setupPurify = (settings, schema) => {\n        const purify$1 = purify();\n        const validate2 = settings.validate;\n        let uid = 0;\n        purify$1.addHook(\"uponSanitizeElement\", (ele, evt) => {\n          var _a3, _b;\n          if (ele.nodeType === COMMENT && !settings.allow_conditional_comments && /^\\[if/i.test(ele.nodeValue)) {\n            ele.nodeValue = \" \" + ele.nodeValue;\n          }\n          const tagName = evt.tagName;\n          if (ele.nodeType !== ELEMENT || tagName === \"body\") {\n            return;\n          }\n          const element = SugarElement.fromDom(ele);\n          const isInternalElement = has$1(element, internalElementAttr);\n          const bogus = get$9(element, \"data-mce-bogus\");\n          if (!isInternalElement && isString2(bogus)) {\n            if (bogus === \"all\") {\n              remove$5(element);\n            } else {\n              unwrap(element);\n            }\n            return;\n          }\n          const rule = schema.getElementRule(tagName.toLowerCase());\n          if (validate2 && !rule) {\n            unwrap(element);\n            return;\n          } else {\n            evt.allowedTags[tagName] = true;\n          }\n          if (validate2 && !isInternalElement) {\n            each$g((_a3 = rule.attributesForced) !== null && _a3 !== void 0 ? _a3 : [], (attr) => {\n              set$2(element, attr.name, attr.value === \"{$uid}\" ? `mce_${uid++}` : attr.value);\n            });\n            each$g((_b = rule.attributesDefault) !== null && _b !== void 0 ? _b : [], (attr) => {\n              if (!has$1(element, attr.name)) {\n                set$2(element, attr.name, attr.value === \"{$uid}\" ? `mce_${uid++}` : attr.value);\n              }\n            });\n            if (rule.attributesRequired && !exists(rule.attributesRequired, (attr) => has$1(element, attr))) {\n              unwrap(element);\n              return;\n            }\n            if (rule.removeEmptyAttrs && hasNone(element)) {\n              unwrap(element);\n              return;\n            }\n            if (rule.outputName && rule.outputName !== tagName.toLowerCase()) {\n              mutate(element, rule.outputName);\n            }\n          }\n        });\n        purify$1.addHook(\"uponSanitizeAttribute\", (ele, evt) => {\n          const tagName = ele.tagName.toLowerCase();\n          const { attrName, attrValue } = evt;\n          evt.keepAttr = !validate2 || schema.isValid(tagName, attrName) || startsWith(attrName, \"data-\") || startsWith(attrName, \"aria-\");\n          if (attrName in filteredUrlAttrs && isInvalidUri(settings, attrValue, tagName)) {\n            evt.keepAttr = false;\n          }\n          if (evt.keepAttr) {\n            evt.allowedAttributes[attrName] = true;\n            if (attrName in schema.getBoolAttrs()) {\n              evt.attrValue = attrName;\n            }\n            if (settings.allow_svg_data_urls && startsWith(attrValue, \"data:image/svg+xml\")) {\n              evt.forceKeepAttr = true;\n            }\n          } else if (ele.hasAttribute(internalElementAttr) && (attrName === \"id\" || attrName === \"class\" || attrName === \"style\")) {\n            evt.forceKeepAttr = true;\n          }\n        });\n        return purify$1;\n      };\n      const transferChildren = (parent2, nativeParent, specialElements) => {\n        const parentName = parent2.name;\n        const isSpecial = parentName in specialElements && parentName !== \"title\" && parentName !== \"textarea\";\n        const childNodes = nativeParent.childNodes;\n        for (let ni = 0, nl = childNodes.length; ni < nl; ni++) {\n          const nativeChild = childNodes[ni];\n          const child2 = new AstNode(nativeChild.nodeName.toLowerCase(), nativeChild.nodeType);\n          if (isElement$6(nativeChild)) {\n            const attributes = nativeChild.attributes;\n            for (let ai = 0, al = attributes.length; ai < al; ai++) {\n              const attr = attributes[ai];\n              child2.attr(attr.name, attr.value);\n            }\n          } else if (isText$8(nativeChild)) {\n            child2.value = nativeChild.data;\n            if (isSpecial) {\n              child2.raw = true;\n            }\n          } else if (isComment(nativeChild) || isCData(nativeChild) || isPi(nativeChild)) {\n            child2.value = nativeChild.data;\n          }\n          transferChildren(child2, nativeChild, specialElements);\n          parent2.append(child2);\n        }\n      };\n      const walkTree = (root2, preprocessors, postprocessors) => {\n        const traverseOrder = [];\n        for (let node = root2, lastNode = node; isNonNullable(node); lastNode = node, node = node.walk()) {\n          each$g(preprocessors, (preprocess2) => preprocess2(node));\n          if (isNullable(node.parent) && node !== root2) {\n            node = lastNode;\n          } else {\n            traverseOrder.push(node);\n          }\n        }\n        for (let i3 = traverseOrder.length - 1; i3 >= 0; i3--) {\n          const node = traverseOrder[i3];\n          each$g(postprocessors, (postprocess) => postprocess(node));\n        }\n      };\n      const whitespaceCleaner = (root2, schema, settings, args) => {\n        const validate2 = settings.validate;\n        const nonEmptyElements = schema.getNonEmptyElements();\n        const whitespaceElements = schema.getWhitespaceElements();\n        const blockElements = extend$1(makeMap(\"script,style,head,html,body,title,meta,param\"), schema.getBlockElements());\n        const allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n        const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n        const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n        const hasWhitespaceParent = (node) => {\n          node = node.parent;\n          while (isNonNullable(node)) {\n            if (node.name in whitespaceElements) {\n              return true;\n            } else {\n              node = node.parent;\n            }\n          }\n          return false;\n        };\n        const isAtEdgeOfBlock = (node, start2) => {\n          const neighbour = start2 ? node.prev : node.next;\n          if (isNonNullable(neighbour)) {\n            return false;\n          }\n          return node.parent.name in blockElements && (node.parent !== root2 || args.isRootContent);\n        };\n        const preprocess2 = (node) => {\n          if (node.type === 3) {\n            if (!hasWhitespaceParent(node)) {\n              let text3 = node.value;\n              text3 = text3.replace(allWhiteSpaceRegExp, \" \");\n              if (isLineBreakNode(node.prev, blockElements) || isAtEdgeOfBlock(node, true)) {\n                text3 = text3.replace(startWhiteSpaceRegExp, \"\");\n              }\n              if (text3.length === 0) {\n                node.remove();\n              } else {\n                node.value = text3;\n              }\n            }\n          }\n        };\n        const postprocess = (node) => {\n          var _a3;\n          if (node.type === 1) {\n            const elementRule = schema.getElementRule(node.name);\n            if (validate2 && elementRule) {\n              const isNodeEmpty = isEmpty2(schema, nonEmptyElements, whitespaceElements, node);\n              if (elementRule.removeEmpty && isNodeEmpty) {\n                if (blockElements[node.name]) {\n                  node.remove();\n                } else {\n                  node.unwrap();\n                }\n              } else if (elementRule.paddEmpty && (isNodeEmpty || isPaddedWithNbsp(node))) {\n                paddEmptyNode(settings, args, blockElements, node);\n              }\n            }\n          } else if (node.type === 3) {\n            if (!hasWhitespaceParent(node)) {\n              let text3 = node.value;\n              if (blockElements[(_a3 = node.next) === null || _a3 === void 0 ? void 0 : _a3.name] || isAtEdgeOfBlock(node, false)) {\n                text3 = text3.replace(endWhiteSpaceRegExp, \"\");\n              }\n              if (text3.length === 0) {\n                node.remove();\n              } else {\n                node.value = text3;\n              }\n            }\n          }\n        };\n        return [\n          preprocess2,\n          postprocess\n        ];\n      };\n      const getRootBlockName = (settings, args) => {\n        var _a3;\n        const name2 = (_a3 = args.forced_root_block) !== null && _a3 !== void 0 ? _a3 : settings.forced_root_block;\n        if (name2 === false) {\n          return \"\";\n        } else if (name2 === true) {\n          return \"p\";\n        } else {\n          return name2;\n        }\n      };\n      const DomParser = (settings = {}, schema = Schema()) => {\n        const nodeFilters = {};\n        const attributeFilters = [];\n        const defaultedSettings = {\n          validate: true,\n          root_name: \"body\",\n          ...settings\n        };\n        const parser = new DOMParser();\n        const purify2 = setupPurify(defaultedSettings, schema);\n        const parseAndSanitizeWithContext = (html2, rootName, format2 = \"html\") => {\n          const mimeType = format2 === \"xhtml\" ? \"application/xhtml+xml\" : \"text/html\";\n          const isSpecialRoot = has$2(schema.getSpecialElements(), rootName.toLowerCase());\n          const content = isSpecialRoot ? `<${rootName}>${html2}</${rootName}>` : html2;\n          const wrappedHtml = format2 === \"xhtml\" ? `<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>${content}</body></html>` : `<body>${content}</body>`;\n          const body = parser.parseFromString(wrappedHtml, mimeType).body;\n          purify2.sanitize(body, getPurifyConfig(defaultedSettings, mimeType));\n          purify2.removed = [];\n          return isSpecialRoot ? body.firstChild : body;\n        };\n        const addNodeFilter = (name2, callback) => {\n          each$4(explode$1(name2), (name3) => {\n            let list2 = nodeFilters[name3];\n            if (!list2) {\n              nodeFilters[name3] = list2 = [];\n            }\n            list2.push(callback);\n          });\n        };\n        const getNodeFilters = () => {\n          const out = [];\n          for (const name2 in nodeFilters) {\n            if (has$2(nodeFilters, name2)) {\n              out.push({\n                name: name2,\n                callbacks: nodeFilters[name2]\n              });\n            }\n          }\n          return out;\n        };\n        const addAttributeFilter = (name2, callback) => {\n          each$4(explode$1(name2), (name3) => {\n            let i3;\n            for (i3 = 0; i3 < attributeFilters.length; i3++) {\n              if (attributeFilters[i3].name === name3) {\n                attributeFilters[i3].callbacks.push(callback);\n                return;\n              }\n            }\n            attributeFilters.push({\n              name: name3,\n              callbacks: [callback]\n            });\n          });\n        };\n        const getAttributeFilters = () => [].concat(attributeFilters);\n        const findInvalidChildren = (node, invalidChildren) => {\n          const parent2 = node.parent;\n          if (parent2 && schema.children[node.name] && !schema.isValidChild(parent2.name, node.name)) {\n            invalidChildren.push(node);\n          }\n        };\n        const addRootBlocks2 = (rootNode, rootBlockName) => {\n          const blockElements = extend$1(makeMap(\"script,style,head,html,body,title,meta,param\"), schema.getBlockElements());\n          const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n          const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n          let node = rootNode.firstChild, rootBlockNode = null;\n          const trim2 = (rootBlock) => {\n            if (rootBlock) {\n              node = rootBlock.firstChild;\n              if (node && node.type === 3) {\n                node.value = node.value.replace(startWhiteSpaceRegExp, \"\");\n              }\n              node = rootBlock.lastChild;\n              if (node && node.type === 3) {\n                node.value = node.value.replace(endWhiteSpaceRegExp, \"\");\n              }\n            }\n          };\n          if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n            return;\n          }\n          while (node) {\n            const next2 = node.next;\n            if (node.type === 3 || node.type === 1 && node.name !== \"p\" && !blockElements[node.name] && !node.attr(internalElementAttr)) {\n              if (!rootBlockNode) {\n                rootBlockNode = new AstNode(rootBlockName, 1);\n                rootBlockNode.attr(defaultedSettings.forced_root_block_attrs);\n                rootNode.insert(rootBlockNode, node);\n                rootBlockNode.append(node);\n              } else {\n                rootBlockNode.append(node);\n              }\n            } else {\n              trim2(rootBlockNode);\n              rootBlockNode = null;\n            }\n            node = next2;\n          }\n          trim2(rootBlockNode);\n        };\n        const parse = (html2, args = {}) => {\n          var _a3;\n          const validate2 = defaultedSettings.validate;\n          const rootName = (_a3 = args.context) !== null && _a3 !== void 0 ? _a3 : defaultedSettings.root_name;\n          const element = parseAndSanitizeWithContext(html2, rootName, args.format);\n          const rootNode = new AstNode(rootName, 11);\n          transferChildren(rootNode, element, schema.getSpecialElements());\n          const [whitespacePre, whitespacePost] = whitespaceCleaner(rootNode, schema, defaultedSettings, args);\n          const invalidChildren = [];\n          const invalidFinder = validate2 ? (node) => findInvalidChildren(node, invalidChildren) : noop;\n          const nodeFilters2 = getNodeFilters();\n          const matches = {\n            nodes: {},\n            attributes: {}\n          };\n          const matchFinder = (node) => matchNode$1(nodeFilters2, attributeFilters, node, matches);\n          walkTree(rootNode, [\n            whitespacePre,\n            matchFinder\n          ], [\n            whitespacePost,\n            invalidFinder\n          ]);\n          invalidChildren.reverse();\n          if (validate2 && invalidChildren.length > 0) {\n            if (args.context) {\n              const {\n                pass: topLevelChildren,\n                fail: otherChildren\n              } = partition$2(invalidChildren, (child2) => child2.parent === rootNode);\n              cleanInvalidNodes(otherChildren, schema, matchFinder);\n              args.invalid = topLevelChildren.length > 0;\n            } else {\n              cleanInvalidNodes(invalidChildren, schema, matchFinder);\n            }\n          }\n          const rootBlockName = getRootBlockName(defaultedSettings, args);\n          if (rootBlockName && (rootNode.name === \"body\" || args.isRootContent)) {\n            addRootBlocks2(rootNode, rootBlockName);\n          }\n          if (!args.invalid) {\n            runFilters(matches, args);\n          }\n          return rootNode;\n        };\n        const exports2 = {\n          schema,\n          addAttributeFilter,\n          getAttributeFilters,\n          addNodeFilter,\n          getNodeFilters,\n          parse\n        };\n        register$4(exports2, defaultedSettings);\n        register$5(exports2, defaultedSettings, schema);\n        return exports2;\n      };\n      const serializeContent = (content) => isTreeNode(content) ? HtmlSerializer({ validate: false }).serialize(content) : content;\n      const withSerializedContent = (content, fireEvent2) => {\n        const serializedContent = serializeContent(content);\n        const eventArgs = fireEvent2(serializedContent);\n        if (eventArgs.isDefaultPrevented()) {\n          return eventArgs;\n        } else if (isTreeNode(content)) {\n          if (eventArgs.content !== serializedContent) {\n            const rootNode = DomParser({\n              validate: false,\n              forced_root_block: false\n            }).parse(eventArgs.content, { context: content.name });\n            return {\n              ...eventArgs,\n              content: rootNode\n            };\n          } else {\n            return {\n              ...eventArgs,\n              content\n            };\n          }\n        } else {\n          return eventArgs;\n        }\n      };\n      const preProcessGetContent = (editor, args) => {\n        if (args.no_events) {\n          return Result.value(args);\n        } else {\n          const eventArgs = fireBeforeGetContent(editor, args);\n          if (eventArgs.isDefaultPrevented()) {\n            return Result.error(fireGetContent(editor, {\n              content: \"\",\n              ...eventArgs\n            }).content);\n          } else {\n            return Result.value(eventArgs);\n          }\n        }\n      };\n      const postProcessGetContent = (editor, content, args) => {\n        if (args.no_events) {\n          return content;\n        } else {\n          const processedEventArgs = withSerializedContent(content, (c2) => fireGetContent(editor, {\n            ...args,\n            content: c2\n          }));\n          return processedEventArgs.content;\n        }\n      };\n      const preProcessSetContent = (editor, args) => {\n        if (args.no_events) {\n          return Result.value(args);\n        } else {\n          const processedEventArgs = withSerializedContent(args.content, (content) => fireBeforeSetContent(editor, {\n            ...args,\n            content\n          }));\n          if (processedEventArgs.isDefaultPrevented()) {\n            fireSetContent(editor, processedEventArgs);\n            return Result.error(void 0);\n          } else {\n            return Result.value(processedEventArgs);\n          }\n        }\n      };\n      const postProcessSetContent = (editor, content, args) => {\n        if (!args.no_events) {\n          fireSetContent(editor, {\n            ...args,\n            content\n          });\n        }\n      };\n      const tableModel = (element, width, rows) => ({\n        element,\n        width,\n        rows\n      });\n      const tableRow = (element, cells2) => ({\n        element,\n        cells: cells2\n      });\n      const cellPosition = (x2, y2) => ({\n        x: x2,\n        y: y2\n      });\n      const getSpan = (td, key) => {\n        const value2 = parseInt(get$9(td, key), 10);\n        return isNaN(value2) ? 1 : value2;\n      };\n      const fillout = (table3, x2, y2, tr, td) => {\n        const rowspan = getSpan(td, \"rowspan\");\n        const colspan = getSpan(td, \"colspan\");\n        const rows = table3.rows;\n        for (let y22 = y2; y22 < y2 + rowspan; y22++) {\n          if (!rows[y22]) {\n            rows[y22] = tableRow(deep$1(tr), []);\n          }\n          for (let x22 = x2; x22 < x2 + colspan; x22++) {\n            const cells2 = rows[y22].cells;\n            cells2[x22] = y22 === y2 && x22 === x2 ? td : shallow$1(td);\n          }\n        }\n      };\n      const cellExists = (table3, x2, y2) => {\n        const rows = table3.rows;\n        const cells2 = rows[y2] ? rows[y2].cells : [];\n        return !!cells2[x2];\n      };\n      const skipCellsX = (table3, x2, y2) => {\n        while (cellExists(table3, x2, y2)) {\n          x2++;\n        }\n        return x2;\n      };\n      const getWidth = (rows) => {\n        return foldl(rows, (acc, row) => {\n          return row.cells.length > acc ? row.cells.length : acc;\n        }, 0);\n      };\n      const findElementPos = (table3, element) => {\n        const rows = table3.rows;\n        for (let y2 = 0; y2 < rows.length; y2++) {\n          const cells2 = rows[y2].cells;\n          for (let x2 = 0; x2 < cells2.length; x2++) {\n            if (eq2(cells2[x2], element)) {\n              return Optional.some(cellPosition(x2, y2));\n            }\n          }\n        }\n        return Optional.none();\n      };\n      const extractRows = (table3, sx, sy, ex, ey) => {\n        const newRows = [];\n        const rows = table3.rows;\n        for (let y2 = sy; y2 <= ey; y2++) {\n          const cells2 = rows[y2].cells;\n          const slice = sx < ex ? cells2.slice(sx, ex + 1) : cells2.slice(ex, sx + 1);\n          newRows.push(tableRow(rows[y2].element, slice));\n        }\n        return newRows;\n      };\n      const subTable = (table3, startPos, endPos) => {\n        const sx = startPos.x, sy = startPos.y;\n        const ex = endPos.x, ey = endPos.y;\n        const newRows = sy < ey ? extractRows(table3, sx, sy, ex, ey) : extractRows(table3, sx, ey, ex, sy);\n        return tableModel(table3.element, getWidth(newRows), newRows);\n      };\n      const createDomTable = (table3, rows) => {\n        const tableElement = shallow$1(table3.element);\n        const tableBody = SugarElement.fromTag(\"tbody\");\n        append(tableBody, rows);\n        append$1(tableElement, tableBody);\n        return tableElement;\n      };\n      const modelRowsToDomRows = (table3) => {\n        return map$3(table3.rows, (row) => {\n          const cells2 = map$3(row.cells, (cell2) => {\n            const td = deep$1(cell2);\n            remove$a(td, \"colspan\");\n            remove$a(td, \"rowspan\");\n            return td;\n          });\n          const tr = shallow$1(row.element);\n          append(tr, cells2);\n          return tr;\n        });\n      };\n      const fromDom = (tableElm) => {\n        const table3 = tableModel(shallow$1(tableElm), 0, []);\n        each$g(descendants(tableElm, \"tr\"), (tr, y2) => {\n          each$g(descendants(tr, \"td,th\"), (td, x2) => {\n            fillout(table3, skipCellsX(table3, x2, y2), y2, tr, td);\n          });\n        });\n        return tableModel(table3.element, getWidth(table3.rows), table3.rows);\n      };\n      const toDom = (table3) => {\n        return createDomTable(table3, modelRowsToDomRows(table3));\n      };\n      const subsection = (table3, startElement, endElement) => {\n        return findElementPos(table3, startElement).bind((startPos) => {\n          return findElementPos(table3, endElement).map((endPos) => {\n            return subTable(table3, startPos, endPos);\n          });\n        });\n      };\n      const findParentListContainer = (parents2) => find$2(parents2, (elm) => name(elm) === \"ul\" || name(elm) === \"ol\");\n      const getFullySelectedListWrappers = (parents2, rng) => find$2(parents2, (elm) => name(elm) === \"li\" && hasAllContentsSelected(elm, rng)).fold(constant2([]), (_li) => findParentListContainer(parents2).map((listCont) => {\n        const listElm = SugarElement.fromTag(name(listCont));\n        const listStyles = filter$5(getAllRaw(listCont), (_style, name2) => startsWith(name2, \"list-style\"));\n        setAll(listElm, listStyles);\n        return [\n          SugarElement.fromTag(\"li\"),\n          listElm\n        ];\n      }).getOr([]));\n      const wrap = (innerElm, elms) => {\n        const wrapped = foldl(elms, (acc, elm) => {\n          append$1(elm, acc);\n          return elm;\n        }, innerElm);\n        return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n      };\n      const directListWrappers = (commonAnchorContainer) => {\n        if (isListItem(commonAnchorContainer)) {\n          return parent(commonAnchorContainer).filter(isList).fold(constant2([]), (listElm) => [\n            commonAnchorContainer,\n            listElm\n          ]);\n        } else {\n          return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n        }\n      };\n      const getWrapElements = (rootNode, rng) => {\n        const commonAnchorContainer = SugarElement.fromDom(rng.commonAncestorContainer);\n        const parents2 = parentsAndSelf(commonAnchorContainer, rootNode);\n        const wrapElements = filter$6(parents2, (elm) => isInline$1(elm) || isHeading(elm));\n        const listWrappers = getFullySelectedListWrappers(parents2, rng);\n        const allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n        return map$3(allWrappers, shallow$1);\n      };\n      const emptyFragment = () => fromElements([]);\n      const getFragmentFromRange = (rootNode, rng) => wrap(SugarElement.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n      const getParentTable = (rootElm, cell2) => ancestor$2(cell2, \"table\", curry(eq2, rootElm));\n      const getTableFragment = (rootNode, selectedTableCells) => getParentTable(rootNode, selectedTableCells[0]).bind((tableElm) => {\n        const firstCell = selectedTableCells[0];\n        const lastCell = selectedTableCells[selectedTableCells.length - 1];\n        const fullTableModel = fromDom(tableElm);\n        return subsection(fullTableModel, firstCell, lastCell).map((sectionedTableModel) => fromElements([toDom(sectionedTableModel)]));\n      }).getOrThunk(emptyFragment);\n      const getSelectionFragment = (rootNode, ranges) => ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\n      const read$3 = (rootNode, ranges) => {\n        const selectedCells = getCellsFromElementOrRanges(ranges, rootNode);\n        return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n      };\n      const isCollapsibleWhitespace = (text3, index2) => index2 >= 0 && index2 < text3.length && isWhiteSpace2(text3.charAt(index2));\n      const getInnerText = (bin) => {\n        return trim$1(bin.innerText);\n      };\n      const getContextNodeName = (parentBlockOpt) => parentBlockOpt.map((block2) => block2.nodeName).getOr(\"div\").toLowerCase();\n      const getTextContent = (editor) => Optional.from(editor.selection.getRng()).map((rng) => {\n        const parentBlockOpt = Optional.from(editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock));\n        const body = editor.getBody();\n        const contextNodeName = getContextNodeName(parentBlockOpt);\n        const bin = editor.dom.add(body, contextNodeName, {\n          \"data-mce-bogus\": \"all\",\n          \"style\": \"overflow: hidden; opacity: 0;\"\n        }, rng.cloneContents());\n        const text3 = getInnerText(bin);\n        const nonRenderedText = trim$1(bin.textContent);\n        editor.dom.remove(bin);\n        if (isCollapsibleWhitespace(nonRenderedText, 0) || isCollapsibleWhitespace(nonRenderedText, nonRenderedText.length - 1)) {\n          const parentBlock = parentBlockOpt.getOr(body);\n          const parentBlockText = getInnerText(parentBlock);\n          const textIndex = parentBlockText.indexOf(text3);\n          if (textIndex === -1) {\n            return text3;\n          } else {\n            const hasProceedingSpace = isCollapsibleWhitespace(parentBlockText, textIndex - 1);\n            const hasTrailingSpace = isCollapsibleWhitespace(parentBlockText, textIndex + text3.length);\n            return (hasProceedingSpace ? \" \" : \"\") + text3 + (hasTrailingSpace ? \" \" : \"\");\n          }\n        } else {\n          return text3;\n        }\n      }).getOr(\"\");\n      const getSerializedContent = (editor, args) => {\n        const rng = editor.selection.getRng(), tmpElm = editor.dom.create(\"body\");\n        const sel = editor.selection.getSel();\n        const ranges = processRanges(editor, getRanges$1(sel));\n        const fragment = args.contextual ? read$3(SugarElement.fromDom(editor.getBody()), ranges).dom : rng.cloneContents();\n        if (fragment) {\n          tmpElm.appendChild(fragment);\n        }\n        return editor.selection.serializer.serialize(tmpElm, args);\n      };\n      const extractSelectedContent = (editor, args) => {\n        if (args.format === \"text\") {\n          return getTextContent(editor);\n        } else {\n          const content = getSerializedContent(editor, args);\n          if (args.format === \"tree\") {\n            return content;\n          } else {\n            return editor.selection.isCollapsed() ? \"\" : content;\n          }\n        }\n      };\n      const setupArgs$3 = (args, format2) => ({\n        ...args,\n        format: format2,\n        get: true,\n        selection: true,\n        getInner: true\n      });\n      const getSelectedContentInternal = (editor, format2, args = {}) => {\n        const defaultedArgs = setupArgs$3(args, format2);\n        return preProcessGetContent(editor, defaultedArgs).fold(identity2, (updatedArgs) => {\n          const content = extractSelectedContent(editor, updatedArgs);\n          return postProcessGetContent(editor, content, updatedArgs);\n        });\n      };\n      const KEEP = 0, INSERT = 1, DELETE = 2;\n      const diff = (left, right) => {\n        const size = left.length + right.length + 2;\n        const vDown = new Array(size);\n        const vUp = new Array(size);\n        const snake = (start2, end2, diag) => {\n          return {\n            start: start2,\n            end: end2,\n            diag\n          };\n        };\n        const buildScript = (start1, end1, start2, end2, script2) => {\n          const middle = getMiddleSnake(start1, end1, start2, end2);\n          if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) {\n            let i3 = start1;\n            let j2 = start2;\n            while (i3 < end1 || j2 < end2) {\n              if (i3 < end1 && j2 < end2 && left[i3] === right[j2]) {\n                script2.push([\n                  KEEP,\n                  left[i3]\n                ]);\n                ++i3;\n                ++j2;\n              } else {\n                if (end1 - start1 > end2 - start2) {\n                  script2.push([\n                    DELETE,\n                    left[i3]\n                  ]);\n                  ++i3;\n                } else {\n                  script2.push([\n                    INSERT,\n                    right[j2]\n                  ]);\n                  ++j2;\n                }\n              }\n            }\n          } else {\n            buildScript(start1, middle.start, start2, middle.start - middle.diag, script2);\n            for (let i22 = middle.start; i22 < middle.end; ++i22) {\n              script2.push([\n                KEEP,\n                left[i22]\n              ]);\n            }\n            buildScript(middle.end, end1, middle.end - middle.diag, end2, script2);\n          }\n        };\n        const buildSnake = (start2, diag, end1, end2) => {\n          let end3 = start2;\n          while (end3 - diag < end2 && end3 < end1 && left[end3] === right[end3 - diag]) {\n            ++end3;\n          }\n          return snake(start2, end3, diag);\n        };\n        const getMiddleSnake = (start1, end1, start2, end2) => {\n          const m2 = end1 - start1;\n          const n3 = end2 - start2;\n          if (m2 === 0 || n3 === 0) {\n            return null;\n          }\n          const delta = m2 - n3;\n          const sum = n3 + m2;\n          const offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\n          vDown[1 + offset] = start1;\n          vUp[1 + offset] = end1 + 1;\n          let d2, k3, i3, x2, y2;\n          for (d2 = 0; d2 <= offset; ++d2) {\n            for (k3 = -d2; k3 <= d2; k3 += 2) {\n              i3 = k3 + offset;\n              if (k3 === -d2 || k3 !== d2 && vDown[i3 - 1] < vDown[i3 + 1]) {\n                vDown[i3] = vDown[i3 + 1];\n              } else {\n                vDown[i3] = vDown[i3 - 1] + 1;\n              }\n              x2 = vDown[i3];\n              y2 = x2 - start1 + start2 - k3;\n              while (x2 < end1 && y2 < end2 && left[x2] === right[y2]) {\n                vDown[i3] = ++x2;\n                ++y2;\n              }\n              if (delta % 2 !== 0 && delta - d2 <= k3 && k3 <= delta + d2) {\n                if (vUp[i3 - delta] <= vDown[i3]) {\n                  return buildSnake(vUp[i3 - delta], k3 + start1 - start2, end1, end2);\n                }\n              }\n            }\n            for (k3 = delta - d2; k3 <= delta + d2; k3 += 2) {\n              i3 = k3 + offset - delta;\n              if (k3 === delta - d2 || k3 !== delta + d2 && vUp[i3 + 1] <= vUp[i3 - 1]) {\n                vUp[i3] = vUp[i3 + 1] - 1;\n              } else {\n                vUp[i3] = vUp[i3 - 1];\n              }\n              x2 = vUp[i3] - 1;\n              y2 = x2 - start1 + start2 - k3;\n              while (x2 >= start1 && y2 >= start2 && left[x2] === right[y2]) {\n                vUp[i3] = x2--;\n                y2--;\n              }\n              if (delta % 2 === 0 && -d2 <= k3 && k3 <= d2) {\n                if (vUp[i3] <= vDown[i3 + delta]) {\n                  return buildSnake(vUp[i3], k3 + start1 - start2, end1, end2);\n                }\n              }\n            }\n          }\n        };\n        const script = [];\n        buildScript(0, left.length, 0, right.length, script);\n        return script;\n      };\n      const getOuterHtml = (elm) => {\n        if (isElement$6(elm)) {\n          return elm.outerHTML;\n        } else if (isText$8(elm)) {\n          return Entities.encodeRaw(elm.data, false);\n        } else if (isComment(elm)) {\n          return \"<!--\" + elm.data + \"-->\";\n        }\n        return \"\";\n      };\n      const createFragment = (html2) => {\n        let node;\n        const container = document.createElement(\"div\");\n        const frag = document.createDocumentFragment();\n        if (html2) {\n          container.innerHTML = html2;\n        }\n        while (node = container.firstChild) {\n          frag.appendChild(node);\n        }\n        return frag;\n      };\n      const insertAt = (elm, html2, index2) => {\n        const fragment = createFragment(html2);\n        if (elm.hasChildNodes() && index2 < elm.childNodes.length) {\n          const target = elm.childNodes[index2];\n          target.parentNode.insertBefore(fragment, target);\n        } else {\n          elm.appendChild(fragment);\n        }\n      };\n      const removeAt = (elm, index2) => {\n        if (elm.hasChildNodes() && index2 < elm.childNodes.length) {\n          const target = elm.childNodes[index2];\n          target.parentNode.removeChild(target);\n        }\n      };\n      const applyDiff = (diff2, elm) => {\n        let index2 = 0;\n        each$g(diff2, (action2) => {\n          if (action2[0] === KEEP) {\n            index2++;\n          } else if (action2[0] === INSERT) {\n            insertAt(elm, action2[1], index2);\n            index2++;\n          } else if (action2[0] === DELETE) {\n            removeAt(elm, index2);\n          }\n        });\n      };\n      const read$2 = (elm) => {\n        return filter$6(map$3(from(elm.childNodes), getOuterHtml), (item) => {\n          return item.length > 0;\n        });\n      };\n      const write = (fragments, elm) => {\n        const currentFragments = map$3(from(elm.childNodes), getOuterHtml);\n        applyDiff(diff(currentFragments, fragments), elm);\n        return elm;\n      };\n      const lazyTempDocument = cached(() => document.implementation.createHTMLDocument(\"undo\"));\n      const hasIframes = (html2) => {\n        return html2.indexOf(\"</iframe>\") !== -1;\n      };\n      const createFragmentedLevel = (fragments) => {\n        return {\n          type: \"fragmented\",\n          fragments,\n          content: \"\",\n          bookmark: null,\n          beforeBookmark: null\n        };\n      };\n      const createCompleteLevel = (content) => {\n        return {\n          type: \"complete\",\n          fragments: null,\n          content,\n          bookmark: null,\n          beforeBookmark: null\n        };\n      };\n      const createFromEditor = (editor) => {\n        const fragments = read$2(editor.getBody());\n        const trimmedFragments = bind$3(fragments, (html2) => {\n          const trimmed = trimInternal(editor.serializer, html2);\n          return trimmed.length > 0 ? [trimmed] : [];\n        });\n        const content = trimmedFragments.join(\"\");\n        return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\n      };\n      const applyToEditor = (editor, level2, before2) => {\n        const bookmark = before2 ? level2.beforeBookmark : level2.bookmark;\n        if (level2.type === \"fragmented\") {\n          write(level2.fragments, editor.getBody());\n        } else {\n          editor.setContent(level2.content, {\n            format: \"raw\",\n            no_selection: isNonNullable(bookmark) && isPathBookmark(bookmark) ? !bookmark.isFakeCaret : true\n          });\n        }\n        editor.selection.moveToBookmark(bookmark);\n      };\n      const getLevelContent = (level2) => {\n        return level2.type === \"fragmented\" ? level2.fragments.join(\"\") : level2.content;\n      };\n      const getCleanLevelContent = (level2) => {\n        const elm = SugarElement.fromTag(\"body\", lazyTempDocument());\n        set2(elm, getLevelContent(level2));\n        each$g(descendants(elm, \"*[data-mce-bogus]\"), unwrap);\n        return get$6(elm);\n      };\n      const hasEqualContent = (level1, level2) => getLevelContent(level1) === getLevelContent(level2);\n      const hasEqualCleanedContent = (level1, level2) => getCleanLevelContent(level1) === getCleanLevelContent(level2);\n      const isEq$1 = (level1, level2) => {\n        if (!level1 || !level2) {\n          return false;\n        } else if (hasEqualContent(level1, level2)) {\n          return true;\n        } else {\n          return hasEqualCleanedContent(level1, level2);\n        }\n      };\n      const isUnlocked = (locks) => locks.get() === 0;\n      const setTyping = (undoManager, typing, locks) => {\n        if (isUnlocked(locks)) {\n          undoManager.typing = typing;\n        }\n      };\n      const endTyping = (undoManager, locks) => {\n        if (undoManager.typing) {\n          setTyping(undoManager, false, locks);\n          undoManager.add();\n        }\n      };\n      const endTypingLevelIgnoreLocks = (undoManager) => {\n        if (undoManager.typing) {\n          undoManager.typing = false;\n          undoManager.add();\n        }\n      };\n      const beforeChange$1 = (editor, locks, beforeBookmark) => {\n        if (isUnlocked(locks)) {\n          beforeBookmark.set(getUndoBookmark(editor.selection));\n        }\n      };\n      const addUndoLevel$1 = (editor, undoManager, index2, locks, beforeBookmark, level2, event) => {\n        const currentLevel = createFromEditor(editor);\n        level2 = level2 || {};\n        level2 = Tools.extend(level2, currentLevel);\n        if (isUnlocked(locks) === false || editor.removed) {\n          return null;\n        }\n        const lastLevel = undoManager.data[index2.get()];\n        if (editor.dispatch(\"BeforeAddUndo\", {\n          level: level2,\n          lastLevel,\n          originalEvent: event\n        }).isDefaultPrevented()) {\n          return null;\n        }\n        if (lastLevel && isEq$1(lastLevel, level2)) {\n          return null;\n        }\n        if (undoManager.data[index2.get()]) {\n          beforeBookmark.get().each((bm) => {\n            undoManager.data[index2.get()].beforeBookmark = bm;\n          });\n        }\n        const customUndoRedoLevels = getCustomUndoRedoLevels(editor);\n        if (customUndoRedoLevels) {\n          if (undoManager.data.length > customUndoRedoLevels) {\n            for (let i3 = 0; i3 < undoManager.data.length - 1; i3++) {\n              undoManager.data[i3] = undoManager.data[i3 + 1];\n            }\n            undoManager.data.length--;\n            index2.set(undoManager.data.length);\n          }\n        }\n        level2.bookmark = getUndoBookmark(editor.selection);\n        if (index2.get() < undoManager.data.length - 1) {\n          undoManager.data.length = index2.get() + 1;\n        }\n        undoManager.data.push(level2);\n        index2.set(undoManager.data.length - 1);\n        const args = {\n          level: level2,\n          lastLevel,\n          originalEvent: event\n        };\n        if (index2.get() > 0) {\n          editor.setDirty(true);\n          editor.dispatch(\"AddUndo\", args);\n          editor.dispatch(\"change\", args);\n        } else {\n          editor.dispatch(\"AddUndo\", args);\n        }\n        return level2;\n      };\n      const clear$1 = (editor, undoManager, index2) => {\n        undoManager.data = [];\n        index2.set(0);\n        undoManager.typing = false;\n        editor.dispatch(\"ClearUndos\");\n      };\n      const extra$1 = (editor, undoManager, index2, callback1, callback2) => {\n        if (undoManager.transact(callback1)) {\n          const bookmark = undoManager.data[index2.get()].bookmark;\n          const lastLevel = undoManager.data[index2.get() - 1];\n          applyToEditor(editor, lastLevel, true);\n          if (undoManager.transact(callback2)) {\n            undoManager.data[index2.get() - 1].beforeBookmark = bookmark;\n          }\n        }\n      };\n      const redo$1 = (editor, index2, data2) => {\n        let level2;\n        if (index2.get() < data2.length - 1) {\n          index2.set(index2.get() + 1);\n          level2 = data2[index2.get()];\n          applyToEditor(editor, level2, false);\n          editor.setDirty(true);\n          editor.dispatch(\"Redo\", { level: level2 });\n        }\n        return level2;\n      };\n      const undo$1 = (editor, undoManager, locks, index2) => {\n        let level2;\n        if (undoManager.typing) {\n          undoManager.add();\n          undoManager.typing = false;\n          setTyping(undoManager, false, locks);\n        }\n        if (index2.get() > 0) {\n          index2.set(index2.get() - 1);\n          level2 = undoManager.data[index2.get()];\n          applyToEditor(editor, level2, true);\n          editor.setDirty(true);\n          editor.dispatch(\"Undo\", { level: level2 });\n        }\n        return level2;\n      };\n      const reset$1 = (undoManager) => {\n        undoManager.clear();\n        undoManager.add();\n      };\n      const hasUndo$1 = (editor, undoManager, index2) => index2.get() > 0 || undoManager.typing && undoManager.data[0] && !isEq$1(createFromEditor(editor), undoManager.data[0]);\n      const hasRedo$1 = (undoManager, index2) => index2.get() < undoManager.data.length - 1 && !undoManager.typing;\n      const transact$1 = (undoManager, locks, callback) => {\n        endTyping(undoManager, locks);\n        undoManager.beforeChange();\n        undoManager.ignore(callback);\n        return undoManager.add();\n      };\n      const ignore$1 = (locks, callback) => {\n        try {\n          locks.set(locks.get() + 1);\n          callback();\n        } finally {\n          locks.set(locks.get() - 1);\n        }\n      };\n      const addVisualInternal = (editor, elm) => {\n        const dom3 = editor.dom;\n        const scope = isNonNullable(elm) ? elm : editor.getBody();\n        if (isUndefined2(editor.hasVisual)) {\n          editor.hasVisual = isVisualAidsEnabled(editor);\n        }\n        each$g(dom3.select(\"table,a\", scope), (matchedElm) => {\n          switch (matchedElm.nodeName) {\n            case \"TABLE\":\n              const cls = getVisualAidsTableClass(editor);\n              const value2 = dom3.getAttrib(matchedElm, \"border\");\n              if ((!value2 || value2 === \"0\") && editor.hasVisual) {\n                dom3.addClass(matchedElm, cls);\n              } else {\n                dom3.removeClass(matchedElm, cls);\n              }\n              break;\n            case \"A\":\n              if (!dom3.getAttrib(matchedElm, \"href\")) {\n                const value3 = dom3.getAttrib(matchedElm, \"name\") || matchedElm.id;\n                const cls2 = getVisualAidsAnchorClass(editor);\n                if (value3 && editor.hasVisual) {\n                  dom3.addClass(matchedElm, cls2);\n                } else {\n                  dom3.removeClass(matchedElm, cls2);\n                }\n              }\n              break;\n          }\n        });\n        editor.dispatch(\"VisualAid\", {\n          element: elm,\n          hasVisual: editor.hasVisual\n        });\n      };\n      const makePlainAdaptor = (editor) => ({\n        init: { bindEvents: noop },\n        undoManager: {\n          beforeChange: (locks, beforeBookmark) => beforeChange$1(editor, locks, beforeBookmark),\n          add: (undoManager, index2, locks, beforeBookmark, level2, event) => addUndoLevel$1(editor, undoManager, index2, locks, beforeBookmark, level2, event),\n          undo: (undoManager, locks, index2) => undo$1(editor, undoManager, locks, index2),\n          redo: (index2, data2) => redo$1(editor, index2, data2),\n          clear: (undoManager, index2) => clear$1(editor, undoManager, index2),\n          reset: (undoManager) => reset$1(undoManager),\n          hasUndo: (undoManager, index2) => hasUndo$1(editor, undoManager, index2),\n          hasRedo: (undoManager, index2) => hasRedo$1(undoManager, index2),\n          transact: (undoManager, locks, callback) => transact$1(undoManager, locks, callback),\n          ignore: (locks, callback) => ignore$1(locks, callback),\n          extra: (undoManager, index2, callback1, callback2) => extra$1(editor, undoManager, index2, callback1, callback2)\n        },\n        formatter: {\n          match: (name2, vars, node, similar) => match$2(editor, name2, vars, node, similar),\n          matchAll: (names, vars) => matchAll(editor, names, vars),\n          matchNode: (node, name2, vars, similar) => matchNode(editor, node, name2, vars, similar),\n          canApply: (name2) => canApply(editor, name2),\n          closest: (names) => closest$1(editor, names),\n          apply: (name2, vars, node) => applyFormat$1(editor, name2, vars, node),\n          remove: (name2, vars, node, similar) => remove$2(editor, name2, vars, node, similar),\n          toggle: (name2, vars, node) => toggle(editor, name2, vars, node),\n          formatChanged: (registeredFormatListeners, formats, callback, similar, vars) => formatChangedInternal(editor, registeredFormatListeners, formats, callback, similar, vars)\n        },\n        editor: {\n          getContent: (args) => getContentInternal(editor, args),\n          setContent: (content, args) => setContentInternal(editor, content, args),\n          insertContent: (value2, details) => insertHtmlAtCaret(editor, value2, details),\n          addVisual: (elm) => addVisualInternal(editor, elm)\n        },\n        selection: { getContent: (format2, args) => getSelectedContentInternal(editor, format2, args) },\n        autocompleter: {\n          addDecoration: (range2) => create$8(editor, range2),\n          removeDecoration: () => remove$3(editor, SugarElement.fromDom(editor.getBody()))\n        },\n        raw: { getModel: () => Optional.none() }\n      });\n      const makeRtcAdaptor = (rtcEditor) => {\n        const defaultVars = (vars) => isObject2(vars) ? vars : {};\n        const { init: init2, undoManager, formatter, editor, selection, autocompleter, raw } = rtcEditor;\n        return {\n          init: { bindEvents: init2.bindEvents },\n          undoManager: {\n            beforeChange: undoManager.beforeChange,\n            add: undoManager.add,\n            undo: undoManager.undo,\n            redo: undoManager.redo,\n            clear: undoManager.clear,\n            reset: undoManager.reset,\n            hasUndo: undoManager.hasUndo,\n            hasRedo: undoManager.hasRedo,\n            transact: (_undoManager, _locks, fn) => undoManager.transact(fn),\n            ignore: (_locks, callback) => undoManager.ignore(callback),\n            extra: (_undoManager, _index, callback1, callback2) => undoManager.extra(callback1, callback2)\n          },\n          formatter: {\n            match: (name2, vars, _node, similar) => formatter.match(name2, defaultVars(vars), similar),\n            matchAll: formatter.matchAll,\n            matchNode: formatter.matchNode,\n            canApply: (name2) => formatter.canApply(name2),\n            closest: (names) => formatter.closest(names),\n            apply: (name2, vars, _node) => formatter.apply(name2, defaultVars(vars)),\n            remove: (name2, vars, _node, _similar) => formatter.remove(name2, defaultVars(vars)),\n            toggle: (name2, vars, _node) => formatter.toggle(name2, defaultVars(vars)),\n            formatChanged: (_rfl, formats, callback, similar, vars) => formatter.formatChanged(formats, callback, similar, vars)\n          },\n          editor: {\n            getContent: (args) => editor.getContent(args),\n            setContent: (content, args) => {\n              return {\n                content: editor.setContent(content, args),\n                html: \"\"\n              };\n            },\n            insertContent: (content, _details) => {\n              editor.insertContent(content);\n              return \"\";\n            },\n            addVisual: editor.addVisual\n          },\n          selection: { getContent: (_format, args) => selection.getContent(args) },\n          autocompleter: {\n            addDecoration: autocompleter.addDecoration,\n            removeDecoration: autocompleter.removeDecoration\n          },\n          raw: { getModel: () => Optional.some(raw.getRawModel()) }\n        };\n      };\n      const makeNoopAdaptor = () => {\n        const nul = constant2(null);\n        const empty2 = constant2(\"\");\n        return {\n          init: { bindEvents: noop },\n          undoManager: {\n            beforeChange: noop,\n            add: nul,\n            undo: nul,\n            redo: nul,\n            clear: noop,\n            reset: noop,\n            hasUndo: never,\n            hasRedo: never,\n            transact: nul,\n            ignore: noop,\n            extra: noop\n          },\n          formatter: {\n            match: never,\n            matchAll: constant2([]),\n            matchNode: constant2(void 0),\n            canApply: never,\n            closest: empty2,\n            apply: noop,\n            remove: noop,\n            toggle: noop,\n            formatChanged: constant2({ unbind: noop })\n          },\n          editor: {\n            getContent: empty2,\n            setContent: constant2({\n              content: \"\",\n              html: \"\"\n            }),\n            insertContent: constant2(\"\"),\n            addVisual: noop\n          },\n          selection: { getContent: empty2 },\n          autocompleter: {\n            addDecoration: noop,\n            removeDecoration: noop\n          },\n          raw: { getModel: constant2(Optional.none()) }\n        };\n      };\n      const isRtc = (editor) => has$2(editor.plugins, \"rtc\");\n      const getRtcSetup = (editor) => get$a(editor.plugins, \"rtc\").bind((rtcPlugin) => Optional.from(rtcPlugin.setup));\n      const setup$s = (editor) => {\n        const editorCast = editor;\n        return getRtcSetup(editor).fold(() => {\n          editorCast.rtcInstance = makePlainAdaptor(editor);\n          return Optional.none();\n        }, (setup2) => {\n          editorCast.rtcInstance = makeNoopAdaptor();\n          return Optional.some(() => setup2().then((rtcEditor) => {\n            editorCast.rtcInstance = makeRtcAdaptor(rtcEditor);\n            return rtcEditor.rtc.isRemote;\n          }));\n        });\n      };\n      const getRtcInstanceWithFallback = (editor) => editor.rtcInstance ? editor.rtcInstance : makePlainAdaptor(editor);\n      const getRtcInstanceWithError = (editor) => {\n        const rtcInstance = editor.rtcInstance;\n        if (!rtcInstance) {\n          throw new Error(\"Failed to get RTC instance not yet initialized.\");\n        } else {\n          return rtcInstance;\n        }\n      };\n      const beforeChange = (editor, locks, beforeBookmark) => {\n        getRtcInstanceWithError(editor).undoManager.beforeChange(locks, beforeBookmark);\n      };\n      const addUndoLevel = (editor, undoManager, index2, locks, beforeBookmark, level2, event) => getRtcInstanceWithError(editor).undoManager.add(undoManager, index2, locks, beforeBookmark, level2, event);\n      const undo = (editor, undoManager, locks, index2) => getRtcInstanceWithError(editor).undoManager.undo(undoManager, locks, index2);\n      const redo = (editor, index2, data2) => getRtcInstanceWithError(editor).undoManager.redo(index2, data2);\n      const clear = (editor, undoManager, index2) => {\n        getRtcInstanceWithError(editor).undoManager.clear(undoManager, index2);\n      };\n      const reset = (editor, undoManager) => {\n        getRtcInstanceWithError(editor).undoManager.reset(undoManager);\n      };\n      const hasUndo = (editor, undoManager, index2) => getRtcInstanceWithError(editor).undoManager.hasUndo(undoManager, index2);\n      const hasRedo = (editor, undoManager, index2) => getRtcInstanceWithError(editor).undoManager.hasRedo(undoManager, index2);\n      const transact = (editor, undoManager, locks, callback) => getRtcInstanceWithError(editor).undoManager.transact(undoManager, locks, callback);\n      const ignore = (editor, locks, callback) => {\n        getRtcInstanceWithError(editor).undoManager.ignore(locks, callback);\n      };\n      const extra = (editor, undoManager, index2, callback1, callback2) => {\n        getRtcInstanceWithError(editor).undoManager.extra(undoManager, index2, callback1, callback2);\n      };\n      const matchFormat = (editor, name2, vars, node, similar) => getRtcInstanceWithError(editor).formatter.match(name2, vars, node, similar);\n      const matchAllFormats = (editor, names, vars) => getRtcInstanceWithError(editor).formatter.matchAll(names, vars);\n      const matchNodeFormat = (editor, node, name2, vars, similar) => getRtcInstanceWithError(editor).formatter.matchNode(node, name2, vars, similar);\n      const canApplyFormat = (editor, name2) => getRtcInstanceWithError(editor).formatter.canApply(name2);\n      const closestFormat = (editor, names) => getRtcInstanceWithError(editor).formatter.closest(names);\n      const applyFormat2 = (editor, name2, vars, node) => {\n        getRtcInstanceWithError(editor).formatter.apply(name2, vars, node);\n      };\n      const removeFormat = (editor, name2, vars, node, similar) => {\n        getRtcInstanceWithError(editor).formatter.remove(name2, vars, node, similar);\n      };\n      const toggleFormat = (editor, name2, vars, node) => {\n        getRtcInstanceWithError(editor).formatter.toggle(name2, vars, node);\n      };\n      const formatChanged = (editor, registeredFormatListeners, formats, callback, similar, vars) => getRtcInstanceWithError(editor).formatter.formatChanged(registeredFormatListeners, formats, callback, similar, vars);\n      const getContent$2 = (editor, args) => getRtcInstanceWithFallback(editor).editor.getContent(args);\n      const setContent$2 = (editor, content, args) => getRtcInstanceWithFallback(editor).editor.setContent(content, args);\n      const insertContent$1 = (editor, value2, details) => getRtcInstanceWithFallback(editor).editor.insertContent(value2, details);\n      const getSelectedContent = (editor, format2, args) => getRtcInstanceWithError(editor).selection.getContent(format2, args);\n      const addVisual$1 = (editor, elm) => getRtcInstanceWithError(editor).editor.addVisual(elm);\n      const bindEvents = (editor) => getRtcInstanceWithError(editor).init.bindEvents();\n      const addAutocompleterDecoration = (editor, range2) => getRtcInstanceWithError(editor).autocompleter.addDecoration(range2);\n      const removeAutocompleterDecoration = (editor) => getRtcInstanceWithError(editor).autocompleter.removeDecoration();\n      const getContent$1 = (editor, args = {}) => {\n        const format2 = args.format ? args.format : \"html\";\n        return getSelectedContent(editor, format2, args);\n      };\n      const removeEmpty = (text3) => {\n        if (text3.dom.length === 0) {\n          remove$5(text3);\n          return Optional.none();\n        } else {\n          return Optional.some(text3);\n        }\n      };\n      const walkPastBookmark = (node, start2) => node.filter((elm) => BookmarkManager.isBookmarkNode(elm.dom)).bind(start2 ? nextSibling : prevSibling);\n      const merge$1 = (outer, inner, rng, start2) => {\n        const outerElm = outer.dom;\n        const innerElm = inner.dom;\n        const oldLength = start2 ? outerElm.length : innerElm.length;\n        if (start2) {\n          mergeTextNodes(outerElm, innerElm, false, !start2);\n          rng.setStart(innerElm, oldLength);\n        } else {\n          mergeTextNodes(innerElm, outerElm, false, !start2);\n          rng.setEnd(innerElm, oldLength);\n        }\n      };\n      const normalizeTextIfRequired = (inner, start2) => {\n        parent(inner).each((root2) => {\n          const text3 = inner.dom;\n          if (start2 && needsToBeNbspLeft(root2, CaretPosition(text3, 0))) {\n            normalizeWhitespaceAfter(text3, 0);\n          } else if (!start2 && needsToBeNbspRight(root2, CaretPosition(text3, text3.length))) {\n            normalizeWhitespaceBefore(text3, text3.length);\n          }\n        });\n      };\n      const mergeAndNormalizeText = (outerNode, innerNode, rng, start2) => {\n        outerNode.bind((outer) => {\n          const normalizer = start2 ? normalizeWhitespaceBefore : normalizeWhitespaceAfter;\n          normalizer(outer.dom, start2 ? outer.dom.length : 0);\n          return innerNode.filter(isText$9).map((inner) => merge$1(outer, inner, rng, start2));\n        }).orThunk(() => {\n          const innerTextNode = walkPastBookmark(innerNode, start2).or(innerNode).filter(isText$9);\n          return innerTextNode.map((inner) => normalizeTextIfRequired(inner, start2));\n        });\n      };\n      const rngSetContent = (rng, fragment) => {\n        const firstChild2 = Optional.from(fragment.firstChild).map(SugarElement.fromDom);\n        const lastChild2 = Optional.from(fragment.lastChild).map(SugarElement.fromDom);\n        rng.deleteContents();\n        rng.insertNode(fragment);\n        const prevText = firstChild2.bind(prevSibling).filter(isText$9).bind(removeEmpty);\n        const nextText = lastChild2.bind(nextSibling).filter(isText$9).bind(removeEmpty);\n        mergeAndNormalizeText(prevText, firstChild2, rng, true);\n        mergeAndNormalizeText(nextText, lastChild2, rng, false);\n        rng.collapse(false);\n      };\n      const setupArgs$2 = (args, content) => ({\n        format: \"html\",\n        ...args,\n        set: true,\n        selection: true,\n        content\n      });\n      const cleanContent = (editor, args) => {\n        if (args.format !== \"raw\") {\n          const rng = editor.selection.getRng();\n          const contextBlock = editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock);\n          const contextArgs = contextBlock ? { context: contextBlock.nodeName.toLowerCase() } : {};\n          const node = editor.parser.parse(args.content, {\n            forced_root_block: false,\n            ...contextArgs,\n            ...args\n          });\n          return HtmlSerializer({ validate: false }, editor.schema).serialize(node);\n        } else {\n          return args.content;\n        }\n      };\n      const setContent$1 = (editor, content, args = {}) => {\n        const defaultedArgs = setupArgs$2(args, content);\n        preProcessSetContent(editor, defaultedArgs).each((updatedArgs) => {\n          const cleanedContent = cleanContent(editor, updatedArgs);\n          const rng = editor.selection.getRng();\n          rngSetContent(rng, rng.createContextualFragment(cleanedContent));\n          editor.selection.setRng(rng);\n          scrollRangeIntoView(editor, rng);\n          postProcessSetContent(editor, cleanedContent, updatedArgs);\n        });\n      };\n      const deleteFromCallbackMap = (callbackMap, selector, callback) => {\n        if (callbackMap && has$2(callbackMap, selector)) {\n          const newCallbacks = filter$6(callbackMap[selector], (cb) => cb !== callback);\n          if (newCallbacks.length === 0) {\n            delete callbackMap[selector];\n          } else {\n            callbackMap[selector] = newCallbacks;\n          }\n        }\n      };\n      var SelectorChanged = (dom3, editor) => {\n        let selectorChangedData;\n        let currentSelectors;\n        const findMatchingNode = (selector, nodes) => find$2(nodes, (node) => dom3.is(node, selector));\n        const getParents2 = (elem) => dom3.getParents(elem, null, dom3.getRoot());\n        return {\n          selectorChangedWithUnbind: (selector, callback) => {\n            if (!selectorChangedData) {\n              selectorChangedData = {};\n              currentSelectors = {};\n              editor.on(\"NodeChange\", (e2) => {\n                const node = e2.element;\n                const parents2 = getParents2(node);\n                const matchedSelectors = {};\n                Tools.each(selectorChangedData, (callbacks, selector2) => {\n                  findMatchingNode(selector2, parents2).each((node2) => {\n                    if (!currentSelectors[selector2]) {\n                      each$g(callbacks, (callback2) => {\n                        callback2(true, {\n                          node: node2,\n                          selector: selector2,\n                          parents: parents2\n                        });\n                      });\n                      currentSelectors[selector2] = callbacks;\n                    }\n                    matchedSelectors[selector2] = callbacks;\n                  });\n                });\n                Tools.each(currentSelectors, (callbacks, selector2) => {\n                  if (!matchedSelectors[selector2]) {\n                    delete currentSelectors[selector2];\n                    Tools.each(callbacks, (callback2) => {\n                      callback2(false, {\n                        node,\n                        selector: selector2,\n                        parents: parents2\n                      });\n                    });\n                  }\n                });\n              });\n            }\n            if (!selectorChangedData[selector]) {\n              selectorChangedData[selector] = [];\n            }\n            selectorChangedData[selector].push(callback);\n            findMatchingNode(selector, getParents2(editor.selection.getStart())).each(() => {\n              currentSelectors[selector] = selectorChangedData[selector];\n            });\n            return {\n              unbind: () => {\n                deleteFromCallbackMap(selectorChangedData, selector, callback);\n                deleteFromCallbackMap(currentSelectors, selector, callback);\n              }\n            };\n          }\n        };\n      };\n      const isAttachedToDom = (node) => {\n        return !!(node && node.ownerDocument) && contains2(SugarElement.fromDom(node.ownerDocument), SugarElement.fromDom(node));\n      };\n      const isValidRange = (rng) => {\n        if (!rng) {\n          return false;\n        } else {\n          return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n        }\n      };\n      const EditorSelection = (dom3, win, serializer, editor) => {\n        let selectedRange;\n        let explicitRange;\n        const { selectorChangedWithUnbind } = SelectorChanged(dom3, editor);\n        const setCursorLocation = (node, offset) => {\n          const rng = dom3.createRng();\n          if (isNonNullable(node) && isNonNullable(offset)) {\n            rng.setStart(node, offset);\n            rng.setEnd(node, offset);\n            setRng(rng);\n            collapse2(false);\n          } else {\n            moveEndPoint(dom3, rng, editor.getBody(), true);\n            setRng(rng);\n          }\n        };\n        const getContent2 = (args) => getContent$1(editor, args);\n        const setContent2 = (content, args) => setContent$1(editor, content, args);\n        const getStart$12 = (real) => getStart(editor.getBody(), getRng$1(), real);\n        const getEnd2 = (real) => getEnd$1(editor.getBody(), getRng$1(), real);\n        const getBookmark2 = (type2, normalized) => bookmarkManager.getBookmark(type2, normalized);\n        const moveToBookmark2 = (bookmark) => bookmarkManager.moveToBookmark(bookmark);\n        const select$1 = (node, content) => {\n          select(dom3, node, content).each(setRng);\n          return node;\n        };\n        const isCollapsed = () => {\n          const rng = getRng$1(), sel = getSel();\n          if (!rng || rng.item) {\n            return false;\n          }\n          if (rng.compareEndPoints) {\n            return rng.compareEndPoints(\"StartToEnd\", rng) === 0;\n          }\n          return !sel || rng.collapsed;\n        };\n        const collapse2 = (toStart) => {\n          const rng = getRng$1();\n          rng.collapse(!!toStart);\n          setRng(rng);\n        };\n        const getSel = () => win.getSelection ? win.getSelection() : win.document.selection;\n        const getRng$1 = () => {\n          let selection, rng, elm;\n          const tryCompareBoundaryPoints = (how, sourceRange, destinationRange) => {\n            try {\n              return sourceRange.compareBoundaryPoints(how, destinationRange);\n            } catch (ex) {\n              return -1;\n            }\n          };\n          const doc = win.document;\n          if (editor.bookmark !== void 0 && hasFocus(editor) === false) {\n            const bookmark = getRng(editor);\n            if (bookmark.isSome()) {\n              return bookmark.map((r4) => processRanges(editor, [r4])[0]).getOr(doc.createRange());\n            }\n          }\n          try {\n            if ((selection = getSel()) && !isRestrictedNode(selection.anchorNode)) {\n              if (selection.rangeCount > 0) {\n                rng = selection.getRangeAt(0);\n              } else {\n                rng = selection.createRange ? selection.createRange() : doc.createRange();\n              }\n              rng = processRanges(editor, [rng])[0];\n            }\n          } catch (ex) {\n          }\n          if (!rng) {\n            rng = doc.createRange();\n          }\n          if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) {\n            elm = dom3.getRoot();\n            rng.setStart(elm, 0);\n            rng.setEnd(elm, 0);\n          }\n          if (selectedRange && explicitRange) {\n            if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n              rng = explicitRange;\n            } else {\n              selectedRange = null;\n              explicitRange = null;\n            }\n          }\n          return rng;\n        };\n        const setRng = (rng, forward) => {\n          let node;\n          if (!isValidRange(rng)) {\n            return;\n          }\n          const sel = getSel();\n          const evt = editor.dispatch(\"SetSelectionRange\", {\n            range: rng,\n            forward\n          });\n          rng = evt.range;\n          if (sel) {\n            explicitRange = rng;\n            try {\n              sel.removeAllRanges();\n              sel.addRange(rng);\n            } catch (ex) {\n            }\n            if (forward === false && sel.extend) {\n              sel.collapse(rng.endContainer, rng.endOffset);\n              sel.extend(rng.startContainer, rng.startOffset);\n            }\n            selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n          }\n          if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent) {\n            if (rng.endOffset - rng.startOffset < 2) {\n              if (rng.startContainer.hasChildNodes()) {\n                node = rng.startContainer.childNodes[rng.startOffset];\n                if (node && node.tagName === \"IMG\") {\n                  sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n                  if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n                    sel.setBaseAndExtent(node, 0, node, 1);\n                  }\n                }\n              }\n            }\n          }\n          editor.dispatch(\"AfterSetSelectionRange\", {\n            range: rng,\n            forward\n          });\n        };\n        const setNode = (elm) => {\n          setContent2(dom3.getOuterHTML(elm));\n          return elm;\n        };\n        const getNode$12 = () => getNode(editor.getBody(), getRng$1());\n        const getSelectedBlocks$1 = (startElm, endElm) => getSelectedBlocks(dom3, getRng$1(), startElm, endElm);\n        const isForward = () => {\n          const sel = getSel();\n          const anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n          const focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n          if (!sel || !anchorNode || !focusNode || isRestrictedNode(anchorNode) || isRestrictedNode(focusNode)) {\n            return true;\n          }\n          const anchorRange = dom3.createRng();\n          anchorRange.setStart(anchorNode, sel.anchorOffset);\n          anchorRange.collapse(true);\n          const focusRange = dom3.createRng();\n          focusRange.setStart(focusNode, sel.focusOffset);\n          focusRange.collapse(true);\n          return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n        };\n        const normalize4 = () => {\n          const rng = getRng$1();\n          const sel = getSel();\n          if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n            const normRng = normalize$22(dom3, rng);\n            normRng.each((normRng2) => {\n              setRng(normRng2, isForward());\n            });\n            return normRng.getOr(rng);\n          }\n          return rng;\n        };\n        const selectorChanged = (selector, callback) => {\n          selectorChangedWithUnbind(selector, callback);\n          return exports2;\n        };\n        const getScrollContainer = () => {\n          let scrollContainer;\n          let node = dom3.getRoot();\n          while (node && node.nodeName !== \"BODY\") {\n            if (node.scrollHeight > node.clientHeight) {\n              scrollContainer = node;\n              break;\n            }\n            node = node.parentNode;\n          }\n          return scrollContainer;\n        };\n        const scrollIntoView = (elm, alignToTop) => {\n          if (isNonNullable(elm)) {\n            scrollElementIntoView(editor, elm, alignToTop);\n          } else {\n            scrollRangeIntoView(editor, getRng$1(), alignToTop);\n          }\n        };\n        const placeCaretAt = (clientX, clientY) => setRng(fromPoint(clientX, clientY, editor.getDoc()));\n        const getBoundingClientRect2 = () => {\n          const rng = getRng$1();\n          return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n        };\n        const destroy2 = () => {\n          win = selectedRange = explicitRange = null;\n          controlSelection.destroy();\n        };\n        const exports2 = {\n          bookmarkManager: null,\n          controlSelection: null,\n          dom: dom3,\n          win,\n          serializer,\n          editor,\n          collapse: collapse2,\n          setCursorLocation,\n          getContent: getContent2,\n          setContent: setContent2,\n          getBookmark: getBookmark2,\n          moveToBookmark: moveToBookmark2,\n          select: select$1,\n          isCollapsed,\n          isForward,\n          setNode,\n          getNode: getNode$12,\n          getSel,\n          setRng,\n          getRng: getRng$1,\n          getStart: getStart$12,\n          getEnd: getEnd2,\n          getSelectedBlocks: getSelectedBlocks$1,\n          normalize: normalize4,\n          selectorChanged,\n          selectorChangedWithUnbind,\n          getScrollContainer,\n          scrollIntoView,\n          placeCaretAt,\n          getBoundingClientRect: getBoundingClientRect2,\n          destroy: destroy2\n        };\n        const bookmarkManager = BookmarkManager(exports2);\n        const controlSelection = ControlSelection(exports2, editor);\n        exports2.bookmarkManager = bookmarkManager;\n        exports2.controlSelection = controlSelection;\n        return exports2;\n      };\n      const register$3 = (htmlParser, settings, dom3) => {\n        htmlParser.addAttributeFilter(\"data-mce-tabindex\", (nodes, name2) => {\n          let i3 = nodes.length;\n          while (i3--) {\n            const node = nodes[i3];\n            node.attr(\"tabindex\", node.attr(\"data-mce-tabindex\"));\n            node.attr(name2, null);\n          }\n        });\n        htmlParser.addAttributeFilter(\"src,href,style\", (nodes, name2) => {\n          const internalName = \"data-mce-\" + name2;\n          const urlConverter = settings.url_converter;\n          const urlConverterScope = settings.url_converter_scope;\n          let i3 = nodes.length;\n          while (i3--) {\n            const node = nodes[i3];\n            let value2 = node.attr(internalName);\n            if (value2 !== void 0) {\n              node.attr(name2, value2.length > 0 ? value2 : null);\n              node.attr(internalName, null);\n            } else {\n              value2 = node.attr(name2);\n              if (name2 === \"style\") {\n                value2 = dom3.serializeStyle(dom3.parseStyle(value2), node.name);\n              } else if (urlConverter) {\n                value2 = urlConverter.call(urlConverterScope, value2, name2, node.name);\n              }\n              node.attr(name2, value2.length > 0 ? value2 : null);\n            }\n          }\n        });\n        htmlParser.addAttributeFilter(\"class\", (nodes) => {\n          let i3 = nodes.length;\n          while (i3--) {\n            const node = nodes[i3];\n            let value2 = node.attr(\"class\");\n            if (value2) {\n              value2 = node.attr(\"class\").replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, \"\");\n              node.attr(\"class\", value2.length > 0 ? value2 : null);\n            }\n          }\n        });\n        htmlParser.addAttributeFilter(\"data-mce-type\", (nodes, name2, args) => {\n          let i3 = nodes.length;\n          while (i3--) {\n            const node = nodes[i3];\n            if (node.attr(\"data-mce-type\") === \"bookmark\" && !args.cleanup) {\n              const hasChildren = Optional.from(node.firstChild).exists((firstChild2) => !isZwsp(firstChild2.value));\n              if (hasChildren) {\n                node.unwrap();\n              } else {\n                node.remove();\n              }\n            }\n          }\n        });\n        htmlParser.addNodeFilter(\"noscript\", (nodes) => {\n          let i3 = nodes.length;\n          while (i3--) {\n            const node = nodes[i3].firstChild;\n            if (node) {\n              node.value = Entities.decode(node.value);\n            }\n          }\n        });\n        htmlParser.addNodeFilter(\"script,style\", (nodes, name2) => {\n          const trim2 = (value2) => {\n            return value2.replace(/(<!--\\[CDATA\\[|\\]\\]-->)/g, \"\\n\").replace(/^[\\r\\n]*|[\\r\\n]*$/g, \"\").replace(/^\\s*((<!--)?(\\s*\\/\\/)?\\s*<!\\[CDATA\\[|(<!--\\s*)?\\/\\*\\s*<!\\[CDATA\\[\\s*\\*\\/|(\\/\\/)?\\s*<!--|\\/\\*\\s*<!--\\s*\\*\\/)\\s*[\\r\\n]*/gi, \"\").replace(/\\s*(\\/\\*\\s*\\]\\]>\\s*\\*\\/(-->)?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, \"\");\n          };\n          let i3 = nodes.length;\n          while (i3--) {\n            const node = nodes[i3];\n            const value2 = node.firstChild ? node.firstChild.value : \"\";\n            if (name2 === \"script\") {\n              const type2 = node.attr(\"type\");\n              if (type2) {\n                node.attr(\"type\", type2 === \"mce-no/type\" ? null : type2.replace(/^mce\\-/, \"\"));\n              }\n              if (settings.element_format === \"xhtml\" && value2.length > 0) {\n                node.firstChild.value = \"// <![CDATA[\\n\" + trim2(value2) + \"\\n// ]]>\";\n              }\n            } else {\n              if (settings.element_format === \"xhtml\" && value2.length > 0) {\n                node.firstChild.value = \"<!--\\n\" + trim2(value2) + \"\\n-->\";\n              }\n            }\n          }\n        });\n        htmlParser.addNodeFilter(\"#comment\", (nodes) => {\n          let i3 = nodes.length;\n          while (i3--) {\n            const node = nodes[i3];\n            if (settings.preserve_cdata && node.value.indexOf(\"[CDATA[\") === 0) {\n              node.name = \"#cdata\";\n              node.type = 4;\n              node.value = dom3.decode(node.value.replace(/^\\[CDATA\\[|\\]\\]$/g, \"\"));\n            } else if (node.value.indexOf(\"mce:protected \") === 0) {\n              node.name = \"#text\";\n              node.type = 3;\n              node.raw = true;\n              node.value = unescape(node.value).substr(14);\n            }\n          }\n        });\n        htmlParser.addNodeFilter(\"xml:namespace,input\", (nodes, name2) => {\n          let i3 = nodes.length;\n          while (i3--) {\n            const node = nodes[i3];\n            if (node.type === 7) {\n              node.remove();\n            } else if (node.type === 1) {\n              if (name2 === \"input\" && !node.attr(\"type\")) {\n                node.attr(\"type\", \"text\");\n              }\n            }\n          }\n        });\n        htmlParser.addAttributeFilter(\"data-mce-type\", (nodes) => {\n          each$g(nodes, (node) => {\n            if (node.attr(\"data-mce-type\") === \"format-caret\") {\n              if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n                node.remove();\n              } else {\n                node.unwrap();\n              }\n            }\n          });\n        });\n        htmlParser.addAttributeFilter(\"data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize,data-mce-placeholder\", (nodes, name2) => {\n          let i3 = nodes.length;\n          while (i3--) {\n            nodes[i3].attr(name2, null);\n          }\n        });\n      };\n      const trimTrailingBr = (rootNode) => {\n        const isBr2 = (node) => {\n          return node && node.name === \"br\";\n        };\n        const brNode1 = rootNode.lastChild;\n        if (isBr2(brNode1)) {\n          const brNode2 = brNode1.prev;\n          if (isBr2(brNode2)) {\n            brNode1.remove();\n            brNode2.remove();\n          }\n        }\n      };\n      const preProcess$1 = (editor, node, args) => {\n        let oldDoc;\n        const dom3 = editor.dom;\n        let clonedNode = node.cloneNode(true);\n        const impl = document.implementation;\n        if (impl.createHTMLDocument) {\n          const doc = impl.createHTMLDocument(\"\");\n          Tools.each(clonedNode.nodeName === \"BODY\" ? clonedNode.childNodes : [clonedNode], (node2) => {\n            doc.body.appendChild(doc.importNode(node2, true));\n          });\n          if (clonedNode.nodeName !== \"BODY\") {\n            clonedNode = doc.body.firstChild;\n          } else {\n            clonedNode = doc.body;\n          }\n          oldDoc = dom3.doc;\n          dom3.doc = doc;\n        }\n        firePreProcess(editor, {\n          ...args,\n          node: clonedNode\n        });\n        if (oldDoc) {\n          dom3.doc = oldDoc;\n        }\n        return clonedNode;\n      };\n      const shouldFireEvent = (editor, args) => {\n        return editor && editor.hasEventListeners(\"PreProcess\") && !args.no_events;\n      };\n      const process$1 = (editor, node, args) => {\n        return shouldFireEvent(editor, args) ? preProcess$1(editor, node, args) : node;\n      };\n      const addTempAttr = (htmlParser, tempAttrs, name2) => {\n        if (Tools.inArray(tempAttrs, name2) === -1) {\n          htmlParser.addAttributeFilter(name2, (nodes, name3) => {\n            let i3 = nodes.length;\n            while (i3--) {\n              nodes[i3].attr(name3, null);\n            }\n          });\n          tempAttrs.push(name2);\n        }\n      };\n      const postProcess2 = (editor, args, content) => {\n        if (!args.no_events && editor) {\n          const outArgs = firePostProcess(editor, {\n            ...args,\n            content\n          });\n          return outArgs.content;\n        } else {\n          return content;\n        }\n      };\n      const getHtmlFromNode = (dom3, node, args) => {\n        const html2 = trim$1(args.getInner ? node.innerHTML : dom3.getOuterHTML(node));\n        return args.selection || isWsPreserveElement(SugarElement.fromDom(node)) ? html2 : Tools.trim(html2);\n      };\n      const parseHtml2 = (htmlParser, html2, args) => {\n        const parserArgs = args.selection ? {\n          forced_root_block: false,\n          ...args\n        } : args;\n        const rootNode = htmlParser.parse(html2, parserArgs);\n        trimTrailingBr(rootNode);\n        return rootNode;\n      };\n      const serializeNode = (settings, schema, node) => {\n        const htmlSerializer = HtmlSerializer(settings, schema);\n        return htmlSerializer.serialize(node);\n      };\n      const toHtml = (editor, settings, schema, rootNode, args) => {\n        const content = serializeNode(settings, schema, rootNode);\n        return postProcess2(editor, args, content);\n      };\n      const DomSerializerImpl = (settings, editor) => {\n        const tempAttrs = [\"data-mce-selected\"];\n        const dom3 = editor && editor.dom ? editor.dom : DOMUtils.DOM;\n        const schema = editor && editor.schema ? editor.schema : Schema(settings);\n        settings.entity_encoding = settings.entity_encoding || \"named\";\n        settings.remove_trailing_brs = \"remove_trailing_brs\" in settings ? settings.remove_trailing_brs : true;\n        const htmlParser = DomParser(settings, schema);\n        register$3(htmlParser, settings, dom3);\n        const serialize = (node, parserArgs = {}) => {\n          const args = {\n            format: \"html\",\n            ...parserArgs\n          };\n          const targetNode = process$1(editor, node, args);\n          const html2 = getHtmlFromNode(dom3, targetNode, args);\n          const rootNode = parseHtml2(htmlParser, html2, args);\n          return args.format === \"tree\" ? rootNode : toHtml(editor, settings, schema, rootNode, args);\n        };\n        return {\n          schema,\n          addNodeFilter: htmlParser.addNodeFilter,\n          addAttributeFilter: htmlParser.addAttributeFilter,\n          serialize,\n          addRules: schema.addValidElements,\n          setRules: schema.setValidElements,\n          addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n          getTempAttrs: constant2(tempAttrs),\n          getNodeFilters: htmlParser.getNodeFilters,\n          getAttributeFilters: htmlParser.getAttributeFilters\n        };\n      };\n      const DomSerializer = (settings, editor) => {\n        const domSerializer = DomSerializerImpl(settings, editor);\n        return {\n          schema: domSerializer.schema,\n          addNodeFilter: domSerializer.addNodeFilter,\n          addAttributeFilter: domSerializer.addAttributeFilter,\n          serialize: domSerializer.serialize,\n          addRules: domSerializer.addRules,\n          setRules: domSerializer.setRules,\n          addTempAttr: domSerializer.addTempAttr,\n          getTempAttrs: domSerializer.getTempAttrs,\n          getNodeFilters: domSerializer.getNodeFilters,\n          getAttributeFilters: domSerializer.getAttributeFilters\n        };\n      };\n      const defaultFormat$1 = \"html\";\n      const setupArgs$1 = (args, format2) => ({\n        ...args,\n        format: format2,\n        get: true,\n        getInner: true\n      });\n      const getContent = (editor, args = {}) => {\n        const format2 = args.format ? args.format : defaultFormat$1;\n        const defaultedArgs = setupArgs$1(args, format2);\n        return preProcessGetContent(editor, defaultedArgs).fold(identity2, (updatedArgs) => {\n          const content = getContent$2(editor, updatedArgs);\n          return postProcessGetContent(editor, content, updatedArgs);\n        });\n      };\n      const defaultFormat = \"html\";\n      const setupArgs = (args, content) => ({\n        format: defaultFormat,\n        ...args,\n        set: true,\n        content\n      });\n      const setContent = (editor, content, args = {}) => {\n        const defaultedArgs = setupArgs(args, content);\n        return preProcessSetContent(editor, defaultedArgs).map((updatedArgs) => {\n          const result = setContent$2(editor, updatedArgs.content, updatedArgs);\n          postProcessSetContent(editor, result.html, updatedArgs);\n          return result.content;\n        }).getOr(content);\n      };\n      const removedOptions = \"autoresize_on_init,content_editable_state,padd_empty_with_br,block_elements,boolean_attributes,editor_deselector,editor_selector,elements,file_browser_callback_types,filepicker_validator_handler,force_hex_style_colors,force_p_newlines,gecko_spellcheck,images_dataimg_filter,media_scripts,mode,move_caret_before_on_enter_elements,non_empty_elements,self_closing_elements,short_ended_elements,special,spellchecker_select_languages,spellchecker_whitelist,tab_focus,tabfocus_elements,table_responsive_width,text_block_elements,text_inline_elements,toolbar_drawer,types,validate,whitespace_elements,paste_enable_default_filters,paste_filter_drop,paste_word_valid_elements,paste_retain_style_properties,paste_convert_word_fake_lists\".split(\",\");\n      const removedPlugins = \"bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,textcolor\".split(\",\");\n      const getRemovedOptions = (options) => {\n        const settingNames = filter$6(removedOptions, (setting) => has$2(options, setting));\n        const forcedRootBlock = options.forced_root_block;\n        if (forcedRootBlock === false || forcedRootBlock === \"\") {\n          settingNames.push(\"forced_root_block (false only)\");\n        }\n        return sort(settingNames);\n      };\n      const getRemovedPlugins = (options) => {\n        const plugins = Tools.makeMap(options.plugins, \" \");\n        const hasPlugin = (plugin2) => has$2(plugins, plugin2);\n        const pluginNames = filter$6(removedPlugins, hasPlugin);\n        return sort(pluginNames);\n      };\n      const logRemovedWarnings = (rawOptions, normalizedOptions) => {\n        const removedOptions2 = getRemovedOptions(rawOptions);\n        const removedPlugins2 = getRemovedPlugins(normalizedOptions);\n        const hasRemovedPlugins = removedPlugins2.length > 0;\n        const hasRemovedOptions = removedOptions2.length > 0;\n        const isLegacyMobileTheme = normalizedOptions.theme === \"mobile\";\n        if (hasRemovedPlugins || hasRemovedOptions || isLegacyMobileTheme) {\n          const listJoiner = \"\\n- \";\n          const themesMessage = isLegacyMobileTheme ? `\n\nThemes:${listJoiner}mobile` : \"\";\n          const pluginsMessage = hasRemovedPlugins ? `\n\nPlugins:${listJoiner}${removedPlugins2.join(listJoiner)}` : \"\";\n          const optionsMessage = hasRemovedOptions ? `\n\nOptions:${listJoiner}${removedOptions2.join(listJoiner)}` : \"\";\n          console.warn(\"The following deprecated features are currently enabled and have been removed in TinyMCE 6.0. These features will no longer work and should be removed from the TinyMCE configuration. See https://www.tiny.cloud/docs/tinymce/6/migration-from-5x/ for more information.\" + themesMessage + pluginsMessage + optionsMessage);\n        }\n      };\n      const logWarnings = (rawOptions, normalizedOptions) => {\n        logRemovedWarnings(rawOptions, normalizedOptions);\n      };\n      const DOM$8 = DOMUtils.DOM;\n      const restoreOriginalStyles = (editor) => {\n        DOM$8.setStyle(editor.id, \"display\", editor.orgDisplay);\n      };\n      const safeDestroy = (x2) => Optional.from(x2).each((x3) => x3.destroy());\n      const clearDomReferences = (editor) => {\n        editor.contentAreaContainer = editor.formElement = editor.container = editor.editorContainer = null;\n        editor.bodyElement = editor.contentDocument = editor.contentWindow = null;\n        editor.iframeElement = editor.targetElm = null;\n        if (editor.selection) {\n          editor.selection = editor.selection.win = editor.selection.dom = editor.selection.dom.doc = null;\n        }\n      };\n      const restoreForm = (editor) => {\n        const form = editor.formElement;\n        if (form) {\n          if (form._mceOldSubmit) {\n            form.submit = form._mceOldSubmit;\n            form._mceOldSubmit = null;\n          }\n          DOM$8.unbind(form, \"submit reset\", editor.formEventDelegate);\n        }\n      };\n      const remove$1 = (editor) => {\n        if (!editor.removed) {\n          const { _selectionOverrides, editorUpload } = editor;\n          const body = editor.getBody();\n          const element = editor.getElement();\n          if (body) {\n            editor.save({ is_removing: true });\n          }\n          editor.removed = true;\n          editor.unbindAllNativeEvents();\n          if (editor.hasHiddenInput && element) {\n            DOM$8.remove(element.nextSibling);\n          }\n          fireRemove(editor);\n          editor.editorManager.remove(editor);\n          if (!editor.inline && body) {\n            restoreOriginalStyles(editor);\n          }\n          fireDetach(editor);\n          DOM$8.remove(editor.getContainer());\n          safeDestroy(_selectionOverrides);\n          safeDestroy(editorUpload);\n          editor.destroy();\n        }\n      };\n      const destroy = (editor, automatic) => {\n        const { selection, dom: dom3 } = editor;\n        if (editor.destroyed) {\n          return;\n        }\n        if (!automatic && !editor.removed) {\n          editor.remove();\n          return;\n        }\n        if (!automatic) {\n          editor.editorManager.off(\"beforeunload\", editor._beforeUnload);\n          if (editor.theme && editor.theme.destroy) {\n            editor.theme.destroy();\n          }\n          safeDestroy(selection);\n          safeDestroy(dom3);\n        }\n        restoreForm(editor);\n        clearDomReferences(editor);\n        editor.destroyed = true;\n      };\n      const CreateIconManager = () => {\n        const lookup2 = {};\n        const add3 = (id, iconPack) => {\n          lookup2[id] = iconPack;\n        };\n        const get2 = (id) => {\n          if (lookup2[id]) {\n            return lookup2[id];\n          }\n          return { icons: {} };\n        };\n        const has3 = (id) => has$2(lookup2, id);\n        return {\n          add: add3,\n          get: get2,\n          has: has3\n        };\n      };\n      const IconManager = CreateIconManager();\n      const ModelManager = AddOnManager.ModelManager;\n      const getProp = (propName, elm) => {\n        const rawElm = elm.dom;\n        return rawElm[propName];\n      };\n      const getComputedSizeProp = (propName, elm) => parseInt(get$7(elm, propName), 10);\n      const getClientWidth = curry(getProp, \"clientWidth\");\n      const getClientHeight = curry(getProp, \"clientHeight\");\n      const getMarginTop = curry(getComputedSizeProp, \"margin-top\");\n      const getMarginLeft = curry(getComputedSizeProp, \"margin-left\");\n      const getBoundingClientRect = (elm) => elm.dom.getBoundingClientRect();\n      const isInsideElementContentArea = (bodyElm, clientX, clientY) => {\n        const clientWidth = getClientWidth(bodyElm);\n        const clientHeight = getClientHeight(bodyElm);\n        return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n      };\n      const transpose = (inline2, elm, clientX, clientY) => {\n        const clientRect = getBoundingClientRect(elm);\n        const deltaX = inline2 ? clientRect.left + elm.dom.clientLeft + getMarginLeft(elm) : 0;\n        const deltaY = inline2 ? clientRect.top + elm.dom.clientTop + getMarginTop(elm) : 0;\n        const x2 = clientX - deltaX;\n        const y2 = clientY - deltaY;\n        return {\n          x: x2,\n          y: y2\n        };\n      };\n      const isXYInContentArea = (editor, clientX, clientY) => {\n        const bodyElm = SugarElement.fromDom(editor.getBody());\n        const targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n        const transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n        return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n      };\n      const fromDomSafe = (node) => Optional.from(node).map(SugarElement.fromDom);\n      const isEditorAttachedToDom = (editor) => {\n        const rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n        return fromDomSafe(rawContainer).map(inBody).getOr(false);\n      };\n      const NotificationManagerImpl = () => {\n        const unimplemented = () => {\n          throw new Error(\"Theme did not provide a NotificationManager implementation.\");\n        };\n        return {\n          open: unimplemented,\n          close: unimplemented,\n          getArgs: unimplemented\n        };\n      };\n      const NotificationManager = (editor) => {\n        const notifications = [];\n        const getImplementation = () => {\n          const theme2 = editor.theme;\n          return theme2 && theme2.getNotificationManagerImpl ? theme2.getNotificationManagerImpl() : NotificationManagerImpl();\n        };\n        const getTopNotification = () => {\n          return Optional.from(notifications[0]);\n        };\n        const isEqual3 = (a2, b2) => {\n          return a2.type === b2.type && a2.text === b2.text && !a2.progressBar && !a2.timeout && !b2.progressBar && !b2.timeout;\n        };\n        const reposition2 = () => {\n          each$g(notifications, (notification) => {\n            notification.reposition();\n          });\n        };\n        const addNotification = (notification) => {\n          notifications.push(notification);\n        };\n        const closeNotification = (notification) => {\n          findIndex$2(notifications, (otherNotification) => {\n            return otherNotification === notification;\n          }).each((index2) => {\n            notifications.splice(index2, 1);\n          });\n        };\n        const open = (spec, fireEvent2 = true) => {\n          if (editor.removed || !isEditorAttachedToDom(editor)) {\n            return;\n          }\n          if (fireEvent2) {\n            editor.dispatch(\"BeforeOpenNotification\", { notification: spec });\n          }\n          return find$2(notifications, (notification) => {\n            return isEqual3(getImplementation().getArgs(notification), spec);\n          }).getOrThunk(() => {\n            editor.editorManager.setActive(editor);\n            const notification = getImplementation().open(spec, () => {\n              closeNotification(notification);\n              reposition2();\n              getTopNotification().fold(() => editor.focus(), (top) => focus$1(SugarElement.fromDom(top.getEl())));\n            });\n            addNotification(notification);\n            reposition2();\n            editor.dispatch(\"OpenNotification\", { notification: { ...notification } });\n            return notification;\n          });\n        };\n        const close = () => {\n          getTopNotification().each((notification) => {\n            getImplementation().close(notification);\n            closeNotification(notification);\n            reposition2();\n          });\n        };\n        const getNotifications = constant2(notifications);\n        const registerEvents2 = (editor2) => {\n          editor2.on(\"SkinLoaded\", () => {\n            const serviceMessage = getServiceMessage(editor2);\n            if (serviceMessage) {\n              open({\n                text: serviceMessage,\n                type: \"warning\",\n                timeout: 0\n              }, false);\n            }\n            reposition2();\n          });\n          editor2.on(\"show ResizeEditor ResizeWindow NodeChange\", () => {\n            requestAnimationFrame(reposition2);\n          });\n          editor2.on(\"remove\", () => {\n            each$g(notifications.slice(), (notification) => {\n              getImplementation().close(notification);\n            });\n          });\n        };\n        registerEvents2(editor);\n        return {\n          open,\n          close,\n          getNotifications\n        };\n      };\n      const PluginManager = AddOnManager.PluginManager;\n      const ThemeManager = AddOnManager.ThemeManager;\n      var WindowManagerImpl = () => {\n        const unimplemented = () => {\n          throw new Error(\"Theme did not provide a WindowManager implementation.\");\n        };\n        return {\n          open: unimplemented,\n          openUrl: unimplemented,\n          alert: unimplemented,\n          confirm: unimplemented,\n          close: unimplemented,\n          getParams: unimplemented,\n          setParams: unimplemented\n        };\n      };\n      const WindowManager = (editor) => {\n        let dialogs = [];\n        const getImplementation = () => {\n          const theme2 = editor.theme;\n          return theme2 && theme2.getWindowManagerImpl ? theme2.getWindowManagerImpl() : WindowManagerImpl();\n        };\n        const funcBind = (scope, f2) => {\n          return (...args) => {\n            return f2 ? f2.apply(scope, args) : void 0;\n          };\n        };\n        const fireOpenEvent = (dialog) => {\n          editor.dispatch(\"OpenWindow\", { dialog });\n        };\n        const fireCloseEvent = (dialog) => {\n          editor.dispatch(\"CloseWindow\", { dialog });\n        };\n        const addDialog = (dialog) => {\n          dialogs.push(dialog);\n          fireOpenEvent(dialog);\n        };\n        const closeDialog = (dialog) => {\n          fireCloseEvent(dialog);\n          dialogs = filter$6(dialogs, (otherDialog) => {\n            return otherDialog !== dialog;\n          });\n          if (dialogs.length === 0) {\n            editor.focus();\n          }\n        };\n        const getTopDialog = () => {\n          return Optional.from(dialogs[dialogs.length - 1]);\n        };\n        const storeSelectionAndOpenDialog = (openDialog) => {\n          editor.editorManager.setActive(editor);\n          store2(editor);\n          editor.ui.show();\n          const dialog = openDialog();\n          addDialog(dialog);\n          return dialog;\n        };\n        const open = (args, params) => {\n          return storeSelectionAndOpenDialog(() => getImplementation().open(args, params, closeDialog));\n        };\n        const openUrl = (args) => {\n          return storeSelectionAndOpenDialog(() => getImplementation().openUrl(args, closeDialog));\n        };\n        const alert2 = (message, callback, scope) => {\n          const windowManagerImpl = getImplementation();\n          windowManagerImpl.alert(message, funcBind(scope ? scope : windowManagerImpl, callback));\n        };\n        const confirm2 = (message, callback, scope) => {\n          const windowManagerImpl = getImplementation();\n          windowManagerImpl.confirm(message, funcBind(scope ? scope : windowManagerImpl, callback));\n        };\n        const close = () => {\n          getTopDialog().each((dialog) => {\n            getImplementation().close(dialog);\n            closeDialog(dialog);\n          });\n        };\n        editor.on(\"remove\", () => {\n          each$g(dialogs, (dialog) => {\n            getImplementation().close(dialog);\n          });\n        });\n        return {\n          open,\n          openUrl,\n          alert: alert2,\n          confirm: confirm2,\n          close\n        };\n      };\n      const displayNotification = (editor, message) => {\n        editor.notificationManager.open({\n          type: \"error\",\n          text: message\n        });\n      };\n      const displayError = (editor, message) => {\n        if (editor._skinLoaded) {\n          displayNotification(editor, message);\n        } else {\n          editor.on(\"SkinLoaded\", () => {\n            displayNotification(editor, message);\n          });\n        }\n      };\n      const uploadError = (editor, message) => {\n        displayError(editor, I18n.translate([\n          \"Failed to upload image: {0}\",\n          message\n        ]));\n      };\n      const logError = (editor, errorType, msg) => {\n        fireError(editor, errorType, { message: msg });\n        console.error(msg);\n      };\n      const createLoadError = (type2, url2, name2) => name2 ? `Failed to load ${type2}: ${name2} from url ${url2}` : `Failed to load ${type2} url: ${url2}`;\n      const pluginLoadError = (editor, url2, name2) => {\n        logError(editor, \"PluginLoadError\", createLoadError(\"plugin\", url2, name2));\n      };\n      const iconsLoadError = (editor, url2, name2) => {\n        logError(editor, \"IconsLoadError\", createLoadError(\"icons\", url2, name2));\n      };\n      const languageLoadError = (editor, url2, name2) => {\n        logError(editor, \"LanguageLoadError\", createLoadError(\"language\", url2, name2));\n      };\n      const themeLoadError = (editor, url2, name2) => {\n        logError(editor, \"ThemeLoadError\", createLoadError(\"theme\", url2, name2));\n      };\n      const modelLoadError = (editor, url2, name2) => {\n        logError(editor, \"ModelLoadError\", createLoadError(\"model\", url2, name2));\n      };\n      const pluginInitError = (editor, name2, err) => {\n        const message = I18n.translate([\n          \"Failed to initialize plugin: {0}\",\n          name2\n        ]);\n        fireError(editor, \"PluginLoadError\", { message });\n        initError(message, err);\n        displayError(editor, message);\n      };\n      const initError = (message, ...x2) => {\n        const console2 = window.console;\n        if (console2) {\n          if (console2.error) {\n            console2.error(message, ...x2);\n          } else {\n            console2.log(message, ...x2);\n          }\n        }\n      };\n      const isContentCssSkinName = (url2) => /^[a-z0-9\\-]+$/i.test(url2);\n      const getContentCssUrls = (editor) => {\n        return transformToUrls(editor, getContentCss(editor));\n      };\n      const getFontCssUrls = (editor) => {\n        return transformToUrls(editor, getFontCss(editor));\n      };\n      const transformToUrls = (editor, cssLinks) => {\n        const skinUrl = editor.editorManager.baseURL + \"/skins/content\";\n        const suffix = editor.editorManager.suffix;\n        const contentCssFile = `content${suffix}.css`;\n        const inline2 = editor.inline === true;\n        return map$3(cssLinks, (url2) => {\n          if (isContentCssSkinName(url2) && !inline2) {\n            return `${skinUrl}/${url2}/${contentCssFile}`;\n          } else {\n            return editor.documentBaseURI.toAbsolute(url2);\n          }\n        });\n      };\n      const appendContentCssFromSettings = (editor) => {\n        editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor), getFontCssUrls(editor));\n      };\n      const filter$1 = always;\n      const bind$1 = (element, event, handler) => bind$2(element, event, filter$1, handler);\n      const UploadStatus = () => {\n        const PENDING = 1, UPLOADED = 2;\n        let blobUriStatuses = {};\n        const createStatus = (status, resultUri) => {\n          return {\n            status,\n            resultUri\n          };\n        };\n        const hasBlobUri = (blobUri) => {\n          return blobUri in blobUriStatuses;\n        };\n        const getResultUri = (blobUri) => {\n          const result = blobUriStatuses[blobUri];\n          return result ? result.resultUri : null;\n        };\n        const isPending = (blobUri) => {\n          return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n        };\n        const isUploaded = (blobUri) => {\n          return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n        };\n        const markPending = (blobUri) => {\n          blobUriStatuses[blobUri] = createStatus(PENDING, null);\n        };\n        const markUploaded = (blobUri, resultUri) => {\n          blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n        };\n        const removeFailed = (blobUri) => {\n          delete blobUriStatuses[blobUri];\n        };\n        const destroy2 = () => {\n          blobUriStatuses = {};\n        };\n        return {\n          hasBlobUri,\n          getResultUri,\n          isPending,\n          isUploaded,\n          markPending,\n          markUploaded,\n          removeFailed,\n          destroy: destroy2\n        };\n      };\n      let count = 0;\n      const seed = () => {\n        const rnd = () => {\n          return Math.round(Math.random() * 4294967295).toString(36);\n        };\n        const now = (/* @__PURE__ */ new Date()).getTime();\n        return \"s\" + now.toString(36) + rnd() + rnd() + rnd();\n      };\n      const uuid = (prefix) => {\n        return prefix + count++ + seed();\n      };\n      const BlobCache = () => {\n        let cache = [];\n        const mimeToExt = (mime) => {\n          const mimes = {\n            \"image/jpeg\": \"jpg\",\n            \"image/jpg\": \"jpg\",\n            \"image/gif\": \"gif\",\n            \"image/png\": \"png\",\n            \"image/apng\": \"apng\",\n            \"image/avif\": \"avif\",\n            \"image/svg+xml\": \"svg\",\n            \"image/webp\": \"webp\",\n            \"image/bmp\": \"bmp\",\n            \"image/tiff\": \"tiff\"\n          };\n          return mimes[mime.toLowerCase()] || \"dat\";\n        };\n        const create2 = (o2, blob, base64, name2, filename) => {\n          if (isString2(o2)) {\n            const id = o2;\n            return toBlobInfo({\n              id,\n              name: name2,\n              filename,\n              blob,\n              base64\n            });\n          } else if (isObject2(o2)) {\n            return toBlobInfo(o2);\n          } else {\n            throw new Error(\"Unknown input type\");\n          }\n        };\n        const toBlobInfo = (o2) => {\n          if (!o2.blob || !o2.base64) {\n            throw new Error(\"blob and base64 representations of the image are required for BlobInfo to be created\");\n          }\n          const id = o2.id || uuid(\"blobid\");\n          const name2 = o2.name || id;\n          const blob = o2.blob;\n          return {\n            id: constant2(id),\n            name: constant2(name2),\n            filename: constant2(o2.filename || name2 + \".\" + mimeToExt(blob.type)),\n            blob: constant2(blob),\n            base64: constant2(o2.base64),\n            blobUri: constant2(o2.blobUri || URL.createObjectURL(blob)),\n            uri: constant2(o2.uri)\n          };\n        };\n        const add3 = (blobInfo) => {\n          if (!get2(blobInfo.id())) {\n            cache.push(blobInfo);\n          }\n        };\n        const findFirst = (predicate) => find$2(cache, predicate).getOrUndefined();\n        const get2 = (id) => findFirst((cachedBlobInfo) => cachedBlobInfo.id() === id);\n        const getByUri = (blobUri) => findFirst((blobInfo) => blobInfo.blobUri() === blobUri);\n        const getByData = (base64, type2) => findFirst((blobInfo) => blobInfo.base64() === base64 && blobInfo.blob().type === type2);\n        const removeByUri = (blobUri) => {\n          cache = filter$6(cache, (blobInfo) => {\n            if (blobInfo.blobUri() === blobUri) {\n              URL.revokeObjectURL(blobInfo.blobUri());\n              return false;\n            }\n            return true;\n          });\n        };\n        const destroy2 = () => {\n          each$g(cache, (cachedBlobInfo) => {\n            URL.revokeObjectURL(cachedBlobInfo.blobUri());\n          });\n          cache = [];\n        };\n        return {\n          create: create2,\n          add: add3,\n          get: get2,\n          getByUri,\n          getByData,\n          findFirst,\n          removeByUri,\n          destroy: destroy2\n        };\n      };\n      const Uploader2 = (uploadStatus, settings) => {\n        const pendingPromises = {};\n        const pathJoin = (path1, path2) => {\n          if (path1) {\n            return path1.replace(/\\/$/, \"\") + \"/\" + path2.replace(/^\\//, \"\");\n          }\n          return path2;\n        };\n        const defaultHandler = (blobInfo, progress) => new Promise((success, failure) => {\n          const xhr = new XMLHttpRequest();\n          xhr.open(\"POST\", settings.url);\n          xhr.withCredentials = settings.credentials;\n          xhr.upload.onprogress = (e2) => {\n            progress(e2.loaded / e2.total * 100);\n          };\n          xhr.onerror = () => {\n            failure(\"Image upload failed due to a XHR Transport error. Code: \" + xhr.status);\n          };\n          xhr.onload = () => {\n            if (xhr.status < 200 || xhr.status >= 300) {\n              failure(\"HTTP Error: \" + xhr.status);\n              return;\n            }\n            const json = JSON.parse(xhr.responseText);\n            if (!json || !isString2(json.location)) {\n              failure(\"Invalid JSON: \" + xhr.responseText);\n              return;\n            }\n            success(pathJoin(settings.basePath, json.location));\n          };\n          const formData = new FormData();\n          formData.append(\"file\", blobInfo.blob(), blobInfo.filename());\n          xhr.send(formData);\n        });\n        const noUpload = () => new Promise((resolve2) => {\n          resolve2([]);\n        });\n        const handlerSuccess = (blobInfo, url2) => ({\n          url: url2,\n          blobInfo,\n          status: true\n        });\n        const handlerFailure = (blobInfo, error3) => ({\n          url: \"\",\n          blobInfo,\n          status: false,\n          error: error3\n        });\n        const resolvePending = (blobUri, result) => {\n          Tools.each(pendingPromises[blobUri], (resolve2) => {\n            resolve2(result);\n          });\n          delete pendingPromises[blobUri];\n        };\n        const uploadBlobInfo = (blobInfo, handler, openNotification2) => {\n          uploadStatus.markPending(blobInfo.blobUri());\n          return new Promise((resolve2) => {\n            let notification;\n            let progress;\n            try {\n              const closeNotification = () => {\n                if (notification) {\n                  notification.close();\n                  progress = noop;\n                }\n              };\n              const success = (url2) => {\n                closeNotification();\n                uploadStatus.markUploaded(blobInfo.blobUri(), url2);\n                resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url2));\n                resolve2(handlerSuccess(blobInfo, url2));\n              };\n              const failure = (error3) => {\n                closeNotification();\n                uploadStatus.removeFailed(blobInfo.blobUri());\n                resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error3));\n                resolve2(handlerFailure(blobInfo, error3));\n              };\n              progress = (percent) => {\n                if (percent < 0 || percent > 100) {\n                  return;\n                }\n                Optional.from(notification).orThunk(() => Optional.from(openNotification2).map(apply$1)).each((n3) => {\n                  notification = n3;\n                  n3.progressBar.value(percent);\n                });\n              };\n              handler(blobInfo, progress).then(success, (err) => {\n                failure(isString2(err) ? { message: err } : err);\n              });\n            } catch (ex) {\n              resolve2(handlerFailure(blobInfo, ex));\n            }\n          });\n        };\n        const isDefaultHandler = (handler) => handler === defaultHandler;\n        const pendingUploadBlobInfo = (blobInfo) => {\n          const blobUri = blobInfo.blobUri();\n          return new Promise((resolve2) => {\n            pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n            pendingPromises[blobUri].push(resolve2);\n          });\n        };\n        const uploadBlobs = (blobInfos, openNotification2) => {\n          blobInfos = Tools.grep(blobInfos, (blobInfo) => !uploadStatus.isUploaded(blobInfo.blobUri()));\n          return Promise.all(Tools.map(blobInfos, (blobInfo) => uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification2)));\n        };\n        const upload = (blobInfos, openNotification2) => !settings.url && isDefaultHandler(settings.handler) ? noUpload() : uploadBlobs(blobInfos, openNotification2);\n        if (isFunction2(settings.handler) === false) {\n          settings.handler = defaultHandler;\n        }\n        return { upload };\n      };\n      const openNotification = (editor) => () => editor.notificationManager.open({\n        text: editor.translate(\"Image uploading...\"),\n        type: \"info\",\n        timeout: -1,\n        progressBar: true\n      });\n      const createUploader = (editor, uploadStatus) => Uploader2(uploadStatus, {\n        url: getImageUploadUrl(editor),\n        basePath: getImageUploadBasePath(editor),\n        credentials: getImagesUploadCredentials(editor),\n        handler: getImagesUploadHandler(editor)\n      });\n      const ImageUploader = (editor) => {\n        const uploadStatus = UploadStatus();\n        const uploader = createUploader(editor, uploadStatus);\n        return { upload: (blobInfos, showNotification = true) => uploader.upload(blobInfos, showNotification ? openNotification(editor) : void 0) };\n      };\n      const UploadChangeHandler = (editor) => {\n        const lastChangedLevel = Cell(null);\n        editor.on(\"change AddUndo\", (e2) => {\n          lastChangedLevel.set({ ...e2.level });\n        });\n        const fireIfChanged = () => {\n          const data2 = editor.undoManager.data;\n          last$3(data2).filter((level2) => {\n            return !isEq$1(lastChangedLevel.get(), level2);\n          }).each((level2) => {\n            editor.setDirty(true);\n            editor.dispatch(\"change\", {\n              level: level2,\n              lastLevel: get$b(data2, data2.length - 2).getOrNull()\n            });\n          });\n        };\n        return { fireIfChanged };\n      };\n      const EditorUpload = (editor) => {\n        const blobCache = BlobCache();\n        let uploader, imageScanner;\n        const uploadStatus = UploadStatus();\n        const urlFilters = [];\n        const changeHandler = UploadChangeHandler(editor);\n        const aliveGuard = (callback) => {\n          return (result) => {\n            if (editor.selection) {\n              return callback(result);\n            }\n            return [];\n          };\n        };\n        const cacheInvalidator = (url2) => url2 + (url2.indexOf(\"?\") === -1 ? \"?\" : \"&\") + (/* @__PURE__ */ new Date()).getTime();\n        const replaceString = (content, search2, replace2) => {\n          let index2 = 0;\n          do {\n            index2 = content.indexOf(search2, index2);\n            if (index2 !== -1) {\n              content = content.substring(0, index2) + replace2 + content.substr(index2 + search2.length);\n              index2 += replace2.length - search2.length + 1;\n            }\n          } while (index2 !== -1);\n          return content;\n        };\n        const replaceImageUrl = (content, targetUrl, replacementUrl) => {\n          const replacementString = `src=\"${replacementUrl}\"${replacementUrl === Env.transparentSrc ? ' data-mce-placeholder=\"1\"' : \"\"}`;\n          content = replaceString(content, `src=\"${targetUrl}\"`, replacementString);\n          content = replaceString(content, 'data-mce-src=\"' + targetUrl + '\"', 'data-mce-src=\"' + replacementUrl + '\"');\n          return content;\n        };\n        const replaceUrlInUndoStack = (targetUrl, replacementUrl) => {\n          each$g(editor.undoManager.data, (level2) => {\n            if (level2.type === \"fragmented\") {\n              level2.fragments = map$3(level2.fragments, (fragment) => replaceImageUrl(fragment, targetUrl, replacementUrl));\n            } else {\n              level2.content = replaceImageUrl(level2.content, targetUrl, replacementUrl);\n            }\n          });\n        };\n        const replaceImageUriInView = (image2, resultUri) => {\n          const src = editor.convertURL(resultUri, \"src\");\n          replaceUrlInUndoStack(image2.src, resultUri);\n          setAll$1(SugarElement.fromDom(image2), {\n            \"src\": shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri,\n            \"data-mce-src\": src\n          });\n        };\n        const uploadImages = () => {\n          if (!uploader) {\n            uploader = createUploader(editor, uploadStatus);\n          }\n          return scanForImages().then(aliveGuard((imageInfos) => {\n            const blobInfos = map$3(imageInfos, (imageInfo) => imageInfo.blobInfo);\n            return uploader.upload(blobInfos, openNotification(editor)).then(aliveGuard((result) => {\n              const imagesToRemove = [];\n              const filteredResult = map$3(result, (uploadInfo, index2) => {\n                const blobInfo = imageInfos[index2].blobInfo;\n                const image2 = imageInfos[index2].image;\n                let removed = false;\n                if (uploadInfo.status && shouldReplaceBlobUris(editor)) {\n                  blobCache.removeByUri(image2.src);\n                  if (isRtc(editor)) ;\n                  else {\n                    replaceImageUriInView(image2, uploadInfo.url);\n                  }\n                } else if (uploadInfo.error) {\n                  if (uploadInfo.error.remove) {\n                    replaceUrlInUndoStack(image2.getAttribute(\"src\"), Env.transparentSrc);\n                    imagesToRemove.push(image2);\n                    removed = true;\n                  }\n                  uploadError(editor, uploadInfo.error.message);\n                }\n                return {\n                  element: image2,\n                  status: uploadInfo.status,\n                  uploadUri: uploadInfo.url,\n                  blobInfo,\n                  removed\n                };\n              });\n              if (filteredResult.length > 0) {\n                changeHandler.fireIfChanged();\n              }\n              if (imagesToRemove.length > 0 && !isRtc(editor)) {\n                editor.undoManager.transact(() => {\n                  each$g(imagesToRemove, (element) => {\n                    editor.dom.remove(element);\n                    blobCache.removeByUri(element.src);\n                  });\n                });\n              }\n              return filteredResult;\n            }));\n          }));\n        };\n        const uploadImagesAuto = () => isAutomaticUploadsEnabled(editor) ? uploadImages() : Promise.resolve([]);\n        const isValidDataUriImage = (imgElm) => forall(urlFilters, (filter2) => filter2(imgElm));\n        const addFilter = (filter2) => {\n          urlFilters.push(filter2);\n        };\n        const scanForImages = () => {\n          if (!imageScanner) {\n            imageScanner = ImageScanner(uploadStatus, blobCache);\n          }\n          return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard((result) => {\n            result = filter$6(result, (resultItem) => {\n              if (typeof resultItem === \"string\") {\n                displayError(editor, resultItem);\n                return false;\n              }\n              return true;\n            });\n            if (isRtc(editor)) ;\n            else {\n              each$g(result, (resultItem) => {\n                replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n                resultItem.image.src = resultItem.blobInfo.blobUri();\n                resultItem.image.removeAttribute(\"data-mce-src\");\n              });\n            }\n            return result;\n          }));\n        };\n        const destroy2 = () => {\n          blobCache.destroy();\n          uploadStatus.destroy();\n          imageScanner = uploader = null;\n        };\n        const replaceBlobUris = (content) => {\n          return content.replace(/src=\"(blob:[^\"]+)\"/g, (match4, blobUri) => {\n            const resultUri = uploadStatus.getResultUri(blobUri);\n            if (resultUri) {\n              return 'src=\"' + resultUri + '\"';\n            }\n            let blobInfo = blobCache.getByUri(blobUri);\n            if (!blobInfo) {\n              blobInfo = foldl(editor.editorManager.get(), (result, editor2) => {\n                return result || editor2.editorUpload && editor2.editorUpload.blobCache.getByUri(blobUri);\n              }, null);\n            }\n            if (blobInfo) {\n              const blob = blobInfo.blob();\n              return 'src=\"data:' + blob.type + \";base64,\" + blobInfo.base64() + '\"';\n            }\n            return match4;\n          });\n        };\n        editor.on(\"SetContent\", () => {\n          if (isAutomaticUploadsEnabled(editor)) {\n            uploadImagesAuto();\n          } else {\n            scanForImages();\n          }\n        });\n        editor.on(\"RawSaveContent\", (e2) => {\n          e2.content = replaceBlobUris(e2.content);\n        });\n        editor.on(\"GetContent\", (e2) => {\n          if (e2.source_view || e2.format === \"raw\" || e2.format === \"tree\") {\n            return;\n          }\n          e2.content = replaceBlobUris(e2.content);\n        });\n        editor.on(\"PostRender\", () => {\n          editor.parser.addNodeFilter(\"img\", (images) => {\n            each$g(images, (img) => {\n              const src = img.attr(\"src\");\n              if (blobCache.getByUri(src)) {\n                return;\n              }\n              const resultUri = uploadStatus.getResultUri(src);\n              if (resultUri) {\n                img.attr(\"src\", resultUri);\n              }\n            });\n          });\n        });\n        return {\n          blobCache,\n          addFilter,\n          uploadImages,\n          uploadImagesAuto,\n          scanForImages,\n          destroy: destroy2\n        };\n      };\n      const get$1 = (editor) => {\n        const dom3 = editor.dom;\n        const schemaType = editor.schema.type;\n        const formats = {\n          valigntop: [{\n            selector: \"td,th\",\n            styles: { verticalAlign: \"top\" }\n          }],\n          valignmiddle: [{\n            selector: \"td,th\",\n            styles: { verticalAlign: \"middle\" }\n          }],\n          valignbottom: [{\n            selector: \"td,th\",\n            styles: { verticalAlign: \"bottom\" }\n          }],\n          alignleft: [\n            {\n              selector: \"figure.image\",\n              collapsed: false,\n              classes: \"align-left\",\n              ceFalseOverride: true,\n              preview: \"font-family font-size\"\n            },\n            {\n              selector: \"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li\",\n              styles: { textAlign: \"left\" },\n              inherit: false,\n              preview: false\n            },\n            {\n              selector: \"img,audio,video\",\n              collapsed: false,\n              styles: { float: \"left\" },\n              preview: \"font-family font-size\"\n            },\n            {\n              selector: \"table\",\n              collapsed: false,\n              styles: {\n                marginLeft: \"0px\",\n                marginRight: \"auto\"\n              },\n              onformat: (table3) => {\n                dom3.setStyle(table3, \"float\", null);\n              },\n              preview: \"font-family font-size\"\n            }\n          ],\n          aligncenter: [\n            {\n              selector: \"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li\",\n              styles: { textAlign: \"center\" },\n              inherit: false,\n              preview: \"font-family font-size\"\n            },\n            {\n              selector: \"figure.image\",\n              collapsed: false,\n              classes: \"align-center\",\n              ceFalseOverride: true,\n              preview: \"font-family font-size\"\n            },\n            {\n              selector: \"img,audio,video\",\n              collapsed: false,\n              styles: {\n                display: \"block\",\n                marginLeft: \"auto\",\n                marginRight: \"auto\"\n              },\n              preview: false\n            },\n            {\n              selector: \"table\",\n              collapsed: false,\n              styles: {\n                marginLeft: \"auto\",\n                marginRight: \"auto\"\n              },\n              preview: \"font-family font-size\"\n            }\n          ],\n          alignright: [\n            {\n              selector: \"figure.image\",\n              collapsed: false,\n              classes: \"align-right\",\n              ceFalseOverride: true,\n              preview: \"font-family font-size\"\n            },\n            {\n              selector: \"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li\",\n              styles: { textAlign: \"right\" },\n              inherit: false,\n              preview: \"font-family font-size\"\n            },\n            {\n              selector: \"img,audio,video\",\n              collapsed: false,\n              styles: { float: \"right\" },\n              preview: \"font-family font-size\"\n            },\n            {\n              selector: \"table\",\n              collapsed: false,\n              styles: {\n                marginRight: \"0px\",\n                marginLeft: \"auto\"\n              },\n              onformat: (table3) => {\n                dom3.setStyle(table3, \"float\", null);\n              },\n              preview: \"font-family font-size\"\n            }\n          ],\n          alignjustify: [{\n            selector: \"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li\",\n            styles: { textAlign: \"justify\" },\n            inherit: false,\n            preview: \"font-family font-size\"\n          }],\n          bold: [\n            {\n              inline: \"strong\",\n              remove: \"all\",\n              preserve_attributes: [\n                \"class\",\n                \"style\"\n              ]\n            },\n            {\n              inline: \"span\",\n              styles: { fontWeight: \"bold\" }\n            },\n            {\n              inline: \"b\",\n              remove: \"all\",\n              preserve_attributes: [\n                \"class\",\n                \"style\"\n              ]\n            }\n          ],\n          italic: [\n            {\n              inline: \"em\",\n              remove: \"all\",\n              preserve_attributes: [\n                \"class\",\n                \"style\"\n              ]\n            },\n            {\n              inline: \"span\",\n              styles: { fontStyle: \"italic\" }\n            },\n            {\n              inline: \"i\",\n              remove: \"all\",\n              preserve_attributes: [\n                \"class\",\n                \"style\"\n              ]\n            }\n          ],\n          underline: [\n            {\n              inline: \"span\",\n              styles: { textDecoration: \"underline\" },\n              exact: true\n            },\n            {\n              inline: \"u\",\n              remove: \"all\",\n              preserve_attributes: [\n                \"class\",\n                \"style\"\n              ]\n            }\n          ],\n          strikethrough: /* @__PURE__ */ (() => {\n            const span = {\n              inline: \"span\",\n              styles: { textDecoration: \"line-through\" },\n              exact: true\n            };\n            const strike = {\n              inline: \"strike\",\n              remove: \"all\",\n              preserve_attributes: [\n                \"class\",\n                \"style\"\n              ]\n            };\n            const s2 = {\n              inline: \"s\",\n              remove: \"all\",\n              preserve_attributes: [\n                \"class\",\n                \"style\"\n              ]\n            };\n            return schemaType !== \"html4\" ? [\n              s2,\n              span,\n              strike\n            ] : [\n              span,\n              s2,\n              strike\n            ];\n          })(),\n          forecolor: {\n            inline: \"span\",\n            styles: { color: \"%value\" },\n            links: true,\n            remove_similar: true,\n            clear_child_styles: true\n          },\n          hilitecolor: {\n            inline: \"span\",\n            styles: { backgroundColor: \"%value\" },\n            links: true,\n            remove_similar: true,\n            clear_child_styles: true\n          },\n          fontname: {\n            inline: \"span\",\n            toggle: false,\n            styles: { fontFamily: \"%value\" },\n            clear_child_styles: true\n          },\n          fontsize: {\n            inline: \"span\",\n            toggle: false,\n            styles: { fontSize: \"%value\" },\n            clear_child_styles: true\n          },\n          lineheight: {\n            selector: \"h1,h2,h3,h4,h5,h6,p,li,td,th,div\",\n            styles: { lineHeight: \"%value\" }\n          },\n          fontsize_class: {\n            inline: \"span\",\n            attributes: { class: \"%value\" }\n          },\n          blockquote: {\n            block: \"blockquote\",\n            wrapper: true,\n            remove: \"all\"\n          },\n          subscript: { inline: \"sub\" },\n          superscript: { inline: \"sup\" },\n          code: { inline: \"code\" },\n          link: {\n            inline: \"a\",\n            selector: \"a\",\n            remove: \"all\",\n            split: true,\n            deep: true,\n            onmatch: (node, _fmt, _itemName) => {\n              return isElement$6(node) && node.hasAttribute(\"href\");\n            },\n            onformat: (elm, _fmt, vars) => {\n              Tools.each(vars, (value2, key) => {\n                dom3.setAttrib(elm, key, value2);\n              });\n            }\n          },\n          lang: {\n            inline: \"span\",\n            clear_child_styles: true,\n            remove_similar: true,\n            attributes: {\n              \"lang\": \"%value\",\n              \"data-mce-lang\": (vars) => {\n                var _a3;\n                return (_a3 = vars === null || vars === void 0 ? void 0 : vars.customValue) !== null && _a3 !== void 0 ? _a3 : null;\n              }\n            }\n          },\n          removeformat: [\n            {\n              selector: \"b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins,small\",\n              remove: \"all\",\n              split: true,\n              expand: false,\n              block_expand: true,\n              deep: true\n            },\n            {\n              selector: \"span\",\n              attributes: [\n                \"style\",\n                \"class\"\n              ],\n              remove: \"empty\",\n              split: true,\n              expand: false,\n              deep: true\n            },\n            {\n              selector: \"*\",\n              attributes: [\n                \"style\",\n                \"class\"\n              ],\n              split: false,\n              expand: false,\n              deep: true\n            }\n          ]\n        };\n        Tools.each(\"p h1 h2 h3 h4 h5 h6 div address pre dt dd samp\".split(/\\s/), (name2) => {\n          formats[name2] = {\n            block: name2,\n            remove: \"all\"\n          };\n        });\n        return formats;\n      };\n      const genericBase = {\n        remove_similar: true,\n        inherit: false\n      };\n      const cellBase = {\n        selector: \"td,th\",\n        ...genericBase\n      };\n      const cellFormats = {\n        tablecellbackgroundcolor: {\n          styles: { backgroundColor: \"%value\" },\n          ...cellBase\n        },\n        tablecellverticalalign: {\n          styles: { \"vertical-align\": \"%value\" },\n          ...cellBase\n        },\n        tablecellbordercolor: {\n          styles: { borderColor: \"%value\" },\n          ...cellBase\n        },\n        tablecellclass: {\n          classes: [\"%value\"],\n          ...cellBase\n        },\n        tableclass: {\n          selector: \"table\",\n          classes: [\"%value\"],\n          ...genericBase\n        },\n        tablecellborderstyle: {\n          styles: { borderStyle: \"%value\" },\n          ...cellBase\n        },\n        tablecellborderwidth: {\n          styles: { borderWidth: \"%value\" },\n          ...cellBase\n        }\n      };\n      const get = constant2(cellFormats);\n      const FormatRegistry = (editor) => {\n        const formats = {};\n        const get$22 = (name2) => isNonNullable(name2) ? formats[name2] : formats;\n        const has3 = (name2) => has$2(formats, name2);\n        const register2 = (name2, format2) => {\n          if (name2) {\n            if (!isString2(name2)) {\n              each$f(name2, (format3, name3) => {\n                register2(name3, format3);\n              });\n            } else {\n              if (!isArray$1(format2)) {\n                format2 = [format2];\n              }\n              each$g(format2, (format3) => {\n                if (isUndefined2(format3.deep)) {\n                  format3.deep = !isSelectorFormat(format3);\n                }\n                if (isUndefined2(format3.split)) {\n                  format3.split = !isSelectorFormat(format3) || isInlineFormat(format3);\n                }\n                if (isUndefined2(format3.remove) && isSelectorFormat(format3) && !isInlineFormat(format3)) {\n                  format3.remove = \"none\";\n                }\n                if (isSelectorFormat(format3) && isInlineFormat(format3)) {\n                  format3.mixed = true;\n                  format3.block_expand = true;\n                }\n                if (isString2(format3.classes)) {\n                  format3.classes = format3.classes.split(/\\s+/);\n                }\n              });\n              formats[name2] = format2;\n            }\n          }\n        };\n        const unregister = (name2) => {\n          if (name2 && formats[name2]) {\n            delete formats[name2];\n          }\n          return formats;\n        };\n        register2(get$1(editor));\n        register2(get());\n        register2(getFormats(editor));\n        return {\n          get: get$22,\n          has: has3,\n          register: register2,\n          unregister\n        };\n      };\n      const each$3 = Tools.each;\n      const dom2 = DOMUtils.DOM;\n      const parsedSelectorToHtml = (ancestry, editor) => {\n        let elm, item, fragment;\n        const schema = editor && editor.schema || Schema({});\n        const decorate = (elm2, item2) => {\n          if (item2.classes.length) {\n            dom2.addClass(elm2, item2.classes.join(\" \"));\n          }\n          dom2.setAttribs(elm2, item2.attrs);\n        };\n        const createElement = (sItem) => {\n          item = typeof sItem === \"string\" ? {\n            name: sItem,\n            classes: [],\n            attrs: {}\n          } : sItem;\n          const elm2 = dom2.create(item.name);\n          decorate(elm2, item);\n          return elm2;\n        };\n        const getRequiredParent = (elm2, candidate) => {\n          const name2 = typeof elm2 !== \"string\" ? elm2.nodeName.toLowerCase() : elm2;\n          const elmRule = schema.getElementRule(name2);\n          const parentsRequired = elmRule && elmRule.parentsRequired;\n          if (parentsRequired && parentsRequired.length) {\n            return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];\n          } else {\n            return false;\n          }\n        };\n        const wrapInHtml = (elm2, ancestry2, siblings2) => {\n          let parent2, parentCandidate;\n          const ancestor2 = ancestry2.length > 0 && ancestry2[0];\n          const ancestorName = ancestor2 && ancestor2.name;\n          const parentRequired = getRequiredParent(elm2, ancestorName);\n          if (parentRequired) {\n            if (ancestorName === parentRequired) {\n              parentCandidate = ancestry2[0];\n              ancestry2 = ancestry2.slice(1);\n            } else {\n              parentCandidate = parentRequired;\n            }\n          } else if (ancestor2) {\n            parentCandidate = ancestry2[0];\n            ancestry2 = ancestry2.slice(1);\n          } else if (!siblings2) {\n            return elm2;\n          }\n          if (parentCandidate) {\n            parent2 = createElement(parentCandidate);\n            parent2.appendChild(elm2);\n          }\n          if (siblings2) {\n            if (!parent2) {\n              parent2 = dom2.create(\"div\");\n              parent2.appendChild(elm2);\n            }\n            Tools.each(siblings2, (sibling2) => {\n              const siblingElm = createElement(sibling2);\n              parent2.insertBefore(siblingElm, elm2);\n            });\n          }\n          return wrapInHtml(parent2, ancestry2, parentCandidate && parentCandidate.siblings);\n        };\n        if (ancestry && ancestry.length) {\n          item = ancestry[0];\n          elm = createElement(item);\n          fragment = dom2.create(\"div\");\n          fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings));\n          return fragment;\n        } else {\n          return \"\";\n        }\n      };\n      const parseSelectorItem = (item) => {\n        let tagName;\n        const obj = {\n          classes: [],\n          attrs: {}\n        };\n        item = obj.selector = Tools.trim(item);\n        if (item !== \"*\") {\n          tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, ($0, $1, $2, $3, $4) => {\n            switch ($1) {\n              case \"#\":\n                obj.attrs.id = $2;\n                break;\n              case \".\":\n                obj.classes.push($2);\n                break;\n              case \":\":\n                if (Tools.inArray(\"checked disabled enabled read-only required\".split(\" \"), $2) !== -1) {\n                  obj.attrs[$2] = $2;\n                }\n                break;\n            }\n            if ($3 === \"[\") {\n              const m2 = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n              if (m2) {\n                obj.attrs[m2[1]] = m2[2];\n              }\n            }\n            return \"\";\n          });\n        }\n        obj.name = tagName || \"div\";\n        return obj;\n      };\n      const parseSelector = (selector) => {\n        if (!selector || typeof selector !== \"string\") {\n          return [];\n        }\n        selector = selector.split(/\\s*,\\s*/)[0];\n        selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, \"$1\");\n        return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), (item) => {\n          const siblings2 = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n          const obj = siblings2.pop();\n          if (siblings2.length) {\n            obj.siblings = siblings2;\n          }\n          return obj;\n        }).reverse();\n      };\n      const getCssText = (editor, format2) => {\n        let name2, previewFrag;\n        let previewCss = \"\", parentFontSize;\n        let previewStyles = getPreviewStyles(editor);\n        if (previewStyles === \"\") {\n          return \"\";\n        }\n        const removeVars = (val) => {\n          return val.replace(/%(\\w+)/g, \"\");\n        };\n        if (typeof format2 === \"string\") {\n          format2 = editor.formatter.get(format2);\n          if (!format2) {\n            return;\n          }\n          format2 = format2[0];\n        }\n        if (\"preview\" in format2) {\n          const previewOpt = get$a(format2, \"preview\");\n          if (is$2(previewOpt, false)) {\n            return \"\";\n          } else {\n            previewStyles = previewOpt.getOr(previewStyles);\n          }\n        }\n        name2 = format2.block || format2.inline || \"span\";\n        const items = parseSelector(format2.selector);\n        if (items.length) {\n          if (!items[0].name) {\n            items[0].name = name2;\n          }\n          name2 = format2.selector;\n          previewFrag = parsedSelectorToHtml(items, editor);\n        } else {\n          previewFrag = parsedSelectorToHtml([name2], editor);\n        }\n        const previewElm = dom2.select(name2, previewFrag)[0] || previewFrag.firstChild;\n        each$3(format2.styles, (value2, name3) => {\n          const newValue = removeVars(value2);\n          if (newValue) {\n            dom2.setStyle(previewElm, name3, newValue);\n          }\n        });\n        each$3(format2.attributes, (value2, name3) => {\n          const newValue = removeVars(value2);\n          if (newValue) {\n            dom2.setAttrib(previewElm, name3, newValue);\n          }\n        });\n        each$3(format2.classes, (value2) => {\n          const newValue = removeVars(value2);\n          if (!dom2.hasClass(previewElm, newValue)) {\n            dom2.addClass(previewElm, newValue);\n          }\n        });\n        editor.dispatch(\"PreviewFormats\");\n        dom2.setStyles(previewFrag, {\n          position: \"absolute\",\n          left: -65535\n        });\n        editor.getBody().appendChild(previewFrag);\n        parentFontSize = dom2.getStyle(editor.getBody(), \"fontSize\", true);\n        parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0;\n        each$3(previewStyles.split(\" \"), (name3) => {\n          let value2 = dom2.getStyle(previewElm, name3, true);\n          if (name3 === \"background-color\" && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value2)) {\n            value2 = dom2.getStyle(editor.getBody(), name3, true);\n            if (rgbaToHexString(value2).toLowerCase() === \"#ffffff\") {\n              return;\n            }\n          }\n          if (name3 === \"color\") {\n            if (rgbaToHexString(value2).toLowerCase() === \"#000000\") {\n              return;\n            }\n          }\n          if (name3 === \"font-size\") {\n            if (/em|%$/.test(value2)) {\n              if (parentFontSize === 0) {\n                return;\n              }\n              const numValue = parseFloat(value2) / (/%$/.test(value2) ? 100 : 1);\n              value2 = numValue * parentFontSize + \"px\";\n            }\n          }\n          if (name3 === \"border\" && value2) {\n            previewCss += \"padding:0 2px;\";\n          }\n          previewCss += name3 + \":\" + value2 + \";\";\n        });\n        editor.dispatch(\"AfterPreviewFormats\");\n        dom2.remove(previewFrag);\n        return previewCss;\n      };\n      const setup$r = (editor) => {\n        editor.addShortcut(\"meta+b\", \"\", \"Bold\");\n        editor.addShortcut(\"meta+i\", \"\", \"Italic\");\n        editor.addShortcut(\"meta+u\", \"\", \"Underline\");\n        for (let i3 = 1; i3 <= 6; i3++) {\n          editor.addShortcut(\"access+\" + i3, \"\", [\n            \"FormatBlock\",\n            false,\n            \"h\" + i3\n          ]);\n        }\n        editor.addShortcut(\"access+7\", \"\", [\n          \"FormatBlock\",\n          false,\n          \"p\"\n        ]);\n        editor.addShortcut(\"access+8\", \"\", [\n          \"FormatBlock\",\n          false,\n          \"div\"\n        ]);\n        editor.addShortcut(\"access+9\", \"\", [\n          \"FormatBlock\",\n          false,\n          \"address\"\n        ]);\n      };\n      const Formatter = (editor) => {\n        const formats = FormatRegistry(editor);\n        const formatChangeState = Cell(null);\n        setup$r(editor);\n        setup$u(editor);\n        return {\n          get: formats.get,\n          has: formats.has,\n          register: formats.register,\n          unregister: formats.unregister,\n          apply: (name2, vars, node) => {\n            applyFormat2(editor, name2, vars, node);\n          },\n          remove: (name2, vars, node, similar) => {\n            removeFormat(editor, name2, vars, node, similar);\n          },\n          toggle: (name2, vars, node) => {\n            toggleFormat(editor, name2, vars, node);\n          },\n          match: (name2, vars, node, similar) => matchFormat(editor, name2, vars, node, similar),\n          closest: (names) => closestFormat(editor, names),\n          matchAll: (names, vars) => matchAllFormats(editor, names, vars),\n          matchNode: (node, name2, vars, similar) => matchNodeFormat(editor, node, name2, vars, similar),\n          canApply: (name2) => canApplyFormat(editor, name2),\n          formatChanged: (formats2, callback, similar, vars) => formatChanged(editor, formatChangeState, formats2, callback, similar, vars),\n          getCssText: curry(getCssText, editor)\n        };\n      };\n      const shouldIgnoreCommand = (cmd) => {\n        switch (cmd.toLowerCase()) {\n          case \"undo\":\n          case \"redo\":\n          case \"mcefocus\":\n            return true;\n          default:\n            return false;\n        }\n      };\n      const registerEvents = (editor, undoManager, locks) => {\n        const isFirstTypedCharacter = Cell(false);\n        const addNonTypingUndoLevel = (e2) => {\n          setTyping(undoManager, false, locks);\n          undoManager.add({}, e2);\n        };\n        editor.on(\"init\", () => {\n          undoManager.add();\n        });\n        editor.on(\"BeforeExecCommand\", (e2) => {\n          const cmd = e2.command;\n          if (!shouldIgnoreCommand(cmd)) {\n            endTyping(undoManager, locks);\n            undoManager.beforeChange();\n          }\n        });\n        editor.on(\"ExecCommand\", (e2) => {\n          const cmd = e2.command;\n          if (!shouldIgnoreCommand(cmd)) {\n            addNonTypingUndoLevel(e2);\n          }\n        });\n        editor.on(\"ObjectResizeStart cut\", () => {\n          undoManager.beforeChange();\n        });\n        editor.on(\"SaveContent ObjectResized blur\", addNonTypingUndoLevel);\n        editor.on(\"dragend\", addNonTypingUndoLevel);\n        editor.on(\"keyup\", (e2) => {\n          const keyCode = e2.keyCode;\n          if (e2.isDefaultPrevented()) {\n            return;\n          }\n          if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e2.ctrlKey) {\n            addNonTypingUndoLevel();\n            editor.nodeChanged();\n          }\n          if (keyCode === 46 || keyCode === 8) {\n            editor.nodeChanged();\n          }\n          if (isFirstTypedCharacter.get() && undoManager.typing && isEq$1(createFromEditor(editor), undoManager.data[0]) === false) {\n            if (editor.isDirty() === false) {\n              editor.setDirty(true);\n            }\n            editor.dispatch(\"TypingUndo\");\n            isFirstTypedCharacter.set(false);\n            editor.nodeChanged();\n          }\n        });\n        editor.on(\"keydown\", (e2) => {\n          const keyCode = e2.keyCode;\n          if (e2.isDefaultPrevented()) {\n            return;\n          }\n          if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n            if (undoManager.typing) {\n              addNonTypingUndoLevel(e2);\n            }\n            return;\n          }\n          const modKey = e2.ctrlKey && !e2.altKey || e2.metaKey;\n          if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !undoManager.typing && !modKey) {\n            undoManager.beforeChange();\n            setTyping(undoManager, true, locks);\n            undoManager.add({}, e2);\n            isFirstTypedCharacter.set(true);\n          }\n        });\n        editor.on(\"mousedown\", (e2) => {\n          if (undoManager.typing) {\n            addNonTypingUndoLevel(e2);\n          }\n        });\n        const isInsertReplacementText = (event) => event.inputType === \"insertReplacementText\";\n        const isInsertTextDataNull = (event) => event.inputType === \"insertText\" && event.data === null;\n        const isInsertFromPasteOrDrop = (event) => event.inputType === \"insertFromPaste\" || event.inputType === \"insertFromDrop\";\n        editor.on(\"input\", (e2) => {\n          if (e2.inputType && (isInsertReplacementText(e2) || isInsertTextDataNull(e2) || isInsertFromPasteOrDrop(e2))) {\n            addNonTypingUndoLevel(e2);\n          }\n        });\n        editor.on(\"AddUndo Undo Redo ClearUndos\", (e2) => {\n          if (!e2.isDefaultPrevented()) {\n            editor.nodeChanged();\n          }\n        });\n      };\n      const addKeyboardShortcuts = (editor) => {\n        editor.addShortcut(\"meta+z\", \"\", \"Undo\");\n        editor.addShortcut(\"meta+y,meta+shift+z\", \"\", \"Redo\");\n      };\n      const UndoManager = (editor) => {\n        const beforeBookmark = value$2();\n        const locks = Cell(0);\n        const index2 = Cell(0);\n        const undoManager = {\n          data: [],\n          typing: false,\n          beforeChange: () => {\n            beforeChange(editor, locks, beforeBookmark);\n          },\n          add: (level2, event) => {\n            return addUndoLevel(editor, undoManager, index2, locks, beforeBookmark, level2, event);\n          },\n          undo: () => {\n            return undo(editor, undoManager, locks, index2);\n          },\n          redo: () => {\n            return redo(editor, index2, undoManager.data);\n          },\n          clear: () => {\n            clear(editor, undoManager, index2);\n          },\n          reset: () => {\n            reset(editor, undoManager);\n          },\n          hasUndo: () => {\n            return hasUndo(editor, undoManager, index2);\n          },\n          hasRedo: () => {\n            return hasRedo(editor, undoManager, index2);\n          },\n          transact: (callback) => {\n            return transact(editor, undoManager, locks, callback);\n          },\n          ignore: (callback) => {\n            ignore(editor, locks, callback);\n          },\n          extra: (callback1, callback2) => {\n            extra(editor, undoManager, index2, callback1, callback2);\n          }\n        };\n        if (!isRtc(editor)) {\n          registerEvents(editor, undoManager, locks);\n        }\n        addKeyboardShortcuts(editor);\n        return undoManager;\n      };\n      const nonTypingKeycodes = [\n        9,\n        27,\n        VK.HOME,\n        VK.END,\n        19,\n        20,\n        44,\n        144,\n        145,\n        33,\n        34,\n        45,\n        16,\n        17,\n        18,\n        91,\n        92,\n        93,\n        VK.DOWN,\n        VK.UP,\n        VK.LEFT,\n        VK.RIGHT\n      ].concat(Env.browser.isFirefox() ? [224] : []);\n      const placeholderAttr = \"data-mce-placeholder\";\n      const isKeyboardEvent = (e2) => e2.type === \"keydown\" || e2.type === \"keyup\";\n      const isDeleteEvent = (e2) => {\n        const keyCode = e2.keyCode;\n        return keyCode === VK.BACKSPACE || keyCode === VK.DELETE;\n      };\n      const isNonTypingKeyboardEvent = (e2) => {\n        if (isKeyboardEvent(e2)) {\n          const keyCode = e2.keyCode;\n          return !isDeleteEvent(e2) && (VK.metaKeyPressed(e2) || e2.altKey || keyCode >= 112 && keyCode <= 123 || contains$2(nonTypingKeycodes, keyCode));\n        } else {\n          return false;\n        }\n      };\n      const isTypingKeyboardEvent = (e2) => isKeyboardEvent(e2) && !(isDeleteEvent(e2) || e2.type === \"keyup\" && e2.keyCode === 229);\n      const isVisuallyEmpty = (dom3, rootElm, forcedRootBlock) => {\n        if (isEmpty$2(SugarElement.fromDom(rootElm), false)) {\n          const firstElement2 = rootElm.firstElementChild;\n          if (!firstElement2) {\n            return true;\n          } else if (dom3.getStyle(rootElm.firstElementChild, \"padding-left\") || dom3.getStyle(rootElm.firstElementChild, \"padding-right\")) {\n            return false;\n          } else {\n            return forcedRootBlock === firstElement2.nodeName.toLowerCase();\n          }\n        } else {\n          return false;\n        }\n      };\n      const setup$q = (editor) => {\n        const dom3 = editor.dom;\n        const rootBlock = getForcedRootBlock(editor);\n        const placeholder = getPlaceholder(editor);\n        const updatePlaceholder = (e2, initial) => {\n          if (isNonTypingKeyboardEvent(e2)) {\n            return;\n          }\n          const body = editor.getBody();\n          const showPlaceholder = isTypingKeyboardEvent(e2) ? false : isVisuallyEmpty(dom3, body, rootBlock);\n          const isPlaceholderShown = dom3.getAttrib(body, placeholderAttr) !== \"\";\n          if (isPlaceholderShown !== showPlaceholder || initial) {\n            dom3.setAttrib(body, placeholderAttr, showPlaceholder ? placeholder : null);\n            dom3.setAttrib(body, \"aria-placeholder\", showPlaceholder ? placeholder : null);\n            firePlaceholderToggle(editor, showPlaceholder);\n            editor.on(showPlaceholder ? \"keydown\" : \"keyup\", updatePlaceholder);\n            editor.off(showPlaceholder ? \"keyup\" : \"keydown\", updatePlaceholder);\n          }\n        };\n        if (placeholder) {\n          editor.on(\"init\", (e2) => {\n            updatePlaceholder(e2, true);\n            editor.on(\"change SetContent ExecCommand\", updatePlaceholder);\n            editor.on(\"paste\", (e3) => Delay.setEditorTimeout(editor, () => updatePlaceholder(e3)));\n          });\n        }\n      };\n      const strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n      const hasStrongRtl = (text3) => strongRtl.test(text3);\n      const isInlineTarget = (editor, elm) => is$1(SugarElement.fromDom(elm), getInlineBoundarySelector(editor));\n      const isRtl = (element) => DOMUtils.DOM.getStyle(element, \"direction\", true) === \"rtl\" || hasStrongRtl(element.textContent);\n      const findInlineParents = (isInlineTarget2, rootNode, pos) => filter$6(DOMUtils.DOM.getParents(pos.container(), \"*\", rootNode), isInlineTarget2);\n      const findRootInline = (isInlineTarget2, rootNode, pos) => {\n        const parents2 = findInlineParents(isInlineTarget2, rootNode, pos);\n        return Optional.from(parents2[parents2.length - 1]);\n      };\n      const hasSameParentBlock = (rootNode, node1, node2) => {\n        const block1 = getParentBlock$3(node1, rootNode);\n        const block2 = getParentBlock$3(node2, rootNode);\n        return block1 && block1 === block2;\n      };\n      const isAtZwsp = (pos) => isBeforeInline(pos) || isAfterInline(pos);\n      const normalizePosition = (forward, pos) => {\n        if (!pos) {\n          return pos;\n        }\n        const container = pos.container(), offset = pos.offset();\n        if (forward) {\n          if (isCaretContainerInline(container)) {\n            if (isText$8(container.nextSibling)) {\n              return CaretPosition(container.nextSibling, 0);\n            } else {\n              return CaretPosition.after(container);\n            }\n          } else {\n            return isBeforeInline(pos) ? CaretPosition(container, offset + 1) : pos;\n          }\n        } else {\n          if (isCaretContainerInline(container)) {\n            if (isText$8(container.previousSibling)) {\n              return CaretPosition(container.previousSibling, container.previousSibling.data.length);\n            } else {\n              return CaretPosition.before(container);\n            }\n          } else {\n            return isAfterInline(pos) ? CaretPosition(container, offset - 1) : pos;\n          }\n        }\n      };\n      const normalizeForwards = curry(normalizePosition, true);\n      const normalizeBackwards = curry(normalizePosition, false);\n      const execCommandIgnoreInputEvents = (editor, command) => {\n        const inputBlocker = (e2) => e2.stopImmediatePropagation();\n        editor.on(\"beforeinput input\", inputBlocker, true);\n        editor.getDoc().execCommand(command);\n        editor.off(\"beforeinput input\", inputBlocker);\n      };\n      const execDeleteCommand = (editor) => execCommandIgnoreInputEvents(editor, \"Delete\");\n      const execForwardDeleteCommand = (editor) => execCommandIgnoreInputEvents(editor, \"ForwardDelete\");\n      const isBeforeRoot = (rootNode) => (elm) => eq2(rootNode, SugarElement.fromDom(elm.dom.parentNode));\n      const isTextBlockOrListItem = (element) => isTextBlock$2(element) || isListItem(element);\n      const getParentBlock$2 = (rootNode, elm) => {\n        if (contains2(rootNode, elm)) {\n          return closest$4(elm, isTextBlockOrListItem, isBeforeRoot(rootNode));\n        } else {\n          return Optional.none();\n        }\n      };\n      const placeCaretInEmptyBody = (editor) => {\n        const body = editor.getBody();\n        const node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body;\n        editor.selection.setCursorLocation(node, 0);\n      };\n      const paddEmptyBody = (editor) => {\n        if (editor.dom.isEmpty(editor.getBody())) {\n          editor.setContent(\"\");\n          placeCaretInEmptyBody(editor);\n        }\n      };\n      const willDeleteLastPositionInElement = (forward, fromPos, elm) => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n        const normalizedFirstPos = normalizePosition(true, firstPos);\n        const normalizedLastPos = normalizePosition(false, lastPos);\n        const normalizedFromPos = normalizePosition(false, fromPos);\n        if (forward) {\n          return nextPosition(elm, normalizedFromPos).exists((nextPos) => nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos));\n        } else {\n          return prevPosition(elm, normalizedFromPos).exists((prevPos) => prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos));\n        }\n      }).getOr(true);\n      const blockPosition = (block2, position) => ({\n        block: block2,\n        position\n      });\n      const blockBoundary = (from2, to2) => ({\n        from: from2,\n        to: to2\n      });\n      const getBlockPosition = (rootNode, pos) => {\n        const rootElm = SugarElement.fromDom(rootNode);\n        const containerElm = SugarElement.fromDom(pos.container());\n        return getParentBlock$2(rootElm, containerElm).map((block2) => blockPosition(block2, pos));\n      };\n      const isDifferentBlocks = (blockBoundary2) => eq2(blockBoundary2.from.block, blockBoundary2.to.block) === false;\n      const hasSameParent = (blockBoundary2) => parent(blockBoundary2.from.block).bind((parent1) => parent(blockBoundary2.to.block).filter((parent2) => eq2(parent1, parent2))).isSome();\n      const isEditable$2 = (blockBoundary2) => isContentEditableFalse$a(blockBoundary2.from.block.dom) === false && isContentEditableFalse$a(blockBoundary2.to.block.dom) === false;\n      const skipLastBr = (rootNode, forward, blockPosition2) => {\n        if (isBr$5(blockPosition2.position.getNode()) && isEmpty$2(blockPosition2.block) === false) {\n          return positionIn(false, blockPosition2.block.dom).bind((lastPositionInBlock) => {\n            if (lastPositionInBlock.isEqual(blockPosition2.position)) {\n              return fromPosition(forward, rootNode, lastPositionInBlock).bind((to2) => getBlockPosition(rootNode, to2));\n            } else {\n              return Optional.some(blockPosition2);\n            }\n          }).getOr(blockPosition2);\n        } else {\n          return blockPosition2;\n        }\n      };\n      const readFromRange = (rootNode, forward, rng) => {\n        const fromBlockPos = getBlockPosition(rootNode, CaretPosition.fromRangeStart(rng));\n        const toBlockPos = fromBlockPos.bind((blockPos) => fromPosition(forward, rootNode, blockPos.position).bind((to2) => getBlockPosition(rootNode, to2).map((blockPos2) => skipLastBr(rootNode, forward, blockPos2))));\n        return lift2(fromBlockPos, toBlockPos, blockBoundary).filter((blockBoundary2) => isDifferentBlocks(blockBoundary2) && hasSameParent(blockBoundary2) && isEditable$2(blockBoundary2));\n      };\n      const read$1 = (rootNode, forward, rng) => rng.collapsed ? readFromRange(rootNode, forward, rng) : Optional.none();\n      const getChildrenUntilBlockBoundary = (block2) => {\n        const children$1 = children(block2);\n        return findIndex$2(children$1, isBlock$2).fold(constant2(children$1), (index2) => children$1.slice(0, index2));\n      };\n      const extractChildren = (block2) => {\n        const children2 = getChildrenUntilBlockBoundary(block2);\n        each$g(children2, remove$5);\n        return children2;\n      };\n      const removeEmptyRoot = (rootNode, block2) => {\n        const parents2 = parentsAndSelf(block2, rootNode);\n        return find$2(parents2.reverse(), (element) => isEmpty$2(element)).each(remove$5);\n      };\n      const isEmptyBefore = (el) => filter$6(prevSiblings(el), (el2) => !isEmpty$2(el2)).length === 0;\n      const nestedBlockMerge = (rootNode, fromBlock, toBlock, insertionPoint) => {\n        if (isEmpty$2(toBlock)) {\n          fillWithPaddingBr(toBlock);\n          return firstPositionIn(toBlock.dom);\n        }\n        if (isEmptyBefore(insertionPoint) && isEmpty$2(fromBlock)) {\n          before$3(insertionPoint, SugarElement.fromTag(\"br\"));\n        }\n        const position = prevPosition(toBlock.dom, CaretPosition.before(insertionPoint.dom));\n        each$g(extractChildren(fromBlock), (child2) => {\n          before$3(insertionPoint, child2);\n        });\n        removeEmptyRoot(rootNode, fromBlock);\n        return position;\n      };\n      const sidelongBlockMerge = (rootNode, fromBlock, toBlock) => {\n        if (isEmpty$2(toBlock)) {\n          remove$5(toBlock);\n          if (isEmpty$2(fromBlock)) {\n            fillWithPaddingBr(fromBlock);\n          }\n          return firstPositionIn(fromBlock.dom);\n        }\n        const position = lastPositionIn(toBlock.dom);\n        each$g(extractChildren(fromBlock), (child2) => {\n          append$1(toBlock, child2);\n        });\n        removeEmptyRoot(rootNode, fromBlock);\n        return position;\n      };\n      const findInsertionPoint = (toBlock, block2) => {\n        const parentsAndSelf$1 = parentsAndSelf(block2, toBlock);\n        return Optional.from(parentsAndSelf$1[parentsAndSelf$1.length - 1]);\n      };\n      const getInsertionPoint = (fromBlock, toBlock) => contains2(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Optional.none();\n      const trimBr = (first2, block2) => {\n        positionIn(first2, block2.dom).map((position) => position.getNode()).map(SugarElement.fromDom).filter(isBr$4).each(remove$5);\n      };\n      const mergeBlockInto = (rootNode, fromBlock, toBlock) => {\n        trimBr(true, fromBlock);\n        trimBr(false, toBlock);\n        return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock));\n      };\n      const mergeBlocks = (rootNode, forward, block1, block2) => forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2);\n      const backspaceDelete$8 = (editor, forward) => {\n        const rootNode = SugarElement.fromDom(editor.getBody());\n        const position = read$1(rootNode.dom, forward, editor.selection.getRng()).map((blockBoundary2) => () => {\n          mergeBlocks(rootNode, forward, blockBoundary2.from.block, blockBoundary2.to.block).each((pos) => {\n            editor.selection.setRng(pos.toRange());\n          });\n        });\n        return position;\n      };\n      const deleteRangeMergeBlocks = (rootNode, selection) => {\n        const rng = selection.getRng();\n        return lift2(getParentBlock$2(rootNode, SugarElement.fromDom(rng.startContainer)), getParentBlock$2(rootNode, SugarElement.fromDom(rng.endContainer)), (block1, block2) => {\n          if (eq2(block1, block2) === false) {\n            return Optional.some(() => {\n              rng.deleteContents();\n              mergeBlocks(rootNode, true, block1, block2).each((pos) => {\n                selection.setRng(pos.toRange());\n              });\n            });\n          } else {\n            return Optional.none();\n          }\n        }).getOr(Optional.none());\n      };\n      const isRawNodeInTable = (root2, rawNode) => {\n        const node = SugarElement.fromDom(rawNode);\n        const isRoot = curry(eq2, root2);\n        return ancestor$3(node, isTableCell$4, isRoot).isSome();\n      };\n      const isSelectionInTable = (root2, rng) => isRawNodeInTable(root2, rng.startContainer) || isRawNodeInTable(root2, rng.endContainer);\n      const isEverythingSelected = (root2, rng) => {\n        const noPrevious = prevPosition(root2.dom, CaretPosition.fromRangeStart(rng)).isNone();\n        const noNext = nextPosition(root2.dom, CaretPosition.fromRangeEnd(rng)).isNone();\n        return !isSelectionInTable(root2, rng) && noPrevious && noNext;\n      };\n      const emptyEditor = (editor) => {\n        return Optional.some(() => {\n          editor.setContent(\"\");\n          editor.selection.setCursorLocation();\n        });\n      };\n      const deleteRange$1 = (editor) => {\n        const rootNode = SugarElement.fromDom(editor.getBody());\n        const rng = editor.selection.getRng();\n        return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\n      };\n      const backspaceDelete$7 = (editor, _forward) => editor.selection.isCollapsed() ? Optional.none() : deleteRange$1(editor);\n      const isContentEditableTrue$1 = isContentEditableTrue$4;\n      const isContentEditableFalse$4 = isContentEditableFalse$a;\n      const showCaret = (direction, editor, node, before2, scrollIntoView) => Optional.from(editor._selectionOverrides.showCaret(direction, node, before2, scrollIntoView));\n      const getNodeRange = (node) => {\n        const rng = node.ownerDocument.createRange();\n        rng.selectNode(node);\n        return rng;\n      };\n      const selectNode = (editor, node) => {\n        const e2 = editor.dispatch(\"BeforeObjectSelected\", { target: node });\n        if (e2.isDefaultPrevented()) {\n          return Optional.none();\n        }\n        return Optional.some(getNodeRange(node));\n      };\n      const renderCaretAtRange = (editor, range2, scrollIntoView) => {\n        const normalizedRange = normalizeRange(1, editor.getBody(), range2);\n        const caretPosition = CaretPosition.fromRangeStart(normalizedRange);\n        const caretPositionNode = caretPosition.getNode();\n        if (isInlineFakeCaretTarget(caretPositionNode)) {\n          return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n        }\n        const caretPositionBeforeNode = caretPosition.getNode(true);\n        if (isInlineFakeCaretTarget(caretPositionBeforeNode)) {\n          return showCaret(1, editor, caretPositionBeforeNode, false, false);\n        }\n        const ceRoot = editor.dom.getParent(caretPosition.getNode(), (node) => isContentEditableFalse$4(node) || isContentEditableTrue$1(node));\n        if (isInlineFakeCaretTarget(ceRoot)) {\n          return showCaret(1, editor, ceRoot, false, scrollIntoView);\n        }\n        return Optional.none();\n      };\n      const renderRangeCaret = (editor, range2, scrollIntoView) => range2.collapsed ? renderCaretAtRange(editor, range2, scrollIntoView).getOr(range2) : range2;\n      const isBeforeBoundary = (pos) => isBeforeContentEditableFalse(pos) || isBeforeMedia(pos);\n      const isAfterBoundary = (pos) => isAfterContentEditableFalse(pos) || isAfterMedia(pos);\n      const trimEmptyTextNode = (dom3, node) => {\n        if (isText$8(node) && node.data.length === 0) {\n          dom3.remove(node);\n        }\n      };\n      const deleteContentAndShowCaret = (editor, range2, node, direction, forward, peekCaretPosition) => {\n        showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true).each((caretRange) => {\n          if (range2.collapsed) {\n            const deleteRange3 = range2.cloneRange();\n            if (forward) {\n              deleteRange3.setEnd(caretRange.startContainer, caretRange.startOffset);\n            } else {\n              deleteRange3.setStart(caretRange.endContainer, caretRange.endOffset);\n            }\n            deleteRange3.deleteContents();\n          } else {\n            range2.deleteContents();\n          }\n          editor.selection.setRng(caretRange);\n        });\n        trimEmptyTextNode(editor.dom, node);\n      };\n      const deleteBoundaryText = (editor, forward) => {\n        const range2 = editor.selection.getRng();\n        if (!isText$8(range2.commonAncestorContainer)) {\n          return Optional.none();\n        }\n        const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n        const caretWalker = CaretWalker(editor.getBody());\n        const getNextPosFn = curry(getVisualCaretPosition, forward ? caretWalker.next : caretWalker.prev);\n        const isBeforeFn = forward ? isBeforeBoundary : isAfterBoundary;\n        const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range2);\n        const nextCaretPosition = normalizePosition(forward, getNextPosFn(caretPosition));\n        if (!nextCaretPosition || !isMoveInsideSameBlock(caretPosition, nextCaretPosition)) {\n          return Optional.none();\n        } else if (isBeforeFn(nextCaretPosition)) {\n          return Optional.some(() => deleteContentAndShowCaret(editor, range2, caretPosition.getNode(), direction, forward, nextCaretPosition));\n        }\n        const peekCaretPosition = getNextPosFn(nextCaretPosition);\n        if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n          if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n            return Optional.some(() => deleteContentAndShowCaret(editor, range2, caretPosition.getNode(), direction, forward, peekCaretPosition));\n          }\n        }\n        return Optional.none();\n      };\n      const backspaceDelete$6 = (editor, forward) => deleteBoundaryText(editor, forward);\n      const isCompoundElement = (node) => isTableCell$4(SugarElement.fromDom(node)) || isListItem(SugarElement.fromDom(node));\n      const DeleteAction = Adt.generate([\n        { remove: [\"element\"] },\n        { moveToElement: [\"element\"] },\n        { moveToPosition: [\"position\"] }\n      ]);\n      const isAtContentEditableBlockCaret = (forward, from2) => {\n        const elm = from2.getNode(forward === false);\n        const caretLocation = forward ? \"after\" : \"before\";\n        return isElement$6(elm) && elm.getAttribute(\"data-mce-caret\") === caretLocation;\n      };\n      const isDeleteFromCefDifferentBlocks = (root2, forward, from2, to2) => {\n        const inSameBlock = (elm) => isInline$1(SugarElement.fromDom(elm)) && !isInSameBlock(from2, to2, root2);\n        return getRelativeCefElm(!forward, from2).fold(() => getRelativeCefElm(forward, to2).fold(never, inSameBlock), inSameBlock);\n      };\n      const deleteEmptyBlockOrMoveToCef = (root2, forward, from2, to2) => {\n        const toCefElm = to2.getNode(forward === false);\n        return getParentBlock$2(SugarElement.fromDom(root2), SugarElement.fromDom(from2.getNode())).map((blockElm) => isEmpty$2(blockElm) ? DeleteAction.remove(blockElm.dom) : DeleteAction.moveToElement(toCefElm)).orThunk(() => Optional.some(DeleteAction.moveToElement(toCefElm)));\n      };\n      const findCefPosition = (root2, forward, from2) => fromPosition(forward, root2, from2).bind((to2) => {\n        if (isCompoundElement(to2.getNode())) {\n          return Optional.none();\n        } else if (isDeleteFromCefDifferentBlocks(root2, forward, from2, to2)) {\n          return Optional.none();\n        } else if (forward && isContentEditableFalse$a(to2.getNode())) {\n          return deleteEmptyBlockOrMoveToCef(root2, forward, from2, to2);\n        } else if (forward === false && isContentEditableFalse$a(to2.getNode(true))) {\n          return deleteEmptyBlockOrMoveToCef(root2, forward, from2, to2);\n        } else if (forward && isAfterContentEditableFalse(from2)) {\n          return Optional.some(DeleteAction.moveToPosition(to2));\n        } else if (forward === false && isBeforeContentEditableFalse(from2)) {\n          return Optional.some(DeleteAction.moveToPosition(to2));\n        } else {\n          return Optional.none();\n        }\n      });\n      const getContentEditableBlockAction = (forward, elm) => {\n        if (forward && isContentEditableFalse$a(elm.nextSibling)) {\n          return Optional.some(DeleteAction.moveToElement(elm.nextSibling));\n        } else if (forward === false && isContentEditableFalse$a(elm.previousSibling)) {\n          return Optional.some(DeleteAction.moveToElement(elm.previousSibling));\n        } else {\n          return Optional.none();\n        }\n      };\n      const skipMoveToActionFromInlineCefToContent = (root2, from2, deleteAction2) => deleteAction2.fold((elm) => Optional.some(DeleteAction.remove(elm)), (elm) => Optional.some(DeleteAction.moveToElement(elm)), (to2) => {\n        if (isInSameBlock(from2, to2, root2)) {\n          return Optional.none();\n        } else {\n          return Optional.some(DeleteAction.moveToPosition(to2));\n        }\n      });\n      const getContentEditableAction = (root2, forward, from2) => {\n        if (isAtContentEditableBlockCaret(forward, from2)) {\n          return getContentEditableBlockAction(forward, from2.getNode(forward === false)).fold(() => findCefPosition(root2, forward, from2), Optional.some);\n        } else {\n          return findCefPosition(root2, forward, from2).bind((deleteAction2) => skipMoveToActionFromInlineCefToContent(root2, from2, deleteAction2));\n        }\n      };\n      const read = (root2, forward, rng) => {\n        const normalizedRange = normalizeRange(forward ? 1 : -1, root2, rng);\n        const from2 = CaretPosition.fromRangeStart(normalizedRange);\n        const rootElement = SugarElement.fromDom(root2);\n        if (forward === false && isAfterContentEditableFalse(from2)) {\n          return Optional.some(DeleteAction.remove(from2.getNode(true)));\n        } else if (forward && isBeforeContentEditableFalse(from2)) {\n          return Optional.some(DeleteAction.remove(from2.getNode()));\n        } else if (forward === false && isBeforeContentEditableFalse(from2) && isAfterBr(rootElement, from2)) {\n          return findPreviousBr(rootElement, from2).map((br) => DeleteAction.remove(br.getNode()));\n        } else if (forward && isAfterContentEditableFalse(from2) && isBeforeBr$1(rootElement, from2)) {\n          return findNextBr(rootElement, from2).map((br) => DeleteAction.remove(br.getNode()));\n        } else {\n          return getContentEditableAction(root2, forward, from2);\n        }\n      };\n      const deleteElement$1 = (editor, forward) => (element) => {\n        editor._selectionOverrides.hideFakeCaret();\n        deleteElement$2(editor, forward, SugarElement.fromDom(element));\n        return true;\n      };\n      const moveToElement = (editor, forward) => (element) => {\n        const pos = forward ? CaretPosition.before(element) : CaretPosition.after(element);\n        editor.selection.setRng(pos.toRange());\n        return true;\n      };\n      const moveToPosition = (editor) => (pos) => {\n        editor.selection.setRng(pos.toRange());\n        return true;\n      };\n      const getAncestorCe = (editor, node) => Optional.from(getContentEditableRoot$1(editor.getBody(), node));\n      const backspaceDeleteCaret = (editor, forward) => {\n        const selectedNode = editor.selection.getNode();\n        return getAncestorCe(editor, selectedNode).filter(isContentEditableFalse$a).fold(() => read(editor.getBody(), forward, editor.selection.getRng()).map((deleteAction2) => () => deleteAction2.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor))), () => Optional.some(noop));\n      };\n      const deleteOffscreenSelection = (rootElement) => {\n        each$g(descendants(rootElement, \".mce-offscreen-selection\"), remove$5);\n      };\n      const backspaceDeleteRange = (editor, forward) => {\n        const selectedNode = editor.selection.getNode();\n        if (isContentEditableFalse$a(selectedNode) && !isTableCell$5(selectedNode)) {\n          const hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse$a);\n          return hasCefAncestor.fold(() => Optional.some(() => {\n            deleteOffscreenSelection(SugarElement.fromDom(editor.getBody()));\n            deleteElement$2(editor, forward, SugarElement.fromDom(editor.selection.getNode()));\n            paddEmptyBody(editor);\n          }), () => Optional.some(noop));\n        }\n        return Optional.none();\n      };\n      const paddEmptyElement = (editor) => {\n        const dom3 = editor.dom, selection = editor.selection;\n        const ceRoot = getContentEditableRoot$1(editor.getBody(), selection.getNode());\n        if (isContentEditableTrue$4(ceRoot) && dom3.isBlock(ceRoot) && dom3.isEmpty(ceRoot)) {\n          const br = dom3.create(\"br\", { \"data-mce-bogus\": \"1\" });\n          dom3.setHTML(ceRoot, \"\");\n          ceRoot.appendChild(br);\n          selection.setRng(CaretPosition.before(br).toRange());\n        }\n        return true;\n      };\n      const backspaceDelete$5 = (editor, forward) => {\n        if (editor.selection.isCollapsed()) {\n          return backspaceDeleteCaret(editor, forward);\n        } else {\n          return backspaceDeleteRange(editor, forward);\n        }\n      };\n      const deleteCaret$2 = (editor, forward) => {\n        const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n        return fromPosition(forward, editor.getBody(), fromPos).filter((pos) => forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos)).bind((pos) => Optional.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, pos))).map((elm) => () => editor.selection.select(elm));\n      };\n      const backspaceDelete$4 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : Optional.none();\n      const isText$1 = isText$8;\n      const startsWithCaretContainer = (node) => isText$1(node) && node.data[0] === ZWSP$1;\n      const endsWithCaretContainer = (node) => isText$1(node) && node.data[node.data.length - 1] === ZWSP$1;\n      const createZwsp = (node) => node.ownerDocument.createTextNode(ZWSP$1);\n      const insertBefore = (node) => {\n        if (isText$1(node.previousSibling)) {\n          if (endsWithCaretContainer(node.previousSibling)) {\n            return node.previousSibling;\n          } else {\n            node.previousSibling.appendData(ZWSP$1);\n            return node.previousSibling;\n          }\n        } else if (isText$1(node)) {\n          if (startsWithCaretContainer(node)) {\n            return node;\n          } else {\n            node.insertData(0, ZWSP$1);\n            return node;\n          }\n        } else {\n          const newNode = createZwsp(node);\n          node.parentNode.insertBefore(newNode, node);\n          return newNode;\n        }\n      };\n      const insertAfter = (node) => {\n        if (isText$1(node.nextSibling)) {\n          if (startsWithCaretContainer(node.nextSibling)) {\n            return node.nextSibling;\n          } else {\n            node.nextSibling.insertData(0, ZWSP$1);\n            return node.nextSibling;\n          }\n        } else if (isText$1(node)) {\n          if (endsWithCaretContainer(node)) {\n            return node;\n          } else {\n            node.appendData(ZWSP$1);\n            return node;\n          }\n        } else {\n          const newNode = createZwsp(node);\n          if (node.nextSibling) {\n            node.parentNode.insertBefore(newNode, node.nextSibling);\n          } else {\n            node.parentNode.appendChild(newNode);\n          }\n          return newNode;\n        }\n      };\n      const insertInline = (before2, node) => before2 ? insertBefore(node) : insertAfter(node);\n      const insertInlineBefore = curry(insertInline, true);\n      const insertInlineAfter = curry(insertInline, false);\n      const insertInlinePos = (pos, before2) => {\n        if (isText$8(pos.container())) {\n          return insertInline(before2, pos.container());\n        } else {\n          return insertInline(before2, pos.getNode());\n        }\n      };\n      const isPosCaretContainer = (pos, caret) => {\n        const caretNode = caret.get();\n        return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n      };\n      const renderCaret = (caret, location2) => location2.fold((element) => {\n        remove$4(caret.get());\n        const text3 = insertInlineBefore(element);\n        caret.set(text3);\n        return Optional.some(CaretPosition(text3, text3.length - 1));\n      }, (element) => firstPositionIn(element).map((pos) => {\n        if (!isPosCaretContainer(pos, caret)) {\n          remove$4(caret.get());\n          const text3 = insertInlinePos(pos, true);\n          caret.set(text3);\n          return CaretPosition(text3, 1);\n        } else {\n          return CaretPosition(caret.get(), 1);\n        }\n      }), (element) => lastPositionIn(element).map((pos) => {\n        if (!isPosCaretContainer(pos, caret)) {\n          remove$4(caret.get());\n          const text3 = insertInlinePos(pos, false);\n          caret.set(text3);\n          return CaretPosition(text3, text3.length - 1);\n        } else {\n          return CaretPosition(caret.get(), caret.get().length - 1);\n        }\n      }), (element) => {\n        remove$4(caret.get());\n        const text3 = insertInlineAfter(element);\n        caret.set(text3);\n        return Optional.some(CaretPosition(text3, 1));\n      });\n      const evaluateUntil = (fns, args) => {\n        for (let i3 = 0; i3 < fns.length; i3++) {\n          const result = fns[i3].apply(null, args);\n          if (result.isSome()) {\n            return result;\n          }\n        }\n        return Optional.none();\n      };\n      const Location = Adt.generate([\n        { before: [\"element\"] },\n        { start: [\"element\"] },\n        { end: [\"element\"] },\n        { after: [\"element\"] }\n      ]);\n      const rescope$1 = (rootNode, node) => {\n        const parentBlock = getParentBlock$3(node, rootNode);\n        return parentBlock ? parentBlock : rootNode;\n      };\n      const before = (isInlineTarget2, rootNode, pos) => {\n        const nPos = normalizeForwards(pos);\n        const scope = rescope$1(rootNode, nPos.container());\n        return findRootInline(isInlineTarget2, scope, nPos).fold(() => nextPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget2, scope)).map((inline2) => Location.before(inline2)), Optional.none);\n      };\n      const isNotInsideFormatCaretContainer = (rootNode, elm) => getParentCaretContainer(rootNode, elm) === null;\n      const findInsideRootInline = (isInlineTarget2, rootNode, pos) => findRootInline(isInlineTarget2, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n      const start$1 = (isInlineTarget2, rootNode, pos) => {\n        const nPos = normalizeBackwards(pos);\n        return findInsideRootInline(isInlineTarget2, rootNode, nPos).bind((inline2) => {\n          const prevPos = prevPosition(inline2, nPos);\n          return prevPos.isNone() ? Optional.some(Location.start(inline2)) : Optional.none();\n        });\n      };\n      const end = (isInlineTarget2, rootNode, pos) => {\n        const nPos = normalizeForwards(pos);\n        return findInsideRootInline(isInlineTarget2, rootNode, nPos).bind((inline2) => {\n          const nextPos = nextPosition(inline2, nPos);\n          return nextPos.isNone() ? Optional.some(Location.end(inline2)) : Optional.none();\n        });\n      };\n      const after = (isInlineTarget2, rootNode, pos) => {\n        const nPos = normalizeBackwards(pos);\n        const scope = rescope$1(rootNode, nPos.container());\n        return findRootInline(isInlineTarget2, scope, nPos).fold(() => prevPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget2, scope)).map((inline2) => Location.after(inline2)), Optional.none);\n      };\n      const isValidLocation = (location2) => isRtl(getElement(location2)) === false;\n      const readLocation = (isInlineTarget2, rootNode, pos) => {\n        const location2 = evaluateUntil([\n          before,\n          start$1,\n          end,\n          after\n        ], [\n          isInlineTarget2,\n          rootNode,\n          pos\n        ]);\n        return location2.filter(isValidLocation);\n      };\n      const getElement = (location2) => location2.fold(identity2, identity2, identity2, identity2);\n      const getName = (location2) => location2.fold(constant2(\"before\"), constant2(\"start\"), constant2(\"end\"), constant2(\"after\"));\n      const outside = (location2) => location2.fold(Location.before, Location.before, Location.after, Location.after);\n      const inside = (location2) => location2.fold(Location.start, Location.start, Location.end, Location.end);\n      const isEq = (location1, location2) => getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n      const betweenInlines = (forward, isInlineTarget2, rootNode, from2, to2, location2) => lift2(findRootInline(isInlineTarget2, rootNode, from2), findRootInline(isInlineTarget2, rootNode, to2), (fromInline, toInline) => {\n        if (fromInline !== toInline && hasSameParentBlock(rootNode, fromInline, toInline)) {\n          return Location.after(forward ? fromInline : toInline);\n        } else {\n          return location2;\n        }\n      }).getOr(location2);\n      const skipNoMovement = (fromLocation, toLocation) => fromLocation.fold(always, (fromLocation2) => !isEq(fromLocation2, toLocation));\n      const findLocationTraverse = (forward, isInlineTarget2, rootNode, fromLocation, pos) => {\n        const from2 = normalizePosition(forward, pos);\n        const to2 = fromPosition(forward, rootNode, from2).map(curry(normalizePosition, forward));\n        const location2 = to2.fold(() => fromLocation.map(outside), (to3) => readLocation(isInlineTarget2, rootNode, to3).map(curry(betweenInlines, forward, isInlineTarget2, rootNode, from2, to3)).filter(curry(skipNoMovement, fromLocation)));\n        return location2.filter(isValidLocation);\n      };\n      const findLocationSimple = (forward, location2) => {\n        if (forward) {\n          return location2.fold(compose(Optional.some, Location.start), Optional.none, compose(Optional.some, Location.after), Optional.none);\n        } else {\n          return location2.fold(Optional.none, compose(Optional.some, Location.before), Optional.none, compose(Optional.some, Location.end));\n        }\n      };\n      const findLocation$1 = (forward, isInlineTarget2, rootNode, pos) => {\n        const from2 = normalizePosition(forward, pos);\n        const fromLocation = readLocation(isInlineTarget2, rootNode, from2);\n        return readLocation(isInlineTarget2, rootNode, from2).bind(curry(findLocationSimple, forward)).orThunk(() => findLocationTraverse(forward, isInlineTarget2, rootNode, fromLocation, pos));\n      };\n      const hasSelectionModifyApi = (editor) => {\n        return isFunction2(editor.selection.getSel().modify);\n      };\n      const moveRel = (forward, selection, pos) => {\n        const delta = forward ? 1 : -1;\n        selection.setRng(CaretPosition(pos.container(), pos.offset() + delta).toRange());\n        selection.getSel().modify(\"move\", forward ? \"forward\" : \"backward\", \"word\");\n        return true;\n      };\n      const moveByWord = (forward, editor) => {\n        const rng = editor.selection.getRng();\n        const pos = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n        if (!hasSelectionModifyApi(editor)) {\n          return false;\n        } else if (forward && isBeforeInline(pos)) {\n          return moveRel(true, editor.selection, pos);\n        } else if (!forward && isAfterInline(pos)) {\n          return moveRel(false, editor.selection, pos);\n        } else {\n          return false;\n        }\n      };\n      var BreakType;\n      (function(BreakType2) {\n        BreakType2[BreakType2[\"Br\"] = 0] = \"Br\";\n        BreakType2[BreakType2[\"Block\"] = 1] = \"Block\";\n        BreakType2[BreakType2[\"Wrap\"] = 2] = \"Wrap\";\n        BreakType2[BreakType2[\"Eol\"] = 3] = \"Eol\";\n      })(BreakType || (BreakType = {}));\n      const flip = (direction, positions) => direction === HDirection.Backwards ? reverse(positions) : positions;\n      const walk$1 = (direction, caretWalker, pos) => direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n      const getBreakType = (scope, direction, currentPos, nextPos) => {\n        if (isBr$5(nextPos.getNode(direction === HDirection.Forwards))) {\n          return BreakType.Br;\n        } else if (isInSameBlock(currentPos, nextPos) === false) {\n          return BreakType.Block;\n        } else {\n          return BreakType.Wrap;\n        }\n      };\n      const getPositionsUntil = (predicate, direction, scope, start2) => {\n        const caretWalker = CaretWalker(scope);\n        let currentPos = start2;\n        const positions = [];\n        while (currentPos) {\n          const nextPos = walk$1(direction, caretWalker, currentPos);\n          if (!nextPos) {\n            break;\n          }\n          if (isBr$5(nextPos.getNode(false))) {\n            if (direction === HDirection.Forwards) {\n              return {\n                positions: flip(direction, positions).concat([nextPos]),\n                breakType: BreakType.Br,\n                breakAt: Optional.some(nextPos)\n              };\n            } else {\n              return {\n                positions: flip(direction, positions),\n                breakType: BreakType.Br,\n                breakAt: Optional.some(nextPos)\n              };\n            }\n          }\n          if (!nextPos.isVisible()) {\n            currentPos = nextPos;\n            continue;\n          }\n          if (predicate(currentPos, nextPos)) {\n            const breakType = getBreakType(scope, direction, currentPos, nextPos);\n            return {\n              positions: flip(direction, positions),\n              breakType,\n              breakAt: Optional.some(nextPos)\n            };\n          }\n          positions.push(nextPos);\n          currentPos = nextPos;\n        }\n        return {\n          positions: flip(direction, positions),\n          breakType: BreakType.Eol,\n          breakAt: Optional.none()\n        };\n      };\n      const getAdjacentLinePositions = (direction, getPositionsUntilBreak, scope, start2) => getPositionsUntilBreak(scope, start2).breakAt.map((pos) => {\n        const positions = getPositionsUntilBreak(scope, pos).positions;\n        return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n      }).getOr([]);\n      const findClosestHorizontalPositionFromPoint = (positions, x2) => foldl(positions, (acc, newPos) => acc.fold(() => Optional.some(newPos), (lastPos) => lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), (lastRect, newRect) => {\n        const lastDist = Math.abs(x2 - lastRect.left);\n        const newDist = Math.abs(x2 - newRect.left);\n        return newDist <= lastDist ? newPos : lastPos;\n      }).or(acc)), Optional.none());\n      const findClosestHorizontalPosition = (positions, pos) => head(pos.getClientRects()).bind((targetRect) => findClosestHorizontalPositionFromPoint(positions, targetRect.left));\n      const getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n      const getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n      const getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n      const getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n      const isAtFirstLine = (scope, pos) => getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n      const isAtLastLine = (scope, pos) => getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n      const getFirstLinePositions = (scope) => firstPositionIn(scope).map((pos) => [pos].concat(getPositionsUntilNextLine(scope, pos).positions)).getOr([]);\n      const getLastLinePositions = (scope) => lastPositionIn(scope).map((pos) => getPositionsUntilPreviousLine(scope, pos).positions.concat(pos)).getOr([]);\n      const isContentEditableFalse$3 = isContentEditableFalse$a;\n      const distanceToRectLeft$1 = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n      const distanceToRectRight$1 = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n      const isNodeClientRect = (rect) => hasNonNullableKey(rect, \"node\");\n      const findClosestClientRect = (clientRects, clientX) => reduce(clientRects, (oldClientRect, clientRect) => {\n        const oldDistance = Math.min(distanceToRectLeft$1(oldClientRect, clientX), distanceToRectRight$1(oldClientRect, clientX));\n        const newDistance = Math.min(distanceToRectLeft$1(clientRect, clientX), distanceToRectRight$1(clientRect, clientX));\n        if (newDistance === oldDistance && isNodeClientRect(clientRect) && isContentEditableFalse$3(clientRect.node)) {\n          return clientRect;\n        }\n        if (newDistance < oldDistance) {\n          return clientRect;\n        }\n        return oldClientRect;\n      });\n      const getNodeClientRects = (node) => {\n        const toArrayWithNode = (clientRects) => {\n          return map$3(clientRects, (rect) => {\n            const clientRect = clone$1(rect);\n            clientRect.node = node;\n            return clientRect;\n          });\n        };\n        if (isElement$6(node)) {\n          return toArrayWithNode(node.getClientRects());\n        } else if (isText$8(node)) {\n          const rng = node.ownerDocument.createRange();\n          rng.setStart(node, 0);\n          rng.setEnd(node, node.data.length);\n          return toArrayWithNode(rng.getClientRects());\n        } else {\n          return [];\n        }\n      };\n      const getClientRects = (nodes) => bind$3(nodes, getNodeClientRects);\n      var VDirection;\n      (function(VDirection2) {\n        VDirection2[VDirection2[\"Up\"] = -1] = \"Up\";\n        VDirection2[VDirection2[\"Down\"] = 1] = \"Down\";\n      })(VDirection || (VDirection = {}));\n      const findUntil = (direction, root2, predicateFn, node) => {\n        while (node = findNode(node, direction, isEditableCaretCandidate$1, root2)) {\n          if (predicateFn(node)) {\n            return;\n          }\n        }\n      };\n      const walkUntil = (direction, isAboveFn, isBeflowFn, root2, predicateFn, caretPosition) => {\n        let line = 0;\n        const result = [];\n        const add3 = (node2) => {\n          let clientRects = getClientRects([node2]);\n          if (direction === -1) {\n            clientRects = clientRects.reverse();\n          }\n          for (let i3 = 0; i3 < clientRects.length; i3++) {\n            const clientRect = clientRects[i3];\n            if (isBeflowFn(clientRect, targetClientRect)) {\n              continue;\n            }\n            if (result.length > 0 && isAboveFn(clientRect, last$2(result))) {\n              line++;\n            }\n            clientRect.line = line;\n            if (predicateFn(clientRect)) {\n              return true;\n            }\n            result.push(clientRect);\n          }\n        };\n        const targetClientRect = last$2(caretPosition.getClientRects());\n        if (!targetClientRect) {\n          return result;\n        }\n        const node = caretPosition.getNode();\n        add3(node);\n        findUntil(direction, root2, add3, node);\n        return result;\n      };\n      const aboveLineNumber = (lineNumber, clientRect) => clientRect.line > lineNumber;\n      const isLineNumber = (lineNumber, clientRect) => clientRect.line === lineNumber;\n      const upUntil = curry(walkUntil, VDirection.Up, isAbove$1, isBelow$1);\n      const downUntil = curry(walkUntil, VDirection.Down, isBelow$1, isAbove$1);\n      const positionsUntil = (direction, root2, predicateFn, node) => {\n        const caretWalker = CaretWalker(root2);\n        let walkFn;\n        let isBelowFn;\n        let isAboveFn;\n        let caretPosition;\n        const result = [];\n        let line = 0;\n        const getClientRect = (caretPosition2) => {\n          if (direction === 1) {\n            return last$2(caretPosition2.getClientRects());\n          }\n          return last$2(caretPosition2.getClientRects());\n        };\n        if (direction === 1) {\n          walkFn = caretWalker.next;\n          isBelowFn = isBelow$1;\n          isAboveFn = isAbove$1;\n          caretPosition = CaretPosition.after(node);\n        } else {\n          walkFn = caretWalker.prev;\n          isBelowFn = isAbove$1;\n          isAboveFn = isBelow$1;\n          caretPosition = CaretPosition.before(node);\n        }\n        const targetClientRect = getClientRect(caretPosition);\n        do {\n          if (!caretPosition.isVisible()) {\n            continue;\n          }\n          const rect = getClientRect(caretPosition);\n          if (isAboveFn(rect, targetClientRect)) {\n            continue;\n          }\n          if (result.length > 0 && isBelowFn(rect, last$2(result))) {\n            line++;\n          }\n          const clientRect = clone$1(rect);\n          clientRect.position = caretPosition;\n          clientRect.line = line;\n          if (predicateFn(clientRect)) {\n            return result;\n          }\n          result.push(clientRect);\n        } while (caretPosition = walkFn(caretPosition));\n        return result;\n      };\n      const isAboveLine = (lineNumber) => (clientRect) => aboveLineNumber(lineNumber, clientRect);\n      const isLine2 = (lineNumber) => (clientRect) => isLineNumber(lineNumber, clientRect);\n      const moveToRange = (editor, rng) => {\n        editor.selection.setRng(rng);\n        scrollRangeIntoView(editor, editor.selection.getRng());\n      };\n      const renderRangeCaretOpt = (editor, range2, scrollIntoView) => Optional.some(renderRangeCaret(editor, range2, scrollIntoView));\n      const moveHorizontally = (editor, direction, range2, isBefore, isAfter, isElement2) => {\n        const forwards = direction === HDirection.Forwards;\n        const caretWalker = CaretWalker(editor.getBody());\n        const getNextPosFn = curry(getVisualCaretPosition, forwards ? caretWalker.next : caretWalker.prev);\n        const isBeforeFn = forwards ? isBefore : isAfter;\n        if (!range2.collapsed) {\n          const node = getSelectedNode(range2);\n          if (isElement2(node)) {\n            return showCaret(direction, editor, node, direction === HDirection.Backwards, false);\n          }\n        }\n        const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range2);\n        if (isBeforeFn(caretPosition)) {\n          return selectNode(editor, caretPosition.getNode(!forwards));\n        }\n        const nextCaretPosition = normalizePosition(forwards, getNextPosFn(caretPosition));\n        const rangeIsInContainerBlock = isRangeInCaretContainerBlock(range2);\n        if (!nextCaretPosition) {\n          return rangeIsInContainerBlock ? Optional.some(range2) : Optional.none();\n        }\n        if (isBeforeFn(nextCaretPosition)) {\n          return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, false);\n        }\n        const peekCaretPosition = getNextPosFn(nextCaretPosition);\n        if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n          if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n            return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, false);\n          }\n        }\n        if (rangeIsInContainerBlock) {\n          return renderRangeCaretOpt(editor, nextCaretPosition.toRange(), false);\n        }\n        return Optional.none();\n      };\n      const moveVertically = (editor, direction, range2, isBefore, isAfter, isElement2) => {\n        const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range2);\n        const caretClientRect = last$2(caretPosition.getClientRects());\n        const forwards = direction === VDirection.Down;\n        if (!caretClientRect) {\n          return Optional.none();\n        }\n        const walkerFn = forwards ? downUntil : upUntil;\n        const linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);\n        const nextLinePositions = filter$6(linePositions, isLine2(1));\n        const clientX = caretClientRect.left;\n        const nextLineRect = findClosestClientRect(nextLinePositions, clientX);\n        if (nextLineRect && isElement2(nextLineRect.node)) {\n          const dist1 = Math.abs(clientX - nextLineRect.left);\n          const dist2 = Math.abs(clientX - nextLineRect.right);\n          return showCaret(direction, editor, nextLineRect.node, dist1 < dist2, false);\n        }\n        let currentNode;\n        if (isBefore(caretPosition)) {\n          currentNode = caretPosition.getNode();\n        } else if (isAfter(caretPosition)) {\n          currentNode = caretPosition.getNode(true);\n        } else {\n          currentNode = getSelectedNode(range2);\n        }\n        if (currentNode) {\n          const caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), currentNode);\n          let closestNextLineRect = findClosestClientRect(filter$6(caretPositions, isLine2(1)), clientX);\n          if (closestNextLineRect) {\n            return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n          }\n          closestNextLineRect = last$2(filter$6(caretPositions, isLine2(0)));\n          if (closestNextLineRect) {\n            return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n          }\n        }\n        if (nextLinePositions.length === 0) {\n          return getLineEndPoint(editor, forwards).filter(forwards ? isAfter : isBefore).map((pos) => renderRangeCaret(editor, pos.toRange(), false));\n        }\n        return Optional.none();\n      };\n      const getLineEndPoint = (editor, forward) => {\n        const rng = editor.selection.getRng();\n        const from2 = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n        const host = getEditingHost(from2.container(), editor.getBody());\n        if (forward) {\n          const lineInfo = getPositionsUntilNextLine(host, from2);\n          return last$3(lineInfo.positions);\n        } else {\n          const lineInfo = getPositionsUntilPreviousLine(host, from2);\n          return head(lineInfo.positions);\n        }\n      };\n      const moveToLineEndPoint$3 = (editor, forward, isElementPosition) => getLineEndPoint(editor, forward).filter(isElementPosition).exists((pos) => {\n        editor.selection.setRng(pos.toRange());\n        return true;\n      });\n      const setCaretPosition = (editor, pos) => {\n        const rng = editor.dom.createRng();\n        rng.setStart(pos.container(), pos.offset());\n        rng.setEnd(pos.container(), pos.offset());\n        editor.selection.setRng(rng);\n      };\n      const setSelected = (state, elm) => {\n        if (state) {\n          elm.setAttribute(\"data-mce-selected\", \"inline-boundary\");\n        } else {\n          elm.removeAttribute(\"data-mce-selected\");\n        }\n      };\n      const renderCaretLocation = (editor, caret, location2) => renderCaret(caret, location2).map((pos) => {\n        setCaretPosition(editor, pos);\n        return location2;\n      });\n      const findLocation = (editor, caret, forward) => {\n        const rootNode = editor.getBody();\n        const from2 = CaretPosition.fromRangeStart(editor.selection.getRng());\n        const isInlineTarget$1 = curry(isInlineTarget, editor);\n        const location2 = findLocation$1(forward, isInlineTarget$1, rootNode, from2);\n        return location2.bind((location3) => renderCaretLocation(editor, caret, location3));\n      };\n      const toggleInlines = (isInlineTarget2, dom3, elms) => {\n        const inlineBoundaries = map$3(descendants(SugarElement.fromDom(dom3.getRoot()), '*[data-mce-selected=\"inline-boundary\"]'), (e2) => e2.dom);\n        const selectedInlines = filter$6(inlineBoundaries, isInlineTarget2);\n        const targetInlines = filter$6(elms, isInlineTarget2);\n        each$g(difference(selectedInlines, targetInlines), curry(setSelected, false));\n        each$g(difference(targetInlines, selectedInlines), curry(setSelected, true));\n      };\n      const safeRemoveCaretContainer = (editor, caret) => {\n        if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) {\n          const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n          if (CaretPosition.isTextPosition(pos) && isAtZwsp(pos) === false) {\n            setCaretPosition(editor, removeAndReposition(caret.get(), pos));\n            caret.set(null);\n          }\n        }\n      };\n      const renderInsideInlineCaret = (isInlineTarget2, editor, caret, elms) => {\n        if (editor.selection.isCollapsed()) {\n          const inlines = filter$6(elms, isInlineTarget2);\n          each$g(inlines, (_inline) => {\n            const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n            readLocation(isInlineTarget2, editor.getBody(), pos).bind((location2) => renderCaretLocation(editor, caret, location2));\n          });\n        }\n      };\n      const move$2 = (editor, caret, forward) => isInlineBoundariesEnabled(editor) ? findLocation(editor, caret, forward).isSome() : false;\n      const moveWord = (forward, editor, _caret) => isInlineBoundariesEnabled(editor) ? moveByWord(forward, editor) : false;\n      const setupSelectedState = (editor) => {\n        const caret = Cell(null);\n        const isInlineTarget$1 = curry(isInlineTarget, editor);\n        editor.on(\"NodeChange\", (e2) => {\n          if (isInlineBoundariesEnabled(editor)) {\n            toggleInlines(isInlineTarget$1, editor.dom, e2.parents);\n            safeRemoveCaretContainer(editor, caret);\n            renderInsideInlineCaret(isInlineTarget$1, editor, caret, e2.parents);\n          }\n        });\n        return caret;\n      };\n      const moveNextWord = curry(moveWord, true);\n      const movePrevWord = curry(moveWord, false);\n      const moveToLineEndPoint$2 = (editor, forward, caret) => {\n        if (isInlineBoundariesEnabled(editor)) {\n          const linePoint = getLineEndPoint(editor, forward).getOrThunk(() => {\n            const rng = editor.selection.getRng();\n            return forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n          });\n          return readLocation(curry(isInlineTarget, editor), editor.getBody(), linePoint).exists((loc) => {\n            const outsideLoc = outside(loc);\n            return renderCaret(caret, outsideLoc).exists((pos) => {\n              setCaretPosition(editor, pos);\n              return true;\n            });\n          });\n        } else {\n          return false;\n        }\n      };\n      const rangeFromPositions = (from2, to2) => {\n        const range2 = document.createRange();\n        range2.setStart(from2.container(), from2.offset());\n        range2.setEnd(to2.container(), to2.offset());\n        return range2;\n      };\n      const hasOnlyTwoOrLessPositionsLeft = (elm) => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n        const normalizedFirstPos = normalizePosition(true, firstPos);\n        const normalizedLastPos = normalizePosition(false, lastPos);\n        return nextPosition(elm, normalizedFirstPos).forall((pos) => pos.isEqual(normalizedLastPos));\n      }).getOr(true);\n      const setCaretLocation = (editor, caret) => (location2) => renderCaret(caret, location2).map((pos) => () => setCaretPosition(editor, pos));\n      const deleteFromTo = (editor, caret, from2, to2) => {\n        const rootNode = editor.getBody();\n        const isInlineTarget$1 = curry(isInlineTarget, editor);\n        editor.undoManager.ignore(() => {\n          editor.selection.setRng(rangeFromPositions(from2, to2));\n          execDeleteCommand(editor);\n          readLocation(isInlineTarget$1, rootNode, CaretPosition.fromRangeStart(editor.selection.getRng())).map(inside).bind(setCaretLocation(editor, caret)).each(call);\n        });\n        editor.nodeChanged();\n      };\n      const rescope = (rootNode, node) => {\n        const parentBlock = getParentBlock$3(node, rootNode);\n        return parentBlock ? parentBlock : rootNode;\n      };\n      const backspaceDeleteCollapsed = (editor, caret, forward, from2) => {\n        const rootNode = rescope(editor.getBody(), from2.container());\n        const isInlineTarget$1 = curry(isInlineTarget, editor);\n        const fromLocation = readLocation(isInlineTarget$1, rootNode, from2);\n        const location2 = fromLocation.bind((location3) => {\n          if (forward) {\n            return location3.fold(constant2(Optional.some(inside(location3))), Optional.none, constant2(Optional.some(outside(location3))), Optional.none);\n          } else {\n            return location3.fold(Optional.none, constant2(Optional.some(outside(location3))), Optional.none, constant2(Optional.some(inside(location3))));\n          }\n        });\n        return location2.map(setCaretLocation(editor, caret)).getOrThunk(() => {\n          const toPosition = navigate(forward, rootNode, from2);\n          const toLocation = toPosition.bind((pos) => readLocation(isInlineTarget$1, rootNode, pos));\n          return lift2(fromLocation, toLocation, () => findRootInline(isInlineTarget$1, rootNode, from2).bind((elm) => {\n            if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n              return Optional.some(() => {\n                deleteElement$2(editor, forward, SugarElement.fromDom(elm));\n              });\n            } else {\n              return Optional.none();\n            }\n          })).getOrThunk(() => toLocation.bind(() => toPosition.map((to2) => {\n            return () => {\n              if (forward) {\n                deleteFromTo(editor, caret, from2, to2);\n              } else {\n                deleteFromTo(editor, caret, to2, from2);\n              }\n            };\n          })));\n        });\n      };\n      const backspaceDelete$3 = (editor, caret, forward) => {\n        if (editor.selection.isCollapsed() && isInlineBoundariesEnabled(editor)) {\n          const from2 = CaretPosition.fromRangeStart(editor.selection.getRng());\n          return backspaceDeleteCollapsed(editor, caret, forward, from2);\n        }\n        return Optional.none();\n      };\n      const getParentInlines = (rootElm, startElm) => {\n        const parents2 = parentsAndSelf(startElm, rootElm);\n        return findIndex$2(parents2, isBlock$2).fold(constant2(parents2), (index2) => parents2.slice(0, index2));\n      };\n      const hasOnlyOneChild = (elm) => childNodesCount(elm) === 1;\n      const deleteLastPosition = (forward, editor, target, parentInlines) => {\n        const isFormatElement$1 = curry(isFormatElement, editor);\n        const formatNodes = map$3(filter$6(parentInlines, isFormatElement$1), (elm) => elm.dom);\n        if (formatNodes.length === 0) {\n          deleteElement$2(editor, forward, target);\n        } else {\n          const pos = replaceWithCaretFormat(target.dom, formatNodes);\n          editor.selection.setRng(pos.toRange());\n        }\n      };\n      const deleteCaret$1 = (editor, forward) => {\n        const rootElm = SugarElement.fromDom(editor.getBody());\n        const startElm = SugarElement.fromDom(editor.selection.getStart());\n        const parentInlines = filter$6(getParentInlines(rootElm, startElm), hasOnlyOneChild);\n        return last$3(parentInlines).bind((target) => {\n          const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n          if (willDeleteLastPositionInElement(forward, fromPos, target.dom) && !isEmptyCaretFormatElement(target)) {\n            return Optional.some(() => deleteLastPosition(forward, editor, target, parentInlines));\n          } else {\n            return Optional.none();\n          }\n        });\n      };\n      const backspaceDelete$2 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : Optional.none();\n      const deleteElement = (editor, forward, element) => {\n        return Optional.some(() => {\n          editor._selectionOverrides.hideFakeCaret();\n          deleteElement$2(editor, forward, SugarElement.fromDom(element));\n        });\n      };\n      const deleteCaret = (editor, forward) => {\n        const isNearMedia = forward ? isBeforeMedia : isAfterMedia;\n        const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n        const fromPos = getNormalizedRangeEndPoint(direction, editor.getBody(), editor.selection.getRng());\n        if (isNearMedia(fromPos)) {\n          return deleteElement(editor, forward, fromPos.getNode(!forward));\n        } else {\n          return Optional.from(normalizePosition(forward, fromPos)).filter((pos) => isNearMedia(pos) && isMoveInsideSameBlock(fromPos, pos)).map((pos) => () => deleteElement(editor, forward, pos.getNode(!forward)));\n        }\n      };\n      const deleteRange2 = (editor, forward) => {\n        const selectedNode = editor.selection.getNode();\n        return isMedia$2(selectedNode) ? deleteElement(editor, forward, selectedNode) : Optional.none();\n      };\n      const backspaceDelete$1 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret(editor, forward) : deleteRange2(editor, forward);\n      const isEditable$1 = (target) => closest$4(target, (elm) => isContentEditableTrue$4(elm.dom) || isContentEditableFalse$a(elm.dom)).exists((elm) => isContentEditableTrue$4(elm.dom));\n      const parseIndentValue = (value2) => {\n        const number2 = parseInt(value2, 10);\n        return isNaN(number2) ? 0 : number2;\n      };\n      const getIndentStyleName = (useMargin, element) => {\n        const indentStyleName = useMargin || isTable$2(element) ? \"margin\" : \"padding\";\n        const suffix = get$7(element, \"direction\") === \"rtl\" ? \"-right\" : \"-left\";\n        return indentStyleName + suffix;\n      };\n      const indentElement = (dom3, command, useMargin, value2, unit, element) => {\n        const indentStyleName = getIndentStyleName(useMargin, SugarElement.fromDom(element));\n        if (command === \"outdent\") {\n          const styleValue = Math.max(0, parseIndentValue(element.style[indentStyleName]) - value2);\n          dom3.setStyle(element, indentStyleName, styleValue ? styleValue + unit : \"\");\n        } else {\n          const styleValue = parseIndentValue(element.style[indentStyleName]) + value2 + unit;\n          dom3.setStyle(element, indentStyleName, styleValue);\n        }\n      };\n      const validateBlocks = (editor, blocks2) => forall(blocks2, (block2) => {\n        const indentStyleName = getIndentStyleName(shouldIndentUseMargin(editor), block2);\n        const intentValue = getRaw$1(block2, indentStyleName).map(parseIndentValue).getOr(0);\n        const contentEditable = editor.dom.getContentEditable(block2.dom);\n        return contentEditable !== \"false\" && intentValue > 0;\n      });\n      const canOutdent = (editor) => {\n        const blocks2 = getBlocksToIndent(editor);\n        return !editor.mode.isReadOnly() && (blocks2.length > 1 || validateBlocks(editor, blocks2));\n      };\n      const isListComponent = (el) => isList(el) || isListItem(el);\n      const parentIsListComponent = (el) => parent(el).exists(isListComponent);\n      const getBlocksToIndent = (editor) => filter$6(fromDom$1(editor.selection.getSelectedBlocks()), (el) => !isListComponent(el) && !parentIsListComponent(el) && isEditable$1(el));\n      const handle = (editor, command) => {\n        const { dom: dom3 } = editor;\n        const indentation = getIndentation(editor);\n        const indentUnit = /[a-z%]+$/i.exec(indentation)[0];\n        const indentValue = parseInt(indentation, 10);\n        const useMargin = shouldIndentUseMargin(editor);\n        each$g(getBlocksToIndent(editor), (block2) => {\n          indentElement(dom3, command, useMargin, indentValue, indentUnit, block2.dom);\n        });\n      };\n      const indent = (editor) => handle(editor, \"indent\");\n      const outdent = (editor) => handle(editor, \"outdent\");\n      const backspaceDelete = (editor) => {\n        if (editor.selection.isCollapsed() && canOutdent(editor)) {\n          const dom3 = editor.dom;\n          const rng = editor.selection.getRng();\n          const pos = CaretPosition.fromRangeStart(rng);\n          const block2 = dom3.getParent(rng.startContainer, dom3.isBlock);\n          if (block2 !== null && isAtStartOfBlock(SugarElement.fromDom(block2), pos)) {\n            return Optional.some(() => outdent(editor));\n          }\n        }\n        return Optional.none();\n      };\n      const findAction = (editor, caret, forward) => findMap([\n        backspaceDelete,\n        backspaceDelete$5,\n        backspaceDelete$6,\n        (editor2, forward2) => backspaceDelete$3(editor2, caret, forward2),\n        backspaceDelete$8,\n        backspaceDelete$9,\n        backspaceDelete$4,\n        backspaceDelete$1,\n        backspaceDelete$7,\n        backspaceDelete$2\n      ], (item) => item(editor, forward));\n      const deleteCommand = (editor, caret) => {\n        const result = findAction(editor, caret, false);\n        result.fold(() => {\n          execDeleteCommand(editor);\n          paddEmptyBody(editor);\n        }, call);\n      };\n      const forwardDeleteCommand = (editor, caret) => {\n        const result = findAction(editor, caret, true);\n        result.fold(() => execForwardDeleteCommand(editor), call);\n      };\n      const setup$p = (editor, caret) => {\n        editor.addCommand(\"delete\", () => {\n          deleteCommand(editor, caret);\n        });\n        editor.addCommand(\"forwardDelete\", () => {\n          forwardDeleteCommand(editor, caret);\n        });\n      };\n      const SIGNIFICANT_MOVE = 5;\n      const LONGPRESS_DELAY = 400;\n      const getTouch = (event) => {\n        if (event.touches === void 0 || event.touches.length !== 1) {\n          return Optional.none();\n        }\n        return Optional.some(event.touches[0]);\n      };\n      const isFarEnough = (touch, data2) => {\n        const distX = Math.abs(touch.clientX - data2.x);\n        const distY = Math.abs(touch.clientY - data2.y);\n        return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n      };\n      const setup$o = (editor) => {\n        const startData = value$2();\n        const longpressFired = Cell(false);\n        const debounceLongpress = last$1((e2) => {\n          editor.dispatch(\"longpress\", {\n            ...e2,\n            type: \"longpress\"\n          });\n          longpressFired.set(true);\n        }, LONGPRESS_DELAY);\n        editor.on(\"touchstart\", (e2) => {\n          getTouch(e2).each((touch) => {\n            debounceLongpress.cancel();\n            const data2 = {\n              x: touch.clientX,\n              y: touch.clientY,\n              target: e2.target\n            };\n            debounceLongpress.throttle(e2);\n            longpressFired.set(false);\n            startData.set(data2);\n          });\n        }, true);\n        editor.on(\"touchmove\", (e2) => {\n          debounceLongpress.cancel();\n          getTouch(e2).each((touch) => {\n            startData.on((data2) => {\n              if (isFarEnough(touch, data2)) {\n                startData.clear();\n                longpressFired.set(false);\n                editor.dispatch(\"longpresscancel\");\n              }\n            });\n          });\n        }, true);\n        editor.on(\"touchend touchcancel\", (e2) => {\n          debounceLongpress.cancel();\n          if (e2.type === \"touchcancel\") {\n            return;\n          }\n          startData.get().filter((data2) => data2.target.isEqualNode(e2.target)).each(() => {\n            if (longpressFired.get()) {\n              e2.preventDefault();\n            } else {\n              editor.dispatch(\"tap\", {\n                ...e2,\n                type: \"tap\"\n              });\n            }\n          });\n        }, true);\n      };\n      const isBlockElement2 = (blockElements, node) => has$2(blockElements, node.nodeName);\n      const isValidTarget = (blockElements, node) => {\n        if (isText$8(node)) {\n          return true;\n        } else if (isElement$6(node)) {\n          return !isBlockElement2(blockElements, node) && !isBookmarkNode$1(node);\n        } else {\n          return false;\n        }\n      };\n      const hasBlockParent = (blockElements, root2, node) => {\n        return exists(parents(SugarElement.fromDom(node), SugarElement.fromDom(root2)), (elm) => {\n          return isBlockElement2(blockElements, elm.dom);\n        });\n      };\n      const shouldRemoveTextNode = (blockElements, node) => {\n        if (isText$8(node)) {\n          if (node.nodeValue.length === 0) {\n            return true;\n          } else if (/^\\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement2(blockElements, node.nextSibling))) {\n            return true;\n          }\n        }\n        return false;\n      };\n      const addRootBlocks = (editor) => {\n        const dom3 = editor.dom, selection = editor.selection;\n        const schema = editor.schema, blockElements = schema.getBlockElements();\n        let node = selection.getStart();\n        const rootNode = editor.getBody();\n        let rootBlockNode, tempNode, wrapped;\n        const forcedRootBlock = getForcedRootBlock(editor);\n        if (!node || !isElement$6(node)) {\n          return;\n        }\n        const rootNodeName = rootNode.nodeName.toLowerCase();\n        if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {\n          return;\n        }\n        const rng = selection.getRng();\n        const startContainer = rng.startContainer;\n        const startOffset = rng.startOffset;\n        const endContainer = rng.endContainer;\n        const endOffset = rng.endOffset;\n        const restoreSelection = hasFocus(editor);\n        node = rootNode.firstChild;\n        while (node) {\n          if (isValidTarget(blockElements, node)) {\n            if (shouldRemoveTextNode(blockElements, node)) {\n              tempNode = node;\n              node = node.nextSibling;\n              dom3.remove(tempNode);\n              continue;\n            }\n            if (!rootBlockNode) {\n              rootBlockNode = dom3.create(forcedRootBlock, getForcedRootBlockAttrs(editor));\n              node.parentNode.insertBefore(rootBlockNode, node);\n              wrapped = true;\n            }\n            tempNode = node;\n            node = node.nextSibling;\n            rootBlockNode.appendChild(tempNode);\n          } else {\n            rootBlockNode = null;\n            node = node.nextSibling;\n          }\n        }\n        if (wrapped && restoreSelection) {\n          rng.setStart(startContainer, startOffset);\n          rng.setEnd(endContainer, endOffset);\n          selection.setRng(rng);\n          editor.nodeChanged();\n        }\n      };\n      const setup$n = (editor) => {\n        editor.on(\"NodeChange\", curry(addRootBlocks, editor));\n      };\n      const hasClass = (checkClassName) => (node) => (\" \" + node.attr(\"class\") + \" \").indexOf(checkClassName) !== -1;\n      const replaceMatchWithSpan = (editor, content, cls) => {\n        return function(match4) {\n          const args = arguments, index2 = args[args.length - 2];\n          const prevChar = index2 > 0 ? content.charAt(index2 - 1) : \"\";\n          if (prevChar === '\"') {\n            return match4;\n          }\n          if (prevChar === \">\") {\n            const findStartTagIndex = content.lastIndexOf(\"<\", index2);\n            if (findStartTagIndex !== -1) {\n              const tagHtml = content.substring(findStartTagIndex, index2);\n              if (tagHtml.indexOf('contenteditable=\"false\"') !== -1) {\n                return match4;\n              }\n            }\n          }\n          return '<span class=\"' + cls + '\" data-mce-content=\"' + editor.dom.encode(args[0]) + '\">' + editor.dom.encode(typeof args[1] === \"string\" ? args[1] : args[0]) + \"</span>\";\n        };\n      };\n      const convertRegExpsToNonEditable = (editor, nonEditableRegExps, e2) => {\n        let i3 = nonEditableRegExps.length, content = e2.content;\n        if (e2.format === \"raw\") {\n          return;\n        }\n        while (i3--) {\n          content = content.replace(nonEditableRegExps[i3], replaceMatchWithSpan(editor, content, getNonEditableClass(editor)));\n        }\n        e2.content = content;\n      };\n      const setup$m = (editor) => {\n        const contentEditableAttrName = \"contenteditable\";\n        const editClass = \" \" + Tools.trim(getEditableClass(editor)) + \" \";\n        const nonEditClass = \" \" + Tools.trim(getNonEditableClass(editor)) + \" \";\n        const hasEditClass = hasClass(editClass);\n        const hasNonEditClass = hasClass(nonEditClass);\n        const nonEditableRegExps = getNonEditableRegExps(editor);\n        if (nonEditableRegExps.length > 0) {\n          editor.on(\"BeforeSetContent\", (e2) => {\n            convertRegExpsToNonEditable(editor, nonEditableRegExps, e2);\n          });\n        }\n        editor.parser.addAttributeFilter(\"class\", (nodes) => {\n          let i3 = nodes.length;\n          while (i3--) {\n            const node = nodes[i3];\n            if (hasEditClass(node)) {\n              node.attr(contentEditableAttrName, \"true\");\n            } else if (hasNonEditClass(node)) {\n              node.attr(contentEditableAttrName, \"false\");\n            }\n          }\n        });\n        editor.serializer.addAttributeFilter(contentEditableAttrName, (nodes) => {\n          let i3 = nodes.length;\n          while (i3--) {\n            const node = nodes[i3];\n            if (!hasEditClass(node) && !hasNonEditClass(node)) {\n              continue;\n            }\n            if (nonEditableRegExps.length > 0 && node.attr(\"data-mce-content\")) {\n              node.name = \"#text\";\n              node.type = 3;\n              node.raw = true;\n              node.value = node.attr(\"data-mce-content\");\n            } else {\n              node.attr(contentEditableAttrName, null);\n            }\n          }\n        });\n      };\n      const findBlockCaretContainer = (editor) => descendant(SugarElement.fromDom(editor.getBody()), \"*[data-mce-caret]\").map((elm) => elm.dom).getOrNull();\n      const showBlockCaretContainer = (editor, blockCaretContainer) => {\n        if (blockCaretContainer.hasAttribute(\"data-mce-caret\")) {\n          showCaretContainerBlock(blockCaretContainer);\n          editor.selection.setRng(editor.selection.getRng());\n          editor.selection.scrollIntoView(blockCaretContainer);\n        }\n      };\n      const handleBlockContainer = (editor, e2) => {\n        const blockCaretContainer = findBlockCaretContainer(editor);\n        if (!blockCaretContainer) {\n          return;\n        }\n        if (e2.type === \"compositionstart\") {\n          e2.preventDefault();\n          e2.stopPropagation();\n          showBlockCaretContainer(editor, blockCaretContainer);\n          return;\n        }\n        if (hasContent(blockCaretContainer)) {\n          showBlockCaretContainer(editor, blockCaretContainer);\n          editor.undoManager.add();\n        }\n      };\n      const setup$l = (editor) => {\n        editor.on(\"keyup compositionstart\", curry(handleBlockContainer, editor));\n      };\n      const isContentEditableFalse$2 = isContentEditableFalse$a;\n      const moveToCeFalseHorizontally = (direction, editor, range2) => moveHorizontally(editor, direction, range2, isBeforeContentEditableFalse, isAfterContentEditableFalse, isContentEditableFalse$2);\n      const moveToCeFalseVertically = (direction, editor, range2) => {\n        const isBefore = (caretPosition) => isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition);\n        const isAfter = (caretPosition) => isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition);\n        return moveVertically(editor, direction, range2, isBefore, isAfter, isContentEditableFalse$2);\n      };\n      const createTextBlock = (editor) => {\n        const textBlock = editor.dom.create(getForcedRootBlock(editor));\n        textBlock.innerHTML = '<br data-mce-bogus=\"1\">';\n        return textBlock;\n      };\n      const exitPreBlock = (editor, direction, range2) => {\n        const caretWalker = CaretWalker(editor.getBody());\n        const getVisualCaretPosition$1 = curry(getVisualCaretPosition, direction === 1 ? caretWalker.next : caretWalker.prev);\n        if (range2.collapsed) {\n          const pre = editor.dom.getParent(range2.startContainer, \"PRE\");\n          if (!pre) {\n            return;\n          }\n          const caretPos = getVisualCaretPosition$1(CaretPosition.fromRangeStart(range2));\n          if (!caretPos) {\n            const newBlock = SugarElement.fromDom(createTextBlock(editor));\n            if (direction === 1) {\n              after$4(SugarElement.fromDom(pre), newBlock);\n            } else {\n              before$3(SugarElement.fromDom(pre), newBlock);\n            }\n            editor.selection.select(newBlock.dom, true);\n            editor.selection.collapse();\n          }\n        }\n      };\n      const getHorizontalRange = (editor, forward) => {\n        const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n        const range2 = editor.selection.getRng();\n        return moveToCeFalseHorizontally(direction, editor, range2).orThunk(() => {\n          exitPreBlock(editor, direction, range2);\n          return Optional.none();\n        });\n      };\n      const getVerticalRange = (editor, down) => {\n        const direction = down ? 1 : -1;\n        const range2 = editor.selection.getRng();\n        return moveToCeFalseVertically(direction, editor, range2).orThunk(() => {\n          exitPreBlock(editor, direction, range2);\n          return Optional.none();\n        });\n      };\n      const moveH$2 = (editor, forward) => getHorizontalRange(editor, forward).exists((newRange) => {\n        moveToRange(editor, newRange);\n        return true;\n      });\n      const moveV$3 = (editor, down) => getVerticalRange(editor, down).exists((newRange) => {\n        moveToRange(editor, newRange);\n        return true;\n      });\n      const moveToLineEndPoint$1 = (editor, forward) => {\n        const isCefPosition = forward ? isAfterContentEditableFalse : isBeforeContentEditableFalse;\n        return moveToLineEndPoint$3(editor, forward, isCefPosition);\n      };\n      const isTarget = (node) => contains$2([\"figcaption\"], name(node));\n      const rangeBefore = (target) => {\n        const rng = document.createRange();\n        rng.setStartBefore(target.dom);\n        rng.setEndBefore(target.dom);\n        return rng;\n      };\n      const insertElement = (root2, elm, forward) => {\n        if (forward) {\n          append$1(root2, elm);\n        } else {\n          prepend(root2, elm);\n        }\n      };\n      const insertEmptyLine = (root2, forward, blockName, attrs) => {\n        const block2 = SugarElement.fromTag(blockName);\n        const br = SugarElement.fromTag(\"br\");\n        setAll$1(block2, attrs);\n        append$1(block2, br);\n        insertElement(root2, block2, forward);\n        return rangeBefore(br);\n      };\n      const getClosestTargetBlock = (pos, root2) => {\n        const isRoot = curry(eq2, root2);\n        return closest$4(SugarElement.fromDom(pos.container()), isBlock$2, isRoot).filter(isTarget);\n      };\n      const isAtFirstOrLastLine = (root2, forward, pos) => forward ? isAtLastLine(root2.dom, pos) : isAtFirstLine(root2.dom, pos);\n      const moveCaretToNewEmptyLine = (editor, forward) => {\n        const root2 = SugarElement.fromDom(editor.getBody());\n        const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n        const rootBlock = getForcedRootBlock(editor);\n        const rootBlockAttrs = getForcedRootBlockAttrs(editor);\n        return getClosestTargetBlock(pos, root2).exists(() => {\n          if (isAtFirstOrLastLine(root2, forward, pos)) {\n            const rng = insertEmptyLine(root2, forward, rootBlock, rootBlockAttrs);\n            editor.selection.setRng(rng);\n            return true;\n          } else {\n            return false;\n          }\n        });\n      };\n      const moveV$2 = (editor, forward) => {\n        if (editor.selection.isCollapsed()) {\n          return moveCaretToNewEmptyLine(editor, forward);\n        } else {\n          return false;\n        }\n      };\n      const baseKeyPattern = {\n        shiftKey: false,\n        altKey: false,\n        ctrlKey: false,\n        metaKey: false,\n        keyCode: 0\n      };\n      const defaultPatterns = (patterns) => map$3(patterns, (pattern) => ({\n        ...baseKeyPattern,\n        action: noop,\n        ...pattern\n      }));\n      const defaultDelayedPatterns = (patterns) => map$3(patterns, (pattern) => ({\n        ...baseKeyPattern,\n        action: () => Optional.none(),\n        ...pattern\n      }));\n      const matchesEvent = (pattern, evt) => evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n      const match$1 = (patterns, evt) => bind$3(defaultPatterns(patterns), (pattern) => matchesEvent(pattern, evt) ? [pattern] : []);\n      const matchDelayed = (patterns, evt) => bind$3(defaultDelayedPatterns(patterns), (pattern) => matchesEvent(pattern, evt) ? [pattern] : []);\n      const action = (f2, ...x2) => () => f2.apply(null, x2);\n      const execute = (patterns, evt) => find$2(match$1(patterns, evt), (pattern) => pattern.action());\n      const executeWithDelayedAction = (patterns, evt) => findMap(matchDelayed(patterns, evt), (pattern) => pattern.action());\n      const moveH$1 = (editor, forward) => {\n        const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n        const range2 = editor.selection.getRng();\n        return moveHorizontally(editor, direction, range2, isBeforeMedia, isAfterMedia, isMedia$2).exists((newRange) => {\n          moveToRange(editor, newRange);\n          return true;\n        });\n      };\n      const moveV$1 = (editor, down) => {\n        const direction = down ? 1 : -1;\n        const range2 = editor.selection.getRng();\n        return moveVertically(editor, direction, range2, isBeforeMedia, isAfterMedia, isMedia$2).exists((newRange) => {\n          moveToRange(editor, newRange);\n          return true;\n        });\n      };\n      const moveToLineEndPoint = (editor, forward) => {\n        const isNearMedia = forward ? isAfterMedia : isBeforeMedia;\n        return moveToLineEndPoint$3(editor, forward, isNearMedia);\n      };\n      const adt = Adt.generate([\n        { none: [\"current\"] },\n        { first: [\"current\"] },\n        {\n          middle: [\n            \"current\",\n            \"target\"\n          ]\n        },\n        { last: [\"current\"] }\n      ]);\n      const none = (current) => adt.none(current);\n      const CellLocation = {\n        ...adt,\n        none\n      };\n      const firstLayer = (scope, selector) => {\n        return filterFirstLayer(scope, selector, always);\n      };\n      const filterFirstLayer = (scope, selector, predicate) => {\n        return bind$3(children(scope), (x2) => {\n          if (is$1(x2, selector)) {\n            return predicate(x2) ? [x2] : [];\n          } else {\n            return filterFirstLayer(x2, selector, predicate);\n          }\n        });\n      };\n      const lookup$1 = (tags, element, isRoot = never) => {\n        if (isRoot(element)) {\n          return Optional.none();\n        }\n        if (contains$2(tags, name(element))) {\n          return Optional.some(element);\n        }\n        const isRootOrUpperTable = (elm) => is$1(elm, \"table\") || isRoot(elm);\n        return ancestor$2(element, tags.join(\",\"), isRootOrUpperTable);\n      };\n      const cell = (element, isRoot) => lookup$1([\n        \"td\",\n        \"th\"\n      ], element, isRoot);\n      const cells = (ancestor2) => firstLayer(ancestor2, \"th,td\");\n      const table2 = (element, isRoot) => closest$3(element, \"table\", isRoot);\n      const walk = (all2, current, index2, direction, isEligible = always) => {\n        const forwards = direction === 1;\n        if (!forwards && index2 <= 0) {\n          return CellLocation.first(all2[0]);\n        } else if (forwards && index2 >= all2.length - 1) {\n          return CellLocation.last(all2[all2.length - 1]);\n        } else {\n          const newIndex = index2 + direction;\n          const elem = all2[newIndex];\n          return isEligible(elem) ? CellLocation.middle(current, elem) : walk(all2, current, newIndex, direction, isEligible);\n        }\n      };\n      const detect = (current, isRoot) => {\n        return table2(current, isRoot).bind((table3) => {\n          const all2 = cells(table3);\n          const index2 = findIndex$2(all2, (x2) => eq2(current, x2));\n          return index2.map((index3) => ({\n            index: index3,\n            all: all2\n          }));\n        });\n      };\n      const next = (current, isEligible, isRoot) => {\n        const detection = detect(current, isRoot);\n        return detection.fold(() => {\n          return CellLocation.none(current);\n        }, (info) => {\n          return walk(info.all, current, info.index, 1, isEligible);\n        });\n      };\n      const prev = (current, isEligible, isRoot) => {\n        const detection = detect(current, isRoot);\n        return detection.fold(() => {\n          return CellLocation.none();\n        }, (info) => {\n          return walk(info.all, current, info.index, -1, isEligible);\n        });\n      };\n      const closest = (target) => closest$3(target, \"[contenteditable]\");\n      const isEditable = (element, assumeEditable = false) => {\n        if (inBody(element)) {\n          return element.dom.isContentEditable;\n        } else {\n          return closest(element).fold(constant2(assumeEditable), (editable) => getRaw(editable) === \"true\");\n        }\n      };\n      const getRaw = (element) => element.dom.contentEditable;\n      const deflate = (rect, delta) => ({\n        left: rect.left - delta,\n        top: rect.top - delta,\n        right: rect.right + delta * 2,\n        bottom: rect.bottom + delta * 2,\n        width: rect.width + delta,\n        height: rect.height + delta\n      });\n      const getCorners = (getYAxisValue, tds) => bind$3(tds, (td) => {\n        const rect = deflate(clone$1(td.getBoundingClientRect()), -1);\n        return [\n          {\n            x: rect.left,\n            y: getYAxisValue(rect),\n            cell: td\n          },\n          {\n            x: rect.right,\n            y: getYAxisValue(rect),\n            cell: td\n          }\n        ];\n      });\n      const findClosestCorner = (corners, x2, y2) => foldl(corners, (acc, newCorner) => acc.fold(() => Optional.some(newCorner), (oldCorner) => {\n        const oldDist = Math.sqrt(Math.abs(oldCorner.x - x2) + Math.abs(oldCorner.y - y2));\n        const newDist = Math.sqrt(Math.abs(newCorner.x - x2) + Math.abs(newCorner.y - y2));\n        return Optional.some(newDist < oldDist ? newCorner : oldCorner);\n      }), Optional.none());\n      const getClosestCell = (getYAxisValue, isTargetCorner, table3, x2, y2) => {\n        const cells2 = descendants(SugarElement.fromDom(table3), \"td,th,caption\").map((e2) => e2.dom);\n        const corners = filter$6(getCorners(getYAxisValue, cells2), (corner) => isTargetCorner(corner, y2));\n        return findClosestCorner(corners, x2, y2).map((corner) => corner.cell);\n      };\n      const getBottomValue = (rect) => rect.bottom;\n      const getTopValue = (rect) => rect.top;\n      const isAbove = (corner, y2) => corner.y < y2;\n      const isBelow = (corner, y2) => corner.y > y2;\n      const getClosestCellAbove = curry(getClosestCell, getBottomValue, isAbove);\n      const getClosestCellBelow = curry(getClosestCell, getTopValue, isBelow);\n      const findClosestPositionInAboveCell = (table3, pos) => head(pos.getClientRects()).bind((rect) => getClosestCellAbove(table3, rect.left, rect.top)).bind((cell2) => findClosestHorizontalPosition(getLastLinePositions(cell2), pos));\n      const findClosestPositionInBelowCell = (table3, pos) => last$3(pos.getClientRects()).bind((rect) => getClosestCellBelow(table3, rect.left, rect.top)).bind((cell2) => findClosestHorizontalPosition(getFirstLinePositions(cell2), pos));\n      const hasNextBreak = (getPositionsUntil2, scope, lineInfo) => lineInfo.breakAt.exists((breakPos) => getPositionsUntil2(scope, breakPos).breakAt.isSome());\n      const startsWithWrapBreak = (lineInfo) => lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n      const startsWithBrBreak = (lineInfo) => lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n      const isAtTableCellLine = (getPositionsUntil2, scope, pos) => {\n        const lineInfo = getPositionsUntil2(scope, pos);\n        if (startsWithWrapBreak(lineInfo) || !isBr$5(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n          return !hasNextBreak(getPositionsUntil2, scope, lineInfo);\n        } else {\n          return lineInfo.breakAt.isNone();\n        }\n      };\n      const isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n      const isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n      const isCaretAtStartOrEndOfTable = (forward, rng, table3) => {\n        const caretPos = CaretPosition.fromRangeStart(rng);\n        return positionIn(!forward, table3).exists((pos) => pos.isEqual(caretPos));\n      };\n      const navigateHorizontally = (editor, forward, table3, _td) => {\n        const rng = editor.selection.getRng();\n        const direction = forward ? 1 : -1;\n        if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table3)) {\n          showCaret(direction, editor, table3, !forward, false).each((newRng) => {\n            moveToRange(editor, newRng);\n          });\n          return true;\n        }\n        return false;\n      };\n      const getClosestAbovePosition = (root2, table3, start2) => findClosestPositionInAboveCell(table3, start2).orThunk(() => head(start2.getClientRects()).bind((rect) => findClosestHorizontalPositionFromPoint(getPositionsAbove(root2, CaretPosition.before(table3)), rect.left))).getOr(CaretPosition.before(table3));\n      const getClosestBelowPosition = (root2, table3, start2) => findClosestPositionInBelowCell(table3, start2).orThunk(() => head(start2.getClientRects()).bind((rect) => findClosestHorizontalPositionFromPoint(getPositionsBelow(root2, CaretPosition.after(table3)), rect.left))).getOr(CaretPosition.after(table3));\n      const getTable = (previous, pos) => {\n        const node = pos.getNode(previous);\n        return isElement$6(node) && node.nodeName === \"TABLE\" ? Optional.some(node) : Optional.none();\n      };\n      const renderBlock = (down, editor, table3) => {\n        const forcedRootBlock = getForcedRootBlock(editor);\n        editor.undoManager.transact(() => {\n          const element = SugarElement.fromTag(forcedRootBlock);\n          setAll$1(element, getForcedRootBlockAttrs(editor));\n          append$1(element, SugarElement.fromTag(\"br\"));\n          if (down) {\n            after$4(SugarElement.fromDom(table3), element);\n          } else {\n            before$3(SugarElement.fromDom(table3), element);\n          }\n          const rng = editor.dom.createRng();\n          rng.setStart(element.dom, 0);\n          rng.setEnd(element.dom, 0);\n          moveToRange(editor, rng);\n        });\n      };\n      const moveCaret = (editor, down, pos) => {\n        const table3 = down ? getTable(true, pos) : getTable(false, pos);\n        const last2 = down === false;\n        table3.fold(() => moveToRange(editor, pos.toRange()), (table4) => positionIn(last2, editor.getBody()).filter((lastPos) => lastPos.isEqual(pos)).fold(() => moveToRange(editor, pos.toRange()), (_2) => renderBlock(down, editor, table4)));\n      };\n      const navigateVertically = (editor, down, table3, td) => {\n        const rng = editor.selection.getRng();\n        const pos = CaretPosition.fromRangeStart(rng);\n        const root2 = editor.getBody();\n        if (!down && isAtFirstTableCellLine(td, pos)) {\n          const newPos = getClosestAbovePosition(root2, table3, pos);\n          moveCaret(editor, down, newPos);\n          return true;\n        } else if (down && isAtLastTableCellLine(td, pos)) {\n          const newPos = getClosestBelowPosition(root2, table3, pos);\n          moveCaret(editor, down, newPos);\n          return true;\n        } else {\n          return false;\n        }\n      };\n      const move$1 = (editor, forward, mover) => Optional.from(editor.dom.getParent(editor.selection.getNode(), \"td,th\")).bind((td) => Optional.from(editor.dom.getParent(td, \"table\")).map((table3) => mover(editor, forward, table3, td))).getOr(false);\n      const moveH = (editor, forward) => move$1(editor, forward, navigateHorizontally);\n      const moveV = (editor, forward) => move$1(editor, forward, navigateVertically);\n      const getCellFirstCursorPosition = (cell2) => {\n        const selection = SimSelection.exact(cell2, 0, cell2, 0);\n        return toNative(selection);\n      };\n      const tabGo = (editor, isRoot, cell2) => {\n        return cell2.fold(Optional.none, Optional.none, (_current, next2) => {\n          return first(next2).map((cell3) => {\n            return getCellFirstCursorPosition(cell3);\n          });\n        }, (current) => {\n          editor.execCommand(\"mceTableInsertRowAfter\");\n          return tabForward(editor, isRoot, current);\n        });\n      };\n      const tabForward = (editor, isRoot, cell2) => tabGo(editor, isRoot, next(cell2, isEditable));\n      const tabBackward = (editor, isRoot, cell2) => tabGo(editor, isRoot, prev(cell2, isEditable));\n      const handleTab = (editor, forward) => {\n        const rootElements = [\n          \"table\",\n          \"li\",\n          \"dl\"\n        ];\n        const body = SugarElement.fromDom(editor.getBody());\n        const isRoot = (element) => {\n          const name$1 = name(element);\n          return eq2(element, body) || contains$2(rootElements, name$1);\n        };\n        const rng = editor.selection.getRng();\n        const container = SugarElement.fromDom(!forward ? rng.startContainer : rng.endContainer);\n        return cell(container, isRoot).map((cell2) => {\n          table2(cell2, isRoot).each((table3) => {\n            editor.model.table.clearSelectedCells(table3.dom);\n          });\n          editor.selection.collapse(!forward);\n          const navigation = !forward ? tabBackward : tabForward;\n          const rng2 = navigation(editor, isRoot, cell2);\n          rng2.each((range2) => {\n            editor.selection.setRng(range2);\n          });\n          return true;\n        }).getOr(false);\n      };\n      const executeKeydownOverride$4 = (editor, caret, evt) => {\n        const os2 = detect$2().os;\n        execute([\n          {\n            keyCode: VK.RIGHT,\n            action: action(moveH$2, editor, true)\n          },\n          {\n            keyCode: VK.LEFT,\n            action: action(moveH$2, editor, false)\n          },\n          {\n            keyCode: VK.UP,\n            action: action(moveV$3, editor, false)\n          },\n          {\n            keyCode: VK.DOWN,\n            action: action(moveV$3, editor, true)\n          },\n          {\n            keyCode: VK.RIGHT,\n            action: action(moveH, editor, true)\n          },\n          {\n            keyCode: VK.LEFT,\n            action: action(moveH, editor, false)\n          },\n          {\n            keyCode: VK.UP,\n            action: action(moveV, editor, false)\n          },\n          {\n            keyCode: VK.DOWN,\n            action: action(moveV, editor, true)\n          },\n          {\n            keyCode: VK.RIGHT,\n            action: action(moveH$1, editor, true)\n          },\n          {\n            keyCode: VK.LEFT,\n            action: action(moveH$1, editor, false)\n          },\n          {\n            keyCode: VK.UP,\n            action: action(moveV$1, editor, false)\n          },\n          {\n            keyCode: VK.DOWN,\n            action: action(moveV$1, editor, true)\n          },\n          {\n            keyCode: VK.RIGHT,\n            action: action(move$2, editor, caret, true)\n          },\n          {\n            keyCode: VK.LEFT,\n            action: action(move$2, editor, caret, false)\n          },\n          {\n            keyCode: VK.RIGHT,\n            ctrlKey: !os2.isMacOS(),\n            altKey: os2.isMacOS(),\n            action: action(moveNextWord, editor, caret)\n          },\n          {\n            keyCode: VK.LEFT,\n            ctrlKey: !os2.isMacOS(),\n            altKey: os2.isMacOS(),\n            action: action(movePrevWord, editor, caret)\n          },\n          {\n            keyCode: VK.UP,\n            action: action(moveV$2, editor, false)\n          },\n          {\n            keyCode: VK.DOWN,\n            action: action(moveV$2, editor, true)\n          }\n        ], evt).each((_2) => {\n          evt.preventDefault();\n        });\n      };\n      const setup$k = (editor, caret) => {\n        editor.on(\"keydown\", (evt) => {\n          if (evt.isDefaultPrevented() === false) {\n            executeKeydownOverride$4(editor, caret, evt);\n          }\n        });\n      };\n      const point = (container, offset) => ({\n        container,\n        offset\n      });\n      const DOM$7 = DOMUtils.DOM;\n      const alwaysNext = (startNode) => (node) => startNode === node ? -1 : 0;\n      const isBoundary = (dom3) => (node) => dom3.isBlock(node) || contains$2([\n        \"BR\",\n        \"IMG\",\n        \"HR\",\n        \"INPUT\"\n      ], node.nodeName) || dom3.getContentEditable(node) === \"false\";\n      const textBefore = (node, offset, rootNode) => {\n        if (isText$8(node) && offset >= 0) {\n          return Optional.some(point(node, offset));\n        } else {\n          const textSeeker = TextSeeker(DOM$7);\n          return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).map((prev2) => point(prev2.container, prev2.container.data.length));\n        }\n      };\n      const textAfter = (node, offset, rootNode) => {\n        if (isText$8(node) && offset >= node.length) {\n          return Optional.some(point(node, offset));\n        } else {\n          const textSeeker = TextSeeker(DOM$7);\n          return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).map((prev2) => point(prev2.container, 0));\n        }\n      };\n      const scanLeft = (node, offset, rootNode) => {\n        if (!isText$8(node)) {\n          return Optional.none();\n        }\n        const text3 = node.textContent;\n        if (offset >= 0 && offset <= text3.length) {\n          return Optional.some(point(node, offset));\n        } else {\n          const textSeeker = TextSeeker(DOM$7);\n          return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).bind((prev2) => {\n            const prevText = prev2.container.data;\n            return scanLeft(prev2.container, offset + prevText.length, rootNode);\n          });\n        }\n      };\n      const scanRight = (node, offset, rootNode) => {\n        if (!isText$8(node)) {\n          return Optional.none();\n        }\n        const text3 = node.textContent;\n        if (offset <= text3.length) {\n          return Optional.some(point(node, offset));\n        } else {\n          const textSeeker = TextSeeker(DOM$7);\n          return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).bind((next2) => scanRight(next2.container, offset - text3.length, rootNode));\n        }\n      };\n      const repeatLeft = (dom3, node, offset, process2, rootNode) => {\n        const search2 = TextSeeker(dom3, isBoundary(dom3));\n        return Optional.from(search2.backwards(node, offset, process2, rootNode));\n      };\n      const isValidTextRange = (rng) => rng.collapsed && rng.startContainer.nodeType === 3;\n      const getText = (rng) => rng.toString().replace(/\\u00A0/g, \" \").replace(/\\uFEFF/g, \"\");\n      const isWhitespace = (chr) => chr !== \"\" && \"  \\f\\n\\r\t\\v\".indexOf(chr) !== -1;\n      const stripTriggerChar = (text3, triggerCh) => text3.substring(triggerCh.length);\n      const findChar = (text3, index2, ch) => {\n        let i3;\n        for (i3 = index2 - 1; i3 >= 0; i3--) {\n          const char = text3.charAt(i3);\n          if (isWhitespace(char)) {\n            return Optional.none();\n          }\n          if (char === ch) {\n            break;\n          }\n        }\n        return Optional.some(i3);\n      };\n      const findStart = (dom3, initRange, ch, minChars = 0) => {\n        if (!isValidTextRange(initRange)) {\n          return Optional.none();\n        }\n        const findTriggerChIndex = (element, offset, text3) => findChar(text3, offset, ch).getOr(offset);\n        const root2 = dom3.getParent(initRange.startContainer, dom3.isBlock) || dom3.getRoot();\n        return repeatLeft(dom3, initRange.startContainer, initRange.startOffset, findTriggerChIndex, root2).bind((spot) => {\n          const range2 = initRange.cloneRange();\n          range2.setStart(spot.container, spot.offset);\n          range2.setEnd(initRange.endContainer, initRange.endOffset);\n          if (range2.collapsed) {\n            return Optional.none();\n          }\n          const text3 = getText(range2);\n          const triggerCharIndex = text3.lastIndexOf(ch);\n          if (triggerCharIndex !== 0 || stripTriggerChar(text3, ch).length < minChars) {\n            return Optional.none();\n          } else {\n            return Optional.some({\n              text: stripTriggerChar(text3, ch),\n              range: range2,\n              triggerChar: ch\n            });\n          }\n        });\n      };\n      const getContext = (dom3, initRange, ch, minChars = 0) => detect$1(SugarElement.fromDom(initRange.startContainer)).fold(() => findStart(dom3, initRange, ch, minChars), (elm) => {\n        const range2 = dom3.createRng();\n        range2.selectNode(elm.dom);\n        const text3 = getText(range2);\n        return Optional.some({\n          range: range2,\n          text: stripTriggerChar(text3, ch),\n          triggerChar: ch\n        });\n      });\n      const isText = (node) => node.nodeType === TEXT;\n      const isElement = (node) => node.nodeType === ELEMENT;\n      const toLast = (node) => {\n        if (isText(node)) {\n          return point(node, node.data.length);\n        } else {\n          const children2 = node.childNodes;\n          return children2.length > 0 ? toLast(children2[children2.length - 1]) : point(node, children2.length);\n        }\n      };\n      const toLeaf = (node, offset) => {\n        const children2 = node.childNodes;\n        if (children2.length > 0 && offset < children2.length) {\n          return toLeaf(children2[offset], 0);\n        } else if (children2.length > 0 && isElement(node) && children2.length === offset) {\n          return toLast(children2[children2.length - 1]);\n        } else {\n          return point(node, offset);\n        }\n      };\n      const isPreviousCharContent = (dom3, leaf) => repeatLeft(dom3, leaf.container, leaf.offset, (element, offset) => offset === 0 ? -1 : offset, dom3.getRoot()).filter((spot) => {\n        const char = spot.container.data.charAt(spot.offset - 1);\n        return !isWhitespace(char);\n      }).isSome();\n      const isStartOfWord = (dom3) => (rng) => {\n        const leaf = toLeaf(rng.startContainer, rng.startOffset);\n        return !isPreviousCharContent(dom3, leaf);\n      };\n      const getTriggerContext = (dom3, initRange, database) => findMap(database.triggerChars, (ch) => getContext(dom3, initRange, ch));\n      const lookup = (editor, getDatabase) => {\n        const database = getDatabase();\n        const rng = editor.selection.getRng();\n        return getTriggerContext(editor.dom, rng, database).bind((context2) => lookupWithContext(editor, getDatabase, context2));\n      };\n      const lookupWithContext = (editor, getDatabase, context2, fetchOptions = {}) => {\n        const database = getDatabase();\n        const rng = editor.selection.getRng();\n        const startText = rng.startContainer.nodeValue;\n        const autocompleters = filter$6(database.lookupByChar(context2.triggerChar), (autocompleter) => context2.text.length >= autocompleter.minChars && autocompleter.matches.getOrThunk(() => isStartOfWord(editor.dom))(context2.range, startText, context2.text));\n        if (autocompleters.length === 0) {\n          return Optional.none();\n        }\n        const lookupData = Promise.all(map$3(autocompleters, (ac) => {\n          const fetchResult = ac.fetch(context2.text, ac.maxResults, fetchOptions);\n          return fetchResult.then((results) => ({\n            matchText: context2.text,\n            items: results,\n            columns: ac.columns,\n            onAction: ac.onAction,\n            highlightOn: ac.highlightOn\n          }));\n        }));\n        return Optional.some({\n          lookupData,\n          context: context2\n        });\n      };\n      var SimpleResultType;\n      (function(SimpleResultType2) {\n        SimpleResultType2[SimpleResultType2[\"Error\"] = 0] = \"Error\";\n        SimpleResultType2[SimpleResultType2[\"Value\"] = 1] = \"Value\";\n      })(SimpleResultType || (SimpleResultType = {}));\n      const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n      const partition = (results) => {\n        const values2 = [];\n        const errors2 = [];\n        each$g(results, (obj) => {\n          fold$1(obj, (err) => errors2.push(err), (val) => values2.push(val));\n        });\n        return {\n          values: values2,\n          errors: errors2\n        };\n      };\n      const mapError = (res, f2) => {\n        if (res.stype === SimpleResultType.Error) {\n          return {\n            stype: SimpleResultType.Error,\n            serror: f2(res.serror)\n          };\n        } else {\n          return res;\n        }\n      };\n      const map2 = (res, f2) => {\n        if (res.stype === SimpleResultType.Value) {\n          return {\n            stype: SimpleResultType.Value,\n            svalue: f2(res.svalue)\n          };\n        } else {\n          return res;\n        }\n      };\n      const bind = (res, f2) => {\n        if (res.stype === SimpleResultType.Value) {\n          return f2(res.svalue);\n        } else {\n          return res;\n        }\n      };\n      const bindError = (res, f2) => {\n        if (res.stype === SimpleResultType.Error) {\n          return f2(res.serror);\n        } else {\n          return res;\n        }\n      };\n      const svalue = (v2) => ({\n        stype: SimpleResultType.Value,\n        svalue: v2\n      });\n      const serror = (e2) => ({\n        stype: SimpleResultType.Error,\n        serror: e2\n      });\n      const toResult = (res) => fold$1(res, Result.error, Result.value);\n      const fromResult = (res) => res.fold(serror, svalue);\n      const SimpleResult = {\n        fromResult,\n        toResult,\n        svalue,\n        partition,\n        serror,\n        bind,\n        bindError,\n        map: map2,\n        mapError,\n        fold: fold$1\n      };\n      const formatObj = (input) => {\n        return isObject2(input) && keys2(input).length > 100 ? \" removed due to size\" : JSON.stringify(input, null, 2);\n      };\n      const formatErrors = (errors2) => {\n        const es = errors2.length > 10 ? errors2.slice(0, 10).concat([{\n          path: [],\n          getErrorInfo: constant2(\"... (only showing first ten failures)\")\n        }]) : errors2;\n        return map$3(es, (e2) => {\n          return \"Failed path: (\" + e2.path.join(\" > \") + \")\\n\" + e2.getErrorInfo();\n        });\n      };\n      const nu = (path, getErrorInfo) => {\n        return SimpleResult.serror([{\n          path,\n          getErrorInfo\n        }]);\n      };\n      const missingRequired = (path, key, obj) => nu(path, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n      const missingKey = (path, key) => nu(path, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n      const missingBranch = (path, branches, branch) => nu(path, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n      const custom = (path, err) => nu(path, constant2(err));\n      const chooseFrom = (path, input, branches, ch) => {\n        const fields = get$a(branches, ch);\n        return fields.fold(() => missingBranch(path, branches, ch), (vp) => vp.extract(path.concat([\"branch: \" + ch]), input));\n      };\n      const choose$1 = (key, branches) => {\n        const extract = (path, input) => {\n          const choice = get$a(input, key);\n          return choice.fold(() => missingKey(path, key), (chosen) => chooseFrom(path, input, branches, chosen));\n        };\n        const toString = () => \"chooseOn(\" + key + \"). Possible values: \" + keys2(branches);\n        return {\n          extract,\n          toString\n        };\n      };\n      const shallow = (old, nu2) => {\n        return nu2;\n      };\n      const deep = (old, nu2) => {\n        const bothObjects = isPlainObject2(old) && isPlainObject2(nu2);\n        return bothObjects ? deepMerge(old, nu2) : nu2;\n      };\n      const baseMerge2 = (merger) => {\n        return (...objects) => {\n          if (objects.length === 0) {\n            throw new Error(`Can't merge zero objects`);\n          }\n          const ret = {};\n          for (let j2 = 0; j2 < objects.length; j2++) {\n            const curObject = objects[j2];\n            for (const key in curObject) {\n              if (has$2(curObject, key)) {\n                ret[key] = merger(ret[key], curObject[key]);\n              }\n            }\n          }\n          return ret;\n        };\n      };\n      const deepMerge = baseMerge2(deep);\n      const merge2 = baseMerge2(shallow);\n      const required = () => ({\n        tag: \"required\",\n        process: {}\n      });\n      const defaultedThunk = (fallbackThunk) => ({\n        tag: \"defaultedThunk\",\n        process: fallbackThunk\n      });\n      const defaulted$1 = (fallback2) => defaultedThunk(constant2(fallback2));\n      const asOption = () => ({\n        tag: \"option\",\n        process: {}\n      });\n      const mergeValues = (values2, base2) => values2.length > 0 ? SimpleResult.svalue(deepMerge(base2, merge2.apply(void 0, values2))) : SimpleResult.svalue(base2);\n      const mergeErrors = (errors2) => compose(SimpleResult.serror, flatten)(errors2);\n      const consolidateObj = (objects, base2) => {\n        const partition2 = SimpleResult.partition(objects);\n        return partition2.errors.length > 0 ? mergeErrors(partition2.errors) : mergeValues(partition2.values, base2);\n      };\n      const consolidateArr = (objects) => {\n        const partitions = SimpleResult.partition(objects);\n        return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : SimpleResult.svalue(partitions.values);\n      };\n      const ResultCombine = {\n        consolidateObj,\n        consolidateArr\n      };\n      const field$1 = (key, newKey, presence, prop) => ({\n        tag: \"field\",\n        key,\n        newKey,\n        presence,\n        prop\n      });\n      const customField$1 = (newKey, instantiator) => ({\n        tag: \"custom\",\n        newKey,\n        instantiator\n      });\n      const fold = (value2, ifField, ifCustom) => {\n        switch (value2.tag) {\n          case \"field\":\n            return ifField(value2.key, value2.newKey, value2.presence, value2.prop);\n          case \"custom\":\n            return ifCustom(value2.newKey, value2.instantiator);\n        }\n      };\n      const value = (validator) => {\n        const extract = (path, val) => {\n          return SimpleResult.bindError(validator(val), (err) => custom(path, err));\n        };\n        const toString = constant2(\"val\");\n        return {\n          extract,\n          toString\n        };\n      };\n      const anyValue$1 = value(SimpleResult.svalue);\n      const requiredAccess = (path, obj, key, bundle) => get$a(obj, key).fold(() => missingRequired(path, key, obj), bundle);\n      const fallbackAccess = (obj, key, fallback2, bundle) => {\n        const v2 = get$a(obj, key).getOrThunk(() => fallback2(obj));\n        return bundle(v2);\n      };\n      const optionAccess = (obj, key, bundle) => bundle(get$a(obj, key));\n      const optionDefaultedAccess = (obj, key, fallback2, bundle) => {\n        const opt = get$a(obj, key).map((val) => val === true ? fallback2(obj) : val);\n        return bundle(opt);\n      };\n      const extractField = (field2, path, obj, key, prop) => {\n        const bundle = (av) => prop.extract(path.concat([key]), av);\n        const bundleAsOption = (optValue) => optValue.fold(() => SimpleResult.svalue(Optional.none()), (ov) => {\n          const result = prop.extract(path.concat([key]), ov);\n          return SimpleResult.map(result, Optional.some);\n        });\n        switch (field2.tag) {\n          case \"required\":\n            return requiredAccess(path, obj, key, bundle);\n          case \"defaultedThunk\":\n            return fallbackAccess(obj, key, field2.process, bundle);\n          case \"option\":\n            return optionAccess(obj, key, bundleAsOption);\n          case \"defaultedOptionThunk\":\n            return optionDefaultedAccess(obj, key, field2.process, bundleAsOption);\n          case \"mergeWithThunk\": {\n            return fallbackAccess(obj, key, constant2({}), (v2) => {\n              const result = deepMerge(field2.process(obj), v2);\n              return bundle(result);\n            });\n          }\n        }\n      };\n      const extractFields = (path, obj, fields) => {\n        const success = {};\n        const errors2 = [];\n        for (const field2 of fields) {\n          fold(field2, (key, newKey, presence, prop) => {\n            const result = extractField(presence, path, obj, key, prop);\n            SimpleResult.fold(result, (err) => {\n              errors2.push(...err);\n            }, (res) => {\n              success[newKey] = res;\n            });\n          }, (newKey, instantiator) => {\n            success[newKey] = instantiator(obj);\n          });\n        }\n        return errors2.length > 0 ? SimpleResult.serror(errors2) : SimpleResult.svalue(success);\n      };\n      const objOf = (values2) => {\n        const extract = (path, o2) => extractFields(path, o2, values2);\n        const toString = () => {\n          const fieldStrings = map$3(values2, (value2) => fold(value2, (key, _okey, _presence, prop) => key + \" -> \" + prop.toString(), (newKey, _instantiator) => \"state(\" + newKey + \")\"));\n          return \"obj{\\n\" + fieldStrings.join(\"\\n\") + \"}\";\n        };\n        return {\n          extract,\n          toString\n        };\n      };\n      const arrOf = (prop) => {\n        const extract = (path, array2) => {\n          const results = map$3(array2, (a2, i3) => prop.extract(path.concat([\"[\" + i3 + \"]\"]), a2));\n          return ResultCombine.consolidateArr(results);\n        };\n        const toString = () => \"array(\" + prop.toString() + \")\";\n        return {\n          extract,\n          toString\n        };\n      };\n      const valueOf = (validator) => value((v2) => validator(v2).fold(SimpleResult.serror, SimpleResult.svalue));\n      const extractValue = (label, prop, obj) => {\n        const res = prop.extract([label], obj);\n        return SimpleResult.mapError(res, (errs) => ({\n          input: obj,\n          errors: errs\n        }));\n      };\n      const asRaw = (label, prop, obj) => SimpleResult.toResult(extractValue(label, prop, obj));\n      const formatError = (errInfo) => {\n        return \"Errors: \\n\" + formatErrors(errInfo.errors).join(\"\\n\") + \"\\n\\nInput object: \" + formatObj(errInfo.input);\n      };\n      const choose = (key, branches) => choose$1(key, map$2(branches, objOf));\n      const anyValue = constant2(anyValue$1);\n      const typedValue = (validator, expectedType) => value((a2) => {\n        const actualType = typeof a2;\n        return validator(a2) ? SimpleResult.svalue(a2) : SimpleResult.serror(`Expected type: ${expectedType} but got: ${actualType}`);\n      });\n      const number = typedValue(isNumber2, \"number\");\n      const string2 = typedValue(isString2, \"string\");\n      const boolean = typedValue(isBoolean2, \"boolean\");\n      const functionProcessor = typedValue(isFunction2, \"function\");\n      const field = field$1;\n      const customField = customField$1;\n      const validateEnum = (values2) => valueOf((value2) => contains$2(values2, value2) ? Result.value(value2) : Result.error(`Unsupported value: \"${value2}\", choose one of \"${values2.join(\", \")}\".`));\n      const requiredOf = (key, schema) => field(key, key, required(), schema);\n      const requiredString = (key) => requiredOf(key, string2);\n      const requiredFunction = (key) => requiredOf(key, functionProcessor);\n      const requiredArrayOf = (key, schema) => field(key, key, required(), arrOf(schema));\n      const optionOf = (key, schema) => field(key, key, asOption(), schema);\n      const optionString = (key) => optionOf(key, string2);\n      const optionFunction = (key) => optionOf(key, functionProcessor);\n      const defaulted = (key, fallback2) => field(key, key, defaulted$1(fallback2), anyValue());\n      const defaultedOf = (key, fallback2, schema) => field(key, key, defaulted$1(fallback2), schema);\n      const defaultedNumber = (key, fallback2) => defaultedOf(key, fallback2, number);\n      const defaultedString = (key, fallback2) => defaultedOf(key, fallback2, string2);\n      const defaultedStringEnum = (key, fallback2, values2) => defaultedOf(key, fallback2, validateEnum(values2));\n      const defaultedBoolean = (key, fallback2) => defaultedOf(key, fallback2, boolean);\n      const defaultedFunction = (key, fallback2) => defaultedOf(key, fallback2, functionProcessor);\n      const defaultedArrayOf = (key, fallback2, schema) => defaultedOf(key, fallback2, arrOf(schema));\n      const type = requiredString(\"type\");\n      const fetch2 = requiredFunction(\"fetch\");\n      const onAction = requiredFunction(\"onAction\");\n      const onSetup = defaultedFunction(\"onSetup\", () => noop);\n      const optionalText = optionString(\"text\");\n      const optionalIcon = optionString(\"icon\");\n      const optionalTooltip = optionString(\"tooltip\");\n      const optionalLabel = optionString(\"label\");\n      const active = defaultedBoolean(\"active\", false);\n      const enabled = defaultedBoolean(\"enabled\", true);\n      const primary = defaultedBoolean(\"primary\", false);\n      const defaultedColumns = (num) => defaulted(\"columns\", num);\n      const defaultedType = (type2) => defaultedString(\"type\", type2);\n      const autocompleterSchema = objOf([\n        type,\n        requiredString(\"ch\"),\n        defaultedNumber(\"minChars\", 1),\n        defaultedColumns(1),\n        defaultedNumber(\"maxResults\", 10),\n        optionFunction(\"matches\"),\n        fetch2,\n        onAction,\n        defaultedArrayOf(\"highlightOn\", [], string2)\n      ]);\n      const createAutocompleter = (spec) => asRaw(\"Autocompleter\", autocompleterSchema, spec);\n      const baseToolbarButtonFields = [\n        enabled,\n        optionalTooltip,\n        optionalIcon,\n        optionalText,\n        onSetup\n      ];\n      const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n      const contextBarFields = [\n        defaultedFunction(\"predicate\", never),\n        defaultedStringEnum(\"scope\", \"node\", [\n          \"node\",\n          \"editor\"\n        ]),\n        defaultedStringEnum(\"position\", \"selection\", [\n          \"node\",\n          \"selection\",\n          \"line\"\n        ])\n      ];\n      const contextButtonFields = baseToolbarButtonFields.concat([\n        defaultedType(\"contextformbutton\"),\n        primary,\n        onAction,\n        customField(\"original\", identity2)\n      ]);\n      const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n        defaultedType(\"contextformbutton\"),\n        primary,\n        onAction,\n        customField(\"original\", identity2)\n      ]);\n      const launchButtonFields = baseToolbarButtonFields.concat([defaultedType(\"contextformbutton\")]);\n      const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaultedType(\"contextformtogglebutton\")]);\n      const toggleOrNormal = choose(\"type\", {\n        contextformbutton: contextButtonFields,\n        contextformtogglebutton: contextToggleButtonFields\n      });\n      objOf([\n        defaultedType(\"contextform\"),\n        defaultedFunction(\"initValue\", constant2(\"\")),\n        optionalLabel,\n        requiredArrayOf(\"commands\", toggleOrNormal),\n        optionOf(\"launch\", choose(\"type\", {\n          contextformbutton: launchButtonFields,\n          contextformtogglebutton: launchToggleButtonFields\n        }))\n      ].concat(contextBarFields));\n      const register$2 = (editor) => {\n        const popups = editor.ui.registry.getAll().popups;\n        const dataset = map$2(popups, (popup) => createAutocompleter(popup).fold((err) => {\n          throw new Error(formatError(err));\n        }, identity2));\n        const triggerChars = stringArray(mapToArray2(dataset, (v2) => v2.ch));\n        const datasetValues = values(dataset);\n        const lookupByChar = (ch) => filter$6(datasetValues, (dv) => dv.ch === ch);\n        return {\n          dataset,\n          triggerChars,\n          lookupByChar\n        };\n      };\n      const setupEditorInput = (editor, api2) => {\n        const update = last$1(api2.load, 50);\n        editor.on(\"keypress compositionend\", (e2) => {\n          if (e2.which === 27) {\n            return;\n          }\n          update.throttle();\n        });\n        editor.on(\"keydown\", (e2) => {\n          const keyCode = e2.which;\n          if (keyCode === 8) {\n            update.throttle();\n          } else if (keyCode === 27) {\n            api2.cancelIfNecessary();\n          }\n        });\n        editor.on(\"remove\", update.cancel);\n      };\n      const setup$j = (editor) => {\n        const activeAutocompleter = value$2();\n        const uiActive = Cell(false);\n        const isActive = activeAutocompleter.isSet;\n        const cancelIfNecessary = () => {\n          if (isActive()) {\n            removeAutocompleterDecoration(editor);\n            fireAutocompleterEnd(editor);\n            uiActive.set(false);\n            activeAutocompleter.clear();\n          }\n        };\n        const commenceIfNecessary = (context2) => {\n          if (!isActive()) {\n            addAutocompleterDecoration(editor, context2.range);\n            activeAutocompleter.set({\n              triggerChar: context2.triggerChar,\n              matchLength: context2.text.length\n            });\n          }\n        };\n        const getAutocompleters = cached(() => register$2(editor));\n        const doLookup = (fetchOptions) => activeAutocompleter.get().map((ac) => getContext(editor.dom, editor.selection.getRng(), ac.triggerChar).bind((newContext) => lookupWithContext(editor, getAutocompleters, newContext, fetchOptions))).getOrThunk(() => lookup(editor, getAutocompleters));\n        const load = (fetchOptions) => {\n          doLookup(fetchOptions).fold(cancelIfNecessary, (lookupInfo) => {\n            commenceIfNecessary(lookupInfo.context);\n            lookupInfo.lookupData.then((lookupData) => {\n              activeAutocompleter.get().map((ac) => {\n                const context2 = lookupInfo.context;\n                if (ac.triggerChar === context2.triggerChar) {\n                  if (context2.text.length - ac.matchLength >= 10) {\n                    cancelIfNecessary();\n                  } else {\n                    activeAutocompleter.set({\n                      ...ac,\n                      matchLength: context2.text.length\n                    });\n                    if (uiActive.get()) {\n                      fireAutocompleterUpdate(editor, { lookupData });\n                    } else {\n                      uiActive.set(true);\n                      fireAutocompleterStart(editor, { lookupData });\n                    }\n                  }\n                }\n              });\n            });\n          });\n        };\n        editor.addCommand(\"mceAutocompleterReload\", (_ui, value2) => {\n          const fetchOptions = isObject2(value2) ? value2.fetchOptions : {};\n          load(fetchOptions);\n        });\n        editor.addCommand(\"mceAutocompleterClose\", cancelIfNecessary);\n        setupEditorInput(editor, {\n          cancelIfNecessary,\n          load\n        });\n      };\n      const createAndFireInputEvent = (eventType) => (editor, inputType, specifics = {}) => {\n        const target = editor.getBody();\n        const overrides = {\n          bubbles: true,\n          composed: true,\n          data: null,\n          isComposing: false,\n          detail: 0,\n          view: null,\n          target,\n          currentTarget: target,\n          eventPhase: Event.AT_TARGET,\n          originalTarget: target,\n          explicitOriginalTarget: target,\n          isTrusted: false,\n          srcElement: target,\n          cancelable: false,\n          preventDefault: noop,\n          inputType\n        };\n        const input = clone$3(new InputEvent(eventType));\n        return editor.dispatch(eventType, {\n          ...input,\n          ...overrides,\n          ...specifics\n        });\n      };\n      const fireFakeInputEvent = createAndFireInputEvent(\"input\");\n      const fireFakeBeforeInputEvent = createAndFireInputEvent(\"beforeinput\");\n      const executeKeydownOverride$3 = (editor, caret, evt) => {\n        const inputType = evt.keyCode === VK.BACKSPACE ? \"deleteContentBackward\" : \"deleteContentForward\";\n        executeWithDelayedAction([\n          {\n            keyCode: VK.BACKSPACE,\n            action: action(backspaceDelete, editor)\n          },\n          {\n            keyCode: VK.BACKSPACE,\n            action: action(backspaceDelete$5, editor, false)\n          },\n          {\n            keyCode: VK.DELETE,\n            action: action(backspaceDelete$5, editor, true)\n          },\n          {\n            keyCode: VK.BACKSPACE,\n            action: action(backspaceDelete$6, editor, false)\n          },\n          {\n            keyCode: VK.DELETE,\n            action: action(backspaceDelete$6, editor, true)\n          },\n          {\n            keyCode: VK.BACKSPACE,\n            action: action(backspaceDelete$3, editor, caret, false)\n          },\n          {\n            keyCode: VK.DELETE,\n            action: action(backspaceDelete$3, editor, caret, true)\n          },\n          {\n            keyCode: VK.BACKSPACE,\n            action: action(backspaceDelete$9, editor, false)\n          },\n          {\n            keyCode: VK.DELETE,\n            action: action(backspaceDelete$9, editor, true)\n          },\n          {\n            keyCode: VK.BACKSPACE,\n            action: action(backspaceDelete$4, editor, false)\n          },\n          {\n            keyCode: VK.DELETE,\n            action: action(backspaceDelete$4, editor, true)\n          },\n          {\n            keyCode: VK.BACKSPACE,\n            action: action(backspaceDelete$1, editor, false)\n          },\n          {\n            keyCode: VK.DELETE,\n            action: action(backspaceDelete$1, editor, true)\n          },\n          {\n            keyCode: VK.BACKSPACE,\n            action: action(backspaceDelete$7, editor, false)\n          },\n          {\n            keyCode: VK.DELETE,\n            action: action(backspaceDelete$7, editor, true)\n          },\n          {\n            keyCode: VK.BACKSPACE,\n            action: action(backspaceDelete$8, editor, false)\n          },\n          {\n            keyCode: VK.DELETE,\n            action: action(backspaceDelete$8, editor, true)\n          },\n          {\n            keyCode: VK.BACKSPACE,\n            action: action(backspaceDelete$2, editor, false)\n          },\n          {\n            keyCode: VK.DELETE,\n            action: action(backspaceDelete$2, editor, true)\n          }\n        ], evt).each((applyAction) => {\n          evt.preventDefault();\n          const beforeInput = fireFakeBeforeInputEvent(editor, inputType);\n          if (!beforeInput.isDefaultPrevented()) {\n            applyAction();\n            fireFakeInputEvent(editor, inputType);\n          }\n        });\n      };\n      const executeKeyupOverride = (editor, evt) => {\n        execute([\n          {\n            keyCode: VK.BACKSPACE,\n            action: action(paddEmptyElement, editor)\n          },\n          {\n            keyCode: VK.DELETE,\n            action: action(paddEmptyElement, editor)\n          }\n        ], evt);\n      };\n      const setup$i = (editor, caret) => {\n        editor.on(\"keydown\", (evt) => {\n          if (evt.isDefaultPrevented() === false) {\n            executeKeydownOverride$3(editor, caret, evt);\n          }\n        });\n        editor.on(\"keyup\", (evt) => {\n          if (evt.isDefaultPrevented() === false) {\n            executeKeyupOverride(editor, evt);\n          }\n        });\n      };\n      const firstNonWhiteSpaceNodeSibling = (node) => {\n        while (node) {\n          if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\\r\\n\\s]/.test(node.data)) {\n            return node;\n          }\n          node = node.nextSibling;\n        }\n      };\n      const moveToCaretPosition = (editor, root2) => {\n        let node, lastNode = root2;\n        const dom3 = editor.dom;\n        const moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n        if (!root2) {\n          return;\n        }\n        if (/^(LI|DT|DD)$/.test(root2.nodeName)) {\n          const firstChild2 = firstNonWhiteSpaceNodeSibling(root2.firstChild);\n          if (firstChild2 && /^(UL|OL|DL)$/.test(firstChild2.nodeName)) {\n            root2.insertBefore(dom3.doc.createTextNode(nbsp), root2.firstChild);\n          }\n        }\n        const rng = dom3.createRng();\n        root2.normalize();\n        if (root2.hasChildNodes()) {\n          const walker = new DomTreeWalker(root2, root2);\n          while (node = walker.current()) {\n            if (isText$8(node)) {\n              rng.setStart(node, 0);\n              rng.setEnd(node, 0);\n              break;\n            }\n            if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n              rng.setStartBefore(node);\n              rng.setEndBefore(node);\n              break;\n            }\n            lastNode = node;\n            node = walker.next();\n          }\n          if (!node) {\n            rng.setStart(lastNode, 0);\n            rng.setEnd(lastNode, 0);\n          }\n        } else {\n          if (isBr$5(root2)) {\n            if (root2.nextSibling && dom3.isBlock(root2.nextSibling)) {\n              rng.setStartBefore(root2);\n              rng.setEndBefore(root2);\n            } else {\n              rng.setStartAfter(root2);\n              rng.setEndAfter(root2);\n            }\n          } else {\n            rng.setStart(root2, 0);\n            rng.setEnd(root2, 0);\n          }\n        }\n        editor.selection.setRng(rng);\n        scrollRangeIntoView(editor, rng);\n      };\n      const getEditableRoot$1 = (dom3, node) => {\n        const root2 = dom3.getRoot();\n        let parent2, editableRoot;\n        parent2 = node;\n        while (parent2 !== root2 && dom3.getContentEditable(parent2) !== \"false\") {\n          if (dom3.getContentEditable(parent2) === \"true\") {\n            editableRoot = parent2;\n          }\n          parent2 = parent2.parentNode;\n        }\n        return parent2 !== root2 ? editableRoot : root2;\n      };\n      const getParentBlock$1 = (editor) => {\n        return Optional.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n      };\n      const getParentBlockName = (editor) => {\n        return getParentBlock$1(editor).fold(constant2(\"\"), (parentBlock) => {\n          return parentBlock.nodeName.toUpperCase();\n        });\n      };\n      const isListItemParentBlock = (editor) => {\n        return getParentBlock$1(editor).filter((elm) => {\n          return isListItem(SugarElement.fromDom(elm));\n        }).isSome();\n      };\n      const hasFirstChild = (elm, name2) => {\n        return elm.firstChild && elm.firstChild.nodeName === name2;\n      };\n      const isFirstChild = (elm) => {\n        var _a3;\n        return ((_a3 = elm.parentNode) === null || _a3 === void 0 ? void 0 : _a3.firstChild) === elm;\n      };\n      const hasParent = (elm, parentName) => {\n        return elm && elm.parentNode && elm.parentNode.nodeName === parentName;\n      };\n      const isListBlock = (elm) => {\n        return elm && /^(OL|UL|LI)$/.test(elm.nodeName);\n      };\n      const isNestedList = (elm) => {\n        return isListBlock(elm) && isListBlock(elm.parentNode);\n      };\n      const getContainerBlock = (containerBlock) => {\n        const containerBlockParent = containerBlock.parentNode;\n        if (/^(LI|DT|DD)$/.test(containerBlockParent.nodeName)) {\n          return containerBlockParent;\n        }\n        return containerBlock;\n      };\n      const isFirstOrLastLi = (containerBlock, parentBlock, first2) => {\n        let node = containerBlock[first2 ? \"firstChild\" : \"lastChild\"];\n        while (node) {\n          if (isElement$6(node)) {\n            break;\n          }\n          node = node[first2 ? \"nextSibling\" : \"previousSibling\"];\n        }\n        return node === parentBlock;\n      };\n      const insert$3 = (editor, createNewBlock, containerBlock, parentBlock, newBlockName) => {\n        const dom3 = editor.dom;\n        const rng = editor.selection.getRng();\n        if (containerBlock === editor.getBody()) {\n          return;\n        }\n        if (isNestedList(containerBlock)) {\n          newBlockName = \"LI\";\n        }\n        let newBlock = createNewBlock(newBlockName);\n        if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n          if (hasParent(containerBlock, \"LI\")) {\n            const containerBlockParent = getContainerBlock(containerBlock);\n            dom3.insertAfter(newBlock, containerBlockParent);\n            if (isFirstChild(containerBlock)) {\n              dom3.remove(containerBlockParent);\n            } else {\n              dom3.remove(containerBlock);\n            }\n          } else {\n            dom3.replace(newBlock, containerBlock);\n          }\n        } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\n          if (hasParent(containerBlock, \"LI\")) {\n            dom3.insertAfter(newBlock, getContainerBlock(containerBlock));\n            newBlock.appendChild(dom3.doc.createTextNode(\" \"));\n            newBlock.appendChild(containerBlock);\n          } else {\n            containerBlock.parentNode.insertBefore(newBlock, containerBlock);\n          }\n          dom3.remove(parentBlock);\n        } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n          dom3.insertAfter(newBlock, getContainerBlock(containerBlock));\n          dom3.remove(parentBlock);\n        } else {\n          containerBlock = getContainerBlock(containerBlock);\n          const tmpRng = rng.cloneRange();\n          tmpRng.setStartAfter(parentBlock);\n          tmpRng.setEndAfter(containerBlock);\n          const fragment = tmpRng.extractContents();\n          if (newBlockName === \"LI\" && hasFirstChild(fragment, \"LI\")) {\n            newBlock = fragment.firstChild;\n            dom3.insertAfter(fragment, containerBlock);\n          } else {\n            dom3.insertAfter(fragment, containerBlock);\n            dom3.insertAfter(newBlock, containerBlock);\n          }\n          dom3.remove(parentBlock);\n        }\n        moveToCaretPosition(editor, newBlock);\n      };\n      const trimZwsp = (fragment) => {\n        each$g(descendants$1(SugarElement.fromDom(fragment), isText$9), (text3) => {\n          const rawNode = text3.dom;\n          rawNode.nodeValue = trim$1(rawNode.nodeValue);\n        });\n      };\n      const isEmptyAnchor = (dom3, elm) => {\n        return elm && elm.nodeName === \"A\" && dom3.isEmpty(elm);\n      };\n      const isTableCell = (node) => {\n        return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n      };\n      const emptyBlock = (elm) => {\n        elm.innerHTML = '<br data-mce-bogus=\"1\">';\n      };\n      const containerAndSiblingName = (container, nodeName) => {\n        return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n      };\n      const canSplitBlock = (dom3, node) => {\n        return node && dom3.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom3.getContentEditable(node) !== \"true\";\n      };\n      const trimInlineElementsOnLeftSideOfBlock = (dom3, nonEmptyElementsMap, block2) => {\n        let node = block2;\n        const firstChilds = [];\n        let i3;\n        if (!node) {\n          return;\n        }\n        while (node = node.firstChild) {\n          if (dom3.isBlock(node)) {\n            return;\n          }\n          if (isElement$6(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n            firstChilds.push(node);\n          }\n        }\n        i3 = firstChilds.length;\n        while (i3--) {\n          node = firstChilds[i3];\n          if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === \"\") {\n            dom3.remove(node);\n          } else {\n            if (isEmptyAnchor(dom3, node)) {\n              dom3.remove(node);\n            }\n          }\n        }\n      };\n      const normalizeZwspOffset = (start2, container, offset) => {\n        if (isText$8(container) === false) {\n          return offset;\n        } else if (start2) {\n          return offset === 1 && container.data.charAt(offset - 1) === ZWSP$1 ? 0 : offset;\n        } else {\n          return offset === container.data.length - 1 && container.data.charAt(offset) === ZWSP$1 ? container.data.length : offset;\n        }\n      };\n      const includeZwspInRange = (rng) => {\n        const newRng = rng.cloneRange();\n        newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n        newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n        return newRng;\n      };\n      const trimLeadingLineBreaks = (node) => {\n        do {\n          if (isText$8(node)) {\n            node.nodeValue = node.nodeValue.replace(/^[\\r\\n]+/, \"\");\n          }\n          node = node.firstChild;\n        } while (node);\n      };\n      const getEditableRoot = (dom3, node) => {\n        const root2 = dom3.getRoot();\n        let parent2, editableRoot;\n        parent2 = node;\n        while (parent2 !== root2 && dom3.getContentEditable(parent2) !== \"false\") {\n          if (dom3.getContentEditable(parent2) === \"true\") {\n            editableRoot = parent2;\n          }\n          parent2 = parent2.parentNode;\n        }\n        return parent2 !== root2 ? editableRoot : root2;\n      };\n      const applyAttributes = (editor, node, forcedRootBlockAttrs) => {\n        const dom3 = editor.dom;\n        Optional.from(forcedRootBlockAttrs.style).map(dom3.parseStyle).each((attrStyles) => {\n          const currentStyles = getAllRaw(SugarElement.fromDom(node));\n          const newStyles = {\n            ...currentStyles,\n            ...attrStyles\n          };\n          dom3.setStyles(node, newStyles);\n        });\n        const attrClassesOpt = Optional.from(forcedRootBlockAttrs.class).map((attrClasses) => attrClasses.split(/\\s+/));\n        const currentClassesOpt = Optional.from(node.className).map((currentClasses) => filter$6(currentClasses.split(/\\s+/), (clazz) => clazz !== \"\"));\n        lift2(attrClassesOpt, currentClassesOpt, (attrClasses, currentClasses) => {\n          const filteredClasses = filter$6(currentClasses, (clazz) => !contains$2(attrClasses, clazz));\n          const newClasses = [\n            ...attrClasses,\n            ...filteredClasses\n          ];\n          dom3.setAttrib(node, \"class\", newClasses.join(\" \"));\n        });\n        const appliedAttrs = [\n          \"style\",\n          \"class\"\n        ];\n        const remainingAttrs = filter$5(forcedRootBlockAttrs, (_2, attrs) => !contains$2(appliedAttrs, attrs));\n        dom3.setAttribs(node, remainingAttrs);\n      };\n      const setForcedBlockAttrs = (editor, node) => {\n        const forcedRootBlockName = getForcedRootBlock(editor);\n        if (forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n          const forcedRootBlockAttrs = getForcedRootBlockAttrs(editor);\n          applyAttributes(editor, node, forcedRootBlockAttrs);\n        }\n      };\n      const wrapSelfAndSiblingsInDefaultBlock = (editor, newBlockName, rng, container, offset) => {\n        let newBlock, parentBlock, startNode, node, next2, rootBlockName;\n        const dom3 = editor.dom, editableRoot = getEditableRoot(dom3, container);\n        parentBlock = dom3.getParent(container, dom3.isBlock);\n        if (!parentBlock || !canSplitBlock(dom3, parentBlock)) {\n          parentBlock = parentBlock || editableRoot;\n          if (parentBlock === editor.getBody() || isTableCell(parentBlock)) {\n            rootBlockName = parentBlock.nodeName.toLowerCase();\n          } else {\n            rootBlockName = parentBlock.parentNode.nodeName.toLowerCase();\n          }\n          if (!parentBlock.hasChildNodes()) {\n            newBlock = dom3.create(newBlockName);\n            setForcedBlockAttrs(editor, newBlock);\n            parentBlock.appendChild(newBlock);\n            rng.setStart(newBlock, 0);\n            rng.setEnd(newBlock, 0);\n            return newBlock;\n          }\n          node = container;\n          while (node.parentNode !== parentBlock) {\n            node = node.parentNode;\n          }\n          while (node && !dom3.isBlock(node)) {\n            startNode = node;\n            node = node.previousSibling;\n          }\n          if (startNode && editor.schema.isValidChild(rootBlockName, newBlockName.toLowerCase())) {\n            newBlock = dom3.create(newBlockName);\n            setForcedBlockAttrs(editor, newBlock);\n            startNode.parentNode.insertBefore(newBlock, startNode);\n            node = startNode;\n            while (node && !dom3.isBlock(node)) {\n              next2 = node.nextSibling;\n              newBlock.appendChild(node);\n              node = next2;\n            }\n            rng.setStart(container, offset);\n            rng.setEnd(container, offset);\n          }\n        }\n        return container;\n      };\n      const addBrToBlockIfNeeded = (dom3, block2) => {\n        block2.normalize();\n        const lastChild2 = block2.lastChild;\n        if (!lastChild2 || /^(left|right)$/gi.test(dom3.getStyle(lastChild2, \"float\", true))) {\n          dom3.add(block2, \"br\");\n        }\n      };\n      const insert$2 = (editor, evt) => {\n        let tmpRng, container, offset, parentBlock;\n        let newBlock, fragment, containerBlock, parentBlockName, isAfterLastNodeInContainer;\n        const dom3 = editor.dom;\n        const schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n        const rng = editor.selection.getRng();\n        const newBlockName = getForcedRootBlock(editor);\n        const createNewBlock = (name2) => {\n          let node = container, block2, clonedNode, caretNode;\n          const textInlineElements = schema.getTextInlineElements();\n          if (name2 || parentBlockName === \"TABLE\" || parentBlockName === \"HR\") {\n            block2 = dom3.create(name2 || newBlockName);\n          } else {\n            block2 = parentBlock.cloneNode(false);\n          }\n          caretNode = block2;\n          if (shouldKeepStyles(editor) === false) {\n            dom3.setAttrib(block2, \"style\", null);\n            dom3.setAttrib(block2, \"class\", null);\n          } else {\n            do {\n              if (textInlineElements[node.nodeName]) {\n                if (isCaretNode(node) || isBookmarkNode$1(node)) {\n                  continue;\n                }\n                clonedNode = node.cloneNode(false);\n                dom3.setAttrib(clonedNode, \"id\", \"\");\n                if (block2.hasChildNodes()) {\n                  clonedNode.appendChild(block2.firstChild);\n                  block2.appendChild(clonedNode);\n                } else {\n                  caretNode = clonedNode;\n                  block2.appendChild(clonedNode);\n                }\n              }\n            } while ((node = node.parentNode) && node !== editableRoot);\n          }\n          setForcedBlockAttrs(editor, block2);\n          emptyBlock(caretNode);\n          return block2;\n        };\n        const isCaretAtStartOrEndOfBlock = (start2) => {\n          let node, name2;\n          const normalizedOffset = normalizeZwspOffset(start2, container, offset);\n          if (isText$8(container) && (start2 ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {\n            return false;\n          }\n          if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start2) {\n            return true;\n          }\n          if (start2 && isElement$6(container) && container === parentBlock.firstChild) {\n            return true;\n          }\n          if (containerAndSiblingName(container, \"TABLE\") || containerAndSiblingName(container, \"HR\")) {\n            return isAfterLastNodeInContainer && !start2 || !isAfterLastNodeInContainer && start2;\n          }\n          const walker = new DomTreeWalker(container, parentBlock);\n          if (isText$8(container)) {\n            if (start2 && normalizedOffset === 0) {\n              walker.prev();\n            } else if (!start2 && normalizedOffset === container.nodeValue.length) {\n              walker.next();\n            }\n          }\n          while (node = walker.current()) {\n            if (isElement$6(node)) {\n              if (!node.getAttribute(\"data-mce-bogus\")) {\n                name2 = node.nodeName.toLowerCase();\n                if (nonEmptyElementsMap[name2] && name2 !== \"br\") {\n                  return false;\n                }\n              }\n            } else if (isText$8(node) && !isWhitespaceText(node.nodeValue)) {\n              return false;\n            }\n            if (start2) {\n              walker.prev();\n            } else {\n              walker.next();\n            }\n          }\n          return true;\n        };\n        const insertNewBlockAfter = () => {\n          if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== \"HGROUP\") {\n            newBlock = createNewBlock(newBlockName);\n          } else {\n            newBlock = createNewBlock();\n          }\n          if (shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom3, containerBlock) && dom3.isEmpty(parentBlock)) {\n            newBlock = dom3.split(containerBlock, parentBlock);\n          } else {\n            dom3.insertAfter(newBlock, parentBlock);\n          }\n          moveToCaretPosition(editor, newBlock);\n        };\n        normalize$22(dom3, rng).each((normRng) => {\n          rng.setStart(normRng.startContainer, normRng.startOffset);\n          rng.setEnd(normRng.endContainer, normRng.endOffset);\n        });\n        container = rng.startContainer;\n        offset = rng.startOffset;\n        const shiftKey = !!(evt && evt.shiftKey);\n        const ctrlKey = !!(evt && evt.ctrlKey);\n        if (isElement$6(container) && container.hasChildNodes()) {\n          isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n          container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n          if (isAfterLastNodeInContainer && isText$8(container)) {\n            offset = container.nodeValue.length;\n          } else {\n            offset = 0;\n          }\n        }\n        const editableRoot = getEditableRoot(dom3, container);\n        if (!editableRoot) {\n          return;\n        }\n        if (!shiftKey) {\n          container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n        }\n        parentBlock = dom3.getParent(container, dom3.isBlock);\n        containerBlock = parentBlock ? dom3.getParent(parentBlock.parentNode, dom3.isBlock) : null;\n        parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : \"\";\n        const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : \"\";\n        if (containerBlockName === \"LI\" && !ctrlKey) {\n          parentBlock = containerBlock;\n          containerBlock = containerBlock.parentNode;\n          parentBlockName = containerBlockName;\n        }\n        if (/^(LI|DT|DD)$/.test(parentBlockName)) {\n          if (dom3.isEmpty(parentBlock)) {\n            insert$3(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\n            return;\n          }\n        }\n        if (parentBlock === editor.getBody()) {\n          return;\n        }\n        if (isCaretContainerBlock$1(parentBlock)) {\n          newBlock = showCaretContainerBlock(parentBlock);\n          if (dom3.isEmpty(parentBlock)) {\n            emptyBlock(parentBlock);\n          }\n          setForcedBlockAttrs(editor, newBlock);\n          moveToCaretPosition(editor, newBlock);\n        } else if (isCaretAtStartOrEndOfBlock()) {\n          insertNewBlockAfter();\n        } else if (isCaretAtStartOrEndOfBlock(true)) {\n          newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);\n          moveToCaretPosition(editor, containerAndSiblingName(parentBlock, \"HR\") ? newBlock : parentBlock);\n        } else {\n          tmpRng = includeZwspInRange(rng).cloneRange();\n          tmpRng.setEndAfter(parentBlock);\n          fragment = tmpRng.extractContents();\n          trimZwsp(fragment);\n          trimLeadingLineBreaks(fragment);\n          newBlock = fragment.firstChild;\n          dom3.insertAfter(fragment, parentBlock);\n          trimInlineElementsOnLeftSideOfBlock(dom3, nonEmptyElementsMap, newBlock);\n          addBrToBlockIfNeeded(dom3, parentBlock);\n          if (dom3.isEmpty(parentBlock)) {\n            emptyBlock(parentBlock);\n          }\n          newBlock.normalize();\n          if (dom3.isEmpty(newBlock)) {\n            dom3.remove(newBlock);\n            insertNewBlockAfter();\n          } else {\n            setForcedBlockAttrs(editor, newBlock);\n            moveToCaretPosition(editor, newBlock);\n          }\n        }\n        dom3.setAttrib(newBlock, \"id\", \"\");\n        editor.dispatch(\"NewBlock\", { newBlock });\n      };\n      const hasRightSideContent = (schema, container, parentBlock) => {\n        const walker = new DomTreeWalker(container, parentBlock);\n        let node;\n        const nonEmptyElementsMap = schema.getNonEmptyElements();\n        while (node = walker.next()) {\n          if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {\n            return true;\n          }\n        }\n      };\n      const moveSelectionToBr = (editor, brElm, extraBr) => {\n        const rng = editor.dom.createRng();\n        if (!extraBr) {\n          rng.setStartAfter(brElm);\n          rng.setEndAfter(brElm);\n        } else {\n          rng.setStartBefore(brElm);\n          rng.setEndBefore(brElm);\n        }\n        editor.selection.setRng(rng);\n        scrollRangeIntoView(editor, rng);\n      };\n      const insertBrAtCaret = (editor, evt) => {\n        const selection = editor.selection;\n        const dom3 = editor.dom;\n        const rng = selection.getRng();\n        let brElm;\n        let extraBr;\n        normalize$22(dom3, rng).each((normRng) => {\n          rng.setStart(normRng.startContainer, normRng.startOffset);\n          rng.setEnd(normRng.endContainer, normRng.endOffset);\n        });\n        let offset = rng.startOffset;\n        let container = rng.startContainer;\n        if (container.nodeType === 1 && container.hasChildNodes()) {\n          const isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n          container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n          if (isAfterLastNodeInContainer && container.nodeType === 3) {\n            offset = container.nodeValue.length;\n          } else {\n            offset = 0;\n          }\n        }\n        let parentBlock = dom3.getParent(container, dom3.isBlock);\n        const containerBlock = parentBlock ? dom3.getParent(parentBlock.parentNode, dom3.isBlock) : null;\n        const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : \"\";\n        const isControlKey = !!(evt && evt.ctrlKey);\n        if (containerBlockName === \"LI\" && !isControlKey) {\n          parentBlock = containerBlock;\n        }\n        if (container && container.nodeType === 3 && offset >= container.nodeValue.length) {\n          if (!hasRightSideContent(editor.schema, container, parentBlock)) {\n            brElm = dom3.create(\"br\");\n            rng.insertNode(brElm);\n            rng.setStartAfter(brElm);\n            rng.setEndAfter(brElm);\n            extraBr = true;\n          }\n        }\n        brElm = dom3.create(\"br\");\n        rangeInsertNode(dom3, rng, brElm);\n        moveSelectionToBr(editor, brElm, extraBr);\n        editor.undoManager.add();\n      };\n      const insertBrBefore = (editor, inline2) => {\n        const br = SugarElement.fromTag(\"br\");\n        before$3(SugarElement.fromDom(inline2), br);\n        editor.undoManager.add();\n      };\n      const insertBrAfter = (editor, inline2) => {\n        if (!hasBrAfter(editor.getBody(), inline2)) {\n          after$4(SugarElement.fromDom(inline2), SugarElement.fromTag(\"br\"));\n        }\n        const br = SugarElement.fromTag(\"br\");\n        after$4(SugarElement.fromDom(inline2), br);\n        moveSelectionToBr(editor, br.dom, false);\n        editor.undoManager.add();\n      };\n      const isBeforeBr = (pos) => {\n        return isBr$5(pos.getNode());\n      };\n      const hasBrAfter = (rootNode, startNode) => {\n        if (isBeforeBr(CaretPosition.after(startNode))) {\n          return true;\n        } else {\n          return nextPosition(rootNode, CaretPosition.after(startNode)).map((pos) => {\n            return isBr$5(pos.getNode());\n          }).getOr(false);\n        }\n      };\n      const isAnchorLink = (elm) => {\n        return elm && elm.nodeName === \"A\" && \"href\" in elm;\n      };\n      const isInsideAnchor = (location2) => {\n        return location2.fold(never, isAnchorLink, isAnchorLink, never);\n      };\n      const readInlineAnchorLocation = (editor) => {\n        const isInlineTarget$1 = curry(isInlineTarget, editor);\n        const position = CaretPosition.fromRangeStart(editor.selection.getRng());\n        return readLocation(isInlineTarget$1, editor.getBody(), position).filter(isInsideAnchor);\n      };\n      const insertBrOutsideAnchor = (editor, location2) => {\n        location2.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n      };\n      const insert$1 = (editor, evt) => {\n        const anchorLocation = readInlineAnchorLocation(editor);\n        if (anchorLocation.isSome()) {\n          anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n        } else {\n          insertBrAtCaret(editor, evt);\n        }\n      };\n      const matchesSelector = (editor, selector) => {\n        return getParentBlock$1(editor).filter((parentBlock) => {\n          return selector.length > 0 && is$1(SugarElement.fromDom(parentBlock), selector);\n        }).isSome();\n      };\n      const shouldInsertBr = (editor) => {\n        return matchesSelector(editor, getBrNewLineSelector(editor));\n      };\n      const shouldBlockNewLine$1 = (editor) => {\n        return matchesSelector(editor, getNoNewLineSelector(editor));\n      };\n      const newLineAction = Adt.generate([\n        { br: [] },\n        { block: [] },\n        { none: [] }\n      ]);\n      const shouldBlockNewLine = (editor, _shiftKey) => {\n        return shouldBlockNewLine$1(editor);\n      };\n      const inListBlock = (requiredState) => {\n        return (editor, _shiftKey) => {\n          return isListItemParentBlock(editor) === requiredState;\n        };\n      };\n      const inBlock = (blockName, requiredState) => (editor, _shiftKey) => {\n        const state = getParentBlockName(editor) === blockName.toUpperCase();\n        return state === requiredState;\n      };\n      const inPreBlock = (requiredState) => inBlock(\"pre\", requiredState);\n      const inSummaryBlock = () => inBlock(\"summary\", true);\n      const shouldPutBrInPre = (requiredState) => {\n        return (editor, _shiftKey) => {\n          return shouldPutBrInPre$1(editor) === requiredState;\n        };\n      };\n      const inBrContext = (editor, _shiftKey) => {\n        return shouldInsertBr(editor);\n      };\n      const hasShiftKey = (_editor, shiftKey) => {\n        return shiftKey;\n      };\n      const canInsertIntoEditableRoot = (editor) => {\n        const forcedRootBlock = getForcedRootBlock(editor);\n        const rootEditable = getEditableRoot$1(editor.dom, editor.selection.getStart());\n        return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock);\n      };\n      const match3 = (predicates, action2) => {\n        return (editor, shiftKey) => {\n          const isMatch = foldl(predicates, (res, p2) => {\n            return res && p2(editor, shiftKey);\n          }, true);\n          return isMatch ? Optional.some(action2) : Optional.none();\n        };\n      };\n      const getAction = (editor, evt) => {\n        return evaluateUntil([\n          match3([shouldBlockNewLine], newLineAction.none()),\n          match3([inSummaryBlock()], newLineAction.br()),\n          match3([\n            inPreBlock(true),\n            shouldPutBrInPre(false),\n            hasShiftKey\n          ], newLineAction.br()),\n          match3([\n            inPreBlock(true),\n            shouldPutBrInPre(false)\n          ], newLineAction.block()),\n          match3([\n            inPreBlock(true),\n            shouldPutBrInPre(true),\n            hasShiftKey\n          ], newLineAction.block()),\n          match3([\n            inPreBlock(true),\n            shouldPutBrInPre(true)\n          ], newLineAction.br()),\n          match3([\n            inListBlock(true),\n            hasShiftKey\n          ], newLineAction.br()),\n          match3([inListBlock(true)], newLineAction.block()),\n          match3([inBrContext], newLineAction.br()),\n          match3([hasShiftKey], newLineAction.br()),\n          match3([canInsertIntoEditableRoot], newLineAction.block())\n        ], [\n          editor,\n          !!(evt && evt.shiftKey)\n        ]).getOr(newLineAction.none());\n      };\n      const insert = (editor, evt) => {\n        getAction(editor, evt).fold(() => {\n          if (isNonNullable(evt)) {\n            const event = fireFakeBeforeInputEvent(editor, \"insertLineBreak\");\n            if (event.isDefaultPrevented()) {\n              return;\n            }\n          }\n          insert$1(editor, evt);\n          if (isNonNullable(evt)) {\n            fireFakeInputEvent(editor, \"insertLineBreak\");\n          }\n        }, () => {\n          if (isNonNullable(evt)) {\n            const event = fireFakeBeforeInputEvent(editor, \"insertParagraph\");\n            if (event.isDefaultPrevented()) {\n              return;\n            }\n          }\n          insert$2(editor, evt);\n          if (isNonNullable(evt)) {\n            fireFakeInputEvent(editor, \"insertParagraph\");\n          }\n        }, noop);\n      };\n      const handleEnterKeyEvent = (editor, event) => {\n        if (event.isDefaultPrevented()) {\n          return;\n        }\n        event.preventDefault();\n        endTypingLevelIgnoreLocks(editor.undoManager);\n        editor.undoManager.transact(() => {\n          if (editor.selection.isCollapsed() === false) {\n            execDeleteCommand(editor);\n          }\n          insert(editor, event);\n        });\n      };\n      const setup$h = (editor) => {\n        editor.on(\"keydown\", (event) => {\n          if (event.keyCode === VK.ENTER) {\n            handleEnterKeyEvent(editor, event);\n          }\n        });\n      };\n      const executeKeydownOverride$2 = (editor, caret, evt) => {\n        execute([\n          {\n            keyCode: VK.END,\n            action: action(moveToLineEndPoint$1, editor, true)\n          },\n          {\n            keyCode: VK.HOME,\n            action: action(moveToLineEndPoint$1, editor, false)\n          },\n          {\n            keyCode: VK.END,\n            action: action(moveToLineEndPoint, editor, true)\n          },\n          {\n            keyCode: VK.HOME,\n            action: action(moveToLineEndPoint, editor, false)\n          },\n          {\n            keyCode: VK.END,\n            action: action(moveToLineEndPoint$2, editor, true, caret)\n          },\n          {\n            keyCode: VK.HOME,\n            action: action(moveToLineEndPoint$2, editor, false, caret)\n          }\n        ], evt).each((_2) => {\n          evt.preventDefault();\n        });\n      };\n      const setup$g = (editor, caret) => {\n        editor.on(\"keydown\", (evt) => {\n          if (evt.isDefaultPrevented() === false) {\n            executeKeydownOverride$2(editor, caret, evt);\n          }\n        });\n      };\n      const setup$f = (editor) => {\n        editor.on(\"input\", (e2) => {\n          if (e2.isComposing === false) {\n            normalizeNbspsInEditor(editor);\n          }\n        });\n      };\n      const platform = detect$2();\n      const executeKeyupAction = (editor, caret, evt) => {\n        execute([\n          {\n            keyCode: VK.PAGE_UP,\n            action: action(moveToLineEndPoint$2, editor, false, caret)\n          },\n          {\n            keyCode: VK.PAGE_DOWN,\n            action: action(moveToLineEndPoint$2, editor, true, caret)\n          }\n        ], evt);\n      };\n      const stopImmediatePropagation = (e2) => e2.stopImmediatePropagation();\n      const isPageUpDown = (evt) => evt.keyCode === VK.PAGE_UP || evt.keyCode === VK.PAGE_DOWN;\n      const setNodeChangeBlocker = (blocked, editor, block2) => {\n        if (block2 && !blocked.get()) {\n          editor.on(\"NodeChange\", stopImmediatePropagation, true);\n        } else if (!block2 && blocked.get()) {\n          editor.off(\"NodeChange\", stopImmediatePropagation);\n        }\n        blocked.set(block2);\n      };\n      const setup$e = (editor, caret) => {\n        if (platform.os.isMacOS()) {\n          return;\n        }\n        const blocked = Cell(false);\n        editor.on(\"keydown\", (evt) => {\n          if (isPageUpDown(evt)) {\n            setNodeChangeBlocker(blocked, editor, true);\n          }\n        });\n        editor.on(\"keyup\", (evt) => {\n          if (evt.isDefaultPrevented() === false) {\n            executeKeyupAction(editor, caret, evt);\n          }\n          if (isPageUpDown(evt) && blocked.get()) {\n            setNodeChangeBlocker(blocked, editor, false);\n            editor.nodeChanged();\n          }\n        });\n      };\n      const insertTextAtPosition = (text3, pos) => {\n        const container = pos.container();\n        const offset = pos.offset();\n        if (isText$8(container)) {\n          container.insertData(offset, text3);\n          return Optional.some(CaretPosition(container, offset + text3.length));\n        } else {\n          return getElementFromPosition(pos).map((elm) => {\n            const textNode = SugarElement.fromText(text3);\n            if (pos.isAtEnd()) {\n              after$4(elm, textNode);\n            } else {\n              before$3(elm, textNode);\n            }\n            return CaretPosition(textNode.dom, text3.length);\n          });\n        }\n      };\n      const insertNbspAtPosition = curry(insertTextAtPosition, nbsp);\n      const insertSpaceAtPosition = curry(insertTextAtPosition, \" \");\n      const locationToCaretPosition = (root2) => (location2) => location2.fold((element) => prevPosition(root2.dom, CaretPosition.before(element)), (element) => firstPositionIn(element), (element) => lastPositionIn(element), (element) => nextPosition(root2.dom, CaretPosition.after(element)));\n      const insertInlineBoundarySpaceOrNbsp = (root2, pos) => (checkPos) => needsToHaveNbsp(root2, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n      const setSelection = (editor) => (pos) => {\n        editor.selection.setRng(pos.toRange());\n        editor.nodeChanged();\n        return true;\n      };\n      const insertSpaceOrNbspAtSelection = (editor) => {\n        const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n        const root2 = SugarElement.fromDom(editor.getBody());\n        if (editor.selection.isCollapsed()) {\n          const isInlineTarget$1 = curry(isInlineTarget, editor);\n          const caretPosition = CaretPosition.fromRangeStart(editor.selection.getRng());\n          return readLocation(isInlineTarget$1, editor.getBody(), caretPosition).bind(locationToCaretPosition(root2)).map((checkPos) => () => insertInlineBoundarySpaceOrNbsp(root2, pos)(checkPos).each(setSelection(editor)));\n        } else {\n          return Optional.none();\n        }\n      };\n      const executeKeydownOverride$1 = (editor, evt) => {\n        executeWithDelayedAction([{\n          keyCode: VK.SPACEBAR,\n          action: action(insertSpaceOrNbspAtSelection, editor)\n        }], evt).each((applyAction) => {\n          evt.preventDefault();\n          const event = fireFakeBeforeInputEvent(editor, \"insertText\", { data: \" \" });\n          if (!event.isDefaultPrevented()) {\n            applyAction();\n            fireFakeInputEvent(editor, \"insertText\", { data: \" \" });\n          }\n        });\n      };\n      const setup$d = (editor) => {\n        editor.on(\"keydown\", (evt) => {\n          if (evt.isDefaultPrevented() === false) {\n            executeKeydownOverride$1(editor, evt);\n          }\n        });\n      };\n      const tableTabNavigation = (editor) => {\n        if (hasTableTabNavigation(editor)) {\n          return [\n            {\n              keyCode: VK.TAB,\n              action: action(handleTab, editor, true)\n            },\n            {\n              keyCode: VK.TAB,\n              shiftKey: true,\n              action: action(handleTab, editor, false)\n            }\n          ];\n        } else {\n          return [];\n        }\n      };\n      const executeKeydownOverride = (editor, evt) => {\n        execute([...tableTabNavigation(editor)], evt).each((_2) => {\n          evt.preventDefault();\n        });\n      };\n      const setup$c = (editor) => {\n        editor.on(\"keydown\", (evt) => {\n          if (evt.isDefaultPrevented() === false) {\n            executeKeydownOverride(editor, evt);\n          }\n        });\n      };\n      const setup$b = (editor) => {\n        editor.addShortcut(\"Meta+P\", \"\", \"mcePrint\");\n        setup$j(editor);\n        if (isRtc(editor)) {\n          return Cell(null);\n        } else {\n          const caret = setupSelectedState(editor);\n          setup$l(editor);\n          setup$k(editor, caret);\n          setup$i(editor, caret);\n          setup$h(editor);\n          setup$d(editor);\n          setup$f(editor);\n          setup$c(editor);\n          setup$g(editor, caret);\n          setup$e(editor, caret);\n          return caret;\n        }\n      };\n      class NodeChange {\n        constructor(editor) {\n          this.lastPath = [];\n          this.editor = editor;\n          let lastRng;\n          const self2 = this;\n          if (!(\"onselectionchange\" in editor.getDoc())) {\n            editor.on(\"NodeChange click mouseup keyup focus\", (e2) => {\n              const nativeRng = editor.selection.getRng();\n              const fakeRng = {\n                startContainer: nativeRng.startContainer,\n                startOffset: nativeRng.startOffset,\n                endContainer: nativeRng.endContainer,\n                endOffset: nativeRng.endOffset\n              };\n              if (e2.type === \"nodechange\" || !isEq$4(fakeRng, lastRng)) {\n                editor.dispatch(\"SelectionChange\");\n              }\n              lastRng = fakeRng;\n            });\n          }\n          editor.on(\"contextmenu\", () => {\n            editor.dispatch(\"SelectionChange\");\n          });\n          editor.on(\"SelectionChange\", () => {\n            const startElm = editor.selection.getStart(true);\n            if (!startElm) {\n              return;\n            }\n            if (hasAnyRanges(editor) && !self2.isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n              editor.nodeChanged({ selectionChange: true });\n            }\n          });\n          editor.on(\"mouseup\", (e2) => {\n            if (!e2.isDefaultPrevented() && hasAnyRanges(editor)) {\n              if (editor.selection.getNode().nodeName === \"IMG\") {\n                Delay.setEditorTimeout(editor, () => {\n                  editor.nodeChanged();\n                });\n              } else {\n                editor.nodeChanged();\n              }\n            }\n          });\n        }\n        nodeChanged(args) {\n          const selection = this.editor.selection;\n          let node, parents2, root2;\n          if (this.editor.initialized && selection && !shouldDisableNodeChange(this.editor) && !this.editor.mode.isReadOnly()) {\n            root2 = this.editor.getBody();\n            node = selection.getStart(true) || root2;\n            if (node.ownerDocument !== this.editor.getDoc() || !this.editor.dom.isChildOf(node, root2)) {\n              node = root2;\n            }\n            parents2 = [];\n            this.editor.dom.getParent(node, (node2) => {\n              if (node2 === root2) {\n                return true;\n              }\n              parents2.push(node2);\n            });\n            args = args || {};\n            args.element = node;\n            args.parents = parents2;\n            this.editor.dispatch(\"NodeChange\", args);\n          }\n        }\n        isSameElementPath(startElm) {\n          let i3;\n          const editor = this.editor;\n          const currentPath = reverse(editor.dom.getParents(startElm, always, editor.getBody()));\n          if (currentPath.length === this.lastPath.length) {\n            for (i3 = currentPath.length; i3 >= 0; i3--) {\n              if (currentPath[i3] !== this.lastPath[i3]) {\n                break;\n              }\n            }\n            if (i3 === -1) {\n              this.lastPath = currentPath;\n              return true;\n            }\n          }\n          this.lastPath = currentPath;\n          return false;\n        }\n      }\n      const internalMimeType = \"x-tinymce/html\";\n      const internalHtmlMime = constant2(internalMimeType);\n      const internalMark = \"<!-- \" + internalMimeType + \" -->\";\n      const mark = (html2) => internalMark + html2;\n      const unmark = (html2) => html2.replace(internalMark, \"\");\n      const isMarked = (html2) => html2.indexOf(internalMark) !== -1;\n      const isPlainText = (text3) => {\n        return !/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(text3);\n      };\n      const openContainer = (rootTag, rootAttrs) => {\n        let tag = \"<\" + rootTag;\n        const attrs = mapToArray2(rootAttrs, (value2, key) => key + '=\"' + Entities.encodeAllRaw(value2) + '\"');\n        if (attrs.length) {\n          tag += \" \" + attrs.join(\" \");\n        }\n        return tag + \">\";\n      };\n      const toBlockElements = (text3, rootTag, rootAttrs) => {\n        const blocks2 = text3.split(/\\n\\n/);\n        const tagOpen = openContainer(rootTag, rootAttrs);\n        const tagClose = \"</\" + rootTag + \">\";\n        const paragraphs = map$3(blocks2, (p2) => {\n          return p2.split(/\\n/).join(\"<br />\");\n        });\n        const stitch = (p2) => {\n          return tagOpen + p2 + tagClose;\n        };\n        return paragraphs.length === 1 ? paragraphs[0] : map$3(paragraphs, stitch).join(\"\");\n      };\n      const pasteBinDefaultContent = \"%MCEPASTEBIN%\";\n      const create$6 = (editor, lastRngCell) => {\n        const { dom: dom3, selection } = editor;\n        const body = editor.getBody();\n        lastRngCell.set(selection.getRng());\n        const pasteBinElm = dom3.add(editor.getBody(), \"div\", {\n          \"id\": \"mcepastebin\",\n          \"class\": \"mce-pastebin\",\n          \"contentEditable\": true,\n          \"data-mce-bogus\": \"all\",\n          \"style\": \"position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0\"\n        }, pasteBinDefaultContent);\n        if (Env.browser.isFirefox()) {\n          dom3.setStyle(pasteBinElm, \"left\", dom3.getStyle(body, \"direction\", true) === \"rtl\" ? 65535 : -65535);\n        }\n        dom3.bind(pasteBinElm, \"beforedeactivate focusin focusout\", (e2) => {\n          e2.stopPropagation();\n        });\n        pasteBinElm.focus();\n        selection.select(pasteBinElm, true);\n      };\n      const remove2 = (editor, lastRngCell) => {\n        const dom3 = editor.dom;\n        if (getEl(editor)) {\n          let pasteBinClone;\n          const lastRng = lastRngCell.get();\n          while (pasteBinClone = getEl(editor)) {\n            dom3.remove(pasteBinClone);\n            dom3.unbind(pasteBinClone);\n          }\n          if (lastRng) {\n            editor.selection.setRng(lastRng);\n          }\n        }\n        lastRngCell.set(null);\n      };\n      const getEl = (editor) => editor.dom.get(\"mcepastebin\");\n      const isPasteBin = (elm) => elm && elm.id === \"mcepastebin\";\n      const getHtml = (editor) => {\n        const dom3 = editor.dom;\n        const copyAndRemove = (toElm, fromElm) => {\n          toElm.appendChild(fromElm);\n          dom3.remove(fromElm, true);\n        };\n        const [pasteBinElm, ...pasteBinClones] = filter$6(editor.getBody().childNodes, isPasteBin);\n        each$g(pasteBinClones, (pasteBinClone) => {\n          copyAndRemove(pasteBinElm, pasteBinClone);\n        });\n        const dirtyWrappers = dom3.select(\"div[id=mcepastebin]\", pasteBinElm);\n        for (let i3 = dirtyWrappers.length - 1; i3 >= 0; i3--) {\n          const cleanWrapper = dom3.create(\"div\");\n          pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i3]);\n          copyAndRemove(cleanWrapper, dirtyWrappers[i3]);\n        }\n        return pasteBinElm ? pasteBinElm.innerHTML : \"\";\n      };\n      const isDefaultPasteBinContent = (content) => content === pasteBinDefaultContent;\n      const PasteBin = (editor) => {\n        const lastRng = Cell(null);\n        return {\n          create: () => create$6(editor, lastRng),\n          remove: () => remove2(editor, lastRng),\n          getEl: () => getEl(editor),\n          getHtml: () => getHtml(editor),\n          getLastRng: lastRng.get\n        };\n      };\n      const filter = (content, items) => {\n        Tools.each(items, (v2) => {\n          if (is$4(v2, RegExp)) {\n            content = content.replace(v2, \"\");\n          } else {\n            content = content.replace(v2[0], v2[1]);\n          }\n        });\n        return content;\n      };\n      const innerText = (html2) => {\n        const schema = Schema();\n        const domParser = DomParser({}, schema);\n        let text3 = \"\";\n        const voidElements = schema.getVoidElements();\n        const ignoreElements = Tools.makeMap(\"script noscript style textarea video audio iframe object\", \" \");\n        const blockElements = schema.getBlockElements();\n        const walk2 = (node) => {\n          const name2 = node.name, currentNode = node;\n          if (name2 === \"br\") {\n            text3 += \"\\n\";\n            return;\n          }\n          if (name2 === \"wbr\") {\n            return;\n          }\n          if (voidElements[name2]) {\n            text3 += \" \";\n          }\n          if (ignoreElements[name2]) {\n            text3 += \" \";\n            return;\n          }\n          if (node.type === 3) {\n            text3 += node.value;\n          }\n          if (!(node.name in schema.getVoidElements())) {\n            if (node = node.firstChild) {\n              do {\n                walk2(node);\n              } while (node = node.next);\n            }\n          }\n          if (blockElements[name2] && currentNode.next) {\n            text3 += \"\\n\";\n            if (name2 === \"p\") {\n              text3 += \"\\n\";\n            }\n          }\n        };\n        html2 = filter(html2, [/<!\\[[^\\]]+\\]>/g]);\n        walk2(domParser.parse(html2));\n        return text3;\n      };\n      const trimHtml = (html2) => {\n        const trimSpaces = (all2, s1, s2) => {\n          if (!s1 && !s2) {\n            return \" \";\n          }\n          return nbsp;\n        };\n        html2 = filter(html2, [\n          /^[\\s\\S]*<body[^>]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/ig,\n          /<!--StartFragment-->|<!--EndFragment-->/g,\n          [\n            /( ?)<span class=\"Apple-converted-space\">\\u00a0<\\/span>( ?)/g,\n            trimSpaces\n          ],\n          /<br class=\"Apple-interchange-newline\">/g,\n          /<br>$/i\n        ]);\n        return html2;\n      };\n      const createIdGenerator = (prefix) => {\n        let count2 = 0;\n        return () => {\n          return prefix + count2++;\n        };\n      };\n      const getImageMimeType = (ext) => {\n        const lowerExt = ext.toLowerCase();\n        const mimeOverrides = {\n          jpg: \"jpeg\",\n          jpe: \"jpeg\",\n          jfi: \"jpeg\",\n          jif: \"jpeg\",\n          jfif: \"jpeg\",\n          pjpeg: \"jpeg\",\n          pjp: \"jpeg\",\n          svg: \"svg+xml\"\n        };\n        return Tools.hasOwn(mimeOverrides, lowerExt) ? \"image/\" + mimeOverrides[lowerExt] : \"image/\" + lowerExt;\n      };\n      const preProcess = (editor, html2) => {\n        const parser = DomParser({}, editor.schema);\n        parser.addNodeFilter(\"meta\", (nodes) => {\n          Tools.each(nodes, (node) => {\n            node.remove();\n          });\n        });\n        const fragment = parser.parse(html2, {\n          forced_root_block: false,\n          isRootContent: true\n        });\n        return HtmlSerializer({ validate: true }, editor.schema).serialize(fragment);\n      };\n      const processResult = (content, cancelled) => ({\n        content,\n        cancelled\n      });\n      const postProcessFilter = (editor, html2, internal) => {\n        const tempBody = editor.dom.create(\"div\", { style: \"display:none\" }, html2);\n        const postProcessArgs = firePastePostProcess(editor, tempBody, internal);\n        return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());\n      };\n      const filterContent = (editor, content, internal) => {\n        const preProcessArgs = firePastePreProcess(editor, content, internal);\n        const filteredContent = preProcess(editor, preProcessArgs.content);\n        if (editor.hasEventListeners(\"PastePostProcess\") && !preProcessArgs.isDefaultPrevented()) {\n          return postProcessFilter(editor, filteredContent, internal);\n        } else {\n          return processResult(filteredContent, preProcessArgs.isDefaultPrevented());\n        }\n      };\n      const process = (editor, html2, internal) => {\n        return filterContent(editor, html2, internal);\n      };\n      const pasteHtml$1 = (editor, html2) => {\n        editor.insertContent(html2, {\n          merge: shouldPasteMergeFormats(editor),\n          paste: true\n        });\n        return true;\n      };\n      const isAbsoluteUrl = (url2) => /^https?:\\/\\/[\\w\\?\\-\\/+=.&%@~#]+$/i.test(url2);\n      const isImageUrl = (editor, url2) => {\n        return isAbsoluteUrl(url2) && exists(getAllowedImageFileTypes(editor), (type2) => endsWith(url2.toLowerCase(), `.${type2.toLowerCase()}`));\n      };\n      const createImage = (editor, url2, pasteHtmlFn) => {\n        editor.undoManager.extra(() => {\n          pasteHtmlFn(editor, url2);\n        }, () => {\n          editor.insertContent('<img src=\"' + url2 + '\">');\n        });\n        return true;\n      };\n      const createLink = (editor, url2, pasteHtmlFn) => {\n        editor.undoManager.extra(() => {\n          pasteHtmlFn(editor, url2);\n        }, () => {\n          editor.execCommand(\"mceInsertLink\", false, url2);\n        });\n        return true;\n      };\n      const linkSelection = (editor, html2, pasteHtmlFn) => !editor.selection.isCollapsed() && isAbsoluteUrl(html2) ? createLink(editor, html2, pasteHtmlFn) : false;\n      const insertImage = (editor, html2, pasteHtmlFn) => isImageUrl(editor, html2) ? createImage(editor, html2, pasteHtmlFn) : false;\n      const smartInsertContent = (editor, html2) => {\n        Tools.each([\n          linkSelection,\n          insertImage,\n          pasteHtml$1\n        ], (action2) => {\n          return action2(editor, html2, pasteHtml$1) !== true;\n        });\n      };\n      const insertContent = (editor, html2, pasteAsText) => {\n        if (pasteAsText || !isSmartPasteEnabled(editor)) {\n          pasteHtml$1(editor, html2);\n        } else {\n          smartInsertContent(editor, html2);\n        }\n      };\n      const uniqueId = createIdGenerator(\"mceclip\");\n      const doPaste = (editor, content, internal, pasteAsText) => {\n        const args = process(editor, content, internal);\n        if (args.cancelled === false) {\n          insertContent(editor, args.content, pasteAsText);\n        }\n      };\n      const pasteHtml = (editor, html2, internalFlag) => {\n        const internal = internalFlag ? internalFlag : isMarked(html2);\n        doPaste(editor, unmark(html2), internal, false);\n      };\n      const pasteText = (editor, text3) => {\n        const encodedText = editor.dom.encode(text3).replace(/\\r\\n/g, \"\\n\");\n        const normalizedText = normalize$4(encodedText, getPasteTabSpaces(editor));\n        const html2 = toBlockElements(normalizedText, getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n        doPaste(editor, html2, false, true);\n      };\n      const getDataTransferItems = (dataTransfer) => {\n        const items = {};\n        if (dataTransfer && dataTransfer.types) {\n          for (let i3 = 0; i3 < dataTransfer.types.length; i3++) {\n            const contentType = dataTransfer.types[i3];\n            try {\n              items[contentType] = dataTransfer.getData(contentType);\n            } catch (ex) {\n              items[contentType] = \"\";\n            }\n          }\n        }\n        return items;\n      };\n      const hasContentType = (clipboardContent, mimeType) => mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\n      const hasHtmlOrText = (content) => hasContentType(content, \"text/html\") || hasContentType(content, \"text/plain\");\n      const extractFilename = (editor, str) => {\n        const m2 = str.match(/([\\s\\S]+?)(?:\\.[a-z0-9.]+)$/i);\n        return isNonNullable(m2) ? editor.dom.encode(m2[1]) : null;\n      };\n      const createBlobInfo = (editor, blobCache, file, base64) => {\n        const id = uniqueId();\n        const useFileName = shouldReuseFileName(editor) && isNonNullable(file.name);\n        const name2 = useFileName ? extractFilename(editor, file.name) : id;\n        const filename = useFileName ? file.name : void 0;\n        const blobInfo = blobCache.create(id, file, base64, name2, filename);\n        blobCache.add(blobInfo);\n        return blobInfo;\n      };\n      const pasteImage = (editor, imageItem) => {\n        const {\n          data: base64,\n          type: type2\n        } = parseDataUri$1(imageItem.uri);\n        const file = imageItem.file;\n        const blobCache = editor.editorUpload.blobCache;\n        const existingBlobInfo = blobCache.getByData(base64, type2);\n        const blobInfo = existingBlobInfo !== null && existingBlobInfo !== void 0 ? existingBlobInfo : createBlobInfo(editor, blobCache, file, base64);\n        pasteHtml(editor, `<img src=\"${blobInfo.blobUri()}\">`, false);\n      };\n      const isClipboardEvent = (event) => event.type === \"paste\";\n      const readFilesAsDataUris = (items) => Promise.all(map$3(items, (file) => {\n        return blobToDataUri(file).then((uri) => ({\n          file,\n          uri\n        }));\n      }));\n      const isImage = (editor) => {\n        const allowedExtensions = getAllowedImageFileTypes(editor);\n        return (file) => startsWith(file.type, \"image/\") && exists(allowedExtensions, (extension) => {\n          return getImageMimeType(extension) === file.type;\n        });\n      };\n      const getImagesFromDataTransfer = (editor, dataTransfer) => {\n        const items = dataTransfer.items ? bind$3(from(dataTransfer.items), (item) => {\n          return item.kind === \"file\" ? [item.getAsFile()] : [];\n        }) : [];\n        const files = dataTransfer.files ? from(dataTransfer.files) : [];\n        return filter$6(items.length > 0 ? items : files, isImage(editor));\n      };\n      const pasteImageData = (editor, e2, rng) => {\n        const dataTransfer = isClipboardEvent(e2) ? e2.clipboardData : e2.dataTransfer;\n        if (shouldPasteDataImages(editor) && dataTransfer) {\n          const images = getImagesFromDataTransfer(editor, dataTransfer);\n          if (images.length > 0) {\n            e2.preventDefault();\n            readFilesAsDataUris(images).then((fileResults) => {\n              if (rng) {\n                editor.selection.setRng(rng);\n              }\n              each$g(fileResults, (result) => {\n                pasteImage(editor, result);\n              });\n            });\n            return true;\n          }\n        }\n        return false;\n      };\n      const isBrokenAndroidClipboardEvent = (e2) => {\n        var _a3, _b;\n        return Env.os.isAndroid() && ((_b = (_a3 = e2.clipboardData) === null || _a3 === void 0 ? void 0 : _a3.items) === null || _b === void 0 ? void 0 : _b.length) === 0;\n      };\n      const isKeyboardPasteEvent = (e2) => VK.metaKeyPressed(e2) && e2.keyCode === 86 || e2.shiftKey && e2.keyCode === 45;\n      const insertClipboardContent = (editor, clipboardContent, html2, plainTextMode) => {\n        let content = trimHtml(html2);\n        const isInternal = hasContentType(clipboardContent, internalHtmlMime()) || isMarked(html2);\n        const isPlainTextHtml = !isInternal && isPlainText(content);\n        const isAbsoluteUrl$1 = isAbsoluteUrl(content);\n        if (isDefaultPasteBinContent(content) || !content.length || isPlainTextHtml && !isAbsoluteUrl$1) {\n          plainTextMode = true;\n        }\n        if (plainTextMode || isAbsoluteUrl$1) {\n          if (hasContentType(clipboardContent, \"text/plain\") && isPlainTextHtml) {\n            content = clipboardContent[\"text/plain\"];\n          } else {\n            content = innerText(content);\n          }\n        }\n        if (isDefaultPasteBinContent(content)) {\n          return;\n        }\n        if (plainTextMode) {\n          pasteText(editor, content);\n        } else {\n          pasteHtml(editor, content, isInternal);\n        }\n      };\n      const registerEventHandlers = (editor, pasteBin, pasteFormat) => {\n        let keyboardPastePlainTextState;\n        const getLastRng = () => pasteBin.getLastRng() || editor.selection.getRng();\n        editor.on(\"keydown\", (e2) => {\n          if (isKeyboardPasteEvent(e2) && !e2.isDefaultPrevented()) {\n            keyboardPastePlainTextState = e2.shiftKey && e2.keyCode === 86;\n          }\n        });\n        editor.on(\"paste\", (e2) => {\n          if (e2.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e2)) {\n            return;\n          }\n          const plainTextMode = pasteFormat.get() === \"text\" || keyboardPastePlainTextState;\n          keyboardPastePlainTextState = false;\n          const clipboardContent = getDataTransferItems(e2.clipboardData);\n          if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e2, getLastRng())) {\n            return;\n          }\n          if (hasContentType(clipboardContent, \"text/html\")) {\n            e2.preventDefault();\n            insertClipboardContent(editor, clipboardContent, clipboardContent[\"text/html\"], plainTextMode);\n          } else {\n            pasteBin.create();\n            Delay.setEditorTimeout(editor, () => {\n              const html2 = pasteBin.getHtml();\n              pasteBin.remove();\n              insertClipboardContent(editor, clipboardContent, html2, plainTextMode);\n            }, 0);\n          }\n        });\n      };\n      const registerDataImageFilter = (editor) => {\n        const isWebKitFakeUrl = (src) => startsWith(src, \"webkit-fake-url\");\n        const isDataUri = (src) => startsWith(src, \"data:\");\n        const isPasteInsert = (args) => {\n          var _a3;\n          return ((_a3 = args.data) === null || _a3 === void 0 ? void 0 : _a3.paste) === true;\n        };\n        editor.parser.addNodeFilter(\"img\", (nodes, name2, args) => {\n          if (!shouldPasteDataImages(editor) && isPasteInsert(args)) {\n            for (const node of nodes) {\n              const src = node.attr(\"src\");\n              if (isString2(src) && !node.attr(\"data-mce-object\") && src !== Env.transparentSrc) {\n                if (isWebKitFakeUrl(src)) {\n                  node.remove();\n                } else if (!shouldAllowHtmlDataUrls(editor) && isDataUri(src)) {\n                  node.remove();\n                }\n              }\n            }\n          }\n        });\n      };\n      const registerEventsAndFilters = (editor, pasteBin, pasteFormat) => {\n        registerEventHandlers(editor, pasteBin, pasteFormat);\n        registerDataImageFilter(editor);\n      };\n      const togglePlainTextPaste = (editor, pasteFormat) => {\n        if (pasteFormat.get() === \"text\") {\n          pasteFormat.set(\"html\");\n          firePastePlainTextToggle(editor, false);\n        } else {\n          pasteFormat.set(\"text\");\n          firePastePlainTextToggle(editor, true);\n        }\n        editor.focus();\n      };\n      const register$1 = (editor, pasteFormat) => {\n        editor.addCommand(\"mceTogglePlainTextPaste\", () => {\n          togglePlainTextPaste(editor, pasteFormat);\n        });\n        editor.addCommand(\"mceInsertClipboardContent\", (ui, value2) => {\n          if (value2.html) {\n            pasteHtml(editor, value2.html, value2.internal);\n          }\n          if (value2.text) {\n            pasteText(editor, value2.text);\n          }\n        });\n      };\n      const setHtml5Clipboard = (clipboardData, html2, text3) => {\n        try {\n          clipboardData.clearData();\n          clipboardData.setData(\"text/html\", html2);\n          clipboardData.setData(\"text/plain\", text3);\n          clipboardData.setData(internalHtmlMime(), html2);\n          return true;\n        } catch (e2) {\n          return false;\n        }\n      };\n      const setClipboardData = (evt, data2, fallback2, done) => {\n        if (setHtml5Clipboard(evt.clipboardData, data2.html, data2.text)) {\n          evt.preventDefault();\n          done();\n        } else {\n          fallback2(data2.html, done);\n        }\n      };\n      const fallback = (editor) => (html2, done) => {\n        const { dom: dom3, selection } = editor;\n        const outer = dom3.create(\"div\", {\n          \"contenteditable\": \"false\",\n          \"data-mce-bogus\": \"all\"\n        });\n        const inner = dom3.create(\"div\", { contenteditable: \"true\" }, html2);\n        dom3.setStyles(outer, {\n          position: \"fixed\",\n          top: \"0\",\n          left: \"-3000px\",\n          width: \"1000px\",\n          overflow: \"hidden\"\n        });\n        outer.appendChild(inner);\n        dom3.add(editor.getBody(), outer);\n        const range2 = selection.getRng();\n        inner.focus();\n        const offscreenRange = dom3.createRng();\n        offscreenRange.selectNodeContents(inner);\n        selection.setRng(offscreenRange);\n        Delay.setEditorTimeout(editor, () => {\n          selection.setRng(range2);\n          dom3.remove(outer);\n          done();\n        }, 0);\n      };\n      const getData = (editor) => ({\n        html: mark(editor.selection.getContent({ contextual: true })),\n        text: editor.selection.getContent({ format: \"text\" })\n      });\n      const isTableSelection = (editor) => !!editor.dom.getParent(editor.selection.getStart(), \"td[data-mce-selected],th[data-mce-selected]\", editor.getBody());\n      const hasSelectedContent = (editor) => !editor.selection.isCollapsed() || isTableSelection(editor);\n      const cut = (editor) => (evt) => {\n        if (!evt.isDefaultPrevented() && hasSelectedContent(editor)) {\n          setClipboardData(evt, getData(editor), fallback(editor), () => {\n            if (Env.browser.isChromium() || Env.browser.isFirefox()) {\n              const rng = editor.selection.getRng();\n              Delay.setEditorTimeout(editor, () => {\n                editor.selection.setRng(rng);\n                editor.execCommand(\"Delete\");\n              }, 0);\n            } else {\n              editor.execCommand(\"Delete\");\n            }\n          });\n        }\n      };\n      const copy = (editor) => (evt) => {\n        if (!evt.isDefaultPrevented() && hasSelectedContent(editor)) {\n          setClipboardData(evt, getData(editor), fallback(editor), noop);\n        }\n      };\n      const register = (editor) => {\n        editor.on(\"cut\", cut(editor));\n        editor.on(\"copy\", copy(editor));\n      };\n      const getCaretRangeFromEvent = (editor, e2) => {\n        var _a3, _b;\n        return RangeUtils.getCaretRangeFromPoint((_a3 = e2.clientX) !== null && _a3 !== void 0 ? _a3 : 0, (_b = e2.clientY) !== null && _b !== void 0 ? _b : 0, editor.getDoc());\n      };\n      const isPlainTextFileUrl = (content) => {\n        const plainTextContent = content[\"text/plain\"];\n        return plainTextContent ? plainTextContent.indexOf(\"file://\") === 0 : false;\n      };\n      const setFocusedRange = (editor, rng) => {\n        editor.focus();\n        if (rng) {\n          editor.selection.setRng(rng);\n        }\n      };\n      const hasImage = (dataTransfer) => exists(dataTransfer.files, (file) => /^image\\//.test(file.type));\n      const setup$a = (editor, draggingInternallyState) => {\n        if (shouldPasteBlockDrop(editor)) {\n          editor.on(\"dragend dragover draggesture dragdrop drop drag\", (e2) => {\n            e2.preventDefault();\n            e2.stopPropagation();\n          });\n        }\n        if (!shouldPasteDataImages(editor)) {\n          editor.on(\"drop\", (e2) => {\n            const dataTransfer = e2.dataTransfer;\n            if (dataTransfer && hasImage(dataTransfer)) {\n              e2.preventDefault();\n            }\n          });\n        }\n        editor.on(\"drop\", (e2) => {\n          if (e2.isDefaultPrevented() || draggingInternallyState.get()) {\n            return;\n          }\n          const rng = getCaretRangeFromEvent(editor, e2);\n          if (isNullable(rng)) {\n            return;\n          }\n          const dropContent = getDataTransferItems(e2.dataTransfer);\n          const internal = hasContentType(dropContent, internalHtmlMime());\n          if ((!hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && pasteImageData(editor, e2, rng)) {\n            return;\n          }\n          const internalContent = dropContent[internalHtmlMime()];\n          const content = internalContent || dropContent[\"text/html\"] || dropContent[\"text/plain\"];\n          if (content) {\n            e2.preventDefault();\n            Delay.setEditorTimeout(editor, () => {\n              editor.undoManager.transact(() => {\n                if (internalContent) {\n                  editor.execCommand(\"Delete\");\n                }\n                setFocusedRange(editor, rng);\n                const trimmedContent = trimHtml(content);\n                if (dropContent[\"text/html\"]) {\n                  pasteHtml(editor, trimmedContent, internal);\n                } else {\n                  pasteText(editor, trimmedContent);\n                }\n              });\n            });\n          }\n        });\n        editor.on(\"dragstart\", (_e) => {\n          draggingInternallyState.set(true);\n        });\n        editor.on(\"dragover dragend\", (e2) => {\n          if (shouldPasteDataImages(editor) && draggingInternallyState.get() === false) {\n            e2.preventDefault();\n            setFocusedRange(editor, getCaretRangeFromEvent(editor, e2));\n          }\n          if (e2.type === \"dragend\") {\n            draggingInternallyState.set(false);\n          }\n        });\n      };\n      const setup$9 = (editor) => {\n        const processEvent = (f2) => (e2) => {\n          f2(editor, e2);\n        };\n        const preProcess2 = getPastePreProcess(editor);\n        if (isFunction2(preProcess2)) {\n          editor.on(\"PastePreProcess\", processEvent(preProcess2));\n        }\n        const postProcess3 = getPastePostProcess(editor);\n        if (isFunction2(postProcess3)) {\n          editor.on(\"PastePostProcess\", processEvent(postProcess3));\n        }\n      };\n      const addPreProcessFilter = (editor, filterFunc) => {\n        editor.on(\"PastePreProcess\", (e2) => {\n          e2.content = filterFunc(editor, e2.content, e2.internal);\n        });\n      };\n      const rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n      const rgbToHex = (value2) => Tools.trim(value2).replace(rgbRegExp, rgbaToHexString).toLowerCase();\n      const removeWebKitStyles = (editor, content, internal) => {\n        const webKitStylesOption = getPasteWebkitStyles(editor);\n        if (internal || webKitStylesOption === \"all\" || !shouldPasteRemoveWebKitStyles(editor)) {\n          return content;\n        }\n        const webKitStyles = webKitStylesOption ? webKitStylesOption.split(/[, ]/) : [];\n        if (webKitStyles && webKitStylesOption !== \"none\") {\n          const dom3 = editor.dom, node = editor.selection.getNode();\n          content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, (all2, before2, value2, after2) => {\n            const inputStyles = dom3.parseStyle(dom3.decode(value2));\n            const outputStyles = {};\n            for (let i3 = 0; i3 < webKitStyles.length; i3++) {\n              const inputValue = inputStyles[webKitStyles[i3]];\n              let compareInput = inputValue;\n              let currentValue = dom3.getStyle(node, webKitStyles[i3], true);\n              if (/color/.test(webKitStyles[i3])) {\n                compareInput = rgbToHex(compareInput);\n                currentValue = rgbToHex(currentValue);\n              }\n              if (currentValue !== compareInput) {\n                outputStyles[webKitStyles[i3]] = inputValue;\n              }\n            }\n            const outputStyle = dom3.serializeStyle(outputStyles, \"span\");\n            if (outputStyle) {\n              return before2 + ' style=\"' + outputStyle + '\"' + after2;\n            }\n            return before2 + after2;\n          });\n        } else {\n          content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, \"$1$3\");\n        }\n        content = content.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi, (all2, before2, value2, after2) => {\n          return before2 + ' style=\"' + value2 + '\"' + after2;\n        });\n        return content;\n      };\n      const setup$8 = (editor) => {\n        if (Env.browser.isChromium() || Env.browser.isSafari()) {\n          addPreProcessFilter(editor, removeWebKitStyles);\n        }\n      };\n      const setup$7 = (editor) => {\n        const draggingInternallyState = Cell(false);\n        const pasteFormat = Cell(isPasteAsTextEnabled(editor) ? \"text\" : \"html\");\n        const pasteBin = PasteBin(editor);\n        setup$8(editor);\n        register$1(editor, pasteFormat);\n        setup$9(editor);\n        editor.on(\"PreInit\", () => {\n          register(editor);\n          setup$a(editor, draggingInternallyState);\n          registerEventsAndFilters(editor, pasteBin, pasteFormat);\n        });\n      };\n      const preventSummaryToggle = (editor) => {\n        editor.on(\"click\", (e2) => {\n          if (editor.dom.getParent(e2.target, \"details\")) {\n            e2.preventDefault();\n          }\n        });\n      };\n      const filterDetails = (editor) => {\n        editor.parser.addNodeFilter(\"details\", (elms) => {\n          each$g(elms, (details) => {\n            details.attr(\"data-mce-open\", details.attr(\"open\"));\n            details.attr(\"open\", \"open\");\n          });\n        });\n        editor.serializer.addNodeFilter(\"details\", (elms) => {\n          each$g(elms, (details) => {\n            const open = details.attr(\"data-mce-open\");\n            details.attr(\"open\", isString2(open) ? open : null);\n            details.attr(\"data-mce-open\", null);\n          });\n        });\n      };\n      const setup$6 = (editor) => {\n        preventSummaryToggle(editor);\n        filterDetails(editor);\n      };\n      const isTextBlockNode = (node) => isElement$6(node) && isTextBlock$2(SugarElement.fromDom(node));\n      const normalizeSelection = (editor) => {\n        const rng = editor.selection.getRng();\n        const startPos = CaretPosition.fromRangeStart(rng);\n        const endPos = CaretPosition.fromRangeEnd(rng);\n        if (CaretPosition.isElementPosition(startPos)) {\n          const container = startPos.container();\n          if (isTextBlockNode(container)) {\n            firstPositionIn(container).each((pos) => rng.setStart(pos.container(), pos.offset()));\n          }\n        }\n        if (CaretPosition.isElementPosition(endPos)) {\n          const container = startPos.container();\n          if (isTextBlockNode(container)) {\n            lastPositionIn(container).each((pos) => rng.setEnd(pos.container(), pos.offset()));\n          }\n        }\n        editor.selection.setRng(normalize3(rng));\n      };\n      const setup$5 = (editor) => {\n        editor.on(\"click\", (e2) => {\n          if (e2.detail >= 3) {\n            normalizeSelection(editor);\n          }\n        });\n      };\n      var FakeCaretPosition;\n      (function(FakeCaretPosition2) {\n        FakeCaretPosition2[\"Before\"] = \"before\";\n        FakeCaretPosition2[\"After\"] = \"after\";\n      })(FakeCaretPosition || (FakeCaretPosition = {}));\n      const distanceToRectLeft = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n      const distanceToRectRight = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n      const isInsideY = (clientY, clientRect) => clientY >= clientRect.top && clientY <= clientRect.bottom;\n      const collidesY = (r1, r22) => r1.top < r22.bottom && r1.bottom > r22.top;\n      const isOverlapping = (r1, r22) => {\n        const overlap = overlapY(r1, r22) / Math.min(r1.height, r22.height);\n        return collidesY(r1, r22) && overlap > 0.5;\n      };\n      const splitRectsPerAxis = (rects, y2) => {\n        const intersectingRects = filter$6(rects, (rect) => isInsideY(y2, rect));\n        return boundingClientRectFromRects(intersectingRects).fold(() => [\n          [],\n          rects\n        ], (boundingRect) => {\n          const {\n            pass: horizontal,\n            fail: vertical\n          } = partition$2(rects, (rect) => isOverlapping(rect, boundingRect));\n          return [\n            horizontal,\n            vertical\n          ];\n        });\n      };\n      const clientInfo = (rect, clientX) => {\n        return {\n          node: rect.node,\n          position: distanceToRectLeft(rect, clientX) < distanceToRectRight(rect, clientX) ? FakeCaretPosition.Before : FakeCaretPosition.After\n        };\n      };\n      const horizontalDistance = (rect, x2, _y) => x2 > rect.left && x2 < rect.right ? 0 : Math.min(Math.abs(rect.left - x2), Math.abs(rect.right - x2));\n      const closestChildCaretCandidateNodeRect = (children2, clientX, clientY) => {\n        const caretCandidateRect = (rect) => {\n          if (isCaretCandidate$3(rect.node)) {\n            return Optional.some(rect);\n          } else if (isElement$6(rect.node)) {\n            return closestChildCaretCandidateNodeRect(from(rect.node.childNodes), clientX, clientY);\n          } else {\n            return Optional.none();\n          }\n        };\n        const getClosestTextNode = (rects, distance) => {\n          if (rects.length >= 2) {\n            const r1 = caretCandidateRect(rects[0]).getOr(rects[0]);\n            const r22 = caretCandidateRect(rects[1]).getOr(rects[1]);\n            const deltaDistance = Math.abs(distance(r1, clientX, clientY) - distance(r22, clientX, clientY));\n            if (deltaDistance < 2) {\n              if (isText$8(r1.node)) {\n                return Optional.some(r1);\n              } else if (isText$8(r22.node)) {\n                return Optional.some(r22);\n              }\n            }\n          }\n          return Optional.none();\n        };\n        const findClosestCaretCandidateNodeRect = (rects, distance) => {\n          const sortedRects = sort(rects, (r1, r22) => distance(r1, clientX, clientY) - distance(r22, clientX, clientY));\n          return getClosestTextNode(sortedRects, distance).orThunk(() => findMap(sortedRects, caretCandidateRect));\n        };\n        const [horizontalRects, verticalRects] = splitRectsPerAxis(getClientRects(children2), clientY);\n        const {\n          pass: above,\n          fail: below\n        } = partition$2(verticalRects, (rect) => rect.top < clientY);\n        return findClosestCaretCandidateNodeRect(horizontalRects, horizontalDistance).orThunk(() => findClosestCaretCandidateNodeRect(below, distanceToRectEdgeFromXY)).orThunk(() => findClosestCaretCandidateNodeRect(above, distanceToRectEdgeFromXY));\n      };\n      const traverseUp = (rootElm, scope, clientX, clientY) => {\n        const helper = (scope2, prevScope) => {\n          return prevScope.fold(() => closestChildCaretCandidateNodeRect(from(scope2.dom.childNodes), clientX, clientY), (prevScope2) => {\n            const uncheckedChildren = filter$6(from(scope2.dom.childNodes), (node) => node !== prevScope2.dom);\n            return closestChildCaretCandidateNodeRect(uncheckedChildren, clientX, clientY);\n          }).orThunk(() => {\n            const parent2 = eq2(scope2, rootElm) ? Optional.none() : parentElement(scope2);\n            return parent2.bind((newScope) => helper(newScope, Optional.some(scope2)));\n          });\n        };\n        return helper(scope, Optional.none());\n      };\n      const closestCaretCandidateNodeRect = (root2, clientX, clientY) => {\n        const rootElm = SugarElement.fromDom(root2);\n        const ownerDoc = documentOrOwner(rootElm);\n        const elementAtPoint = SugarElement.fromPoint(ownerDoc, clientX, clientY).filter((elm) => contains2(rootElm, elm));\n        const element = elementAtPoint.getOr(rootElm);\n        return traverseUp(rootElm, element, clientX, clientY);\n      };\n      const closestFakeCaretCandidate = (root2, clientX, clientY) => closestCaretCandidateNodeRect(root2, clientX, clientY).filter((rect) => isFakeCaretTarget(rect.node)).map((rect) => clientInfo(rect, clientX));\n      const getAbsolutePosition = (elm) => {\n        const clientRect = elm.getBoundingClientRect();\n        const doc = elm.ownerDocument;\n        const docElem = doc.documentElement;\n        const win = doc.defaultView;\n        return {\n          top: clientRect.top + win.pageYOffset - docElem.clientTop,\n          left: clientRect.left + win.pageXOffset - docElem.clientLeft\n        };\n      };\n      const getBodyPosition = (editor) => editor.inline ? getAbsolutePosition(editor.getBody()) : {\n        left: 0,\n        top: 0\n      };\n      const getScrollPosition = (editor) => {\n        const body = editor.getBody();\n        return editor.inline ? {\n          left: body.scrollLeft,\n          top: body.scrollTop\n        } : {\n          left: 0,\n          top: 0\n        };\n      };\n      const getBodyScroll = (editor) => {\n        const body = editor.getBody(), docElm = editor.getDoc().documentElement;\n        const inlineScroll = {\n          left: body.scrollLeft,\n          top: body.scrollTop\n        };\n        const iframeScroll = {\n          left: body.scrollLeft || docElm.scrollLeft,\n          top: body.scrollTop || docElm.scrollTop\n        };\n        return editor.inline ? inlineScroll : iframeScroll;\n      };\n      const getMousePosition = (editor, event) => {\n        if (event.target.ownerDocument !== editor.getDoc()) {\n          const iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n          const scrollPosition = getBodyScroll(editor);\n          return {\n            left: event.pageX - iframePosition.left + scrollPosition.left,\n            top: event.pageY - iframePosition.top + scrollPosition.top\n          };\n        }\n        return {\n          left: event.pageX,\n          top: event.pageY\n        };\n      };\n      const calculatePosition = (bodyPosition, scrollPosition, mousePosition) => ({\n        pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n        pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n      });\n      const calc = (editor, event) => calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n      const isContentEditableFalse$1 = isContentEditableFalse$a, isContentEditableTrue = isContentEditableTrue$4;\n      const isDraggable = (rootElm, elm) => isContentEditableFalse$1(elm) && elm !== rootElm;\n      const isValidDropTarget = (editor, targetElement, dragElement) => {\n        if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n          return false;\n        }\n        return !isContentEditableFalse$1(targetElement);\n      };\n      const cloneElement = (elm) => {\n        const cloneElm = elm.cloneNode(true);\n        cloneElm.removeAttribute(\"data-mce-selected\");\n        return cloneElm;\n      };\n      const createGhost = (editor, elm, width, height) => {\n        const dom3 = editor.dom;\n        const clonedElm = elm.cloneNode(true);\n        dom3.setStyles(clonedElm, {\n          width,\n          height\n        });\n        dom3.setAttrib(clonedElm, \"data-mce-selected\", null);\n        const ghostElm = dom3.create(\"div\", {\n          \"class\": \"mce-drag-container\",\n          \"data-mce-bogus\": \"all\",\n          \"unselectable\": \"on\",\n          \"contenteditable\": \"false\"\n        });\n        dom3.setStyles(ghostElm, {\n          position: \"absolute\",\n          opacity: 0.5,\n          overflow: \"hidden\",\n          border: 0,\n          padding: 0,\n          margin: 0,\n          width,\n          height\n        });\n        dom3.setStyles(clonedElm, {\n          margin: 0,\n          boxSizing: \"border-box\"\n        });\n        ghostElm.appendChild(clonedElm);\n        return ghostElm;\n      };\n      const appendGhostToBody = (ghostElm, bodyElm) => {\n        if (ghostElm.parentNode !== bodyElm) {\n          bodyElm.appendChild(ghostElm);\n        }\n      };\n      const moveGhost = (ghostElm, position, width, height, maxX, maxY) => {\n        let overflowX = 0, overflowY = 0;\n        ghostElm.style.left = position.pageX + \"px\";\n        ghostElm.style.top = position.pageY + \"px\";\n        if (position.pageX + width > maxX) {\n          overflowX = position.pageX + width - maxX;\n        }\n        if (position.pageY + height > maxY) {\n          overflowY = position.pageY + height - maxY;\n        }\n        ghostElm.style.width = width - overflowX + \"px\";\n        ghostElm.style.height = height - overflowY + \"px\";\n      };\n      const removeElement = (elm) => {\n        if (elm && elm.parentNode) {\n          elm.parentNode.removeChild(elm);\n        }\n      };\n      const isLeftMouseButtonPressed = (e2) => e2.button === 0;\n      const applyRelPos = (state, position) => ({\n        pageX: position.pageX - state.relX,\n        pageY: position.pageY + 5\n      });\n      const start = (state, editor) => (e2) => {\n        if (isLeftMouseButtonPressed(e2)) {\n          const ceElm = find$2(editor.dom.getParents(e2.target), or(isContentEditableFalse$1, isContentEditableTrue)).getOr(null);\n          if (isDraggable(editor.getBody(), ceElm)) {\n            const elmPos = editor.dom.getPos(ceElm);\n            const bodyElm = editor.getBody();\n            const docElm = editor.getDoc().documentElement;\n            state.set({\n              element: ceElm,\n              dragging: false,\n              screenX: e2.screenX,\n              screenY: e2.screenY,\n              maxX: (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2,\n              maxY: (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2,\n              relX: e2.pageX - elmPos.x,\n              relY: e2.pageY - elmPos.y,\n              width: ceElm.offsetWidth,\n              height: ceElm.offsetHeight,\n              ghost: createGhost(editor, ceElm, ceElm.offsetWidth, ceElm.offsetHeight)\n            });\n          }\n        }\n      };\n      const move = (state, editor) => {\n        const throttledPlaceCaretAt = first$1((clientX, clientY) => {\n          editor._selectionOverrides.hideFakeCaret();\n          editor.selection.placeCaretAt(clientX, clientY);\n        }, 0);\n        editor.on(\"remove\", throttledPlaceCaretAt.cancel);\n        return (e2) => state.on((state2) => {\n          const movement = Math.max(Math.abs(e2.screenX - state2.screenX), Math.abs(e2.screenY - state2.screenY));\n          if (!state2.dragging && movement > 10) {\n            const args = editor.dispatch(\"dragstart\", { target: state2.element });\n            if (args.isDefaultPrevented()) {\n              return;\n            }\n            state2.dragging = true;\n            editor.focus();\n          }\n          if (state2.dragging) {\n            const targetPos = applyRelPos(state2, calc(editor, e2));\n            appendGhostToBody(state2.ghost, editor.getBody());\n            moveGhost(state2.ghost, targetPos, state2.width, state2.height, state2.maxX, state2.maxY);\n            throttledPlaceCaretAt.throttle(e2.clientX, e2.clientY);\n          }\n        });\n      };\n      const getRawTarget = (selection) => {\n        const rng = selection.getSel().getRangeAt(0);\n        const startContainer = rng.startContainer;\n        return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;\n      };\n      const drop = (state, editor) => (e2) => {\n        state.on((state2) => {\n          if (state2.dragging) {\n            if (isValidDropTarget(editor, getRawTarget(editor.selection), state2.element)) {\n              const targetClone = cloneElement(state2.element);\n              const args = editor.dispatch(\"drop\", {\n                clientX: e2.clientX,\n                clientY: e2.clientY\n              });\n              if (!args.isDefaultPrevented()) {\n                editor.undoManager.transact(() => {\n                  removeElement(state2.element);\n                  editor.insertContent(editor.dom.getOuterHTML(targetClone));\n                  editor._selectionOverrides.hideFakeCaret();\n                });\n              }\n            }\n            editor.dispatch(\"dragend\");\n          }\n        });\n        removeDragState(state);\n      };\n      const stop = (state, editor) => () => {\n        state.on((state2) => {\n          if (state2.dragging) {\n            editor.dispatch(\"dragend\");\n          }\n        });\n        removeDragState(state);\n      };\n      const removeDragState = (state) => {\n        state.on((state2) => {\n          removeElement(state2.ghost);\n        });\n        state.clear();\n      };\n      const bindFakeDragEvents = (editor) => {\n        const state = value$2();\n        const pageDom = DOMUtils.DOM;\n        const rootDocument = document;\n        const dragStartHandler = start(state, editor);\n        const dragHandler = move(state, editor);\n        const dropHandler = drop(state, editor);\n        const dragEndHandler = stop(state, editor);\n        editor.on(\"mousedown\", dragStartHandler);\n        editor.on(\"mousemove\", dragHandler);\n        editor.on(\"mouseup\", dropHandler);\n        pageDom.bind(rootDocument, \"mousemove\", dragHandler);\n        pageDom.bind(rootDocument, \"mouseup\", dragEndHandler);\n        editor.on(\"remove\", () => {\n          pageDom.unbind(rootDocument, \"mousemove\", dragHandler);\n          pageDom.unbind(rootDocument, \"mouseup\", dragEndHandler);\n        });\n        editor.on(\"keydown\", (e2) => {\n          if (e2.keyCode === VK.ESC) {\n            dragEndHandler();\n          }\n        });\n      };\n      const blockUnsupportedFileDrop = (editor) => {\n        const preventFileDrop = (e2) => {\n          if (!e2.isDefaultPrevented()) {\n            const dataTransfer = e2.dataTransfer;\n            if (dataTransfer && (contains$2(dataTransfer.types, \"Files\") || dataTransfer.files.length > 0)) {\n              e2.preventDefault();\n              if (e2.type === \"drop\") {\n                displayError(editor, \"Dropped file type is not supported\");\n              }\n            }\n          }\n        };\n        const preventFileDropIfUIElement = (e2) => {\n          if (isUIElement(editor, e2.target)) {\n            preventFileDrop(e2);\n          }\n        };\n        const setup2 = () => {\n          const pageDom = DOMUtils.DOM;\n          const dom3 = editor.dom;\n          const doc = document;\n          const editorRoot = editor.inline ? editor.getBody() : editor.getDoc();\n          const eventNames = [\n            \"drop\",\n            \"dragover\"\n          ];\n          each$g(eventNames, (name2) => {\n            pageDom.bind(doc, name2, preventFileDropIfUIElement);\n            dom3.bind(editorRoot, name2, preventFileDrop);\n          });\n          editor.on(\"remove\", () => {\n            each$g(eventNames, (name2) => {\n              pageDom.unbind(doc, name2, preventFileDropIfUIElement);\n              dom3.unbind(editorRoot, name2, preventFileDrop);\n            });\n          });\n        };\n        editor.on(\"init\", () => {\n          Delay.setEditorTimeout(editor, setup2, 0);\n        });\n      };\n      const init$2 = (editor) => {\n        bindFakeDragEvents(editor);\n        if (shouldBlockUnsupportedDrop(editor)) {\n          blockUnsupportedFileDrop(editor);\n        }\n      };\n      const setup$4 = (editor) => {\n        const renderFocusCaret = first$1(() => {\n          if (!editor.removed && editor.getBody().contains(document.activeElement)) {\n            const rng = editor.selection.getRng();\n            if (rng.collapsed) {\n              const caretRange = renderRangeCaret(editor, rng, false);\n              editor.selection.setRng(caretRange);\n            }\n          }\n        }, 0);\n        editor.on(\"focus\", () => {\n          renderFocusCaret.throttle();\n        });\n        editor.on(\"blur\", () => {\n          renderFocusCaret.cancel();\n        });\n      };\n      const setup$3 = (editor) => {\n        editor.on(\"init\", () => {\n          editor.on(\"focusin\", (e2) => {\n            const target = e2.target;\n            if (isMedia$2(target)) {\n              const ceRoot = getContentEditableRoot$1(editor.getBody(), target);\n              const node = isContentEditableFalse$a(ceRoot) ? ceRoot : target;\n              if (editor.selection.getNode() !== node) {\n                selectNode(editor, node).each((rng) => editor.selection.setRng(rng));\n              }\n            }\n          });\n        });\n      };\n      const isContentEditableFalse = isContentEditableFalse$a;\n      const getContentEditableRoot = (editor, node) => getContentEditableRoot$1(editor.getBody(), node);\n      const SelectionOverrides = (editor) => {\n        const selection = editor.selection, dom3 = editor.dom;\n        const isBlock2 = dom3.isBlock;\n        const rootNode = editor.getBody();\n        const fakeCaret = FakeCaret(editor, rootNode, isBlock2, () => hasFocus(editor));\n        const realSelectionId = \"sel-\" + dom3.uniqueId();\n        const elementSelectionAttr = \"data-mce-selected\";\n        let selectedElement;\n        const isFakeSelectionElement = (node) => dom3.hasClass(node, \"mce-offscreen-selection\");\n        const isFakeSelectionTargetElement = (node) => node !== rootNode && (isContentEditableFalse(node) || isMedia$2(node)) && dom3.isChildOf(node, rootNode);\n        const setRange = (range2) => {\n          if (range2) {\n            selection.setRng(range2);\n          }\n        };\n        const showCaret2 = (direction, node, before2, scrollIntoView = true) => {\n          const e2 = editor.dispatch(\"ShowCaret\", {\n            target: node,\n            direction,\n            before: before2\n          });\n          if (e2.isDefaultPrevented()) {\n            return null;\n          }\n          if (scrollIntoView) {\n            selection.scrollIntoView(node, direction === -1);\n          }\n          return fakeCaret.show(before2, node);\n        };\n        const showBlockCaretContainer2 = (blockCaretContainer) => {\n          if (blockCaretContainer.hasAttribute(\"data-mce-caret\")) {\n            showCaretContainerBlock(blockCaretContainer);\n            selection.scrollIntoView(blockCaretContainer);\n          }\n        };\n        const registerEvents2 = () => {\n          editor.on(\"click\", (e2) => {\n            const contentEditableRoot = getContentEditableRoot(editor, e2.target);\n            if (contentEditableRoot) {\n              if (isContentEditableFalse(contentEditableRoot)) {\n                e2.preventDefault();\n                editor.focus();\n              }\n            }\n          });\n          editor.on(\"blur NewBlock\", removeElementSelection);\n          editor.on(\"ResizeWindow FullscreenStateChanged\", fakeCaret.reposition);\n          editor.on(\"tap\", (e2) => {\n            const targetElm = e2.target;\n            const contentEditableRoot = getContentEditableRoot(editor, targetElm);\n            if (isContentEditableFalse(contentEditableRoot)) {\n              e2.preventDefault();\n              selectNode(editor, contentEditableRoot).each(setElementSelection);\n            } else if (isFakeSelectionTargetElement(targetElm)) {\n              selectNode(editor, targetElm).each(setElementSelection);\n            }\n          }, true);\n          editor.on(\"mousedown\", (e2) => {\n            const targetElm = e2.target;\n            if (targetElm !== rootNode && targetElm.nodeName !== \"HTML\" && !dom3.isChildOf(targetElm, rootNode)) {\n              return;\n            }\n            if (isXYInContentArea(editor, e2.clientX, e2.clientY) === false) {\n              return;\n            }\n            removeElementSelection();\n            hideFakeCaret();\n            const closestContentEditable = getContentEditableRoot(editor, targetElm);\n            if (isContentEditableFalse(closestContentEditable)) {\n              e2.preventDefault();\n              selectNode(editor, closestContentEditable).each(setElementSelection);\n            } else {\n              closestFakeCaretCandidate(rootNode, e2.clientX, e2.clientY).each((caretInfo) => {\n                e2.preventDefault();\n                const range2 = showCaret2(1, caretInfo.node, caretInfo.position === FakeCaretPosition.Before, false);\n                setRange(range2);\n                if (isElement$6(closestContentEditable)) {\n                  closestContentEditable.focus();\n                } else {\n                  editor.getBody().focus();\n                }\n              });\n            }\n          });\n          editor.on(\"keypress\", (e2) => {\n            if (VK.modifierPressed(e2)) {\n              return;\n            }\n            if (isContentEditableFalse(selection.getNode())) {\n              e2.preventDefault();\n            }\n          });\n          editor.on(\"GetSelectionRange\", (e2) => {\n            let rng = e2.range;\n            if (selectedElement) {\n              if (!selectedElement.parentNode) {\n                selectedElement = null;\n                return;\n              }\n              rng = rng.cloneRange();\n              rng.selectNode(selectedElement);\n              e2.range = rng;\n            }\n          });\n          editor.on(\"SetSelectionRange\", (e2) => {\n            e2.range = normalizeVoidElementSelection(e2.range);\n            const rng = setElementSelection(e2.range, e2.forward);\n            if (rng) {\n              e2.range = rng;\n            }\n          });\n          const isPasteBin2 = (node) => node.id === \"mcepastebin\";\n          editor.on(\"AfterSetSelectionRange\", (e2) => {\n            const rng = e2.range;\n            const parentNode = rng.startContainer.parentNode;\n            if (!isRangeInCaretContainer(rng) && !isPasteBin2(parentNode)) {\n              hideFakeCaret();\n            }\n            if (!isFakeSelectionElement(parentNode)) {\n              removeElementSelection();\n            }\n          });\n          init$2(editor);\n          setup$4(editor);\n          setup$3(editor);\n        };\n        const isWithinCaretContainer = (node) => isCaretContainer$2(node) || startsWithCaretContainer$1(node) || endsWithCaretContainer$1(node);\n        const isRangeInCaretContainer = (rng) => isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n        const normalizeVoidElementSelection = (rng) => {\n          const voidElements = editor.schema.getVoidElements();\n          const newRng = dom3.createRng();\n          const startContainer = rng.startContainer;\n          const startOffset = rng.startOffset;\n          const endContainer = rng.endContainer;\n          const endOffset = rng.endOffset;\n          if (has$2(voidElements, startContainer.nodeName.toLowerCase())) {\n            if (startOffset === 0) {\n              newRng.setStartBefore(startContainer);\n            } else {\n              newRng.setStartAfter(startContainer);\n            }\n          } else {\n            newRng.setStart(startContainer, startOffset);\n          }\n          if (has$2(voidElements, endContainer.nodeName.toLowerCase())) {\n            if (endOffset === 0) {\n              newRng.setEndBefore(endContainer);\n            } else {\n              newRng.setEndAfter(endContainer);\n            }\n          } else {\n            newRng.setEnd(endContainer, endOffset);\n          }\n          return newRng;\n        };\n        const setupOffscreenSelection = (node, targetClone) => {\n          const body = SugarElement.fromDom(editor.getBody());\n          const doc = editor.getDoc();\n          const realSelectionContainer = descendant(body, \"#\" + realSelectionId).getOrThunk(() => {\n            const newContainer = SugarElement.fromHtml('<div data-mce-bogus=\"all\" class=\"mce-offscreen-selection\"></div>', doc);\n            set$2(newContainer, \"id\", realSelectionId);\n            append$1(body, newContainer);\n            return newContainer;\n          });\n          const newRange = dom3.createRng();\n          empty(realSelectionContainer);\n          append(realSelectionContainer, [\n            SugarElement.fromText(nbsp, doc),\n            SugarElement.fromDom(targetClone),\n            SugarElement.fromText(nbsp, doc)\n          ]);\n          newRange.setStart(realSelectionContainer.dom.firstChild, 1);\n          newRange.setEnd(realSelectionContainer.dom.lastChild, 0);\n          setAll(realSelectionContainer, { top: dom3.getPos(node, editor.getBody()).y + \"px\" });\n          focus$1(realSelectionContainer);\n          const sel = selection.getSel();\n          sel.removeAllRanges();\n          sel.addRange(newRange);\n          return newRange;\n        };\n        const selectElement = (elm) => {\n          const targetClone = elm.cloneNode(true);\n          const e2 = editor.dispatch(\"ObjectSelected\", {\n            target: elm,\n            targetClone\n          });\n          if (e2.isDefaultPrevented()) {\n            return null;\n          }\n          const range2 = setupOffscreenSelection(elm, e2.targetClone);\n          const nodeElm = SugarElement.fromDom(elm);\n          each$g(descendants(SugarElement.fromDom(editor.getBody()), \"*[data-mce-selected]\"), (elm2) => {\n            if (!eq2(nodeElm, elm2)) {\n              remove$a(elm2, elementSelectionAttr);\n            }\n          });\n          if (!dom3.getAttrib(elm, elementSelectionAttr)) {\n            elm.setAttribute(elementSelectionAttr, \"1\");\n          }\n          selectedElement = elm;\n          hideFakeCaret();\n          return range2;\n        };\n        const setElementSelection = (range2, forward) => {\n          if (!range2) {\n            return null;\n          }\n          if (range2.collapsed) {\n            if (!isRangeInCaretContainer(range2)) {\n              const dir = forward ? 1 : -1;\n              const caretPosition = getNormalizedRangeEndPoint(dir, rootNode, range2);\n              const beforeNode = caretPosition.getNode(!forward);\n              if (isFakeCaretTarget(beforeNode)) {\n                return showCaret2(dir, beforeNode, forward ? !caretPosition.isAtEnd() : false, false);\n              }\n              const afterNode = caretPosition.getNode(forward);\n              if (isFakeCaretTarget(afterNode)) {\n                return showCaret2(dir, afterNode, forward ? false : !caretPosition.isAtEnd(), false);\n              }\n            }\n            return null;\n          }\n          let startContainer = range2.startContainer;\n          let startOffset = range2.startOffset;\n          const endOffset = range2.endOffset;\n          if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse(startContainer.parentNode)) {\n            startContainer = startContainer.parentNode;\n            startOffset = dom3.nodeIndex(startContainer);\n            startContainer = startContainer.parentNode;\n          }\n          if (startContainer.nodeType !== 1) {\n            return null;\n          }\n          if (endOffset === startOffset + 1 && startContainer === range2.endContainer) {\n            const node = startContainer.childNodes[startOffset];\n            if (isFakeSelectionTargetElement(node)) {\n              return selectElement(node);\n            }\n          }\n          return null;\n        };\n        const removeElementSelection = () => {\n          if (selectedElement) {\n            selectedElement.removeAttribute(elementSelectionAttr);\n          }\n          descendant(SugarElement.fromDom(editor.getBody()), \"#\" + realSelectionId).each(remove$5);\n          selectedElement = null;\n        };\n        const destroy2 = () => {\n          fakeCaret.destroy();\n          selectedElement = null;\n        };\n        const hideFakeCaret = () => {\n          fakeCaret.hide();\n        };\n        if (!isRtc(editor)) {\n          registerEvents2();\n        }\n        return {\n          showCaret: showCaret2,\n          showBlockCaretContainer: showBlockCaretContainer2,\n          hideFakeCaret,\n          destroy: destroy2\n        };\n      };\n      const generatePath = (root2, node, offset) => {\n        if (isText$8(node) && (offset < 0 || offset > node.data.length)) {\n          return [];\n        }\n        const p2 = [offset];\n        let current = node;\n        while (current !== root2 && current.parentNode) {\n          const parent2 = current.parentNode;\n          for (let i3 = 0; i3 < parent2.childNodes.length; i3++) {\n            if (parent2.childNodes[i3] === current) {\n              p2.push(i3);\n              break;\n            }\n          }\n          current = parent2;\n        }\n        return current === root2 ? p2.reverse() : [];\n      };\n      const generatePathRange = (root2, startNode, startOffset, endNode, endOffset) => {\n        const start2 = generatePath(root2, startNode, startOffset);\n        const end2 = generatePath(root2, endNode, endOffset);\n        return {\n          start: start2,\n          end: end2\n        };\n      };\n      const resolvePath = (root2, path) => {\n        const nodePath = path.slice();\n        const offset = nodePath.pop();\n        const resolvedNode = foldl(nodePath, (optNode, index2) => optNode.bind((node) => Optional.from(node.childNodes[index2])), Optional.some(root2));\n        return resolvedNode.bind((node) => {\n          if (isText$8(node) && (offset < 0 || offset > node.data.length)) {\n            return Optional.none();\n          } else {\n            return Optional.some({\n              node,\n              offset\n            });\n          }\n        });\n      };\n      const resolvePathRange = (root2, range2) => resolvePath(root2, range2.start).bind(({\n        node: startNode,\n        offset: startOffset\n      }) => resolvePath(root2, range2.end).map(({\n        node: endNode,\n        offset: endOffset\n      }) => {\n        const rng = document.createRange();\n        rng.setStart(startNode, startOffset);\n        rng.setEnd(endNode, endOffset);\n        return rng;\n      }));\n      const generatePathRangeFromRange = (root2, range2) => generatePathRange(root2, range2.startContainer, range2.startOffset, range2.endContainer, range2.endOffset);\n      const cleanEmptyNodes = (dom3, node, isRoot) => {\n        if (node && dom3.isEmpty(node) && !isRoot(node)) {\n          const parent2 = node.parentNode;\n          dom3.remove(node);\n          cleanEmptyNodes(dom3, parent2, isRoot);\n        }\n      };\n      const deleteRng = (dom3, rng, isRoot, clean = true) => {\n        const startParent = rng.startContainer.parentNode;\n        const endParent = rng.endContainer.parentNode;\n        rng.deleteContents();\n        if (clean && !isRoot(rng.startContainer)) {\n          if (isText$8(rng.startContainer) && rng.startContainer.data.length === 0) {\n            dom3.remove(rng.startContainer);\n          }\n          if (isText$8(rng.endContainer) && rng.endContainer.data.length === 0) {\n            dom3.remove(rng.endContainer);\n          }\n          cleanEmptyNodes(dom3, startParent, isRoot);\n          if (startParent !== endParent) {\n            cleanEmptyNodes(dom3, endParent, isRoot);\n          }\n        }\n      };\n      const getParentBlock = (editor, rng) => Optional.from(editor.dom.getParent(rng.startContainer, editor.dom.isBlock));\n      const stripPattern = (dom3, block2, pattern) => {\n        const firstTextNode = textAfter(block2, 0, block2);\n        firstTextNode.each((spot) => {\n          const node = spot.container;\n          scanRight(node, pattern.start.length, block2).each((end2) => {\n            const rng = dom3.createRng();\n            rng.setStart(node, 0);\n            rng.setEnd(end2.container, end2.offset);\n            deleteRng(dom3, rng, (e2) => e2 === block2);\n          });\n        });\n      };\n      const applyPattern$1 = (editor, match4) => {\n        const dom3 = editor.dom;\n        const pattern = match4.pattern;\n        const rng = resolvePathRange(dom3.getRoot(), match4.range).getOrDie(\"Unable to resolve path range\");\n        const isBlockFormatName = (name2, formatter) => {\n          const formatSet = formatter.get(name2);\n          return isArray$1(formatSet) && head(formatSet).exists((format2) => has$2(format2, \"block\"));\n        };\n        getParentBlock(editor, rng).each((block2) => {\n          if (pattern.type === \"block-format\") {\n            if (isBlockFormatName(pattern.format, editor.formatter)) {\n              editor.undoManager.transact(() => {\n                stripPattern(editor.dom, block2, pattern);\n                editor.formatter.apply(pattern.format);\n              });\n            }\n          } else if (pattern.type === \"block-command\") {\n            editor.undoManager.transact(() => {\n              stripPattern(editor.dom, block2, pattern);\n              editor.execCommand(pattern.cmd, false, pattern.value);\n            });\n          }\n        });\n        return true;\n      };\n      const findPattern$1 = (patterns, text3) => {\n        const nuText = text3.replace(nbsp, \" \");\n        return find$2(patterns, (pattern) => text3.indexOf(pattern.start) === 0 || nuText.indexOf(pattern.start) === 0);\n      };\n      const findPatterns$1 = (editor, patterns) => {\n        const dom3 = editor.dom;\n        const rng = editor.selection.getRng();\n        return getParentBlock(editor, rng).filter((block2) => {\n          const forcedRootBlock = getForcedRootBlock(editor);\n          const matchesForcedRootBlock = dom3.is(block2, forcedRootBlock);\n          return block2 !== null && matchesForcedRootBlock;\n        }).bind((block2) => {\n          const blockText = block2.textContent;\n          const matchedPattern = findPattern$1(patterns, blockText);\n          return matchedPattern.map((pattern) => {\n            if (Tools.trim(blockText).length === pattern.start.length) {\n              return [];\n            }\n            return [{\n              pattern,\n              range: generatePathRange(dom3.getRoot(), block2, 0, block2, 0)\n            }];\n          });\n        }).getOr([]);\n      };\n      const applyMatches$1 = (editor, matches) => {\n        if (matches.length === 0) {\n          return;\n        }\n        const bookmark = editor.selection.getBookmark();\n        each$g(matches, (match4) => applyPattern$1(editor, match4));\n        editor.selection.moveToBookmark(bookmark);\n      };\n      const newMarker = (dom3, id) => dom3.create(\"span\", {\n        \"data-mce-type\": \"bookmark\",\n        id\n      });\n      const rangeFromMarker = (dom3, marker) => {\n        const rng = dom3.createRng();\n        rng.setStartAfter(marker.start);\n        rng.setEndBefore(marker.end);\n        return rng;\n      };\n      const createMarker = (dom3, markerPrefix, pathRange) => {\n        const rng = resolvePathRange(dom3.getRoot(), pathRange).getOrDie(\"Unable to resolve path range\");\n        const startNode = rng.startContainer;\n        const endNode = rng.endContainer;\n        const textEnd = rng.endOffset === 0 ? endNode : endNode.splitText(rng.endOffset);\n        const textStart = rng.startOffset === 0 ? startNode : startNode.splitText(rng.startOffset);\n        return {\n          prefix: markerPrefix,\n          end: textEnd.parentNode.insertBefore(newMarker(dom3, markerPrefix + \"-end\"), textEnd),\n          start: textStart.parentNode.insertBefore(newMarker(dom3, markerPrefix + \"-start\"), textStart)\n        };\n      };\n      const removeMarker = (dom3, marker, isRoot) => {\n        cleanEmptyNodes(dom3, dom3.get(marker.prefix + \"-end\"), isRoot);\n        cleanEmptyNodes(dom3, dom3.get(marker.prefix + \"-start\"), isRoot);\n      };\n      const isReplacementPattern = (pattern) => pattern.start.length === 0;\n      const matchesPattern = (patternContent) => (element, offset) => {\n        const text3 = element.data;\n        const searchText = text3.substring(0, offset);\n        const startEndIndex = searchText.lastIndexOf(patternContent.charAt(patternContent.length - 1));\n        const startIndex = searchText.lastIndexOf(patternContent);\n        if (startIndex !== -1) {\n          return startIndex + patternContent.length;\n        } else if (startEndIndex !== -1) {\n          return startEndIndex + 1;\n        } else {\n          return -1;\n        }\n      };\n      const findPatternStartFromSpot = (dom3, pattern, block2, spot) => {\n        const startPattern = pattern.start;\n        const startSpot = repeatLeft(dom3, spot.container, spot.offset, matchesPattern(startPattern), block2);\n        return startSpot.bind((spot2) => {\n          if (spot2.offset >= startPattern.length) {\n            const rng = dom3.createRng();\n            rng.setStart(spot2.container, spot2.offset - startPattern.length);\n            rng.setEnd(spot2.container, spot2.offset);\n            return Optional.some(rng);\n          } else {\n            const offset = spot2.offset - startPattern.length;\n            return scanLeft(spot2.container, offset, block2).map((nextSpot) => {\n              const rng = dom3.createRng();\n              rng.setStart(nextSpot.container, nextSpot.offset);\n              rng.setEnd(spot2.container, spot2.offset);\n              return rng;\n            }).filter((rng) => rng.toString() === startPattern).orThunk(() => findPatternStartFromSpot(dom3, pattern, block2, point(spot2.container, 0)));\n          }\n        });\n      };\n      const findPatternStart = (dom3, pattern, node, offset, block2, requireGap = false) => {\n        if (pattern.start.length === 0 && !requireGap) {\n          const rng = dom3.createRng();\n          rng.setStart(node, offset);\n          rng.setEnd(node, offset);\n          return Optional.some(rng);\n        }\n        return textBefore(node, offset, block2).bind((spot) => {\n          const start2 = findPatternStartFromSpot(dom3, pattern, block2, spot);\n          return start2.bind((startRange) => {\n            if (requireGap) {\n              if (startRange.endContainer === spot.container && startRange.endOffset === spot.offset) {\n                return Optional.none();\n              } else if (spot.offset === 0 && startRange.endContainer.textContent.length === startRange.endOffset) {\n                return Optional.none();\n              }\n            }\n            return Optional.some(startRange);\n          });\n        });\n      };\n      const findPattern = (editor, block2, details) => {\n        const dom3 = editor.dom;\n        const root2 = dom3.getRoot();\n        const pattern = details.pattern;\n        const endNode = details.position.container;\n        const endOffset = details.position.offset;\n        return scanLeft(endNode, endOffset - details.pattern.end.length, block2).bind((spot) => {\n          const endPathRng = generatePathRange(root2, spot.container, spot.offset, endNode, endOffset);\n          if (isReplacementPattern(pattern)) {\n            return Optional.some({\n              matches: [{\n                pattern,\n                startRng: endPathRng,\n                endRng: endPathRng\n              }],\n              position: spot\n            });\n          } else {\n            const resultsOpt = findPatternsRec(editor, details.remainingPatterns, spot.container, spot.offset, block2);\n            const results = resultsOpt.getOr({\n              matches: [],\n              position: spot\n            });\n            const pos = results.position;\n            const start2 = findPatternStart(dom3, pattern, pos.container, pos.offset, block2, resultsOpt.isNone());\n            return start2.map((startRng) => {\n              const startPathRng = generatePathRangeFromRange(root2, startRng);\n              return {\n                matches: results.matches.concat([{\n                  pattern,\n                  startRng: startPathRng,\n                  endRng: endPathRng\n                }]),\n                position: point(startRng.startContainer, startRng.startOffset)\n              };\n            });\n          }\n        });\n      };\n      const findPatternsRec = (editor, patterns, node, offset, block2) => {\n        const dom3 = editor.dom;\n        return textBefore(node, offset, dom3.getRoot()).bind((endSpot) => {\n          const rng = dom3.createRng();\n          rng.setStart(block2, 0);\n          rng.setEnd(node, offset);\n          const text3 = rng.toString();\n          for (let i3 = 0; i3 < patterns.length; i3++) {\n            const pattern = patterns[i3];\n            if (!endsWith(text3, pattern.end)) {\n              continue;\n            }\n            const patternsWithoutCurrent = patterns.slice();\n            patternsWithoutCurrent.splice(i3, 1);\n            const result = findPattern(editor, block2, {\n              pattern,\n              remainingPatterns: patternsWithoutCurrent,\n              position: endSpot\n            });\n            if (result.isSome()) {\n              return result;\n            }\n          }\n          return Optional.none();\n        });\n      };\n      const applyPattern = (editor, pattern, patternRange) => {\n        editor.selection.setRng(patternRange);\n        if (pattern.type === \"inline-format\") {\n          each$g(pattern.format, (format2) => {\n            editor.formatter.apply(format2);\n          });\n        } else {\n          editor.execCommand(pattern.cmd, false, pattern.value);\n        }\n      };\n      const applyReplacementPattern = (editor, pattern, marker, isRoot) => {\n        const markerRange = rangeFromMarker(editor.dom, marker);\n        deleteRng(editor.dom, markerRange, isRoot);\n        applyPattern(editor, pattern, markerRange);\n      };\n      const applyPatternWithContent = (editor, pattern, startMarker, endMarker, isRoot) => {\n        const dom3 = editor.dom;\n        const markerEndRange = rangeFromMarker(dom3, endMarker);\n        const markerStartRange = rangeFromMarker(dom3, startMarker);\n        deleteRng(dom3, markerStartRange, isRoot);\n        deleteRng(dom3, markerEndRange, isRoot);\n        const patternMarker = {\n          prefix: startMarker.prefix,\n          start: startMarker.end,\n          end: endMarker.start\n        };\n        const patternRange = rangeFromMarker(dom3, patternMarker);\n        applyPattern(editor, pattern, patternRange);\n      };\n      const addMarkers = (dom3, matches) => {\n        const markerPrefix = generate$1(\"mce_textpattern\");\n        const matchesWithEnds = foldr(matches, (acc, match4) => {\n          const endMarker = createMarker(dom3, markerPrefix + `_end${acc.length}`, match4.endRng);\n          return acc.concat([{\n            ...match4,\n            endMarker\n          }]);\n        }, []);\n        return foldr(matchesWithEnds, (acc, match4) => {\n          const idx = matchesWithEnds.length - acc.length - 1;\n          const startMarker = isReplacementPattern(match4.pattern) ? match4.endMarker : createMarker(dom3, markerPrefix + `_start${idx}`, match4.startRng);\n          return acc.concat([{\n            ...match4,\n            startMarker\n          }]);\n        }, []);\n      };\n      const findPatterns = (editor, patterns, space) => {\n        const rng = editor.selection.getRng();\n        if (rng.collapsed === false) {\n          return [];\n        }\n        return getParentBlock(editor, rng).bind((block2) => {\n          const offset = Math.max(0, rng.startOffset - (space ? 1 : 0));\n          return findPatternsRec(editor, patterns, rng.startContainer, offset, block2);\n        }).fold(() => [], (result) => result.matches);\n      };\n      const applyMatches = (editor, matches) => {\n        if (matches.length === 0) {\n          return;\n        }\n        const dom3 = editor.dom;\n        const bookmark = editor.selection.getBookmark();\n        const matchesWithMarkers = addMarkers(dom3, matches);\n        each$g(matchesWithMarkers, (match4) => {\n          const block2 = dom3.getParent(match4.startMarker.start, dom3.isBlock);\n          const isRoot = (node) => node === block2;\n          if (isReplacementPattern(match4.pattern)) {\n            applyReplacementPattern(editor, match4.pattern, match4.endMarker, isRoot);\n          } else {\n            applyPatternWithContent(editor, match4.pattern, match4.startMarker, match4.endMarker, isRoot);\n          }\n          removeMarker(dom3, match4.endMarker, isRoot);\n          removeMarker(dom3, match4.startMarker, isRoot);\n        });\n        editor.selection.moveToBookmark(bookmark);\n      };\n      const hasPatterns = (patternSet) => patternSet.inlinePatterns.length > 0 || patternSet.blockPatterns.length > 0;\n      const handleEnter = (editor, patternSet) => {\n        if (!editor.selection.isCollapsed() || !hasPatterns(patternSet)) {\n          return false;\n        }\n        const inlineMatches = findPatterns(editor, patternSet.inlinePatterns, false);\n        const blockMatches = findPatterns$1(editor, patternSet.blockPatterns);\n        if (blockMatches.length > 0 || inlineMatches.length > 0) {\n          editor.undoManager.add();\n          editor.undoManager.extra(() => {\n            editor.execCommand(\"mceInsertNewLine\");\n          }, () => {\n            editor.insertContent(zeroWidth);\n            applyMatches(editor, inlineMatches);\n            applyMatches$1(editor, blockMatches);\n            const range2 = editor.selection.getRng();\n            const spot = textBefore(range2.startContainer, range2.startOffset, editor.dom.getRoot());\n            editor.execCommand(\"mceInsertNewLine\");\n            spot.each((s2) => {\n              const node = s2.container;\n              if (node.data.charAt(s2.offset - 1) === zeroWidth) {\n                node.deleteData(s2.offset - 1, 1);\n                cleanEmptyNodes(editor.dom, node.parentNode, (e2) => e2 === editor.dom.getRoot());\n              }\n            });\n          });\n          return true;\n        }\n        return false;\n      };\n      const handleInlineKey = (editor, inlinePatterns) => {\n        if (inlinePatterns.length > 0) {\n          const inlineMatches = findPatterns(editor, inlinePatterns, true);\n          if (inlineMatches.length > 0) {\n            editor.undoManager.transact(() => {\n              applyMatches(editor, inlineMatches);\n            });\n          }\n        }\n      };\n      const checkKeyEvent = (codes, event, predicate) => {\n        for (let i3 = 0; i3 < codes.length; i3++) {\n          if (predicate(codes[i3], event)) {\n            return true;\n          }\n        }\n        return false;\n      };\n      const checkKeyCode = (codes, event) => checkKeyEvent(codes, event, (code2, event2) => {\n        return code2 === event2.keyCode && VK.modifierPressed(event2) === false;\n      });\n      const checkCharCode = (chars, event) => checkKeyEvent(chars, event, (chr, event2) => {\n        return chr.charCodeAt(0) === event2.charCode;\n      });\n      const setup$2 = (editor) => {\n        const charCodes = [\n          \",\",\n          \".\",\n          \";\",\n          \":\",\n          \"!\",\n          \"?\"\n        ];\n        const keyCodes = [32];\n        const getPatternSet = () => createPatternSet(getTextPatterns(editor));\n        const getInlinePatterns$1 = () => getInlinePatterns(getTextPatterns(editor));\n        editor.on(\"keydown\", (e2) => {\n          if (e2.keyCode === 13 && !VK.modifierPressed(e2)) {\n            if (handleEnter(editor, getPatternSet())) {\n              e2.preventDefault();\n            }\n          }\n        }, true);\n        editor.on(\"keyup\", (e2) => {\n          if (checkKeyCode(keyCodes, e2)) {\n            handleInlineKey(editor, getInlinePatterns$1());\n          }\n        });\n        editor.on(\"keypress\", (e2) => {\n          if (checkCharCode(charCodes, e2)) {\n            Delay.setEditorTimeout(editor, () => {\n              handleInlineKey(editor, getInlinePatterns$1());\n            });\n          }\n        });\n      };\n      const setup$1 = (editor) => {\n        setup$2(editor);\n      };\n      const Quirks = (editor) => {\n        const each2 = Tools.each;\n        const BACKSPACE = VK.BACKSPACE, DELETE2 = VK.DELETE, dom3 = editor.dom, selection = editor.selection, parser = editor.parser;\n        const browser2 = Env.browser;\n        const isGecko = browser2.isFirefox();\n        const isWebKit = browser2.isChromium() || browser2.isSafari();\n        const isiOS = Env.deviceType.isiPhone() || Env.deviceType.isiPad();\n        const isMac2 = Env.os.isMacOS() || Env.os.isiOS();\n        const setEditorCommandState2 = (cmd, state) => {\n          try {\n            editor.getDoc().execCommand(cmd, false, state);\n          } catch (ex) {\n          }\n        };\n        const isDefaultPrevented = (e2) => {\n          return e2.isDefaultPrevented();\n        };\n        const emptyEditorWhenDeleting = () => {\n          const serializeRng = (rng) => {\n            const body = dom3.create(\"body\");\n            const contents = rng.cloneContents();\n            body.appendChild(contents);\n            return selection.serializer.serialize(body, { format: \"html\" });\n          };\n          const allContentsSelected = (rng) => {\n            const selection2 = serializeRng(rng);\n            const allRng = dom3.createRng();\n            allRng.selectNode(editor.getBody());\n            const allSelection = serializeRng(allRng);\n            return selection2 === allSelection;\n          };\n          editor.on(\"keydown\", (e2) => {\n            const keyCode = e2.keyCode;\n            let isCollapsed, body;\n            if (!isDefaultPrevented(e2) && (keyCode === DELETE2 || keyCode === BACKSPACE)) {\n              isCollapsed = editor.selection.isCollapsed();\n              body = editor.getBody();\n              if (isCollapsed && !dom3.isEmpty(body)) {\n                return;\n              }\n              if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n                return;\n              }\n              e2.preventDefault();\n              editor.setContent(\"\");\n              if (body.firstChild && dom3.isBlock(body.firstChild)) {\n                editor.selection.setCursorLocation(body.firstChild, 0);\n              } else {\n                editor.selection.setCursorLocation(body, 0);\n              }\n              editor.nodeChanged();\n            }\n          });\n        };\n        const selectAll = () => {\n          editor.shortcuts.add(\"meta+a\", null, \"SelectAll\");\n        };\n        const documentElementEditingFocus = () => {\n          if (!editor.inline) {\n            dom3.bind(editor.getDoc(), \"mousedown mouseup\", (e2) => {\n              let rng;\n              if (e2.target === editor.getDoc().documentElement) {\n                rng = selection.getRng();\n                editor.getBody().focus();\n                if (e2.type === \"mousedown\") {\n                  if (isCaretContainer$2(rng.startContainer)) {\n                    return;\n                  }\n                  selection.placeCaretAt(e2.clientX, e2.clientY);\n                } else {\n                  selection.setRng(rng);\n                }\n              }\n            });\n          }\n        };\n        const removeHrOnBackspace = () => {\n          editor.on(\"keydown\", (e2) => {\n            if (!isDefaultPrevented(e2) && e2.keyCode === BACKSPACE) {\n              if (!editor.getBody().getElementsByTagName(\"hr\").length) {\n                return;\n              }\n              if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n                const node = selection.getNode();\n                const previousSibling = node.previousSibling;\n                if (node.nodeName === \"HR\") {\n                  dom3.remove(node);\n                  e2.preventDefault();\n                  return;\n                }\n                if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === \"hr\") {\n                  dom3.remove(previousSibling);\n                  e2.preventDefault();\n                }\n              }\n            }\n          });\n        };\n        const focusBody2 = () => {\n          if (!Range.prototype.getClientRects) {\n            editor.on(\"mousedown\", (e2) => {\n              if (!isDefaultPrevented(e2) && e2.target.nodeName === \"HTML\") {\n                const body = editor.getBody();\n                body.blur();\n                Delay.setEditorTimeout(editor, () => {\n                  body.focus();\n                });\n              }\n            });\n          }\n        };\n        const selectControlElements = () => {\n          const visualAidsAnchorClass = getVisualAidsAnchorClass(editor);\n          editor.on(\"click\", (e2) => {\n            const target = e2.target;\n            if (/^(IMG|HR)$/.test(target.nodeName) && dom3.getContentEditableParent(target) !== \"false\") {\n              e2.preventDefault();\n              editor.selection.select(target);\n              editor.nodeChanged();\n            }\n            if (target.nodeName === \"A\" && dom3.hasClass(target, visualAidsAnchorClass) && target.childNodes.length === 0) {\n              e2.preventDefault();\n              selection.select(target);\n            }\n          });\n        };\n        const removeStylesWhenDeletingAcrossBlockElements = () => {\n          const getAttributeApplyFunction = () => {\n            const template = dom3.getAttribs(selection.getStart().cloneNode(false));\n            return () => {\n              const target = selection.getStart();\n              if (target !== editor.getBody()) {\n                dom3.setAttrib(target, \"style\", null);\n                each2(template, (attr) => {\n                  target.setAttributeNode(attr.cloneNode(true));\n                });\n              }\n            };\n          };\n          const isSelectionAcrossElements = () => {\n            return !selection.isCollapsed() && dom3.getParent(selection.getStart(), dom3.isBlock) !== dom3.getParent(selection.getEnd(), dom3.isBlock);\n          };\n          editor.on(\"keypress\", (e2) => {\n            let applyAttributes2;\n            if (!isDefaultPrevented(e2) && (e2.keyCode === 8 || e2.keyCode === 46) && isSelectionAcrossElements()) {\n              applyAttributes2 = getAttributeApplyFunction();\n              editor.getDoc().execCommand(\"delete\", false, null);\n              applyAttributes2();\n              e2.preventDefault();\n              return false;\n            }\n          });\n          dom3.bind(editor.getDoc(), \"cut\", (e2) => {\n            let applyAttributes2;\n            if (!isDefaultPrevented(e2) && isSelectionAcrossElements()) {\n              applyAttributes2 = getAttributeApplyFunction();\n              Delay.setEditorTimeout(editor, () => {\n                applyAttributes2();\n              });\n            }\n          });\n        };\n        const disableBackspaceIntoATable = () => {\n          editor.on(\"keydown\", (e2) => {\n            if (!isDefaultPrevented(e2) && e2.keyCode === BACKSPACE) {\n              if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n                const previousSibling = selection.getNode().previousSibling;\n                if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === \"table\") {\n                  e2.preventDefault();\n                  return false;\n                }\n              }\n            }\n          });\n        };\n        const removeBlockQuoteOnBackSpace = () => {\n          editor.on(\"keydown\", (e2) => {\n            let rng, parent2;\n            if (isDefaultPrevented(e2) || e2.keyCode !== VK.BACKSPACE) {\n              return;\n            }\n            rng = selection.getRng();\n            const container = rng.startContainer;\n            const offset = rng.startOffset;\n            const root2 = dom3.getRoot();\n            parent2 = container;\n            if (!rng.collapsed || offset !== 0) {\n              return;\n            }\n            while (parent2 && parent2.parentNode && parent2.parentNode.firstChild === parent2 && parent2.parentNode !== root2) {\n              parent2 = parent2.parentNode;\n            }\n            if (parent2.tagName === \"BLOCKQUOTE\") {\n              editor.formatter.toggle(\"blockquote\", null, parent2);\n              rng = dom3.createRng();\n              rng.setStart(container, 0);\n              rng.setEnd(container, 0);\n              selection.setRng(rng);\n            }\n          });\n        };\n        const setGeckoEditingOptions = () => {\n          const setOpts = () => {\n            setEditorCommandState2(\"StyleWithCSS\", false);\n            setEditorCommandState2(\"enableInlineTableEditing\", false);\n            if (!getObjectResizing(editor)) {\n              setEditorCommandState2(\"enableObjectResizing\", false);\n            }\n          };\n          if (!isReadOnly$1(editor)) {\n            editor.on(\"BeforeExecCommand mousedown\", setOpts);\n          }\n        };\n        const addBrAfterLastLinks = () => {\n          const fixLinks = () => {\n            each2(dom3.select(\"a\"), (node) => {\n              let parentNode = node.parentNode;\n              const root2 = dom3.getRoot();\n              if (parentNode.lastChild === node) {\n                while (parentNode && !dom3.isBlock(parentNode)) {\n                  if (parentNode.parentNode.lastChild !== parentNode || parentNode === root2) {\n                    return;\n                  }\n                  parentNode = parentNode.parentNode;\n                }\n                dom3.add(parentNode, \"br\", { \"data-mce-bogus\": 1 });\n              }\n            });\n          };\n          editor.on(\"SetContent ExecCommand\", (e2) => {\n            if (e2.type === \"setcontent\" || e2.command === \"mceInsertLink\") {\n              fixLinks();\n            }\n          });\n        };\n        const setDefaultBlockType = () => {\n          editor.on(\"init\", () => {\n            setEditorCommandState2(\"DefaultParagraphSeparator\", getForcedRootBlock(editor));\n          });\n        };\n        const normalizeSelection2 = () => {\n          editor.on(\"keyup focusin mouseup\", (e2) => {\n            if (!VK.modifierPressed(e2)) {\n              selection.normalize();\n            }\n          }, true);\n        };\n        const showBrokenImageIcon = () => {\n          editor.contentStyles.push(\"img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}\");\n        };\n        const restoreFocusOnKeyDown = () => {\n          if (!editor.inline) {\n            editor.on(\"keydown\", () => {\n              if (document.activeElement === document.body) {\n                editor.getWin().focus();\n              }\n            });\n          }\n        };\n        const bodyHeight = () => {\n          if (!editor.inline) {\n            editor.contentStyles.push(\"body {min-height: 150px}\");\n            editor.on(\"click\", (e2) => {\n              let rng;\n              if (e2.target.nodeName === \"HTML\") {\n                rng = editor.selection.getRng();\n                editor.getBody().focus();\n                editor.selection.setRng(rng);\n                editor.selection.normalize();\n                editor.nodeChanged();\n              }\n            });\n          }\n        };\n        const blockCmdArrowNavigation = () => {\n          if (isMac2) {\n            editor.on(\"keydown\", (e2) => {\n              if (VK.metaKeyPressed(e2) && !e2.shiftKey && (e2.keyCode === 37 || e2.keyCode === 39)) {\n                e2.preventDefault();\n                const selection2 = editor.selection.getSel();\n                selection2.modify(\"move\", e2.keyCode === 37 ? \"backward\" : \"forward\", \"lineboundary\");\n              }\n            });\n          }\n        };\n        const tapLinksAndImages = () => {\n          editor.on(\"click\", (e2) => {\n            let elm = e2.target;\n            do {\n              if (elm.tagName === \"A\") {\n                e2.preventDefault();\n                return;\n              }\n            } while (elm = elm.parentNode);\n          });\n          editor.contentStyles.push(\".mce-content-body {-webkit-touch-callout: none}\");\n        };\n        const blockFormSubmitInsideEditor = () => {\n          editor.on(\"init\", () => {\n            editor.dom.bind(editor.getBody(), \"submit\", (e2) => {\n              e2.preventDefault();\n            });\n          });\n        };\n        const removeAppleInterchangeBrs = () => {\n          parser.addNodeFilter(\"br\", (nodes) => {\n            let i3 = nodes.length;\n            while (i3--) {\n              if (nodes[i3].attr(\"class\") === \"Apple-interchange-newline\") {\n                nodes[i3].remove();\n              }\n            }\n          });\n        };\n        const refreshContentEditable = noop;\n        const isHidden = () => {\n          if (!isGecko || editor.removed) {\n            return false;\n          }\n          const sel = editor.selection.getSel();\n          return !sel || !sel.rangeCount || sel.rangeCount === 0;\n        };\n        const setupRtc = () => {\n          if (isWebKit) {\n            documentElementEditingFocus();\n            selectControlElements();\n            blockFormSubmitInsideEditor();\n            selectAll();\n            if (isiOS) {\n              restoreFocusOnKeyDown();\n              bodyHeight();\n              tapLinksAndImages();\n            }\n          }\n          if (isGecko) {\n            focusBody2();\n            setGeckoEditingOptions();\n            showBrokenImageIcon();\n            blockCmdArrowNavigation();\n          }\n        };\n        const setup2 = () => {\n          removeBlockQuoteOnBackSpace();\n          emptyEditorWhenDeleting();\n          if (!Env.windowsPhone) {\n            normalizeSelection2();\n          }\n          if (isWebKit) {\n            documentElementEditingFocus();\n            selectControlElements();\n            setDefaultBlockType();\n            blockFormSubmitInsideEditor();\n            disableBackspaceIntoATable();\n            removeAppleInterchangeBrs();\n            if (isiOS) {\n              restoreFocusOnKeyDown();\n              bodyHeight();\n              tapLinksAndImages();\n            } else {\n              selectAll();\n            }\n          }\n          if (isGecko) {\n            removeHrOnBackspace();\n            focusBody2();\n            removeStylesWhenDeletingAcrossBlockElements();\n            setGeckoEditingOptions();\n            addBrAfterLastLinks();\n            showBrokenImageIcon();\n            blockCmdArrowNavigation();\n            disableBackspaceIntoATable();\n          }\n        };\n        if (isRtc(editor)) {\n          setupRtc();\n        } else {\n          setup2();\n        }\n        return {\n          refreshContentEditable,\n          isHidden\n        };\n      };\n      const DOM$6 = DOMUtils.DOM;\n      const appendStyle = (editor, text3) => {\n        const body = SugarElement.fromDom(editor.getBody());\n        const container = getStyleContainer(getRootNode(body));\n        const style = SugarElement.fromTag(\"style\");\n        set$2(style, \"type\", \"text/css\");\n        append$1(style, SugarElement.fromText(text3));\n        append$1(container, style);\n        editor.on(\"remove\", () => {\n          remove$5(style);\n        });\n      };\n      const getRootName = (editor) => editor.inline ? editor.getElement().nodeName.toLowerCase() : void 0;\n      const removeUndefined = (obj) => filter$5(obj, (v2) => isUndefined2(v2) === false);\n      const mkParserSettings = (editor) => {\n        const getOption2 = editor.options.get;\n        const blobCache = editor.editorUpload.blobCache;\n        return removeUndefined({\n          allow_conditional_comments: getOption2(\"allow_conditional_comments\"),\n          allow_html_data_urls: getOption2(\"allow_html_data_urls\"),\n          allow_svg_data_urls: getOption2(\"allow_svg_data_urls\"),\n          allow_html_in_named_anchor: getOption2(\"allow_html_in_named_anchor\"),\n          allow_script_urls: getOption2(\"allow_script_urls\"),\n          allow_unsafe_link_target: getOption2(\"allow_unsafe_link_target\"),\n          convert_fonts_to_spans: getOption2(\"convert_fonts_to_spans\"),\n          fix_list_elements: getOption2(\"fix_list_elements\"),\n          font_size_legacy_values: getOption2(\"font_size_legacy_values\"),\n          forced_root_block: getOption2(\"forced_root_block\"),\n          forced_root_block_attrs: getOption2(\"forced_root_block_attrs\"),\n          preserve_cdata: getOption2(\"preserve_cdata\"),\n          remove_trailing_brs: getOption2(\"remove_trailing_brs\"),\n          inline_styles: getOption2(\"inline_styles\"),\n          root_name: getRootName(editor),\n          validate: true,\n          blob_cache: blobCache,\n          document: editor.getDoc()\n        });\n      };\n      const mkSchemaSettings = (editor) => {\n        const getOption2 = editor.options.get;\n        return removeUndefined({\n          custom_elements: getOption2(\"custom_elements\"),\n          extended_valid_elements: getOption2(\"extended_valid_elements\"),\n          invalid_elements: getOption2(\"invalid_elements\"),\n          invalid_styles: getOption2(\"invalid_styles\"),\n          schema: getOption2(\"schema\"),\n          valid_children: getOption2(\"valid_children\"),\n          valid_classes: getOption2(\"valid_classes\"),\n          valid_elements: getOption2(\"valid_elements\"),\n          valid_styles: getOption2(\"valid_styles\"),\n          verify_html: getOption2(\"verify_html\")\n        });\n      };\n      const mkSerializerSettings = (editor) => {\n        const getOption2 = editor.options.get;\n        return {\n          ...mkParserSettings(editor),\n          ...mkSchemaSettings(editor),\n          ...removeUndefined({\n            url_converter: getOption2(\"url_converter\"),\n            url_converter_scope: getOption2(\"url_converter_scope\"),\n            element_format: getOption2(\"element_format\"),\n            entities: getOption2(\"entities\"),\n            entity_encoding: getOption2(\"entity_encoding\"),\n            indent: getOption2(\"indent\"),\n            indent_after: getOption2(\"indent_after\"),\n            indent_before: getOption2(\"indent_before\")\n          })\n        };\n      };\n      const createParser = (editor) => {\n        const parser = DomParser(mkParserSettings(editor), editor.schema);\n        parser.addAttributeFilter(\"src,href,style,tabindex\", (nodes, name2) => {\n          let i3 = nodes.length, node, value2;\n          const dom3 = editor.dom;\n          const internalName = \"data-mce-\" + name2;\n          while (i3--) {\n            node = nodes[i3];\n            value2 = node.attr(name2);\n            if (value2 && !node.attr(internalName)) {\n              if (value2.indexOf(\"data:\") === 0 || value2.indexOf(\"blob:\") === 0) {\n                continue;\n              }\n              if (name2 === \"style\") {\n                value2 = dom3.serializeStyle(dom3.parseStyle(value2), node.name);\n                if (!value2.length) {\n                  value2 = null;\n                }\n                node.attr(internalName, value2);\n                node.attr(name2, value2);\n              } else if (name2 === \"tabindex\") {\n                node.attr(internalName, value2);\n                node.attr(name2, null);\n              } else {\n                node.attr(internalName, editor.convertURL(value2, name2, node.name));\n              }\n            }\n          }\n        });\n        parser.addNodeFilter(\"script\", (nodes) => {\n          let i3 = nodes.length;\n          while (i3--) {\n            const node = nodes[i3];\n            const type2 = node.attr(\"type\") || \"no/type\";\n            if (type2.indexOf(\"mce-\") !== 0) {\n              node.attr(\"type\", \"mce-\" + type2);\n            }\n          }\n        });\n        if (editor.options.get(\"preserve_cdata\")) {\n          parser.addNodeFilter(\"#cdata\", (nodes) => {\n            let i3 = nodes.length;\n            while (i3--) {\n              const node = nodes[i3];\n              node.type = 8;\n              node.name = \"#comment\";\n              node.value = \"[CDATA[\" + editor.dom.encode(node.value) + \"]]\";\n            }\n          });\n        }\n        parser.addNodeFilter(\"p,h1,h2,h3,h4,h5,h6,div\", (nodes) => {\n          let i3 = nodes.length;\n          const nonEmptyElements = editor.schema.getNonEmptyElements();\n          while (i3--) {\n            const node = nodes[i3];\n            if (node.isEmpty(nonEmptyElements) && node.getAll(\"br\").length === 0) {\n              node.append(new AstNode(\"br\", 1));\n            }\n          }\n        });\n        return parser;\n      };\n      const autoFocus = (editor) => {\n        const autoFocus2 = getAutoFocus(editor);\n        if (autoFocus2) {\n          Delay.setEditorTimeout(editor, () => {\n            let focusEditor2;\n            if (autoFocus2 === true) {\n              focusEditor2 = editor;\n            } else {\n              focusEditor2 = editor.editorManager.get(autoFocus2);\n            }\n            if (!focusEditor2.destroyed) {\n              focusEditor2.focus();\n            }\n          }, 100);\n        }\n      };\n      const moveSelectionToFirstCaretPosition = (editor) => {\n        const root2 = editor.dom.getRoot();\n        if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root2)) {\n          firstPositionIn(root2).each((pos) => {\n            const node = pos.getNode();\n            const caretPos = isTable$3(node) ? firstPositionIn(node).getOr(pos) : pos;\n            editor.selection.setRng(caretPos.toRange());\n          });\n        }\n      };\n      const initEditor = (editor) => {\n        editor.bindPendingEventDelegates();\n        editor.initialized = true;\n        fireInit(editor);\n        editor.focus(true);\n        moveSelectionToFirstCaretPosition(editor);\n        editor.nodeChanged({ initial: true });\n        const initInstanceCallback = getInitInstanceCallback(editor);\n        if (isFunction2(initInstanceCallback)) {\n          initInstanceCallback.call(editor, editor);\n        }\n        autoFocus(editor);\n      };\n      const getStyleSheetLoader$1 = (editor) => editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader;\n      const makeStylesheetLoadingPromises = (editor, css, framedFonts) => {\n        const promises = [getStyleSheetLoader$1(editor).loadAll(css)];\n        if (editor.inline) {\n          return promises;\n        } else {\n          return promises.concat([editor.ui.styleSheetLoader.loadAll(framedFonts)]);\n        }\n      };\n      const loadContentCss = (editor) => {\n        const styleSheetLoader = getStyleSheetLoader$1(editor);\n        const fontCss = getFontCss(editor);\n        const css = editor.contentCSS;\n        const removeCss = () => {\n          styleSheetLoader.unloadAll(css);\n          if (!editor.inline) {\n            editor.ui.styleSheetLoader.unloadAll(fontCss);\n          }\n        };\n        const loaded = () => {\n          if (editor.removed) {\n            removeCss();\n          } else {\n            editor.on(\"remove\", removeCss);\n          }\n        };\n        if (editor.contentStyles.length > 0) {\n          let contentCssText = \"\";\n          Tools.each(editor.contentStyles, (style) => {\n            contentCssText += style + \"\\r\\n\";\n          });\n          editor.dom.addStyle(contentCssText);\n        }\n        const allStylesheets = Promise.all(makeStylesheetLoadingPromises(editor, css, fontCss)).then(loaded).catch(loaded);\n        const contentStyle = getContentStyle(editor);\n        if (contentStyle) {\n          appendStyle(editor, contentStyle);\n        }\n        return allStylesheets;\n      };\n      const preInit = (editor) => {\n        const doc = editor.getDoc(), body = editor.getBody();\n        firePreInit(editor);\n        if (!shouldBrowserSpellcheck(editor)) {\n          doc.body.spellcheck = false;\n          DOM$6.setAttrib(body, \"spellcheck\", \"false\");\n        }\n        editor.quirks = Quirks(editor);\n        firePostRender(editor);\n        const directionality = getDirectionality(editor);\n        if (directionality !== void 0) {\n          body.dir = directionality;\n        }\n        const protect = getProtect(editor);\n        if (protect) {\n          editor.on(\"BeforeSetContent\", (e2) => {\n            Tools.each(protect, (pattern) => {\n              e2.content = e2.content.replace(pattern, (str) => {\n                return \"<!--mce:protected \" + escape(str) + \"-->\";\n              });\n            });\n          });\n        }\n        editor.on(\"SetContent\", () => {\n          editor.addVisual(editor.getBody());\n        });\n        editor.on(\"compositionstart compositionend\", (e2) => {\n          editor.composing = e2.type === \"compositionstart\";\n        });\n      };\n      const loadInitialContent = (editor) => {\n        if (!isRtc(editor)) {\n          editor.load({\n            initial: true,\n            format: \"html\"\n          });\n        }\n        editor.startContent = editor.getContent({ format: \"raw\" });\n      };\n      const initEditorWithInitialContent = (editor) => {\n        if (editor.removed !== true) {\n          loadInitialContent(editor);\n          initEditor(editor);\n        }\n      };\n      const contentBodyLoaded = (editor) => {\n        const targetElm = editor.getElement();\n        let doc = editor.getDoc();\n        if (editor.inline) {\n          DOM$6.addClass(targetElm, \"mce-content-body\");\n          editor.contentDocument = doc = document;\n          editor.contentWindow = window;\n          editor.bodyElement = targetElm;\n          editor.contentAreaContainer = targetElm;\n        }\n        const body = editor.getBody();\n        body.disabled = true;\n        editor.readonly = isReadOnly$1(editor);\n        if (!editor.readonly) {\n          if (editor.inline && DOM$6.getStyle(body, \"position\", true) === \"static\") {\n            body.style.position = \"relative\";\n          }\n          body.contentEditable = \"true\";\n        }\n        body.disabled = false;\n        editor.editorUpload = EditorUpload(editor);\n        editor.schema = Schema(mkSchemaSettings(editor));\n        editor.dom = DOMUtils(doc, {\n          keep_values: true,\n          url_converter: editor.convertURL,\n          url_converter_scope: editor,\n          update_styles: true,\n          root_element: editor.inline ? editor.getBody() : null,\n          collect: () => editor.inline,\n          schema: editor.schema,\n          contentCssCors: shouldUseContentCssCors(editor),\n          referrerPolicy: getReferrerPolicy(editor),\n          onSetAttrib: (e2) => {\n            editor.dispatch(\"SetAttrib\", e2);\n          }\n        });\n        editor.parser = createParser(editor);\n        editor.serializer = DomSerializer(mkSerializerSettings(editor), editor);\n        editor.selection = EditorSelection(editor.dom, editor.getWin(), editor.serializer, editor);\n        editor.annotator = Annotator(editor);\n        editor.formatter = Formatter(editor);\n        editor.undoManager = UndoManager(editor);\n        editor._nodeChangeDispatcher = new NodeChange(editor);\n        editor._selectionOverrides = SelectionOverrides(editor);\n        setup$o(editor);\n        setup$6(editor);\n        setup$m(editor);\n        if (!isRtc(editor)) {\n          setup$5(editor);\n          setup$1(editor);\n        }\n        const caret = setup$b(editor);\n        setup$p(editor, caret);\n        setup$n(editor);\n        setup$q(editor);\n        setup$7(editor);\n        const setupRtcThunk = setup$s(editor);\n        preInit(editor);\n        setupRtcThunk.fold(() => {\n          loadContentCss(editor).then(() => initEditorWithInitialContent(editor));\n        }, (setupRtc) => {\n          editor.setProgressState(true);\n          loadContentCss(editor).then(() => {\n            setupRtc().then((_rtcMode) => {\n              editor.setProgressState(false);\n              initEditorWithInitialContent(editor);\n              bindEvents(editor);\n            }, (err) => {\n              editor.notificationManager.open({\n                type: \"error\",\n                text: String(err)\n              });\n              initEditorWithInitialContent(editor);\n              bindEvents(editor);\n            });\n          });\n        });\n      };\n      const initContentBody = (editor, skipWrite) => {\n        if (!editor.inline) {\n          editor.getElement().style.visibility = editor.orgVisibility;\n        }\n        if (!editor.inline) {\n          const iframe = editor.iframeElement;\n          const binder2 = bind$1(SugarElement.fromDom(iframe), \"load\", () => {\n            binder2.unbind();\n            editor.contentDocument = iframe.contentDocument;\n            contentBodyLoaded(editor);\n          });\n          iframe.srcdoc = editor.iframeHTML;\n        } else {\n          contentBodyLoaded(editor);\n        }\n      };\n      const DOM$5 = DOMUtils.DOM;\n      const createIframeElement = (id, title, customAttrs, tabindex) => {\n        const iframe = SugarElement.fromTag(\"iframe\");\n        tabindex.each((t2) => set$2(iframe, \"tabindex\", t2));\n        setAll$1(iframe, customAttrs);\n        setAll$1(iframe, {\n          id: id + \"_ifr\",\n          frameBorder: \"0\",\n          allowTransparency: \"true\",\n          title\n        });\n        add$2(iframe, \"tox-edit-area__iframe\");\n        return iframe;\n      };\n      const getIframeHtml = (editor) => {\n        let iframeHTML = getDocType(editor) + \"<html><head>\";\n        if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n          iframeHTML += '<base href=\"' + editor.documentBaseURI.getURI() + '\" />';\n        }\n        iframeHTML += '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />';\n        const bodyId = getBodyId(editor);\n        const bodyClass = getBodyClass(editor);\n        const translatedAriaText = editor.translate(getIframeAriaText(editor));\n        if (getContentSecurityPolicy(editor)) {\n          iframeHTML += '<meta http-equiv=\"Content-Security-Policy\" content=\"' + getContentSecurityPolicy(editor) + '\" />';\n        }\n        iframeHTML += `</head><body id=\"${bodyId}\" class=\"mce-content-body ${bodyClass}\" data-id=\"${editor.id}\" aria-label=\"${translatedAriaText}\"><br></body></html>`;\n        return iframeHTML;\n      };\n      const createIframe = (editor, boxInfo) => {\n        const iframeTitle = editor.translate(\"Rich Text Area\");\n        const tabindex = getOpt(SugarElement.fromDom(editor.getElement()), \"tabindex\").bind(toInt);\n        const ifr = createIframeElement(editor.id, iframeTitle, getIframeAttrs(editor), tabindex).dom;\n        ifr.onload = () => {\n          ifr.onload = null;\n          editor.dispatch(\"load\");\n        };\n        editor.contentAreaContainer = boxInfo.iframeContainer;\n        editor.iframeElement = ifr;\n        editor.iframeHTML = getIframeHtml(editor);\n        DOM$5.add(boxInfo.iframeContainer, ifr);\n      };\n      const init$1 = (editor, boxInfo) => {\n        createIframe(editor, boxInfo);\n        if (boxInfo.editorContainer) {\n          DOM$5.get(boxInfo.editorContainer).style.display = editor.orgDisplay;\n          editor.hidden = DOM$5.isHidden(boxInfo.editorContainer);\n        }\n        editor.getElement().style.display = \"none\";\n        DOM$5.setAttrib(editor.id, \"aria-hidden\", \"true\");\n        initContentBody(editor);\n      };\n      const DOM$4 = DOMUtils.DOM;\n      const initPlugin = (editor, initializedPlugins, plugin2) => {\n        const Plugin = PluginManager.get(plugin2);\n        const pluginUrl = PluginManager.urls[plugin2] || editor.documentBaseUrl.replace(/\\/$/, \"\");\n        plugin2 = Tools.trim(plugin2);\n        if (Plugin && Tools.inArray(initializedPlugins, plugin2) === -1) {\n          if (editor.plugins[plugin2]) {\n            return;\n          }\n          try {\n            const pluginInstance = Plugin(editor, pluginUrl) || {};\n            editor.plugins[plugin2] = pluginInstance;\n            if (isFunction2(pluginInstance.init)) {\n              pluginInstance.init(editor, pluginUrl);\n              initializedPlugins.push(plugin2);\n            }\n          } catch (e2) {\n            pluginInitError(editor, plugin2, e2);\n          }\n        }\n      };\n      const trimLegacyPrefix = (name2) => {\n        return name2.replace(/^\\-/, \"\");\n      };\n      const initPlugins = (editor) => {\n        const initializedPlugins = [];\n        each$g(getPlugins(editor), (name2) => {\n          initPlugin(editor, initializedPlugins, trimLegacyPrefix(name2));\n        });\n      };\n      const initIcons = (editor) => {\n        const iconPackName = Tools.trim(getIconPackName(editor));\n        const currentIcons = editor.ui.registry.getAll().icons;\n        const loadIcons2 = {\n          ...IconManager.get(\"default\").icons,\n          ...IconManager.get(iconPackName).icons\n        };\n        each$f(loadIcons2, (svgData, icon) => {\n          if (!has$2(currentIcons, icon)) {\n            editor.ui.registry.addIcon(icon, svgData);\n          }\n        });\n      };\n      const initTheme = (editor) => {\n        const theme2 = getTheme(editor);\n        if (isString2(theme2)) {\n          const Theme2 = ThemeManager.get(theme2);\n          editor.theme = Theme2(editor, ThemeManager.urls[theme2]) || {};\n          if (isFunction2(editor.theme.init)) {\n            editor.theme.init(editor, ThemeManager.urls[theme2] || editor.documentBaseUrl.replace(/\\/$/, \"\"));\n          }\n        } else {\n          editor.theme = {};\n        }\n      };\n      const initModel = (editor) => {\n        const model2 = getModel(editor);\n        const Model = ModelManager.get(model2);\n        editor.model = Model(editor, ModelManager.urls[model2]);\n      };\n      const renderFromLoadedTheme = (editor) => {\n        return editor.theme.renderUI();\n      };\n      const renderFromThemeFunc = (editor) => {\n        const elm = editor.getElement();\n        const theme2 = getTheme(editor);\n        const info = theme2(editor, elm);\n        if (info.editorContainer.nodeType) {\n          info.editorContainer.id = info.editorContainer.id || editor.id + \"_parent\";\n        }\n        if (info.iframeContainer && info.iframeContainer.nodeType) {\n          info.iframeContainer.id = info.iframeContainer.id || editor.id + \"_iframecontainer\";\n        }\n        info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n        return info;\n      };\n      const createThemeFalseResult = (element) => {\n        return {\n          editorContainer: element,\n          iframeContainer: element,\n          api: {}\n        };\n      };\n      const renderThemeFalseIframe = (targetElement) => {\n        const iframeContainer = DOM$4.create(\"div\");\n        DOM$4.insertAfter(iframeContainer, targetElement);\n        return createThemeFalseResult(iframeContainer);\n      };\n      const renderThemeFalse = (editor) => {\n        const targetElement = editor.getElement();\n        return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n      };\n      const renderThemeUi = (editor) => {\n        const elm = editor.getElement();\n        editor.orgDisplay = elm.style.display;\n        if (isString2(getTheme(editor))) {\n          return renderFromLoadedTheme(editor);\n        } else if (isFunction2(getTheme(editor))) {\n          return renderFromThemeFunc(editor);\n        } else {\n          return renderThemeFalse(editor);\n        }\n      };\n      const augmentEditorUiApi = (editor, api2) => {\n        const uiApiFacade = {\n          show: Optional.from(api2.show).getOr(noop),\n          hide: Optional.from(api2.hide).getOr(noop),\n          isEnabled: Optional.from(api2.isEnabled).getOr(always),\n          setEnabled: (state) => {\n            if (!editor.mode.isReadOnly()) {\n              Optional.from(api2.setEnabled).each((f2) => f2(state));\n            }\n          }\n        };\n        editor.ui = {\n          ...editor.ui,\n          ...uiApiFacade\n        };\n      };\n      const init = (editor) => {\n        editor.dispatch(\"ScriptsLoaded\");\n        initIcons(editor);\n        initTheme(editor);\n        initModel(editor);\n        initPlugins(editor);\n        const renderInfo = renderThemeUi(editor);\n        augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({}));\n        const boxInfo = {\n          editorContainer: renderInfo.editorContainer,\n          iframeContainer: renderInfo.iframeContainer\n        };\n        editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\n        appendContentCssFromSettings(editor);\n        if (editor.inline) {\n          return initContentBody(editor);\n        } else {\n          return init$1(editor, boxInfo);\n        }\n      };\n      const DOM$3 = DOMUtils.DOM;\n      const hasSkipLoadPrefix = (name2) => name2.charAt(0) === \"-\";\n      const loadLanguage = (scriptLoader, editor) => {\n        const languageCode = getLanguageCode(editor);\n        const languageUrl = getLanguageUrl(editor);\n        if (I18n.hasCode(languageCode) === false && languageCode !== \"en\") {\n          const url2 = isNotEmpty(languageUrl) ? languageUrl : `${editor.editorManager.baseURL}/langs/${languageCode}.js`;\n          scriptLoader.add(url2).catch(() => {\n            languageLoadError(editor, url2, languageCode);\n          });\n        }\n      };\n      const loadTheme = (editor, suffix) => {\n        const theme2 = getTheme(editor);\n        if (isString2(theme2) && !hasSkipLoadPrefix(theme2) && !has$2(ThemeManager.urls, theme2)) {\n          const themeUrl = getThemeUrl(editor);\n          const url2 = themeUrl ? editor.documentBaseURI.toAbsolute(themeUrl) : `themes/${theme2}/theme${suffix}.js`;\n          ThemeManager.load(theme2, url2).catch(() => {\n            themeLoadError(editor, url2, theme2);\n          });\n        }\n      };\n      const loadModel = (editor, suffix) => {\n        const model2 = getModel(editor);\n        if (model2 !== \"plugin\" && !has$2(ModelManager.urls, model2)) {\n          const modelUrl = getModelUrl(editor);\n          const url2 = isString2(modelUrl) ? editor.documentBaseURI.toAbsolute(modelUrl) : `models/${model2}/model${suffix}.js`;\n          ModelManager.load(model2, url2).catch(() => {\n            modelLoadError(editor, url2, model2);\n          });\n        }\n      };\n      const getIconsUrlMetaFromUrl = (editor) => Optional.from(getIconsUrl(editor)).filter(isNotEmpty).map((url2) => ({\n        url: url2,\n        name: Optional.none()\n      }));\n      const getIconsUrlMetaFromName = (editor, name2, suffix) => Optional.from(name2).filter((name3) => isNotEmpty(name3) && !IconManager.has(name3)).map((name3) => ({\n        url: `${editor.editorManager.baseURL}/icons/${name3}/icons${suffix}.js`,\n        name: Optional.some(name3)\n      }));\n      const loadIcons = (scriptLoader, editor, suffix) => {\n        const defaultIconsUrl = getIconsUrlMetaFromName(editor, \"default\", suffix);\n        const customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(() => getIconsUrlMetaFromName(editor, getIconPackName(editor), \"\"));\n        each$g(cat([\n          defaultIconsUrl,\n          customIconsUrl\n        ]), (urlMeta) => {\n          scriptLoader.add(urlMeta.url).catch(() => {\n            iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n          });\n        });\n      };\n      const loadPlugins = (editor, suffix) => {\n        const loadPlugin = (name2, url2) => {\n          PluginManager.load(name2, url2).catch(() => {\n            pluginLoadError(editor, url2, name2);\n          });\n        };\n        each$f(getExternalPlugins$1(editor), (url2, name2) => {\n          loadPlugin(name2, url2);\n          editor.options.set(\"plugins\", getPlugins(editor).concat(name2));\n        });\n        each$g(getPlugins(editor), (plugin2) => {\n          plugin2 = Tools.trim(plugin2);\n          if (plugin2 && !PluginManager.urls[plugin2] && !hasSkipLoadPrefix(plugin2)) {\n            loadPlugin(plugin2, `plugins/${plugin2}/plugin${suffix}.js`);\n          }\n        });\n      };\n      const isThemeLoaded = (editor) => {\n        const theme2 = getTheme(editor);\n        return !isString2(theme2) || isNonNullable(ThemeManager.get(theme2));\n      };\n      const isModelLoaded = (editor) => {\n        const model2 = getModel(editor);\n        return isNonNullable(ModelManager.get(model2));\n      };\n      const loadScripts = (editor, suffix) => {\n        const scriptLoader = ScriptLoader.ScriptLoader;\n        const initEditor2 = () => {\n          if (!editor.removed && isThemeLoaded(editor) && isModelLoaded(editor)) {\n            init(editor);\n          }\n        };\n        loadTheme(editor, suffix);\n        loadModel(editor, suffix);\n        loadLanguage(scriptLoader, editor);\n        loadIcons(scriptLoader, editor, suffix);\n        loadPlugins(editor, suffix);\n        scriptLoader.loadQueue().then(initEditor2, initEditor2);\n      };\n      const getStyleSheetLoader = (element, editor) => instance.forElement(element, {\n        contentCssCors: hasContentCssCors(editor),\n        referrerPolicy: getReferrerPolicy(editor)\n      });\n      const render = (editor) => {\n        const id = editor.id;\n        I18n.setCode(getLanguageCode(editor));\n        const readyHandler = () => {\n          DOM$3.unbind(window, \"ready\", readyHandler);\n          editor.render();\n        };\n        if (!EventUtils.Event.domLoaded) {\n          DOM$3.bind(window, \"ready\", readyHandler);\n          return;\n        }\n        if (!editor.getElement()) {\n          return;\n        }\n        const element = SugarElement.fromDom(editor.getElement());\n        const snapshot = clone$4(element);\n        editor.on(\"remove\", () => {\n          eachr(element.dom.attributes, (attr) => remove$a(element, attr.name));\n          setAll$1(element, snapshot);\n        });\n        editor.ui.styleSheetLoader = getStyleSheetLoader(element, editor);\n        if (!isInline(editor)) {\n          editor.orgVisibility = editor.getElement().style.visibility;\n          editor.getElement().style.visibility = \"hidden\";\n        } else {\n          editor.inline = true;\n        }\n        const form = editor.getElement().form || DOM$3.getParent(id, \"form\");\n        if (form) {\n          editor.formElement = form;\n          if (hasHiddenInput(editor) && !isTextareaOrInput(editor.getElement())) {\n            DOM$3.insertAfter(DOM$3.create(\"input\", {\n              type: \"hidden\",\n              name: id\n            }), id);\n            editor.hasHiddenInput = true;\n          }\n          editor.formEventDelegate = (e2) => {\n            editor.dispatch(e2.type, e2);\n          };\n          DOM$3.bind(form, \"submit reset\", editor.formEventDelegate);\n          editor.on(\"reset\", () => {\n            editor.resetContent();\n          });\n          if (shouldPatchSubmit(editor) && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n            form._mceOldSubmit = form.submit;\n            form.submit = () => {\n              editor.editorManager.triggerSave();\n              editor.setDirty(false);\n              return form._mceOldSubmit(form);\n            };\n          }\n        }\n        editor.windowManager = WindowManager(editor);\n        editor.notificationManager = NotificationManager(editor);\n        if (isEncodingXml(editor)) {\n          editor.on(\"GetContent\", (e2) => {\n            if (e2.save) {\n              e2.content = DOM$3.encode(e2.content);\n            }\n          });\n        }\n        if (shouldAddFormSubmitTrigger(editor)) {\n          editor.on(\"submit\", () => {\n            if (editor.initialized) {\n              editor.save();\n            }\n          });\n        }\n        if (shouldAddUnloadTrigger(editor)) {\n          editor._beforeUnload = () => {\n            if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n              editor.save({\n                format: \"raw\",\n                no_events: true,\n                set_dirty: false\n              });\n            }\n          };\n          editor.editorManager.on(\"BeforeUnload\", editor._beforeUnload);\n        }\n        editor.editorManager.add(editor);\n        loadScripts(editor, editor.suffix);\n      };\n      const sectionResult = (sections, settings) => ({\n        sections: constant2(sections),\n        options: constant2(settings)\n      });\n      const deviceDetection = detect$2().deviceType;\n      const isPhone = deviceDetection.isPhone();\n      const isTablet = deviceDetection.isTablet();\n      const normalizePlugins = (plugins) => {\n        if (isNullable(plugins)) {\n          return [];\n        } else {\n          const pluginNames = isArray$1(plugins) ? plugins : plugins.split(/[ ,]/);\n          const trimmedPlugins = map$3(pluginNames, trim$3);\n          return filter$6(trimmedPlugins, isNotEmpty);\n        }\n      };\n      const extractSections = (keys3, options) => {\n        const result = bifilter(options, (value2, key) => {\n          return contains$2(keys3, key);\n        });\n        return sectionResult(result.t, result.f);\n      };\n      const getSection = (sectionResult2, name2, defaults2 = {}) => {\n        const sections = sectionResult2.sections();\n        const sectionOptions = get$a(sections, name2).getOr({});\n        return Tools.extend({}, defaults2, sectionOptions);\n      };\n      const hasSection = (sectionResult2, name2) => {\n        return has$2(sectionResult2.sections(), name2);\n      };\n      const getSectionConfig = (sectionResult2, name2) => {\n        return hasSection(sectionResult2, name2) ? sectionResult2.sections()[name2] : {};\n      };\n      const getMobileOverrideOptions = (mobileOptions, isPhone2) => {\n        const defaultMobileOptions = {\n          table_grid: false,\n          object_resizing: false,\n          resize: false,\n          toolbar_mode: get$a(mobileOptions, \"toolbar_mode\").getOr(\"scrolling\"),\n          toolbar_sticky: false\n        };\n        const defaultPhoneOptions = { menubar: false };\n        return {\n          ...defaultMobileOptions,\n          ...isPhone2 ? defaultPhoneOptions : {}\n        };\n      };\n      const getExternalPlugins = (overrideOptions, options) => {\n        var _a3;\n        const userDefinedExternalPlugins = (_a3 = options.external_plugins) !== null && _a3 !== void 0 ? _a3 : {};\n        if (overrideOptions && overrideOptions.external_plugins) {\n          return Tools.extend({}, overrideOptions.external_plugins, userDefinedExternalPlugins);\n        } else {\n          return userDefinedExternalPlugins;\n        }\n      };\n      const combinePlugins = (forcedPlugins, plugins) => {\n        return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));\n      };\n      const getPlatformPlugins = (isMobileDevice, sectionResult2, desktopPlugins, mobilePlugins) => {\n        if (isMobileDevice && hasSection(sectionResult2, \"mobile\")) {\n          return mobilePlugins;\n        } else {\n          return desktopPlugins;\n        }\n      };\n      const processPlugins = (isMobileDevice, sectionResult2, defaultOverrideOptions, options) => {\n        const forcedPlugins = normalizePlugins(defaultOverrideOptions.forced_plugins);\n        const desktopPlugins = normalizePlugins(options.plugins);\n        const mobileConfig = getSectionConfig(sectionResult2, \"mobile\");\n        const mobilePlugins = mobileConfig.plugins ? normalizePlugins(mobileConfig.plugins) : desktopPlugins;\n        const platformPlugins = getPlatformPlugins(isMobileDevice, sectionResult2, desktopPlugins, mobilePlugins);\n        const combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n        return Tools.extend(options, {\n          forced_plugins: forcedPlugins,\n          plugins: combinedPlugins\n        });\n      };\n      const isOnMobile = (isMobileDevice, sectionResult2) => {\n        return isMobileDevice && hasSection(sectionResult2, \"mobile\");\n      };\n      const combineOptions = (isMobileDevice, isPhone2, defaultOptions2, defaultOverrideOptions, options) => {\n        var _a3;\n        const deviceOverrideOptions = isMobileDevice ? { mobile: getMobileOverrideOptions((_a3 = options.mobile) !== null && _a3 !== void 0 ? _a3 : {}, isPhone2) } : {};\n        const sectionResult2 = extractSections([\"mobile\"], deepMerge(deviceOverrideOptions, options));\n        const extendedOptions = Tools.extend(defaultOptions2, defaultOverrideOptions, sectionResult2.options(), isOnMobile(isMobileDevice, sectionResult2) ? getSection(sectionResult2, \"mobile\") : {}, { external_plugins: getExternalPlugins(defaultOverrideOptions, sectionResult2.options()) });\n        return processPlugins(isMobileDevice, sectionResult2, defaultOverrideOptions, extendedOptions);\n      };\n      const normalizeOptions = (defaultOverrideOptions, options) => combineOptions(isPhone || isTablet, isPhone, options, defaultOverrideOptions, options);\n      const addVisual = (editor, elm) => addVisual$1(editor, elm);\n      const registerExecCommands$3 = (editor) => {\n        const toggleFormat2 = (name2, value2) => {\n          editor.formatter.toggle(name2, value2);\n          editor.nodeChanged();\n        };\n        const toggleAlign = (align) => () => {\n          each$g(\"left,center,right,justify\".split(\",\"), (name2) => {\n            if (align !== name2) {\n              editor.formatter.remove(\"align\" + name2);\n            }\n          });\n          if (align !== \"none\") {\n            toggleFormat2(\"align\" + align);\n          }\n        };\n        editor.editorCommands.addCommands({\n          JustifyLeft: toggleAlign(\"left\"),\n          JustifyCenter: toggleAlign(\"center\"),\n          JustifyRight: toggleAlign(\"right\"),\n          JustifyFull: toggleAlign(\"justify\"),\n          JustifyNone: toggleAlign(\"none\")\n        });\n      };\n      const registerQueryStateCommands$1 = (editor) => {\n        const alignStates = (name2) => () => {\n          const selection = editor.selection;\n          const nodes = selection.isCollapsed() ? [editor.dom.getParent(selection.getNode(), editor.dom.isBlock)] : selection.getSelectedBlocks();\n          return exists(nodes, (node) => isNonNullable(editor.formatter.matchNode(node, name2)));\n        };\n        editor.editorCommands.addCommands({\n          JustifyLeft: alignStates(\"alignleft\"),\n          JustifyCenter: alignStates(\"aligncenter\"),\n          JustifyRight: alignStates(\"alignright\"),\n          JustifyFull: alignStates(\"alignjustify\")\n        }, \"state\");\n      };\n      const registerCommands$a = (editor) => {\n        registerExecCommands$3(editor);\n        registerQueryStateCommands$1(editor);\n      };\n      const registerCommands$9 = (editor) => {\n        editor.editorCommands.addCommands({\n          \"Cut,Copy,Paste\": (command) => {\n            const doc = editor.getDoc();\n            let failed;\n            try {\n              doc.execCommand(command);\n            } catch (ex) {\n              failed = true;\n            }\n            if (command === \"paste\" && !doc.queryCommandEnabled(command)) {\n              failed = true;\n            }\n            if (failed || !doc.queryCommandSupported(command)) {\n              let msg = editor.translate(`Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.`);\n              if (Env.os.isMacOS() || Env.os.isiOS()) {\n                msg = msg.replace(/Ctrl\\+/g, \"⌘+\");\n              }\n              editor.notificationManager.open({\n                text: msg,\n                type: \"error\"\n              });\n            }\n          }\n        });\n      };\n      const trimOrPadLeftRight = (dom3, rng, html2) => {\n        const root2 = SugarElement.fromDom(dom3.getRoot());\n        if (needsToBeNbspLeft(root2, CaretPosition.fromRangeStart(rng))) {\n          html2 = html2.replace(/^ /, \"&nbsp;\");\n        } else {\n          html2 = html2.replace(/^&nbsp;/, \" \");\n        }\n        if (needsToBeNbspRight(root2, CaretPosition.fromRangeEnd(rng))) {\n          html2 = html2.replace(/(&nbsp;| )(<br( \\/)>)?$/, \"&nbsp;\");\n        } else {\n          html2 = html2.replace(/&nbsp;(<br( \\/)?>)?$/, \" \");\n        }\n        return html2;\n      };\n      const processValue$1 = (value2) => {\n        if (typeof value2 !== \"string\") {\n          const details = Tools.extend({\n            paste: value2.paste,\n            data: { paste: value2.paste }\n          }, value2);\n          return {\n            content: value2.content,\n            details\n          };\n        }\n        return {\n          content: value2,\n          details: {}\n        };\n      };\n      const trimOrPad = (editor, value2) => {\n        const selection = editor.selection;\n        const dom3 = editor.dom;\n        if (/^ | $/.test(value2)) {\n          return trimOrPadLeftRight(dom3, selection.getRng(), value2);\n        } else {\n          return value2;\n        }\n      };\n      const insertAtCaret = (editor, value2) => {\n        const { content, details } = processValue$1(value2);\n        preProcessSetContent(editor, {\n          content: trimOrPad(editor, content),\n          format: \"html\",\n          set: false,\n          selection: true,\n          paste: details.paste\n        }).each((args) => {\n          const insertedContent = insertContent$1(editor, args.content, details);\n          postProcessSetContent(editor, insertedContent, args);\n          editor.addVisual();\n        });\n      };\n      const registerCommands$8 = (editor) => {\n        editor.editorCommands.addCommands({\n          mceCleanup: () => {\n            const bm = editor.selection.getBookmark();\n            editor.setContent(editor.getContent());\n            editor.selection.moveToBookmark(bm);\n          },\n          insertImage: (_command, _ui, value2) => {\n            insertAtCaret(editor, editor.dom.createHTML(\"img\", { src: value2 }));\n          },\n          insertHorizontalRule: () => {\n            editor.execCommand(\"mceInsertContent\", false, \"<hr>\");\n          },\n          insertText: (_command, _ui, value2) => {\n            insertAtCaret(editor, editor.dom.encode(value2));\n          },\n          insertHTML: (_command, _ui, value2) => {\n            insertAtCaret(editor, value2);\n          },\n          mceInsertContent: (_command, _ui, value2) => {\n            insertAtCaret(editor, value2);\n          },\n          mceSetContent: (_command, _ui, value2) => {\n            editor.setContent(value2);\n          },\n          mceReplaceContent: (_command, _ui, value2) => {\n            editor.execCommand(\"mceInsertContent\", false, value2.replace(/\\{\\$selection\\}/g, editor.selection.getContent({ format: \"text\" })));\n          },\n          mceNewDocument: () => {\n            editor.setContent(\"\");\n          }\n        });\n      };\n      const legacyPropNames = {\n        \"font-size\": \"size\",\n        \"font-family\": \"face\"\n      };\n      const getSpecifiedFontProp = (propName, rootElm, elm) => {\n        const getProperty = (elm2) => getRaw$1(elm2, propName).orThunk(() => {\n          if (name(elm2) === \"font\") {\n            return get$a(legacyPropNames, propName).bind((legacyPropName) => getOpt(elm2, legacyPropName));\n          } else {\n            return Optional.none();\n          }\n        });\n        const isRoot = (elm2) => eq2(SugarElement.fromDom(rootElm), elm2);\n        return closest$2(SugarElement.fromDom(elm), (elm2) => getProperty(elm2), isRoot);\n      };\n      const normalizeFontFamily = (fontFamily) => fontFamily.replace(/[\\'\\\"\\\\]/g, \"\").replace(/,\\s+/g, \",\");\n      const getComputedFontProp = (propName, elm) => Optional.from(DOMUtils.DOM.getStyle(elm, propName, true));\n      const getFontProp = (propName) => (rootElm, elm) => Optional.from(elm).map(SugarElement.fromDom).filter(isElement$7).bind((element) => getSpecifiedFontProp(propName, rootElm, element.dom).or(getComputedFontProp(propName, element.dom))).getOr(\"\");\n      const getFontSize = getFontProp(\"font-size\");\n      const getFontFamily = compose(normalizeFontFamily, getFontProp(\"font-family\"));\n      const findFirstCaretElement = (editor) => firstPositionIn(editor.getBody()).map((caret) => {\n        const container = caret.container();\n        return isText$8(container) ? container.parentNode : container;\n      });\n      const getCaretElement = (editor) => Optional.from(editor.selection.getRng()).bind((rng) => {\n        const root2 = editor.getBody();\n        const atStartOfNode = rng.startContainer === root2 && rng.startOffset === 0;\n        return atStartOfNode ? Optional.none() : Optional.from(editor.selection.getStart(true));\n      });\n      const bindRange = (editor, binder2) => getCaretElement(editor).orThunk(curry(findFirstCaretElement, editor)).map(SugarElement.fromDom).filter(isElement$7).bind(binder2);\n      const mapRange = (editor, mapper) => bindRange(editor, compose1(Optional.some, mapper));\n      const fromFontSizeNumber = (editor, value2) => {\n        if (/^[0-9.]+$/.test(value2)) {\n          const fontSizeNumber = parseInt(value2, 10);\n          if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n            const fontSizes = getFontStyleValues(editor);\n            const fontClasses = getFontSizeClasses(editor);\n            if (fontClasses) {\n              return fontClasses[fontSizeNumber - 1] || value2;\n            } else {\n              return fontSizes[fontSizeNumber - 1] || value2;\n            }\n          } else {\n            return value2;\n          }\n        } else {\n          return value2;\n        }\n      };\n      const normalizeFontNames = (font) => {\n        const fonts = font.split(/\\s*,\\s*/);\n        return map$3(fonts, (font2) => {\n          if (font2.indexOf(\" \") !== -1 && !(startsWith(font2, '\"') || startsWith(font2, `'`))) {\n            return `'${font2}'`;\n          } else {\n            return font2;\n          }\n        }).join(\",\");\n      };\n      const fontNameAction = (editor, value2) => {\n        const font = fromFontSizeNumber(editor, value2);\n        editor.formatter.toggle(\"fontname\", { value: normalizeFontNames(font) });\n        editor.nodeChanged();\n      };\n      const fontNameQuery = (editor) => mapRange(editor, (elm) => getFontFamily(editor.getBody(), elm.dom)).getOr(\"\");\n      const fontSizeAction = (editor, value2) => {\n        editor.formatter.toggle(\"fontsize\", { value: fromFontSizeNumber(editor, value2) });\n        editor.nodeChanged();\n      };\n      const fontSizeQuery = (editor) => mapRange(editor, (elm) => getFontSize(editor.getBody(), elm.dom)).getOr(\"\");\n      const lineHeightQuery = (editor) => mapRange(editor, (elm) => {\n        const root2 = SugarElement.fromDom(editor.getBody());\n        const specifiedStyle = closest$2(elm, (elm2) => getRaw$1(elm2, \"line-height\"), curry(eq2, root2));\n        const computedStyle = () => {\n          const lineHeight = parseFloat(get$7(elm, \"line-height\"));\n          const fontSize = parseFloat(get$7(elm, \"font-size\"));\n          return String(lineHeight / fontSize);\n        };\n        return specifiedStyle.getOrThunk(computedStyle);\n      }).getOr(\"\");\n      const lineHeightAction = (editor, lineHeight) => {\n        editor.formatter.toggle(\"lineheight\", { value: String(lineHeight) });\n        editor.nodeChanged();\n      };\n      const registerExecCommands$2 = (editor) => {\n        const toggleFormat2 = (name2, value2) => {\n          editor.formatter.toggle(name2, value2);\n          editor.nodeChanged();\n        };\n        editor.editorCommands.addCommands({\n          \"Bold,Italic,Underline,Strikethrough,Superscript,Subscript\": (command) => {\n            toggleFormat2(command);\n          },\n          \"ForeColor,HiliteColor\": (command, _ui, value2) => {\n            toggleFormat2(command, { value: value2 });\n          },\n          \"BackColor\": (_command, _ui, value2) => {\n            toggleFormat2(\"hilitecolor\", { value: value2 });\n          },\n          \"FontName\": (_command, _ui, value2) => {\n            fontNameAction(editor, value2);\n          },\n          \"FontSize\": (_command, _ui, value2) => {\n            fontSizeAction(editor, value2);\n          },\n          \"LineHeight\": (_command, _ui, value2) => {\n            lineHeightAction(editor, value2);\n          },\n          \"Lang\": (command, _ui, lang) => {\n            toggleFormat2(command, {\n              value: lang.code,\n              customValue: lang.customCode\n            });\n          },\n          \"RemoveFormat\": (command) => {\n            editor.formatter.remove(command);\n          },\n          \"mceBlockQuote\": () => {\n            toggleFormat2(\"blockquote\");\n          },\n          \"FormatBlock\": (_command, _ui, value2) => {\n            toggleFormat2(isString2(value2) ? value2 : \"p\");\n          },\n          \"mceToggleFormat\": (_command, _ui, value2) => {\n            toggleFormat2(value2);\n          }\n        });\n      };\n      const registerQueryValueCommands = (editor) => {\n        const isFormatMatch = (name2) => editor.formatter.match(name2);\n        editor.editorCommands.addCommands({\n          \"Bold,Italic,Underline,Strikethrough,Superscript,Subscript\": (command) => isFormatMatch(command),\n          \"mceBlockQuote\": () => isFormatMatch(\"blockquote\")\n        }, \"state\");\n        editor.editorCommands.addQueryValueHandler(\"FontName\", () => fontNameQuery(editor));\n        editor.editorCommands.addQueryValueHandler(\"FontSize\", () => fontSizeQuery(editor));\n        editor.editorCommands.addQueryValueHandler(\"LineHeight\", () => lineHeightQuery(editor));\n      };\n      const registerCommands$7 = (editor) => {\n        registerExecCommands$2(editor);\n        registerQueryValueCommands(editor);\n      };\n      const registerCommands$6 = (editor) => {\n        editor.editorCommands.addCommands({\n          mceAddUndoLevel: () => {\n            editor.undoManager.add();\n          },\n          mceEndUndoLevel: () => {\n            editor.undoManager.add();\n          },\n          Undo: () => {\n            editor.undoManager.undo();\n          },\n          Redo: () => {\n            editor.undoManager.redo();\n          }\n        });\n      };\n      const registerCommands$5 = (editor) => {\n        editor.editorCommands.addCommands({\n          Indent: () => {\n            indent(editor);\n          },\n          Outdent: () => {\n            outdent(editor);\n          }\n        });\n        editor.editorCommands.addCommands({ Outdent: () => canOutdent(editor) }, \"state\");\n      };\n      const registerCommands$4 = (editor) => {\n        const applyLinkToSelection = (_command, _ui, value2) => {\n          const linkDetails = isString2(value2) ? { href: value2 } : value2;\n          const anchor = editor.dom.getParent(editor.selection.getNode(), \"a\");\n          if (isObject2(linkDetails) && isString2(linkDetails.href)) {\n            linkDetails.href = linkDetails.href.replace(/ /g, \"%20\");\n            if (!anchor || !linkDetails.href) {\n              editor.formatter.remove(\"link\");\n            }\n            if (linkDetails.href) {\n              editor.formatter.apply(\"link\", linkDetails, anchor);\n            }\n          }\n        };\n        editor.editorCommands.addCommands({\n          unlink: () => {\n            if (editor.selection.isCollapsed()) {\n              const elm = editor.dom.getParent(editor.selection.getStart(), \"a\");\n              if (elm) {\n                editor.dom.remove(elm, true);\n              }\n              return;\n            }\n            editor.formatter.remove(\"link\");\n          },\n          mceInsertLink: applyLinkToSelection,\n          createLink: applyLinkToSelection\n        });\n      };\n      const registerExecCommands$1 = (editor) => {\n        editor.editorCommands.addCommands({\n          \"InsertUnorderedList,InsertOrderedList\": (command) => {\n            editor.getDoc().execCommand(command);\n            const listElm = editor.dom.getParent(editor.selection.getNode(), \"ol,ul\");\n            if (listElm) {\n              const listParent = listElm.parentNode;\n              if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n                const bm = editor.selection.getBookmark();\n                editor.dom.split(listParent, listElm);\n                editor.selection.moveToBookmark(bm);\n              }\n            }\n          }\n        });\n      };\n      const registerQueryStateCommands = (editor) => {\n        editor.editorCommands.addCommands({\n          \"InsertUnorderedList,InsertOrderedList\": (command) => {\n            const list2 = editor.dom.getParent(editor.selection.getNode(), \"ul,ol\");\n            return list2 && (command === \"insertunorderedlist\" && list2.tagName === \"UL\" || command === \"insertorderedlist\" && list2.tagName === \"OL\");\n          }\n        }, \"state\");\n      };\n      const registerCommands$3 = (editor) => {\n        registerExecCommands$1(editor);\n        registerQueryStateCommands(editor);\n      };\n      const registerCommands$2 = (editor) => {\n        editor.editorCommands.addCommands({\n          insertParagraph: () => {\n            insert(editor);\n          },\n          mceInsertNewLine: (_command, _ui, value2) => {\n            insert(editor, value2);\n          },\n          InsertLineBreak: (_command, _ui, value2) => {\n            insert$1(editor, value2);\n          }\n        });\n      };\n      const registerCommands$1 = (editor) => {\n        editor.editorCommands.addCommands({\n          mceSelectNodeDepth: (_command, _ui, value2) => {\n            let counter = 0;\n            editor.dom.getParent(editor.selection.getNode(), (node) => {\n              if (node.nodeType === 1 && counter++ === value2) {\n                editor.selection.select(node);\n                return false;\n              }\n            }, editor.getBody());\n          },\n          mceSelectNode: (_command, _ui, value2) => {\n            editor.selection.select(value2);\n          },\n          selectAll: () => {\n            const editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue$4);\n            if (editingHost) {\n              const rng = editor.dom.createRng();\n              rng.selectNodeContents(editingHost);\n              editor.selection.setRng(rng);\n            }\n          }\n        });\n      };\n      const registerExecCommands = (editor) => {\n        editor.editorCommands.addCommands({\n          mceRemoveNode: (_command, _ui, value2) => {\n            const node = value2 !== null && value2 !== void 0 ? value2 : editor.selection.getNode();\n            if (node !== editor.getBody()) {\n              const bm = editor.selection.getBookmark();\n              editor.dom.remove(node, true);\n              editor.selection.moveToBookmark(bm);\n            }\n          },\n          mcePrint: () => {\n            editor.getWin().print();\n          },\n          mceFocus: (_command, _ui, value2) => {\n            focus(editor, value2);\n          },\n          mceToggleVisualAid: () => {\n            editor.hasVisual = !editor.hasVisual;\n            editor.addVisual();\n          }\n        });\n      };\n      const registerCommands = (editor) => {\n        registerCommands$a(editor);\n        registerCommands$9(editor);\n        registerCommands$6(editor);\n        registerCommands$1(editor);\n        registerCommands$8(editor);\n        registerCommands$4(editor);\n        registerCommands$5(editor);\n        registerCommands$2(editor);\n        registerCommands$3(editor);\n        registerCommands$7(editor);\n        registerExecCommands(editor);\n      };\n      class EditorCommands {\n        constructor(editor) {\n          this.commands = {\n            state: {},\n            exec: {},\n            value: {}\n          };\n          this.editor = editor;\n        }\n        execCommand(command, ui, value2, args) {\n          const editor = this.editor;\n          const lowerCaseCommand = command.toLowerCase();\n          const skipFocus = args === null || args === void 0 ? void 0 : args.skip_focus;\n          if (editor.removed) {\n            return false;\n          }\n          if (lowerCaseCommand !== \"mcefocus\") {\n            if (!/^(mceAddUndoLevel|mceEndUndoLevel)$/i.test(lowerCaseCommand) && !skipFocus) {\n              editor.focus();\n            } else {\n              restore(editor);\n            }\n          }\n          const eventArgs = editor.dispatch(\"BeforeExecCommand\", {\n            command,\n            ui,\n            value: value2\n          });\n          if (eventArgs.isDefaultPrevented()) {\n            return false;\n          }\n          const func = this.commands.exec[lowerCaseCommand];\n          if (isFunction2(func)) {\n            func(lowerCaseCommand, ui, value2);\n            editor.dispatch(\"ExecCommand\", {\n              command,\n              ui,\n              value: value2\n            });\n            return true;\n          }\n          return false;\n        }\n        queryCommandState(command) {\n          if (this.editor.quirks.isHidden() || this.editor.removed) {\n            return false;\n          }\n          const lowerCaseCommand = command.toLowerCase();\n          const func = this.commands.state[lowerCaseCommand];\n          if (isFunction2(func)) {\n            return func(lowerCaseCommand);\n          }\n          return false;\n        }\n        queryCommandValue(command) {\n          if (this.editor.quirks.isHidden() || this.editor.removed) {\n            return \"\";\n          }\n          const lowerCaseCommand = command.toLowerCase();\n          const func = this.commands.value[lowerCaseCommand];\n          if (isFunction2(func)) {\n            return func(lowerCaseCommand);\n          }\n          return \"\";\n        }\n        addCommands(commandList, type2 = \"exec\") {\n          const commands = this.commands;\n          each$f(commandList, (callback, command) => {\n            each$g(command.toLowerCase().split(\",\"), (command2) => {\n              commands[type2][command2] = callback;\n            });\n          });\n        }\n        addCommand(command, callback, scope) {\n          const lowerCaseCommand = command.toLowerCase();\n          this.commands.exec[lowerCaseCommand] = (_command, ui, value2) => callback.call(scope !== null && scope !== void 0 ? scope : this.editor, ui, value2);\n        }\n        queryCommandSupported(command) {\n          const lowerCaseCommand = command.toLowerCase();\n          if (this.commands.exec[lowerCaseCommand]) {\n            return true;\n          }\n          return false;\n        }\n        addQueryStateHandler(command, callback, scope) {\n          this.commands.state[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n        }\n        addQueryValueHandler(command, callback, scope) {\n          this.commands.value[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n        }\n      }\n      const internalContentEditableAttr = \"data-mce-contenteditable\";\n      const toggleClass = (elm, cls, state) => {\n        if (has2(elm, cls) && state === false) {\n          remove$7(elm, cls);\n        } else if (state) {\n          add$2(elm, cls);\n        }\n      };\n      const setEditorCommandState = (editor, cmd, state) => {\n        try {\n          editor.getDoc().execCommand(cmd, false, String(state));\n        } catch (ex) {\n        }\n      };\n      const setContentEditable = (elm, state) => {\n        elm.dom.contentEditable = state ? \"true\" : \"false\";\n      };\n      const switchOffContentEditableTrue = (elm) => {\n        each$g(descendants(elm, '*[contenteditable=\"true\"]'), (elm2) => {\n          set$2(elm2, internalContentEditableAttr, \"true\");\n          setContentEditable(elm2, false);\n        });\n      };\n      const switchOnContentEditableTrue = (elm) => {\n        each$g(descendants(elm, `*[${internalContentEditableAttr}=\"true\"]`), (elm2) => {\n          remove$a(elm2, internalContentEditableAttr);\n          setContentEditable(elm2, true);\n        });\n      };\n      const removeFakeSelection = (editor) => {\n        Optional.from(editor.selection.getNode()).each((elm) => {\n          elm.removeAttribute(\"data-mce-selected\");\n        });\n      };\n      const restoreFakeSelection = (editor) => {\n        editor.selection.setRng(editor.selection.getRng());\n      };\n      const toggleReadOnly = (editor, state) => {\n        const body = SugarElement.fromDom(editor.getBody());\n        toggleClass(body, \"mce-content-readonly\", state);\n        if (state) {\n          editor.selection.controlSelection.hideResizeRect();\n          editor._selectionOverrides.hideFakeCaret();\n          removeFakeSelection(editor);\n          editor.readonly = true;\n          setContentEditable(body, false);\n          switchOffContentEditableTrue(body);\n        } else {\n          editor.readonly = false;\n          setContentEditable(body, true);\n          switchOnContentEditableTrue(body);\n          setEditorCommandState(editor, \"StyleWithCSS\", false);\n          setEditorCommandState(editor, \"enableInlineTableEditing\", false);\n          setEditorCommandState(editor, \"enableObjectResizing\", false);\n          if (hasEditorOrUiFocus(editor)) {\n            editor.focus();\n          }\n          restoreFakeSelection(editor);\n          editor.nodeChanged();\n        }\n      };\n      const isReadOnly = (editor) => editor.readonly;\n      const registerFilters = (editor) => {\n        editor.parser.addAttributeFilter(\"contenteditable\", (nodes) => {\n          if (isReadOnly(editor)) {\n            each$g(nodes, (node) => {\n              node.attr(internalContentEditableAttr, node.attr(\"contenteditable\"));\n              node.attr(\"contenteditable\", \"false\");\n            });\n          }\n        });\n        editor.serializer.addAttributeFilter(internalContentEditableAttr, (nodes) => {\n          if (isReadOnly(editor)) {\n            each$g(nodes, (node) => {\n              node.attr(\"contenteditable\", node.attr(internalContentEditableAttr));\n            });\n          }\n        });\n        editor.serializer.addTempAttr(internalContentEditableAttr);\n      };\n      const registerReadOnlyContentFilters = (editor) => {\n        if (editor.serializer) {\n          registerFilters(editor);\n        } else {\n          editor.on(\"PreInit\", () => {\n            registerFilters(editor);\n          });\n        }\n      };\n      const isClickEvent = (e2) => e2.type === \"click\";\n      const getAnchorHrefOpt = (editor, elm) => {\n        const isRoot = (elm2) => eq2(elm2, SugarElement.fromDom(editor.getBody()));\n        return closest$3(elm, \"a\", isRoot).bind((a2) => getOpt(a2, \"href\"));\n      };\n      const processReadonlyEvents = (editor, e2) => {\n        if (isClickEvent(e2) && !VK.metaKeyPressed(e2)) {\n          const elm = SugarElement.fromDom(e2.target);\n          getAnchorHrefOpt(editor, elm).each((href) => {\n            e2.preventDefault();\n            if (/^#/.test(href)) {\n              const targetEl = editor.dom.select(`${href},[name=\"${removeLeading(href, \"#\")}\"]`);\n              if (targetEl.length) {\n                editor.selection.scrollIntoView(targetEl[0], true);\n              }\n            } else {\n              window.open(href, \"_blank\", \"rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes\");\n            }\n          });\n        }\n      };\n      const registerReadOnlySelectionBlockers = (editor) => {\n        editor.on(\"ShowCaret\", (e2) => {\n          if (isReadOnly(editor)) {\n            e2.preventDefault();\n          }\n        });\n        editor.on(\"ObjectSelected\", (e2) => {\n          if (isReadOnly(editor)) {\n            e2.preventDefault();\n          }\n        });\n      };\n      const nativeEvents = Tools.makeMap(\"focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel\", \" \");\n      class EventDispatcher {\n        constructor(settings) {\n          this.bindings = {};\n          this.settings = settings || {};\n          this.scope = this.settings.scope || this;\n          this.toggleEvent = this.settings.toggleEvent || never;\n        }\n        static isNative(name2) {\n          return !!nativeEvents[name2.toLowerCase()];\n        }\n        fire(name2, args) {\n          return this.dispatch(name2, args);\n        }\n        dispatch(name2, args) {\n          const lcName = name2.toLowerCase();\n          const event = normalize$32(lcName, args !== null && args !== void 0 ? args : {}, this.scope);\n          if (this.settings.beforeFire) {\n            this.settings.beforeFire(event);\n          }\n          const handlers = this.bindings[lcName];\n          if (handlers) {\n            for (let i3 = 0, l2 = handlers.length; i3 < l2; i3++) {\n              const callback = handlers[i3];\n              if (callback.removed) {\n                continue;\n              }\n              if (callback.once) {\n                this.off(lcName, callback.func);\n              }\n              if (event.isImmediatePropagationStopped()) {\n                return event;\n              }\n              if (callback.func.call(this.scope, event) === false) {\n                event.preventDefault();\n                return event;\n              }\n            }\n          }\n          return event;\n        }\n        on(name2, callback, prepend2, extra2) {\n          if (callback === false) {\n            callback = never;\n          }\n          if (callback) {\n            const wrappedCallback = {\n              func: callback,\n              removed: false\n            };\n            if (extra2) {\n              Tools.extend(wrappedCallback, extra2);\n            }\n            const names = name2.toLowerCase().split(\" \");\n            let i3 = names.length;\n            while (i3--) {\n              const currentName = names[i3];\n              let handlers = this.bindings[currentName];\n              if (!handlers) {\n                handlers = [];\n                this.toggleEvent(currentName, true);\n              }\n              if (prepend2) {\n                handlers = [\n                  wrappedCallback,\n                  ...handlers\n                ];\n              } else {\n                handlers = [\n                  ...handlers,\n                  wrappedCallback\n                ];\n              }\n              this.bindings[currentName] = handlers;\n            }\n          }\n          return this;\n        }\n        off(name2, callback) {\n          if (name2) {\n            const names = name2.toLowerCase().split(\" \");\n            let i3 = names.length;\n            while (i3--) {\n              const currentName = names[i3];\n              let handlers = this.bindings[currentName];\n              if (!currentName) {\n                each$f(this.bindings, (_value, bindingName) => {\n                  this.toggleEvent(bindingName, false);\n                  delete this.bindings[bindingName];\n                });\n                return this;\n              }\n              if (handlers) {\n                if (!callback) {\n                  handlers.length = 0;\n                } else {\n                  const filteredHandlers = partition$2(handlers, (handler) => handler.func === callback);\n                  handlers = filteredHandlers.fail;\n                  this.bindings[currentName] = handlers;\n                  each$g(filteredHandlers.pass, (handler) => {\n                    handler.removed = true;\n                  });\n                }\n                if (!handlers.length) {\n                  this.toggleEvent(name2, false);\n                  delete this.bindings[currentName];\n                }\n              }\n            }\n          } else {\n            each$f(this.bindings, (_value, name3) => {\n              this.toggleEvent(name3, false);\n            });\n            this.bindings = {};\n          }\n          return this;\n        }\n        once(name2, callback, prepend2) {\n          return this.on(name2, callback, prepend2, { once: true });\n        }\n        has(name2) {\n          name2 = name2.toLowerCase();\n          return !(!this.bindings[name2] || this.bindings[name2].length === 0);\n        }\n      }\n      const getEventDispatcher = (obj) => {\n        if (!obj._eventDispatcher) {\n          obj._eventDispatcher = new EventDispatcher({\n            scope: obj,\n            toggleEvent: (name2, state) => {\n              if (EventDispatcher.isNative(name2) && obj.toggleNativeEvent) {\n                obj.toggleNativeEvent(name2, state);\n              }\n            }\n          });\n        }\n        return obj._eventDispatcher;\n      };\n      const Observable = {\n        fire(name2, args, bubble) {\n          return this.dispatch(name2, args, bubble);\n        },\n        dispatch(name2, args, bubble) {\n          const self2 = this;\n          if (self2.removed && name2 !== \"remove\" && name2 !== \"detach\") {\n            return normalize$32(name2.toLowerCase(), args !== null && args !== void 0 ? args : {}, self2);\n          }\n          const dispatcherArgs = getEventDispatcher(self2).dispatch(name2, args);\n          if (bubble !== false && self2.parent) {\n            let parent2 = self2.parent();\n            while (parent2 && !dispatcherArgs.isPropagationStopped()) {\n              parent2.dispatch(name2, dispatcherArgs, false);\n              parent2 = parent2.parent();\n            }\n          }\n          return dispatcherArgs;\n        },\n        on(name2, callback, prepend2) {\n          return getEventDispatcher(this).on(name2, callback, prepend2);\n        },\n        off(name2, callback) {\n          return getEventDispatcher(this).off(name2, callback);\n        },\n        once(name2, callback) {\n          return getEventDispatcher(this).once(name2, callback);\n        },\n        hasEventListeners(name2) {\n          return getEventDispatcher(this).has(name2);\n        }\n      };\n      const DOM$2 = DOMUtils.DOM;\n      let customEventRootDelegates;\n      const getEventTarget = (editor, eventName) => {\n        if (eventName === \"selectionchange\") {\n          return editor.getDoc();\n        }\n        if (!editor.inline && /^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(eventName)) {\n          return editor.getDoc().documentElement;\n        }\n        const eventRoot = getEventRoot(editor);\n        if (eventRoot) {\n          if (!editor.eventRoot) {\n            editor.eventRoot = DOM$2.select(eventRoot)[0];\n          }\n          return editor.eventRoot;\n        }\n        return editor.getBody();\n      };\n      const isListening = (editor) => !editor.hidden && !isReadOnly(editor);\n      const fireEvent = (editor, eventName, e2) => {\n        if (isListening(editor)) {\n          editor.dispatch(eventName, e2);\n        } else if (isReadOnly(editor)) {\n          processReadonlyEvents(editor, e2);\n        }\n      };\n      const bindEventDelegate = (editor, eventName) => {\n        let delegate;\n        if (!editor.delegates) {\n          editor.delegates = {};\n        }\n        if (editor.delegates[eventName] || editor.removed) {\n          return;\n        }\n        const eventRootElm = getEventTarget(editor, eventName);\n        if (getEventRoot(editor)) {\n          if (!customEventRootDelegates) {\n            customEventRootDelegates = {};\n            editor.editorManager.on(\"removeEditor\", () => {\n              if (!editor.editorManager.activeEditor) {\n                if (customEventRootDelegates) {\n                  each$f(customEventRootDelegates, (_value, name2) => {\n                    editor.dom.unbind(getEventTarget(editor, name2));\n                  });\n                  customEventRootDelegates = null;\n                }\n              }\n            });\n          }\n          if (customEventRootDelegates[eventName]) {\n            return;\n          }\n          delegate = (e2) => {\n            const target = e2.target;\n            const editors2 = editor.editorManager.get();\n            let i3 = editors2.length;\n            while (i3--) {\n              const body = editors2[i3].getBody();\n              if (body === target || DOM$2.isChildOf(target, body)) {\n                fireEvent(editors2[i3], eventName, e2);\n              }\n            }\n          };\n          customEventRootDelegates[eventName] = delegate;\n          DOM$2.bind(eventRootElm, eventName, delegate);\n        } else {\n          delegate = (e2) => {\n            fireEvent(editor, eventName, e2);\n          };\n          DOM$2.bind(eventRootElm, eventName, delegate);\n          editor.delegates[eventName] = delegate;\n        }\n      };\n      const EditorObservable = {\n        ...Observable,\n        bindPendingEventDelegates() {\n          const self2 = this;\n          Tools.each(self2._pendingNativeEvents, (name2) => {\n            bindEventDelegate(self2, name2);\n          });\n        },\n        toggleNativeEvent(name2, state) {\n          const self2 = this;\n          if (name2 === \"focus\" || name2 === \"blur\") {\n            return;\n          }\n          if (self2.removed) {\n            return;\n          }\n          if (state) {\n            if (self2.initialized) {\n              bindEventDelegate(self2, name2);\n            } else {\n              if (!self2._pendingNativeEvents) {\n                self2._pendingNativeEvents = [name2];\n              } else {\n                self2._pendingNativeEvents.push(name2);\n              }\n            }\n          } else if (self2.initialized) {\n            self2.dom.unbind(getEventTarget(self2, name2), name2, self2.delegates[name2]);\n            delete self2.delegates[name2];\n          }\n        },\n        unbindAllNativeEvents() {\n          const self2 = this;\n          const body = self2.getBody();\n          const dom3 = self2.dom;\n          if (self2.delegates) {\n            each$f(self2.delegates, (value2, name2) => {\n              self2.dom.unbind(getEventTarget(self2, name2), name2, value2);\n            });\n            delete self2.delegates;\n          }\n          if (!self2.inline && body && dom3) {\n            body.onload = null;\n            dom3.unbind(self2.getWin());\n            dom3.unbind(self2.getDoc());\n          }\n          if (dom3) {\n            dom3.unbind(body);\n            dom3.unbind(self2.getContainer());\n          }\n        }\n      };\n      const stringListProcessor = (value2) => {\n        if (isString2(value2)) {\n          return {\n            value: value2.split(/[ ,]/),\n            valid: true\n          };\n        } else if (isArrayOf(value2, isString2)) {\n          return {\n            value: value2,\n            valid: true\n          };\n        } else {\n          return {\n            valid: false,\n            message: `The value must be a string[] or a comma/space separated string.`\n          };\n        }\n      };\n      const getBuiltInProcessor = (type2) => {\n        const validator = (() => {\n          switch (type2) {\n            case \"array\":\n              return isArray$1;\n            case \"boolean\":\n              return isBoolean2;\n            case \"function\":\n              return isFunction2;\n            case \"number\":\n              return isNumber2;\n            case \"object\":\n              return isObject2;\n            case \"string\":\n              return isString2;\n            case \"string[]\":\n              return stringListProcessor;\n            case \"object[]\":\n              return (val) => isArrayOf(val, isObject2);\n            case \"regexp\":\n              return (val) => is$4(val, RegExp);\n          }\n        })();\n        return (value2) => processValue(value2, validator, `The value must be a ${type2}.`);\n      };\n      const isBuiltInSpec = (spec) => isString2(spec.processor);\n      const getErrorMessage = (message, result) => {\n        const additionalText = isEmpty$3(result.message) ? \"\" : `. ${result.message}`;\n        return message + additionalText;\n      };\n      const isValidResult = (result) => result.valid;\n      const processValue = (value2, processor, message = \"\") => {\n        const result = processor(value2);\n        if (isBoolean2(result)) {\n          return result ? {\n            value: value2,\n            valid: true\n          } : {\n            valid: false,\n            message\n          };\n        } else {\n          return result;\n        }\n      };\n      const processDefaultValue = (name2, defaultValue, processor) => {\n        if (!isUndefined2(defaultValue)) {\n          const result = processValue(defaultValue, processor);\n          if (isValidResult(result)) {\n            return result.value;\n          } else {\n            console.error(getErrorMessage(`Invalid default value passed for the \"${name2}\" option`, result));\n          }\n        }\n        return void 0;\n      };\n      const create$5 = (editor, initialOptions) => {\n        const registry2 = {};\n        const values2 = {};\n        const setValue = (name2, value2, processor) => {\n          const result = processValue(value2, processor);\n          if (isValidResult(result)) {\n            values2[name2] = result.value;\n            return true;\n          } else {\n            console.warn(getErrorMessage(`Invalid value passed for the ${name2} option`, result));\n            return false;\n          }\n        };\n        const register2 = (name2, spec) => {\n          const processor = isBuiltInSpec(spec) ? getBuiltInProcessor(spec.processor) : spec.processor;\n          const defaultValue = processDefaultValue(name2, spec.default, processor);\n          registry2[name2] = {\n            ...spec,\n            default: defaultValue,\n            processor\n          };\n          const initValue = get$a(values2, name2).orThunk(() => get$a(initialOptions, name2));\n          initValue.each((value2) => setValue(name2, value2, processor));\n        };\n        const isRegistered = (name2) => has$2(registry2, name2);\n        const get2 = (name2) => get$a(values2, name2).orThunk(() => get$a(registry2, name2).map((spec) => spec.default)).getOrUndefined();\n        const set3 = (name2, value2) => {\n          if (!isRegistered(name2)) {\n            console.warn(`\"${name2}\" is not a registered option. Ensure the option has been registered before setting a value.`);\n            return false;\n          } else {\n            const spec = registry2[name2];\n            if (spec.immutable) {\n              console.error(`\"${name2}\" is an immutable option and cannot be updated`);\n              return false;\n            } else {\n              return setValue(name2, value2, spec.processor);\n            }\n          }\n        };\n        const unset = (name2) => {\n          const registered = isRegistered(name2);\n          if (registered) {\n            delete values2[name2];\n          }\n          return registered;\n        };\n        const isSet2 = (name2) => has$2(values2, name2);\n        return {\n          register: register2,\n          isRegistered,\n          get: get2,\n          set: set3,\n          unset,\n          isSet: isSet2\n        };\n      };\n      const defaultModes = [\n        \"design\",\n        \"readonly\"\n      ];\n      const switchToMode = (editor, activeMode, availableModes, mode) => {\n        const oldMode = availableModes[activeMode.get()];\n        const newMode = availableModes[mode];\n        try {\n          newMode.activate();\n        } catch (e2) {\n          console.error(`problem while activating editor mode ${mode}:`, e2);\n          return;\n        }\n        oldMode.deactivate();\n        if (oldMode.editorReadOnly !== newMode.editorReadOnly) {\n          toggleReadOnly(editor, newMode.editorReadOnly);\n        }\n        activeMode.set(mode);\n        fireSwitchMode(editor, mode);\n      };\n      const setMode = (editor, availableModes, activeMode, mode) => {\n        if (mode === activeMode.get()) {\n          return;\n        } else if (!has$2(availableModes, mode)) {\n          throw new Error(`Editor mode '${mode}' is invalid`);\n        }\n        if (editor.initialized) {\n          switchToMode(editor, activeMode, availableModes, mode);\n        } else {\n          editor.on(\"init\", () => switchToMode(editor, activeMode, availableModes, mode));\n        }\n      };\n      const registerMode = (availableModes, mode, api2) => {\n        if (contains$2(defaultModes, mode)) {\n          throw new Error(`Cannot override default mode ${mode}`);\n        }\n        return {\n          ...availableModes,\n          [mode]: {\n            ...api2,\n            deactivate: () => {\n              try {\n                api2.deactivate();\n              } catch (e2) {\n                console.error(`problem while deactivating editor mode ${mode}:`, e2);\n              }\n            }\n          }\n        };\n      };\n      const create$4 = (editor) => {\n        const activeMode = Cell(\"design\");\n        const availableModes = Cell({\n          design: {\n            activate: noop,\n            deactivate: noop,\n            editorReadOnly: false\n          },\n          readonly: {\n            activate: noop,\n            deactivate: noop,\n            editorReadOnly: true\n          }\n        });\n        registerReadOnlyContentFilters(editor);\n        registerReadOnlySelectionBlockers(editor);\n        return {\n          isReadOnly: () => isReadOnly(editor),\n          set: (mode) => setMode(editor, availableModes.get(), activeMode, mode),\n          get: () => activeMode.get(),\n          register: (mode, api2) => {\n            availableModes.set(registerMode(availableModes.get(), mode, api2));\n          }\n        };\n      };\n      const each$2 = Tools.each, explode = Tools.explode;\n      const keyCodeLookup = {\n        f1: 112,\n        f2: 113,\n        f3: 114,\n        f4: 115,\n        f5: 116,\n        f6: 117,\n        f7: 118,\n        f8: 119,\n        f9: 120,\n        f10: 121,\n        f11: 122,\n        f12: 123\n      };\n      const modifierNames = Tools.makeMap(\"alt,ctrl,shift,meta,access\");\n      const parseShortcut = (pattern) => {\n        let key;\n        const shortcut = {};\n        const isMac2 = Env.os.isMacOS() || Env.os.isiOS();\n        each$2(explode(pattern.toLowerCase(), \"+\"), (value2) => {\n          if (value2 in modifierNames) {\n            shortcut[value2] = true;\n          } else {\n            if (/^[0-9]{2,}$/.test(value2)) {\n              shortcut.keyCode = parseInt(value2, 10);\n            } else {\n              shortcut.charCode = value2.charCodeAt(0);\n              shortcut.keyCode = keyCodeLookup[value2] || value2.toUpperCase().charCodeAt(0);\n            }\n          }\n        });\n        const id = [shortcut.keyCode];\n        for (key in modifierNames) {\n          if (shortcut[key]) {\n            id.push(key);\n          } else {\n            shortcut[key] = false;\n          }\n        }\n        shortcut.id = id.join(\",\");\n        if (shortcut.access) {\n          shortcut.alt = true;\n          if (isMac2) {\n            shortcut.ctrl = true;\n          } else {\n            shortcut.shift = true;\n          }\n        }\n        if (shortcut.meta) {\n          if (isMac2) {\n            shortcut.meta = true;\n          } else {\n            shortcut.ctrl = true;\n            shortcut.meta = false;\n          }\n        }\n        return shortcut;\n      };\n      class Shortcuts {\n        constructor(editor) {\n          this.shortcuts = {};\n          this.pendingPatterns = [];\n          this.editor = editor;\n          const self2 = this;\n          editor.on(\"keyup keypress keydown\", (e2) => {\n            if ((self2.hasModifier(e2) || self2.isFunctionKey(e2)) && !e2.isDefaultPrevented()) {\n              each$2(self2.shortcuts, (shortcut) => {\n                if (self2.matchShortcut(e2, shortcut)) {\n                  self2.pendingPatterns = shortcut.subpatterns.slice(0);\n                  if (e2.type === \"keydown\") {\n                    self2.executeShortcutAction(shortcut);\n                  }\n                  return true;\n                }\n              });\n              if (self2.matchShortcut(e2, self2.pendingPatterns[0])) {\n                if (self2.pendingPatterns.length === 1) {\n                  if (e2.type === \"keydown\") {\n                    self2.executeShortcutAction(self2.pendingPatterns[0]);\n                  }\n                }\n                self2.pendingPatterns.shift();\n              }\n            }\n          });\n        }\n        add(pattern, desc, cmdFunc, scope) {\n          const self2 = this;\n          const func = self2.normalizeCommandFunc(cmdFunc);\n          each$2(explode(Tools.trim(pattern)), (pattern2) => {\n            const shortcut = self2.createShortcut(pattern2, desc, func, scope);\n            self2.shortcuts[shortcut.id] = shortcut;\n          });\n          return true;\n        }\n        remove(pattern) {\n          const shortcut = this.createShortcut(pattern);\n          if (this.shortcuts[shortcut.id]) {\n            delete this.shortcuts[shortcut.id];\n            return true;\n          }\n          return false;\n        }\n        normalizeCommandFunc(cmdFunc) {\n          const self2 = this;\n          const cmd = cmdFunc;\n          if (typeof cmd === \"string\") {\n            return () => {\n              self2.editor.execCommand(cmd, false, null);\n            };\n          } else if (Tools.isArray(cmd)) {\n            return () => {\n              self2.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n            };\n          } else {\n            return cmd;\n          }\n        }\n        createShortcut(pattern, desc, cmdFunc, scope) {\n          const shortcuts = Tools.map(explode(pattern, \">\"), parseShortcut);\n          shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n            func: cmdFunc,\n            scope: scope || this.editor\n          });\n          return Tools.extend(shortcuts[0], {\n            desc: this.editor.translate(desc),\n            subpatterns: shortcuts.slice(1)\n          });\n        }\n        hasModifier(e2) {\n          return e2.altKey || e2.ctrlKey || e2.metaKey;\n        }\n        isFunctionKey(e2) {\n          return e2.type === \"keydown\" && e2.keyCode >= 112 && e2.keyCode <= 123;\n        }\n        matchShortcut(e2, shortcut) {\n          if (!shortcut) {\n            return false;\n          }\n          if (shortcut.ctrl !== e2.ctrlKey || shortcut.meta !== e2.metaKey) {\n            return false;\n          }\n          if (shortcut.alt !== e2.altKey || shortcut.shift !== e2.shiftKey) {\n            return false;\n          }\n          if (e2.keyCode === shortcut.keyCode || e2.charCode && e2.charCode === shortcut.charCode) {\n            e2.preventDefault();\n            return true;\n          }\n          return false;\n        }\n        executeShortcutAction(shortcut) {\n          return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n        }\n      }\n      const create$3 = () => {\n        const buttons = {};\n        const menuItems = {};\n        const popups = {};\n        const icons2 = {};\n        const contextMenus = {};\n        const contextToolbars = {};\n        const sidebars = {};\n        const add3 = (collection, type2) => (name2, spec) => collection[name2.toLowerCase()] = {\n          ...spec,\n          type: type2\n        };\n        const addIcon = (name2, svgData) => icons2[name2.toLowerCase()] = svgData;\n        return {\n          addButton: add3(buttons, \"button\"),\n          addGroupToolbarButton: add3(buttons, \"grouptoolbarbutton\"),\n          addToggleButton: add3(buttons, \"togglebutton\"),\n          addMenuButton: add3(buttons, \"menubutton\"),\n          addSplitButton: add3(buttons, \"splitbutton\"),\n          addMenuItem: add3(menuItems, \"menuitem\"),\n          addNestedMenuItem: add3(menuItems, \"nestedmenuitem\"),\n          addToggleMenuItem: add3(menuItems, \"togglemenuitem\"),\n          addAutocompleter: add3(popups, \"autocompleter\"),\n          addContextMenu: add3(contextMenus, \"contextmenu\"),\n          addContextToolbar: add3(contextToolbars, \"contexttoolbar\"),\n          addContextForm: add3(contextToolbars, \"contextform\"),\n          addSidebar: add3(sidebars, \"sidebar\"),\n          addIcon,\n          getAll: () => ({\n            buttons,\n            menuItems,\n            icons: icons2,\n            popups,\n            contextMenus,\n            contextToolbars,\n            sidebars\n          })\n        };\n      };\n      const registry = () => {\n        const bridge = create$3();\n        return {\n          addAutocompleter: bridge.addAutocompleter,\n          addButton: bridge.addButton,\n          addContextForm: bridge.addContextForm,\n          addContextMenu: bridge.addContextMenu,\n          addContextToolbar: bridge.addContextToolbar,\n          addIcon: bridge.addIcon,\n          addMenuButton: bridge.addMenuButton,\n          addMenuItem: bridge.addMenuItem,\n          addNestedMenuItem: bridge.addNestedMenuItem,\n          addSidebar: bridge.addSidebar,\n          addSplitButton: bridge.addSplitButton,\n          addToggleButton: bridge.addToggleButton,\n          addGroupToolbarButton: bridge.addGroupToolbarButton,\n          addToggleMenuItem: bridge.addToggleMenuItem,\n          getAll: bridge.getAll\n        };\n      };\n      const DOM$1 = DOMUtils.DOM;\n      const extend = Tools.extend, each$1 = Tools.each;\n      class Editor2 {\n        constructor(id, options, editorManager) {\n          this.plugins = {};\n          this.contentCSS = [];\n          this.contentStyles = [];\n          this.loadedCSS = {};\n          this.isNotDirty = false;\n          this.editorManager = editorManager;\n          this.documentBaseUrl = editorManager.documentBaseURL;\n          extend(this, EditorObservable);\n          const self2 = this;\n          this.id = id;\n          this.hidden = false;\n          const normalizedOptions = normalizeOptions(editorManager.defaultOptions, options);\n          this.options = create$5(self2, normalizedOptions);\n          register$7(self2);\n          const getOption2 = this.options.get;\n          if (getOption2(\"deprecation_warnings\")) {\n            logWarnings(options, normalizedOptions);\n          }\n          const suffix = getOption2(\"suffix\");\n          if (suffix) {\n            editorManager.suffix = suffix;\n          }\n          this.suffix = editorManager.suffix;\n          const baseUrl = getOption2(\"base_url\");\n          if (baseUrl) {\n            editorManager._setBaseUrl(baseUrl);\n          }\n          this.baseUri = editorManager.baseURI;\n          const referrerPolicy = getReferrerPolicy(self2);\n          if (referrerPolicy) {\n            ScriptLoader.ScriptLoader._setReferrerPolicy(referrerPolicy);\n            DOMUtils.DOM.styleSheetLoader._setReferrerPolicy(referrerPolicy);\n          }\n          AddOnManager.languageLoad = getOption2(\"language_load\");\n          AddOnManager.baseURL = editorManager.baseURL;\n          this.setDirty(false);\n          this.documentBaseURI = new URI(getDocumentBaseUrl(self2), { base_uri: this.baseUri });\n          this.baseURI = this.baseUri;\n          this.inline = isInline(self2);\n          this.shortcuts = new Shortcuts(this);\n          this.editorCommands = new EditorCommands(this);\n          registerCommands(this);\n          const cacheSuffix = getOption2(\"cache_suffix\");\n          if (cacheSuffix) {\n            Env.cacheSuffix = cacheSuffix.replace(/^[\\?\\&]+/, \"\");\n          }\n          this.ui = {\n            registry: registry(),\n            styleSheetLoader: void 0,\n            show: noop,\n            hide: noop,\n            setEnabled: noop,\n            isEnabled: always\n          };\n          this.mode = create$4(self2);\n          editorManager.dispatch(\"SetupEditor\", { editor: this });\n          const setupCallback = getSetupCallback(self2);\n          if (isFunction2(setupCallback)) {\n            setupCallback.call(self2, self2);\n          }\n        }\n        render() {\n          render(this);\n        }\n        focus(skipFocus) {\n          this.execCommand(\"mceFocus\", false, skipFocus);\n        }\n        hasFocus() {\n          return hasFocus(this);\n        }\n        translate(text3) {\n          return I18n.translate(text3);\n        }\n        getParam(name2, defaultVal, type2) {\n          const options = this.options;\n          if (!options.isRegistered(name2)) {\n            if (isNonNullable(type2)) {\n              options.register(name2, {\n                processor: type2,\n                default: defaultVal\n              });\n            } else {\n              options.register(name2, {\n                processor: always,\n                default: defaultVal\n              });\n            }\n          }\n          return !options.isSet(name2) && !isUndefined2(defaultVal) ? defaultVal : options.get(name2);\n        }\n        hasPlugin(name2, loaded) {\n          const hasPlugin = contains$2(getPlugins(this), name2);\n          if (hasPlugin) {\n            return loaded ? PluginManager.get(name2) !== void 0 : true;\n          } else {\n            return false;\n          }\n        }\n        nodeChanged(args) {\n          this._nodeChangeDispatcher.nodeChanged(args);\n        }\n        addCommand(name2, callback, scope) {\n          this.editorCommands.addCommand(name2, callback, scope);\n        }\n        addQueryStateHandler(name2, callback, scope) {\n          this.editorCommands.addQueryStateHandler(name2, callback, scope);\n        }\n        addQueryValueHandler(name2, callback, scope) {\n          this.editorCommands.addQueryValueHandler(name2, callback, scope);\n        }\n        addShortcut(pattern, desc, cmdFunc, scope) {\n          this.shortcuts.add(pattern, desc, cmdFunc, scope);\n        }\n        execCommand(cmd, ui, value2, args) {\n          return this.editorCommands.execCommand(cmd, ui, value2, args);\n        }\n        queryCommandState(cmd) {\n          return this.editorCommands.queryCommandState(cmd);\n        }\n        queryCommandValue(cmd) {\n          return this.editorCommands.queryCommandValue(cmd);\n        }\n        queryCommandSupported(cmd) {\n          return this.editorCommands.queryCommandSupported(cmd);\n        }\n        show() {\n          const self2 = this;\n          if (self2.hidden) {\n            self2.hidden = false;\n            if (self2.inline) {\n              self2.getBody().contentEditable = \"true\";\n            } else {\n              DOM$1.show(self2.getContainer());\n              DOM$1.hide(self2.id);\n            }\n            self2.load();\n            self2.dispatch(\"show\");\n          }\n        }\n        hide() {\n          const self2 = this;\n          if (!self2.hidden) {\n            self2.save();\n            if (self2.inline) {\n              self2.getBody().contentEditable = \"false\";\n              if (self2 === self2.editorManager.focusedEditor) {\n                self2.editorManager.focusedEditor = null;\n              }\n            } else {\n              DOM$1.hide(self2.getContainer());\n              DOM$1.setStyle(self2.id, \"display\", self2.orgDisplay);\n            }\n            self2.hidden = true;\n            self2.dispatch(\"hide\");\n          }\n        }\n        isHidden() {\n          return this.hidden;\n        }\n        setProgressState(state, time) {\n          this.dispatch(\"ProgressState\", {\n            state,\n            time\n          });\n        }\n        load(args) {\n          const self2 = this;\n          let elm = self2.getElement(), html2;\n          if (self2.removed) {\n            return \"\";\n          }\n          if (elm) {\n            args = args || {};\n            args.load = true;\n            const value2 = isTextareaOrInput(elm) ? elm.value : elm.innerHTML;\n            html2 = self2.setContent(value2, args);\n            args.element = elm;\n            if (!args.no_events) {\n              self2.dispatch(\"LoadContent\", args);\n            }\n            args.element = elm = null;\n            return html2;\n          }\n        }\n        save(args) {\n          const self2 = this;\n          let elm = self2.getElement(), html2, form;\n          if (!elm || !self2.initialized || self2.removed) {\n            return;\n          }\n          args = args || {};\n          args.save = true;\n          args.element = elm;\n          html2 = args.content = self2.getContent(args);\n          if (!args.no_events) {\n            self2.dispatch(\"SaveContent\", args);\n          }\n          if (args.format === \"raw\") {\n            self2.dispatch(\"RawSaveContent\", args);\n          }\n          html2 = args.content;\n          if (!isTextareaOrInput(elm)) {\n            if (args.is_removing || !self2.inline) {\n              elm.innerHTML = html2;\n            }\n            if (form = DOM$1.getParent(self2.id, \"form\")) {\n              each$1(form.elements, (elm2) => {\n                if (elm2.name === self2.id) {\n                  elm2.value = html2;\n                  return false;\n                }\n              });\n            }\n          } else {\n            elm.value = html2;\n          }\n          args.element = elm = null;\n          if (args.set_dirty !== false) {\n            self2.setDirty(false);\n          }\n          return html2;\n        }\n        setContent(content, args) {\n          return setContent(this, content, args);\n        }\n        getContent(args) {\n          return getContent(this, args);\n        }\n        insertContent(content, args) {\n          if (args) {\n            content = extend({ content }, args);\n          }\n          this.execCommand(\"mceInsertContent\", false, content);\n        }\n        resetContent(initialContent) {\n          if (initialContent === void 0) {\n            setContent(this, this.startContent, { format: \"raw\" });\n          } else {\n            setContent(this, initialContent);\n          }\n          this.undoManager.reset();\n          this.setDirty(false);\n          this.nodeChanged();\n        }\n        isDirty() {\n          return !this.isNotDirty;\n        }\n        setDirty(state) {\n          const oldState = !this.isNotDirty;\n          this.isNotDirty = !state;\n          if (state && state !== oldState) {\n            this.dispatch(\"dirty\");\n          }\n        }\n        getContainer() {\n          const self2 = this;\n          if (!self2.container) {\n            self2.container = DOM$1.get(self2.editorContainer || self2.id + \"_parent\");\n          }\n          return self2.container;\n        }\n        getContentAreaContainer() {\n          return this.contentAreaContainer;\n        }\n        getElement() {\n          if (!this.targetElm) {\n            this.targetElm = DOM$1.get(this.id);\n          }\n          return this.targetElm;\n        }\n        getWin() {\n          const self2 = this;\n          let elm;\n          if (!self2.contentWindow) {\n            elm = self2.iframeElement;\n            if (elm) {\n              self2.contentWindow = elm.contentWindow;\n            }\n          }\n          return self2.contentWindow;\n        }\n        getDoc() {\n          const self2 = this;\n          let win;\n          if (!self2.contentDocument) {\n            win = self2.getWin();\n            if (win) {\n              self2.contentDocument = win.document;\n            }\n          }\n          return self2.contentDocument;\n        }\n        getBody() {\n          const doc = this.getDoc();\n          return this.bodyElement || (doc ? doc.body : null);\n        }\n        convertURL(url2, name2, elm) {\n          const self2 = this, getOption2 = self2.options.get;\n          const urlConverterCallback = getUrlConverterCallback(self2);\n          if (isFunction2(urlConverterCallback)) {\n            return urlConverterCallback.call(self2, url2, elm, true, name2);\n          }\n          if (!getOption2(\"convert_urls\") || elm && elm.nodeName === \"LINK\" || url2.indexOf(\"file:\") === 0 || url2.length === 0) {\n            return url2;\n          }\n          if (getOption2(\"relative_urls\")) {\n            return self2.documentBaseURI.toRelative(url2);\n          }\n          url2 = self2.documentBaseURI.toAbsolute(url2, getOption2(\"remove_script_host\"));\n          return url2;\n        }\n        addVisual(elm) {\n          addVisual(this, elm);\n        }\n        remove() {\n          remove$1(this);\n        }\n        destroy(automatic) {\n          destroy(this, automatic);\n        }\n        uploadImages() {\n          return this.editorUpload.uploadImages();\n        }\n        _scanForImages() {\n          return this.editorUpload.scanForImages();\n        }\n      }\n      const DOM = DOMUtils.DOM;\n      const each = Tools.each;\n      let boundGlobalEvents = false;\n      let beforeUnloadDelegate;\n      let editors = [];\n      const globalEventDelegate = (e2) => {\n        const type2 = e2.type;\n        each(EditorManager.get(), (editor) => {\n          switch (type2) {\n            case \"scroll\":\n              editor.dispatch(\"ScrollWindow\", e2);\n              break;\n            case \"resize\":\n              editor.dispatch(\"ResizeWindow\", e2);\n              break;\n          }\n        });\n      };\n      const toggleGlobalEvents = (state) => {\n        if (state !== boundGlobalEvents) {\n          const DOM2 = DOMUtils.DOM;\n          if (state) {\n            DOM2.bind(window, \"resize\", globalEventDelegate);\n            DOM2.bind(window, \"scroll\", globalEventDelegate);\n          } else {\n            DOM2.unbind(window, \"resize\", globalEventDelegate);\n            DOM2.unbind(window, \"scroll\", globalEventDelegate);\n          }\n          boundGlobalEvents = state;\n        }\n      };\n      const removeEditorFromList = (targetEditor) => {\n        const oldEditors = editors;\n        editors = filter$6(editors, (editor) => {\n          return targetEditor !== editor;\n        });\n        if (EditorManager.activeEditor === targetEditor) {\n          EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n        }\n        if (EditorManager.focusedEditor === targetEditor) {\n          EditorManager.focusedEditor = null;\n        }\n        return oldEditors.length !== editors.length;\n      };\n      const purgeDestroyedEditor = (editor) => {\n        if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n          removeEditorFromList(editor);\n          editor.unbindAllNativeEvents();\n          editor.destroy(true);\n          editor.removed = true;\n          editor = null;\n        }\n        return editor;\n      };\n      const isQuirksMode = document.compatMode !== \"CSS1Compat\";\n      const EditorManager = {\n        ...Observable,\n        baseURI: null,\n        baseURL: null,\n        defaultOptions: {},\n        documentBaseURL: null,\n        suffix: null,\n        majorVersion: \"6\",\n        minorVersion: \"0.2\",\n        releaseDate: \"2022-04-27\",\n        i18n: I18n,\n        activeEditor: null,\n        focusedEditor: null,\n        setup() {\n          const self2 = this;\n          let baseURL, documentBaseURL, suffix = \"\";\n          documentBaseURL = URI.getDocumentBaseUrl(document.location);\n          if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n            documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, \"\").replace(/[\\/\\\\][^\\/]+$/, \"\");\n            if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n              documentBaseURL += \"/\";\n            }\n          }\n          const preInit2 = window.tinymce || window.tinyMCEPreInit;\n          if (preInit2) {\n            baseURL = preInit2.base || preInit2.baseURL;\n            suffix = preInit2.suffix;\n          } else {\n            const scripts = document.getElementsByTagName(\"script\");\n            for (let i3 = 0; i3 < scripts.length; i3++) {\n              const src = scripts[i3].src || \"\";\n              if (src === \"\") {\n                continue;\n              }\n              const srcScript = src.substring(src.lastIndexOf(\"/\"));\n              if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n                if (srcScript.indexOf(\".min\") !== -1) {\n                  suffix = \".min\";\n                }\n                baseURL = src.substring(0, src.lastIndexOf(\"/\"));\n                break;\n              }\n            }\n            if (!baseURL && document.currentScript) {\n              const src = document.currentScript.src;\n              if (src.indexOf(\".min\") !== -1) {\n                suffix = \".min\";\n              }\n              baseURL = src.substring(0, src.lastIndexOf(\"/\"));\n            }\n          }\n          self2.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n          self2.documentBaseURL = documentBaseURL;\n          self2.baseURI = new URI(self2.baseURL);\n          self2.suffix = suffix;\n          setup$v(self2);\n        },\n        overrideDefaults(defaultOptions2) {\n          const baseUrl = defaultOptions2.base_url;\n          if (baseUrl) {\n            this._setBaseUrl(baseUrl);\n          }\n          const suffix = defaultOptions2.suffix;\n          if (defaultOptions2.suffix) {\n            this.suffix = suffix;\n          }\n          this.defaultOptions = defaultOptions2;\n          const pluginBaseUrls = defaultOptions2.plugin_base_urls;\n          if (pluginBaseUrls !== void 0) {\n            each$f(pluginBaseUrls, (pluginBaseUrl, pluginName) => {\n              AddOnManager.PluginManager.urls[pluginName] = pluginBaseUrl;\n            });\n          }\n        },\n        init(options) {\n          const self2 = this;\n          let result;\n          const invalidInlineTargets = Tools.makeMap(\"area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu\", \" \");\n          const isInvalidInlineTarget = (options2, elm) => options2.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n          const createId = (elm) => {\n            let id = elm.id;\n            if (!id) {\n              id = get$a(elm, \"name\").filter((name2) => !DOM.get(name2)).getOrThunk(DOM.uniqueId);\n              elm.setAttribute(\"id\", id);\n            }\n            return id;\n          };\n          const execCallback = (name2) => {\n            const callback = options[name2];\n            if (!callback) {\n              return;\n            }\n            return callback.apply(self2, []);\n          };\n          const findTargets = (options2) => {\n            if (Env.browser.isIE() || Env.browser.isEdge()) {\n              initError(\"TinyMCE does not support the browser you are using. For a list of supported browsers please see: https://www.tiny.cloud/docs/tinymce/6/support/#supportedwebbrowsers\");\n              return [];\n            } else if (isQuirksMode) {\n              initError(\"Failed to initialize the editor as the document is not in standards mode. TinyMCE requires standards mode.\");\n              return [];\n            } else if (isString2(options2.selector)) {\n              return DOM.select(options2.selector);\n            } else if (isNonNullable(options2.target)) {\n              return [options2.target];\n            } else {\n              return [];\n            }\n          };\n          let provideResults = (editors2) => {\n            result = editors2;\n          };\n          const initEditors = () => {\n            let initCount = 0;\n            const editors2 = [];\n            let targets;\n            const createEditor = (id, options2, targetElm) => {\n              const editor = new Editor2(id, options2, self2);\n              editors2.push(editor);\n              editor.on(\"init\", () => {\n                if (++initCount === targets.length) {\n                  provideResults(editors2);\n                }\n              });\n              editor.targetElm = editor.targetElm || targetElm;\n              editor.render();\n            };\n            DOM.unbind(window, \"ready\", initEditors);\n            execCallback(\"onpageload\");\n            targets = unique$1(findTargets(options));\n            Tools.each(targets, (elm) => {\n              purgeDestroyedEditor(self2.get(elm.id));\n            });\n            targets = Tools.grep(targets, (elm) => {\n              return !self2.get(elm.id);\n            });\n            if (targets.length === 0) {\n              provideResults([]);\n            } else {\n              each(targets, (elm) => {\n                if (isInvalidInlineTarget(options, elm)) {\n                  initError(\"Could not initialize inline editor on invalid inline target element\", elm);\n                } else {\n                  createEditor(createId(elm), options, elm);\n                }\n              });\n            }\n          };\n          DOM.bind(window, \"ready\", initEditors);\n          return new Promise((resolve2) => {\n            if (result) {\n              resolve2(result);\n            } else {\n              provideResults = (editors2) => {\n                resolve2(editors2);\n              };\n            }\n          });\n        },\n        get(id) {\n          if (arguments.length === 0) {\n            return editors.slice(0);\n          } else if (isString2(id)) {\n            return find$2(editors, (editor) => {\n              return editor.id === id;\n            }).getOr(null);\n          } else if (isNumber2(id)) {\n            return editors[id] ? editors[id] : null;\n          } else {\n            return null;\n          }\n        },\n        add(editor) {\n          const self2 = this;\n          const existingEditor = self2.get(editor.id);\n          if (existingEditor === editor) {\n            return editor;\n          }\n          if (existingEditor === null) {\n            editors.push(editor);\n          }\n          toggleGlobalEvents(true);\n          self2.activeEditor = editor;\n          self2.dispatch(\"AddEditor\", { editor });\n          if (!beforeUnloadDelegate) {\n            beforeUnloadDelegate = (e2) => {\n              const event = self2.dispatch(\"BeforeUnload\");\n              if (event.returnValue) {\n                e2.preventDefault();\n                e2.returnValue = event.returnValue;\n                return event.returnValue;\n              }\n            };\n            window.addEventListener(\"beforeunload\", beforeUnloadDelegate);\n          }\n          return editor;\n        },\n        createEditor(id, options) {\n          return this.add(new Editor2(id, options, this));\n        },\n        remove(selector) {\n          const self2 = this;\n          let i3, editor;\n          if (!selector) {\n            for (i3 = editors.length - 1; i3 >= 0; i3--) {\n              self2.remove(editors[i3]);\n            }\n            return;\n          }\n          if (isString2(selector)) {\n            each(DOM.select(selector), (elm) => {\n              editor = self2.get(elm.id);\n              if (editor) {\n                self2.remove(editor);\n              }\n            });\n            return;\n          }\n          editor = selector;\n          if (isNull(self2.get(editor.id))) {\n            return null;\n          }\n          if (removeEditorFromList(editor)) {\n            self2.dispatch(\"RemoveEditor\", { editor });\n          }\n          if (editors.length === 0) {\n            window.removeEventListener(\"beforeunload\", beforeUnloadDelegate);\n          }\n          editor.remove();\n          toggleGlobalEvents(editors.length > 0);\n          return editor;\n        },\n        execCommand(cmd, ui, value2) {\n          var _a3;\n          const self2 = this;\n          const editorId = isObject2(value2) ? (_a3 = value2.id) !== null && _a3 !== void 0 ? _a3 : value2.index : value2;\n          switch (cmd) {\n            case \"mceAddEditor\": {\n              if (!self2.get(editorId)) {\n                const editorOptions = value2.options;\n                new Editor2(editorId, editorOptions, self2).render();\n              }\n              return true;\n            }\n            case \"mceRemoveEditor\": {\n              const editor = self2.get(editorId);\n              if (editor) {\n                editor.remove();\n              }\n              return true;\n            }\n            case \"mceToggleEditor\": {\n              const editor = self2.get(editorId);\n              if (!editor) {\n                self2.execCommand(\"mceAddEditor\", false, value2);\n                return true;\n              }\n              if (editor.isHidden()) {\n                editor.show();\n              } else {\n                editor.hide();\n              }\n              return true;\n            }\n          }\n          if (self2.activeEditor) {\n            return self2.activeEditor.execCommand(cmd, ui, value2);\n          }\n          return false;\n        },\n        triggerSave: () => {\n          each(editors, (editor) => {\n            editor.save();\n          });\n        },\n        addI18n: (code2, items) => {\n          I18n.add(code2, items);\n        },\n        translate: (text3) => {\n          return I18n.translate(text3);\n        },\n        setActive(editor) {\n          const activeEditor = this.activeEditor;\n          if (this.activeEditor !== editor) {\n            if (activeEditor) {\n              activeEditor.dispatch(\"deactivate\", { relatedTarget: editor });\n            }\n            editor.dispatch(\"activate\", { relatedTarget: activeEditor });\n          }\n          this.activeEditor = editor;\n        },\n        _setBaseUrl(baseUrl) {\n          this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, \"\"));\n          this.baseURI = new URI(this.baseURL);\n        }\n      };\n      EditorManager.setup();\n      const setup = () => {\n        const dataValue = value$2();\n        const FakeClipboardItem = (items) => ({\n          items,\n          types: keys2(items),\n          getType: (type2) => get$a(items, type2).getOrUndefined()\n        });\n        const write2 = (data2) => {\n          dataValue.set(data2);\n        };\n        const read2 = () => dataValue.get().getOrUndefined();\n        const clear2 = dataValue.clear;\n        return {\n          FakeClipboardItem,\n          write: write2,\n          read: read2,\n          clear: clear2\n        };\n      };\n      const FakeClipboard = setup();\n      const min = Math.min, max = Math.max, round = Math.round;\n      const relativePosition = (rect, targetRect, rel) => {\n        let x2 = targetRect.x;\n        let y2 = targetRect.y;\n        const w = rect.w;\n        const h2 = rect.h;\n        const targetW = targetRect.w;\n        const targetH = targetRect.h;\n        const relChars = (rel || \"\").split(\"\");\n        if (relChars[0] === \"b\") {\n          y2 += targetH;\n        }\n        if (relChars[1] === \"r\") {\n          x2 += targetW;\n        }\n        if (relChars[0] === \"c\") {\n          y2 += round(targetH / 2);\n        }\n        if (relChars[1] === \"c\") {\n          x2 += round(targetW / 2);\n        }\n        if (relChars[3] === \"b\") {\n          y2 -= h2;\n        }\n        if (relChars[4] === \"r\") {\n          x2 -= w;\n        }\n        if (relChars[3] === \"c\") {\n          y2 -= round(h2 / 2);\n        }\n        if (relChars[4] === \"c\") {\n          x2 -= round(w / 2);\n        }\n        return create$2(x2, y2, w, h2);\n      };\n      const findBestRelativePosition = (rect, targetRect, constrainRect, rels) => {\n        let pos, i3;\n        for (i3 = 0; i3 < rels.length; i3++) {\n          pos = relativePosition(rect, targetRect, rels[i3]);\n          if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {\n            return rels[i3];\n          }\n        }\n        return null;\n      };\n      const inflate = (rect, w, h2) => {\n        return create$2(rect.x - w, rect.y - h2, rect.w + w * 2, rect.h + h2 * 2);\n      };\n      const intersect = (rect, cropRect) => {\n        const x1 = max(rect.x, cropRect.x);\n        const y1 = max(rect.y, cropRect.y);\n        const x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n        const y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n        if (x2 - x1 < 0 || y2 - y1 < 0) {\n          return null;\n        }\n        return create$2(x1, y1, x2 - x1, y2 - y1);\n      };\n      const clamp = (rect, clampRect, fixedSize) => {\n        let x1 = rect.x;\n        let y1 = rect.y;\n        let x2 = rect.x + rect.w;\n        let y2 = rect.y + rect.h;\n        const cx2 = clampRect.x + clampRect.w;\n        const cy2 = clampRect.y + clampRect.h;\n        const underflowX1 = max(0, clampRect.x - x1);\n        const underflowY1 = max(0, clampRect.y - y1);\n        const overflowX2 = max(0, x2 - cx2);\n        const overflowY2 = max(0, y2 - cy2);\n        x1 += underflowX1;\n        y1 += underflowY1;\n        if (fixedSize) {\n          x2 += underflowX1;\n          y2 += underflowY1;\n          x1 -= overflowX2;\n          y1 -= overflowY2;\n        }\n        x2 -= overflowX2;\n        y2 -= overflowY2;\n        return create$2(x1, y1, x2 - x1, y2 - y1);\n      };\n      const create$2 = (x2, y2, w, h2) => {\n        return {\n          x: x2,\n          y: y2,\n          w,\n          h: h2\n        };\n      };\n      const fromClientRect = (clientRect) => {\n        return create$2(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n      };\n      const Rect = {\n        inflate,\n        relativePosition,\n        findBestRelativePosition,\n        intersect,\n        clamp,\n        create: create$2,\n        fromClientRect\n      };\n      const awaiter = (resolveCb, rejectCb, timeout = 1e3) => {\n        let done = false;\n        let timer = null;\n        const complete = (completer) => (...args) => {\n          if (!done) {\n            done = true;\n            if (timer !== null) {\n              clearTimeout(timer);\n              timer = null;\n            }\n            completer.apply(null, args);\n          }\n        };\n        const resolve2 = complete(resolveCb);\n        const reject = complete(rejectCb);\n        const start2 = (...args) => {\n          if (!done && timer === null) {\n            timer = setTimeout(() => reject.apply(null, args), timeout);\n          }\n        };\n        return {\n          start: start2,\n          resolve: resolve2,\n          reject\n        };\n      };\n      const create$1 = () => {\n        const tasks = {};\n        const resultFns = {};\n        const load = (id, url2) => {\n          const loadErrMsg = `Script at URL \"${url2}\" failed to load`;\n          const runErrMsg = `Script at URL \"${url2}\" did not call \\`tinymce.Resource.add('${id}', data)\\` within 1 second`;\n          if (tasks[id] !== void 0) {\n            return tasks[id];\n          } else {\n            const task = new Promise((resolve2, reject) => {\n              const waiter = awaiter(resolve2, reject);\n              resultFns[id] = waiter.resolve;\n              ScriptLoader.ScriptLoader.loadScript(url2).then(() => waiter.start(runErrMsg), () => waiter.reject(loadErrMsg));\n            });\n            tasks[id] = task;\n            return task;\n          }\n        };\n        const add3 = (id, data2) => {\n          if (resultFns[id] !== void 0) {\n            resultFns[id](data2);\n            delete resultFns[id];\n          }\n          tasks[id] = Promise.resolve(data2);\n        };\n        const unload = (id) => {\n          delete tasks[id];\n        };\n        return {\n          load,\n          add: add3,\n          unload\n        };\n      };\n      const Resource = create$1();\n      const create = () => (() => {\n        let data2 = {};\n        let keys3 = [];\n        const storage = {\n          getItem: (key) => {\n            const item = data2[key];\n            return item ? item : null;\n          },\n          setItem: (key, value2) => {\n            keys3.push(key);\n            data2[key] = String(value2);\n          },\n          key: (index2) => {\n            return keys3[index2];\n          },\n          removeItem: (key) => {\n            keys3 = keys3.filter((k3) => k3 === key);\n            delete data2[key];\n          },\n          clear: () => {\n            keys3 = [];\n            data2 = {};\n          },\n          length: 0\n        };\n        Object.defineProperty(storage, \"length\", {\n          get: () => keys3.length,\n          configurable: false,\n          enumerable: false\n        });\n        return storage;\n      })();\n      let localStorage2;\n      try {\n        const test2 = \"__storage_test__\";\n        localStorage2 = window.localStorage;\n        localStorage2.setItem(test2, test2);\n        localStorage2.removeItem(test2);\n      } catch (e2) {\n        localStorage2 = create();\n      }\n      var LocalStorage = localStorage2;\n      const publicApi = {\n        geom: { Rect },\n        util: {\n          Delay,\n          Tools,\n          VK,\n          URI,\n          EventDispatcher,\n          Observable,\n          I18n,\n          LocalStorage,\n          ImageUploader\n        },\n        dom: {\n          EventUtils,\n          TreeWalker: DomTreeWalker,\n          TextSeeker,\n          DOMUtils,\n          ScriptLoader,\n          RangeUtils,\n          Serializer: DomSerializer,\n          StyleSheetLoader,\n          ControlSelection,\n          BookmarkManager,\n          Selection: EditorSelection,\n          Event: EventUtils.Event\n        },\n        html: {\n          Styles,\n          Entities,\n          Node: AstNode,\n          Schema,\n          DomParser,\n          Writer,\n          Serializer: HtmlSerializer\n        },\n        Env,\n        AddOnManager,\n        Annotator,\n        Formatter,\n        UndoManager,\n        EditorCommands,\n        WindowManager,\n        NotificationManager,\n        EditorObservable,\n        Shortcuts,\n        Editor: Editor2,\n        FocusManager,\n        EditorManager,\n        DOM: DOMUtils.DOM,\n        ScriptLoader: ScriptLoader.ScriptLoader,\n        PluginManager,\n        ThemeManager,\n        ModelManager,\n        IconManager,\n        Resource,\n        FakeClipboard,\n        trim: Tools.trim,\n        isArray: Tools.isArray,\n        is: Tools.is,\n        toArray: Tools.toArray,\n        makeMap: Tools.makeMap,\n        each: Tools.each,\n        map: Tools.map,\n        grep: Tools.grep,\n        inArray: Tools.inArray,\n        extend: Tools.extend,\n        walk: Tools.walk,\n        resolve: Tools.resolve,\n        explode: Tools.explode,\n        _addCacheSuffix: Tools._addCacheSuffix\n      };\n      const tinymce2 = Tools.extend(EditorManager, publicApi);\n      const exportToModuleLoaders = (tinymce3) => {\n        {\n          try {\n            module2.exports = tinymce3;\n          } catch (_2) {\n          }\n        }\n      };\n      const exportToWindowGlobal = (tinymce3) => {\n        window.tinymce = tinymce3;\n        window.tinyMCE = tinymce3;\n      };\n      exportToWindowGlobal(tinymce2);\n      exportToModuleLoaders(tinymce2);\n    })();\n  })(tinymce$2);\n  return tinymce$2.exports;\n}\nvar tinymceExports = requireTinymce();\nconst tinymce$1 = /* @__PURE__ */ getDefaultExportFromCjs(tinymceExports);\nvar silver = {};\nvar theme = {};\nvar hasRequiredTheme;\nfunction requireTheme() {\n  if (hasRequiredTheme) return theme;\n  hasRequiredTheme = 1;\n  (function() {\n    const getPrototypeOf = Object.getPrototypeOf;\n    const hasProto = (v2, constructor, predicate) => {\n      var _a3;\n      if (predicate(v2, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a3 = v2.constructor) === null || _a3 === void 0 ? void 0 : _a3.name) === constructor.name;\n      }\n    };\n    const typeOf = (x2) => {\n      const t3 = typeof x2;\n      if (x2 === null) {\n        return \"null\";\n      } else if (t3 === \"object\" && Array.isArray(x2)) {\n        return \"array\";\n      } else if (t3 === \"object\" && hasProto(x2, String, (o2, proto) => proto.isPrototypeOf(o2))) {\n        return \"string\";\n      } else {\n        return t3;\n      }\n    };\n    const isType$1 = (type2) => (value2) => typeOf(value2) === type2;\n    const isSimpleType = (type2) => (value2) => typeof value2 === type2;\n    const eq$1 = (t3) => (a2) => t3 === a2;\n    const is$2 = (value2, constructor) => isObject2(value2) && hasProto(value2, constructor, (o2, proto) => getPrototypeOf(o2) === proto);\n    const isString2 = isType$1(\"string\");\n    const isObject2 = isType$1(\"object\");\n    const isPlainObject2 = (value2) => is$2(value2, Object);\n    const isArray2 = isType$1(\"array\");\n    const isNull = eq$1(null);\n    const isBoolean2 = isSimpleType(\"boolean\");\n    const isUndefined2 = eq$1(void 0);\n    const isNullable = (a2) => a2 === null || a2 === void 0;\n    const isNonNullable = (a2) => !isNullable(a2);\n    const isFunction2 = isSimpleType(\"function\");\n    const isNumber2 = isSimpleType(\"number\");\n    const isArrayOf = (value2, pred) => {\n      if (isArray2(value2)) {\n        for (let i3 = 0, len = value2.length; i3 < len; ++i3) {\n          if (!pred(value2[i3])) {\n            return false;\n          }\n        }\n        return true;\n      }\n      return false;\n    };\n    const noop = () => {\n    };\n    const noarg = (f2) => () => f2();\n    const compose = (fa, fb) => {\n      return (...args) => {\n        return fa(fb.apply(null, args));\n      };\n    };\n    const compose1 = (fbc, fab) => (a2) => fbc(fab(a2));\n    const constant$1 = (value2) => {\n      return () => {\n        return value2;\n      };\n    };\n    const identity2 = (x2) => {\n      return x2;\n    };\n    const tripleEquals = (a2, b3) => {\n      return a2 === b3;\n    };\n    function curry(fn, ...initialArgs) {\n      return (...restArgs) => {\n        const all2 = initialArgs.concat(restArgs);\n        return fn.apply(null, all2);\n      };\n    }\n    const not = (f2) => (t3) => !f2(t3);\n    const die = (msg) => {\n      return () => {\n        throw new Error(msg);\n      };\n    };\n    const apply2 = (f2) => {\n      return f2();\n    };\n    const never = constant$1(false);\n    const always = constant$1(true);\n    var global$a = tinymce.util.Tools.resolve(\"tinymce.ThemeManager\");\n    class Optional {\n      constructor(tag, value2) {\n        this.tag = tag;\n        this.value = value2;\n      }\n      static some(value2) {\n        return new Optional(true, value2);\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(binder2) {\n        if (this.tag) {\n          return binder2(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(thunk2) {\n        return this.tag ? this.value : thunk2();\n      }\n      orThunk(thunk2) {\n        return this.tag ? this : thunk2();\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(value2) {\n        return isNonNullable(value2) ? Optional.some(value2) : 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    const nativeSlice = Array.prototype.slice;\n    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t3) => nativeIndexOf.call(ts, t3);\n    const indexOf = (xs, x2) => {\n      const r4 = rawIndexOf(xs, x2);\n      return r4 === -1 ? Optional.none() : Optional.some(r4);\n    };\n    const contains$2 = (xs, x2) => rawIndexOf(xs, x2) > -1;\n    const exists = (xs, pred) => {\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (pred(x2, i3)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const range$2 = (num, f2) => {\n      const r4 = [];\n      for (let i3 = 0; i3 < num; i3++) {\n        r4.push(f2(i3));\n      }\n      return r4;\n    };\n    const chunk$1 = (array2, size) => {\n      const r4 = [];\n      for (let i3 = 0; i3 < array2.length; i3 += size) {\n        const s2 = nativeSlice.call(array2, i3, i3 + size);\n        r4.push(s2);\n      }\n      return r4;\n    };\n    const map$2 = (xs, f2) => {\n      const len = xs.length;\n      const r4 = new Array(len);\n      for (let i3 = 0; i3 < len; i3++) {\n        const x2 = xs[i3];\n        r4[i3] = f2(x2, i3);\n      }\n      return r4;\n    };\n    const each$1 = (xs, f2) => {\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        f2(x2, i3);\n      }\n    };\n    const eachr = (xs, f2) => {\n      for (let i3 = xs.length - 1; i3 >= 0; i3--) {\n        const x2 = xs[i3];\n        f2(x2, i3);\n      }\n    };\n    const partition$3 = (xs, pred) => {\n      const pass = [];\n      const fail = [];\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        const arr = pred(x2, i3) ? pass : fail;\n        arr.push(x2);\n      }\n      return {\n        pass,\n        fail\n      };\n    };\n    const filter$2 = (xs, pred) => {\n      const r4 = [];\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (pred(x2, i3)) {\n          r4.push(x2);\n        }\n      }\n      return r4;\n    };\n    const foldr = (xs, f2, acc) => {\n      eachr(xs, (x2, i3) => {\n        acc = f2(acc, x2, i3);\n      });\n      return acc;\n    };\n    const foldl = (xs, f2, acc) => {\n      each$1(xs, (x2, i3) => {\n        acc = f2(acc, x2, i3);\n      });\n      return acc;\n    };\n    const findUntil = (xs, pred, until) => {\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (pred(x2, i3)) {\n          return Optional.some(x2);\n        } else if (until(x2, i3)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find$5 = (xs, pred) => {\n      return findUntil(xs, pred, never);\n    };\n    const findIndex$1 = (xs, pred) => {\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (pred(x2, i3)) {\n          return Optional.some(i3);\n        }\n      }\n      return Optional.none();\n    };\n    const flatten = (xs) => {\n      const r4 = [];\n      for (let i3 = 0, len = xs.length; i3 < len; ++i3) {\n        if (!isArray2(xs[i3])) {\n          throw new Error(\"Arr.flatten item \" + i3 + \" was not an array, input: \" + xs);\n        }\n        nativePush.apply(r4, xs[i3]);\n      }\n      return r4;\n    };\n    const bind$3 = (xs, f2) => flatten(map$2(xs, f2));\n    const forall = (xs, pred) => {\n      for (let i3 = 0, len = xs.length; i3 < len; ++i3) {\n        const x2 = xs[i3];\n        if (pred(x2, i3) !== true) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const reverse = (xs) => {\n      const r4 = nativeSlice.call(xs, 0);\n      r4.reverse();\n      return r4;\n    };\n    const difference = (a1, a2) => filter$2(a1, (x2) => !contains$2(a2, x2));\n    const mapToObject = (xs, f2) => {\n      const r4 = {};\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        r4[String(x2)] = f2(x2, i3);\n      }\n      return r4;\n    };\n    const pure$2 = (x2) => [x2];\n    const sort = (xs, comparator) => {\n      const copy = nativeSlice.call(xs, 0);\n      copy.sort(comparator);\n      return copy;\n    };\n    const get$h = (xs, i3) => i3 >= 0 && i3 < xs.length ? Optional.some(xs[i3]) : Optional.none();\n    const head = (xs) => get$h(xs, 0);\n    const last$1 = (xs) => get$h(xs, xs.length - 1);\n    const from = isFunction2(Array.from) ? Array.from : (x2) => nativeSlice.call(x2);\n    const findMap = (arr, f2) => {\n      for (let i3 = 0; i3 < arr.length; i3++) {\n        const r4 = f2(arr[i3], i3);\n        if (r4.isSome()) {\n          return r4;\n        }\n      }\n      return Optional.none();\n    };\n    const keys2 = Object.keys;\n    const hasOwnProperty2 = Object.hasOwnProperty;\n    const each = (obj, f2) => {\n      const props = keys2(obj);\n      for (let k3 = 0, len = props.length; k3 < len; k3++) {\n        const i3 = props[k3];\n        const x2 = obj[i3];\n        f2(x2, i3);\n      }\n    };\n    const map$1 = (obj, f2) => {\n      return tupleMap(obj, (x2, i3) => ({\n        k: i3,\n        v: f2(x2, i3)\n      }));\n    };\n    const tupleMap = (obj, f2) => {\n      const r4 = {};\n      each(obj, (x2, i3) => {\n        const tuple = f2(x2, i3);\n        r4[tuple.k] = tuple.v;\n      });\n      return r4;\n    };\n    const objAcc = (r4) => (x2, i3) => {\n      r4[i3] = x2;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      const r4 = {};\n      each(obj, (x2, i3) => {\n        (pred(x2, i3) ? onTrue : onFalse)(x2, i3);\n      });\n      return r4;\n    };\n    const bifilter = (obj, pred) => {\n      const t3 = {};\n      const f2 = {};\n      internalFilter(obj, pred, objAcc(t3), objAcc(f2));\n      return {\n        t: t3,\n        f: f2\n      };\n    };\n    const filter$1 = (obj, pred) => {\n      const t3 = {};\n      internalFilter(obj, pred, objAcc(t3), noop);\n      return t3;\n    };\n    const mapToArray2 = (obj, f2) => {\n      const r4 = [];\n      each(obj, (value2, name2) => {\n        r4.push(f2(value2, name2));\n      });\n      return r4;\n    };\n    const find$4 = (obj, pred) => {\n      const props = keys2(obj);\n      for (let k3 = 0, len = props.length; k3 < len; k3++) {\n        const i3 = props[k3];\n        const x2 = obj[i3];\n        if (pred(x2, i3, obj)) {\n          return Optional.some(x2);\n        }\n      }\n      return Optional.none();\n    };\n    const values = (obj) => {\n      return mapToArray2(obj, identity2);\n    };\n    const get$g = (obj, key) => {\n      return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n    };\n    const has$2 = (obj, key) => hasOwnProperty2.call(obj, key);\n    const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== void 0 && obj[key] !== null;\n    const is$1 = (lhs, rhs, comparator = tripleEquals) => lhs.exists((left2) => comparator(left2, rhs));\n    const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n    const cat = (arr) => {\n      const r4 = [];\n      const push = (x2) => {\n        r4.push(x2);\n      };\n      for (let i3 = 0; i3 < arr.length; i3++) {\n        arr[i3].each(push);\n      }\n      return r4;\n    };\n    const sequence = (arr) => {\n      const r4 = [];\n      for (let i3 = 0; i3 < arr.length; i3++) {\n        const x2 = arr[i3];\n        if (x2.isSome()) {\n          r4.push(x2.getOrDie());\n        } else {\n          return Optional.none();\n        }\n      }\n      return Optional.some(r4);\n    };\n    const lift2 = (oa, ob, f2) => oa.isSome() && ob.isSome() ? Optional.some(f2(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n    const lift3 = (oa, ob, oc, f2) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f2(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n    const mapFrom = (a2, f2) => a2 !== void 0 && a2 !== null ? Optional.some(f2(a2)) : Optional.none();\n    const someIf = (b3, a2) => b3 ? Optional.some(a2) : Optional.none();\n    const addToEnd = (str, suffix2) => {\n      return str + suffix2;\n    };\n    const removeFromStart = (str, numChars) => {\n      return str.substring(numChars);\n    };\n    const checkRange = (str, substr, start) => substr === \"\" || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n    const removeLeading = (str, prefix2) => {\n      return startsWith(str, prefix2) ? removeFromStart(str, prefix2.length) : str;\n    };\n    const ensureTrailing = (str, suffix2) => {\n      return endsWith(str, suffix2) ? str : addToEnd(str, suffix2);\n    };\n    const contains$1 = (str, substr) => {\n      return str.indexOf(substr) !== -1;\n    };\n    const startsWith = (str, prefix2) => {\n      return checkRange(str, prefix2, 0);\n    };\n    const endsWith = (str, suffix2) => {\n      return checkRange(str, suffix2, str.length - suffix2.length);\n    };\n    const blank = (r4) => (s2) => s2.replace(r4, \"\");\n    const trim$1 = blank(/^\\s+|\\s+$/g);\n    const isNotEmpty = (s2) => s2.length > 0;\n    const isEmpty2 = (s2) => !isNotEmpty(s2);\n    const isSupported$1 = (dom3) => dom3.style !== void 0 && isFunction2(dom3.style.getPropertyValue);\n    const fromHtml$2 = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement(\"div\");\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = \"HTML does not have a single root node\";\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    const fromText = (text3, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text3);\n      return fromDom(node);\n    };\n    const fromDom = (node) => {\n      if (node === null || node === void 0) {\n        throw new Error(\"Node cannot be null or undefined\");\n      }\n      return { dom: node };\n    };\n    const fromPoint = (docElm, x2, y2) => Optional.from(docElm.dom.elementFromPoint(x2, y2)).map(fromDom);\n    const SugarElement = {\n      fromHtml: fromHtml$2,\n      fromTag,\n      fromText,\n      fromDom,\n      fromPoint\n    };\n    typeof window !== \"undefined\" ? window : Function(\"return this;\")();\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n    const name$3 = (element2) => {\n      const r4 = element2.dom.nodeName;\n      return r4.toLowerCase();\n    };\n    const type$1 = (element2) => element2.dom.nodeType;\n    const isType = (t3) => (element2) => type$1(element2) === t3;\n    const isElement$1 = isType(ELEMENT);\n    const isText = isType(TEXT);\n    const isDocument = isType(DOCUMENT);\n    const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n    const isTag = (tag) => (e2) => isElement$1(e2) && name$3(e2) === tag;\n    const is = (element2, selector) => {\n      const dom3 = element2.dom;\n      if (dom3.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom3;\n        if (elem.matches !== void 0) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== void 0) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== void 0) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== void 0) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error(\"Browser lacks native selectors\");\n        }\n      }\n    };\n    const bypassSelector = (dom3) => dom3.nodeType !== ELEMENT && dom3.nodeType !== DOCUMENT && dom3.nodeType !== DOCUMENT_FRAGMENT || dom3.childElementCount === 0;\n    const all$3 = (selector, scope) => {\n      const base3 = scope === void 0 ? document : scope.dom;\n      return bypassSelector(base3) ? [] : map$2(base3.querySelectorAll(selector), SugarElement.fromDom);\n    };\n    const one = (selector, scope) => {\n      const base3 = scope === void 0 ? document : scope.dom;\n      return bypassSelector(base3) ? Optional.none() : Optional.from(base3.querySelector(selector)).map(SugarElement.fromDom);\n    };\n    const eq2 = (e1, e2) => e1.dom === e2.dom;\n    const contains2 = (e1, e2) => {\n      const d1 = e1.dom;\n      const d2 = e2.dom;\n      return d1 === d2 ? false : d1.contains(d2);\n    };\n    const owner$4 = (element2) => SugarElement.fromDom(element2.dom.ownerDocument);\n    const documentOrOwner = (dos) => isDocument(dos) ? dos : owner$4(dos);\n    const documentElement = (element2) => SugarElement.fromDom(documentOrOwner(element2).dom.documentElement);\n    const defaultView = (element2) => SugarElement.fromDom(documentOrOwner(element2).dom.defaultView);\n    const parent = (element2) => Optional.from(element2.dom.parentNode).map(SugarElement.fromDom);\n    const parentElement = (element2) => Optional.from(element2.dom.parentElement).map(SugarElement.fromDom);\n    const offsetParent = (element2) => Optional.from(element2.dom.offsetParent).map(SugarElement.fromDom);\n    const nextSibling = (element2) => Optional.from(element2.dom.nextSibling).map(SugarElement.fromDom);\n    const children = (element2) => map$2(element2.dom.childNodes, SugarElement.fromDom);\n    const child$2 = (element2, index2) => {\n      const cs = element2.dom.childNodes;\n      return Optional.from(cs[index2]).map(SugarElement.fromDom);\n    };\n    const firstChild = (element2) => child$2(element2, 0);\n    const spot = (element2, offset2) => ({\n      element: element2,\n      offset: offset2\n    });\n    const leaf = (element2, offset2) => {\n      const cs = children(element2);\n      return cs.length > 0 && offset2 < cs.length ? spot(cs[offset2], 0) : spot(element2, offset2);\n    };\n    const isShadowRoot = (dos) => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n    const supported = isFunction2(Element.prototype.attachShadow) && isFunction2(Node.prototype.getRootNode);\n    const isSupported = constant$1(supported);\n    const getRootNode = supported ? (e2) => SugarElement.fromDom(e2.dom.getRootNode()) : documentOrOwner;\n    const getContentContainer = (dos) => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n    const isInShadowRoot = (e2) => getShadowRoot(e2).isSome();\n    const getShadowRoot = (e2) => {\n      const r4 = getRootNode(e2);\n      return isShadowRoot(r4) ? Optional.some(r4) : Optional.none();\n    };\n    const getShadowHost = (e2) => SugarElement.fromDom(e2.dom.host);\n    const getOriginalEventTarget = (event) => {\n      if (isSupported() && isNonNullable(event.target)) {\n        const el = SugarElement.fromDom(event.target);\n        if (isElement$1(el) && isOpenShadowHost(el)) {\n          if (event.composed && event.composedPath) {\n            const composedPath = event.composedPath();\n            if (composedPath) {\n              return head(composedPath);\n            }\n          }\n        }\n      }\n      return Optional.from(event.target);\n    };\n    const isOpenShadowHost = (element2) => isNonNullable(element2.dom.shadowRoot);\n    const inBody = (element2) => {\n      const dom3 = isText(element2) ? element2.dom.parentNode : element2.dom;\n      if (dom3 === void 0 || dom3 === null || dom3.ownerDocument === null) {\n        return false;\n      }\n      const doc = dom3.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom3)).fold(() => doc.body.contains(dom3), compose1(inBody, getShadowHost));\n    };\n    const body = () => getBody(SugarElement.fromDom(document));\n    const getBody = (doc) => {\n      const b3 = doc.dom.body;\n      if (b3 === null || b3 === void 0) {\n        throw new Error(\"Body is not available yet\");\n      }\n      return SugarElement.fromDom(b3);\n    };\n    const rawSet = (dom3, key, value2) => {\n      if (isString2(value2) || isBoolean2(value2) || isNumber2(value2)) {\n        dom3.setAttribute(key, value2 + \"\");\n      } else {\n        console.error(\"Invalid call to Attribute.set. Key \", key, \":: Value \", value2, \":: Element \", dom3);\n        throw new Error(\"Attribute value was not simple\");\n      }\n    };\n    const set$9 = (element2, key, value2) => {\n      rawSet(element2.dom, key, value2);\n    };\n    const setAll$1 = (element2, attrs) => {\n      const dom3 = element2.dom;\n      each(attrs, (v2, k3) => {\n        rawSet(dom3, k3, v2);\n      });\n    };\n    const get$f = (element2, key) => {\n      const v2 = element2.dom.getAttribute(key);\n      return v2 === null ? void 0 : v2;\n    };\n    const getOpt = (element2, key) => Optional.from(get$f(element2, key));\n    const has$1 = (element2, key) => {\n      const dom3 = element2.dom;\n      return dom3 && dom3.hasAttribute ? dom3.hasAttribute(key) : false;\n    };\n    const remove$7 = (element2, key) => {\n      element2.dom.removeAttribute(key);\n    };\n    const clone$1 = (element2) => foldl(element2.dom.attributes, (acc, attr) => {\n      acc[attr.name] = attr.value;\n      return acc;\n    }, {});\n    const internalSet = (dom3, property, value2) => {\n      if (!isString2(value2)) {\n        console.error(\"Invalid call to CSS.set. Property \", property, \":: Value \", value2, \":: Element \", dom3);\n        throw new Error(\"CSS value must be a string: \" + value2);\n      }\n      if (isSupported$1(dom3)) {\n        dom3.style.setProperty(property, value2);\n      }\n    };\n    const internalRemove = (dom3, property) => {\n      if (isSupported$1(dom3)) {\n        dom3.style.removeProperty(property);\n      }\n    };\n    const set$8 = (element2, property, value2) => {\n      const dom3 = element2.dom;\n      internalSet(dom3, property, value2);\n    };\n    const setAll = (element2, css) => {\n      const dom3 = element2.dom;\n      each(css, (v2, k3) => {\n        internalSet(dom3, k3, v2);\n      });\n    };\n    const setOptions = (element2, css) => {\n      const dom3 = element2.dom;\n      each(css, (v2, k3) => {\n        v2.fold(() => {\n          internalRemove(dom3, k3);\n        }, (value2) => {\n          internalSet(dom3, k3, value2);\n        });\n      });\n    };\n    const get$e = (element2, property) => {\n      const dom3 = element2.dom;\n      const styles = window.getComputedStyle(dom3);\n      const r4 = styles.getPropertyValue(property);\n      return r4 === \"\" && !inBody(element2) ? getUnsafeProperty(dom3, property) : r4;\n    };\n    const getUnsafeProperty = (dom3, property) => isSupported$1(dom3) ? dom3.style.getPropertyValue(property) : \"\";\n    const getRaw = (element2, property) => {\n      const dom3 = element2.dom;\n      const raw = getUnsafeProperty(dom3, property);\n      return Optional.from(raw).filter((r4) => r4.length > 0);\n    };\n    const getAllRaw = (element2) => {\n      const css = {};\n      const dom3 = element2.dom;\n      if (isSupported$1(dom3)) {\n        for (let i3 = 0; i3 < dom3.style.length; i3++) {\n          const ruleName = dom3.style.item(i3);\n          css[ruleName] = dom3.style[ruleName];\n        }\n      }\n      return css;\n    };\n    const isValidValue = (tag, property, value2) => {\n      const element2 = SugarElement.fromTag(tag);\n      set$8(element2, property, value2);\n      const style = getRaw(element2, property);\n      return style.isSome();\n    };\n    const remove$6 = (element2, property) => {\n      const dom3 = element2.dom;\n      internalRemove(dom3, property);\n      if (is$1(getOpt(element2, \"style\").map(trim$1), \"\")) {\n        remove$7(element2, \"style\");\n      }\n    };\n    const reflow = (e2) => e2.dom.offsetWidth;\n    const Dimension = (name2, getOffset2) => {\n      const set3 = (element2, h2) => {\n        if (!isNumber2(h2) && !h2.match(/^[0-9]+$/)) {\n          throw new Error(name2 + \".set accepts only positive integer values. Value was \" + h2);\n        }\n        const dom3 = element2.dom;\n        if (isSupported$1(dom3)) {\n          dom3.style[name2] = h2 + \"px\";\n        }\n      };\n      const get2 = (element2) => {\n        const r4 = getOffset2(element2);\n        if (r4 <= 0 || r4 === null) {\n          const css = get$e(element2, name2);\n          return parseFloat(css) || 0;\n        }\n        return r4;\n      };\n      const getOuter2 = get2;\n      const aggregate = (element2, properties2) => foldl(properties2, (acc, property) => {\n        const val = get$e(element2, property);\n        const value2 = val === void 0 ? 0 : parseInt(val, 10);\n        return isNaN(value2) ? acc : acc + value2;\n      }, 0);\n      const max2 = (element2, value2, properties2) => {\n        const cumulativeInclusions = aggregate(element2, properties2);\n        const absoluteMax = value2 > cumulativeInclusions ? value2 - cumulativeInclusions : 0;\n        return absoluteMax;\n      };\n      return {\n        set: set3,\n        get: get2,\n        getOuter: getOuter2,\n        aggregate,\n        max: max2\n      };\n    };\n    const api$2 = Dimension(\"height\", (element2) => {\n      const dom3 = element2.dom;\n      return inBody(element2) ? dom3.getBoundingClientRect().height : dom3.offsetHeight;\n    });\n    const get$d = (element2) => api$2.get(element2);\n    const getOuter$2 = (element2) => api$2.getOuter(element2);\n    const setMax$1 = (element2, value2) => {\n      const inclusions = [\n        \"margin-top\",\n        \"border-top-width\",\n        \"padding-top\",\n        \"padding-bottom\",\n        \"border-bottom-width\",\n        \"margin-bottom\"\n      ];\n      const absMax = api$2.max(element2, value2, inclusions);\n      set$8(element2, \"max-height\", absMax + \"px\");\n    };\n    const r$12 = (left2, top2) => {\n      const translate2 = (x2, y2) => r$12(left2 + x2, top2 + y2);\n      return {\n        left: left2,\n        top: top2,\n        translate: translate2\n      };\n    };\n    const SugarPosition = r$12;\n    const boxPosition = (dom3) => {\n      const box2 = dom3.getBoundingClientRect();\n      return SugarPosition(box2.left, box2.top);\n    };\n    const firstDefinedOrZero = (a2, b3) => {\n      if (a2 !== void 0) {\n        return a2;\n      } else {\n        return b3 !== void 0 ? b3 : 0;\n      }\n    };\n    const absolute$3 = (element2) => {\n      const doc = element2.dom.ownerDocument;\n      const body2 = doc.body;\n      const win2 = doc.defaultView;\n      const html = doc.documentElement;\n      if (body2 === element2.dom) {\n        return SugarPosition(body2.offsetLeft, body2.offsetTop);\n      }\n      const scrollTop = firstDefinedOrZero(win2 === null || win2 === void 0 ? void 0 : win2.pageYOffset, html.scrollTop);\n      const scrollLeft = firstDefinedOrZero(win2 === null || win2 === void 0 ? void 0 : win2.pageXOffset, html.scrollLeft);\n      const clientTop = firstDefinedOrZero(html.clientTop, body2.clientTop);\n      const clientLeft = firstDefinedOrZero(html.clientLeft, body2.clientLeft);\n      return viewport$1(element2).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n    };\n    const viewport$1 = (element2) => {\n      const dom3 = element2.dom;\n      const doc = dom3.ownerDocument;\n      const body2 = doc.body;\n      if (body2 === dom3) {\n        return SugarPosition(body2.offsetLeft, body2.offsetTop);\n      }\n      if (!inBody(element2)) {\n        return SugarPosition(0, 0);\n      }\n      return boxPosition(dom3);\n    };\n    const api$1 = Dimension(\"width\", (element2) => element2.dom.offsetWidth);\n    const set$7 = (element2, h2) => api$1.set(element2, h2);\n    const get$c = (element2) => api$1.get(element2);\n    const getOuter$1 = (element2) => api$1.getOuter(element2);\n    const setMax = (element2, value2) => {\n      const inclusions = [\n        \"margin-left\",\n        \"border-left-width\",\n        \"padding-left\",\n        \"padding-right\",\n        \"border-right-width\",\n        \"margin-right\"\n      ];\n      const absMax = api$1.max(element2, value2, inclusions);\n      set$8(element2, \"max-width\", absMax + \"px\");\n    };\n    const cached = (f2) => {\n      let called = false;\n      let r4;\n      return (...args) => {\n        if (!called) {\n          called = true;\n          r4 = f2.apply(null, args);\n        }\n        return r4;\n      };\n    };\n    const DeviceType = (os, browser, userAgent, mediaMatch2) => {\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 isTouch2 = isMobile || mediaMatch2(\"(pointer:coarse)\");\n      const isTablet = isiPad || !isiPhone && isMobile && mediaMatch2(\"(min-device-width:768px)\");\n      const isPhone = isiPhone || isMobile && !isTablet;\n      const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n      const isDesktop = !isPhone && !isTablet && !iOSwebview;\n      return {\n        isiPad: constant$1(isiPad),\n        isiPhone: constant$1(isiPhone),\n        isTablet: constant$1(isTablet),\n        isPhone: constant$1(isPhone),\n        isTouch: constant$1(isTouch2),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant$1(iOSwebview),\n        isDesktop: constant$1(isDesktop)\n      };\n    };\n    const firstMatch = (regexes, s2) => {\n      for (let i3 = 0; i3 < regexes.length; i3++) {\n        const x2 = regexes[i3];\n        if (x2.test(s2)) {\n          return x2;\n        }\n      }\n      return void 0;\n    };\n    const find$3 = (regexes, agent) => {\n      const r4 = firstMatch(regexes, agent);\n      if (!r4) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      const group2 = (i3) => {\n        return Number(agent.replace(r4, \"$\" + i3));\n      };\n      return nu$d(group2(1), group2(2));\n    };\n    const detect$4 = (versionRegexes, agent) => {\n      const cleanedAgent = String(agent).toLowerCase();\n      if (versionRegexes.length === 0) {\n        return unknown$3();\n      }\n      return find$3(versionRegexes, cleanedAgent);\n    };\n    const unknown$3 = () => {\n      return nu$d(0, 0);\n    };\n    const nu$d = (major, minor) => {\n      return {\n        major,\n        minor\n      };\n    };\n    const Version = {\n      nu: nu$d,\n      detect: detect$4,\n      unknown: unknown$3\n    };\n    const detectBrowser$1 = (browsers2, userAgentData) => {\n      return findMap(userAgentData.brands, (uaBrand) => {\n        const lcBrand = uaBrand.brand.toLowerCase();\n        return find$5(browsers2, (browser) => {\n          var _a3;\n          return lcBrand === ((_a3 = browser.brand) === null || _a3 === void 0 ? void 0 : _a3.toLowerCase());\n        }).map((info) => ({\n          current: info.name,\n          version: Version.nu(parseInt(uaBrand.version, 10), 0)\n        }));\n      });\n    };\n    const detect$3 = (candidates, userAgent) => {\n      const agent = String(userAgent).toLowerCase();\n      return find$5(candidates, (candidate) => {\n        return candidate.search(agent);\n      });\n    };\n    const detectBrowser = (browsers2, userAgent) => {\n      return detect$3(browsers2, userAgent).map((browser) => {\n        const version2 = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version: version2\n        };\n      });\n    };\n    const detectOs = (oses2, userAgent) => {\n      return detect$3(oses2, userAgent).map((os) => {\n        const version2 = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version: version2\n        };\n      });\n    };\n    const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    const checkContains = (target) => {\n      return (uastring) => {\n        return contains$1(uastring, target);\n      };\n    };\n    const browsers = [\n      {\n        name: \"Edge\",\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: (uastring) => {\n          return contains$1(uastring, \"edge/\") && contains$1(uastring, \"chrome\") && contains$1(uastring, \"safari\") && contains$1(uastring, \"applewebkit\");\n        }\n      },\n      {\n        name: \"Chromium\",\n        brand: \"Chromium\",\n        versionRegexes: [\n          /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n          normalVersionRegex\n        ],\n        search: (uastring) => {\n          return contains$1(uastring, \"chrome\") && !contains$1(uastring, \"chromeframe\");\n        }\n      },\n      {\n        name: \"IE\",\n        versionRegexes: [\n          /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*?rv:([0-9]+)\\.([0-9]+).*/\n        ],\n        search: (uastring) => {\n          return contains$1(uastring, \"msie\") || contains$1(uastring, \"trident\");\n        }\n      },\n      {\n        name: \"Opera\",\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n        ],\n        search: checkContains(\"opera\")\n      },\n      {\n        name: \"Firefox\",\n        versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n        search: checkContains(\"firefox\")\n      },\n      {\n        name: \"Safari\",\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\n        ],\n        search: (uastring) => {\n          return (contains$1(uastring, \"safari\") || contains$1(uastring, \"mobile/\")) && contains$1(uastring, \"applewebkit\");\n        }\n      }\n    ];\n    const oses = [\n      {\n        name: \"Windows\",\n        search: checkContains(\"win\"),\n        versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: \"iOS\",\n        search: (uastring) => {\n          return contains$1(uastring, \"iphone\") || contains$1(uastring, \"ipad\");\n        },\n        versionRegexes: [\n          /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n        ]\n      },\n      {\n        name: \"Android\",\n        search: checkContains(\"android\"),\n        versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: \"macOS\",\n        search: checkContains(\"mac os x\"),\n        versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n      },\n      {\n        name: \"Linux\",\n        search: checkContains(\"linux\"),\n        versionRegexes: []\n      },\n      {\n        name: \"Solaris\",\n        search: checkContains(\"sunos\"),\n        versionRegexes: []\n      },\n      {\n        name: \"FreeBSD\",\n        search: checkContains(\"freebsd\"),\n        versionRegexes: []\n      },\n      {\n        name: \"ChromeOS\",\n        search: checkContains(\"cros\"),\n        versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n      }\n    ];\n    const PlatformInfo = {\n      browsers: constant$1(browsers),\n      oses: constant$1(oses)\n    };\n    const edge = \"Edge\";\n    const chromium = \"Chromium\";\n    const ie = \"IE\";\n    const opera = \"Opera\";\n    const firefox = \"Firefox\";\n    const safari = \"Safari\";\n    const unknown$2 = () => {\n      return nu$c({\n        current: void 0,\n        version: Version.unknown()\n      });\n    };\n    const nu$c = (info) => {\n      const current = info.current;\n      const version2 = info.version;\n      const isBrowser = (name2) => () => current === name2;\n      return {\n        current,\n        version: version2,\n        isEdge: isBrowser(edge),\n        isChromium: isBrowser(chromium),\n        isIE: isBrowser(ie),\n        isOpera: isBrowser(opera),\n        isFirefox: isBrowser(firefox),\n        isSafari: isBrowser(safari)\n      };\n    };\n    const Browser = {\n      unknown: unknown$2,\n      nu: nu$c\n    };\n    const windows = \"Windows\";\n    const ios = \"iOS\";\n    const android = \"Android\";\n    const linux = \"Linux\";\n    const macos = \"macOS\";\n    const solaris = \"Solaris\";\n    const freebsd = \"FreeBSD\";\n    const chromeos = \"ChromeOS\";\n    const unknown$1 = () => {\n      return nu$b({\n        current: void 0,\n        version: Version.unknown()\n      });\n    };\n    const nu$b = (info) => {\n      const current = info.current;\n      const version2 = info.version;\n      const isOS = (name2) => () => current === name2;\n      return {\n        current,\n        version: version2,\n        isWindows: isOS(windows),\n        isiOS: isOS(ios),\n        isAndroid: isOS(android),\n        isMacOS: isOS(macos),\n        isLinux: isOS(linux),\n        isSolaris: isOS(solaris),\n        isFreeBSD: isOS(freebsd),\n        isChromeOS: isOS(chromeos)\n      };\n    };\n    const OperatingSystem = {\n      unknown: unknown$1,\n      nu: nu$b\n    };\n    const detect$2 = (userAgent, userAgentDataOpt, mediaMatch2) => {\n      const browsers2 = PlatformInfo.browsers();\n      const oses2 = PlatformInfo.oses();\n      const browser = userAgentDataOpt.bind((userAgentData) => detectBrowser$1(browsers2, userAgentData)).orThunk(() => detectBrowser(browsers2, userAgent)).fold(Browser.unknown, Browser.nu);\n      const os = detectOs(oses2, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      const deviceType = DeviceType(os, browser, userAgent, mediaMatch2);\n      return {\n        browser,\n        os,\n        deviceType\n      };\n    };\n    const PlatformDetection = { detect: detect$2 };\n    const mediaMatch = (query2) => window.matchMedia(query2).matches;\n    let platform = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n    const detect$1 = () => platform();\n    const mkEvent = (target, x2, y2, stop2, prevent, kill, raw) => ({\n      target,\n      x: x2,\n      y: y2,\n      stop: stop2,\n      prevent,\n      kill,\n      raw\n    });\n    const fromRawEvent$1 = (rawEvent) => {\n      const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n      const stop2 = () => rawEvent.stopPropagation();\n      const prevent = () => rawEvent.preventDefault();\n      const kill = compose(prevent, stop2);\n      return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop2, prevent, kill, rawEvent);\n    };\n    const handle = (filter2, handler) => (rawEvent) => {\n      if (filter2(rawEvent)) {\n        handler(fromRawEvent$1(rawEvent));\n      }\n    };\n    const binder = (element2, event, filter2, handler, useCapture) => {\n      const wrapped = handle(filter2, handler);\n      element2.dom.addEventListener(event, wrapped, useCapture);\n      return { unbind: curry(unbind, element2, event, wrapped, useCapture) };\n    };\n    const bind$2 = (element2, event, filter2, handler) => binder(element2, event, filter2, handler, false);\n    const capture$1 = (element2, event, filter2, handler) => binder(element2, event, filter2, handler, true);\n    const unbind = (element2, event, handler, useCapture) => {\n      element2.dom.removeEventListener(event, handler, useCapture);\n    };\n    const before$1 = (marker, element2) => {\n      const parent$1 = parent(marker);\n      parent$1.each((v2) => {\n        v2.dom.insertBefore(element2.dom, marker.dom);\n      });\n    };\n    const after$2 = (marker, element2) => {\n      const sibling = nextSibling(marker);\n      sibling.fold(() => {\n        const parent$1 = parent(marker);\n        parent$1.each((v2) => {\n          append$2(v2, element2);\n        });\n      }, (v2) => {\n        before$1(v2, element2);\n      });\n    };\n    const prepend$1 = (parent2, element2) => {\n      const firstChild$1 = firstChild(parent2);\n      firstChild$1.fold(() => {\n        append$2(parent2, element2);\n      }, (v2) => {\n        parent2.dom.insertBefore(element2.dom, v2.dom);\n      });\n    };\n    const append$2 = (parent2, element2) => {\n      parent2.dom.appendChild(element2.dom);\n    };\n    const appendAt = (parent2, element2, index2) => {\n      child$2(parent2, index2).fold(() => {\n        append$2(parent2, element2);\n      }, (v2) => {\n        before$1(v2, element2);\n      });\n    };\n    const append$1 = (parent2, elements) => {\n      each$1(elements, (x2) => {\n        append$2(parent2, x2);\n      });\n    };\n    const empty = (element2) => {\n      element2.dom.textContent = \"\";\n      each$1(children(element2), (rogue) => {\n        remove$5(rogue);\n      });\n    };\n    const remove$5 = (element2) => {\n      const dom3 = element2.dom;\n      if (dom3.parentNode !== null) {\n        dom3.parentNode.removeChild(dom3);\n      }\n    };\n    const get$b = (_DOC) => {\n      const doc = _DOC !== void 0 ? _DOC.dom : document;\n      const x2 = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n      const y2 = doc.body.scrollTop || doc.documentElement.scrollTop;\n      return SugarPosition(x2, y2);\n    };\n    const to = (x2, y2, _DOC) => {\n      const doc = _DOC !== void 0 ? _DOC.dom : document;\n      const win2 = doc.defaultView;\n      if (win2) {\n        win2.scrollTo(x2, y2);\n      }\n    };\n    const get$a = (_win) => {\n      const win2 = _win === void 0 ? window : _win;\n      if (detect$1().browser.isFirefox()) {\n        return Optional.none();\n      } else {\n        return Optional.from(win2.visualViewport);\n      }\n    };\n    const bounds$1 = (x2, y2, width2, height2) => ({\n      x: x2,\n      y: y2,\n      width: width2,\n      height: height2,\n      right: x2 + width2,\n      bottom: y2 + height2\n    });\n    const getBounds$3 = (_win) => {\n      const win2 = _win === void 0 ? window : _win;\n      const doc = win2.document;\n      const scroll = get$b(SugarElement.fromDom(doc));\n      return get$a(win2).fold(() => {\n        const html = win2.document.documentElement;\n        const width2 = html.clientWidth;\n        const height2 = html.clientHeight;\n        return bounds$1(scroll.left, scroll.top, width2, height2);\n      }, (visualViewport) => bounds$1(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n    };\n    const getDocument = () => SugarElement.fromDom(document);\n    const walkUp = (navigation, doc) => {\n      const frame = navigation.view(doc);\n      return frame.fold(constant$1([]), (f2) => {\n        const parent2 = navigation.owner(f2);\n        const rest = walkUp(navigation, parent2);\n        return [f2].concat(rest);\n      });\n    };\n    const pathTo = (element2, navigation) => {\n      const d2 = navigation.owner(element2);\n      const paths = walkUp(navigation, d2);\n      return Optional.some(paths);\n    };\n    const view = (doc) => {\n      var _a3;\n      const element2 = doc.dom === document ? Optional.none() : Optional.from((_a3 = doc.dom.defaultView) === null || _a3 === void 0 ? void 0 : _a3.frameElement);\n      return element2.map(SugarElement.fromDom);\n    };\n    const owner$3 = (element2) => owner$4(element2);\n    var Navigation = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      view,\n      owner: owner$3\n    });\n    const find$2 = (element2) => {\n      const doc = getDocument();\n      const scroll = get$b(doc);\n      const path2 = pathTo(element2, Navigation);\n      return path2.fold(curry(absolute$3, element2), (frames) => {\n        const offset2 = viewport$1(element2);\n        const r4 = foldr(frames, (b3, a2) => {\n          const loc = viewport$1(a2);\n          return {\n            left: b3.left + loc.left,\n            top: b3.top + loc.top\n          };\n        }, {\n          left: 0,\n          top: 0\n        });\n        return SugarPosition(r4.left + offset2.left + scroll.left, r4.top + offset2.top + scroll.top);\n      });\n    };\n    const pointed = (point2, width2, height2) => ({\n      point: point2,\n      width: width2,\n      height: height2\n    });\n    const rect = (x2, y2, width2, height2) => ({\n      x: x2,\n      y: y2,\n      width: width2,\n      height: height2\n    });\n    const bounds = (x2, y2, width2, height2) => ({\n      x: x2,\n      y: y2,\n      width: width2,\n      height: height2,\n      right: x2 + width2,\n      bottom: y2 + height2\n    });\n    const box$1 = (element2) => {\n      const xy = absolute$3(element2);\n      const w = getOuter$1(element2);\n      const h2 = getOuter$2(element2);\n      return bounds(xy.left, xy.top, w, h2);\n    };\n    const absolute$2 = (element2) => {\n      const position2 = find$2(element2);\n      const width2 = getOuter$1(element2);\n      const height2 = getOuter$2(element2);\n      return bounds(position2.left, position2.top, width2, height2);\n    };\n    const win = () => getBounds$3(window);\n    const value$4 = (value2) => {\n      const applyHelper = (fn) => fn(value2);\n      const constHelper = constant$1(value2);\n      const outputHelper = () => output2;\n      const output2 = {\n        tag: true,\n        inner: value2,\n        fold: (_onError, onValue) => onValue(value2),\n        isValue: always,\n        isError: never,\n        map: (mapper) => Result.value(mapper(value2)),\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(value2);\n        },\n        toOptional: () => Optional.some(value2)\n      };\n      return output2;\n    };\n    const error$1 = (error3) => {\n      const outputHelper = () => output2;\n      const output2 = {\n        tag: false,\n        inner: error3,\n        fold: (onError, _onValue) => onError(error3),\n        isValue: never,\n        isError: always,\n        map: outputHelper,\n        mapError: (mapper) => Result.error(mapper(error3)),\n        bind: outputHelper,\n        exists: never,\n        forall: always,\n        getOr: identity2,\n        or: identity2,\n        getOrThunk: apply2,\n        orThunk: apply2,\n        getOrDie: die(String(error3)),\n        each: noop,\n        toOptional: Optional.none\n      };\n      return output2;\n    };\n    const fromOption = (optional2, err) => optional2.fold(() => error$1(err), value$4);\n    const Result = {\n      value: value$4,\n      error: error$1,\n      fromOption\n    };\n    var SimpleResultType;\n    (function(SimpleResultType2) {\n      SimpleResultType2[SimpleResultType2[\"Error\"] = 0] = \"Error\";\n      SimpleResultType2[SimpleResultType2[\"Value\"] = 1] = \"Value\";\n    })(SimpleResultType || (SimpleResultType = {}));\n    const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n    const partition$2 = (results) => {\n      const values2 = [];\n      const errors2 = [];\n      each$1(results, (obj) => {\n        fold$1(obj, (err) => errors2.push(err), (val) => values2.push(val));\n      });\n      return {\n        values: values2,\n        errors: errors2\n      };\n    };\n    const mapError = (res, f2) => {\n      if (res.stype === SimpleResultType.Error) {\n        return {\n          stype: SimpleResultType.Error,\n          serror: f2(res.serror)\n        };\n      } else {\n        return res;\n      }\n    };\n    const map2 = (res, f2) => {\n      if (res.stype === SimpleResultType.Value) {\n        return {\n          stype: SimpleResultType.Value,\n          svalue: f2(res.svalue)\n        };\n      } else {\n        return res;\n      }\n    };\n    const bind$1 = (res, f2) => {\n      if (res.stype === SimpleResultType.Value) {\n        return f2(res.svalue);\n      } else {\n        return res;\n      }\n    };\n    const bindError = (res, f2) => {\n      if (res.stype === SimpleResultType.Error) {\n        return f2(res.serror);\n      } else {\n        return res;\n      }\n    };\n    const svalue = (v2) => ({\n      stype: SimpleResultType.Value,\n      svalue: v2\n    });\n    const serror = (e2) => ({\n      stype: SimpleResultType.Error,\n      serror: e2\n    });\n    const toResult$1 = (res) => fold$1(res, Result.error, Result.value);\n    const fromResult$1 = (res) => res.fold(serror, svalue);\n    const SimpleResult = {\n      fromResult: fromResult$1,\n      toResult: toResult$1,\n      svalue,\n      partition: partition$2,\n      serror,\n      bind: bind$1,\n      bindError,\n      map: map2,\n      mapError,\n      fold: fold$1\n    };\n    const field$2 = (key, newKey, presence, prop) => ({\n      tag: \"field\",\n      key,\n      newKey,\n      presence,\n      prop\n    });\n    const customField$1 = (newKey, instantiator) => ({\n      tag: \"custom\",\n      newKey,\n      instantiator\n    });\n    const fold = (value2, ifField, ifCustom) => {\n      switch (value2.tag) {\n        case \"field\":\n          return ifField(value2.key, value2.newKey, value2.presence, value2.prop);\n        case \"custom\":\n          return ifCustom(value2.newKey, value2.instantiator);\n      }\n    };\n    const shallow$1 = (old, nu2) => {\n      return nu2;\n    };\n    const deep = (old, nu2) => {\n      const bothObjects = isPlainObject2(old) && isPlainObject2(nu2);\n      return bothObjects ? deepMerge(old, nu2) : nu2;\n    };\n    const baseMerge2 = (merger) => {\n      return (...objects) => {\n        if (objects.length === 0) {\n          throw new Error(`Can't merge zero objects`);\n        }\n        const ret = {};\n        for (let j2 = 0; j2 < objects.length; j2++) {\n          const curObject = objects[j2];\n          for (const key in curObject) {\n            if (has$2(curObject, key)) {\n              ret[key] = merger(ret[key], curObject[key]);\n            }\n          }\n        }\n        return ret;\n      };\n    };\n    const deepMerge = baseMerge2(deep);\n    const merge$1 = baseMerge2(shallow$1);\n    const required$2 = () => ({\n      tag: \"required\",\n      process: {}\n    });\n    const defaultedThunk = (fallbackThunk) => ({\n      tag: \"defaultedThunk\",\n      process: fallbackThunk\n    });\n    const defaulted$1 = (fallback2) => defaultedThunk(constant$1(fallback2));\n    const asOption = () => ({\n      tag: \"option\",\n      process: {}\n    });\n    const mergeWithThunk = (baseThunk) => ({\n      tag: \"mergeWithThunk\",\n      process: baseThunk\n    });\n    const mergeWith = (base3) => mergeWithThunk(constant$1(base3));\n    const mergeValues$1 = (values2, base3) => values2.length > 0 ? SimpleResult.svalue(deepMerge(base3, merge$1.apply(void 0, values2))) : SimpleResult.svalue(base3);\n    const mergeErrors$1 = (errors2) => compose(SimpleResult.serror, flatten)(errors2);\n    const consolidateObj = (objects, base3) => {\n      const partition2 = SimpleResult.partition(objects);\n      return partition2.errors.length > 0 ? mergeErrors$1(partition2.errors) : mergeValues$1(partition2.values, base3);\n    };\n    const consolidateArr = (objects) => {\n      const partitions = SimpleResult.partition(objects);\n      return partitions.errors.length > 0 ? mergeErrors$1(partitions.errors) : SimpleResult.svalue(partitions.values);\n    };\n    const ResultCombine = {\n      consolidateObj,\n      consolidateArr\n    };\n    const formatObj = (input2) => {\n      return isObject2(input2) && keys2(input2).length > 100 ? \" removed due to size\" : JSON.stringify(input2, null, 2);\n    };\n    const formatErrors = (errors2) => {\n      const es = errors2.length > 10 ? errors2.slice(0, 10).concat([{\n        path: [],\n        getErrorInfo: constant$1(\"... (only showing first ten failures)\")\n      }]) : errors2;\n      return map$2(es, (e2) => {\n        return \"Failed path: (\" + e2.path.join(\" > \") + \")\\n\" + e2.getErrorInfo();\n      });\n    };\n    const nu$a = (path2, getErrorInfo) => {\n      return SimpleResult.serror([{\n        path: path2,\n        getErrorInfo\n      }]);\n    };\n    const missingRequired = (path2, key, obj) => nu$a(path2, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n    const missingKey = (path2, key) => nu$a(path2, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n    const missingBranch = (path2, branches, branch) => nu$a(path2, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n    const unsupportedFields = (path2, unsupported) => nu$a(path2, () => \"There are unsupported fields: [\" + unsupported.join(\", \") + \"] specified\");\n    const custom = (path2, err) => nu$a(path2, constant$1(err));\n    const value$3 = (validator) => {\n      const extract2 = (path2, val) => {\n        return SimpleResult.bindError(validator(val), (err) => custom(path2, err));\n      };\n      const toString2 = constant$1(\"val\");\n      return {\n        extract: extract2,\n        toString: toString2\n      };\n    };\n    const anyValue$1 = value$3(SimpleResult.svalue);\n    const requiredAccess = (path2, obj, key, bundle) => get$g(obj, key).fold(() => missingRequired(path2, key, obj), bundle);\n    const fallbackAccess = (obj, key, fallback2, bundle) => {\n      const v2 = get$g(obj, key).getOrThunk(() => fallback2(obj));\n      return bundle(v2);\n    };\n    const optionAccess = (obj, key, bundle) => bundle(get$g(obj, key));\n    const optionDefaultedAccess = (obj, key, fallback2, bundle) => {\n      const opt = get$g(obj, key).map((val) => val === true ? fallback2(obj) : val);\n      return bundle(opt);\n    };\n    const extractField = (field2, path2, obj, key, prop) => {\n      const bundle = (av) => prop.extract(path2.concat([key]), av);\n      const bundleAsOption = (optValue) => optValue.fold(() => SimpleResult.svalue(Optional.none()), (ov) => {\n        const result = prop.extract(path2.concat([key]), ov);\n        return SimpleResult.map(result, Optional.some);\n      });\n      switch (field2.tag) {\n        case \"required\":\n          return requiredAccess(path2, obj, key, bundle);\n        case \"defaultedThunk\":\n          return fallbackAccess(obj, key, field2.process, bundle);\n        case \"option\":\n          return optionAccess(obj, key, bundleAsOption);\n        case \"defaultedOptionThunk\":\n          return optionDefaultedAccess(obj, key, field2.process, bundleAsOption);\n        case \"mergeWithThunk\": {\n          return fallbackAccess(obj, key, constant$1({}), (v2) => {\n            const result = deepMerge(field2.process(obj), v2);\n            return bundle(result);\n          });\n        }\n      }\n    };\n    const extractFields = (path2, obj, fields) => {\n      const success = {};\n      const errors2 = [];\n      for (const field2 of fields) {\n        fold(field2, (key, newKey, presence, prop) => {\n          const result = extractField(presence, path2, obj, key, prop);\n          SimpleResult.fold(result, (err) => {\n            errors2.push(...err);\n          }, (res) => {\n            success[newKey] = res;\n          });\n        }, (newKey, instantiator) => {\n          success[newKey] = instantiator(obj);\n        });\n      }\n      return errors2.length > 0 ? SimpleResult.serror(errors2) : SimpleResult.svalue(success);\n    };\n    const valueThunk = (getDelegate) => {\n      const extract2 = (path2, val) => getDelegate().extract(path2, val);\n      const toString2 = () => getDelegate().toString();\n      return {\n        extract: extract2,\n        toString: toString2\n      };\n    };\n    const getSetKeys = (obj) => keys2(filter$1(obj, isNonNullable));\n    const objOfOnly = (fields) => {\n      const delegate = objOf(fields);\n      const fieldNames = foldr(fields, (acc, value2) => {\n        return fold(value2, (key) => deepMerge(acc, { [key]: true }), constant$1(acc));\n      }, {});\n      const extract2 = (path2, o2) => {\n        const keys3 = isBoolean2(o2) ? [] : getSetKeys(o2);\n        const extra = filter$2(keys3, (k3) => !hasNonNullableKey(fieldNames, k3));\n        return extra.length === 0 ? delegate.extract(path2, o2) : unsupportedFields(path2, extra);\n      };\n      return {\n        extract: extract2,\n        toString: delegate.toString\n      };\n    };\n    const objOf = (values2) => {\n      const extract2 = (path2, o2) => extractFields(path2, o2, values2);\n      const toString2 = () => {\n        const fieldStrings = map$2(values2, (value2) => fold(value2, (key, _okey, _presence, prop) => key + \" -> \" + prop.toString(), (newKey, _instantiator) => \"state(\" + newKey + \")\"));\n        return \"obj{\\n\" + fieldStrings.join(\"\\n\") + \"}\";\n      };\n      return {\n        extract: extract2,\n        toString: toString2\n      };\n    };\n    const arrOf = (prop) => {\n      const extract2 = (path2, array2) => {\n        const results = map$2(array2, (a2, i3) => prop.extract(path2.concat([\"[\" + i3 + \"]\"]), a2));\n        return ResultCombine.consolidateArr(results);\n      };\n      const toString2 = () => \"array(\" + prop.toString() + \")\";\n      return {\n        extract: extract2,\n        toString: toString2\n      };\n    };\n    const oneOf = (props) => {\n      const extract2 = (path2, val) => {\n        const errors2 = [];\n        for (const prop of props) {\n          const res = prop.extract(path2, val);\n          if (res.stype === SimpleResultType.Value) {\n            return res;\n          }\n          errors2.push(res);\n        }\n        return ResultCombine.consolidateArr(errors2);\n      };\n      const toString2 = () => \"oneOf(\" + map$2(props, (prop) => prop.toString()).join(\", \") + \")\";\n      return {\n        extract: extract2,\n        toString: toString2\n      };\n    };\n    const setOf$1 = (validator, prop) => {\n      const validateKeys = (path2, keys3) => arrOf(value$3(validator)).extract(path2, keys3);\n      const extract2 = (path2, o2) => {\n        const keys$1 = keys2(o2);\n        const validatedKeys = validateKeys(path2, keys$1);\n        return SimpleResult.bind(validatedKeys, (validKeys) => {\n          const schema2 = map$2(validKeys, (vk) => {\n            return field$2(vk, vk, required$2(), prop);\n          });\n          return objOf(schema2).extract(path2, o2);\n        });\n      };\n      const toString2 = () => \"setOf(\" + prop.toString() + \")\";\n      return {\n        extract: extract2,\n        toString: toString2\n      };\n    };\n    const thunk = (_desc, processor) => {\n      const getP = cached(processor);\n      const extract2 = (path2, val) => getP().extract(path2, val);\n      const toString2 = () => getP().toString();\n      return {\n        extract: extract2,\n        toString: toString2\n      };\n    };\n    const arrOfObj = compose(arrOf, objOf);\n    const anyValue = constant$1(anyValue$1);\n    const typedValue = (validator, expectedType) => value$3((a2) => {\n      const actualType = typeof a2;\n      return validator(a2) ? SimpleResult.svalue(a2) : SimpleResult.serror(`Expected type: ${expectedType} but got: ${actualType}`);\n    });\n    const number = typedValue(isNumber2, \"number\");\n    const string2 = typedValue(isString2, \"string\");\n    const boolean = typedValue(isBoolean2, \"boolean\");\n    const functionProcessor = typedValue(isFunction2, \"function\");\n    const isPostMessageable = (val) => {\n      if (Object(val) !== val) {\n        return true;\n      }\n      switch ({}.toString.call(val).slice(8, -1)) {\n        case \"Boolean\":\n        case \"Number\":\n        case \"String\":\n        case \"Date\":\n        case \"RegExp\":\n        case \"Blob\":\n        case \"FileList\":\n        case \"ImageData\":\n        case \"ImageBitmap\":\n        case \"ArrayBuffer\":\n          return true;\n        case \"Array\":\n        case \"Object\":\n          return Object.keys(val).every((prop) => isPostMessageable(val[prop]));\n        default:\n          return false;\n      }\n    };\n    const postMessageable = value$3((a2) => {\n      if (isPostMessageable(a2)) {\n        return SimpleResult.svalue(a2);\n      } else {\n        return SimpleResult.serror(\"Expected value to be acceptable for sending via postMessage\");\n      }\n    });\n    const chooseFrom = (path2, input2, branches, ch) => {\n      const fields = get$g(branches, ch);\n      return fields.fold(() => missingBranch(path2, branches, ch), (vp) => vp.extract(path2.concat([\"branch: \" + ch]), input2));\n    };\n    const choose$2 = (key, branches) => {\n      const extract2 = (path2, input2) => {\n        const choice = get$g(input2, key);\n        return choice.fold(() => missingKey(path2, key), (chosen) => chooseFrom(path2, input2, branches, chosen));\n      };\n      const toString2 = () => \"chooseOn(\" + key + \"). Possible values: \" + keys2(branches);\n      return {\n        extract: extract2,\n        toString: toString2\n      };\n    };\n    const arrOfVal = () => arrOf(anyValue$1);\n    const valueOf = (validator) => value$3((v2) => validator(v2).fold(SimpleResult.serror, SimpleResult.svalue));\n    const setOf = (validator, prop) => setOf$1((v2) => SimpleResult.fromResult(validator(v2)), prop);\n    const extractValue = (label2, prop, obj) => {\n      const res = prop.extract([label2], obj);\n      return SimpleResult.mapError(res, (errs) => ({\n        input: obj,\n        errors: errs\n      }));\n    };\n    const asRaw = (label2, prop, obj) => SimpleResult.toResult(extractValue(label2, prop, obj));\n    const getOrDie = (extraction) => {\n      return extraction.fold((errInfo) => {\n        throw new Error(formatError(errInfo));\n      }, identity2);\n    };\n    const asRawOrDie$1 = (label2, prop, obj) => getOrDie(asRaw(label2, prop, obj));\n    const formatError = (errInfo) => {\n      return \"Errors: \\n\" + formatErrors(errInfo.errors).join(\"\\n\") + \"\\n\\nInput object: \" + formatObj(errInfo.input);\n    };\n    const choose$1 = (key, branches) => choose$2(key, map$1(branches, objOf));\n    const thunkOf = (desc, schema2) => thunk(desc, schema2);\n    const field$1 = field$2;\n    const customField = customField$1;\n    const validateEnum = (values2) => valueOf((value2) => contains$2(values2, value2) ? Result.value(value2) : Result.error(`Unsupported value: \"${value2}\", choose one of \"${values2.join(\", \")}\".`));\n    const required$1 = (key) => field$1(key, key, required$2(), anyValue());\n    const requiredOf = (key, schema2) => field$1(key, key, required$2(), schema2);\n    const requiredNumber = (key) => requiredOf(key, number);\n    const requiredString = (key) => requiredOf(key, string2);\n    const requiredStringEnum = (key, values2) => field$1(key, key, required$2(), validateEnum(values2));\n    const requiredBoolean = (key) => requiredOf(key, boolean);\n    const requiredFunction = (key) => requiredOf(key, functionProcessor);\n    const forbid = (key, message) => field$1(key, key, asOption(), value$3((_v) => SimpleResult.serror(\"The field: \" + key + \" is forbidden. \" + message)));\n    const requiredObjOf = (key, objSchema) => field$1(key, key, required$2(), objOf(objSchema));\n    const requiredArrayOfObj = (key, objFields) => field$1(key, key, required$2(), arrOfObj(objFields));\n    const requiredArrayOf = (key, schema2) => field$1(key, key, required$2(), arrOf(schema2));\n    const option$3 = (key) => field$1(key, key, asOption(), anyValue());\n    const optionOf = (key, schema2) => field$1(key, key, asOption(), schema2);\n    const optionNumber = (key) => optionOf(key, number);\n    const optionString = (key) => optionOf(key, string2);\n    const optionStringEnum = (key, values2) => optionOf(key, validateEnum(values2));\n    const optionFunction = (key) => optionOf(key, functionProcessor);\n    const optionArrayOf = (key, schema2) => optionOf(key, arrOf(schema2));\n    const optionObjOf = (key, objSchema) => optionOf(key, objOf(objSchema));\n    const optionObjOfOnly = (key, objSchema) => optionOf(key, objOfOnly(objSchema));\n    const defaulted = (key, fallback2) => field$1(key, key, defaulted$1(fallback2), anyValue());\n    const defaultedOf = (key, fallback2, schema2) => field$1(key, key, defaulted$1(fallback2), schema2);\n    const defaultedNumber = (key, fallback2) => defaultedOf(key, fallback2, number);\n    const defaultedString = (key, fallback2) => defaultedOf(key, fallback2, string2);\n    const defaultedStringEnum = (key, fallback2, values2) => defaultedOf(key, fallback2, validateEnum(values2));\n    const defaultedBoolean = (key, fallback2) => defaultedOf(key, fallback2, boolean);\n    const defaultedFunction = (key, fallback2) => defaultedOf(key, fallback2, functionProcessor);\n    const defaultedPostMsg = (key, fallback2) => defaultedOf(key, fallback2, postMessageable);\n    const defaultedArrayOf = (key, fallback2, schema2) => defaultedOf(key, fallback2, arrOf(schema2));\n    const defaultedObjOf = (key, fallback2, objSchema) => defaultedOf(key, fallback2, objOf(objSchema));\n    const Cell = (initial) => {\n      let value2 = initial;\n      const get2 = () => {\n        return value2;\n      };\n      const set3 = (v2) => {\n        value2 = v2;\n      };\n      return {\n        get: get2,\n        set: set3\n      };\n    };\n    const generate$7 = (cases) => {\n      if (!isArray2(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 adt2 = {};\n      each$1(cases, (acase, count) => {\n        const keys$1 = keys2(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 value2 = acase[key];\n        if (adt2[key] !== void 0) {\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 (!isArray2(value2)) {\n          throw new Error(\"case arguments must be an array\");\n        }\n        constructors.push(key);\n        adt2[key] = (...args) => {\n          const argLength = args.length;\n          if (argLength !== value2.length) {\n            throw new Error(\"Wrong number of arguments to case \" + key + \". Expected \" + value2.length + \" (\" + value2 + \"), got \" + argLength);\n          }\n          const match3 = (branches) => {\n            const branchKeys = keys2(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: match3,\n            log: (label2) => {\n              console.log(label2, {\n                constructors,\n                constructor: key,\n                params: args\n              });\n            }\n          };\n        };\n      });\n      return adt2;\n    };\n    const Adt = { generate: generate$7 };\n    Adt.generate([\n      {\n        bothErrors: [\n          \"error1\",\n          \"error2\"\n        ]\n      },\n      {\n        firstError: [\n          \"error1\",\n          \"value2\"\n        ]\n      },\n      {\n        secondError: [\n          \"value1\",\n          \"error2\"\n        ]\n      },\n      {\n        bothValues: [\n          \"value1\",\n          \"value2\"\n        ]\n      }\n    ]);\n    const partition$1 = (results) => {\n      const errors2 = [];\n      const values2 = [];\n      each$1(results, (result) => {\n        result.fold((err) => {\n          errors2.push(err);\n        }, (value2) => {\n          values2.push(value2);\n        });\n      });\n      return {\n        errors: errors2,\n        values: values2\n      };\n    };\n    const exclude$1 = (obj, fields) => {\n      const r4 = {};\n      each(obj, (v2, k3) => {\n        if (!contains$2(fields, k3)) {\n          r4[k3] = v2;\n        }\n      });\n      return r4;\n    };\n    const wrap$2 = (key, value2) => ({ [key]: value2 });\n    const wrapAll$1 = (keyvalues) => {\n      const r4 = {};\n      each$1(keyvalues, (kv) => {\n        r4[kv.key] = kv.value;\n      });\n      return r4;\n    };\n    const exclude = (obj, fields) => exclude$1(obj, fields);\n    const wrap$1 = (key, value2) => wrap$2(key, value2);\n    const wrapAll = (keyvalues) => wrapAll$1(keyvalues);\n    const mergeValues = (values2, base3) => {\n      return values2.length === 0 ? Result.value(base3) : Result.value(deepMerge(base3, merge$1.apply(void 0, values2)));\n    };\n    const mergeErrors = (errors2) => Result.error(flatten(errors2));\n    const consolidate = (objs, base3) => {\n      const partitions = partition$1(objs);\n      return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base3);\n    };\n    const ensureIsRoot = (isRoot) => isFunction2(isRoot) ? isRoot : never;\n    const ancestor$2 = (scope, transform2, isRoot) => {\n      let element2 = scope.dom;\n      const stop2 = ensureIsRoot(isRoot);\n      while (element2.parentNode) {\n        element2 = element2.parentNode;\n        const el = SugarElement.fromDom(element2);\n        const transformed = transform2(el);\n        if (transformed.isSome()) {\n          return transformed;\n        } else if (stop2(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$4 = (scope, transform2, isRoot) => {\n      const current = transform2(scope);\n      const stop2 = ensureIsRoot(isRoot);\n      return current.orThunk(() => stop2(scope) ? Optional.none() : ancestor$2(scope, transform2, stop2));\n    };\n    const isSource = (component, simulatedEvent) => eq2(component.element, simulatedEvent.event.target);\n    const defaultEventHandler = {\n      can: always,\n      abort: never,\n      run: noop\n    };\n    const nu$9 = (parts2) => {\n      if (!hasNonNullableKey(parts2, \"can\") && !hasNonNullableKey(parts2, \"abort\") && !hasNonNullableKey(parts2, \"run\")) {\n        throw new Error(\"EventHandler defined by: \" + JSON.stringify(parts2, null, 2) + \" does not have can, abort, or run!\");\n      }\n      return {\n        ...defaultEventHandler,\n        ...parts2\n      };\n    };\n    const all$2 = (handlers2, f2) => (...args) => foldl(handlers2, (acc, handler) => acc && f2(handler).apply(void 0, args), true);\n    const any = (handlers2, f2) => (...args) => foldl(handlers2, (acc, handler) => acc || f2(handler).apply(void 0, args), false);\n    const read$2 = (handler) => isFunction2(handler) ? {\n      can: always,\n      abort: never,\n      run: handler\n    } : handler;\n    const fuse$1 = (handlers2) => {\n      const can2 = all$2(handlers2, (handler) => handler.can);\n      const abort2 = any(handlers2, (handler) => handler.abort);\n      const run2 = (...args) => {\n        each$1(handlers2, (handler) => {\n          handler.run.apply(void 0, args);\n        });\n      };\n      return {\n        can: can2,\n        abort: abort2,\n        run: run2\n      };\n    };\n    const constant2 = constant$1;\n    const touchstart = constant2(\"touchstart\");\n    const touchmove = constant2(\"touchmove\");\n    const touchend = constant2(\"touchend\");\n    const touchcancel = constant2(\"touchcancel\");\n    const mousedown = constant2(\"mousedown\");\n    const mousemove = constant2(\"mousemove\");\n    const mouseout = constant2(\"mouseout\");\n    const mouseup = constant2(\"mouseup\");\n    const mouseover = constant2(\"mouseover\");\n    const focusin = constant2(\"focusin\");\n    const focusout = constant2(\"focusout\");\n    const keydown = constant2(\"keydown\");\n    const keyup = constant2(\"keyup\");\n    const input = constant2(\"input\");\n    const change = constant2(\"change\");\n    const click = constant2(\"click\");\n    const transitioncancel = constant2(\"transitioncancel\");\n    const transitionend = constant2(\"transitionend\");\n    const transitionstart = constant2(\"transitionstart\");\n    const selectstart = constant2(\"selectstart\");\n    const prefixName = (name2) => constant$1(\"alloy.\" + name2);\n    const alloy = { tap: prefixName(\"tap\") };\n    const focus$4 = prefixName(\"focus\");\n    const postBlur = prefixName(\"blur.post\");\n    const postPaste = prefixName(\"paste.post\");\n    const receive = prefixName(\"receive\");\n    const execute$5 = prefixName(\"execute\");\n    const focusItem = prefixName(\"focus.item\");\n    const tap = alloy.tap;\n    const longpress = prefixName(\"longpress\");\n    const sandboxClose = prefixName(\"sandbox.close\");\n    const typeaheadCancel = prefixName(\"typeahead.cancel\");\n    const systemInit = prefixName(\"system.init\");\n    const documentTouchmove = prefixName(\"system.touchmove\");\n    const documentTouchend = prefixName(\"system.touchend\");\n    const windowScroll = prefixName(\"system.scroll\");\n    const windowResize = prefixName(\"system.resize\");\n    const attachedToDom = prefixName(\"system.attached\");\n    const detachedFromDom = prefixName(\"system.detached\");\n    const dismissRequested = prefixName(\"system.dismissRequested\");\n    const repositionRequested = prefixName(\"system.repositionRequested\");\n    const focusShifted = prefixName(\"focusmanager.shifted\");\n    const slotVisibility = prefixName(\"slotcontainer.visibility\");\n    const changeTab = prefixName(\"change.tab\");\n    const dismissTab = prefixName(\"dismiss.tab\");\n    const highlight$1 = prefixName(\"highlight\");\n    const dehighlight$1 = prefixName(\"dehighlight\");\n    const emit = (component, event) => {\n      dispatchWith(component, component.element, event, {});\n    };\n    const emitWith = (component, event, properties2) => {\n      dispatchWith(component, component.element, event, properties2);\n    };\n    const emitExecute = (component) => {\n      emit(component, execute$5());\n    };\n    const dispatch = (component, target, event) => {\n      dispatchWith(component, target, event, {});\n    };\n    const dispatchWith = (component, target, event, properties2) => {\n      const data = {\n        target,\n        ...properties2\n      };\n      component.getSystem().triggerEvent(event, target, data);\n    };\n    const dispatchEvent = (component, target, event, simulatedEvent) => {\n      component.getSystem().triggerEvent(event, target, simulatedEvent.event);\n    };\n    const derive$2 = (configs) => wrapAll(configs);\n    const abort = (name2, predicate) => {\n      return {\n        key: name2,\n        value: nu$9({ abort: predicate })\n      };\n    };\n    const can = (name2, predicate) => {\n      return {\n        key: name2,\n        value: nu$9({ can: predicate })\n      };\n    };\n    const preventDefault = (name2) => {\n      return {\n        key: name2,\n        value: nu$9({\n          run: (component, simulatedEvent) => {\n            simulatedEvent.event.prevent();\n          }\n        })\n      };\n    };\n    const run$1 = (name2, handler) => {\n      return {\n        key: name2,\n        value: nu$9({ run: handler })\n      };\n    };\n    const runActionExtra = (name2, action, extra) => {\n      return {\n        key: name2,\n        value: nu$9({\n          run: (component, simulatedEvent) => {\n            action.apply(void 0, [\n              component,\n              simulatedEvent\n            ].concat(extra));\n          }\n        })\n      };\n    };\n    const runOnName = (name2) => {\n      return (handler) => run$1(name2, handler);\n    };\n    const runOnSourceName = (name2) => {\n      return (handler) => ({\n        key: name2,\n        value: nu$9({\n          run: (component, simulatedEvent) => {\n            if (isSource(component, simulatedEvent)) {\n              handler(component, simulatedEvent);\n            }\n          }\n        })\n      });\n    };\n    const redirectToUid = (name2, uid) => {\n      return run$1(name2, (component, simulatedEvent) => {\n        component.getSystem().getByUid(uid).each((redirectee) => {\n          dispatchEvent(redirectee, redirectee.element, name2, simulatedEvent);\n        });\n      });\n    };\n    const redirectToPart = (name2, detail, partName) => {\n      const uid = detail.partUids[partName];\n      return redirectToUid(name2, uid);\n    };\n    const runWithTarget = (name2, f2) => {\n      return run$1(name2, (component, simulatedEvent) => {\n        const ev = simulatedEvent.event;\n        const target = component.getSystem().getByDom(ev.target).getOrThunk(() => {\n          const closest2 = closest$4(ev.target, (el) => component.getSystem().getByDom(el).toOptional(), never);\n          return closest2.getOr(component);\n        });\n        f2(component, target, simulatedEvent);\n      });\n    };\n    const cutter = (name2) => {\n      return run$1(name2, (component, simulatedEvent) => {\n        simulatedEvent.cut();\n      });\n    };\n    const stopper = (name2) => {\n      return run$1(name2, (component, simulatedEvent) => {\n        simulatedEvent.stop();\n      });\n    };\n    const runOnSource = (name2, f2) => {\n      return runOnSourceName(name2)(f2);\n    };\n    const runOnAttached = runOnSourceName(attachedToDom());\n    const runOnDetached = runOnSourceName(detachedFromDom());\n    const runOnInit = runOnSourceName(systemInit());\n    const runOnExecute$1 = runOnName(execute$5());\n    const fromHtml$1 = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement(\"div\");\n      div.innerHTML = html;\n      return children(SugarElement.fromDom(div));\n    };\n    const get$9 = (element2) => element2.dom.innerHTML;\n    const set$6 = (element2, content) => {\n      const owner2 = owner$4(element2);\n      const docDom = owner2.dom;\n      const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n      const contentElements = fromHtml$1(content, docDom);\n      append$1(fragment, contentElements);\n      empty(element2);\n      append$2(element2, fragment);\n    };\n    const getOuter = (element2) => {\n      const container = SugarElement.fromTag(\"div\");\n      const clone2 = SugarElement.fromDom(element2.dom.cloneNode(true));\n      append$2(container, clone2);\n      return get$9(container);\n    };\n    const clone = (original2, isDeep) => SugarElement.fromDom(original2.dom.cloneNode(isDeep));\n    const shallow = (original2) => clone(original2, false);\n    const getHtml = (element2) => {\n      if (isShadowRoot(element2)) {\n        return \"#shadow-root\";\n      } else {\n        const clone2 = shallow(element2);\n        return getOuter(clone2);\n      }\n    };\n    const element = (elem) => getHtml(elem);\n    const isRecursive = (component, originator, target) => eq2(originator, component.element) && !eq2(originator, target);\n    const events$i = derive$2([can(focus$4(), (component, simulatedEvent) => {\n      const event = simulatedEvent.event;\n      const originator = event.originator;\n      const target = event.target;\n      if (isRecursive(component, originator, target)) {\n        console.warn(focus$4() + \" did not get interpreted by the desired target. \\nOriginator: \" + element(originator) + \"\\nTarget: \" + element(target) + \"\\nCheck the \" + focus$4() + \" event handlers\");\n        return false;\n      } else {\n        return true;\n      }\n    })]);\n    var DefaultEvents = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      events: events$i\n    });\n    let unique = 0;\n    const generate$6 = (prefix2) => {\n      const date = /* @__PURE__ */ new Date();\n      const time = date.getTime();\n      const random = Math.floor(Math.random() * 1e9);\n      unique++;\n      return prefix2 + \"_\" + random + unique + String(time);\n    };\n    const prefix$1 = constant$1(\"alloy-id-\");\n    const idAttr$1 = constant$1(\"data-alloy-id\");\n    const prefix = prefix$1();\n    const idAttr = idAttr$1();\n    const write = (label2, elem) => {\n      const id = generate$6(prefix + label2);\n      writeOnly(elem, id);\n      return id;\n    };\n    const writeOnly = (elem, uid) => {\n      Object.defineProperty(elem.dom, idAttr, {\n        value: uid,\n        writable: true\n      });\n    };\n    const read$1 = (elem) => {\n      const id = isElement$1(elem) ? elem.dom[idAttr] : null;\n      return Optional.from(id);\n    };\n    const generate$5 = (prefix2) => generate$6(prefix2);\n    const make$8 = identity2;\n    const NoContextApi = (getComp) => {\n      const getMessage = (event) => `The component must be in a context to execute: ${event}` + (getComp ? \"\\n\" + element(getComp().element) + \" is not in context.\" : \"\");\n      const fail = (event) => () => {\n        throw new Error(getMessage(event));\n      };\n      const warn = (event) => () => {\n        console.warn(getMessage(event));\n      };\n      return {\n        debugInfo: constant$1(\"fake\"),\n        triggerEvent: warn(\"triggerEvent\"),\n        triggerFocus: warn(\"triggerFocus\"),\n        triggerEscape: warn(\"triggerEscape\"),\n        broadcast: warn(\"broadcast\"),\n        broadcastOn: warn(\"broadcastOn\"),\n        broadcastEvent: warn(\"broadcastEvent\"),\n        build: fail(\"build\"),\n        buildOrPatch: fail(\"buildOrPatch\"),\n        addToWorld: fail(\"addToWorld\"),\n        removeFromWorld: fail(\"removeFromWorld\"),\n        addToGui: fail(\"addToGui\"),\n        removeFromGui: fail(\"removeFromGui\"),\n        getByUid: fail(\"getByUid\"),\n        getByDom: fail(\"getByDom\"),\n        isConnected: never\n      };\n    };\n    const singleton$1 = NoContextApi();\n    const markAsBehaviourApi = (f2, apiName, apiFunction) => {\n      const delegate = apiFunction.toString();\n      const endIndex = delegate.indexOf(\")\") + 1;\n      const openBracketIndex = delegate.indexOf(\"(\");\n      const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n      f2.toFunctionAnnotation = () => ({\n        name: apiName,\n        parameters: cleanParameters(parameters.slice(0, 1).concat(parameters.slice(3)))\n      });\n      return f2;\n    };\n    const cleanParameters = (parameters) => map$2(parameters, (p2) => endsWith(p2, \"/*\") ? p2.substring(0, p2.length - \"/*\".length) : p2);\n    const markAsExtraApi = (f2, extraName) => {\n      const delegate = f2.toString();\n      const endIndex = delegate.indexOf(\")\") + 1;\n      const openBracketIndex = delegate.indexOf(\"(\");\n      const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n      f2.toFunctionAnnotation = () => ({\n        name: extraName,\n        parameters: cleanParameters(parameters)\n      });\n      return f2;\n    };\n    const markAsSketchApi = (f2, apiFunction) => {\n      const delegate = apiFunction.toString();\n      const endIndex = delegate.indexOf(\")\") + 1;\n      const openBracketIndex = delegate.indexOf(\"(\");\n      const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n      f2.toFunctionAnnotation = () => ({\n        name: \"OVERRIDE\",\n        parameters: cleanParameters(parameters.slice(1))\n      });\n      return f2;\n    };\n    const premadeTag = generate$6(\"alloy-premade\");\n    const premade$1 = (comp) => {\n      Object.defineProperty(comp.element.dom, premadeTag, {\n        value: comp.uid,\n        writable: true\n      });\n      return wrap$1(premadeTag, comp);\n    };\n    const isPremade = (element2) => has$2(element2.dom, premadeTag);\n    const getPremade = (spec) => get$g(spec, premadeTag);\n    const makeApi = (f2) => markAsSketchApi((component, ...rest) => f2(component.getApis(), component, ...rest), f2);\n    const NoState = { init: () => nu$8({ readState: constant$1(\"No State required\") }) };\n    const nu$8 = (spec) => spec;\n    const generateFrom$1 = (spec, all2) => {\n      const schema2 = map$2(all2, (a2) => optionObjOf(a2.name(), [\n        required$1(\"config\"),\n        defaulted(\"state\", NoState)\n      ]));\n      const validated = asRaw(\"component.behaviours\", objOf(schema2), spec.behaviours).fold((errInfo) => {\n        throw new Error(formatError(errInfo) + \"\\nComplete spec:\\n\" + JSON.stringify(spec, null, 2));\n      }, identity2);\n      return {\n        list: all2,\n        data: map$1(validated, (optBlobThunk) => {\n          const output2 = optBlobThunk.map((blob) => ({\n            config: blob.config,\n            state: blob.state.init(blob.config)\n          }));\n          return constant$1(output2);\n        })\n      };\n    };\n    const getBehaviours$3 = (bData) => bData.list;\n    const getData$2 = (bData) => bData.data;\n    const byInnerKey = (data, tuple) => {\n      const r4 = {};\n      each(data, (detail, key) => {\n        each(detail, (value2, indexKey) => {\n          const chain = get$g(r4, indexKey).getOr([]);\n          r4[indexKey] = chain.concat([tuple(key, value2)]);\n        });\n      });\n      return r4;\n    };\n    const nu$7 = (s2) => ({\n      classes: isUndefined2(s2.classes) ? [] : s2.classes,\n      attributes: isUndefined2(s2.attributes) ? {} : s2.attributes,\n      styles: isUndefined2(s2.styles) ? {} : s2.styles\n    });\n    const merge2 = (defnA, mod) => ({\n      ...defnA,\n      attributes: {\n        ...defnA.attributes,\n        ...mod.attributes\n      },\n      styles: {\n        ...defnA.styles,\n        ...mod.styles\n      },\n      classes: defnA.classes.concat(mod.classes)\n    });\n    const combine$2 = (info, baseMod, behaviours2, base3) => {\n      const modsByBehaviour = { ...baseMod };\n      each$1(behaviours2, (behaviour) => {\n        modsByBehaviour[behaviour.name()] = behaviour.exhibit(info, base3);\n      });\n      const byAspect = byInnerKey(modsByBehaviour, (name2, modification) => ({\n        name: name2,\n        modification\n      }));\n      const combineObjects = (objects) => foldr(objects, (b3, a2) => ({\n        ...a2.modification,\n        ...b3\n      }), {});\n      const combinedClasses = foldr(byAspect.classes, (b3, a2) => a2.modification.concat(b3), []);\n      const combinedAttributes = combineObjects(byAspect.attributes);\n      const combinedStyles = combineObjects(byAspect.styles);\n      return nu$7({\n        classes: combinedClasses,\n        attributes: combinedAttributes,\n        styles: combinedStyles\n      });\n    };\n    const sortKeys = (label2, keyName, array2, order) => {\n      try {\n        const sorted = sort(array2, (a2, b3) => {\n          const aKey = a2[keyName];\n          const bKey = b3[keyName];\n          const aIndex = order.indexOf(aKey);\n          const bIndex = order.indexOf(bKey);\n          if (aIndex === -1) {\n            throw new Error(\"The ordering for \" + label2 + \" does not have an entry for \" + aKey + \".\\nOrder specified: \" + JSON.stringify(order, null, 2));\n          }\n          if (bIndex === -1) {\n            throw new Error(\"The ordering for \" + label2 + \" does not have an entry for \" + bKey + \".\\nOrder specified: \" + JSON.stringify(order, null, 2));\n          }\n          if (aIndex < bIndex) {\n            return -1;\n          } else if (bIndex < aIndex) {\n            return 1;\n          } else {\n            return 0;\n          }\n        });\n        return Result.value(sorted);\n      } catch (err) {\n        return Result.error([err]);\n      }\n    };\n    const uncurried = (handler, purpose) => ({\n      handler,\n      purpose\n    });\n    const curried = (handler, purpose) => ({\n      cHandler: handler,\n      purpose\n    });\n    const curryArgs = (descHandler, extraArgs) => curried(curry.apply(void 0, [descHandler.handler].concat(extraArgs)), descHandler.purpose);\n    const getCurried = (descHandler) => descHandler.cHandler;\n    const behaviourTuple = (name2, handler) => ({\n      name: name2,\n      handler\n    });\n    const nameToHandlers = (behaviours2, info) => {\n      const r4 = {};\n      each$1(behaviours2, (behaviour) => {\n        r4[behaviour.name()] = behaviour.handlers(info);\n      });\n      return r4;\n    };\n    const groupByEvents = (info, behaviours2, base3) => {\n      const behaviourEvents = {\n        ...base3,\n        ...nameToHandlers(behaviours2, info)\n      };\n      return byInnerKey(behaviourEvents, behaviourTuple);\n    };\n    const combine$1 = (info, eventOrder, behaviours2, base3) => {\n      const byEventName = groupByEvents(info, behaviours2, base3);\n      return combineGroups(byEventName, eventOrder);\n    };\n    const assemble = (rawHandler) => {\n      const handler = read$2(rawHandler);\n      return (component, simulatedEvent, ...rest) => {\n        const args = [\n          component,\n          simulatedEvent\n        ].concat(rest);\n        if (handler.abort.apply(void 0, args)) {\n          simulatedEvent.stop();\n        } else if (handler.can.apply(void 0, args)) {\n          handler.run.apply(void 0, args);\n        }\n      };\n    };\n    const missingOrderError = (eventName, tuples) => Result.error([\"The event (\" + eventName + ') has more than one behaviour that listens to it.\\nWhen this occurs, you must specify an event ordering for the behaviours in your spec (e.g. [ \"listing\", \"toggling\" ]).\\nThe behaviours that can trigger it are: ' + JSON.stringify(map$2(tuples, (c2) => c2.name), null, 2)]);\n    const fuse = (tuples, eventOrder, eventName) => {\n      const order = eventOrder[eventName];\n      if (!order) {\n        return missingOrderError(eventName, tuples);\n      } else {\n        return sortKeys(\"Event: \" + eventName, \"name\", tuples, order).map((sortedTuples) => {\n          const handlers2 = map$2(sortedTuples, (tuple) => tuple.handler);\n          return fuse$1(handlers2);\n        });\n      }\n    };\n    const combineGroups = (byEventName, eventOrder) => {\n      const r4 = mapToArray2(byEventName, (tuples, eventName) => {\n        const combined = tuples.length === 1 ? Result.value(tuples[0].handler) : fuse(tuples, eventOrder, eventName);\n        return combined.map((handler) => {\n          const assembled = assemble(handler);\n          const purpose = tuples.length > 1 ? filter$2(eventOrder[eventName], (o2) => exists(tuples, (t3) => t3.name === o2)).join(\" > \") : tuples[0].name;\n          return wrap$1(eventName, uncurried(assembled, purpose));\n        });\n      });\n      return consolidate(r4, {});\n    };\n    const baseBehaviour = \"alloy.base.behaviour\";\n    const schema$z = objOf([\n      field$1(\"dom\", \"dom\", required$2(), objOf([\n        required$1(\"tag\"),\n        defaulted(\"styles\", {}),\n        defaulted(\"classes\", []),\n        defaulted(\"attributes\", {}),\n        option$3(\"value\"),\n        option$3(\"innerHtml\")\n      ])),\n      required$1(\"components\"),\n      required$1(\"uid\"),\n      defaulted(\"events\", {}),\n      defaulted(\"apis\", {}),\n      field$1(\"eventOrder\", \"eventOrder\", mergeWith({\n        [execute$5()]: [\n          \"disabling\",\n          baseBehaviour,\n          \"toggling\",\n          \"typeaheadevents\"\n        ],\n        [focus$4()]: [\n          baseBehaviour,\n          \"focusing\",\n          \"keying\"\n        ],\n        [systemInit()]: [\n          baseBehaviour,\n          \"disabling\",\n          \"toggling\",\n          \"representing\"\n        ],\n        [input()]: [\n          baseBehaviour,\n          \"representing\",\n          \"streaming\",\n          \"invalidating\"\n        ],\n        [detachedFromDom()]: [\n          baseBehaviour,\n          \"representing\",\n          \"item-events\",\n          \"tooltipping\"\n        ],\n        [mousedown()]: [\n          \"focusing\",\n          baseBehaviour,\n          \"item-type-events\"\n        ],\n        [touchstart()]: [\n          \"focusing\",\n          baseBehaviour,\n          \"item-type-events\"\n        ],\n        [mouseover()]: [\n          \"item-type-events\",\n          \"tooltipping\"\n        ],\n        [receive()]: [\n          \"receiving\",\n          \"reflecting\",\n          \"tooltipping\"\n        ]\n      }), anyValue()),\n      option$3(\"domModification\")\n    ]);\n    const toInfo = (spec) => asRaw(\"custom.definition\", schema$z, spec);\n    const toDefinition = (detail) => ({\n      ...detail.dom,\n      uid: detail.uid,\n      domChildren: map$2(detail.components, (comp) => comp.element)\n    });\n    const toModification = (detail) => detail.domModification.fold(() => nu$7({}), nu$7);\n    const toEvents = (info) => info.events;\n    const read = (element2, attr) => {\n      const value2 = get$f(element2, attr);\n      return value2 === void 0 || value2 === \"\" ? [] : value2.split(\" \");\n    };\n    const add$4 = (element2, attr, id) => {\n      const old = read(element2, attr);\n      const nu2 = old.concat([id]);\n      set$9(element2, attr, nu2.join(\" \"));\n      return true;\n    };\n    const remove$4 = (element2, attr, id) => {\n      const nu2 = filter$2(read(element2, attr), (v2) => v2 !== id);\n      if (nu2.length > 0) {\n        set$9(element2, attr, nu2.join(\" \"));\n      } else {\n        remove$7(element2, attr);\n      }\n      return false;\n    };\n    const supports = (element2) => element2.dom.classList !== void 0;\n    const get$8 = (element2) => read(element2, \"class\");\n    const add$3 = (element2, clazz) => add$4(element2, \"class\", clazz);\n    const remove$3 = (element2, clazz) => remove$4(element2, \"class\", clazz);\n    const add$2 = (element2, clazz) => {\n      if (supports(element2)) {\n        element2.dom.classList.add(clazz);\n      } else {\n        add$3(element2, clazz);\n      }\n    };\n    const cleanClass = (element2) => {\n      const classList = supports(element2) ? element2.dom.classList : get$8(element2);\n      if (classList.length === 0) {\n        remove$7(element2, \"class\");\n      }\n    };\n    const remove$2 = (element2, clazz) => {\n      if (supports(element2)) {\n        const classList = element2.dom.classList;\n        classList.remove(clazz);\n      } else {\n        remove$3(element2, clazz);\n      }\n      cleanClass(element2);\n    };\n    const has2 = (element2, clazz) => supports(element2) && element2.dom.classList.contains(clazz);\n    const add$1 = (element2, classes2) => {\n      each$1(classes2, (x2) => {\n        add$2(element2, x2);\n      });\n    };\n    const remove$1 = (element2, classes2) => {\n      each$1(classes2, (x2) => {\n        remove$2(element2, x2);\n      });\n    };\n    const hasAll = (element2, classes2) => forall(classes2, (clazz) => has2(element2, clazz));\n    const getNative2 = (element2) => {\n      const classList = element2.dom.classList;\n      const r4 = new Array(classList.length);\n      for (let i3 = 0; i3 < classList.length; i3++) {\n        const item2 = classList.item(i3);\n        if (item2 !== null) {\n          r4[i3] = item2;\n        }\n      }\n      return r4;\n    };\n    const get$7 = (element2) => supports(element2) ? getNative2(element2) : get$8(element2);\n    const get$6 = (element2) => element2.dom.value;\n    const set$5 = (element2, value2) => {\n      if (value2 === void 0) {\n        throw new Error(\"Value.set was undefined\");\n      }\n      element2.dom.value = value2;\n    };\n    const determineObsoleted = (parent2, index2, oldObsoleted) => {\n      const newObsoleted = child$2(parent2, index2);\n      return newObsoleted.map((newObs) => {\n        const elemChanged = oldObsoleted.exists((o2) => !eq2(o2, newObs));\n        if (elemChanged) {\n          const oldTag = oldObsoleted.map(name$3).getOr(\"span\");\n          const marker = SugarElement.fromTag(oldTag);\n          before$1(newObs, marker);\n          return marker;\n        } else {\n          return newObs;\n        }\n      });\n    };\n    const ensureInDom = (parent2, child2, obsoleted) => {\n      obsoleted.fold(() => append$2(parent2, child2), (obs) => {\n        if (!eq2(obs, child2)) {\n          before$1(obs, child2);\n          remove$5(obs);\n        }\n      });\n    };\n    const patchChildrenWith = (parent2, nu2, f2) => {\n      const builtChildren = map$2(nu2, f2);\n      const currentChildren = children(parent2);\n      each$1(currentChildren.slice(builtChildren.length), remove$5);\n      return builtChildren;\n    };\n    const patchSpecChild = (parent2, index2, spec, build2) => {\n      const oldObsoleted = child$2(parent2, index2);\n      const childComp = build2(spec, oldObsoleted);\n      const obsoleted = determineObsoleted(parent2, index2, oldObsoleted);\n      ensureInDom(parent2, childComp.element, obsoleted);\n      return childComp;\n    };\n    const patchSpecChildren = (parent2, specs, build2) => patchChildrenWith(parent2, specs, (spec, index2) => patchSpecChild(parent2, index2, spec, build2));\n    const patchDomChildren = (parent2, nodes) => patchChildrenWith(parent2, nodes, (node, index2) => {\n      const optObsoleted = child$2(parent2, index2);\n      ensureInDom(parent2, node, optObsoleted);\n      return node;\n    });\n    const diffKeyValueSet = (newObj, oldObj) => {\n      const newKeys = keys2(newObj);\n      const oldKeys = keys2(oldObj);\n      const toRemove = difference(oldKeys, newKeys);\n      const toSet = bifilter(newObj, (v2, k3) => {\n        return !has$2(oldObj, k3) || v2 !== oldObj[k3];\n      }).t;\n      return {\n        toRemove,\n        toSet\n      };\n    };\n    const reconcileToDom = (definition, obsoleted) => {\n      const {\n        class: clazz,\n        style,\n        ...existingAttributes\n      } = clone$1(obsoleted);\n      const {\n        toSet: attrsToSet,\n        toRemove: attrsToRemove\n      } = diffKeyValueSet(definition.attributes, existingAttributes);\n      const updateAttrs = () => {\n        each$1(attrsToRemove, (a2) => remove$7(obsoleted, a2));\n        setAll$1(obsoleted, attrsToSet);\n      };\n      const existingStyles = getAllRaw(obsoleted);\n      const {\n        toSet: stylesToSet,\n        toRemove: stylesToRemove\n      } = diffKeyValueSet(definition.styles, existingStyles);\n      const updateStyles = () => {\n        each$1(stylesToRemove, (s2) => remove$6(obsoleted, s2));\n        setAll(obsoleted, stylesToSet);\n      };\n      const existingClasses = get$7(obsoleted);\n      const classesToRemove = difference(existingClasses, definition.classes);\n      const classesToAdd = difference(definition.classes, existingClasses);\n      const updateClasses = () => {\n        add$1(obsoleted, classesToAdd);\n        remove$1(obsoleted, classesToRemove);\n      };\n      const updateHtml = (html) => {\n        set$6(obsoleted, html);\n      };\n      const updateChildren = () => {\n        const children2 = definition.domChildren;\n        patchDomChildren(obsoleted, children2);\n      };\n      const updateValue = () => {\n        const valueElement = obsoleted;\n        definition.value.filter((value2) => value2 !== get$6(valueElement)).each((value2) => set$5(valueElement, value2));\n      };\n      updateAttrs();\n      updateClasses();\n      updateStyles();\n      definition.innerHtml.fold(updateChildren, updateHtml);\n      updateValue();\n      return obsoleted;\n    };\n    const introduceToDom = (definition) => {\n      const subject = SugarElement.fromTag(definition.tag);\n      setAll$1(subject, definition.attributes);\n      add$1(subject, definition.classes);\n      setAll(subject, definition.styles);\n      definition.innerHtml.each((html) => set$6(subject, html));\n      const children2 = definition.domChildren;\n      append$1(subject, children2);\n      definition.value.each((value2) => {\n        set$5(subject, value2);\n      });\n      return subject;\n    };\n    const attemptPatch = (definition, obsoleted) => {\n      try {\n        const e2 = reconcileToDom(definition, obsoleted);\n        return Optional.some(e2);\n      } catch (err) {\n        return Optional.none();\n      }\n    };\n    const hasMixedChildren = (definition) => definition.innerHtml.isSome() && definition.domChildren.length > 0;\n    const renderToDom = (definition, optObsoleted) => {\n      const canBePatched = (candidate) => name$3(candidate) === definition.tag && !hasMixedChildren(definition) && !isPremade(candidate);\n      const elem = optObsoleted.filter(canBePatched).bind((obsoleted) => attemptPatch(definition, obsoleted)).getOrThunk(() => introduceToDom(definition));\n      writeOnly(elem, definition.uid);\n      return elem;\n    };\n    const getBehaviours$2 = (spec) => {\n      const behaviours2 = get$g(spec, \"behaviours\").getOr({});\n      return bind$3(keys2(behaviours2), (name2) => {\n        const behaviour = behaviours2[name2];\n        return isNonNullable(behaviour) ? [behaviour.me] : [];\n      });\n    };\n    const generateFrom = (spec, all2) => generateFrom$1(spec, all2);\n    const generate$4 = (spec) => {\n      const all2 = getBehaviours$2(spec);\n      return generateFrom(spec, all2);\n    };\n    const getDomDefinition = (info, bList, bData) => {\n      const definition = toDefinition(info);\n      const infoModification = toModification(info);\n      const baseModification = { \"alloy.base.modification\": infoModification };\n      const modification = bList.length > 0 ? combine$2(bData, baseModification, bList, definition) : infoModification;\n      return merge2(definition, modification);\n    };\n    const getEvents = (info, bList, bData) => {\n      const baseEvents = { \"alloy.base.behaviour\": toEvents(info) };\n      return combine$1(bData, info.eventOrder, bList, baseEvents).getOrDie();\n    };\n    const build$2 = (spec, obsoleted) => {\n      const getMe = () => me;\n      const systemApi = Cell(singleton$1);\n      const info = getOrDie(toInfo(spec));\n      const bBlob = generate$4(spec);\n      const bList = getBehaviours$3(bBlob);\n      const bData = getData$2(bBlob);\n      const modDefinition = getDomDefinition(info, bList, bData);\n      const item2 = renderToDom(modDefinition, obsoleted);\n      const events2 = getEvents(info, bList, bData);\n      const subcomponents = Cell(info.components);\n      const connect = (newApi) => {\n        systemApi.set(newApi);\n      };\n      const disconnect = () => {\n        systemApi.set(NoContextApi(getMe));\n      };\n      const syncComponents = () => {\n        const children$1 = children(item2);\n        const subs2 = bind$3(children$1, (child2) => systemApi.get().getByDom(child2).fold(() => [], pure$2));\n        subcomponents.set(subs2);\n      };\n      const config3 = (behaviour) => {\n        const b3 = bData;\n        const f2 = isFunction2(b3[behaviour.name()]) ? b3[behaviour.name()] : () => {\n          throw new Error(\"Could not find \" + behaviour.name() + \" in \" + JSON.stringify(spec, null, 2));\n        };\n        return f2();\n      };\n      const hasConfigured = (behaviour) => isFunction2(bData[behaviour.name()]);\n      const getApis = () => info.apis;\n      const readState = (behaviourName) => bData[behaviourName]().map((b3) => b3.state.readState()).getOr(\"not enabled\");\n      const me = {\n        uid: spec.uid,\n        getSystem: systemApi.get,\n        config: config3,\n        hasConfigured,\n        spec,\n        readState,\n        getApis,\n        connect,\n        disconnect,\n        element: item2,\n        syncComponents,\n        components: subcomponents.get,\n        events: events2\n      };\n      return me;\n    };\n    const buildSubcomponents = (spec, obsoleted) => {\n      const components2 = get$g(spec, \"components\").getOr([]);\n      return obsoleted.fold(() => map$2(components2, build$1), (obs) => map$2(components2, (c2, i3) => {\n        return buildOrPatch(c2, child$2(obs, i3));\n      }));\n    };\n    const buildFromSpec = (userSpec, obsoleted) => {\n      const {\n        events: specEvents,\n        ...spec\n      } = make$8(userSpec);\n      const components2 = buildSubcomponents(spec, obsoleted);\n      const completeSpec = {\n        ...spec,\n        events: {\n          ...DefaultEvents,\n          ...specEvents\n        },\n        components: components2\n      };\n      return Result.value(build$2(completeSpec, obsoleted));\n    };\n    const text$1 = (textContent) => {\n      const element2 = SugarElement.fromText(textContent);\n      return external$1({ element: element2 });\n    };\n    const external$1 = (spec) => {\n      const extSpec = asRawOrDie$1(\"external.component\", objOfOnly([\n        required$1(\"element\"),\n        option$3(\"uid\")\n      ]), spec);\n      const systemApi = Cell(NoContextApi());\n      const connect = (newApi) => {\n        systemApi.set(newApi);\n      };\n      const disconnect = () => {\n        systemApi.set(NoContextApi(() => me));\n      };\n      const uid = extSpec.uid.getOrThunk(() => generate$5(\"external\"));\n      writeOnly(extSpec.element, uid);\n      const me = {\n        uid,\n        getSystem: systemApi.get,\n        config: Optional.none,\n        hasConfigured: never,\n        connect,\n        disconnect,\n        getApis: () => ({}),\n        element: extSpec.element,\n        spec,\n        readState: constant$1(\"No state\"),\n        syncComponents: noop,\n        components: constant$1([]),\n        events: {}\n      };\n      return premade$1(me);\n    };\n    const uids = generate$5;\n    const isSketchSpec$1 = (spec) => has$2(spec, \"uid\");\n    const buildOrPatch = (spec, obsoleted) => getPremade(spec).getOrThunk(() => {\n      const userSpecWithUid = isSketchSpec$1(spec) ? spec : {\n        uid: uids(\"\"),\n        ...spec\n      };\n      return buildFromSpec(userSpecWithUid, obsoleted).getOrDie();\n    });\n    const build$1 = (spec) => buildOrPatch(spec, Optional.none());\n    const premade = premade$1;\n    var ClosestOrAncestor = (is2, ancestor2, scope, a2, isRoot) => {\n      if (is2(scope, a2)) {\n        return Optional.some(scope);\n      } else if (isFunction2(isRoot) && isRoot(scope)) {\n        return Optional.none();\n      } else {\n        return ancestor2(scope, a2, isRoot);\n      }\n    };\n    const ancestor$1 = (scope, predicate, isRoot) => {\n      let element2 = scope.dom;\n      const stop2 = isFunction2(isRoot) ? isRoot : never;\n      while (element2.parentNode) {\n        element2 = element2.parentNode;\n        const el = SugarElement.fromDom(element2);\n        if (predicate(el)) {\n          return Optional.some(el);\n        } else if (stop2(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$3 = (scope, predicate, isRoot) => {\n      const is2 = (s2, test2) => test2(s2);\n      return ClosestOrAncestor(is2, ancestor$1, scope, predicate, isRoot);\n    };\n    const child$1 = (scope, predicate) => {\n      const pred = (node) => predicate(SugarElement.fromDom(node));\n      const result = find$5(scope.dom.childNodes, pred);\n      return result.map(SugarElement.fromDom);\n    };\n    const descendant$1 = (scope, predicate) => {\n      const descend = (node) => {\n        for (let i3 = 0; i3 < node.childNodes.length; i3++) {\n          const child2 = SugarElement.fromDom(node.childNodes[i3]);\n          if (predicate(child2)) {\n            return Optional.some(child2);\n          }\n          const res = descend(node.childNodes[i3]);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope.dom);\n    };\n    const closest$2 = (scope, predicate, isRoot) => closest$3(scope, predicate, isRoot).isSome();\n    const ancestor = (scope, selector, isRoot) => ancestor$1(scope, (e2) => is(e2, selector), isRoot);\n    const child = (scope, selector) => child$1(scope, (e2) => is(e2, selector));\n    const descendant = (scope, selector) => one(selector, scope);\n    const closest$1 = (scope, selector, isRoot) => {\n      const is$12 = (element2, selector2) => is(element2, selector2);\n      return ClosestOrAncestor(is$12, ancestor, scope, selector, isRoot);\n    };\n    const attribute2 = \"aria-controls\";\n    const find$1 = (queryElem) => {\n      const dependent = closest$3(queryElem, (elem) => {\n        if (!isElement$1(elem)) {\n          return false;\n        }\n        const id = get$f(elem, \"id\");\n        return id !== void 0 && id.indexOf(attribute2) > -1;\n      });\n      return dependent.bind((dep) => {\n        const id = get$f(dep, \"id\");\n        const dos = getRootNode(dep);\n        return descendant(dos, `[${attribute2}=\"${id}\"]`);\n      });\n    };\n    const manager = () => {\n      const ariaId = generate$6(attribute2);\n      const link2 = (elem) => {\n        set$9(elem, attribute2, ariaId);\n      };\n      const unlink = (elem) => {\n        remove$7(elem, attribute2);\n      };\n      return {\n        id: ariaId,\n        link: link2,\n        unlink\n      };\n    };\n    const isAriaPartOf = (component, queryElem) => find$1(queryElem).exists((owner2) => isPartOf$1(component, owner2));\n    const isPartOf$1 = (component, queryElem) => closest$2(queryElem, (el) => eq2(el, component.element), never) || isAriaPartOf(component, queryElem);\n    const unknown = \"unknown\";\n    var EventConfiguration;\n    (function(EventConfiguration2) {\n      EventConfiguration2[EventConfiguration2[\"STOP\"] = 0] = \"STOP\";\n      EventConfiguration2[EventConfiguration2[\"NORMAL\"] = 1] = \"NORMAL\";\n      EventConfiguration2[EventConfiguration2[\"LOGGING\"] = 2] = \"LOGGING\";\n    })(EventConfiguration || (EventConfiguration = {}));\n    const eventConfig = Cell({});\n    const makeEventLogger = (eventName, initialTarget) => {\n      const sequence2 = [];\n      const startTime = (/* @__PURE__ */ new Date()).getTime();\n      return {\n        logEventCut: (_name, target, purpose) => {\n          sequence2.push({\n            outcome: \"cut\",\n            target,\n            purpose\n          });\n        },\n        logEventStopped: (_name, target, purpose) => {\n          sequence2.push({\n            outcome: \"stopped\",\n            target,\n            purpose\n          });\n        },\n        logNoParent: (_name, target, purpose) => {\n          sequence2.push({\n            outcome: \"no-parent\",\n            target,\n            purpose\n          });\n        },\n        logEventNoHandlers: (_name, target) => {\n          sequence2.push({\n            outcome: \"no-handlers-left\",\n            target\n          });\n        },\n        logEventResponse: (_name, target, purpose) => {\n          sequence2.push({\n            outcome: \"response\",\n            purpose,\n            target\n          });\n        },\n        write: () => {\n          const finishTime = (/* @__PURE__ */ new Date()).getTime();\n          if (contains$2([\n            \"mousemove\",\n            \"mouseover\",\n            \"mouseout\",\n            systemInit()\n          ], eventName)) {\n            return;\n          }\n          console.log(eventName, {\n            event: eventName,\n            time: finishTime - startTime,\n            target: initialTarget.dom,\n            sequence: map$2(sequence2, (s2) => {\n              if (!contains$2([\n                \"cut\",\n                \"stopped\",\n                \"response\"\n              ], s2.outcome)) {\n                return s2.outcome;\n              } else {\n                return \"{\" + s2.purpose + \"} \" + s2.outcome + \" at (\" + element(s2.target) + \")\";\n              }\n            })\n          });\n        }\n      };\n    };\n    const processEvent = (eventName, initialTarget, f2) => {\n      const status = get$g(eventConfig.get(), eventName).orThunk(() => {\n        const patterns = keys2(eventConfig.get());\n        return findMap(patterns, (p2) => eventName.indexOf(p2) > -1 ? Optional.some(eventConfig.get()[p2]) : Optional.none());\n      }).getOr(EventConfiguration.NORMAL);\n      switch (status) {\n        case EventConfiguration.NORMAL:\n          return f2(noLogger());\n        case EventConfiguration.LOGGING: {\n          const logger = makeEventLogger(eventName, initialTarget);\n          const output2 = f2(logger);\n          logger.write();\n          return output2;\n        }\n        case EventConfiguration.STOP:\n          return true;\n      }\n    };\n    const path = [\n      \"alloy/data/Fields\",\n      \"alloy/debugging/Debugging\"\n    ];\n    const getTrace = () => {\n      const err = new Error();\n      if (err.stack !== void 0) {\n        const lines = err.stack.split(\"\\n\");\n        return find$5(lines, (line) => line.indexOf(\"alloy\") > 0 && !exists(path, (p2) => line.indexOf(p2) > -1)).getOr(unknown);\n      } else {\n        return unknown;\n      }\n    };\n    const ignoreEvent = {\n      logEventCut: noop,\n      logEventStopped: noop,\n      logNoParent: noop,\n      logEventNoHandlers: noop,\n      logEventResponse: noop,\n      write: noop\n    };\n    const monitorEvent = (eventName, initialTarget, f2) => processEvent(eventName, initialTarget, f2);\n    const noLogger = constant$1(ignoreEvent);\n    const menuFields = constant$1([\n      required$1(\"menu\"),\n      required$1(\"selectedMenu\")\n    ]);\n    const itemFields = constant$1([\n      required$1(\"item\"),\n      required$1(\"selectedItem\")\n    ]);\n    constant$1(objOf(itemFields().concat(menuFields())));\n    const itemSchema$3 = constant$1(objOf(itemFields()));\n    const _initSize = requiredObjOf(\"initSize\", [\n      required$1(\"numColumns\"),\n      required$1(\"numRows\")\n    ]);\n    const itemMarkers = () => requiredOf(\"markers\", itemSchema$3());\n    const tieredMenuMarkers = () => requiredObjOf(\"markers\", [required$1(\"backgroundMenu\")].concat(menuFields()).concat(itemFields()));\n    const markers$1 = (required2) => requiredObjOf(\"markers\", map$2(required2, required$1));\n    const onPresenceHandler = (label2, fieldName, presence) => {\n      getTrace();\n      return field$1(fieldName, fieldName, presence, valueOf((f2) => Result.value((...args) => {\n        return f2.apply(void 0, args);\n      })));\n    };\n    const onHandler = (fieldName) => onPresenceHandler(\"onHandler\", fieldName, defaulted$1(noop));\n    const onKeyboardHandler = (fieldName) => onPresenceHandler(\"onKeyboardHandler\", fieldName, defaulted$1(Optional.none));\n    const onStrictHandler = (fieldName) => onPresenceHandler(\"onHandler\", fieldName, required$2());\n    const onStrictKeyboardHandler = (fieldName) => onPresenceHandler(\"onKeyboardHandler\", fieldName, required$2());\n    const output$1 = (name2, value2) => customField(name2, constant$1(value2));\n    const snapshot = (name2) => customField(name2, identity2);\n    const initSize = constant$1(_initSize);\n    const nu$6 = (x2, y2, bubble, direction, placement2, boundsRestriction2, labelPrefix2, alwaysFit = false) => ({\n      x: x2,\n      y: y2,\n      bubble,\n      direction,\n      placement: placement2,\n      restriction: boundsRestriction2,\n      label: `${labelPrefix2}-${placement2}`,\n      alwaysFit\n    });\n    const adt$a = Adt.generate([\n      { southeast: [] },\n      { southwest: [] },\n      { northeast: [] },\n      { northwest: [] },\n      { south: [] },\n      { north: [] },\n      { east: [] },\n      { west: [] }\n    ]);\n    const cata$2 = (subject, southeast2, southwest2, northeast2, northwest2, south2, north2, east2, west2) => subject.fold(southeast2, southwest2, northeast2, northwest2, south2, north2, east2, west2);\n    const cataVertical = (subject, south2, middle, north2) => subject.fold(south2, south2, north2, north2, south2, north2, middle, middle);\n    const cataHorizontal = (subject, east2, middle, west2) => subject.fold(east2, west2, east2, west2, middle, middle, east2, west2);\n    const southeast$3 = adt$a.southeast;\n    const southwest$3 = adt$a.southwest;\n    const northeast$3 = adt$a.northeast;\n    const northwest$3 = adt$a.northwest;\n    const south$3 = adt$a.south;\n    const north$3 = adt$a.north;\n    const east$3 = adt$a.east;\n    const west$3 = adt$a.west;\n    const cycleBy = (value2, delta, min2, max2) => {\n      const r4 = value2 + delta;\n      if (r4 > max2) {\n        return min2;\n      } else if (r4 < min2) {\n        return max2;\n      } else {\n        return r4;\n      }\n    };\n    const clamp = (value2, min2, max2) => Math.min(Math.max(value2, min2), max2);\n    const getRestriction = (anchor2, restriction) => {\n      switch (restriction) {\n        case 1:\n          return anchor2.x;\n        case 0:\n          return anchor2.x + anchor2.width;\n        case 2:\n          return anchor2.y;\n        case 3:\n          return anchor2.y + anchor2.height;\n      }\n    };\n    const boundsRestriction = (anchor2, restrictions) => mapToObject([\n      \"left\",\n      \"right\",\n      \"top\",\n      \"bottom\"\n    ], (dir) => get$g(restrictions, dir).map((restriction) => getRestriction(anchor2, restriction)));\n    const adjustBounds = (bounds$12, restriction, bubbleOffset) => {\n      const applyRestriction = (dir, current) => restriction[dir].map((pos) => {\n        const isVerticalAxis = dir === \"top\" || dir === \"bottom\";\n        const offset2 = isVerticalAxis ? bubbleOffset.top : bubbleOffset.left;\n        const comparator = dir === \"left\" || dir === \"top\" ? Math.max : Math.min;\n        const newPos = comparator(pos, current) + offset2;\n        return isVerticalAxis ? clamp(newPos, bounds$12.y, bounds$12.bottom) : clamp(newPos, bounds$12.x, bounds$12.right);\n      }).getOr(current);\n      const adjustedLeft = applyRestriction(\"left\", bounds$12.x);\n      const adjustedTop = applyRestriction(\"top\", bounds$12.y);\n      const adjustedRight = applyRestriction(\"right\", bounds$12.right);\n      const adjustedBottom = applyRestriction(\"bottom\", bounds$12.bottom);\n      return bounds(adjustedLeft, adjustedTop, adjustedRight - adjustedLeft, adjustedBottom - adjustedTop);\n    };\n    const labelPrefix$2 = \"layout\";\n    const eastX$1 = (anchor2) => anchor2.x;\n    const middleX$1 = (anchor2, element2) => anchor2.x + anchor2.width / 2 - element2.width / 2;\n    const westX$1 = (anchor2, element2) => anchor2.x + anchor2.width - element2.width;\n    const northY$2 = (anchor2, element2) => anchor2.y - element2.height;\n    const southY$2 = (anchor2) => anchor2.y + anchor2.height;\n    const centreY$1 = (anchor2, element2) => anchor2.y + anchor2.height / 2 - element2.height / 2;\n    const eastEdgeX$1 = (anchor2) => anchor2.x + anchor2.width;\n    const westEdgeX$1 = (anchor2, element2) => anchor2.x - element2.width;\n    const southeast$2 = (anchor2, element2, bubbles) => nu$6(eastX$1(anchor2), southY$2(anchor2), bubbles.southeast(), southeast$3(), \"southeast\", boundsRestriction(anchor2, {\n      left: 1,\n      top: 3\n    }), labelPrefix$2);\n    const southwest$2 = (anchor2, element2, bubbles) => nu$6(westX$1(anchor2, element2), southY$2(anchor2), bubbles.southwest(), southwest$3(), \"southwest\", boundsRestriction(anchor2, {\n      right: 0,\n      top: 3\n    }), labelPrefix$2);\n    const northeast$2 = (anchor2, element2, bubbles) => nu$6(eastX$1(anchor2), northY$2(anchor2, element2), bubbles.northeast(), northeast$3(), \"northeast\", boundsRestriction(anchor2, {\n      left: 1,\n      bottom: 2\n    }), labelPrefix$2);\n    const northwest$2 = (anchor2, element2, bubbles) => nu$6(westX$1(anchor2, element2), northY$2(anchor2, element2), bubbles.northwest(), northwest$3(), \"northwest\", boundsRestriction(anchor2, {\n      right: 0,\n      bottom: 2\n    }), labelPrefix$2);\n    const north$2 = (anchor2, element2, bubbles) => nu$6(middleX$1(anchor2, element2), northY$2(anchor2, element2), bubbles.north(), north$3(), \"north\", boundsRestriction(anchor2, { bottom: 2 }), labelPrefix$2);\n    const south$2 = (anchor2, element2, bubbles) => nu$6(middleX$1(anchor2, element2), southY$2(anchor2), bubbles.south(), south$3(), \"south\", boundsRestriction(anchor2, { top: 3 }), labelPrefix$2);\n    const east$2 = (anchor2, element2, bubbles) => nu$6(eastEdgeX$1(anchor2), centreY$1(anchor2, element2), bubbles.east(), east$3(), \"east\", boundsRestriction(anchor2, { left: 0 }), labelPrefix$2);\n    const west$2 = (anchor2, element2, bubbles) => nu$6(westEdgeX$1(anchor2, element2), centreY$1(anchor2, element2), bubbles.west(), west$3(), \"west\", boundsRestriction(anchor2, { right: 1 }), labelPrefix$2);\n    const all$1 = () => [\n      southeast$2,\n      southwest$2,\n      northeast$2,\n      northwest$2,\n      south$2,\n      north$2,\n      east$2,\n      west$2\n    ];\n    const allRtl$1 = () => [\n      southwest$2,\n      southeast$2,\n      northwest$2,\n      northeast$2,\n      south$2,\n      north$2,\n      east$2,\n      west$2\n    ];\n    const aboveOrBelow = () => [\n      northeast$2,\n      northwest$2,\n      southeast$2,\n      southwest$2,\n      north$2,\n      south$2\n    ];\n    const aboveOrBelowRtl = () => [\n      northwest$2,\n      northeast$2,\n      southwest$2,\n      southeast$2,\n      north$2,\n      south$2\n    ];\n    const belowOrAbove = () => [\n      southeast$2,\n      southwest$2,\n      northeast$2,\n      northwest$2,\n      south$2,\n      north$2\n    ];\n    const belowOrAboveRtl = () => [\n      southwest$2,\n      southeast$2,\n      northwest$2,\n      northeast$2,\n      south$2,\n      north$2\n    ];\n    const chooseChannels = (channels, message) => message.universal ? channels : filter$2(channels, (ch) => contains$2(message.channels, ch));\n    const events$h = (receiveConfig) => derive$2([run$1(receive(), (component, message) => {\n      const channelMap = receiveConfig.channels;\n      const channels = keys2(channelMap);\n      const receivingData = message;\n      const targetChannels = chooseChannels(channels, receivingData);\n      each$1(targetChannels, (ch) => {\n        const channelInfo = channelMap[ch];\n        const channelSchema = channelInfo.schema;\n        const data = asRawOrDie$1(\"channel[\" + ch + \"] data\\nReceiver: \" + element(component.element), channelSchema, receivingData.data);\n        channelInfo.onReceive(component, data);\n      });\n    })]);\n    var ActiveReceiving = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      events: events$h\n    });\n    var ReceivingSchema = [requiredOf(\"channels\", setOf(Result.value, objOfOnly([\n      onStrictHandler(\"onReceive\"),\n      defaulted(\"schema\", anyValue())\n    ])))];\n    const executeEvent = (bConfig, bState, executor) => runOnExecute$1((component) => {\n      executor(component, bConfig, bState);\n    });\n    const loadEvent = (bConfig, bState, f2) => runOnInit((component, _simulatedEvent) => {\n      f2(component, bConfig, bState);\n    });\n    const create$4 = (schema2, name2, active2, apis, extra, state) => {\n      const configSchema = objOfOnly(schema2);\n      const schemaSchema = optionObjOf(name2, [optionObjOfOnly(\"config\", schema2)]);\n      return doCreate(configSchema, schemaSchema, name2, active2, apis, extra, state);\n    };\n    const createModes$1 = (modes, name2, active2, apis, extra, state) => {\n      const configSchema = modes;\n      const schemaSchema = optionObjOf(name2, [optionOf(\"config\", modes)]);\n      return doCreate(configSchema, schemaSchema, name2, active2, apis, extra, state);\n    };\n    const wrapApi = (bName, apiFunction, apiName) => {\n      const f2 = (component, ...rest) => {\n        const args = [component].concat(rest);\n        return component.config({ name: constant$1(bName) }).fold(() => {\n          throw new Error(\"We could not find any behaviour configuration for: \" + bName + \". Using API: \" + apiName);\n        }, (info) => {\n          const rest2 = Array.prototype.slice.call(args, 1);\n          return apiFunction.apply(void 0, [\n            component,\n            info.config,\n            info.state\n          ].concat(rest2));\n        });\n      };\n      return markAsBehaviourApi(f2, apiName, apiFunction);\n    };\n    const revokeBehaviour = (name2) => ({\n      key: name2,\n      value: void 0\n    });\n    const doCreate = (configSchema, schemaSchema, name2, active2, apis, extra, state) => {\n      const getConfig = (info) => hasNonNullableKey(info, name2) ? info[name2]() : Optional.none();\n      const wrappedApis = map$1(apis, (apiF, apiName) => wrapApi(name2, apiF, apiName));\n      const wrappedExtra = map$1(extra, (extraF, extraName) => markAsExtraApi(extraF, extraName));\n      const me = {\n        ...wrappedExtra,\n        ...wrappedApis,\n        revoke: curry(revokeBehaviour, name2),\n        config: (spec) => {\n          const prepared = asRawOrDie$1(name2 + \"-config\", configSchema, spec);\n          return {\n            key: name2,\n            value: {\n              config: prepared,\n              me,\n              configAsRaw: cached(() => asRawOrDie$1(name2 + \"-config\", configSchema, spec)),\n              initialConfig: spec,\n              state\n            }\n          };\n        },\n        schema: constant$1(schemaSchema),\n        exhibit: (info, base3) => {\n          return lift2(getConfig(info), get$g(active2, \"exhibit\"), (behaviourInfo, exhibitor) => {\n            return exhibitor(base3, behaviourInfo.config, behaviourInfo.state);\n          }).getOrThunk(() => nu$7({}));\n        },\n        name: constant$1(name2),\n        handlers: (info) => {\n          return getConfig(info).map((behaviourInfo) => {\n            const getEvents2 = get$g(active2, \"events\").getOr(() => ({}));\n            return getEvents2(behaviourInfo.config, behaviourInfo.state);\n          }).getOr({});\n        }\n      };\n      return me;\n    };\n    const derive$1 = (capabilities) => wrapAll(capabilities);\n    const simpleSchema = objOfOnly([\n      required$1(\"fields\"),\n      required$1(\"name\"),\n      defaulted(\"active\", {}),\n      defaulted(\"apis\", {}),\n      defaulted(\"state\", NoState),\n      defaulted(\"extra\", {})\n    ]);\n    const create$3 = (data) => {\n      const value2 = asRawOrDie$1(\"Creating behaviour: \" + data.name, simpleSchema, data);\n      return create$4(value2.fields, value2.name, value2.active, value2.apis, value2.extra, value2.state);\n    };\n    const modeSchema = objOfOnly([\n      required$1(\"branchKey\"),\n      required$1(\"branches\"),\n      required$1(\"name\"),\n      defaulted(\"active\", {}),\n      defaulted(\"apis\", {}),\n      defaulted(\"state\", NoState),\n      defaulted(\"extra\", {})\n    ]);\n    const createModes = (data) => {\n      const value2 = asRawOrDie$1(\"Creating behaviour: \" + data.name, modeSchema, data);\n      return createModes$1(choose$1(value2.branchKey, value2.branches), value2.name, value2.active, value2.apis, value2.extra, value2.state);\n    };\n    const revoke = constant$1(void 0);\n    const Receiving = create$3({\n      fields: ReceivingSchema,\n      name: \"receiving\",\n      active: ActiveReceiving\n    });\n    const exhibit$6 = (base3, posConfig) => nu$7({\n      classes: [],\n      styles: posConfig.useFixed() ? {} : { position: \"relative\" }\n    });\n    var ActivePosition = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      exhibit: exhibit$6\n    });\n    const focus$3 = (element2) => element2.dom.focus();\n    const blur$1 = (element2) => element2.dom.blur();\n    const hasFocus = (element2) => {\n      const root2 = getRootNode(element2).dom;\n      return element2.dom === root2.activeElement;\n    };\n    const active$1 = (root2 = getDocument()) => Optional.from(root2.dom.activeElement).map(SugarElement.fromDom);\n    const search = (element2) => active$1(getRootNode(element2)).filter((e2) => element2.dom.contains(e2.dom));\n    const preserve$1 = (f2, container) => {\n      const dos = getRootNode(container);\n      const refocus = active$1(dos).bind((focused) => {\n        const hasFocus2 = (elem) => eq2(focused, elem);\n        return hasFocus2(container) ? Optional.some(container) : descendant$1(container, hasFocus2);\n      });\n      const result = f2(container);\n      refocus.each((oldFocus) => {\n        active$1(dos).filter((newFocus) => eq2(newFocus, oldFocus)).fold(() => {\n          focus$3(oldFocus);\n        }, noop);\n      });\n      return result;\n    };\n    const NuPositionCss = (position2, left2, top2, right2, bottom2) => {\n      const toPx = (num) => num + \"px\";\n      return {\n        position: position2,\n        left: left2.map(toPx),\n        top: top2.map(toPx),\n        right: right2.map(toPx),\n        bottom: bottom2.map(toPx)\n      };\n    };\n    const toOptions = (position2) => ({\n      ...position2,\n      position: Optional.some(position2.position)\n    });\n    const applyPositionCss = (element2, position2) => {\n      setOptions(element2, toOptions(position2));\n    };\n    const adt$9 = Adt.generate([\n      { none: [] },\n      {\n        relative: [\n          \"x\",\n          \"y\",\n          \"width\",\n          \"height\"\n        ]\n      },\n      {\n        fixed: [\n          \"x\",\n          \"y\",\n          \"width\",\n          \"height\"\n        ]\n      }\n    ]);\n    const positionWithDirection = (posName, decision, x2, y2, width2, height2) => {\n      const decisionRect = decision.rect;\n      const decisionX = decisionRect.x - x2;\n      const decisionY = decisionRect.y - y2;\n      const decisionWidth = decisionRect.width;\n      const decisionHeight = decisionRect.height;\n      const decisionRight = width2 - (decisionX + decisionWidth);\n      const decisionBottom = height2 - (decisionY + decisionHeight);\n      const left2 = Optional.some(decisionX);\n      const top2 = Optional.some(decisionY);\n      const right2 = Optional.some(decisionRight);\n      const bottom2 = Optional.some(decisionBottom);\n      const none = Optional.none();\n      return cata$2(decision.direction, () => NuPositionCss(posName, left2, top2, none, none), () => NuPositionCss(posName, none, top2, right2, none), () => NuPositionCss(posName, left2, none, none, bottom2), () => NuPositionCss(posName, none, none, right2, bottom2), () => NuPositionCss(posName, left2, top2, none, none), () => NuPositionCss(posName, left2, none, none, bottom2), () => NuPositionCss(posName, left2, top2, none, none), () => NuPositionCss(posName, none, top2, right2, none));\n    };\n    const reposition = (origin, decision) => origin.fold(() => {\n      const decisionRect = decision.rect;\n      return NuPositionCss(\"absolute\", Optional.some(decisionRect.x), Optional.some(decisionRect.y), Optional.none(), Optional.none());\n    }, (x2, y2, width2, height2) => {\n      return positionWithDirection(\"absolute\", decision, x2, y2, width2, height2);\n    }, (x2, y2, width2, height2) => {\n      return positionWithDirection(\"fixed\", decision, x2, y2, width2, height2);\n    });\n    const toBox = (origin, element2) => {\n      const rel = curry(find$2, element2);\n      const position2 = origin.fold(rel, rel, () => {\n        const scroll = get$b();\n        return find$2(element2).translate(-scroll.left, -scroll.top);\n      });\n      const width2 = getOuter$1(element2);\n      const height2 = getOuter$2(element2);\n      return bounds(position2.left, position2.top, width2, height2);\n    };\n    const viewport = (origin, getBounds2) => getBounds2.fold(() => origin.fold(win, win, bounds), (b3) => origin.fold(b3, b3, () => {\n      const bounds$12 = b3();\n      const pos = translate$2(origin, bounds$12.x, bounds$12.y);\n      return bounds(pos.left, pos.top, bounds$12.width, bounds$12.height);\n    }));\n    const translate$2 = (origin, x2, y2) => {\n      const pos = SugarPosition(x2, y2);\n      const removeScroll = () => {\n        const outerScroll = get$b();\n        return pos.translate(-outerScroll.left, -outerScroll.top);\n      };\n      return origin.fold(constant$1(pos), constant$1(pos), removeScroll);\n    };\n    const cata$1 = (subject, onNone, onRelative, onFixed) => subject.fold(onNone, onRelative, onFixed);\n    adt$9.none;\n    const relative$1 = adt$9.relative;\n    const fixed$1 = adt$9.fixed;\n    const anchor = (anchorBox, origin) => ({\n      anchorBox,\n      origin\n    });\n    const box = (anchorBox, origin) => anchor(anchorBox, origin);\n    const placementAttribute = \"data-alloy-placement\";\n    const setPlacement$1 = (element2, placement2) => {\n      set$9(element2, placementAttribute, placement2);\n    };\n    const getPlacement = (element2) => getOpt(element2, placementAttribute);\n    const reset$2 = (element2) => remove$7(element2, placementAttribute);\n    const adt$8 = Adt.generate([\n      { fit: [\"reposition\"] },\n      {\n        nofit: [\n          \"reposition\",\n          \"visibleW\",\n          \"visibleH\",\n          \"isVisible\"\n        ]\n      }\n    ]);\n    const determinePosition = (box2, bounds2) => {\n      const {\n        x: boundsX,\n        y: boundsY,\n        right: boundsRight,\n        bottom: boundsBottom\n      } = bounds2;\n      const { x: x2, y: y2, right: right2, bottom: bottom2, width: width2, height: height2 } = box2;\n      const xInBounds = x2 >= boundsX && x2 <= boundsRight;\n      const yInBounds = y2 >= boundsY && y2 <= boundsBottom;\n      const originInBounds = xInBounds && yInBounds;\n      const rightInBounds = right2 <= boundsRight && right2 >= boundsX;\n      const bottomInBounds = bottom2 <= boundsBottom && bottom2 >= boundsY;\n      const sizeInBounds = rightInBounds && bottomInBounds;\n      const visibleW = Math.min(width2, x2 >= boundsX ? boundsRight - x2 : right2 - boundsX);\n      const visibleH = Math.min(height2, y2 >= boundsY ? boundsBottom - y2 : bottom2 - boundsY);\n      return {\n        originInBounds,\n        sizeInBounds,\n        visibleW,\n        visibleH\n      };\n    };\n    const calcReposition = (box2, bounds$12) => {\n      const {\n        x: boundsX,\n        y: boundsY,\n        right: boundsRight,\n        bottom: boundsBottom\n      } = bounds$12;\n      const { x: x2, y: y2, width: width2, height: height2 } = box2;\n      const maxX2 = Math.max(boundsX, boundsRight - width2);\n      const maxY2 = Math.max(boundsY, boundsBottom - height2);\n      const restrictedX = clamp(x2, boundsX, maxX2);\n      const restrictedY = clamp(y2, boundsY, maxY2);\n      const restrictedWidth = Math.min(restrictedX + width2, boundsRight) - restrictedX;\n      const restrictedHeight = Math.min(restrictedY + height2, boundsBottom) - restrictedY;\n      return bounds(restrictedX, restrictedY, restrictedWidth, restrictedHeight);\n    };\n    const calcMaxSizes = (direction, box2, bounds2) => {\n      const upAvailable = constant$1(box2.bottom - bounds2.y);\n      const downAvailable = constant$1(bounds2.bottom - box2.y);\n      const maxHeight = cataVertical(direction, downAvailable, downAvailable, upAvailable);\n      const westAvailable = constant$1(box2.right - bounds2.x);\n      const eastAvailable = constant$1(bounds2.right - box2.x);\n      const maxWidth = cataHorizontal(direction, eastAvailable, eastAvailable, westAvailable);\n      return {\n        maxWidth,\n        maxHeight\n      };\n    };\n    const attempt = (candidate, width2, height2, bounds$12) => {\n      const bubble = candidate.bubble;\n      const bubbleOffset = bubble.offset;\n      const adjustedBounds = adjustBounds(bounds$12, candidate.restriction, bubbleOffset);\n      const newX = candidate.x + bubbleOffset.left;\n      const newY = candidate.y + bubbleOffset.top;\n      const box2 = bounds(newX, newY, width2, height2);\n      const { originInBounds, sizeInBounds, visibleW, visibleH } = determinePosition(box2, adjustedBounds);\n      const fits = originInBounds && sizeInBounds;\n      const fittedBox = fits ? box2 : calcReposition(box2, adjustedBounds);\n      const isPartlyVisible = fittedBox.width > 0 && fittedBox.height > 0;\n      const { maxWidth, maxHeight } = calcMaxSizes(candidate.direction, fittedBox, bounds$12);\n      const reposition2 = {\n        rect: fittedBox,\n        maxHeight,\n        maxWidth,\n        direction: candidate.direction,\n        placement: candidate.placement,\n        classes: {\n          on: bubble.classesOn,\n          off: bubble.classesOff\n        },\n        layout: candidate.label,\n        testY: newY\n      };\n      return fits || candidate.alwaysFit ? adt$8.fit(reposition2) : adt$8.nofit(reposition2, visibleW, visibleH, isPartlyVisible);\n    };\n    const attempts = (element2, candidates, anchorBox, elementBox, bubbles, bounds2) => {\n      const panelWidth = elementBox.width;\n      const panelHeight = elementBox.height;\n      const attemptBestFit = (layout2, reposition2, visibleW, visibleH, isVisible2) => {\n        const next = layout2(anchorBox, elementBox, bubbles, element2, bounds2);\n        const attemptLayout = attempt(next, panelWidth, panelHeight, bounds2);\n        return attemptLayout.fold(constant$1(attemptLayout), (newReposition, newVisibleW, newVisibleH, newIsVisible) => {\n          const improved = isVisible2 === newIsVisible ? newVisibleH > visibleH || newVisibleW > visibleW : !isVisible2 && newIsVisible;\n          return improved ? attemptLayout : adt$8.nofit(reposition2, visibleW, visibleH, isVisible2);\n        });\n      };\n      const abc = foldl(candidates, (b3, a2) => {\n        const bestNext = curry(attemptBestFit, a2);\n        return b3.fold(constant$1(b3), bestNext);\n      }, adt$8.nofit({\n        rect: anchorBox,\n        maxHeight: elementBox.height,\n        maxWidth: elementBox.width,\n        direction: southeast$3(),\n        placement: \"southeast\",\n        classes: {\n          on: [],\n          off: []\n        },\n        layout: \"none\",\n        testY: anchorBox.y\n      }, -1, -1, false));\n      return abc.fold(identity2, identity2);\n    };\n    const singleton = (doRevoke) => {\n      const subject = Cell(Optional.none());\n      const revoke2 = () => subject.get().each(doRevoke);\n      const clear2 = () => {\n        revoke2();\n        subject.set(Optional.none());\n      };\n      const isSet2 = () => subject.get().isSome();\n      const get2 = () => subject.get();\n      const set3 = (s2) => {\n        revoke2();\n        subject.set(Optional.some(s2));\n      };\n      return {\n        clear: clear2,\n        isSet: isSet2,\n        get: get2,\n        set: set3\n      };\n    };\n    const destroyable = () => singleton((s2) => s2.destroy());\n    const unbindable = () => singleton((s2) => s2.unbind());\n    const value$2 = () => {\n      const subject = singleton(noop);\n      const on2 = (f2) => subject.get().each(f2);\n      return {\n        ...subject,\n        on: on2\n      };\n    };\n    const filter = always;\n    const bind = (element2, event, handler) => bind$2(element2, event, filter, handler);\n    const capture = (element2, event, handler) => capture$1(element2, event, filter, handler);\n    const fromRawEvent = fromRawEvent$1;\n    const properties = [\n      \"top\",\n      \"bottom\",\n      \"right\",\n      \"left\"\n    ];\n    const timerAttr = \"data-alloy-transition-timer\";\n    const isTransitioning$1 = (element2, transition) => hasAll(element2, transition.classes);\n    const shouldApplyTransitionCss = (transition, decision, lastPlacement) => {\n      return lastPlacement.exists((placer) => {\n        const mode = transition.mode;\n        return mode === \"all\" ? true : placer[mode] !== decision[mode];\n      });\n    };\n    const hasChanges = (position2, intermediate) => {\n      const round2 = (value2) => parseFloat(value2).toFixed(3);\n      return find$4(intermediate, (value2, key) => {\n        const newValue = position2[key].map(round2);\n        const val = value2.map(round2);\n        return !equals(newValue, val);\n      }).isSome();\n    };\n    const getTransitionDuration = (element2) => {\n      const get2 = (name2) => {\n        const style = get$e(element2, name2);\n        const times = style.split(/\\s*,\\s*/);\n        return filter$2(times, isNotEmpty);\n      };\n      const parse2 = (value2) => {\n        if (isString2(value2) && /^[\\d.]+/.test(value2)) {\n          const num = parseFloat(value2);\n          return endsWith(value2, \"ms\") ? num : num * 1e3;\n        } else {\n          return 0;\n        }\n      };\n      const delay = get2(\"transition-delay\");\n      const duration = get2(\"transition-duration\");\n      return foldl(duration, (acc, dur, i3) => {\n        const time = parse2(delay[i3]) + parse2(dur);\n        return Math.max(acc, time);\n      }, 0);\n    };\n    const setupTransitionListeners = (element2, transition) => {\n      const transitionEnd = unbindable();\n      const transitionCancel = unbindable();\n      let timer;\n      const isSourceTransition = (e2) => {\n        var _a3;\n        const pseudoElement = (_a3 = e2.raw.pseudoElement) !== null && _a3 !== void 0 ? _a3 : \"\";\n        return eq2(e2.target, element2) && isEmpty2(pseudoElement) && contains$2(properties, e2.raw.propertyName);\n      };\n      const transitionDone = (e2) => {\n        if (isNullable(e2) || isSourceTransition(e2)) {\n          transitionEnd.clear();\n          transitionCancel.clear();\n          const type2 = e2 === null || e2 === void 0 ? void 0 : e2.raw.type;\n          if (isNullable(type2) || type2 === transitionend()) {\n            clearTimeout(timer);\n            remove$7(element2, timerAttr);\n            remove$1(element2, transition.classes);\n          }\n        }\n      };\n      const transitionStart = bind(element2, transitionstart(), (e2) => {\n        if (isSourceTransition(e2)) {\n          transitionStart.unbind();\n          transitionEnd.set(bind(element2, transitionend(), transitionDone));\n          transitionCancel.set(bind(element2, transitioncancel(), transitionDone));\n        }\n      });\n      const duration = getTransitionDuration(element2);\n      requestAnimationFrame(() => {\n        timer = setTimeout(transitionDone, duration + 17);\n        set$9(element2, timerAttr, timer);\n      });\n    };\n    const startTransitioning = (element2, transition) => {\n      add$1(element2, transition.classes);\n      getOpt(element2, timerAttr).each((timerId) => {\n        clearTimeout(parseInt(timerId, 10));\n        remove$7(element2, timerAttr);\n      });\n      setupTransitionListeners(element2, transition);\n    };\n    const applyTransitionCss = (element2, origin, position2, transition, decision, lastPlacement) => {\n      const shouldTransition = shouldApplyTransitionCss(transition, decision, lastPlacement);\n      if (shouldTransition || isTransitioning$1(element2, transition)) {\n        set$8(element2, \"position\", position2.position);\n        const rect2 = toBox(origin, element2);\n        const intermediatePosition = reposition(origin, {\n          ...decision,\n          rect: rect2\n        });\n        const intermediateCssOptions = mapToObject(properties, (prop) => intermediatePosition[prop]);\n        if (hasChanges(position2, intermediateCssOptions)) {\n          setOptions(element2, intermediateCssOptions);\n          if (shouldTransition) {\n            startTransitioning(element2, transition);\n          }\n          reflow(element2);\n        }\n      } else {\n        remove$1(element2, transition.classes);\n      }\n    };\n    const elementSize = (p2) => ({\n      width: getOuter$1(p2),\n      height: getOuter$2(p2)\n    });\n    const layout = (anchorBox, element2, bubbles, options) => {\n      remove$6(element2, \"max-height\");\n      remove$6(element2, \"max-width\");\n      const elementBox = elementSize(element2);\n      return attempts(element2, options.preference, anchorBox, elementBox, bubbles, options.bounds);\n    };\n    const setClasses = (element2, decision) => {\n      const classInfo = decision.classes;\n      remove$1(element2, classInfo.off);\n      add$1(element2, classInfo.on);\n    };\n    const setHeight = (element2, decision, options) => {\n      const maxHeightFunction = options.maxHeightFunction;\n      maxHeightFunction(element2, decision.maxHeight);\n    };\n    const setWidth = (element2, decision, options) => {\n      const maxWidthFunction = options.maxWidthFunction;\n      maxWidthFunction(element2, decision.maxWidth);\n    };\n    const position$2 = (element2, decision, options) => {\n      const positionCss = reposition(options.origin, decision);\n      options.transition.each((transition) => {\n        applyTransitionCss(element2, options.origin, positionCss, transition, decision, options.lastPlacement);\n      });\n      applyPositionCss(element2, positionCss);\n    };\n    const setPlacement = (element2, decision) => {\n      setPlacement$1(element2, decision.placement);\n    };\n    const setMaxHeight = (element2, maxHeight) => {\n      setMax$1(element2, Math.floor(maxHeight));\n    };\n    const anchored = constant$1((element2, available) => {\n      setMaxHeight(element2, available);\n      setAll(element2, {\n        \"overflow-x\": \"hidden\",\n        \"overflow-y\": \"auto\"\n      });\n    });\n    const expandable$1 = constant$1((element2, available) => {\n      setMaxHeight(element2, available);\n    });\n    const defaultOr = (options, key, dephault) => options[key] === void 0 ? dephault : options[key];\n    const simple = (anchor2, element2, bubble, layouts2, lastPlacement, getBounds2, overrideOptions, transition) => {\n      const maxHeightFunction = defaultOr(overrideOptions, \"maxHeightFunction\", anchored());\n      const maxWidthFunction = defaultOr(overrideOptions, \"maxWidthFunction\", noop);\n      const anchorBox = anchor2.anchorBox;\n      const origin = anchor2.origin;\n      const options = {\n        bounds: viewport(origin, getBounds2),\n        origin,\n        preference: layouts2,\n        maxHeightFunction,\n        maxWidthFunction,\n        lastPlacement,\n        transition\n      };\n      return go(anchorBox, element2, bubble, options);\n    };\n    const go = (anchorBox, element2, bubble, options) => {\n      const decision = layout(anchorBox, element2, bubble, options);\n      position$2(element2, decision, options);\n      setPlacement(element2, decision);\n      setClasses(element2, decision);\n      setHeight(element2, decision, options);\n      setWidth(element2, decision, options);\n      return {\n        layout: decision.layout,\n        placement: decision.placement\n      };\n    };\n    const allAlignments = [\n      \"valignCentre\",\n      \"alignLeft\",\n      \"alignRight\",\n      \"alignCentre\",\n      \"top\",\n      \"bottom\",\n      \"left\",\n      \"right\",\n      \"inset\"\n    ];\n    const nu$5 = (xOffset, yOffset, classes2, insetModifier = 1) => {\n      const insetXOffset = xOffset * insetModifier;\n      const insetYOffset = yOffset * insetModifier;\n      const getClasses2 = (prop) => get$g(classes2, prop).getOr([]);\n      const make2 = (xDelta, yDelta, alignmentsOn) => {\n        const alignmentsOff = difference(allAlignments, alignmentsOn);\n        return {\n          offset: SugarPosition(xDelta, yDelta),\n          classesOn: bind$3(alignmentsOn, getClasses2),\n          classesOff: bind$3(alignmentsOff, getClasses2)\n        };\n      };\n      return {\n        southeast: () => make2(-xOffset, yOffset, [\n          \"top\",\n          \"alignLeft\"\n        ]),\n        southwest: () => make2(xOffset, yOffset, [\n          \"top\",\n          \"alignRight\"\n        ]),\n        south: () => make2(-xOffset / 2, yOffset, [\n          \"top\",\n          \"alignCentre\"\n        ]),\n        northeast: () => make2(-xOffset, -yOffset, [\n          \"bottom\",\n          \"alignLeft\"\n        ]),\n        northwest: () => make2(xOffset, -yOffset, [\n          \"bottom\",\n          \"alignRight\"\n        ]),\n        north: () => make2(-xOffset / 2, -yOffset, [\n          \"bottom\",\n          \"alignCentre\"\n        ]),\n        east: () => make2(xOffset, -yOffset / 2, [\n          \"valignCentre\",\n          \"left\"\n        ]),\n        west: () => make2(-xOffset, -yOffset / 2, [\n          \"valignCentre\",\n          \"right\"\n        ]),\n        insetNortheast: () => make2(insetXOffset, insetYOffset, [\n          \"top\",\n          \"alignLeft\",\n          \"inset\"\n        ]),\n        insetNorthwest: () => make2(-insetXOffset, insetYOffset, [\n          \"top\",\n          \"alignRight\",\n          \"inset\"\n        ]),\n        insetNorth: () => make2(-insetXOffset / 2, insetYOffset, [\n          \"top\",\n          \"alignCentre\",\n          \"inset\"\n        ]),\n        insetSoutheast: () => make2(insetXOffset, -insetYOffset, [\n          \"bottom\",\n          \"alignLeft\",\n          \"inset\"\n        ]),\n        insetSouthwest: () => make2(-insetXOffset, -insetYOffset, [\n          \"bottom\",\n          \"alignRight\",\n          \"inset\"\n        ]),\n        insetSouth: () => make2(-insetXOffset / 2, -insetYOffset, [\n          \"bottom\",\n          \"alignCentre\",\n          \"inset\"\n        ]),\n        insetEast: () => make2(-insetXOffset, -insetYOffset / 2, [\n          \"valignCentre\",\n          \"right\",\n          \"inset\"\n        ]),\n        insetWest: () => make2(insetXOffset, -insetYOffset / 2, [\n          \"valignCentre\",\n          \"left\",\n          \"inset\"\n        ])\n      };\n    };\n    const fallback = () => nu$5(0, 0, {});\n    const nu$4 = identity2;\n    const onDirection = (isLtr, isRtl) => (element2) => getDirection(element2) === \"rtl\" ? isRtl : isLtr;\n    const getDirection = (element2) => get$e(element2, \"direction\") === \"rtl\" ? \"rtl\" : \"ltr\";\n    var AttributeValue;\n    (function(AttributeValue2) {\n      AttributeValue2[\"TopToBottom\"] = \"toptobottom\";\n      AttributeValue2[\"BottomToTop\"] = \"bottomtotop\";\n    })(AttributeValue || (AttributeValue = {}));\n    const Attribute = \"data-alloy-vertical-dir\";\n    const isBottomToTopDir = (el) => closest$2(el, (current) => isElement$1(current) && get$f(current, \"data-alloy-vertical-dir\") === AttributeValue.BottomToTop);\n    const schema$y = () => optionObjOf(\"layouts\", [\n      required$1(\"onLtr\"),\n      required$1(\"onRtl\"),\n      option$3(\"onBottomLtr\"),\n      option$3(\"onBottomRtl\")\n    ]);\n    const get$5 = (elem, info, defaultLtr, defaultRtl, defaultBottomLtr, defaultBottomRtl, dirElement) => {\n      const isBottomToTop = dirElement.map(isBottomToTopDir).getOr(false);\n      const customLtr = info.layouts.map((ls) => ls.onLtr(elem));\n      const customRtl = info.layouts.map((ls) => ls.onRtl(elem));\n      const ltr = isBottomToTop ? info.layouts.bind((ls) => ls.onBottomLtr.map((f3) => f3(elem))).or(customLtr).getOr(defaultBottomLtr) : customLtr.getOr(defaultLtr);\n      const rtl = isBottomToTop ? info.layouts.bind((ls) => ls.onBottomRtl.map((f3) => f3(elem))).or(customRtl).getOr(defaultBottomRtl) : customRtl.getOr(defaultRtl);\n      const f2 = onDirection(ltr, rtl);\n      return f2(elem);\n    };\n    const placement$4 = (component, anchorInfo, origin) => {\n      const hotspot = anchorInfo.hotspot;\n      const anchorBox = toBox(origin, hotspot.element);\n      const layouts2 = get$5(component.element, anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Optional.some(anchorInfo.hotspot.element));\n      return Optional.some(nu$4({\n        anchorBox,\n        bubble: anchorInfo.bubble.getOr(fallback()),\n        overrides: anchorInfo.overrides,\n        layouts: layouts2,\n        placer: Optional.none()\n      }));\n    };\n    var HotspotAnchor = [\n      required$1(\"hotspot\"),\n      option$3(\"bubble\"),\n      defaulted(\"overrides\", {}),\n      schema$y(),\n      output$1(\"placement\", placement$4)\n    ];\n    const placement$3 = (component, anchorInfo, origin) => {\n      const pos = translate$2(origin, anchorInfo.x, anchorInfo.y);\n      const anchorBox = bounds(pos.left, pos.top, anchorInfo.width, anchorInfo.height);\n      const layouts2 = get$5(component.element, anchorInfo, all$1(), allRtl$1(), all$1(), allRtl$1(), Optional.none());\n      return Optional.some(nu$4({\n        anchorBox,\n        bubble: anchorInfo.bubble,\n        overrides: anchorInfo.overrides,\n        layouts: layouts2,\n        placer: Optional.none()\n      }));\n    };\n    var MakeshiftAnchor = [\n      required$1(\"x\"),\n      required$1(\"y\"),\n      defaulted(\"height\", 0),\n      defaulted(\"width\", 0),\n      defaulted(\"bubble\", fallback()),\n      defaulted(\"overrides\", {}),\n      schema$y(),\n      output$1(\"placement\", placement$3)\n    ];\n    const adt$7 = Adt.generate([\n      { screen: [\"point\"] },\n      {\n        absolute: [\n          \"point\",\n          \"scrollLeft\",\n          \"scrollTop\"\n        ]\n      }\n    ]);\n    const toFixed = (pos) => pos.fold(identity2, (point2, scrollLeft, scrollTop) => point2.translate(-scrollLeft, -scrollTop));\n    const toAbsolute = (pos) => pos.fold(identity2, identity2);\n    const sum = (points) => foldl(points, (b3, a2) => b3.translate(a2.left, a2.top), SugarPosition(0, 0));\n    const sumAsFixed = (positions) => {\n      const points = map$2(positions, toFixed);\n      return sum(points);\n    };\n    const sumAsAbsolute = (positions) => {\n      const points = map$2(positions, toAbsolute);\n      return sum(points);\n    };\n    const screen = adt$7.screen;\n    const absolute$1 = adt$7.absolute;\n    const getOffset = (component, origin, anchorInfo) => {\n      const win2 = defaultView(anchorInfo.root).dom;\n      const hasSameOwner = (frame) => {\n        const frameOwner = owner$4(frame);\n        const compOwner = owner$4(component.element);\n        return eq2(frameOwner, compOwner);\n      };\n      return Optional.from(win2.frameElement).map(SugarElement.fromDom).filter(hasSameOwner).map(absolute$3);\n    };\n    const getRootPoint = (component, origin, anchorInfo) => {\n      const doc = owner$4(component.element);\n      const outerScroll = get$b(doc);\n      const offset2 = getOffset(component, origin, anchorInfo).getOr(outerScroll);\n      return absolute$1(offset2, outerScroll.left, outerScroll.top);\n    };\n    const getBox = (left2, top2, width2, height2) => {\n      const point2 = screen(SugarPosition(left2, top2));\n      return Optional.some(pointed(point2, width2, height2));\n    };\n    const calcNewAnchor = (optBox, rootPoint, anchorInfo, origin, elem) => optBox.map((box2) => {\n      const points = [\n        rootPoint,\n        box2.point\n      ];\n      const topLeft = cata$1(origin, () => sumAsAbsolute(points), () => sumAsAbsolute(points), () => sumAsFixed(points));\n      const anchorBox = rect(topLeft.left, topLeft.top, box2.width, box2.height);\n      const layoutsLtr = anchorInfo.showAbove ? aboveOrBelow() : belowOrAbove();\n      const layoutsRtl = anchorInfo.showAbove ? aboveOrBelowRtl() : belowOrAboveRtl();\n      const layouts2 = get$5(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Optional.none());\n      return nu$4({\n        anchorBox,\n        bubble: anchorInfo.bubble.getOr(fallback()),\n        overrides: anchorInfo.overrides,\n        layouts: layouts2,\n        placer: Optional.none()\n      });\n    });\n    const placement$2 = (component, anchorInfo, origin) => {\n      const rootPoint = getRootPoint(component, origin, anchorInfo);\n      return anchorInfo.node.filter(inBody).bind((target) => {\n        const rect2 = target.dom.getBoundingClientRect();\n        const nodeBox = getBox(rect2.left, rect2.top, rect2.width, rect2.height);\n        const elem = anchorInfo.node.getOr(component.element);\n        return calcNewAnchor(nodeBox, rootPoint, anchorInfo, origin, elem);\n      });\n    };\n    var NodeAnchor = [\n      required$1(\"node\"),\n      required$1(\"root\"),\n      option$3(\"bubble\"),\n      schema$y(),\n      defaulted(\"overrides\", {}),\n      defaulted(\"showAbove\", false),\n      output$1(\"placement\", placement$2)\n    ];\n    const zeroWidth = \"\\uFEFF\";\n    const nbsp = \" \";\n    const create$2 = (start, soffset, finish, foffset) => ({\n      start,\n      soffset,\n      finish,\n      foffset\n    });\n    const SimRange = { create: create$2 };\n    const adt$6 = Adt.generate([\n      { before: [\"element\"] },\n      {\n        on: [\n          \"element\",\n          \"offset\"\n        ]\n      },\n      { after: [\"element\"] }\n    ]);\n    const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n    const getStart$1 = (situ) => situ.fold(identity2, identity2, identity2);\n    const before = adt$6.before;\n    const on$1 = adt$6.on;\n    const after$1 = adt$6.after;\n    const Situ = {\n      before,\n      on: on$1,\n      after: after$1,\n      cata,\n      getStart: getStart$1\n    };\n    const adt$5 = Adt.generate([\n      { domRange: [\"rng\"] },\n      {\n        relative: [\n          \"startSitu\",\n          \"finishSitu\"\n        ]\n      },\n      {\n        exact: [\n          \"start\",\n          \"soffset\",\n          \"finish\",\n          \"foffset\"\n        ]\n      }\n    ]);\n    const exactFromRange = (simRange) => adt$5.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n    const getStart = (selection) => selection.match({\n      domRange: (rng) => SugarElement.fromDom(rng.startContainer),\n      relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n      exact: (start, _soffset, _finish, _foffset) => start\n    });\n    const domRange = adt$5.domRange;\n    const relative = adt$5.relative;\n    const exact = adt$5.exact;\n    const getWin = (selection) => {\n      const start = getStart(selection);\n      return defaultView(start);\n    };\n    const range$1 = SimRange.create;\n    const SimSelection = {\n      domRange,\n      relative,\n      exact,\n      exactFromRange,\n      getWin,\n      range: range$1\n    };\n    const setStart = (rng, situ) => {\n      situ.fold((e2) => {\n        rng.setStartBefore(e2.dom);\n      }, (e2, o2) => {\n        rng.setStart(e2.dom, o2);\n      }, (e2) => {\n        rng.setStartAfter(e2.dom);\n      });\n    };\n    const setFinish = (rng, situ) => {\n      situ.fold((e2) => {\n        rng.setEndBefore(e2.dom);\n      }, (e2, o2) => {\n        rng.setEnd(e2.dom, o2);\n      }, (e2) => {\n        rng.setEndAfter(e2.dom);\n      });\n    };\n    const relativeToNative = (win2, startSitu, finishSitu) => {\n      const range2 = win2.document.createRange();\n      setStart(range2, startSitu);\n      setFinish(range2, finishSitu);\n      return range2;\n    };\n    const exactToNative = (win2, start, soffset, finish, foffset) => {\n      const rng = win2.document.createRange();\n      rng.setStart(start.dom, soffset);\n      rng.setEnd(finish.dom, foffset);\n      return rng;\n    };\n    const toRect = (rect2) => ({\n      left: rect2.left,\n      top: rect2.top,\n      right: rect2.right,\n      bottom: rect2.bottom,\n      width: rect2.width,\n      height: rect2.height\n    });\n    const getFirstRect$1 = (rng) => {\n      const rects = rng.getClientRects();\n      const rect2 = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n      return rect2.width > 0 || rect2.height > 0 ? Optional.some(rect2).map(toRect) : Optional.none();\n    };\n    const getBounds$2 = (rng) => {\n      const rect2 = rng.getBoundingClientRect();\n      return rect2.width > 0 || rect2.height > 0 ? Optional.some(rect2).map(toRect) : Optional.none();\n    };\n    const adt$4 = Adt.generate([\n      {\n        ltr: [\n          \"start\",\n          \"soffset\",\n          \"finish\",\n          \"foffset\"\n        ]\n      },\n      {\n        rtl: [\n          \"start\",\n          \"soffset\",\n          \"finish\",\n          \"foffset\"\n        ]\n      }\n    ]);\n    const fromRange = (win2, type2, range2) => type2(SugarElement.fromDom(range2.startContainer), range2.startOffset, SugarElement.fromDom(range2.endContainer), range2.endOffset);\n    const getRanges = (win2, selection) => selection.match({\n      domRange: (rng) => {\n        return {\n          ltr: constant$1(rng),\n          rtl: Optional.none\n        };\n      },\n      relative: (startSitu, finishSitu) => {\n        return {\n          ltr: cached(() => relativeToNative(win2, startSitu, finishSitu)),\n          rtl: cached(() => Optional.some(relativeToNative(win2, finishSitu, startSitu)))\n        };\n      },\n      exact: (start, soffset, finish, foffset) => {\n        return {\n          ltr: cached(() => exactToNative(win2, start, soffset, finish, foffset)),\n          rtl: cached(() => Optional.some(exactToNative(win2, finish, foffset, start, soffset)))\n        };\n      }\n    });\n    const doDiagnose = (win2, ranges) => {\n      const rng = ranges.ltr();\n      if (rng.collapsed) {\n        const reversed = ranges.rtl().filter((rev) => rev.collapsed === false);\n        return reversed.map((rev) => adt$4.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win2, adt$4.ltr, rng));\n      } else {\n        return fromRange(win2, adt$4.ltr, rng);\n      }\n    };\n    const diagnose = (win2, selection) => {\n      const ranges = getRanges(win2, selection);\n      return doDiagnose(win2, ranges);\n    };\n    const asLtrRange = (win2, selection) => {\n      const diagnosis = diagnose(win2, selection);\n      return diagnosis.match({\n        ltr: (start, soffset, finish, foffset) => {\n          const rng = win2.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 = win2.document.createRange();\n          rng.setStart(finish.dom, foffset);\n          rng.setEnd(start.dom, soffset);\n          return rng;\n        }\n      });\n    };\n    adt$4.ltr;\n    adt$4.rtl;\n    const descendants = (scope, selector) => all$3(selector, scope);\n    const makeRange = (start, soffset, finish, foffset) => {\n      const doc = owner$4(start);\n      const rng = doc.dom.createRange();\n      rng.setStart(start.dom, soffset);\n      rng.setEnd(finish.dom, foffset);\n      return rng;\n    };\n    const after = (start, soffset, finish, foffset) => {\n      const r4 = makeRange(start, soffset, finish, foffset);\n      const same = eq2(start, finish) && soffset === foffset;\n      return r4.collapsed && !same;\n    };\n    const getNativeSelection = (win2) => Optional.from(win2.getSelection());\n    const readRange = (selection) => {\n      if (selection.rangeCount > 0) {\n        const firstRng = selection.getRangeAt(0);\n        const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n        return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n      } else {\n        return Optional.none();\n      }\n    };\n    const doGetExact = (selection) => {\n      if (selection.anchorNode === null || selection.focusNode === null) {\n        return readRange(selection);\n      } else {\n        const anchor2 = SugarElement.fromDom(selection.anchorNode);\n        const focus2 = SugarElement.fromDom(selection.focusNode);\n        return after(anchor2, selection.anchorOffset, focus2, selection.focusOffset) ? Optional.some(SimRange.create(anchor2, selection.anchorOffset, focus2, selection.focusOffset)) : readRange(selection);\n      }\n    };\n    const getExact = (win2) => getNativeSelection(win2).filter((sel) => sel.rangeCount > 0).bind(doGetExact);\n    const getFirstRect = (win2, selection) => {\n      const rng = asLtrRange(win2, selection);\n      return getFirstRect$1(rng);\n    };\n    const getBounds$1 = (win2, selection) => {\n      const rng = asLtrRange(win2, selection);\n      return getBounds$2(rng);\n    };\n    const NodeValue = (is2, name2) => {\n      const get2 = (element2) => {\n        if (!is2(element2)) {\n          throw new Error(\"Can only get \" + name2 + \" value of a \" + name2 + \" node\");\n        }\n        return getOption(element2).getOr(\"\");\n      };\n      const getOption = (element2) => is2(element2) ? Optional.from(element2.dom.nodeValue) : Optional.none();\n      const set3 = (element2, value2) => {\n        if (!is2(element2)) {\n          throw new Error(\"Can only set raw \" + name2 + \" value of a \" + name2 + \" node\");\n        }\n        element2.dom.nodeValue = value2;\n      };\n      return {\n        get: get2,\n        getOption,\n        set: set3\n      };\n    };\n    const api = NodeValue(isText, \"text\");\n    const get$4 = (element2) => api.get(element2);\n    const point = (element2, offset2) => ({\n      element: element2,\n      offset: offset2\n    });\n    const descendOnce$1 = (element2, offset2) => {\n      const children$1 = children(element2);\n      if (children$1.length === 0) {\n        return point(element2, offset2);\n      } else if (offset2 < children$1.length) {\n        return point(children$1[offset2], 0);\n      } else {\n        const last2 = children$1[children$1.length - 1];\n        const len = isText(last2) ? get$4(last2).length : children(last2).length;\n        return point(last2, len);\n      }\n    };\n    const descendOnce = (element2, offset2) => isText(element2) ? point(element2, offset2) : descendOnce$1(element2, offset2);\n    const getAnchorSelection = (win2, anchorInfo) => {\n      const getSelection = anchorInfo.getSelection.getOrThunk(() => () => getExact(win2));\n      return getSelection().map((sel) => {\n        const modStart = descendOnce(sel.start, sel.soffset);\n        const modFinish = descendOnce(sel.finish, sel.foffset);\n        return SimSelection.range(modStart.element, modStart.offset, modFinish.element, modFinish.offset);\n      });\n    };\n    const placement$1 = (component, anchorInfo, origin) => {\n      const win2 = defaultView(anchorInfo.root).dom;\n      const rootPoint = getRootPoint(component, origin, anchorInfo);\n      const selectionBox = getAnchorSelection(win2, anchorInfo).bind((sel) => {\n        const optRect = getBounds$1(win2, SimSelection.exactFromRange(sel)).orThunk(() => {\n          const x2 = SugarElement.fromText(zeroWidth);\n          before$1(sel.start, x2);\n          const rect2 = getFirstRect(win2, SimSelection.exact(x2, 0, x2, 1));\n          remove$5(x2);\n          return rect2;\n        });\n        return optRect.bind((rawRect) => getBox(rawRect.left, rawRect.top, rawRect.width, rawRect.height));\n      });\n      const targetElement = getAnchorSelection(win2, anchorInfo).bind((sel) => isElement$1(sel.start) ? Optional.some(sel.start) : parentElement(sel.start));\n      const elem = targetElement.getOr(component.element);\n      return calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem);\n    };\n    var SelectionAnchor = [\n      option$3(\"getSelection\"),\n      required$1(\"root\"),\n      option$3(\"bubble\"),\n      schema$y(),\n      defaulted(\"overrides\", {}),\n      defaulted(\"showAbove\", false),\n      output$1(\"placement\", placement$1)\n    ];\n    const labelPrefix$1 = \"link-layout\";\n    const eastX = (anchor2) => anchor2.x + anchor2.width;\n    const westX = (anchor2, element2) => anchor2.x - element2.width;\n    const northY$1 = (anchor2, element2) => anchor2.y - element2.height + anchor2.height;\n    const southY$1 = (anchor2) => anchor2.y;\n    const southeast$1 = (anchor2, element2, bubbles) => nu$6(eastX(anchor2), southY$1(anchor2), bubbles.southeast(), southeast$3(), \"southeast\", boundsRestriction(anchor2, {\n      left: 0,\n      top: 2\n    }), labelPrefix$1);\n    const southwest$1 = (anchor2, element2, bubbles) => nu$6(westX(anchor2, element2), southY$1(anchor2), bubbles.southwest(), southwest$3(), \"southwest\", boundsRestriction(anchor2, {\n      right: 1,\n      top: 2\n    }), labelPrefix$1);\n    const northeast$1 = (anchor2, element2, bubbles) => nu$6(eastX(anchor2), northY$1(anchor2, element2), bubbles.northeast(), northeast$3(), \"northeast\", boundsRestriction(anchor2, {\n      left: 0,\n      bottom: 3\n    }), labelPrefix$1);\n    const northwest$1 = (anchor2, element2, bubbles) => nu$6(westX(anchor2, element2), northY$1(anchor2, element2), bubbles.northwest(), northwest$3(), \"northwest\", boundsRestriction(anchor2, {\n      right: 1,\n      bottom: 3\n    }), labelPrefix$1);\n    const all = () => [\n      southeast$1,\n      southwest$1,\n      northeast$1,\n      northwest$1\n    ];\n    const allRtl = () => [\n      southwest$1,\n      southeast$1,\n      northwest$1,\n      northeast$1\n    ];\n    const placement = (component, submenuInfo, origin) => {\n      const anchorBox = toBox(origin, submenuInfo.item.element);\n      const layouts2 = get$5(component.element, submenuInfo, all(), allRtl(), all(), allRtl(), Optional.none());\n      return Optional.some(nu$4({\n        anchorBox,\n        bubble: fallback(),\n        overrides: submenuInfo.overrides,\n        layouts: layouts2,\n        placer: Optional.none()\n      }));\n    };\n    var SubmenuAnchor = [\n      required$1(\"item\"),\n      schema$y(),\n      defaulted(\"overrides\", {}),\n      output$1(\"placement\", placement)\n    ];\n    var AnchorSchema = choose$1(\"type\", {\n      selection: SelectionAnchor,\n      node: NodeAnchor,\n      hotspot: HotspotAnchor,\n      submenu: SubmenuAnchor,\n      makeshift: MakeshiftAnchor\n    });\n    const TransitionSchema = [\n      requiredArrayOf(\"classes\", string2),\n      defaultedStringEnum(\"mode\", \"all\", [\n        \"all\",\n        \"layout\",\n        \"placement\"\n      ])\n    ];\n    const PositionSchema = [\n      defaulted(\"useFixed\", never),\n      option$3(\"getBounds\")\n    ];\n    const PlacementSchema = [\n      requiredOf(\"anchor\", AnchorSchema),\n      optionObjOf(\"transition\", TransitionSchema)\n    ];\n    const getFixedOrigin = () => {\n      const html = document.documentElement;\n      return fixed$1(0, 0, html.clientWidth, html.clientHeight);\n    };\n    const getRelativeOrigin = (component) => {\n      const position2 = absolute$3(component.element);\n      const bounds2 = component.element.dom.getBoundingClientRect();\n      return relative$1(position2.left, position2.top, bounds2.width, bounds2.height);\n    };\n    const place = (component, origin, anchoring, getBounds2, placee, lastPlace, transition) => {\n      const anchor2 = box(anchoring.anchorBox, origin);\n      return simple(anchor2, placee.element, anchoring.bubble, anchoring.layouts, lastPlace, getBounds2, anchoring.overrides, transition);\n    };\n    const position$1 = (component, posConfig, posState, placee, placementSpec) => {\n      positionWithin(component, posConfig, posState, placee, placementSpec, Optional.none());\n    };\n    const positionWithin = (component, posConfig, posState, placee, placementSpec, boxElement) => {\n      const boundsBox = boxElement.map(box$1);\n      return positionWithinBounds(component, posConfig, posState, placee, placementSpec, boundsBox);\n    };\n    const positionWithinBounds = (component, posConfig, posState, placee, placementSpec, bounds2) => {\n      const placeeDetail = asRawOrDie$1(\"placement.info\", objOf(PlacementSchema), placementSpec);\n      const anchorage = placeeDetail.anchor;\n      const element2 = placee.element;\n      const placeeState = posState.get(placee.uid);\n      preserve$1(() => {\n        set$8(element2, \"position\", \"fixed\");\n        const oldVisibility = getRaw(element2, \"visibility\");\n        set$8(element2, \"visibility\", \"hidden\");\n        const origin = posConfig.useFixed() ? getFixedOrigin() : getRelativeOrigin(component);\n        const placer = anchorage.placement;\n        const getBounds2 = bounds2.map(constant$1).or(posConfig.getBounds);\n        placer(component, anchorage, origin).each((anchoring) => {\n          const doPlace = anchoring.placer.getOr(place);\n          const newState = doPlace(component, origin, anchoring, getBounds2, placee, placeeState, placeeDetail.transition);\n          posState.set(placee.uid, newState);\n        });\n        oldVisibility.fold(() => {\n          remove$6(element2, \"visibility\");\n        }, (vis) => {\n          set$8(element2, \"visibility\", vis);\n        });\n        if (getRaw(element2, \"left\").isNone() && getRaw(element2, \"top\").isNone() && getRaw(element2, \"right\").isNone() && getRaw(element2, \"bottom\").isNone() && is$1(getRaw(element2, \"position\"), \"fixed\")) {\n          remove$6(element2, \"position\");\n        }\n      }, element2);\n    };\n    const getMode = (component, pConfig, _pState) => pConfig.useFixed() ? \"fixed\" : \"absolute\";\n    const reset$1 = (component, pConfig, posState, placee) => {\n      const element2 = placee.element;\n      each$1([\n        \"position\",\n        \"left\",\n        \"right\",\n        \"top\",\n        \"bottom\"\n      ], (prop) => remove$6(element2, prop));\n      reset$2(element2);\n      posState.clear(placee.uid);\n    };\n    var PositionApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      position: position$1,\n      positionWithin,\n      positionWithinBounds,\n      getMode,\n      reset: reset$1\n    });\n    const init$g = () => {\n      let state = {};\n      const set3 = (id, data) => {\n        state[id] = data;\n      };\n      const get2 = (id) => get$g(state, id);\n      const clear2 = (id) => {\n        if (isNonNullable(id)) {\n          delete state[id];\n        } else {\n          state = {};\n        }\n      };\n      return nu$8({\n        readState: () => state,\n        clear: clear2,\n        set: set3,\n        get: get2\n      });\n    };\n    var PositioningState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      init: init$g\n    });\n    const Positioning = create$3({\n      fields: PositionSchema,\n      name: \"positioning\",\n      active: ActivePosition,\n      apis: PositionApis,\n      state: PositioningState\n    });\n    const isConnected2 = (comp) => comp.getSystem().isConnected();\n    const fireDetaching = (component) => {\n      emit(component, detachedFromDom());\n      const children2 = component.components();\n      each$1(children2, fireDetaching);\n    };\n    const fireAttaching = (component) => {\n      const children2 = component.components();\n      each$1(children2, fireAttaching);\n      emit(component, attachedToDom());\n    };\n    const virtualAttach = (parent2, child2) => {\n      parent2.getSystem().addToWorld(child2);\n      if (inBody(parent2.element)) {\n        fireAttaching(child2);\n      }\n    };\n    const virtualDetach = (comp) => {\n      fireDetaching(comp);\n      comp.getSystem().removeFromWorld(comp);\n    };\n    const attach$1 = (parent2, child2) => {\n      append$2(parent2.element, child2.element);\n    };\n    const detachChildren$1 = (component) => {\n      each$1(component.components(), (childComp) => remove$5(childComp.element));\n      empty(component.element);\n      component.syncComponents();\n    };\n    const replaceChildren = (component, newSpecs, buildNewChildren) => {\n      const subs2 = component.components();\n      detachChildren$1(component);\n      const newChildren = buildNewChildren(newSpecs);\n      const deleted = difference(subs2, newChildren);\n      each$1(deleted, (comp) => {\n        fireDetaching(comp);\n        component.getSystem().removeFromWorld(comp);\n      });\n      each$1(newChildren, (childComp) => {\n        if (!isConnected2(childComp)) {\n          component.getSystem().addToWorld(childComp);\n          attach$1(component, childComp);\n          if (inBody(component.element)) {\n            fireAttaching(childComp);\n          }\n        } else {\n          attach$1(component, childComp);\n        }\n      });\n      component.syncComponents();\n    };\n    const virtualReplaceChildren = (component, newSpecs, buildNewChildren) => {\n      const subs2 = component.components();\n      const existingComps = bind$3(newSpecs, (spec) => getPremade(spec).toArray());\n      each$1(subs2, (childComp) => {\n        if (!contains$2(existingComps, childComp)) {\n          virtualDetach(childComp);\n        }\n      });\n      const newChildren = buildNewChildren(newSpecs);\n      const deleted = difference(subs2, newChildren);\n      each$1(deleted, (deletedComp) => {\n        if (isConnected2(deletedComp)) {\n          virtualDetach(deletedComp);\n        }\n      });\n      each$1(newChildren, (childComp) => {\n        if (!isConnected2(childComp)) {\n          virtualAttach(component, childComp);\n        }\n      });\n      component.syncComponents();\n    };\n    const attach = (parent2, child2) => {\n      attachWith(parent2, child2, append$2);\n    };\n    const attachWith = (parent2, child2, insertion) => {\n      parent2.getSystem().addToWorld(child2);\n      insertion(parent2.element, child2.element);\n      if (inBody(parent2.element)) {\n        fireAttaching(child2);\n      }\n      parent2.syncComponents();\n    };\n    const doDetach = (component) => {\n      fireDetaching(component);\n      remove$5(component.element);\n      component.getSystem().removeFromWorld(component);\n    };\n    const detach = (component) => {\n      const parent$1 = parent(component.element).bind((p2) => component.getSystem().getByDom(p2).toOptional());\n      doDetach(component);\n      parent$1.each((p2) => {\n        p2.syncComponents();\n      });\n    };\n    const detachChildren = (component) => {\n      const subs2 = component.components();\n      each$1(subs2, doDetach);\n      empty(component.element);\n      component.syncComponents();\n    };\n    const attachSystem = (element2, guiSystem) => {\n      attachSystemWith(element2, guiSystem, append$2);\n    };\n    const attachSystemAfter = (element2, guiSystem) => {\n      attachSystemWith(element2, guiSystem, after$2);\n    };\n    const attachSystemWith = (element2, guiSystem, inserter) => {\n      inserter(element2, guiSystem.element);\n      const children$1 = children(guiSystem.element);\n      each$1(children$1, (child2) => {\n        guiSystem.getByDom(child2).each(fireAttaching);\n      });\n    };\n    const detachSystem = (guiSystem) => {\n      const children$1 = children(guiSystem.element);\n      each$1(children$1, (child2) => {\n        guiSystem.getByDom(child2).each(fireDetaching);\n      });\n      remove$5(guiSystem.element);\n    };\n    const rebuild = (sandbox, sConfig, sState, data) => {\n      sState.get().each((_data) => {\n        detachChildren(sandbox);\n      });\n      const point2 = sConfig.getAttachPoint(sandbox);\n      attach(point2, sandbox);\n      const built = sandbox.getSystem().build(data);\n      attach(sandbox, built);\n      sState.set(built);\n      return built;\n    };\n    const open$1 = (sandbox, sConfig, sState, data) => {\n      const newState = rebuild(sandbox, sConfig, sState, data);\n      sConfig.onOpen(sandbox, newState);\n      return newState;\n    };\n    const setContent = (sandbox, sConfig, sState, data) => sState.get().map(() => rebuild(sandbox, sConfig, sState, data));\n    const openWhileCloaked = (sandbox, sConfig, sState, data, transaction) => {\n      cloak(sandbox, sConfig);\n      open$1(sandbox, sConfig, sState, data);\n      transaction();\n      decloak(sandbox, sConfig);\n    };\n    const close$1 = (sandbox, sConfig, sState) => {\n      sState.get().each((data) => {\n        detachChildren(sandbox);\n        detach(sandbox);\n        sConfig.onClose(sandbox, data);\n        sState.clear();\n      });\n    };\n    const isOpen$1 = (_sandbox, _sConfig, sState) => sState.isOpen();\n    const isPartOf = (sandbox, sConfig, sState, queryElem) => isOpen$1(sandbox, sConfig, sState) && sState.get().exists((data) => sConfig.isPartOf(sandbox, data, queryElem));\n    const getState$2 = (_sandbox, _sConfig, sState) => sState.get();\n    const store2 = (sandbox, cssKey, attr, newValue) => {\n      getRaw(sandbox.element, cssKey).fold(() => {\n        remove$7(sandbox.element, attr);\n      }, (v2) => {\n        set$9(sandbox.element, attr, v2);\n      });\n      set$8(sandbox.element, cssKey, newValue);\n    };\n    const restore = (sandbox, cssKey, attr) => {\n      getOpt(sandbox.element, attr).fold(() => remove$6(sandbox.element, cssKey), (oldValue) => set$8(sandbox.element, cssKey, oldValue));\n    };\n    const cloak = (sandbox, sConfig, _sState) => {\n      const sink = sConfig.getAttachPoint(sandbox);\n      set$8(sandbox.element, \"position\", Positioning.getMode(sink));\n      store2(sandbox, \"visibility\", sConfig.cloakVisibilityAttr, \"hidden\");\n    };\n    const hasPosition = (element2) => exists([\n      \"top\",\n      \"left\",\n      \"right\",\n      \"bottom\"\n    ], (pos) => getRaw(element2, pos).isSome());\n    const decloak = (sandbox, sConfig, _sState) => {\n      if (!hasPosition(sandbox.element)) {\n        remove$6(sandbox.element, \"position\");\n      }\n      restore(sandbox, \"visibility\", sConfig.cloakVisibilityAttr);\n    };\n    var SandboxApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      cloak,\n      decloak,\n      open: open$1,\n      openWhileCloaked,\n      close: close$1,\n      isOpen: isOpen$1,\n      isPartOf,\n      getState: getState$2,\n      setContent\n    });\n    const events$g = (sandboxConfig, sandboxState) => derive$2([run$1(sandboxClose(), (sandbox, _simulatedEvent) => {\n      close$1(sandbox, sandboxConfig, sandboxState);\n    })]);\n    var ActiveSandbox = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      events: events$g\n    });\n    var SandboxSchema = [\n      onHandler(\"onOpen\"),\n      onHandler(\"onClose\"),\n      required$1(\"isPartOf\"),\n      required$1(\"getAttachPoint\"),\n      defaulted(\"cloakVisibilityAttr\", \"data-precloak-visibility\")\n    ];\n    const init$f = () => {\n      const contents2 = value$2();\n      const readState = constant$1(\"not-implemented\");\n      return nu$8({\n        readState,\n        isOpen: contents2.isSet,\n        clear: contents2.clear,\n        set: contents2.set,\n        get: contents2.get\n      });\n    };\n    var SandboxState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      init: init$f\n    });\n    const Sandboxing = create$3({\n      fields: SandboxSchema,\n      name: \"sandboxing\",\n      active: ActiveSandbox,\n      apis: SandboxApis,\n      state: SandboxState\n    });\n    const dismissPopups = constant$1(\"dismiss.popups\");\n    const repositionPopups = constant$1(\"reposition.popups\");\n    const mouseReleased = constant$1(\"mouse.released\");\n    const schema$x = objOfOnly([\n      defaulted(\"isExtraPart\", never),\n      optionObjOf(\"fireEventInstead\", [defaulted(\"event\", dismissRequested())])\n    ]);\n    const receivingChannel$1 = (rawSpec) => {\n      const detail = asRawOrDie$1(\"Dismissal\", schema$x, rawSpec);\n      return {\n        [dismissPopups()]: {\n          schema: objOfOnly([required$1(\"target\")]),\n          onReceive: (sandbox, data) => {\n            if (Sandboxing.isOpen(sandbox)) {\n              const isPart = Sandboxing.isPartOf(sandbox, data.target) || detail.isExtraPart(sandbox, data.target);\n              if (!isPart) {\n                detail.fireEventInstead.fold(() => Sandboxing.close(sandbox), (fe) => emit(sandbox, fe.event));\n              }\n            }\n          }\n        }\n      };\n    };\n    const schema$w = objOfOnly([\n      optionObjOf(\"fireEventInstead\", [defaulted(\"event\", repositionRequested())]),\n      requiredFunction(\"doReposition\")\n    ]);\n    const receivingChannel = (rawSpec) => {\n      const detail = asRawOrDie$1(\"Reposition\", schema$w, rawSpec);\n      return {\n        [repositionPopups()]: {\n          onReceive: (sandbox) => {\n            if (Sandboxing.isOpen(sandbox)) {\n              detail.fireEventInstead.fold(() => detail.doReposition(sandbox), (fe) => emit(sandbox, fe.event));\n            }\n          }\n        }\n      };\n    };\n    const onLoad$5 = (component, repConfig, repState) => {\n      repConfig.store.manager.onLoad(component, repConfig, repState);\n    };\n    const onUnload$2 = (component, repConfig, repState) => {\n      repConfig.store.manager.onUnload(component, repConfig, repState);\n    };\n    const setValue$3 = (component, repConfig, repState, data) => {\n      repConfig.store.manager.setValue(component, repConfig, repState, data);\n    };\n    const getValue$3 = (component, repConfig, repState) => repConfig.store.manager.getValue(component, repConfig, repState);\n    const getState$1 = (component, repConfig, repState) => repState;\n    var RepresentApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      onLoad: onLoad$5,\n      onUnload: onUnload$2,\n      setValue: setValue$3,\n      getValue: getValue$3,\n      getState: getState$1\n    });\n    const events$f = (repConfig, repState) => {\n      const es = repConfig.resetOnDom ? [\n        runOnAttached((comp, _se) => {\n          onLoad$5(comp, repConfig, repState);\n        }),\n        runOnDetached((comp, _se) => {\n          onUnload$2(comp, repConfig, repState);\n        })\n      ] : [loadEvent(repConfig, repState, onLoad$5)];\n      return derive$2(es);\n    };\n    var ActiveRepresenting = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      events: events$f\n    });\n    const memory$1 = () => {\n      const data = Cell(null);\n      const readState = () => ({\n        mode: \"memory\",\n        value: data.get()\n      });\n      const isNotSet = () => data.get() === null;\n      const clear2 = () => {\n        data.set(null);\n      };\n      return nu$8({\n        set: data.set,\n        get: data.get,\n        isNotSet,\n        clear: clear2,\n        readState\n      });\n    };\n    const manual = () => {\n      const readState = noop;\n      return nu$8({ readState });\n    };\n    const dataset = () => {\n      const dataByValue = Cell({});\n      const dataByText = Cell({});\n      const readState = () => ({\n        mode: \"dataset\",\n        dataByValue: dataByValue.get(),\n        dataByText: dataByText.get()\n      });\n      const clear2 = () => {\n        dataByValue.set({});\n        dataByText.set({});\n      };\n      const lookup2 = (itemString) => get$g(dataByValue.get(), itemString).orThunk(() => get$g(dataByText.get(), itemString));\n      const update = (items) => {\n        const currentDataByValue = dataByValue.get();\n        const currentDataByText = dataByText.get();\n        const newDataByValue = {};\n        const newDataByText = {};\n        each$1(items, (item2) => {\n          newDataByValue[item2.value] = item2;\n          get$g(item2, \"meta\").each((meta) => {\n            get$g(meta, \"text\").each((text3) => {\n              newDataByText[text3] = item2;\n            });\n          });\n        });\n        dataByValue.set({\n          ...currentDataByValue,\n          ...newDataByValue\n        });\n        dataByText.set({\n          ...currentDataByText,\n          ...newDataByText\n        });\n      };\n      return nu$8({\n        readState,\n        lookup: lookup2,\n        update,\n        clear: clear2\n      });\n    };\n    const init$e = (spec) => spec.store.manager.state(spec);\n    var RepresentState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      memory: memory$1,\n      dataset,\n      manual,\n      init: init$e\n    });\n    const setValue$2 = (component, repConfig, repState, data) => {\n      const store3 = repConfig.store;\n      repState.update([data]);\n      store3.setValue(component, data);\n      repConfig.onSetValue(component, data);\n    };\n    const getValue$2 = (component, repConfig, repState) => {\n      const store3 = repConfig.store;\n      const key = store3.getDataKey(component);\n      return repState.lookup(key).getOrThunk(() => store3.getFallbackEntry(key));\n    };\n    const onLoad$4 = (component, repConfig, repState) => {\n      const store3 = repConfig.store;\n      store3.initialValue.each((data) => {\n        setValue$2(component, repConfig, repState, data);\n      });\n    };\n    const onUnload$1 = (component, repConfig, repState) => {\n      repState.clear();\n    };\n    var DatasetStore = [\n      option$3(\"initialValue\"),\n      required$1(\"getFallbackEntry\"),\n      required$1(\"getDataKey\"),\n      required$1(\"setValue\"),\n      output$1(\"manager\", {\n        setValue: setValue$2,\n        getValue: getValue$2,\n        onLoad: onLoad$4,\n        onUnload: onUnload$1,\n        state: dataset\n      })\n    ];\n    const getValue$1 = (component, repConfig, _repState) => repConfig.store.getValue(component);\n    const setValue$1 = (component, repConfig, _repState, data) => {\n      repConfig.store.setValue(component, data);\n      repConfig.onSetValue(component, data);\n    };\n    const onLoad$3 = (component, repConfig, _repState) => {\n      repConfig.store.initialValue.each((data) => {\n        repConfig.store.setValue(component, data);\n      });\n    };\n    var ManualStore = [\n      required$1(\"getValue\"),\n      defaulted(\"setValue\", noop),\n      option$3(\"initialValue\"),\n      output$1(\"manager\", {\n        setValue: setValue$1,\n        getValue: getValue$1,\n        onLoad: onLoad$3,\n        onUnload: noop,\n        state: NoState.init\n      })\n    ];\n    const setValue = (component, repConfig, repState, data) => {\n      repState.set(data);\n      repConfig.onSetValue(component, data);\n    };\n    const getValue2 = (component, repConfig, repState) => repState.get();\n    const onLoad$2 = (component, repConfig, repState) => {\n      repConfig.store.initialValue.each((initVal) => {\n        if (repState.isNotSet()) {\n          repState.set(initVal);\n        }\n      });\n    };\n    const onUnload = (component, repConfig, repState) => {\n      repState.clear();\n    };\n    var MemoryStore = [\n      option$3(\"initialValue\"),\n      output$1(\"manager\", {\n        setValue,\n        getValue: getValue2,\n        onLoad: onLoad$2,\n        onUnload,\n        state: memory$1\n      })\n    ];\n    var RepresentSchema = [\n      defaultedOf(\"store\", { mode: \"memory\" }, choose$1(\"mode\", {\n        memory: MemoryStore,\n        manual: ManualStore,\n        dataset: DatasetStore\n      })),\n      onHandler(\"onSetValue\"),\n      defaulted(\"resetOnDom\", false)\n    ];\n    const Representing = create$3({\n      fields: RepresentSchema,\n      name: \"representing\",\n      active: ActiveRepresenting,\n      apis: RepresentApis,\n      extra: {\n        setValueFrom: (component, source) => {\n          const value2 = Representing.getValue(source);\n          Representing.setValue(component, value2);\n        }\n      },\n      state: RepresentState\n    });\n    const field = (name2, forbidden) => defaultedObjOf(name2, {}, map$2(forbidden, (f2) => forbid(f2.name(), \"Cannot configure \" + f2.name() + \" for \" + name2)).concat([customField(\"dump\", identity2)]));\n    const get$3 = (data) => data.dump;\n    const augment = (data, original2) => ({\n      ...derive$1(original2),\n      ...data.dump\n    });\n    const SketchBehaviours = {\n      field,\n      augment,\n      get: get$3\n    };\n    const _placeholder = \"placeholder\";\n    const adt$3 = Adt.generate([\n      {\n        single: [\n          \"required\",\n          \"valueThunk\"\n        ]\n      },\n      {\n        multiple: [\n          \"required\",\n          \"valueThunks\"\n        ]\n      }\n    ]);\n    const isSubstituted = (spec) => has$2(spec, \"uiType\");\n    const subPlaceholder = (owner2, detail, compSpec, placeholders) => {\n      if (owner2.exists((o2) => o2 !== compSpec.owner)) {\n        return adt$3.single(true, constant$1(compSpec));\n      }\n      return get$g(placeholders, compSpec.name).fold(() => {\n        throw new Error(\"Unknown placeholder component: \" + compSpec.name + \"\\nKnown: [\" + keys2(placeholders) + \"]\\nNamespace: \" + owner2.getOr(\"none\") + \"\\nSpec: \" + JSON.stringify(compSpec, null, 2));\n      }, (newSpec) => newSpec.replace());\n    };\n    const scan = (owner2, detail, compSpec, placeholders) => {\n      if (isSubstituted(compSpec) && compSpec.uiType === _placeholder) {\n        return subPlaceholder(owner2, detail, compSpec, placeholders);\n      } else {\n        return adt$3.single(false, constant$1(compSpec));\n      }\n    };\n    const substitute = (owner2, detail, compSpec, placeholders) => {\n      const base3 = scan(owner2, detail, compSpec, placeholders);\n      return base3.fold((req, valueThunk2) => {\n        const value2 = isSubstituted(compSpec) ? valueThunk2(detail, compSpec.config, compSpec.validated) : valueThunk2(detail);\n        const childSpecs = get$g(value2, \"components\").getOr([]);\n        const substituted = bind$3(childSpecs, (c2) => substitute(owner2, detail, c2, placeholders));\n        return [{\n          ...value2,\n          components: substituted\n        }];\n      }, (req, valuesThunk) => {\n        if (isSubstituted(compSpec)) {\n          const values2 = valuesThunk(detail, compSpec.config, compSpec.validated);\n          const preprocessor = compSpec.validated.preprocess.getOr(identity2);\n          return preprocessor(values2);\n        } else {\n          return valuesThunk(detail);\n        }\n      });\n    };\n    const substituteAll = (owner2, detail, components2, placeholders) => bind$3(components2, (c2) => substitute(owner2, detail, c2, placeholders));\n    const oneReplace = (label2, replacements) => {\n      let called = false;\n      const used = () => called;\n      const replace3 = () => {\n        if (called) {\n          throw new Error(\"Trying to use the same placeholder more than once: \" + label2);\n        }\n        called = true;\n        return replacements;\n      };\n      const required2 = () => replacements.fold((req, _2) => req, (req, _2) => req);\n      return {\n        name: constant$1(label2),\n        required: required2,\n        used,\n        replace: replace3\n      };\n    };\n    const substitutePlaces = (owner2, detail, components2, placeholders) => {\n      const ps = map$1(placeholders, (ph, name2) => oneReplace(name2, ph));\n      const outcome = substituteAll(owner2, detail, components2, ps);\n      each(ps, (p2) => {\n        if (p2.used() === false && p2.required()) {\n          throw new Error(\"Placeholder: \" + p2.name() + \" was not found in components list\\nNamespace: \" + owner2.getOr(\"none\") + \"\\nComponents: \" + JSON.stringify(detail.components, null, 2));\n        }\n      });\n      return outcome;\n    };\n    const single$2 = adt$3.single;\n    const multiple = adt$3.multiple;\n    const placeholder = constant$1(_placeholder);\n    const adt$2 = Adt.generate([\n      { required: [\"data\"] },\n      { external: [\"data\"] },\n      { optional: [\"data\"] },\n      { group: [\"data\"] }\n    ]);\n    const fFactory = defaulted(\"factory\", { sketch: identity2 });\n    const fSchema = defaulted(\"schema\", []);\n    const fName = required$1(\"name\");\n    const fPname = field$1(\"pname\", \"pname\", defaultedThunk((typeSpec) => \"<alloy.\" + generate$6(typeSpec.name) + \">\"), anyValue());\n    const fGroupSchema = customField(\"schema\", () => [option$3(\"preprocess\")]);\n    const fDefaults = defaulted(\"defaults\", constant$1({}));\n    const fOverrides = defaulted(\"overrides\", constant$1({}));\n    const requiredSpec = objOf([\n      fFactory,\n      fSchema,\n      fName,\n      fPname,\n      fDefaults,\n      fOverrides\n    ]);\n    const externalSpec = objOf([\n      fFactory,\n      fSchema,\n      fName,\n      fDefaults,\n      fOverrides\n    ]);\n    const optionalSpec = objOf([\n      fFactory,\n      fSchema,\n      fName,\n      fPname,\n      fDefaults,\n      fOverrides\n    ]);\n    const groupSpec = objOf([\n      fFactory,\n      fGroupSchema,\n      fName,\n      required$1(\"unit\"),\n      fPname,\n      fDefaults,\n      fOverrides\n    ]);\n    const asNamedPart = (part2) => {\n      return part2.fold(Optional.some, Optional.none, Optional.some, Optional.some);\n    };\n    const name$2 = (part2) => {\n      const get2 = (data) => data.name;\n      return part2.fold(get2, get2, get2, get2);\n    };\n    const asCommon = (part2) => {\n      return part2.fold(identity2, identity2, identity2, identity2);\n    };\n    const convert = (adtConstructor, partSchema) => (spec) => {\n      const data = asRawOrDie$1(\"Converting part type\", partSchema, spec);\n      return adtConstructor(data);\n    };\n    const required = convert(adt$2.required, requiredSpec);\n    const external = convert(adt$2.external, externalSpec);\n    const optional = convert(adt$2.optional, optionalSpec);\n    const group = convert(adt$2.group, groupSpec);\n    const original = constant$1(\"entirety\");\n    var PartType = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      required,\n      external,\n      optional,\n      group,\n      asNamedPart,\n      name: name$2,\n      asCommon,\n      original\n    });\n    const combine = (detail, data, partSpec, partValidated) => deepMerge(data.defaults(detail, partSpec, partValidated), partSpec, { uid: detail.partUids[data.name] }, data.overrides(detail, partSpec, partValidated));\n    const subs = (owner2, detail, parts2) => {\n      const internals = {};\n      const externals = {};\n      each$1(parts2, (part2) => {\n        part2.fold((data) => {\n          internals[data.pname] = single$2(true, (detail2, partSpec, partValidated) => data.factory.sketch(combine(detail2, data, partSpec, partValidated)));\n        }, (data) => {\n          const partSpec = detail.parts[data.name];\n          externals[data.name] = constant$1(data.factory.sketch(combine(detail, data, partSpec[original()]), partSpec));\n        }, (data) => {\n          internals[data.pname] = single$2(false, (detail2, partSpec, partValidated) => data.factory.sketch(combine(detail2, data, partSpec, partValidated)));\n        }, (data) => {\n          internals[data.pname] = multiple(true, (detail2, _partSpec, _partValidated) => {\n            const units2 = detail2[data.name];\n            return map$2(units2, (u2) => data.factory.sketch(deepMerge(data.defaults(detail2, u2, _partValidated), u2, data.overrides(detail2, u2))));\n          });\n        });\n      });\n      return {\n        internals: constant$1(internals),\n        externals: constant$1(externals)\n      };\n    };\n    const generate$3 = (owner2, parts2) => {\n      const r4 = {};\n      each$1(parts2, (part2) => {\n        asNamedPart(part2).each((np) => {\n          const g2 = doGenerateOne(owner2, np.pname);\n          r4[np.name] = (config3) => {\n            const validated = asRawOrDie$1(\"Part: \" + np.name + \" in \" + owner2, objOf(np.schema), config3);\n            return {\n              ...g2,\n              config: config3,\n              validated\n            };\n          };\n        });\n      });\n      return r4;\n    };\n    const doGenerateOne = (owner2, pname) => ({\n      uiType: placeholder(),\n      owner: owner2,\n      name: pname\n    });\n    const generateOne$1 = (owner2, pname, config3) => ({\n      uiType: placeholder(),\n      owner: owner2,\n      name: pname,\n      config: config3,\n      validated: {}\n    });\n    const schemas = (parts2) => bind$3(parts2, (part2) => part2.fold(Optional.none, Optional.some, Optional.none, Optional.none).map((data) => requiredObjOf(data.name, data.schema.concat([snapshot(original())]))).toArray());\n    const names = (parts2) => map$2(parts2, name$2);\n    const substitutes = (owner2, detail, parts2) => subs(owner2, detail, parts2);\n    const components$1 = (owner2, detail, internals) => substitutePlaces(Optional.some(owner2), detail, detail.components, internals);\n    const getPart = (component, detail, partKey) => {\n      const uid = detail.partUids[partKey];\n      return component.getSystem().getByUid(uid).toOptional();\n    };\n    const getPartOrDie = (component, detail, partKey) => getPart(component, detail, partKey).getOrDie(\"Could not find part: \" + partKey);\n    const getParts = (component, detail, partKeys) => {\n      const r4 = {};\n      const uids2 = detail.partUids;\n      const system = component.getSystem();\n      each$1(partKeys, (pk) => {\n        r4[pk] = constant$1(system.getByUid(uids2[pk]));\n      });\n      return r4;\n    };\n    const getAllParts = (component, detail) => {\n      const system = component.getSystem();\n      return map$1(detail.partUids, (pUid, _k) => constant$1(system.getByUid(pUid)));\n    };\n    const getAllPartNames = (detail) => keys2(detail.partUids);\n    const getPartsOrDie = (component, detail, partKeys) => {\n      const r4 = {};\n      const uids2 = detail.partUids;\n      const system = component.getSystem();\n      each$1(partKeys, (pk) => {\n        r4[pk] = constant$1(system.getByUid(uids2[pk]).getOrDie());\n      });\n      return r4;\n    };\n    const defaultUids = (baseUid, partTypes) => {\n      const partNames = names(partTypes);\n      return wrapAll(map$2(partNames, (pn) => ({\n        key: pn,\n        value: baseUid + \"-\" + pn\n      })));\n    };\n    const defaultUidsSchema = (partTypes) => field$1(\"partUids\", \"partUids\", mergeWithThunk((spec) => defaultUids(spec.uid, partTypes)), anyValue());\n    var AlloyParts = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      generate: generate$3,\n      generateOne: generateOne$1,\n      schemas,\n      names,\n      substitutes,\n      components: components$1,\n      defaultUids,\n      defaultUidsSchema,\n      getAllParts,\n      getAllPartNames,\n      getPart,\n      getPartOrDie,\n      getParts,\n      getPartsOrDie\n    });\n    const base2 = (partSchemas, partUidsSchemas) => {\n      const ps = partSchemas.length > 0 ? [requiredObjOf(\"parts\", partSchemas)] : [];\n      return ps.concat([\n        required$1(\"uid\"),\n        defaulted(\"dom\", {}),\n        defaulted(\"components\", []),\n        snapshot(\"originalSpec\"),\n        defaulted(\"debug.sketcher\", {})\n      ]).concat(partUidsSchemas);\n    };\n    const asRawOrDie = (label2, schema2, spec, partSchemas, partUidsSchemas) => {\n      const baseS = base2(partSchemas, partUidsSchemas);\n      return asRawOrDie$1(label2 + \" [SpecSchema]\", objOfOnly(baseS.concat(schema2)), spec);\n    };\n    const single$1 = (owner2, schema2, factory2, spec) => {\n      const specWithUid = supplyUid(spec);\n      const detail = asRawOrDie(owner2, schema2, specWithUid, [], []);\n      return factory2(detail, specWithUid);\n    };\n    const composite$1 = (owner2, schema2, partTypes, factory2, spec) => {\n      const specWithUid = supplyUid(spec);\n      const partSchemas = schemas(partTypes);\n      const partUidsSchema = defaultUidsSchema(partTypes);\n      const detail = asRawOrDie(owner2, schema2, specWithUid, partSchemas, [partUidsSchema]);\n      const subs2 = substitutes(owner2, detail, partTypes);\n      const components2 = components$1(owner2, detail, subs2.internals());\n      return factory2(detail, components2, specWithUid, subs2.externals());\n    };\n    const hasUid = (spec) => has$2(spec, \"uid\");\n    const supplyUid = (spec) => {\n      return hasUid(spec) ? spec : {\n        ...spec,\n        uid: generate$5(\"uid\")\n      };\n    };\n    const isSketchSpec = (spec) => {\n      return spec.uid !== void 0;\n    };\n    const singleSchema = objOfOnly([\n      required$1(\"name\"),\n      required$1(\"factory\"),\n      required$1(\"configFields\"),\n      defaulted(\"apis\", {}),\n      defaulted(\"extraApis\", {})\n    ]);\n    const compositeSchema = objOfOnly([\n      required$1(\"name\"),\n      required$1(\"factory\"),\n      required$1(\"configFields\"),\n      required$1(\"partFields\"),\n      defaulted(\"apis\", {}),\n      defaulted(\"extraApis\", {})\n    ]);\n    const single = (rawConfig) => {\n      const config3 = asRawOrDie$1(\"Sketcher for \" + rawConfig.name, singleSchema, rawConfig);\n      const sketch2 = (spec) => single$1(config3.name, config3.configFields, config3.factory, spec);\n      const apis = map$1(config3.apis, makeApi);\n      const extraApis = map$1(config3.extraApis, (f2, k3) => markAsExtraApi(f2, k3));\n      return {\n        name: config3.name,\n        configFields: config3.configFields,\n        sketch: sketch2,\n        ...apis,\n        ...extraApis\n      };\n    };\n    const composite = (rawConfig) => {\n      const config3 = asRawOrDie$1(\"Sketcher for \" + rawConfig.name, compositeSchema, rawConfig);\n      const sketch2 = (spec) => composite$1(config3.name, config3.configFields, config3.partFields, config3.factory, spec);\n      const parts2 = generate$3(config3.name, config3.partFields);\n      const apis = map$1(config3.apis, makeApi);\n      const extraApis = map$1(config3.extraApis, (f2, k3) => markAsExtraApi(f2, k3));\n      return {\n        name: config3.name,\n        partFields: config3.partFields,\n        configFields: config3.configFields,\n        sketch: sketch2,\n        parts: parts2,\n        ...apis,\n        ...extraApis\n      };\n    };\n    const inside = (target) => isTag(\"input\")(target) && get$f(target, \"type\") !== \"radio\" || isTag(\"textarea\")(target);\n    const getCurrent = (component, composeConfig, _composeState) => composeConfig.find(component);\n    var ComposeApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      getCurrent\n    });\n    const ComposeSchema = [required$1(\"find\")];\n    const Composing = create$3({\n      fields: ComposeSchema,\n      name: \"composing\",\n      apis: ComposeApis\n    });\n    const nativeDisabled = [\n      \"input\",\n      \"button\",\n      \"textarea\",\n      \"select\"\n    ];\n    const onLoad$1 = (component, disableConfig, disableState) => {\n      const f2 = disableConfig.disabled() ? disable : enable;\n      f2(component, disableConfig);\n    };\n    const hasNative = (component, config3) => config3.useNative === true && contains$2(nativeDisabled, name$3(component.element));\n    const nativeIsDisabled = (component) => has$1(component.element, \"disabled\");\n    const nativeDisable = (component) => {\n      set$9(component.element, \"disabled\", \"disabled\");\n    };\n    const nativeEnable = (component) => {\n      remove$7(component.element, \"disabled\");\n    };\n    const ariaIsDisabled = (component) => get$f(component.element, \"aria-disabled\") === \"true\";\n    const ariaDisable = (component) => {\n      set$9(component.element, \"aria-disabled\", \"true\");\n    };\n    const ariaEnable = (component) => {\n      set$9(component.element, \"aria-disabled\", \"false\");\n    };\n    const disable = (component, disableConfig, _disableState) => {\n      disableConfig.disableClass.each((disableClass) => {\n        add$2(component.element, disableClass);\n      });\n      const f2 = hasNative(component, disableConfig) ? nativeDisable : ariaDisable;\n      f2(component);\n      disableConfig.onDisabled(component);\n    };\n    const enable = (component, disableConfig, _disableState) => {\n      disableConfig.disableClass.each((disableClass) => {\n        remove$2(component.element, disableClass);\n      });\n      const f2 = hasNative(component, disableConfig) ? nativeEnable : ariaEnable;\n      f2(component);\n      disableConfig.onEnabled(component);\n    };\n    const isDisabled = (component, disableConfig) => hasNative(component, disableConfig) ? nativeIsDisabled(component) : ariaIsDisabled(component);\n    const set$4 = (component, disableConfig, disableState, disabled) => {\n      const f2 = disabled ? disable : enable;\n      f2(component, disableConfig);\n    };\n    var DisableApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      enable,\n      disable,\n      isDisabled,\n      onLoad: onLoad$1,\n      set: set$4\n    });\n    const exhibit$5 = (base3, disableConfig) => nu$7({ classes: disableConfig.disabled() ? disableConfig.disableClass.toArray() : [] });\n    const events$e = (disableConfig, disableState) => derive$2([\n      abort(execute$5(), (component, _simulatedEvent) => isDisabled(component, disableConfig)),\n      loadEvent(disableConfig, disableState, onLoad$1)\n    ]);\n    var ActiveDisable = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      exhibit: exhibit$5,\n      events: events$e\n    });\n    var DisableSchema = [\n      defaultedFunction(\"disabled\", never),\n      defaulted(\"useNative\", true),\n      option$3(\"disableClass\"),\n      onHandler(\"onDisabled\"),\n      onHandler(\"onEnabled\")\n    ];\n    const Disabling = create$3({\n      fields: DisableSchema,\n      name: \"disabling\",\n      active: ActiveDisable,\n      apis: DisableApis\n    });\n    const dehighlightAllExcept = (component, hConfig, hState, skip) => {\n      const highlighted = descendants(component.element, \".\" + hConfig.highlightClass);\n      each$1(highlighted, (h2) => {\n        if (!exists(skip, (skipComp) => skipComp.element === h2)) {\n          remove$2(h2, hConfig.highlightClass);\n          component.getSystem().getByDom(h2).each((target) => {\n            hConfig.onDehighlight(component, target);\n            emit(target, dehighlight$1());\n          });\n        }\n      });\n    };\n    const dehighlightAll = (component, hConfig, hState) => dehighlightAllExcept(component, hConfig, hState, []);\n    const dehighlight = (component, hConfig, hState, target) => {\n      if (isHighlighted(component, hConfig, hState, target)) {\n        remove$2(target.element, hConfig.highlightClass);\n        hConfig.onDehighlight(component, target);\n        emit(target, dehighlight$1());\n      }\n    };\n    const highlight2 = (component, hConfig, hState, target) => {\n      dehighlightAllExcept(component, hConfig, hState, [target]);\n      if (!isHighlighted(component, hConfig, hState, target)) {\n        add$2(target.element, hConfig.highlightClass);\n        hConfig.onHighlight(component, target);\n        emit(target, highlight$1());\n      }\n    };\n    const highlightFirst = (component, hConfig, hState) => {\n      getFirst(component, hConfig).each((firstComp) => {\n        highlight2(component, hConfig, hState, firstComp);\n      });\n    };\n    const highlightLast = (component, hConfig, hState) => {\n      getLast(component, hConfig).each((lastComp) => {\n        highlight2(component, hConfig, hState, lastComp);\n      });\n    };\n    const highlightAt = (component, hConfig, hState, index2) => {\n      getByIndex(component, hConfig, hState, index2).fold((err) => {\n        throw err;\n      }, (firstComp) => {\n        highlight2(component, hConfig, hState, firstComp);\n      });\n    };\n    const highlightBy = (component, hConfig, hState, predicate) => {\n      const candidates = getCandidates(component, hConfig);\n      const targetComp = find$5(candidates, predicate);\n      targetComp.each((c2) => {\n        highlight2(component, hConfig, hState, c2);\n      });\n    };\n    const isHighlighted = (component, hConfig, hState, queryTarget) => has2(queryTarget.element, hConfig.highlightClass);\n    const getHighlighted = (component, hConfig, _hState) => descendant(component.element, \".\" + hConfig.highlightClass).bind((e2) => component.getSystem().getByDom(e2).toOptional());\n    const getByIndex = (component, hConfig, hState, index2) => {\n      const items = descendants(component.element, \".\" + hConfig.itemClass);\n      return Optional.from(items[index2]).fold(() => Result.error(new Error(\"No element found with index \" + index2)), component.getSystem().getByDom);\n    };\n    const getFirst = (component, hConfig, _hState) => descendant(component.element, \".\" + hConfig.itemClass).bind((e2) => component.getSystem().getByDom(e2).toOptional());\n    const getLast = (component, hConfig, _hState) => {\n      const items = descendants(component.element, \".\" + hConfig.itemClass);\n      const last2 = items.length > 0 ? Optional.some(items[items.length - 1]) : Optional.none();\n      return last2.bind((c2) => component.getSystem().getByDom(c2).toOptional());\n    };\n    const getDelta$2 = (component, hConfig, hState, delta) => {\n      const items = descendants(component.element, \".\" + hConfig.itemClass);\n      const current = findIndex$1(items, (item2) => has2(item2, hConfig.highlightClass));\n      return current.bind((selected) => {\n        const dest = cycleBy(selected, delta, 0, items.length - 1);\n        return component.getSystem().getByDom(items[dest]).toOptional();\n      });\n    };\n    const getPrevious = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, -1);\n    const getNext = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, 1);\n    const getCandidates = (component, hConfig, _hState) => {\n      const items = descendants(component.element, \".\" + hConfig.itemClass);\n      return cat(map$2(items, (i3) => component.getSystem().getByDom(i3).toOptional()));\n    };\n    var HighlightApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      dehighlightAll,\n      dehighlight,\n      highlight: highlight2,\n      highlightFirst,\n      highlightLast,\n      highlightAt,\n      highlightBy,\n      isHighlighted,\n      getHighlighted,\n      getFirst,\n      getLast,\n      getPrevious,\n      getNext,\n      getCandidates\n    });\n    var HighlightSchema = [\n      required$1(\"highlightClass\"),\n      required$1(\"itemClass\"),\n      onHandler(\"onHighlight\"),\n      onHandler(\"onDehighlight\")\n    ];\n    const Highlighting = create$3({\n      fields: HighlightSchema,\n      name: \"highlighting\",\n      apis: HighlightApis\n    });\n    const BACKSPACE = [8];\n    const TAB = [9];\n    const ENTER = [13];\n    const ESCAPE = [27];\n    const SPACE = [32];\n    const LEFT = [37];\n    const UP = [38];\n    const RIGHT = [39];\n    const DOWN = [40];\n    const cyclePrev = (values2, index2, predicate) => {\n      const before2 = reverse(values2.slice(0, index2));\n      const after2 = reverse(values2.slice(index2 + 1));\n      return find$5(before2.concat(after2), predicate);\n    };\n    const tryPrev = (values2, index2, predicate) => {\n      const before2 = reverse(values2.slice(0, index2));\n      return find$5(before2, predicate);\n    };\n    const cycleNext = (values2, index2, predicate) => {\n      const before2 = values2.slice(0, index2);\n      const after2 = values2.slice(index2 + 1);\n      return find$5(after2.concat(before2), predicate);\n    };\n    const tryNext = (values2, index2, predicate) => {\n      const after2 = values2.slice(index2 + 1);\n      return find$5(after2, predicate);\n    };\n    const inSet = (keys3) => (event) => {\n      const raw = event.raw;\n      return contains$2(keys3, raw.which);\n    };\n    const and = (preds) => (event) => forall(preds, (pred) => pred(event));\n    const isShift = (event) => {\n      const raw = event.raw;\n      return raw.shiftKey === true;\n    };\n    const isControl = (event) => {\n      const raw = event.raw;\n      return raw.ctrlKey === true;\n    };\n    const isNotShift = not(isShift);\n    const rule = (matches, action) => ({\n      matches,\n      classification: action\n    });\n    const choose = (transitions, event) => {\n      const transition = find$5(transitions, (t3) => t3.matches(event));\n      return transition.map((t3) => t3.classification);\n    };\n    const reportFocusShifting = (component, prevFocus, newFocus) => {\n      const noChange = prevFocus.exists((p2) => newFocus.exists((n3) => eq2(n3, p2)));\n      if (!noChange) {\n        emitWith(component, focusShifted(), {\n          prevFocus,\n          newFocus\n        });\n      }\n    };\n    const dom$2 = () => {\n      const get2 = (component) => search(component.element);\n      const set3 = (component, focusee) => {\n        const prevFocus = get2(component);\n        component.getSystem().triggerFocus(focusee, component.element);\n        const newFocus = get2(component);\n        reportFocusShifting(component, prevFocus, newFocus);\n      };\n      return {\n        get: get2,\n        set: set3\n      };\n    };\n    const highlights = () => {\n      const get2 = (component) => Highlighting.getHighlighted(component).map((item2) => item2.element);\n      const set3 = (component, element2) => {\n        const prevFocus = get2(component);\n        component.getSystem().getByDom(element2).fold(noop, (item2) => {\n          Highlighting.highlight(component, item2);\n        });\n        const newFocus = get2(component);\n        reportFocusShifting(component, prevFocus, newFocus);\n      };\n      return {\n        get: get2,\n        set: set3\n      };\n    };\n    var FocusInsideModes;\n    (function(FocusInsideModes2) {\n      FocusInsideModes2[\"OnFocusMode\"] = \"onFocus\";\n      FocusInsideModes2[\"OnEnterOrSpaceMode\"] = \"onEnterOrSpace\";\n      FocusInsideModes2[\"OnApiMode\"] = \"onApi\";\n    })(FocusInsideModes || (FocusInsideModes = {}));\n    const typical = (infoSchema, stateInit, getKeydownRules2, getKeyupRules2, optFocusIn) => {\n      const schema2 = () => infoSchema.concat([\n        defaulted(\"focusManager\", dom$2()),\n        defaultedOf(\"focusInside\", \"onFocus\", valueOf((val) => contains$2([\n          \"onFocus\",\n          \"onEnterOrSpace\",\n          \"onApi\"\n        ], val) ? Result.value(val) : Result.error(\"Invalid value for focusInside\"))),\n        output$1(\"handler\", me),\n        output$1(\"state\", stateInit),\n        output$1(\"sendFocusIn\", optFocusIn)\n      ]);\n      const processKey = (component, simulatedEvent, getRules, keyingConfig, keyingState) => {\n        const rules = getRules(component, simulatedEvent, keyingConfig, keyingState);\n        return choose(rules, simulatedEvent.event).bind((rule2) => rule2(component, simulatedEvent, keyingConfig, keyingState));\n      };\n      const toEvents2 = (keyingConfig, keyingState) => {\n        const onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? Optional.none() : optFocusIn(keyingConfig).map((focusIn2) => run$1(focus$4(), (component, simulatedEvent) => {\n          focusIn2(component, keyingConfig, keyingState);\n          simulatedEvent.stop();\n        }));\n        const tryGoInsideComponent = (component, simulatedEvent) => {\n          const isEnterOrSpace = inSet(SPACE.concat(ENTER))(simulatedEvent.event);\n          if (keyingConfig.focusInside === FocusInsideModes.OnEnterOrSpaceMode && isEnterOrSpace && isSource(component, simulatedEvent)) {\n            optFocusIn(keyingConfig).each((focusIn2) => {\n              focusIn2(component, keyingConfig, keyingState);\n              simulatedEvent.stop();\n            });\n          }\n        };\n        const keyboardEvents = [\n          run$1(keydown(), (component, simulatedEvent) => {\n            processKey(component, simulatedEvent, getKeydownRules2, keyingConfig, keyingState).fold(() => {\n              tryGoInsideComponent(component, simulatedEvent);\n            }, (_2) => {\n              simulatedEvent.stop();\n            });\n          }),\n          run$1(keyup(), (component, simulatedEvent) => {\n            processKey(component, simulatedEvent, getKeyupRules2, keyingConfig, keyingState).each((_2) => {\n              simulatedEvent.stop();\n            });\n          })\n        ];\n        return derive$2(onFocusHandler.toArray().concat(keyboardEvents));\n      };\n      const me = {\n        schema: schema2,\n        processKey,\n        toEvents: toEvents2\n      };\n      return me;\n    };\n    const create$1 = (cyclicField) => {\n      const schema2 = [\n        option$3(\"onEscape\"),\n        option$3(\"onEnter\"),\n        defaulted(\"selector\", '[data-alloy-tabstop=\"true\"]:not(:disabled)'),\n        defaulted(\"firstTabstop\", 0),\n        defaulted(\"useTabstopAt\", always),\n        option$3(\"visibilitySelector\")\n      ].concat([cyclicField]);\n      const isVisible2 = (tabbingConfig, element2) => {\n        const target = tabbingConfig.visibilitySelector.bind((sel) => closest$1(element2, sel)).getOr(element2);\n        return get$d(target) > 0;\n      };\n      const findInitial = (component, tabbingConfig) => {\n        const tabstops = descendants(component.element, tabbingConfig.selector);\n        const visibles = filter$2(tabstops, (elem) => isVisible2(tabbingConfig, elem));\n        return Optional.from(visibles[tabbingConfig.firstTabstop]);\n      };\n      const findCurrent2 = (component, tabbingConfig) => tabbingConfig.focusManager.get(component).bind((elem) => closest$1(elem, tabbingConfig.selector));\n      const isTabstop = (tabbingConfig, element2) => isVisible2(tabbingConfig, element2) && tabbingConfig.useTabstopAt(element2);\n      const focusIn2 = (component, tabbingConfig, _tabbingState) => {\n        findInitial(component, tabbingConfig).each((target) => {\n          tabbingConfig.focusManager.set(component, target);\n        });\n      };\n      const goFromTabstop = (component, tabstops, stopIndex, tabbingConfig, cycle) => cycle(tabstops, stopIndex, (elem) => isTabstop(tabbingConfig, elem)).fold(() => tabbingConfig.cyclic ? Optional.some(true) : Optional.none(), (target) => {\n        tabbingConfig.focusManager.set(component, target);\n        return Optional.some(true);\n      });\n      const go2 = (component, _simulatedEvent, tabbingConfig, cycle) => {\n        const tabstops = descendants(component.element, tabbingConfig.selector);\n        return findCurrent2(component, tabbingConfig).bind((tabstop) => {\n          const optStopIndex = findIndex$1(tabstops, curry(eq2, tabstop));\n          return optStopIndex.bind((stopIndex) => goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle));\n        });\n      };\n      const goBackwards = (component, simulatedEvent, tabbingConfig) => {\n        const navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;\n        return go2(component, simulatedEvent, tabbingConfig, navigate);\n      };\n      const goForwards = (component, simulatedEvent, tabbingConfig) => {\n        const navigate = tabbingConfig.cyclic ? cycleNext : tryNext;\n        return go2(component, simulatedEvent, tabbingConfig, navigate);\n      };\n      const execute2 = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEnter.bind((f2) => f2(component, simulatedEvent));\n      const exit = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEscape.bind((f2) => f2(component, simulatedEvent));\n      const getKeydownRules2 = constant$1([\n        rule(and([\n          isShift,\n          inSet(TAB)\n        ]), goBackwards),\n        rule(inSet(TAB), goForwards),\n        rule(inSet(ESCAPE), exit),\n        rule(and([\n          isNotShift,\n          inSet(ENTER)\n        ]), execute2)\n      ]);\n      const getKeyupRules2 = constant$1([]);\n      return typical(schema2, NoState.init, getKeydownRules2, getKeyupRules2, () => Optional.some(focusIn2));\n    };\n    var AcyclicType = create$1(customField(\"cyclic\", never));\n    var CyclicType = create$1(customField(\"cyclic\", always));\n    const doDefaultExecute = (component, _simulatedEvent, focused) => {\n      dispatch(component, focused, execute$5());\n      return Optional.some(true);\n    };\n    const defaultExecute = (component, simulatedEvent, focused) => {\n      const isComplex = inside(focused) && inSet(SPACE)(simulatedEvent.event);\n      return isComplex ? Optional.none() : doDefaultExecute(component, simulatedEvent, focused);\n    };\n    const stopEventForFirefox = (_component, _simulatedEvent) => Optional.some(true);\n    const schema$v = [\n      defaulted(\"execute\", defaultExecute),\n      defaulted(\"useSpace\", false),\n      defaulted(\"useEnter\", true),\n      defaulted(\"useControlEnter\", false),\n      defaulted(\"useDown\", false)\n    ];\n    const execute$4 = (component, simulatedEvent, executeConfig) => executeConfig.execute(component, simulatedEvent, component.element);\n    const getKeydownRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => {\n      const spaceExec = executeConfig.useSpace && !inside(component.element) ? SPACE : [];\n      const enterExec = executeConfig.useEnter ? ENTER : [];\n      const downExec = executeConfig.useDown ? DOWN : [];\n      const execKeys = spaceExec.concat(enterExec).concat(downExec);\n      return [rule(inSet(execKeys), execute$4)].concat(executeConfig.useControlEnter ? [rule(and([\n        isControl,\n        inSet(ENTER)\n      ]), execute$4)] : []);\n    };\n    const getKeyupRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => executeConfig.useSpace && !inside(component.element) ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n    var ExecutionType = typical(schema$v, NoState.init, getKeydownRules$5, getKeyupRules$5, () => Optional.none());\n    const flatgrid$1 = () => {\n      const dimensions = value$2();\n      const setGridSize = (numRows, numColumns) => {\n        dimensions.set({\n          numRows,\n          numColumns\n        });\n      };\n      const getNumRows = () => dimensions.get().map((d2) => d2.numRows);\n      const getNumColumns = () => dimensions.get().map((d2) => d2.numColumns);\n      return nu$8({\n        readState: () => dimensions.get().map((d2) => ({\n          numRows: String(d2.numRows),\n          numColumns: String(d2.numColumns)\n        })).getOr({\n          numRows: \"?\",\n          numColumns: \"?\"\n        }),\n        setGridSize,\n        getNumRows,\n        getNumColumns\n      });\n    };\n    const init$d = (spec) => spec.state(spec);\n    var KeyingState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      flatgrid: flatgrid$1,\n      init: init$d\n    });\n    const useH = (movement) => (component, simulatedEvent, config3, state) => {\n      const move2 = movement(component.element);\n      return use(move2, component, simulatedEvent, config3, state);\n    };\n    const west$1 = (moveLeft2, moveRight2) => {\n      const movement = onDirection(moveLeft2, moveRight2);\n      return useH(movement);\n    };\n    const east$1 = (moveLeft2, moveRight2) => {\n      const movement = onDirection(moveRight2, moveLeft2);\n      return useH(movement);\n    };\n    const useV = (move2) => (component, simulatedEvent, config3, state) => use(move2, component, simulatedEvent, config3, state);\n    const use = (move2, component, simulatedEvent, config3, state) => {\n      const outcome = config3.focusManager.get(component).bind((focused) => move2(component.element, focused, config3, state));\n      return outcome.map((newFocus) => {\n        config3.focusManager.set(component, newFocus);\n        return true;\n      });\n    };\n    const north$1 = useV;\n    const south$1 = useV;\n    const move$1 = useV;\n    const isHidden$1 = (dom3) => dom3.offsetWidth <= 0 && dom3.offsetHeight <= 0;\n    const isVisible = (element2) => !isHidden$1(element2.dom);\n    const locate = (candidates, predicate) => findIndex$1(candidates, predicate).map((index2) => ({\n      index: index2,\n      candidates\n    }));\n    const locateVisible = (container, current, selector) => {\n      const predicate = (x2) => eq2(x2, current);\n      const candidates = descendants(container, selector);\n      const visible = filter$2(candidates, isVisible);\n      return locate(visible, predicate);\n    };\n    const findIndex = (elements, target) => findIndex$1(elements, (elem) => eq2(target, elem));\n    const withGrid = (values2, index2, numCols, f2) => {\n      const oldRow = Math.floor(index2 / numCols);\n      const oldColumn = index2 % numCols;\n      return f2(oldRow, oldColumn).bind((address) => {\n        const newIndex = address.row * numCols + address.column;\n        return newIndex >= 0 && newIndex < values2.length ? Optional.some(values2[newIndex]) : Optional.none();\n      });\n    };\n    const cycleHorizontal$1 = (values2, index2, numRows, numCols, delta) => withGrid(values2, index2, numCols, (oldRow, oldColumn) => {\n      const onLastRow = oldRow === numRows - 1;\n      const colsInRow = onLastRow ? values2.length - oldRow * numCols : numCols;\n      const newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1);\n      return Optional.some({\n        row: oldRow,\n        column: newColumn\n      });\n    });\n    const cycleVertical$1 = (values2, index2, numRows, numCols, delta) => withGrid(values2, index2, numCols, (oldRow, oldColumn) => {\n      const newRow = cycleBy(oldRow, delta, 0, numRows - 1);\n      const onLastRow = newRow === numRows - 1;\n      const colsInRow = onLastRow ? values2.length - newRow * numCols : numCols;\n      const newCol = clamp(oldColumn, 0, colsInRow - 1);\n      return Optional.some({\n        row: newRow,\n        column: newCol\n      });\n    });\n    const cycleRight$1 = (values2, index2, numRows, numCols) => cycleHorizontal$1(values2, index2, numRows, numCols, 1);\n    const cycleLeft$1 = (values2, index2, numRows, numCols) => cycleHorizontal$1(values2, index2, numRows, numCols, -1);\n    const cycleUp$1 = (values2, index2, numRows, numCols) => cycleVertical$1(values2, index2, numRows, numCols, -1);\n    const cycleDown$1 = (values2, index2, numRows, numCols) => cycleVertical$1(values2, index2, numRows, numCols, 1);\n    const schema$u = [\n      required$1(\"selector\"),\n      defaulted(\"execute\", defaultExecute),\n      onKeyboardHandler(\"onEscape\"),\n      defaulted(\"captureTab\", false),\n      initSize()\n    ];\n    const focusIn$3 = (component, gridConfig, _gridState) => {\n      descendant(component.element, gridConfig.selector).each((first2) => {\n        gridConfig.focusManager.set(component, first2);\n      });\n    };\n    const findCurrent$1 = (component, gridConfig) => gridConfig.focusManager.get(component).bind((elem) => closest$1(elem, gridConfig.selector));\n    const execute$3 = (component, simulatedEvent, gridConfig, _gridState) => findCurrent$1(component, gridConfig).bind((focused) => gridConfig.execute(component, simulatedEvent, focused));\n    const doMove$2 = (cycle) => (element2, focused, gridConfig, gridState) => locateVisible(element2, focused, gridConfig.selector).bind((identified) => cycle(identified.candidates, identified.index, gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns)));\n    const handleTab = (_component, _simulatedEvent, gridConfig) => gridConfig.captureTab ? Optional.some(true) : Optional.none();\n    const doEscape$1 = (component, simulatedEvent, gridConfig) => gridConfig.onEscape(component, simulatedEvent);\n    const moveLeft$3 = doMove$2(cycleLeft$1);\n    const moveRight$3 = doMove$2(cycleRight$1);\n    const moveNorth$1 = doMove$2(cycleUp$1);\n    const moveSouth$1 = doMove$2(cycleDown$1);\n    const getKeydownRules$4 = constant$1([\n      rule(inSet(LEFT), west$1(moveLeft$3, moveRight$3)),\n      rule(inSet(RIGHT), east$1(moveLeft$3, moveRight$3)),\n      rule(inSet(UP), north$1(moveNorth$1)),\n      rule(inSet(DOWN), south$1(moveSouth$1)),\n      rule(and([\n        isShift,\n        inSet(TAB)\n      ]), handleTab),\n      rule(and([\n        isNotShift,\n        inSet(TAB)\n      ]), handleTab),\n      rule(inSet(ESCAPE), doEscape$1),\n      rule(inSet(SPACE.concat(ENTER)), execute$3)\n    ]);\n    const getKeyupRules$4 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n    var FlatgridType = typical(schema$u, flatgrid$1, getKeydownRules$4, getKeyupRules$4, () => Optional.some(focusIn$3));\n    const horizontal = (container, selector, current, delta) => {\n      const isDisabledButton = (candidate) => name$3(candidate) === \"button\" && get$f(candidate, \"disabled\") === \"disabled\";\n      const tryCycle = (initial, index2, candidates) => {\n        const newIndex = cycleBy(index2, delta, 0, candidates.length - 1);\n        if (newIndex === initial) {\n          return Optional.none();\n        } else {\n          return isDisabledButton(candidates[newIndex]) ? tryCycle(initial, newIndex, candidates) : Optional.from(candidates[newIndex]);\n        }\n      };\n      return locateVisible(container, current, selector).bind((identified) => {\n        const index2 = identified.index;\n        const candidates = identified.candidates;\n        return tryCycle(index2, index2, candidates);\n      });\n    };\n    const schema$t = [\n      required$1(\"selector\"),\n      defaulted(\"getInitial\", Optional.none),\n      defaulted(\"execute\", defaultExecute),\n      onKeyboardHandler(\"onEscape\"),\n      defaulted(\"executeOnMove\", false),\n      defaulted(\"allowVertical\", true)\n    ];\n    const findCurrent = (component, flowConfig) => flowConfig.focusManager.get(component).bind((elem) => closest$1(elem, flowConfig.selector));\n    const execute$2 = (component, simulatedEvent, flowConfig) => findCurrent(component, flowConfig).bind((focused) => flowConfig.execute(component, simulatedEvent, focused));\n    const focusIn$2 = (component, flowConfig, _state) => {\n      flowConfig.getInitial(component).orThunk(() => descendant(component.element, flowConfig.selector)).each((first2) => {\n        flowConfig.focusManager.set(component, first2);\n      });\n    };\n    const moveLeft$2 = (element2, focused, info) => horizontal(element2, info.selector, focused, -1);\n    const moveRight$2 = (element2, focused, info) => horizontal(element2, info.selector, focused, 1);\n    const doMove$1 = (movement) => (component, simulatedEvent, flowConfig, flowState) => movement(component, simulatedEvent, flowConfig, flowState).bind(() => flowConfig.executeOnMove ? execute$2(component, simulatedEvent, flowConfig) : Optional.some(true));\n    const doEscape = (component, simulatedEvent, flowConfig) => flowConfig.onEscape(component, simulatedEvent);\n    const getKeydownRules$3 = (_component, _se, flowConfig, _flowState) => {\n      const westMovers = LEFT.concat(flowConfig.allowVertical ? UP : []);\n      const eastMovers = RIGHT.concat(flowConfig.allowVertical ? DOWN : []);\n      return [\n        rule(inSet(westMovers), doMove$1(west$1(moveLeft$2, moveRight$2))),\n        rule(inSet(eastMovers), doMove$1(east$1(moveLeft$2, moveRight$2))),\n        rule(inSet(ENTER), execute$2),\n        rule(inSet(SPACE), execute$2),\n        rule(inSet(ESCAPE), doEscape)\n      ];\n    };\n    const getKeyupRules$3 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n    var FlowType = typical(schema$t, NoState.init, getKeydownRules$3, getKeyupRules$3, () => Optional.some(focusIn$2));\n    const toCell = (matrix2, rowIndex, columnIndex) => Optional.from(matrix2[rowIndex]).bind((row) => Optional.from(row[columnIndex]).map((cell) => ({\n      rowIndex,\n      columnIndex,\n      cell\n    })));\n    const cycleHorizontal = (matrix2, rowIndex, startCol, deltaCol) => {\n      const row = matrix2[rowIndex];\n      const colsInRow = row.length;\n      const newColIndex = cycleBy(startCol, deltaCol, 0, colsInRow - 1);\n      return toCell(matrix2, rowIndex, newColIndex);\n    };\n    const cycleVertical = (matrix2, colIndex, startRow, deltaRow) => {\n      const nextRowIndex = cycleBy(startRow, deltaRow, 0, matrix2.length - 1);\n      const colsInNextRow = matrix2[nextRowIndex].length;\n      const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n      return toCell(matrix2, nextRowIndex, nextColIndex);\n    };\n    const moveHorizontal = (matrix2, rowIndex, startCol, deltaCol) => {\n      const row = matrix2[rowIndex];\n      const colsInRow = row.length;\n      const newColIndex = clamp(startCol + deltaCol, 0, colsInRow - 1);\n      return toCell(matrix2, rowIndex, newColIndex);\n    };\n    const moveVertical = (matrix2, colIndex, startRow, deltaRow) => {\n      const nextRowIndex = clamp(startRow + deltaRow, 0, matrix2.length - 1);\n      const colsInNextRow = matrix2[nextRowIndex].length;\n      const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n      return toCell(matrix2, nextRowIndex, nextColIndex);\n    };\n    const cycleRight = (matrix2, startRow, startCol) => cycleHorizontal(matrix2, startRow, startCol, 1);\n    const cycleLeft = (matrix2, startRow, startCol) => cycleHorizontal(matrix2, startRow, startCol, -1);\n    const cycleUp = (matrix2, startRow, startCol) => cycleVertical(matrix2, startCol, startRow, -1);\n    const cycleDown = (matrix2, startRow, startCol) => cycleVertical(matrix2, startCol, startRow, 1);\n    const moveLeft$1 = (matrix2, startRow, startCol) => moveHorizontal(matrix2, startRow, startCol, -1);\n    const moveRight$1 = (matrix2, startRow, startCol) => moveHorizontal(matrix2, startRow, startCol, 1);\n    const moveUp$1 = (matrix2, startRow, startCol) => moveVertical(matrix2, startCol, startRow, -1);\n    const moveDown$1 = (matrix2, startRow, startCol) => moveVertical(matrix2, startCol, startRow, 1);\n    const schema$s = [\n      requiredObjOf(\"selectors\", [\n        required$1(\"row\"),\n        required$1(\"cell\")\n      ]),\n      defaulted(\"cycles\", true),\n      defaulted(\"previousSelector\", Optional.none),\n      defaulted(\"execute\", defaultExecute)\n    ];\n    const focusIn$1 = (component, matrixConfig, _state) => {\n      const focused = matrixConfig.previousSelector(component).orThunk(() => {\n        const selectors = matrixConfig.selectors;\n        return descendant(component.element, selectors.cell);\n      });\n      focused.each((cell) => {\n        matrixConfig.focusManager.set(component, cell);\n      });\n    };\n    const execute$1 = (component, simulatedEvent, matrixConfig) => search(component.element).bind((focused) => matrixConfig.execute(component, simulatedEvent, focused));\n    const toMatrix = (rows, matrixConfig) => map$2(rows, (row) => descendants(row, matrixConfig.selectors.cell));\n    const doMove = (ifCycle, ifMove) => (element2, focused, matrixConfig) => {\n      const move2 = matrixConfig.cycles ? ifCycle : ifMove;\n      return closest$1(focused, matrixConfig.selectors.row).bind((inRow) => {\n        const cellsInRow = descendants(inRow, matrixConfig.selectors.cell);\n        return findIndex(cellsInRow, focused).bind((colIndex) => {\n          const allRows = descendants(element2, matrixConfig.selectors.row);\n          return findIndex(allRows, inRow).bind((rowIndex) => {\n            const matrix2 = toMatrix(allRows, matrixConfig);\n            return move2(matrix2, rowIndex, colIndex).map((next) => next.cell);\n          });\n        });\n      });\n    };\n    const moveLeft = doMove(cycleLeft, moveLeft$1);\n    const moveRight = doMove(cycleRight, moveRight$1);\n    const moveNorth = doMove(cycleUp, moveUp$1);\n    const moveSouth = doMove(cycleDown, moveDown$1);\n    const getKeydownRules$2 = constant$1([\n      rule(inSet(LEFT), west$1(moveLeft, moveRight)),\n      rule(inSet(RIGHT), east$1(moveLeft, moveRight)),\n      rule(inSet(UP), north$1(moveNorth)),\n      rule(inSet(DOWN), south$1(moveSouth)),\n      rule(inSet(SPACE.concat(ENTER)), execute$1)\n    ]);\n    const getKeyupRules$2 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n    var MatrixType = typical(schema$s, NoState.init, getKeydownRules$2, getKeyupRules$2, () => Optional.some(focusIn$1));\n    const schema$r = [\n      required$1(\"selector\"),\n      defaulted(\"execute\", defaultExecute),\n      defaulted(\"moveOnTab\", false)\n    ];\n    const execute = (component, simulatedEvent, menuConfig) => menuConfig.focusManager.get(component).bind((focused) => menuConfig.execute(component, simulatedEvent, focused));\n    const focusIn = (component, menuConfig, _state) => {\n      descendant(component.element, menuConfig.selector).each((first2) => {\n        menuConfig.focusManager.set(component, first2);\n      });\n    };\n    const moveUp = (element2, focused, info) => horizontal(element2, info.selector, focused, -1);\n    const moveDown = (element2, focused, info) => horizontal(element2, info.selector, focused, 1);\n    const fireShiftTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveUp)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n    const fireTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveDown)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n    const getKeydownRules$1 = constant$1([\n      rule(inSet(UP), move$1(moveUp)),\n      rule(inSet(DOWN), move$1(moveDown)),\n      rule(and([\n        isShift,\n        inSet(TAB)\n      ]), fireShiftTab),\n      rule(and([\n        isNotShift,\n        inSet(TAB)\n      ]), fireTab),\n      rule(inSet(ENTER), execute),\n      rule(inSet(SPACE), execute)\n    ]);\n    const getKeyupRules$1 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n    var MenuType = typical(schema$r, NoState.init, getKeydownRules$1, getKeyupRules$1, () => Optional.some(focusIn));\n    const schema$q = [\n      onKeyboardHandler(\"onSpace\"),\n      onKeyboardHandler(\"onEnter\"),\n      onKeyboardHandler(\"onShiftEnter\"),\n      onKeyboardHandler(\"onLeft\"),\n      onKeyboardHandler(\"onRight\"),\n      onKeyboardHandler(\"onTab\"),\n      onKeyboardHandler(\"onShiftTab\"),\n      onKeyboardHandler(\"onUp\"),\n      onKeyboardHandler(\"onDown\"),\n      onKeyboardHandler(\"onEscape\"),\n      defaulted(\"stopSpaceKeyup\", false),\n      option$3(\"focusIn\")\n    ];\n    const getKeydownRules = (component, simulatedEvent, specialInfo) => [\n      rule(inSet(SPACE), specialInfo.onSpace),\n      rule(and([\n        isNotShift,\n        inSet(ENTER)\n      ]), specialInfo.onEnter),\n      rule(and([\n        isShift,\n        inSet(ENTER)\n      ]), specialInfo.onShiftEnter),\n      rule(and([\n        isShift,\n        inSet(TAB)\n      ]), specialInfo.onShiftTab),\n      rule(and([\n        isNotShift,\n        inSet(TAB)\n      ]), specialInfo.onTab),\n      rule(inSet(UP), specialInfo.onUp),\n      rule(inSet(DOWN), specialInfo.onDown),\n      rule(inSet(LEFT), specialInfo.onLeft),\n      rule(inSet(RIGHT), specialInfo.onRight),\n      rule(inSet(SPACE), specialInfo.onSpace),\n      rule(inSet(ESCAPE), specialInfo.onEscape)\n    ];\n    const getKeyupRules = (component, simulatedEvent, specialInfo) => specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n    var SpecialType = typical(schema$q, NoState.init, getKeydownRules, getKeyupRules, (specialInfo) => specialInfo.focusIn);\n    const acyclic = AcyclicType.schema();\n    const cyclic = CyclicType.schema();\n    const flow = FlowType.schema();\n    const flatgrid = FlatgridType.schema();\n    const matrix = MatrixType.schema();\n    const execution = ExecutionType.schema();\n    const menu = MenuType.schema();\n    const special = SpecialType.schema();\n    var KeyboardBranches = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      acyclic,\n      cyclic,\n      flow,\n      flatgrid,\n      matrix,\n      execution,\n      menu,\n      special\n    });\n    const isFlatgridState = (keyState) => hasNonNullableKey(keyState, \"setGridSize\");\n    const Keying = createModes({\n      branchKey: \"mode\",\n      branches: KeyboardBranches,\n      name: \"keying\",\n      active: {\n        events: (keyingConfig, keyingState) => {\n          const handler = keyingConfig.handler;\n          return handler.toEvents(keyingConfig, keyingState);\n        }\n      },\n      apis: {\n        focusIn: (component, keyConfig, keyState) => {\n          keyConfig.sendFocusIn(keyConfig).fold(() => {\n            component.getSystem().triggerFocus(component.element, component.element);\n          }, (sendFocusIn) => {\n            sendFocusIn(component, keyConfig, keyState);\n          });\n        },\n        setGridSize: (component, keyConfig, keyState, numRows, numColumns) => {\n          if (!isFlatgridState(keyState)) {\n            console.error(\"Layout does not support setGridSize\");\n          } else {\n            keyState.setGridSize(numRows, numColumns);\n          }\n        }\n      },\n      state: KeyingState\n    });\n    const withoutReuse = (parent2, data) => {\n      preserve$1(() => {\n        replaceChildren(parent2, data, () => map$2(data, parent2.getSystem().build));\n      }, parent2.element);\n    };\n    const withReuse = (parent2, data) => {\n      preserve$1(() => {\n        virtualReplaceChildren(parent2, data, () => {\n          return patchSpecChildren(parent2.element, data, parent2.getSystem().buildOrPatch);\n        });\n      }, parent2.element);\n    };\n    const virtualReplace = (component, replacee, replaceeIndex, childSpec) => {\n      virtualDetach(replacee);\n      const child2 = patchSpecChild(component.element, replaceeIndex, childSpec, component.getSystem().buildOrPatch);\n      virtualAttach(component, child2);\n      component.syncComponents();\n    };\n    const insert = (component, insertion, childSpec) => {\n      const child2 = component.getSystem().build(childSpec);\n      attachWith(component, child2, insertion);\n    };\n    const replace2 = (component, replacee, replaceeIndex, childSpec) => {\n      detach(replacee);\n      insert(component, (p2, c2) => appendAt(p2, c2, replaceeIndex), childSpec);\n    };\n    const set$3 = (component, replaceConfig, replaceState, data) => {\n      const replacer = replaceConfig.reuseDom ? withReuse : withoutReuse;\n      return replacer(component, data);\n    };\n    const append = (component, replaceConfig, replaceState, appendee) => {\n      insert(component, append$2, appendee);\n    };\n    const prepend = (component, replaceConfig, replaceState, prependee) => {\n      insert(component, prepend$1, prependee);\n    };\n    const remove2 = (component, replaceConfig, replaceState, removee) => {\n      const children2 = contents(component);\n      const foundChild = find$5(children2, (child2) => eq2(removee.element, child2.element));\n      foundChild.each(detach);\n    };\n    const contents = (component, _replaceConfig) => component.components();\n    const replaceAt2 = (component, replaceConfig, replaceState, replaceeIndex, replacer) => {\n      const children2 = contents(component);\n      return Optional.from(children2[replaceeIndex]).map((replacee) => {\n        replacer.fold(() => detach(replacee), (r4) => {\n          const replacer2 = replaceConfig.reuseDom ? virtualReplace : replace2;\n          replacer2(component, replacee, replaceeIndex, r4);\n        });\n        return replacee;\n      });\n    };\n    const replaceBy = (component, replaceConfig, replaceState, replaceePred, replacer) => {\n      const children2 = contents(component);\n      return findIndex$1(children2, replaceePred).bind((replaceeIndex) => replaceAt2(component, replaceConfig, replaceState, replaceeIndex, replacer));\n    };\n    var ReplaceApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      append,\n      prepend,\n      remove: remove2,\n      replaceAt: replaceAt2,\n      replaceBy,\n      set: set$3,\n      contents\n    });\n    const Replacing = create$3({\n      fields: [defaultedBoolean(\"reuseDom\", true)],\n      name: \"replacing\",\n      apis: ReplaceApis\n    });\n    const events$d = (name2, eventHandlers) => {\n      const events2 = derive$2(eventHandlers);\n      return create$3({\n        fields: [required$1(\"enabled\")],\n        name: name2,\n        active: { events: constant$1(events2) }\n      });\n    };\n    const config2 = (name2, eventHandlers) => {\n      const me = events$d(name2, eventHandlers);\n      return {\n        key: name2,\n        value: {\n          config: {},\n          me,\n          configAsRaw: constant$1({}),\n          initialConfig: {},\n          state: NoState\n        }\n      };\n    };\n    const focus$2 = (component, focusConfig) => {\n      if (!focusConfig.ignore) {\n        focus$3(component.element);\n        focusConfig.onFocus(component);\n      }\n    };\n    const blur = (component, focusConfig) => {\n      if (!focusConfig.ignore) {\n        blur$1(component.element);\n      }\n    };\n    const isFocused = (component) => hasFocus(component.element);\n    var FocusApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      focus: focus$2,\n      blur,\n      isFocused\n    });\n    const exhibit$4 = (base3, focusConfig) => {\n      const mod = focusConfig.ignore ? {} : { attributes: { tabindex: \"-1\" } };\n      return nu$7(mod);\n    };\n    const events$c = (focusConfig) => derive$2([run$1(focus$4(), (component, simulatedEvent) => {\n      focus$2(component, focusConfig);\n      simulatedEvent.stop();\n    })].concat(focusConfig.stopMousedown ? [run$1(mousedown(), (_2, simulatedEvent) => {\n      simulatedEvent.event.prevent();\n    })] : []));\n    var ActiveFocus = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      exhibit: exhibit$4,\n      events: events$c\n    });\n    var FocusSchema = [\n      onHandler(\"onFocus\"),\n      defaulted(\"stopMousedown\", false),\n      defaulted(\"ignore\", false)\n    ];\n    const Focusing = create$3({\n      fields: FocusSchema,\n      name: \"focusing\",\n      active: ActiveFocus,\n      apis: FocusApis\n    });\n    const SetupBehaviourCellState = (initialState) => {\n      const init2 = () => {\n        const cell = Cell(initialState);\n        const get2 = () => cell.get();\n        const set3 = (newState) => cell.set(newState);\n        const clear2 = () => cell.set(initialState);\n        const readState = () => cell.get();\n        return {\n          get: get2,\n          set: set3,\n          clear: clear2,\n          readState\n        };\n      };\n      return { init: init2 };\n    };\n    const updateAriaState = (component, toggleConfig, toggleState) => {\n      const ariaInfo = toggleConfig.aria;\n      ariaInfo.update(component, ariaInfo, toggleState.get());\n    };\n    const updateClass = (component, toggleConfig, toggleState) => {\n      toggleConfig.toggleClass.each((toggleClass) => {\n        if (toggleState.get()) {\n          add$2(component.element, toggleClass);\n        } else {\n          remove$2(component.element, toggleClass);\n        }\n      });\n    };\n    const toggle$2 = (component, toggleConfig, toggleState) => {\n      set$2(component, toggleConfig, toggleState, !toggleState.get());\n    };\n    const on = (component, toggleConfig, toggleState) => {\n      toggleState.set(true);\n      updateClass(component, toggleConfig, toggleState);\n      updateAriaState(component, toggleConfig, toggleState);\n    };\n    const off = (component, toggleConfig, toggleState) => {\n      toggleState.set(false);\n      updateClass(component, toggleConfig, toggleState);\n      updateAriaState(component, toggleConfig, toggleState);\n    };\n    const set$2 = (component, toggleConfig, toggleState, state) => {\n      const action = state ? on : off;\n      action(component, toggleConfig, toggleState);\n    };\n    const isOn = (component, toggleConfig, toggleState) => toggleState.get();\n    const onLoad = (component, toggleConfig, toggleState) => {\n      set$2(component, toggleConfig, toggleState, toggleConfig.selected);\n    };\n    var ToggleApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      onLoad,\n      toggle: toggle$2,\n      isOn,\n      on,\n      off,\n      set: set$2\n    });\n    const exhibit$3 = () => nu$7({});\n    const events$b = (toggleConfig, toggleState) => {\n      const execute2 = executeEvent(toggleConfig, toggleState, toggle$2);\n      const load = loadEvent(toggleConfig, toggleState, onLoad);\n      return derive$2(flatten([\n        toggleConfig.toggleOnExecute ? [execute2] : [],\n        [load]\n      ]));\n    };\n    var ActiveToggle = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      exhibit: exhibit$3,\n      events: events$b\n    });\n    const updatePressed = (component, ariaInfo, status) => {\n      set$9(component.element, \"aria-pressed\", status);\n      if (ariaInfo.syncWithExpanded) {\n        updateExpanded(component, ariaInfo, status);\n      }\n    };\n    const updateSelected = (component, ariaInfo, status) => {\n      set$9(component.element, \"aria-selected\", status);\n    };\n    const updateChecked = (component, ariaInfo, status) => {\n      set$9(component.element, \"aria-checked\", status);\n    };\n    const updateExpanded = (component, ariaInfo, status) => {\n      set$9(component.element, \"aria-expanded\", status);\n    };\n    var ToggleSchema = [\n      defaulted(\"selected\", false),\n      option$3(\"toggleClass\"),\n      defaulted(\"toggleOnExecute\", true),\n      defaultedOf(\"aria\", { mode: \"none\" }, choose$1(\"mode\", {\n        pressed: [\n          defaulted(\"syncWithExpanded\", false),\n          output$1(\"update\", updatePressed)\n        ],\n        checked: [output$1(\"update\", updateChecked)],\n        expanded: [output$1(\"update\", updateExpanded)],\n        selected: [output$1(\"update\", updateSelected)],\n        none: [output$1(\"update\", noop)]\n      }))\n    ];\n    const Toggling = create$3({\n      fields: ToggleSchema,\n      name: \"toggling\",\n      active: ActiveToggle,\n      apis: ToggleApis,\n      state: SetupBehaviourCellState(false)\n    });\n    const pointerEvents = () => {\n      const onClick = (component, simulatedEvent) => {\n        simulatedEvent.stop();\n        emitExecute(component);\n      };\n      return [\n        run$1(click(), onClick),\n        run$1(tap(), onClick),\n        cutter(touchstart()),\n        cutter(mousedown())\n      ];\n    };\n    const events$a = (optAction) => {\n      const executeHandler = (action) => runOnExecute$1((component, simulatedEvent) => {\n        action(component);\n        simulatedEvent.stop();\n      });\n      return derive$2(flatten([\n        optAction.map(executeHandler).toArray(),\n        pointerEvents()\n      ]));\n    };\n    const hoverEvent = \"alloy.item-hover\";\n    const focusEvent = \"alloy.item-focus\";\n    const onHover = (item2) => {\n      if (search(item2.element).isNone() || Focusing.isFocused(item2)) {\n        if (!Focusing.isFocused(item2)) {\n          Focusing.focus(item2);\n        }\n        emitWith(item2, hoverEvent, { item: item2 });\n      }\n    };\n    const onFocus$1 = (item2) => {\n      emitWith(item2, focusEvent, { item: item2 });\n    };\n    const hover = constant$1(hoverEvent);\n    const focus$1 = constant$1(focusEvent);\n    const builder$2 = (detail) => ({\n      dom: detail.dom,\n      domModification: {\n        ...detail.domModification,\n        attributes: {\n          \"role\": detail.toggling.isSome() ? \"menuitemcheckbox\" : \"menuitem\",\n          ...detail.domModification.attributes,\n          \"aria-haspopup\": detail.hasSubmenu,\n          ...detail.hasSubmenu ? { \"aria-expanded\": false } : {}\n        }\n      },\n      behaviours: SketchBehaviours.augment(detail.itemBehaviours, [\n        detail.toggling.fold(Toggling.revoke, (tConfig) => Toggling.config({\n          aria: { mode: \"checked\" },\n          ...tConfig\n        })),\n        Focusing.config({\n          ignore: detail.ignoreFocus,\n          stopMousedown: detail.ignoreFocus,\n          onFocus: (component) => {\n            onFocus$1(component);\n          }\n        }),\n        Keying.config({ mode: \"execution\" }),\n        Representing.config({\n          store: {\n            mode: \"memory\",\n            initialValue: detail.data\n          }\n        }),\n        config2(\"item-type-events\", [\n          ...pointerEvents(),\n          run$1(mouseover(), onHover),\n          run$1(focusItem(), Focusing.focus)\n        ])\n      ]),\n      components: detail.components,\n      eventOrder: detail.eventOrder\n    });\n    const schema$p = [\n      required$1(\"data\"),\n      required$1(\"components\"),\n      required$1(\"dom\"),\n      defaulted(\"hasSubmenu\", false),\n      option$3(\"toggling\"),\n      SketchBehaviours.field(\"itemBehaviours\", [\n        Toggling,\n        Focusing,\n        Keying,\n        Representing\n      ]),\n      defaulted(\"ignoreFocus\", false),\n      defaulted(\"domModification\", {}),\n      output$1(\"builder\", builder$2),\n      defaulted(\"eventOrder\", {})\n    ];\n    const builder$1 = (detail) => ({\n      dom: detail.dom,\n      components: detail.components,\n      events: derive$2([stopper(focusItem())])\n    });\n    const schema$o = [\n      required$1(\"dom\"),\n      required$1(\"components\"),\n      output$1(\"builder\", builder$1)\n    ];\n    const owner$2 = constant$1(\"item-widget\");\n    const parts$h = constant$1([required({\n      name: \"widget\",\n      overrides: (detail) => {\n        return {\n          behaviours: derive$1([Representing.config({\n            store: {\n              mode: \"manual\",\n              getValue: (_component) => {\n                return detail.data;\n              },\n              setValue: noop\n            }\n          })])\n        };\n      }\n    })]);\n    const builder = (detail) => {\n      const subs2 = substitutes(owner$2(), detail, parts$h());\n      const components2 = components$1(owner$2(), detail, subs2.internals());\n      const focusWidget = (component) => getPart(component, detail, \"widget\").map((widget) => {\n        Keying.focusIn(widget);\n        return widget;\n      });\n      const onHorizontalArrow = (component, simulatedEvent) => inside(simulatedEvent.event.target) ? Optional.none() : (() => {\n        if (detail.autofocus) {\n          simulatedEvent.setSource(component.element);\n          return Optional.none();\n        } else {\n          return Optional.none();\n        }\n      })();\n      return {\n        dom: detail.dom,\n        components: components2,\n        domModification: detail.domModification,\n        events: derive$2([\n          runOnExecute$1((component, simulatedEvent) => {\n            focusWidget(component).each((_widget) => {\n              simulatedEvent.stop();\n            });\n          }),\n          run$1(mouseover(), onHover),\n          run$1(focusItem(), (component, _simulatedEvent) => {\n            if (detail.autofocus) {\n              focusWidget(component);\n            } else {\n              Focusing.focus(component);\n            }\n          })\n        ]),\n        behaviours: SketchBehaviours.augment(detail.widgetBehaviours, [\n          Representing.config({\n            store: {\n              mode: \"memory\",\n              initialValue: detail.data\n            }\n          }),\n          Focusing.config({\n            ignore: detail.ignoreFocus,\n            onFocus: (component) => {\n              onFocus$1(component);\n            }\n          }),\n          Keying.config({\n            mode: \"special\",\n            focusIn: detail.autofocus ? (component) => {\n              focusWidget(component);\n            } : revoke(),\n            onLeft: onHorizontalArrow,\n            onRight: onHorizontalArrow,\n            onEscape: (component, simulatedEvent) => {\n              if (!Focusing.isFocused(component) && !detail.autofocus) {\n                Focusing.focus(component);\n                return Optional.some(true);\n              } else if (detail.autofocus) {\n                simulatedEvent.setSource(component.element);\n                return Optional.none();\n              } else {\n                return Optional.none();\n              }\n            }\n          })\n        ])\n      };\n    };\n    const schema$n = [\n      required$1(\"uid\"),\n      required$1(\"data\"),\n      required$1(\"components\"),\n      required$1(\"dom\"),\n      defaulted(\"autofocus\", false),\n      defaulted(\"ignoreFocus\", false),\n      SketchBehaviours.field(\"widgetBehaviours\", [\n        Representing,\n        Focusing,\n        Keying\n      ]),\n      defaulted(\"domModification\", {}),\n      defaultUidsSchema(parts$h()),\n      output$1(\"builder\", builder)\n    ];\n    const itemSchema$2 = choose$1(\"type\", {\n      widget: schema$n,\n      item: schema$p,\n      separator: schema$o\n    });\n    const configureGrid = (detail, movementInfo) => ({\n      mode: \"flatgrid\",\n      selector: \".\" + detail.markers.item,\n      initSize: {\n        numColumns: movementInfo.initSize.numColumns,\n        numRows: movementInfo.initSize.numRows\n      },\n      focusManager: detail.focusManager\n    });\n    const configureMatrix = (detail, movementInfo) => ({\n      mode: \"matrix\",\n      selectors: {\n        row: movementInfo.rowSelector,\n        cell: \".\" + detail.markers.item\n      },\n      focusManager: detail.focusManager\n    });\n    const configureMenu = (detail, movementInfo) => ({\n      mode: \"menu\",\n      selector: \".\" + detail.markers.item,\n      moveOnTab: movementInfo.moveOnTab,\n      focusManager: detail.focusManager\n    });\n    const parts$g = constant$1([group({\n      factory: {\n        sketch: (spec) => {\n          const itemInfo = asRawOrDie$1(\"menu.spec item\", itemSchema$2, spec);\n          return itemInfo.builder(itemInfo);\n        }\n      },\n      name: \"items\",\n      unit: \"item\",\n      defaults: (detail, u2) => {\n        return has$2(u2, \"uid\") ? u2 : {\n          ...u2,\n          uid: generate$5(\"item\")\n        };\n      },\n      overrides: (detail, u2) => {\n        return {\n          type: u2.type,\n          ignoreFocus: detail.fakeFocus,\n          domModification: { classes: [detail.markers.item] }\n        };\n      }\n    })]);\n    const schema$m = constant$1([\n      required$1(\"value\"),\n      required$1(\"items\"),\n      required$1(\"dom\"),\n      required$1(\"components\"),\n      defaulted(\"eventOrder\", {}),\n      field(\"menuBehaviours\", [\n        Highlighting,\n        Representing,\n        Composing,\n        Keying\n      ]),\n      defaultedOf(\"movement\", {\n        mode: \"menu\",\n        moveOnTab: true\n      }, choose$1(\"mode\", {\n        grid: [\n          initSize(),\n          output$1(\"config\", configureGrid)\n        ],\n        matrix: [\n          output$1(\"config\", configureMatrix),\n          required$1(\"rowSelector\")\n        ],\n        menu: [\n          defaulted(\"moveOnTab\", true),\n          output$1(\"config\", configureMenu)\n        ]\n      })),\n      itemMarkers(),\n      defaulted(\"fakeFocus\", false),\n      defaulted(\"focusManager\", dom$2()),\n      onHandler(\"onHighlight\")\n    ]);\n    const focus = constant$1(\"alloy.menu-focus\");\n    const make$7 = (detail, components2, _spec, _externals) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      markers: detail.markers,\n      behaviours: augment(detail.menuBehaviours, [\n        Highlighting.config({\n          highlightClass: detail.markers.selectedItem,\n          itemClass: detail.markers.item,\n          onHighlight: detail.onHighlight\n        }),\n        Representing.config({\n          store: {\n            mode: \"memory\",\n            initialValue: detail.value\n          }\n        }),\n        Composing.config({ find: Optional.some }),\n        Keying.config(detail.movement.config(detail, detail.movement))\n      ]),\n      events: derive$2([\n        run$1(focus$1(), (menu2, simulatedEvent) => {\n          const event = simulatedEvent.event;\n          menu2.getSystem().getByDom(event.target).each((item2) => {\n            Highlighting.highlight(menu2, item2);\n            simulatedEvent.stop();\n            emitWith(menu2, focus(), {\n              menu: menu2,\n              item: item2\n            });\n          });\n        }),\n        run$1(hover(), (menu2, simulatedEvent) => {\n          const item2 = simulatedEvent.event.item;\n          Highlighting.highlight(menu2, item2);\n        })\n      ]),\n      components: components2,\n      eventOrder: detail.eventOrder,\n      domModification: { attributes: { role: \"menu\" } }\n    });\n    const Menu = composite({\n      name: \"Menu\",\n      configFields: schema$m(),\n      partFields: parts$g(),\n      factory: make$7\n    });\n    const transpose$1 = (obj) => tupleMap(obj, (v2, k3) => ({\n      k: v2,\n      v: k3\n    }));\n    const trace = (items, byItem, byMenu, finish) => get$g(byMenu, finish).bind((triggerItem) => get$g(items, triggerItem).bind((triggerMenu) => {\n      const rest = trace(items, byItem, byMenu, triggerMenu);\n      return Optional.some([triggerMenu].concat(rest));\n    })).getOr([]);\n    const generate$2 = (menus, expansions) => {\n      const items = {};\n      each(menus, (menuItems, menu2) => {\n        each$1(menuItems, (item2) => {\n          items[item2] = menu2;\n        });\n      });\n      const byItem = expansions;\n      const byMenu = transpose$1(expansions);\n      const menuPaths = map$1(byMenu, (_triggerItem, submenu) => [submenu].concat(trace(items, byItem, byMenu, submenu)));\n      return map$1(items, (menu2) => get$g(menuPaths, menu2).getOr([menu2]));\n    };\n    const init$c = () => {\n      const expansions = Cell({});\n      const menus = Cell({});\n      const paths = Cell({});\n      const primary2 = value$2();\n      const directory = Cell({});\n      const clear2 = () => {\n        expansions.set({});\n        menus.set({});\n        paths.set({});\n        primary2.clear();\n      };\n      const isClear = () => primary2.get().isNone();\n      const setMenuBuilt = (menuName, built) => {\n        menus.set({\n          ...menus.get(),\n          [menuName]: {\n            type: \"prepared\",\n            menu: built\n          }\n        });\n      };\n      const setContents = (sPrimary, sMenus, sExpansions, dir) => {\n        primary2.set(sPrimary);\n        expansions.set(sExpansions);\n        menus.set(sMenus);\n        directory.set(dir);\n        const sPaths = generate$2(dir, sExpansions);\n        paths.set(sPaths);\n      };\n      const getTriggeringItem = (menuValue) => find$4(expansions.get(), (v2, _k) => v2 === menuValue);\n      const getTriggerData = (menuValue, getItemByValue, path2) => getPreparedMenu(menuValue).bind((menu2) => getTriggeringItem(menuValue).bind((triggeringItemValue) => getItemByValue(triggeringItemValue).map((triggeredItem) => ({\n        triggeredMenu: menu2,\n        triggeringItem: triggeredItem,\n        triggeringPath: path2\n      }))));\n      const getTriggeringPath = (itemValue, getItemByValue) => {\n        const extraPath = filter$2(lookupItem(itemValue).toArray(), (menuValue) => getPreparedMenu(menuValue).isSome());\n        return get$g(paths.get(), itemValue).bind((path2) => {\n          const revPath = reverse(extraPath.concat(path2));\n          const triggers = bind$3(revPath, (menuValue, menuIndex) => getTriggerData(menuValue, getItemByValue, revPath.slice(0, menuIndex + 1)).fold(() => is$1(primary2.get(), menuValue) ? [] : [Optional.none()], (data) => [Optional.some(data)]));\n          return sequence(triggers);\n        });\n      };\n      const expand2 = (itemValue) => get$g(expansions.get(), itemValue).map((menu2) => {\n        const current = get$g(paths.get(), itemValue).getOr([]);\n        return [menu2].concat(current);\n      });\n      const collapse = (itemValue) => get$g(paths.get(), itemValue).bind((path2) => path2.length > 1 ? Optional.some(path2.slice(1)) : Optional.none());\n      const refresh2 = (itemValue) => get$g(paths.get(), itemValue);\n      const getPreparedMenu = (menuValue) => lookupMenu(menuValue).bind(extractPreparedMenu);\n      const lookupMenu = (menuValue) => get$g(menus.get(), menuValue);\n      const lookupItem = (itemValue) => get$g(expansions.get(), itemValue);\n      const otherMenus = (path2) => {\n        const menuValues = directory.get();\n        return difference(keys2(menuValues), path2);\n      };\n      const getPrimary = () => primary2.get().bind(getPreparedMenu);\n      const getMenus2 = () => menus.get();\n      return {\n        setMenuBuilt,\n        setContents,\n        expand: expand2,\n        refresh: refresh2,\n        collapse,\n        lookupMenu,\n        lookupItem,\n        otherMenus,\n        getPrimary,\n        getMenus: getMenus2,\n        clear: clear2,\n        isClear,\n        getTriggeringPath\n      };\n    };\n    const extractPreparedMenu = (prep) => prep.type === \"prepared\" ? Optional.some(prep.menu) : Optional.none();\n    const LayeredState = {\n      init: init$c,\n      extractPreparedMenu\n    };\n    const make$6 = (detail, _rawUiSpec) => {\n      const submenuParentItems = value$2();\n      const buildMenus = (container, primaryName, menus) => map$1(menus, (spec, name2) => {\n        const makeSketch = () => Menu.sketch({\n          ...spec,\n          value: name2,\n          markers: detail.markers,\n          fakeFocus: detail.fakeFocus,\n          onHighlight: detail.onHighlight,\n          focusManager: detail.fakeFocus ? highlights() : dom$2()\n        });\n        return name2 === primaryName ? {\n          type: \"prepared\",\n          menu: container.getSystem().build(makeSketch())\n        } : {\n          type: \"notbuilt\",\n          nbMenu: makeSketch\n        };\n      });\n      const layeredState = LayeredState.init();\n      const setup2 = (container) => {\n        const componentMap = buildMenus(container, detail.data.primary, detail.data.menus);\n        const directory = toDirectory();\n        layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);\n        return layeredState.getPrimary();\n      };\n      const getItemValue = (item2) => Representing.getValue(item2).value;\n      const getItemByValue = (_container, menus, itemValue) => findMap(menus, (menu2) => {\n        if (!menu2.getSystem().isConnected()) {\n          return Optional.none();\n        }\n        const candidates = Highlighting.getCandidates(menu2);\n        return find$5(candidates, (c2) => getItemValue(c2) === itemValue);\n      });\n      const toDirectory = (_container) => map$1(detail.data.menus, (data, _menuName) => bind$3(data.items, (item2) => item2.type === \"separator\" ? [] : [item2.data.value]));\n      const setActiveMenu = (container, menu2) => {\n        Highlighting.highlight(container, menu2);\n        Highlighting.getHighlighted(menu2).orThunk(() => Highlighting.getFirst(menu2)).each((item2) => {\n          dispatch(container, item2.element, focusItem());\n        });\n      };\n      const getMenus2 = (state, menuValues) => cat(map$2(menuValues, (mv) => state.lookupMenu(mv).bind((prep) => prep.type === \"prepared\" ? Optional.some(prep.menu) : Optional.none())));\n      const closeOthers = (container, state, path2) => {\n        const others = getMenus2(state, state.otherMenus(path2));\n        each$1(others, (o2) => {\n          remove$1(o2.element, [detail.markers.backgroundMenu]);\n          if (!detail.stayInDom) {\n            Replacing.remove(container, o2);\n          }\n        });\n      };\n      const getSubmenuParents = (container) => submenuParentItems.get().getOrThunk(() => {\n        const r4 = {};\n        const items = descendants(container.element, `.${detail.markers.item}`);\n        const parentItems = filter$2(items, (i3) => get$f(i3, \"aria-haspopup\") === \"true\");\n        each$1(parentItems, (i3) => {\n          container.getSystem().getByDom(i3).each((itemComp) => {\n            const key = getItemValue(itemComp);\n            r4[key] = itemComp;\n          });\n        });\n        submenuParentItems.set(r4);\n        return r4;\n      });\n      const updateAriaExpansions = (container, path2) => {\n        const parentItems = getSubmenuParents(container);\n        each(parentItems, (v2, k3) => {\n          const expanded = contains$2(path2, k3);\n          set$9(v2.element, \"aria-expanded\", expanded);\n        });\n      };\n      const updateMenuPath = (container, state, path2) => Optional.from(path2[0]).bind((latestMenuName) => state.lookupMenu(latestMenuName).bind((menuPrep) => {\n        if (menuPrep.type === \"notbuilt\") {\n          return Optional.none();\n        } else {\n          const activeMenu = menuPrep.menu;\n          const rest = getMenus2(state, path2.slice(1));\n          each$1(rest, (r4) => {\n            add$2(r4.element, detail.markers.backgroundMenu);\n          });\n          if (!inBody(activeMenu.element)) {\n            Replacing.append(container, premade(activeMenu));\n          }\n          remove$1(activeMenu.element, [detail.markers.backgroundMenu]);\n          setActiveMenu(container, activeMenu);\n          closeOthers(container, state, path2);\n          return Optional.some(activeMenu);\n        }\n      }));\n      let ExpandHighlightDecision;\n      (function(ExpandHighlightDecision2) {\n        ExpandHighlightDecision2[ExpandHighlightDecision2[\"HighlightSubmenu\"] = 0] = \"HighlightSubmenu\";\n        ExpandHighlightDecision2[ExpandHighlightDecision2[\"HighlightParent\"] = 1] = \"HighlightParent\";\n      })(ExpandHighlightDecision || (ExpandHighlightDecision = {}));\n      const buildIfRequired = (container, menuName, menuPrep) => {\n        if (menuPrep.type === \"notbuilt\") {\n          const menu2 = container.getSystem().build(menuPrep.nbMenu());\n          layeredState.setMenuBuilt(menuName, menu2);\n          return menu2;\n        } else {\n          return menuPrep.menu;\n        }\n      };\n      const expandRight = (container, item2, decision = ExpandHighlightDecision.HighlightSubmenu) => {\n        if (item2.hasConfigured(Disabling) && Disabling.isDisabled(item2)) {\n          return Optional.some(item2);\n        } else {\n          const value2 = getItemValue(item2);\n          return layeredState.expand(value2).bind((path2) => {\n            updateAriaExpansions(container, path2);\n            return Optional.from(path2[0]).bind((menuName) => layeredState.lookupMenu(menuName).bind((activeMenuPrep) => {\n              const activeMenu = buildIfRequired(container, menuName, activeMenuPrep);\n              if (!inBody(activeMenu.element)) {\n                Replacing.append(container, premade(activeMenu));\n              }\n              detail.onOpenSubmenu(container, item2, activeMenu, reverse(path2));\n              if (decision === ExpandHighlightDecision.HighlightSubmenu) {\n                Highlighting.highlightFirst(activeMenu);\n                return updateMenuPath(container, layeredState, path2);\n              } else {\n                Highlighting.dehighlightAll(activeMenu);\n                return Optional.some(item2);\n              }\n            }));\n          });\n        }\n      };\n      const collapseLeft = (container, item2) => {\n        const value2 = getItemValue(item2);\n        return layeredState.collapse(value2).bind((path2) => {\n          updateAriaExpansions(container, path2);\n          return updateMenuPath(container, layeredState, path2).map((activeMenu) => {\n            detail.onCollapseMenu(container, item2, activeMenu);\n            return activeMenu;\n          });\n        });\n      };\n      const updateView = (container, item2) => {\n        const value2 = getItemValue(item2);\n        return layeredState.refresh(value2).bind((path2) => {\n          updateAriaExpansions(container, path2);\n          return updateMenuPath(container, layeredState, path2);\n        });\n      };\n      const onRight2 = (container, item2) => inside(item2.element) ? Optional.none() : expandRight(container, item2, ExpandHighlightDecision.HighlightSubmenu);\n      const onLeft2 = (container, item2) => inside(item2.element) ? Optional.none() : collapseLeft(container, item2);\n      const onEscape = (container, item2) => collapseLeft(container, item2).orThunk(() => detail.onEscape(container, item2).map(() => container));\n      const keyOnItem = (f2) => (container, simulatedEvent) => closest$1(simulatedEvent.getSource(), \".\" + detail.markers.item).bind((target) => container.getSystem().getByDom(target).toOptional().bind((item2) => f2(container, item2).map(always)));\n      const events2 = derive$2([\n        run$1(focus(), (sandbox, simulatedEvent) => {\n          const item2 = simulatedEvent.event.item;\n          layeredState.lookupItem(getItemValue(item2)).each(() => {\n            const menu2 = simulatedEvent.event.menu;\n            Highlighting.highlight(sandbox, menu2);\n            const value2 = getItemValue(simulatedEvent.event.item);\n            layeredState.refresh(value2).each((path2) => closeOthers(sandbox, layeredState, path2));\n          });\n        }),\n        runOnExecute$1((component, simulatedEvent) => {\n          const target = simulatedEvent.event.target;\n          component.getSystem().getByDom(target).each((item2) => {\n            const itemValue = getItemValue(item2);\n            if (itemValue.indexOf(\"collapse-item\") === 0) {\n              collapseLeft(component, item2);\n            }\n            expandRight(component, item2, ExpandHighlightDecision.HighlightSubmenu).fold(() => {\n              detail.onExecute(component, item2);\n            }, noop);\n          });\n        }),\n        runOnAttached((container, _simulatedEvent) => {\n          setup2(container).each((primary2) => {\n            Replacing.append(container, premade(primary2));\n            detail.onOpenMenu(container, primary2);\n            if (detail.highlightImmediately) {\n              setActiveMenu(container, primary2);\n            }\n          });\n        })\n      ].concat(detail.navigateOnHover ? [run$1(hover(), (sandbox, simulatedEvent) => {\n        const item2 = simulatedEvent.event.item;\n        updateView(sandbox, item2);\n        expandRight(sandbox, item2, ExpandHighlightDecision.HighlightParent);\n        detail.onHover(sandbox, item2);\n      })] : []));\n      const getActiveItem = (container) => Highlighting.getHighlighted(container).bind(Highlighting.getHighlighted);\n      const collapseMenuApi = (container) => {\n        getActiveItem(container).each((currentItem) => {\n          collapseLeft(container, currentItem);\n        });\n      };\n      const highlightPrimary = (container) => {\n        layeredState.getPrimary().each((primary2) => {\n          setActiveMenu(container, primary2);\n        });\n      };\n      const extractMenuFromContainer = (container) => Optional.from(container.components()[0]).filter((comp) => get$f(comp.element, \"role\") === \"menu\");\n      const repositionMenus2 = (container) => {\n        const maybeActivePrimary = layeredState.getPrimary().bind((primary2) => getActiveItem(container).bind((currentItem) => {\n          const itemValue = getItemValue(currentItem);\n          const allMenus = values(layeredState.getMenus());\n          const preparedMenus = cat(map$2(allMenus, LayeredState.extractPreparedMenu));\n          return layeredState.getTriggeringPath(itemValue, (v2) => getItemByValue(container, preparedMenus, v2));\n        }).map((triggeringPath) => ({\n          primary: primary2,\n          triggeringPath\n        })));\n        maybeActivePrimary.fold(() => {\n          extractMenuFromContainer(container).each((primaryMenu) => {\n            detail.onRepositionMenu(container, primaryMenu, []);\n          });\n        }, ({ primary: primary2, triggeringPath }) => {\n          detail.onRepositionMenu(container, primary2, triggeringPath);\n        });\n      };\n      const apis = {\n        collapseMenu: collapseMenuApi,\n        highlightPrimary,\n        repositionMenus: repositionMenus2\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        markers: detail.markers,\n        behaviours: augment(detail.tmenuBehaviours, [\n          Keying.config({\n            mode: \"special\",\n            onRight: keyOnItem(onRight2),\n            onLeft: keyOnItem(onLeft2),\n            onEscape: keyOnItem(onEscape),\n            focusIn: (container, _keyInfo) => {\n              layeredState.getPrimary().each((primary2) => {\n                dispatch(container, primary2.element, focusItem());\n              });\n            }\n          }),\n          Highlighting.config({\n            highlightClass: detail.markers.selectedMenu,\n            itemClass: detail.markers.menu\n          }),\n          Composing.config({\n            find: (container) => {\n              return Highlighting.getHighlighted(container);\n            }\n          }),\n          Replacing.config({})\n        ]),\n        eventOrder: detail.eventOrder,\n        apis,\n        events: events2\n      };\n    };\n    const collapseItem$1 = constant$1(\"collapse-item\");\n    const tieredData = (primary2, menus, expansions) => ({\n      primary: primary2,\n      menus,\n      expansions\n    });\n    const singleData = (name2, menu2) => ({\n      primary: name2,\n      menus: wrap$1(name2, menu2),\n      expansions: {}\n    });\n    const collapseItem = (text3) => ({\n      value: generate$6(collapseItem$1()),\n      meta: { text: text3 }\n    });\n    const tieredMenu = single({\n      name: \"TieredMenu\",\n      configFields: [\n        onStrictKeyboardHandler(\"onExecute\"),\n        onStrictKeyboardHandler(\"onEscape\"),\n        onStrictHandler(\"onOpenMenu\"),\n        onStrictHandler(\"onOpenSubmenu\"),\n        onHandler(\"onRepositionMenu\"),\n        onHandler(\"onCollapseMenu\"),\n        defaulted(\"highlightImmediately\", true),\n        requiredObjOf(\"data\", [\n          required$1(\"primary\"),\n          required$1(\"menus\"),\n          required$1(\"expansions\")\n        ]),\n        defaulted(\"fakeFocus\", false),\n        onHandler(\"onHighlight\"),\n        onHandler(\"onHover\"),\n        tieredMenuMarkers(),\n        required$1(\"dom\"),\n        defaulted(\"navigateOnHover\", true),\n        defaulted(\"stayInDom\", false),\n        field(\"tmenuBehaviours\", [\n          Keying,\n          Highlighting,\n          Composing,\n          Replacing\n        ]),\n        defaulted(\"eventOrder\", {})\n      ],\n      apis: {\n        collapseMenu: (apis, tmenu) => {\n          apis.collapseMenu(tmenu);\n        },\n        highlightPrimary: (apis, tmenu) => {\n          apis.highlightPrimary(tmenu);\n        },\n        repositionMenus: (apis, tmenu) => {\n          apis.repositionMenus(tmenu);\n        }\n      },\n      factory: make$6,\n      extraApis: {\n        tieredData,\n        singleData,\n        collapseItem\n      }\n    });\n    const makeMenu = (detail, menuSandbox, placementSpec, menuSpec, getBounds2) => {\n      const lazySink = () => detail.lazySink(menuSandbox);\n      const layouts2 = menuSpec.type === \"horizontal\" ? {\n        layouts: {\n          onLtr: () => belowOrAbove(),\n          onRtl: () => belowOrAboveRtl()\n        }\n      } : {};\n      const isFirstTierSubmenu = (triggeringPaths) => triggeringPaths.length === 2;\n      const getSubmenuLayouts = (triggeringPaths) => isFirstTierSubmenu(triggeringPaths) ? layouts2 : {};\n      return tieredMenu.sketch({\n        dom: { tag: \"div\" },\n        data: menuSpec.data,\n        markers: menuSpec.menu.markers,\n        highlightImmediately: menuSpec.menu.highlightImmediately,\n        onEscape: () => {\n          Sandboxing.close(menuSandbox);\n          detail.onEscape.map((handler) => handler(menuSandbox));\n          return Optional.some(true);\n        },\n        onExecute: () => {\n          return Optional.some(true);\n        },\n        onOpenMenu: (tmenu, menu2) => {\n          Positioning.positionWithinBounds(lazySink().getOrDie(), menu2, placementSpec, getBounds2());\n        },\n        onOpenSubmenu: (tmenu, item2, submenu, triggeringPaths) => {\n          const sink = lazySink().getOrDie();\n          Positioning.position(sink, submenu, {\n            anchor: {\n              type: \"submenu\",\n              item: item2,\n              ...getSubmenuLayouts(triggeringPaths)\n            }\n          });\n        },\n        onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n          const sink = lazySink().getOrDie();\n          Positioning.positionWithinBounds(sink, primaryMenu, placementSpec, getBounds2());\n          each$1(submenuTriggers, (st) => {\n            const submenuLayouts = getSubmenuLayouts(st.triggeringPath);\n            Positioning.position(sink, st.triggeredMenu, {\n              anchor: {\n                type: \"submenu\",\n                item: st.triggeringItem,\n                ...submenuLayouts\n              }\n            });\n          });\n        }\n      });\n    };\n    const factory$m = (detail, spec) => {\n      const isPartOfRelated = (sandbox, queryElem) => {\n        const related = detail.getRelated(sandbox);\n        return related.exists((rel) => isPartOf$1(rel, queryElem));\n      };\n      const setContent2 = (sandbox, thing) => {\n        Sandboxing.setContent(sandbox, thing);\n      };\n      const showAt = (sandbox, thing, placementSpec) => {\n        showWithin(sandbox, thing, placementSpec, Optional.none());\n      };\n      const showWithin = (sandbox, thing, placementSpec, boxElement) => {\n        showWithinBounds(sandbox, thing, placementSpec, () => boxElement.map((elem) => box$1(elem)));\n      };\n      const showWithinBounds = (sandbox, thing, placementSpec, getBounds2) => {\n        const sink = detail.lazySink(sandbox).getOrDie();\n        Sandboxing.openWhileCloaked(sandbox, thing, () => Positioning.positionWithinBounds(sink, sandbox, placementSpec, getBounds2()));\n        Representing.setValue(sandbox, Optional.some({\n          mode: \"position\",\n          config: placementSpec,\n          getBounds: getBounds2\n        }));\n      };\n      const showMenuAt = (sandbox, placementSpec, menuSpec) => {\n        showMenuWithinBounds(sandbox, placementSpec, menuSpec, Optional.none);\n      };\n      const showMenuWithinBounds = (sandbox, placementSpec, menuSpec, getBounds2) => {\n        const menu2 = makeMenu(detail, sandbox, placementSpec, menuSpec, getBounds2);\n        Sandboxing.open(sandbox, menu2);\n        Representing.setValue(sandbox, Optional.some({\n          mode: \"menu\",\n          menu: menu2\n        }));\n      };\n      const hide = (sandbox) => {\n        if (Sandboxing.isOpen(sandbox)) {\n          Representing.setValue(sandbox, Optional.none());\n          Sandboxing.close(sandbox);\n        }\n      };\n      const getContent = (sandbox) => Sandboxing.getState(sandbox);\n      const reposition2 = (sandbox) => {\n        if (Sandboxing.isOpen(sandbox)) {\n          Representing.getValue(sandbox).each((state) => {\n            switch (state.mode) {\n              case \"menu\":\n                Sandboxing.getState(sandbox).each(tieredMenu.repositionMenus);\n                break;\n              case \"position\":\n                const sink = detail.lazySink(sandbox).getOrDie();\n                Positioning.positionWithinBounds(sink, sandbox, state.config, state.getBounds());\n                break;\n            }\n          });\n        }\n      };\n      const apis = {\n        setContent: setContent2,\n        showAt,\n        showWithin,\n        showWithinBounds,\n        showMenuAt,\n        showMenuWithinBounds,\n        hide,\n        getContent,\n        reposition: reposition2,\n        isOpen: Sandboxing.isOpen\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        behaviours: augment(detail.inlineBehaviours, [\n          Sandboxing.config({\n            isPartOf: (sandbox, data, queryElem) => {\n              return isPartOf$1(data, queryElem) || isPartOfRelated(sandbox, queryElem);\n            },\n            getAttachPoint: (sandbox) => {\n              return detail.lazySink(sandbox).getOrDie();\n            },\n            onOpen: (sandbox) => {\n              detail.onShow(sandbox);\n            },\n            onClose: (sandbox) => {\n              detail.onHide(sandbox);\n            }\n          }),\n          Representing.config({\n            store: {\n              mode: \"memory\",\n              initialValue: Optional.none()\n            }\n          }),\n          Receiving.config({\n            channels: {\n              ...receivingChannel$1({\n                isExtraPart: spec.isExtraPart,\n                ...detail.fireDismissalEventInstead.map((fe) => ({ fireEventInstead: { event: fe.event } })).getOr({})\n              }),\n              ...receivingChannel({\n                ...detail.fireRepositionEventInstead.map((fe) => ({ fireEventInstead: { event: fe.event } })).getOr({}),\n                doReposition: reposition2\n              })\n            }\n          })\n        ]),\n        eventOrder: detail.eventOrder,\n        apis\n      };\n    };\n    const InlineView = single({\n      name: \"InlineView\",\n      configFields: [\n        required$1(\"lazySink\"),\n        onHandler(\"onShow\"),\n        onHandler(\"onHide\"),\n        optionFunction(\"onEscape\"),\n        field(\"inlineBehaviours\", [\n          Sandboxing,\n          Representing,\n          Receiving\n        ]),\n        optionObjOf(\"fireDismissalEventInstead\", [defaulted(\"event\", dismissRequested())]),\n        optionObjOf(\"fireRepositionEventInstead\", [defaulted(\"event\", repositionRequested())]),\n        defaulted(\"getRelated\", Optional.none),\n        defaulted(\"isExtraPart\", never),\n        defaulted(\"eventOrder\", Optional.none)\n      ],\n      factory: factory$m,\n      apis: {\n        showAt: (apis, component, anchor2, thing) => {\n          apis.showAt(component, anchor2, thing);\n        },\n        showWithin: (apis, component, anchor2, thing, boxElement) => {\n          apis.showWithin(component, anchor2, thing, boxElement);\n        },\n        showWithinBounds: (apis, component, anchor2, thing, bounds2) => {\n          apis.showWithinBounds(component, anchor2, thing, bounds2);\n        },\n        showMenuAt: (apis, component, anchor2, menuSpec) => {\n          apis.showMenuAt(component, anchor2, menuSpec);\n        },\n        showMenuWithinBounds: (apis, component, anchor2, menuSpec, bounds2) => {\n          apis.showMenuWithinBounds(component, anchor2, menuSpec, bounds2);\n        },\n        hide: (apis, component) => {\n          apis.hide(component);\n        },\n        isOpen: (apis, component) => apis.isOpen(component),\n        getContent: (apis, component) => apis.getContent(component),\n        setContent: (apis, component, thing) => {\n          apis.setContent(component, thing);\n        },\n        reposition: (apis, component) => {\n          apis.reposition(component);\n        }\n      }\n    });\n    var global$9 = tinymce.util.Tools.resolve(\"tinymce.util.Delay\");\n    const factory$l = (detail) => {\n      const events2 = events$a(detail.action);\n      const tag = detail.dom.tag;\n      const lookupAttr = (attr) => get$g(detail.dom, \"attributes\").bind((attrs) => get$g(attrs, attr));\n      const getModAttributes = () => {\n        if (tag === \"button\") {\n          const type2 = lookupAttr(\"type\").getOr(\"button\");\n          const roleAttrs = lookupAttr(\"role\").map((role) => ({ role })).getOr({});\n          return {\n            type: type2,\n            ...roleAttrs\n          };\n        } else {\n          const role = lookupAttr(\"role\").getOr(\"button\");\n          return { role };\n        }\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: detail.components,\n        events: events2,\n        behaviours: SketchBehaviours.augment(detail.buttonBehaviours, [\n          Focusing.config({}),\n          Keying.config({\n            mode: \"execution\",\n            useSpace: true,\n            useEnter: true\n          })\n        ]),\n        domModification: { attributes: getModAttributes() },\n        eventOrder: detail.eventOrder\n      };\n    };\n    const Button = single({\n      name: \"Button\",\n      factory: factory$l,\n      configFields: [\n        defaulted(\"uid\", void 0),\n        required$1(\"dom\"),\n        defaulted(\"components\", []),\n        SketchBehaviours.field(\"buttonBehaviours\", [\n          Focusing,\n          Keying\n        ]),\n        option$3(\"action\"),\n        option$3(\"role\"),\n        defaulted(\"eventOrder\", {})\n      ]\n    });\n    const record = (spec) => {\n      const uid = isSketchSpec(spec) && hasNonNullableKey(spec, \"uid\") ? spec.uid : generate$5(\"memento\");\n      const get2 = (anyInSystem) => anyInSystem.getSystem().getByUid(uid).getOrDie();\n      const getOpt2 = (anyInSystem) => anyInSystem.getSystem().getByUid(uid).toOptional();\n      const asSpec = () => ({\n        ...spec,\n        uid\n      });\n      return {\n        get: get2,\n        getOpt: getOpt2,\n        asSpec\n      };\n    };\n    var global$8 = tinymce.util.Tools.resolve(\"tinymce.util.I18n\");\n    const rtlTransform = {\n      \"indent\": true,\n      \"outdent\": true,\n      \"table-insert-column-after\": true,\n      \"table-insert-column-before\": true,\n      \"paste-column-after\": true,\n      \"paste-column-before\": true,\n      \"unordered-list\": true,\n      \"list-bull-circle\": true,\n      \"list-bull-default\": true,\n      \"list-bull-square\": true\n    };\n    const defaultIconName = \"temporary-placeholder\";\n    const defaultIcon = (icons2) => () => get$g(icons2, defaultIconName).getOr(\"!not found!\");\n    const getIconName = (name2, icons2) => {\n      const lcName = name2.toLowerCase();\n      if (global$8.isRtl()) {\n        const rtlName = ensureTrailing(lcName, \"-rtl\");\n        return has$2(icons2, rtlName) ? rtlName : lcName;\n      } else {\n        return lcName;\n      }\n    };\n    const lookupIcon = (name2, icons2) => get$g(icons2, getIconName(name2, icons2));\n    const get$2 = (name2, iconProvider) => {\n      const icons2 = iconProvider();\n      return lookupIcon(name2, icons2).getOrThunk(defaultIcon(icons2));\n    };\n    const getOr = (name2, iconProvider, fallbackIcon) => {\n      const icons2 = iconProvider();\n      return lookupIcon(name2, icons2).or(fallbackIcon).getOrThunk(defaultIcon(icons2));\n    };\n    const needsRtlTransform = (iconName) => global$8.isRtl() ? has$2(rtlTransform, iconName) : false;\n    const addFocusableBehaviour = () => config2(\"add-focusable\", [runOnAttached((comp) => {\n      child(comp.element, \"svg\").each((svg) => set$9(svg, \"focusable\", \"false\"));\n    })]);\n    const renderIcon$2 = (spec, iconName, icons2, fallbackIcon) => {\n      var _a3, _b;\n      const rtlIconClasses = needsRtlTransform(iconName) ? [\"tox-icon--flip\"] : [];\n      const iconHtml = get$g(icons2, getIconName(iconName, icons2)).or(fallbackIcon).getOrThunk(defaultIcon(icons2));\n      return {\n        dom: {\n          tag: spec.tag,\n          attributes: (_a3 = spec.attributes) !== null && _a3 !== void 0 ? _a3 : {},\n          classes: spec.classes.concat(rtlIconClasses),\n          innerHtml: iconHtml\n        },\n        behaviours: derive$1([\n          ...(_b = spec.behaviours) !== null && _b !== void 0 ? _b : [],\n          addFocusableBehaviour()\n        ])\n      };\n    };\n    const render$3 = (iconName, spec, iconProvider, fallbackIcon = Optional.none()) => renderIcon$2(spec, iconName, iconProvider(), fallbackIcon);\n    const renderFirst = (iconNames, spec, iconProvider) => {\n      const icons2 = iconProvider();\n      const iconName = find$5(iconNames, (name2) => has$2(icons2, getIconName(name2, icons2)));\n      return renderIcon$2(spec, iconName.getOr(defaultIconName), icons2, Optional.none());\n    };\n    const notificationIconMap = {\n      success: \"checkmark\",\n      error: \"warning\",\n      err: \"error\",\n      warning: \"warning\",\n      warn: \"warning\",\n      info: \"info\"\n    };\n    const factory$k = (detail) => {\n      const memBannerText = record({\n        dom: {\n          tag: \"p\",\n          innerHtml: detail.translationProvider(detail.text)\n        },\n        behaviours: derive$1([Replacing.config({})])\n      });\n      const renderPercentBar = (percent) => ({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-bar\"],\n          styles: { width: `${percent}%` }\n        }\n      });\n      const renderPercentText = (percent) => ({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-text\"],\n          innerHtml: `${percent}%`\n        }\n      });\n      const memBannerProgress = record({\n        dom: {\n          tag: \"div\",\n          classes: detail.progress ? [\n            \"tox-progress-bar\",\n            \"tox-progress-indicator\"\n          ] : [\"tox-progress-bar\"]\n        },\n        components: [\n          {\n            dom: {\n              tag: \"div\",\n              classes: [\"tox-bar-container\"]\n            },\n            components: [renderPercentBar(0)]\n          },\n          renderPercentText(0)\n        ],\n        behaviours: derive$1([Replacing.config({})])\n      });\n      const updateProgress = (comp, percent) => {\n        if (comp.getSystem().isConnected()) {\n          memBannerProgress.getOpt(comp).each((progress) => {\n            Replacing.set(progress, [\n              {\n                dom: {\n                  tag: \"div\",\n                  classes: [\"tox-bar-container\"]\n                },\n                components: [renderPercentBar(percent)]\n              },\n              renderPercentText(percent)\n            ]);\n          });\n        }\n      };\n      const updateText = (comp, text3) => {\n        if (comp.getSystem().isConnected()) {\n          const banner = memBannerText.get(comp);\n          Replacing.set(banner, [text$1(text3)]);\n        }\n      };\n      const apis = {\n        updateProgress,\n        updateText\n      };\n      const iconChoices = flatten([\n        detail.icon.toArray(),\n        detail.level.toArray(),\n        detail.level.bind((level2) => Optional.from(notificationIconMap[level2])).toArray()\n      ]);\n      const memButton = record(Button.sketch({\n        dom: {\n          tag: \"button\",\n          classes: [\n            \"tox-notification__dismiss\",\n            \"tox-button\",\n            \"tox-button--naked\",\n            \"tox-button--icon\"\n          ]\n        },\n        components: [render$3(\"close\", {\n          tag: \"div\",\n          classes: [\"tox-icon\"],\n          attributes: { \"aria-label\": detail.translationProvider(\"Close\") }\n        }, detail.iconProvider)],\n        action: (comp) => {\n          detail.onAction(comp);\n        }\n      }));\n      const notificationIconSpec = renderFirst(iconChoices, {\n        tag: \"div\",\n        classes: [\"tox-notification__icon\"]\n      }, detail.iconProvider);\n      const notificationBodySpec = {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-notification__body\"]\n        },\n        components: [memBannerText.asSpec()],\n        behaviours: derive$1([Replacing.config({})])\n      };\n      const components2 = [\n        notificationIconSpec,\n        notificationBodySpec\n      ];\n      return {\n        uid: detail.uid,\n        dom: {\n          tag: \"div\",\n          attributes: { role: \"alert\" },\n          classes: detail.level.map((level2) => [\n            \"tox-notification\",\n            \"tox-notification--in\",\n            `tox-notification--${level2}`\n          ]).getOr([\n            \"tox-notification\",\n            \"tox-notification--in\"\n          ])\n        },\n        behaviours: derive$1([\n          Focusing.config({}),\n          config2(\"notification-events\", [run$1(focusin(), (comp) => {\n            memButton.getOpt(comp).each(Focusing.focus);\n          })])\n        ]),\n        components: components2.concat(detail.progress ? [memBannerProgress.asSpec()] : []).concat(!detail.closeButton ? [] : [memButton.asSpec()]),\n        apis\n      };\n    };\n    const Notification = single({\n      name: \"Notification\",\n      factory: factory$k,\n      configFields: [\n        option$3(\"level\"),\n        required$1(\"progress\"),\n        required$1(\"icon\"),\n        required$1(\"onAction\"),\n        required$1(\"text\"),\n        required$1(\"iconProvider\"),\n        required$1(\"translationProvider\"),\n        defaultedBoolean(\"closeButton\", true)\n      ],\n      apis: {\n        updateProgress: (apis, comp, percent) => {\n          apis.updateProgress(comp, percent);\n        },\n        updateText: (apis, comp, text3) => {\n          apis.updateText(comp, text3);\n        }\n      }\n    });\n    var NotificationManagerImpl = (editor, extras, uiMothership) => {\n      const sharedBackstage = extras.backstage.shared;\n      const getBounds2 = () => {\n        const contentArea = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n        const win$1 = win();\n        const x2 = clamp(win$1.x, contentArea.x, contentArea.right);\n        const y2 = clamp(win$1.y, contentArea.y, contentArea.bottom);\n        const right2 = Math.max(contentArea.right, win$1.right);\n        const bottom2 = Math.max(contentArea.bottom, win$1.bottom);\n        return Optional.some(bounds(x2, y2, right2 - x2, bottom2 - y2));\n      };\n      const open2 = (settings, closeCallback) => {\n        const close3 = () => {\n          closeCallback();\n          InlineView.hide(notificationWrapper);\n        };\n        const notification = build$1(Notification.sketch({\n          text: settings.text,\n          level: contains$2([\n            \"success\",\n            \"error\",\n            \"warning\",\n            \"warn\",\n            \"info\"\n          ], settings.type) ? settings.type : void 0,\n          progress: settings.progressBar === true,\n          icon: Optional.from(settings.icon),\n          closeButton: settings.closeButton,\n          onAction: close3,\n          iconProvider: sharedBackstage.providers.icons,\n          translationProvider: sharedBackstage.providers.translate\n        }));\n        const notificationWrapper = build$1(InlineView.sketch({\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-notifications-container\"]\n          },\n          lazySink: sharedBackstage.getSink,\n          fireDismissalEventInstead: {},\n          ...sharedBackstage.header.isPositionedAtTop() ? {} : { fireRepositionEventInstead: {} }\n        }));\n        uiMothership.add(notificationWrapper);\n        if (settings.timeout > 0) {\n          global$9.setEditorTimeout(editor, () => {\n            close3();\n          }, settings.timeout);\n        }\n        const reposition2 = () => {\n          const notificationSpec = premade(notification);\n          const anchorOverrides2 = { maxHeightFunction: expandable$1() };\n          const allNotifications = editor.notificationManager.getNotifications();\n          if (allNotifications[0] === thisNotification) {\n            const anchor2 = {\n              ...sharedBackstage.anchors.banner(),\n              overrides: anchorOverrides2\n            };\n            InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor: anchor2 }, getBounds2);\n          } else {\n            indexOf(allNotifications, thisNotification).each((idx) => {\n              const previousNotification = allNotifications[idx - 1].getEl();\n              const nodeAnchor = {\n                type: \"node\",\n                root: body(),\n                node: Optional.some(SugarElement.fromDom(previousNotification)),\n                overrides: anchorOverrides2,\n                layouts: {\n                  onRtl: () => [south$2],\n                  onLtr: () => [south$2]\n                }\n              };\n              InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor: nodeAnchor }, getBounds2);\n            });\n          }\n        };\n        const thisNotification = {\n          close: close3,\n          reposition: reposition2,\n          text: (nuText) => {\n            Notification.updateText(notification, nuText);\n          },\n          settings,\n          getEl: () => notification.element.dom,\n          progressBar: {\n            value: (percent) => {\n              Notification.updateProgress(notification, percent);\n            }\n          }\n        };\n        return thisNotification;\n      };\n      const close2 = (notification) => {\n        notification.close();\n      };\n      const getArgs = (notification) => {\n        return notification.settings;\n      };\n      return {\n        open: open2,\n        close: close2,\n        getArgs\n      };\n    };\n    var global$7 = tinymce.util.Tools.resolve(\"tinymce.dom.DOMUtils\");\n    var global$6 = tinymce.util.Tools.resolve(\"tinymce.EditorManager\");\n    var global$5 = tinymce.util.Tools.resolve(\"tinymce.Env\");\n    var ToolbarMode$1;\n    (function(ToolbarMode2) {\n      ToolbarMode2[\"default\"] = \"wrap\";\n      ToolbarMode2[\"floating\"] = \"floating\";\n      ToolbarMode2[\"sliding\"] = \"sliding\";\n      ToolbarMode2[\"scrolling\"] = \"scrolling\";\n    })(ToolbarMode$1 || (ToolbarMode$1 = {}));\n    var ToolbarLocation$1;\n    (function(ToolbarLocation2) {\n      ToolbarLocation2[\"auto\"] = \"auto\";\n      ToolbarLocation2[\"top\"] = \"top\";\n      ToolbarLocation2[\"bottom\"] = \"bottom\";\n    })(ToolbarLocation$1 || (ToolbarLocation$1 = {}));\n    const option$2 = (name2) => (editor) => editor.options.get(name2);\n    const wrapOptional = (fn) => (editor) => Optional.from(fn(editor));\n    const register$e = (editor) => {\n      const isPhone = global$5.deviceType.isPhone();\n      const isMobile = global$5.deviceType.isTablet() || isPhone;\n      const registerOption = editor.options.register;\n      const stringOrFalseProcessor = (value2) => isString2(value2) || value2 === false;\n      const stringOrNumberProcessor = (value2) => isString2(value2) || isNumber2(value2);\n      registerOption(\"skin\", {\n        processor: (value2) => isString2(value2) || value2 === false,\n        default: \"oxide\"\n      });\n      registerOption(\"skin_url\", { processor: \"string\" });\n      registerOption(\"height\", {\n        processor: stringOrNumberProcessor,\n        default: Math.max(editor.getElement().offsetHeight, 400)\n      });\n      registerOption(\"width\", {\n        processor: stringOrNumberProcessor,\n        default: global$7.DOM.getStyle(editor.getElement(), \"width\")\n      });\n      registerOption(\"min_height\", {\n        processor: \"number\",\n        default: 100\n      });\n      registerOption(\"min_width\", { processor: \"number\" });\n      registerOption(\"max_height\", { processor: \"number\" });\n      registerOption(\"max_width\", { processor: \"number\" });\n      registerOption(\"style_formats\", { processor: \"object[]\" });\n      registerOption(\"style_formats_merge\", {\n        processor: \"boolean\",\n        default: false\n      });\n      registerOption(\"style_formats_autohide\", {\n        processor: \"boolean\",\n        default: false\n      });\n      registerOption(\"line_height_formats\", {\n        processor: \"string\",\n        default: \"1 1.1 1.2 1.3 1.4 1.5 2\"\n      });\n      registerOption(\"font_family_formats\", {\n        processor: \"string\",\n        default: \"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats\"\n      });\n      registerOption(\"font_size_formats\", {\n        processor: \"string\",\n        default: \"8pt 10pt 12pt 14pt 18pt 24pt 36pt\"\n      });\n      registerOption(\"block_formats\", {\n        processor: \"string\",\n        default: \"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre\"\n      });\n      registerOption(\"content_langs\", { processor: \"object[]\" });\n      registerOption(\"removed_menuitems\", {\n        processor: \"string\",\n        default: \"\"\n      });\n      registerOption(\"menubar\", {\n        processor: (value2) => isString2(value2) || isBoolean2(value2),\n        default: !isPhone\n      });\n      registerOption(\"menu\", {\n        processor: \"object\",\n        default: {}\n      });\n      registerOption(\"toolbar\", {\n        processor: (value2) => {\n          if (isBoolean2(value2) || isString2(value2) || isArray2(value2)) {\n            return {\n              value: value2,\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: \"Must be a boolean, string or array.\"\n            };\n          }\n        },\n        default: true\n      });\n      range$2(9, (num) => {\n        registerOption(\"toolbar\" + (num + 1), { processor: \"string\" });\n      });\n      registerOption(\"toolbar_mode\", {\n        processor: \"string\",\n        default: isMobile ? \"scrolling\" : \"floating\"\n      });\n      registerOption(\"toolbar_groups\", {\n        processor: \"object\",\n        default: {}\n      });\n      registerOption(\"toolbar_location\", {\n        processor: \"string\",\n        default: ToolbarLocation$1.auto\n      });\n      registerOption(\"toolbar_persist\", {\n        processor: \"boolean\",\n        default: false\n      });\n      registerOption(\"toolbar_sticky\", {\n        processor: \"boolean\",\n        default: editor.inline\n      });\n      registerOption(\"toolbar_sticky_offset\", {\n        processor: \"number\",\n        default: 0\n      });\n      registerOption(\"fixed_toolbar_container\", {\n        processor: \"string\",\n        default: \"\"\n      });\n      registerOption(\"fixed_toolbar_container_target\", { processor: \"object\" });\n      registerOption(\"file_picker_callback\", { processor: \"function\" });\n      registerOption(\"file_picker_validator_handler\", { processor: \"function\" });\n      registerOption(\"file_picker_types\", { processor: \"string\" });\n      registerOption(\"typeahead_urls\", {\n        processor: \"boolean\",\n        default: true\n      });\n      registerOption(\"anchor_top\", {\n        processor: stringOrFalseProcessor,\n        default: \"#top\"\n      });\n      registerOption(\"anchor_bottom\", {\n        processor: stringOrFalseProcessor,\n        default: \"#bottom\"\n      });\n      registerOption(\"draggable_modal\", {\n        processor: \"boolean\",\n        default: false\n      });\n      registerOption(\"statusbar\", {\n        processor: \"boolean\",\n        default: true\n      });\n      registerOption(\"elementpath\", {\n        processor: \"boolean\",\n        default: true\n      });\n      registerOption(\"branding\", {\n        processor: \"boolean\",\n        default: true\n      });\n      registerOption(\"resize\", {\n        processor: (value2) => value2 === \"both\" || isBoolean2(value2),\n        default: !global$5.deviceType.isTouch()\n      });\n    };\n    const isReadOnly = option$2(\"readonly\");\n    const getHeightOption = option$2(\"height\");\n    const getWidthOption = option$2(\"width\");\n    const getMinWidthOption = wrapOptional(option$2(\"min_width\"));\n    const getMinHeightOption = wrapOptional(option$2(\"min_height\"));\n    const getMaxWidthOption = wrapOptional(option$2(\"max_width\"));\n    const getMaxHeightOption = wrapOptional(option$2(\"max_height\"));\n    const getUserStyleFormats = wrapOptional(option$2(\"style_formats\"));\n    const shouldMergeStyleFormats = option$2(\"style_formats_merge\");\n    const shouldAutoHideStyleFormats = option$2(\"style_formats_autohide\");\n    const getContentLanguages = option$2(\"content_langs\");\n    const getRemovedMenuItems = option$2(\"removed_menuitems\");\n    const getToolbarMode = option$2(\"toolbar_mode\");\n    const getToolbarGroups = option$2(\"toolbar_groups\");\n    const getToolbarLocation = option$2(\"toolbar_location\");\n    const fixedContainerSelector = option$2(\"fixed_toolbar_container\");\n    const fixedToolbarContainerTarget = option$2(\"fixed_toolbar_container_target\");\n    const isToolbarPersist = option$2(\"toolbar_persist\");\n    const getStickyToolbarOffset = option$2(\"toolbar_sticky_offset\");\n    const getMenubar = option$2(\"menubar\");\n    const getToolbar = option$2(\"toolbar\");\n    const getFilePickerCallback = option$2(\"file_picker_callback\");\n    const getFilePickerValidatorHandler = option$2(\"file_picker_validator_handler\");\n    const getFilePickerTypes = option$2(\"file_picker_types\");\n    const useTypeaheadUrls = option$2(\"typeahead_urls\");\n    const getAnchorTop = option$2(\"anchor_top\");\n    const getAnchorBottom = option$2(\"anchor_bottom\");\n    const isDraggableModal$1 = option$2(\"draggable_modal\");\n    const useStatusBar = option$2(\"statusbar\");\n    const useElementPath = option$2(\"elementpath\");\n    const useBranding = option$2(\"branding\");\n    const getResize = option$2(\"resize\");\n    const getPasteAsText = option$2(\"paste_as_text\");\n    const isSkinDisabled = (editor) => editor.options.get(\"skin\") === false;\n    const isMenubarEnabled = (editor) => editor.options.get(\"menubar\") !== false;\n    const getSkinUrl = (editor) => {\n      const skinUrl = editor.options.get(\"skin_url\");\n      if (isSkinDisabled(editor)) {\n        return skinUrl;\n      } else {\n        if (skinUrl) {\n          return editor.documentBaseURI.toAbsolute(skinUrl);\n        } else {\n          const skin = editor.options.get(\"skin\");\n          return global$6.baseURL + \"/skins/ui/\" + skin;\n        }\n      }\n    };\n    const getLineHeightFormats = (editor) => editor.options.get(\"line_height_formats\").split(\" \");\n    const isToolbarEnabled = (editor) => {\n      const toolbar = getToolbar(editor);\n      const isToolbarString = isString2(toolbar);\n      const isToolbarObjectArray = isArray2(toolbar) && toolbar.length > 0;\n      return !isMultipleToolbars(editor) && (isToolbarObjectArray || isToolbarString || toolbar === true);\n    };\n    const getMultipleToolbarsOption = (editor) => {\n      const toolbars = range$2(9, (num) => editor.options.get(\"toolbar\" + (num + 1)));\n      const toolbarArray = filter$2(toolbars, isString2);\n      return someIf(toolbarArray.length > 0, toolbarArray);\n    };\n    const isMultipleToolbars = (editor) => getMultipleToolbarsOption(editor).fold(() => {\n      const toolbar = getToolbar(editor);\n      return isArrayOf(toolbar, isString2) && toolbar.length > 0;\n    }, always);\n    const isToolbarLocationBottom = (editor) => getToolbarLocation(editor) === ToolbarLocation$1.bottom;\n    const fixedContainerTarget = (editor) => {\n      if (!editor.inline) {\n        return Optional.none();\n      }\n      const selector = fixedContainerSelector(editor);\n      if (selector.length > 0) {\n        return descendant(body(), selector);\n      }\n      const element2 = fixedToolbarContainerTarget(editor);\n      if (isNonNullable(element2)) {\n        return Optional.some(SugarElement.fromDom(element2));\n      }\n      return Optional.none();\n    };\n    const useFixedContainer = (editor) => editor.inline && fixedContainerTarget(editor).isSome();\n    const getUiContainer = (editor) => {\n      const fixedContainer = fixedContainerTarget(editor);\n      return fixedContainer.getOrThunk(() => getContentContainer(getRootNode(SugarElement.fromDom(editor.getElement()))));\n    };\n    const isDistractionFree = (editor) => editor.inline && !isMenubarEnabled(editor) && !isToolbarEnabled(editor) && !isMultipleToolbars(editor);\n    const isStickyToolbar = (editor) => {\n      const isStickyToolbar2 = editor.options.get(\"toolbar_sticky\");\n      return (isStickyToolbar2 || editor.inline) && !useFixedContainer(editor) && !isDistractionFree(editor);\n    };\n    const getMenus = (editor) => {\n      const menu2 = editor.options.get(\"menu\");\n      return map$1(menu2, (menu3) => ({\n        ...menu3,\n        items: menu3.items\n      }));\n    };\n    var Options = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      get ToolbarMode() {\n        return ToolbarMode$1;\n      },\n      get ToolbarLocation() {\n        return ToolbarLocation$1;\n      },\n      register: register$e,\n      getSkinUrl,\n      isReadOnly,\n      isSkinDisabled,\n      getHeightOption,\n      getWidthOption,\n      getMinWidthOption,\n      getMinHeightOption,\n      getMaxWidthOption,\n      getMaxHeightOption,\n      getUserStyleFormats,\n      shouldMergeStyleFormats,\n      shouldAutoHideStyleFormats,\n      getLineHeightFormats,\n      getContentLanguages,\n      getRemovedMenuItems,\n      isMenubarEnabled,\n      isMultipleToolbars,\n      isToolbarEnabled,\n      isToolbarPersist,\n      getMultipleToolbarsOption,\n      getUiContainer,\n      useFixedContainer,\n      getToolbarMode,\n      isDraggableModal: isDraggableModal$1,\n      isDistractionFree,\n      isStickyToolbar,\n      getStickyToolbarOffset,\n      getToolbarLocation,\n      isToolbarLocationBottom,\n      getToolbarGroups,\n      getMenus,\n      getMenubar,\n      getToolbar,\n      getFilePickerCallback,\n      getFilePickerTypes,\n      useTypeaheadUrls,\n      getAnchorTop,\n      getAnchorBottom,\n      getFilePickerValidatorHandler,\n      useStatusBar,\n      useElementPath,\n      useBranding,\n      getResize,\n      getPasteAsText\n    });\n    const autocompleteSelector = \"[data-mce-autocompleter]\";\n    const detect = (elm) => closest$1(elm, autocompleteSelector);\n    const findIn = (elm) => descendant(elm, autocompleteSelector);\n    const setup$e = (api2, editor) => {\n      const redirectKeyToItem = (item2, e2) => {\n        emitWith(item2, keydown(), { raw: e2 });\n      };\n      const getItem = () => api2.getView().bind(Highlighting.getHighlighted);\n      editor.on(\"keydown\", (e2) => {\n        const keyCode = e2.which;\n        if (!api2.isActive()) {\n          return;\n        }\n        if (api2.isMenuOpen()) {\n          if (keyCode === 13) {\n            getItem().each(emitExecute);\n            e2.preventDefault();\n          } else if (keyCode === 40) {\n            getItem().fold(() => {\n              api2.getView().each(Highlighting.highlightFirst);\n            }, (item2) => {\n              redirectKeyToItem(item2, e2);\n            });\n            e2.preventDefault();\n            e2.stopImmediatePropagation();\n          } else if (keyCode === 37 || keyCode === 38 || keyCode === 39) {\n            getItem().each((item2) => {\n              redirectKeyToItem(item2, e2);\n              e2.preventDefault();\n              e2.stopImmediatePropagation();\n            });\n          }\n        } else {\n          if (keyCode === 13 || keyCode === 38 || keyCode === 40) {\n            api2.cancelIfNecessary();\n          }\n        }\n      });\n      editor.on(\"NodeChange\", (e2) => {\n        if (api2.isActive() && !api2.isProcessingAction() && detect(SugarElement.fromDom(e2.element)).isNone()) {\n          api2.cancelIfNecessary();\n        }\n      });\n    };\n    const AutocompleterEditorEvents = { setup: setup$e };\n    var ItemResponse;\n    (function(ItemResponse2) {\n      ItemResponse2[ItemResponse2[\"CLOSE_ON_EXECUTE\"] = 0] = \"CLOSE_ON_EXECUTE\";\n      ItemResponse2[ItemResponse2[\"BUBBLE_TO_SANDBOX\"] = 1] = \"BUBBLE_TO_SANDBOX\";\n    })(ItemResponse || (ItemResponse = {}));\n    var ItemResponse$1 = ItemResponse;\n    const navClass = \"tox-menu-nav__js\";\n    const selectableClass = \"tox-collection__item\";\n    const colorClass = \"tox-swatch\";\n    const presetClasses = {\n      normal: navClass,\n      color: colorClass\n    };\n    const tickedClass = \"tox-collection__item--enabled\";\n    const groupHeadingClass = \"tox-collection__group-heading\";\n    const iconClass = \"tox-collection__item-icon\";\n    const textClass = \"tox-collection__item-label\";\n    const accessoryClass = \"tox-collection__item-accessory\";\n    const caretClass = \"tox-collection__item-caret\";\n    const checkmarkClass = \"tox-collection__item-checkmark\";\n    const activeClass = \"tox-collection__item--active\";\n    const containerClass = \"tox-collection__item-container\";\n    const containerColumnClass = \"tox-collection__item-container--column\";\n    const containerRowClass = \"tox-collection__item-container--row\";\n    const containerAlignRightClass = \"tox-collection__item-container--align-right\";\n    const containerAlignLeftClass = \"tox-collection__item-container--align-left\";\n    const containerValignTopClass = \"tox-collection__item-container--valign-top\";\n    const containerValignMiddleClass = \"tox-collection__item-container--valign-middle\";\n    const containerValignBottomClass = \"tox-collection__item-container--valign-bottom\";\n    const classForPreset = (presets) => get$g(presetClasses, presets).getOr(navClass);\n    const forMenu = (presets) => {\n      if (presets === \"color\") {\n        return \"tox-swatches\";\n      } else {\n        return \"tox-menu\";\n      }\n    };\n    const classes = (presets) => ({\n      backgroundMenu: \"tox-background-menu\",\n      selectedMenu: \"tox-selected-menu\",\n      selectedItem: \"tox-collection__item--active\",\n      hasIcons: \"tox-menu--has-icons\",\n      menu: forMenu(presets),\n      tieredMenu: \"tox-tiered-menu\"\n    });\n    const markers = (presets) => {\n      const menuClasses = classes(presets);\n      return {\n        backgroundMenu: menuClasses.backgroundMenu,\n        selectedMenu: menuClasses.selectedMenu,\n        menu: menuClasses.menu,\n        selectedItem: menuClasses.selectedItem,\n        item: classForPreset(presets)\n      };\n    };\n    const dom$1 = (hasIcons, columns, presets) => {\n      const menuClasses = classes(presets);\n      return {\n        tag: \"div\",\n        classes: flatten([\n          [\n            menuClasses.menu,\n            `tox-menu-${columns}-column`\n          ],\n          hasIcons ? [menuClasses.hasIcons] : []\n        ])\n      };\n    };\n    const components = [Menu.parts.items({})];\n    const part = (hasIcons, columns, presets) => {\n      const menuClasses = classes(presets);\n      const d2 = {\n        tag: \"div\",\n        classes: flatten([[menuClasses.tieredMenu]])\n      };\n      return {\n        dom: d2,\n        markers: markers(presets)\n      };\n    };\n    const chunk = (rowDom, numColumns) => (items) => {\n      const chunks = chunk$1(items, numColumns);\n      return map$2(chunks, (c2) => ({\n        dom: rowDom,\n        components: c2\n      }));\n    };\n    const forSwatch = (columns) => ({\n      dom: {\n        tag: \"div\",\n        classes: [\n          \"tox-menu\",\n          \"tox-swatches-menu\"\n        ]\n      },\n      components: [{\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-swatches\"]\n        },\n        components: [Menu.parts.items({\n          preprocess: columns !== \"auto\" ? chunk({\n            tag: \"div\",\n            classes: [\"tox-swatches__row\"]\n          }, columns) : identity2\n        })]\n      }]\n    });\n    const forToolbar = (columns) => ({\n      dom: {\n        tag: \"div\",\n        classes: [\n          \"tox-menu\",\n          \"tox-collection\",\n          \"tox-collection--toolbar\",\n          \"tox-collection--toolbar-lg\"\n        ]\n      },\n      components: [Menu.parts.items({\n        preprocess: chunk({\n          tag: \"div\",\n          classes: [\"tox-collection__group\"]\n        }, columns)\n      })]\n    });\n    const preprocessCollection = (items, isSeparator2) => {\n      const allSplits = [];\n      let currentSplit = [];\n      each$1(items, (item2, i3) => {\n        if (isSeparator2(item2, i3)) {\n          if (currentSplit.length > 0) {\n            allSplits.push(currentSplit);\n          }\n          currentSplit = [];\n          if (has$2(item2.dom, \"innerHtml\") || item2.components.length > 0) {\n            currentSplit.push(item2);\n          }\n        } else {\n          currentSplit.push(item2);\n        }\n      });\n      if (currentSplit.length > 0) {\n        allSplits.push(currentSplit);\n      }\n      return map$2(allSplits, (s2) => ({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-collection__group\"]\n        },\n        components: s2\n      }));\n    };\n    const forCollection = (columns, initItems, _hasIcons = true) => ({\n      dom: {\n        tag: \"div\",\n        classes: [\n          \"tox-menu\",\n          \"tox-collection\"\n        ].concat(columns === 1 ? [\"tox-collection--list\"] : [\"tox-collection--grid\"])\n      },\n      components: [Menu.parts.items({\n        preprocess: (items) => {\n          if (columns !== \"auto\" && columns > 1) {\n            return chunk({\n              tag: \"div\",\n              classes: [\"tox-collection__group\"]\n            }, columns)(items);\n          } else {\n            return preprocessCollection(items, (_item, i3) => initItems[i3].type === \"separator\");\n          }\n        }\n      })]\n    });\n    const forHorizontalCollection = (initItems, _hasIcons = true) => ({\n      dom: {\n        tag: \"div\",\n        classes: [\n          \"tox-collection\",\n          \"tox-collection--horizontal\"\n        ]\n      },\n      components: [Menu.parts.items({ preprocess: (items) => preprocessCollection(items, (_item, i3) => initItems[i3].type === \"separator\") })]\n    });\n    const menuHasIcons = (xs) => exists(xs, (item2) => \"icon\" in item2 && item2.icon !== void 0);\n    const handleError = (error3) => {\n      console.error(formatError(error3));\n      console.log(error3);\n      return Optional.none();\n    };\n    const createHorizontalPartialMenuWithAlloyItems = (value2, _hasIcons, items, _columns, _presets) => {\n      const structure = forHorizontalCollection(items);\n      return {\n        value: value2,\n        dom: structure.dom,\n        components: structure.components,\n        items\n      };\n    };\n    const createPartialMenuWithAlloyItems = (value2, hasIcons, items, columns, presets) => {\n      if (presets === \"color\") {\n        const structure = forSwatch(columns);\n        return {\n          value: value2,\n          dom: structure.dom,\n          components: structure.components,\n          items\n        };\n      }\n      if (presets === \"normal\" && columns === \"auto\") {\n        const structure = forCollection(columns, items);\n        return {\n          value: value2,\n          dom: structure.dom,\n          components: structure.components,\n          items\n        };\n      }\n      if (presets === \"normal\" && columns === 1) {\n        const structure = forCollection(1, items);\n        return {\n          value: value2,\n          dom: structure.dom,\n          components: structure.components,\n          items\n        };\n      }\n      if (presets === \"normal\") {\n        const structure = forCollection(columns, items);\n        return {\n          value: value2,\n          dom: structure.dom,\n          components: structure.components,\n          items\n        };\n      }\n      if (presets === \"listpreview\" && columns !== \"auto\") {\n        const structure = forToolbar(columns);\n        return {\n          value: value2,\n          dom: structure.dom,\n          components: structure.components,\n          items\n        };\n      }\n      return {\n        value: value2,\n        dom: dom$1(hasIcons, columns, presets),\n        components,\n        items\n      };\n    };\n    const type = requiredString(\"type\");\n    const name$1 = requiredString(\"name\");\n    const label = requiredString(\"label\");\n    const text2 = requiredString(\"text\");\n    const title = requiredString(\"title\");\n    const icon = requiredString(\"icon\");\n    const value$1 = requiredString(\"value\");\n    const fetch$1 = requiredFunction(\"fetch\");\n    const getSubmenuItems = requiredFunction(\"getSubmenuItems\");\n    const onAction = requiredFunction(\"onAction\");\n    const onItemAction = requiredFunction(\"onItemAction\");\n    const onSetup = defaultedFunction(\"onSetup\", () => noop);\n    const optionalName = optionString(\"name\");\n    const optionalText = optionString(\"text\");\n    const optionalIcon = optionString(\"icon\");\n    const optionalTooltip = optionString(\"tooltip\");\n    const optionalLabel = optionString(\"label\");\n    const optionalShortcut = optionString(\"shortcut\");\n    const optionalSelect = optionFunction(\"select\");\n    const active = defaultedBoolean(\"active\", false);\n    const borderless = defaultedBoolean(\"borderless\", false);\n    const enabled = defaultedBoolean(\"enabled\", true);\n    const primary = defaultedBoolean(\"primary\", false);\n    const defaultedColumns = (num) => defaulted(\"columns\", num);\n    const defaultedMeta = defaulted(\"meta\", {});\n    const defaultedOnAction = defaultedFunction(\"onAction\", noop);\n    const defaultedType = (type2) => defaultedString(\"type\", type2);\n    const generatedName = (namePrefix) => field$1(\"name\", \"name\", defaultedThunk(() => generate$6(`${namePrefix}-name`)), string2);\n    const generatedValue = (valuePrefix) => field$1(\"value\", \"value\", defaultedThunk(() => generate$6(`${valuePrefix}-value`)), anyValue());\n    const separatorMenuItemSchema = objOf([\n      type,\n      optionalText\n    ]);\n    const createSeparatorMenuItem = (spec) => asRaw(\"separatormenuitem\", separatorMenuItemSchema, spec);\n    const autocompleterItemSchema = objOf([\n      defaultedType(\"autocompleteitem\"),\n      active,\n      enabled,\n      defaultedMeta,\n      value$1,\n      optionalText,\n      optionalIcon\n    ]);\n    const createSeparatorItem = (spec) => asRaw(\"Autocompleter.Separator\", separatorMenuItemSchema, spec);\n    const createAutocompleterItem = (spec) => asRaw(\"Autocompleter.Item\", autocompleterItemSchema, spec);\n    const baseToolbarButtonFields = [\n      enabled,\n      optionalTooltip,\n      optionalIcon,\n      optionalText,\n      onSetup\n    ];\n    const toolbarButtonSchema = objOf([\n      type,\n      onAction\n    ].concat(baseToolbarButtonFields));\n    const createToolbarButton = (spec) => asRaw(\"toolbarbutton\", toolbarButtonSchema, spec);\n    const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n    const toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([\n      type,\n      onAction\n    ]));\n    const createToggleButton = (spec) => asRaw(\"ToggleButton\", toggleButtonSchema, spec);\n    const contextBarFields = [\n      defaultedFunction(\"predicate\", never),\n      defaultedStringEnum(\"scope\", \"node\", [\n        \"node\",\n        \"editor\"\n      ]),\n      defaultedStringEnum(\"position\", \"selection\", [\n        \"node\",\n        \"selection\",\n        \"line\"\n      ])\n    ];\n    const contextButtonFields = baseToolbarButtonFields.concat([\n      defaultedType(\"contextformbutton\"),\n      primary,\n      onAction,\n      customField(\"original\", identity2)\n    ]);\n    const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n      defaultedType(\"contextformbutton\"),\n      primary,\n      onAction,\n      customField(\"original\", identity2)\n    ]);\n    const launchButtonFields = baseToolbarButtonFields.concat([defaultedType(\"contextformbutton\")]);\n    const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaultedType(\"contextformtogglebutton\")]);\n    const toggleOrNormal = choose$1(\"type\", {\n      contextformbutton: contextButtonFields,\n      contextformtogglebutton: contextToggleButtonFields\n    });\n    const contextFormSchema = objOf([\n      defaultedType(\"contextform\"),\n      defaultedFunction(\"initValue\", constant$1(\"\")),\n      optionalLabel,\n      requiredArrayOf(\"commands\", toggleOrNormal),\n      optionOf(\"launch\", choose$1(\"type\", {\n        contextformbutton: launchButtonFields,\n        contextformtogglebutton: launchToggleButtonFields\n      }))\n    ].concat(contextBarFields));\n    const createContextForm = (spec) => asRaw(\"ContextForm\", contextFormSchema, spec);\n    const contextToolbarSchema = objOf([\n      defaultedType(\"contexttoolbar\"),\n      requiredString(\"items\")\n    ].concat(contextBarFields));\n    const createContextToolbar = (spec) => asRaw(\"ContextToolbar\", contextToolbarSchema, spec);\n    const cardImageFields = [\n      type,\n      requiredString(\"src\"),\n      optionString(\"alt\"),\n      defaultedArrayOf(\"classes\", [], string2)\n    ];\n    const cardImageSchema = objOf(cardImageFields);\n    const cardTextFields = [\n      type,\n      text2,\n      optionalName,\n      defaultedArrayOf(\"classes\", [\"tox-collection__item-label\"], string2)\n    ];\n    const cardTextSchema = objOf(cardTextFields);\n    const itemSchema$1 = valueThunk(() => choose$2(\"type\", {\n      cardimage: cardImageSchema,\n      cardtext: cardTextSchema,\n      cardcontainer: cardContainerSchema\n    }));\n    const cardContainerSchema = objOf([\n      type,\n      defaultedString(\"direction\", \"horizontal\"),\n      defaultedString(\"align\", \"left\"),\n      defaultedString(\"valign\", \"middle\"),\n      requiredArrayOf(\"items\", itemSchema$1)\n    ]);\n    const commonMenuItemFields = [\n      enabled,\n      optionalText,\n      optionalShortcut,\n      generatedValue(\"menuitem\"),\n      defaultedMeta\n    ];\n    const cardMenuItemSchema = objOf([\n      type,\n      optionalLabel,\n      requiredArrayOf(\"items\", itemSchema$1),\n      onSetup,\n      defaultedOnAction\n    ].concat(commonMenuItemFields));\n    const createCardMenuItem = (spec) => asRaw(\"cardmenuitem\", cardMenuItemSchema, spec);\n    const choiceMenuItemSchema = objOf([\n      type,\n      active,\n      optionalIcon\n    ].concat(commonMenuItemFields));\n    const createChoiceMenuItem = (spec) => asRaw(\"choicemenuitem\", choiceMenuItemSchema, spec);\n    const baseFields = [\n      type,\n      requiredString(\"fancytype\"),\n      defaultedOnAction\n    ];\n    const insertTableFields = [defaulted(\"initData\", {})].concat(baseFields);\n    const colorSwatchFields = [defaultedObjOf(\"initData\", {}, [\n      defaultedBoolean(\"allowCustomColors\", true),\n      optionArrayOf(\"colors\", anyValue())\n    ])].concat(baseFields);\n    const fancyMenuItemSchema = choose$1(\"fancytype\", {\n      inserttable: insertTableFields,\n      colorswatch: colorSwatchFields\n    });\n    const createFancyMenuItem = (spec) => asRaw(\"fancymenuitem\", fancyMenuItemSchema, spec);\n    const menuItemSchema = objOf([\n      type,\n      onSetup,\n      defaultedOnAction,\n      optionalIcon\n    ].concat(commonMenuItemFields));\n    const createMenuItem = (spec) => asRaw(\"menuitem\", menuItemSchema, spec);\n    const nestedMenuItemSchema = objOf([\n      type,\n      getSubmenuItems,\n      onSetup,\n      optionalIcon\n    ].concat(commonMenuItemFields));\n    const createNestedMenuItem = (spec) => asRaw(\"nestedmenuitem\", nestedMenuItemSchema, spec);\n    const toggleMenuItemSchema = objOf([\n      type,\n      optionalIcon,\n      active,\n      onSetup,\n      onAction\n    ].concat(commonMenuItemFields));\n    const createToggleMenuItem = (spec) => asRaw(\"togglemenuitem\", toggleMenuItemSchema, spec);\n    const detectSize = (comp, margin, selectorClass) => {\n      const descendants$1 = descendants(comp.element, \".\" + selectorClass);\n      if (descendants$1.length > 0) {\n        const columnLength = findIndex$1(descendants$1, (c2) => {\n          const thisTop = c2.dom.getBoundingClientRect().top;\n          const cTop = descendants$1[0].dom.getBoundingClientRect().top;\n          return Math.abs(thisTop - cTop) > margin;\n        }).getOr(descendants$1.length);\n        return Optional.some({\n          numColumns: columnLength,\n          numRows: Math.ceil(descendants$1.length / columnLength)\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const namedEvents = (name2, handlers2) => derive$1([config2(name2, handlers2)]);\n    const unnamedEvents = (handlers2) => namedEvents(generate$6(\"unnamed-events\"), handlers2);\n    const SimpleBehaviours = {\n      namedEvents,\n      unnamedEvents\n    };\n    const ExclusivityChannel = generate$6(\"tooltip.exclusive\");\n    const ShowTooltipEvent = generate$6(\"tooltip.show\");\n    const HideTooltipEvent = generate$6(\"tooltip.hide\");\n    const hideAllExclusive = (component, _tConfig, _tState) => {\n      component.getSystem().broadcastOn([ExclusivityChannel], {});\n    };\n    const setComponents = (component, tConfig, tState, specs) => {\n      tState.getTooltip().each((tooltip) => {\n        if (tooltip.getSystem().isConnected()) {\n          Replacing.set(tooltip, specs);\n        }\n      });\n    };\n    var TooltippingApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      hideAllExclusive,\n      setComponents\n    });\n    const events$9 = (tooltipConfig, state) => {\n      const hide = (comp) => {\n        state.getTooltip().each((p2) => {\n          detach(p2);\n          tooltipConfig.onHide(comp, p2);\n          state.clearTooltip();\n        });\n        state.clearTimer();\n      };\n      const show2 = (comp) => {\n        if (!state.isShowing()) {\n          hideAllExclusive(comp);\n          const sink = tooltipConfig.lazySink(comp).getOrDie();\n          const popup = comp.getSystem().build({\n            dom: tooltipConfig.tooltipDom,\n            components: tooltipConfig.tooltipComponents,\n            events: derive$2(tooltipConfig.mode === \"normal\" ? [\n              run$1(mouseover(), (_2) => {\n                emit(comp, ShowTooltipEvent);\n              }),\n              run$1(mouseout(), (_2) => {\n                emit(comp, HideTooltipEvent);\n              })\n            ] : []),\n            behaviours: derive$1([Replacing.config({})])\n          });\n          state.setTooltip(popup);\n          attach(sink, popup);\n          tooltipConfig.onShow(comp, popup);\n          Positioning.position(sink, popup, { anchor: tooltipConfig.anchor(comp) });\n        }\n      };\n      return derive$2(flatten([\n        [\n          run$1(ShowTooltipEvent, (comp) => {\n            state.resetTimer(() => {\n              show2(comp);\n            }, tooltipConfig.delay);\n          }),\n          run$1(HideTooltipEvent, (comp) => {\n            state.resetTimer(() => {\n              hide(comp);\n            }, tooltipConfig.delay);\n          }),\n          run$1(receive(), (comp, message) => {\n            const receivingData = message;\n            if (!receivingData.universal) {\n              if (contains$2(receivingData.channels, ExclusivityChannel)) {\n                hide(comp);\n              }\n            }\n          }),\n          runOnDetached((comp) => {\n            hide(comp);\n          })\n        ],\n        tooltipConfig.mode === \"normal\" ? [\n          run$1(focusin(), (comp) => {\n            emit(comp, ShowTooltipEvent);\n          }),\n          run$1(postBlur(), (comp) => {\n            emit(comp, HideTooltipEvent);\n          }),\n          run$1(mouseover(), (comp) => {\n            emit(comp, ShowTooltipEvent);\n          }),\n          run$1(mouseout(), (comp) => {\n            emit(comp, HideTooltipEvent);\n          })\n        ] : [\n          run$1(highlight$1(), (comp, _se) => {\n            emit(comp, ShowTooltipEvent);\n          }),\n          run$1(dehighlight$1(), (comp) => {\n            emit(comp, HideTooltipEvent);\n          })\n        ]\n      ]));\n    };\n    var ActiveTooltipping = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      events: events$9\n    });\n    var TooltippingSchema = [\n      required$1(\"lazySink\"),\n      required$1(\"tooltipDom\"),\n      defaulted(\"exclusive\", true),\n      defaulted(\"tooltipComponents\", []),\n      defaulted(\"delay\", 300),\n      defaultedStringEnum(\"mode\", \"normal\", [\n        \"normal\",\n        \"follow-highlight\"\n      ]),\n      defaulted(\"anchor\", (comp) => ({\n        type: \"hotspot\",\n        hotspot: comp,\n        layouts: {\n          onLtr: constant$1([\n            south$2,\n            north$2,\n            southeast$2,\n            northeast$2,\n            southwest$2,\n            northwest$2\n          ]),\n          onRtl: constant$1([\n            south$2,\n            north$2,\n            southeast$2,\n            northeast$2,\n            southwest$2,\n            northwest$2\n          ])\n        }\n      })),\n      onHandler(\"onHide\"),\n      onHandler(\"onShow\")\n    ];\n    const init$b = () => {\n      const timer = value$2();\n      const popup = value$2();\n      const clearTimer = () => {\n        timer.on(clearTimeout);\n      };\n      const resetTimer = (f2, delay) => {\n        clearTimer();\n        timer.set(setTimeout(f2, delay));\n      };\n      const readState = constant$1(\"not-implemented\");\n      return nu$8({\n        getTooltip: popup.get,\n        isShowing: popup.isSet,\n        setTooltip: popup.set,\n        clearTooltip: popup.clear,\n        clearTimer,\n        resetTimer,\n        readState\n      });\n    };\n    var TooltippingState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      init: init$b\n    });\n    const Tooltipping = create$3({\n      fields: TooltippingSchema,\n      name: \"tooltipping\",\n      active: ActiveTooltipping,\n      state: TooltippingState,\n      apis: TooltippingApis\n    });\n    const escape2 = (text3) => text3.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    const ReadOnlyChannel = \"silver.readonly\";\n    const ReadOnlyDataSchema = objOf([requiredBoolean(\"readonly\")]);\n    const broadcastReadonly = (uiComponents, readonly) => {\n      const outerContainer = uiComponents.outerContainer;\n      const target = outerContainer.element;\n      if (readonly) {\n        uiComponents.mothership.broadcastOn([dismissPopups()], { target });\n        uiComponents.uiMothership.broadcastOn([dismissPopups()], { target });\n      }\n      uiComponents.mothership.broadcastOn([ReadOnlyChannel], { readonly });\n      uiComponents.uiMothership.broadcastOn([ReadOnlyChannel], { readonly });\n    };\n    const setupReadonlyModeSwitch = (editor, uiComponents) => {\n      editor.on(\"init\", () => {\n        if (editor.mode.isReadOnly()) {\n          broadcastReadonly(uiComponents, true);\n        }\n      });\n      editor.on(\"SwitchMode\", () => broadcastReadonly(uiComponents, editor.mode.isReadOnly()));\n      if (isReadOnly(editor)) {\n        editor.mode.set(\"readonly\");\n      }\n    };\n    const receivingConfig = () => Receiving.config({\n      channels: {\n        [ReadOnlyChannel]: {\n          schema: ReadOnlyDataSchema,\n          onReceive: (comp, data) => {\n            Disabling.set(comp, data.readonly);\n          }\n        }\n      }\n    });\n    const item = (disabled) => Disabling.config({\n      disabled,\n      disableClass: \"tox-collection__item--state-disabled\"\n    });\n    const button = (disabled) => Disabling.config({ disabled });\n    const splitButton = (disabled) => Disabling.config({\n      disabled,\n      disableClass: \"tox-tbtn--disabled\"\n    });\n    const toolbarButton = (disabled) => Disabling.config({\n      disabled,\n      disableClass: \"tox-tbtn--disabled\",\n      useNative: false\n    });\n    const DisablingConfigs = {\n      item,\n      button,\n      splitButton,\n      toolbarButton\n    };\n    const runWithApi = (info, comp) => {\n      const api2 = info.getApi(comp);\n      return (f2) => {\n        f2(api2);\n      };\n    };\n    const onControlAttached = (info, editorOffCell) => runOnAttached((comp) => {\n      const run2 = runWithApi(info, comp);\n      run2((api2) => {\n        const onDestroy = info.onSetup(api2);\n        if (isFunction2(onDestroy)) {\n          editorOffCell.set(onDestroy);\n        }\n      });\n    });\n    const onControlDetached = (getApi2, editorOffCell) => runOnDetached((comp) => runWithApi(getApi2, comp)(editorOffCell.get()));\n    const onMenuItemExecute = (info, itemResponse) => runOnExecute$1((comp, simulatedEvent) => {\n      runWithApi(info, comp)(info.onAction);\n      if (!info.triggersSubmenu && itemResponse === ItemResponse$1.CLOSE_ON_EXECUTE) {\n        if (comp.getSystem().isConnected()) {\n          emit(comp, sandboxClose());\n        }\n        simulatedEvent.stop();\n      }\n    });\n    const menuItemEventOrder = {\n      [execute$5()]: [\n        \"disabling\",\n        \"alloy.base.behaviour\",\n        \"toggling\",\n        \"item-events\"\n      ]\n    };\n    const componentRenderPipeline = cat;\n    const renderCommonItem = (spec, structure, itemResponse, providersbackstage) => {\n      const editorOffCell = Cell(noop);\n      return {\n        type: \"item\",\n        dom: structure.dom,\n        components: componentRenderPipeline(structure.optComponents),\n        data: spec.data,\n        eventOrder: menuItemEventOrder,\n        hasSubmenu: spec.triggersSubmenu,\n        itemBehaviours: derive$1([\n          config2(\"item-events\", [\n            onMenuItemExecute(spec, itemResponse),\n            onControlAttached(spec, editorOffCell),\n            onControlDetached(spec, editorOffCell)\n          ]),\n          DisablingConfigs.item(() => !spec.enabled || providersbackstage.isDisabled()),\n          receivingConfig(),\n          Replacing.config({})\n        ].concat(spec.itemBehaviours))\n      };\n    };\n    const buildData = (source) => ({\n      value: source.value,\n      meta: {\n        text: source.text.getOr(\"\"),\n        ...source.meta\n      }\n    });\n    const convertText = (source) => {\n      const isMac2 = global$5.os.isMacOS() || global$5.os.isiOS();\n      const mac = {\n        alt: \"⌥\",\n        ctrl: \"⌃\",\n        shift: \"⇧\",\n        meta: \"⌘\",\n        access: \"⌃⌥\"\n      };\n      const other = {\n        meta: \"Ctrl\",\n        access: \"Shift+Alt\"\n      };\n      const replace3 = isMac2 ? mac : other;\n      const shortcut = source.split(\"+\");\n      const updated = map$2(shortcut, (segment) => {\n        const search2 = segment.toLowerCase().trim();\n        return has$2(replace3, search2) ? replace3[search2] : segment;\n      });\n      return isMac2 ? updated.join(\"\") : updated.join(\"+\");\n    };\n    const renderIcon$1 = (name2, icons2, classes2 = [iconClass]) => render$3(name2, {\n      tag: \"div\",\n      classes: classes2\n    }, icons2);\n    const renderText = (text3) => ({\n      dom: {\n        tag: \"div\",\n        classes: [textClass]\n      },\n      components: [text$1(global$8.translate(text3))]\n    });\n    const renderHtml = (html, classes2) => ({\n      dom: {\n        tag: \"div\",\n        classes: classes2,\n        innerHtml: html\n      }\n    });\n    const renderStyledText = (style, text3) => ({\n      dom: {\n        tag: \"div\",\n        classes: [textClass]\n      },\n      components: [{\n        dom: {\n          tag: style.tag,\n          styles: style.styles\n        },\n        components: [text$1(global$8.translate(text3))]\n      }]\n    });\n    const renderShortcut = (shortcut) => ({\n      dom: {\n        tag: \"div\",\n        classes: [accessoryClass]\n      },\n      components: [text$1(convertText(shortcut))]\n    });\n    const renderCheckmark = (icons2) => renderIcon$1(\"checkmark\", icons2, [checkmarkClass]);\n    const renderSubmenuCaret = (icons2) => renderIcon$1(\"chevron-right\", icons2, [caretClass]);\n    const renderDownwardsCaret = (icons2) => renderIcon$1(\"chevron-down\", icons2, [caretClass]);\n    const renderContainer = (container, components2) => {\n      const directionClass = container.direction === \"vertical\" ? containerColumnClass : containerRowClass;\n      const alignClass = container.align === \"left\" ? containerAlignLeftClass : containerAlignRightClass;\n      const getValignClass = () => {\n        switch (container.valign) {\n          case \"top\":\n            return containerValignTopClass;\n          case \"middle\":\n            return containerValignMiddleClass;\n          case \"bottom\":\n            return containerValignBottomClass;\n        }\n      };\n      return {\n        dom: {\n          tag: \"div\",\n          classes: [\n            containerClass,\n            directionClass,\n            alignClass,\n            getValignClass()\n          ]\n        },\n        components: components2\n      };\n    };\n    const renderImage = (src, classes2, alt) => ({\n      dom: {\n        tag: \"img\",\n        classes: classes2,\n        attributes: {\n          src,\n          alt: alt.getOr(\"\")\n        }\n      }\n    });\n    const renderColorStructure = (item2, providerBackstage, fallbackIcon) => {\n      const colorPickerCommand = \"custom\";\n      const removeColorCommand = \"remove\";\n      const itemText = item2.ariaLabel;\n      const itemValue = item2.value;\n      const iconSvg = item2.iconContent.map((name2) => getOr(name2, providerBackstage.icons, fallbackIcon));\n      const getDom = () => {\n        const common = colorClass;\n        const icon2 = iconSvg.getOr(\"\");\n        const attributes = itemText.map((text3) => ({ title: providerBackstage.translate(text3) })).getOr({});\n        const baseDom = {\n          tag: \"div\",\n          attributes,\n          classes: [common]\n        };\n        if (itemValue === colorPickerCommand) {\n          return {\n            ...baseDom,\n            tag: \"button\",\n            classes: [\n              ...baseDom.classes,\n              \"tox-swatches__picker-btn\"\n            ],\n            innerHtml: icon2\n          };\n        } else if (itemValue === removeColorCommand) {\n          return {\n            ...baseDom,\n            classes: [\n              ...baseDom.classes,\n              \"tox-swatch--remove\"\n            ],\n            innerHtml: icon2\n          };\n        } else {\n          return {\n            ...baseDom,\n            attributes: {\n              ...baseDom.attributes,\n              \"data-mce-color\": itemValue\n            },\n            styles: { \"background-color\": itemValue }\n          };\n        }\n      };\n      return {\n        dom: getDom(),\n        optComponents: []\n      };\n    };\n    const renderItemDomStructure = (ariaLabel) => {\n      const domTitle = ariaLabel.map((label2) => ({ attributes: { title: global$8.translate(label2) } })).getOr({});\n      return {\n        tag: \"div\",\n        classes: [\n          navClass,\n          selectableClass\n        ],\n        ...domTitle\n      };\n    };\n    const renderNormalItemStructure = (info, providersBackstage, renderIcons, fallbackIcon) => {\n      const iconSpec = {\n        tag: \"div\",\n        classes: [iconClass]\n      };\n      const renderIcon2 = (iconName) => render$3(iconName, iconSpec, providersBackstage.icons, fallbackIcon);\n      const renderEmptyIcon = () => Optional.some({ dom: iconSpec });\n      const leftIcon = renderIcons ? info.iconContent.map(renderIcon2).orThunk(renderEmptyIcon) : Optional.none();\n      const checkmark = info.checkMark;\n      const textRender = Optional.from(info.meta).fold(() => renderText, (meta) => has$2(meta, \"style\") ? curry(renderStyledText, meta.style) : renderText);\n      const content = info.htmlContent.fold(() => info.textContent.map(textRender), (html) => Optional.some(renderHtml(html, [textClass])));\n      const menuItem = {\n        dom: renderItemDomStructure(info.ariaLabel),\n        optComponents: [\n          leftIcon,\n          content,\n          info.shortcutContent.map(renderShortcut),\n          checkmark,\n          info.caret\n        ]\n      };\n      return menuItem;\n    };\n    const renderItemStructure = (info, providersBackstage, renderIcons, fallbackIcon = Optional.none()) => {\n      if (info.presets === \"color\") {\n        return renderColorStructure(info, providersBackstage, fallbackIcon);\n      } else {\n        return renderNormalItemStructure(info, providersBackstage, renderIcons, fallbackIcon);\n      }\n    };\n    const tooltipBehaviour = (meta, sharedBackstage) => get$g(meta, \"tooltipWorker\").map((tooltipWorker) => [Tooltipping.config({\n      lazySink: sharedBackstage.getSink,\n      tooltipDom: {\n        tag: \"div\",\n        classes: [\"tox-tooltip-worker-container\"]\n      },\n      tooltipComponents: [],\n      anchor: (comp) => ({\n        type: \"submenu\",\n        item: comp,\n        overrides: { maxHeightFunction: expandable$1 }\n      }),\n      mode: \"follow-highlight\",\n      onShow: (component, _tooltip) => {\n        tooltipWorker((elm) => {\n          Tooltipping.setComponents(component, [external$1({ element: SugarElement.fromDom(elm) })]);\n        });\n      }\n    })]).getOr([]);\n    const encodeText = (text3) => global$7.DOM.encode(text3);\n    const replaceText = (text3, matchText2) => {\n      const translated = global$8.translate(text3);\n      const encoded = encodeText(translated);\n      if (matchText2.length > 0) {\n        const escapedMatchRegex = new RegExp(escape2(matchText2), \"gi\");\n        return encoded.replace(escapedMatchRegex, (match3) => `<span class=\"tox-autocompleter-highlight\">${match3}</span>`);\n      } else {\n        return encoded;\n      }\n    };\n    const renderAutocompleteItem = (spec, matchText2, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons = true) => {\n      const structure = renderItemStructure({\n        presets,\n        textContent: Optional.none(),\n        htmlContent: useText ? spec.text.map((text3) => replaceText(text3, matchText2)) : Optional.none(),\n        ariaLabel: spec.text,\n        iconContent: spec.icon,\n        shortcutContent: Optional.none(),\n        checkMark: Optional.none(),\n        caret: Optional.none(),\n        value: spec.value\n      }, sharedBackstage.providers, renderIcons, spec.icon);\n      return renderCommonItem({\n        data: buildData(spec),\n        enabled: spec.enabled,\n        getApi: constant$1({}),\n        onAction: (_api) => onItemValueHandler(spec.value, spec.meta),\n        onSetup: constant$1(noop),\n        triggersSubmenu: false,\n        itemBehaviours: tooltipBehaviour(spec.meta, sharedBackstage)\n      }, structure, itemResponse, sharedBackstage.providers);\n    };\n    const render$2 = (items, extras) => map$2(items, (item2) => {\n      switch (item2.type) {\n        case \"cardcontainer\":\n          return renderContainer(item2, render$2(item2.items, extras));\n        case \"cardimage\":\n          return renderImage(item2.src, item2.classes, item2.alt);\n        case \"cardtext\":\n          const shouldHighlight = item2.name.exists((name2) => contains$2(extras.cardText.highlightOn, name2));\n          const matchText2 = shouldHighlight ? Optional.from(extras.cardText.matchText).getOr(\"\") : \"\";\n          return renderHtml(replaceText(item2.text, matchText2), item2.classes);\n      }\n    });\n    const renderCardMenuItem = (spec, itemResponse, sharedBackstage, extras) => {\n      const getApi2 = (component) => ({\n        isEnabled: () => !Disabling.isDisabled(component),\n        setEnabled: (state) => {\n          Disabling.set(component, !state);\n          each$1(descendants(component.element, \"*\"), (elm) => {\n            component.getSystem().getByDom(elm).each((comp) => {\n              if (comp.hasConfigured(Disabling)) {\n                Disabling.set(comp, !state);\n              }\n            });\n          });\n        }\n      });\n      const structure = {\n        dom: renderItemDomStructure(spec.label),\n        optComponents: [Optional.some({\n          dom: {\n            tag: \"div\",\n            classes: [\n              containerClass,\n              containerRowClass\n            ]\n          },\n          components: render$2(spec.items, extras)\n        })]\n      };\n      return renderCommonItem({\n        data: buildData({\n          text: Optional.none(),\n          ...spec\n        }),\n        enabled: spec.enabled,\n        getApi: getApi2,\n        onAction: spec.onAction,\n        onSetup: spec.onSetup,\n        triggersSubmenu: false,\n        itemBehaviours: Optional.from(extras.itemBehaviours).getOr([])\n      }, structure, itemResponse, sharedBackstage.providers);\n    };\n    const renderChoiceItem = (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage, renderIcons = true) => {\n      const getApi2 = (component) => ({\n        setActive: (state) => {\n          Toggling.set(component, state);\n        },\n        isActive: () => Toggling.isOn(component),\n        isEnabled: () => !Disabling.isDisabled(component),\n        setEnabled: (state) => Disabling.set(component, !state)\n      });\n      const structure = renderItemStructure({\n        presets,\n        textContent: useText ? spec.text : Optional.none(),\n        htmlContent: Optional.none(),\n        ariaLabel: spec.text,\n        iconContent: spec.icon,\n        shortcutContent: useText ? spec.shortcut : Optional.none(),\n        checkMark: useText ? Optional.some(renderCheckmark(providersBackstage.icons)) : Optional.none(),\n        caret: Optional.none(),\n        value: spec.value\n      }, providersBackstage, renderIcons);\n      return deepMerge(renderCommonItem({\n        data: buildData(spec),\n        enabled: spec.enabled,\n        getApi: getApi2,\n        onAction: (_api) => onItemValueHandler(spec.value),\n        onSetup: (api2) => {\n          api2.setActive(isSelected);\n          return noop;\n        },\n        triggersSubmenu: false,\n        itemBehaviours: []\n      }, structure, itemResponse, providersBackstage), {\n        toggling: {\n          toggleClass: tickedClass,\n          toggleOnExecute: false,\n          selected: spec.active\n        }\n      });\n    };\n    const parts$f = generate$3(owner$2(), parts$h());\n    const hexColour = (value2) => ({ value: value2 });\n    const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n    const longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n    const isHexString = (hex) => shorthandRegex.test(hex) || longformRegex.test(hex);\n    const normalizeHex = (hex) => removeLeading(hex, \"#\").toUpperCase();\n    const fromString$1 = (hex) => isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none();\n    const getLongForm = (hex) => {\n      const hexString = hex.value.replace(shorthandRegex, (m2, r4, g2, b3) => r4 + r4 + g2 + g2 + b3 + b3);\n      return { value: hexString };\n    };\n    const extractValues = (hex) => {\n      const longForm = getLongForm(hex);\n      const splitForm = longformRegex.exec(longForm.value);\n      return splitForm === null ? [\n        \"FFFFFF\",\n        \"FF\",\n        \"FF\",\n        \"FF\"\n      ] : splitForm;\n    };\n    const toHex = (component) => {\n      const hex = component.toString(16);\n      return (hex.length === 1 ? \"0\" + hex : hex).toUpperCase();\n    };\n    const fromRgba = (rgbaColour2) => {\n      const value2 = toHex(rgbaColour2.red) + toHex(rgbaColour2.green) + toHex(rgbaColour2.blue);\n      return hexColour(value2);\n    };\n    const min = Math.min;\n    const max = Math.max;\n    const round$1 = Math.round;\n    const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i;\n    const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i;\n    const rgbaColour = (red2, green, blue, alpha) => ({\n      red: red2,\n      green,\n      blue,\n      alpha\n    });\n    const isRgbaComponent = (value2) => {\n      const num = parseInt(value2, 10);\n      return num.toString() === value2 && num >= 0 && num <= 255;\n    };\n    const fromHsv = (hsv) => {\n      let r4;\n      let g2;\n      let b3;\n      const hue = (hsv.hue || 0) % 360;\n      let saturation = hsv.saturation / 100;\n      let brightness = hsv.value / 100;\n      saturation = max(0, min(saturation, 1));\n      brightness = max(0, min(brightness, 1));\n      if (saturation === 0) {\n        r4 = g2 = b3 = round$1(255 * brightness);\n        return rgbaColour(r4, g2, b3, 1);\n      }\n      const side = hue / 60;\n      const chroma = brightness * saturation;\n      const x2 = chroma * (1 - Math.abs(side % 2 - 1));\n      const match3 = brightness - chroma;\n      switch (Math.floor(side)) {\n        case 0:\n          r4 = chroma;\n          g2 = x2;\n          b3 = 0;\n          break;\n        case 1:\n          r4 = x2;\n          g2 = chroma;\n          b3 = 0;\n          break;\n        case 2:\n          r4 = 0;\n          g2 = chroma;\n          b3 = x2;\n          break;\n        case 3:\n          r4 = 0;\n          g2 = x2;\n          b3 = chroma;\n          break;\n        case 4:\n          r4 = x2;\n          g2 = 0;\n          b3 = chroma;\n          break;\n        case 5:\n          r4 = chroma;\n          g2 = 0;\n          b3 = x2;\n          break;\n        default:\n          r4 = g2 = b3 = 0;\n      }\n      r4 = round$1(255 * (r4 + match3));\n      g2 = round$1(255 * (g2 + match3));\n      b3 = round$1(255 * (b3 + match3));\n      return rgbaColour(r4, g2, b3, 1);\n    };\n    const fromHex = (hexColour2) => {\n      const result = extractValues(hexColour2);\n      const red2 = parseInt(result[1], 16);\n      const green = parseInt(result[2], 16);\n      const blue = parseInt(result[3], 16);\n      return rgbaColour(red2, green, blue, 1);\n    };\n    const fromStringValues = (red2, green, blue, alpha) => {\n      const r4 = parseInt(red2, 10);\n      const g2 = parseInt(green, 10);\n      const b3 = parseInt(blue, 10);\n      const a2 = parseFloat(alpha);\n      return rgbaColour(r4, g2, b3, a2);\n    };\n    const fromString = (rgbaString) => {\n      if (rgbaString === \"transparent\") {\n        return Optional.some(rgbaColour(0, 0, 0, 0));\n      }\n      const rgbMatch = rgbRegex.exec(rgbaString);\n      if (rgbMatch !== null) {\n        return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], \"1\"));\n      }\n      const rgbaMatch = rgbaRegex.exec(rgbaString);\n      if (rgbaMatch !== null) {\n        return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n      }\n      return Optional.none();\n    };\n    const toString = (rgba) => `rgba(${rgba.red},${rgba.green},${rgba.blue},${rgba.alpha})`;\n    const red = rgbaColour(255, 0, 0, 1);\n    const fireSkinLoaded$1 = (editor) => editor.dispatch(\"SkinLoaded\");\n    const fireSkinLoadError$1 = (editor, error3) => editor.dispatch(\"SkinLoadError\", error3);\n    const fireResizeEditor = (editor) => editor.dispatch(\"ResizeEditor\");\n    const fireResizeContent = (editor, e2) => editor.dispatch(\"ResizeContent\", e2);\n    const fireScrollContent = (editor, e2) => editor.dispatch(\"ScrollContent\", e2);\n    const fireTextColorChange = (editor, data) => editor.dispatch(\"TextColorChange\", data);\n    const hsvColour = (hue, saturation, value2) => ({\n      hue,\n      saturation,\n      value: value2\n    });\n    const fromRgb = (rgbaColour2) => {\n      let h2 = 0;\n      let s2 = 0;\n      let v2 = 0;\n      const r4 = rgbaColour2.red / 255;\n      const g2 = rgbaColour2.green / 255;\n      const b3 = rgbaColour2.blue / 255;\n      const minRGB = Math.min(r4, Math.min(g2, b3));\n      const maxRGB = Math.max(r4, Math.max(g2, b3));\n      if (minRGB === maxRGB) {\n        v2 = minRGB;\n        return hsvColour(0, 0, v2 * 100);\n      }\n      const d2 = r4 === minRGB ? g2 - b3 : b3 === minRGB ? r4 - g2 : b3 - r4;\n      h2 = r4 === minRGB ? 3 : b3 === minRGB ? 1 : 5;\n      h2 = 60 * (h2 - d2 / (maxRGB - minRGB));\n      s2 = (maxRGB - minRGB) / maxRGB;\n      v2 = maxRGB;\n      return hsvColour(Math.round(h2), Math.round(s2 * 100), Math.round(v2 * 100));\n    };\n    const hexToHsv = (hex) => fromRgb(fromHex(hex));\n    const hsvToHex = (hsv) => fromRgba(fromHsv(hsv));\n    const anyToHex = (color) => fromString$1(color).orThunk(() => fromString(color).map(fromRgba)).getOrThunk(() => {\n      const canvas = document.createElement(\"canvas\");\n      canvas.height = 1;\n      canvas.width = 1;\n      const canvasContext = canvas.getContext(\"2d\");\n      canvasContext.clearRect(0, 0, canvas.width, canvas.height);\n      canvasContext.fillStyle = \"#FFFFFF\";\n      canvasContext.fillStyle = color;\n      canvasContext.fillRect(0, 0, 1, 1);\n      const rgba = canvasContext.getImageData(0, 0, 1, 1).data;\n      const r4 = rgba[0];\n      const g2 = rgba[1];\n      const b3 = rgba[2];\n      const a2 = rgba[3];\n      return fromRgba(rgbaColour(r4, g2, b3, a2));\n    });\n    var global$4 = tinymce.util.Tools.resolve(\"tinymce.util.LocalStorage\");\n    const storageName = \"tinymce-custom-colors\";\n    var ColorCache = (max2 = 10) => {\n      const storageString = global$4.getItem(storageName);\n      const localstorage = isString2(storageString) ? JSON.parse(storageString) : [];\n      const prune = (list2) => {\n        const diff = max2 - list2.length;\n        return diff < 0 ? list2.slice(0, max2) : list2;\n      };\n      const cache = prune(localstorage);\n      const add3 = (key) => {\n        indexOf(cache, key).each(remove3);\n        cache.unshift(key);\n        if (cache.length > max2) {\n          cache.pop();\n        }\n        global$4.setItem(storageName, JSON.stringify(cache));\n      };\n      const remove3 = (idx) => {\n        cache.splice(idx, 1);\n      };\n      const state = () => cache.slice(0);\n      return {\n        add: add3,\n        state\n      };\n    };\n    const colorCache = ColorCache(10);\n    const calcCols = (colors2) => Math.max(5, Math.ceil(Math.sqrt(colors2)));\n    const mapColors = (colorMap) => {\n      const colors2 = [];\n      for (let i3 = 0; i3 < colorMap.length; i3 += 2) {\n        colors2.push({\n          text: colorMap[i3 + 1],\n          value: \"#\" + anyToHex(colorMap[i3]).value,\n          type: \"choiceitem\"\n        });\n      }\n      return colors2;\n    };\n    const option$1 = (name2) => (editor) => editor.options.get(name2);\n    const register$d = (editor) => {\n      const registerOption = editor.options.register;\n      registerOption(\"color_map\", {\n        processor: (value2) => {\n          if (isArrayOf(value2, isString2)) {\n            return {\n              value: mapColors(value2),\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: \"Must be an array of strings.\"\n            };\n          }\n        },\n        default: [\n          \"#BFEDD2\",\n          \"Light Green\",\n          \"#FBEEB8\",\n          \"Light Yellow\",\n          \"#F8CAC6\",\n          \"Light Red\",\n          \"#ECCAFA\",\n          \"Light Purple\",\n          \"#C2E0F4\",\n          \"Light Blue\",\n          \"#2DC26B\",\n          \"Green\",\n          \"#F1C40F\",\n          \"Yellow\",\n          \"#E03E2D\",\n          \"Red\",\n          \"#B96AD9\",\n          \"Purple\",\n          \"#3598DB\",\n          \"Blue\",\n          \"#169179\",\n          \"Dark Turquoise\",\n          \"#E67E23\",\n          \"Orange\",\n          \"#BA372A\",\n          \"Dark Red\",\n          \"#843FA1\",\n          \"Dark Purple\",\n          \"#236FA1\",\n          \"Dark Blue\",\n          \"#ECF0F1\",\n          \"Light Gray\",\n          \"#CED4D9\",\n          \"Medium Gray\",\n          \"#95A5A6\",\n          \"Gray\",\n          \"#7E8C8D\",\n          \"Dark Gray\",\n          \"#34495E\",\n          \"Navy Blue\",\n          \"#000000\",\n          \"Black\",\n          \"#ffffff\",\n          \"White\"\n        ]\n      });\n      registerOption(\"color_cols\", {\n        processor: \"number\",\n        default: calcCols(getColors$2(editor).length)\n      });\n      registerOption(\"custom_colors\", {\n        processor: \"boolean\",\n        default: true\n      });\n    };\n    const getColorCols$1 = option$1(\"color_cols\");\n    const hasCustomColors$1 = option$1(\"custom_colors\");\n    const getColors$2 = option$1(\"color_map\");\n    const getCurrentColors = () => map$2(colorCache.state(), (color) => ({\n      type: \"choiceitem\",\n      text: color,\n      value: color\n    }));\n    const addColor = (color) => {\n      colorCache.add(color);\n    };\n    const fallbackColor = \"#000000\";\n    const getCurrentColor = (editor, format2) => {\n      let color;\n      editor.dom.getParents(editor.selection.getStart(), (elm) => {\n        let value2;\n        if (value2 = elm.style[format2 === \"forecolor\" ? \"color\" : \"background-color\"]) {\n          color = color ? color : value2;\n        }\n      });\n      return Optional.from(color);\n    };\n    const applyFormat2 = (editor, format2, value2) => {\n      editor.undoManager.transact(() => {\n        editor.focus();\n        editor.formatter.apply(format2, { value: value2 });\n        editor.nodeChanged();\n      });\n    };\n    const removeFormat = (editor, format2) => {\n      editor.undoManager.transact(() => {\n        editor.focus();\n        editor.formatter.remove(format2, { value: null }, null, true);\n        editor.nodeChanged();\n      });\n    };\n    const registerCommands = (editor) => {\n      editor.addCommand(\"mceApplyTextcolor\", (format2, value2) => {\n        applyFormat2(editor, format2, value2);\n      });\n      editor.addCommand(\"mceRemoveTextcolor\", (format2) => {\n        removeFormat(editor, format2);\n      });\n    };\n    const getAdditionalColors = (hasCustom) => {\n      const type2 = \"choiceitem\";\n      const remove3 = {\n        type: type2,\n        text: \"Remove color\",\n        icon: \"color-swatch-remove-color\",\n        value: \"remove\"\n      };\n      const custom2 = {\n        type: type2,\n        text: \"Custom color\",\n        icon: \"color-picker\",\n        value: \"custom\"\n      };\n      return hasCustom ? [\n        remove3,\n        custom2\n      ] : [remove3];\n    };\n    const applyColor = (editor, format2, value2, onChoice) => {\n      if (value2 === \"custom\") {\n        const dialog = colorPickerDialog(editor);\n        dialog((colorOpt) => {\n          colorOpt.each((color) => {\n            addColor(color);\n            editor.execCommand(\"mceApplyTextcolor\", format2, color);\n            onChoice(color);\n          });\n        }, fallbackColor);\n      } else if (value2 === \"remove\") {\n        onChoice(\"\");\n        editor.execCommand(\"mceRemoveTextcolor\", format2);\n      } else {\n        onChoice(value2);\n        editor.execCommand(\"mceApplyTextcolor\", format2, value2);\n      }\n    };\n    const getColors$1 = (colors2, hasCustom) => colors2.concat(getCurrentColors().concat(getAdditionalColors(hasCustom)));\n    const getFetch$1 = (colors2, hasCustom) => (callback) => {\n      callback(getColors$1(colors2, hasCustom));\n    };\n    const setIconColor = (splitButtonApi, name2, newColor) => {\n      const id = name2 === \"forecolor\" ? \"tox-icon-text-color__color\" : \"tox-icon-highlight-bg-color__color\";\n      splitButtonApi.setIconFill(id, newColor);\n    };\n    const registerTextColorButton = (editor, name2, format2, tooltip, lastColor) => {\n      editor.ui.registry.addSplitButton(name2, {\n        tooltip,\n        presets: \"color\",\n        icon: name2 === \"forecolor\" ? \"text-color\" : \"highlight-bg-color\",\n        select: (value2) => {\n          const optCurrentRgb = getCurrentColor(editor, format2);\n          return optCurrentRgb.bind((currentRgb) => fromString(currentRgb).map((rgba) => {\n            const currentHex = fromRgba(rgba).value;\n            return contains$1(value2.toLowerCase(), currentHex);\n          })).getOr(false);\n        },\n        columns: getColorCols$1(editor),\n        fetch: getFetch$1(getColors$2(editor), hasCustomColors$1(editor)),\n        onAction: (_splitButtonApi) => {\n          applyColor(editor, format2, lastColor.get(), noop);\n        },\n        onItemAction: (_splitButtonApi, value2) => {\n          applyColor(editor, format2, value2, (newColor) => {\n            lastColor.set(newColor);\n            fireTextColorChange(editor, {\n              name: name2,\n              color: newColor\n            });\n          });\n        },\n        onSetup: (splitButtonApi) => {\n          setIconColor(splitButtonApi, name2, lastColor.get());\n          const handler = (e2) => {\n            if (e2.name === name2) {\n              setIconColor(splitButtonApi, e2.name, e2.color);\n            }\n          };\n          editor.on(\"TextColorChange\", handler);\n          return () => {\n            editor.off(\"TextColorChange\", handler);\n          };\n        }\n      });\n    };\n    const registerTextColorMenuItem = (editor, name2, format2, text3) => {\n      editor.ui.registry.addNestedMenuItem(name2, {\n        text: text3,\n        icon: name2 === \"forecolor\" ? \"text-color\" : \"highlight-bg-color\",\n        getSubmenuItems: () => [{\n          type: \"fancymenuitem\",\n          fancytype: \"colorswatch\",\n          onAction: (data) => {\n            applyColor(editor, format2, data.value, noop);\n          }\n        }]\n      });\n    };\n    const colorPickerDialog = (editor) => (callback, value2) => {\n      let isValid = false;\n      const onSubmit = (api2) => {\n        const data = api2.getData();\n        const hex = data.colorpicker;\n        if (isValid) {\n          callback(Optional.from(hex));\n          api2.close();\n        } else {\n          editor.windowManager.alert(editor.translate([\n            \"Invalid hex color code: {0}\",\n            hex\n          ]));\n        }\n      };\n      const onAction2 = (_api, details) => {\n        if (details.name === \"hex-valid\") {\n          isValid = details.value;\n        }\n      };\n      const initialData = { colorpicker: value2 };\n      editor.windowManager.open({\n        title: \"Color Picker\",\n        size: \"normal\",\n        body: {\n          type: \"panel\",\n          items: [{\n            type: \"colorpicker\",\n            name: \"colorpicker\",\n            label: \"Color\"\n          }]\n        },\n        buttons: [\n          {\n            type: \"cancel\",\n            name: \"cancel\",\n            text: \"Cancel\"\n          },\n          {\n            type: \"submit\",\n            name: \"save\",\n            text: \"Save\",\n            primary: true\n          }\n        ],\n        initialData,\n        onAction: onAction2,\n        onSubmit,\n        onClose: noop,\n        onCancel: () => {\n          callback(Optional.none());\n        }\n      });\n    };\n    const register$c = (editor) => {\n      registerCommands(editor);\n      const lastForeColor = Cell(fallbackColor);\n      const lastBackColor = Cell(fallbackColor);\n      registerTextColorButton(editor, \"forecolor\", \"forecolor\", \"Text color\", lastForeColor);\n      registerTextColorButton(editor, \"backcolor\", \"hilitecolor\", \"Background color\", lastBackColor);\n      registerTextColorMenuItem(editor, \"forecolor\", \"forecolor\", \"Text color\");\n      registerTextColorMenuItem(editor, \"backcolor\", \"hilitecolor\", \"Background color\");\n    };\n    const createPartialChoiceMenu = (value2, items, onItemValueHandler, columns, presets, itemResponse, select2, providersBackstage) => {\n      const hasIcons = menuHasIcons(items);\n      const presetItemTypes = presets !== \"color\" ? \"normal\" : \"color\";\n      const alloyItems = createChoiceItems(items, onItemValueHandler, columns, presetItemTypes, itemResponse, select2, providersBackstage);\n      return createPartialMenuWithAlloyItems(value2, hasIcons, alloyItems, columns, presets);\n    };\n    const createChoiceItems = (items, onItemValueHandler, columns, itemPresets, itemResponse, select2, providersBackstage) => cat(map$2(items, (item2) => {\n      if (item2.type === \"choiceitem\") {\n        return createChoiceMenuItem(item2).fold(handleError, (d2) => Optional.some(renderChoiceItem(d2, columns === 1, itemPresets, onItemValueHandler, select2(item2.value), itemResponse, providersBackstage, menuHasIcons(items))));\n      } else {\n        return Optional.none();\n      }\n    }));\n    const deriveMenuMovement = (columns, presets) => {\n      const menuMarkers = markers(presets);\n      if (columns === 1) {\n        return {\n          mode: \"menu\",\n          moveOnTab: true\n        };\n      } else if (columns === \"auto\") {\n        return {\n          mode: \"grid\",\n          selector: \".\" + menuMarkers.item,\n          initSize: {\n            numColumns: 1,\n            numRows: 1\n          }\n        };\n      } else {\n        const rowClass = presets === \"color\" ? \"tox-swatches__row\" : \"tox-collection__group\";\n        return {\n          mode: \"matrix\",\n          rowSelector: \".\" + rowClass\n        };\n      }\n    };\n    const deriveCollectionMovement = (columns, presets) => {\n      if (columns === 1) {\n        return {\n          mode: \"menu\",\n          moveOnTab: false,\n          selector: \".tox-collection__item\"\n        };\n      } else if (columns === \"auto\") {\n        return {\n          mode: \"flatgrid\",\n          selector: \".tox-collection__item\",\n          initSize: {\n            numColumns: 1,\n            numRows: 1\n          }\n        };\n      } else {\n        return {\n          mode: \"matrix\",\n          selectors: {\n            row: presets === \"color\" ? \".tox-swatches__row\" : \".tox-collection__group\",\n            cell: presets === \"color\" ? `.${colorClass}` : `.${selectableClass}`\n          }\n        };\n      }\n    };\n    const renderColorSwatchItem = (spec, backstage) => {\n      const items = getColorItems(spec, backstage);\n      const columns = backstage.colorinput.getColorCols();\n      const presets = \"color\";\n      const menuSpec = createPartialChoiceMenu(generate$6(\"menu-value\"), items, (value2) => {\n        spec.onAction({ value: value2 });\n      }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, backstage.shared.providers);\n      const widgetSpec = {\n        ...menuSpec,\n        markers: markers(presets),\n        movement: deriveMenuMovement(columns, presets)\n      };\n      return {\n        type: \"widget\",\n        data: { value: generate$6(\"widget-id\") },\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-fancymenuitem\"]\n        },\n        autofocus: true,\n        components: [parts$f.widget(Menu.sketch(widgetSpec))]\n      };\n    };\n    const getColorItems = (spec, backstage) => {\n      const useCustomColors = spec.initData.allowCustomColors && backstage.colorinput.hasCustomColors();\n      return spec.initData.colors.fold(() => getColors$1(backstage.colorinput.getColors(), useCustomColors), (colors2) => colors2.concat(getAdditionalColors(useCustomColors)));\n    };\n    const cellOverEvent = generate$6(\"cell-over\");\n    const cellExecuteEvent = generate$6(\"cell-execute\");\n    const makeCell = (row, col, labelId) => {\n      const emitCellOver = (c2) => emitWith(c2, cellOverEvent, {\n        row,\n        col\n      });\n      const emitExecute2 = (c2) => emitWith(c2, cellExecuteEvent, {\n        row,\n        col\n      });\n      const onClick = (c2, se) => {\n        se.stop();\n        emitExecute2(c2);\n      };\n      return build$1({\n        dom: {\n          tag: \"div\",\n          attributes: {\n            role: \"button\",\n            [\"aria-labelledby\"]: labelId\n          }\n        },\n        behaviours: derive$1([\n          config2(\"insert-table-picker-cell\", [\n            run$1(mouseover(), Focusing.focus),\n            run$1(execute$5(), emitExecute2),\n            run$1(click(), onClick),\n            run$1(tap(), onClick)\n          ]),\n          Toggling.config({\n            toggleClass: \"tox-insert-table-picker__selected\",\n            toggleOnExecute: false\n          }),\n          Focusing.config({ onFocus: emitCellOver })\n        ])\n      });\n    };\n    const makeCells = (labelId, numRows, numCols) => {\n      const cells = [];\n      for (let i3 = 0; i3 < numRows; i3++) {\n        const row = [];\n        for (let j2 = 0; j2 < numCols; j2++) {\n          row.push(makeCell(i3, j2, labelId));\n        }\n        cells.push(row);\n      }\n      return cells;\n    };\n    const selectCells = (cells, selectedRow, selectedColumn, numRows, numColumns) => {\n      for (let i3 = 0; i3 < numRows; i3++) {\n        for (let j2 = 0; j2 < numColumns; j2++) {\n          Toggling.set(cells[i3][j2], i3 <= selectedRow && j2 <= selectedColumn);\n        }\n      }\n    };\n    const makeComponents = (cells) => bind$3(cells, (cellRow) => map$2(cellRow, premade));\n    const makeLabelText = (row, col) => text$1(`${col}x${row}`);\n    const renderInsertTableMenuItem = (spec) => {\n      const numRows = 10;\n      const numColumns = 10;\n      const sizeLabelId = generate$6(\"size-label\");\n      const cells = makeCells(sizeLabelId, numRows, numColumns);\n      const emptyLabelText = makeLabelText(0, 0);\n      const memLabel = record({\n        dom: {\n          tag: \"span\",\n          classes: [\"tox-insert-table-picker__label\"],\n          attributes: { id: sizeLabelId }\n        },\n        components: [emptyLabelText],\n        behaviours: derive$1([Replacing.config({})])\n      });\n      return {\n        type: \"widget\",\n        data: { value: generate$6(\"widget-id\") },\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-fancymenuitem\"]\n        },\n        autofocus: true,\n        components: [parts$f.widget({\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-insert-table-picker\"]\n          },\n          components: makeComponents(cells).concat(memLabel.asSpec()),\n          behaviours: derive$1([\n            config2(\"insert-table-picker\", [\n              runOnAttached((c2) => {\n                Replacing.set(memLabel.get(c2), [emptyLabelText]);\n              }),\n              runWithTarget(cellOverEvent, (c2, t3, e2) => {\n                const { row, col } = e2.event;\n                selectCells(cells, row, col, numRows, numColumns);\n                Replacing.set(memLabel.get(c2), [makeLabelText(row + 1, col + 1)]);\n              }),\n              runWithTarget(cellExecuteEvent, (c2, _2, e2) => {\n                const { row, col } = e2.event;\n                spec.onAction({\n                  numRows: row + 1,\n                  numColumns: col + 1\n                });\n                emit(c2, sandboxClose());\n              })\n            ]),\n            Keying.config({\n              initSize: {\n                numRows,\n                numColumns\n              },\n              mode: \"flatgrid\",\n              selector: '[role=\"button\"]'\n            })\n          ])\n        })]\n      };\n    };\n    const fancyMenuItems = {\n      inserttable: renderInsertTableMenuItem,\n      colorswatch: renderColorSwatchItem\n    };\n    const renderFancyMenuItem = (spec, backstage) => get$g(fancyMenuItems, spec.fancytype).map((render2) => render2(spec, backstage));\n    const renderNestedItem = (spec, itemResponse, providersBackstage, renderIcons = true, downwardsCaret = false) => {\n      const caret = downwardsCaret ? renderDownwardsCaret(providersBackstage.icons) : renderSubmenuCaret(providersBackstage.icons);\n      const getApi2 = (component) => ({\n        isEnabled: () => !Disabling.isDisabled(component),\n        setEnabled: (state) => Disabling.set(component, !state)\n      });\n      const structure = renderItemStructure({\n        presets: \"normal\",\n        iconContent: spec.icon,\n        textContent: spec.text,\n        htmlContent: Optional.none(),\n        ariaLabel: spec.text,\n        caret: Optional.some(caret),\n        checkMark: Optional.none(),\n        shortcutContent: spec.shortcut\n      }, providersBackstage, renderIcons);\n      return renderCommonItem({\n        data: buildData(spec),\n        getApi: getApi2,\n        enabled: spec.enabled,\n        onAction: noop,\n        onSetup: spec.onSetup,\n        triggersSubmenu: true,\n        itemBehaviours: []\n      }, structure, itemResponse, providersBackstage);\n    };\n    const renderNormalItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n      const getApi2 = (component) => ({\n        isEnabled: () => !Disabling.isDisabled(component),\n        setEnabled: (state) => Disabling.set(component, !state)\n      });\n      const structure = renderItemStructure({\n        presets: \"normal\",\n        iconContent: spec.icon,\n        textContent: spec.text,\n        htmlContent: Optional.none(),\n        ariaLabel: spec.text,\n        caret: Optional.none(),\n        checkMark: Optional.none(),\n        shortcutContent: spec.shortcut\n      }, providersBackstage, renderIcons);\n      return renderCommonItem({\n        data: buildData(spec),\n        getApi: getApi2,\n        enabled: spec.enabled,\n        onAction: spec.onAction,\n        onSetup: spec.onSetup,\n        triggersSubmenu: false,\n        itemBehaviours: []\n      }, structure, itemResponse, providersBackstage);\n    };\n    const renderSeparatorItem = (spec) => ({\n      type: \"separator\",\n      dom: {\n        tag: \"div\",\n        classes: [\n          selectableClass,\n          groupHeadingClass\n        ]\n      },\n      components: spec.text.map(text$1).toArray()\n    });\n    const renderToggleMenuItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n      const getApi2 = (component) => ({\n        setActive: (state) => {\n          Toggling.set(component, state);\n        },\n        isActive: () => Toggling.isOn(component),\n        isEnabled: () => !Disabling.isDisabled(component),\n        setEnabled: (state) => Disabling.set(component, !state)\n      });\n      const structure = renderItemStructure({\n        iconContent: spec.icon,\n        textContent: spec.text,\n        htmlContent: Optional.none(),\n        ariaLabel: spec.text,\n        checkMark: Optional.some(renderCheckmark(providersBackstage.icons)),\n        caret: Optional.none(),\n        shortcutContent: spec.shortcut,\n        presets: \"normal\",\n        meta: spec.meta\n      }, providersBackstage, renderIcons);\n      return deepMerge(renderCommonItem({\n        data: buildData(spec),\n        enabled: spec.enabled,\n        getApi: getApi2,\n        onAction: spec.onAction,\n        onSetup: spec.onSetup,\n        triggersSubmenu: false,\n        itemBehaviours: []\n      }, structure, itemResponse, providersBackstage), {\n        toggling: {\n          toggleClass: tickedClass,\n          toggleOnExecute: false,\n          selected: spec.active\n        }\n      });\n    };\n    const autocomplete = renderAutocompleteItem;\n    const separator$3 = renderSeparatorItem;\n    const normal = renderNormalItem;\n    const nested = renderNestedItem;\n    const toggle$1 = renderToggleMenuItem;\n    const fancy = renderFancyMenuItem;\n    const card = renderCardMenuItem;\n    var FocusMode;\n    (function(FocusMode2) {\n      FocusMode2[FocusMode2[\"ContentFocus\"] = 0] = \"ContentFocus\";\n      FocusMode2[FocusMode2[\"UiFocus\"] = 1] = \"UiFocus\";\n    })(FocusMode || (FocusMode = {}));\n    const createMenuItemFromBridge = (item2, itemResponse, backstage, menuHasIcons2, isHorizontalMenu) => {\n      const providersBackstage = backstage.shared.providers;\n      const parseForHorizontalMenu = (menuitem) => !isHorizontalMenu ? menuitem : {\n        ...menuitem,\n        shortcut: Optional.none(),\n        icon: menuitem.text.isSome() ? Optional.none() : menuitem.icon\n      };\n      switch (item2.type) {\n        case \"menuitem\":\n          return createMenuItem(item2).fold(handleError, (d2) => Optional.some(normal(parseForHorizontalMenu(d2), itemResponse, providersBackstage, menuHasIcons2)));\n        case \"nestedmenuitem\":\n          return createNestedMenuItem(item2).fold(handleError, (d2) => Optional.some(nested(parseForHorizontalMenu(d2), itemResponse, providersBackstage, menuHasIcons2, isHorizontalMenu)));\n        case \"togglemenuitem\":\n          return createToggleMenuItem(item2).fold(handleError, (d2) => Optional.some(toggle$1(parseForHorizontalMenu(d2), itemResponse, providersBackstage, menuHasIcons2)));\n        case \"separator\":\n          return createSeparatorMenuItem(item2).fold(handleError, (d2) => Optional.some(separator$3(d2)));\n        case \"fancymenuitem\":\n          return createFancyMenuItem(item2).fold(handleError, (d2) => fancy(parseForHorizontalMenu(d2), backstage));\n        default: {\n          console.error(\"Unknown item in general menu\", item2);\n          return Optional.none();\n        }\n      }\n    };\n    const createAutocompleteItems = (items, matchText2, onItemValueHandler, columns, itemResponse, sharedBackstage, highlightOn) => {\n      const renderText2 = columns === 1;\n      const renderIcons = !renderText2 || menuHasIcons(items);\n      return cat(map$2(items, (item2) => {\n        switch (item2.type) {\n          case \"separator\":\n            return createSeparatorItem(item2).fold(handleError, (d2) => Optional.some(separator$3(d2)));\n          case \"cardmenuitem\":\n            return createCardMenuItem(item2).fold(handleError, (d2) => Optional.some(card({\n              ...d2,\n              onAction: (api2) => {\n                d2.onAction(api2);\n                onItemValueHandler(d2.value, d2.meta);\n              }\n            }, itemResponse, sharedBackstage, {\n              itemBehaviours: tooltipBehaviour(d2.meta, sharedBackstage),\n              cardText: {\n                matchText: matchText2,\n                highlightOn\n              }\n            })));\n          case \"autocompleteitem\":\n          default:\n            return createAutocompleterItem(item2).fold(handleError, (d2) => Optional.some(autocomplete(d2, matchText2, renderText2, \"normal\", onItemValueHandler, itemResponse, sharedBackstage, renderIcons)));\n        }\n      }));\n    };\n    const createPartialMenu = (value2, items, itemResponse, backstage, isHorizontalMenu) => {\n      const hasIcons = menuHasIcons(items);\n      const alloyItems = cat(map$2(items, (item2) => {\n        const itemHasIcon = (i3) => isHorizontalMenu ? !has$2(i3, \"text\") : hasIcons;\n        const createItem = (i3) => createMenuItemFromBridge(i3, itemResponse, backstage, itemHasIcon(i3), isHorizontalMenu);\n        if (item2.type === \"nestedmenuitem\" && item2.getSubmenuItems().length <= 0) {\n          return createItem({\n            ...item2,\n            enabled: false\n          });\n        } else {\n          return createItem(item2);\n        }\n      }));\n      const createPartial = isHorizontalMenu ? createHorizontalPartialMenuWithAlloyItems : createPartialMenuWithAlloyItems;\n      return createPartial(value2, hasIcons, alloyItems, 1, \"normal\");\n    };\n    const createTieredDataFrom = (partialMenu) => tieredMenu.singleData(partialMenu.value, partialMenu);\n    const createMenuFrom = (partialMenu, columns, focusMode, presets) => {\n      const focusManager = focusMode === FocusMode.ContentFocus ? highlights() : dom$2();\n      const movement = deriveMenuMovement(columns, presets);\n      const menuMarkers = markers(presets);\n      return {\n        dom: partialMenu.dom,\n        components: partialMenu.components,\n        items: partialMenu.items,\n        value: partialMenu.value,\n        markers: {\n          selectedItem: menuMarkers.selectedItem,\n          item: menuMarkers.item\n        },\n        movement,\n        fakeFocus: focusMode === FocusMode.ContentFocus,\n        focusManager,\n        menuBehaviours: SimpleBehaviours.unnamedEvents(columns !== \"auto\" ? [] : [runOnAttached((comp, _se) => {\n          detectSize(comp, 4, menuMarkers.item).each(({ numColumns, numRows }) => {\n            Keying.setGridSize(comp, numRows, numColumns);\n          });\n        })])\n      };\n    };\n    const getAutocompleterRange = (dom3, initRange) => {\n      return detect(SugarElement.fromDom(initRange.startContainer)).map((elm) => {\n        const range2 = dom3.createRng();\n        range2.selectNode(elm.dom);\n        return range2;\n      });\n    };\n    const register$b = (editor, sharedBackstage) => {\n      const processingAction = Cell(false);\n      const activeState = Cell(false);\n      const autocompleter = build$1(InlineView.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-autocompleter\"]\n        },\n        components: [],\n        fireDismissalEventInstead: {},\n        inlineBehaviours: derive$1([config2(\"dismissAutocompleter\", [run$1(dismissRequested(), () => cancelIfNecessary())])]),\n        lazySink: sharedBackstage.getSink\n      }));\n      const isMenuOpen = () => InlineView.isOpen(autocompleter);\n      const isActive = activeState.get;\n      const hideIfNecessary = () => {\n        if (isMenuOpen()) {\n          InlineView.hide(autocompleter);\n        }\n      };\n      const cancelIfNecessary = () => editor.execCommand(\"mceAutocompleterClose\");\n      const getCombinedItems = (matches) => {\n        const columns = findMap(matches, (m2) => Optional.from(m2.columns)).getOr(1);\n        return bind$3(matches, (match3) => {\n          const choices = match3.items;\n          return createAutocompleteItems(choices, match3.matchText, (itemValue, itemMeta) => {\n            const nr = editor.selection.getRng();\n            getAutocompleterRange(editor.dom, nr).each((range2) => {\n              const autocompleterApi = {\n                hide: () => cancelIfNecessary(),\n                reload: (fetchOptions) => {\n                  hideIfNecessary();\n                  editor.execCommand(\"mceAutocompleterReload\", false, { fetchOptions });\n                }\n              };\n              processingAction.set(true);\n              match3.onAction(autocompleterApi, range2, itemValue, itemMeta);\n              processingAction.set(false);\n            });\n          }, columns, ItemResponse$1.BUBBLE_TO_SANDBOX, sharedBackstage, match3.highlightOn);\n        });\n      };\n      const display = (lookupData, items) => {\n        findIn(SugarElement.fromDom(editor.getBody())).each((element2) => {\n          const columns = findMap(lookupData, (ld) => Optional.from(ld.columns)).getOr(1);\n          InlineView.showAt(autocompleter, Menu.sketch(createMenuFrom(createPartialMenuWithAlloyItems(\"autocompleter-value\", true, items, columns, \"normal\"), columns, FocusMode.ContentFocus, \"normal\")), {\n            anchor: {\n              type: \"node\",\n              root: SugarElement.fromDom(editor.getBody()),\n              node: Optional.from(element2)\n            }\n          });\n          InlineView.getContent(autocompleter).each(Highlighting.highlightFirst);\n        });\n      };\n      const updateDisplay = (lookupData) => {\n        const combinedItems = getCombinedItems(lookupData);\n        if (combinedItems.length > 0) {\n          display(lookupData, combinedItems);\n        } else {\n          hideIfNecessary();\n        }\n      };\n      editor.on(\"AutocompleterStart\", ({ lookupData }) => {\n        activeState.set(true);\n        processingAction.set(false);\n        updateDisplay(lookupData);\n      });\n      editor.on(\"AutocompleterUpdate\", ({ lookupData }) => updateDisplay(lookupData));\n      editor.on(\"AutocompleterEnd\", () => {\n        hideIfNecessary();\n        activeState.set(false);\n        processingAction.set(false);\n      });\n      const autocompleterUiApi = {\n        cancelIfNecessary,\n        isMenuOpen,\n        isActive,\n        isProcessingAction: processingAction.get,\n        getView: () => InlineView.getContent(autocompleter)\n      };\n      AutocompleterEditorEvents.setup(autocompleterUiApi, editor);\n    };\n    const Autocompleter = { register: register$b };\n    const closest = (scope, selector, isRoot) => closest$1(scope, selector, isRoot).isSome();\n    const DelayedFunction = (fun, delay) => {\n      let ref = null;\n      const schedule = (...args) => {\n        ref = setTimeout(() => {\n          fun.apply(null, args);\n          ref = null;\n        }, delay);\n      };\n      const cancel = () => {\n        if (ref !== null) {\n          clearTimeout(ref);\n          ref = null;\n        }\n      };\n      return {\n        cancel,\n        schedule\n      };\n    };\n    const SIGNIFICANT_MOVE = 5;\n    const LONGPRESS_DELAY = 400;\n    const getTouch = (event) => {\n      const raw = event.raw;\n      if (raw.touches === void 0 || raw.touches.length !== 1) {\n        return Optional.none();\n      }\n      return Optional.some(raw.touches[0]);\n    };\n    const isFarEnough = (touch2, data) => {\n      const distX = Math.abs(touch2.clientX - data.x);\n      const distY = Math.abs(touch2.clientY - data.y);\n      return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n    };\n    const monitor = (settings) => {\n      const startData = value$2();\n      const longpressFired = Cell(false);\n      const longpress$1 = DelayedFunction((event) => {\n        settings.triggerEvent(longpress(), event);\n        longpressFired.set(true);\n      }, LONGPRESS_DELAY);\n      const handleTouchstart = (event) => {\n        getTouch(event).each((touch2) => {\n          longpress$1.cancel();\n          const data = {\n            x: touch2.clientX,\n            y: touch2.clientY,\n            target: event.target\n          };\n          longpress$1.schedule(event);\n          longpressFired.set(false);\n          startData.set(data);\n        });\n        return Optional.none();\n      };\n      const handleTouchmove = (event) => {\n        longpress$1.cancel();\n        getTouch(event).each((touch2) => {\n          startData.on((data) => {\n            if (isFarEnough(touch2, data)) {\n              startData.clear();\n            }\n          });\n        });\n        return Optional.none();\n      };\n      const handleTouchend = (event) => {\n        longpress$1.cancel();\n        const isSame = (data) => eq2(data.target, event.target);\n        return startData.get().filter(isSame).map((_data) => {\n          if (longpressFired.get()) {\n            event.prevent();\n            return false;\n          } else {\n            return settings.triggerEvent(tap(), event);\n          }\n        });\n      };\n      const handlers2 = wrapAll([\n        {\n          key: touchstart(),\n          value: handleTouchstart\n        },\n        {\n          key: touchmove(),\n          value: handleTouchmove\n        },\n        {\n          key: touchend(),\n          value: handleTouchend\n        }\n      ]);\n      const fireIfReady = (event, type2) => get$g(handlers2, type2).bind((handler) => handler(event));\n      return { fireIfReady };\n    };\n    const isDangerous = (event) => {\n      const keyEv = event.raw;\n      return keyEv.which === BACKSPACE[0] && !contains$2([\n        \"input\",\n        \"textarea\"\n      ], name$3(event.target)) && !closest(event.target, '[contenteditable=\"true\"]');\n    };\n    const setup$d = (container, rawSettings) => {\n      const settings = {\n        stopBackspace: true,\n        ...rawSettings\n      };\n      const pointerEvents2 = [\n        \"touchstart\",\n        \"touchmove\",\n        \"touchend\",\n        \"touchcancel\",\n        \"gesturestart\",\n        \"mousedown\",\n        \"mouseup\",\n        \"mouseover\",\n        \"mousemove\",\n        \"mouseout\",\n        \"click\"\n      ];\n      const tapEvent = monitor(settings);\n      const simpleEvents = map$2(pointerEvents2.concat([\n        \"selectstart\",\n        \"input\",\n        \"contextmenu\",\n        \"change\",\n        \"transitionend\",\n        \"transitioncancel\",\n        \"drag\",\n        \"dragstart\",\n        \"dragend\",\n        \"dragenter\",\n        \"dragleave\",\n        \"dragover\",\n        \"drop\",\n        \"keyup\"\n      ]), (type2) => bind(container, type2, (event) => {\n        tapEvent.fireIfReady(event, type2).each((tapStopped) => {\n          if (tapStopped) {\n            event.kill();\n          }\n        });\n        const stopped = settings.triggerEvent(type2, event);\n        if (stopped) {\n          event.kill();\n        }\n      }));\n      const pasteTimeout = value$2();\n      const onPaste = bind(container, \"paste\", (event) => {\n        tapEvent.fireIfReady(event, \"paste\").each((tapStopped) => {\n          if (tapStopped) {\n            event.kill();\n          }\n        });\n        const stopped = settings.triggerEvent(\"paste\", event);\n        if (stopped) {\n          event.kill();\n        }\n        pasteTimeout.set(setTimeout(() => {\n          settings.triggerEvent(postPaste(), event);\n        }, 0));\n      });\n      const onKeydown = bind(container, \"keydown\", (event) => {\n        const stopped = settings.triggerEvent(\"keydown\", event);\n        if (stopped) {\n          event.kill();\n        } else if (settings.stopBackspace && isDangerous(event)) {\n          event.prevent();\n        }\n      });\n      const onFocusIn = bind(container, \"focusin\", (event) => {\n        const stopped = settings.triggerEvent(\"focusin\", event);\n        if (stopped) {\n          event.kill();\n        }\n      });\n      const focusoutTimeout = value$2();\n      const onFocusOut = bind(container, \"focusout\", (event) => {\n        const stopped = settings.triggerEvent(\"focusout\", event);\n        if (stopped) {\n          event.kill();\n        }\n        focusoutTimeout.set(setTimeout(() => {\n          settings.triggerEvent(postBlur(), event);\n        }, 0));\n      });\n      const unbind2 = () => {\n        each$1(simpleEvents, (e2) => {\n          e2.unbind();\n        });\n        onKeydown.unbind();\n        onFocusIn.unbind();\n        onFocusOut.unbind();\n        onPaste.unbind();\n        pasteTimeout.on(clearTimeout);\n        focusoutTimeout.on(clearTimeout);\n      };\n      return { unbind: unbind2 };\n    };\n    const derive = (rawEvent, rawTarget) => {\n      const source = get$g(rawEvent, \"target\").getOr(rawTarget);\n      return Cell(source);\n    };\n    const fromSource = (event, source) => {\n      const stopper2 = Cell(false);\n      const cutter2 = Cell(false);\n      const stop2 = () => {\n        stopper2.set(true);\n      };\n      const cut = () => {\n        cutter2.set(true);\n      };\n      return {\n        stop: stop2,\n        cut,\n        isStopped: stopper2.get,\n        isCut: cutter2.get,\n        event,\n        setSource: source.set,\n        getSource: source.get\n      };\n    };\n    const fromExternal = (event) => {\n      const stopper2 = Cell(false);\n      const stop2 = () => {\n        stopper2.set(true);\n      };\n      return {\n        stop: stop2,\n        cut: noop,\n        isStopped: stopper2.get,\n        isCut: never,\n        event,\n        setSource: die(\"Cannot set source of a broadcasted event\"),\n        getSource: die(\"Cannot get source of a broadcasted event\")\n      };\n    };\n    const adt$1 = Adt.generate([\n      { stopped: [] },\n      { resume: [\"element\"] },\n      { complete: [] }\n    ]);\n    const doTriggerHandler = (lookup2, eventType, rawEvent, target, source, logger) => {\n      const handler = lookup2(eventType, target);\n      const simulatedEvent = fromSource(rawEvent, source);\n      return handler.fold(() => {\n        logger.logEventNoHandlers(eventType, target);\n        return adt$1.complete();\n      }, (handlerInfo) => {\n        const descHandler = handlerInfo.descHandler;\n        const eventHandler2 = getCurried(descHandler);\n        eventHandler2(simulatedEvent);\n        if (simulatedEvent.isStopped()) {\n          logger.logEventStopped(eventType, handlerInfo.element, descHandler.purpose);\n          return adt$1.stopped();\n        } else if (simulatedEvent.isCut()) {\n          logger.logEventCut(eventType, handlerInfo.element, descHandler.purpose);\n          return adt$1.complete();\n        } else {\n          return parent(handlerInfo.element).fold(() => {\n            logger.logNoParent(eventType, handlerInfo.element, descHandler.purpose);\n            return adt$1.complete();\n          }, (parent2) => {\n            logger.logEventResponse(eventType, handlerInfo.element, descHandler.purpose);\n            return adt$1.resume(parent2);\n          });\n        }\n      });\n    };\n    const doTriggerOnUntilStopped = (lookup2, eventType, rawEvent, rawTarget, source, logger) => doTriggerHandler(lookup2, eventType, rawEvent, rawTarget, source, logger).fold(always, (parent2) => doTriggerOnUntilStopped(lookup2, eventType, rawEvent, parent2, source, logger), never);\n    const triggerHandler = (lookup2, eventType, rawEvent, target, logger) => {\n      const source = derive(rawEvent, target);\n      return doTriggerHandler(lookup2, eventType, rawEvent, target, source, logger);\n    };\n    const broadcast = (listeners, rawEvent, _logger) => {\n      const simulatedEvent = fromExternal(rawEvent);\n      each$1(listeners, (listener) => {\n        const descHandler = listener.descHandler;\n        const handler = getCurried(descHandler);\n        handler(simulatedEvent);\n      });\n      return simulatedEvent.isStopped();\n    };\n    const triggerUntilStopped = (lookup2, eventType, rawEvent, logger) => triggerOnUntilStopped(lookup2, eventType, rawEvent, rawEvent.target, logger);\n    const triggerOnUntilStopped = (lookup2, eventType, rawEvent, rawTarget, logger) => {\n      const source = derive(rawEvent, rawTarget);\n      return doTriggerOnUntilStopped(lookup2, eventType, rawEvent, rawTarget, source, logger);\n    };\n    const eventHandler = (element2, descHandler) => ({\n      element: element2,\n      descHandler\n    });\n    const broadcastHandler = (id, handler) => ({\n      id,\n      descHandler: handler\n    });\n    const EventRegistry = () => {\n      const registry = {};\n      const registerId = (extraArgs, id, events2) => {\n        each(events2, (v2, k3) => {\n          const handlers2 = registry[k3] !== void 0 ? registry[k3] : {};\n          handlers2[id] = curryArgs(v2, extraArgs);\n          registry[k3] = handlers2;\n        });\n      };\n      const findHandler = (handlers2, elem) => read$1(elem).bind((id) => get$g(handlers2, id)).map((descHandler) => eventHandler(elem, descHandler));\n      const filterByType = (type2) => get$g(registry, type2).map((handlers2) => mapToArray2(handlers2, (f2, id) => broadcastHandler(id, f2))).getOr([]);\n      const find2 = (isAboveRoot, type2, target) => get$g(registry, type2).bind((handlers2) => closest$4(target, (elem) => findHandler(handlers2, elem), isAboveRoot));\n      const unregisterId = (id) => {\n        each(registry, (handlersById, _eventName) => {\n          if (has$2(handlersById, id)) {\n            delete handlersById[id];\n          }\n        });\n      };\n      return {\n        registerId,\n        unregisterId,\n        filterByType,\n        find: find2\n      };\n    };\n    const Registry2 = () => {\n      const events2 = EventRegistry();\n      const components2 = {};\n      const readOrTag = (component) => {\n        const elem = component.element;\n        return read$1(elem).getOrThunk(() => write(\"uid-\", component.element));\n      };\n      const failOnDuplicate = (component, tagId) => {\n        const conflict = components2[tagId];\n        if (conflict === component) {\n          unregister(component);\n        } else {\n          throw new Error('The tagId \"' + tagId + '\" is already used by: ' + element(conflict.element) + \"\\nCannot use it for: \" + element(component.element) + \"\\nThe conflicting element is\" + (inBody(conflict.element) ? \" \" : \" not \") + \"already in the DOM\");\n        }\n      };\n      const register2 = (component) => {\n        const tagId = readOrTag(component);\n        if (hasNonNullableKey(components2, tagId)) {\n          failOnDuplicate(component, tagId);\n        }\n        const extraArgs = [component];\n        events2.registerId(extraArgs, tagId, component.events);\n        components2[tagId] = component;\n      };\n      const unregister = (component) => {\n        read$1(component.element).each((tagId) => {\n          delete components2[tagId];\n          events2.unregisterId(tagId);\n        });\n      };\n      const filter2 = (type2) => events2.filterByType(type2);\n      const find2 = (isAboveRoot, type2, target) => events2.find(isAboveRoot, type2, target);\n      const getById = (id) => get$g(components2, id);\n      return {\n        find: find2,\n        filter: filter2,\n        register: register2,\n        unregister,\n        getById\n      };\n    };\n    const factory$j = (detail) => {\n      const { attributes, ...domWithoutAttributes } = detail.dom;\n      return {\n        uid: detail.uid,\n        dom: {\n          tag: \"div\",\n          attributes: {\n            role: \"presentation\",\n            ...attributes\n          },\n          ...domWithoutAttributes\n        },\n        components: detail.components,\n        behaviours: get$3(detail.containerBehaviours),\n        events: detail.events,\n        domModification: detail.domModification,\n        eventOrder: detail.eventOrder\n      };\n    };\n    const Container2 = single({\n      name: \"Container\",\n      factory: factory$j,\n      configFields: [\n        defaulted(\"components\", []),\n        field(\"containerBehaviours\", []),\n        defaulted(\"events\", {}),\n        defaulted(\"domModification\", {}),\n        defaulted(\"eventOrder\", {})\n      ]\n    });\n    const takeover = (root2) => {\n      const isAboveRoot = (el) => parent(root2.element).fold(always, (parent2) => eq2(el, parent2));\n      const registry = Registry2();\n      const lookup2 = (eventName, target) => registry.find(isAboveRoot, eventName, target);\n      const domEvents = setup$d(root2.element, {\n        triggerEvent: (eventName, event) => {\n          return monitorEvent(eventName, event.target, (logger) => triggerUntilStopped(lookup2, eventName, event, logger));\n        }\n      });\n      const systemApi = {\n        debugInfo: constant$1(\"real\"),\n        triggerEvent: (eventName, target, data) => {\n          monitorEvent(eventName, target, (logger) => triggerOnUntilStopped(lookup2, eventName, data, target, logger));\n        },\n        triggerFocus: (target, originator) => {\n          read$1(target).fold(() => {\n            focus$3(target);\n          }, (_alloyId) => {\n            monitorEvent(focus$4(), target, (logger) => {\n              triggerHandler(lookup2, focus$4(), {\n                originator,\n                kill: noop,\n                prevent: noop,\n                target\n              }, target, logger);\n              return false;\n            });\n          });\n        },\n        triggerEscape: (comp, simulatedEvent) => {\n          systemApi.triggerEvent(\"keydown\", comp.element, simulatedEvent.event);\n        },\n        getByUid: (uid) => {\n          return getByUid(uid);\n        },\n        getByDom: (elem) => {\n          return getByDom(elem);\n        },\n        build: build$1,\n        buildOrPatch,\n        addToGui: (c2) => {\n          add3(c2);\n        },\n        removeFromGui: (c2) => {\n          remove3(c2);\n        },\n        addToWorld: (c2) => {\n          addToWorld(c2);\n        },\n        removeFromWorld: (c2) => {\n          removeFromWorld(c2);\n        },\n        broadcast: (message) => {\n          broadcast$1(message);\n        },\n        broadcastOn: (channels, message) => {\n          broadcastOn(channels, message);\n        },\n        broadcastEvent: (eventName, event) => {\n          broadcastEvent(eventName, event);\n        },\n        isConnected: always\n      };\n      const addToWorld = (component) => {\n        component.connect(systemApi);\n        if (!isText(component.element)) {\n          registry.register(component);\n          each$1(component.components(), addToWorld);\n          systemApi.triggerEvent(systemInit(), component.element, { target: component.element });\n        }\n      };\n      const removeFromWorld = (component) => {\n        if (!isText(component.element)) {\n          each$1(component.components(), removeFromWorld);\n          registry.unregister(component);\n        }\n        component.disconnect();\n      };\n      const add3 = (component) => {\n        attach(root2, component);\n      };\n      const remove3 = (component) => {\n        detach(component);\n      };\n      const destroy = () => {\n        domEvents.unbind();\n        remove$5(root2.element);\n      };\n      const broadcastData = (data) => {\n        const receivers = registry.filter(receive());\n        each$1(receivers, (receiver) => {\n          const descHandler = receiver.descHandler;\n          const handler = getCurried(descHandler);\n          handler(data);\n        });\n      };\n      const broadcast$1 = (message) => {\n        broadcastData({\n          universal: true,\n          data: message\n        });\n      };\n      const broadcastOn = (channels, message) => {\n        broadcastData({\n          universal: false,\n          channels,\n          data: message\n        });\n      };\n      const broadcastEvent = (eventName, event) => {\n        const listeners = registry.filter(eventName);\n        return broadcast(listeners, event);\n      };\n      const getByUid = (uid) => registry.getById(uid).fold(() => Result.error(new Error('Could not find component with uid: \"' + uid + '\" in system.')), Result.value);\n      const getByDom = (elem) => {\n        const uid = read$1(elem).getOr(\"not found\");\n        return getByUid(uid);\n      };\n      addToWorld(root2);\n      return {\n        root: root2,\n        element: root2.element,\n        destroy,\n        add: add3,\n        remove: remove3,\n        getByUid,\n        getByDom,\n        addToWorld,\n        removeFromWorld,\n        broadcast: broadcast$1,\n        broadcastOn,\n        broadcastEvent\n      };\n    };\n    const renderBar = (spec, backstage) => ({\n      dom: {\n        tag: \"div\",\n        classes: [\n          \"tox-bar\",\n          \"tox-form__controls-h-stack\"\n        ]\n      },\n      components: map$2(spec.items, backstage.interpreter)\n    });\n    const schema$l = constant$1([\n      defaulted(\"prefix\", \"form-field\"),\n      field(\"fieldBehaviours\", [\n        Composing,\n        Representing\n      ])\n    ]);\n    const parts$e = constant$1([\n      optional({\n        schema: [required$1(\"dom\")],\n        name: \"label\"\n      }),\n      optional({\n        factory: {\n          sketch: (spec) => {\n            return {\n              uid: spec.uid,\n              dom: {\n                tag: \"span\",\n                styles: { display: \"none\" },\n                attributes: { \"aria-hidden\": \"true\" },\n                innerHtml: spec.text\n              }\n            };\n          }\n        },\n        schema: [required$1(\"text\")],\n        name: \"aria-descriptor\"\n      }),\n      required({\n        factory: {\n          sketch: (spec) => {\n            const excludeFactory = exclude(spec, [\"factory\"]);\n            return spec.factory.sketch(excludeFactory);\n          }\n        },\n        schema: [required$1(\"factory\")],\n        name: \"field\"\n      })\n    ]);\n    const factory$i = (detail, components2, _spec, _externals) => {\n      const behaviours2 = augment(detail.fieldBehaviours, [\n        Composing.config({\n          find: (container) => {\n            return getPart(container, detail, \"field\");\n          }\n        }),\n        Representing.config({\n          store: {\n            mode: \"manual\",\n            getValue: (field2) => {\n              return Composing.getCurrent(field2).bind(Representing.getValue);\n            },\n            setValue: (field2, value2) => {\n              Composing.getCurrent(field2).each((current) => {\n                Representing.setValue(current, value2);\n              });\n            }\n          }\n        })\n      ]);\n      const events2 = derive$2([runOnAttached((component, _simulatedEvent) => {\n        const ps = getParts(component, detail, [\n          \"label\",\n          \"field\",\n          \"aria-descriptor\"\n        ]);\n        ps.field().each((field2) => {\n          const id = generate$6(detail.prefix);\n          ps.label().each((label2) => {\n            set$9(label2.element, \"for\", id);\n            set$9(field2.element, \"id\", id);\n          });\n          ps[\"aria-descriptor\"]().each((descriptor) => {\n            const descriptorId = generate$6(detail.prefix);\n            set$9(descriptor.element, \"id\", descriptorId);\n            set$9(field2.element, \"aria-describedby\", descriptorId);\n          });\n        });\n      })]);\n      const apis = {\n        getField: (container) => getPart(container, detail, \"field\"),\n        getLabel: (container) => getPart(container, detail, \"label\")\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: components2,\n        behaviours: behaviours2,\n        events: events2,\n        apis\n      };\n    };\n    const FormField = composite({\n      name: \"FormField\",\n      configFields: schema$l(),\n      partFields: parts$e(),\n      factory: factory$i,\n      apis: {\n        getField: (apis, comp) => apis.getField(comp),\n        getLabel: (apis, comp) => apis.getLabel(comp)\n      }\n    });\n    const exhibit$2 = (base3, tabConfig) => nu$7({\n      attributes: wrapAll([{\n        key: tabConfig.tabAttr,\n        value: \"true\"\n      }])\n    });\n    var ActiveTabstopping = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      exhibit: exhibit$2\n    });\n    var TabstopSchema = [defaulted(\"tabAttr\", \"data-alloy-tabstop\")];\n    const Tabstopping = create$3({\n      fields: TabstopSchema,\n      name: \"tabstopping\",\n      active: ActiveTabstopping\n    });\n    var global$3 = tinymce.util.Tools.resolve(\"tinymce.html.Entities\");\n    const renderFormFieldWith = (pLabel, pField, extraClasses, extraBehaviours) => {\n      const spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours);\n      return FormField.sketch(spec);\n    };\n    const renderFormField = (pLabel, pField) => renderFormFieldWith(pLabel, pField, [], []);\n    const renderFormFieldSpecWith = (pLabel, pField, extraClasses, extraBehaviours) => ({\n      dom: renderFormFieldDomWith(extraClasses),\n      components: pLabel.toArray().concat([pField]),\n      fieldBehaviours: derive$1(extraBehaviours)\n    });\n    const renderFormFieldDom = () => renderFormFieldDomWith([]);\n    const renderFormFieldDomWith = (extraClasses) => ({\n      tag: \"div\",\n      classes: [\"tox-form__group\"].concat(extraClasses)\n    });\n    const renderLabel$2 = (label2, providersBackstage) => FormField.parts.label({\n      dom: {\n        tag: \"label\",\n        classes: [\"tox-label\"]\n      },\n      components: [text$1(providersBackstage.translate(label2))]\n    });\n    const formChangeEvent = generate$6(\"form-component-change\");\n    const formCloseEvent = generate$6(\"form-close\");\n    const formCancelEvent = generate$6(\"form-cancel\");\n    const formActionEvent = generate$6(\"form-action\");\n    const formSubmitEvent = generate$6(\"form-submit\");\n    const formBlockEvent = generate$6(\"form-block\");\n    const formUnblockEvent = generate$6(\"form-unblock\");\n    const formTabChangeEvent = generate$6(\"form-tabchange\");\n    const formResizeEvent = generate$6(\"form-resize\");\n    const renderCollection = (spec, providersBackstage, initialData) => {\n      const pLabel = spec.label.map((label2) => renderLabel$2(label2, providersBackstage));\n      const runOnItem = (f2) => (comp, se) => {\n        closest$1(se.event.target, \"[data-collection-item-value]\").each((target) => {\n          f2(comp, se, target, get$f(target, \"data-collection-item-value\"));\n        });\n      };\n      const setContents = (comp, items) => {\n        const htmlLines = map$2(items, (item2) => {\n          const itemText = global$8.translate(item2.text);\n          const textContent = spec.columns === 1 ? `<div class=\"tox-collection__item-label\">${itemText}</div>` : \"\";\n          const iconContent = `<div class=\"tox-collection__item-icon\">${item2.icon}</div>`;\n          const mapItemName = {\n            \"_\": \" \",\n            \" - \": \" \",\n            \"-\": \" \"\n          };\n          const ariaLabel = itemText.replace(/\\_| \\- |\\-/g, (match3) => mapItemName[match3]);\n          const disabledClass = providersBackstage.isDisabled() ? \" tox-collection__item--state-disabled\" : \"\";\n          return `<div class=\"tox-collection__item${disabledClass}\" tabindex=\"-1\" data-collection-item-value=\"${global$3.encodeAllRaw(item2.value)}\" title=\"${ariaLabel}\" aria-label=\"${ariaLabel}\">${iconContent}${textContent}</div>`;\n        });\n        const chunks = spec.columns !== \"auto\" && spec.columns > 1 ? chunk$1(htmlLines, spec.columns) : [htmlLines];\n        const html = map$2(chunks, (ch) => `<div class=\"tox-collection__group\">${ch.join(\"\")}</div>`);\n        set$6(comp.element, html.join(\"\"));\n      };\n      const onClick = runOnItem((comp, se, tgt, itemValue) => {\n        se.stop();\n        if (!providersBackstage.isDisabled()) {\n          emitWith(comp, formActionEvent, {\n            name: spec.name,\n            value: itemValue\n          });\n        }\n      });\n      const collectionEvents = [\n        run$1(mouseover(), runOnItem((comp, se, tgt) => {\n          focus$3(tgt);\n        })),\n        run$1(click(), onClick),\n        run$1(tap(), onClick),\n        run$1(focusin(), runOnItem((comp, se, tgt) => {\n          descendant(comp.element, \".\" + activeClass).each((currentActive) => {\n            remove$2(currentActive, activeClass);\n          });\n          add$2(tgt, activeClass);\n        })),\n        run$1(focusout(), runOnItem((comp) => {\n          descendant(comp.element, \".\" + activeClass).each((currentActive) => {\n            remove$2(currentActive, activeClass);\n          });\n        })),\n        runOnExecute$1(runOnItem((comp, se, tgt, itemValue) => {\n          emitWith(comp, formActionEvent, {\n            name: spec.name,\n            value: itemValue\n          });\n        }))\n      ];\n      const iterCollectionItems = (comp, applyAttributes) => map$2(descendants(comp.element, \".tox-collection__item\"), applyAttributes);\n      const pField = FormField.parts.field({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-collection\"].concat(spec.columns !== 1 ? [\"tox-collection--grid\"] : [\"tox-collection--list\"])\n        },\n        components: [],\n        factory: { sketch: identity2 },\n        behaviours: derive$1([\n          Disabling.config({\n            disabled: providersBackstage.isDisabled,\n            onDisabled: (comp) => {\n              iterCollectionItems(comp, (childElm) => {\n                add$2(childElm, \"tox-collection__item--state-disabled\");\n                set$9(childElm, \"aria-disabled\", true);\n              });\n            },\n            onEnabled: (comp) => {\n              iterCollectionItems(comp, (childElm) => {\n                remove$2(childElm, \"tox-collection__item--state-disabled\");\n                remove$7(childElm, \"aria-disabled\");\n              });\n            }\n          }),\n          receivingConfig(),\n          Replacing.config({}),\n          Representing.config({\n            store: {\n              mode: \"memory\",\n              initialValue: initialData.getOr([])\n            },\n            onSetValue: (comp, items) => {\n              setContents(comp, items);\n              if (spec.columns === \"auto\") {\n                detectSize(comp, 5, \"tox-collection__item\").each(({ numRows, numColumns }) => {\n                  Keying.setGridSize(comp, numRows, numColumns);\n                });\n              }\n              emit(comp, formResizeEvent);\n            }\n          }),\n          Tabstopping.config({}),\n          Keying.config(deriveCollectionMovement(spec.columns, \"normal\")),\n          config2(\"collection-events\", collectionEvents)\n        ]),\n        eventOrder: {\n          [execute$5()]: [\n            \"disabling\",\n            \"alloy.base.behaviour\",\n            \"collection-events\"\n          ]\n        }\n      });\n      const extraClasses = [\"tox-form__group--collection\"];\n      return renderFormFieldWith(pLabel, pField, extraClasses, []);\n    };\n    const schema$k = constant$1([\n      option$3(\"data\"),\n      defaulted(\"inputAttributes\", {}),\n      defaulted(\"inputStyles\", {}),\n      defaulted(\"tag\", \"input\"),\n      defaulted(\"inputClasses\", []),\n      onHandler(\"onSetValue\"),\n      defaulted(\"styles\", {}),\n      defaulted(\"eventOrder\", {}),\n      field(\"inputBehaviours\", [\n        Representing,\n        Focusing\n      ]),\n      defaulted(\"selectOnFocus\", true)\n    ]);\n    const focusBehaviours = (detail) => derive$1([Focusing.config({\n      onFocus: !detail.selectOnFocus ? noop : (component) => {\n        const input2 = component.element;\n        const value2 = get$6(input2);\n        input2.dom.setSelectionRange(0, value2.length);\n      }\n    })]);\n    const behaviours = (detail) => ({\n      ...focusBehaviours(detail),\n      ...augment(detail.inputBehaviours, [Representing.config({\n        store: {\n          mode: \"manual\",\n          ...detail.data.map((data) => ({ initialValue: data })).getOr({}),\n          getValue: (input2) => {\n            return get$6(input2.element);\n          },\n          setValue: (input2, data) => {\n            const current = get$6(input2.element);\n            if (current !== data) {\n              set$5(input2.element, data);\n            }\n          }\n        },\n        onSetValue: detail.onSetValue\n      })])\n    });\n    const dom2 = (detail) => ({\n      tag: detail.tag,\n      attributes: {\n        type: \"text\",\n        ...detail.inputAttributes\n      },\n      styles: detail.inputStyles,\n      classes: detail.inputClasses\n    });\n    const factory$h = (detail, _spec) => ({\n      uid: detail.uid,\n      dom: dom2(detail),\n      components: [],\n      behaviours: behaviours(detail),\n      eventOrder: detail.eventOrder\n    });\n    const Input2 = single({\n      name: \"Input\",\n      configFields: schema$k(),\n      factory: factory$h\n    });\n    const nu$3 = (baseFn) => {\n      let data = Optional.none();\n      let callbacks = [];\n      const map3 = (f2) => nu$3((nCallback) => {\n        get2((data2) => {\n          nCallback(f2(data2));\n        });\n      });\n      const get2 = (nCallback) => {\n        if (isReady()) {\n          call(nCallback);\n        } else {\n          callbacks.push(nCallback);\n        }\n      };\n      const set3 = (x2) => {\n        if (!isReady()) {\n          data = Optional.some(x2);\n          run2(callbacks);\n          callbacks = [];\n        }\n      };\n      const isReady = () => data.isSome();\n      const run2 = (cbs) => {\n        each$1(cbs, call);\n      };\n      const call = (cb) => {\n        data.each((x2) => {\n          setTimeout(() => {\n            cb(x2);\n          }, 0);\n        });\n      };\n      baseFn(set3);\n      return {\n        get: get2,\n        map: map3,\n        isReady\n      };\n    };\n    const pure$1 = (a2) => nu$3((callback) => {\n      callback(a2);\n    });\n    const LazyValue = {\n      nu: nu$3,\n      pure: pure$1\n    };\n    const errorReporter = (err) => {\n      setTimeout(() => {\n        throw err;\n      }, 0);\n    };\n    const make$5 = (run2) => {\n      const get2 = (callback) => {\n        run2().then(callback, errorReporter);\n      };\n      const map3 = (fab) => {\n        return make$5(() => run2().then(fab));\n      };\n      const bind2 = (aFutureB) => {\n        return make$5(() => run2().then((v2) => aFutureB(v2).toPromise()));\n      };\n      const anonBind = (futureB) => {\n        return make$5(() => run2().then(() => futureB.toPromise()));\n      };\n      const toLazy = () => {\n        return LazyValue.nu(get2);\n      };\n      const toCached = () => {\n        let cache = null;\n        return make$5(() => {\n          if (cache === null) {\n            cache = run2();\n          }\n          return cache;\n        });\n      };\n      const toPromise = run2;\n      return {\n        map: map3,\n        bind: bind2,\n        anonBind,\n        toLazy,\n        toCached,\n        toPromise,\n        get: get2\n      };\n    };\n    const nu$2 = (baseFn) => {\n      return make$5(() => new Promise(baseFn));\n    };\n    const pure = (a2) => {\n      return make$5(() => Promise.resolve(a2));\n    };\n    const Future = {\n      nu: nu$2,\n      pure\n    };\n    const ariaElements = [\n      \"input\",\n      \"textarea\"\n    ];\n    const isAriaElement = (elem) => {\n      const name2 = name$3(elem);\n      return contains$2(ariaElements, name2);\n    };\n    const markValid = (component, invalidConfig) => {\n      const elem = invalidConfig.getRoot(component).getOr(component.element);\n      remove$2(elem, invalidConfig.invalidClass);\n      invalidConfig.notify.each((notifyInfo) => {\n        if (isAriaElement(component.element)) {\n          set$9(component.element, \"aria-invalid\", false);\n        }\n        notifyInfo.getContainer(component).each((container) => {\n          set$6(container, notifyInfo.validHtml);\n        });\n        notifyInfo.onValid(component);\n      });\n    };\n    const markInvalid = (component, invalidConfig, invalidState, text3) => {\n      const elem = invalidConfig.getRoot(component).getOr(component.element);\n      add$2(elem, invalidConfig.invalidClass);\n      invalidConfig.notify.each((notifyInfo) => {\n        if (isAriaElement(component.element)) {\n          set$9(component.element, \"aria-invalid\", true);\n        }\n        notifyInfo.getContainer(component).each((container) => {\n          set$6(container, text3);\n        });\n        notifyInfo.onInvalid(component, text3);\n      });\n    };\n    const query = (component, invalidConfig, _invalidState) => invalidConfig.validator.fold(() => Future.pure(Result.value(true)), (validatorInfo) => validatorInfo.validate(component));\n    const run = (component, invalidConfig, invalidState) => {\n      invalidConfig.notify.each((notifyInfo) => {\n        notifyInfo.onValidate(component);\n      });\n      return query(component, invalidConfig).map((valid) => {\n        if (component.getSystem().isConnected()) {\n          return valid.fold((err) => {\n            markInvalid(component, invalidConfig, invalidState, err);\n            return Result.error(err);\n          }, (v2) => {\n            markValid(component, invalidConfig);\n            return Result.value(v2);\n          });\n        } else {\n          return Result.error(\"No longer in system\");\n        }\n      });\n    };\n    const isInvalid = (component, invalidConfig) => {\n      const elem = invalidConfig.getRoot(component).getOr(component.element);\n      return has2(elem, invalidConfig.invalidClass);\n    };\n    var InvalidateApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      markValid,\n      markInvalid,\n      query,\n      run,\n      isInvalid\n    });\n    const events$8 = (invalidConfig, invalidState) => invalidConfig.validator.map((validatorInfo) => derive$2([run$1(validatorInfo.onEvent, (component) => {\n      run(component, invalidConfig, invalidState).get(identity2);\n    })].concat(validatorInfo.validateOnLoad ? [runOnAttached((component) => {\n      run(component, invalidConfig, invalidState).get(noop);\n    })] : []))).getOr({});\n    var ActiveInvalidate = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      events: events$8\n    });\n    var InvalidateSchema = [\n      required$1(\"invalidClass\"),\n      defaulted(\"getRoot\", Optional.none),\n      optionObjOf(\"notify\", [\n        defaulted(\"aria\", \"alert\"),\n        defaulted(\"getContainer\", Optional.none),\n        defaulted(\"validHtml\", \"\"),\n        onHandler(\"onValid\"),\n        onHandler(\"onInvalid\"),\n        onHandler(\"onValidate\")\n      ]),\n      optionObjOf(\"validator\", [\n        required$1(\"validate\"),\n        defaulted(\"onEvent\", \"input\"),\n        defaulted(\"validateOnLoad\", true)\n      ])\n    ];\n    const Invalidating = create$3({\n      fields: InvalidateSchema,\n      name: \"invalidating\",\n      active: ActiveInvalidate,\n      apis: InvalidateApis,\n      extra: {\n        validation: (validator) => {\n          return (component) => {\n            const v2 = Representing.getValue(component);\n            return Future.pure(validator(v2));\n          };\n        }\n      }\n    });\n    const getCoupled = (component, coupleConfig, coupleState, name2) => coupleState.getOrCreate(component, coupleConfig, name2);\n    var CouplingApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      getCoupled\n    });\n    var CouplingSchema = [requiredOf(\"others\", setOf(Result.value, anyValue()))];\n    const init$a = () => {\n      const coupled = {};\n      const getOrCreate = (component, coupleConfig, name2) => {\n        const available = keys2(coupleConfig.others);\n        if (!available) {\n          throw new Error(\"Cannot find coupled component: \" + name2 + \". Known coupled components: \" + JSON.stringify(available, null, 2));\n        } else {\n          return get$g(coupled, name2).getOrThunk(() => {\n            const builder2 = get$g(coupleConfig.others, name2).getOrDie(\"No information found for coupled component: \" + name2);\n            const spec = builder2(component);\n            const built = component.getSystem().build(spec);\n            coupled[name2] = built;\n            return built;\n          });\n        }\n      };\n      const readState = constant$1({});\n      return nu$8({\n        readState,\n        getOrCreate\n      });\n    };\n    var CouplingState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      init: init$a\n    });\n    const Coupling = create$3({\n      fields: CouplingSchema,\n      name: \"coupling\",\n      apis: CouplingApis,\n      state: CouplingState\n    });\n    const suffix = constant$1(\"sink\");\n    const partType$1 = constant$1(optional({\n      name: suffix(),\n      overrides: constant$1({\n        dom: { tag: \"div\" },\n        behaviours: derive$1([Positioning.config({ useFixed: always })]),\n        events: derive$2([\n          cutter(keydown()),\n          cutter(mousedown()),\n          cutter(click())\n        ])\n      })\n    }));\n    var HighlightOnOpen;\n    (function(HighlightOnOpen2) {\n      HighlightOnOpen2[HighlightOnOpen2[\"HighlightFirst\"] = 0] = \"HighlightFirst\";\n      HighlightOnOpen2[HighlightOnOpen2[\"HighlightNone\"] = 1] = \"HighlightNone\";\n    })(HighlightOnOpen || (HighlightOnOpen = {}));\n    const getAnchor = (detail, component) => {\n      const hotspot = detail.getHotspot(component).getOr(component);\n      const type2 = \"hotspot\";\n      const overrides = detail.getAnchorOverrides();\n      return detail.layouts.fold(() => ({\n        type: type2,\n        hotspot,\n        overrides\n      }), (layouts2) => ({\n        type: type2,\n        hotspot,\n        overrides,\n        layouts: layouts2\n      }));\n    };\n    const fetch2 = (detail, mapFetch, component) => {\n      const fetcher = detail.fetch;\n      return fetcher(component).map(mapFetch);\n    };\n    const openF = (detail, mapFetch, anchor2, component, sandbox, externals, highlightOnOpen) => {\n      const futureData = fetch2(detail, mapFetch, component);\n      const getLazySink = getSink(component, detail);\n      return futureData.map((tdata) => tdata.bind((data) => Optional.from(tieredMenu.sketch({\n        ...externals.menu(),\n        uid: generate$5(\"\"),\n        data,\n        highlightImmediately: highlightOnOpen === HighlightOnOpen.HighlightFirst,\n        onOpenMenu: (tmenu, menu2) => {\n          const sink = getLazySink().getOrDie();\n          Positioning.position(sink, menu2, { anchor: anchor2 });\n          Sandboxing.decloak(sandbox);\n        },\n        onOpenSubmenu: (tmenu, item2, submenu) => {\n          const sink = getLazySink().getOrDie();\n          Positioning.position(sink, submenu, {\n            anchor: {\n              type: \"submenu\",\n              item: item2\n            }\n          });\n          Sandboxing.decloak(sandbox);\n        },\n        onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n          const sink = getLazySink().getOrDie();\n          Positioning.position(sink, primaryMenu, { anchor: anchor2 });\n          each$1(submenuTriggers, (st) => {\n            Positioning.position(sink, st.triggeredMenu, {\n              anchor: {\n                type: \"submenu\",\n                item: st.triggeringItem\n              }\n            });\n          });\n        },\n        onEscape: () => {\n          Focusing.focus(component);\n          Sandboxing.close(sandbox);\n          return Optional.some(true);\n        }\n      }))));\n    };\n    const open = (detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen) => {\n      const anchor2 = getAnchor(detail, hotspot);\n      const processed = openF(detail, mapFetch, anchor2, hotspot, sandbox, externals, highlightOnOpen);\n      return processed.map((tdata) => {\n        tdata.fold(() => {\n          if (Sandboxing.isOpen(sandbox)) {\n            Sandboxing.close(sandbox);\n          }\n        }, (data) => {\n          Sandboxing.cloak(sandbox);\n          Sandboxing.open(sandbox, data);\n          onOpenSync(sandbox);\n        });\n        return sandbox;\n      });\n    };\n    const close = (detail, mapFetch, component, sandbox, _externals, _onOpenSync, _highlightOnOpen) => {\n      Sandboxing.close(sandbox);\n      return Future.pure(sandbox);\n    };\n    const togglePopup = (detail, mapFetch, hotspot, externals, onOpenSync, highlightOnOpen) => {\n      const sandbox = Coupling.getCoupled(hotspot, \"sandbox\");\n      const showing = Sandboxing.isOpen(sandbox);\n      const action = showing ? close : open;\n      return action(detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen);\n    };\n    const matchWidth = (hotspot, container, useMinWidth) => {\n      const menu2 = Composing.getCurrent(container).getOr(container);\n      const buttonWidth = get$c(hotspot.element);\n      if (useMinWidth) {\n        set$8(menu2.element, \"min-width\", buttonWidth + \"px\");\n      } else {\n        set$7(menu2.element, buttonWidth);\n      }\n    };\n    const getSink = (anyInSystem, sinkDetail) => anyInSystem.getSystem().getByUid(sinkDetail.uid + \"-\" + suffix()).map((internalSink) => () => Result.value(internalSink)).getOrThunk(() => sinkDetail.lazySink.fold(() => () => Result.error(new Error(\"No internal sink is specified, nor could an external sink be found\")), (lazySinkFn) => () => lazySinkFn(anyInSystem)));\n    const doRepositionMenus = (sandbox) => {\n      Sandboxing.getState(sandbox).each((tmenu) => {\n        tieredMenu.repositionMenus(tmenu);\n      });\n    };\n    const makeSandbox$1 = (detail, hotspot, extras) => {\n      const ariaControls = manager();\n      const onOpen = (component, menu2) => {\n        const anchor2 = getAnchor(detail, hotspot);\n        ariaControls.link(hotspot.element);\n        if (detail.matchWidth) {\n          matchWidth(anchor2.hotspot, menu2, detail.useMinWidth);\n        }\n        detail.onOpen(anchor2, component, menu2);\n        if (extras !== void 0 && extras.onOpen !== void 0) {\n          extras.onOpen(component, menu2);\n        }\n      };\n      const onClose = (component, menu2) => {\n        ariaControls.unlink(hotspot.element);\n        if (extras !== void 0 && extras.onClose !== void 0) {\n          extras.onClose(component, menu2);\n        }\n      };\n      const lazySink = getSink(hotspot, detail);\n      return {\n        dom: {\n          tag: \"div\",\n          classes: detail.sandboxClasses,\n          attributes: {\n            id: ariaControls.id,\n            role: \"listbox\"\n          }\n        },\n        behaviours: SketchBehaviours.augment(detail.sandboxBehaviours, [\n          Representing.config({\n            store: {\n              mode: \"memory\",\n              initialValue: hotspot\n            }\n          }),\n          Sandboxing.config({\n            onOpen,\n            onClose,\n            isPartOf: (container, data, queryElem) => {\n              return isPartOf$1(data, queryElem) || isPartOf$1(hotspot, queryElem);\n            },\n            getAttachPoint: () => {\n              return lazySink().getOrDie();\n            }\n          }),\n          Composing.config({\n            find: (sandbox) => {\n              return Sandboxing.getState(sandbox).bind((menu2) => Composing.getCurrent(menu2));\n            }\n          }),\n          Receiving.config({\n            channels: {\n              ...receivingChannel$1({ isExtraPart: never }),\n              ...receivingChannel({ doReposition: doRepositionMenus })\n            }\n          })\n        ])\n      };\n    };\n    const repositionMenus = (comp) => {\n      const sandbox = Coupling.getCoupled(comp, \"sandbox\");\n      doRepositionMenus(sandbox);\n    };\n    const sandboxFields = () => [\n      defaulted(\"sandboxClasses\", []),\n      SketchBehaviours.field(\"sandboxBehaviours\", [\n        Composing,\n        Receiving,\n        Sandboxing,\n        Representing\n      ])\n    ];\n    const schema$j = constant$1([\n      required$1(\"dom\"),\n      required$1(\"fetch\"),\n      onHandler(\"onOpen\"),\n      onKeyboardHandler(\"onExecute\"),\n      defaulted(\"getHotspot\", Optional.some),\n      defaulted(\"getAnchorOverrides\", constant$1({})),\n      schema$y(),\n      field(\"dropdownBehaviours\", [\n        Toggling,\n        Coupling,\n        Keying,\n        Focusing\n      ]),\n      required$1(\"toggleClass\"),\n      defaulted(\"eventOrder\", {}),\n      option$3(\"lazySink\"),\n      defaulted(\"matchWidth\", false),\n      defaulted(\"useMinWidth\", false),\n      option$3(\"role\")\n    ].concat(sandboxFields()));\n    const parts$d = constant$1([\n      external({\n        schema: [tieredMenuMarkers()],\n        name: \"menu\",\n        defaults: (detail) => {\n          return { onExecute: detail.onExecute };\n        }\n      }),\n      partType$1()\n    ]);\n    const factory$g = (detail, components2, _spec, externals) => {\n      const lookupAttr = (attr) => get$g(detail.dom, \"attributes\").bind((attrs) => get$g(attrs, attr));\n      const switchToMenu = (sandbox) => {\n        Sandboxing.getState(sandbox).each((tmenu) => {\n          tieredMenu.highlightPrimary(tmenu);\n        });\n      };\n      const action = (component) => {\n        const onOpenSync = switchToMenu;\n        togglePopup(detail, identity2, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n      };\n      const apis = {\n        expand: (comp) => {\n          if (!Toggling.isOn(comp)) {\n            togglePopup(detail, identity2, comp, externals, noop, HighlightOnOpen.HighlightNone).get(noop);\n          }\n        },\n        open: (comp) => {\n          if (!Toggling.isOn(comp)) {\n            togglePopup(detail, identity2, comp, externals, noop, HighlightOnOpen.HighlightFirst).get(noop);\n          }\n        },\n        isOpen: Toggling.isOn,\n        close: (comp) => {\n          if (Toggling.isOn(comp)) {\n            togglePopup(detail, identity2, comp, externals, noop, HighlightOnOpen.HighlightFirst).get(noop);\n          }\n        },\n        repositionMenus: (comp) => {\n          if (Toggling.isOn(comp)) {\n            repositionMenus(comp);\n          }\n        }\n      };\n      const triggerExecute = (comp, _se) => {\n        emitExecute(comp);\n        return Optional.some(true);\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: components2,\n        behaviours: augment(detail.dropdownBehaviours, [\n          Toggling.config({\n            toggleClass: detail.toggleClass,\n            aria: { mode: \"expanded\" }\n          }),\n          Coupling.config({\n            others: {\n              sandbox: (hotspot) => {\n                return makeSandbox$1(detail, hotspot, {\n                  onOpen: () => Toggling.on(hotspot),\n                  onClose: () => Toggling.off(hotspot)\n                });\n              }\n            }\n          }),\n          Keying.config({\n            mode: \"special\",\n            onSpace: triggerExecute,\n            onEnter: triggerExecute,\n            onDown: (comp, _se) => {\n              if (Dropdown.isOpen(comp)) {\n                const sandbox = Coupling.getCoupled(comp, \"sandbox\");\n                switchToMenu(sandbox);\n              } else {\n                Dropdown.open(comp);\n              }\n              return Optional.some(true);\n            },\n            onEscape: (comp, _se) => {\n              if (Dropdown.isOpen(comp)) {\n                Dropdown.close(comp);\n                return Optional.some(true);\n              } else {\n                return Optional.none();\n              }\n            }\n          }),\n          Focusing.config({})\n        ]),\n        events: events$a(Optional.some(action)),\n        eventOrder: {\n          ...detail.eventOrder,\n          [execute$5()]: [\n            \"disabling\",\n            \"toggling\",\n            \"alloy.base.behaviour\"\n          ]\n        },\n        apis,\n        domModification: {\n          attributes: {\n            \"aria-haspopup\": \"true\",\n            ...detail.role.fold(() => ({}), (role) => ({ role })),\n            ...detail.dom.tag === \"button\" ? { type: lookupAttr(\"type\").getOr(\"button\") } : {}\n          }\n        }\n      };\n    };\n    const Dropdown = composite({\n      name: \"Dropdown\",\n      configFields: schema$j(),\n      partFields: parts$d(),\n      factory: factory$g,\n      apis: {\n        open: (apis, comp) => apis.open(comp),\n        expand: (apis, comp) => apis.expand(comp),\n        close: (apis, comp) => apis.close(comp),\n        isOpen: (apis, comp) => apis.isOpen(comp),\n        repositionMenus: (apis, comp) => apis.repositionMenus(comp)\n      }\n    });\n    const exhibit$1 = () => nu$7({\n      styles: {\n        \"-webkit-user-select\": \"none\",\n        \"user-select\": \"none\",\n        \"-ms-user-select\": \"none\",\n        \"-moz-user-select\": \"-moz-none\"\n      },\n      attributes: { unselectable: \"on\" }\n    });\n    const events$7 = () => derive$2([abort(selectstart(), always)]);\n    var ActiveUnselecting = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      events: events$7,\n      exhibit: exhibit$1\n    });\n    const Unselecting = create$3({\n      fields: [],\n      name: \"unselecting\",\n      active: ActiveUnselecting\n    });\n    const renderPanelButton = (spec, sharedBackstage) => Dropdown.sketch({\n      dom: spec.dom,\n      components: spec.components,\n      toggleClass: \"mce-active\",\n      dropdownBehaviours: derive$1([\n        DisablingConfigs.button(sharedBackstage.providers.isDisabled),\n        receivingConfig(),\n        Unselecting.config({}),\n        Tabstopping.config({})\n      ]),\n      layouts: spec.layouts,\n      sandboxClasses: [\"tox-dialog__popups\"],\n      lazySink: sharedBackstage.getSink,\n      fetch: (comp) => Future.nu((callback) => spec.fetch(callback)).map((items) => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6(\"menu-value\"), items, (value2) => {\n        spec.onItemAction(comp, value2);\n      }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, sharedBackstage.providers), { movement: deriveMenuMovement(spec.columns, spec.presets) })))),\n      parts: { menu: part(false, 1, spec.presets) }\n    });\n    const colorInputChangeEvent = generate$6(\"color-input-change\");\n    const colorSwatchChangeEvent = generate$6(\"color-swatch-change\");\n    const colorPickerCancelEvent = generate$6(\"color-picker-cancel\");\n    const renderColorInput = (spec, sharedBackstage, colorInputBackstage, initialData) => {\n      const pField = FormField.parts.field({\n        factory: Input2,\n        inputClasses: [\"tox-textfield\"],\n        data: initialData,\n        onSetValue: (c2) => Invalidating.run(c2).get(noop),\n        inputBehaviours: derive$1([\n          Disabling.config({ disabled: sharedBackstage.providers.isDisabled }),\n          receivingConfig(),\n          Tabstopping.config({}),\n          Invalidating.config({\n            invalidClass: \"tox-textbox-field-invalid\",\n            getRoot: (comp) => parentElement(comp.element),\n            notify: {\n              onValid: (comp) => {\n                const val = Representing.getValue(comp);\n                emitWith(comp, colorInputChangeEvent, { color: val });\n              }\n            },\n            validator: {\n              validateOnLoad: false,\n              validate: (input2) => {\n                const inputValue = Representing.getValue(input2);\n                if (inputValue.length === 0) {\n                  return Future.pure(Result.value(true));\n                } else {\n                  const span = SugarElement.fromTag(\"span\");\n                  set$8(span, \"background-color\", inputValue);\n                  const res = getRaw(span, \"background-color\").fold(() => Result.error(\"blah\"), (_2) => Result.value(inputValue));\n                  return Future.pure(res);\n                }\n              }\n            }\n          })\n        ]),\n        selectOnFocus: false\n      });\n      const pLabel = spec.label.map((label2) => renderLabel$2(label2, sharedBackstage.providers));\n      const emitSwatchChange = (colorBit, value2) => {\n        emitWith(colorBit, colorSwatchChangeEvent, { value: value2 });\n      };\n      const onItemAction2 = (comp, value2) => {\n        memColorButton.getOpt(comp).each((colorBit) => {\n          if (value2 === \"custom\") {\n            colorInputBackstage.colorPicker((valueOpt) => {\n              valueOpt.fold(() => emit(colorBit, colorPickerCancelEvent), (value3) => {\n                emitSwatchChange(colorBit, value3);\n                addColor(value3);\n              });\n            }, \"#ffffff\");\n          } else if (value2 === \"remove\") {\n            emitSwatchChange(colorBit, \"\");\n          } else {\n            emitSwatchChange(colorBit, value2);\n          }\n        });\n      };\n      const memColorButton = record(renderPanelButton({\n        dom: {\n          tag: \"span\",\n          attributes: { \"aria-label\": sharedBackstage.providers.translate(\"Color swatch\") }\n        },\n        layouts: {\n          onRtl: () => [\n            southwest$2,\n            southeast$2,\n            south$2\n          ],\n          onLtr: () => [\n            southeast$2,\n            southwest$2,\n            south$2\n          ]\n        },\n        components: [],\n        fetch: getFetch$1(colorInputBackstage.getColors(), colorInputBackstage.hasCustomColors()),\n        columns: colorInputBackstage.getColorCols(),\n        presets: \"color\",\n        onItemAction: onItemAction2\n      }, sharedBackstage));\n      return FormField.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-form__group\"]\n        },\n        components: pLabel.toArray().concat([{\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-color-input\"]\n          },\n          components: [\n            pField,\n            memColorButton.asSpec()\n          ]\n        }]),\n        fieldBehaviours: derive$1([config2(\"form-field-events\", [\n          run$1(colorInputChangeEvent, (comp, se) => {\n            memColorButton.getOpt(comp).each((colorButton) => {\n              set$8(colorButton.element, \"background-color\", se.event.color);\n            });\n            emitWith(comp, formChangeEvent, { name: spec.name });\n          }),\n          run$1(colorSwatchChangeEvent, (comp, se) => {\n            FormField.getField(comp).each((field2) => {\n              Representing.setValue(field2, se.event.value);\n              Composing.getCurrent(comp).each(Focusing.focus);\n            });\n          }),\n          run$1(colorPickerCancelEvent, (comp, _se) => {\n            FormField.getField(comp).each((_field) => {\n              Composing.getCurrent(comp).each(Focusing.focus);\n            });\n          })\n        ])])\n      });\n    };\n    const labelPart = optional({\n      schema: [required$1(\"dom\")],\n      name: \"label\"\n    });\n    const edgePart = (name2) => optional({\n      name: \"\" + name2 + \"-edge\",\n      overrides: (detail) => {\n        const action = detail.model.manager.edgeActions[name2];\n        return action.fold(() => ({}), (a2) => ({\n          events: derive$2([\n            runActionExtra(touchstart(), (comp, se, d2) => a2(comp, d2), [detail]),\n            runActionExtra(mousedown(), (comp, se, d2) => a2(comp, d2), [detail]),\n            runActionExtra(mousemove(), (comp, se, det) => {\n              if (det.mouseIsDown.get()) {\n                a2(comp, det);\n              }\n            }, [detail])\n          ])\n        }));\n      }\n    });\n    const tlEdgePart = edgePart(\"top-left\");\n    const tedgePart = edgePart(\"top\");\n    const trEdgePart = edgePart(\"top-right\");\n    const redgePart = edgePart(\"right\");\n    const brEdgePart = edgePart(\"bottom-right\");\n    const bedgePart = edgePart(\"bottom\");\n    const blEdgePart = edgePart(\"bottom-left\");\n    const ledgePart = edgePart(\"left\");\n    const thumbPart = required({\n      name: \"thumb\",\n      defaults: constant$1({ dom: { styles: { position: \"absolute\" } } }),\n      overrides: (detail) => {\n        return {\n          events: derive$2([\n            redirectToPart(touchstart(), detail, \"spectrum\"),\n            redirectToPart(touchmove(), detail, \"spectrum\"),\n            redirectToPart(touchend(), detail, \"spectrum\"),\n            redirectToPart(mousedown(), detail, \"spectrum\"),\n            redirectToPart(mousemove(), detail, \"spectrum\"),\n            redirectToPart(mouseup(), detail, \"spectrum\")\n          ])\n        };\n      }\n    });\n    const spectrumPart = required({\n      schema: [customField(\"mouseIsDown\", () => Cell(false))],\n      name: \"spectrum\",\n      overrides: (detail) => {\n        const modelDetail = detail.model;\n        const model2 = modelDetail.manager;\n        const setValueFrom2 = (component, simulatedEvent) => model2.getValueFromEvent(simulatedEvent).map((value2) => model2.setValueFrom(component, detail, value2));\n        return {\n          behaviours: derive$1([\n            Keying.config({\n              mode: \"special\",\n              onLeft: (spectrum) => model2.onLeft(spectrum, detail),\n              onRight: (spectrum) => model2.onRight(spectrum, detail),\n              onUp: (spectrum) => model2.onUp(spectrum, detail),\n              onDown: (spectrum) => model2.onDown(spectrum, detail)\n            }),\n            Focusing.config({})\n          ]),\n          events: derive$2([\n            run$1(touchstart(), setValueFrom2),\n            run$1(touchmove(), setValueFrom2),\n            run$1(mousedown(), setValueFrom2),\n            run$1(mousemove(), (spectrum, se) => {\n              if (detail.mouseIsDown.get()) {\n                setValueFrom2(spectrum, se);\n              }\n            })\n          ])\n        };\n      }\n    });\n    var SliderParts = [\n      labelPart,\n      ledgePart,\n      redgePart,\n      tedgePart,\n      bedgePart,\n      tlEdgePart,\n      trEdgePart,\n      blEdgePart,\n      brEdgePart,\n      thumbPart,\n      spectrumPart\n    ];\n    const _sliderChangeEvent = \"slider.change.value\";\n    const sliderChangeEvent = constant$1(_sliderChangeEvent);\n    const isTouchEvent$1 = (evt) => evt.type.indexOf(\"touch\") !== -1;\n    const getEventSource = (simulatedEvent) => {\n      const evt = simulatedEvent.event.raw;\n      if (isTouchEvent$1(evt)) {\n        const touchEvent = evt;\n        return touchEvent.touches !== void 0 && touchEvent.touches.length === 1 ? Optional.some(touchEvent.touches[0]).map((t3) => SugarPosition(t3.clientX, t3.clientY)) : Optional.none();\n      } else {\n        const mouseEvent = evt;\n        return mouseEvent.clientX !== void 0 ? Optional.some(mouseEvent).map((me) => SugarPosition(me.clientX, me.clientY)) : Optional.none();\n      }\n    };\n    const t2 = \"top\", r3 = \"right\", b2 = \"bottom\", l2 = \"left\";\n    const minX = (detail) => detail.model.minX;\n    const minY = (detail) => detail.model.minY;\n    const min1X = (detail) => detail.model.minX - 1;\n    const min1Y = (detail) => detail.model.minY - 1;\n    const maxX = (detail) => detail.model.maxX;\n    const maxY = (detail) => detail.model.maxY;\n    const max1X = (detail) => detail.model.maxX + 1;\n    const max1Y = (detail) => detail.model.maxY + 1;\n    const range = (detail, max2, min2) => max2(detail) - min2(detail);\n    const xRange = (detail) => range(detail, maxX, minX);\n    const yRange = (detail) => range(detail, maxY, minY);\n    const halfX = (detail) => xRange(detail) / 2;\n    const halfY = (detail) => yRange(detail) / 2;\n    const step = (detail) => detail.stepSize;\n    const snap = (detail) => detail.snapToGrid;\n    const snapStart = (detail) => detail.snapStart;\n    const rounded = (detail) => detail.rounded;\n    const hasEdge = (detail, edgeName) => detail[edgeName + \"-edge\"] !== void 0;\n    const hasLEdge = (detail) => hasEdge(detail, l2);\n    const hasREdge = (detail) => hasEdge(detail, r3);\n    const hasTEdge = (detail) => hasEdge(detail, t2);\n    const hasBEdge = (detail) => hasEdge(detail, b2);\n    const currentValue = (detail) => detail.model.value.get();\n    const xyValue = (x2, y2) => ({\n      x: x2,\n      y: y2\n    });\n    const fireSliderChange$3 = (component, value2) => {\n      emitWith(component, sliderChangeEvent(), { value: value2 });\n    };\n    const setToTLEdgeXY = (edge2, detail) => {\n      fireSliderChange$3(edge2, xyValue(min1X(detail), min1Y(detail)));\n    };\n    const setToTEdge = (edge2, detail) => {\n      fireSliderChange$3(edge2, min1Y(detail));\n    };\n    const setToTEdgeXY = (edge2, detail) => {\n      fireSliderChange$3(edge2, xyValue(halfX(detail), min1Y(detail)));\n    };\n    const setToTREdgeXY = (edge2, detail) => {\n      fireSliderChange$3(edge2, xyValue(max1X(detail), min1Y(detail)));\n    };\n    const setToREdge = (edge2, detail) => {\n      fireSliderChange$3(edge2, max1X(detail));\n    };\n    const setToREdgeXY = (edge2, detail) => {\n      fireSliderChange$3(edge2, xyValue(max1X(detail), halfY(detail)));\n    };\n    const setToBREdgeXY = (edge2, detail) => {\n      fireSliderChange$3(edge2, xyValue(max1X(detail), max1Y(detail)));\n    };\n    const setToBEdge = (edge2, detail) => {\n      fireSliderChange$3(edge2, max1Y(detail));\n    };\n    const setToBEdgeXY = (edge2, detail) => {\n      fireSliderChange$3(edge2, xyValue(halfX(detail), max1Y(detail)));\n    };\n    const setToBLEdgeXY = (edge2, detail) => {\n      fireSliderChange$3(edge2, xyValue(min1X(detail), max1Y(detail)));\n    };\n    const setToLEdge = (edge2, detail) => {\n      fireSliderChange$3(edge2, min1X(detail));\n    };\n    const setToLEdgeXY = (edge2, detail) => {\n      fireSliderChange$3(edge2, xyValue(min1X(detail), halfY(detail)));\n    };\n    const reduceBy = (value2, min2, max2, step2) => {\n      if (value2 < min2) {\n        return value2;\n      } else if (value2 > max2) {\n        return max2;\n      } else if (value2 === min2) {\n        return min2 - 1;\n      } else {\n        return Math.max(min2, value2 - step2);\n      }\n    };\n    const increaseBy = (value2, min2, max2, step2) => {\n      if (value2 > max2) {\n        return value2;\n      } else if (value2 < min2) {\n        return min2;\n      } else if (value2 === max2) {\n        return max2 + 1;\n      } else {\n        return Math.min(max2, value2 + step2);\n      }\n    };\n    const capValue = (value2, min2, max2) => Math.max(min2, Math.min(max2, value2));\n    const snapValueOf = (value2, min2, max2, step2, snapStart2) => snapStart2.fold(() => {\n      const initValue = value2 - min2;\n      const extraValue = Math.round(initValue / step2) * step2;\n      return capValue(min2 + extraValue, min2 - 1, max2 + 1);\n    }, (start) => {\n      const remainder = (value2 - start) % step2;\n      const adjustment = Math.round(remainder / step2);\n      const rawSteps = Math.floor((value2 - start) / step2);\n      const maxSteps = Math.floor((max2 - start) / step2);\n      const numSteps = Math.min(maxSteps, rawSteps + adjustment);\n      const r4 = start + numSteps * step2;\n      return Math.max(start, r4);\n    });\n    const findOffsetOf = (value2, min2, max2) => Math.min(max2, Math.max(value2, min2)) - min2;\n    const findValueOf = (args) => {\n      const { min: min2, max: max2, range: range2, value: value2, step: step2, snap: snap2, snapStart: snapStart2, rounded: rounded2, hasMinEdge, hasMaxEdge, minBound, maxBound, screenRange } = args;\n      const capMin = hasMinEdge ? min2 - 1 : min2;\n      const capMax = hasMaxEdge ? max2 + 1 : max2;\n      if (value2 < minBound) {\n        return capMin;\n      } else if (value2 > maxBound) {\n        return capMax;\n      } else {\n        const offset2 = findOffsetOf(value2, minBound, maxBound);\n        const newValue = capValue(offset2 / screenRange * range2 + min2, capMin, capMax);\n        if (snap2 && newValue >= min2 && newValue <= max2) {\n          return snapValueOf(newValue, min2, max2, step2, snapStart2);\n        } else if (rounded2) {\n          return Math.round(newValue);\n        } else {\n          return newValue;\n        }\n      }\n    };\n    const findOffsetOfValue$2 = (args) => {\n      const { min: min2, max: max2, range: range2, value: value2, hasMinEdge, hasMaxEdge, maxBound, maxOffset, centerMinEdge, centerMaxEdge } = args;\n      if (value2 < min2) {\n        return hasMinEdge ? 0 : centerMinEdge;\n      } else if (value2 > max2) {\n        return hasMaxEdge ? maxBound : centerMaxEdge;\n      } else {\n        return (value2 - min2) / range2 * maxOffset;\n      }\n    };\n    const top = \"top\", right = \"right\", bottom = \"bottom\", left = \"left\", width = \"width\", height = \"height\";\n    const getBounds = (component) => component.element.dom.getBoundingClientRect();\n    const getBoundsProperty = (bounds2, property) => bounds2[property];\n    const getMinXBounds = (component) => {\n      const bounds2 = getBounds(component);\n      return getBoundsProperty(bounds2, left);\n    };\n    const getMaxXBounds = (component) => {\n      const bounds2 = getBounds(component);\n      return getBoundsProperty(bounds2, right);\n    };\n    const getMinYBounds = (component) => {\n      const bounds2 = getBounds(component);\n      return getBoundsProperty(bounds2, top);\n    };\n    const getMaxYBounds = (component) => {\n      const bounds2 = getBounds(component);\n      return getBoundsProperty(bounds2, bottom);\n    };\n    const getXScreenRange = (component) => {\n      const bounds2 = getBounds(component);\n      return getBoundsProperty(bounds2, width);\n    };\n    const getYScreenRange = (component) => {\n      const bounds2 = getBounds(component);\n      return getBoundsProperty(bounds2, height);\n    };\n    const getCenterOffsetOf = (componentMinEdge, componentMaxEdge, spectrumMinEdge) => (componentMinEdge + componentMaxEdge) / 2 - spectrumMinEdge;\n    const getXCenterOffSetOf = (component, spectrum) => {\n      const componentBounds = getBounds(component);\n      const spectrumBounds = getBounds(spectrum);\n      const componentMinEdge = getBoundsProperty(componentBounds, left);\n      const componentMaxEdge = getBoundsProperty(componentBounds, right);\n      const spectrumMinEdge = getBoundsProperty(spectrumBounds, left);\n      return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n    };\n    const getYCenterOffSetOf = (component, spectrum) => {\n      const componentBounds = getBounds(component);\n      const spectrumBounds = getBounds(spectrum);\n      const componentMinEdge = getBoundsProperty(componentBounds, top);\n      const componentMaxEdge = getBoundsProperty(componentBounds, bottom);\n      const spectrumMinEdge = getBoundsProperty(spectrumBounds, top);\n      return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n    };\n    const fireSliderChange$2 = (spectrum, value2) => {\n      emitWith(spectrum, sliderChangeEvent(), { value: value2 });\n    };\n    const findValueOfOffset$1 = (spectrum, detail, left2) => {\n      const args = {\n        min: minX(detail),\n        max: maxX(detail),\n        range: xRange(detail),\n        value: left2,\n        step: step(detail),\n        snap: snap(detail),\n        snapStart: snapStart(detail),\n        rounded: rounded(detail),\n        hasMinEdge: hasLEdge(detail),\n        hasMaxEdge: hasREdge(detail),\n        minBound: getMinXBounds(spectrum),\n        maxBound: getMaxXBounds(spectrum),\n        screenRange: getXScreenRange(spectrum)\n      };\n      return findValueOf(args);\n    };\n    const setValueFrom$2 = (spectrum, detail, value2) => {\n      const xValue = findValueOfOffset$1(spectrum, detail, value2);\n      const sliderVal = xValue;\n      fireSliderChange$2(spectrum, sliderVal);\n      return xValue;\n    };\n    const setToMin$2 = (spectrum, detail) => {\n      const min2 = minX(detail);\n      fireSliderChange$2(spectrum, min2);\n    };\n    const setToMax$2 = (spectrum, detail) => {\n      const max2 = maxX(detail);\n      fireSliderChange$2(spectrum, max2);\n    };\n    const moveBy$2 = (direction, spectrum, detail) => {\n      const f2 = direction > 0 ? increaseBy : reduceBy;\n      const xValue = f2(currentValue(detail), minX(detail), maxX(detail), step(detail));\n      fireSliderChange$2(spectrum, xValue);\n      return Optional.some(xValue);\n    };\n    const handleMovement$2 = (direction) => (spectrum, detail) => moveBy$2(direction, spectrum, detail).map(always);\n    const getValueFromEvent$2 = (simulatedEvent) => {\n      const pos = getEventSource(simulatedEvent);\n      return pos.map((p2) => p2.left);\n    };\n    const findOffsetOfValue$1 = (spectrum, detail, value2, minEdge, maxEdge) => {\n      const minOffset = 0;\n      const maxOffset = getXScreenRange(spectrum);\n      const centerMinEdge = minEdge.bind((edge2) => Optional.some(getXCenterOffSetOf(edge2, spectrum))).getOr(minOffset);\n      const centerMaxEdge = maxEdge.bind((edge2) => Optional.some(getXCenterOffSetOf(edge2, spectrum))).getOr(maxOffset);\n      const args = {\n        min: minX(detail),\n        max: maxX(detail),\n        range: xRange(detail),\n        value: value2,\n        hasMinEdge: hasLEdge(detail),\n        hasMaxEdge: hasREdge(detail),\n        minBound: getMinXBounds(spectrum),\n        maxBound: getMaxXBounds(spectrum),\n        maxOffset,\n        centerMinEdge,\n        centerMaxEdge\n      };\n      return findOffsetOfValue$2(args);\n    };\n    const findPositionOfValue$1 = (slider, spectrum, value2, minEdge, maxEdge, detail) => {\n      const offset2 = findOffsetOfValue$1(spectrum, detail, value2, minEdge, maxEdge);\n      return getMinXBounds(spectrum) - getMinXBounds(slider) + offset2;\n    };\n    const setPositionFromValue$2 = (slider, thumb, detail, edges) => {\n      const value2 = currentValue(detail);\n      const pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value2, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n      const thumbRadius = get$c(thumb.element) / 2;\n      set$8(thumb.element, \"left\", pos - thumbRadius + \"px\");\n    };\n    const onLeft$2 = handleMovement$2(-1);\n    const onRight$2 = handleMovement$2(1);\n    const onUp$2 = Optional.none;\n    const onDown$2 = Optional.none;\n    const edgeActions$2 = {\n      \"top-left\": Optional.none(),\n      \"top\": Optional.none(),\n      \"top-right\": Optional.none(),\n      \"right\": Optional.some(setToREdge),\n      \"bottom-right\": Optional.none(),\n      \"bottom\": Optional.none(),\n      \"bottom-left\": Optional.none(),\n      \"left\": Optional.some(setToLEdge)\n    };\n    var HorizontalModel = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      setValueFrom: setValueFrom$2,\n      setToMin: setToMin$2,\n      setToMax: setToMax$2,\n      findValueOfOffset: findValueOfOffset$1,\n      getValueFromEvent: getValueFromEvent$2,\n      findPositionOfValue: findPositionOfValue$1,\n      setPositionFromValue: setPositionFromValue$2,\n      onLeft: onLeft$2,\n      onRight: onRight$2,\n      onUp: onUp$2,\n      onDown: onDown$2,\n      edgeActions: edgeActions$2\n    });\n    const fireSliderChange$1 = (spectrum, value2) => {\n      emitWith(spectrum, sliderChangeEvent(), { value: value2 });\n    };\n    const findValueOfOffset = (spectrum, detail, top2) => {\n      const args = {\n        min: minY(detail),\n        max: maxY(detail),\n        range: yRange(detail),\n        value: top2,\n        step: step(detail),\n        snap: snap(detail),\n        snapStart: snapStart(detail),\n        rounded: rounded(detail),\n        hasMinEdge: hasTEdge(detail),\n        hasMaxEdge: hasBEdge(detail),\n        minBound: getMinYBounds(spectrum),\n        maxBound: getMaxYBounds(spectrum),\n        screenRange: getYScreenRange(spectrum)\n      };\n      return findValueOf(args);\n    };\n    const setValueFrom$1 = (spectrum, detail, value2) => {\n      const yValue = findValueOfOffset(spectrum, detail, value2);\n      const sliderVal = yValue;\n      fireSliderChange$1(spectrum, sliderVal);\n      return yValue;\n    };\n    const setToMin$1 = (spectrum, detail) => {\n      const min2 = minY(detail);\n      fireSliderChange$1(spectrum, min2);\n    };\n    const setToMax$1 = (spectrum, detail) => {\n      const max2 = maxY(detail);\n      fireSliderChange$1(spectrum, max2);\n    };\n    const moveBy$1 = (direction, spectrum, detail) => {\n      const f2 = direction > 0 ? increaseBy : reduceBy;\n      const yValue = f2(currentValue(detail), minY(detail), maxY(detail), step(detail));\n      fireSliderChange$1(spectrum, yValue);\n      return Optional.some(yValue);\n    };\n    const handleMovement$1 = (direction) => (spectrum, detail) => moveBy$1(direction, spectrum, detail).map(always);\n    const getValueFromEvent$1 = (simulatedEvent) => {\n      const pos = getEventSource(simulatedEvent);\n      return pos.map((p2) => {\n        return p2.top;\n      });\n    };\n    const findOffsetOfValue = (spectrum, detail, value2, minEdge, maxEdge) => {\n      const minOffset = 0;\n      const maxOffset = getYScreenRange(spectrum);\n      const centerMinEdge = minEdge.bind((edge2) => Optional.some(getYCenterOffSetOf(edge2, spectrum))).getOr(minOffset);\n      const centerMaxEdge = maxEdge.bind((edge2) => Optional.some(getYCenterOffSetOf(edge2, spectrum))).getOr(maxOffset);\n      const args = {\n        min: minY(detail),\n        max: maxY(detail),\n        range: yRange(detail),\n        value: value2,\n        hasMinEdge: hasTEdge(detail),\n        hasMaxEdge: hasBEdge(detail),\n        minBound: getMinYBounds(spectrum),\n        maxBound: getMaxYBounds(spectrum),\n        maxOffset,\n        centerMinEdge,\n        centerMaxEdge\n      };\n      return findOffsetOfValue$2(args);\n    };\n    const findPositionOfValue = (slider, spectrum, value2, minEdge, maxEdge, detail) => {\n      const offset2 = findOffsetOfValue(spectrum, detail, value2, minEdge, maxEdge);\n      return getMinYBounds(spectrum) - getMinYBounds(slider) + offset2;\n    };\n    const setPositionFromValue$1 = (slider, thumb, detail, edges) => {\n      const value2 = currentValue(detail);\n      const pos = findPositionOfValue(slider, edges.getSpectrum(slider), value2, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n      const thumbRadius = get$d(thumb.element) / 2;\n      set$8(thumb.element, \"top\", pos - thumbRadius + \"px\");\n    };\n    const onLeft$1 = Optional.none;\n    const onRight$1 = Optional.none;\n    const onUp$1 = handleMovement$1(-1);\n    const onDown$1 = handleMovement$1(1);\n    const edgeActions$1 = {\n      \"top-left\": Optional.none(),\n      \"top\": Optional.some(setToTEdge),\n      \"top-right\": Optional.none(),\n      \"right\": Optional.none(),\n      \"bottom-right\": Optional.none(),\n      \"bottom\": Optional.some(setToBEdge),\n      \"bottom-left\": Optional.none(),\n      \"left\": Optional.none()\n    };\n    var VerticalModel = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      setValueFrom: setValueFrom$1,\n      setToMin: setToMin$1,\n      setToMax: setToMax$1,\n      findValueOfOffset,\n      getValueFromEvent: getValueFromEvent$1,\n      findPositionOfValue,\n      setPositionFromValue: setPositionFromValue$1,\n      onLeft: onLeft$1,\n      onRight: onRight$1,\n      onUp: onUp$1,\n      onDown: onDown$1,\n      edgeActions: edgeActions$1\n    });\n    const fireSliderChange = (spectrum, value2) => {\n      emitWith(spectrum, sliderChangeEvent(), { value: value2 });\n    };\n    const sliderValue = (x2, y2) => ({\n      x: x2,\n      y: y2\n    });\n    const setValueFrom = (spectrum, detail, value2) => {\n      const xValue = findValueOfOffset$1(spectrum, detail, value2.left);\n      const yValue = findValueOfOffset(spectrum, detail, value2.top);\n      const val = sliderValue(xValue, yValue);\n      fireSliderChange(spectrum, val);\n      return val;\n    };\n    const moveBy = (direction, isVerticalMovement, spectrum, detail) => {\n      const f2 = direction > 0 ? increaseBy : reduceBy;\n      const xValue = isVerticalMovement ? currentValue(detail).x : f2(currentValue(detail).x, minX(detail), maxX(detail), step(detail));\n      const yValue = !isVerticalMovement ? currentValue(detail).y : f2(currentValue(detail).y, minY(detail), maxY(detail), step(detail));\n      fireSliderChange(spectrum, sliderValue(xValue, yValue));\n      return Optional.some(xValue);\n    };\n    const handleMovement = (direction, isVerticalMovement) => (spectrum, detail) => moveBy(direction, isVerticalMovement, spectrum, detail).map(always);\n    const setToMin = (spectrum, detail) => {\n      const mX = minX(detail);\n      const mY = minY(detail);\n      fireSliderChange(spectrum, sliderValue(mX, mY));\n    };\n    const setToMax = (spectrum, detail) => {\n      const mX = maxX(detail);\n      const mY = maxY(detail);\n      fireSliderChange(spectrum, sliderValue(mX, mY));\n    };\n    const getValueFromEvent = (simulatedEvent) => getEventSource(simulatedEvent);\n    const setPositionFromValue = (slider, thumb, detail, edges) => {\n      const value2 = currentValue(detail);\n      const xPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value2.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n      const yPos = findPositionOfValue(slider, edges.getSpectrum(slider), value2.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n      const thumbXRadius = get$c(thumb.element) / 2;\n      const thumbYRadius = get$d(thumb.element) / 2;\n      set$8(thumb.element, \"left\", xPos - thumbXRadius + \"px\");\n      set$8(thumb.element, \"top\", yPos - thumbYRadius + \"px\");\n    };\n    const onLeft = handleMovement(-1, false);\n    const onRight = handleMovement(1, false);\n    const onUp = handleMovement(-1, true);\n    const onDown = handleMovement(1, true);\n    const edgeActions = {\n      \"top-left\": Optional.some(setToTLEdgeXY),\n      \"top\": Optional.some(setToTEdgeXY),\n      \"top-right\": Optional.some(setToTREdgeXY),\n      \"right\": Optional.some(setToREdgeXY),\n      \"bottom-right\": Optional.some(setToBREdgeXY),\n      \"bottom\": Optional.some(setToBEdgeXY),\n      \"bottom-left\": Optional.some(setToBLEdgeXY),\n      \"left\": Optional.some(setToLEdgeXY)\n    };\n    var TwoDModel = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      setValueFrom,\n      setToMin,\n      setToMax,\n      getValueFromEvent,\n      setPositionFromValue,\n      onLeft,\n      onRight,\n      onUp,\n      onDown,\n      edgeActions\n    });\n    const SliderSchema = [\n      defaulted(\"stepSize\", 1),\n      defaulted(\"onChange\", noop),\n      defaulted(\"onChoose\", noop),\n      defaulted(\"onInit\", noop),\n      defaulted(\"onDragStart\", noop),\n      defaulted(\"onDragEnd\", noop),\n      defaulted(\"snapToGrid\", false),\n      defaulted(\"rounded\", true),\n      option$3(\"snapStart\"),\n      requiredOf(\"model\", choose$1(\"mode\", {\n        x: [\n          defaulted(\"minX\", 0),\n          defaulted(\"maxX\", 100),\n          customField(\"value\", (spec) => Cell(spec.mode.minX)),\n          required$1(\"getInitialValue\"),\n          output$1(\"manager\", HorizontalModel)\n        ],\n        y: [\n          defaulted(\"minY\", 0),\n          defaulted(\"maxY\", 100),\n          customField(\"value\", (spec) => Cell(spec.mode.minY)),\n          required$1(\"getInitialValue\"),\n          output$1(\"manager\", VerticalModel)\n        ],\n        xy: [\n          defaulted(\"minX\", 0),\n          defaulted(\"maxX\", 100),\n          defaulted(\"minY\", 0),\n          defaulted(\"maxY\", 100),\n          customField(\"value\", (spec) => Cell({\n            x: spec.mode.minX,\n            y: spec.mode.minY\n          })),\n          required$1(\"getInitialValue\"),\n          output$1(\"manager\", TwoDModel)\n        ]\n      })),\n      field(\"sliderBehaviours\", [\n        Keying,\n        Representing\n      ]),\n      customField(\"mouseIsDown\", () => Cell(false))\n    ];\n    const sketch$2 = (detail, components2, _spec, _externals) => {\n      const getThumb = (component) => getPartOrDie(component, detail, \"thumb\");\n      const getSpectrum = (component) => getPartOrDie(component, detail, \"spectrum\");\n      const getLeftEdge = (component) => getPart(component, detail, \"left-edge\");\n      const getRightEdge = (component) => getPart(component, detail, \"right-edge\");\n      const getTopEdge = (component) => getPart(component, detail, \"top-edge\");\n      const getBottomEdge = (component) => getPart(component, detail, \"bottom-edge\");\n      const modelDetail = detail.model;\n      const model2 = modelDetail.manager;\n      const refresh2 = (slider, thumb) => {\n        model2.setPositionFromValue(slider, thumb, detail, {\n          getLeftEdge,\n          getRightEdge,\n          getTopEdge,\n          getBottomEdge,\n          getSpectrum\n        });\n      };\n      const setValue2 = (slider, newValue) => {\n        modelDetail.value.set(newValue);\n        const thumb = getThumb(slider);\n        refresh2(slider, thumb);\n      };\n      const changeValue = (slider, newValue) => {\n        setValue2(slider, newValue);\n        const thumb = getThumb(slider);\n        detail.onChange(slider, thumb, newValue);\n        return Optional.some(true);\n      };\n      const resetToMin = (slider) => {\n        model2.setToMin(slider, detail);\n      };\n      const resetToMax = (slider) => {\n        model2.setToMax(slider, detail);\n      };\n      const choose2 = (slider) => {\n        const fireOnChoose = () => {\n          getPart(slider, detail, \"thumb\").each((thumb) => {\n            const value2 = modelDetail.value.get();\n            detail.onChoose(slider, thumb, value2);\n          });\n        };\n        const wasDown = detail.mouseIsDown.get();\n        detail.mouseIsDown.set(false);\n        if (wasDown) {\n          fireOnChoose();\n        }\n      };\n      const onDragStart = (slider, simulatedEvent) => {\n        simulatedEvent.stop();\n        detail.mouseIsDown.set(true);\n        detail.onDragStart(slider, getThumb(slider));\n      };\n      const onDragEnd = (slider, simulatedEvent) => {\n        simulatedEvent.stop();\n        detail.onDragEnd(slider, getThumb(slider));\n        choose2(slider);\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: components2,\n        behaviours: augment(detail.sliderBehaviours, [\n          Keying.config({\n            mode: \"special\",\n            focusIn: (slider) => {\n              return getPart(slider, detail, \"spectrum\").map(Keying.focusIn).map(always);\n            }\n          }),\n          Representing.config({\n            store: {\n              mode: \"manual\",\n              getValue: (_2) => {\n                return modelDetail.value.get();\n              },\n              setValue: setValue2\n            }\n          }),\n          Receiving.config({ channels: { [mouseReleased()]: { onReceive: choose2 } } })\n        ]),\n        events: derive$2([\n          run$1(sliderChangeEvent(), (slider, simulatedEvent) => {\n            changeValue(slider, simulatedEvent.event.value);\n          }),\n          runOnAttached((slider, _simulatedEvent) => {\n            const getInitial = modelDetail.getInitialValue();\n            modelDetail.value.set(getInitial);\n            const thumb = getThumb(slider);\n            refresh2(slider, thumb);\n            const spectrum = getSpectrum(slider);\n            detail.onInit(slider, thumb, spectrum, modelDetail.value.get());\n          }),\n          run$1(touchstart(), onDragStart),\n          run$1(touchend(), onDragEnd),\n          run$1(mousedown(), onDragStart),\n          run$1(mouseup(), onDragEnd)\n        ]),\n        apis: {\n          resetToMin,\n          resetToMax,\n          setValue: setValue2,\n          refresh: refresh2\n        },\n        domModification: { styles: { position: \"relative\" } }\n      };\n    };\n    const Slider = composite({\n      name: \"Slider\",\n      configFields: SliderSchema,\n      partFields: SliderParts,\n      factory: sketch$2,\n      apis: {\n        setValue: (apis, slider, value2) => {\n          apis.setValue(slider, value2);\n        },\n        resetToMin: (apis, slider) => {\n          apis.resetToMin(slider);\n        },\n        resetToMax: (apis, slider) => {\n          apis.resetToMax(slider);\n        },\n        refresh: (apis, slider) => {\n          apis.refresh(slider);\n        }\n      }\n    });\n    const fieldsUpdate = generate$6(\"rgb-hex-update\");\n    const sliderUpdate = generate$6(\"slider-update\");\n    const paletteUpdate = generate$6(\"palette-update\");\n    const sliderFactory = (translate2, getClass) => {\n      const spectrum = Slider.parts.spectrum({\n        dom: {\n          tag: \"div\",\n          classes: [getClass(\"hue-slider-spectrum\")],\n          attributes: { role: \"presentation\" }\n        }\n      });\n      const thumb = Slider.parts.thumb({\n        dom: {\n          tag: \"div\",\n          classes: [getClass(\"hue-slider-thumb\")],\n          attributes: { role: \"presentation\" }\n        }\n      });\n      return Slider.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [getClass(\"hue-slider\")],\n          attributes: { role: \"presentation\" }\n        },\n        rounded: false,\n        model: {\n          mode: \"y\",\n          getInitialValue: constant$1(0)\n        },\n        components: [\n          spectrum,\n          thumb\n        ],\n        sliderBehaviours: derive$1([Focusing.config({})]),\n        onChange: (slider, _thumb, value2) => {\n          emitWith(slider, sliderUpdate, { value: value2 });\n        }\n      });\n    };\n    const owner$1 = \"form\";\n    const schema$i = [field(\"formBehaviours\", [Representing])];\n    const getPartName$1 = (name2) => \"<alloy.field.\" + name2 + \">\";\n    const sketch$1 = (fSpec) => {\n      const parts2 = (() => {\n        const record2 = [];\n        const field2 = (name2, config3) => {\n          record2.push(name2);\n          return generateOne$1(owner$1, getPartName$1(name2), config3);\n        };\n        return {\n          field: field2,\n          record: constant$1(record2)\n        };\n      })();\n      const spec = fSpec(parts2);\n      const partNames = parts2.record();\n      const fieldParts = map$2(partNames, (n3) => required({\n        name: n3,\n        pname: getPartName$1(n3)\n      }));\n      return composite$1(owner$1, schema$i, fieldParts, make$4, spec);\n    };\n    const toResult = (o2, e2) => o2.fold(() => Result.error(e2), Result.value);\n    const make$4 = (detail, components2) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      components: components2,\n      behaviours: augment(detail.formBehaviours, [Representing.config({\n        store: {\n          mode: \"manual\",\n          getValue: (form) => {\n            const resPs = getAllParts(form, detail);\n            return map$1(resPs, (resPThunk, pName) => resPThunk().bind((v2) => {\n              const opt = Composing.getCurrent(v2);\n              return toResult(opt, new Error(`Cannot find a current component to extract the value from for form part '${pName}': ` + element(v2.element)));\n            }).map(Representing.getValue));\n          },\n          setValue: (form, values2) => {\n            each(values2, (newValue, key) => {\n              getPart(form, detail, key).each((wrapper) => {\n                Composing.getCurrent(wrapper).each((field2) => {\n                  Representing.setValue(field2, newValue);\n                });\n              });\n            });\n          }\n        }\n      })]),\n      apis: {\n        getField: (form, key) => {\n          return getPart(form, detail, key).bind(Composing.getCurrent);\n        }\n      }\n    });\n    const Form = {\n      getField: makeApi((apis, component, key) => apis.getField(component, key)),\n      sketch: sketch$1\n    };\n    const validInput = generate$6(\"valid-input\");\n    const invalidInput = generate$6(\"invalid-input\");\n    const validatingInput = generate$6(\"validating-input\");\n    const translatePrefix = \"colorcustom.rgb.\";\n    const rgbFormFactory = (translate2, getClass, onValidHexx, onInvalidHexx) => {\n      const invalidation = (label2, isValid) => Invalidating.config({\n        invalidClass: getClass(\"invalid\"),\n        notify: {\n          onValidate: (comp) => {\n            emitWith(comp, validatingInput, { type: label2 });\n          },\n          onValid: (comp) => {\n            emitWith(comp, validInput, {\n              type: label2,\n              value: Representing.getValue(comp)\n            });\n          },\n          onInvalid: (comp) => {\n            emitWith(comp, invalidInput, {\n              type: label2,\n              value: Representing.getValue(comp)\n            });\n          }\n        },\n        validator: {\n          validate: (comp) => {\n            const value2 = Representing.getValue(comp);\n            const res = isValid(value2) ? Result.value(true) : Result.error(translate2(\"aria.input.invalid\"));\n            return Future.pure(res);\n          },\n          validateOnLoad: false\n        }\n      });\n      const renderTextField2 = (isValid, name2, label2, description, data) => {\n        const helptext = translate2(translatePrefix + \"range\");\n        const pLabel = FormField.parts.label({\n          dom: {\n            tag: \"label\",\n            attributes: { \"aria-label\": description }\n          },\n          components: [text$1(label2)]\n        });\n        const pField = FormField.parts.field({\n          data,\n          factory: Input2,\n          inputAttributes: {\n            type: \"text\",\n            ...name2 === \"hex\" ? { \"aria-live\": \"polite\" } : {}\n          },\n          inputClasses: [getClass(\"textfield\")],\n          inputBehaviours: derive$1([\n            invalidation(name2, isValid),\n            Tabstopping.config({})\n          ]),\n          onSetValue: (input2) => {\n            if (Invalidating.isInvalid(input2)) {\n              const run2 = Invalidating.run(input2);\n              run2.get(noop);\n            }\n          }\n        });\n        const comps = [\n          pLabel,\n          pField\n        ];\n        const concats = name2 !== \"hex\" ? [FormField.parts[\"aria-descriptor\"]({ text: helptext })] : [];\n        const components2 = comps.concat(concats);\n        return {\n          dom: {\n            tag: \"div\",\n            attributes: { role: \"presentation\" }\n          },\n          components: components2\n        };\n      };\n      const copyRgbToHex = (form, rgba) => {\n        const hex = fromRgba(rgba);\n        Form.getField(form, \"hex\").each((hexField) => {\n          if (!Focusing.isFocused(hexField)) {\n            Representing.setValue(form, { hex: hex.value });\n          }\n        });\n        return hex;\n      };\n      const copyRgbToForm = (form, rgb) => {\n        const red2 = rgb.red;\n        const green = rgb.green;\n        const blue = rgb.blue;\n        Representing.setValue(form, {\n          red: red2,\n          green,\n          blue\n        });\n      };\n      const memPreview = record({\n        dom: {\n          tag: \"div\",\n          classes: [getClass(\"rgba-preview\")],\n          styles: { \"background-color\": \"white\" },\n          attributes: { role: \"presentation\" }\n        }\n      });\n      const updatePreview = (anyInSystem, hex) => {\n        memPreview.getOpt(anyInSystem).each((preview) => {\n          set$8(preview.element, \"background-color\", \"#\" + hex.value);\n        });\n      };\n      const factory2 = () => {\n        const state = {\n          red: Cell(Optional.some(255)),\n          green: Cell(Optional.some(255)),\n          blue: Cell(Optional.some(255)),\n          hex: Cell(Optional.some(\"ffffff\"))\n        };\n        const copyHexToRgb = (form, hex) => {\n          const rgb = fromHex(hex);\n          copyRgbToForm(form, rgb);\n          setValueRgb(rgb);\n        };\n        const get2 = (prop) => state[prop].get();\n        const set3 = (prop, value2) => {\n          state[prop].set(value2);\n        };\n        const getValueRgb = () => get2(\"red\").bind((red2) => get2(\"green\").bind((green) => get2(\"blue\").map((blue) => rgbaColour(red2, green, blue, 1))));\n        const setValueRgb = (rgb) => {\n          const red2 = rgb.red;\n          const green = rgb.green;\n          const blue = rgb.blue;\n          set3(\"red\", Optional.some(red2));\n          set3(\"green\", Optional.some(green));\n          set3(\"blue\", Optional.some(blue));\n        };\n        const onInvalidInput = (form, simulatedEvent) => {\n          const data = simulatedEvent.event;\n          if (data.type !== \"hex\") {\n            set3(data.type, Optional.none());\n          } else {\n            onInvalidHexx(form);\n          }\n        };\n        const onValidHex = (form, value2) => {\n          onValidHexx(form);\n          const hex = hexColour(value2);\n          set3(\"hex\", Optional.some(value2));\n          const rgb = fromHex(hex);\n          copyRgbToForm(form, rgb);\n          setValueRgb(rgb);\n          emitWith(form, fieldsUpdate, { hex });\n          updatePreview(form, hex);\n        };\n        const onValidRgb = (form, prop, value2) => {\n          const val = parseInt(value2, 10);\n          set3(prop, Optional.some(val));\n          getValueRgb().each((rgb) => {\n            const hex = copyRgbToHex(form, rgb);\n            emitWith(form, fieldsUpdate, { hex });\n            updatePreview(form, hex);\n          });\n        };\n        const isHexInputEvent = (data) => data.type === \"hex\";\n        const onValidInput = (form, simulatedEvent) => {\n          const data = simulatedEvent.event;\n          if (isHexInputEvent(data)) {\n            onValidHex(form, data.value);\n          } else {\n            onValidRgb(form, data.type, data.value);\n          }\n        };\n        const formPartStrings = (key) => ({\n          label: translate2(translatePrefix + key + \".label\"),\n          description: translate2(translatePrefix + key + \".description\")\n        });\n        const redStrings = formPartStrings(\"red\");\n        const greenStrings = formPartStrings(\"green\");\n        const blueStrings = formPartStrings(\"blue\");\n        const hexStrings = formPartStrings(\"hex\");\n        return deepMerge(Form.sketch((parts2) => ({\n          dom: {\n            tag: \"form\",\n            classes: [getClass(\"rgb-form\")],\n            attributes: { \"aria-label\": translate2(\"aria.color.picker\") }\n          },\n          components: [\n            parts2.field(\"red\", FormField.sketch(renderTextField2(isRgbaComponent, \"red\", redStrings.label, redStrings.description, 255))),\n            parts2.field(\"green\", FormField.sketch(renderTextField2(isRgbaComponent, \"green\", greenStrings.label, greenStrings.description, 255))),\n            parts2.field(\"blue\", FormField.sketch(renderTextField2(isRgbaComponent, \"blue\", blueStrings.label, blueStrings.description, 255))),\n            parts2.field(\"hex\", FormField.sketch(renderTextField2(isHexString, \"hex\", hexStrings.label, hexStrings.description, \"ffffff\"))),\n            memPreview.asSpec()\n          ],\n          formBehaviours: derive$1([\n            Invalidating.config({ invalidClass: getClass(\"form-invalid\") }),\n            config2(\"rgb-form-events\", [\n              run$1(validInput, onValidInput),\n              run$1(invalidInput, onInvalidInput),\n              run$1(validatingInput, onInvalidInput)\n            ])\n          ])\n        })), {\n          apis: {\n            updateHex: (form, hex) => {\n              Representing.setValue(form, { hex: hex.value });\n              copyHexToRgb(form, hex);\n              updatePreview(form, hex);\n            }\n          }\n        });\n      };\n      const rgbFormSketcher = single({\n        factory: factory2,\n        name: \"RgbForm\",\n        configFields: [],\n        apis: {\n          updateHex: (apis, form, hex) => {\n            apis.updateHex(form, hex);\n          }\n        },\n        extraApis: {}\n      });\n      return rgbFormSketcher;\n    };\n    const paletteFactory = (_translate, getClass) => {\n      const spectrumPart2 = Slider.parts.spectrum({\n        dom: {\n          tag: \"canvas\",\n          attributes: { role: \"presentation\" },\n          classes: [getClass(\"sv-palette-spectrum\")]\n        }\n      });\n      const thumbPart2 = Slider.parts.thumb({\n        dom: {\n          tag: \"div\",\n          attributes: { role: \"presentation\" },\n          classes: [getClass(\"sv-palette-thumb\")],\n          innerHtml: `<div class=${getClass(\"sv-palette-inner-thumb\")} role=\"presentation\"></div>`\n        }\n      });\n      const setColour = (canvas, rgba) => {\n        const { width: width2, height: height2 } = canvas;\n        const ctx = canvas.getContext(\"2d\");\n        if (ctx === null) {\n          return;\n        }\n        ctx.fillStyle = rgba;\n        ctx.fillRect(0, 0, width2, height2);\n        const grdWhite = ctx.createLinearGradient(0, 0, width2, 0);\n        grdWhite.addColorStop(0, \"rgba(255,255,255,1)\");\n        grdWhite.addColorStop(1, \"rgba(255,255,255,0)\");\n        ctx.fillStyle = grdWhite;\n        ctx.fillRect(0, 0, width2, height2);\n        const grdBlack = ctx.createLinearGradient(0, 0, 0, height2);\n        grdBlack.addColorStop(0, \"rgba(0,0,0,0)\");\n        grdBlack.addColorStop(1, \"rgba(0,0,0,1)\");\n        ctx.fillStyle = grdBlack;\n        ctx.fillRect(0, 0, width2, height2);\n      };\n      const setPaletteHue = (slider, hue) => {\n        const canvas = slider.components()[0].element.dom;\n        const hsv = hsvColour(hue, 100, 100);\n        const rgba = fromHsv(hsv);\n        setColour(canvas, toString(rgba));\n      };\n      const setPaletteThumb = (slider, hex) => {\n        const hsv = fromRgb(fromHex(hex));\n        Slider.setValue(slider, {\n          x: hsv.saturation,\n          y: 100 - hsv.value\n        });\n      };\n      const factory2 = (_detail) => {\n        const getInitialValue = constant$1({\n          x: 0,\n          y: 0\n        });\n        const onChange = (slider, _thumb, value2) => {\n          emitWith(slider, paletteUpdate, { value: value2 });\n        };\n        const onInit = (_slider, _thumb, spectrum, _value) => {\n          setColour(spectrum.element.dom, toString(red));\n        };\n        const sliderBehaviours = derive$1([\n          Composing.config({ find: Optional.some }),\n          Focusing.config({})\n        ]);\n        return Slider.sketch({\n          dom: {\n            tag: \"div\",\n            attributes: { role: \"presentation\" },\n            classes: [getClass(\"sv-palette\")]\n          },\n          model: {\n            mode: \"xy\",\n            getInitialValue\n          },\n          rounded: false,\n          components: [\n            spectrumPart2,\n            thumbPart2\n          ],\n          onChange,\n          onInit,\n          sliderBehaviours\n        });\n      };\n      const saturationBrightnessPaletteSketcher = single({\n        factory: factory2,\n        name: \"SaturationBrightnessPalette\",\n        configFields: [],\n        apis: {\n          setHue: (_apis, slider, hue) => {\n            setPaletteHue(slider, hue);\n          },\n          setThumb: (_apis, slider, hex) => {\n            setPaletteThumb(slider, hex);\n          }\n        },\n        extraApis: {}\n      });\n      return saturationBrightnessPaletteSketcher;\n    };\n    const makeFactory = (translate2, getClass) => {\n      const factory2 = (detail) => {\n        const rgbForm = rgbFormFactory(translate2, getClass, detail.onValidHex, detail.onInvalidHex);\n        const sbPalette = paletteFactory(translate2, getClass);\n        const hueSliderToDegrees = (hue) => (100 - hue) / 100 * 360;\n        const hueDegreesToSlider = (hue) => 100 - hue / 360 * 100;\n        const state = {\n          paletteRgba: Cell(red),\n          paletteHue: Cell(0)\n        };\n        const memSlider = record(sliderFactory(translate2, getClass));\n        const memPalette = record(sbPalette.sketch({}));\n        const memRgb = record(rgbForm.sketch({}));\n        const updatePalette = (anyInSystem, _hex, hue) => {\n          memPalette.getOpt(anyInSystem).each((palette) => {\n            sbPalette.setHue(palette, hue);\n          });\n        };\n        const updateFields = (anyInSystem, hex) => {\n          memRgb.getOpt(anyInSystem).each((form) => {\n            rgbForm.updateHex(form, hex);\n          });\n        };\n        const updateSlider = (anyInSystem, _hex, hue) => {\n          memSlider.getOpt(anyInSystem).each((slider) => {\n            Slider.setValue(slider, hueDegreesToSlider(hue));\n          });\n        };\n        const updatePaletteThumb = (anyInSystem, hex) => {\n          memPalette.getOpt(anyInSystem).each((palette) => {\n            sbPalette.setThumb(palette, hex);\n          });\n        };\n        const updateState = (hex, hue) => {\n          const rgba = fromHex(hex);\n          state.paletteRgba.set(rgba);\n          state.paletteHue.set(hue);\n        };\n        const runUpdates = (anyInSystem, hex, hue, updates) => {\n          updateState(hex, hue);\n          each$1(updates, (update) => {\n            update(anyInSystem, hex, hue);\n          });\n        };\n        const onPaletteUpdate = () => {\n          const updates = [updateFields];\n          return (form, simulatedEvent) => {\n            const value2 = simulatedEvent.event.value;\n            const oldHue = state.paletteHue.get();\n            const newHsv = hsvColour(oldHue, value2.x, 100 - value2.y);\n            const newHex = hsvToHex(newHsv);\n            runUpdates(form, newHex, oldHue, updates);\n          };\n        };\n        const onSliderUpdate = () => {\n          const updates = [\n            updatePalette,\n            updateFields\n          ];\n          return (form, simulatedEvent) => {\n            const hue = hueSliderToDegrees(simulatedEvent.event.value);\n            const oldRgb = state.paletteRgba.get();\n            const oldHsv = fromRgb(oldRgb);\n            const newHsv = hsvColour(hue, oldHsv.saturation, oldHsv.value);\n            const newHex = hsvToHex(newHsv);\n            runUpdates(form, newHex, hue, updates);\n          };\n        };\n        const onFieldsUpdate = () => {\n          const updates = [\n            updatePalette,\n            updateSlider,\n            updatePaletteThumb\n          ];\n          return (form, simulatedEvent) => {\n            const hex = simulatedEvent.event.hex;\n            const hsv = hexToHsv(hex);\n            runUpdates(form, hex, hsv.hue, updates);\n          };\n        };\n        return {\n          uid: detail.uid,\n          dom: detail.dom,\n          components: [\n            memPalette.asSpec(),\n            memSlider.asSpec(),\n            memRgb.asSpec()\n          ],\n          behaviours: derive$1([\n            config2(\"colour-picker-events\", [\n              run$1(fieldsUpdate, onFieldsUpdate()),\n              run$1(paletteUpdate, onPaletteUpdate()),\n              run$1(sliderUpdate, onSliderUpdate())\n            ]),\n            Composing.config({ find: (comp) => memRgb.getOpt(comp) }),\n            Keying.config({ mode: \"acyclic\" })\n          ])\n        };\n      };\n      const colourPickerSketcher = single({\n        name: \"ColourPicker\",\n        configFields: [\n          required$1(\"dom\"),\n          defaulted(\"onValidHex\", noop),\n          defaulted(\"onInvalidHex\", noop)\n        ],\n        factory: factory2\n      });\n      return colourPickerSketcher;\n    };\n    const self2 = () => Composing.config({ find: Optional.some });\n    const memento$1 = (mem) => Composing.config({ find: mem.getOpt });\n    const childAt = (index2) => Composing.config({ find: (comp) => child$2(comp.element, index2).bind((element2) => comp.getSystem().getByDom(element2).toOptional()) });\n    const ComposingConfigs = {\n      self: self2,\n      memento: memento$1,\n      childAt\n    };\n    const processors = objOf([\n      defaulted(\"preprocess\", identity2),\n      defaulted(\"postprocess\", identity2)\n    ]);\n    const memento = (mem, rawProcessors) => {\n      const ps = asRawOrDie$1(\"RepresentingConfigs.memento processors\", processors, rawProcessors);\n      return Representing.config({\n        store: {\n          mode: \"manual\",\n          getValue: (comp) => {\n            const other = mem.get(comp);\n            const rawValue = Representing.getValue(other);\n            return ps.postprocess(rawValue);\n          },\n          setValue: (comp, rawValue) => {\n            const newValue = ps.preprocess(rawValue);\n            const other = mem.get(comp);\n            Representing.setValue(other, newValue);\n          }\n        }\n      });\n    };\n    const withComp = (optInitialValue, getter, setter) => Representing.config({\n      store: {\n        mode: \"manual\",\n        ...optInitialValue.map((initialValue) => ({ initialValue })).getOr({}),\n        getValue: getter,\n        setValue: setter\n      }\n    });\n    const withElement = (initialValue, getter, setter) => withComp(initialValue, (c2) => getter(c2.element), (c2, v2) => setter(c2.element, v2));\n    const domValue = (optInitialValue) => withElement(optInitialValue, get$6, set$5);\n    const domHtml = (optInitialValue) => withElement(optInitialValue, get$9, set$6);\n    const memory = (initialValue) => Representing.config({\n      store: {\n        mode: \"memory\",\n        initialValue\n      }\n    });\n    const RepresentingConfigs = {\n      memento,\n      withElement,\n      withComp,\n      domValue,\n      domHtml,\n      memory\n    };\n    const english = {\n      \"colorcustom.rgb.red.label\": \"R\",\n      \"colorcustom.rgb.red.description\": \"Red component\",\n      \"colorcustom.rgb.green.label\": \"G\",\n      \"colorcustom.rgb.green.description\": \"Green component\",\n      \"colorcustom.rgb.blue.label\": \"B\",\n      \"colorcustom.rgb.blue.description\": \"Blue component\",\n      \"colorcustom.rgb.hex.label\": \"#\",\n      \"colorcustom.rgb.hex.description\": \"Hex color code\",\n      \"colorcustom.rgb.range\": \"Range 0 to 255\",\n      \"aria.color.picker\": \"Color Picker\",\n      \"aria.input.invalid\": \"Invalid input\"\n    };\n    const translate$1 = (providerBackstage) => (key) => {\n      return providerBackstage.translate(english[key]);\n    };\n    const renderColorPicker = (_spec, providerBackstage, initialData) => {\n      const getClass = (key) => \"tox-\" + key;\n      const colourPickerFactory = makeFactory(translate$1(providerBackstage), getClass);\n      const onValidHex = (form) => {\n        emitWith(form, formActionEvent, {\n          name: \"hex-valid\",\n          value: true\n        });\n      };\n      const onInvalidHex = (form) => {\n        emitWith(form, formActionEvent, {\n          name: \"hex-valid\",\n          value: false\n        });\n      };\n      const memPicker = record(colourPickerFactory.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [getClass(\"color-picker-container\")],\n          attributes: { role: \"presentation\" }\n        },\n        onValidHex,\n        onInvalidHex\n      }));\n      return {\n        dom: { tag: \"div\" },\n        components: [memPicker.asSpec()],\n        behaviours: derive$1([\n          RepresentingConfigs.withComp(initialData, (comp) => {\n            const picker = memPicker.get(comp);\n            const optRgbForm = Composing.getCurrent(picker);\n            const optHex = optRgbForm.bind((rgbForm) => {\n              const formValues = Representing.getValue(rgbForm);\n              return formValues.hex;\n            });\n            return optHex.map((hex) => \"#\" + hex).getOr(\"\");\n          }, (comp, newValue) => {\n            const pattern2 = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/;\n            const m2 = pattern2.exec(newValue);\n            const picker = memPicker.get(comp);\n            const optRgbForm = Composing.getCurrent(picker);\n            optRgbForm.fold(() => {\n              console.log(\"Can not find form\");\n            }, (rgbForm) => {\n              Representing.setValue(rgbForm, { hex: Optional.from(m2[1]).getOr(\"\") });\n              Form.getField(rgbForm, \"hex\").each((hexField) => {\n                emit(hexField, input());\n              });\n            });\n          }),\n          ComposingConfigs.self()\n        ])\n      };\n    };\n    var global$2 = tinymce.util.Tools.resolve(\"tinymce.Resource\");\n    const isOldCustomEditor = (spec) => has$2(spec, \"init\");\n    const renderCustomEditor = (spec) => {\n      const editorApi = value$2();\n      const memReplaced = record({ dom: { tag: spec.tag } });\n      const initialValue = value$2();\n      return {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-custom-editor\"]\n        },\n        behaviours: derive$1([\n          config2(\"custom-editor-events\", [runOnAttached((component) => {\n            memReplaced.getOpt(component).each((ta) => {\n              (isOldCustomEditor(spec) ? spec.init(ta.element.dom) : global$2.load(spec.scriptId, spec.scriptUrl).then((init2) => init2(ta.element.dom, spec.settings))).then((ea) => {\n                initialValue.on((cvalue) => {\n                  ea.setValue(cvalue);\n                });\n                initialValue.clear();\n                editorApi.set(ea);\n              });\n            });\n          })]),\n          RepresentingConfigs.withComp(Optional.none(), () => editorApi.get().fold(() => initialValue.get().getOr(\"\"), (ed) => ed.getValue()), (component, value2) => {\n            editorApi.get().fold(() => initialValue.set(value2), (ed) => ed.setValue(value2));\n          }),\n          ComposingConfigs.self()\n        ]),\n        components: [memReplaced.asSpec()]\n      };\n    };\n    var global$1 = tinymce.util.Tools.resolve(\"tinymce.util.Tools\");\n    const filterByExtension = (files, providersBackstage) => {\n      const allowedImageFileTypes = global$1.explode(providersBackstage.getOption(\"images_file_types\"));\n      const isFileInAllowedTypes = (file) => exists(allowedImageFileTypes, (type2) => endsWith(file.name.toLowerCase(), `.${type2.toLowerCase()}`));\n      return filter$2(from(files), isFileInAllowedTypes);\n    };\n    const renderDropZone = (spec, providersBackstage, initialData) => {\n      const stopper2 = (_2, se) => {\n        se.stop();\n      };\n      const sequence2 = (actions) => (comp, se) => {\n        each$1(actions, (a2) => {\n          a2(comp, se);\n        });\n      };\n      const onDrop = (comp, se) => {\n        if (!Disabling.isDisabled(comp)) {\n          const transferEvent = se.event.raw;\n          handleFiles(comp, transferEvent.dataTransfer.files);\n        }\n      };\n      const onSelect = (component, simulatedEvent) => {\n        const input2 = simulatedEvent.event.raw.target;\n        handleFiles(component, input2.files);\n      };\n      const handleFiles = (component, files) => {\n        Representing.setValue(component, filterByExtension(files, providersBackstage));\n        emitWith(component, formChangeEvent, { name: spec.name });\n      };\n      const memInput = record({\n        dom: {\n          tag: \"input\",\n          attributes: {\n            type: \"file\",\n            accept: \"image/*\"\n          },\n          styles: { display: \"none\" }\n        },\n        behaviours: derive$1([config2(\"input-file-events\", [\n          cutter(click()),\n          cutter(tap())\n        ])])\n      });\n      const renderField = (s2) => ({\n        uid: s2.uid,\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-dropzone-container\"]\n        },\n        behaviours: derive$1([\n          RepresentingConfigs.memory(initialData.getOr([])),\n          ComposingConfigs.self(),\n          Disabling.config({}),\n          Toggling.config({\n            toggleClass: \"dragenter\",\n            toggleOnExecute: false\n          }),\n          config2(\"dropzone-events\", [\n            run$1(\"dragenter\", sequence2([\n              stopper2,\n              Toggling.toggle\n            ])),\n            run$1(\"dragleave\", sequence2([\n              stopper2,\n              Toggling.toggle\n            ])),\n            run$1(\"dragover\", stopper2),\n            run$1(\"drop\", sequence2([\n              stopper2,\n              onDrop\n            ])),\n            run$1(change(), onSelect)\n          ])\n        ]),\n        components: [{\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-dropzone\"],\n            styles: {}\n          },\n          components: [\n            {\n              dom: { tag: \"p\" },\n              components: [text$1(providersBackstage.translate(\"Drop an image here\"))]\n            },\n            Button.sketch({\n              dom: {\n                tag: \"button\",\n                styles: { position: \"relative\" },\n                classes: [\n                  \"tox-button\",\n                  \"tox-button--secondary\"\n                ]\n              },\n              components: [\n                text$1(providersBackstage.translate(\"Browse for an image\")),\n                memInput.asSpec()\n              ],\n              action: (comp) => {\n                const inputComp = memInput.get(comp);\n                inputComp.element.dom.click();\n              },\n              buttonBehaviours: derive$1([\n                Tabstopping.config({}),\n                DisablingConfigs.button(providersBackstage.isDisabled),\n                receivingConfig()\n              ])\n            })\n          ]\n        }]\n      });\n      const pLabel = spec.label.map((label2) => renderLabel$2(label2, providersBackstage));\n      const pField = FormField.parts.field({ factory: { sketch: renderField } });\n      return renderFormFieldWith(pLabel, pField, [\"tox-form__group--stretched\"], []);\n    };\n    const renderGrid = (spec, backstage) => ({\n      dom: {\n        tag: \"div\",\n        classes: [\n          \"tox-form__grid\",\n          `tox-form__grid--${spec.columns}col`\n        ]\n      },\n      components: map$2(spec.items, backstage.interpreter)\n    });\n    const beforeObject = generate$6(\"alloy-fake-before-tabstop\");\n    const afterObject = generate$6(\"alloy-fake-after-tabstop\");\n    const craftWithClasses = (classes2) => {\n      return {\n        dom: {\n          tag: \"div\",\n          styles: {\n            width: \"1px\",\n            height: \"1px\",\n            outline: \"none\"\n          },\n          attributes: { tabindex: \"0\" },\n          classes: classes2\n        },\n        behaviours: derive$1([\n          Focusing.config({ ignore: true }),\n          Tabstopping.config({})\n        ])\n      };\n    };\n    const craft = (spec) => {\n      return {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-navobj\"]\n        },\n        components: [\n          craftWithClasses([beforeObject]),\n          spec,\n          craftWithClasses([afterObject])\n        ],\n        behaviours: derive$1([ComposingConfigs.childAt(1)])\n      };\n    };\n    const triggerTab = (placeholder2, shiftKey) => {\n      emitWith(placeholder2, keydown(), {\n        raw: {\n          which: 9,\n          shiftKey\n        }\n      });\n    };\n    const onFocus = (container, targetComp) => {\n      const target = targetComp.element;\n      if (has2(target, beforeObject)) {\n        triggerTab(container, true);\n      } else if (has2(target, afterObject)) {\n        triggerTab(container, false);\n      }\n    };\n    const isPseudoStop = (element2) => {\n      return closest(element2, [\n        \".\" + beforeObject,\n        \".\" + afterObject\n      ].join(\",\"), never);\n    };\n    const getDynamicSource = (initialData) => {\n      const cachedValue = Cell(initialData.getOr(\"\"));\n      return {\n        getValue: (_frameComponent) => cachedValue.get(),\n        setValue: (frameComponent, html) => {\n          if (cachedValue.get() !== html) {\n            set$9(frameComponent.element, \"srcdoc\", html);\n          }\n          cachedValue.set(html);\n        }\n      };\n    };\n    const renderIFrame = (spec, providersBackstage, initialData) => {\n      const isSandbox = spec.sandboxed;\n      const attributes = {\n        ...spec.label.map((title2) => ({ title: title2 })).getOr({}),\n        ...initialData.map((html) => ({ srcdoc: html })).getOr({}),\n        ...isSandbox ? { sandbox: \"allow-scripts allow-same-origin\" } : {}\n      };\n      const sourcing = getDynamicSource(initialData);\n      const pLabel = spec.label.map((label2) => renderLabel$2(label2, providersBackstage));\n      const factory2 = (newSpec) => craft({\n        uid: newSpec.uid,\n        dom: {\n          tag: \"iframe\",\n          attributes\n        },\n        behaviours: derive$1([\n          Tabstopping.config({}),\n          Focusing.config({}),\n          RepresentingConfigs.withComp(initialData, sourcing.getValue, sourcing.setValue)\n        ])\n      });\n      const pField = FormField.parts.field({ factory: { sketch: factory2 } });\n      return renderFormFieldWith(pLabel, pField, [\"tox-form__group--stretched\"], []);\n    };\n    const image2 = (image3) => new Promise((resolve, reject) => {\n      const loaded = () => {\n        destroy();\n        resolve(image3);\n      };\n      const listeners = [\n        bind(image3, \"load\", loaded),\n        bind(image3, \"error\", () => {\n          destroy();\n          reject(\"Unable to load data from image: \" + image3.dom.src);\n        })\n      ];\n      const destroy = () => each$1(listeners, (l3) => l3.unbind());\n      if (image3.dom.complete) {\n        loaded();\n      }\n    });\n    const calculateImagePosition = (panelWidth, panelHeight, imageWidth, imageHeight, zoom) => {\n      const width2 = imageWidth * zoom;\n      const height2 = imageHeight * zoom;\n      const left2 = Math.max(0, panelWidth / 2 - width2 / 2);\n      const top2 = Math.max(0, panelHeight / 2 - height2 / 2);\n      return {\n        left: left2.toString() + \"px\",\n        top: top2.toString() + \"px\",\n        width: width2.toString() + \"px\",\n        height: height2.toString() + \"px\"\n      };\n    };\n    const zoomToFit = (panel, width2, height2) => {\n      const panelW = get$c(panel);\n      const panelH = get$d(panel);\n      return Math.min(panelW / width2, panelH / height2, 1);\n    };\n    const renderImagePreview = (spec, initialData) => {\n      const cachedData = Cell(initialData.getOr({ url: \"\" }));\n      const memImage = record({\n        dom: {\n          tag: \"img\",\n          classes: [\"tox-imagepreview__image\"],\n          attributes: initialData.map((data) => ({ src: data.url })).getOr({})\n        }\n      });\n      const memContainer = record({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-imagepreview__container\"],\n          attributes: { role: \"presentation\" }\n        },\n        components: [memImage.asSpec()]\n      });\n      const setValue2 = (frameComponent, data) => {\n        const translatedData = { url: data.url };\n        data.zoom.each((z2) => translatedData.zoom = z2);\n        data.cachedWidth.each((z2) => translatedData.cachedWidth = z2);\n        data.cachedHeight.each((z2) => translatedData.cachedHeight = z2);\n        cachedData.set(translatedData);\n        const applyFramePositioning = () => {\n          const imageWidth = translatedData.cachedWidth;\n          const imageHeight = translatedData.cachedHeight;\n          if (isUndefined2(translatedData.zoom)) {\n            const z2 = zoomToFit(frameComponent.element, imageWidth, imageHeight);\n            translatedData.zoom = z2;\n          }\n          const position2 = calculateImagePosition(get$c(frameComponent.element), get$d(frameComponent.element), imageWidth, imageHeight, translatedData.zoom);\n          memContainer.getOpt(frameComponent).each((container) => {\n            setAll(container.element, position2);\n          });\n        };\n        memImage.getOpt(frameComponent).each((imageComponent) => {\n          const img = imageComponent.element;\n          if (data.url !== get$f(img, \"src\")) {\n            set$9(img, \"src\", data.url);\n            remove$2(frameComponent.element, \"tox-imagepreview__loaded\");\n          }\n          if (!isUndefined2(translatedData.cachedWidth) && !isUndefined2(translatedData.cachedHeight)) {\n            applyFramePositioning();\n          }\n          image2(img).then((img2) => {\n            if (frameComponent.getSystem().isConnected()) {\n              add$2(frameComponent.element, \"tox-imagepreview__loaded\");\n              translatedData.cachedWidth = img2.dom.naturalWidth;\n              translatedData.cachedHeight = img2.dom.naturalHeight;\n              applyFramePositioning();\n            }\n          });\n        });\n      };\n      const styles = {};\n      spec.height.each((h2) => styles.height = h2);\n      const fakeValidatedData = initialData.map((d2) => ({\n        url: d2.url,\n        zoom: Optional.from(d2.zoom),\n        cachedWidth: Optional.from(d2.cachedWidth),\n        cachedHeight: Optional.from(d2.cachedHeight)\n      }));\n      return {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-imagepreview\"],\n          styles,\n          attributes: { role: \"presentation\" }\n        },\n        components: [memContainer.asSpec()],\n        behaviours: derive$1([\n          ComposingConfigs.self(),\n          RepresentingConfigs.withComp(fakeValidatedData, () => cachedData.get(), setValue2)\n        ])\n      };\n    };\n    const renderLabel$1 = (spec, backstageShared) => {\n      const label2 = {\n        dom: {\n          tag: \"label\",\n          classes: [\"tox-label\"]\n        },\n        components: [text$1(backstageShared.providers.translate(spec.label))]\n      };\n      const comps = map$2(spec.items, backstageShared.interpreter);\n      return {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-form__group\"]\n        },\n        components: [\n          label2,\n          ...comps\n        ],\n        behaviours: derive$1([\n          ComposingConfigs.self(),\n          Replacing.config({}),\n          RepresentingConfigs.domHtml(Optional.none()),\n          Keying.config({ mode: \"acyclic\" })\n        ])\n      };\n    };\n    const internalToolbarButtonExecute = generate$6(\"toolbar.button.execute\");\n    const onToolbarButtonExecute = (info) => runOnExecute$1((comp, _simulatedEvent) => {\n      runWithApi(info, comp)((itemApi) => {\n        emitWith(comp, internalToolbarButtonExecute, { buttonApi: itemApi });\n        info.onAction(itemApi);\n      });\n    });\n    const toolbarButtonEventOrder = {\n      [execute$5()]: [\n        \"disabling\",\n        \"alloy.base.behaviour\",\n        \"toggling\",\n        \"toolbar-button-events\"\n      ]\n    };\n    const renderIcon = (iconName, iconsProvider, behaviours2) => render$3(iconName, {\n      tag: \"span\",\n      classes: [\n        \"tox-icon\",\n        \"tox-tbtn__icon-wrap\"\n      ],\n      behaviours: behaviours2\n    }, iconsProvider);\n    const renderIconFromPack = (iconName, iconsProvider) => renderIcon(iconName, iconsProvider, []);\n    const renderReplacableIconFromPack = (iconName, iconsProvider) => renderIcon(iconName, iconsProvider, [Replacing.config({})]);\n    const renderLabel = (text3, prefix2, providersBackstage) => ({\n      dom: {\n        tag: \"span\",\n        classes: [`${prefix2}__select-label`]\n      },\n      components: [text$1(providersBackstage.translate(text3))],\n      behaviours: derive$1([Replacing.config({})])\n    });\n    const updateMenuText = generate$6(\"update-menu-text\");\n    const updateMenuIcon = generate$6(\"update-menu-icon\");\n    const renderCommonDropdown = (spec, prefix2, sharedBackstage) => {\n      const editorOffCell = Cell(noop);\n      const optMemDisplayText = spec.text.map((text3) => record(renderLabel(text3, prefix2, sharedBackstage.providers)));\n      const optMemDisplayIcon = spec.icon.map((iconName) => record(renderReplacableIconFromPack(iconName, sharedBackstage.providers.icons)));\n      const onLeftOrRightInMenu = (comp, se) => {\n        const dropdown = Representing.getValue(comp);\n        Focusing.focus(dropdown);\n        emitWith(dropdown, \"keydown\", { raw: se.event.raw });\n        Dropdown.close(dropdown);\n        return Optional.some(true);\n      };\n      const role = spec.role.fold(() => ({}), (role2) => ({ role: role2 }));\n      const tooltipAttributes = spec.tooltip.fold(() => ({}), (tooltip) => {\n        const translatedTooltip = sharedBackstage.providers.translate(tooltip);\n        return {\n          \"title\": translatedTooltip,\n          \"aria-label\": translatedTooltip\n        };\n      });\n      const iconSpec = render$3(\"chevron-down\", {\n        tag: \"div\",\n        classes: [`${prefix2}__select-chevron`]\n      }, sharedBackstage.providers.icons);\n      const memDropdown = record(Dropdown.sketch({\n        ...spec.uid ? { uid: spec.uid } : {},\n        ...role,\n        dom: {\n          tag: \"button\",\n          classes: [\n            prefix2,\n            `${prefix2}--select`\n          ].concat(map$2(spec.classes, (c2) => `${prefix2}--${c2}`)),\n          attributes: { ...tooltipAttributes }\n        },\n        components: componentRenderPipeline([\n          optMemDisplayIcon.map((mem) => mem.asSpec()),\n          optMemDisplayText.map((mem) => mem.asSpec()),\n          Optional.some(iconSpec)\n        ]),\n        matchWidth: true,\n        useMinWidth: true,\n        dropdownBehaviours: derive$1([\n          ...spec.dropdownBehaviours,\n          DisablingConfigs.button(() => spec.disabled || sharedBackstage.providers.isDisabled()),\n          receivingConfig(),\n          Unselecting.config({}),\n          Replacing.config({}),\n          config2(\"dropdown-events\", [\n            onControlAttached(spec, editorOffCell),\n            onControlDetached(spec, editorOffCell)\n          ]),\n          config2(\"menubutton-update-display-text\", [\n            run$1(updateMenuText, (comp, se) => {\n              optMemDisplayText.bind((mem) => mem.getOpt(comp)).each((displayText) => {\n                Replacing.set(displayText, [text$1(sharedBackstage.providers.translate(se.event.text))]);\n              });\n            }),\n            run$1(updateMenuIcon, (comp, se) => {\n              optMemDisplayIcon.bind((mem) => mem.getOpt(comp)).each((displayIcon) => {\n                Replacing.set(displayIcon, [renderReplacableIconFromPack(se.event.icon, sharedBackstage.providers.icons)]);\n              });\n            })\n          ])\n        ]),\n        eventOrder: deepMerge(toolbarButtonEventOrder, {\n          mousedown: [\n            \"focusing\",\n            \"alloy.base.behaviour\",\n            \"item-type-events\",\n            \"normal-dropdown-events\"\n          ]\n        }),\n        sandboxBehaviours: derive$1([Keying.config({\n          mode: \"special\",\n          onLeft: onLeftOrRightInMenu,\n          onRight: onLeftOrRightInMenu\n        })]),\n        lazySink: sharedBackstage.getSink,\n        toggleClass: `${prefix2}--active`,\n        parts: { menu: part(false, spec.columns, spec.presets) },\n        fetch: (comp) => Future.nu(curry(spec.fetch, comp))\n      }));\n      return memDropdown.asSpec();\n    };\n    const isMenuItemReference = (item2) => isString2(item2);\n    const isSeparator$1 = (item2) => item2.type === \"separator\";\n    const isExpandingMenuItem = (item2) => has$2(item2, \"getSubmenuItems\");\n    const separator$2 = { type: \"separator\" };\n    const unwrapReferences = (items, menuItems) => {\n      const realItems = foldl(items, (acc, item2) => {\n        if (isMenuItemReference(item2)) {\n          if (item2 === \"\") {\n            return acc;\n          } else if (item2 === \"|\") {\n            return acc.length > 0 && !isSeparator$1(acc[acc.length - 1]) ? acc.concat([separator$2]) : acc;\n          } else if (has$2(menuItems, item2.toLowerCase())) {\n            return acc.concat([menuItems[item2.toLowerCase()]]);\n          } else {\n            return acc;\n          }\n        } else {\n          return acc.concat([item2]);\n        }\n      }, []);\n      if (realItems.length > 0 && isSeparator$1(realItems[realItems.length - 1])) {\n        realItems.pop();\n      }\n      return realItems;\n    };\n    const getFromExpandingItem = (item2, menuItems) => {\n      const submenuItems = item2.getSubmenuItems();\n      const rest = expand(submenuItems, menuItems);\n      const newMenus = deepMerge(rest.menus, wrap$1(item2.value, rest.items));\n      const newExpansions = deepMerge(rest.expansions, wrap$1(item2.value, item2.value));\n      return {\n        item: item2,\n        menus: newMenus,\n        expansions: newExpansions\n      };\n    };\n    const getFromItem = (item2, menuItems) => isExpandingMenuItem(item2) ? getFromExpandingItem(item2, menuItems) : {\n      item: item2,\n      menus: {},\n      expansions: {}\n    };\n    const generateValueIfRequired = (item2) => {\n      if (isSeparator$1(item2)) {\n        return item2;\n      } else {\n        const itemValue = get$g(item2, \"value\").getOrThunk(() => generate$6(\"generated-menu-item\"));\n        return deepMerge({ value: itemValue }, item2);\n      }\n    };\n    const expand = (items, menuItems) => {\n      const realItems = unwrapReferences(isString2(items) ? items.split(\" \") : items, menuItems);\n      return foldr(realItems, (acc, item2) => {\n        const itemWithValue = generateValueIfRequired(item2);\n        const newData = getFromItem(itemWithValue, menuItems);\n        return {\n          menus: deepMerge(acc.menus, newData.menus),\n          items: [newData.item].concat(acc.items),\n          expansions: deepMerge(acc.expansions, newData.expansions)\n        };\n      }, {\n        menus: {},\n        expansions: {},\n        items: []\n      });\n    };\n    const build = (items, itemResponse, backstage, isHorizontalMenu) => {\n      const primary2 = generate$6(\"primary-menu\");\n      const data = expand(items, backstage.shared.providers.menuItems());\n      if (data.items.length === 0) {\n        return Optional.none();\n      }\n      const mainMenu = createPartialMenu(primary2, data.items, itemResponse, backstage, isHorizontalMenu);\n      const submenus = map$1(data.menus, (menuItems, menuName) => createPartialMenu(menuName, menuItems, itemResponse, backstage, false));\n      const menus = deepMerge(submenus, wrap$1(primary2, mainMenu));\n      return Optional.from(tieredMenu.tieredData(primary2, menus, data.expansions));\n    };\n    const isSingleListItem = (item2) => !has$2(item2, \"items\");\n    const dataAttribute = \"data-value\";\n    const fetchItems = (dropdownComp, name2, items, selectedValue) => map$2(items, (item2) => {\n      if (!isSingleListItem(item2)) {\n        return {\n          type: \"nestedmenuitem\",\n          text: item2.text,\n          getSubmenuItems: () => fetchItems(dropdownComp, name2, item2.items, selectedValue)\n        };\n      } else {\n        return {\n          type: \"togglemenuitem\",\n          text: item2.text,\n          value: item2.value,\n          active: item2.value === selectedValue,\n          onAction: () => {\n            Representing.setValue(dropdownComp, item2.value);\n            emitWith(dropdownComp, formChangeEvent, { name: name2 });\n            Focusing.focus(dropdownComp);\n          }\n        };\n      }\n    });\n    const findItemByValue = (items, value2) => findMap(items, (item2) => {\n      if (!isSingleListItem(item2)) {\n        return findItemByValue(item2.items, value2);\n      } else {\n        return someIf(item2.value === value2, item2);\n      }\n    });\n    const renderListBox = (spec, backstage, initialData) => {\n      const providersBackstage = backstage.shared.providers;\n      const initialItem = initialData.bind((value2) => findItemByValue(spec.items, value2)).orThunk(() => head(spec.items).filter(isSingleListItem));\n      const pLabel = spec.label.map((label2) => renderLabel$2(label2, providersBackstage));\n      const pField = FormField.parts.field({\n        dom: {},\n        factory: {\n          sketch: (sketchSpec) => renderCommonDropdown({\n            uid: sketchSpec.uid,\n            text: initialItem.map((item2) => item2.text),\n            icon: Optional.none(),\n            tooltip: spec.label,\n            role: Optional.none(),\n            fetch: (comp, callback) => {\n              const items = fetchItems(comp, spec.name, spec.items, Representing.getValue(comp));\n              callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false));\n            },\n            onSetup: constant$1(noop),\n            getApi: constant$1({}),\n            columns: 1,\n            presets: \"normal\",\n            classes: [],\n            dropdownBehaviours: [\n              Tabstopping.config({}),\n              RepresentingConfigs.withComp(initialItem.map((item2) => item2.value), (comp) => get$f(comp.element, dataAttribute), (comp, data) => {\n                findItemByValue(spec.items, data).each((item2) => {\n                  set$9(comp.element, dataAttribute, item2.value);\n                  emitWith(comp, updateMenuText, { text: item2.text });\n                });\n              })\n            ]\n          }, \"tox-listbox\", backstage.shared)\n        }\n      });\n      const listBoxWrap = {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-listboxfield\"]\n        },\n        components: [pField]\n      };\n      return FormField.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-form__group\"]\n        },\n        components: flatten([\n          pLabel.toArray(),\n          [listBoxWrap]\n        ]),\n        fieldBehaviours: derive$1([Disabling.config({\n          disabled: constant$1(!spec.enabled),\n          onDisabled: (comp) => {\n            FormField.getField(comp).each(Disabling.disable);\n          },\n          onEnabled: (comp) => {\n            FormField.getField(comp).each(Disabling.enable);\n          }\n        })])\n      });\n    };\n    const renderPanel = (spec, backstage) => ({\n      dom: {\n        tag: \"div\",\n        classes: spec.classes\n      },\n      components: map$2(spec.items, backstage.shared.interpreter)\n    });\n    const factory$f = (detail, _spec) => {\n      const options = map$2(detail.options, (option2) => ({\n        dom: {\n          tag: \"option\",\n          value: option2.value,\n          innerHtml: option2.text\n        }\n      }));\n      const initialValues = detail.data.map((v2) => wrap$1(\"initialValue\", v2)).getOr({});\n      return {\n        uid: detail.uid,\n        dom: {\n          tag: \"select\",\n          classes: detail.selectClasses,\n          attributes: detail.selectAttributes\n        },\n        components: options,\n        behaviours: augment(detail.selectBehaviours, [\n          Focusing.config({}),\n          Representing.config({\n            store: {\n              mode: \"manual\",\n              getValue: (select2) => {\n                return get$6(select2.element);\n              },\n              setValue: (select2, newValue) => {\n                const found = find$5(detail.options, (opt) => opt.value === newValue);\n                if (found.isSome()) {\n                  set$5(select2.element, newValue);\n                }\n              },\n              ...initialValues\n            }\n          })\n        ])\n      };\n    };\n    const HtmlSelect = single({\n      name: \"HtmlSelect\",\n      configFields: [\n        required$1(\"options\"),\n        field(\"selectBehaviours\", [\n          Focusing,\n          Representing\n        ]),\n        defaulted(\"selectClasses\", []),\n        defaulted(\"selectAttributes\", {}),\n        option$3(\"data\")\n      ],\n      factory: factory$f\n    });\n    const renderSelectBox = (spec, providersBackstage, initialData) => {\n      const translatedOptions = map$2(spec.items, (item2) => ({\n        text: providersBackstage.translate(item2.text),\n        value: item2.value\n      }));\n      const pLabel = spec.label.map((label2) => renderLabel$2(label2, providersBackstage));\n      const pField = FormField.parts.field({\n        dom: {},\n        ...initialData.map((data) => ({ data })).getOr({}),\n        selectAttributes: { size: spec.size },\n        options: translatedOptions,\n        factory: HtmlSelect,\n        selectBehaviours: derive$1([\n          Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n          Tabstopping.config({}),\n          config2(\"selectbox-change\", [run$1(change(), (component, _2) => {\n            emitWith(component, formChangeEvent, { name: spec.name });\n          })])\n        ])\n      });\n      const chevron = spec.size > 1 ? Optional.none() : Optional.some(render$3(\"chevron-down\", {\n        tag: \"div\",\n        classes: [\"tox-selectfield__icon-js\"]\n      }, providersBackstage.icons));\n      const selectWrap = {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-selectfield\"]\n        },\n        components: flatten([\n          [pField],\n          chevron.toArray()\n        ])\n      };\n      return FormField.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-form__group\"]\n        },\n        components: flatten([\n          pLabel.toArray(),\n          [selectWrap]\n        ]),\n        fieldBehaviours: derive$1([\n          Disabling.config({\n            disabled: () => !spec.enabled || providersBackstage.isDisabled(),\n            onDisabled: (comp) => {\n              FormField.getField(comp).each(Disabling.disable);\n            },\n            onEnabled: (comp) => {\n              FormField.getField(comp).each(Disabling.enable);\n            }\n          }),\n          receivingConfig()\n        ])\n      });\n    };\n    const schema$h = constant$1([\n      defaulted(\"field1Name\", \"field1\"),\n      defaulted(\"field2Name\", \"field2\"),\n      onStrictHandler(\"onLockedChange\"),\n      markers$1([\"lockClass\"]),\n      defaulted(\"locked\", false),\n      SketchBehaviours.field(\"coupledFieldBehaviours\", [\n        Composing,\n        Representing\n      ])\n    ]);\n    const getField = (comp, detail, partName) => getPart(comp, detail, partName).bind(Composing.getCurrent);\n    const coupledPart = (selfName, otherName) => required({\n      factory: FormField,\n      name: selfName,\n      overrides: (detail) => {\n        return {\n          fieldBehaviours: derive$1([config2(\"coupled-input-behaviour\", [run$1(input(), (me) => {\n            getField(me, detail, otherName).each((other) => {\n              getPart(me, detail, \"lock\").each((lock) => {\n                if (Toggling.isOn(lock)) {\n                  detail.onLockedChange(me, other, lock);\n                }\n              });\n            });\n          })])])\n        };\n      }\n    });\n    const parts$c = constant$1([\n      coupledPart(\"field1\", \"field2\"),\n      coupledPart(\"field2\", \"field1\"),\n      required({\n        factory: Button,\n        schema: [required$1(\"dom\")],\n        name: \"lock\",\n        overrides: (detail) => {\n          return {\n            buttonBehaviours: derive$1([Toggling.config({\n              selected: detail.locked,\n              toggleClass: detail.markers.lockClass,\n              aria: { mode: \"pressed\" }\n            })])\n          };\n        }\n      })\n    ]);\n    const factory$e = (detail, components2, _spec, _externals) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      components: components2,\n      behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [\n        Composing.config({ find: Optional.some }),\n        Representing.config({\n          store: {\n            mode: \"manual\",\n            getValue: (comp) => {\n              const parts2 = getPartsOrDie(comp, detail, [\n                \"field1\",\n                \"field2\"\n              ]);\n              return {\n                [detail.field1Name]: Representing.getValue(parts2.field1()),\n                [detail.field2Name]: Representing.getValue(parts2.field2())\n              };\n            },\n            setValue: (comp, value2) => {\n              const parts2 = getPartsOrDie(comp, detail, [\n                \"field1\",\n                \"field2\"\n              ]);\n              if (hasNonNullableKey(value2, detail.field1Name)) {\n                Representing.setValue(parts2.field1(), value2[detail.field1Name]);\n              }\n              if (hasNonNullableKey(value2, detail.field2Name)) {\n                Representing.setValue(parts2.field2(), value2[detail.field2Name]);\n              }\n            }\n          }\n        })\n      ]),\n      apis: {\n        getField1: (component) => getPart(component, detail, \"field1\"),\n        getField2: (component) => getPart(component, detail, \"field2\"),\n        getLock: (component) => getPart(component, detail, \"lock\")\n      }\n    });\n    const FormCoupledInputs = composite({\n      name: \"FormCoupledInputs\",\n      configFields: schema$h(),\n      partFields: parts$c(),\n      factory: factory$e,\n      apis: {\n        getField1: (apis, component) => apis.getField1(component),\n        getField2: (apis, component) => apis.getField2(component),\n        getLock: (apis, component) => apis.getLock(component)\n      }\n    });\n    const formatSize = (size) => {\n      const unitDec = {\n        \"\": 0,\n        \"px\": 0,\n        \"pt\": 1,\n        \"mm\": 1,\n        \"pc\": 2,\n        \"ex\": 2,\n        \"em\": 2,\n        \"ch\": 2,\n        \"rem\": 2,\n        \"cm\": 3,\n        \"in\": 4,\n        \"%\": 4\n      };\n      const maxDecimal = (unit) => unit in unitDec ? unitDec[unit] : 1;\n      let numText = size.value.toFixed(maxDecimal(size.unit));\n      if (numText.indexOf(\".\") !== -1) {\n        numText = numText.replace(/\\.?0*$/, \"\");\n      }\n      return numText + size.unit;\n    };\n    const parseSize = (sizeText) => {\n      const numPattern = /^\\s*(\\d+(?:\\.\\d+)?)\\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\\s*$/;\n      const match3 = numPattern.exec(sizeText);\n      if (match3 !== null) {\n        const value2 = parseFloat(match3[1]);\n        const unit = match3[2];\n        return Result.value({\n          value: value2,\n          unit\n        });\n      } else {\n        return Result.error(sizeText);\n      }\n    };\n    const convertUnit = (size, unit) => {\n      const inInch = {\n        \"\": 96,\n        \"px\": 96,\n        \"pt\": 72,\n        \"cm\": 2.54,\n        \"pc\": 12,\n        \"mm\": 25.4,\n        \"in\": 1\n      };\n      const supported2 = (u2) => has$2(inInch, u2);\n      if (size.unit === unit) {\n        return Optional.some(size.value);\n      } else if (supported2(size.unit) && supported2(unit)) {\n        if (inInch[size.unit] === inInch[unit]) {\n          return Optional.some(size.value);\n        } else {\n          return Optional.some(size.value / inInch[size.unit] * inInch[unit]);\n        }\n      } else {\n        return Optional.none();\n      }\n    };\n    const noSizeConversion = (_input) => Optional.none();\n    const ratioSizeConversion = (scale, unit) => (size) => convertUnit(size, unit).map((value2) => ({\n      value: value2 * scale,\n      unit\n    }));\n    const makeRatioConverter = (currentFieldText, otherFieldText) => {\n      const cValue = parseSize(currentFieldText).toOptional();\n      const oValue = parseSize(otherFieldText).toOptional();\n      return lift2(cValue, oValue, (cSize, oSize) => convertUnit(cSize, oSize.unit).map((val) => oSize.value / val).map((r4) => ratioSizeConversion(r4, oSize.unit)).getOr(noSizeConversion)).getOr(noSizeConversion);\n    };\n    const renderSizeInput = (spec, providersBackstage) => {\n      let converter = noSizeConversion;\n      const ratioEvent = generate$6(\"ratio-event\");\n      const makeIcon = (iconName) => render$3(iconName, {\n        tag: \"span\",\n        classes: [\n          \"tox-icon\",\n          \"tox-lock-icon__\" + iconName\n        ]\n      }, providersBackstage.icons);\n      const pLock = FormCoupledInputs.parts.lock({\n        dom: {\n          tag: \"button\",\n          classes: [\n            \"tox-lock\",\n            \"tox-button\",\n            \"tox-button--naked\",\n            \"tox-button--icon\"\n          ],\n          attributes: { title: providersBackstage.translate(spec.label.getOr(\"Constrain proportions\")) }\n        },\n        components: [\n          makeIcon(\"lock\"),\n          makeIcon(\"unlock\")\n        ],\n        buttonBehaviours: derive$1([\n          Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n          receivingConfig(),\n          Tabstopping.config({})\n        ])\n      });\n      const formGroup = (components2) => ({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-form__group\"]\n        },\n        components: components2\n      });\n      const getFieldPart = (isField1) => FormField.parts.field({\n        factory: Input2,\n        inputClasses: [\"tox-textfield\"],\n        inputBehaviours: derive$1([\n          Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n          receivingConfig(),\n          Tabstopping.config({}),\n          config2(\"size-input-events\", [\n            run$1(focusin(), (component, _simulatedEvent) => {\n              emitWith(component, ratioEvent, { isField1 });\n            }),\n            run$1(change(), (component, _simulatedEvent) => {\n              emitWith(component, formChangeEvent, { name: spec.name });\n            })\n          ])\n        ]),\n        selectOnFocus: false\n      });\n      const getLabel = (label2) => ({\n        dom: {\n          tag: \"label\",\n          classes: [\"tox-label\"]\n        },\n        components: [text$1(providersBackstage.translate(label2))]\n      });\n      const widthField = FormCoupledInputs.parts.field1(formGroup([\n        FormField.parts.label(getLabel(\"Width\")),\n        getFieldPart(true)\n      ]));\n      const heightField = FormCoupledInputs.parts.field2(formGroup([\n        FormField.parts.label(getLabel(\"Height\")),\n        getFieldPart(false)\n      ]));\n      return FormCoupledInputs.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-form__group\"]\n        },\n        components: [{\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-form__controls-h-stack\"]\n          },\n          components: [\n            widthField,\n            heightField,\n            formGroup([\n              getLabel(nbsp),\n              pLock\n            ])\n          ]\n        }],\n        field1Name: \"width\",\n        field2Name: \"height\",\n        locked: true,\n        markers: { lockClass: \"tox-locked\" },\n        onLockedChange: (current, other, _lock) => {\n          parseSize(Representing.getValue(current)).each((size) => {\n            converter(size).each((newSize) => {\n              Representing.setValue(other, formatSize(newSize));\n            });\n          });\n        },\n        coupledFieldBehaviours: derive$1([\n          Disabling.config({\n            disabled: () => !spec.enabled || providersBackstage.isDisabled(),\n            onDisabled: (comp) => {\n              FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable);\n              FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable);\n              FormCoupledInputs.getLock(comp).each(Disabling.disable);\n            },\n            onEnabled: (comp) => {\n              FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable);\n              FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable);\n              FormCoupledInputs.getLock(comp).each(Disabling.enable);\n            }\n          }),\n          receivingConfig(),\n          config2(\"size-input-events2\", [run$1(ratioEvent, (component, simulatedEvent) => {\n            const isField1 = simulatedEvent.event.isField1;\n            const optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n            const optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n            const value1 = optCurrent.map(Representing.getValue).getOr(\"\");\n            const value2 = optOther.map(Representing.getValue).getOr(\"\");\n            converter = makeRatioConverter(value1, value2);\n          })])\n        ])\n      });\n    };\n    const renderSlider = (spec, providerBackstage, initialData) => {\n      const labelPart2 = Slider.parts.label({\n        dom: {\n          tag: \"label\",\n          classes: [\"tox-label\"]\n        },\n        components: [text$1(providerBackstage.translate(spec.label))]\n      });\n      const spectrum = Slider.parts.spectrum({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-slider__rail\"],\n          attributes: { role: \"presentation\" }\n        }\n      });\n      const thumb = Slider.parts.thumb({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-slider__handle\"],\n          attributes: { role: \"presentation\" }\n        }\n      });\n      return Slider.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-slider\"],\n          attributes: { role: \"presentation\" }\n        },\n        model: {\n          mode: \"x\",\n          minX: spec.min,\n          maxX: spec.max,\n          getInitialValue: constant$1(initialData.getOrThunk(() => (Math.abs(spec.max) - Math.abs(spec.min)) / 2))\n        },\n        components: [\n          labelPart2,\n          spectrum,\n          thumb\n        ],\n        sliderBehaviours: derive$1([\n          ComposingConfigs.self(),\n          Focusing.config({})\n        ]),\n        onChoose: (component, thumb2, value2) => {\n          emitWith(component, formChangeEvent, {\n            name: spec.name,\n            value: value2\n          });\n        }\n      });\n    };\n    const renderTable = (spec, providersBackstage) => {\n      const renderTh = (text3) => ({\n        dom: {\n          tag: \"th\",\n          innerHtml: providersBackstage.translate(text3)\n        }\n      });\n      const renderHeader2 = (header) => ({\n        dom: { tag: \"thead\" },\n        components: [{\n          dom: { tag: \"tr\" },\n          components: map$2(header, renderTh)\n        }]\n      });\n      const renderTd = (text3) => ({\n        dom: {\n          tag: \"td\",\n          innerHtml: providersBackstage.translate(text3)\n        }\n      });\n      const renderTr = (row) => ({\n        dom: { tag: \"tr\" },\n        components: map$2(row, renderTd)\n      });\n      const renderRows = (rows) => ({\n        dom: { tag: \"tbody\" },\n        components: map$2(rows, renderTr)\n      });\n      return {\n        dom: {\n          tag: \"table\",\n          classes: [\"tox-dialog__table\"]\n        },\n        components: [\n          renderHeader2(spec.header),\n          renderRows(spec.cells)\n        ],\n        behaviours: derive$1([\n          Tabstopping.config({}),\n          Focusing.config({})\n        ])\n      };\n    };\n    const renderTextField = (spec, providersBackstage) => {\n      const pLabel = spec.label.map((label2) => renderLabel$2(label2, providersBackstage));\n      const baseInputBehaviours = [\n        Disabling.config({ disabled: () => spec.disabled || providersBackstage.isDisabled() }),\n        receivingConfig(),\n        Keying.config({\n          mode: \"execution\",\n          useEnter: spec.multiline !== true,\n          useControlEnter: spec.multiline === true,\n          execute: (comp) => {\n            emit(comp, formSubmitEvent);\n            return Optional.some(true);\n          }\n        }),\n        config2(\"textfield-change\", [\n          run$1(input(), (component, _2) => {\n            emitWith(component, formChangeEvent, { name: spec.name });\n          }),\n          run$1(postPaste(), (component, _2) => {\n            emitWith(component, formChangeEvent, { name: spec.name });\n          })\n        ]),\n        Tabstopping.config({})\n      ];\n      const validatingBehaviours = spec.validation.map((vl) => Invalidating.config({\n        getRoot: (input2) => {\n          return parentElement(input2.element);\n        },\n        invalidClass: \"tox-invalid\",\n        validator: {\n          validate: (input2) => {\n            const v2 = Representing.getValue(input2);\n            const result = vl.validator(v2);\n            return Future.pure(result === true ? Result.value(v2) : Result.error(result));\n          },\n          validateOnLoad: vl.validateOnLoad\n        }\n      })).toArray();\n      const placeholder2 = spec.placeholder.fold(constant$1({}), (p2) => ({ placeholder: providersBackstage.translate(p2) }));\n      const inputMode = spec.inputMode.fold(constant$1({}), (mode) => ({ inputmode: mode }));\n      const inputAttributes = {\n        ...placeholder2,\n        ...inputMode\n      };\n      const pField = FormField.parts.field({\n        tag: spec.multiline === true ? \"textarea\" : \"input\",\n        ...spec.data.map((data) => ({ data })).getOr({}),\n        inputAttributes,\n        inputClasses: [spec.classname],\n        inputBehaviours: derive$1(flatten([\n          baseInputBehaviours,\n          validatingBehaviours\n        ])),\n        selectOnFocus: false,\n        factory: Input2\n      });\n      const extraClasses = spec.flex ? [\"tox-form__group--stretched\"] : [];\n      const extraClasses2 = extraClasses.concat(spec.maximized ? [\"tox-form-group--maximize\"] : []);\n      const extraBehaviours = [\n        Disabling.config({\n          disabled: () => spec.disabled || providersBackstage.isDisabled(),\n          onDisabled: (comp) => {\n            FormField.getField(comp).each(Disabling.disable);\n          },\n          onEnabled: (comp) => {\n            FormField.getField(comp).each(Disabling.enable);\n          }\n        }),\n        receivingConfig()\n      ];\n      return renderFormFieldWith(pLabel, pField, extraClasses2, extraBehaviours);\n    };\n    const renderInput = (spec, providersBackstage, initialData) => renderTextField({\n      name: spec.name,\n      multiline: false,\n      label: spec.label,\n      inputMode: spec.inputMode,\n      placeholder: spec.placeholder,\n      flex: false,\n      disabled: !spec.enabled,\n      classname: \"tox-textfield\",\n      validation: Optional.none(),\n      maximized: spec.maximized,\n      data: initialData\n    }, providersBackstage);\n    const renderTextarea = (spec, providersBackstage, initialData) => renderTextField({\n      name: spec.name,\n      multiline: true,\n      label: spec.label,\n      inputMode: Optional.none(),\n      placeholder: spec.placeholder,\n      flex: true,\n      disabled: !spec.enabled,\n      classname: \"tox-textarea\",\n      validation: Optional.none(),\n      maximized: spec.maximized,\n      data: initialData\n    }, providersBackstage);\n    const events$6 = (streamConfig, streamState) => {\n      const streams = streamConfig.stream.streams;\n      const processor = streams.setup(streamConfig, streamState);\n      return derive$2([\n        run$1(streamConfig.event, processor),\n        runOnDetached(() => streamState.cancel())\n      ].concat(streamConfig.cancelEvent.map((e2) => [run$1(e2, () => streamState.cancel())]).getOr([])));\n    };\n    var ActiveStreaming = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      events: events$6\n    });\n    const first = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle2 = (...args) => {\n        if (isNull(timer)) {\n          timer = setTimeout(() => {\n            timer = null;\n            fn.apply(null, args);\n          }, rate);\n        }\n      };\n      return {\n        cancel,\n        throttle: throttle2\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 throttle2 = (...args) => {\n        cancel();\n        timer = setTimeout(() => {\n          timer = null;\n          fn.apply(null, args);\n        }, rate);\n      };\n      return {\n        cancel,\n        throttle: throttle2\n      };\n    };\n    const throttle = (_config) => {\n      const state = Cell(null);\n      const readState = () => ({ timer: state.get() !== null ? \"set\" : \"unset\" });\n      const setTimer = (t3) => {\n        state.set(t3);\n      };\n      const cancel = () => {\n        const t3 = state.get();\n        if (t3 !== null) {\n          t3.cancel();\n        }\n      };\n      return nu$8({\n        readState,\n        setTimer,\n        cancel\n      });\n    };\n    const init$9 = (spec) => spec.stream.streams.state(spec);\n    var StreamingState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      throttle,\n      init: init$9\n    });\n    const setup$c = (streamInfo, streamState) => {\n      const sInfo = streamInfo.stream;\n      const throttler = last(streamInfo.onStream, sInfo.delay);\n      streamState.setTimer(throttler);\n      return (component, simulatedEvent) => {\n        throttler.throttle(component, simulatedEvent);\n        if (sInfo.stopEvent) {\n          simulatedEvent.stop();\n        }\n      };\n    };\n    var StreamingSchema = [\n      requiredOf(\"stream\", choose$1(\"mode\", {\n        throttle: [\n          required$1(\"delay\"),\n          defaulted(\"stopEvent\", true),\n          output$1(\"streams\", {\n            setup: setup$c,\n            state: throttle\n          })\n        ]\n      })),\n      defaulted(\"event\", \"input\"),\n      option$3(\"cancelEvent\"),\n      onStrictHandler(\"onStream\")\n    ];\n    const Streaming = create$3({\n      fields: StreamingSchema,\n      name: \"streaming\",\n      active: ActiveStreaming,\n      state: StreamingState\n    });\n    const setValueFromItem = (model2, input2, item2) => {\n      const itemData = Representing.getValue(item2);\n      Representing.setValue(input2, itemData);\n      setCursorAtEnd(input2);\n    };\n    const setSelectionOn = (input2, f2) => {\n      const el = input2.element;\n      const value2 = get$6(el);\n      const node = el.dom;\n      if (get$f(el, \"type\") !== \"number\") {\n        f2(node, value2);\n      }\n    };\n    const setCursorAtEnd = (input2) => {\n      setSelectionOn(input2, (node, value2) => node.setSelectionRange(value2.length, value2.length));\n    };\n    const setSelectionToEnd = (input2, startOffset) => {\n      setSelectionOn(input2, (node, value2) => node.setSelectionRange(startOffset, value2.length));\n    };\n    const attemptSelectOver = (model2, input2, item2) => {\n      if (!model2.selectsOver) {\n        return Optional.none();\n      } else {\n        const currentValue2 = Representing.getValue(input2);\n        const inputDisplay = model2.getDisplayText(currentValue2);\n        const itemValue = Representing.getValue(item2);\n        const itemDisplay = model2.getDisplayText(itemValue);\n        return itemDisplay.indexOf(inputDisplay) === 0 ? Optional.some(() => {\n          setValueFromItem(model2, input2, item2);\n          setSelectionToEnd(input2, inputDisplay.length);\n        }) : Optional.none();\n      }\n    };\n    const itemExecute = constant$1(\"alloy.typeahead.itemexecute\");\n    const make$3 = (detail, components2, spec, externals) => {\n      const navigateList = (comp, simulatedEvent, highlighter) => {\n        detail.previewing.set(false);\n        const sandbox = Coupling.getCoupled(comp, \"sandbox\");\n        if (Sandboxing.isOpen(sandbox)) {\n          Composing.getCurrent(sandbox).each((menu2) => {\n            Highlighting.getHighlighted(menu2).fold(() => {\n              highlighter(menu2);\n            }, () => {\n              dispatchEvent(sandbox, menu2.element, \"keydown\", simulatedEvent);\n            });\n          });\n        } else {\n          const onOpenSync = (sandbox2) => {\n            Composing.getCurrent(sandbox2).each(highlighter);\n          };\n          open(detail, mapFetch(comp), comp, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n        }\n      };\n      const focusBehaviours$1 = focusBehaviours(detail);\n      const mapFetch = (comp) => (tdata) => tdata.map((data) => {\n        const menus = values(data.menus);\n        const items = bind$3(menus, (menu2) => filter$2(menu2.items, (item2) => item2.type === \"item\"));\n        const repState = Representing.getState(comp);\n        repState.update(map$2(items, (item2) => item2.data));\n        return data;\n      });\n      const behaviours2 = [\n        Focusing.config({}),\n        Representing.config({\n          onSetValue: detail.onSetValue,\n          store: {\n            mode: \"dataset\",\n            getDataKey: (comp) => get$6(comp.element),\n            getFallbackEntry: (itemString) => ({\n              value: itemString,\n              meta: {}\n            }),\n            setValue: (comp, data) => {\n              set$5(comp.element, detail.model.getDisplayText(data));\n            },\n            ...detail.initialData.map((d2) => wrap$1(\"initialValue\", d2)).getOr({})\n          }\n        }),\n        Streaming.config({\n          stream: {\n            mode: \"throttle\",\n            delay: detail.responseTime,\n            stopEvent: false\n          },\n          onStream: (component, _simulatedEvent) => {\n            const sandbox = Coupling.getCoupled(component, \"sandbox\");\n            const focusInInput = Focusing.isFocused(component);\n            if (focusInInput) {\n              if (get$6(component.element).length >= detail.minChars) {\n                const previousValue = Composing.getCurrent(sandbox).bind((menu2) => Highlighting.getHighlighted(menu2).map(Representing.getValue));\n                detail.previewing.set(true);\n                const onOpenSync = (_sandbox) => {\n                  Composing.getCurrent(sandbox).each((menu2) => {\n                    previousValue.fold(() => {\n                      if (detail.model.selectsOver) {\n                        Highlighting.highlightFirst(menu2);\n                      }\n                    }, (pv) => {\n                      Highlighting.highlightBy(menu2, (item2) => {\n                        const itemData = Representing.getValue(item2);\n                        return itemData.value === pv.value;\n                      });\n                      Highlighting.getHighlighted(menu2).orThunk(() => {\n                        Highlighting.highlightFirst(menu2);\n                        return Optional.none();\n                      });\n                    });\n                  });\n                };\n                open(detail, mapFetch(component), component, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n              }\n            }\n          },\n          cancelEvent: typeaheadCancel()\n        }),\n        Keying.config({\n          mode: \"special\",\n          onDown: (comp, simulatedEvent) => {\n            navigateList(comp, simulatedEvent, Highlighting.highlightFirst);\n            return Optional.some(true);\n          },\n          onEscape: (comp) => {\n            const sandbox = Coupling.getCoupled(comp, \"sandbox\");\n            if (Sandboxing.isOpen(sandbox)) {\n              Sandboxing.close(sandbox);\n              return Optional.some(true);\n            }\n            return Optional.none();\n          },\n          onUp: (comp, simulatedEvent) => {\n            navigateList(comp, simulatedEvent, Highlighting.highlightLast);\n            return Optional.some(true);\n          },\n          onEnter: (comp) => {\n            const sandbox = Coupling.getCoupled(comp, \"sandbox\");\n            const sandboxIsOpen = Sandboxing.isOpen(sandbox);\n            if (sandboxIsOpen && !detail.previewing.get()) {\n              return Composing.getCurrent(sandbox).bind((menu2) => Highlighting.getHighlighted(menu2)).map((item2) => {\n                emitWith(comp, itemExecute(), { item: item2 });\n                return true;\n              });\n            } else {\n              const currentValue2 = Representing.getValue(comp);\n              emit(comp, typeaheadCancel());\n              detail.onExecute(sandbox, comp, currentValue2);\n              if (sandboxIsOpen) {\n                Sandboxing.close(sandbox);\n              }\n              return Optional.some(true);\n            }\n          }\n        }),\n        Toggling.config({\n          toggleClass: detail.markers.openClass,\n          aria: { mode: \"expanded\" }\n        }),\n        Coupling.config({\n          others: {\n            sandbox: (hotspot) => {\n              return makeSandbox$1(detail, hotspot, {\n                onOpen: () => Toggling.on(hotspot),\n                onClose: () => Toggling.off(hotspot)\n              });\n            }\n          }\n        }),\n        config2(\"typeaheadevents\", [\n          runOnExecute$1((comp) => {\n            const onOpenSync = noop;\n            togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n          }),\n          run$1(itemExecute(), (comp, se) => {\n            const sandbox = Coupling.getCoupled(comp, \"sandbox\");\n            setValueFromItem(detail.model, comp, se.event.item);\n            emit(comp, typeaheadCancel());\n            detail.onItemExecute(comp, sandbox, se.event.item, Representing.getValue(comp));\n            Sandboxing.close(sandbox);\n            setCursorAtEnd(comp);\n          })\n        ].concat(detail.dismissOnBlur ? [run$1(postBlur(), (typeahead) => {\n          const sandbox = Coupling.getCoupled(typeahead, \"sandbox\");\n          if (search(sandbox.element).isNone()) {\n            Sandboxing.close(sandbox);\n          }\n        })] : []))\n      ];\n      return {\n        uid: detail.uid,\n        dom: dom2(deepMerge(detail, {\n          inputAttributes: {\n            \"role\": \"combobox\",\n            \"aria-autocomplete\": \"list\",\n            \"aria-haspopup\": \"true\"\n          }\n        })),\n        behaviours: {\n          ...focusBehaviours$1,\n          ...augment(detail.typeaheadBehaviours, behaviours2)\n        },\n        eventOrder: detail.eventOrder\n      };\n    };\n    const schema$g = constant$1([\n      option$3(\"lazySink\"),\n      required$1(\"fetch\"),\n      defaulted(\"minChars\", 5),\n      defaulted(\"responseTime\", 1e3),\n      onHandler(\"onOpen\"),\n      defaulted(\"getHotspot\", Optional.some),\n      defaulted(\"getAnchorOverrides\", constant$1({})),\n      defaulted(\"layouts\", Optional.none()),\n      defaulted(\"eventOrder\", {}),\n      defaultedObjOf(\"model\", {}, [\n        defaulted(\"getDisplayText\", (itemData) => itemData.meta !== void 0 && itemData.meta.text !== void 0 ? itemData.meta.text : itemData.value),\n        defaulted(\"selectsOver\", true),\n        defaulted(\"populateFromBrowse\", true)\n      ]),\n      onHandler(\"onSetValue\"),\n      onKeyboardHandler(\"onExecute\"),\n      onHandler(\"onItemExecute\"),\n      defaulted(\"inputClasses\", []),\n      defaulted(\"inputAttributes\", {}),\n      defaulted(\"inputStyles\", {}),\n      defaulted(\"matchWidth\", true),\n      defaulted(\"useMinWidth\", false),\n      defaulted(\"dismissOnBlur\", true),\n      markers$1([\"openClass\"]),\n      option$3(\"initialData\"),\n      field(\"typeaheadBehaviours\", [\n        Focusing,\n        Representing,\n        Streaming,\n        Keying,\n        Toggling,\n        Coupling\n      ]),\n      customField(\"previewing\", () => Cell(true))\n    ].concat(schema$k()).concat(sandboxFields()));\n    const parts$b = constant$1([external({\n      schema: [tieredMenuMarkers()],\n      name: \"menu\",\n      overrides: (detail) => {\n        return {\n          fakeFocus: true,\n          onHighlight: (menu2, item2) => {\n            if (!detail.previewing.get()) {\n              menu2.getSystem().getByUid(detail.uid).each((input2) => {\n                if (detail.model.populateFromBrowse) {\n                  setValueFromItem(detail.model, input2, item2);\n                }\n              });\n            } else {\n              menu2.getSystem().getByUid(detail.uid).each((input2) => {\n                attemptSelectOver(detail.model, input2, item2).fold(() => Highlighting.dehighlight(menu2, item2), (fn) => fn());\n              });\n            }\n            detail.previewing.set(false);\n          },\n          onExecute: (menu2, item2) => {\n            return menu2.getSystem().getByUid(detail.uid).toOptional().map((typeahead) => {\n              emitWith(typeahead, itemExecute(), { item: item2 });\n              return true;\n            });\n          },\n          onHover: (menu2, item2) => {\n            detail.previewing.set(false);\n            menu2.getSystem().getByUid(detail.uid).each((input2) => {\n              if (detail.model.populateFromBrowse) {\n                setValueFromItem(detail.model, input2, item2);\n              }\n            });\n          }\n        };\n      }\n    })]);\n    const Typeahead = composite({\n      name: \"Typeahead\",\n      configFields: schema$g(),\n      partFields: parts$b(),\n      factory: make$3\n    });\n    const wrap = (delegate) => {\n      const toCached = () => {\n        return wrap(delegate.toCached());\n      };\n      const bindFuture = (f2) => {\n        return wrap(delegate.bind((resA) => resA.fold((err) => Future.pure(Result.error(err)), (a2) => f2(a2))));\n      };\n      const bindResult = (f2) => {\n        return wrap(delegate.map((resA) => resA.bind(f2)));\n      };\n      const mapResult = (f2) => {\n        return wrap(delegate.map((resA) => resA.map(f2)));\n      };\n      const mapError2 = (f2) => {\n        return wrap(delegate.map((resA) => resA.mapError(f2)));\n      };\n      const foldResult = (whenError, whenValue) => {\n        return delegate.map((res) => res.fold(whenError, whenValue));\n      };\n      const withTimeout = (timeout, errorThunk) => {\n        return wrap(Future.nu((callback) => {\n          let timedOut = false;\n          const timer = setTimeout(() => {\n            timedOut = true;\n            callback(Result.error(errorThunk()));\n          }, timeout);\n          delegate.get((result) => {\n            if (!timedOut) {\n              clearTimeout(timer);\n              callback(result);\n            }\n          });\n        }));\n      };\n      return {\n        ...delegate,\n        toCached,\n        bindFuture,\n        bindResult,\n        mapResult,\n        mapError: mapError2,\n        foldResult,\n        withTimeout\n      };\n    };\n    const nu$1 = (worker) => {\n      return wrap(Future.nu(worker));\n    };\n    const value = (value2) => {\n      return wrap(Future.pure(Result.value(value2)));\n    };\n    const error2 = (error3) => {\n      return wrap(Future.pure(Result.error(error3)));\n    };\n    const fromResult = (result) => {\n      return wrap(Future.pure(result));\n    };\n    const fromFuture = (future) => {\n      return wrap(future.map(Result.value));\n    };\n    const fromPromise = (promise) => {\n      return nu$1((completer) => {\n        promise.then((value2) => {\n          completer(Result.value(value2));\n        }, (error3) => {\n          completer(Result.error(error3));\n        });\n      });\n    };\n    const FutureResult = {\n      nu: nu$1,\n      wrap,\n      pure: value,\n      value,\n      error: error2,\n      fromResult,\n      fromFuture,\n      fromPromise\n    };\n    const getMenuButtonApi = (component) => ({\n      isEnabled: () => !Disabling.isDisabled(component),\n      setEnabled: (state) => Disabling.set(component, !state),\n      setActive: (state) => {\n        const elm = component.element;\n        if (state) {\n          add$2(elm, \"tox-tbtn--enabled\");\n          set$9(elm, \"aria-pressed\", true);\n        } else {\n          remove$2(elm, \"tox-tbtn--enabled\");\n          remove$7(elm, \"aria-pressed\");\n        }\n      },\n      isActive: () => has2(component.element, \"tox-tbtn--enabled\")\n    });\n    const renderMenuButton = (spec, prefix2, backstage, role) => renderCommonDropdown({\n      text: spec.text,\n      icon: spec.icon,\n      tooltip: spec.tooltip,\n      role,\n      fetch: (_comp, callback) => {\n        spec.fetch((items) => {\n          callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false));\n        });\n      },\n      onSetup: spec.onSetup,\n      getApi: getMenuButtonApi,\n      columns: 1,\n      presets: \"normal\",\n      classes: [],\n      dropdownBehaviours: [Tabstopping.config({})]\n    }, prefix2, backstage.shared);\n    const getFetch = (items, getButton, backstage) => {\n      const getMenuItemAction = (item2) => (api2) => {\n        const newValue = !api2.isActive();\n        api2.setActive(newValue);\n        item2.storage.set(newValue);\n        backstage.shared.getSink().each((sink) => {\n          getButton().getOpt(sink).each((orig) => {\n            focus$3(orig.element);\n            emitWith(orig, formActionEvent, {\n              name: item2.name,\n              value: item2.storage.get()\n            });\n          });\n        });\n      };\n      const getMenuItemSetup = (item2) => (api2) => {\n        api2.setActive(item2.storage.get());\n      };\n      return (success) => {\n        success(map$2(items, (item2) => {\n          const text3 = item2.text.fold(() => ({}), (text4) => ({ text: text4 }));\n          return {\n            type: item2.type,\n            active: false,\n            ...text3,\n            onAction: getMenuItemAction(item2),\n            onSetup: getMenuItemSetup(item2)\n          };\n        }));\n      };\n    };\n    const renderCommonSpec = (spec, actionOpt, extraBehaviours = [], dom3, components2, providersBackstage) => {\n      const action = actionOpt.fold(() => ({}), (action2) => ({ action: action2 }));\n      const common = {\n        buttonBehaviours: derive$1([\n          DisablingConfigs.button(() => !spec.enabled || providersBackstage.isDisabled()),\n          receivingConfig(),\n          Tabstopping.config({}),\n          config2(\"button press\", [\n            preventDefault(\"click\"),\n            preventDefault(\"mousedown\")\n          ])\n        ].concat(extraBehaviours)),\n        eventOrder: {\n          click: [\n            \"button press\",\n            \"alloy.base.behaviour\"\n          ],\n          mousedown: [\n            \"button press\",\n            \"alloy.base.behaviour\"\n          ]\n        },\n        ...action\n      };\n      const domFinal = deepMerge(common, { dom: dom3 });\n      return deepMerge(domFinal, { components: components2 });\n    };\n    const renderIconButtonSpec = (spec, action, providersBackstage, extraBehaviours = []) => {\n      const tooltipAttributes = spec.tooltip.map((tooltip) => ({\n        \"aria-label\": providersBackstage.translate(tooltip),\n        \"title\": providersBackstage.translate(tooltip)\n      })).getOr({});\n      const dom3 = {\n        tag: \"button\",\n        classes: [\"tox-tbtn\"],\n        attributes: tooltipAttributes\n      };\n      const icon2 = spec.icon.map((iconName) => renderIconFromPack(iconName, providersBackstage.icons));\n      const components2 = componentRenderPipeline([icon2]);\n      return renderCommonSpec(spec, action, extraBehaviours, dom3, components2, providersBackstage);\n    };\n    const calculateClassesFromButtonType = (buttonType) => {\n      switch (buttonType) {\n        case \"primary\":\n          return [\"tox-button\"];\n        case \"toolbar\":\n          return [\"tox-tbtn\"];\n        case \"secondary\":\n        default:\n          return [\n            \"tox-button\",\n            \"tox-button--secondary\"\n          ];\n      }\n    };\n    const renderButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n      const translatedText = providersBackstage.translate(spec.text);\n      const icon2 = spec.icon.map((iconName) => renderIconFromPack(iconName, providersBackstage.icons));\n      const components2 = [icon2.getOrThunk(() => text$1(translatedText))];\n      const buttonType = spec.buttonType.getOr(!spec.primary && !spec.borderless ? \"secondary\" : \"primary\");\n      const baseClasses = calculateClassesFromButtonType(buttonType);\n      const classes2 = [\n        ...baseClasses,\n        ...icon2.isSome() ? [\"tox-button--icon\"] : [],\n        ...spec.borderless ? [\"tox-button--naked\"] : [],\n        ...extraClasses\n      ];\n      const dom3 = {\n        tag: \"button\",\n        classes: classes2,\n        attributes: { title: translatedText }\n      };\n      return renderCommonSpec(spec, action, extraBehaviours, dom3, components2, providersBackstage);\n    };\n    const renderButton = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n      const buttonSpec = renderButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours, extraClasses);\n      return Button.sketch(buttonSpec);\n    };\n    const getAction = (name2, buttonType) => (comp) => {\n      if (buttonType === \"custom\") {\n        emitWith(comp, formActionEvent, {\n          name: name2,\n          value: {}\n        });\n      } else if (buttonType === \"submit\") {\n        emit(comp, formSubmitEvent);\n      } else if (buttonType === \"cancel\") {\n        emit(comp, formCancelEvent);\n      } else {\n        console.error(\"Unknown button type: \", buttonType);\n      }\n    };\n    const isMenuFooterButtonSpec = (spec, buttonType) => buttonType === \"menu\";\n    const isNormalFooterButtonSpec = (spec, buttonType) => buttonType === \"custom\" || buttonType === \"cancel\" || buttonType === \"submit\";\n    const renderFooterButton = (spec, buttonType, backstage) => {\n      if (isMenuFooterButtonSpec(spec, buttonType)) {\n        const getButton = () => memButton;\n        const menuButtonSpec = spec;\n        const fixedSpec = {\n          ...spec,\n          onSetup: (api2) => {\n            api2.setEnabled(spec.enabled);\n            return noop;\n          },\n          fetch: getFetch(menuButtonSpec.items, getButton, backstage)\n        };\n        const memButton = record(renderMenuButton(fixedSpec, \"tox-tbtn\", backstage, Optional.none()));\n        return memButton.asSpec();\n      } else if (isNormalFooterButtonSpec(spec, buttonType)) {\n        const action = getAction(spec.name, buttonType);\n        const buttonSpec = {\n          ...spec,\n          borderless: false\n        };\n        return renderButton(buttonSpec, action, backstage.shared.providers, []);\n      } else {\n        console.error(\"Unknown footer button type: \", buttonType);\n      }\n    };\n    const renderDialogButton = (spec, providersBackstage) => {\n      const action = getAction(spec.name, \"custom\");\n      return renderFormField(Optional.none(), FormField.parts.field({\n        factory: Button,\n        ...renderButtonSpec(spec, Optional.some(action), providersBackstage, [\n          RepresentingConfigs.memory(\"\"),\n          ComposingConfigs.self()\n        ])\n      }));\n    };\n    const separator$1 = { type: \"separator\" };\n    const toMenuItem = (target) => ({\n      type: \"menuitem\",\n      value: target.url,\n      text: target.title,\n      meta: { attach: target.attach },\n      onAction: noop\n    });\n    const staticMenuItem = (title2, url2) => ({\n      type: \"menuitem\",\n      value: url2,\n      text: title2,\n      meta: { attach: void 0 },\n      onAction: noop\n    });\n    const toMenuItems = (targets) => map$2(targets, toMenuItem);\n    const filterLinkTargets = (type2, targets) => filter$2(targets, (target) => target.type === type2);\n    const filteredTargets = (type2, targets) => toMenuItems(filterLinkTargets(type2, targets));\n    const headerTargets = (linkInfo) => filteredTargets(\"header\", linkInfo.targets);\n    const anchorTargets = (linkInfo) => filteredTargets(\"anchor\", linkInfo.targets);\n    const anchorTargetTop = (linkInfo) => Optional.from(linkInfo.anchorTop).map((url2) => staticMenuItem(\"<top>\", url2)).toArray();\n    const anchorTargetBottom = (linkInfo) => Optional.from(linkInfo.anchorBottom).map((url2) => staticMenuItem(\"<bottom>\", url2)).toArray();\n    const historyTargets = (history) => map$2(history, (url2) => staticMenuItem(url2, url2));\n    const joinMenuLists = (items) => {\n      return foldl(items, (a2, b3) => {\n        const bothEmpty = a2.length === 0 || b3.length === 0;\n        return bothEmpty ? a2.concat(b3) : a2.concat(separator$1, b3);\n      }, []);\n    };\n    const filterByQuery = (term, menuItems) => {\n      const lowerCaseTerm = term.toLowerCase();\n      return filter$2(menuItems, (item2) => {\n        const text3 = item2.meta !== void 0 && item2.meta.text !== void 0 ? item2.meta.text : item2.text;\n        return contains$1(text3.toLowerCase(), lowerCaseTerm) || contains$1(item2.value.toLowerCase(), lowerCaseTerm);\n      });\n    };\n    const getItems = (fileType, input2, urlBackstage) => {\n      const urlInputValue = Representing.getValue(input2);\n      const term = urlInputValue.meta.text !== void 0 ? urlInputValue.meta.text : urlInputValue.value;\n      const info = urlBackstage.getLinkInformation();\n      return info.fold(() => [], (linkInfo) => {\n        const history = filterByQuery(term, historyTargets(urlBackstage.getHistory(fileType)));\n        return fileType === \"file\" ? joinMenuLists([\n          history,\n          filterByQuery(term, headerTargets(linkInfo)),\n          filterByQuery(term, flatten([\n            anchorTargetTop(linkInfo),\n            anchorTargets(linkInfo),\n            anchorTargetBottom(linkInfo)\n          ]))\n        ]) : history;\n      });\n    };\n    const errorId = generate$6(\"aria-invalid\");\n    const renderUrlInput = (spec, backstage, urlBackstage, initialData) => {\n      const providersBackstage = backstage.shared.providers;\n      const updateHistory = (component) => {\n        const urlEntry = Representing.getValue(component);\n        urlBackstage.addToHistory(urlEntry.value, spec.filetype);\n      };\n      const pField = FormField.parts.field({\n        factory: Typeahead,\n        ...initialData.map((initialData2) => ({ initialData: initialData2 })).getOr({}),\n        dismissOnBlur: true,\n        inputClasses: [\"tox-textfield\"],\n        sandboxClasses: [\"tox-dialog__popups\"],\n        inputAttributes: {\n          \"aria-errormessage\": errorId,\n          \"type\": \"url\"\n        },\n        minChars: 0,\n        responseTime: 0,\n        fetch: (input2) => {\n          const items = getItems(spec.filetype, input2, urlBackstage);\n          const tdata = build(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage, false);\n          return Future.pure(tdata);\n        },\n        getHotspot: (comp) => memUrlBox.getOpt(comp),\n        onSetValue: (comp, _newValue) => {\n          if (comp.hasConfigured(Invalidating)) {\n            Invalidating.run(comp).get(noop);\n          }\n        },\n        typeaheadBehaviours: derive$1(flatten([\n          urlBackstage.getValidationHandler().map((handler) => Invalidating.config({\n            getRoot: (comp) => parentElement(comp.element),\n            invalidClass: \"tox-control-wrap--status-invalid\",\n            notify: {\n              onInvalid: (comp, err) => {\n                memInvalidIcon.getOpt(comp).each((invalidComp) => {\n                  set$9(invalidComp.element, \"title\", providersBackstage.translate(err));\n                });\n              }\n            },\n            validator: {\n              validate: (input2) => {\n                const urlEntry = Representing.getValue(input2);\n                return FutureResult.nu((completer) => {\n                  handler({\n                    type: spec.filetype,\n                    url: urlEntry.value\n                  }, (validation) => {\n                    if (validation.status === \"invalid\") {\n                      const err = Result.error(validation.message);\n                      completer(err);\n                    } else {\n                      const val = Result.value(validation.message);\n                      completer(val);\n                    }\n                  });\n                });\n              },\n              validateOnLoad: false\n            }\n          })).toArray(),\n          [\n            Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n            Tabstopping.config({}),\n            config2(\"urlinput-events\", flatten([\n              spec.filetype === \"file\" ? [run$1(input(), (comp) => {\n                emitWith(comp, formChangeEvent, { name: spec.name });\n              })] : [],\n              [\n                run$1(change(), (comp) => {\n                  emitWith(comp, formChangeEvent, { name: spec.name });\n                  updateHistory(comp);\n                }),\n                run$1(postPaste(), (comp) => {\n                  emitWith(comp, formChangeEvent, { name: spec.name });\n                  updateHistory(comp);\n                })\n              ]\n            ]))\n          ]\n        ])),\n        eventOrder: {\n          [input()]: [\n            \"streaming\",\n            \"urlinput-events\",\n            \"invalidating\"\n          ]\n        },\n        model: {\n          getDisplayText: (itemData) => itemData.value,\n          selectsOver: false,\n          populateFromBrowse: false\n        },\n        markers: { openClass: \"tox-textfield--popup-open\" },\n        lazySink: backstage.shared.getSink,\n        parts: { menu: part(false, 1, \"normal\") },\n        onExecute: (_menu, component, _entry) => {\n          emitWith(component, formSubmitEvent, {});\n        },\n        onItemExecute: (typeahead, _sandbox, _item, _value) => {\n          updateHistory(typeahead);\n          emitWith(typeahead, formChangeEvent, { name: spec.name });\n        }\n      });\n      const pLabel = spec.label.map((label2) => renderLabel$2(label2, providersBackstage));\n      const makeIcon = (name2, errId, icon2 = name2, label2 = name2) => render$3(icon2, {\n        tag: \"div\",\n        classes: [\n          \"tox-icon\",\n          \"tox-control-wrap__status-icon-\" + name2\n        ],\n        attributes: {\n          \"title\": providersBackstage.translate(label2),\n          \"aria-live\": \"polite\",\n          ...errId.fold(() => ({}), (id) => ({ id }))\n        }\n      }, providersBackstage.icons);\n      const memInvalidIcon = record(makeIcon(\"invalid\", Optional.some(errorId), \"warning\"));\n      const memStatus = record({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-control-wrap__status-icon-wrap\"]\n        },\n        components: [memInvalidIcon.asSpec()]\n      });\n      const optUrlPicker = urlBackstage.getUrlPicker(spec.filetype);\n      const browseUrlEvent = generate$6(\"browser.url.event\");\n      const memUrlBox = record({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-control-wrap\"]\n        },\n        components: [\n          pField,\n          memStatus.asSpec()\n        ],\n        behaviours: derive$1([Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() })])\n      });\n      const memUrlPickerButton = record(renderButton({\n        name: spec.name,\n        icon: Optional.some(\"browse\"),\n        text: spec.label.getOr(\"\"),\n        enabled: spec.enabled,\n        primary: false,\n        buttonType: Optional.none(),\n        borderless: true\n      }, (component) => emit(component, browseUrlEvent), providersBackstage, [], [\"tox-browse-url\"]));\n      const controlHWrapper = () => ({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-form__controls-h-stack\"]\n        },\n        components: flatten([\n          [memUrlBox.asSpec()],\n          optUrlPicker.map(() => memUrlPickerButton.asSpec()).toArray()\n        ])\n      });\n      const openUrlPicker = (comp) => {\n        Composing.getCurrent(comp).each((field2) => {\n          const componentData = Representing.getValue(field2);\n          const urlData = {\n            fieldname: spec.name,\n            ...componentData\n          };\n          optUrlPicker.each((picker) => {\n            picker(urlData).get((chosenData) => {\n              Representing.setValue(field2, chosenData);\n              emitWith(comp, formChangeEvent, { name: spec.name });\n            });\n          });\n        });\n      };\n      return FormField.sketch({\n        dom: renderFormFieldDom(),\n        components: pLabel.toArray().concat([controlHWrapper()]),\n        fieldBehaviours: derive$1([\n          Disabling.config({\n            disabled: () => !spec.enabled || providersBackstage.isDisabled(),\n            onDisabled: (comp) => {\n              FormField.getField(comp).each(Disabling.disable);\n              memUrlPickerButton.getOpt(comp).each(Disabling.disable);\n            },\n            onEnabled: (comp) => {\n              FormField.getField(comp).each(Disabling.enable);\n              memUrlPickerButton.getOpt(comp).each(Disabling.enable);\n            }\n          }),\n          receivingConfig(),\n          config2(\"url-input-events\", [run$1(browseUrlEvent, openUrlPicker)])\n        ])\n      });\n    };\n    const renderAlertBanner = (spec, providersBackstage) => Container2.sketch({\n      dom: {\n        tag: \"div\",\n        attributes: { role: \"alert\" },\n        classes: [\n          \"tox-notification\",\n          \"tox-notification--in\",\n          `tox-notification--${spec.level}`\n        ]\n      },\n      components: [\n        {\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-notification__icon\"]\n          },\n          components: [Button.sketch({\n            dom: {\n              tag: \"button\",\n              classes: [\n                \"tox-button\",\n                \"tox-button--naked\",\n                \"tox-button--icon\"\n              ],\n              innerHtml: get$2(spec.icon, providersBackstage.icons),\n              attributes: { title: providersBackstage.translate(spec.iconTooltip) }\n            },\n            action: (comp) => {\n              emitWith(comp, formActionEvent, {\n                name: \"alert-banner\",\n                value: spec.url\n              });\n            },\n            buttonBehaviours: derive$1([addFocusableBehaviour()])\n          })]\n        },\n        {\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-notification__body\"],\n            innerHtml: providersBackstage.translate(spec.text)\n          }\n        }\n      ]\n    });\n    const set$1 = (element2, status) => {\n      element2.dom.checked = status;\n    };\n    const get$1 = (element2) => element2.dom.checked;\n    const renderCheckbox = (spec, providerBackstage, initialData) => {\n      const toggleCheckboxHandler = (comp) => {\n        comp.element.dom.click();\n        return Optional.some(true);\n      };\n      const pField = FormField.parts.field({\n        factory: { sketch: identity2 },\n        dom: {\n          tag: \"input\",\n          classes: [\"tox-checkbox__input\"],\n          attributes: { type: \"checkbox\" }\n        },\n        behaviours: derive$1([\n          ComposingConfigs.self(),\n          Disabling.config({ disabled: () => !spec.enabled || providerBackstage.isDisabled() }),\n          Tabstopping.config({}),\n          Focusing.config({}),\n          RepresentingConfigs.withElement(initialData, get$1, set$1),\n          Keying.config({\n            mode: \"special\",\n            onEnter: toggleCheckboxHandler,\n            onSpace: toggleCheckboxHandler,\n            stopSpaceKeyup: true\n          }),\n          config2(\"checkbox-events\", [run$1(change(), (component, _2) => {\n            emitWith(component, formChangeEvent, { name: spec.name });\n          })])\n        ])\n      });\n      const pLabel = FormField.parts.label({\n        dom: {\n          tag: \"span\",\n          classes: [\"tox-checkbox__label\"]\n        },\n        components: [text$1(providerBackstage.translate(spec.label))],\n        behaviours: derive$1([Unselecting.config({})])\n      });\n      const makeIcon = (className) => {\n        const iconName = className === \"checked\" ? \"selected\" : \"unselected\";\n        return render$3(iconName, {\n          tag: \"span\",\n          classes: [\n            \"tox-icon\",\n            \"tox-checkbox-icon__\" + className\n          ]\n        }, providerBackstage.icons);\n      };\n      const memIcons = record({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-checkbox__icons\"]\n        },\n        components: [\n          makeIcon(\"checked\"),\n          makeIcon(\"unchecked\")\n        ]\n      });\n      return FormField.sketch({\n        dom: {\n          tag: \"label\",\n          classes: [\"tox-checkbox\"]\n        },\n        components: [\n          pField,\n          memIcons.asSpec(),\n          pLabel\n        ],\n        fieldBehaviours: derive$1([\n          Disabling.config({\n            disabled: () => !spec.enabled || providerBackstage.isDisabled(),\n            disableClass: \"tox-checkbox--disabled\",\n            onDisabled: (comp) => {\n              FormField.getField(comp).each(Disabling.disable);\n            },\n            onEnabled: (comp) => {\n              FormField.getField(comp).each(Disabling.enable);\n            }\n          }),\n          receivingConfig()\n        ])\n      });\n    };\n    const renderHtmlPanel = (spec) => {\n      if (spec.presets === \"presentation\") {\n        return Container2.sketch({\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-form__group\"],\n            innerHtml: spec.html\n          }\n        });\n      } else {\n        return Container2.sketch({\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-form__group\"],\n            innerHtml: spec.html,\n            attributes: { role: \"document\" }\n          },\n          containerBehaviours: derive$1([\n            Tabstopping.config({}),\n            Focusing.config({})\n          ])\n        });\n      }\n    };\n    const make$2 = (render2) => {\n      return (parts2, spec, dialogData, backstage) => get$g(spec, \"name\").fold(() => render2(spec, backstage, Optional.none()), (fieldName) => parts2.field(fieldName, render2(spec, backstage, get$g(dialogData, fieldName))));\n    };\n    const makeIframe = (render2) => (parts2, spec, dialogData, backstage) => {\n      const iframeSpec = deepMerge(spec, { source: \"dynamic\" });\n      return make$2(render2)(parts2, iframeSpec, dialogData, backstage);\n    };\n    const factories = {\n      bar: make$2((spec, backstage) => renderBar(spec, backstage.shared)),\n      collection: make$2((spec, backstage, data) => renderCollection(spec, backstage.shared.providers, data)),\n      alertbanner: make$2((spec, backstage) => renderAlertBanner(spec, backstage.shared.providers)),\n      input: make$2((spec, backstage, data) => renderInput(spec, backstage.shared.providers, data)),\n      textarea: make$2((spec, backstage, data) => renderTextarea(spec, backstage.shared.providers, data)),\n      label: make$2((spec, backstage) => renderLabel$1(spec, backstage.shared)),\n      iframe: makeIframe((spec, backstage, data) => renderIFrame(spec, backstage.shared.providers, data)),\n      button: make$2((spec, backstage) => renderDialogButton(spec, backstage.shared.providers)),\n      checkbox: make$2((spec, backstage, data) => renderCheckbox(spec, backstage.shared.providers, data)),\n      colorinput: make$2((spec, backstage, data) => renderColorInput(spec, backstage.shared, backstage.colorinput, data)),\n      colorpicker: make$2((spec, backstage, data) => renderColorPicker(spec, backstage.shared.providers, data)),\n      dropzone: make$2((spec, backstage, data) => renderDropZone(spec, backstage.shared.providers, data)),\n      grid: make$2((spec, backstage) => renderGrid(spec, backstage.shared)),\n      listbox: make$2((spec, backstage, data) => renderListBox(spec, backstage, data)),\n      selectbox: make$2((spec, backstage, data) => renderSelectBox(spec, backstage.shared.providers, data)),\n      sizeinput: make$2((spec, backstage) => renderSizeInput(spec, backstage.shared.providers)),\n      slider: make$2((spec, backstage, data) => renderSlider(spec, backstage.shared.providers, data)),\n      urlinput: make$2((spec, backstage, data) => renderUrlInput(spec, backstage, backstage.urlinput, data)),\n      customeditor: make$2(renderCustomEditor),\n      htmlpanel: make$2(renderHtmlPanel),\n      imagepreview: make$2((spec, _2, data) => renderImagePreview(spec, data)),\n      table: make$2((spec, backstage) => renderTable(spec, backstage.shared.providers)),\n      panel: make$2((spec, backstage) => renderPanel(spec, backstage))\n    };\n    const noFormParts = {\n      field: (_name, spec) => spec,\n      record: constant$1([])\n    };\n    const interpretInForm = (parts2, spec, dialogData, oldBackstage) => {\n      const newBackstage = deepMerge(oldBackstage, { shared: { interpreter: (childSpec) => interpretParts(parts2, childSpec, dialogData, newBackstage) } });\n      return interpretParts(parts2, spec, dialogData, newBackstage);\n    };\n    const interpretParts = (parts2, spec, dialogData, backstage) => get$g(factories, spec.type).fold(() => {\n      console.error(`Unknown factory type \"${spec.type}\", defaulting to container: `, spec);\n      return spec;\n    }, (factory2) => factory2(parts2, spec, dialogData, backstage));\n    const interpretWithoutForm = (spec, dialogData, backstage) => interpretParts(noFormParts, spec, dialogData, backstage);\n    const labelPrefix = \"layout-inset\";\n    const westEdgeX = (anchor2) => anchor2.x;\n    const middleX = (anchor2, element2) => anchor2.x + anchor2.width / 2 - element2.width / 2;\n    const eastEdgeX = (anchor2, element2) => anchor2.x + anchor2.width - element2.width;\n    const northY = (anchor2) => anchor2.y;\n    const southY = (anchor2, element2) => anchor2.y + anchor2.height - element2.height;\n    const centreY = (anchor2, element2) => anchor2.y + anchor2.height / 2 - element2.height / 2;\n    const southwest = (anchor2, element2, bubbles) => nu$6(eastEdgeX(anchor2, element2), southY(anchor2, element2), bubbles.insetSouthwest(), northwest$3(), \"southwest\", boundsRestriction(anchor2, {\n      right: 0,\n      bottom: 3\n    }), labelPrefix);\n    const southeast = (anchor2, element2, bubbles) => nu$6(westEdgeX(anchor2), southY(anchor2, element2), bubbles.insetSoutheast(), northeast$3(), \"southeast\", boundsRestriction(anchor2, {\n      left: 1,\n      bottom: 3\n    }), labelPrefix);\n    const northwest = (anchor2, element2, bubbles) => nu$6(eastEdgeX(anchor2, element2), northY(anchor2), bubbles.insetNorthwest(), southwest$3(), \"northwest\", boundsRestriction(anchor2, {\n      right: 0,\n      top: 2\n    }), labelPrefix);\n    const northeast = (anchor2, element2, bubbles) => nu$6(westEdgeX(anchor2), northY(anchor2), bubbles.insetNortheast(), southeast$3(), \"northeast\", boundsRestriction(anchor2, {\n      left: 1,\n      top: 2\n    }), labelPrefix);\n    const north = (anchor2, element2, bubbles) => nu$6(middleX(anchor2, element2), northY(anchor2), bubbles.insetNorth(), south$3(), \"north\", boundsRestriction(anchor2, { top: 2 }), labelPrefix);\n    const south = (anchor2, element2, bubbles) => nu$6(middleX(anchor2, element2), southY(anchor2, element2), bubbles.insetSouth(), north$3(), \"south\", boundsRestriction(anchor2, { bottom: 3 }), labelPrefix);\n    const east = (anchor2, element2, bubbles) => nu$6(eastEdgeX(anchor2, element2), centreY(anchor2, element2), bubbles.insetEast(), west$3(), \"east\", boundsRestriction(anchor2, { right: 0 }), labelPrefix);\n    const west = (anchor2, element2, bubbles) => nu$6(westEdgeX(anchor2), centreY(anchor2, element2), bubbles.insetWest(), east$3(), \"west\", boundsRestriction(anchor2, { left: 1 }), labelPrefix);\n    const lookupPreserveLayout = (lastPlacement) => {\n      switch (lastPlacement) {\n        case \"north\":\n          return north;\n        case \"northeast\":\n          return northeast;\n        case \"northwest\":\n          return northwest;\n        case \"south\":\n          return south;\n        case \"southeast\":\n          return southeast;\n        case \"southwest\":\n          return southwest;\n        case \"east\":\n          return east;\n        case \"west\":\n          return west;\n      }\n    };\n    const preserve = (anchor2, element2, bubbles, placee, bounds2) => {\n      const layout2 = getPlacement(placee).map(lookupPreserveLayout).getOr(north);\n      return layout2(anchor2, element2, bubbles, placee, bounds2);\n    };\n    const lookupFlippedLayout = (lastPlacement) => {\n      switch (lastPlacement) {\n        case \"north\":\n          return south;\n        case \"northeast\":\n          return southeast;\n        case \"northwest\":\n          return southwest;\n        case \"south\":\n          return north;\n        case \"southeast\":\n          return northeast;\n        case \"southwest\":\n          return northwest;\n        case \"east\":\n          return west;\n        case \"west\":\n          return east;\n      }\n    };\n    const flip = (anchor2, element2, bubbles, placee, bounds2) => {\n      const layout2 = getPlacement(placee).map(lookupFlippedLayout).getOr(north);\n      return layout2(anchor2, element2, bubbles, placee, bounds2);\n    };\n    const bubbleAlignments$2 = {\n      valignCentre: [],\n      alignCentre: [],\n      alignLeft: [],\n      alignRight: [],\n      right: [],\n      left: [],\n      bottom: [],\n      top: []\n    };\n    const getInlineDialogAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n      const bubbleSize2 = 12;\n      const overrides = { maxHeightFunction: expandable$1() };\n      const editableAreaAnchor = () => ({\n        type: \"node\",\n        root: getContentContainer(contentAreaElement()),\n        node: Optional.from(contentAreaElement()),\n        bubble: nu$5(bubbleSize2, bubbleSize2, bubbleAlignments$2),\n        layouts: {\n          onRtl: () => [northeast],\n          onLtr: () => [northwest]\n        },\n        overrides\n      });\n      const standardAnchor = () => ({\n        type: \"hotspot\",\n        hotspot: lazyAnchorbar(),\n        bubble: nu$5(-12, bubbleSize2, bubbleAlignments$2),\n        layouts: {\n          onRtl: () => [southeast$2],\n          onLtr: () => [southwest$2]\n        },\n        overrides\n      });\n      return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n    };\n    const getBannerAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n      const editableAreaAnchor = () => ({\n        type: \"node\",\n        root: getContentContainer(contentAreaElement()),\n        node: Optional.from(contentAreaElement()),\n        layouts: {\n          onRtl: () => [north],\n          onLtr: () => [north]\n        }\n      });\n      const standardAnchor = () => ({\n        type: \"hotspot\",\n        hotspot: lazyAnchorbar(),\n        layouts: {\n          onRtl: () => [south$2],\n          onLtr: () => [south$2]\n        }\n      });\n      return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n    };\n    const getCursorAnchor = (editor, bodyElement) => () => ({\n      type: \"selection\",\n      root: bodyElement(),\n      getSelection: () => {\n        const rng = editor.selection.getRng();\n        return Optional.some(SimSelection.range(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n      }\n    });\n    const getNodeAnchor$1 = (bodyElement) => (element2) => ({\n      type: \"node\",\n      root: bodyElement(),\n      node: element2\n    });\n    const getAnchors = (editor, lazyAnchorbar, isToolbarTop) => {\n      const useFixedToolbarContainer = useFixedContainer(editor);\n      const bodyElement = () => SugarElement.fromDom(editor.getBody());\n      const contentAreaElement = () => SugarElement.fromDom(editor.getContentAreaContainer());\n      const lazyUseEditableAreaAnchor = () => useFixedToolbarContainer || !isToolbarTop();\n      return {\n        inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n        banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n        cursor: getCursorAnchor(editor, bodyElement),\n        node: getNodeAnchor$1(bodyElement)\n      };\n    };\n    const colorPicker = (editor) => (callback, value2) => {\n      const dialog = colorPickerDialog(editor);\n      dialog(callback, value2);\n    };\n    const hasCustomColors = (editor) => () => hasCustomColors$1(editor);\n    const getColors = (editor) => () => getColors$2(editor);\n    const getColorCols = (editor) => () => getColorCols$1(editor);\n    const ColorInputBackstage = (editor) => ({\n      colorPicker: colorPicker(editor),\n      hasCustomColors: hasCustomColors(editor),\n      getColors: getColors(editor),\n      getColorCols: getColorCols(editor)\n    });\n    const isDraggableModal = (editor) => () => isDraggableModal$1(editor);\n    const DialogBackstage = (editor) => ({ isDraggableModal: isDraggableModal(editor) });\n    const HeaderBackstage = (editor) => {\n      const mode = Cell(isToolbarLocationBottom(editor) ? \"bottom\" : \"top\");\n      return {\n        isPositionedAtTop: () => mode.get() === \"top\",\n        getDockingMode: mode.get,\n        setDockingMode: mode.set\n      };\n    };\n    const defaultStyleFormats = [\n      {\n        title: \"Headings\",\n        items: [\n          {\n            title: \"Heading 1\",\n            format: \"h1\"\n          },\n          {\n            title: \"Heading 2\",\n            format: \"h2\"\n          },\n          {\n            title: \"Heading 3\",\n            format: \"h3\"\n          },\n          {\n            title: \"Heading 4\",\n            format: \"h4\"\n          },\n          {\n            title: \"Heading 5\",\n            format: \"h5\"\n          },\n          {\n            title: \"Heading 6\",\n            format: \"h6\"\n          }\n        ]\n      },\n      {\n        title: \"Inline\",\n        items: [\n          {\n            title: \"Bold\",\n            format: \"bold\"\n          },\n          {\n            title: \"Italic\",\n            format: \"italic\"\n          },\n          {\n            title: \"Underline\",\n            format: \"underline\"\n          },\n          {\n            title: \"Strikethrough\",\n            format: \"strikethrough\"\n          },\n          {\n            title: \"Superscript\",\n            format: \"superscript\"\n          },\n          {\n            title: \"Subscript\",\n            format: \"subscript\"\n          },\n          {\n            title: \"Code\",\n            format: \"code\"\n          }\n        ]\n      },\n      {\n        title: \"Blocks\",\n        items: [\n          {\n            title: \"Paragraph\",\n            format: \"p\"\n          },\n          {\n            title: \"Blockquote\",\n            format: \"blockquote\"\n          },\n          {\n            title: \"Div\",\n            format: \"div\"\n          },\n          {\n            title: \"Pre\",\n            format: \"pre\"\n          }\n        ]\n      },\n      {\n        title: \"Align\",\n        items: [\n          {\n            title: \"Left\",\n            format: \"alignleft\"\n          },\n          {\n            title: \"Center\",\n            format: \"aligncenter\"\n          },\n          {\n            title: \"Right\",\n            format: \"alignright\"\n          },\n          {\n            title: \"Justify\",\n            format: \"alignjustify\"\n          }\n        ]\n      }\n    ];\n    const isNestedFormat = (format2) => has$2(format2, \"items\");\n    const isBlockFormat = (format2) => has$2(format2, \"block\");\n    const isInlineFormat = (format2) => has$2(format2, \"inline\");\n    const isSelectorFormat = (format2) => has$2(format2, \"selector\");\n    const mapFormats = (userFormats) => foldl(userFormats, (acc, fmt) => {\n      if (isNestedFormat(fmt)) {\n        const result = mapFormats(fmt.items);\n        return {\n          customFormats: acc.customFormats.concat(result.customFormats),\n          formats: acc.formats.concat([{\n            title: fmt.title,\n            items: result.formats\n          }])\n        };\n      } else if (isInlineFormat(fmt) || isBlockFormat(fmt) || isSelectorFormat(fmt)) {\n        const formatName = isString2(fmt.name) ? fmt.name : fmt.title.toLowerCase();\n        const formatNameWithPrefix = `custom-${formatName}`;\n        return {\n          customFormats: acc.customFormats.concat([{\n            name: formatNameWithPrefix,\n            format: fmt\n          }]),\n          formats: acc.formats.concat([{\n            title: fmt.title,\n            format: formatNameWithPrefix,\n            icon: fmt.icon\n          }])\n        };\n      } else {\n        return {\n          ...acc,\n          formats: acc.formats.concat(fmt)\n        };\n      }\n    }, {\n      customFormats: [],\n      formats: []\n    });\n    const registerCustomFormats = (editor, userFormats) => {\n      const result = mapFormats(userFormats);\n      const registerFormats = (customFormats) => {\n        each$1(customFormats, (fmt) => {\n          if (!editor.formatter.has(fmt.name)) {\n            editor.formatter.register(fmt.name, fmt.format);\n          }\n        });\n      };\n      if (editor.formatter) {\n        registerFormats(result.customFormats);\n      } else {\n        editor.on(\"init\", () => {\n          registerFormats(result.customFormats);\n        });\n      }\n      return result.formats;\n    };\n    const getStyleFormats = (editor) => getUserStyleFormats(editor).map((userFormats) => {\n      const registeredUserFormats = registerCustomFormats(editor, userFormats);\n      return shouldMergeStyleFormats(editor) ? defaultStyleFormats.concat(registeredUserFormats) : registeredUserFormats;\n    }).getOr(defaultStyleFormats);\n    const processBasic = (item2, isSelectedFor, getPreviewFor) => {\n      const formatterSpec = {\n        type: \"formatter\",\n        isSelected: isSelectedFor(item2.format),\n        getStylePreview: getPreviewFor(item2.format)\n      };\n      return deepMerge(item2, formatterSpec);\n    };\n    const register$a = (editor, formats, isSelectedFor, getPreviewFor) => {\n      const enrichSupported = (item2) => processBasic(item2, isSelectedFor, getPreviewFor);\n      const enrichMenu = (item2) => {\n        const submenuSpec = { type: \"submenu\" };\n        return deepMerge(item2, submenuSpec);\n      };\n      const enrichCustom = (item2) => {\n        const formatName = isString2(item2.name) ? item2.name : generate$6(item2.title);\n        const formatNameWithPrefix = `custom-${formatName}`;\n        const customSpec = {\n          type: \"formatter\",\n          format: formatNameWithPrefix,\n          isSelected: isSelectedFor(formatNameWithPrefix),\n          getStylePreview: getPreviewFor(formatNameWithPrefix)\n        };\n        const newItem = deepMerge(item2, customSpec);\n        editor.formatter.register(formatName, newItem);\n        return newItem;\n      };\n      const doEnrich = (items) => map$2(items, (item2) => {\n        const keys$1 = keys2(item2);\n        if (hasNonNullableKey(item2, \"items\")) {\n          const newItems = doEnrich(item2.items);\n          return deepMerge(enrichMenu(item2), { getStyleItems: constant$1(newItems) });\n        } else if (hasNonNullableKey(item2, \"format\")) {\n          return enrichSupported(item2);\n        } else if (keys$1.length === 1 && contains$2(keys$1, \"title\")) {\n          return deepMerge(item2, { type: \"separator\" });\n        } else {\n          return enrichCustom(item2);\n        }\n      });\n      return doEnrich(formats);\n    };\n    const init$8 = (editor) => {\n      const isSelectedFor = (format2) => () => editor.formatter.match(format2);\n      const getPreviewFor = (format2) => () => {\n        const fmt = editor.formatter.get(format2);\n        return fmt !== void 0 ? Optional.some({\n          tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || \"div\" : \"div\",\n          styles: editor.dom.parseStyle(editor.formatter.getCssText(format2))\n        }) : Optional.none();\n      };\n      const flatten2 = (fmt) => {\n        const subs2 = fmt.items;\n        return subs2 !== void 0 && subs2.length > 0 ? bind$3(subs2, flatten2) : [fmt.format];\n      };\n      const settingsFormats = Cell([]);\n      const settingsFlattenedFormats = Cell([]);\n      const eventsFormats = Cell([]);\n      const eventsFlattenedFormats = Cell([]);\n      const replaceSettings = Cell(false);\n      editor.on(\"PreInit\", (_e) => {\n        const formats = getStyleFormats(editor);\n        const enriched = register$a(editor, formats, isSelectedFor, getPreviewFor);\n        settingsFormats.set(enriched);\n        settingsFlattenedFormats.set(bind$3(enriched, flatten2));\n      });\n      editor.on(\"addStyleModifications\", (e2) => {\n        const modifications = register$a(editor, e2.items, isSelectedFor, getPreviewFor);\n        eventsFormats.set(modifications);\n        replaceSettings.set(e2.replace);\n        eventsFlattenedFormats.set(bind$3(modifications, flatten2));\n      });\n      const getData2 = () => {\n        const fromSettings = replaceSettings.get() ? [] : settingsFormats.get();\n        const fromEvents = eventsFormats.get();\n        return fromSettings.concat(fromEvents);\n      };\n      const getFlattenedKeys = () => {\n        const fromSettings = replaceSettings.get() ? [] : settingsFlattenedFormats.get();\n        const fromEvents = eventsFlattenedFormats.get();\n        return fromSettings.concat(fromEvents);\n      };\n      return {\n        getData: getData2,\n        getFlattenedKeys\n      };\n    };\n    const isElement = (node) => isNonNullable(node) && node.nodeType === 1;\n    const trim = global$1.trim;\n    const hasContentEditableState = (value2) => {\n      return (node) => {\n        if (isElement(node)) {\n          if (node.contentEditable === value2) {\n            return true;\n          }\n          if (node.getAttribute(\"data-mce-contenteditable\") === value2) {\n            return true;\n          }\n        }\n        return false;\n      };\n    };\n    const isContentEditableTrue = hasContentEditableState(\"true\");\n    const isContentEditableFalse = hasContentEditableState(\"false\");\n    const create = (type2, title2, url2, level2, attach2) => {\n      return {\n        type: type2,\n        title: title2,\n        url: url2,\n        level: level2,\n        attach: attach2\n      };\n    };\n    const isChildOfContentEditableTrue = (node) => {\n      while (node = node.parentNode) {\n        const value2 = node.contentEditable;\n        if (value2 && value2 !== \"inherit\") {\n          return isContentEditableTrue(node);\n        }\n      }\n      return false;\n    };\n    const select = (selector, root2) => {\n      return map$2(descendants(SugarElement.fromDom(root2), selector), (element2) => {\n        return element2.dom;\n      });\n    };\n    const getElementText = (elm) => {\n      return elm.innerText || elm.textContent;\n    };\n    const getOrGenerateId = (elm) => {\n      return elm.id ? elm.id : generate$6(\"h\");\n    };\n    const isAnchor = (elm) => {\n      return elm && elm.nodeName === \"A\" && (elm.id || elm.name) !== void 0;\n    };\n    const isValidAnchor = (elm) => {\n      return isAnchor(elm) && isEditable(elm);\n    };\n    const isHeader = (elm) => {\n      return elm && /^(H[1-6])$/.test(elm.nodeName);\n    };\n    const isEditable = (elm) => {\n      return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n    };\n    const isValidHeader = (elm) => {\n      return isHeader(elm) && isEditable(elm);\n    };\n    const getLevel = (elm) => {\n      return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n    };\n    const headerTarget = (elm) => {\n      const headerId = getOrGenerateId(elm);\n      const attach2 = () => {\n        elm.id = headerId;\n      };\n      return create(\"header\", getElementText(elm), \"#\" + headerId, getLevel(elm), attach2);\n    };\n    const anchorTarget = (elm) => {\n      const anchorId = elm.id || elm.name;\n      const anchorText = getElementText(elm);\n      return create(\"anchor\", anchorText ? anchorText : \"#\" + anchorId, \"#\" + anchorId, 0, noop);\n    };\n    const getHeaderTargets = (elms) => {\n      return map$2(filter$2(elms, isValidHeader), headerTarget);\n    };\n    const getAnchorTargets = (elms) => {\n      return map$2(filter$2(elms, isValidAnchor), anchorTarget);\n    };\n    const getTargetElements = (elm) => {\n      const elms = select(\"h1,h2,h3,h4,h5,h6,a:not([href])\", elm);\n      return elms;\n    };\n    const hasTitle = (target) => {\n      return trim(target.title).length > 0;\n    };\n    const find = (elm) => {\n      const elms = getTargetElements(elm);\n      return filter$2(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n    };\n    const LinkTargets = { find };\n    const STORAGE_KEY = \"tinymce-url-history\";\n    const HISTORY_LENGTH = 5;\n    const isHttpUrl = (url2) => isString2(url2) && /^https?/.test(url2);\n    const isArrayOfUrl = (a2) => isArray2(a2) && a2.length <= HISTORY_LENGTH && forall(a2, isHttpUrl);\n    const isRecordOfUrlArray = (r4) => isObject2(r4) && find$4(r4, (value2) => !isArrayOfUrl(value2)).isNone();\n    const getAllHistory = () => {\n      const unparsedHistory = global$4.getItem(STORAGE_KEY);\n      if (unparsedHistory === null) {\n        return {};\n      }\n      let history;\n      try {\n        history = JSON.parse(unparsedHistory);\n      } catch (e2) {\n        if (e2 instanceof SyntaxError) {\n          console.log(\"Local storage \" + STORAGE_KEY + \" was not valid JSON\", e2);\n          return {};\n        }\n        throw e2;\n      }\n      if (!isRecordOfUrlArray(history)) {\n        console.log(\"Local storage \" + STORAGE_KEY + \" was not valid format\", history);\n        return {};\n      }\n      return history;\n    };\n    const setAllHistory = (history) => {\n      if (!isRecordOfUrlArray(history)) {\n        throw new Error(\"Bad format for history:\\n\" + JSON.stringify(history));\n      }\n      global$4.setItem(STORAGE_KEY, JSON.stringify(history));\n    };\n    const getHistory = (fileType) => {\n      const history = getAllHistory();\n      return get$g(history, fileType).getOr([]);\n    };\n    const addToHistory = (url2, fileType) => {\n      if (!isHttpUrl(url2)) {\n        return;\n      }\n      const history = getAllHistory();\n      const items = get$g(history, fileType).getOr([]);\n      const itemsWithoutUrl = filter$2(items, (item2) => item2 !== url2);\n      history[fileType] = [url2].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH);\n      setAllHistory(history);\n    };\n    const isTruthy = (value2) => !!value2;\n    const makeMap = (value2) => map$1(global$1.makeMap(value2, /[, ]/), isTruthy);\n    const getPicker = (editor) => Optional.from(getFilePickerCallback(editor));\n    const getPickerTypes = (editor) => {\n      const optFileTypes = Optional.from(getFilePickerTypes(editor)).filter(isTruthy).map(makeMap);\n      return getPicker(editor).fold(never, (_picker) => optFileTypes.fold(always, (types2) => keys2(types2).length > 0 ? types2 : false));\n    };\n    const getPickerSetting = (editor, filetype) => {\n      const pickerTypes = getPickerTypes(editor);\n      if (isBoolean2(pickerTypes)) {\n        return pickerTypes ? getPicker(editor) : Optional.none();\n      } else {\n        return pickerTypes[filetype] ? getPicker(editor) : Optional.none();\n      }\n    };\n    const getUrlPicker = (editor, filetype) => getPickerSetting(editor, filetype).map((picker) => (entry) => Future.nu((completer) => {\n      const handler = (value2, meta2) => {\n        if (!isString2(value2)) {\n          throw new Error(\"Expected value to be string\");\n        }\n        if (meta2 !== void 0 && !isObject2(meta2)) {\n          throw new Error(\"Expected meta to be a object\");\n        }\n        const r4 = {\n          value: value2,\n          meta: meta2\n        };\n        completer(r4);\n      };\n      const meta = {\n        filetype,\n        fieldname: entry.fieldname,\n        ...Optional.from(entry.meta).getOr({})\n      };\n      picker.call(editor, handler, entry.value, meta);\n    }));\n    const getTextSetting = (value2) => Optional.from(value2).filter(isString2).getOrUndefined();\n    const getLinkInformation = (editor) => {\n      if (!useTypeaheadUrls(editor)) {\n        return Optional.none();\n      }\n      return Optional.some({\n        targets: LinkTargets.find(editor.getBody()),\n        anchorTop: getTextSetting(getAnchorTop(editor)),\n        anchorBottom: getTextSetting(getAnchorBottom(editor))\n      });\n    };\n    const getValidationHandler = (editor) => Optional.from(getFilePickerValidatorHandler(editor));\n    const UrlInputBackstage = (editor) => ({\n      getHistory,\n      addToHistory,\n      getLinkInformation: () => getLinkInformation(editor),\n      getValidationHandler: () => getValidationHandler(editor),\n      getUrlPicker: (filetype) => getUrlPicker(editor, filetype)\n    });\n    const init$7 = (lazySink, editor, lazyAnchorbar) => {\n      const contextMenuState = Cell(false);\n      const toolbar = HeaderBackstage(editor);\n      const backstage = {\n        shared: {\n          providers: {\n            icons: () => editor.ui.registry.getAll().icons,\n            menuItems: () => editor.ui.registry.getAll().menuItems,\n            translate: global$8.translate,\n            isDisabled: () => editor.mode.isReadOnly() || !editor.ui.isEnabled(),\n            getOption: editor.options.get\n          },\n          interpreter: (s2) => interpretWithoutForm(s2, {}, backstage),\n          anchors: getAnchors(editor, lazyAnchorbar, toolbar.isPositionedAtTop),\n          header: toolbar,\n          getSink: lazySink\n        },\n        urlinput: UrlInputBackstage(editor),\n        styles: init$8(editor),\n        colorinput: ColorInputBackstage(editor),\n        dialog: DialogBackstage(editor),\n        isContextMenuOpen: () => contextMenuState.get(),\n        setContextMenuState: (state) => contextMenuState.set(state)\n      };\n      return backstage;\n    };\n    const setup$b = (editor, mothership, uiMothership) => {\n      const broadcastEvent = (name2, evt) => {\n        each$1([\n          mothership,\n          uiMothership\n        ], (ship) => {\n          ship.broadcastEvent(name2, evt);\n        });\n      };\n      const broadcastOn = (channel, message) => {\n        each$1([\n          mothership,\n          uiMothership\n        ], (ship) => {\n          ship.broadcastOn([channel], message);\n        });\n      };\n      const fireDismissPopups = (evt) => broadcastOn(dismissPopups(), { target: evt.target });\n      const doc = getDocument();\n      const onTouchstart = bind(doc, \"touchstart\", fireDismissPopups);\n      const onTouchmove = bind(doc, \"touchmove\", (evt) => broadcastEvent(documentTouchmove(), evt));\n      const onTouchend = bind(doc, \"touchend\", (evt) => broadcastEvent(documentTouchend(), evt));\n      const onMousedown = bind(doc, \"mousedown\", fireDismissPopups);\n      const onMouseup = bind(doc, \"mouseup\", (evt) => {\n        if (evt.raw.button === 0) {\n          broadcastOn(mouseReleased(), { target: evt.target });\n        }\n      });\n      const onContentClick = (raw) => broadcastOn(dismissPopups(), { target: SugarElement.fromDom(raw.target) });\n      const onContentMouseup = (raw) => {\n        if (raw.button === 0) {\n          broadcastOn(mouseReleased(), { target: SugarElement.fromDom(raw.target) });\n        }\n      };\n      const onContentMousedown = () => {\n        each$1(editor.editorManager.get(), (loopEditor) => {\n          if (editor !== loopEditor) {\n            loopEditor.dispatch(\"DismissPopups\", { relatedTarget: editor });\n          }\n        });\n      };\n      const onWindowScroll = (evt) => broadcastEvent(windowScroll(), fromRawEvent(evt));\n      const onWindowResize = (evt) => {\n        broadcastOn(repositionPopups(), {});\n        broadcastEvent(windowResize(), fromRawEvent(evt));\n      };\n      const onEditorResize = () => broadcastOn(repositionPopups(), {});\n      const onEditorProgress = (evt) => {\n        if (evt.state) {\n          broadcastOn(dismissPopups(), { target: SugarElement.fromDom(editor.getContainer()) });\n        }\n      };\n      const onDismissPopups = (event) => {\n        broadcastOn(dismissPopups(), { target: SugarElement.fromDom(event.relatedTarget.getContainer()) });\n      };\n      editor.on(\"PostRender\", () => {\n        editor.on(\"click\", onContentClick);\n        editor.on(\"tap\", onContentClick);\n        editor.on(\"mouseup\", onContentMouseup);\n        editor.on(\"mousedown\", onContentMousedown);\n        editor.on(\"ScrollWindow\", onWindowScroll);\n        editor.on(\"ResizeWindow\", onWindowResize);\n        editor.on(\"ResizeEditor\", onEditorResize);\n        editor.on(\"AfterProgressState\", onEditorProgress);\n        editor.on(\"DismissPopups\", onDismissPopups);\n      });\n      editor.on(\"remove\", () => {\n        editor.off(\"click\", onContentClick);\n        editor.off(\"tap\", onContentClick);\n        editor.off(\"mouseup\", onContentMouseup);\n        editor.off(\"mousedown\", onContentMousedown);\n        editor.off(\"ScrollWindow\", onWindowScroll);\n        editor.off(\"ResizeWindow\", onWindowResize);\n        editor.off(\"ResizeEditor\", onEditorResize);\n        editor.off(\"AfterProgressState\", onEditorProgress);\n        editor.off(\"DismissPopups\", onDismissPopups);\n        onMousedown.unbind();\n        onTouchstart.unbind();\n        onTouchmove.unbind();\n        onTouchend.unbind();\n        onMouseup.unbind();\n      });\n      editor.on(\"detach\", () => {\n        detachSystem(mothership);\n        detachSystem(uiMothership);\n        mothership.destroy();\n        uiMothership.destroy();\n      });\n    };\n    const parts$a = AlloyParts;\n    const partType = PartType;\n    const schema$f = constant$1([\n      defaulted(\"shell\", false),\n      required$1(\"makeItem\"),\n      defaulted(\"setupItem\", noop),\n      SketchBehaviours.field(\"listBehaviours\", [Replacing])\n    ]);\n    const customListDetail = () => ({ behaviours: derive$1([Replacing.config({})]) });\n    const itemsPart = optional({\n      name: \"items\",\n      overrides: customListDetail\n    });\n    const parts$9 = constant$1([itemsPart]);\n    const name = constant$1(\"CustomList\");\n    const factory$d = (detail, components2, _spec, _external) => {\n      const setItems = (list2, items) => {\n        getListContainer(list2).fold(() => {\n          console.error(\"Custom List was defined to not be a shell, but no item container was specified in components\");\n          throw new Error(\"Custom List was defined to not be a shell, but no item container was specified in components\");\n        }, (container) => {\n          const itemComps = Replacing.contents(container);\n          const numListsRequired = items.length;\n          const numListsToAdd = numListsRequired - itemComps.length;\n          const itemsToAdd = numListsToAdd > 0 ? range$2(numListsToAdd, () => detail.makeItem()) : [];\n          const itemsToRemove = itemComps.slice(numListsRequired);\n          each$1(itemsToRemove, (item2) => Replacing.remove(container, item2));\n          each$1(itemsToAdd, (item2) => Replacing.append(container, item2));\n          const builtLists = Replacing.contents(container);\n          each$1(builtLists, (item2, i3) => {\n            detail.setupItem(list2, item2, items[i3], i3);\n          });\n        });\n      };\n      const extra = detail.shell ? {\n        behaviours: [Replacing.config({})],\n        components: []\n      } : {\n        behaviours: [],\n        components: components2\n      };\n      const getListContainer = (component) => detail.shell ? Optional.some(component) : getPart(component, detail, \"items\");\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: extra.components,\n        behaviours: augment(detail.listBehaviours, extra.behaviours),\n        apis: { setItems }\n      };\n    };\n    const CustomList = composite({\n      name: name(),\n      configFields: schema$f(),\n      partFields: parts$9(),\n      factory: factory$d,\n      apis: {\n        setItems: (apis, list2, items) => {\n          apis.setItems(list2, items);\n        }\n      }\n    });\n    const schema$e = constant$1([\n      required$1(\"dom\"),\n      defaulted(\"shell\", true),\n      field(\"toolbarBehaviours\", [Replacing])\n    ]);\n    const enhanceGroups = () => ({ behaviours: derive$1([Replacing.config({})]) });\n    const parts$8 = constant$1([optional({\n      name: \"groups\",\n      overrides: enhanceGroups\n    })]);\n    const factory$c = (detail, components2, _spec, _externals) => {\n      const setGroups2 = (toolbar, groups) => {\n        getGroupContainer(toolbar).fold(() => {\n          console.error(\"Toolbar was defined to not be a shell, but no groups container was specified in components\");\n          throw new Error(\"Toolbar was defined to not be a shell, but no groups container was specified in components\");\n        }, (container) => {\n          Replacing.set(container, groups);\n        });\n      };\n      const getGroupContainer = (component) => detail.shell ? Optional.some(component) : getPart(component, detail, \"groups\");\n      const extra = detail.shell ? {\n        behaviours: [Replacing.config({})],\n        components: []\n      } : {\n        behaviours: [],\n        components: components2\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: extra.components,\n        behaviours: augment(detail.toolbarBehaviours, extra.behaviours),\n        apis: { setGroups: setGroups2 },\n        domModification: { attributes: { role: \"group\" } }\n      };\n    };\n    const Toolbar2 = composite({\n      name: \"Toolbar\",\n      configFields: schema$e(),\n      partFields: parts$8(),\n      factory: factory$c,\n      apis: {\n        setGroups: (apis, toolbar, groups) => {\n          apis.setGroups(toolbar, groups);\n        }\n      }\n    });\n    const setup$a = noop;\n    const isDocked$2 = never;\n    const getBehaviours$1 = constant$1([]);\n    var StaticHeader = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      setup: setup$a,\n      isDocked: isDocked$2,\n      getBehaviours: getBehaviours$1\n    });\n    const getOffsetParent = (element2) => {\n      const isFixed = is$1(getRaw(element2, \"position\"), \"fixed\");\n      const offsetParent$1 = isFixed ? Optional.none() : offsetParent(element2);\n      return offsetParent$1.orThunk(() => {\n        const marker = SugarElement.fromTag(\"span\");\n        return parent(element2).bind((parent2) => {\n          append$2(parent2, marker);\n          const offsetParent$12 = offsetParent(marker);\n          remove$5(marker);\n          return offsetParent$12;\n        });\n      });\n    };\n    const getOrigin = (element2) => getOffsetParent(element2).map(absolute$3).getOrThunk(() => SugarPosition(0, 0));\n    const morphAdt = Adt.generate([\n      { static: [] },\n      { absolute: [\"positionCss\"] },\n      { fixed: [\"positionCss\"] }\n    ]);\n    const appear = (component, contextualInfo) => {\n      const elem = component.element;\n      add$2(elem, contextualInfo.transitionClass);\n      remove$2(elem, contextualInfo.fadeOutClass);\n      add$2(elem, contextualInfo.fadeInClass);\n      contextualInfo.onShow(component);\n    };\n    const disappear = (component, contextualInfo) => {\n      const elem = component.element;\n      add$2(elem, contextualInfo.transitionClass);\n      remove$2(elem, contextualInfo.fadeInClass);\n      add$2(elem, contextualInfo.fadeOutClass);\n      contextualInfo.onHide(component);\n    };\n    const isPartiallyVisible = (box2, viewport2) => box2.y < viewport2.bottom && box2.bottom > viewport2.y;\n    const isTopCompletelyVisible = (box2, viewport2) => box2.y >= viewport2.y;\n    const isBottomCompletelyVisible = (box2, viewport2) => box2.bottom <= viewport2.bottom;\n    const isVisibleForModes = (modes, box2, viewport2) => forall(modes, (mode) => {\n      switch (mode) {\n        case \"bottom\":\n          return isBottomCompletelyVisible(box2, viewport2);\n        case \"top\":\n          return isTopCompletelyVisible(box2, viewport2);\n      }\n    });\n    const getPrior = (elem, state) => state.getInitialPos().map((pos) => bounds(pos.bounds.x, pos.bounds.y, get$c(elem), get$d(elem)));\n    const storePrior = (elem, box2, state) => {\n      state.setInitialPos({\n        style: getAllRaw(elem),\n        position: get$e(elem, \"position\") || \"static\",\n        bounds: box2\n      });\n    };\n    const revertToOriginal = (elem, box2, state) => state.getInitialPos().bind((position2) => {\n      state.clearInitialPos();\n      switch (position2.position) {\n        case \"static\":\n          return Optional.some(morphAdt.static());\n        case \"absolute\":\n          const offsetBox = getOffsetParent(elem).map(box$1).getOrThunk(() => box$1(body()));\n          return Optional.some(morphAdt.absolute(NuPositionCss(\"absolute\", get$g(position2.style, \"left\").map((_left) => box2.x - offsetBox.x), get$g(position2.style, \"top\").map((_top) => box2.y - offsetBox.y), get$g(position2.style, \"right\").map((_right) => offsetBox.right - box2.right), get$g(position2.style, \"bottom\").map((_bottom) => offsetBox.bottom - box2.bottom))));\n        default:\n          return Optional.none();\n      }\n    });\n    const morphToOriginal = (elem, viewport2, state) => getPrior(elem, state).filter((box2) => isVisibleForModes(state.getModes(), box2, viewport2)).bind((box2) => revertToOriginal(elem, box2, state));\n    const morphToFixed = (elem, viewport2, state) => {\n      const box2 = box$1(elem);\n      if (!isVisibleForModes(state.getModes(), box2, viewport2)) {\n        storePrior(elem, box2, state);\n        const winBox = win();\n        const left2 = box2.x - winBox.x;\n        const top2 = viewport2.y - winBox.y;\n        const bottom2 = winBox.bottom - viewport2.bottom;\n        const isTop = box2.y <= viewport2.y;\n        return Optional.some(morphAdt.fixed(NuPositionCss(\"fixed\", Optional.some(left2), isTop ? Optional.some(top2) : Optional.none(), Optional.none(), !isTop ? Optional.some(bottom2) : Optional.none())));\n      } else {\n        return Optional.none();\n      }\n    };\n    const getMorph = (component, viewport2, state) => {\n      const elem = component.element;\n      const isDocked2 = is$1(getRaw(elem, \"position\"), \"fixed\");\n      return isDocked2 ? morphToOriginal(elem, viewport2, state) : morphToFixed(elem, viewport2, state);\n    };\n    const getMorphToOriginal = (component, state) => {\n      const elem = component.element;\n      return getPrior(elem, state).bind((box2) => revertToOriginal(elem, box2, state));\n    };\n    const morphToStatic = (component, config3, state) => {\n      state.setDocked(false);\n      each$1([\n        \"left\",\n        \"right\",\n        \"top\",\n        \"bottom\",\n        \"position\"\n      ], (prop) => remove$6(component.element, prop));\n      config3.onUndocked(component);\n    };\n    const morphToCoord = (component, config3, state, position2) => {\n      const isDocked2 = position2.position === \"fixed\";\n      state.setDocked(isDocked2);\n      applyPositionCss(component.element, position2);\n      const method = isDocked2 ? config3.onDocked : config3.onUndocked;\n      method(component);\n    };\n    const updateVisibility = (component, config3, state, viewport2, morphToDocked = false) => {\n      config3.contextual.each((contextInfo) => {\n        contextInfo.lazyContext(component).each((box2) => {\n          const isVisible2 = isPartiallyVisible(box2, viewport2);\n          if (isVisible2 !== state.isVisible()) {\n            state.setVisible(isVisible2);\n            if (morphToDocked && !isVisible2) {\n              add$1(component.element, [contextInfo.fadeOutClass]);\n              contextInfo.onHide(component);\n            } else {\n              const method = isVisible2 ? appear : disappear;\n              method(component, contextInfo);\n            }\n          }\n        });\n      });\n    };\n    const refreshInternal = (component, config3, state) => {\n      const viewport2 = config3.lazyViewport(component);\n      const isDocked2 = state.isDocked();\n      if (isDocked2) {\n        updateVisibility(component, config3, state, viewport2);\n      }\n      getMorph(component, viewport2, state).each((morph) => {\n        morph.fold(() => morphToStatic(component, config3, state), (position2) => morphToCoord(component, config3, state, position2), (position2) => {\n          updateVisibility(component, config3, state, viewport2, true);\n          morphToCoord(component, config3, state, position2);\n        });\n      });\n    };\n    const resetInternal = (component, config3, state) => {\n      const elem = component.element;\n      state.setDocked(false);\n      getMorphToOriginal(component, state).each((morph) => {\n        morph.fold(() => morphToStatic(component, config3, state), (position2) => morphToCoord(component, config3, state, position2), noop);\n      });\n      state.setVisible(true);\n      config3.contextual.each((contextInfo) => {\n        remove$1(elem, [\n          contextInfo.fadeInClass,\n          contextInfo.fadeOutClass,\n          contextInfo.transitionClass\n        ]);\n        contextInfo.onShow(component);\n      });\n      refresh$4(component, config3, state);\n    };\n    const refresh$4 = (component, config3, state) => {\n      if (component.getSystem().isConnected()) {\n        refreshInternal(component, config3, state);\n      }\n    };\n    const reset = (component, config3, state) => {\n      if (state.isDocked()) {\n        resetInternal(component, config3, state);\n      }\n    };\n    const isDocked$1 = (component, config3, state) => state.isDocked();\n    const setModes = (component, config3, state, modes) => state.setModes(modes);\n    const getModes = (component, config3, state) => state.getModes();\n    var DockingApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      refresh: refresh$4,\n      reset,\n      isDocked: isDocked$1,\n      getModes,\n      setModes\n    });\n    const events$5 = (dockInfo, dockState) => derive$2([\n      runOnSource(transitionend(), (component, simulatedEvent) => {\n        dockInfo.contextual.each((contextInfo) => {\n          if (has2(component.element, contextInfo.transitionClass)) {\n            remove$1(component.element, [\n              contextInfo.transitionClass,\n              contextInfo.fadeInClass\n            ]);\n            const notify = dockState.isVisible() ? contextInfo.onShown : contextInfo.onHidden;\n            notify(component);\n          }\n          simulatedEvent.stop();\n        });\n      }),\n      run$1(windowScroll(), (component, _2) => {\n        refresh$4(component, dockInfo, dockState);\n      }),\n      run$1(windowResize(), (component, _2) => {\n        reset(component, dockInfo, dockState);\n      })\n    ]);\n    var ActiveDocking = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      events: events$5\n    });\n    var DockingSchema = [\n      optionObjOf(\"contextual\", [\n        requiredString(\"fadeInClass\"),\n        requiredString(\"fadeOutClass\"),\n        requiredString(\"transitionClass\"),\n        requiredFunction(\"lazyContext\"),\n        onHandler(\"onShow\"),\n        onHandler(\"onShown\"),\n        onHandler(\"onHide\"),\n        onHandler(\"onHidden\")\n      ]),\n      defaultedFunction(\"lazyViewport\", win),\n      defaultedArrayOf(\"modes\", [\n        \"top\",\n        \"bottom\"\n      ], string2),\n      onHandler(\"onDocked\"),\n      onHandler(\"onUndocked\")\n    ];\n    const init$6 = (spec) => {\n      const docked = Cell(false);\n      const visible = Cell(true);\n      const initialBounds = value$2();\n      const modes = Cell(spec.modes);\n      const readState = () => `docked:  ${docked.get()}, visible: ${visible.get()}, modes: ${modes.get().join(\",\")}`;\n      return nu$8({\n        isDocked: docked.get,\n        setDocked: docked.set,\n        getInitialPos: initialBounds.get,\n        setInitialPos: initialBounds.set,\n        clearInitialPos: initialBounds.clear,\n        isVisible: visible.get,\n        setVisible: visible.set,\n        getModes: modes.get,\n        setModes: modes.set,\n        readState\n      });\n    };\n    var DockingState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      init: init$6\n    });\n    const Docking = create$3({\n      fields: DockingSchema,\n      name: \"docking\",\n      active: ActiveDocking,\n      apis: DockingApis,\n      state: DockingState\n    });\n    const toolbarHeightChange = constant$1(generate$6(\"toolbar-height-change\"));\n    const visibility = {\n      fadeInClass: \"tox-editor-dock-fadein\",\n      fadeOutClass: \"tox-editor-dock-fadeout\",\n      transitionClass: \"tox-editor-dock-transition\"\n    };\n    const editorStickyOnClass = \"tox-tinymce--toolbar-sticky-on\";\n    const editorStickyOffClass = \"tox-tinymce--toolbar-sticky-off\";\n    const scrollFromBehindHeader = (e2, containerHeader) => {\n      const doc = owner$4(containerHeader);\n      const viewHeight = doc.dom.defaultView.innerHeight;\n      const scrollPos = get$b(doc);\n      const markerElement = SugarElement.fromDom(e2.elm);\n      const markerPos = absolute$2(markerElement);\n      const markerHeight = get$d(markerElement);\n      const markerTop = markerPos.y;\n      const markerBottom = markerTop + markerHeight;\n      const editorHeaderPos = absolute$3(containerHeader);\n      const editorHeaderHeight = get$d(containerHeader);\n      const editorHeaderTop = editorHeaderPos.top;\n      const editorHeaderBottom = editorHeaderTop + editorHeaderHeight;\n      const editorHeaderDockedAtTop = Math.abs(editorHeaderTop - scrollPos.top) < 2;\n      const editorHeaderDockedAtBottom = Math.abs(editorHeaderBottom - (scrollPos.top + viewHeight)) < 2;\n      if (editorHeaderDockedAtTop && markerTop < editorHeaderBottom) {\n        to(scrollPos.left, markerTop - editorHeaderHeight, doc);\n      } else if (editorHeaderDockedAtBottom && markerBottom > editorHeaderTop) {\n        const y2 = markerTop - viewHeight + markerHeight + editorHeaderHeight;\n        to(scrollPos.left, y2, doc);\n      }\n    };\n    const isDockedMode = (header, mode) => contains$2(Docking.getModes(header), mode);\n    const updateIframeContentFlow = (header) => {\n      const getOccupiedHeight = (elm2) => getOuter$2(elm2) + (parseInt(get$e(elm2, \"margin-top\"), 10) || 0) + (parseInt(get$e(elm2, \"margin-bottom\"), 10) || 0);\n      const elm = header.element;\n      parent(elm).each((parentElem) => {\n        const padding = \"padding-\" + Docking.getModes(header)[0];\n        if (Docking.isDocked(header)) {\n          const parentWidth = get$c(parentElem);\n          set$8(elm, \"width\", parentWidth + \"px\");\n          set$8(parentElem, padding, getOccupiedHeight(elm) + \"px\");\n        } else {\n          remove$6(elm, \"width\");\n          remove$6(parentElem, padding);\n        }\n      });\n    };\n    const updateSinkVisibility = (sinkElem, visible) => {\n      if (visible) {\n        remove$2(sinkElem, visibility.fadeOutClass);\n        add$1(sinkElem, [\n          visibility.transitionClass,\n          visibility.fadeInClass\n        ]);\n      } else {\n        remove$2(sinkElem, visibility.fadeInClass);\n        add$1(sinkElem, [\n          visibility.fadeOutClass,\n          visibility.transitionClass\n        ]);\n      }\n    };\n    const updateEditorClasses = (editor, docked) => {\n      const editorContainer = SugarElement.fromDom(editor.getContainer());\n      if (docked) {\n        add$2(editorContainer, editorStickyOnClass);\n        remove$2(editorContainer, editorStickyOffClass);\n      } else {\n        add$2(editorContainer, editorStickyOffClass);\n        remove$2(editorContainer, editorStickyOnClass);\n      }\n    };\n    const restoreFocus = (headerElem, focusedElem) => {\n      const ownerDoc = owner$4(focusedElem);\n      active$1(ownerDoc).filter((activeElm) => !eq2(focusedElem, activeElm)).filter((activeElm) => eq2(activeElm, SugarElement.fromDom(ownerDoc.dom.body)) || contains2(headerElem, activeElm)).each(() => focus$3(focusedElem));\n    };\n    const findFocusedElem = (rootElm, lazySink) => search(rootElm).orThunk(() => lazySink().toOptional().bind((sink) => search(sink.element)));\n    const setup$9 = (editor, sharedBackstage, lazyHeader) => {\n      if (!editor.inline) {\n        if (!sharedBackstage.header.isPositionedAtTop()) {\n          editor.on(\"ResizeEditor\", () => {\n            lazyHeader().each(Docking.reset);\n          });\n        }\n        editor.on(\"ResizeWindow ResizeEditor\", () => {\n          lazyHeader().each(updateIframeContentFlow);\n        });\n        editor.on(\"SkinLoaded\", () => {\n          lazyHeader().each((comp) => {\n            Docking.isDocked(comp) ? Docking.reset(comp) : Docking.refresh(comp);\n          });\n        });\n        editor.on(\"FullscreenStateChanged\", () => {\n          lazyHeader().each(Docking.reset);\n        });\n      }\n      editor.on(\"AfterScrollIntoView\", (e2) => {\n        lazyHeader().each((header) => {\n          Docking.refresh(header);\n          const headerElem = header.element;\n          if (isVisible(headerElem)) {\n            scrollFromBehindHeader(e2, headerElem);\n          }\n        });\n      });\n      editor.on(\"PostRender\", () => {\n        updateEditorClasses(editor, false);\n      });\n    };\n    const isDocked = (lazyHeader) => lazyHeader().map(Docking.isDocked).getOr(false);\n    const getIframeBehaviours = () => [Receiving.config({ channels: { [toolbarHeightChange()]: { onReceive: updateIframeContentFlow } } })];\n    const getBehaviours = (editor, sharedBackstage) => {\n      const focusedElm = value$2();\n      const lazySink = sharedBackstage.getSink;\n      const runOnSinkElement = (f2) => {\n        lazySink().each((sink) => f2(sink.element));\n      };\n      const onDockingSwitch = (comp) => {\n        if (!editor.inline) {\n          updateIframeContentFlow(comp);\n        }\n        updateEditorClasses(editor, Docking.isDocked(comp));\n        comp.getSystem().broadcastOn([repositionPopups()], {});\n        lazySink().each((sink) => sink.getSystem().broadcastOn([repositionPopups()], {}));\n      };\n      const additionalBehaviours = editor.inline ? [] : getIframeBehaviours();\n      return [\n        Focusing.config({}),\n        Docking.config({\n          contextual: {\n            lazyContext: (comp) => {\n              const headerHeight = getOuter$2(comp.element);\n              const container = editor.inline ? editor.getContentAreaContainer() : editor.getContainer();\n              const box2 = box$1(SugarElement.fromDom(container));\n              const boxHeight = box2.height - headerHeight;\n              const topBound = box2.y + (isDockedMode(comp, \"top\") ? 0 : headerHeight);\n              return Optional.some(bounds(box2.x, topBound, box2.width, boxHeight));\n            },\n            onShow: () => {\n              runOnSinkElement((elem) => updateSinkVisibility(elem, true));\n            },\n            onShown: (comp) => {\n              runOnSinkElement((elem) => remove$1(elem, [\n                visibility.transitionClass,\n                visibility.fadeInClass\n              ]));\n              focusedElm.get().each((elem) => {\n                restoreFocus(comp.element, elem);\n                focusedElm.clear();\n              });\n            },\n            onHide: (comp) => {\n              findFocusedElem(comp.element, lazySink).fold(focusedElm.clear, focusedElm.set);\n              runOnSinkElement((elem) => updateSinkVisibility(elem, false));\n            },\n            onHidden: () => {\n              runOnSinkElement((elem) => remove$1(elem, [visibility.transitionClass]));\n            },\n            ...visibility\n          },\n          lazyViewport: (comp) => {\n            const win$1 = win();\n            const offset2 = getStickyToolbarOffset(editor);\n            const top2 = win$1.y + (isDockedMode(comp, \"top\") ? offset2 : 0);\n            const height2 = win$1.height - (isDockedMode(comp, \"bottom\") ? offset2 : 0);\n            return bounds(win$1.x, top2, win$1.width, height2);\n          },\n          modes: [sharedBackstage.header.getDockingMode()],\n          onDocked: onDockingSwitch,\n          onUndocked: onDockingSwitch\n        }),\n        ...additionalBehaviours\n      ];\n    };\n    var StickyHeader = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      setup: setup$9,\n      isDocked,\n      getBehaviours\n    });\n    const renderHeader = (spec) => {\n      const editor = spec.editor;\n      const getBehaviours$22 = spec.sticky ? getBehaviours : getBehaviours$1;\n      return {\n        uid: spec.uid,\n        dom: spec.dom,\n        components: spec.components,\n        behaviours: derive$1(getBehaviours$22(editor, spec.sharedBackstage))\n      };\n    };\n    const groupToolbarButtonSchema = objOf([\n      type,\n      requiredOf(\"items\", oneOf([\n        arrOfObj([\n          name$1,\n          requiredArrayOf(\"items\", string2)\n        ]),\n        string2\n      ]))\n    ].concat(baseToolbarButtonFields));\n    const createGroupToolbarButton = (spec) => asRaw(\"GroupToolbarButton\", groupToolbarButtonSchema, spec);\n    const baseMenuButtonFields = [\n      optionString(\"text\"),\n      optionString(\"tooltip\"),\n      optionString(\"icon\"),\n      requiredFunction(\"fetch\"),\n      defaultedFunction(\"onSetup\", () => noop)\n    ];\n    const MenuButtonSchema = objOf([\n      type,\n      ...baseMenuButtonFields\n    ]);\n    const createMenuButton = (spec) => asRaw(\"menubutton\", MenuButtonSchema, spec);\n    const splitButtonSchema = objOf([\n      type,\n      optionalTooltip,\n      optionalIcon,\n      optionalText,\n      optionalSelect,\n      fetch$1,\n      onSetup,\n      defaultedStringEnum(\"presets\", \"normal\", [\n        \"normal\",\n        \"color\",\n        \"listpreview\"\n      ]),\n      defaultedColumns(1),\n      onAction,\n      onItemAction\n    ]);\n    const createSplitButton = (spec) => asRaw(\"SplitButton\", splitButtonSchema, spec);\n    const factory$b = (detail, spec) => {\n      const setMenus = (comp, menus) => {\n        const newMenus = map$2(menus, (m2) => {\n          const buttonSpec = {\n            type: \"menubutton\",\n            text: m2.text,\n            fetch: (callback) => {\n              callback(m2.getItems());\n            }\n          };\n          const internal = createMenuButton(buttonSpec).mapError((errInfo) => formatError(errInfo)).getOrDie();\n          return renderMenuButton(internal, \"tox-mbtn\", spec.backstage, Optional.some(\"menuitem\"));\n        });\n        Replacing.set(comp, newMenus);\n      };\n      const apis = {\n        focus: Keying.focusIn,\n        setMenus\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: [],\n        behaviours: derive$1([\n          Replacing.config({}),\n          config2(\"menubar-events\", [\n            runOnAttached((component) => {\n              detail.onSetup(component);\n            }),\n            run$1(mouseover(), (comp, se) => {\n              descendant(comp.element, \".tox-mbtn--active\").each((activeButton) => {\n                closest$1(se.event.target, \".tox-mbtn\").each((hoveredButton) => {\n                  if (!eq2(activeButton, hoveredButton)) {\n                    comp.getSystem().getByDom(activeButton).each((activeComp) => {\n                      comp.getSystem().getByDom(hoveredButton).each((hoveredComp) => {\n                        Dropdown.expand(hoveredComp);\n                        Dropdown.close(activeComp);\n                        Focusing.focus(hoveredComp);\n                      });\n                    });\n                  }\n                });\n              });\n            }),\n            run$1(focusShifted(), (comp, se) => {\n              se.event.prevFocus.bind((prev) => comp.getSystem().getByDom(prev).toOptional()).each((prev) => {\n                se.event.newFocus.bind((nu2) => comp.getSystem().getByDom(nu2).toOptional()).each((nu2) => {\n                  if (Dropdown.isOpen(prev)) {\n                    Dropdown.expand(nu2);\n                    Dropdown.close(prev);\n                  }\n                });\n              });\n            })\n          ]),\n          Keying.config({\n            mode: \"flow\",\n            selector: \".tox-mbtn\",\n            onEscape: (comp) => {\n              detail.onEscape(comp);\n              return Optional.some(true);\n            }\n          }),\n          Tabstopping.config({})\n        ]),\n        apis,\n        domModification: { attributes: { role: \"menubar\" } }\n      };\n    };\n    var SilverMenubar = single({\n      factory: factory$b,\n      name: \"silver.Menubar\",\n      configFields: [\n        required$1(\"dom\"),\n        required$1(\"uid\"),\n        required$1(\"onEscape\"),\n        required$1(\"backstage\"),\n        defaulted(\"onSetup\", noop)\n      ],\n      apis: {\n        focus: (apis, comp) => {\n          apis.focus(comp);\n        },\n        setMenus: (apis, comp, menus) => {\n          apis.setMenus(comp, menus);\n        }\n      }\n    });\n    const getAnimationRoot = (component, slideConfig) => slideConfig.getAnimationRoot.fold(() => component.element, (get2) => get2(component));\n    const getDimensionProperty = (slideConfig) => slideConfig.dimension.property;\n    const getDimension = (slideConfig, elem) => slideConfig.dimension.getDimension(elem);\n    const disableTransitions = (component, slideConfig) => {\n      const root2 = getAnimationRoot(component, slideConfig);\n      remove$1(root2, [\n        slideConfig.shrinkingClass,\n        slideConfig.growingClass\n      ]);\n    };\n    const setShrunk = (component, slideConfig) => {\n      remove$2(component.element, slideConfig.openClass);\n      add$2(component.element, slideConfig.closedClass);\n      set$8(component.element, getDimensionProperty(slideConfig), \"0px\");\n      reflow(component.element);\n    };\n    const setGrown = (component, slideConfig) => {\n      remove$2(component.element, slideConfig.closedClass);\n      add$2(component.element, slideConfig.openClass);\n      remove$6(component.element, getDimensionProperty(slideConfig));\n    };\n    const doImmediateShrink = (component, slideConfig, slideState, _calculatedSize) => {\n      slideState.setCollapsed();\n      set$8(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n      reflow(component.element);\n      disableTransitions(component, slideConfig);\n      setShrunk(component, slideConfig);\n      slideConfig.onStartShrink(component);\n      slideConfig.onShrunk(component);\n    };\n    const doStartShrink = (component, slideConfig, slideState, calculatedSize) => {\n      const size = calculatedSize.getOrThunk(() => getDimension(slideConfig, component.element));\n      slideState.setCollapsed();\n      set$8(component.element, getDimensionProperty(slideConfig), size);\n      reflow(component.element);\n      const root2 = getAnimationRoot(component, slideConfig);\n      remove$2(root2, slideConfig.growingClass);\n      add$2(root2, slideConfig.shrinkingClass);\n      setShrunk(component, slideConfig);\n      slideConfig.onStartShrink(component);\n    };\n    const doStartSmartShrink = (component, slideConfig, slideState) => {\n      const size = getDimension(slideConfig, component.element);\n      const shrinker = size === \"0px\" ? doImmediateShrink : doStartShrink;\n      shrinker(component, slideConfig, slideState, Optional.some(size));\n    };\n    const doStartGrow = (component, slideConfig, slideState) => {\n      const root2 = getAnimationRoot(component, slideConfig);\n      const wasShrinking = has2(root2, slideConfig.shrinkingClass);\n      const beforeSize = getDimension(slideConfig, component.element);\n      setGrown(component, slideConfig);\n      const fullSize = getDimension(slideConfig, component.element);\n      const startPartialGrow = () => {\n        set$8(component.element, getDimensionProperty(slideConfig), beforeSize);\n        reflow(component.element);\n      };\n      const startCompleteGrow = () => {\n        setShrunk(component, slideConfig);\n      };\n      const setStartSize = wasShrinking ? startPartialGrow : startCompleteGrow;\n      setStartSize();\n      remove$2(root2, slideConfig.shrinkingClass);\n      add$2(root2, slideConfig.growingClass);\n      setGrown(component, slideConfig);\n      set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n      slideState.setExpanded();\n      slideConfig.onStartGrow(component);\n    };\n    const refresh$3 = (component, slideConfig, slideState) => {\n      if (slideState.isExpanded()) {\n        remove$6(component.element, getDimensionProperty(slideConfig));\n        const fullSize = getDimension(slideConfig, component.element);\n        set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n      }\n    };\n    const grow = (component, slideConfig, slideState) => {\n      if (!slideState.isExpanded()) {\n        doStartGrow(component, slideConfig, slideState);\n      }\n    };\n    const shrink = (component, slideConfig, slideState) => {\n      if (slideState.isExpanded()) {\n        doStartSmartShrink(component, slideConfig, slideState);\n      }\n    };\n    const immediateShrink = (component, slideConfig, slideState) => {\n      if (slideState.isExpanded()) {\n        doImmediateShrink(component, slideConfig, slideState);\n      }\n    };\n    const hasGrown = (component, slideConfig, slideState) => slideState.isExpanded();\n    const hasShrunk = (component, slideConfig, slideState) => slideState.isCollapsed();\n    const isGrowing = (component, slideConfig, _slideState) => {\n      const root2 = getAnimationRoot(component, slideConfig);\n      return has2(root2, slideConfig.growingClass) === true;\n    };\n    const isShrinking = (component, slideConfig, _slideState) => {\n      const root2 = getAnimationRoot(component, slideConfig);\n      return has2(root2, slideConfig.shrinkingClass) === true;\n    };\n    const isTransitioning = (component, slideConfig, slideState) => isGrowing(component, slideConfig) || isShrinking(component, slideConfig);\n    const toggleGrow = (component, slideConfig, slideState) => {\n      const f2 = slideState.isExpanded() ? doStartSmartShrink : doStartGrow;\n      f2(component, slideConfig, slideState);\n    };\n    var SlidingApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      refresh: refresh$3,\n      grow,\n      shrink,\n      immediateShrink,\n      hasGrown,\n      hasShrunk,\n      isGrowing,\n      isShrinking,\n      isTransitioning,\n      toggleGrow,\n      disableTransitions\n    });\n    const exhibit = (base3, slideConfig, _slideState) => {\n      const expanded = slideConfig.expanded;\n      return expanded ? nu$7({\n        classes: [slideConfig.openClass],\n        styles: {}\n      }) : nu$7({\n        classes: [slideConfig.closedClass],\n        styles: wrap$1(slideConfig.dimension.property, \"0px\")\n      });\n    };\n    const events$4 = (slideConfig, slideState) => derive$2([runOnSource(transitionend(), (component, simulatedEvent) => {\n      const raw = simulatedEvent.event.raw;\n      if (raw.propertyName === slideConfig.dimension.property) {\n        disableTransitions(component, slideConfig);\n        if (slideState.isExpanded()) {\n          remove$6(component.element, slideConfig.dimension.property);\n        }\n        const notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk;\n        notify(component);\n      }\n    })]);\n    var ActiveSliding = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      exhibit,\n      events: events$4\n    });\n    var SlidingSchema = [\n      required$1(\"closedClass\"),\n      required$1(\"openClass\"),\n      required$1(\"shrinkingClass\"),\n      required$1(\"growingClass\"),\n      option$3(\"getAnimationRoot\"),\n      onHandler(\"onShrunk\"),\n      onHandler(\"onStartShrink\"),\n      onHandler(\"onGrown\"),\n      onHandler(\"onStartGrow\"),\n      defaulted(\"expanded\", false),\n      requiredOf(\"dimension\", choose$1(\"property\", {\n        width: [\n          output$1(\"property\", \"width\"),\n          output$1(\"getDimension\", (elem) => get$c(elem) + \"px\")\n        ],\n        height: [\n          output$1(\"property\", \"height\"),\n          output$1(\"getDimension\", (elem) => get$d(elem) + \"px\")\n        ]\n      }))\n    ];\n    const init$5 = (spec) => {\n      const state = Cell(spec.expanded);\n      const readState = () => \"expanded: \" + state.get();\n      return nu$8({\n        isExpanded: () => state.get() === true,\n        isCollapsed: () => state.get() === false,\n        setCollapsed: curry(state.set, false),\n        setExpanded: curry(state.set, true),\n        readState\n      });\n    };\n    var SlidingState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      init: init$5\n    });\n    const Sliding = create$3({\n      fields: SlidingSchema,\n      name: \"sliding\",\n      active: ActiveSliding,\n      apis: SlidingApis,\n      state: SlidingState\n    });\n    const owner = \"container\";\n    const schema$d = [field(\"slotBehaviours\", [])];\n    const getPartName = (name2) => \"<alloy.field.\" + name2 + \">\";\n    const sketch = (sSpec) => {\n      const parts2 = (() => {\n        const record2 = [];\n        const slot = (name2, config3) => {\n          record2.push(name2);\n          return generateOne$1(owner, getPartName(name2), config3);\n        };\n        return {\n          slot,\n          record: constant$1(record2)\n        };\n      })();\n      const spec = sSpec(parts2);\n      const partNames = parts2.record();\n      const fieldParts = map$2(partNames, (n3) => required({\n        name: n3,\n        pname: getPartName(n3)\n      }));\n      return composite$1(owner, schema$d, fieldParts, make$1, spec);\n    };\n    const make$1 = (detail, components2) => {\n      const getSlotNames = (_2) => getAllPartNames(detail);\n      const getSlot = (container, key) => getPart(container, detail, key);\n      const onSlot = (f2, def) => (container, key) => getPart(container, detail, key).map((slot) => f2(slot, key)).getOr(def);\n      const onSlots = (f2) => (container, keys3) => {\n        each$1(keys3, (key) => f2(container, key));\n      };\n      const doShowing = (comp, _key) => get$f(comp.element, \"aria-hidden\") !== \"true\";\n      const doShow = (comp, key) => {\n        if (!doShowing(comp)) {\n          const element2 = comp.element;\n          remove$6(element2, \"display\");\n          remove$7(element2, \"aria-hidden\");\n          emitWith(comp, slotVisibility(), {\n            name: key,\n            visible: true\n          });\n        }\n      };\n      const doHide = (comp, key) => {\n        if (doShowing(comp)) {\n          const element2 = comp.element;\n          set$8(element2, \"display\", \"none\");\n          set$9(element2, \"aria-hidden\", \"true\");\n          emitWith(comp, slotVisibility(), {\n            name: key,\n            visible: false\n          });\n        }\n      };\n      const isShowing = onSlot(doShowing, false);\n      const hideSlot = onSlot(doHide);\n      const hideSlots = onSlots(hideSlot);\n      const hideAllSlots = (container) => hideSlots(container, getSlotNames());\n      const showSlot = onSlot(doShow);\n      const apis = {\n        getSlotNames,\n        getSlot,\n        isShowing,\n        hideSlot,\n        hideAllSlots,\n        showSlot\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: components2,\n        behaviours: get$3(detail.slotBehaviours),\n        apis\n      };\n    };\n    const slotApis = map$1({\n      getSlotNames: (apis, c2) => apis.getSlotNames(c2),\n      getSlot: (apis, c2, key) => apis.getSlot(c2, key),\n      isShowing: (apis, c2, key) => apis.isShowing(c2, key),\n      hideSlot: (apis, c2, key) => apis.hideSlot(c2, key),\n      hideAllSlots: (apis, c2) => apis.hideAllSlots(c2),\n      showSlot: (apis, c2, key) => apis.showSlot(c2, key)\n    }, (value2) => makeApi(value2));\n    const SlotContainer = {\n      ...slotApis,\n      ...{ sketch }\n    };\n    const sidebarSchema = objOf([\n      optionalIcon,\n      optionalTooltip,\n      defaultedFunction(\"onShow\", noop),\n      defaultedFunction(\"onHide\", noop),\n      onSetup\n    ]);\n    const createSidebar = (spec) => asRaw(\"sidebar\", sidebarSchema, spec);\n    const setup$8 = (editor) => {\n      const { sidebars } = editor.ui.registry.getAll();\n      each$1(keys2(sidebars), (name2) => {\n        const spec = sidebars[name2];\n        const isActive = () => is$1(Optional.from(editor.queryCommandValue(\"ToggleSidebar\")), name2);\n        editor.ui.registry.addToggleButton(name2, {\n          icon: spec.icon,\n          tooltip: spec.tooltip,\n          onAction: (buttonApi) => {\n            editor.execCommand(\"ToggleSidebar\", false, name2);\n            buttonApi.setActive(isActive());\n          },\n          onSetup: (buttonApi) => {\n            const handleToggle = () => buttonApi.setActive(isActive());\n            editor.on(\"ToggleSidebar\", handleToggle);\n            return () => {\n              editor.off(\"ToggleSidebar\", handleToggle);\n            };\n          }\n        });\n      });\n    };\n    const getApi = (comp) => ({ element: () => comp.element.dom });\n    const makePanels = (parts2, panelConfigs) => {\n      const specs = map$2(keys2(panelConfigs), (name2) => {\n        const spec = panelConfigs[name2];\n        const bridged = getOrDie(createSidebar(spec));\n        return {\n          name: name2,\n          getApi,\n          onSetup: bridged.onSetup,\n          onShow: bridged.onShow,\n          onHide: bridged.onHide\n        };\n      });\n      return map$2(specs, (spec) => {\n        const editorOffCell = Cell(noop);\n        return parts2.slot(spec.name, {\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-sidebar__pane\"]\n          },\n          behaviours: SimpleBehaviours.unnamedEvents([\n            onControlAttached(spec, editorOffCell),\n            onControlDetached(spec, editorOffCell),\n            run$1(slotVisibility(), (sidepanel, se) => {\n              const data = se.event;\n              const optSidePanelSpec = find$5(specs, (config3) => config3.name === data.name);\n              optSidePanelSpec.each((sidePanelSpec) => {\n                const handler = data.visible ? sidePanelSpec.onShow : sidePanelSpec.onHide;\n                handler(sidePanelSpec.getApi(sidepanel));\n              });\n            })\n          ])\n        });\n      });\n    };\n    const makeSidebar = (panelConfigs) => SlotContainer.sketch((parts2) => ({\n      dom: {\n        tag: \"div\",\n        classes: [\"tox-sidebar__pane-container\"]\n      },\n      components: makePanels(parts2, panelConfigs),\n      slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached((slotContainer) => SlotContainer.hideAllSlots(slotContainer))])\n    }));\n    const setSidebar = (sidebar, panelConfigs) => {\n      const optSlider = Composing.getCurrent(sidebar);\n      optSlider.each((slider) => Replacing.set(slider, [makeSidebar(panelConfigs)]));\n    };\n    const toggleSidebar = (sidebar, name2) => {\n      const optSlider = Composing.getCurrent(sidebar);\n      optSlider.each((slider) => {\n        const optSlotContainer = Composing.getCurrent(slider);\n        optSlotContainer.each((slotContainer) => {\n          if (Sliding.hasGrown(slider)) {\n            if (SlotContainer.isShowing(slotContainer, name2)) {\n              Sliding.shrink(slider);\n            } else {\n              SlotContainer.hideAllSlots(slotContainer);\n              SlotContainer.showSlot(slotContainer, name2);\n            }\n          } else {\n            SlotContainer.hideAllSlots(slotContainer);\n            SlotContainer.showSlot(slotContainer, name2);\n            Sliding.grow(slider);\n          }\n        });\n      });\n    };\n    const whichSidebar = (sidebar) => {\n      const optSlider = Composing.getCurrent(sidebar);\n      return optSlider.bind((slider) => {\n        const sidebarOpen = Sliding.isGrowing(slider) || Sliding.hasGrown(slider);\n        if (sidebarOpen) {\n          const optSlotContainer = Composing.getCurrent(slider);\n          return optSlotContainer.bind((slotContainer) => find$5(SlotContainer.getSlotNames(slotContainer), (name2) => SlotContainer.isShowing(slotContainer, name2)));\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n    const fixSize = generate$6(\"FixSizeEvent\");\n    const autoSize = generate$6(\"AutoSizeEvent\");\n    const renderSidebar = (spec) => ({\n      uid: spec.uid,\n      dom: {\n        tag: \"div\",\n        classes: [\"tox-sidebar\"],\n        attributes: { role: \"complementary\" }\n      },\n      components: [{\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-sidebar__slider\"]\n        },\n        components: [],\n        behaviours: derive$1([\n          Tabstopping.config({}),\n          Focusing.config({}),\n          Sliding.config({\n            dimension: { property: \"width\" },\n            closedClass: \"tox-sidebar--sliding-closed\",\n            openClass: \"tox-sidebar--sliding-open\",\n            shrinkingClass: \"tox-sidebar--sliding-shrinking\",\n            growingClass: \"tox-sidebar--sliding-growing\",\n            onShrunk: (slider) => {\n              const optSlotContainer = Composing.getCurrent(slider);\n              optSlotContainer.each(SlotContainer.hideAllSlots);\n              emit(slider, autoSize);\n            },\n            onGrown: (slider) => {\n              emit(slider, autoSize);\n            },\n            onStartGrow: (slider) => {\n              emitWith(slider, fixSize, { width: getRaw(slider.element, \"width\").getOr(\"\") });\n            },\n            onStartShrink: (slider) => {\n              emitWith(slider, fixSize, { width: get$c(slider.element) + \"px\" });\n            }\n          }),\n          Replacing.config({}),\n          Composing.config({\n            find: (comp) => {\n              const children2 = Replacing.contents(comp);\n              return head(children2);\n            }\n          })\n        ])\n      }],\n      behaviours: derive$1([\n        ComposingConfigs.childAt(0),\n        config2(\"sidebar-sliding-events\", [\n          run$1(fixSize, (comp, se) => {\n            set$8(comp.element, \"width\", se.event.width);\n          }),\n          run$1(autoSize, (comp, _se) => {\n            remove$6(comp.element, \"width\");\n          })\n        ])\n      ])\n    });\n    const block2 = (component, config3, state, getBusySpec2) => {\n      set$9(component.element, \"aria-busy\", true);\n      const root2 = config3.getRoot(component).getOr(component);\n      const blockerBehaviours = derive$1([\n        Keying.config({\n          mode: \"special\",\n          onTab: () => Optional.some(true),\n          onShiftTab: () => Optional.some(true)\n        }),\n        Focusing.config({})\n      ]);\n      const blockSpec = getBusySpec2(root2, blockerBehaviours);\n      const blocker = root2.getSystem().build(blockSpec);\n      Replacing.append(root2, premade(blocker));\n      if (blocker.hasConfigured(Keying) && config3.focus) {\n        Keying.focusIn(blocker);\n      }\n      if (!state.isBlocked()) {\n        config3.onBlock(component);\n      }\n      state.blockWith(() => Replacing.remove(root2, blocker));\n    };\n    const unblock = (component, config3, state) => {\n      remove$7(component.element, \"aria-busy\");\n      if (state.isBlocked()) {\n        config3.onUnblock(component);\n      }\n      state.clear();\n    };\n    var BlockingApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      block: block2,\n      unblock\n    });\n    var BlockingSchema = [\n      defaultedFunction(\"getRoot\", Optional.none),\n      defaultedBoolean(\"focus\", true),\n      onHandler(\"onBlock\"),\n      onHandler(\"onUnblock\")\n    ];\n    const init$4 = () => {\n      const blocker = destroyable();\n      const blockWith = (destroy) => {\n        blocker.set({ destroy });\n      };\n      return nu$8({\n        readState: blocker.isSet,\n        blockWith,\n        clear: blocker.clear,\n        isBlocked: blocker.isSet\n      });\n    };\n    var BlockingState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      init: init$4\n    });\n    const Blocking = create$3({\n      fields: BlockingSchema,\n      name: \"blocking\",\n      apis: BlockingApis,\n      state: BlockingState\n    });\n    const getAttrs = (elem) => {\n      const attributes = elem.dom.attributes !== void 0 ? elem.dom.attributes : [];\n      return foldl(attributes, (b3, attr) => {\n        if (attr.name === \"class\") {\n          return b3;\n        } else {\n          return {\n            ...b3,\n            [attr.name]: attr.value\n          };\n        }\n      }, {});\n    };\n    const getClasses = (elem) => Array.prototype.slice.call(elem.dom.classList, 0);\n    const fromHtml = (html) => {\n      const elem = SugarElement.fromHtml(html);\n      const children$1 = children(elem);\n      const attrs = getAttrs(elem);\n      const classes2 = getClasses(elem);\n      const contents2 = children$1.length === 0 ? {} : { innerHtml: get$9(elem) };\n      return {\n        tag: name$3(elem),\n        classes: classes2,\n        attributes: attrs,\n        ...contents2\n      };\n    };\n    const getBusySpec$1 = (providerBackstage) => (_root, _behaviours) => ({\n      dom: {\n        tag: \"div\",\n        attributes: {\n          \"aria-label\": providerBackstage.translate(\"Loading...\"),\n          \"tabindex\": \"0\"\n        },\n        classes: [\"tox-throbber__busy-spinner\"]\n      },\n      components: [{ dom: fromHtml('<div class=\"tox-spinner\"><div></div><div></div><div></div></div>') }]\n    });\n    const focusBusyComponent = (throbber) => Composing.getCurrent(throbber).each((comp) => focus$3(comp.element));\n    const toggleEditorTabIndex = (editor, state) => {\n      const tabIndexAttr = \"tabindex\";\n      const dataTabIndexAttr = `data-mce-${tabIndexAttr}`;\n      Optional.from(editor.iframeElement).map(SugarElement.fromDom).each((iframe2) => {\n        if (state) {\n          getOpt(iframe2, tabIndexAttr).each((tabIndex) => set$9(iframe2, dataTabIndexAttr, tabIndex));\n          set$9(iframe2, tabIndexAttr, -1);\n        } else {\n          remove$7(iframe2, tabIndexAttr);\n          getOpt(iframe2, dataTabIndexAttr).each((tabIndex) => {\n            set$9(iframe2, tabIndexAttr, tabIndex);\n            remove$7(iframe2, dataTabIndexAttr);\n          });\n        }\n      });\n    };\n    const toggleThrobber = (editor, comp, state, providerBackstage) => {\n      const element2 = comp.element;\n      toggleEditorTabIndex(editor, state);\n      if (state) {\n        Blocking.block(comp, getBusySpec$1(providerBackstage));\n        remove$6(element2, \"display\");\n        remove$7(element2, \"aria-hidden\");\n        if (editor.hasFocus()) {\n          focusBusyComponent(comp);\n        }\n      } else {\n        const throbberFocus = Composing.getCurrent(comp).exists((busyComp) => hasFocus(busyComp.element));\n        Blocking.unblock(comp);\n        set$8(element2, \"display\", \"none\");\n        set$9(element2, \"aria-hidden\", \"true\");\n        if (throbberFocus) {\n          editor.focus();\n        }\n      }\n    };\n    const renderThrobber = (spec) => ({\n      uid: spec.uid,\n      dom: {\n        tag: \"div\",\n        attributes: { \"aria-hidden\": \"true\" },\n        classes: [\"tox-throbber\"],\n        styles: { display: \"none\" }\n      },\n      behaviours: derive$1([\n        Replacing.config({}),\n        Blocking.config({ focus: false }),\n        Composing.config({ find: (comp) => head(comp.components()) })\n      ]),\n      components: []\n    });\n    const isFocusEvent = (event) => event.type === \"focusin\";\n    const isPasteBinTarget = (event) => {\n      if (isFocusEvent(event)) {\n        const node = event.composed ? head(event.composedPath()) : Optional.from(event.target);\n        return node.map(SugarElement.fromDom).filter(isElement$1).exists((targetElm) => has2(targetElm, \"mce-pastebin\"));\n      } else {\n        return false;\n      }\n    };\n    const setup$7 = (editor, lazyThrobber, sharedBackstage) => {\n      const throbberState = Cell(false);\n      const timer = value$2();\n      const stealFocus = (e2) => {\n        if (throbberState.get() && !isPasteBinTarget(e2)) {\n          e2.preventDefault();\n          focusBusyComponent(lazyThrobber());\n          editor.editorManager.setActive(editor);\n        }\n      };\n      if (!editor.inline) {\n        editor.on(\"PreInit\", () => {\n          editor.dom.bind(editor.getWin(), \"focusin\", stealFocus);\n          editor.on(\"BeforeExecCommand\", (e2) => {\n            if (e2.command.toLowerCase() === \"mcefocus\" && e2.value !== true) {\n              stealFocus(e2);\n            }\n          });\n        });\n      }\n      const toggle2 = (state) => {\n        if (state !== throbberState.get()) {\n          throbberState.set(state);\n          toggleThrobber(editor, lazyThrobber(), state, sharedBackstage.providers);\n          editor.dispatch(\"AfterProgressState\", { state });\n        }\n      };\n      editor.on(\"ProgressState\", (e2) => {\n        timer.on(clearTimeout);\n        if (isNumber2(e2.time)) {\n          const timerId = global$9.setEditorTimeout(editor, () => toggle2(e2.state), e2.time);\n          timer.set(timerId);\n        } else {\n          toggle2(e2.state);\n          timer.clear();\n        }\n      });\n    };\n    const generate$1 = (xs, f2) => {\n      const init2 = {\n        len: 0,\n        list: []\n      };\n      const r4 = foldl(xs, (b3, a2) => {\n        const value2 = f2(a2, b3.len);\n        return value2.fold(constant$1(b3), (v2) => ({\n          len: v2.finish,\n          list: b3.list.concat([v2])\n        }));\n      }, init2);\n      return r4.list;\n    };\n    const output = (within, extra, withinWidth) => ({\n      within,\n      extra,\n      withinWidth\n    });\n    const apportion = (units2, total, len) => {\n      const parray = generate$1(units2, (unit, current) => {\n        const width2 = len(unit);\n        return Optional.some({\n          element: unit,\n          start: current,\n          finish: current + width2,\n          width: width2\n        });\n      });\n      const within = filter$2(parray, (unit) => unit.finish <= total);\n      const withinWidth = foldr(within, (acc, el) => acc + el.width, 0);\n      const extra = parray.slice(within.length);\n      return {\n        within,\n        extra,\n        withinWidth\n      };\n    };\n    const toUnit = (parray) => map$2(parray, (unit) => unit.element);\n    const fitLast = (within, extra, withinWidth) => {\n      const fits = toUnit(within.concat(extra));\n      return output(fits, [], withinWidth);\n    };\n    const overflow = (within, extra, overflower, withinWidth) => {\n      const fits = toUnit(within).concat([overflower]);\n      return output(fits, toUnit(extra), withinWidth);\n    };\n    const fitAll = (within, extra, withinWidth) => output(toUnit(within), [], withinWidth);\n    const tryFit = (total, units2, len) => {\n      const divide = apportion(units2, total, len);\n      return divide.extra.length === 0 ? Optional.some(divide) : Optional.none();\n    };\n    const partition = (total, units2, len, overflower) => {\n      const divide = tryFit(total, units2, len).getOrThunk(() => apportion(units2, total - len(overflower), len));\n      const within = divide.within;\n      const extra = divide.extra;\n      const withinWidth = divide.withinWidth;\n      if (extra.length === 1 && extra[0].width <= len(overflower)) {\n        return fitLast(within, extra, withinWidth);\n      } else if (extra.length >= 1) {\n        return overflow(within, extra, overflower, withinWidth);\n      } else {\n        return fitAll(within, extra, withinWidth);\n      }\n    };\n    const setGroups$1 = (toolbar, storedGroups) => {\n      const bGroups = map$2(storedGroups, (g2) => premade(g2));\n      Toolbar2.setGroups(toolbar, bGroups);\n    };\n    const findFocusedComp = (comps) => findMap(comps, (comp) => search(comp.element).bind((focusedElm) => comp.getSystem().getByDom(focusedElm).toOptional()));\n    const refresh$2 = (toolbar, detail, setOverflow) => {\n      const builtGroups = detail.builtGroups.get();\n      if (builtGroups.length === 0) {\n        return;\n      }\n      const primary2 = getPartOrDie(toolbar, detail, \"primary\");\n      const overflowGroup = Coupling.getCoupled(toolbar, \"overflowGroup\");\n      set$8(primary2.element, \"visibility\", \"hidden\");\n      const groups = builtGroups.concat([overflowGroup]);\n      const focusedComp = findFocusedComp(groups);\n      setOverflow([]);\n      setGroups$1(primary2, groups);\n      const availableWidth = get$c(primary2.element);\n      const overflows = partition(availableWidth, detail.builtGroups.get(), (comp) => get$c(comp.element), overflowGroup);\n      if (overflows.extra.length === 0) {\n        Replacing.remove(primary2, overflowGroup);\n        setOverflow([]);\n      } else {\n        setGroups$1(primary2, overflows.within);\n        setOverflow(overflows.extra);\n      }\n      remove$6(primary2.element, \"visibility\");\n      reflow(primary2.element);\n      focusedComp.each(Focusing.focus);\n    };\n    const schema$c = constant$1([\n      field(\"splitToolbarBehaviours\", [Coupling]),\n      customField(\"builtGroups\", () => Cell([]))\n    ]);\n    const schema$b = constant$1([\n      markers$1([\"overflowToggledClass\"]),\n      optionFunction(\"getOverflowBounds\"),\n      required$1(\"lazySink\"),\n      customField(\"overflowGroups\", () => Cell([]))\n    ].concat(schema$c()));\n    const parts$7 = constant$1([\n      required({\n        factory: Toolbar2,\n        schema: schema$e(),\n        name: \"primary\"\n      }),\n      external({\n        schema: schema$e(),\n        name: \"overflow\"\n      }),\n      external({ name: \"overflow-button\" }),\n      external({ name: \"overflow-group\" })\n    ]);\n    const expandable = constant$1((element2, available) => {\n      setMax(element2, Math.floor(available));\n    });\n    const schema$a = constant$1([\n      markers$1([\"toggledClass\"]),\n      required$1(\"lazySink\"),\n      requiredFunction(\"fetch\"),\n      optionFunction(\"getBounds\"),\n      optionObjOf(\"fireDismissalEventInstead\", [defaulted(\"event\", dismissRequested())]),\n      schema$y()\n    ]);\n    const parts$6 = constant$1([\n      external({\n        name: \"button\",\n        overrides: (detail) => ({\n          dom: { attributes: { \"aria-haspopup\": \"true\" } },\n          buttonBehaviours: derive$1([Toggling.config({\n            toggleClass: detail.markers.toggledClass,\n            aria: { mode: \"expanded\" },\n            toggleOnExecute: false\n          })])\n        })\n      }),\n      external({\n        factory: Toolbar2,\n        schema: schema$e(),\n        name: \"toolbar\",\n        overrides: (detail) => {\n          return {\n            toolbarBehaviours: derive$1([Keying.config({\n              mode: \"cyclic\",\n              onEscape: (comp) => {\n                getPart(comp, detail, \"button\").each(Focusing.focus);\n                return Optional.none();\n              }\n            })])\n          };\n        }\n      })\n    ]);\n    const toggle = (button2, externals) => {\n      const toolbarSandbox = Coupling.getCoupled(button2, \"toolbarSandbox\");\n      if (Sandboxing.isOpen(toolbarSandbox)) {\n        Sandboxing.close(toolbarSandbox);\n      } else {\n        Sandboxing.open(toolbarSandbox, externals.toolbar());\n      }\n    };\n    const position = (button2, toolbar, detail, layouts2) => {\n      const bounds2 = detail.getBounds.map((bounder) => bounder());\n      const sink = detail.lazySink(button2).getOrDie();\n      Positioning.positionWithinBounds(sink, toolbar, {\n        anchor: {\n          type: \"hotspot\",\n          hotspot: button2,\n          layouts: layouts2,\n          overrides: { maxWidthFunction: expandable() }\n        }\n      }, bounds2);\n    };\n    const setGroups = (button2, toolbar, detail, layouts2, groups) => {\n      Toolbar2.setGroups(toolbar, groups);\n      position(button2, toolbar, detail, layouts2);\n      Toggling.on(button2);\n    };\n    const makeSandbox = (button2, spec, detail) => {\n      const ariaControls = manager();\n      const onOpen = (sandbox, toolbar) => {\n        detail.fetch().get((groups) => {\n          setGroups(button2, toolbar, detail, spec.layouts, groups);\n          ariaControls.link(button2.element);\n          Keying.focusIn(toolbar);\n        });\n      };\n      const onClose = () => {\n        Toggling.off(button2);\n        Focusing.focus(button2);\n        ariaControls.unlink(button2.element);\n      };\n      return {\n        dom: {\n          tag: \"div\",\n          attributes: { id: ariaControls.id }\n        },\n        behaviours: derive$1([\n          Keying.config({\n            mode: \"special\",\n            onEscape: (comp) => {\n              Sandboxing.close(comp);\n              return Optional.some(true);\n            }\n          }),\n          Sandboxing.config({\n            onOpen,\n            onClose,\n            isPartOf: (container, data, queryElem) => {\n              return isPartOf$1(data, queryElem) || isPartOf$1(button2, queryElem);\n            },\n            getAttachPoint: () => {\n              return detail.lazySink(button2).getOrDie();\n            }\n          }),\n          Receiving.config({\n            channels: {\n              ...receivingChannel$1({\n                isExtraPart: never,\n                ...detail.fireDismissalEventInstead.map((fe) => ({ fireEventInstead: { event: fe.event } })).getOr({})\n              }),\n              ...receivingChannel({\n                doReposition: () => {\n                  Sandboxing.getState(Coupling.getCoupled(button2, \"toolbarSandbox\")).each((toolbar) => {\n                    position(button2, toolbar, detail, spec.layouts);\n                  });\n                }\n              })\n            }\n          })\n        ])\n      };\n    };\n    const factory$a = (detail, components2, spec, externals) => ({\n      ...Button.sketch({\n        ...externals.button(),\n        action: (button2) => {\n          toggle(button2, externals);\n        },\n        buttonBehaviours: SketchBehaviours.augment({ dump: externals.button().buttonBehaviours }, [Coupling.config({\n          others: {\n            toolbarSandbox: (button2) => {\n              return makeSandbox(button2, spec, detail);\n            }\n          }\n        })])\n      }),\n      apis: {\n        setGroups: (button2, groups) => {\n          Sandboxing.getState(Coupling.getCoupled(button2, \"toolbarSandbox\")).each((toolbar) => {\n            setGroups(button2, toolbar, detail, spec.layouts, groups);\n          });\n        },\n        reposition: (button2) => {\n          Sandboxing.getState(Coupling.getCoupled(button2, \"toolbarSandbox\")).each((toolbar) => {\n            position(button2, toolbar, detail, spec.layouts);\n          });\n        },\n        toggle: (button2) => {\n          toggle(button2, externals);\n        },\n        getToolbar: (button2) => {\n          return Sandboxing.getState(Coupling.getCoupled(button2, \"toolbarSandbox\"));\n        },\n        isOpen: (button2) => {\n          return Sandboxing.isOpen(Coupling.getCoupled(button2, \"toolbarSandbox\"));\n        }\n      }\n    });\n    const FloatingToolbarButton = composite({\n      name: \"FloatingToolbarButton\",\n      factory: factory$a,\n      configFields: schema$a(),\n      partFields: parts$6(),\n      apis: {\n        setGroups: (apis, button2, groups) => {\n          apis.setGroups(button2, groups);\n        },\n        reposition: (apis, button2) => {\n          apis.reposition(button2);\n        },\n        toggle: (apis, button2) => {\n          apis.toggle(button2);\n        },\n        getToolbar: (apis, button2) => apis.getToolbar(button2),\n        isOpen: (apis, button2) => apis.isOpen(button2)\n      }\n    });\n    const schema$9 = constant$1([\n      required$1(\"items\"),\n      markers$1([\"itemSelector\"]),\n      field(\"tgroupBehaviours\", [Keying])\n    ]);\n    const parts$5 = constant$1([group({\n      name: \"items\",\n      unit: \"item\"\n    })]);\n    const factory$9 = (detail, components2, _spec, _externals) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      components: components2,\n      behaviours: augment(detail.tgroupBehaviours, [Keying.config({\n        mode: \"flow\",\n        selector: detail.markers.itemSelector\n      })]),\n      domModification: { attributes: { role: \"toolbar\" } }\n    });\n    const ToolbarGroup = composite({\n      name: \"ToolbarGroup\",\n      configFields: schema$9(),\n      partFields: parts$5(),\n      factory: factory$9\n    });\n    const buildGroups = (comps) => map$2(comps, (g2) => premade(g2));\n    const refresh$1 = (toolbar, memFloatingToolbarButton, detail) => {\n      refresh$2(toolbar, detail, (overflowGroups) => {\n        detail.overflowGroups.set(overflowGroups);\n        memFloatingToolbarButton.getOpt(toolbar).each((floatingToolbarButton) => {\n          FloatingToolbarButton.setGroups(floatingToolbarButton, buildGroups(overflowGroups));\n        });\n      });\n    };\n    const factory$8 = (detail, components2, spec, externals) => {\n      const memFloatingToolbarButton = record(FloatingToolbarButton.sketch({\n        fetch: () => Future.nu((resolve) => {\n          resolve(buildGroups(detail.overflowGroups.get()));\n        }),\n        layouts: {\n          onLtr: () => [\n            southwest$2,\n            southeast$2\n          ],\n          onRtl: () => [\n            southeast$2,\n            southwest$2\n          ],\n          onBottomLtr: () => [\n            northwest$2,\n            northeast$2\n          ],\n          onBottomRtl: () => [\n            northeast$2,\n            northwest$2\n          ]\n        },\n        getBounds: spec.getOverflowBounds,\n        lazySink: detail.lazySink,\n        fireDismissalEventInstead: {},\n        markers: { toggledClass: detail.markers.overflowToggledClass },\n        parts: {\n          button: externals[\"overflow-button\"](),\n          toolbar: externals.overflow()\n        }\n      }));\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: components2,\n        behaviours: augment(detail.splitToolbarBehaviours, [Coupling.config({\n          others: {\n            overflowGroup: () => {\n              return ToolbarGroup.sketch({\n                ...externals[\"overflow-group\"](),\n                items: [memFloatingToolbarButton.asSpec()]\n              });\n            }\n          }\n        })]),\n        apis: {\n          setGroups: (toolbar, groups) => {\n            detail.builtGroups.set(map$2(groups, toolbar.getSystem().build));\n            refresh$1(toolbar, memFloatingToolbarButton, detail);\n          },\n          refresh: (toolbar) => refresh$1(toolbar, memFloatingToolbarButton, detail),\n          toggle: (toolbar) => {\n            memFloatingToolbarButton.getOpt(toolbar).each((floatingToolbarButton) => {\n              FloatingToolbarButton.toggle(floatingToolbarButton);\n            });\n          },\n          isOpen: (toolbar) => memFloatingToolbarButton.getOpt(toolbar).map(FloatingToolbarButton.isOpen).getOr(false),\n          reposition: (toolbar) => {\n            memFloatingToolbarButton.getOpt(toolbar).each((floatingToolbarButton) => {\n              FloatingToolbarButton.reposition(floatingToolbarButton);\n            });\n          },\n          getOverflow: (toolbar) => memFloatingToolbarButton.getOpt(toolbar).bind(FloatingToolbarButton.getToolbar)\n        },\n        domModification: { attributes: { role: \"group\" } }\n      };\n    };\n    const SplitFloatingToolbar = composite({\n      name: \"SplitFloatingToolbar\",\n      configFields: schema$b(),\n      partFields: parts$7(),\n      factory: factory$8,\n      apis: {\n        setGroups: (apis, toolbar, groups) => {\n          apis.setGroups(toolbar, groups);\n        },\n        refresh: (apis, toolbar) => {\n          apis.refresh(toolbar);\n        },\n        reposition: (apis, toolbar) => {\n          apis.reposition(toolbar);\n        },\n        toggle: (apis, toolbar) => {\n          apis.toggle(toolbar);\n        },\n        isOpen: (apis, toolbar) => apis.isOpen(toolbar),\n        getOverflow: (apis, toolbar) => apis.getOverflow(toolbar)\n      }\n    });\n    const schema$8 = constant$1([\n      markers$1([\n        \"closedClass\",\n        \"openClass\",\n        \"shrinkingClass\",\n        \"growingClass\",\n        \"overflowToggledClass\"\n      ]),\n      onHandler(\"onOpened\"),\n      onHandler(\"onClosed\")\n    ].concat(schema$c()));\n    const parts$4 = constant$1([\n      required({\n        factory: Toolbar2,\n        schema: schema$e(),\n        name: \"primary\"\n      }),\n      required({\n        factory: Toolbar2,\n        schema: schema$e(),\n        name: \"overflow\",\n        overrides: (detail) => {\n          return {\n            toolbarBehaviours: derive$1([\n              Sliding.config({\n                dimension: { property: \"height\" },\n                closedClass: detail.markers.closedClass,\n                openClass: detail.markers.openClass,\n                shrinkingClass: detail.markers.shrinkingClass,\n                growingClass: detail.markers.growingClass,\n                onShrunk: (comp) => {\n                  getPart(comp, detail, \"overflow-button\").each((button2) => {\n                    Toggling.off(button2);\n                    Focusing.focus(button2);\n                  });\n                  detail.onClosed(comp);\n                },\n                onGrown: (comp) => {\n                  Keying.focusIn(comp);\n                  detail.onOpened(comp);\n                },\n                onStartGrow: (comp) => {\n                  getPart(comp, detail, \"overflow-button\").each(Toggling.on);\n                }\n              }),\n              Keying.config({\n                mode: \"acyclic\",\n                onEscape: (comp) => {\n                  getPart(comp, detail, \"overflow-button\").each(Focusing.focus);\n                  return Optional.some(true);\n                }\n              })\n            ])\n          };\n        }\n      }),\n      external({\n        name: \"overflow-button\",\n        overrides: (detail) => ({\n          buttonBehaviours: derive$1([Toggling.config({\n            toggleClass: detail.markers.overflowToggledClass,\n            aria: { mode: \"pressed\" },\n            toggleOnExecute: false\n          })])\n        })\n      }),\n      external({ name: \"overflow-group\" })\n    ]);\n    const isOpen = (toolbar, detail) => getPart(toolbar, detail, \"overflow\").map(Sliding.hasGrown).getOr(false);\n    const toggleToolbar = (toolbar, detail) => {\n      getPart(toolbar, detail, \"overflow-button\").bind(() => getPart(toolbar, detail, \"overflow\")).each((overf) => {\n        refresh(toolbar, detail);\n        Sliding.toggleGrow(overf);\n      });\n    };\n    const refresh = (toolbar, detail) => {\n      getPart(toolbar, detail, \"overflow\").each((overflow2) => {\n        refresh$2(toolbar, detail, (groups) => {\n          const builtGroups = map$2(groups, (g2) => premade(g2));\n          Toolbar2.setGroups(overflow2, builtGroups);\n        });\n        getPart(toolbar, detail, \"overflow-button\").each((button2) => {\n          if (Sliding.hasGrown(overflow2)) {\n            Toggling.on(button2);\n          }\n        });\n        Sliding.refresh(overflow2);\n      });\n    };\n    const factory$7 = (detail, components2, spec, externals) => {\n      const toolbarToggleEvent = \"alloy.toolbar.toggle\";\n      const doSetGroups = (toolbar, groups) => {\n        const built = map$2(groups, toolbar.getSystem().build);\n        detail.builtGroups.set(built);\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: components2,\n        behaviours: augment(detail.splitToolbarBehaviours, [\n          Coupling.config({\n            others: {\n              overflowGroup: (toolbar) => {\n                return ToolbarGroup.sketch({\n                  ...externals[\"overflow-group\"](),\n                  items: [Button.sketch({\n                    ...externals[\"overflow-button\"](),\n                    action: (_button) => {\n                      emit(toolbar, toolbarToggleEvent);\n                    }\n                  })]\n                });\n              }\n            }\n          }),\n          config2(\"toolbar-toggle-events\", [run$1(toolbarToggleEvent, (toolbar) => {\n            toggleToolbar(toolbar, detail);\n          })])\n        ]),\n        apis: {\n          setGroups: (toolbar, groups) => {\n            doSetGroups(toolbar, groups);\n            refresh(toolbar, detail);\n          },\n          refresh: (toolbar) => refresh(toolbar, detail),\n          toggle: (toolbar) => toggleToolbar(toolbar, detail),\n          isOpen: (toolbar) => isOpen(toolbar, detail)\n        },\n        domModification: { attributes: { role: \"group\" } }\n      };\n    };\n    const SplitSlidingToolbar = composite({\n      name: \"SplitSlidingToolbar\",\n      configFields: schema$8(),\n      partFields: parts$4(),\n      factory: factory$7,\n      apis: {\n        setGroups: (apis, toolbar, groups) => {\n          apis.setGroups(toolbar, groups);\n        },\n        refresh: (apis, toolbar) => {\n          apis.refresh(toolbar);\n        },\n        toggle: (apis, toolbar) => {\n          apis.toggle(toolbar);\n        },\n        isOpen: (apis, toolbar) => apis.isOpen(toolbar)\n      }\n    });\n    const renderToolbarGroupCommon = (toolbarGroup) => {\n      const attributes = toolbarGroup.title.fold(() => ({}), (title2) => ({ attributes: { title: title2 } }));\n      return {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-toolbar__group\"],\n          ...attributes\n        },\n        components: [ToolbarGroup.parts.items({})],\n        items: toolbarGroup.items,\n        markers: { itemSelector: \"*:not(.tox-split-button) > .tox-tbtn:not([disabled]), .tox-split-button:not([disabled]), .tox-toolbar-nav-js:not([disabled])\" },\n        tgroupBehaviours: derive$1([\n          Tabstopping.config({}),\n          Focusing.config({})\n        ])\n      };\n    };\n    const renderToolbarGroup = (toolbarGroup) => ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup));\n    const getToolbarbehaviours = (toolbarSpec, modeName) => {\n      const onAttached = runOnAttached((component) => {\n        const groups = map$2(toolbarSpec.initGroups, renderToolbarGroup);\n        Toolbar2.setGroups(component, groups);\n      });\n      return derive$1([\n        DisablingConfigs.toolbarButton(toolbarSpec.providers.isDisabled),\n        receivingConfig(),\n        Keying.config({\n          mode: modeName,\n          onEscape: toolbarSpec.onEscape,\n          selector: \".tox-toolbar__group\"\n        }),\n        config2(\"toolbar-events\", [onAttached])\n      ]);\n    };\n    const renderMoreToolbarCommon = (toolbarSpec) => {\n      const modeName = toolbarSpec.cyclicKeying ? \"cyclic\" : \"acyclic\";\n      return {\n        uid: toolbarSpec.uid,\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-toolbar-overlord\"]\n        },\n        parts: {\n          \"overflow-group\": renderToolbarGroupCommon({\n            title: Optional.none(),\n            items: []\n          }),\n          \"overflow-button\": renderIconButtonSpec({\n            icon: Optional.some(\"more-drawer\"),\n            enabled: true,\n            tooltip: Optional.some(\"More...\")\n          }, Optional.none(), toolbarSpec.providers)\n        },\n        splitToolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName)\n      };\n    };\n    const renderFloatingMoreToolbar = (toolbarSpec) => {\n      const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n      const overflowXOffset = 4;\n      const primary2 = SplitFloatingToolbar.parts.primary({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-toolbar__primary\"]\n        }\n      });\n      return SplitFloatingToolbar.sketch({\n        ...baseSpec,\n        lazySink: toolbarSpec.getSink,\n        getOverflowBounds: () => {\n          const headerElem = toolbarSpec.moreDrawerData.lazyHeader().element;\n          const headerBounds = absolute$2(headerElem);\n          const docElem = documentElement(headerElem);\n          const docBounds = absolute$2(docElem);\n          const height2 = Math.max(docElem.dom.scrollHeight, docBounds.height);\n          return bounds(headerBounds.x + overflowXOffset, docBounds.y, headerBounds.width - overflowXOffset * 2, height2);\n        },\n        parts: {\n          ...baseSpec.parts,\n          overflow: {\n            dom: {\n              tag: \"div\",\n              classes: [\"tox-toolbar__overflow\"],\n              attributes: toolbarSpec.attributes\n            }\n          }\n        },\n        components: [primary2],\n        markers: { overflowToggledClass: \"tox-tbtn--enabled\" }\n      });\n    };\n    const renderSlidingMoreToolbar = (toolbarSpec) => {\n      const primary2 = SplitSlidingToolbar.parts.primary({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-toolbar__primary\"]\n        }\n      });\n      const overflow2 = SplitSlidingToolbar.parts.overflow({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-toolbar__overflow\"]\n        }\n      });\n      const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n      return SplitSlidingToolbar.sketch({\n        ...baseSpec,\n        components: [\n          primary2,\n          overflow2\n        ],\n        markers: {\n          openClass: \"tox-toolbar__overflow--open\",\n          closedClass: \"tox-toolbar__overflow--closed\",\n          growingClass: \"tox-toolbar__overflow--growing\",\n          shrinkingClass: \"tox-toolbar__overflow--shrinking\",\n          overflowToggledClass: \"tox-tbtn--enabled\"\n        },\n        onOpened: (comp) => {\n          comp.getSystem().broadcastOn([toolbarHeightChange()], { type: \"opened\" });\n        },\n        onClosed: (comp) => {\n          comp.getSystem().broadcastOn([toolbarHeightChange()], { type: \"closed\" });\n        }\n      });\n    };\n    const renderToolbar = (toolbarSpec) => {\n      const modeName = toolbarSpec.cyclicKeying ? \"cyclic\" : \"acyclic\";\n      return Toolbar2.sketch({\n        uid: toolbarSpec.uid,\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-toolbar\"].concat(toolbarSpec.type === ToolbarMode$1.scrolling ? [\"tox-toolbar--scrolling\"] : [])\n        },\n        components: [Toolbar2.parts.groups({})],\n        toolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName)\n      });\n    };\n    const factory$6 = (detail, components2, _spec) => {\n      const apis = {\n        getSocket: (comp) => {\n          return parts$a.getPart(comp, detail, \"socket\");\n        },\n        setSidebar: (comp, panelConfigs) => {\n          parts$a.getPart(comp, detail, \"sidebar\").each((sidebar) => setSidebar(sidebar, panelConfigs));\n        },\n        toggleSidebar: (comp, name2) => {\n          parts$a.getPart(comp, detail, \"sidebar\").each((sidebar) => toggleSidebar(sidebar, name2));\n        },\n        whichSidebar: (comp) => {\n          return parts$a.getPart(comp, detail, \"sidebar\").bind(whichSidebar).getOrNull();\n        },\n        getHeader: (comp) => {\n          return parts$a.getPart(comp, detail, \"header\");\n        },\n        getToolbar: (comp) => {\n          return parts$a.getPart(comp, detail, \"toolbar\");\n        },\n        setToolbar: (comp, groups) => {\n          parts$a.getPart(comp, detail, \"toolbar\").each((toolbar) => {\n            toolbar.getApis().setGroups(toolbar, groups);\n          });\n        },\n        setToolbars: (comp, toolbars) => {\n          parts$a.getPart(comp, detail, \"multiple-toolbar\").each((mToolbar) => {\n            CustomList.setItems(mToolbar, toolbars);\n          });\n        },\n        refreshToolbar: (comp) => {\n          const toolbar = parts$a.getPart(comp, detail, \"toolbar\");\n          toolbar.each((toolbar2) => toolbar2.getApis().refresh(toolbar2));\n        },\n        toggleToolbarDrawer: (comp) => {\n          parts$a.getPart(comp, detail, \"toolbar\").each((toolbar) => {\n            mapFrom(toolbar.getApis().toggle, (toggle2) => toggle2(toolbar));\n          });\n        },\n        isToolbarDrawerToggled: (comp) => {\n          return parts$a.getPart(comp, detail, \"toolbar\").bind((toolbar) => Optional.from(toolbar.getApis().isOpen).map((isOpen2) => isOpen2(toolbar))).getOr(false);\n        },\n        getThrobber: (comp) => {\n          return parts$a.getPart(comp, detail, \"throbber\");\n        },\n        focusToolbar: (comp) => {\n          const optToolbar = parts$a.getPart(comp, detail, \"toolbar\").orThunk(() => parts$a.getPart(comp, detail, \"multiple-toolbar\"));\n          optToolbar.each((toolbar) => {\n            Keying.focusIn(toolbar);\n          });\n        },\n        setMenubar: (comp, menus) => {\n          parts$a.getPart(comp, detail, \"menubar\").each((menubar) => {\n            SilverMenubar.setMenus(menubar, menus);\n          });\n        },\n        focusMenubar: (comp) => {\n          parts$a.getPart(comp, detail, \"menubar\").each((menubar) => {\n            SilverMenubar.focus(menubar);\n          });\n        }\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: components2,\n        apis,\n        behaviours: detail.behaviours\n      };\n    };\n    const partMenubar = partType.optional({\n      factory: SilverMenubar,\n      name: \"menubar\",\n      schema: [required$1(\"backstage\")]\n    });\n    const toolbarFactory = (spec) => {\n      if (spec.type === ToolbarMode$1.sliding) {\n        return renderSlidingMoreToolbar;\n      } else if (spec.type === ToolbarMode$1.floating) {\n        return renderFloatingMoreToolbar;\n      } else {\n        return renderToolbar;\n      }\n    };\n    const partMultipleToolbar = partType.optional({\n      factory: {\n        sketch: (spec) => CustomList.sketch({\n          uid: spec.uid,\n          dom: spec.dom,\n          listBehaviours: derive$1([Keying.config({\n            mode: \"acyclic\",\n            selector: \".tox-toolbar\"\n          })]),\n          makeItem: () => renderToolbar({\n            type: spec.type,\n            uid: generate$6(\"multiple-toolbar-item\"),\n            cyclicKeying: false,\n            initGroups: [],\n            providers: spec.providers,\n            onEscape: () => {\n              spec.onEscape();\n              return Optional.some(true);\n            }\n          }),\n          setupItem: (_mToolbar, tc, data, _index) => {\n            Toolbar2.setGroups(tc, data);\n          },\n          shell: true\n        })\n      },\n      name: \"multiple-toolbar\",\n      schema: [\n        required$1(\"dom\"),\n        required$1(\"onEscape\")\n      ]\n    });\n    const partToolbar = partType.optional({\n      factory: {\n        sketch: (spec) => {\n          const renderer = toolbarFactory(spec);\n          const toolbarSpec = {\n            type: spec.type,\n            uid: spec.uid,\n            onEscape: () => {\n              spec.onEscape();\n              return Optional.some(true);\n            },\n            cyclicKeying: false,\n            initGroups: [],\n            getSink: spec.getSink,\n            providers: spec.providers,\n            moreDrawerData: {\n              lazyToolbar: spec.lazyToolbar,\n              lazyMoreButton: spec.lazyMoreButton,\n              lazyHeader: spec.lazyHeader\n            },\n            attributes: spec.attributes\n          };\n          return renderer(toolbarSpec);\n        }\n      },\n      name: \"toolbar\",\n      schema: [\n        required$1(\"dom\"),\n        required$1(\"onEscape\"),\n        required$1(\"getSink\")\n      ]\n    });\n    const partHeader = partType.optional({\n      factory: { sketch: renderHeader },\n      name: \"header\",\n      schema: [required$1(\"dom\")]\n    });\n    const partSocket = partType.optional({\n      name: \"socket\",\n      schema: [required$1(\"dom\")]\n    });\n    const partSidebar = partType.optional({\n      factory: { sketch: renderSidebar },\n      name: \"sidebar\",\n      schema: [required$1(\"dom\")]\n    });\n    const partThrobber = partType.optional({\n      factory: { sketch: renderThrobber },\n      name: \"throbber\",\n      schema: [required$1(\"dom\")]\n    });\n    var OuterContainer = composite({\n      name: \"OuterContainer\",\n      factory: factory$6,\n      configFields: [\n        required$1(\"dom\"),\n        required$1(\"behaviours\")\n      ],\n      partFields: [\n        partHeader,\n        partMenubar,\n        partToolbar,\n        partMultipleToolbar,\n        partSocket,\n        partSidebar,\n        partThrobber\n      ],\n      apis: {\n        getSocket: (apis, comp) => {\n          return apis.getSocket(comp);\n        },\n        setSidebar: (apis, comp, panelConfigs) => {\n          apis.setSidebar(comp, panelConfigs);\n        },\n        toggleSidebar: (apis, comp, name2) => {\n          apis.toggleSidebar(comp, name2);\n        },\n        whichSidebar: (apis, comp) => {\n          return apis.whichSidebar(comp);\n        },\n        getHeader: (apis, comp) => {\n          return apis.getHeader(comp);\n        },\n        getToolbar: (apis, comp) => {\n          return apis.getToolbar(comp);\n        },\n        setToolbar: (apis, comp, grps) => {\n          const groups = map$2(grps, (grp) => {\n            return renderToolbarGroup(grp);\n          });\n          apis.setToolbar(comp, groups);\n        },\n        setToolbars: (apis, comp, ts) => {\n          const renderedToolbars = map$2(ts, (g2) => map$2(g2, renderToolbarGroup));\n          apis.setToolbars(comp, renderedToolbars);\n        },\n        refreshToolbar: (apis, comp) => {\n          return apis.refreshToolbar(comp);\n        },\n        toggleToolbarDrawer: (apis, comp) => {\n          apis.toggleToolbarDrawer(comp);\n        },\n        isToolbarDrawerToggled: (apis, comp) => {\n          return apis.isToolbarDrawerToggled(comp);\n        },\n        getThrobber: (apis, comp) => {\n          return apis.getThrobber(comp);\n        },\n        setMenubar: (apis, comp, menus) => {\n          apis.setMenubar(comp, menus);\n        },\n        focusMenubar: (apis, comp) => {\n          apis.focusMenubar(comp);\n        },\n        focusToolbar: (apis, comp) => {\n          apis.focusToolbar(comp);\n        }\n      }\n    });\n    const defaultMenubar = \"file edit view insert format tools table help\";\n    const defaultMenus = {\n      file: {\n        title: \"File\",\n        items: \"newdocument restoredraft | preview | export print | deleteallconversations\"\n      },\n      edit: {\n        title: \"Edit\",\n        items: \"undo redo | cut copy paste pastetext | selectall | searchreplace\"\n      },\n      view: {\n        title: \"View\",\n        items: \"code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments\"\n      },\n      insert: {\n        title: \"Insert\",\n        items: \"image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents | insertdatetime\"\n      },\n      format: {\n        title: \"Format\",\n        items: \"bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat\"\n      },\n      tools: {\n        title: \"Tools\",\n        items: \"spellchecker spellcheckerlanguage | a11ycheck code wordcount\"\n      },\n      table: {\n        title: \"Table\",\n        items: \"inserttable | cell row column | advtablesort | tableprops deletetable\"\n      },\n      help: {\n        title: \"Help\",\n        items: \"help\"\n      }\n    };\n    const make = (menu2, registry, editor) => {\n      const removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/);\n      return {\n        text: menu2.title,\n        getItems: () => bind$3(menu2.items, (i3) => {\n          const itemName = i3.toLowerCase();\n          if (itemName.trim().length === 0) {\n            return [];\n          } else if (exists(removedMenuItems, (removedMenuItem) => removedMenuItem === itemName)) {\n            return [];\n          } else if (itemName === \"separator\" || itemName === \"|\") {\n            return [{ type: \"separator\" }];\n          } else if (registry.menuItems[itemName]) {\n            return [registry.menuItems[itemName]];\n          } else {\n            return [];\n          }\n        })\n      };\n    };\n    const parseItemsString = (items) => {\n      if (typeof items === \"string\") {\n        return items.split(\" \");\n      }\n      return items;\n    };\n    const identifyMenus = (editor, registry) => {\n      const rawMenuData = {\n        ...defaultMenus,\n        ...registry.menus\n      };\n      const userDefinedMenus = keys2(registry.menus).length > 0;\n      const menubar = registry.menubar === void 0 || registry.menubar === true ? parseItemsString(defaultMenubar) : parseItemsString(registry.menubar === false ? \"\" : registry.menubar);\n      const validMenus = filter$2(menubar, (menuName) => {\n        const isDefaultMenu = has$2(defaultMenus, menuName);\n        if (userDefinedMenus) {\n          return isDefaultMenu || get$g(registry.menus, menuName).exists((menu2) => has$2(menu2, \"items\"));\n        } else {\n          return isDefaultMenu;\n        }\n      });\n      const menus = map$2(validMenus, (menuName) => {\n        const menuData = rawMenuData[menuName];\n        return make({\n          title: menuData.title,\n          items: parseItemsString(menuData.items)\n        }, registry, editor);\n      });\n      return filter$2(menus, (menu2) => {\n        const isNotSeparator = (item2) => item2.type !== \"separator\";\n        return menu2.getItems().length > 0 && exists(menu2.getItems(), isNotSeparator);\n      });\n    };\n    const fireSkinLoaded = (editor) => {\n      const done = () => {\n        editor._skinLoaded = true;\n        fireSkinLoaded$1(editor);\n      };\n      return () => {\n        if (editor.initialized) {\n          done();\n        } else {\n          editor.on(\"init\", done);\n        }\n      };\n    };\n    const fireSkinLoadError = (editor, err) => () => fireSkinLoadError$1(editor, { message: err });\n    const loadStylesheet = (editor, stylesheetUrl, styleSheetLoader) => {\n      editor.on(\"remove\", () => styleSheetLoader.unload(stylesheetUrl));\n      return styleSheetLoader.load(stylesheetUrl);\n    };\n    const loadUiSkins = (editor, skinUrl) => {\n      const skinUiCss = skinUrl + \"/skin.min.css\";\n      return loadStylesheet(editor, skinUiCss, editor.ui.styleSheetLoader);\n    };\n    const loadShadowDomUiSkins = (editor, skinUrl) => {\n      const isInShadowRoot$1 = isInShadowRoot(SugarElement.fromDom(editor.getElement()));\n      if (isInShadowRoot$1) {\n        const shadowDomSkinCss = skinUrl + \"/skin.shadowdom.min.css\";\n        return loadStylesheet(editor, shadowDomSkinCss, global$7.DOM.styleSheetLoader);\n      } else {\n        return Promise.resolve();\n      }\n    };\n    const loadSkin = (isInline, editor) => {\n      const skinUrl = getSkinUrl(editor);\n      if (skinUrl) {\n        editor.contentCSS.push(skinUrl + (isInline ? \"/content.inline\" : \"/content\") + \".min.css\");\n      }\n      if (!isSkinDisabled(editor) && isString2(skinUrl)) {\n        Promise.all([\n          loadUiSkins(editor, skinUrl),\n          loadShadowDomUiSkins(editor, skinUrl)\n        ]).then(fireSkinLoaded(editor), fireSkinLoadError(editor, \"Skin could not be loaded\"));\n      } else {\n        fireSkinLoaded(editor)();\n      }\n    };\n    const iframe = curry(loadSkin, false);\n    const inline2 = curry(loadSkin, true);\n    const onSetupFormatToggle = (editor, name2) => (api2) => {\n      const boundCallback = unbindable();\n      const init2 = () => {\n        api2.setActive(editor.formatter.match(name2));\n        const binding = editor.formatter.formatChanged(name2, api2.setActive);\n        boundCallback.set(binding);\n      };\n      editor.initialized ? init2() : editor.once(\"init\", init2);\n      return () => {\n        editor.off(\"init\", init2);\n        boundCallback.clear();\n      };\n    };\n    const onSetupEvent = (editor, event, f2) => (api2) => {\n      const handleEvent = () => f2(api2);\n      const init2 = () => {\n        f2(api2);\n        editor.on(event, handleEvent);\n      };\n      editor.initialized ? init2() : editor.once(\"init\", init2);\n      return () => {\n        editor.off(\"init\", init2);\n        editor.off(event, handleEvent);\n      };\n    };\n    const onActionToggleFormat$1 = (editor) => (rawItem) => () => {\n      editor.undoManager.transact(() => {\n        editor.focus();\n        editor.execCommand(\"mceToggleFormat\", false, rawItem.format);\n      });\n    };\n    const onActionExecCommand = (editor, command) => () => editor.execCommand(command);\n    const generateSelectItems = (_editor, backstage, spec) => {\n      const generateItem = (rawItem, response, invalid, value2) => {\n        const translatedText = backstage.shared.providers.translate(rawItem.title);\n        if (rawItem.type === \"separator\") {\n          return Optional.some({\n            type: \"separator\",\n            text: translatedText\n          });\n        } else if (rawItem.type === \"submenu\") {\n          const items = bind$3(rawItem.getStyleItems(), (si) => validate(si, response, value2));\n          if (response === 0 && items.length <= 0) {\n            return Optional.none();\n          } else {\n            return Optional.some({\n              type: \"nestedmenuitem\",\n              text: translatedText,\n              enabled: items.length > 0,\n              getSubmenuItems: () => bind$3(rawItem.getStyleItems(), (si) => validate(si, response, value2))\n            });\n          }\n        } else {\n          return Optional.some({\n            type: \"togglemenuitem\",\n            text: translatedText,\n            icon: rawItem.icon,\n            active: rawItem.isSelected(value2),\n            enabled: !invalid,\n            onAction: spec.onAction(rawItem),\n            ...rawItem.getStylePreview().fold(() => ({}), (preview) => ({ meta: { style: preview } }))\n          });\n        }\n      };\n      const validate = (item2, response, value2) => {\n        const invalid = item2.type === \"formatter\" && spec.isInvalid(item2);\n        if (response === 0) {\n          return invalid ? [] : generateItem(item2, response, false, value2).toArray();\n        } else {\n          return generateItem(item2, response, invalid, value2).toArray();\n        }\n      };\n      const validateItems = (preItems) => {\n        const value2 = spec.getCurrentValue();\n        const response = spec.shouldHide ? 0 : 1;\n        return bind$3(preItems, (item2) => validate(item2, response, value2));\n      };\n      const getFetch2 = (backstage2, getStyleItems) => (comp, callback) => {\n        const preItems = getStyleItems();\n        const items = validateItems(preItems);\n        const menu2 = build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage2, false);\n        callback(menu2);\n      };\n      return {\n        validateItems,\n        getFetch: getFetch2\n      };\n    };\n    const createMenuItems = (editor, backstage, spec) => {\n      const dataset2 = spec.dataset;\n      const getStyleItems = dataset2.type === \"basic\" ? () => map$2(dataset2.data, (d2) => processBasic(d2, spec.isSelectedFor, spec.getPreviewFor)) : dataset2.getData;\n      return {\n        items: generateSelectItems(editor, backstage, spec),\n        getStyleItems\n      };\n    };\n    const createSelectButton = (editor, backstage, spec) => {\n      const { items, getStyleItems } = createMenuItems(editor, backstage, spec);\n      const getApi2 = (comp) => ({ getComponent: constant$1(comp) });\n      const onSetup2 = onSetupEvent(editor, \"NodeChange\", (api2) => {\n        const comp = api2.getComponent();\n        spec.updateText(comp);\n      });\n      return renderCommonDropdown({\n        text: spec.icon.isSome() ? Optional.none() : spec.text,\n        icon: spec.icon,\n        tooltip: Optional.from(spec.tooltip),\n        role: Optional.none(),\n        fetch: items.getFetch(backstage, getStyleItems),\n        onSetup: onSetup2,\n        getApi: getApi2,\n        columns: 1,\n        presets: \"normal\",\n        classes: spec.icon.isSome() ? [] : [\"bespoke\"],\n        dropdownBehaviours: []\n      }, \"tox-tbtn\", backstage.shared);\n    };\n    const process = (rawFormats) => map$2(rawFormats, (item2) => {\n      let title2 = item2, format2 = item2;\n      const values2 = item2.split(\"=\");\n      if (values2.length > 1) {\n        title2 = values2[0];\n        format2 = values2[1];\n      }\n      return {\n        title: title2,\n        format: format2\n      };\n    });\n    const buildBasicStaticDataset = (data) => ({\n      type: \"basic\",\n      data\n    });\n    var Delimiter;\n    (function(Delimiter2) {\n      Delimiter2[Delimiter2[\"SemiColon\"] = 0] = \"SemiColon\";\n      Delimiter2[Delimiter2[\"Space\"] = 1] = \"Space\";\n    })(Delimiter || (Delimiter = {}));\n    const split = (rawFormats, delimiter2) => {\n      if (delimiter2 === Delimiter.SemiColon) {\n        return rawFormats.replace(/;$/, \"\").split(\";\");\n      } else {\n        return rawFormats.split(\" \");\n      }\n    };\n    const buildBasicSettingsDataset = (editor, settingName, delimiter2) => {\n      const rawFormats = editor.options.get(settingName);\n      const data = process(split(rawFormats, delimiter2));\n      return {\n        type: \"basic\",\n        data\n      };\n    };\n    const alignMenuItems = [\n      {\n        title: \"Left\",\n        icon: \"align-left\",\n        format: \"alignleft\",\n        command: \"JustifyLeft\"\n      },\n      {\n        title: \"Center\",\n        icon: \"align-center\",\n        format: \"aligncenter\",\n        command: \"JustifyCenter\"\n      },\n      {\n        title: \"Right\",\n        icon: \"align-right\",\n        format: \"alignright\",\n        command: \"JustifyRight\"\n      },\n      {\n        title: \"Justify\",\n        icon: \"align-justify\",\n        format: \"alignjustify\",\n        command: \"JustifyFull\"\n      }\n    ];\n    const getSpec$4 = (editor) => {\n      const getMatchingValue = () => find$5(alignMenuItems, (item2) => editor.formatter.match(item2.format));\n      const isSelectedFor = (format2) => () => editor.formatter.match(format2);\n      const getPreviewFor = (_format) => Optional.none;\n      const updateSelectMenuIcon = (comp) => {\n        const match3 = getMatchingValue();\n        const alignment = match3.fold(constant$1(\"left\"), (item2) => item2.title.toLowerCase());\n        emitWith(comp, updateMenuIcon, { icon: `align-${alignment}` });\n      };\n      const dataset2 = buildBasicStaticDataset(alignMenuItems);\n      const onAction2 = (rawItem) => () => find$5(alignMenuItems, (item2) => item2.format === rawItem.format).each((item2) => editor.execCommand(item2.command));\n      return {\n        tooltip: \"Align\",\n        text: Optional.none(),\n        icon: Optional.some(\"align-left\"),\n        isSelectedFor,\n        getCurrentValue: Optional.none,\n        getPreviewFor,\n        onAction: onAction2,\n        updateText: updateSelectMenuIcon,\n        dataset: dataset2,\n        shouldHide: false,\n        isInvalid: (item2) => !editor.formatter.canApply(item2.format)\n      };\n    };\n    const createAlignButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$4(editor));\n    const createAlignMenu = (editor, backstage) => {\n      const menuItems = createMenuItems(editor, backstage, getSpec$4(editor));\n      editor.ui.registry.addNestedMenuItem(\"align\", {\n        text: backstage.shared.providers.translate(\"Align\"),\n        getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n      });\n    };\n    const findNearest = (editor, getStyles) => {\n      const styles = getStyles();\n      const formats = map$2(styles, (style) => style.format);\n      return Optional.from(editor.formatter.closest(formats)).bind((fmt) => find$5(styles, (data) => data.format === fmt)).orThunk(() => someIf(editor.formatter.match(\"p\"), {\n        title: \"Paragraph\",\n        format: \"p\"\n      }));\n    };\n    const getSpec$3 = (editor) => {\n      const fallbackFormat = \"Paragraph\";\n      const isSelectedFor = (format2) => () => editor.formatter.match(format2);\n      const getPreviewFor = (format2) => () => {\n        const fmt = editor.formatter.get(format2);\n        return Optional.some({\n          tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || \"div\" : \"div\",\n          styles: editor.dom.parseStyle(editor.formatter.getCssText(format2))\n        });\n      };\n      const updateSelectMenuText = (comp) => {\n        const detectedFormat = findNearest(editor, () => dataset2.data);\n        const text3 = detectedFormat.fold(constant$1(fallbackFormat), (fmt) => fmt.title);\n        emitWith(comp, updateMenuText, { text: text3 });\n      };\n      const dataset2 = buildBasicSettingsDataset(editor, \"block_formats\", Delimiter.SemiColon);\n      return {\n        tooltip: \"Blocks\",\n        text: Optional.some(fallbackFormat),\n        icon: Optional.none(),\n        isSelectedFor,\n        getCurrentValue: Optional.none,\n        getPreviewFor,\n        onAction: onActionToggleFormat$1(editor),\n        updateText: updateSelectMenuText,\n        dataset: dataset2,\n        shouldHide: false,\n        isInvalid: (item2) => !editor.formatter.canApply(item2.format)\n      };\n    };\n    const createBlocksButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$3(editor));\n    const createBlocksMenu = (editor, backstage) => {\n      const menuItems = createMenuItems(editor, backstage, getSpec$3(editor));\n      editor.ui.registry.addNestedMenuItem(\"blocks\", {\n        text: \"Blocks\",\n        getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n      });\n    };\n    const systemStackFonts = [\n      \"-apple-system\",\n      \"Segoe UI\",\n      \"Roboto\",\n      \"Helvetica Neue\",\n      \"sans-serif\"\n    ];\n    const splitFonts = (fontFamily) => {\n      const fonts = fontFamily.split(/\\s*,\\s*/);\n      return map$2(fonts, (font) => font.replace(/^['\"]+|['\"]+$/g, \"\"));\n    };\n    const isSystemFontStack = (fontFamily) => {\n      const matchesSystemStack = () => {\n        const fonts = splitFonts(fontFamily.toLowerCase());\n        return forall(systemStackFonts, (font) => fonts.indexOf(font.toLowerCase()) > -1);\n      };\n      return fontFamily.indexOf(\"-apple-system\") === 0 && matchesSystemStack();\n    };\n    const getSpec$2 = (editor) => {\n      const systemFont = \"System Font\";\n      const getMatchingValue = () => {\n        const getFirstFont = (fontFamily2) => fontFamily2 ? splitFonts(fontFamily2)[0] : \"\";\n        const fontFamily = editor.queryCommandValue(\"FontName\");\n        const items = dataset2.data;\n        const font = fontFamily ? fontFamily.toLowerCase() : \"\";\n        const matchOpt = find$5(items, (item2) => {\n          const format2 = item2.format;\n          return format2.toLowerCase() === font || getFirstFont(format2).toLowerCase() === getFirstFont(font).toLowerCase();\n        }).orThunk(() => {\n          return someIf(isSystemFontStack(font), {\n            title: systemFont,\n            format: font\n          });\n        });\n        return {\n          matchOpt,\n          font: fontFamily\n        };\n      };\n      const isSelectedFor = (item2) => (valueOpt) => valueOpt.exists((value2) => value2.format === item2);\n      const getCurrentValue = () => {\n        const { matchOpt } = getMatchingValue();\n        return matchOpt;\n      };\n      const getPreviewFor = (item2) => () => Optional.some({\n        tag: \"div\",\n        styles: item2.indexOf(\"dings\") === -1 ? { \"font-family\": item2 } : {}\n      });\n      const onAction2 = (rawItem) => () => {\n        editor.undoManager.transact(() => {\n          editor.focus();\n          editor.execCommand(\"FontName\", false, rawItem.format);\n        });\n      };\n      const updateSelectMenuText = (comp) => {\n        const { matchOpt, font } = getMatchingValue();\n        const text3 = matchOpt.fold(constant$1(font), (item2) => item2.title);\n        emitWith(comp, updateMenuText, { text: text3 });\n      };\n      const dataset2 = buildBasicSettingsDataset(editor, \"font_family_formats\", Delimiter.SemiColon);\n      return {\n        tooltip: \"Fonts\",\n        text: Optional.some(systemFont),\n        icon: Optional.none(),\n        isSelectedFor,\n        getCurrentValue,\n        getPreviewFor,\n        onAction: onAction2,\n        updateText: updateSelectMenuText,\n        dataset: dataset2,\n        shouldHide: false,\n        isInvalid: never\n      };\n    };\n    const createFontFamilyButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$2(editor));\n    const createFontFamilyMenu = (editor, backstage) => {\n      const menuItems = createMenuItems(editor, backstage, getSpec$2(editor));\n      editor.ui.registry.addNestedMenuItem(\"fontfamily\", {\n        text: backstage.shared.providers.translate(\"Fonts\"),\n        getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n      });\n    };\n    const legacyFontSizes = {\n      \"8pt\": \"1\",\n      \"10pt\": \"2\",\n      \"12pt\": \"3\",\n      \"14pt\": \"4\",\n      \"18pt\": \"5\",\n      \"24pt\": \"6\",\n      \"36pt\": \"7\"\n    };\n    const keywordFontSizes = {\n      \"xx-small\": \"7pt\",\n      \"x-small\": \"8pt\",\n      \"small\": \"10pt\",\n      \"medium\": \"12pt\",\n      \"large\": \"14pt\",\n      \"x-large\": \"18pt\",\n      \"xx-large\": \"24pt\"\n    };\n    const round = (number2, precision) => {\n      const factor = Math.pow(10, precision);\n      return Math.round(number2 * factor) / factor;\n    };\n    const toPt = (fontSize, precision) => {\n      if (/[0-9.]+px$/.test(fontSize)) {\n        return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + \"pt\";\n      } else {\n        return get$g(keywordFontSizes, fontSize).getOr(fontSize);\n      }\n    };\n    const toLegacy = (fontSize) => get$g(legacyFontSizes, fontSize).getOr(\"\");\n    const getSpec$1 = (editor) => {\n      const getMatchingValue = () => {\n        let matchOpt = Optional.none();\n        const items = dataset2.data;\n        const fontSize = editor.queryCommandValue(\"FontSize\");\n        if (fontSize) {\n          for (let precision = 3; matchOpt.isNone() && precision >= 0; precision--) {\n            const pt = toPt(fontSize, precision);\n            const legacy = toLegacy(pt);\n            matchOpt = find$5(items, (item2) => item2.format === fontSize || item2.format === pt || item2.format === legacy);\n          }\n        }\n        return {\n          matchOpt,\n          size: fontSize\n        };\n      };\n      const isSelectedFor = (item2) => (valueOpt) => valueOpt.exists((value2) => value2.format === item2);\n      const getCurrentValue = () => {\n        const { matchOpt } = getMatchingValue();\n        return matchOpt;\n      };\n      const getPreviewFor = constant$1(Optional.none);\n      const onAction2 = (rawItem) => () => {\n        editor.undoManager.transact(() => {\n          editor.focus();\n          editor.execCommand(\"FontSize\", false, rawItem.format);\n        });\n      };\n      const updateSelectMenuText = (comp) => {\n        const { matchOpt, size } = getMatchingValue();\n        const text3 = matchOpt.fold(constant$1(size), (match3) => match3.title);\n        emitWith(comp, updateMenuText, { text: text3 });\n      };\n      const dataset2 = buildBasicSettingsDataset(editor, \"font_size_formats\", Delimiter.Space);\n      return {\n        tooltip: \"Font sizes\",\n        text: Optional.some(\"12pt\"),\n        icon: Optional.none(),\n        isSelectedFor,\n        getPreviewFor,\n        getCurrentValue,\n        onAction: onAction2,\n        updateText: updateSelectMenuText,\n        dataset: dataset2,\n        shouldHide: false,\n        isInvalid: never\n      };\n    };\n    const createFontSizeButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$1(editor));\n    const createFontSizeMenu = (editor, backstage) => {\n      const menuItems = createMenuItems(editor, backstage, getSpec$1(editor));\n      editor.ui.registry.addNestedMenuItem(\"fontsize\", {\n        text: \"Font sizes\",\n        getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n      });\n    };\n    const getSpec = (editor, dataset2) => {\n      const fallbackFormat = \"Paragraph\";\n      const isSelectedFor = (format2) => () => editor.formatter.match(format2);\n      const getPreviewFor = (format2) => () => {\n        const fmt = editor.formatter.get(format2);\n        return fmt !== void 0 ? Optional.some({\n          tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || \"div\" : \"div\",\n          styles: editor.dom.parseStyle(editor.formatter.getCssText(format2))\n        }) : Optional.none();\n      };\n      const updateSelectMenuText = (comp) => {\n        const getFormatItems = (fmt) => {\n          const subs2 = fmt.items;\n          return subs2 !== void 0 && subs2.length > 0 ? bind$3(subs2, getFormatItems) : [{\n            title: fmt.title,\n            format: fmt.format\n          }];\n        };\n        const flattenedItems = bind$3(getStyleFormats(editor), getFormatItems);\n        const detectedFormat = findNearest(editor, constant$1(flattenedItems));\n        const text3 = detectedFormat.fold(constant$1(fallbackFormat), (fmt) => fmt.title);\n        emitWith(comp, updateMenuText, { text: text3 });\n      };\n      return {\n        tooltip: \"Formats\",\n        text: Optional.some(fallbackFormat),\n        icon: Optional.none(),\n        isSelectedFor,\n        getCurrentValue: Optional.none,\n        getPreviewFor,\n        onAction: onActionToggleFormat$1(editor),\n        updateText: updateSelectMenuText,\n        shouldHide: shouldAutoHideStyleFormats(editor),\n        isInvalid: (item2) => !editor.formatter.canApply(item2.format),\n        dataset: dataset2\n      };\n    };\n    const createStylesButton = (editor, backstage) => {\n      const dataset2 = {\n        type: \"advanced\",\n        ...backstage.styles\n      };\n      return createSelectButton(editor, backstage, getSpec(editor, dataset2));\n    };\n    const createStylesMenu = (editor, backstage) => {\n      const dataset2 = {\n        type: \"advanced\",\n        ...backstage.styles\n      };\n      const menuItems = createMenuItems(editor, backstage, getSpec(editor, dataset2));\n      editor.ui.registry.addNestedMenuItem(\"styles\", {\n        text: \"Formats\",\n        getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n      });\n    };\n    const events$3 = (reflectingConfig, reflectingState) => {\n      const update = (component, data) => {\n        reflectingConfig.updateState.each((updateState) => {\n          const newState = updateState(component, data);\n          reflectingState.set(newState);\n        });\n        reflectingConfig.renderComponents.each((renderComponents2) => {\n          const newComponents = renderComponents2(data, reflectingState.get());\n          const replacer = reflectingConfig.reuseDom ? withReuse : withoutReuse;\n          replacer(component, newComponents);\n        });\n      };\n      return derive$2([\n        run$1(receive(), (component, message) => {\n          const receivingData = message;\n          if (!receivingData.universal) {\n            const channel = reflectingConfig.channel;\n            if (contains$2(receivingData.channels, channel)) {\n              update(component, receivingData.data);\n            }\n          }\n        }),\n        runOnAttached((comp, _se) => {\n          reflectingConfig.initialData.each((rawData) => {\n            update(comp, rawData);\n          });\n        })\n      ]);\n    };\n    var ActiveReflecting = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      events: events$3\n    });\n    const getState = (component, replaceConfig, reflectState) => reflectState;\n    var ReflectingApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      getState\n    });\n    var ReflectingSchema = [\n      required$1(\"channel\"),\n      option$3(\"renderComponents\"),\n      option$3(\"updateState\"),\n      option$3(\"initialData\"),\n      defaultedBoolean(\"reuseDom\", true)\n    ];\n    const init$3 = () => {\n      const cell = Cell(Optional.none());\n      const clear2 = () => cell.set(Optional.none());\n      const readState = () => cell.get().getOr(\"none\");\n      return {\n        readState,\n        get: cell.get,\n        set: cell.set,\n        clear: clear2\n      };\n    };\n    var ReflectingState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      init: init$3\n    });\n    const Reflecting = create$3({\n      fields: ReflectingSchema,\n      name: \"reflecting\",\n      active: ActiveReflecting,\n      apis: ReflectingApis,\n      state: ReflectingState\n    });\n    const schema$7 = constant$1([\n      required$1(\"toggleClass\"),\n      required$1(\"fetch\"),\n      onStrictHandler(\"onExecute\"),\n      defaulted(\"getHotspot\", Optional.some),\n      defaulted(\"getAnchorOverrides\", constant$1({})),\n      schema$y(),\n      onStrictHandler(\"onItemExecute\"),\n      option$3(\"lazySink\"),\n      required$1(\"dom\"),\n      onHandler(\"onOpen\"),\n      field(\"splitDropdownBehaviours\", [\n        Coupling,\n        Keying,\n        Focusing\n      ]),\n      defaulted(\"matchWidth\", false),\n      defaulted(\"useMinWidth\", false),\n      defaulted(\"eventOrder\", {}),\n      option$3(\"role\")\n    ].concat(sandboxFields()));\n    const arrowPart = required({\n      factory: Button,\n      schema: [required$1(\"dom\")],\n      name: \"arrow\",\n      defaults: () => {\n        return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n      },\n      overrides: (detail) => {\n        return {\n          dom: {\n            tag: \"span\",\n            attributes: { role: \"presentation\" }\n          },\n          action: (arrow) => {\n            arrow.getSystem().getByUid(detail.uid).each(emitExecute);\n          },\n          buttonBehaviours: derive$1([Toggling.config({\n            toggleOnExecute: false,\n            toggleClass: detail.toggleClass\n          })])\n        };\n      }\n    });\n    const buttonPart = required({\n      factory: Button,\n      schema: [required$1(\"dom\")],\n      name: \"button\",\n      defaults: () => {\n        return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n      },\n      overrides: (detail) => {\n        return {\n          dom: {\n            tag: \"span\",\n            attributes: { role: \"presentation\" }\n          },\n          action: (btn) => {\n            btn.getSystem().getByUid(detail.uid).each((splitDropdown) => {\n              detail.onExecute(splitDropdown, btn);\n            });\n          }\n        };\n      }\n    });\n    const parts$3 = constant$1([\n      arrowPart,\n      buttonPart,\n      optional({\n        factory: {\n          sketch: (spec) => {\n            return {\n              uid: spec.uid,\n              dom: {\n                tag: \"span\",\n                styles: { display: \"none\" },\n                attributes: { \"aria-hidden\": \"true\" },\n                innerHtml: spec.text\n              }\n            };\n          }\n        },\n        schema: [required$1(\"text\")],\n        name: \"aria-descriptor\"\n      }),\n      external({\n        schema: [tieredMenuMarkers()],\n        name: \"menu\",\n        defaults: (detail) => {\n          return {\n            onExecute: (tmenu, item2) => {\n              tmenu.getSystem().getByUid(detail.uid).each((splitDropdown) => {\n                detail.onItemExecute(splitDropdown, tmenu, item2);\n              });\n            }\n          };\n        }\n      }),\n      partType$1()\n    ]);\n    const factory$5 = (detail, components2, spec, externals) => {\n      const switchToMenu = (sandbox) => {\n        Composing.getCurrent(sandbox).each((current) => {\n          Highlighting.highlightFirst(current);\n          Keying.focusIn(current);\n        });\n      };\n      const action = (component) => {\n        const onOpenSync = switchToMenu;\n        togglePopup(detail, identity2, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n      };\n      const openMenu = (comp) => {\n        action(comp);\n        return Optional.some(true);\n      };\n      const executeOnButton = (comp) => {\n        const button2 = getPartOrDie(comp, detail, \"button\");\n        emitExecute(button2);\n        return Optional.some(true);\n      };\n      const buttonEvents = {\n        ...derive$2([runOnAttached((component, _simulatedEvent) => {\n          const ariaDescriptor = getPart(component, detail, \"aria-descriptor\");\n          ariaDescriptor.each((descriptor) => {\n            const descriptorId = generate$6(\"aria\");\n            set$9(descriptor.element, \"id\", descriptorId);\n            set$9(component.element, \"aria-describedby\", descriptorId);\n          });\n        })]),\n        ...events$a(Optional.some(action))\n      };\n      const apis = {\n        repositionMenus: (comp) => {\n          if (Toggling.isOn(comp)) {\n            repositionMenus(comp);\n          }\n        }\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: components2,\n        apis,\n        eventOrder: {\n          ...detail.eventOrder,\n          [execute$5()]: [\n            \"disabling\",\n            \"toggling\",\n            \"alloy.base.behaviour\"\n          ]\n        },\n        events: buttonEvents,\n        behaviours: augment(detail.splitDropdownBehaviours, [\n          Coupling.config({\n            others: {\n              sandbox: (hotspot) => {\n                const arrow = getPartOrDie(hotspot, detail, \"arrow\");\n                const extras = {\n                  onOpen: () => {\n                    Toggling.on(arrow);\n                    Toggling.on(hotspot);\n                  },\n                  onClose: () => {\n                    Toggling.off(arrow);\n                    Toggling.off(hotspot);\n                  }\n                };\n                return makeSandbox$1(detail, hotspot, extras);\n              }\n            }\n          }),\n          Keying.config({\n            mode: \"special\",\n            onSpace: executeOnButton,\n            onEnter: executeOnButton,\n            onDown: openMenu\n          }),\n          Focusing.config({}),\n          Toggling.config({\n            toggleOnExecute: false,\n            aria: { mode: \"expanded\" }\n          })\n        ]),\n        domModification: {\n          attributes: {\n            \"role\": detail.role.getOr(\"button\"),\n            \"aria-haspopup\": true\n          }\n        }\n      };\n    };\n    const SplitDropdown = composite({\n      name: \"SplitDropdown\",\n      configFields: schema$7(),\n      partFields: parts$3(),\n      factory: factory$5,\n      apis: { repositionMenus: (apis, comp) => apis.repositionMenus(comp) }\n    });\n    const getButtonApi = (component) => ({\n      isEnabled: () => !Disabling.isDisabled(component),\n      setEnabled: (state) => Disabling.set(component, !state)\n    });\n    const getToggleApi = (component) => ({\n      setActive: (state) => {\n        Toggling.set(component, state);\n      },\n      isActive: () => Toggling.isOn(component),\n      isEnabled: () => !Disabling.isDisabled(component),\n      setEnabled: (state) => Disabling.set(component, !state)\n    });\n    const getTooltipAttributes = (tooltip, providersBackstage) => tooltip.map((tooltip2) => ({\n      \"aria-label\": providersBackstage.translate(tooltip2),\n      \"title\": providersBackstage.translate(tooltip2)\n    })).getOr({});\n    const focusButtonEvent = generate$6(\"focus-button\");\n    const renderCommonStructure = (icon2, text3, tooltip, receiver, behaviours2, providersBackstage) => {\n      return {\n        dom: {\n          tag: \"button\",\n          classes: [\"tox-tbtn\"].concat(text3.isSome() ? [\"tox-tbtn--select\"] : []),\n          attributes: getTooltipAttributes(tooltip, providersBackstage)\n        },\n        components: componentRenderPipeline([\n          icon2.map((iconName) => renderIconFromPack(iconName, providersBackstage.icons)),\n          text3.map((text4) => renderLabel(text4, \"tox-tbtn\", providersBackstage))\n        ]),\n        eventOrder: {\n          [mousedown()]: [\n            \"focusing\",\n            \"alloy.base.behaviour\",\n            \"common-button-display-events\"\n          ]\n        },\n        buttonBehaviours: derive$1([\n          DisablingConfigs.toolbarButton(providersBackstage.isDisabled),\n          receivingConfig(),\n          config2(\"common-button-display-events\", [run$1(mousedown(), (button2, se) => {\n            se.event.prevent();\n            emit(button2, focusButtonEvent);\n          })])\n        ].concat(receiver.map((r4) => Reflecting.config({\n          channel: r4,\n          initialData: {\n            icon: icon2,\n            text: text3\n          },\n          renderComponents: (data, _state) => componentRenderPipeline([\n            data.icon.map((iconName) => renderIconFromPack(iconName, providersBackstage.icons)),\n            data.text.map((text4) => renderLabel(text4, \"tox-tbtn\", providersBackstage))\n          ])\n        })).toArray()).concat(behaviours2.getOr([])))\n      };\n    };\n    const renderFloatingToolbarButton = (spec, backstage, identifyButtons2, attributes) => {\n      const sharedBackstage = backstage.shared;\n      return FloatingToolbarButton.sketch({\n        lazySink: sharedBackstage.getSink,\n        fetch: () => Future.nu((resolve) => {\n          resolve(map$2(identifyButtons2(spec.items), renderToolbarGroup));\n        }),\n        markers: { toggledClass: \"tox-tbtn--enabled\" },\n        parts: {\n          button: renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), Optional.none(), sharedBackstage.providers),\n          toolbar: {\n            dom: {\n              tag: \"div\",\n              classes: [\"tox-toolbar__overflow\"],\n              attributes\n            }\n          }\n        }\n      });\n    };\n    const renderCommonToolbarButton = (spec, specialisation, providersBackstage) => {\n      const editorOffCell = Cell(noop);\n      const structure = renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), Optional.none(), providersBackstage);\n      return Button.sketch({\n        dom: structure.dom,\n        components: structure.components,\n        eventOrder: toolbarButtonEventOrder,\n        buttonBehaviours: derive$1([\n          config2(\"toolbar-button-events\", [\n            onToolbarButtonExecute({\n              onAction: spec.onAction,\n              getApi: specialisation.getApi\n            }),\n            onControlAttached(specialisation, editorOffCell),\n            onControlDetached(specialisation, editorOffCell)\n          ]),\n          DisablingConfigs.toolbarButton(() => !spec.enabled || providersBackstage.isDisabled()),\n          receivingConfig()\n        ].concat(specialisation.toolbarButtonBehaviours))\n      });\n    };\n    const renderToolbarButton = (spec, providersBackstage) => renderToolbarButtonWith(spec, providersBackstage, []);\n    const renderToolbarButtonWith = (spec, providersBackstage, bonusEvents) => renderCommonToolbarButton(spec, {\n      toolbarButtonBehaviours: [].concat(bonusEvents.length > 0 ? [config2(\"toolbarButtonWith\", bonusEvents)] : []),\n      getApi: getButtonApi,\n      onSetup: spec.onSetup\n    }, providersBackstage);\n    const renderToolbarToggleButton = (spec, providersBackstage) => renderToolbarToggleButtonWith(spec, providersBackstage, []);\n    const renderToolbarToggleButtonWith = (spec, providersBackstage, bonusEvents) => deepMerge(renderCommonToolbarButton(spec, {\n      toolbarButtonBehaviours: [\n        Replacing.config({}),\n        Toggling.config({\n          toggleClass: \"tox-tbtn--enabled\",\n          aria: { mode: \"pressed\" },\n          toggleOnExecute: false\n        })\n      ].concat(bonusEvents.length > 0 ? [config2(\"toolbarToggleButtonWith\", bonusEvents)] : []),\n      getApi: getToggleApi,\n      onSetup: spec.onSetup\n    }, providersBackstage));\n    const fetchChoices = (getApi2, spec, providersBackstage) => (comp) => Future.nu((callback) => spec.fetch(callback)).map((items) => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6(\"menu-value\"), items, (value2) => {\n      spec.onItemAction(getApi2(comp), value2);\n    }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), providersBackstage), {\n      movement: deriveMenuMovement(spec.columns, spec.presets),\n      menuBehaviours: SimpleBehaviours.unnamedEvents(spec.columns !== \"auto\" ? [] : [runOnAttached((comp2, _se) => {\n        detectSize(comp2, 4, classForPreset(spec.presets)).each(({ numRows, numColumns }) => {\n          Keying.setGridSize(comp2, numRows, numColumns);\n        });\n      })])\n    }))));\n    const renderSplitButton = (spec, sharedBackstage) => {\n      const displayChannel = generate$6(\"channel-update-split-dropdown-display\");\n      const getApi2 = (comp) => ({\n        isEnabled: () => !Disabling.isDisabled(comp),\n        setEnabled: (state) => Disabling.set(comp, !state),\n        setIconFill: (id, value2) => {\n          descendant(comp.element, 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each((underlinePath) => {\n            set$9(underlinePath, \"fill\", value2);\n          });\n        },\n        setActive: (state) => {\n          set$9(comp.element, \"aria-pressed\", state);\n          descendant(comp.element, \"span\").each((button2) => {\n            comp.getSystem().getByDom(button2).each((buttonComp) => Toggling.set(buttonComp, state));\n          });\n        },\n        isActive: () => descendant(comp.element, \"span\").exists((button2) => comp.getSystem().getByDom(button2).exists(Toggling.isOn))\n      });\n      const editorOffCell = Cell(noop);\n      const specialisation = {\n        getApi: getApi2,\n        onSetup: spec.onSetup\n      };\n      return SplitDropdown.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-split-button\"],\n          attributes: {\n            \"aria-pressed\": false,\n            ...getTooltipAttributes(spec.tooltip, sharedBackstage.providers)\n          }\n        },\n        onExecute: (button2) => {\n          spec.onAction(getApi2(button2));\n        },\n        onItemExecute: (_a3, _b, _c) => {\n        },\n        splitDropdownBehaviours: derive$1([\n          DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n          receivingConfig(),\n          config2(\"split-dropdown-events\", [\n            run$1(focusButtonEvent, Focusing.focus),\n            onControlAttached(specialisation, editorOffCell),\n            onControlDetached(specialisation, editorOffCell)\n          ]),\n          Unselecting.config({})\n        ]),\n        eventOrder: {\n          [attachedToDom()]: [\n            \"alloy.base.behaviour\",\n            \"split-dropdown-events\"\n          ]\n        },\n        toggleClass: \"tox-tbtn--enabled\",\n        lazySink: sharedBackstage.getSink,\n        fetch: fetchChoices(getApi2, spec, sharedBackstage.providers),\n        parts: { menu: part(false, spec.columns, spec.presets) },\n        components: [\n          SplitDropdown.parts.button(renderCommonStructure(spec.icon, spec.text, Optional.none(), Optional.some(displayChannel), Optional.some([Toggling.config({\n            toggleClass: \"tox-tbtn--enabled\",\n            toggleOnExecute: false\n          })]), sharedBackstage.providers)),\n          SplitDropdown.parts.arrow({\n            dom: {\n              tag: \"button\",\n              classes: [\n                \"tox-tbtn\",\n                \"tox-split-button__chevron\"\n              ],\n              innerHtml: get$2(\"chevron-down\", sharedBackstage.providers.icons)\n            },\n            buttonBehaviours: derive$1([\n              DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n              receivingConfig(),\n              addFocusableBehaviour()\n            ])\n          }),\n          SplitDropdown.parts[\"aria-descriptor\"]({ text: sharedBackstage.providers.translate(\"To open the popup, press Shift+Enter\") })\n        ]\n      });\n    };\n    const defaultToolbar = [\n      {\n        name: \"history\",\n        items: [\n          \"undo\",\n          \"redo\"\n        ]\n      },\n      {\n        name: \"styles\",\n        items: [\"styles\"]\n      },\n      {\n        name: \"formatting\",\n        items: [\n          \"bold\",\n          \"italic\"\n        ]\n      },\n      {\n        name: \"alignment\",\n        items: [\n          \"alignleft\",\n          \"aligncenter\",\n          \"alignright\",\n          \"alignjustify\"\n        ]\n      },\n      {\n        name: \"indentation\",\n        items: [\n          \"outdent\",\n          \"indent\"\n        ]\n      },\n      {\n        name: \"permanent pen\",\n        items: [\"permanentpen\"]\n      },\n      {\n        name: \"comments\",\n        items: [\"addcomment\"]\n      }\n    ];\n    const renderFromBridge = (bridgeBuilder, render2) => (spec, extras, editor) => {\n      const internal = bridgeBuilder(spec).mapError((errInfo) => formatError(errInfo)).getOrDie();\n      return render2(internal, extras, editor);\n    };\n    const types = {\n      button: renderFromBridge(createToolbarButton, (s2, extras) => renderToolbarButton(s2, extras.backstage.shared.providers)),\n      togglebutton: renderFromBridge(createToggleButton, (s2, extras) => renderToolbarToggleButton(s2, extras.backstage.shared.providers)),\n      menubutton: renderFromBridge(createMenuButton, (s2, extras) => renderMenuButton(s2, \"tox-tbtn\", extras.backstage, Optional.none())),\n      splitbutton: renderFromBridge(createSplitButton, (s2, extras) => renderSplitButton(s2, extras.backstage.shared)),\n      grouptoolbarbutton: renderFromBridge(createGroupToolbarButton, (s2, extras, editor) => {\n        const buttons = editor.ui.registry.getAll().buttons;\n        const identify = (toolbar) => identifyButtons(editor, {\n          buttons,\n          toolbar,\n          allowToolbarGroups: false\n        }, extras, Optional.none());\n        const attributes = { [Attribute]: extras.backstage.shared.header.isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop };\n        switch (getToolbarMode(editor)) {\n          case ToolbarMode$1.floating:\n            return renderFloatingToolbarButton(s2, extras.backstage, identify, attributes);\n          default:\n            throw new Error(\"Toolbar groups are only supported when using floating toolbar mode\");\n        }\n      }),\n      styleSelectButton: (editor, extras) => createStylesButton(editor, extras.backstage),\n      fontsizeSelectButton: (editor, extras) => createFontSizeButton(editor, extras.backstage),\n      fontSelectButton: (editor, extras) => createFontFamilyButton(editor, extras.backstage),\n      formatButton: (editor, extras) => createBlocksButton(editor, extras.backstage),\n      alignMenuButton: (editor, extras) => createAlignButton(editor, extras.backstage)\n    };\n    const extractFrom = (spec, extras, editor) => get$g(types, spec.type).fold(() => {\n      console.error(\"skipping button defined by\", spec);\n      return Optional.none();\n    }, (render2) => Optional.some(render2(spec, extras, editor)));\n    const bespokeButtons = {\n      styles: types.styleSelectButton,\n      fontsize: types.fontsizeSelectButton,\n      fontfamily: types.fontSelectButton,\n      blocks: types.formatButton,\n      align: types.alignMenuButton\n    };\n    const removeUnusedDefaults = (buttons) => {\n      const filteredItemGroups = map$2(defaultToolbar, (group2) => {\n        const items = filter$2(group2.items, (subItem) => has$2(buttons, subItem) || has$2(bespokeButtons, subItem));\n        return {\n          name: group2.name,\n          items\n        };\n      });\n      return filter$2(filteredItemGroups, (group2) => group2.items.length > 0);\n    };\n    const convertStringToolbar = (strToolbar) => {\n      const groupsStrings = strToolbar.split(\"|\");\n      return map$2(groupsStrings, (g2) => ({ items: g2.trim().split(\" \") }));\n    };\n    const isToolbarGroupSettingArray = (toolbar) => isArrayOf(toolbar, (t3) => has$2(t3, \"name\") && has$2(t3, \"items\"));\n    const createToolbar = (toolbarConfig) => {\n      const toolbar = toolbarConfig.toolbar;\n      const buttons = toolbarConfig.buttons;\n      if (toolbar === false) {\n        return [];\n      } else if (toolbar === void 0 || toolbar === true) {\n        return removeUnusedDefaults(buttons);\n      } else if (isString2(toolbar)) {\n        return convertStringToolbar(toolbar);\n      } else if (isToolbarGroupSettingArray(toolbar)) {\n        return toolbar;\n      } else {\n        console.error(\"Toolbar type should be string, string[], boolean or ToolbarGroup[]\");\n        return [];\n      }\n    };\n    const lookupButton = (editor, buttons, toolbarItem, allowToolbarGroups, extras, prefixes) => get$g(buttons, toolbarItem.toLowerCase()).orThunk(() => prefixes.bind((ps) => findMap(ps, (prefix2) => get$g(buttons, prefix2 + toolbarItem.toLowerCase())))).fold(() => get$g(bespokeButtons, toolbarItem.toLowerCase()).map((r4) => r4(editor, extras)).orThunk(() => Optional.none()), (spec) => {\n      if (spec.type === \"grouptoolbarbutton\" && !allowToolbarGroups) {\n        console.warn(`Ignoring the '${toolbarItem}' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.`);\n        return Optional.none();\n      } else {\n        return extractFrom(spec, extras, editor);\n      }\n    });\n    const identifyButtons = (editor, toolbarConfig, extras, prefixes) => {\n      const toolbarGroups = createToolbar(toolbarConfig);\n      const groups = map$2(toolbarGroups, (group2) => {\n        const items = bind$3(group2.items, (toolbarItem) => toolbarItem.trim().length === 0 ? [] : lookupButton(editor, toolbarConfig.buttons, toolbarItem, toolbarConfig.allowToolbarGroups, extras, prefixes).toArray());\n        return {\n          title: Optional.from(editor.translate(group2.name)),\n          items\n        };\n      });\n      return filter$2(groups, (group2) => group2.items.length > 0);\n    };\n    const setToolbar = (editor, uiComponents, rawUiConfig, backstage) => {\n      const comp = uiComponents.outerContainer;\n      const toolbarConfig = rawUiConfig.toolbar;\n      const toolbarButtonsConfig = rawUiConfig.buttons;\n      if (isArrayOf(toolbarConfig, isString2)) {\n        const toolbars = toolbarConfig.map((t3) => {\n          const config3 = {\n            toolbar: t3,\n            buttons: toolbarButtonsConfig,\n            allowToolbarGroups: rawUiConfig.allowToolbarGroups\n          };\n          return identifyButtons(editor, config3, { backstage }, Optional.none());\n        });\n        OuterContainer.setToolbars(comp, toolbars);\n      } else {\n        OuterContainer.setToolbar(comp, identifyButtons(editor, rawUiConfig, { backstage }, Optional.none()));\n      }\n    };\n    const detection = detect$1();\n    const isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n    const setupEvents$1 = (editor, uiComponents) => {\n      const dom3 = editor.dom;\n      let contentWindow = editor.getWin();\n      const initialDocEle = editor.getDoc().documentElement;\n      const lastWindowDimensions = Cell(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n      const lastDocumentDimensions = Cell(SugarPosition(initialDocEle.offsetWidth, initialDocEle.offsetHeight));\n      const resizeWindow = () => {\n        const outer = lastWindowDimensions.get();\n        if (outer.left !== contentWindow.innerWidth || outer.top !== contentWindow.innerHeight) {\n          lastWindowDimensions.set(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n          fireResizeContent(editor);\n        }\n      };\n      const resizeDocument = () => {\n        const docEle = editor.getDoc().documentElement;\n        const inner = lastDocumentDimensions.get();\n        if (inner.left !== docEle.offsetWidth || inner.top !== docEle.offsetHeight) {\n          lastDocumentDimensions.set(SugarPosition(docEle.offsetWidth, docEle.offsetHeight));\n          fireResizeContent(editor);\n        }\n      };\n      const scroll = (e2) => fireScrollContent(editor, e2);\n      dom3.bind(contentWindow, \"resize\", resizeWindow);\n      dom3.bind(contentWindow, \"scroll\", scroll);\n      const elementLoad = capture(SugarElement.fromDom(editor.getBody()), \"load\", resizeDocument);\n      const mothership = uiComponents.uiMothership.element;\n      editor.on(\"hide\", () => {\n        set$8(mothership, \"display\", \"none\");\n      });\n      editor.on(\"show\", () => {\n        remove$6(mothership, \"display\");\n      });\n      editor.on(\"NodeChange\", resizeDocument);\n      editor.on(\"remove\", () => {\n        elementLoad.unbind();\n        dom3.unbind(contentWindow, \"resize\", resizeWindow);\n        dom3.unbind(contentWindow, \"scroll\", scroll);\n        contentWindow = null;\n      });\n    };\n    const render$1 = (editor, uiComponents, rawUiConfig, backstage, args) => {\n      const lastToolbarWidth = Cell(0);\n      const outerContainer = uiComponents.outerContainer;\n      iframe(editor);\n      const eTargetNode = SugarElement.fromDom(args.targetNode);\n      const uiRoot = getContentContainer(getRootNode(eTargetNode));\n      attachSystemAfter(eTargetNode, uiComponents.mothership);\n      attachSystem(uiRoot, uiComponents.uiMothership);\n      editor.on(\"PostRender\", () => {\n        setToolbar(editor, uiComponents, rawUiConfig, backstage);\n        lastToolbarWidth.set(editor.getWin().innerWidth);\n        OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n        OuterContainer.setSidebar(outerContainer, rawUiConfig.sidebar);\n        setupEvents$1(editor, uiComponents);\n      });\n      const socket = OuterContainer.getSocket(outerContainer).getOrDie(\"Could not find expected socket element\");\n      if (isiOS12) {\n        setAll(socket.element, {\n          \"overflow\": \"scroll\",\n          \"-webkit-overflow-scrolling\": \"touch\"\n        });\n        const limit = first(() => {\n          editor.dispatch(\"ScrollContent\");\n        }, 20);\n        const unbinder = bind(socket.element, \"scroll\", limit.throttle);\n        editor.on(\"remove\", unbinder.unbind);\n      }\n      setupReadonlyModeSwitch(editor, uiComponents);\n      editor.addCommand(\"ToggleSidebar\", (_ui, value2) => {\n        OuterContainer.toggleSidebar(outerContainer, value2);\n        editor.dispatch(\"ToggleSidebar\");\n      });\n      editor.addQueryValueHandler(\"ToggleSidebar\", () => OuterContainer.whichSidebar(outerContainer));\n      const toolbarMode = getToolbarMode(editor);\n      const refreshDrawer = () => {\n        OuterContainer.refreshToolbar(uiComponents.outerContainer);\n      };\n      if (toolbarMode === ToolbarMode$1.sliding || toolbarMode === ToolbarMode$1.floating) {\n        editor.on(\"ResizeWindow ResizeEditor ResizeContent\", () => {\n          const width2 = editor.getWin().innerWidth;\n          if (width2 !== lastToolbarWidth.get()) {\n            refreshDrawer();\n            lastToolbarWidth.set(width2);\n          }\n        });\n      }\n      const api2 = {\n        setEnabled: (state) => {\n          broadcastReadonly(uiComponents, !state);\n        },\n        isEnabled: () => !Disabling.isDisabled(outerContainer)\n      };\n      return {\n        iframeContainer: socket.element.dom,\n        editorContainer: outerContainer.element.dom,\n        api: api2\n      };\n    };\n    var Iframe = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      render: render$1\n    });\n    const parseToInt = (val) => {\n      const re = /^[0-9\\.]+(|px)$/i;\n      if (re.test(\"\" + val)) {\n        return Optional.some(parseInt(\"\" + val, 10));\n      }\n      return Optional.none();\n    };\n    const numToPx = (val) => isNumber2(val) ? val + \"px\" : val;\n    const calcCappedSize = (size, minSize, maxSize) => {\n      const minOverride = minSize.filter((min2) => size < min2);\n      const maxOverride = maxSize.filter((max2) => size > max2);\n      return minOverride.or(maxOverride).getOr(size);\n    };\n    const getHeight = (editor) => {\n      const baseHeight = getHeightOption(editor);\n      const minHeight = getMinHeightOption(editor);\n      const maxHeight = getMaxHeightOption(editor);\n      return parseToInt(baseHeight).map((height2) => calcCappedSize(height2, minHeight, maxHeight));\n    };\n    const getHeightWithFallback = (editor) => {\n      const height2 = getHeight(editor);\n      return height2.getOr(getHeightOption(editor));\n    };\n    const getWidth = (editor) => {\n      const baseWidth = getWidthOption(editor);\n      const minWidth = getMinWidthOption(editor);\n      const maxWidth = getMaxWidthOption(editor);\n      return parseToInt(baseWidth).map((width2) => calcCappedSize(width2, minWidth, maxWidth));\n    };\n    const getWidthWithFallback = (editor) => {\n      const width2 = getWidth(editor);\n      return width2.getOr(getWidthOption(editor));\n    };\n    const { ToolbarLocation, ToolbarMode } = Options;\n    const InlineHeader = (editor, targetElm, uiComponents, backstage, floatContainer) => {\n      const { uiMothership, outerContainer } = uiComponents;\n      const DOM = global$7.DOM;\n      const useFixedToolbarContainer = useFixedContainer(editor);\n      const isSticky = isStickyToolbar(editor);\n      const editorMaxWidthOpt = getMaxWidthOption(editor).or(getWidth(editor));\n      const headerBackstage = backstage.shared.header;\n      const isPositionedAtTop = headerBackstage.isPositionedAtTop;\n      const toolbarMode = getToolbarMode(editor);\n      const isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating;\n      const visible = Cell(false);\n      const isVisible2 = () => visible.get() && !editor.removed;\n      const calcToolbarOffset = (toolbar) => isSplitToolbar ? toolbar.fold(constant$1(0), (tbar) => tbar.components().length > 1 ? get$d(tbar.components()[1].element) : 0) : 0;\n      const calcMode = (container) => {\n        switch (getToolbarLocation(editor)) {\n          case ToolbarLocation.auto:\n            const toolbar = OuterContainer.getToolbar(outerContainer);\n            const offset2 = calcToolbarOffset(toolbar);\n            const toolbarHeight = get$d(container.element) - offset2;\n            const targetBounds = box$1(targetElm);\n            const roomAtTop = targetBounds.y > toolbarHeight;\n            if (roomAtTop) {\n              return \"top\";\n            } else {\n              const doc = documentElement(targetElm);\n              const docHeight = Math.max(doc.dom.scrollHeight, get$d(doc));\n              const roomAtBottom = targetBounds.bottom < docHeight - toolbarHeight;\n              if (roomAtBottom) {\n                return \"bottom\";\n              } else {\n                const winBounds = win();\n                const isRoomAtBottomViewport = winBounds.bottom < targetBounds.bottom - toolbarHeight;\n                return isRoomAtBottomViewport ? \"bottom\" : \"top\";\n              }\n            }\n          case ToolbarLocation.bottom:\n            return \"bottom\";\n          case ToolbarLocation.top:\n          default:\n            return \"top\";\n        }\n      };\n      const setupMode = (mode) => {\n        const container = floatContainer.get();\n        Docking.setModes(container, [mode]);\n        headerBackstage.setDockingMode(mode);\n        const verticalDir = isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop;\n        set$9(container.element, Attribute, verticalDir);\n      };\n      const updateChromeWidth = () => {\n        const maxWidth = editorMaxWidthOpt.getOrThunk(() => {\n          const bodyMargin = parseToInt(get$e(body(), \"margin-left\")).getOr(0);\n          return get$c(body()) - absolute$3(targetElm).left + bodyMargin;\n        });\n        set$8(floatContainer.get().element, \"max-width\", maxWidth + \"px\");\n      };\n      const updateChromePosition = () => {\n        const toolbar = OuterContainer.getToolbar(outerContainer);\n        const offset2 = calcToolbarOffset(toolbar);\n        const targetBounds = box$1(targetElm);\n        const top2 = isPositionedAtTop() ? Math.max(targetBounds.y - get$d(floatContainer.get().element) + offset2, 0) : targetBounds.bottom;\n        setAll(outerContainer.element, {\n          position: \"absolute\",\n          top: Math.round(top2) + \"px\",\n          left: Math.round(targetBounds.x) + \"px\"\n        });\n      };\n      const repositionPopups$1 = () => {\n        uiMothership.broadcastOn([repositionPopups()], {});\n      };\n      const updateChromeUi = (resetDocking = false) => {\n        if (!isVisible2()) {\n          return;\n        }\n        if (!useFixedToolbarContainer) {\n          updateChromeWidth();\n        }\n        if (isSplitToolbar) {\n          OuterContainer.refreshToolbar(outerContainer);\n        }\n        if (!useFixedToolbarContainer) {\n          updateChromePosition();\n        }\n        if (isSticky) {\n          const floatContainerComp = floatContainer.get();\n          resetDocking ? Docking.reset(floatContainerComp) : Docking.refresh(floatContainerComp);\n        }\n        repositionPopups$1();\n      };\n      const updateMode = (updateUi = true) => {\n        if (useFixedToolbarContainer || !isSticky || !isVisible2()) {\n          return;\n        }\n        const currentMode = headerBackstage.getDockingMode();\n        const newMode = calcMode(floatContainer.get());\n        if (newMode !== currentMode) {\n          setupMode(newMode);\n          if (updateUi) {\n            updateChromeUi(true);\n          }\n        }\n      };\n      const show2 = () => {\n        visible.set(true);\n        set$8(outerContainer.element, \"display\", \"flex\");\n        DOM.addClass(editor.getBody(), \"mce-edit-focus\");\n        remove$6(uiMothership.element, \"display\");\n        updateMode(false);\n        updateChromeUi();\n      };\n      const hide = () => {\n        visible.set(false);\n        if (uiComponents.outerContainer) {\n          set$8(outerContainer.element, \"display\", \"none\");\n          DOM.removeClass(editor.getBody(), \"mce-edit-focus\");\n        }\n        set$8(uiMothership.element, \"display\", \"none\");\n      };\n      return {\n        isVisible: isVisible2,\n        isPositionedAtTop,\n        show: show2,\n        hide,\n        update: updateChromeUi,\n        updateMode,\n        repositionPopups: repositionPopups$1\n      };\n    };\n    const getTargetPosAndBounds = (targetElm, isToolbarTop) => {\n      const bounds2 = box$1(targetElm);\n      return {\n        pos: isToolbarTop ? bounds2.y : bounds2.bottom,\n        bounds: bounds2\n      };\n    };\n    const setupEvents = (editor, targetElm, ui, toolbarPersist) => {\n      const prevPosAndBounds = Cell(getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()));\n      const resizeContent = (e2) => {\n        const { pos, bounds: bounds2 } = getTargetPosAndBounds(targetElm, ui.isPositionedAtTop());\n        const {\n          pos: prevPos,\n          bounds: prevBounds\n        } = prevPosAndBounds.get();\n        const hasResized = bounds2.height !== prevBounds.height || bounds2.width !== prevBounds.width;\n        prevPosAndBounds.set({\n          pos,\n          bounds: bounds2\n        });\n        if (hasResized) {\n          fireResizeContent(editor, e2);\n        }\n        if (ui.isVisible()) {\n          if (prevPos !== pos) {\n            ui.update(true);\n          } else if (hasResized) {\n            ui.updateMode();\n            ui.repositionPopups();\n          }\n        }\n      };\n      if (!toolbarPersist) {\n        editor.on(\"activate\", ui.show);\n        editor.on(\"deactivate\", ui.hide);\n      }\n      editor.on(\"SkinLoaded ResizeWindow\", () => ui.update(true));\n      editor.on(\"NodeChange keydown\", (e2) => {\n        requestAnimationFrame(() => resizeContent(e2));\n      });\n      editor.on(\"ScrollWindow\", () => ui.updateMode());\n      const elementLoad = unbindable();\n      elementLoad.set(capture(SugarElement.fromDom(editor.getBody()), \"load\", resizeContent));\n      editor.on(\"remove\", () => {\n        elementLoad.clear();\n      });\n    };\n    const render = (editor, uiComponents, rawUiConfig, backstage, args) => {\n      const { mothership, uiMothership, outerContainer } = uiComponents;\n      const floatContainer = Cell(null);\n      const targetElm = SugarElement.fromDom(args.targetNode);\n      const ui = InlineHeader(editor, targetElm, uiComponents, backstage, floatContainer);\n      const toolbarPersist = isToolbarPersist(editor);\n      inline2(editor);\n      const render2 = () => {\n        if (floatContainer.get()) {\n          ui.show();\n          return;\n        }\n        floatContainer.set(OuterContainer.getHeader(outerContainer).getOrDie());\n        const uiContainer = getUiContainer(editor);\n        attachSystem(uiContainer, mothership);\n        attachSystem(uiContainer, uiMothership);\n        setToolbar(editor, uiComponents, rawUiConfig, backstage);\n        OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n        ui.show();\n        setupEvents(editor, targetElm, ui, toolbarPersist);\n        editor.nodeChanged();\n      };\n      editor.on(\"show\", render2);\n      editor.on(\"hide\", ui.hide);\n      if (!toolbarPersist) {\n        editor.on(\"focus\", render2);\n        editor.on(\"blur\", ui.hide);\n      }\n      editor.on(\"init\", () => {\n        if (editor.hasFocus() || toolbarPersist) {\n          render2();\n        }\n      });\n      setupReadonlyModeSwitch(editor, uiComponents);\n      const api2 = {\n        show: () => {\n          render2();\n        },\n        hide: () => {\n          ui.hide();\n        },\n        setEnabled: (state) => {\n          broadcastReadonly(uiComponents, !state);\n        },\n        isEnabled: () => !Disabling.isDisabled(outerContainer)\n      };\n      return {\n        editorContainer: outerContainer.element.dom,\n        api: api2\n      };\n    };\n    var Inline2 = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      render\n    });\n    const showContextToolbarEvent = \"contexttoolbar-show\";\n    const hideContextToolbarEvent = \"contexttoolbar-hide\";\n    const getFormApi = (input2) => ({\n      hide: () => emit(input2, sandboxClose()),\n      getValue: () => Representing.getValue(input2)\n    });\n    const runOnExecute = (memInput, original2) => run$1(internalToolbarButtonExecute, (comp, se) => {\n      const input2 = memInput.get(comp);\n      const formApi = getFormApi(input2);\n      original2.onAction(formApi, se.event.buttonApi);\n    });\n    const renderContextButton = (memInput, button2, extras) => {\n      const { primary: primary2, ...rest } = button2.original;\n      const bridged = getOrDie(createToolbarButton({\n        ...rest,\n        type: \"button\",\n        onAction: noop\n      }));\n      return renderToolbarButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute(memInput, button2)]);\n    };\n    const renderContextToggleButton = (memInput, button2, extras) => {\n      const { primary: primary2, ...rest } = button2.original;\n      const bridged = getOrDie(createToggleButton({\n        ...rest,\n        type: \"togglebutton\",\n        onAction: noop\n      }));\n      return renderToolbarToggleButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute(memInput, button2)]);\n    };\n    const generateOne = (memInput, button2, providersBackstage) => {\n      const extras = { backstage: { shared: { providers: providersBackstage } } };\n      if (button2.type === \"contextformtogglebutton\") {\n        return renderContextToggleButton(memInput, button2, extras);\n      } else {\n        return renderContextButton(memInput, button2, extras);\n      }\n    };\n    const generate = (memInput, buttons, providersBackstage) => {\n      const mementos = map$2(buttons, (button2) => record(generateOne(memInput, button2, providersBackstage)));\n      const asSpecs = () => map$2(mementos, (mem) => mem.asSpec());\n      const findPrimary = (compInSystem) => findMap(buttons, (button2, i3) => {\n        if (button2.primary) {\n          return Optional.from(mementos[i3]).bind((mem) => mem.getOpt(compInSystem)).filter(not(Disabling.isDisabled));\n        } else {\n          return Optional.none();\n        }\n      });\n      return {\n        asSpecs,\n        findPrimary\n      };\n    };\n    const buildInitGroups = (ctx, providers) => {\n      const inputAttributes = ctx.label.fold(() => ({}), (label2) => ({ \"aria-label\": label2 }));\n      const memInput = record(Input2.sketch({\n        inputClasses: [\n          \"tox-toolbar-textfield\",\n          \"tox-toolbar-nav-js\"\n        ],\n        data: ctx.initValue(),\n        inputAttributes,\n        selectOnFocus: true,\n        inputBehaviours: derive$1([Keying.config({\n          mode: \"special\",\n          onEnter: (input2) => commands.findPrimary(input2).map((primary2) => {\n            emitExecute(primary2);\n            return true;\n          }),\n          onLeft: (comp, se) => {\n            se.cut();\n            return Optional.none();\n          },\n          onRight: (comp, se) => {\n            se.cut();\n            return Optional.none();\n          }\n        })])\n      }));\n      const commands = generate(memInput, ctx.commands, providers);\n      return [\n        {\n          title: Optional.none(),\n          items: [memInput.asSpec()]\n        },\n        {\n          title: Optional.none(),\n          items: commands.asSpecs()\n        }\n      ];\n    };\n    const renderContextForm = (toolbarType, ctx, providers) => renderToolbar({\n      type: toolbarType,\n      uid: generate$6(\"context-toolbar\"),\n      initGroups: buildInitGroups(ctx, providers),\n      onEscape: Optional.none,\n      cyclicKeying: true,\n      providers\n    });\n    const ContextForm = {\n      renderContextForm,\n      buildInitGroups\n    };\n    const isVerticalOverlap = (a2, b3, threshold = 0.01) => b3.bottom - a2.y >= threshold && a2.bottom - b3.y >= threshold;\n    const getRangeRect = (rng) => {\n      const rect2 = rng.getBoundingClientRect();\n      if (rect2.height <= 0 && rect2.width <= 0) {\n        const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset).element;\n        const elm = isText(leaf$1) ? parent(leaf$1) : Optional.some(leaf$1);\n        return elm.filter(isElement$1).map((e2) => e2.dom.getBoundingClientRect()).getOr(rect2);\n      } else {\n        return rect2;\n      }\n    };\n    const getSelectionBounds = (editor) => {\n      const rng = editor.selection.getRng();\n      const rect2 = getRangeRect(rng);\n      if (editor.inline) {\n        const scroll = get$b();\n        return bounds(scroll.left + rect2.left, scroll.top + rect2.top, rect2.width, rect2.height);\n      } else {\n        const bodyPos = absolute$2(SugarElement.fromDom(editor.getBody()));\n        return bounds(bodyPos.x + rect2.left, bodyPos.y + rect2.top, rect2.width, rect2.height);\n      }\n    };\n    const getAnchorElementBounds = (editor, lastElement) => lastElement.filter(inBody).map(absolute$2).getOrThunk(() => getSelectionBounds(editor));\n    const getHorizontalBounds = (contentAreaBox, viewportBounds, margin) => {\n      const x2 = Math.max(contentAreaBox.x + margin, viewportBounds.x);\n      const right2 = Math.min(contentAreaBox.right - margin, viewportBounds.right);\n      return {\n        x: x2,\n        width: right2 - x2\n      };\n    };\n    const getVerticalBounds = (editor, contentAreaBox, viewportBounds, isToolbarLocationTop, toolbarType, margin) => {\n      const container = SugarElement.fromDom(editor.getContainer());\n      const header = descendant(container, \".tox-editor-header\").getOr(container);\n      const headerBox = box$1(header);\n      const isToolbarBelowContentArea = headerBox.y >= contentAreaBox.bottom;\n      const isToolbarAbove = isToolbarLocationTop && !isToolbarBelowContentArea;\n      if (editor.inline && isToolbarAbove) {\n        return {\n          y: Math.max(headerBox.bottom + margin, viewportBounds.y),\n          bottom: viewportBounds.bottom\n        };\n      }\n      if (editor.inline && !isToolbarAbove) {\n        return {\n          y: viewportBounds.y,\n          bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n        };\n      }\n      const containerBounds = toolbarType === \"line\" ? box$1(container) : contentAreaBox;\n      if (isToolbarAbove) {\n        return {\n          y: Math.max(headerBox.bottom + margin, viewportBounds.y),\n          bottom: Math.min(containerBounds.bottom - margin, viewportBounds.bottom)\n        };\n      }\n      return {\n        y: Math.max(containerBounds.y + margin, viewportBounds.y),\n        bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n      };\n    };\n    const getContextToolbarBounds = (editor, sharedBackstage, toolbarType, margin = 0) => {\n      const viewportBounds = getBounds$3(window);\n      const contentAreaBox = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n      const toolbarOrMenubarEnabled = isMenubarEnabled(editor) || isToolbarEnabled(editor) || isMultipleToolbars(editor);\n      const { x: x2, width: width2 } = getHorizontalBounds(contentAreaBox, viewportBounds, margin);\n      if (editor.inline && !toolbarOrMenubarEnabled) {\n        return bounds(x2, viewportBounds.y, width2, viewportBounds.height);\n      } else {\n        const isToolbarTop = sharedBackstage.header.isPositionedAtTop();\n        const { y: y2, bottom: bottom2 } = getVerticalBounds(editor, contentAreaBox, viewportBounds, isToolbarTop, toolbarType, margin);\n        return bounds(x2, y2, width2, bottom2 - y2);\n      }\n    };\n    const bubbleSize$1 = 12;\n    const bubbleAlignments$1 = {\n      valignCentre: [],\n      alignCentre: [],\n      alignLeft: [\"tox-pop--align-left\"],\n      alignRight: [\"tox-pop--align-right\"],\n      right: [\"tox-pop--right\"],\n      left: [\"tox-pop--left\"],\n      bottom: [\"tox-pop--bottom\"],\n      top: [\"tox-pop--top\"],\n      inset: [\"tox-pop--inset\"]\n    };\n    const anchorOverrides = {\n      maxHeightFunction: expandable$1(),\n      maxWidthFunction: expandable()\n    };\n    const isEntireElementSelected = (editor, elem) => {\n      const rng = editor.selection.getRng();\n      const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n      return rng.startContainer === rng.endContainer && rng.startOffset === rng.endOffset - 1 && eq2(leaf$1.element, elem);\n    };\n    const preservePosition = (elem, position2, f2) => {\n      const currentPosition = getRaw(elem, \"position\");\n      set$8(elem, \"position\", position2);\n      const result = f2(elem);\n      currentPosition.each((pos) => set$8(elem, \"position\", pos));\n      return result;\n    };\n    const shouldUseInsetLayouts = (position2) => position2 === \"node\";\n    const determineInsetLayout = (editor, contextbar, elem, data, bounds2) => {\n      const selectionBounds = getSelectionBounds(editor);\n      const isSameAnchorElement = data.lastElement().exists((prev) => eq2(elem, prev));\n      if (isEntireElementSelected(editor, elem)) {\n        return isSameAnchorElement ? preserve : north;\n      } else if (isSameAnchorElement) {\n        return preservePosition(contextbar, data.getMode(), () => {\n          const isOverlapping = isVerticalOverlap(selectionBounds, box$1(contextbar));\n          return isOverlapping && !data.isReposition() ? flip : preserve;\n        });\n      } else {\n        const yBounds = data.getMode() === \"fixed\" ? bounds2.y + get$b().top : bounds2.y;\n        const contextbarHeight = get$d(contextbar) + bubbleSize$1;\n        return yBounds + contextbarHeight <= selectionBounds.y ? north : south;\n      }\n    };\n    const getAnchorSpec$2 = (editor, mobile, data, position2) => {\n      const smartInsetLayout = (elem) => (anchor2, element2, bubbles, placee, bounds2) => {\n        const layout2 = determineInsetLayout(editor, placee, elem, data, bounds2);\n        const newAnchor = {\n          ...anchor2,\n          y: bounds2.y,\n          height: bounds2.height\n        };\n        return {\n          ...layout2(newAnchor, element2, bubbles, placee, bounds2),\n          alwaysFit: true\n        };\n      };\n      const getInsetLayouts = (elem) => shouldUseInsetLayouts(position2) ? [smartInsetLayout(elem)] : [];\n      const desktopAnchorSpecLayouts = {\n        onLtr: (elem) => [\n          north$2,\n          south$2,\n          northeast$2,\n          southeast$2,\n          northwest$2,\n          southwest$2\n        ].concat(getInsetLayouts(elem)),\n        onRtl: (elem) => [\n          north$2,\n          south$2,\n          northwest$2,\n          southwest$2,\n          northeast$2,\n          southeast$2\n        ].concat(getInsetLayouts(elem))\n      };\n      const mobileAnchorSpecLayouts = {\n        onLtr: (elem) => [\n          south$2,\n          southeast$2,\n          southwest$2,\n          northeast$2,\n          northwest$2,\n          north$2\n        ].concat(getInsetLayouts(elem)),\n        onRtl: (elem) => [\n          south$2,\n          southwest$2,\n          southeast$2,\n          northwest$2,\n          northeast$2,\n          north$2\n        ].concat(getInsetLayouts(elem))\n      };\n      return mobile ? mobileAnchorSpecLayouts : desktopAnchorSpecLayouts;\n    };\n    const getAnchorLayout = (editor, position2, isTouch2, data) => {\n      if (position2 === \"line\") {\n        return {\n          bubble: nu$5(bubbleSize$1, 0, bubbleAlignments$1),\n          layouts: {\n            onLtr: () => [east$2],\n            onRtl: () => [west$2]\n          },\n          overrides: anchorOverrides\n        };\n      } else {\n        return {\n          bubble: nu$5(0, bubbleSize$1, bubbleAlignments$1, 1 / bubbleSize$1),\n          layouts: getAnchorSpec$2(editor, isTouch2, data, position2),\n          overrides: anchorOverrides\n        };\n      }\n    };\n    const matchTargetWith = (elem, candidates) => {\n      const ctxs = filter$2(candidates, (toolbarApi) => toolbarApi.predicate(elem.dom));\n      const { pass, fail } = partition$3(ctxs, (t3) => t3.type === \"contexttoolbar\");\n      return {\n        contextToolbars: pass,\n        contextForms: fail\n      };\n    };\n    const filterByPositionForStartNode = (toolbars) => {\n      if (toolbars.length <= 1) {\n        return toolbars;\n      } else {\n        const doesPositionExist = (value2) => exists(toolbars, (t3) => t3.position === value2);\n        const filterToolbarsByPosition = (value2) => filter$2(toolbars, (t3) => t3.position === value2);\n        const hasSelectionToolbars = doesPositionExist(\"selection\");\n        const hasNodeToolbars = doesPositionExist(\"node\");\n        if (hasSelectionToolbars || hasNodeToolbars) {\n          if (hasNodeToolbars && hasSelectionToolbars) {\n            const nodeToolbars = filterToolbarsByPosition(\"node\");\n            const selectionToolbars = map$2(filterToolbarsByPosition(\"selection\"), (t3) => ({\n              ...t3,\n              position: \"node\"\n            }));\n            return nodeToolbars.concat(selectionToolbars);\n          } else {\n            return hasSelectionToolbars ? filterToolbarsByPosition(\"selection\") : filterToolbarsByPosition(\"node\");\n          }\n        } else {\n          return filterToolbarsByPosition(\"line\");\n        }\n      }\n    };\n    const filterByPositionForAncestorNode = (toolbars) => {\n      if (toolbars.length <= 1) {\n        return toolbars;\n      } else {\n        const findPosition = (value2) => find$5(toolbars, (t3) => t3.position === value2);\n        const basePosition = findPosition(\"selection\").orThunk(() => findPosition(\"node\")).orThunk(() => findPosition(\"line\")).map((t3) => t3.position);\n        return basePosition.fold(() => [], (pos) => filter$2(toolbars, (t3) => t3.position === pos));\n      }\n    };\n    const matchStartNode = (elem, nodeCandidates, editorCandidates) => {\n      const nodeMatches = matchTargetWith(elem, nodeCandidates);\n      if (nodeMatches.contextForms.length > 0) {\n        return Optional.some({\n          elem,\n          toolbars: [nodeMatches.contextForms[0]]\n        });\n      } else {\n        const editorMatches = matchTargetWith(elem, editorCandidates);\n        if (editorMatches.contextForms.length > 0) {\n          return Optional.some({\n            elem,\n            toolbars: [editorMatches.contextForms[0]]\n          });\n        } else if (nodeMatches.contextToolbars.length > 0 || editorMatches.contextToolbars.length > 0) {\n          const toolbars = filterByPositionForStartNode(nodeMatches.contextToolbars.concat(editorMatches.contextToolbars));\n          return Optional.some({\n            elem,\n            toolbars\n          });\n        } else {\n          return Optional.none();\n        }\n      }\n    };\n    const matchAncestor = (isRoot, startNode, scopes) => {\n      if (isRoot(startNode)) {\n        return Optional.none();\n      } else {\n        return ancestor$2(startNode, (ancestorElem) => {\n          if (isElement$1(ancestorElem)) {\n            const { contextToolbars, contextForms } = matchTargetWith(ancestorElem, scopes.inNodeScope);\n            const toolbars = contextForms.length > 0 ? contextForms : filterByPositionForAncestorNode(contextToolbars);\n            return toolbars.length > 0 ? Optional.some({\n              elem: ancestorElem,\n              toolbars\n            }) : Optional.none();\n          } else {\n            return Optional.none();\n          }\n        }, isRoot);\n      }\n    };\n    const lookup$1 = (scopes, editor) => {\n      const rootElem = SugarElement.fromDom(editor.getBody());\n      const isRoot = (elem) => eq2(elem, rootElem);\n      const isOutsideRoot = (startNode2) => !isRoot(startNode2) && !contains2(rootElem, startNode2);\n      const startNode = SugarElement.fromDom(editor.selection.getNode());\n      if (isOutsideRoot(startNode)) {\n        return Optional.none();\n      }\n      return matchStartNode(startNode, scopes.inNodeScope, scopes.inEditorScope).orThunk(() => matchAncestor(isRoot, startNode, scopes));\n    };\n    const categorise = (contextToolbars, navigate) => {\n      const forms = {};\n      const inNodeScope = [];\n      const inEditorScope = [];\n      const formNavigators = {};\n      const lookupTable = {};\n      const registerForm = (key, toolbarSpec) => {\n        const contextForm = getOrDie(createContextForm(toolbarSpec));\n        forms[key] = contextForm;\n        contextForm.launch.map((launch) => {\n          formNavigators[\"form:\" + key] = {\n            ...toolbarSpec.launch,\n            type: launch.type === \"contextformtogglebutton\" ? \"togglebutton\" : \"button\",\n            onAction: () => {\n              navigate(contextForm);\n            }\n          };\n        });\n        if (contextForm.scope === \"editor\") {\n          inEditorScope.push(contextForm);\n        } else {\n          inNodeScope.push(contextForm);\n        }\n        lookupTable[key] = contextForm;\n      };\n      const registerToolbar = (key, toolbarSpec) => {\n        createContextToolbar(toolbarSpec).each((contextToolbar) => {\n          if (toolbarSpec.scope === \"editor\") {\n            inEditorScope.push(contextToolbar);\n          } else {\n            inNodeScope.push(contextToolbar);\n          }\n          lookupTable[key] = contextToolbar;\n        });\n      };\n      const keys$1 = keys2(contextToolbars);\n      each$1(keys$1, (key) => {\n        const toolbarApi = contextToolbars[key];\n        if (toolbarApi.type === \"contextform\") {\n          registerForm(key, toolbarApi);\n        } else if (toolbarApi.type === \"contexttoolbar\") {\n          registerToolbar(key, toolbarApi);\n        }\n      });\n      return {\n        forms,\n        inNodeScope,\n        inEditorScope,\n        lookupTable,\n        formNavigators\n      };\n    };\n    const forwardSlideEvent = generate$6(\"forward-slide\");\n    const backSlideEvent = generate$6(\"backward-slide\");\n    const changeSlideEvent = generate$6(\"change-slide-event\");\n    const resizingClass = \"tox-pop--resizing\";\n    const renderContextToolbar = (spec) => {\n      const stack = Cell([]);\n      return InlineView.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-pop\"]\n        },\n        fireDismissalEventInstead: { event: \"doNotDismissYet\" },\n        onShow: (comp) => {\n          stack.set([]);\n          InlineView.getContent(comp).each((c2) => {\n            remove$6(c2.element, \"visibility\");\n          });\n          remove$2(comp.element, resizingClass);\n          remove$6(comp.element, \"width\");\n        },\n        inlineBehaviours: derive$1([\n          config2(\"context-toolbar-events\", [\n            runOnSource(transitionend(), (comp, se) => {\n              if (se.event.raw.propertyName === \"width\") {\n                remove$2(comp.element, resizingClass);\n                remove$6(comp.element, \"width\");\n              }\n            }),\n            run$1(changeSlideEvent, (comp, se) => {\n              const elem = comp.element;\n              remove$6(elem, \"width\");\n              const currentWidth = get$c(elem);\n              InlineView.setContent(comp, se.event.contents);\n              add$2(elem, resizingClass);\n              const newWidth = get$c(elem);\n              set$8(elem, \"width\", currentWidth + \"px\");\n              InlineView.getContent(comp).each((newContents) => {\n                se.event.focus.bind((f2) => {\n                  focus$3(f2);\n                  return search(elem);\n                }).orThunk(() => {\n                  Keying.focusIn(newContents);\n                  return active$1(getRootNode(elem));\n                });\n              });\n              setTimeout(() => {\n                set$8(comp.element, \"width\", newWidth + \"px\");\n              }, 0);\n            }),\n            run$1(forwardSlideEvent, (comp, se) => {\n              InlineView.getContent(comp).each((oldContents) => {\n                stack.set(stack.get().concat([{\n                  bar: oldContents,\n                  focus: active$1(getRootNode(comp.element))\n                }]));\n              });\n              emitWith(comp, changeSlideEvent, {\n                contents: se.event.forwardContents,\n                focus: Optional.none()\n              });\n            }),\n            run$1(backSlideEvent, (comp, _se) => {\n              last$1(stack.get()).each((last2) => {\n                stack.set(stack.get().slice(0, stack.get().length - 1));\n                emitWith(comp, changeSlideEvent, {\n                  contents: premade(last2.bar),\n                  focus: last2.focus\n                });\n              });\n            })\n          ]),\n          Keying.config({\n            mode: \"special\",\n            onEscape: (comp) => last$1(stack.get()).fold(() => spec.onEscape(), (_2) => {\n              emit(comp, backSlideEvent);\n              return Optional.some(true);\n            })\n          })\n        ]),\n        lazySink: () => Result.value(spec.sink)\n      });\n    };\n    const transitionClass = \"tox-pop--transition\";\n    const register$9 = (editor, registryContextToolbars, sink, extras) => {\n      const backstage = extras.backstage;\n      const sharedBackstage = backstage.shared;\n      const isTouch2 = detect$1().deviceType.isTouch;\n      const lastElement = value$2();\n      const lastTrigger = value$2();\n      const lastContextPosition = value$2();\n      const contextbar = build$1(renderContextToolbar({\n        sink,\n        onEscape: () => {\n          editor.focus();\n          return Optional.some(true);\n        }\n      }));\n      const getBounds2 = () => {\n        const position2 = lastContextPosition.get().getOr(\"node\");\n        const margin = shouldUseInsetLayouts(position2) ? 1 : 0;\n        return getContextToolbarBounds(editor, sharedBackstage, position2, margin);\n      };\n      const canLaunchToolbar = () => {\n        return !editor.removed && !(isTouch2() && backstage.isContextMenuOpen());\n      };\n      const isSameLaunchElement = (elem) => is$1(lift2(elem, lastElement.get(), eq2), true);\n      const shouldContextToolbarHide = () => {\n        if (!canLaunchToolbar()) {\n          return true;\n        } else {\n          const contextToolbarBounds = getBounds2();\n          const anchorBounds = is$1(lastContextPosition.get(), \"node\") ? getAnchorElementBounds(editor, lastElement.get()) : getSelectionBounds(editor);\n          return contextToolbarBounds.height <= 0 || !isVerticalOverlap(anchorBounds, contextToolbarBounds);\n        }\n      };\n      const close2 = () => {\n        lastElement.clear();\n        lastTrigger.clear();\n        lastContextPosition.clear();\n        InlineView.hide(contextbar);\n      };\n      const hideOrRepositionIfNecessary = () => {\n        if (InlineView.isOpen(contextbar)) {\n          const contextBarEle = contextbar.element;\n          remove$6(contextBarEle, \"display\");\n          if (shouldContextToolbarHide()) {\n            set$8(contextBarEle, \"display\", \"none\");\n          } else {\n            lastTrigger.set(0);\n            InlineView.reposition(contextbar);\n          }\n        }\n      };\n      const wrapInPopDialog = (toolbarSpec) => ({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-pop__dialog\"]\n        },\n        components: [toolbarSpec],\n        behaviours: derive$1([\n          Keying.config({ mode: \"acyclic\" }),\n          config2(\"pop-dialog-wrap-events\", [\n            runOnAttached((comp) => {\n              editor.shortcuts.add(\"ctrl+F9\", \"focus statusbar\", () => Keying.focusIn(comp));\n            }),\n            runOnDetached((_comp) => {\n              editor.shortcuts.remove(\"ctrl+F9\");\n            })\n          ])\n        ])\n      });\n      const getScopes = cached(() => categorise(registryContextToolbars, (toolbarApi) => {\n        const alloySpec = buildToolbar([toolbarApi]);\n        emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });\n      }));\n      const buildContextToolbarGroups = (allButtons, ctx) => identifyButtons(editor, {\n        buttons: allButtons,\n        toolbar: ctx.items,\n        allowToolbarGroups: false\n      }, extras, Optional.some([\"form:\"]));\n      const buildContextFormGroups = (ctx, providers) => ContextForm.buildInitGroups(ctx, providers);\n      const buildToolbar = (toolbars) => {\n        const { buttons } = editor.ui.registry.getAll();\n        const scopes = getScopes();\n        const allButtons = {\n          ...buttons,\n          ...scopes.formNavigators\n        };\n        const toolbarType = getToolbarMode(editor) === ToolbarMode$1.scrolling ? ToolbarMode$1.scrolling : ToolbarMode$1.default;\n        const initGroups = flatten(map$2(toolbars, (ctx) => ctx.type === \"contexttoolbar\" ? buildContextToolbarGroups(allButtons, ctx) : buildContextFormGroups(ctx, sharedBackstage.providers)));\n        return renderToolbar({\n          type: toolbarType,\n          uid: generate$6(\"context-toolbar\"),\n          initGroups,\n          onEscape: Optional.none,\n          cyclicKeying: true,\n          providers: sharedBackstage.providers\n        });\n      };\n      const getAnchor2 = (position2, element2) => {\n        const anchorage = position2 === \"node\" ? sharedBackstage.anchors.node(element2) : sharedBackstage.anchors.cursor();\n        const anchorLayout = getAnchorLayout(editor, position2, isTouch2(), {\n          lastElement: lastElement.get,\n          isReposition: () => is$1(lastTrigger.get(), 0),\n          getMode: () => Positioning.getMode(sink)\n        });\n        return deepMerge(anchorage, anchorLayout);\n      };\n      const launchContext = (toolbarApi, elem) => {\n        launchContextToolbar.cancel();\n        if (!canLaunchToolbar()) {\n          return;\n        }\n        const toolbarSpec = buildToolbar(toolbarApi);\n        const position2 = toolbarApi[0].position;\n        const anchor2 = getAnchor2(position2, elem);\n        lastContextPosition.set(position2);\n        lastTrigger.set(1);\n        const contextBarEle = contextbar.element;\n        remove$6(contextBarEle, \"display\");\n        if (!isSameLaunchElement(elem)) {\n          remove$2(contextBarEle, transitionClass);\n          Positioning.reset(sink, contextbar);\n        }\n        InlineView.showWithinBounds(contextbar, wrapInPopDialog(toolbarSpec), {\n          anchor: anchor2,\n          transition: {\n            classes: [transitionClass],\n            mode: \"placement\"\n          }\n        }, () => Optional.some(getBounds2()));\n        elem.fold(lastElement.clear, lastElement.set);\n        if (shouldContextToolbarHide()) {\n          set$8(contextBarEle, \"display\", \"none\");\n        }\n      };\n      const launchContextToolbar = last(() => {\n        if (!editor.hasFocus() || editor.removed) {\n          return;\n        }\n        if (has2(contextbar.element, transitionClass)) {\n          launchContextToolbar.throttle();\n        } else {\n          const scopes = getScopes();\n          lookup$1(scopes, editor).fold(close2, (info) => {\n            launchContext(info.toolbars, Optional.some(info.elem));\n          });\n        }\n      }, 17);\n      editor.on(\"init\", () => {\n        editor.on(\"remove\", close2);\n        editor.on(\"ScrollContent ScrollWindow ObjectResized ResizeEditor longpress\", hideOrRepositionIfNecessary);\n        editor.on(\"click keyup focus SetContent\", launchContextToolbar.throttle);\n        editor.on(hideContextToolbarEvent, close2);\n        editor.on(showContextToolbarEvent, (e2) => {\n          const scopes = getScopes();\n          get$g(scopes.lookupTable, e2.toolbarKey).each((ctx) => {\n            launchContext([ctx], someIf(e2.target !== editor, e2.target));\n            InlineView.getContent(contextbar).each(Keying.focusIn);\n          });\n        });\n        editor.on(\"focusout\", (_e) => {\n          global$9.setEditorTimeout(editor, () => {\n            if (search(sink.element).isNone() && search(contextbar.element).isNone()) {\n              close2();\n            }\n          }, 0);\n        });\n        editor.on(\"SwitchMode\", () => {\n          if (editor.mode.isReadOnly()) {\n            close2();\n          }\n        });\n        editor.on(\"AfterProgressState\", (event) => {\n          if (event.state) {\n            close2();\n          } else if (editor.hasFocus()) {\n            launchContextToolbar.throttle();\n          }\n        });\n        editor.on(\"NodeChange\", (_e) => {\n          search(contextbar.element).fold(launchContextToolbar.throttle, noop);\n        });\n      });\n    };\n    const register$8 = (editor) => {\n      const alignToolbarButtons = [\n        {\n          name: \"alignleft\",\n          text: \"Align left\",\n          cmd: \"JustifyLeft\",\n          icon: \"align-left\"\n        },\n        {\n          name: \"aligncenter\",\n          text: \"Align center\",\n          cmd: \"JustifyCenter\",\n          icon: \"align-center\"\n        },\n        {\n          name: \"alignright\",\n          text: \"Align right\",\n          cmd: \"JustifyRight\",\n          icon: \"align-right\"\n        },\n        {\n          name: \"alignjustify\",\n          text: \"Justify\",\n          cmd: \"JustifyFull\",\n          icon: \"align-justify\"\n        }\n      ];\n      each$1(alignToolbarButtons, (item2) => {\n        editor.ui.registry.addToggleButton(item2.name, {\n          tooltip: item2.text,\n          icon: item2.icon,\n          onAction: onActionExecCommand(editor, item2.cmd),\n          onSetup: onSetupFormatToggle(editor, item2.name)\n        });\n      });\n      editor.ui.registry.addButton(\"alignnone\", {\n        tooltip: \"No alignment\",\n        icon: \"align-none\",\n        onAction: onActionExecCommand(editor, \"JustifyNone\")\n      });\n    };\n    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 = (input2) => `(?:${input2})?`;\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 = (input2, accepted) => {\n      const match3 = Optional.from(pattern.exec(input2));\n      return match3.bind((array2) => {\n        const value2 = Number(array2[1]);\n        const unitRaw = array2[2];\n        if (isUnit(unitRaw, accepted)) {\n          return Optional.some({\n            value: value2,\n            unit: unitRaw\n          });\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n    const normalise = (input2, accepted) => parse(input2, accepted).map(({ value: value2, unit }) => value2 + unit);\n    const registerController = (editor, spec) => {\n      const getMenuItems = () => {\n        const options = spec.getOptions(editor);\n        const initial = spec.getCurrent(editor).map(spec.hash);\n        const current = value$2();\n        return map$2(options, (value2) => ({\n          type: \"togglemenuitem\",\n          text: spec.display(value2),\n          onSetup: (api2) => {\n            const setActive = (active2) => {\n              if (active2) {\n                current.on((oldApi) => oldApi.setActive(false));\n                current.set(api2);\n              }\n              api2.setActive(active2);\n            };\n            setActive(is$1(initial, spec.hash(value2)));\n            const unbindWatcher = spec.watcher(editor, value2, setActive);\n            return () => {\n              current.clear();\n              unbindWatcher();\n            };\n          },\n          onAction: () => spec.setCurrent(editor, value2)\n        }));\n      };\n      editor.ui.registry.addMenuButton(spec.name, {\n        tooltip: spec.text,\n        icon: spec.icon,\n        fetch: (callback) => callback(getMenuItems()),\n        onSetup: spec.onToolbarSetup\n      });\n      editor.ui.registry.addNestedMenuItem(spec.name, {\n        type: \"nestedmenuitem\",\n        text: spec.text,\n        getSubmenuItems: getMenuItems,\n        onSetup: spec.onMenuSetup\n      });\n    };\n    const lineHeightSpec = {\n      name: \"lineheight\",\n      text: \"Line height\",\n      icon: \"line-height\",\n      getOptions: getLineHeightFormats,\n      hash: (input2) => normalise(input2, [\n        \"fixed\",\n        \"relative\",\n        \"empty\"\n      ]).getOr(input2),\n      display: identity2,\n      watcher: (editor, value2, callback) => editor.formatter.formatChanged(\"lineheight\", callback, false, { value: value2 }).unbind,\n      getCurrent: (editor) => Optional.from(editor.queryCommandValue(\"LineHeight\")),\n      setCurrent: (editor, value2) => editor.execCommand(\"LineHeight\", false, value2)\n    };\n    const languageSpec = (editor) => {\n      const settingsOpt = Optional.from(getContentLanguages(editor));\n      return settingsOpt.map((settings) => ({\n        name: \"language\",\n        text: \"Language\",\n        icon: \"language\",\n        getOptions: constant$1(settings),\n        hash: (input2) => isUndefined2(input2.customCode) ? input2.code : `${input2.code}/${input2.customCode}`,\n        display: (input2) => input2.title,\n        watcher: (editor2, value2, callback) => editor2.formatter.formatChanged(\"lang\", callback, false, {\n          value: value2.code,\n          customValue: value2.customCode\n        }).unbind,\n        getCurrent: (editor2) => {\n          const node = SugarElement.fromDom(editor2.selection.getNode());\n          return closest$4(node, (n3) => Optional.some(n3).filter(isElement$1).bind((ele) => {\n            const codeOpt = getOpt(ele, \"lang\");\n            return codeOpt.map((code2) => {\n              const customCode = getOpt(ele, \"data-mce-lang\").getOrUndefined();\n              return {\n                code: code2,\n                customCode,\n                title: \"\"\n              };\n            });\n          }));\n        },\n        setCurrent: (editor2, lang) => editor2.execCommand(\"Lang\", false, lang),\n        onToolbarSetup: (api2) => {\n          const unbinder = unbindable();\n          api2.setActive(editor.formatter.match(\"lang\", {}, void 0, true));\n          unbinder.set(editor.formatter.formatChanged(\"lang\", api2.setActive, true));\n          return unbinder.clear;\n        }\n      }));\n    };\n    const register$7 = (editor) => {\n      registerController(editor, lineHeightSpec);\n      languageSpec(editor).each((spec) => registerController(editor, spec));\n    };\n    const register$6 = (editor, backstage) => {\n      createAlignMenu(editor, backstage);\n      createFontFamilyMenu(editor, backstage);\n      createStylesMenu(editor, backstage);\n      createBlocksMenu(editor, backstage);\n      createFontSizeMenu(editor, backstage);\n    };\n    const onSetupOutdentState = (editor) => onSetupEvent(editor, \"NodeChange\", (api2) => {\n      api2.setEnabled(editor.queryCommandState(\"outdent\"));\n    });\n    const registerButtons$2 = (editor) => {\n      editor.ui.registry.addButton(\"outdent\", {\n        tooltip: \"Decrease indent\",\n        icon: \"outdent\",\n        onSetup: onSetupOutdentState(editor),\n        onAction: onActionExecCommand(editor, \"outdent\")\n      });\n      editor.ui.registry.addButton(\"indent\", {\n        tooltip: \"Increase indent\",\n        icon: \"indent\",\n        onAction: onActionExecCommand(editor, \"indent\")\n      });\n    };\n    const register$5 = (editor) => {\n      registerButtons$2(editor);\n    };\n    const makeSetupHandler = (editor, pasteAsText) => (api2) => {\n      api2.setActive(pasteAsText.get());\n      const pastePlainTextToggleHandler = (e2) => {\n        pasteAsText.set(e2.state);\n        api2.setActive(e2.state);\n      };\n      editor.on(\"PastePlainTextToggle\", pastePlainTextToggleHandler);\n      return () => editor.off(\"PastePlainTextToggle\", pastePlainTextToggleHandler);\n    };\n    const register$4 = (editor) => {\n      const pasteAsText = Cell(getPasteAsText(editor));\n      const onAction2 = () => editor.execCommand(\"mceTogglePlainTextPaste\");\n      editor.ui.registry.addToggleButton(\"pastetext\", {\n        active: false,\n        icon: \"paste-text\",\n        tooltip: \"Paste as text\",\n        onAction: onAction2,\n        onSetup: makeSetupHandler(editor, pasteAsText)\n      });\n      editor.ui.registry.addToggleMenuItem(\"pastetext\", {\n        text: \"Paste as text\",\n        icon: \"paste-text\",\n        onAction: onAction2,\n        onSetup: makeSetupHandler(editor, pasteAsText)\n      });\n    };\n    const onActionToggleFormat = (editor, fmt) => () => {\n      editor.execCommand(\"mceToggleFormat\", false, fmt);\n    };\n    const registerFormatButtons = (editor) => {\n      global$1.each([\n        {\n          name: \"bold\",\n          text: \"Bold\",\n          icon: \"bold\"\n        },\n        {\n          name: \"italic\",\n          text: \"Italic\",\n          icon: \"italic\"\n        },\n        {\n          name: \"underline\",\n          text: \"Underline\",\n          icon: \"underline\"\n        },\n        {\n          name: \"strikethrough\",\n          text: \"Strikethrough\",\n          icon: \"strike-through\"\n        },\n        {\n          name: \"subscript\",\n          text: \"Subscript\",\n          icon: \"subscript\"\n        },\n        {\n          name: \"superscript\",\n          text: \"Superscript\",\n          icon: \"superscript\"\n        }\n      ], (btn, _idx) => {\n        editor.ui.registry.addToggleButton(btn.name, {\n          tooltip: btn.text,\n          icon: btn.icon,\n          onSetup: onSetupFormatToggle(editor, btn.name),\n          onAction: onActionToggleFormat(editor, btn.name)\n        });\n      });\n      for (let i3 = 1; i3 <= 6; i3++) {\n        const name2 = \"h\" + i3;\n        editor.ui.registry.addToggleButton(name2, {\n          text: name2.toUpperCase(),\n          tooltip: \"Heading \" + i3,\n          onSetup: onSetupFormatToggle(editor, name2),\n          onAction: onActionToggleFormat(editor, name2)\n        });\n      }\n    };\n    const registerCommandButtons = (editor) => {\n      global$1.each([\n        {\n          name: \"cut\",\n          text: \"Cut\",\n          action: \"Cut\",\n          icon: \"cut\"\n        },\n        {\n          name: \"copy\",\n          text: \"Copy\",\n          action: \"Copy\",\n          icon: \"copy\"\n        },\n        {\n          name: \"paste\",\n          text: \"Paste\",\n          action: \"Paste\",\n          icon: \"paste\"\n        },\n        {\n          name: \"help\",\n          text: \"Help\",\n          action: \"mceHelp\",\n          icon: \"help\"\n        },\n        {\n          name: \"selectall\",\n          text: \"Select all\",\n          action: \"SelectAll\",\n          icon: \"select-all\"\n        },\n        {\n          name: \"newdocument\",\n          text: \"New document\",\n          action: \"mceNewDocument\",\n          icon: \"new-document\"\n        },\n        {\n          name: \"removeformat\",\n          text: \"Clear formatting\",\n          action: \"RemoveFormat\",\n          icon: \"remove-formatting\"\n        },\n        {\n          name: \"remove\",\n          text: \"Remove\",\n          action: \"Delete\",\n          icon: \"remove\"\n        },\n        {\n          name: \"print\",\n          text: \"Print\",\n          action: \"mcePrint\",\n          icon: \"print\"\n        },\n        {\n          name: \"hr\",\n          text: \"Horizontal line\",\n          action: \"InsertHorizontalRule\",\n          icon: \"horizontal-rule\"\n        }\n      ], (btn) => {\n        editor.ui.registry.addButton(btn.name, {\n          tooltip: btn.text,\n          icon: btn.icon,\n          onAction: onActionExecCommand(editor, btn.action)\n        });\n      });\n    };\n    const registerCommandToggleButtons = (editor) => {\n      global$1.each([{\n        name: \"blockquote\",\n        text: \"Blockquote\",\n        action: \"mceBlockQuote\",\n        icon: \"quote\"\n      }], (btn) => {\n        editor.ui.registry.addToggleButton(btn.name, {\n          tooltip: btn.text,\n          icon: btn.icon,\n          onAction: onActionExecCommand(editor, btn.action),\n          onSetup: onSetupFormatToggle(editor, btn.name)\n        });\n      });\n    };\n    const registerButtons$1 = (editor) => {\n      registerFormatButtons(editor);\n      registerCommandButtons(editor);\n      registerCommandToggleButtons(editor);\n    };\n    const registerMenuItems$2 = (editor) => {\n      global$1.each([\n        {\n          name: \"bold\",\n          text: \"Bold\",\n          action: \"Bold\",\n          icon: \"bold\",\n          shortcut: \"Meta+B\"\n        },\n        {\n          name: \"italic\",\n          text: \"Italic\",\n          action: \"Italic\",\n          icon: \"italic\",\n          shortcut: \"Meta+I\"\n        },\n        {\n          name: \"underline\",\n          text: \"Underline\",\n          action: \"Underline\",\n          icon: \"underline\",\n          shortcut: \"Meta+U\"\n        },\n        {\n          name: \"strikethrough\",\n          text: \"Strikethrough\",\n          action: \"Strikethrough\",\n          icon: \"strike-through\"\n        },\n        {\n          name: \"subscript\",\n          text: \"Subscript\",\n          action: \"Subscript\",\n          icon: \"subscript\"\n        },\n        {\n          name: \"superscript\",\n          text: \"Superscript\",\n          action: \"Superscript\",\n          icon: \"superscript\"\n        },\n        {\n          name: \"removeformat\",\n          text: \"Clear formatting\",\n          action: \"RemoveFormat\",\n          icon: \"remove-formatting\"\n        },\n        {\n          name: \"newdocument\",\n          text: \"New document\",\n          action: \"mceNewDocument\",\n          icon: \"new-document\"\n        },\n        {\n          name: \"cut\",\n          text: \"Cut\",\n          action: \"Cut\",\n          icon: \"cut\",\n          shortcut: \"Meta+X\"\n        },\n        {\n          name: \"copy\",\n          text: \"Copy\",\n          action: \"Copy\",\n          icon: \"copy\",\n          shortcut: \"Meta+C\"\n        },\n        {\n          name: \"paste\",\n          text: \"Paste\",\n          action: \"Paste\",\n          icon: \"paste\",\n          shortcut: \"Meta+V\"\n        },\n        {\n          name: \"selectall\",\n          text: \"Select all\",\n          action: \"SelectAll\",\n          icon: \"select-all\",\n          shortcut: \"Meta+A\"\n        },\n        {\n          name: \"print\",\n          text: \"Print...\",\n          action: \"mcePrint\",\n          icon: \"print\",\n          shortcut: \"Meta+P\"\n        },\n        {\n          name: \"hr\",\n          text: \"Horizontal line\",\n          action: \"InsertHorizontalRule\",\n          icon: \"horizontal-rule\"\n        }\n      ], (menuitem) => {\n        editor.ui.registry.addMenuItem(menuitem.name, {\n          text: menuitem.text,\n          icon: menuitem.icon,\n          shortcut: menuitem.shortcut,\n          onAction: onActionExecCommand(editor, menuitem.action)\n        });\n      });\n      editor.ui.registry.addMenuItem(\"codeformat\", {\n        text: \"Code\",\n        icon: \"sourcecode\",\n        onAction: onActionToggleFormat(editor, \"code\")\n      });\n    };\n    const register$3 = (editor) => {\n      registerButtons$1(editor);\n      registerMenuItems$2(editor);\n    };\n    const onSetupUndoRedoState = (editor, type2) => onSetupEvent(editor, \"Undo Redo AddUndo TypingUndo ClearUndos SwitchMode\", (api2) => {\n      api2.setEnabled(!editor.mode.isReadOnly() && editor.undoManager[type2]());\n    });\n    const registerMenuItems$1 = (editor) => {\n      editor.ui.registry.addMenuItem(\"undo\", {\n        text: \"Undo\",\n        icon: \"undo\",\n        shortcut: \"Meta+Z\",\n        onSetup: onSetupUndoRedoState(editor, \"hasUndo\"),\n        onAction: onActionExecCommand(editor, \"undo\")\n      });\n      editor.ui.registry.addMenuItem(\"redo\", {\n        text: \"Redo\",\n        icon: \"redo\",\n        shortcut: \"Meta+Y\",\n        onSetup: onSetupUndoRedoState(editor, \"hasRedo\"),\n        onAction: onActionExecCommand(editor, \"redo\")\n      });\n    };\n    const registerButtons = (editor) => {\n      editor.ui.registry.addButton(\"undo\", {\n        tooltip: \"Undo\",\n        icon: \"undo\",\n        enabled: false,\n        onSetup: onSetupUndoRedoState(editor, \"hasUndo\"),\n        onAction: onActionExecCommand(editor, \"undo\")\n      });\n      editor.ui.registry.addButton(\"redo\", {\n        tooltip: \"Redo\",\n        icon: \"redo\",\n        enabled: false,\n        onSetup: onSetupUndoRedoState(editor, \"hasRedo\"),\n        onAction: onActionExecCommand(editor, \"redo\")\n      });\n    };\n    const register$2 = (editor) => {\n      registerMenuItems$1(editor);\n      registerButtons(editor);\n    };\n    const onSetupVisualAidState = (editor) => onSetupEvent(editor, \"VisualAid\", (api2) => {\n      api2.setActive(editor.hasVisual);\n    });\n    const registerMenuItems = (editor) => {\n      editor.ui.registry.addToggleMenuItem(\"visualaid\", {\n        text: \"Visual aids\",\n        onSetup: onSetupVisualAidState(editor),\n        onAction: onActionExecCommand(editor, \"mceToggleVisualAid\")\n      });\n    };\n    const registerToolbarButton = (editor) => {\n      editor.ui.registry.addButton(\"visualaid\", {\n        tooltip: \"Visual aids\",\n        text: \"Visual aids\",\n        onAction: onActionExecCommand(editor, \"mceToggleVisualAid\")\n      });\n    };\n    const register$1 = (editor) => {\n      registerToolbarButton(editor);\n      registerMenuItems(editor);\n    };\n    const setup$6 = (editor, backstage) => {\n      register$8(editor);\n      register$3(editor);\n      register$6(editor, backstage);\n      register$2(editor);\n      register$c(editor);\n      register$1(editor);\n      register$5(editor);\n      register$7(editor);\n      register$4(editor);\n    };\n    const patchPipeConfig = (config3) => isString2(config3) ? config3.split(/[ ,]/) : config3;\n    const option = (name2) => (editor) => editor.options.get(name2);\n    const register = (editor) => {\n      const registerOption = editor.options.register;\n      registerOption(\"contextmenu_avoid_overlap\", {\n        processor: \"string\",\n        default: \"\"\n      });\n      registerOption(\"contextmenu_never_use_native\", {\n        processor: \"boolean\",\n        default: false\n      });\n      registerOption(\"contextmenu\", {\n        processor: (value2) => {\n          if (value2 === false) {\n            return {\n              value: [],\n              valid: true\n            };\n          } else if (isString2(value2) || isArrayOf(value2, isString2)) {\n            return {\n              value: patchPipeConfig(value2),\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: \"Must be false or a string.\"\n            };\n          }\n        },\n        default: \"link linkchecker image editimage table spellchecker configurepermanentpen\"\n      });\n    };\n    const shouldNeverUseNative = option(\"contextmenu_never_use_native\");\n    const getAvoidOverlapSelector = option(\"contextmenu_avoid_overlap\");\n    const isContextMenuDisabled = (editor) => getContextMenu(editor).length === 0;\n    const getContextMenu = (editor) => {\n      const contextMenus = editor.ui.registry.getAll().contextMenus;\n      const contextMenu = editor.options.get(\"contextmenu\");\n      if (editor.options.isSet(\"contextmenu\")) {\n        return contextMenu;\n      } else {\n        return filter$2(contextMenu, (item2) => has$2(contextMenus, item2));\n      }\n    };\n    const nu = (x2, y2) => ({\n      type: \"makeshift\",\n      x: x2,\n      y: y2\n    });\n    const transpose = (pos, dx, dy) => {\n      return nu(pos.x + dx, pos.y + dy);\n    };\n    const isTouchEvent = (e2) => e2.type === \"longpress\" || e2.type.indexOf(\"touch\") === 0;\n    const fromPageXY = (e2) => {\n      if (isTouchEvent(e2)) {\n        const touch2 = e2.touches[0];\n        return nu(touch2.pageX, touch2.pageY);\n      } else {\n        return nu(e2.pageX, e2.pageY);\n      }\n    };\n    const fromClientXY = (e2) => {\n      if (isTouchEvent(e2)) {\n        const touch2 = e2.touches[0];\n        return nu(touch2.clientX, touch2.clientY);\n      } else {\n        return nu(e2.clientX, e2.clientY);\n      }\n    };\n    const transposeContentAreaContainer = (element2, pos) => {\n      const containerPos = global$7.DOM.getPos(element2);\n      return transpose(pos, containerPos.x, containerPos.y);\n    };\n    const getPointAnchor = (editor, e2) => {\n      if (e2.type === \"contextmenu\" || e2.type === \"longpress\") {\n        if (editor.inline) {\n          return fromPageXY(e2);\n        } else {\n          return transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e2));\n        }\n      } else {\n        return getSelectionAnchor(editor);\n      }\n    };\n    const getSelectionAnchor = (editor) => {\n      return {\n        type: \"selection\",\n        root: SugarElement.fromDom(editor.selection.getNode())\n      };\n    };\n    const getNodeAnchor = (editor) => ({\n      type: \"node\",\n      node: Optional.some(SugarElement.fromDom(editor.selection.getNode())),\n      root: SugarElement.fromDom(editor.getBody())\n    });\n    const getAnchorSpec$1 = (editor, e2, anchorType) => {\n      switch (anchorType) {\n        case \"node\":\n          return getNodeAnchor(editor);\n        case \"point\":\n          return getPointAnchor(editor, e2);\n        case \"selection\":\n          return getSelectionAnchor(editor);\n      }\n    };\n    const initAndShow$1 = (editor, e2, buildMenu, backstage, contextmenu, anchorType) => {\n      const items = buildMenu();\n      const anchorSpec = getAnchorSpec$1(editor, e2, anchorType);\n      build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false).map((menuData) => {\n        e2.preventDefault();\n        InlineView.showMenuAt(contextmenu, { anchor: anchorSpec }, {\n          menu: { markers: markers(\"normal\") },\n          data: menuData\n        });\n      });\n    };\n    const layouts = {\n      onLtr: () => [\n        south$2,\n        southeast$2,\n        southwest$2,\n        northeast$2,\n        northwest$2,\n        north$2,\n        north,\n        south,\n        northeast,\n        southeast,\n        northwest,\n        southwest\n      ],\n      onRtl: () => [\n        south$2,\n        southwest$2,\n        southeast$2,\n        northwest$2,\n        northeast$2,\n        north$2,\n        north,\n        south,\n        northwest,\n        southwest,\n        northeast,\n        southeast\n      ]\n    };\n    const bubbleSize = 12;\n    const bubbleAlignments = {\n      valignCentre: [],\n      alignCentre: [],\n      alignLeft: [\"tox-pop--align-left\"],\n      alignRight: [\"tox-pop--align-right\"],\n      right: [\"tox-pop--right\"],\n      left: [\"tox-pop--left\"],\n      bottom: [\"tox-pop--bottom\"],\n      top: [\"tox-pop--top\"]\n    };\n    const isTouchWithinSelection = (editor, e2) => {\n      const selection = editor.selection;\n      if (selection.isCollapsed() || e2.touches.length < 1) {\n        return false;\n      } else {\n        const touch2 = e2.touches[0];\n        const rng = selection.getRng();\n        const rngRectOpt = getFirstRect(editor.getWin(), SimSelection.domRange(rng));\n        return rngRectOpt.exists((rngRect) => rngRect.left <= touch2.clientX && rngRect.right >= touch2.clientX && rngRect.top <= touch2.clientY && rngRect.bottom >= touch2.clientY);\n      }\n    };\n    const setupiOSOverrides = (editor) => {\n      const originalSelection = editor.selection.getRng();\n      const selectionReset = () => {\n        global$9.setEditorTimeout(editor, () => {\n          editor.selection.setRng(originalSelection);\n        }, 10);\n        unbindEventListeners();\n      };\n      editor.once(\"touchend\", selectionReset);\n      const preventMousedown = (e2) => {\n        e2.preventDefault();\n        e2.stopImmediatePropagation();\n      };\n      editor.on(\"mousedown\", preventMousedown, true);\n      const clearSelectionReset = () => unbindEventListeners();\n      editor.once(\"longpresscancel\", clearSelectionReset);\n      const unbindEventListeners = () => {\n        editor.off(\"touchend\", selectionReset);\n        editor.off(\"longpresscancel\", clearSelectionReset);\n        editor.off(\"mousedown\", preventMousedown);\n      };\n    };\n    const getAnchorSpec = (editor, e2, anchorType) => {\n      const anchorSpec = getAnchorSpec$1(editor, e2, anchorType);\n      const bubbleYOffset = anchorType === \"point\" ? bubbleSize : 0;\n      return {\n        bubble: nu$5(0, bubbleYOffset, bubbleAlignments),\n        layouts,\n        overrides: {\n          maxWidthFunction: expandable(),\n          maxHeightFunction: expandable$1()\n        },\n        ...anchorSpec\n      };\n    };\n    const show = (editor, e2, items, backstage, contextmenu, anchorType, highlightImmediately) => {\n      const anchorSpec = getAnchorSpec(editor, e2, anchorType);\n      build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, true).map((menuData) => {\n        e2.preventDefault();\n        InlineView.showMenuWithinBounds(contextmenu, { anchor: anchorSpec }, {\n          menu: {\n            markers: markers(\"normal\"),\n            highlightImmediately\n          },\n          data: menuData,\n          type: \"horizontal\"\n        }, () => Optional.some(getContextToolbarBounds(editor, backstage.shared, anchorType === \"node\" ? \"node\" : \"selection\")));\n        editor.dispatch(hideContextToolbarEvent);\n      });\n    };\n    const initAndShow = (editor, e2, buildMenu, backstage, contextmenu, anchorType) => {\n      const detection2 = detect$1();\n      const isiOS = detection2.os.isiOS();\n      const isMacOS = detection2.os.isMacOS();\n      const isAndroid = detection2.os.isAndroid();\n      const isTouch2 = detection2.deviceType.isTouch();\n      const shouldHighlightImmediately = () => !(isAndroid || isiOS || isMacOS && isTouch2);\n      const open2 = () => {\n        const items = buildMenu();\n        show(editor, e2, items, backstage, contextmenu, anchorType, shouldHighlightImmediately());\n      };\n      if ((isMacOS || isiOS) && anchorType !== \"node\") {\n        const openiOS = () => {\n          setupiOSOverrides(editor);\n          open2();\n        };\n        if (isTouchWithinSelection(editor, e2)) {\n          openiOS();\n        } else {\n          editor.once(\"selectionchange\", openiOS);\n          editor.once(\"touchend\", () => editor.off(\"selectionchange\", openiOS));\n        }\n      } else {\n        open2();\n      }\n    };\n    const isSeparator = (item2) => isString2(item2) ? item2 === \"|\" : item2.type === \"separator\";\n    const separator = { type: \"separator\" };\n    const makeContextItem = (item2) => {\n      const commonMenuItem = (item3) => ({\n        text: item3.text,\n        icon: item3.icon,\n        enabled: item3.enabled,\n        shortcut: item3.shortcut\n      });\n      if (isString2(item2)) {\n        return item2;\n      } else {\n        switch (item2.type) {\n          case \"separator\":\n            return separator;\n          case \"submenu\":\n            return {\n              type: \"nestedmenuitem\",\n              ...commonMenuItem(item2),\n              getSubmenuItems: () => {\n                const items = item2.getSubmenuItems();\n                if (isString2(items)) {\n                  return items;\n                } else {\n                  return map$2(items, makeContextItem);\n                }\n              }\n            };\n          default:\n            return {\n              type: \"menuitem\",\n              ...commonMenuItem(item2),\n              onAction: noarg(item2.onAction)\n            };\n        }\n      }\n    };\n    const addContextMenuGroup = (xs, groupItems) => {\n      if (groupItems.length === 0) {\n        return xs;\n      }\n      const lastMenuItem = last$1(xs).filter((item2) => !isSeparator(item2));\n      const before2 = lastMenuItem.fold(() => [], (_2) => [separator]);\n      return xs.concat(before2).concat(groupItems).concat([separator]);\n    };\n    const generateContextMenu = (contextMenus, menuConfig, selectedElement) => {\n      const sections = foldl(menuConfig, (acc, name2) => {\n        return get$g(contextMenus, name2.toLowerCase()).map((menu2) => {\n          const items = menu2.update(selectedElement);\n          if (isString2(items)) {\n            return addContextMenuGroup(acc, items.split(\" \"));\n          } else if (items.length > 0) {\n            const allItems = map$2(items, makeContextItem);\n            return addContextMenuGroup(acc, allItems);\n          } else {\n            return acc;\n          }\n        }).getOrThunk(() => acc.concat([name2]));\n      }, []);\n      if (sections.length > 0 && isSeparator(sections[sections.length - 1])) {\n        sections.pop();\n      }\n      return sections;\n    };\n    const isNativeOverrideKeyEvent = (editor, e2) => e2.ctrlKey && !shouldNeverUseNative(editor);\n    const isTriggeredByKeyboard = (editor, e2) => e2.type !== \"longpress\" && (e2.button !== 2 || e2.target === editor.getBody() && e2.pointerType === \"\");\n    const getSelectedElement = (editor, e2) => isTriggeredByKeyboard(editor, e2) ? editor.selection.getStart(true) : e2.target;\n    const getAnchorType = (editor, e2) => {\n      const selector = getAvoidOverlapSelector(editor);\n      const anchorType = isTriggeredByKeyboard(editor, e2) ? \"selection\" : \"point\";\n      if (isNotEmpty(selector)) {\n        const target = getSelectedElement(editor, e2);\n        const selectorExists = closest(SugarElement.fromDom(target), selector);\n        return selectorExists ? \"node\" : anchorType;\n      } else {\n        return anchorType;\n      }\n    };\n    const setup$5 = (editor, lazySink, backstage) => {\n      const detection2 = detect$1();\n      const isTouch2 = detection2.deviceType.isTouch;\n      const contextmenu = build$1(InlineView.sketch({\n        dom: { tag: \"div\" },\n        lazySink,\n        onEscape: () => editor.focus(),\n        onShow: () => backstage.setContextMenuState(true),\n        onHide: () => backstage.setContextMenuState(false),\n        fireDismissalEventInstead: {},\n        inlineBehaviours: derive$1([config2(\"dismissContextMenu\", [run$1(dismissRequested(), (comp, _se) => {\n          Sandboxing.close(comp);\n          editor.focus();\n        })])])\n      }));\n      const hideContextMenu = (_e) => InlineView.hide(contextmenu);\n      const showContextMenu = (e2) => {\n        if (shouldNeverUseNative(editor)) {\n          e2.preventDefault();\n        }\n        if (isNativeOverrideKeyEvent(editor, e2) || isContextMenuDisabled(editor)) {\n          return;\n        }\n        const anchorType = getAnchorType(editor, e2);\n        const buildMenu = () => {\n          const selectedElement = getSelectedElement(editor, e2);\n          const registry = editor.ui.registry.getAll();\n          const menuConfig = getContextMenu(editor);\n          return generateContextMenu(registry.contextMenus, menuConfig, selectedElement);\n        };\n        const initAndShow$2 = isTouch2() ? initAndShow : initAndShow$1;\n        initAndShow$2(editor, e2, buildMenu, backstage, contextmenu, anchorType);\n      };\n      editor.on(\"init\", () => {\n        const hideEvents = \"ResizeEditor ScrollContent ScrollWindow longpresscancel\" + (isTouch2() ? \"\" : \" ResizeWindow\");\n        editor.on(hideEvents, hideContextMenu);\n        editor.on(\"longpress contextmenu\", showContextMenu);\n      });\n    };\n    const adt = Adt.generate([\n      {\n        offset: [\n          \"x\",\n          \"y\"\n        ]\n      },\n      {\n        absolute: [\n          \"x\",\n          \"y\"\n        ]\n      },\n      {\n        fixed: [\n          \"x\",\n          \"y\"\n        ]\n      }\n    ]);\n    const subtract = (change2) => (point2) => point2.translate(-change2.left, -change2.top);\n    const add2 = (change2) => (point2) => point2.translate(change2.left, change2.top);\n    const transform = (changes) => (x2, y2) => foldl(changes, (rest, f2) => f2(rest), SugarPosition(x2, y2));\n    const asFixed = (coord, scroll, origin) => coord.fold(transform([\n      add2(origin),\n      subtract(scroll)\n    ]), transform([subtract(scroll)]), transform([]));\n    const asAbsolute = (coord, scroll, origin) => coord.fold(transform([add2(origin)]), transform([]), transform([add2(scroll)]));\n    const asOffset = (coord, scroll, origin) => coord.fold(transform([]), transform([subtract(origin)]), transform([\n      add2(scroll),\n      subtract(origin)\n    ]));\n    const withinRange = (coord1, coord2, xRange2, yRange2, scroll, origin) => {\n      const a1 = asAbsolute(coord1, scroll, origin);\n      const a2 = asAbsolute(coord2, scroll, origin);\n      return Math.abs(a1.left - a2.left) <= xRange2 && Math.abs(a1.top - a2.top) <= yRange2;\n    };\n    const getDeltas = (coord1, coord2, xRange2, yRange2, scroll, origin) => {\n      const a1 = asAbsolute(coord1, scroll, origin);\n      const a2 = asAbsolute(coord2, scroll, origin);\n      const left2 = Math.abs(a1.left - a2.left);\n      const top2 = Math.abs(a1.top - a2.top);\n      return SugarPosition(left2, top2);\n    };\n    const toStyles = (coord, scroll, origin) => {\n      const stylesOpt = coord.fold((x2, y2) => ({\n        position: Optional.some(\"absolute\"),\n        left: Optional.some(x2 + \"px\"),\n        top: Optional.some(y2 + \"px\")\n      }), (x2, y2) => ({\n        position: Optional.some(\"absolute\"),\n        left: Optional.some(x2 - origin.left + \"px\"),\n        top: Optional.some(y2 - origin.top + \"px\")\n      }), (x2, y2) => ({\n        position: Optional.some(\"fixed\"),\n        left: Optional.some(x2 + \"px\"),\n        top: Optional.some(y2 + \"px\")\n      }));\n      return {\n        right: Optional.none(),\n        bottom: Optional.none(),\n        ...stylesOpt\n      };\n    };\n    const translate = (coord, deltaX, deltaY) => coord.fold((x2, y2) => offset(x2 + deltaX, y2 + deltaY), (x2, y2) => absolute(x2 + deltaX, y2 + deltaY), (x2, y2) => fixed(x2 + deltaX, y2 + deltaY));\n    const absorb = (partialCoord, originalCoord, scroll, origin) => {\n      const absorbOne = (stencil, nu2) => (optX, optY) => {\n        const original2 = stencil(originalCoord, scroll, origin);\n        return nu2(optX.getOr(original2.left), optY.getOr(original2.top));\n      };\n      return partialCoord.fold(absorbOne(asOffset, offset), absorbOne(asAbsolute, absolute), absorbOne(asFixed, fixed));\n    };\n    const offset = adt.offset;\n    const absolute = adt.absolute;\n    const fixed = adt.fixed;\n    const parseAttrToInt = (element2, name2) => {\n      const value2 = get$f(element2, name2);\n      return isUndefined2(value2) ? NaN : parseInt(value2, 10);\n    };\n    const get = (component, snapsInfo) => {\n      const element2 = component.element;\n      const x2 = parseAttrToInt(element2, snapsInfo.leftAttr);\n      const y2 = parseAttrToInt(element2, snapsInfo.topAttr);\n      return isNaN(x2) || isNaN(y2) ? Optional.none() : Optional.some(SugarPosition(x2, y2));\n    };\n    const set2 = (component, snapsInfo, pt) => {\n      const element2 = component.element;\n      set$9(element2, snapsInfo.leftAttr, pt.left + \"px\");\n      set$9(element2, snapsInfo.topAttr, pt.top + \"px\");\n    };\n    const clear = (component, snapsInfo) => {\n      const element2 = component.element;\n      remove$7(element2, snapsInfo.leftAttr);\n      remove$7(element2, snapsInfo.topAttr);\n    };\n    const getCoords = (component, snapInfo, coord, delta) => get(component, snapInfo).fold(() => coord, (fixed$12) => fixed(fixed$12.left + delta.left, fixed$12.top + delta.top));\n    const moveOrSnap = (component, snapInfo, coord, delta, scroll, origin) => {\n      const newCoord = getCoords(component, snapInfo, coord, delta);\n      const snap2 = snapInfo.mustSnap ? findClosestSnap(component, snapInfo, newCoord, scroll, origin) : findSnap(component, snapInfo, newCoord, scroll, origin);\n      const fixedCoord = asFixed(newCoord, scroll, origin);\n      set2(component, snapInfo, fixedCoord);\n      return snap2.fold(() => ({\n        coord: fixed(fixedCoord.left, fixedCoord.top),\n        extra: Optional.none()\n      }), (spanned) => ({\n        coord: spanned.output,\n        extra: spanned.extra\n      }));\n    };\n    const stopDrag = (component, snapInfo) => {\n      clear(component, snapInfo);\n    };\n    const findMatchingSnap = (snaps, newCoord, scroll, origin) => findMap(snaps, (snap2) => {\n      const sensor = snap2.sensor;\n      const inRange = withinRange(newCoord, sensor, snap2.range.left, snap2.range.top, scroll, origin);\n      return inRange ? Optional.some({\n        output: absorb(snap2.output, newCoord, scroll, origin),\n        extra: snap2.extra\n      }) : Optional.none();\n    });\n    const findClosestSnap = (component, snapInfo, newCoord, scroll, origin) => {\n      const snaps = snapInfo.getSnapPoints(component);\n      const matchSnap = findMatchingSnap(snaps, newCoord, scroll, origin);\n      return matchSnap.orThunk(() => {\n        const bestSnap = foldl(snaps, (acc, snap2) => {\n          const sensor = snap2.sensor;\n          const deltas = getDeltas(newCoord, sensor, snap2.range.left, snap2.range.top, scroll, origin);\n          return acc.deltas.fold(() => ({\n            deltas: Optional.some(deltas),\n            snap: Optional.some(snap2)\n          }), (bestDeltas) => {\n            const currAvg = (deltas.left + deltas.top) / 2;\n            const bestAvg = (bestDeltas.left + bestDeltas.top) / 2;\n            if (currAvg <= bestAvg) {\n              return {\n                deltas: Optional.some(deltas),\n                snap: Optional.some(snap2)\n              };\n            } else {\n              return acc;\n            }\n          });\n        }, {\n          deltas: Optional.none(),\n          snap: Optional.none()\n        });\n        return bestSnap.snap.map((snap2) => ({\n          output: absorb(snap2.output, newCoord, scroll, origin),\n          extra: snap2.extra\n        }));\n      });\n    };\n    const findSnap = (component, snapInfo, newCoord, scroll, origin) => {\n      const snaps = snapInfo.getSnapPoints(component);\n      return findMatchingSnap(snaps, newCoord, scroll, origin);\n    };\n    const snapTo$1 = (snap2, scroll, origin) => ({\n      coord: absorb(snap2.output, snap2.output, scroll, origin),\n      extra: snap2.extra\n    });\n    const snapTo = (component, dragConfig, _state, snap2) => {\n      const target = dragConfig.getTarget(component.element);\n      if (dragConfig.repositionTarget) {\n        const doc = owner$4(component.element);\n        const scroll = get$b(doc);\n        const origin = getOrigin(target);\n        const snapPin = snapTo$1(snap2, scroll, origin);\n        const styles = toStyles(snapPin.coord, scroll, origin);\n        setOptions(target, styles);\n      }\n    };\n    var DraggingApis = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      snapTo\n    });\n    const initialAttribute = \"data-initial-z-index\";\n    const resetZIndex = (blocker) => {\n      parent(blocker.element).filter(isElement$1).each((root2) => {\n        getOpt(root2, initialAttribute).fold(() => remove$6(root2, \"z-index\"), (zIndex) => set$8(root2, \"z-index\", zIndex));\n        remove$7(root2, initialAttribute);\n      });\n    };\n    const changeZIndex = (blocker) => {\n      parent(blocker.element).filter(isElement$1).each((root2) => {\n        getRaw(root2, \"z-index\").each((zindex) => {\n          set$9(root2, initialAttribute, zindex);\n        });\n        set$8(root2, \"z-index\", get$e(blocker.element, \"z-index\"));\n      });\n    };\n    const instigate = (anyComponent, blocker) => {\n      anyComponent.getSystem().addToGui(blocker);\n      changeZIndex(blocker);\n    };\n    const discard = (blocker) => {\n      resetZIndex(blocker);\n      blocker.getSystem().removeFromGui(blocker);\n    };\n    const createComponent = (component, blockerClass, blockerEvents) => component.getSystem().build(Container2.sketch({\n      dom: {\n        styles: {\n          \"left\": \"0px\",\n          \"top\": \"0px\",\n          \"width\": \"100%\",\n          \"height\": \"100%\",\n          \"position\": \"fixed\",\n          \"z-index\": \"1000000000000000\"\n        },\n        classes: [blockerClass]\n      },\n      events: blockerEvents\n    }));\n    var SnapSchema = optionObjOf(\"snaps\", [\n      required$1(\"getSnapPoints\"),\n      onHandler(\"onSensor\"),\n      required$1(\"leftAttr\"),\n      required$1(\"topAttr\"),\n      defaulted(\"lazyViewport\", win),\n      defaulted(\"mustSnap\", false)\n    ]);\n    const schema$6 = [\n      defaulted(\"useFixed\", never),\n      required$1(\"blockerClass\"),\n      defaulted(\"getTarget\", identity2),\n      defaulted(\"onDrag\", noop),\n      defaulted(\"repositionTarget\", true),\n      defaulted(\"onDrop\", noop),\n      defaultedFunction(\"getBounds\", win),\n      SnapSchema\n    ];\n    const getCurrentCoord = (target) => lift3(getRaw(target, \"left\"), getRaw(target, \"top\"), getRaw(target, \"position\"), (left2, top2, position2) => {\n      const nu2 = position2 === \"fixed\" ? fixed : offset;\n      return nu2(parseInt(left2, 10), parseInt(top2, 10));\n    }).getOrThunk(() => {\n      const location2 = absolute$3(target);\n      return absolute(location2.left, location2.top);\n    });\n    const clampCoords = (component, coords, scroll, origin, startData) => {\n      const bounds2 = startData.bounds;\n      const absoluteCoord = asAbsolute(coords, scroll, origin);\n      const newX = clamp(absoluteCoord.left, bounds2.x, bounds2.x + bounds2.width - startData.width);\n      const newY = clamp(absoluteCoord.top, bounds2.y, bounds2.y + bounds2.height - startData.height);\n      const newCoords = absolute(newX, newY);\n      return coords.fold(() => {\n        const offset$1 = asOffset(newCoords, scroll, origin);\n        return offset(offset$1.left, offset$1.top);\n      }, constant$1(newCoords), () => {\n        const fixed$12 = asFixed(newCoords, scroll, origin);\n        return fixed(fixed$12.left, fixed$12.top);\n      });\n    };\n    const calcNewCoord = (component, optSnaps, currentCoord, scroll, origin, delta, startData) => {\n      const newCoord = optSnaps.fold(() => {\n        const translated = translate(currentCoord, delta.left, delta.top);\n        const fixedCoord = asFixed(translated, scroll, origin);\n        return fixed(fixedCoord.left, fixedCoord.top);\n      }, (snapInfo) => {\n        const snapping = moveOrSnap(component, snapInfo, currentCoord, delta, scroll, origin);\n        snapping.extra.each((extra) => {\n          snapInfo.onSensor(component, extra);\n        });\n        return snapping.coord;\n      });\n      return clampCoords(component, newCoord, scroll, origin, startData);\n    };\n    const dragBy = (component, dragConfig, startData, delta) => {\n      const target = dragConfig.getTarget(component.element);\n      if (dragConfig.repositionTarget) {\n        const doc = owner$4(component.element);\n        const scroll = get$b(doc);\n        const origin = getOrigin(target);\n        const currentCoord = getCurrentCoord(target);\n        const newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll, origin, delta, startData);\n        const styles = toStyles(newCoord, scroll, origin);\n        setOptions(target, styles);\n      }\n      dragConfig.onDrag(component, target, delta);\n    };\n    const calcStartData = (dragConfig, comp) => ({\n      bounds: dragConfig.getBounds(),\n      height: getOuter$2(comp.element),\n      width: getOuter$1(comp.element)\n    });\n    const move = (component, dragConfig, dragState, dragMode, event) => {\n      const delta = dragState.update(dragMode, event);\n      const dragStartData = dragState.getStartData().getOrThunk(() => calcStartData(dragConfig, component));\n      delta.each((dlt) => {\n        dragBy(component, dragConfig, dragStartData, dlt);\n      });\n    };\n    const stop = (component, blocker, dragConfig, dragState) => {\n      blocker.each(discard);\n      dragConfig.snaps.each((snapInfo) => {\n        stopDrag(component, snapInfo);\n      });\n      const target = dragConfig.getTarget(component.element);\n      dragState.reset();\n      dragConfig.onDrop(component, target);\n    };\n    const handlers = (events2) => (dragConfig, dragState) => {\n      const updateStartState = (comp) => {\n        dragState.setStartData(calcStartData(dragConfig, comp));\n      };\n      return derive$2([\n        run$1(windowScroll(), (comp) => {\n          dragState.getStartData().each(() => updateStartState(comp));\n        }),\n        ...events2(dragConfig, dragState, updateStartState)\n      ]);\n    };\n    const init$2 = (dragApi) => derive$2([\n      run$1(mousedown(), dragApi.forceDrop),\n      run$1(mouseup(), dragApi.drop),\n      run$1(mousemove(), (comp, simulatedEvent) => {\n        dragApi.move(simulatedEvent.event);\n      }),\n      run$1(mouseout(), dragApi.delayDrop)\n    ]);\n    const getData$1 = (event) => Optional.from(SugarPosition(event.x, event.y));\n    const getDelta$1 = (old, nu2) => SugarPosition(nu2.left - old.left, nu2.top - old.top);\n    var MouseData = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      getData: getData$1,\n      getDelta: getDelta$1\n    });\n    const events$2 = (dragConfig, dragState, updateStartState) => [run$1(mousedown(), (component, simulatedEvent) => {\n      const raw = simulatedEvent.event.raw;\n      if (raw.button !== 0) {\n        return;\n      }\n      simulatedEvent.stop();\n      const stop$1 = () => stop(component, Optional.some(blocker), dragConfig, dragState);\n      const delayDrop = DelayedFunction(stop$1, 200);\n      const dragApi = {\n        drop: stop$1,\n        delayDrop: delayDrop.schedule,\n        forceDrop: stop$1,\n        move: (event) => {\n          delayDrop.cancel();\n          move(component, dragConfig, dragState, MouseData, event);\n        }\n      };\n      const blocker = createComponent(component, dragConfig.blockerClass, init$2(dragApi));\n      const start = () => {\n        updateStartState(component);\n        instigate(component, blocker);\n      };\n      start();\n    })];\n    const schema$5 = [\n      ...schema$6,\n      output$1(\"dragger\", { handlers: handlers(events$2) })\n    ];\n    const init$1 = (dragApi) => derive$2([\n      run$1(touchstart(), dragApi.forceDrop),\n      run$1(touchend(), dragApi.drop),\n      run$1(touchcancel(), dragApi.drop),\n      run$1(touchmove(), (comp, simulatedEvent) => {\n        dragApi.move(simulatedEvent.event);\n      })\n    ]);\n    const getDataFrom = (touches) => {\n      const touch2 = touches[0];\n      return Optional.some(SugarPosition(touch2.clientX, touch2.clientY));\n    };\n    const getData = (event) => {\n      const raw = event.raw;\n      const touches = raw.touches;\n      return touches.length === 1 ? getDataFrom(touches) : Optional.none();\n    };\n    const getDelta = (old, nu2) => SugarPosition(nu2.left - old.left, nu2.top - old.top);\n    var TouchData = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      getData,\n      getDelta\n    });\n    const events$1 = (dragConfig, dragState, updateStartState) => {\n      const blockerSingleton = value$2();\n      const stopBlocking = (component) => {\n        stop(component, blockerSingleton.get(), dragConfig, dragState);\n        blockerSingleton.clear();\n      };\n      return [\n        run$1(touchstart(), (component, simulatedEvent) => {\n          simulatedEvent.stop();\n          const stop2 = () => stopBlocking(component);\n          const dragApi = {\n            drop: stop2,\n            delayDrop: noop,\n            forceDrop: stop2,\n            move: (event) => {\n              move(component, dragConfig, dragState, TouchData, event);\n            }\n          };\n          const blocker = createComponent(component, dragConfig.blockerClass, init$1(dragApi));\n          blockerSingleton.set(blocker);\n          const start = () => {\n            updateStartState(component);\n            instigate(component, blocker);\n          };\n          start();\n        }),\n        run$1(touchmove(), (component, simulatedEvent) => {\n          simulatedEvent.stop();\n          move(component, dragConfig, dragState, TouchData, simulatedEvent.event);\n        }),\n        run$1(touchend(), (component, simulatedEvent) => {\n          simulatedEvent.stop();\n          stopBlocking(component);\n        }),\n        run$1(touchcancel(), stopBlocking)\n      ];\n    };\n    const schema$4 = [\n      ...schema$6,\n      output$1(\"dragger\", { handlers: handlers(events$1) })\n    ];\n    const events = (dragConfig, dragState, updateStartState) => [\n      ...events$2(dragConfig, dragState, updateStartState),\n      ...events$1(dragConfig, dragState, updateStartState)\n    ];\n    const schema$3 = [\n      ...schema$6,\n      output$1(\"dragger\", { handlers: handlers(events) })\n    ];\n    const mouse = schema$5;\n    const touch = schema$4;\n    const mouseOrTouch = schema$3;\n    var DraggingBranches = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      mouse,\n      touch,\n      mouseOrTouch\n    });\n    const init = () => {\n      let previous = Optional.none();\n      let startData = Optional.none();\n      const reset2 = () => {\n        previous = Optional.none();\n        startData = Optional.none();\n      };\n      const calculateDelta = (mode, nu2) => {\n        const result = previous.map((old) => mode.getDelta(old, nu2));\n        previous = Optional.some(nu2);\n        return result;\n      };\n      const update = (mode, dragEvent) => mode.getData(dragEvent).bind((nuData) => calculateDelta(mode, nuData));\n      const setStartData = (data) => {\n        startData = Optional.some(data);\n      };\n      const getStartData = () => startData;\n      const readState = constant$1({});\n      return nu$8({\n        readState,\n        reset: reset2,\n        update,\n        getStartData,\n        setStartData\n      });\n    };\n    var DragState = /* @__PURE__ */ Object.freeze({\n      __proto__: null,\n      init\n    });\n    const Dragging = createModes({\n      branchKey: \"mode\",\n      branches: DraggingBranches,\n      name: \"dragging\",\n      active: {\n        events: (dragConfig, dragState) => {\n          const dragger = dragConfig.dragger;\n          return dragger.handlers(dragConfig, dragState);\n        }\n      },\n      extra: {\n        snap: (sConfig) => ({\n          sensor: sConfig.sensor,\n          range: sConfig.range,\n          output: sConfig.output,\n          extra: Optional.from(sConfig.extra)\n        })\n      },\n      state: DragState,\n      apis: DraggingApis\n    });\n    const snapWidth = 40;\n    const snapOffset = snapWidth / 2;\n    const calcSnap = (selectorOpt, td, x2, y2, width2, height2) => selectorOpt.fold(() => Dragging.snap({\n      sensor: absolute(x2 - snapOffset, y2 - snapOffset),\n      range: SugarPosition(width2, height2),\n      output: absolute(Optional.some(x2), Optional.some(y2)),\n      extra: { td }\n    }), (selectorHandle) => {\n      const sensorLeft = x2 - snapOffset;\n      const sensorTop = y2 - snapOffset;\n      const sensorWidth = snapWidth;\n      const sensorHeight = snapWidth;\n      const rect2 = selectorHandle.element.dom.getBoundingClientRect();\n      return Dragging.snap({\n        sensor: absolute(sensorLeft, sensorTop),\n        range: SugarPosition(sensorWidth, sensorHeight),\n        output: absolute(Optional.some(x2 - rect2.width / 2), Optional.some(y2 - rect2.height / 2)),\n        extra: { td }\n      });\n    });\n    const getSnapsConfig = (getSnapPoints, cell, onChange) => {\n      const isSameCell = (cellOpt, td) => cellOpt.exists((currentTd) => eq2(currentTd, td));\n      return {\n        getSnapPoints,\n        leftAttr: \"data-drag-left\",\n        topAttr: \"data-drag-top\",\n        onSensor: (component, extra) => {\n          const td = extra.td;\n          if (!isSameCell(cell.get(), td)) {\n            cell.set(td);\n            onChange(td);\n          }\n        },\n        mustSnap: true\n      };\n    };\n    const createSelector = (snaps) => record(Button.sketch({\n      dom: {\n        tag: \"div\",\n        classes: [\"tox-selector\"]\n      },\n      buttonBehaviours: derive$1([\n        Dragging.config({\n          mode: \"mouseOrTouch\",\n          blockerClass: \"blocker\",\n          snaps\n        }),\n        Unselecting.config({})\n      ]),\n      eventOrder: {\n        mousedown: [\n          \"dragging\",\n          \"alloy.base.behaviour\"\n        ],\n        touchstart: [\n          \"dragging\",\n          \"alloy.base.behaviour\"\n        ]\n      }\n    }));\n    const setup$4 = (editor, sink) => {\n      const tlTds = Cell([]);\n      const brTds = Cell([]);\n      const isVisible2 = Cell(false);\n      const startCell = value$2();\n      const finishCell = value$2();\n      const getTopLeftSnap = (td) => {\n        const box2 = absolute$2(td);\n        return calcSnap(memTopLeft.getOpt(sink), td, box2.x, box2.y, box2.width, box2.height);\n      };\n      const getTopLeftSnaps = () => map$2(tlTds.get(), (td) => getTopLeftSnap(td));\n      const getBottomRightSnap = (td) => {\n        const box2 = absolute$2(td);\n        return calcSnap(memBottomRight.getOpt(sink), td, box2.right, box2.bottom, box2.width, box2.height);\n      };\n      const getBottomRightSnaps = () => map$2(brTds.get(), (td) => getBottomRightSnap(td));\n      const topLeftSnaps = getSnapsConfig(getTopLeftSnaps, startCell, (start) => {\n        finishCell.get().each((finish) => {\n          editor.dispatch(\"TableSelectorChange\", {\n            start,\n            finish\n          });\n        });\n      });\n      const bottomRightSnaps = getSnapsConfig(getBottomRightSnaps, finishCell, (finish) => {\n        startCell.get().each((start) => {\n          editor.dispatch(\"TableSelectorChange\", {\n            start,\n            finish\n          });\n        });\n      });\n      const memTopLeft = createSelector(topLeftSnaps);\n      const memBottomRight = createSelector(bottomRightSnaps);\n      const topLeft = build$1(memTopLeft.asSpec());\n      const bottomRight = build$1(memBottomRight.asSpec());\n      const showOrHideHandle = (selector, cell, isAbove, isBelow) => {\n        const cellRect = cell.dom.getBoundingClientRect();\n        remove$6(selector.element, \"display\");\n        const viewportHeight = defaultView(SugarElement.fromDom(editor.getBody())).dom.innerHeight;\n        const aboveViewport = isAbove(cellRect);\n        const belowViewport = isBelow(cellRect, viewportHeight);\n        if (aboveViewport || belowViewport) {\n          set$8(selector.element, \"display\", \"none\");\n        }\n      };\n      const snapTo2 = (selector, cell, getSnapConfig, pos) => {\n        const snap2 = getSnapConfig(cell);\n        Dragging.snapTo(selector, snap2);\n        const isAbove = (rect2) => rect2[pos] < 0;\n        const isBelow = (rect2, viewportHeight) => rect2[pos] > viewportHeight;\n        showOrHideHandle(selector, cell, isAbove, isBelow);\n      };\n      const snapTopLeft = (cell) => snapTo2(topLeft, cell, getTopLeftSnap, \"top\");\n      const snapLastTopLeft = () => startCell.get().each(snapTopLeft);\n      const snapBottomRight = (cell) => snapTo2(bottomRight, cell, getBottomRightSnap, \"bottom\");\n      const snapLastBottomRight = () => finishCell.get().each(snapBottomRight);\n      if (detect$1().deviceType.isTouch()) {\n        editor.on(\"TableSelectionChange\", (e2) => {\n          if (!isVisible2.get()) {\n            attach(sink, topLeft);\n            attach(sink, bottomRight);\n            isVisible2.set(true);\n          }\n          startCell.set(e2.start);\n          finishCell.set(e2.finish);\n          e2.otherCells.each((otherCells) => {\n            tlTds.set(otherCells.upOrLeftCells);\n            brTds.set(otherCells.downOrRightCells);\n            snapTopLeft(e2.start);\n            snapBottomRight(e2.finish);\n          });\n        });\n        editor.on(\"ResizeEditor ResizeWindow ScrollContent\", () => {\n          snapLastTopLeft();\n          snapLastBottomRight();\n        });\n        editor.on(\"TableSelectionClear\", () => {\n          if (isVisible2.get()) {\n            detach(topLeft);\n            detach(bottomRight);\n            isVisible2.set(false);\n          }\n          startCell.clear();\n          finishCell.clear();\n        });\n      }\n    };\n    var Logo = '<svg width=\"50px\" height=\"16px\" viewBox=\"0 0 50 16\" xmlns=\"http://www.w3.org/2000/svg\">\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.143 0c2.608.015 5.186 2.178 5.186 5.331 0 0 .077 3.812-.084 4.87-.361 2.41-2.164 4.074-4.65 4.496-1.453.284-2.523.49-3.212.623-.373.071-.634.122-.785.152-.184.038-.997.145-1.35.145-2.732 0-5.21-2.04-5.248-5.33 0 0 0-3.514.03-4.442.093-2.4 1.758-4.342 4.926-4.963 0 0 3.875-.752 4.036-.782.368-.07.775-.1 1.15-.1Zm1.826 2.8L5.83 3.989v2.393l-2.455.475v5.968l6.137-1.189V9.243l2.456-.476V2.8ZM5.83 6.382l3.682-.713v3.574l-3.682.713V6.382Zm27.173-1.64-.084-1.066h-2.226v9.132h2.456V7.743c-.008-1.151.998-2.064 2.149-2.072 1.15-.008 1.987.92 1.995 2.072v5.065h2.455V7.359c-.015-2.18-1.657-3.929-3.837-3.913a3.993 3.993 0 0 0-2.908 1.296Zm-6.3-4.266L29.16 0v2.387l-2.456.475V.476Zm0 3.2v9.132h2.456V3.676h-2.456Zm18.179 11.787L49.11 3.676H46.58l-1.612 4.527-.46 1.382-.384-1.382-1.611-4.527H39.98l3.3 9.132L42.15 16l2.732-.537ZM22.867 9.738c0 .752.568 1.075.921 1.075.353 0 .668-.047.998-.154l.537 1.765c-.23.154-.92.537-2.225.537-1.305 0-2.655-.997-2.686-2.686a136.877 136.877 0 0 1 0-4.374H18.8V3.676h1.612v-1.98l2.455-.476v2.456h2.302V5.9h-2.302v3.837Z\"/>\\n</svg>\\n';\n    const isHidden = (elm) => elm.nodeName === \"BR\" || !!elm.getAttribute(\"data-mce-bogus\") || elm.getAttribute(\"data-mce-type\") === \"bookmark\";\n    const renderElementPath = (editor, settings, providersBackstage) => {\n      var _a3;\n      const delimiter2 = (_a3 = settings.delimiter) !== null && _a3 !== void 0 ? _a3 : \"›\";\n      const renderElement = (name2, element2, index2) => Button.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-statusbar__path-item\"],\n          attributes: {\n            \"data-index\": index2,\n            \"aria-level\": index2 + 1\n          }\n        },\n        components: [text$1(name2)],\n        action: (_btn) => {\n          editor.focus();\n          editor.selection.select(element2);\n          editor.nodeChanged();\n        },\n        buttonBehaviours: derive$1([\n          DisablingConfigs.button(providersBackstage.isDisabled),\n          receivingConfig()\n        ])\n      });\n      const renderDivider = () => ({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-statusbar__path-divider\"],\n          attributes: { \"aria-hidden\": true }\n        },\n        components: [text$1(` ${delimiter2} `)]\n      });\n      const renderPathData = (data) => foldl(data, (acc, path2, index2) => {\n        const element2 = renderElement(path2.name, path2.element, index2);\n        if (index2 === 0) {\n          return acc.concat([element2]);\n        } else {\n          return acc.concat([\n            renderDivider(),\n            element2\n          ]);\n        }\n      }, []);\n      const updatePath = (parents) => {\n        const newPath = [];\n        let i3 = parents.length;\n        while (i3-- > 0) {\n          const parent2 = parents[i3];\n          if (parent2.nodeType === 1 && !isHidden(parent2)) {\n            const args = editor.dispatch(\"ResolveName\", {\n              name: parent2.nodeName.toLowerCase(),\n              target: parent2\n            });\n            if (!args.isDefaultPrevented()) {\n              newPath.push({\n                name: args.name,\n                element: parent2\n              });\n            }\n            if (args.isPropagationStopped()) {\n              break;\n            }\n          }\n        }\n        return newPath;\n      };\n      return {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-statusbar__path\"],\n          attributes: { role: \"navigation\" }\n        },\n        behaviours: derive$1([\n          Keying.config({\n            mode: \"flow\",\n            selector: \"div[role=button]\"\n          }),\n          Disabling.config({ disabled: providersBackstage.isDisabled }),\n          receivingConfig(),\n          Tabstopping.config({}),\n          Replacing.config({}),\n          config2(\"elementPathEvents\", [runOnAttached((comp, _e) => {\n            editor.shortcuts.add(\"alt+F11\", \"focus statusbar elementpath\", () => Keying.focusIn(comp));\n            editor.on(\"NodeChange\", (e2) => {\n              const newPath = updatePath(e2.parents);\n              const newChildren = newPath.length > 0 ? renderPathData(newPath) : [];\n              Replacing.set(comp, newChildren);\n            });\n          })])\n        ]),\n        components: []\n      };\n    };\n    var ResizeTypes;\n    (function(ResizeTypes2) {\n      ResizeTypes2[ResizeTypes2[\"None\"] = 0] = \"None\";\n      ResizeTypes2[ResizeTypes2[\"Both\"] = 1] = \"Both\";\n      ResizeTypes2[ResizeTypes2[\"Vertical\"] = 2] = \"Vertical\";\n    })(ResizeTypes || (ResizeTypes = {}));\n    const getDimensions = (editor, deltas, resizeType, originalHeight, originalWidth) => {\n      const dimensions = {};\n      dimensions.height = calcCappedSize(originalHeight + deltas.top, getMinHeightOption(editor), getMaxHeightOption(editor));\n      if (resizeType === ResizeTypes.Both) {\n        dimensions.width = calcCappedSize(originalWidth + deltas.left, getMinWidthOption(editor), getMaxWidthOption(editor));\n      }\n      return dimensions;\n    };\n    const resize = (editor, deltas, resizeType) => {\n      const container = SugarElement.fromDom(editor.getContainer());\n      const dimensions = getDimensions(editor, deltas, resizeType, get$d(container), get$c(container));\n      each(dimensions, (val, dim) => set$8(container, dim, numToPx(val)));\n      fireResizeEditor(editor);\n    };\n    const getResizeType = (editor) => {\n      const resize2 = getResize(editor);\n      if (resize2 === false) {\n        return ResizeTypes.None;\n      } else if (resize2 === \"both\") {\n        return ResizeTypes.Both;\n      } else {\n        return ResizeTypes.Vertical;\n      }\n    };\n    const keyboardHandler = (editor, resizeType, x2, y2) => {\n      const scale = 20;\n      const delta = SugarPosition(x2 * scale, y2 * scale);\n      resize(editor, delta, resizeType);\n      return Optional.some(true);\n    };\n    const renderResizeHandler = (editor, providersBackstage) => {\n      const resizeType = getResizeType(editor);\n      if (resizeType === ResizeTypes.None) {\n        return Optional.none();\n      }\n      return Optional.some(render$3(\"resize-handle\", {\n        tag: \"div\",\n        classes: [\"tox-statusbar__resize-handle\"],\n        attributes: { title: providersBackstage.translate(\"Resize\") },\n        behaviours: [\n          Dragging.config({\n            mode: \"mouse\",\n            repositionTarget: false,\n            onDrag: (_comp, _target, delta) => resize(editor, delta, resizeType),\n            blockerClass: \"tox-blocker\"\n          }),\n          Keying.config({\n            mode: \"special\",\n            onLeft: () => keyboardHandler(editor, resizeType, -1, 0),\n            onRight: () => keyboardHandler(editor, resizeType, 1, 0),\n            onUp: () => keyboardHandler(editor, resizeType, 0, -1),\n            onDown: () => keyboardHandler(editor, resizeType, 0, 1)\n          }),\n          Tabstopping.config({}),\n          Focusing.config({})\n        ]\n      }, providersBackstage.icons));\n    };\n    const renderWordCount = (editor, providersBackstage) => {\n      const replaceCountText = (comp, count, mode) => Replacing.set(comp, [text$1(providersBackstage.translate([\n        \"{0} \" + mode,\n        count[mode]\n      ]))]);\n      return Button.sketch({\n        dom: {\n          tag: \"button\",\n          classes: [\"tox-statusbar__wordcount\"]\n        },\n        components: [],\n        buttonBehaviours: derive$1([\n          DisablingConfigs.button(providersBackstage.isDisabled),\n          receivingConfig(),\n          Tabstopping.config({}),\n          Replacing.config({}),\n          Representing.config({\n            store: {\n              mode: \"memory\",\n              initialValue: {\n                mode: \"words\",\n                count: {\n                  words: 0,\n                  characters: 0\n                }\n              }\n            }\n          }),\n          config2(\"wordcount-events\", [\n            runOnExecute$1((comp) => {\n              const currentVal = Representing.getValue(comp);\n              const newMode = currentVal.mode === \"words\" ? \"characters\" : \"words\";\n              Representing.setValue(comp, {\n                mode: newMode,\n                count: currentVal.count\n              });\n              replaceCountText(comp, currentVal.count, newMode);\n            }),\n            runOnAttached((comp) => {\n              editor.on(\"wordCountUpdate\", (e2) => {\n                const { mode } = Representing.getValue(comp);\n                Representing.setValue(comp, {\n                  mode,\n                  count: e2.wordCount\n                });\n                replaceCountText(comp, e2.wordCount, mode);\n              });\n            })\n          ])\n        ]),\n        eventOrder: {\n          [execute$5()]: [\n            \"disabling\",\n            \"alloy.base.behaviour\",\n            \"wordcount-events\"\n          ]\n        }\n      });\n    };\n    const renderStatusbar = (editor, providersBackstage) => {\n      const renderBranding = () => {\n        return {\n          dom: {\n            tag: \"span\",\n            classes: [\"tox-statusbar__branding\"]\n          },\n          components: [{\n            dom: {\n              tag: \"a\",\n              attributes: {\n                \"href\": \"https://www.tiny.cloud/powered-by-tiny?utm_campaign=editor_referral&utm_medium=poweredby&utm_source=tinymce&utm_content=v6\",\n                \"rel\": \"noopener\",\n                \"target\": \"_blank\",\n                \"aria-label\": global$8.translate([\n                  \"Powered by {0}\",\n                  \"Tiny\"\n                ])\n              },\n              innerHtml: Logo.trim()\n            },\n            behaviours: derive$1([Focusing.config({})])\n          }]\n        };\n      };\n      const getTextComponents = () => {\n        const components2 = [];\n        if (useElementPath(editor)) {\n          components2.push(renderElementPath(editor, {}, providersBackstage));\n        }\n        if (editor.hasPlugin(\"wordcount\")) {\n          components2.push(renderWordCount(editor, providersBackstage));\n        }\n        if (useBranding(editor)) {\n          components2.push(renderBranding());\n        }\n        if (components2.length > 0) {\n          return [{\n            dom: {\n              tag: \"div\",\n              classes: [\"tox-statusbar__text-container\"]\n            },\n            components: components2\n          }];\n        }\n        return [];\n      };\n      const getComponents = () => {\n        const components2 = getTextComponents();\n        const resizeHandler = renderResizeHandler(editor, providersBackstage);\n        return components2.concat(resizeHandler.toArray());\n      };\n      return {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-statusbar\"]\n        },\n        components: getComponents()\n      };\n    };\n    const getLazyMothership = (singleton2) => singleton2.get().getOrDie(\"UI has not been rendered\");\n    const setup$3 = (editor) => {\n      const isInline = editor.inline;\n      const mode = isInline ? Inline2 : Iframe;\n      const header = isStickyToolbar(editor) ? StickyHeader : StaticHeader;\n      const lazySink = value$2();\n      const lazyOuterContainer = value$2();\n      const lazyMothership = value$2();\n      const lazyUiMothership = value$2();\n      const platform2 = detect$1();\n      const isTouch2 = platform2.deviceType.isTouch();\n      const touchPlatformClass = \"tox-platform-touch\";\n      const deviceClasses = isTouch2 ? [touchPlatformClass] : [];\n      const isToolbarBottom = isToolbarLocationBottom(editor);\n      const toolbarMode = getToolbarMode(editor);\n      const memAnchorBar = record({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-anchorbar\"]\n        }\n      });\n      const lazyHeader = () => lazyOuterContainer.get().bind(OuterContainer.getHeader);\n      const lazySinkResult = () => Result.fromOption(lazySink.get(), \"UI has not been rendered\");\n      const lazyAnchorBar = () => lazyOuterContainer.get().bind((container) => memAnchorBar.getOpt(container)).getOrDie(\"Could not find a anchor bar element\");\n      const lazyToolbar = () => lazyOuterContainer.get().bind((container) => OuterContainer.getToolbar(container)).getOrDie(\"Could not find more toolbar element\");\n      const lazyThrobber = () => lazyOuterContainer.get().bind((container) => OuterContainer.getThrobber(container)).getOrDie(\"Could not find throbber element\");\n      const backstage = init$7(lazySinkResult, editor, lazyAnchorBar);\n      const makeHeaderPart = () => {\n        const verticalDirAttributes = { attributes: { [Attribute]: isToolbarBottom ? AttributeValue.BottomToTop : AttributeValue.TopToBottom } };\n        const partMenubar2 = OuterContainer.parts.menubar({\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-menubar\"]\n          },\n          backstage,\n          onEscape: () => {\n            editor.focus();\n          }\n        });\n        const partToolbar2 = OuterContainer.parts.toolbar({\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-toolbar\"]\n          },\n          getSink: lazySinkResult,\n          providers: backstage.shared.providers,\n          onEscape: () => {\n            editor.focus();\n          },\n          type: toolbarMode,\n          lazyToolbar,\n          lazyHeader: () => lazyHeader().getOrDie(\"Could not find header element\"),\n          ...verticalDirAttributes\n        });\n        const partMultipleToolbar2 = OuterContainer.parts[\"multiple-toolbar\"]({\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-toolbar-overlord\"]\n          },\n          providers: backstage.shared.providers,\n          onEscape: () => {\n            editor.focus();\n          },\n          type: toolbarMode\n        });\n        const hasMultipleToolbar = isMultipleToolbars(editor);\n        const hasToolbar = isToolbarEnabled(editor);\n        const hasMenubar = isMenubarEnabled(editor);\n        const getPartToolbar = () => {\n          if (hasMultipleToolbar) {\n            return [partMultipleToolbar2];\n          } else if (hasToolbar) {\n            return [partToolbar2];\n          } else {\n            return [];\n          }\n        };\n        return OuterContainer.parts.header({\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-editor-header\"],\n            ...verticalDirAttributes\n          },\n          components: flatten([\n            hasMenubar ? [partMenubar2] : [],\n            getPartToolbar(),\n            useFixedContainer(editor) ? [] : [memAnchorBar.asSpec()]\n          ]),\n          sticky: isStickyToolbar(editor),\n          editor,\n          sharedBackstage: backstage.shared\n        });\n      };\n      const makeSidebarDefinition = () => {\n        const partSocket2 = OuterContainer.parts.socket({\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-edit-area\"]\n          }\n        });\n        const partSidebar2 = OuterContainer.parts.sidebar({\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-sidebar\"]\n          }\n        });\n        return {\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-sidebar-wrap\"]\n          },\n          components: [\n            partSocket2,\n            partSidebar2\n          ]\n        };\n      };\n      const renderSink = () => {\n        const uiContainer = getUiContainer(editor);\n        const isGridUiContainer = eq2(body(), uiContainer) && get$e(uiContainer, \"display\") === \"grid\";\n        const sinkSpec = {\n          dom: {\n            tag: \"div\",\n            classes: [\n              \"tox\",\n              \"tox-silver-sink\",\n              \"tox-tinymce-aux\"\n            ].concat(deviceClasses),\n            attributes: { ...global$8.isRtl() ? { dir: \"rtl\" } : {} }\n          },\n          behaviours: derive$1([Positioning.config({ useFixed: () => header.isDocked(lazyHeader) })])\n        };\n        const reactiveWidthSpec = {\n          dom: { styles: { width: document.body.clientWidth + \"px\" } },\n          events: derive$2([run$1(windowResize(), (comp) => {\n            set$8(comp.element, \"width\", document.body.clientWidth + \"px\");\n          })])\n        };\n        const sink = build$1(deepMerge(sinkSpec, isGridUiContainer ? reactiveWidthSpec : {}));\n        const uiMothership = takeover(sink);\n        lazySink.set(sink);\n        lazyUiMothership.set(uiMothership);\n        return {\n          sink,\n          uiMothership\n        };\n      };\n      const renderContainer2 = () => {\n        const partHeader2 = makeHeaderPart();\n        const sidebarContainer = makeSidebarDefinition();\n        const partThrobber2 = OuterContainer.parts.throbber({\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-throbber\"]\n          },\n          backstage\n        });\n        const statusbar = useStatusBar(editor) && !isInline ? Optional.some(renderStatusbar(editor, backstage.shared.providers)) : Optional.none();\n        const editorComponents = flatten([\n          isToolbarBottom ? [] : [partHeader2],\n          isInline ? [] : [sidebarContainer],\n          isToolbarBottom ? [partHeader2] : []\n        ]);\n        const editorContainer = {\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-editor-container\"]\n          },\n          components: editorComponents\n        };\n        const containerComponents = flatten([\n          [editorContainer],\n          isInline ? [] : statusbar.toArray(),\n          [partThrobber2]\n        ]);\n        const isHidden2 = isDistractionFree(editor);\n        const attributes = {\n          role: \"application\",\n          ...global$8.isRtl() ? { dir: \"rtl\" } : {},\n          ...isHidden2 ? { \"aria-hidden\": \"true\" } : {}\n        };\n        const outerContainer = build$1(OuterContainer.sketch({\n          dom: {\n            tag: \"div\",\n            classes: [\n              \"tox\",\n              \"tox-tinymce\"\n            ].concat(isInline ? [\"tox-tinymce-inline\"] : []).concat(isToolbarBottom ? [\"tox-tinymce--toolbar-bottom\"] : []).concat(deviceClasses),\n            styles: {\n              visibility: \"hidden\",\n              ...isHidden2 ? {\n                opacity: \"0\",\n                border: \"0\"\n              } : {}\n            },\n            attributes\n          },\n          components: containerComponents,\n          behaviours: derive$1([\n            receivingConfig(),\n            Disabling.config({ disableClass: \"tox-tinymce--disabled\" }),\n            Keying.config({\n              mode: \"cyclic\",\n              selector: \".tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a, .tox-statusbar__resize-handle\"\n            })\n          ])\n        }));\n        const mothership = takeover(outerContainer);\n        lazyOuterContainer.set(outerContainer);\n        lazyMothership.set(mothership);\n        return {\n          mothership,\n          outerContainer\n        };\n      };\n      const setEditorSize = (outerContainer) => {\n        const parsedHeight = numToPx(getHeightWithFallback(editor));\n        const parsedWidth = numToPx(getWidthWithFallback(editor));\n        if (!editor.inline) {\n          if (isValidValue(\"div\", \"width\", parsedWidth)) {\n            set$8(outerContainer.element, \"width\", parsedWidth);\n          }\n          if (isValidValue(\"div\", \"height\", parsedHeight)) {\n            set$8(outerContainer.element, \"height\", parsedHeight);\n          } else {\n            set$8(outerContainer.element, \"height\", \"400px\");\n          }\n        }\n        return parsedHeight;\n      };\n      const setupShortcutsAndCommands = (outerContainer) => {\n        editor.addShortcut(\"alt+F9\", \"focus menubar\", () => {\n          OuterContainer.focusMenubar(outerContainer);\n        });\n        editor.addShortcut(\"alt+F10\", \"focus toolbar\", () => {\n          OuterContainer.focusToolbar(outerContainer);\n        });\n        editor.addCommand(\"ToggleToolbarDrawer\", () => {\n          OuterContainer.toggleToolbarDrawer(outerContainer);\n        });\n        editor.addQueryStateHandler(\"ToggleToolbarDrawer\", () => OuterContainer.isToolbarDrawerToggled(outerContainer));\n      };\n      const renderUI = () => {\n        const { mothership, outerContainer } = renderContainer2();\n        const { uiMothership, sink } = renderSink();\n        map$1(getToolbarGroups(editor), (toolbarGroupButtonConfig, name2) => {\n          editor.ui.registry.addGroupToolbarButton(name2, toolbarGroupButtonConfig);\n        });\n        const { buttons, menuItems, contextToolbars, sidebars } = editor.ui.registry.getAll();\n        const toolbarOpt = getMultipleToolbarsOption(editor);\n        const rawUiConfig = {\n          menuItems,\n          menus: getMenus(editor),\n          menubar: getMenubar(editor),\n          toolbar: toolbarOpt.getOrThunk(() => getToolbar(editor)),\n          allowToolbarGroups: toolbarMode === ToolbarMode$1.floating,\n          buttons,\n          sidebar: sidebars\n        };\n        setupShortcutsAndCommands(outerContainer);\n        setup$b(editor, mothership, uiMothership);\n        header.setup(editor, backstage.shared, lazyHeader);\n        setup$6(editor, backstage);\n        setup$5(editor, lazySinkResult, backstage);\n        setup$8(editor);\n        setup$7(editor, lazyThrobber, backstage.shared);\n        register$9(editor, contextToolbars, sink, { backstage });\n        setup$4(editor, sink);\n        const elm = editor.getElement();\n        const height2 = setEditorSize(outerContainer);\n        const uiComponents = {\n          mothership,\n          uiMothership,\n          outerContainer,\n          sink\n        };\n        const args = {\n          targetNode: elm,\n          height: height2\n        };\n        return mode.render(editor, uiComponents, rawUiConfig, backstage, args);\n      };\n      const getMothership = () => getLazyMothership(lazyMothership);\n      const getUiMothership = () => getLazyMothership(lazyUiMothership);\n      return {\n        getMothership,\n        getUiMothership,\n        backstage,\n        renderUI\n      };\n    };\n    const describedBy = (describedElement, describeElement) => {\n      const describeId = Optional.from(get$f(describedElement, \"id\")).fold(() => {\n        const id = generate$6(\"dialog-describe\");\n        set$9(describeElement, \"id\", id);\n        return id;\n      }, identity2);\n      set$9(describedElement, \"aria-describedby\", describeId);\n    };\n    const labelledBy = (labelledElement, labelElement) => {\n      const labelId = getOpt(labelledElement, \"id\").fold(() => {\n        const id = generate$6(\"dialog-label\");\n        set$9(labelElement, \"id\", id);\n        return id;\n      }, identity2);\n      set$9(labelledElement, \"aria-labelledby\", labelId);\n    };\n    const schema$2 = constant$1([\n      required$1(\"lazySink\"),\n      option$3(\"dragBlockClass\"),\n      defaultedFunction(\"getBounds\", win),\n      defaulted(\"useTabstopAt\", always),\n      defaulted(\"eventOrder\", {}),\n      field(\"modalBehaviours\", [Keying]),\n      onKeyboardHandler(\"onExecute\"),\n      onStrictKeyboardHandler(\"onEscape\")\n    ]);\n    const basic = { sketch: identity2 };\n    const parts$2 = constant$1([\n      optional({\n        name: \"draghandle\",\n        overrides: (detail, spec) => {\n          return {\n            behaviours: derive$1([Dragging.config({\n              mode: \"mouse\",\n              getTarget: (handle2) => {\n                return ancestor(handle2, '[role=\"dialog\"]').getOr(handle2);\n              },\n              blockerClass: detail.dragBlockClass.getOrDie(new Error(\"The drag blocker class was not specified for a dialog with a drag handle: \\n\" + JSON.stringify(spec, null, 2)).message),\n              getBounds: detail.getDragBounds\n            })])\n          };\n        }\n      }),\n      required({\n        schema: [required$1(\"dom\")],\n        name: \"title\"\n      }),\n      required({\n        factory: basic,\n        schema: [required$1(\"dom\")],\n        name: \"close\"\n      }),\n      required({\n        factory: basic,\n        schema: [required$1(\"dom\")],\n        name: \"body\"\n      }),\n      optional({\n        factory: basic,\n        schema: [required$1(\"dom\")],\n        name: \"footer\"\n      }),\n      external({\n        factory: {\n          sketch: (spec, detail) => ({\n            ...spec,\n            dom: detail.dom,\n            components: detail.components\n          })\n        },\n        schema: [\n          defaulted(\"dom\", {\n            tag: \"div\",\n            styles: {\n              position: \"fixed\",\n              left: \"0px\",\n              top: \"0px\",\n              right: \"0px\",\n              bottom: \"0px\"\n            }\n          }),\n          defaulted(\"components\", [])\n        ],\n        name: \"blocker\"\n      })\n    ]);\n    const factory$4 = (detail, components2, spec, externals) => {\n      const dialogComp = value$2();\n      const showDialog = (dialog) => {\n        dialogComp.set(dialog);\n        const sink = detail.lazySink(dialog).getOrDie();\n        const externalBlocker = externals.blocker();\n        const blocker = sink.getSystem().build({\n          ...externalBlocker,\n          components: externalBlocker.components.concat([premade(dialog)]),\n          behaviours: derive$1([\n            Focusing.config({}),\n            config2(\"dialog-blocker-events\", [runOnSource(focusin(), () => {\n              Keying.focusIn(dialog);\n            })])\n          ])\n        });\n        attach(sink, blocker);\n        Keying.focusIn(dialog);\n      };\n      const hideDialog = (dialog) => {\n        dialogComp.clear();\n        parent(dialog.element).each((blockerDom) => {\n          dialog.getSystem().getByDom(blockerDom).each((blocker) => {\n            detach(blocker);\n          });\n        });\n      };\n      const getDialogBody = (dialog) => getPartOrDie(dialog, detail, \"body\");\n      const getDialogFooter = (dialog) => getPartOrDie(dialog, detail, \"footer\");\n      const setBusy = (dialog, getBusySpec2) => {\n        Blocking.block(dialog, getBusySpec2);\n      };\n      const setIdle = (dialog) => {\n        Blocking.unblock(dialog);\n      };\n      const modalEventsId = generate$6(\"modal-events\");\n      const eventOrder = {\n        ...detail.eventOrder,\n        [attachedToDom()]: [modalEventsId].concat(detail.eventOrder[\"alloy.system.attached\"] || [])\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: components2,\n        apis: {\n          show: showDialog,\n          hide: hideDialog,\n          getBody: getDialogBody,\n          getFooter: getDialogFooter,\n          setIdle,\n          setBusy\n        },\n        eventOrder,\n        domModification: {\n          attributes: {\n            \"role\": \"dialog\",\n            \"aria-modal\": \"true\"\n          }\n        },\n        behaviours: augment(detail.modalBehaviours, [\n          Replacing.config({}),\n          Keying.config({\n            mode: \"cyclic\",\n            onEnter: detail.onExecute,\n            onEscape: detail.onEscape,\n            useTabstopAt: detail.useTabstopAt\n          }),\n          Blocking.config({ getRoot: dialogComp.get }),\n          config2(modalEventsId, [runOnAttached((c2) => {\n            labelledBy(c2.element, getPartOrDie(c2, detail, \"title\").element);\n            describedBy(c2.element, getPartOrDie(c2, detail, \"body\").element);\n          })])\n        ])\n      };\n    };\n    const ModalDialog = composite({\n      name: \"ModalDialog\",\n      configFields: schema$2(),\n      partFields: parts$2(),\n      factory: factory$4,\n      apis: {\n        show: (apis, dialog) => {\n          apis.show(dialog);\n        },\n        hide: (apis, dialog) => {\n          apis.hide(dialog);\n        },\n        getBody: (apis, dialog) => apis.getBody(dialog),\n        getFooter: (apis, dialog) => apis.getFooter(dialog),\n        setBusy: (apis, dialog, getBusySpec2) => {\n          apis.setBusy(dialog, getBusySpec2);\n        },\n        setIdle: (apis, dialog) => {\n          apis.setIdle(dialog);\n        }\n      }\n    });\n    const dialogToggleMenuItemSchema = objOf([\n      type,\n      name$1\n    ].concat(commonMenuItemFields));\n    const dialogToggleMenuItemDataProcessor = boolean;\n    const baseFooterButtonFields = [\n      generatedName(\"button\"),\n      optionalIcon,\n      defaultedStringEnum(\"align\", \"end\", [\n        \"start\",\n        \"end\"\n      ]),\n      primary,\n      enabled,\n      optionStringEnum(\"buttonType\", [\n        \"primary\",\n        \"secondary\"\n      ])\n    ];\n    const dialogFooterButtonFields = [\n      ...baseFooterButtonFields,\n      text2\n    ];\n    const normalFooterButtonFields = [\n      requiredStringEnum(\"type\", [\n        \"submit\",\n        \"cancel\",\n        \"custom\"\n      ]),\n      ...dialogFooterButtonFields\n    ];\n    const menuFooterButtonFields = [\n      requiredStringEnum(\"type\", [\"menu\"]),\n      optionalText,\n      optionalTooltip,\n      optionalIcon,\n      requiredArrayOf(\"items\", dialogToggleMenuItemSchema),\n      ...baseFooterButtonFields\n    ];\n    const dialogFooterButtonSchema = choose$1(\"type\", {\n      submit: normalFooterButtonFields,\n      cancel: normalFooterButtonFields,\n      custom: normalFooterButtonFields,\n      menu: menuFooterButtonFields\n    });\n    const alertBannerFields = [\n      type,\n      text2,\n      requiredStringEnum(\"level\", [\n        \"info\",\n        \"warn\",\n        \"error\",\n        \"success\"\n      ]),\n      icon,\n      defaulted(\"url\", \"\")\n    ];\n    const alertBannerSchema = objOf(alertBannerFields);\n    const createBarFields = (itemsField) => [\n      type,\n      itemsField\n    ];\n    const buttonFields = [\n      type,\n      text2,\n      enabled,\n      generatedName(\"button\"),\n      optionalIcon,\n      borderless,\n      optionStringEnum(\"buttonType\", [\n        \"primary\",\n        \"secondary\",\n        \"toolbar\"\n      ]),\n      primary\n    ];\n    const buttonSchema = objOf(buttonFields);\n    const formComponentFields = [\n      type,\n      name$1\n    ];\n    const formComponentWithLabelFields = formComponentFields.concat([optionalLabel]);\n    const checkboxFields = formComponentFields.concat([\n      label,\n      enabled\n    ]);\n    const checkboxSchema = objOf(checkboxFields);\n    const checkboxDataProcessor = boolean;\n    const collectionFields = formComponentWithLabelFields.concat([defaultedColumns(\"auto\")]);\n    const collectionSchema = objOf(collectionFields);\n    const collectionDataProcessor = arrOfObj([\n      value$1,\n      text2,\n      icon\n    ]);\n    const colorInputFields = formComponentWithLabelFields;\n    const colorInputSchema = objOf(colorInputFields);\n    const colorInputDataProcessor = string2;\n    const colorPickerFields = formComponentWithLabelFields;\n    const colorPickerSchema = objOf(colorPickerFields);\n    const colorPickerDataProcessor = string2;\n    const customEditorFields = formComponentFields.concat([\n      defaultedString(\"tag\", \"textarea\"),\n      requiredString(\"scriptId\"),\n      requiredString(\"scriptUrl\"),\n      defaultedPostMsg(\"settings\", void 0)\n    ]);\n    const customEditorFieldsOld = formComponentFields.concat([\n      defaultedString(\"tag\", \"textarea\"),\n      requiredFunction(\"init\")\n    ]);\n    const customEditorSchema = valueOf((v2) => asRaw(\"customeditor.old\", objOfOnly(customEditorFieldsOld), v2).orThunk(() => asRaw(\"customeditor.new\", objOfOnly(customEditorFields), v2)));\n    const customEditorDataProcessor = string2;\n    const dropZoneFields = formComponentWithLabelFields;\n    const dropZoneSchema = objOf(dropZoneFields);\n    const dropZoneDataProcessor = arrOfVal();\n    const createGridFields = (itemsField) => [\n      type,\n      requiredNumber(\"columns\"),\n      itemsField\n    ];\n    const htmlPanelFields = [\n      type,\n      requiredString(\"html\"),\n      defaultedStringEnum(\"presets\", \"presentation\", [\n        \"presentation\",\n        \"document\"\n      ])\n    ];\n    const htmlPanelSchema = objOf(htmlPanelFields);\n    const iframeFields = formComponentWithLabelFields.concat([defaultedBoolean(\"sandboxed\", true)]);\n    const iframeSchema = objOf(iframeFields);\n    const iframeDataProcessor = string2;\n    const imagePreviewSchema = objOf(formComponentFields.concat([optionString(\"height\")]));\n    const imagePreviewDataProcessor = objOf([\n      requiredString(\"url\"),\n      optionNumber(\"zoom\"),\n      optionNumber(\"cachedWidth\"),\n      optionNumber(\"cachedHeight\")\n    ]);\n    const inputFields = formComponentWithLabelFields.concat([\n      optionString(\"inputMode\"),\n      optionString(\"placeholder\"),\n      defaultedBoolean(\"maximized\", false),\n      enabled\n    ]);\n    const inputSchema = objOf(inputFields);\n    const inputDataProcessor = string2;\n    const createLabelFields = (itemsField) => [\n      type,\n      label,\n      itemsField\n    ];\n    const listBoxSingleItemFields = [\n      text2,\n      value$1\n    ];\n    const listBoxNestedItemFields = [\n      text2,\n      requiredArrayOf(\"items\", thunkOf(\"items\", () => listBoxItemSchema))\n    ];\n    const listBoxItemSchema = oneOf([\n      objOf(listBoxSingleItemFields),\n      objOf(listBoxNestedItemFields)\n    ]);\n    const listBoxFields = formComponentWithLabelFields.concat([\n      requiredArrayOf(\"items\", listBoxItemSchema),\n      enabled\n    ]);\n    const listBoxSchema = objOf(listBoxFields);\n    const listBoxDataProcessor = string2;\n    const selectBoxFields = formComponentWithLabelFields.concat([\n      requiredArrayOfObj(\"items\", [\n        text2,\n        value$1\n      ]),\n      defaultedNumber(\"size\", 1),\n      enabled\n    ]);\n    const selectBoxSchema = objOf(selectBoxFields);\n    const selectBoxDataProcessor = string2;\n    const sizeInputFields = formComponentWithLabelFields.concat([\n      defaultedBoolean(\"constrain\", true),\n      enabled\n    ]);\n    const sizeInputSchema = objOf(sizeInputFields);\n    const sizeInputDataProcessor = objOf([\n      requiredString(\"width\"),\n      requiredString(\"height\")\n    ]);\n    const sliderFields = formComponentFields.concat([\n      label,\n      defaultedNumber(\"min\", 0),\n      defaultedNumber(\"max\", 0)\n    ]);\n    const sliderSchema = objOf(sliderFields);\n    const sliderInputDataProcessor = number;\n    const tableFields = [\n      type,\n      requiredArrayOf(\"header\", string2),\n      requiredArrayOf(\"cells\", arrOf(string2))\n    ];\n    const tableSchema = objOf(tableFields);\n    const textAreaFields = formComponentWithLabelFields.concat([\n      optionString(\"placeholder\"),\n      defaultedBoolean(\"maximized\", false),\n      enabled\n    ]);\n    const textAreaSchema = objOf(textAreaFields);\n    const textAreaDataProcessor = string2;\n    const urlInputFields = formComponentWithLabelFields.concat([\n      defaultedStringEnum(\"filetype\", \"file\", [\n        \"image\",\n        \"media\",\n        \"file\"\n      ]),\n      enabled\n    ]);\n    const urlInputSchema = objOf(urlInputFields);\n    const urlInputDataProcessor = objOf([\n      value$1,\n      defaultedMeta\n    ]);\n    const createItemsField = (name2) => field$1(\"items\", \"items\", required$2(), arrOf(valueOf((v2) => asRaw(`Checking item of ${name2}`, itemSchema, v2).fold((sErr) => Result.error(formatError(sErr)), (passValue) => Result.value(passValue)))));\n    const itemSchema = valueThunk(() => choose$2(\"type\", {\n      alertbanner: alertBannerSchema,\n      bar: objOf(createBarFields(createItemsField(\"bar\"))),\n      button: buttonSchema,\n      checkbox: checkboxSchema,\n      colorinput: colorInputSchema,\n      colorpicker: colorPickerSchema,\n      dropzone: dropZoneSchema,\n      grid: objOf(createGridFields(createItemsField(\"grid\"))),\n      iframe: iframeSchema,\n      input: inputSchema,\n      listbox: listBoxSchema,\n      selectbox: selectBoxSchema,\n      sizeinput: sizeInputSchema,\n      slider: sliderSchema,\n      textarea: textAreaSchema,\n      urlinput: urlInputSchema,\n      customeditor: customEditorSchema,\n      htmlpanel: htmlPanelSchema,\n      imagepreview: imagePreviewSchema,\n      collection: collectionSchema,\n      label: objOf(createLabelFields(createItemsField(\"label\"))),\n      table: tableSchema,\n      panel: panelSchema\n    }));\n    const panelFields = [\n      type,\n      defaulted(\"classes\", []),\n      requiredArrayOf(\"items\", itemSchema)\n    ];\n    const panelSchema = objOf(panelFields);\n    const tabFields = [\n      generatedName(\"tab\"),\n      title,\n      requiredArrayOf(\"items\", itemSchema)\n    ];\n    const tabPanelFields = [\n      type,\n      requiredArrayOfObj(\"tabs\", tabFields)\n    ];\n    const tabPanelSchema = objOf(tabPanelFields);\n    const dialogButtonFields = dialogFooterButtonFields;\n    const dialogButtonSchema = dialogFooterButtonSchema;\n    const dialogSchema = objOf([\n      requiredString(\"title\"),\n      requiredOf(\"body\", choose$2(\"type\", {\n        panel: panelSchema,\n        tabpanel: tabPanelSchema\n      })),\n      defaultedString(\"size\", \"normal\"),\n      requiredArrayOf(\"buttons\", dialogButtonSchema),\n      defaulted(\"initialData\", {}),\n      defaultedFunction(\"onAction\", noop),\n      defaultedFunction(\"onChange\", noop),\n      defaultedFunction(\"onSubmit\", noop),\n      defaultedFunction(\"onClose\", noop),\n      defaultedFunction(\"onCancel\", noop),\n      defaultedFunction(\"onTabChange\", noop)\n    ]);\n    const createDialog = (spec) => asRaw(\"dialog\", dialogSchema, spec);\n    const urlDialogButtonSchema = objOf([\n      requiredStringEnum(\"type\", [\n        \"cancel\",\n        \"custom\"\n      ]),\n      ...dialogButtonFields\n    ]);\n    const urlDialogSchema = objOf([\n      requiredString(\"title\"),\n      requiredString(\"url\"),\n      optionNumber(\"height\"),\n      optionNumber(\"width\"),\n      optionArrayOf(\"buttons\", urlDialogButtonSchema),\n      defaultedFunction(\"onAction\", noop),\n      defaultedFunction(\"onCancel\", noop),\n      defaultedFunction(\"onClose\", noop),\n      defaultedFunction(\"onMessage\", noop)\n    ]);\n    const createUrlDialog = (spec) => asRaw(\"dialog\", urlDialogSchema, spec);\n    const getAllObjects = (obj) => {\n      if (isObject2(obj)) {\n        return [obj].concat(bind$3(values(obj), getAllObjects));\n      } else if (isArray2(obj)) {\n        return bind$3(obj, getAllObjects);\n      } else {\n        return [];\n      }\n    };\n    const isNamedItem = (obj) => isString2(obj.type) && isString2(obj.name);\n    const dataProcessors = {\n      checkbox: checkboxDataProcessor,\n      colorinput: colorInputDataProcessor,\n      colorpicker: colorPickerDataProcessor,\n      dropzone: dropZoneDataProcessor,\n      input: inputDataProcessor,\n      iframe: iframeDataProcessor,\n      imagepreview: imagePreviewDataProcessor,\n      selectbox: selectBoxDataProcessor,\n      sizeinput: sizeInputDataProcessor,\n      slider: sliderInputDataProcessor,\n      listbox: listBoxDataProcessor,\n      size: sizeInputDataProcessor,\n      textarea: textAreaDataProcessor,\n      urlinput: urlInputDataProcessor,\n      customeditor: customEditorDataProcessor,\n      collection: collectionDataProcessor,\n      togglemenuitem: dialogToggleMenuItemDataProcessor\n    };\n    const getDataProcessor = (item2) => Optional.from(dataProcessors[item2.type]);\n    const getNamedItems = (structure) => filter$2(getAllObjects(structure), isNamedItem);\n    const createDataValidator = (structure) => {\n      const namedItems = getNamedItems(structure);\n      const fields = bind$3(namedItems, (item2) => getDataProcessor(item2).fold(() => [], (schema2) => [requiredOf(item2.name, schema2)]));\n      return objOf(fields);\n    };\n    const extract = (structure) => {\n      const internalDialog = getOrDie(createDialog(structure));\n      const dataValidator = createDataValidator(structure);\n      const initialData = structure.initialData;\n      return {\n        internalDialog,\n        dataValidator,\n        initialData\n      };\n    };\n    const DialogManager = {\n      open: (factory2, structure) => {\n        const extraction = extract(structure);\n        return factory2(extraction.internalDialog, extraction.initialData, extraction.dataValidator);\n      },\n      openUrl: (factory2, structure) => {\n        const internalDialog = getOrDie(createUrlDialog(structure));\n        return factory2(internalDialog);\n      },\n      redial: (structure) => extract(structure)\n    };\n    const toValidValues = (values2) => {\n      const errors2 = [];\n      const result = {};\n      each(values2, (value2, name2) => {\n        value2.fold(() => {\n          errors2.push(name2);\n        }, (v2) => {\n          result[name2] = v2;\n        });\n      });\n      return errors2.length > 0 ? Result.error(errors2) : Result.value(result);\n    };\n    const renderBodyPanel = (spec, dialogData, backstage) => {\n      const memForm = record(Form.sketch((parts2) => ({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-form\"].concat(spec.classes)\n        },\n        components: map$2(spec.items, (item2) => interpretInForm(parts2, item2, dialogData, backstage))\n      })));\n      return {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-dialog__body\"]\n        },\n        components: [{\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-dialog__body-content\"]\n          },\n          components: [memForm.asSpec()]\n        }],\n        behaviours: derive$1([\n          Keying.config({\n            mode: \"acyclic\",\n            useTabstopAt: not(isPseudoStop)\n          }),\n          ComposingConfigs.memento(memForm),\n          RepresentingConfigs.memento(memForm, {\n            postprocess: (formValue) => toValidValues(formValue).fold((err) => {\n              console.error(err);\n              return {};\n            }, identity2)\n          })\n        ])\n      };\n    };\n    const factory$3 = (detail, _spec) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      components: detail.components,\n      events: events$a(detail.action),\n      behaviours: augment(detail.tabButtonBehaviours, [\n        Focusing.config({}),\n        Keying.config({\n          mode: \"execution\",\n          useSpace: true,\n          useEnter: true\n        }),\n        Representing.config({\n          store: {\n            mode: \"memory\",\n            initialValue: detail.value\n          }\n        })\n      ]),\n      domModification: detail.domModification\n    });\n    const TabButton = single({\n      name: \"TabButton\",\n      configFields: [\n        defaulted(\"uid\", void 0),\n        required$1(\"value\"),\n        field$1(\"dom\", \"dom\", mergeWithThunk(() => ({\n          attributes: {\n            \"role\": \"tab\",\n            \"id\": generate$6(\"aria\"),\n            \"aria-selected\": \"false\"\n          }\n        })), anyValue()),\n        option$3(\"action\"),\n        defaulted(\"domModification\", {}),\n        field(\"tabButtonBehaviours\", [\n          Focusing,\n          Keying,\n          Representing\n        ]),\n        required$1(\"view\")\n      ],\n      factory: factory$3\n    });\n    const schema$1 = constant$1([\n      required$1(\"tabs\"),\n      required$1(\"dom\"),\n      defaulted(\"clickToDismiss\", false),\n      field(\"tabbarBehaviours\", [\n        Highlighting,\n        Keying\n      ]),\n      markers$1([\n        \"tabClass\",\n        \"selectedClass\"\n      ])\n    ]);\n    const tabsPart = group({\n      factory: TabButton,\n      name: \"tabs\",\n      unit: \"tab\",\n      overrides: (barDetail) => {\n        const dismissTab$1 = (tabbar, button2) => {\n          Highlighting.dehighlight(tabbar, button2);\n          emitWith(tabbar, dismissTab(), {\n            tabbar,\n            button: button2\n          });\n        };\n        const changeTab$1 = (tabbar, button2) => {\n          Highlighting.highlight(tabbar, button2);\n          emitWith(tabbar, changeTab(), {\n            tabbar,\n            button: button2\n          });\n        };\n        return {\n          action: (button2) => {\n            const tabbar = button2.getSystem().getByUid(barDetail.uid).getOrDie();\n            const activeButton = Highlighting.isHighlighted(tabbar, button2);\n            const response = (() => {\n              if (activeButton && barDetail.clickToDismiss) {\n                return dismissTab$1;\n              } else if (!activeButton) {\n                return changeTab$1;\n              } else {\n                return noop;\n              }\n            })();\n            response(tabbar, button2);\n          },\n          domModification: { classes: [barDetail.markers.tabClass] }\n        };\n      }\n    });\n    const parts$1 = constant$1([tabsPart]);\n    const factory$2 = (detail, components2, _spec, _externals) => ({\n      \"uid\": detail.uid,\n      \"dom\": detail.dom,\n      components: components2,\n      \"debug.sketcher\": \"Tabbar\",\n      \"domModification\": { attributes: { role: \"tablist\" } },\n      \"behaviours\": augment(detail.tabbarBehaviours, [\n        Highlighting.config({\n          highlightClass: detail.markers.selectedClass,\n          itemClass: detail.markers.tabClass,\n          onHighlight: (tabbar, tab) => {\n            set$9(tab.element, \"aria-selected\", \"true\");\n          },\n          onDehighlight: (tabbar, tab) => {\n            set$9(tab.element, \"aria-selected\", \"false\");\n          }\n        }),\n        Keying.config({\n          mode: \"flow\",\n          getInitial: (tabbar) => {\n            return Highlighting.getHighlighted(tabbar).map((tab) => tab.element);\n          },\n          selector: \".\" + detail.markers.tabClass,\n          executeOnMove: true\n        })\n      ])\n    });\n    const Tabbar = composite({\n      name: \"Tabbar\",\n      configFields: schema$1(),\n      partFields: parts$1(),\n      factory: factory$2\n    });\n    const factory$1 = (detail, _spec) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      behaviours: augment(detail.tabviewBehaviours, [Replacing.config({})]),\n      domModification: { attributes: { role: \"tabpanel\" } }\n    });\n    const Tabview = single({\n      name: \"Tabview\",\n      configFields: [field(\"tabviewBehaviours\", [Replacing])],\n      factory: factory$1\n    });\n    const schema = constant$1([\n      defaulted(\"selectFirst\", true),\n      onHandler(\"onChangeTab\"),\n      onHandler(\"onDismissTab\"),\n      defaulted(\"tabs\", []),\n      field(\"tabSectionBehaviours\", [])\n    ]);\n    const barPart = required({\n      factory: Tabbar,\n      schema: [\n        required$1(\"dom\"),\n        requiredObjOf(\"markers\", [\n          required$1(\"tabClass\"),\n          required$1(\"selectedClass\")\n        ])\n      ],\n      name: \"tabbar\",\n      defaults: (detail) => {\n        return { tabs: detail.tabs };\n      }\n    });\n    const viewPart = required({\n      factory: Tabview,\n      name: \"tabview\"\n    });\n    const parts = constant$1([\n      barPart,\n      viewPart\n    ]);\n    const factory = (detail, components2, _spec, _externals) => {\n      const changeTab$1 = (button2) => {\n        const tabValue = Representing.getValue(button2);\n        getPart(button2, detail, \"tabview\").each((tabview) => {\n          const tabWithValue = find$5(detail.tabs, (t3) => t3.value === tabValue);\n          tabWithValue.each((tabData) => {\n            const panel = tabData.view();\n            getOpt(button2.element, \"id\").each((id) => {\n              set$9(tabview.element, \"aria-labelledby\", id);\n            });\n            Replacing.set(tabview, panel);\n            detail.onChangeTab(tabview, button2, panel);\n          });\n        });\n      };\n      const changeTabBy = (section, byPred) => {\n        getPart(section, detail, \"tabbar\").each((tabbar) => {\n          byPred(tabbar).each(emitExecute);\n        });\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: components2,\n        behaviours: get$3(detail.tabSectionBehaviours),\n        events: derive$2(flatten([\n          detail.selectFirst ? [runOnAttached((section, _simulatedEvent) => {\n            changeTabBy(section, Highlighting.getFirst);\n          })] : [],\n          [\n            run$1(changeTab(), (section, simulatedEvent) => {\n              const button2 = simulatedEvent.event.button;\n              changeTab$1(button2);\n            }),\n            run$1(dismissTab(), (section, simulatedEvent) => {\n              const button2 = simulatedEvent.event.button;\n              detail.onDismissTab(section, button2);\n            })\n          ]\n        ])),\n        apis: {\n          getViewItems: (section) => {\n            return getPart(section, detail, \"tabview\").map((tabview) => Replacing.contents(tabview)).getOr([]);\n          },\n          showTab: (section, tabKey) => {\n            const getTabIfNotActive = (tabbar) => {\n              const candidates = Highlighting.getCandidates(tabbar);\n              const optTab = find$5(candidates, (c2) => Representing.getValue(c2) === tabKey);\n              return optTab.filter((tab) => !Highlighting.isHighlighted(tabbar, tab));\n            };\n            changeTabBy(section, getTabIfNotActive);\n          }\n        }\n      };\n    };\n    const TabSection = composite({\n      name: \"TabSection\",\n      configFields: schema(),\n      partFields: parts(),\n      factory,\n      apis: {\n        getViewItems: (apis, component) => apis.getViewItems(component),\n        showTab: (apis, component, tabKey) => {\n          apis.showTab(component, tabKey);\n        }\n      }\n    });\n    const measureHeights = (allTabs, tabview, tabviewComp) => map$2(allTabs, (_tab, i3) => {\n      Replacing.set(tabviewComp, allTabs[i3].view());\n      const rect2 = tabview.dom.getBoundingClientRect();\n      Replacing.set(tabviewComp, []);\n      return rect2.height;\n    });\n    const getMaxHeight = (heights) => head(sort(heights, (a2, b3) => {\n      if (a2 > b3) {\n        return -1;\n      } else if (a2 < b3) {\n        return 1;\n      } else {\n        return 0;\n      }\n    }));\n    const getMaxTabviewHeight = (dialog, tabview, tablist) => {\n      const documentElement$1 = documentElement(dialog).dom;\n      const rootElm = ancestor(dialog, \".tox-dialog-wrap\").getOr(dialog);\n      const isFixed = get$e(rootElm, \"position\") === \"fixed\";\n      let maxHeight;\n      if (isFixed) {\n        maxHeight = Math.max(documentElement$1.clientHeight, window.innerHeight);\n      } else {\n        maxHeight = Math.max(documentElement$1.offsetHeight, documentElement$1.scrollHeight);\n      }\n      const tabviewHeight = get$d(tabview);\n      const isTabListBeside = tabview.dom.offsetLeft >= tablist.dom.offsetLeft + get$c(tablist);\n      const currentTabHeight = isTabListBeside ? Math.max(get$d(tablist), tabviewHeight) : tabviewHeight;\n      const dialogTopMargin = parseInt(get$e(dialog, \"margin-top\"), 10) || 0;\n      const dialogBottomMargin = parseInt(get$e(dialog, \"margin-bottom\"), 10) || 0;\n      const dialogHeight = get$d(dialog) + dialogTopMargin + dialogBottomMargin;\n      const chromeHeight = dialogHeight - currentTabHeight;\n      return maxHeight - chromeHeight;\n    };\n    const showTab = (allTabs, comp) => {\n      head(allTabs).each((tab) => TabSection.showTab(comp, tab.value));\n    };\n    const setTabviewHeight = (tabview, height2) => {\n      set$8(tabview, \"height\", height2 + \"px\");\n      set$8(tabview, \"flex-basis\", height2 + \"px\");\n    };\n    const updateTabviewHeight = (dialogBody, tabview, maxTabHeight) => {\n      ancestor(dialogBody, '[role=\"dialog\"]').each((dialog) => {\n        descendant(dialog, '[role=\"tablist\"]').each((tablist) => {\n          maxTabHeight.get().map((height2) => {\n            set$8(tabview, \"height\", \"0\");\n            set$8(tabview, \"flex-basis\", \"0\");\n            return Math.min(height2, getMaxTabviewHeight(dialog, tabview, tablist));\n          }).each((height2) => {\n            setTabviewHeight(tabview, height2);\n          });\n        });\n      });\n    };\n    const getTabview = (dialog) => descendant(dialog, '[role=\"tabpanel\"]');\n    const setMode = (allTabs) => {\n      const smartTabHeight = (() => {\n        const maxTabHeight = value$2();\n        const extraEvents = [\n          runOnAttached((comp) => {\n            const dialog = comp.element;\n            getTabview(dialog).each((tabview) => {\n              set$8(tabview, \"visibility\", \"hidden\");\n              comp.getSystem().getByDom(tabview).toOptional().each((tabviewComp) => {\n                const heights = measureHeights(allTabs, tabview, tabviewComp);\n                const maxTabHeightOpt = getMaxHeight(heights);\n                maxTabHeightOpt.fold(maxTabHeight.clear, maxTabHeight.set);\n              });\n              updateTabviewHeight(dialog, tabview, maxTabHeight);\n              remove$6(tabview, \"visibility\");\n              showTab(allTabs, comp);\n              requestAnimationFrame(() => {\n                updateTabviewHeight(dialog, tabview, maxTabHeight);\n              });\n            });\n          }),\n          run$1(windowResize(), (comp) => {\n            const dialog = comp.element;\n            getTabview(dialog).each((tabview) => {\n              updateTabviewHeight(dialog, tabview, maxTabHeight);\n            });\n          }),\n          run$1(formResizeEvent, (comp, _se) => {\n            const dialog = comp.element;\n            getTabview(dialog).each((tabview) => {\n              const oldFocus = active$1(getRootNode(tabview));\n              set$8(tabview, \"visibility\", \"hidden\");\n              const oldHeight = getRaw(tabview, \"height\").map((h2) => parseInt(h2, 10));\n              remove$6(tabview, \"height\");\n              remove$6(tabview, \"flex-basis\");\n              const newHeight = tabview.dom.getBoundingClientRect().height;\n              const hasGrown2 = oldHeight.forall((h2) => newHeight > h2);\n              if (hasGrown2) {\n                maxTabHeight.set(newHeight);\n                updateTabviewHeight(dialog, tabview, maxTabHeight);\n              } else {\n                oldHeight.each((h2) => {\n                  setTabviewHeight(tabview, h2);\n                });\n              }\n              remove$6(tabview, \"visibility\");\n              oldFocus.each(focus$3);\n            });\n          })\n        ];\n        const selectFirst = false;\n        return {\n          extraEvents,\n          selectFirst\n        };\n      })();\n      const naiveTabHeight = /* @__PURE__ */ (() => {\n        const extraEvents = [];\n        const selectFirst = true;\n        return {\n          extraEvents,\n          selectFirst\n        };\n      })();\n      return {\n        smartTabHeight,\n        naiveTabHeight\n      };\n    };\n    const SendDataToSectionChannel = \"send-data-to-section\";\n    const SendDataToViewChannel = \"send-data-to-view\";\n    const renderTabPanel = (spec, dialogData, backstage) => {\n      const storedValue = Cell({});\n      const updateDataWithForm = (form) => {\n        const formData = Representing.getValue(form);\n        const validData = toValidValues(formData).getOr({});\n        const currentData = storedValue.get();\n        const newData = deepMerge(currentData, validData);\n        storedValue.set(newData);\n      };\n      const setDataOnForm = (form) => {\n        const tabData = storedValue.get();\n        Representing.setValue(form, tabData);\n      };\n      const oldTab = Cell(null);\n      const allTabs = map$2(spec.tabs, (tab) => {\n        return {\n          value: tab.name,\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-dialog__body-nav-item\"]\n          },\n          components: [text$1(backstage.shared.providers.translate(tab.title))],\n          view: () => {\n            return [Form.sketch((parts2) => ({\n              dom: {\n                tag: \"div\",\n                classes: [\"tox-form\"]\n              },\n              components: map$2(tab.items, (item2) => interpretInForm(parts2, item2, dialogData, backstage)),\n              formBehaviours: derive$1([\n                Keying.config({\n                  mode: \"acyclic\",\n                  useTabstopAt: not(isPseudoStop)\n                }),\n                config2(\"TabView.form.events\", [\n                  runOnAttached(setDataOnForm),\n                  runOnDetached(updateDataWithForm)\n                ]),\n                Receiving.config({\n                  channels: wrapAll([\n                    {\n                      key: SendDataToSectionChannel,\n                      value: { onReceive: updateDataWithForm }\n                    },\n                    {\n                      key: SendDataToViewChannel,\n                      value: { onReceive: setDataOnForm }\n                    }\n                  ])\n                })\n              ])\n            }))];\n          }\n        };\n      });\n      const tabMode = setMode(allTabs).smartTabHeight;\n      return TabSection.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-dialog__body\"]\n        },\n        onChangeTab: (section, button2, _viewItems) => {\n          const name2 = Representing.getValue(button2);\n          emitWith(section, formTabChangeEvent, {\n            name: name2,\n            oldName: oldTab.get()\n          });\n          oldTab.set(name2);\n        },\n        tabs: allTabs,\n        components: [\n          TabSection.parts.tabbar({\n            dom: {\n              tag: \"div\",\n              classes: [\"tox-dialog__body-nav\"]\n            },\n            components: [Tabbar.parts.tabs({})],\n            markers: {\n              tabClass: \"tox-tab\",\n              selectedClass: \"tox-dialog__body-nav-item--active\"\n            },\n            tabbarBehaviours: derive$1([Tabstopping.config({})])\n          }),\n          TabSection.parts.tabview({\n            dom: {\n              tag: \"div\",\n              classes: [\"tox-dialog__body-content\"]\n            }\n          })\n        ],\n        selectFirst: tabMode.selectFirst,\n        tabSectionBehaviours: derive$1([\n          config2(\"tabpanel\", tabMode.extraEvents),\n          Keying.config({ mode: \"acyclic\" }),\n          Composing.config({ find: (comp) => head(TabSection.getViewItems(comp)) }),\n          RepresentingConfigs.withComp(Optional.none(), (tsection) => {\n            tsection.getSystem().broadcastOn([SendDataToSectionChannel], {});\n            return storedValue.get();\n          }, (tsection, value2) => {\n            storedValue.set(value2);\n            tsection.getSystem().broadcastOn([SendDataToViewChannel], {});\n          })\n        ])\n      });\n    };\n    const dialogChannel = generate$6(\"update-dialog\");\n    const titleChannel = generate$6(\"update-title\");\n    const bodyChannel = generate$6(\"update-body\");\n    const footerChannel = generate$6(\"update-footer\");\n    const bodySendMessageChannel = generate$6(\"body-send-message\");\n    const renderBody = (spec, dialogId, contentId, backstage, ariaAttrs) => {\n      const renderComponents2 = (incoming) => {\n        const body2 = incoming.body;\n        switch (body2.type) {\n          case \"tabpanel\": {\n            return [renderTabPanel(body2, incoming.initialData, backstage)];\n          }\n          default: {\n            return [renderBodyPanel(body2, incoming.initialData, backstage)];\n          }\n        }\n      };\n      const updateState = (_comp, incoming) => Optional.some({ isTabPanel: () => incoming.body.type === \"tabpanel\" });\n      const ariaAttributes = { \"aria-live\": \"polite\" };\n      return {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-dialog__content-js\"],\n          attributes: {\n            ...contentId.map((x2) => ({ id: x2 })).getOr({}),\n            ...ariaAttrs ? ariaAttributes : {}\n          }\n        },\n        components: [],\n        behaviours: derive$1([\n          ComposingConfigs.childAt(0),\n          Reflecting.config({\n            channel: `${bodyChannel}-${dialogId}`,\n            updateState,\n            renderComponents: renderComponents2,\n            initialData: spec\n          })\n        ])\n      };\n    };\n    const renderInlineBody = (spec, dialogId, contentId, backstage, ariaAttrs) => renderBody(spec, dialogId, Optional.some(contentId), backstage, ariaAttrs);\n    const renderModalBody = (spec, dialogId, backstage) => {\n      const bodySpec = renderBody(spec, dialogId, Optional.none(), backstage, false);\n      return ModalDialog.parts.body(bodySpec);\n    };\n    const renderIframeBody = (spec) => {\n      const bodySpec = {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-dialog__content-js\"]\n        },\n        components: [{\n          dom: {\n            tag: \"div\",\n            classes: [\"tox-dialog__body-iframe\"]\n          },\n          components: [craft({\n            dom: {\n              tag: \"iframe\",\n              attributes: { src: spec.url }\n            },\n            behaviours: derive$1([\n              Tabstopping.config({}),\n              Focusing.config({})\n            ])\n          })]\n        }],\n        behaviours: derive$1([Keying.config({\n          mode: \"acyclic\",\n          useTabstopAt: not(isPseudoStop)\n        })])\n      };\n      return ModalDialog.parts.body(bodySpec);\n    };\n    const isTouch = global$5.deviceType.isTouch();\n    const hiddenHeader = (title2, close2) => ({\n      dom: {\n        tag: \"div\",\n        styles: { display: \"none\" },\n        classes: [\"tox-dialog__header\"]\n      },\n      components: [\n        title2,\n        close2\n      ]\n    });\n    const pClose = (onClose, providersBackstage) => ModalDialog.parts.close(Button.sketch({\n      dom: {\n        tag: \"button\",\n        classes: [\n          \"tox-button\",\n          \"tox-button--icon\",\n          \"tox-button--naked\"\n        ],\n        attributes: {\n          \"type\": \"button\",\n          \"aria-label\": providersBackstage.translate(\"Close\")\n        }\n      },\n      action: onClose,\n      buttonBehaviours: derive$1([Tabstopping.config({})])\n    }));\n    const pUntitled = () => ModalDialog.parts.title({\n      dom: {\n        tag: \"div\",\n        classes: [\"tox-dialog__title\"],\n        innerHtml: \"\",\n        styles: { display: \"none\" }\n      }\n    });\n    const pBodyMessage = (message, providersBackstage) => ModalDialog.parts.body({\n      dom: {\n        tag: \"div\",\n        classes: [\"tox-dialog__body\"]\n      },\n      components: [{\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-dialog__body-content\"]\n        },\n        components: [{ dom: fromHtml(`<p>${providersBackstage.translate(message)}</p>`) }]\n      }]\n    });\n    const pFooter = (buttons) => ModalDialog.parts.footer({\n      dom: {\n        tag: \"div\",\n        classes: [\"tox-dialog__footer\"]\n      },\n      components: buttons\n    });\n    const pFooterGroup = (startButtons, endButtons) => [\n      Container2.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-dialog__footer-start\"]\n        },\n        components: startButtons\n      }),\n      Container2.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-dialog__footer-end\"]\n        },\n        components: endButtons\n      })\n    ];\n    const renderDialog$1 = (spec) => {\n      const dialogClass = \"tox-dialog\";\n      const blockerClass = dialogClass + \"-wrap\";\n      const blockerBackdropClass = blockerClass + \"__backdrop\";\n      const scrollLockClass = dialogClass + \"__disable-scroll\";\n      return ModalDialog.sketch({\n        lazySink: spec.lazySink,\n        onEscape: (comp) => {\n          spec.onEscape(comp);\n          return Optional.some(true);\n        },\n        useTabstopAt: (elem) => !isPseudoStop(elem),\n        dom: {\n          tag: \"div\",\n          classes: [dialogClass].concat(spec.extraClasses),\n          styles: {\n            position: \"relative\",\n            ...spec.extraStyles\n          }\n        },\n        components: [\n          spec.header,\n          spec.body,\n          ...spec.footer.toArray()\n        ],\n        parts: {\n          blocker: {\n            dom: fromHtml(`<div class=\"${blockerClass}\"></div>`),\n            components: [{\n              dom: {\n                tag: \"div\",\n                classes: isTouch ? [\n                  blockerBackdropClass,\n                  blockerBackdropClass + \"--opaque\"\n                ] : [blockerBackdropClass]\n              }\n            }]\n          }\n        },\n        dragBlockClass: blockerClass,\n        modalBehaviours: derive$1([\n          Focusing.config({}),\n          config2(\"dialog-events\", spec.dialogEvents.concat([runOnSource(focusin(), (comp, _se) => {\n            Keying.focusIn(comp);\n          })])),\n          config2(\"scroll-lock\", [\n            runOnAttached(() => {\n              add$2(body(), scrollLockClass);\n            }),\n            runOnDetached(() => {\n              remove$2(body(), scrollLockClass);\n            })\n          ]),\n          ...spec.extraBehaviours\n        ]),\n        eventOrder: {\n          [execute$5()]: [\"dialog-events\"],\n          [attachedToDom()]: [\n            \"scroll-lock\",\n            \"dialog-events\",\n            \"alloy.base.behaviour\"\n          ],\n          [detachedFromDom()]: [\n            \"alloy.base.behaviour\",\n            \"dialog-events\",\n            \"scroll-lock\"\n          ],\n          ...spec.eventOrder\n        }\n      });\n    };\n    const renderClose = (providersBackstage) => Button.sketch({\n      dom: {\n        tag: \"button\",\n        classes: [\n          \"tox-button\",\n          \"tox-button--icon\",\n          \"tox-button--naked\"\n        ],\n        attributes: {\n          \"type\": \"button\",\n          \"aria-label\": providersBackstage.translate(\"Close\"),\n          \"title\": providersBackstage.translate(\"Close\")\n        }\n      },\n      components: [render$3(\"close\", {\n        tag: \"div\",\n        classes: [\"tox-icon\"]\n      }, providersBackstage.icons)],\n      action: (comp) => {\n        emit(comp, formCancelEvent);\n      }\n    });\n    const renderTitle = (spec, dialogId, titleId, providersBackstage) => {\n      const renderComponents2 = (data) => [text$1(providersBackstage.translate(data.title))];\n      return {\n        dom: {\n          tag: \"div\",\n          classes: [\"tox-dialog__title\"],\n          attributes: { ...titleId.map((x2) => ({ id: x2 })).getOr({}) }\n        },\n        components: [],\n        behaviours: derive$1([Reflecting.config({\n          channel: `${titleChannel}-${dialogId}`,\n          initialData: spec,\n          renderComponents: renderComponents2\n        })])\n      };\n    };\n    const renderDragHandle = () => ({ dom: fromHtml('<div class=\"tox-dialog__draghandle\"></div>') });\n    const renderInlineHeader = (spec, dialogId, titleId, providersBackstage) => Container2.sketch({\n      dom: fromHtml('<div class=\"tox-dialog__header\"></div>'),\n      components: [\n        renderTitle(spec, dialogId, Optional.some(titleId), providersBackstage),\n        renderDragHandle(),\n        renderClose(providersBackstage)\n      ],\n      containerBehaviours: derive$1([Dragging.config({\n        mode: \"mouse\",\n        blockerClass: \"blocker\",\n        getTarget: (handle2) => {\n          return closest$1(handle2, '[role=\"dialog\"]').getOrDie();\n        },\n        snaps: {\n          getSnapPoints: () => [],\n          leftAttr: \"data-drag-left\",\n          topAttr: \"data-drag-top\"\n        }\n      })])\n    });\n    const renderModalHeader = (spec, dialogId, providersBackstage) => {\n      const pTitle = ModalDialog.parts.title(renderTitle(spec, dialogId, Optional.none(), providersBackstage));\n      const pHandle = ModalDialog.parts.draghandle(renderDragHandle());\n      const pClose2 = ModalDialog.parts.close(renderClose(providersBackstage));\n      const components2 = [pTitle].concat(spec.draggable ? [pHandle] : []).concat([pClose2]);\n      return Container2.sketch({\n        dom: fromHtml('<div class=\"tox-dialog__header\"></div>'),\n        components: components2\n      });\n    };\n    const getHeader = (title2, dialogId, backstage) => renderModalHeader({\n      title: backstage.shared.providers.translate(title2),\n      draggable: backstage.dialog.isDraggableModal()\n    }, dialogId, backstage.shared.providers);\n    const getBusySpec = (message, bs, providers) => ({\n      dom: {\n        tag: \"div\",\n        classes: [\"tox-dialog__busy-spinner\"],\n        attributes: { \"aria-label\": providers.translate(message) },\n        styles: {\n          left: \"0px\",\n          right: \"0px\",\n          bottom: \"0px\",\n          top: \"0px\",\n          position: \"absolute\"\n        }\n      },\n      behaviours: bs,\n      components: [{ dom: fromHtml('<div class=\"tox-spinner\"><div></div><div></div><div></div></div>') }]\n    });\n    const getEventExtras = (lazyDialog, providers, extra) => ({\n      onClose: () => extra.closeWindow(),\n      onBlock: (blockEvent) => {\n        ModalDialog.setBusy(lazyDialog(), (_comp, bs) => getBusySpec(blockEvent.message, bs, providers));\n      },\n      onUnblock: () => {\n        ModalDialog.setIdle(lazyDialog());\n      }\n    });\n    const renderModalDialog = (spec, initialData, dialogEvents, backstage) => {\n      const updateState = (_comp, incoming) => Optional.some(incoming);\n      return build$1(renderDialog$1({\n        ...spec,\n        lazySink: backstage.shared.getSink,\n        extraBehaviours: [\n          Reflecting.config({\n            channel: `${dialogChannel}-${spec.id}`,\n            updateState,\n            initialData\n          }),\n          RepresentingConfigs.memory({}),\n          ...spec.extraBehaviours\n        ],\n        onEscape: (comp) => {\n          emit(comp, formCancelEvent);\n        },\n        dialogEvents,\n        eventOrder: {\n          [receive()]: [\n            Reflecting.name(),\n            Receiving.name()\n          ],\n          [attachedToDom()]: [\n            \"scroll-lock\",\n            Reflecting.name(),\n            \"messages\",\n            \"dialog-events\",\n            \"alloy.base.behaviour\"\n          ],\n          [detachedFromDom()]: [\n            \"alloy.base.behaviour\",\n            \"dialog-events\",\n            \"messages\",\n            Reflecting.name(),\n            \"scroll-lock\"\n          ]\n        }\n      }));\n    };\n    const mapMenuButtons = (buttons) => {\n      const mapItems = (button2) => {\n        const items = map$2(button2.items, (item2) => {\n          const cell = Cell(false);\n          return {\n            ...item2,\n            storage: cell\n          };\n        });\n        return {\n          ...button2,\n          items\n        };\n      };\n      return map$2(buttons, (button2) => {\n        if (button2.type === \"menu\") {\n          return mapItems(button2);\n        }\n        return button2;\n      });\n    };\n    const extractCellsToObject = (buttons) => foldl(buttons, (acc, button2) => {\n      if (button2.type === \"menu\") {\n        const menuButton = button2;\n        return foldl(menuButton.items, (innerAcc, item2) => {\n          innerAcc[item2.name] = item2.storage;\n          return innerAcc;\n        }, acc);\n      }\n      return acc;\n    }, {});\n    const initCommonEvents = (fireApiEvent, extras) => [\n      runWithTarget(focusin(), onFocus),\n      fireApiEvent(formCloseEvent, (_api, spec) => {\n        extras.onClose();\n        spec.onClose();\n      }),\n      fireApiEvent(formCancelEvent, (api2, spec, _event, self3) => {\n        spec.onCancel(api2);\n        emit(self3, formCloseEvent);\n      }),\n      run$1(formUnblockEvent, (_c, _se) => extras.onUnblock()),\n      run$1(formBlockEvent, (_c, se) => extras.onBlock(se.event))\n    ];\n    const initUrlDialog = (getInstanceApi, extras) => {\n      const fireApiEvent = (eventName, f2) => run$1(eventName, (c2, se) => {\n        withSpec(c2, (spec, _c) => {\n          f2(getInstanceApi(), spec, se.event, c2);\n        });\n      });\n      const withSpec = (c2, f2) => {\n        Reflecting.getState(c2).get().each((currentDialog) => {\n          f2(currentDialog, c2);\n        });\n      };\n      return [\n        ...initCommonEvents(fireApiEvent, extras),\n        fireApiEvent(formActionEvent, (api2, spec, event) => {\n          spec.onAction(api2, { name: event.name });\n        })\n      ];\n    };\n    const initDialog = (getInstanceApi, extras, getSink2) => {\n      const fireApiEvent = (eventName, f2) => run$1(eventName, (c2, se) => {\n        withSpec(c2, (spec, _c) => {\n          f2(getInstanceApi(), spec, se.event, c2);\n        });\n      });\n      const withSpec = (c2, f2) => {\n        Reflecting.getState(c2).get().each((currentDialogInit) => {\n          f2(currentDialogInit.internalDialog, c2);\n        });\n      };\n      return [\n        ...initCommonEvents(fireApiEvent, extras),\n        fireApiEvent(formSubmitEvent, (api2, spec) => spec.onSubmit(api2)),\n        fireApiEvent(formChangeEvent, (api2, spec, event) => {\n          spec.onChange(api2, { name: event.name });\n        }),\n        fireApiEvent(formActionEvent, (api2, spec, event, component) => {\n          const focusIn2 = () => Keying.focusIn(component);\n          const isDisabled2 = (focused) => has$1(focused, \"disabled\") || getOpt(focused, \"aria-disabled\").exists((val) => val === \"true\");\n          const rootNode = getRootNode(component.element);\n          const current = active$1(rootNode);\n          spec.onAction(api2, {\n            name: event.name,\n            value: event.value\n          });\n          active$1(rootNode).fold(focusIn2, (focused) => {\n            if (isDisabled2(focused)) {\n              focusIn2();\n            } else if (current.exists((cur) => contains2(focused, cur) && isDisabled2(cur))) {\n              focusIn2();\n            } else {\n              getSink2().toOptional().filter((sink) => !contains2(sink.element, focused)).each(focusIn2);\n            }\n          });\n        }),\n        fireApiEvent(formTabChangeEvent, (api2, spec, event) => {\n          spec.onTabChange(api2, {\n            newTabName: event.name,\n            oldTabName: event.oldName\n          });\n        }),\n        runOnDetached((component) => {\n          const api2 = getInstanceApi();\n          Representing.setValue(component, api2.getData());\n        })\n      ];\n    };\n    const SilverDialogEvents = {\n      initUrlDialog,\n      initDialog\n    };\n    const makeButton = (button2, backstage) => renderFooterButton(button2, button2.type, backstage);\n    const lookup = (compInSystem, footerButtons, buttonName) => find$5(footerButtons, (button2) => button2.name === buttonName).bind((memButton) => memButton.memento.getOpt(compInSystem));\n    const renderComponents = (_data, state) => {\n      const footerButtons = state.map((s2) => s2.footerButtons).getOr([]);\n      const buttonGroups = partition$3(footerButtons, (button2) => button2.align === \"start\");\n      const makeGroup = (edge2, buttons) => Container2.sketch({\n        dom: {\n          tag: \"div\",\n          classes: [`tox-dialog__footer-${edge2}`]\n        },\n        components: map$2(buttons, (button2) => button2.memento.asSpec())\n      });\n      const startButtons = makeGroup(\"start\", buttonGroups.pass);\n      const endButtons = makeGroup(\"end\", buttonGroups.fail);\n      return [\n        startButtons,\n        endButtons\n      ];\n    };\n    const renderFooter = (initSpec, dialogId, backstage) => {\n      const updateState = (comp, data) => {\n        const footerButtons = map$2(data.buttons, (button2) => {\n          const memButton = record(makeButton(button2, backstage));\n          return {\n            name: button2.name,\n            align: button2.align,\n            memento: memButton\n          };\n        });\n        const lookupByName = (buttonName) => lookup(comp, footerButtons, buttonName);\n        return Optional.some({\n          lookupByName,\n          footerButtons\n        });\n      };\n      return {\n        dom: fromHtml('<div class=\"tox-dialog__footer\"></div>'),\n        components: [],\n        behaviours: derive$1([Reflecting.config({\n          channel: `${footerChannel}-${dialogId}`,\n          initialData: initSpec,\n          updateState,\n          renderComponents\n        })])\n      };\n    };\n    const renderInlineFooter = (initSpec, dialogId, backstage) => renderFooter(initSpec, dialogId, backstage);\n    const renderModalFooter = (initSpec, dialogId, backstage) => ModalDialog.parts.footer(renderFooter(initSpec, dialogId, backstage));\n    const getCompByName = (access, name2) => {\n      const root2 = access.getRoot();\n      if (root2.getSystem().isConnected()) {\n        const form = Composing.getCurrent(access.getFormWrapper()).getOr(access.getFormWrapper());\n        return Form.getField(form, name2).orThunk(() => {\n          const footer = access.getFooter();\n          const footerState = Reflecting.getState(footer).get();\n          return footerState.bind((f2) => f2.lookupByName(name2));\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const validateData$1 = (access, data) => {\n      const root2 = access.getRoot();\n      return Reflecting.getState(root2).get().map((dialogState) => getOrDie(asRaw(\"data\", dialogState.dataValidator, data))).getOr(data);\n    };\n    const getDialogApi = (access, doRedial, menuItemStates) => {\n      const withRoot = (f2) => {\n        const root2 = access.getRoot();\n        if (root2.getSystem().isConnected()) {\n          f2(root2);\n        }\n      };\n      const getData2 = () => {\n        const root2 = access.getRoot();\n        const valueComp = root2.getSystem().isConnected() ? access.getFormWrapper() : root2;\n        const representedValues = Representing.getValue(valueComp);\n        const menuItemCurrentState = map$1(menuItemStates, (cell) => cell.get());\n        return {\n          ...representedValues,\n          ...menuItemCurrentState\n        };\n      };\n      const setData = (newData) => {\n        withRoot((_2) => {\n          const prevData = instanceApi.getData();\n          const mergedData = deepMerge(prevData, newData);\n          const newInternalData = validateData$1(access, mergedData);\n          const form = access.getFormWrapper();\n          Representing.setValue(form, newInternalData);\n          each(menuItemStates, (v2, k3) => {\n            if (has$2(mergedData, k3)) {\n              v2.set(mergedData[k3]);\n            }\n          });\n        });\n      };\n      const setEnabled = (name2, state) => {\n        getCompByName(access, name2).each(state ? Disabling.enable : Disabling.disable);\n      };\n      const focus2 = (name2) => {\n        getCompByName(access, name2).each(Focusing.focus);\n      };\n      const block3 = (message) => {\n        if (!isString2(message)) {\n          throw new Error(\"The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument\");\n        }\n        withRoot((root2) => {\n          emitWith(root2, formBlockEvent, { message });\n        });\n      };\n      const unblock2 = () => {\n        withRoot((root2) => {\n          emit(root2, formUnblockEvent);\n        });\n      };\n      const showTab2 = (name2) => {\n        withRoot((_2) => {\n          const body2 = access.getBody();\n          const bodyState = Reflecting.getState(body2);\n          if (bodyState.get().exists((b3) => b3.isTabPanel())) {\n            Composing.getCurrent(body2).each((tabSection) => {\n              TabSection.showTab(tabSection, name2);\n            });\n          }\n        });\n      };\n      const redial = (d2) => {\n        withRoot((root2) => {\n          const id = access.getId();\n          const dialogInit = doRedial(d2);\n          root2.getSystem().broadcastOn([`${dialogChannel}-${id}`], dialogInit);\n          root2.getSystem().broadcastOn([`${titleChannel}-${id}`], dialogInit.internalDialog);\n          root2.getSystem().broadcastOn([`${bodyChannel}-${id}`], dialogInit.internalDialog);\n          root2.getSystem().broadcastOn([`${footerChannel}-${id}`], dialogInit.internalDialog);\n          instanceApi.setData(dialogInit.initialData);\n        });\n      };\n      const close2 = () => {\n        withRoot((root2) => {\n          emit(root2, formCloseEvent);\n        });\n      };\n      const instanceApi = {\n        getData: getData2,\n        setData,\n        setEnabled,\n        focus: focus2,\n        block: block3,\n        unblock: unblock2,\n        showTab: showTab2,\n        redial,\n        close: close2\n      };\n      return instanceApi;\n    };\n    const getDialogSizeClasses = (size) => {\n      switch (size) {\n        case \"large\":\n          return [\"tox-dialog--width-lg\"];\n        case \"medium\":\n          return [\"tox-dialog--width-md\"];\n        default:\n          return [];\n      }\n    };\n    const renderDialog = (dialogInit, extra, backstage) => {\n      const dialogId = generate$6(\"dialog\");\n      const internalDialog = dialogInit.internalDialog;\n      const header = getHeader(internalDialog.title, dialogId, backstage);\n      const body2 = renderModalBody({\n        body: internalDialog.body,\n        initialData: internalDialog.initialData\n      }, dialogId, backstage);\n      const storagedMenuButtons = mapMenuButtons(internalDialog.buttons);\n      const objOfCells = extractCellsToObject(storagedMenuButtons);\n      const footer = renderModalFooter({ buttons: storagedMenuButtons }, dialogId, backstage);\n      const dialogEvents = SilverDialogEvents.initDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra), backstage.shared.getSink);\n      const dialogSize = getDialogSizeClasses(internalDialog.size);\n      const spec = {\n        id: dialogId,\n        header,\n        body: body2,\n        footer: Optional.some(footer),\n        extraClasses: dialogSize,\n        extraBehaviours: [],\n        extraStyles: {}\n      };\n      const dialog = renderModalDialog(spec, dialogInit, dialogEvents, backstage);\n      const modalAccess = (() => {\n        const getForm = () => {\n          const outerForm = ModalDialog.getBody(dialog);\n          return Composing.getCurrent(outerForm).getOr(outerForm);\n        };\n        return {\n          getId: constant$1(dialogId),\n          getRoot: constant$1(dialog),\n          getBody: () => ModalDialog.getBody(dialog),\n          getFooter: () => ModalDialog.getFooter(dialog),\n          getFormWrapper: getForm\n        };\n      })();\n      const instanceApi = getDialogApi(modalAccess, extra.redial, objOfCells);\n      return {\n        dialog,\n        instanceApi\n      };\n    };\n    const renderInlineDialog = (dialogInit, extra, backstage, ariaAttrs) => {\n      const dialogId = generate$6(\"dialog\");\n      const dialogLabelId = generate$6(\"dialog-label\");\n      const dialogContentId = generate$6(\"dialog-content\");\n      const internalDialog = dialogInit.internalDialog;\n      const updateState = (_comp, incoming) => Optional.some(incoming);\n      const memHeader = record(renderInlineHeader({\n        title: internalDialog.title,\n        draggable: true\n      }, dialogId, dialogLabelId, backstage.shared.providers));\n      const memBody = record(renderInlineBody({\n        body: internalDialog.body,\n        initialData: internalDialog.initialData\n      }, dialogId, dialogContentId, backstage, ariaAttrs));\n      const storagedMenuButtons = mapMenuButtons(internalDialog.buttons);\n      const objOfCells = extractCellsToObject(storagedMenuButtons);\n      const memFooter = record(renderInlineFooter({ buttons: storagedMenuButtons }, dialogId, backstage));\n      const dialogEvents = SilverDialogEvents.initDialog(() => instanceApi, {\n        onBlock: (event) => {\n          Blocking.block(dialog, (_comp, bs) => getBusySpec(event.message, bs, backstage.shared.providers));\n        },\n        onUnblock: () => {\n          Blocking.unblock(dialog);\n        },\n        onClose: () => extra.closeWindow()\n      }, backstage.shared.getSink);\n      const dialog = build$1({\n        dom: {\n          tag: \"div\",\n          classes: [\n            \"tox-dialog\",\n            \"tox-dialog-inline\"\n          ],\n          attributes: {\n            role: \"dialog\",\n            [\"aria-labelledby\"]: dialogLabelId,\n            [\"aria-describedby\"]: dialogContentId\n          }\n        },\n        eventOrder: {\n          [receive()]: [\n            Reflecting.name(),\n            Receiving.name()\n          ],\n          [execute$5()]: [\"execute-on-form\"],\n          [attachedToDom()]: [\n            \"reflecting\",\n            \"execute-on-form\"\n          ]\n        },\n        behaviours: derive$1([\n          Keying.config({\n            mode: \"cyclic\",\n            onEscape: (c2) => {\n              emit(c2, formCloseEvent);\n              return Optional.some(true);\n            },\n            useTabstopAt: (elem) => !isPseudoStop(elem) && (name$3(elem) !== \"button\" || get$f(elem, \"disabled\") !== \"disabled\")\n          }),\n          Reflecting.config({\n            channel: `${dialogChannel}-${dialogId}`,\n            updateState,\n            initialData: dialogInit\n          }),\n          Focusing.config({}),\n          config2(\"execute-on-form\", dialogEvents.concat([runOnSource(focusin(), (comp, _se) => {\n            Keying.focusIn(comp);\n          })])),\n          Blocking.config({ getRoot: () => Optional.some(dialog) }),\n          Replacing.config({}),\n          RepresentingConfigs.memory({})\n        ]),\n        components: [\n          memHeader.asSpec(),\n          memBody.asSpec(),\n          memFooter.asSpec()\n        ]\n      });\n      const instanceApi = getDialogApi({\n        getId: constant$1(dialogId),\n        getRoot: constant$1(dialog),\n        getFooter: () => memFooter.get(dialog),\n        getBody: () => memBody.get(dialog),\n        getFormWrapper: () => {\n          const body2 = memBody.get(dialog);\n          return Composing.getCurrent(body2).getOr(body2);\n        }\n      }, extra.redial, objOfCells);\n      return {\n        dialog,\n        instanceApi\n      };\n    };\n    var global2 = tinymce.util.Tools.resolve(\"tinymce.util.URI\");\n    const getUrlDialogApi = (root2) => {\n      const withRoot = (f2) => {\n        if (root2.getSystem().isConnected()) {\n          f2(root2);\n        }\n      };\n      const block3 = (message) => {\n        if (!isString2(message)) {\n          throw new Error(\"The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument\");\n        }\n        withRoot((root3) => {\n          emitWith(root3, formBlockEvent, { message });\n        });\n      };\n      const unblock2 = () => {\n        withRoot((root3) => {\n          emit(root3, formUnblockEvent);\n        });\n      };\n      const close2 = () => {\n        withRoot((root3) => {\n          emit(root3, formCloseEvent);\n        });\n      };\n      const sendMessage = (data) => {\n        withRoot((root3) => {\n          root3.getSystem().broadcastOn([bodySendMessageChannel], data);\n        });\n      };\n      return {\n        block: block3,\n        unblock: unblock2,\n        close: close2,\n        sendMessage\n      };\n    };\n    const SUPPORTED_MESSAGE_ACTIONS = [\n      \"insertContent\",\n      \"setContent\",\n      \"execCommand\",\n      \"close\",\n      \"block\",\n      \"unblock\"\n    ];\n    const isSupportedMessage = (data) => isObject2(data) && SUPPORTED_MESSAGE_ACTIONS.indexOf(data.mceAction) !== -1;\n    const isCustomMessage = (data) => !isSupportedMessage(data) && isObject2(data) && has$2(data, \"mceAction\");\n    const handleMessage = (editor, api2, data) => {\n      switch (data.mceAction) {\n        case \"insertContent\":\n          editor.insertContent(data.content);\n          break;\n        case \"setContent\":\n          editor.setContent(data.content);\n          break;\n        case \"execCommand\":\n          const ui = isBoolean2(data.ui) ? data.ui : false;\n          editor.execCommand(data.cmd, ui, data.value);\n          break;\n        case \"close\":\n          api2.close();\n          break;\n        case \"block\":\n          api2.block(data.message);\n          break;\n        case \"unblock\":\n          api2.unblock();\n          break;\n      }\n    };\n    const renderUrlDialog = (internalDialog, extra, editor, backstage) => {\n      const dialogId = generate$6(\"dialog\");\n      const header = getHeader(internalDialog.title, dialogId, backstage);\n      const body2 = renderIframeBody(internalDialog);\n      const footer = internalDialog.buttons.bind((buttons) => {\n        if (buttons.length === 0) {\n          return Optional.none();\n        } else {\n          return Optional.some(renderModalFooter({ buttons }, dialogId, backstage));\n        }\n      });\n      const dialogEvents = SilverDialogEvents.initUrlDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra));\n      const styles = {\n        ...internalDialog.height.fold(() => ({}), (height2) => ({\n          \"height\": height2 + \"px\",\n          \"max-height\": height2 + \"px\"\n        })),\n        ...internalDialog.width.fold(() => ({}), (width2) => ({\n          \"width\": width2 + \"px\",\n          \"max-width\": width2 + \"px\"\n        }))\n      };\n      const classes2 = internalDialog.width.isNone() && internalDialog.height.isNone() ? [\"tox-dialog--width-lg\"] : [];\n      const iframeUri = new global2(internalDialog.url, { base_uri: new global2(window.location.href) });\n      const iframeDomain = `${iframeUri.protocol}://${iframeUri.host}${iframeUri.port ? \":\" + iframeUri.port : \"\"}`;\n      const messageHandlerUnbinder = unbindable();\n      const extraBehaviours = [\n        config2(\"messages\", [\n          runOnAttached(() => {\n            const unbind2 = bind(SugarElement.fromDom(window), \"message\", (e2) => {\n              if (iframeUri.isSameOrigin(new global2(e2.raw.origin))) {\n                const data = e2.raw.data;\n                if (isSupportedMessage(data)) {\n                  handleMessage(editor, instanceApi, data);\n                } else if (isCustomMessage(data)) {\n                  internalDialog.onMessage(instanceApi, data);\n                }\n              }\n            });\n            messageHandlerUnbinder.set(unbind2);\n          }),\n          runOnDetached(messageHandlerUnbinder.clear)\n        ]),\n        Receiving.config({\n          channels: {\n            [bodySendMessageChannel]: {\n              onReceive: (comp, data) => {\n                descendant(comp.element, \"iframe\").each((iframeEle) => {\n                  const iframeWin = iframeEle.dom.contentWindow;\n                  iframeWin.postMessage(data, iframeDomain);\n                });\n              }\n            }\n          }\n        })\n      ];\n      const spec = {\n        id: dialogId,\n        header,\n        body: body2,\n        footer,\n        extraClasses: classes2,\n        extraBehaviours,\n        extraStyles: styles\n      };\n      const dialog = renderModalDialog(spec, internalDialog, dialogEvents, backstage);\n      const instanceApi = getUrlDialogApi(dialog);\n      return {\n        dialog,\n        instanceApi\n      };\n    };\n    const setup$2 = (extras) => {\n      const sharedBackstage = extras.backstage.shared;\n      const open2 = (message, callback) => {\n        const closeDialog = () => {\n          ModalDialog.hide(alertDialog);\n          callback();\n        };\n        const memFooterClose = record(renderFooterButton({\n          name: \"close-alert\",\n          text: \"OK\",\n          primary: true,\n          buttonType: Optional.some(\"primary\"),\n          align: \"end\",\n          enabled: true,\n          icon: Optional.none()\n        }, \"cancel\", extras.backstage));\n        const titleSpec = pUntitled();\n        const closeSpec = pClose(closeDialog, sharedBackstage.providers);\n        const alertDialog = build$1(renderDialog$1({\n          lazySink: () => sharedBackstage.getSink(),\n          header: hiddenHeader(titleSpec, closeSpec),\n          body: pBodyMessage(message, sharedBackstage.providers),\n          footer: Optional.some(pFooter(pFooterGroup([], [memFooterClose.asSpec()]))),\n          onEscape: closeDialog,\n          extraClasses: [\"tox-alert-dialog\"],\n          extraBehaviours: [],\n          extraStyles: {},\n          dialogEvents: [run$1(formCancelEvent, closeDialog)],\n          eventOrder: {}\n        }));\n        ModalDialog.show(alertDialog);\n        const footerCloseButton = memFooterClose.get(alertDialog);\n        Focusing.focus(footerCloseButton);\n      };\n      return { open: open2 };\n    };\n    const setup$1 = (extras) => {\n      const sharedBackstage = extras.backstage.shared;\n      const open2 = (message, callback) => {\n        const closeDialog = (state) => {\n          ModalDialog.hide(confirmDialog);\n          callback(state);\n        };\n        const memFooterYes = record(renderFooterButton({\n          name: \"yes\",\n          text: \"Yes\",\n          primary: true,\n          buttonType: Optional.some(\"primary\"),\n          align: \"end\",\n          enabled: true,\n          icon: Optional.none()\n        }, \"submit\", extras.backstage));\n        const footerNo = renderFooterButton({\n          name: \"no\",\n          text: \"No\",\n          primary: false,\n          buttonType: Optional.some(\"secondary\"),\n          align: \"end\",\n          enabled: true,\n          icon: Optional.none()\n        }, \"cancel\", extras.backstage);\n        const titleSpec = pUntitled();\n        const closeSpec = pClose(() => closeDialog(false), sharedBackstage.providers);\n        const confirmDialog = build$1(renderDialog$1({\n          lazySink: () => sharedBackstage.getSink(),\n          header: hiddenHeader(titleSpec, closeSpec),\n          body: pBodyMessage(message, sharedBackstage.providers),\n          footer: Optional.some(pFooter(pFooterGroup([], [\n            footerNo,\n            memFooterYes.asSpec()\n          ]))),\n          onEscape: () => closeDialog(false),\n          extraClasses: [\"tox-confirm-dialog\"],\n          extraBehaviours: [],\n          extraStyles: {},\n          dialogEvents: [\n            run$1(formCancelEvent, () => closeDialog(false)),\n            run$1(formSubmitEvent, () => closeDialog(true))\n          ],\n          eventOrder: {}\n        }));\n        ModalDialog.show(confirmDialog);\n        const footerYesButton = memFooterYes.get(confirmDialog);\n        Focusing.focus(footerYesButton);\n      };\n      return { open: open2 };\n    };\n    const validateData = (data, validator) => getOrDie(asRaw(\"data\", validator, data));\n    const isAlertOrConfirmDialog = (target) => closest(target, \".tox-alert-dialog\") || closest(target, \".tox-confirm-dialog\");\n    const inlineAdditionalBehaviours = (editor, isStickyToolbar2, isToolbarLocationTop) => {\n      if (isStickyToolbar2 && isToolbarLocationTop) {\n        return [];\n      } else {\n        return [Docking.config({\n          contextual: {\n            lazyContext: () => Optional.some(box$1(SugarElement.fromDom(editor.getContentAreaContainer()))),\n            fadeInClass: \"tox-dialog-dock-fadein\",\n            fadeOutClass: \"tox-dialog-dock-fadeout\",\n            transitionClass: \"tox-dialog-dock-transition\"\n          },\n          modes: [\"top\"]\n        })];\n      }\n    };\n    const setup = (extras) => {\n      const backstage = extras.backstage;\n      const editor = extras.editor;\n      const isStickyToolbar$1 = isStickyToolbar(editor);\n      const alertDialog = setup$2(extras);\n      const confirmDialog = setup$1(extras);\n      const open2 = (config3, params, closeWindow) => {\n        if (params !== void 0 && params.inline === \"toolbar\") {\n          return openInlineDialog(config3, backstage.shared.anchors.inlineDialog(), closeWindow, params.ariaAttrs);\n        } else if (params !== void 0 && params.inline === \"cursor\") {\n          return openInlineDialog(config3, backstage.shared.anchors.cursor(), closeWindow, params.ariaAttrs);\n        } else {\n          return openModalDialog(config3, closeWindow);\n        }\n      };\n      const openUrl = (config3, closeWindow) => openModalUrlDialog(config3, closeWindow);\n      const openModalUrlDialog = (config3, closeWindow) => {\n        const factory2 = (contents2) => {\n          const dialog = renderUrlDialog(contents2, {\n            closeWindow: () => {\n              ModalDialog.hide(dialog.dialog);\n              closeWindow(dialog.instanceApi);\n            }\n          }, editor, backstage);\n          ModalDialog.show(dialog.dialog);\n          return dialog.instanceApi;\n        };\n        return DialogManager.openUrl(factory2, config3);\n      };\n      const openModalDialog = (config3, closeWindow) => {\n        const factory2 = (contents2, internalInitialData, dataValidator) => {\n          const initialData = internalInitialData;\n          const dialogInit = {\n            dataValidator,\n            initialData,\n            internalDialog: contents2\n          };\n          const dialog = renderDialog(dialogInit, {\n            redial: DialogManager.redial,\n            closeWindow: () => {\n              ModalDialog.hide(dialog.dialog);\n              closeWindow(dialog.instanceApi);\n            }\n          }, backstage);\n          ModalDialog.show(dialog.dialog);\n          dialog.instanceApi.setData(initialData);\n          return dialog.instanceApi;\n        };\n        return DialogManager.open(factory2, config3);\n      };\n      const openInlineDialog = (config$12, anchor2, closeWindow, ariaAttrs) => {\n        const factory2 = (contents2, internalInitialData, dataValidator) => {\n          const initialData = validateData(internalInitialData, dataValidator);\n          const inlineDialog = value$2();\n          const isToolbarLocationTop = backstage.shared.header.isPositionedAtTop();\n          const dialogInit = {\n            dataValidator,\n            initialData,\n            internalDialog: contents2\n          };\n          const refreshDocking = () => inlineDialog.on((dialog) => {\n            InlineView.reposition(dialog);\n            Docking.refresh(dialog);\n          });\n          const dialogUi = renderInlineDialog(dialogInit, {\n            redial: DialogManager.redial,\n            closeWindow: () => {\n              inlineDialog.on(InlineView.hide);\n              editor.off(\"ResizeEditor\", refreshDocking);\n              inlineDialog.clear();\n              closeWindow(dialogUi.instanceApi);\n            }\n          }, backstage, ariaAttrs);\n          const inlineDialogComp = build$1(InlineView.sketch({\n            lazySink: backstage.shared.getSink,\n            dom: {\n              tag: \"div\",\n              classes: []\n            },\n            fireDismissalEventInstead: {},\n            ...isToolbarLocationTop ? {} : { fireRepositionEventInstead: {} },\n            inlineBehaviours: derive$1([\n              config2(\"window-manager-inline-events\", [run$1(dismissRequested(), (_comp, _se) => {\n                emit(dialogUi.dialog, formCancelEvent);\n              })]),\n              ...inlineAdditionalBehaviours(editor, isStickyToolbar$1, isToolbarLocationTop)\n            ]),\n            isExtraPart: (_comp, target) => isAlertOrConfirmDialog(target)\n          }));\n          inlineDialog.set(inlineDialogComp);\n          InlineView.showWithin(inlineDialogComp, premade(dialogUi.dialog), { anchor: anchor2 }, Optional.some(body()));\n          if (!isStickyToolbar$1 || !isToolbarLocationTop) {\n            Docking.refresh(inlineDialogComp);\n            editor.on(\"ResizeEditor\", refreshDocking);\n          }\n          dialogUi.instanceApi.setData(initialData);\n          Keying.focusIn(dialogUi.dialog);\n          return dialogUi.instanceApi;\n        };\n        return DialogManager.open(factory2, config$12);\n      };\n      const confirm2 = (message, callback) => {\n        confirmDialog.open(message, (state) => {\n          callback(state);\n        });\n      };\n      const alert2 = (message, callback) => {\n        alertDialog.open(message, () => {\n          callback();\n        });\n      };\n      const close2 = (instanceApi) => {\n        instanceApi.close();\n      };\n      return {\n        open: open2,\n        openUrl,\n        alert: alert2,\n        close: close2,\n        confirm: confirm2\n      };\n    };\n    const registerOptions = (editor) => {\n      register$e(editor);\n      register$d(editor);\n      register(editor);\n    };\n    var Theme2 = () => {\n      global$a.add(\"silver\", (editor) => {\n        registerOptions(editor);\n        const { getUiMothership, backstage, renderUI } = setup$3(editor);\n        Autocompleter.register(editor, backstage.shared);\n        const windowMgr = setup({\n          editor,\n          backstage\n        });\n        return {\n          renderUI,\n          getWindowManagerImpl: constant$1(windowMgr),\n          getNotificationManagerImpl: () => NotificationManagerImpl(editor, { backstage }, getUiMothership())\n        };\n      });\n    };\n    Theme2();\n  })();\n  return theme;\n}\nvar hasRequiredSilver;\nfunction requireSilver() {\n  if (hasRequiredSilver) return silver;\n  hasRequiredSilver = 1;\n  requireTheme();\n  return silver;\n}\nrequireSilver();\nvar dom = {};\nvar model = {};\nvar hasRequiredModel;\nfunction requireModel() {\n  if (hasRequiredModel) return model;\n  hasRequiredModel = 1;\n  (function() {\n    var global$1 = tinymce.util.Tools.resolve(\"tinymce.ModelManager\");\n    const hasProto = (v2, constructor, predicate) => {\n      var _a3;\n      if (predicate(v2, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a3 = v2.constructor) === null || _a3 === void 0 ? void 0 : _a3.name) === constructor.name;\n      }\n    };\n    const typeOf = (x2) => {\n      const t2 = typeof x2;\n      if (x2 === null) {\n        return \"null\";\n      } else if (t2 === \"object\" && Array.isArray(x2)) {\n        return \"array\";\n      } else if (t2 === \"object\" && hasProto(x2, String, (o2, proto) => proto.isPrototypeOf(o2))) {\n        return \"string\";\n      } else {\n        return t2;\n      }\n    };\n    const isType$1 = (type2) => (value2) => typeOf(value2) === type2;\n    const isSimpleType = (type2) => (value2) => typeof value2 === type2;\n    const eq$2 = (t2) => (a2) => t2 === a2;\n    const isString2 = isType$1(\"string\");\n    const isObject2 = isType$1(\"object\");\n    const isArray2 = isType$1(\"array\");\n    const isNull = eq$2(null);\n    const isBoolean2 = isSimpleType(\"boolean\");\n    const isNullable = (a2) => a2 === null || a2 === void 0;\n    const isNonNullable = (a2) => !isNullable(a2);\n    const isFunction2 = isSimpleType(\"function\");\n    const isNumber2 = isSimpleType(\"number\");\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) => (a2) => fbc(fab(a2));\n    const constant2 = (value2) => {\n      return () => {\n        return value2;\n      };\n    };\n    const identity2 = (x2) => {\n      return x2;\n    };\n    const tripleEquals = (a2, b2) => {\n      return a2 === b2;\n    };\n    function curry(fn, ...initialArgs) {\n      return (...restArgs) => {\n        const all2 = initialArgs.concat(restArgs);\n        return fn.apply(null, all2);\n      };\n    }\n    const not = (f2) => (t2) => !f2(t2);\n    const die = (msg) => {\n      return () => {\n        throw new Error(msg);\n      };\n    };\n    const apply2 = (f2) => {\n      return f2();\n    };\n    const never = constant2(false);\n    const always = constant2(true);\n    class Optional {\n      constructor(tag, value2) {\n        this.tag = tag;\n        this.value = value2;\n      }\n      static some(value2) {\n        return new Optional(true, value2);\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(binder2) {\n        if (this.tag) {\n          return binder2(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(value2) {\n        return isNonNullable(value2) ? Optional.some(value2) : 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    const nativeSlice = Array.prototype.slice;\n    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t2) => nativeIndexOf.call(ts, t2);\n    const contains$2 = (xs, x2) => rawIndexOf(xs, x2) > -1;\n    const exists = (xs, pred) => {\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (pred(x2, i3)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const range$1 = (num, f2) => {\n      const r4 = [];\n      for (let i3 = 0; i3 < num; i3++) {\n        r4.push(f2(i3));\n      }\n      return r4;\n    };\n    const map$1 = (xs, f2) => {\n      const len = xs.length;\n      const r4 = new Array(len);\n      for (let i3 = 0; i3 < len; i3++) {\n        const x2 = xs[i3];\n        r4[i3] = f2(x2, i3);\n      }\n      return r4;\n    };\n    const each$2 = (xs, f2) => {\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        f2(x2, i3);\n      }\n    };\n    const eachr = (xs, f2) => {\n      for (let i3 = xs.length - 1; i3 >= 0; i3--) {\n        const x2 = xs[i3];\n        f2(x2, i3);\n      }\n    };\n    const partition = (xs, pred) => {\n      const pass = [];\n      const fail = [];\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        const arr = pred(x2, i3) ? pass : fail;\n        arr.push(x2);\n      }\n      return {\n        pass,\n        fail\n      };\n    };\n    const filter$2 = (xs, pred) => {\n      const r4 = [];\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (pred(x2, i3)) {\n          r4.push(x2);\n        }\n      }\n      return r4;\n    };\n    const foldr = (xs, f2, acc) => {\n      eachr(xs, (x2, i3) => {\n        acc = f2(acc, x2, i3);\n      });\n      return acc;\n    };\n    const foldl = (xs, f2, acc) => {\n      each$2(xs, (x2, i3) => {\n        acc = f2(acc, x2, i3);\n      });\n      return acc;\n    };\n    const findUntil = (xs, pred, until) => {\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (pred(x2, i3)) {\n          return Optional.some(x2);\n        } else if (until(x2, i3)) {\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 i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (pred(x2, i3)) {\n          return Optional.some(i3);\n        }\n      }\n      return Optional.none();\n    };\n    const flatten = (xs) => {\n      const r4 = [];\n      for (let i3 = 0, len = xs.length; i3 < len; ++i3) {\n        if (!isArray2(xs[i3])) {\n          throw new Error(\"Arr.flatten item \" + i3 + \" was not an array, input: \" + xs);\n        }\n        nativePush.apply(r4, xs[i3]);\n      }\n      return r4;\n    };\n    const bind$2 = (xs, f2) => flatten(map$1(xs, f2));\n    const forall = (xs, pred) => {\n      for (let i3 = 0, len = xs.length; i3 < len; ++i3) {\n        const x2 = xs[i3];\n        if (pred(x2, i3) !== true) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const reverse = (xs) => {\n      const r4 = nativeSlice.call(xs, 0);\n      r4.reverse();\n      return r4;\n    };\n    const mapToObject = (xs, f2) => {\n      const r4 = {};\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        r4[String(x2)] = f2(x2, i3);\n      }\n      return r4;\n    };\n    const sort$1 = (xs, comparator) => {\n      const copy2 = nativeSlice.call(xs, 0);\n      copy2.sort(comparator);\n      return copy2;\n    };\n    const get$d = (xs, i3) => i3 >= 0 && i3 < xs.length ? Optional.some(xs[i3]) : 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, f2) => {\n      for (let i3 = 0; i3 < arr.length; i3++) {\n        const r4 = f2(arr[i3], i3);\n        if (r4.isSome()) {\n          return r4;\n        }\n      }\n      return Optional.none();\n    };\n    const keys2 = Object.keys;\n    const hasOwnProperty2 = Object.hasOwnProperty;\n    const each$1 = (obj, f2) => {\n      const props = keys2(obj);\n      for (let k3 = 0, len = props.length; k3 < len; k3++) {\n        const i3 = props[k3];\n        const x2 = obj[i3];\n        f2(x2, i3);\n      }\n    };\n    const map2 = (obj, f2) => {\n      return tupleMap(obj, (x2, i3) => ({\n        k: i3,\n        v: f2(x2, i3)\n      }));\n    };\n    const tupleMap = (obj, f2) => {\n      const r4 = {};\n      each$1(obj, (x2, i3) => {\n        const tuple = f2(x2, i3);\n        r4[tuple.k] = tuple.v;\n      });\n      return r4;\n    };\n    const objAcc = (r4) => (x2, i3) => {\n      r4[i3] = x2;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      const r4 = {};\n      each$1(obj, (x2, i3) => {\n        (pred(x2, i3) ? onTrue : onFalse)(x2, i3);\n      });\n      return r4;\n    };\n    const filter$1 = (obj, pred) => {\n      const t2 = {};\n      internalFilter(obj, pred, objAcc(t2), noop);\n      return t2;\n    };\n    const mapToArray2 = (obj, f2) => {\n      const r4 = [];\n      each$1(obj, (value2, name2) => {\n        r4.push(f2(value2, name2));\n      });\n      return r4;\n    };\n    const values = (obj) => {\n      return mapToArray2(obj, identity2);\n    };\n    const get$c = (obj, key2) => {\n      return has$1(obj, key2) ? Optional.from(obj[key2]) : Optional.none();\n    };\n    const has$1 = (obj, key2) => hasOwnProperty2.call(obj, key2);\n    const hasNonNullableKey = (obj, key2) => has$1(obj, key2) && obj[key2] !== void 0 && obj[key2] !== null;\n    const isEmpty2 = (r4) => {\n      for (const x2 in r4) {\n        if (hasOwnProperty2.call(r4, x2)) {\n          return false;\n        }\n      }\n      return true;\n    };\n    typeof window !== \"undefined\" ? window : Function(\"return this;\")();\n    const COMMENT = 8;\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n    const name = (element) => {\n      const r4 = element.dom.nodeName;\n      return r4.toLowerCase();\n    };\n    const type = (element) => element.dom.nodeType;\n    const isType = (t2) => (element) => type(element) === t2;\n    const isComment = (element) => type(element) === COMMENT || name(element) === \"#comment\";\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) => (e2) => isElement(e2) && name(e2) === tag;\n    const rawSet = (dom2, key2, value2) => {\n      if (isString2(value2) || isBoolean2(value2) || isNumber2(value2)) {\n        dom2.setAttribute(key2, value2 + \"\");\n      } else {\n        console.error(\"Invalid call to Attribute.set. Key \", key2, \":: Value \", value2, \":: Element \", dom2);\n        throw new Error(\"Attribute value was not simple\");\n      }\n    };\n    const set$2 = (element, key2, value2) => {\n      rawSet(element.dom, key2, value2);\n    };\n    const setAll$1 = (element, attrs) => {\n      const dom2 = element.dom;\n      each$1(attrs, (v2, k3) => {\n        rawSet(dom2, k3, v2);\n      });\n    };\n    const setOptions = (element, attrs) => {\n      each$1(attrs, (v2, k3) => {\n        v2.fold(() => {\n          remove$7(element, k3);\n        }, (value2) => {\n          rawSet(element.dom, k3, value2);\n        });\n      });\n    };\n    const get$b = (element, key2) => {\n      const v2 = element.dom.getAttribute(key2);\n      return v2 === null ? void 0 : v2;\n    };\n    const getOpt = (element, key2) => Optional.from(get$b(element, key2));\n    const remove$7 = (element, key2) => {\n      element.dom.removeAttribute(key2);\n    };\n    const clone$2 = (element) => foldl(element.dom.attributes, (acc, attr) => {\n      acc[attr.name] = attr.value;\n      return acc;\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 = (text2, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text2);\n      return fromDom$1(node);\n    };\n    const fromDom$1 = (node) => {\n      if (node === null || node === void 0) {\n        throw new Error(\"Node cannot be null or undefined\");\n      }\n      return { dom: node };\n    };\n    const fromPoint$1 = (docElm, x2, y2) => Optional.from(docElm.dom.elementFromPoint(x2, y2)).map(fromDom$1);\n    const SugarElement = {\n      fromHtml: fromHtml$1,\n      fromTag,\n      fromText,\n      fromDom: fromDom$1,\n      fromPoint: fromPoint$1\n    };\n    const is$2 = (element, selector) => {\n      const dom2 = element.dom;\n      if (dom2.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom2;\n        if (elem.matches !== void 0) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== void 0) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== void 0) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== void 0) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error(\"Browser lacks native selectors\");\n        }\n      }\n    };\n    const bypassSelector = (dom2) => dom2.nodeType !== ELEMENT && dom2.nodeType !== DOCUMENT && dom2.nodeType !== DOCUMENT_FRAGMENT || dom2.childElementCount === 0;\n    const all$1 = (selector, scope) => {\n      const base3 = scope === void 0 ? document : scope.dom;\n      return bypassSelector(base3) ? [] : map$1(base3.querySelectorAll(selector), SugarElement.fromDom);\n    };\n    const one = (selector, scope) => {\n      const base3 = scope === void 0 ? document : scope.dom;\n      return bypassSelector(base3) ? Optional.none() : Optional.from(base3.querySelector(selector)).map(SugarElement.fromDom);\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    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 = isFunction2(isRoot) ? isRoot : never;\n      let dom2 = element.dom;\n      const ret = [];\n      while (dom2.parentNode !== null && dom2.parentNode !== void 0) {\n        const rawParent = dom2.parentNode;\n        const p2 = SugarElement.fromDom(rawParent);\n        ret.push(p2);\n        if (stop(p2) === true) {\n          break;\n        } else {\n          dom2 = 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, index2) => {\n      const cs = element.dom.childNodes;\n      return Optional.from(cs[index2]).map(SugarElement.fromDom);\n    };\n    const firstChild = (element) => child$2(element, 0);\n    const before$3 = (marker, element) => {\n      const parent$1 = parent(marker);\n      parent$1.each((v2) => {\n        v2.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((v2) => {\n          append$1(v2, element);\n        });\n      }, (v2) => {\n        before$3(v2, element);\n      });\n    };\n    const prepend = (parent2, element) => {\n      const firstChild$1 = firstChild(parent2);\n      firstChild$1.fold(() => {\n        append$1(parent2, element);\n      }, (v2) => {\n        parent2.dom.insertBefore(element.dom, v2.dom);\n      });\n    };\n    const append$1 = (parent2, element) => {\n      parent2.dom.appendChild(element.dom);\n    };\n    const appendAt = (parent2, element, index2) => {\n      child$2(parent2, index2).fold(() => {\n        append$1(parent2, element);\n      }, (v2) => {\n        before$3(v2, element);\n      });\n    };\n    const wrap = (element, wrapper) => {\n      before$3(element, wrapper);\n      append$1(wrapper, element);\n    };\n    const after$4 = (marker, elements) => {\n      each$2(elements, (x2, i3) => {\n        const e2 = i3 === 0 ? marker : elements[i3 - 1];\n        after$5(e2, x2);\n      });\n    };\n    const append = (parent2, elements) => {\n      each$2(elements, (x2) => {\n        append$1(parent2, x2);\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 dom2 = element.dom;\n      if (dom2.parentNode !== null) {\n        dom2.parentNode.removeChild(dom2);\n      }\n    };\n    const unwrap = (wrapper) => {\n      const children2 = children$2(wrapper);\n      if (children2.length > 0) {\n        after$4(wrapper, children2);\n      }\n      remove$6(wrapper);\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 nu2 = SugarElement.fromTag(tag);\n      const attributes = clone$2(original);\n      setAll$1(nu2, attributes);\n      return nu2;\n    };\n    const copy$2 = (original, tag) => {\n      const nu2 = shallowAs(original, tag);\n      const cloneChildren = children$2(deep(original));\n      append(nu2, cloneChildren);\n      return nu2;\n    };\n    const mutate$1 = (original, tag) => {\n      const nu2 = shallowAs(original, tag);\n      after$5(original, nu2);\n      const children2 = children$2(original);\n      append(nu2, children2);\n      remove$6(original);\n      return nu2;\n    };\n    const validSectionList = [\n      \"tfoot\",\n      \"thead\",\n      \"tbody\",\n      \"colgroup\"\n    ];\n    const isValidSection = (parentName) => contains$2(validSectionList, parentName);\n    const grid = (rows2, columns2) => ({\n      rows: rows2,\n      columns: columns2\n    });\n    const address = (row2, column) => ({\n      row: row2,\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, row2, column, isLocked) => ({\n      element,\n      rowspan,\n      colspan,\n      row: row2,\n      column,\n      isLocked\n    });\n    const rowdetail = (element, cells2, section2) => ({\n      element,\n      cells: cells2,\n      section: section2\n    });\n    const rowdetailnew = (element, cells2, section2, isNew) => ({\n      element,\n      cells: cells2,\n      section: section2,\n      isNew\n    });\n    const elementnew = (element, isNew, isLocked) => ({\n      element,\n      isNew,\n      isLocked\n    });\n    const rowcells = (element, cells2, section2, isNew) => ({\n      element,\n      cells: cells2,\n      section: section2,\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, columns2) => ({\n      element,\n      columns: columns2\n    });\n    const isShadowRoot = (dos) => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n    const supported = isFunction2(Element.prototype.attachShadow) && isFunction2(Node.prototype.getRootNode);\n    const isSupported$1 = constant2(supported);\n    const getRootNode = supported ? (e2) => SugarElement.fromDom(e2.dom.getRootNode()) : documentOrOwner;\n    const getShadowRoot = (e2) => {\n      const r4 = getRootNode(e2);\n      return isShadowRoot(r4) ? Optional.some(r4) : Optional.none();\n    };\n    const getShadowHost = (e2) => SugarElement.fromDom(e2.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    const inBody = (element) => {\n      const dom2 = isText(element) ? element.dom.parentNode : element.dom;\n      if (dom2 === void 0 || dom2 === null || dom2.ownerDocument === null) {\n        return false;\n      }\n      const doc = dom2.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom2)).fold(() => doc.body.contains(dom2), compose1(inBody, getShadowHost));\n    };\n    const body$1 = () => getBody$1(SugarElement.fromDom(document));\n    const getBody$1 = (doc) => {\n      const b2 = doc.dom.body;\n      if (b2 === null || b2 === void 0) {\n        throw new Error(\"Body is not available yet\");\n      }\n      return SugarElement.fromDom(b2);\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), (x2) => {\n        if (predicate(x2)) {\n          result = result.concat([x2]);\n        }\n        result = result.concat(descendants$1(x2, predicate));\n      });\n      return result;\n    };\n    const ancestors$3 = (scope, selector, isRoot) => ancestors$4(scope, (e2) => is$2(e2, selector), isRoot);\n    const children = (scope, selector) => children$1(scope, (e2) => is$2(e2, selector));\n    const descendants = (scope, selector) => all$1(selector, scope);\n    var ClosestOrAncestor = (is2, ancestor2, scope, a2, isRoot) => {\n      if (is2(scope, a2)) {\n        return Optional.some(scope);\n      } else if (isFunction2(isRoot) && isRoot(scope)) {\n        return Optional.none();\n      } else {\n        return ancestor2(scope, a2, isRoot);\n      }\n    };\n    const ancestor$2 = (scope, predicate, isRoot) => {\n      let element = scope.dom;\n      const stop = isFunction2(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 is2 = (s2, test2) => test2(s2);\n      return ClosestOrAncestor(is2, 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 i3 = 0; i3 < node.childNodes.length; i3++) {\n          const child2 = SugarElement.fromDom(node.childNodes[i3]);\n          if (predicate(child2)) {\n            return Optional.some(child2);\n          }\n          const res = descend(node.childNodes[i3]);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope.dom);\n    };\n    const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, (e2) => is$2(e2, selector), isRoot);\n    const child = (scope, selector) => child$1(scope, (e2) => is$2(e2, selector));\n    const descendant = (scope, selector) => one(selector, scope);\n    const closest$1 = (scope, selector, isRoot) => {\n      const is2 = (element, selector2) => is$2(element, selector2);\n      return ClosestOrAncestor(is2, ancestor$1, scope, selector, isRoot);\n    };\n    const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists((left2) => comparator(left2, rhs));\n    const cat = (arr) => {\n      const r4 = [];\n      const push = (x2) => {\n        r4.push(x2);\n      };\n      for (let i3 = 0; i3 < arr.length; i3++) {\n        arr[i3].each(push);\n      }\n      return r4;\n    };\n    const bindFrom = (a2, f2) => a2 !== void 0 && a2 !== null ? f2(a2) : Optional.none();\n    const someIf = (b2, a2) => b2 ? Optional.some(a2) : Optional.none();\n    const checkRange = (str, substr, start) => substr === \"\" || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n    const contains2 = (str, substr) => {\n      return str.indexOf(substr) !== -1;\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 = (r4) => (s2) => s2.replace(r4, \"\");\n    const trim = blank(/^\\s+|\\s+$/g);\n    const isNotEmpty = (s2) => s2.length > 0;\n    const toFloat = (value2) => {\n      const num = parseFloat(value2);\n      return isNaN(num) ? Optional.none() : Optional.some(num);\n    };\n    const isSupported = (dom2) => dom2.style !== void 0 && isFunction2(dom2.style.getPropertyValue);\n    const internalSet = (dom2, property, value2) => {\n      if (!isString2(value2)) {\n        console.error(\"Invalid call to CSS.set. Property \", property, \":: Value \", value2, \":: Element \", dom2);\n        throw new Error(\"CSS value must be a string: \" + value2);\n      }\n      if (isSupported(dom2)) {\n        dom2.style.setProperty(property, value2);\n      }\n    };\n    const internalRemove = (dom2, property) => {\n      if (isSupported(dom2)) {\n        dom2.style.removeProperty(property);\n      }\n    };\n    const set$1 = (element, property, value2) => {\n      const dom2 = element.dom;\n      internalSet(dom2, property, value2);\n    };\n    const setAll = (element, css2) => {\n      const dom2 = element.dom;\n      each$1(css2, (v2, k3) => {\n        internalSet(dom2, k3, v2);\n      });\n    };\n    const get$a = (element, property) => {\n      const dom2 = element.dom;\n      const styles2 = window.getComputedStyle(dom2);\n      const r4 = styles2.getPropertyValue(property);\n      return r4 === \"\" && !inBody(element) ? getUnsafeProperty(dom2, property) : r4;\n    };\n    const getUnsafeProperty = (dom2, property) => isSupported(dom2) ? dom2.style.getPropertyValue(property) : \"\";\n    const getRaw$2 = (element, property) => {\n      const dom2 = element.dom;\n      const raw = getUnsafeProperty(dom2, property);\n      return Optional.from(raw).filter((r4) => r4.length > 0);\n    };\n    const remove$5 = (element, property) => {\n      const dom2 = element.dom;\n      internalRemove(dom2, 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    const getAttrValue = (cell2, name2, fallback2 = 0) => getOpt(cell2, name2).map((value2) => parseInt(value2, 10)).getOr(fallback2);\n    const getSpan = (cell2, type2) => getAttrValue(cell2, type2, 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 = (cell2) => getSpan(cell2, \"rowspan\") > 1;\n    const getCssValue = (element, property) => parseInt(get$a(element, property), 10);\n    const minWidth = constant2(10);\n    const minHeight = constant2(10);\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), (x2) => {\n        if (is$2(x2, selector)) {\n          return predicate(x2) ? [x2] : [];\n        } else {\n          return filterFirstLayer(x2, selector, predicate);\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 = (ancestor2) => firstLayer(ancestor2, \"th,td\");\n    const columns$1 = (ancestor2) => {\n      if (is$2(ancestor2, \"colgroup\")) {\n        return children(ancestor2, \"col\");\n      } else {\n        return bind$2(columnGroups(ancestor2), (columnGroup) => children(columnGroup, \"col\"));\n      }\n    };\n    const table2 = (element, isRoot) => closest$1(element, \"table\", isRoot);\n    const rows$1 = (ancestor2) => firstLayer(ancestor2, \"tr\");\n    const columnGroups = (ancestor2) => table2(ancestor2).fold(constant2([]), (table3) => children(table3, \"colgroup\"));\n    const fromRowsOrColGroups = (elems, getSection) => map$1(elems, (row2) => {\n      if (name(row2) === \"colgroup\") {\n        const cells2 = map$1(columns$1(row2), (column) => {\n          const colspan = getAttrValue(column, \"span\", 1);\n          return detail(column, 1, colspan);\n        });\n        return rowdetail(row2, cells2, \"colgroup\");\n      } else {\n        const cells2 = map$1(cells$1(row2), (cell2) => {\n          const rowspan = getAttrValue(cell2, \"rowspan\", 1);\n          const colspan = getAttrValue(cell2, \"colspan\", 1);\n          return detail(cell2, rowspan, colspan);\n        });\n        return rowdetail(row2, cells2, getSection(row2));\n      }\n    });\n    const getParentSection = (group) => parent(group).map((parent2) => {\n      const parentName = name(parent2);\n      return isValidSection(parentName) ? parentName : \"tbody\";\n    }).getOr(\"tbody\");\n    const fromTable$1 = (table3) => {\n      const rows2 = rows$1(table3);\n      const columnGroups$1 = columnGroups(table3);\n      const elems = [\n        ...columnGroups$1,\n        ...rows2\n      ];\n      return fromRowsOrColGroups(elems, getParentSection);\n    };\n    const fromPastedRows = (elems, section2) => fromRowsOrColGroups(elems, () => section2);\n    const cached = (f2) => {\n      let called = false;\n      let r4;\n      return (...args) => {\n        if (!called) {\n          called = true;\n          r4 = f2.apply(null, args);\n        }\n        return r4;\n      };\n    };\n    const DeviceType = (os, browser, userAgent, mediaMatch2) => {\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 || mediaMatch2(\"(pointer:coarse)\");\n      const isTablet = isiPad || !isiPhone && isMobile && mediaMatch2(\"(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: constant2(isiPad),\n        isiPhone: constant2(isiPhone),\n        isTablet: constant2(isTablet),\n        isPhone: constant2(isPhone),\n        isTouch: constant2(isTouch),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant2(iOSwebview),\n        isDesktop: constant2(isDesktop)\n      };\n    };\n    const firstMatch = (regexes, s2) => {\n      for (let i3 = 0; i3 < regexes.length; i3++) {\n        const x2 = regexes[i3];\n        if (x2.test(s2)) {\n          return x2;\n        }\n      }\n      return void 0;\n    };\n    const find = (regexes, agent) => {\n      const r4 = firstMatch(regexes, agent);\n      if (!r4) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      const group = (i3) => {\n        return Number(agent.replace(r4, \"$\" + i3));\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    const detectBrowser$1 = (browsers2, userAgentData) => {\n      return findMap(userAgentData.brands, (uaBrand) => {\n        const lcBrand = uaBrand.brand.toLowerCase();\n        return find$1(browsers2, (browser) => {\n          var _a3;\n          return lcBrand === ((_a3 = browser.brand) === null || _a3 === void 0 ? void 0 : _a3.toLowerCase());\n        }).map((info) => ({\n          current: info.name,\n          version: Version.nu(parseInt(uaBrand.version, 10), 0)\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 = (browsers2, userAgent) => {\n      return detect$4(browsers2, userAgent).map((browser) => {\n        const version2 = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version: version2\n        };\n      });\n    };\n    const detectOs = (oses2, userAgent) => {\n      return detect$4(oses2, userAgent).map((os) => {\n        const version2 = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version: version2\n        };\n      });\n    };\n    const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    const checkContains = (target) => {\n      return (uastring) => {\n        return contains2(uastring, target);\n      };\n    };\n    const browsers = [\n      {\n        name: \"Edge\",\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: (uastring) => {\n          return contains2(uastring, \"edge/\") && contains2(uastring, \"chrome\") && contains2(uastring, \"safari\") && contains2(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 contains2(uastring, \"chrome\") && !contains2(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 contains2(uastring, \"msie\") || contains2(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 (contains2(uastring, \"safari\") || contains2(uastring, \"mobile/\")) && contains2(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 contains2(uastring, \"iphone\") || contains2(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: constant2(browsers),\n      oses: constant2(oses)\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: void 0,\n        version: Version.unknown()\n      });\n    };\n    const nu$1 = (info) => {\n      const current = info.current;\n      const version2 = info.version;\n      const isBrowser = (name2) => () => current === name2;\n      return {\n        current,\n        version: version2,\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    };\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: void 0,\n        version: Version.unknown()\n      });\n    };\n    const nu = (info) => {\n      const current = info.current;\n      const version2 = info.version;\n      const isOS = (name2) => () => current === name2;\n      return {\n        current,\n        version: version2,\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    };\n    const detect$3 = (userAgent, userAgentDataOpt, mediaMatch2) => {\n      const browsers2 = PlatformInfo.browsers();\n      const oses2 = PlatformInfo.oses();\n      const browser = userAgentDataOpt.bind((userAgentData) => detectBrowser$1(browsers2, userAgentData)).orThunk(() => detectBrowser(browsers2, userAgent)).fold(Browser.unknown, Browser.nu);\n      const os = detectOs(oses2, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      const deviceType = DeviceType(os, browser, userAgent, mediaMatch2);\n      return {\n        browser,\n        os,\n        deviceType\n      };\n    };\n    const PlatformDetection = { detect: detect$3 };\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    const Dimension = (name2, getOffset) => {\n      const set3 = (element, h2) => {\n        if (!isNumber2(h2) && !h2.match(/^[0-9]+$/)) {\n          throw new Error(name2 + \".set accepts only positive integer values. Value was \" + h2);\n        }\n        const dom2 = element.dom;\n        if (isSupported(dom2)) {\n          dom2.style[name2] = h2 + \"px\";\n        }\n      };\n      const get2 = (element) => {\n        const r4 = getOffset(element);\n        if (r4 <= 0 || r4 === null) {\n          const css2 = get$a(element, name2);\n          return parseFloat(css2) || 0;\n        }\n        return r4;\n      };\n      const getOuter2 = get2;\n      const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n        const val = get$a(element, property);\n        const value2 = val === void 0 ? 0 : parseInt(val, 10);\n        return isNaN(value2) ? acc : acc + value2;\n      }, 0);\n      const max = (element, value2, properties) => {\n        const cumulativeInclusions = aggregate(element, properties);\n        const absoluteMax = value2 > cumulativeInclusions ? value2 - cumulativeInclusions : 0;\n        return absoluteMax;\n      };\n      return {\n        set: set3,\n        get: get2,\n        getOuter: getOuter2,\n        aggregate,\n        max\n      };\n    };\n    const toNumber = (px, fallback2) => toFloat(px).getOr(fallback2);\n    const getProp = (element, name2, fallback2) => toNumber(get$a(element, name2), fallback2);\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 dom2 = element.dom;\n      const width2 = dom2.getBoundingClientRect().width || dom2.offsetWidth;\n      return calcContentBoxSize(element, width2, \"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);\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    const addCells = (gridRow, index2, cells2) => {\n      const existingCells = gridRow.cells;\n      const before2 = existingCells.slice(0, index2);\n      const after2 = existingCells.slice(index2);\n      const newCells = before2.concat(cells2).concat(after2);\n      return setCells(gridRow, newCells);\n    };\n    const addCell = (gridRow, index2, cell2) => addCells(gridRow, index2, [cell2]);\n    const mutateCell = (gridRow, index2, cell2) => {\n      const cells2 = gridRow.cells;\n      cells2[index2] = cell2;\n    };\n    const setCells = (gridRow, cells2) => rowcells(gridRow.element, cells2, gridRow.section, gridRow.isNew);\n    const mapCells = (gridRow, f2) => {\n      const cells2 = gridRow.cells;\n      const r4 = map$1(cells2, f2);\n      return rowcells(gridRow.element, r4, gridRow.section, gridRow.isNew);\n    };\n    const getCell = (gridRow, index2) => gridRow.cells[index2];\n    const getCellElement = (gridRow, index2) => getCell(gridRow, index2).element;\n    const cellLength = (gridRow) => gridRow.cells.length;\n    const extractGridDetails = (grid2) => {\n      const result = partition(grid2, (row2) => row2.section === \"colgroup\");\n      return {\n        rows: result.fail,\n        cols: result.pass\n      };\n    };\n    const clone = (gridRow, cloneRow2, cloneCell) => {\n      const newCells = map$1(gridRow.cells, cloneCell);\n      return rowcells(cloneRow2(gridRow.element), newCells, gridRow.section, true);\n    };\n    const LOCKED_COL_ATTR = \"data-snooker-locked-cols\";\n    const getLockedColumnsFromTable = (table3) => getOpt(table3, LOCKED_COL_ATTR).bind((lockedColStr) => Optional.from(lockedColStr.match(/\\d+/g))).map((lockedCols) => mapToObject(lockedCols, always));\n    const getLockedColumnsFromGrid = (grid2) => {\n      const locked = foldl(extractGridDetails(grid2).rows, (acc, row2) => {\n        each$2(row2.cells, (cell2, idx) => {\n          if (cell2.isLocked) {\n            acc[idx] = true;\n          }\n        });\n        return acc;\n      }, {});\n      const lockedArr = mapToArray2(locked, (_val, key2) => parseInt(key2, 10));\n      return sort$1(lockedArr);\n    };\n    const key = (row2, column) => {\n      return row2 + \",\" + column;\n    };\n    const getAt = (warehouse, row2, column) => Optional.from(warehouse.access[key(row2, column)]);\n    const findItem = (warehouse, item, comparator) => {\n      const filtered = filterItems(warehouse, (detail2) => {\n        return comparator(item, detail2.element);\n      });\n      return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n    };\n    const filterItems = (warehouse, predicate) => {\n      const all2 = bind$2(warehouse.all, (r4) => {\n        return r4.cells;\n      });\n      return filter$2(all2, predicate);\n    };\n    const generateColumns = (rowData) => {\n      const columnsGroup = {};\n      let index2 = 0;\n      each$2(rowData.cells, (column) => {\n        const colspan = column.colspan;\n        range$1(colspan, (columnIndex) => {\n          const colIndex = index2 + columnIndex;\n          columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n        });\n        index2 += colspan;\n      });\n      return columnsGroup;\n    };\n    const generate$1 = (list2) => {\n      const access = {};\n      const cells2 = [];\n      const tableOpt = head(list2).map((rowData) => rowData.element).bind(table2);\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: rows2\n      } = partition(list2, (rowData) => rowData.section === \"colgroup\");\n      each$2(rows2, (rowData) => {\n        const currentRow = [];\n        each$2(rowData.cells, (rowCell) => {\n          let start = 0;\n          while (access[key(rowCount, start)] !== void 0) {\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        cells2.push(rowdetail(rowData.element, currentRow, rowData.section));\n        rowCount++;\n      });\n      const { columns: columns2, colgroups } = last$2(colgroupRows).map((rowData) => {\n        const columns3 = generateColumns(rowData);\n        const colgroup$1 = colgroup(rowData.element, values(columns3));\n        return {\n          colgroups: [colgroup$1],\n          columns: columns3\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: cells2,\n        columns: columns2,\n        colgroups\n      };\n    };\n    const fromTable = (table3) => {\n      const list2 = fromTable$1(table3);\n      return generate$1(list2);\n    };\n    const justCells = (warehouse) => bind$2(warehouse.all, (w) => w.cells);\n    const justColumns = (warehouse) => values(warehouse.columns);\n    const hasColumns = (warehouse) => keys2(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    const columns = (warehouse, isValidCell = always) => {\n      const grid2 = warehouse.grid;\n      const cols = range$1(grid2.columns, identity2);\n      const rowsArr = range$1(grid2.rows, identity2);\n      return map$1(cols, (col2) => {\n        const getBlock = () => bind$2(rowsArr, (r4) => Warehouse.getAt(warehouse, r4, col2).filter((detail2) => detail2.column === col2).toArray());\n        const isValid = (detail2) => detail2.colspan === 1 && isValidCell(detail2.element);\n        const getFallback = () => Warehouse.getAt(warehouse, 0, col2);\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((detail2) => detail2.element);\n    };\n    const rows = (warehouse) => {\n      const grid2 = warehouse.grid;\n      const rowsArr = range$1(grid2.rows, identity2);\n      const cols = range$1(grid2.columns, identity2);\n      return map$1(rowsArr, (row2) => {\n        const getBlock = () => bind$2(cols, (c2) => Warehouse.getAt(warehouse, row2, c2).filter((detail2) => detail2.row === row2).fold(constant2([]), (detail2) => [detail2]));\n        const isSingle = (detail2) => detail2.rowspan === 1;\n        const getFallback = () => Warehouse.getAt(warehouse, row2, 0);\n        return decide(getBlock, isSingle, getFallback);\n      });\n    };\n    const deduce = (xs, index2) => {\n      if (index2 < 0 || index2 >= xs.length - 1) {\n        return Optional.none();\n      }\n      const current = xs[index2].fold(() => {\n        const rest = reverse(xs.slice(0, index2));\n        return findMap(rest, (a2, i3) => a2.map((aa) => ({\n          value: aa,\n          delta: i3 + 1\n        })));\n      }, (c2) => Optional.some({\n        value: c2,\n        delta: 0\n      }));\n      const next = xs[index2 + 1].fold(() => {\n        const rest = xs.slice(index2 + 1);\n        return findMap(rest, (a2, i3) => a2.map((aa) => ({\n          value: aa,\n          delta: i3 + 1\n        })));\n      }, (n3) => Optional.some({\n        value: n3,\n        delta: 1\n      }));\n      return current.bind((c2) => next.map((n3) => {\n        const extras = n3.delta + c2.delta;\n        return Math.abs(n3.value - c2.value) / extras;\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    const api$1 = Dimension(\"height\", (element) => {\n      const dom2 = element.dom;\n      return inBody(element) ? dom2.getBoundingClientRect().height : dom2.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    const r3 = (left2, top) => {\n      const translate2 = (x2, y2) => r3(left2 + x2, top + y2);\n      return {\n        left: left2,\n        top,\n        translate: translate2\n      };\n    };\n    const SugarPosition = r3;\n    const boxPosition = (dom2) => {\n      const box = dom2.getBoundingClientRect();\n      return SugarPosition(box.left, box.top);\n    };\n    const firstDefinedOrZero = (a2, b2) => {\n      if (a2 !== void 0) {\n        return a2;\n      } else {\n        return b2 !== void 0 ? b2 : 0;\n      }\n    };\n    const absolute = (element) => {\n      const doc = element.dom.ownerDocument;\n      const body2 = doc.body;\n      const win = doc.defaultView;\n      const html = doc.documentElement;\n      if (body2 === element.dom) {\n        return SugarPosition(body2.offsetLeft, body2.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, body2.clientTop);\n      const clientLeft = firstDefinedOrZero(html.clientLeft, body2.clientLeft);\n      return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n    };\n    const viewport = (element) => {\n      const dom2 = element.dom;\n      const doc = dom2.ownerDocument;\n      const body2 = doc.body;\n      if (body2 === dom2) {\n        return SugarPosition(body2.offsetLeft, body2.offsetTop);\n      }\n      if (!inBody(element)) {\n        return SugarPosition(0, 0);\n      }\n      return boxPosition(dom2);\n    };\n    const rowInfo = (row2, y2) => ({\n      row: row2,\n      y: y2\n    });\n    const colInfo = (col2, x2) => ({\n      col: col2,\n      x: x2\n    });\n    const rtlEdge = (cell2) => {\n      const pos = absolute(cell2);\n      return pos.left + getOuter$2(cell2);\n    };\n    const ltrEdge = (cell2) => {\n      return absolute(cell2).left;\n    };\n    const getLeftEdge = (index2, cell2) => {\n      return colInfo(index2, ltrEdge(cell2));\n    };\n    const getRightEdge = (index2, cell2) => {\n      return colInfo(index2, rtlEdge(cell2));\n    };\n    const getTop$1 = (cell2) => {\n      return absolute(cell2).top;\n    };\n    const getTopEdge = (index2, cell2) => {\n      return rowInfo(index2, getTop$1(cell2));\n    };\n    const getBottomEdge = (index2, cell2) => {\n      return rowInfo(index2, getTop$1(cell2) + getOuter$1(cell2));\n    };\n    const findPositions = (getInnerEdge, getOuterEdge, array2) => {\n      if (array2.length === 0) {\n        return [];\n      }\n      const lines = map$1(array2.slice(1), (cellOption, index2) => {\n        return cellOption.map((cell2) => {\n          return getInnerEdge(index2, cell2);\n        });\n      });\n      const lastLine = array2[array2.length - 1].map((cell2) => {\n        return getOuterEdge(array2.length - 1, cell2);\n      });\n      return lines.concat([lastLine]);\n    };\n    const negate = (step) => {\n      return -step;\n    };\n    const height = {\n      delta: identity2,\n      positions: (optElements) => findPositions(getTopEdge, getBottomEdge, optElements),\n      edge: getTop$1\n    };\n    const ltr$1 = {\n      delta: identity2,\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, table3) => detect$1(table3).delta(amount, table3),\n      positions: (cols, table3) => detect$1(table3).positions(cols, table3),\n      edge: (cell2) => detect$1(cell2).edge(cell2)\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 match3 = Optional.from(pattern.exec(input));\n      return match3.bind((array2) => {\n        const value2 = Number(array2[1]);\n        const unitRaw = array2[2];\n        if (isUnit(unitRaw, accepted)) {\n          return Optional.some({\n            value: value2,\n            unit: unitRaw\n          });\n        } else {\n          return Optional.none();\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 = (cell2, amount) => {\n      set$1(cell2, \"width\", amount + \"px\");\n    };\n    const setPercentageWidth = (cell2, amount) => {\n      set$1(cell2, \"width\", amount + \"%\");\n    };\n    const setHeight = (cell2, amount) => {\n      set$1(cell2, \"height\", amount + \"px\");\n    };\n    const getHeightValue = (cell2) => getRuntime(cell2) + \"px\";\n    const convert = (cell2, number, getter, setter) => {\n      const newSize = table2(cell2).map((table3) => {\n        const total2 = getter(table3);\n        return Math.floor(number / 100 * total2);\n      }).getOr(number);\n      setter(cell2, newSize);\n      return newSize;\n    };\n    const normalizePixelSize = (value2, cell2, getter, setter) => {\n      const number = parseFloat(value2);\n      return endsWith(value2, \"%\") && name(cell2) !== \"table\" ? convert(cell2, number, getter, setter) : number;\n    };\n    const getTotalHeight = (cell2) => {\n      const value2 = getHeightValue(cell2);\n      if (!value2) {\n        return get$8(cell2);\n      }\n      return normalizePixelSize(value2, cell2, get$8, setHeight);\n    };\n    const get$7 = (cell2, type2, f2) => {\n      const v2 = f2(cell2);\n      const span = getSpan(cell2, type2);\n      return v2 / 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 = (cell2) => getPercentSize(cell2, get$9, getInner);\n    const getPixelWidth$1 = (cell2) => isCol$2(cell2) ? get$9(cell2) : getRuntime$1(cell2);\n    const getHeight = (cell2) => {\n      return get$7(cell2, \"rowspan\", getTotalHeight);\n    };\n    const getGenericWidth = (cell2) => {\n      const width2 = getRawWidth$1(cell2);\n      return width2.bind((w) => parse(w, [\n        \"fixed\",\n        \"relative\",\n        \"empty\"\n      ]));\n    };\n    const setGenericWidth = (cell2, amount, unit) => {\n      set$1(cell2, \"width\", amount + unit);\n    };\n    const getPixelTableWidth = (table3) => get$9(table3) + \"px\";\n    const getPercentTableWidth = (table3) => getPercentSize(table3, get$9, getInner) + \"%\";\n    const isPercentSizing$1 = (table3) => getRawWidth$1(table3).exists((size) => rPercentageBasedSizeRegex.test(size));\n    const isPixelSizing$1 = (table3) => getRawWidth$1(table3).exists((size) => rPixelBasedSizeRegex.test(size));\n    const isNoneSizing$1 = (table3) => getRawWidth$1(table3).isNone();\n    const percentageBasedSizeRegex = constant2(rPercentageBasedSizeRegex);\n    const isCol$1 = isTag(\"col\");\n    const getRawW = (cell2) => {\n      return getRawWidth$1(cell2).getOrThunk(() => getPixelWidth$1(cell2) + \"px\");\n    };\n    const getRawH = (cell2) => {\n      return getRawHeight(cell2).getOrThunk(() => getHeight(cell2) + \"px\");\n    };\n    const justCols = (warehouse) => map$1(Warehouse.justColumns(warehouse), (column) => Optional.from(column.element));\n    const isValidColumn = (cell2) => {\n      const browser = detect$2().browser;\n      const supportsColWidths = browser.isChromium() || browser.isFirefox();\n      return isCol$1(cell2) ? supportsColWidths : true;\n    };\n    const getDimension = (cellOpt, index2, backups, filter2, getter, fallback2) => cellOpt.filter(filter2).fold(() => fallback2(deduce(backups, index2)), (cell2) => getter(cell2));\n    const getWidthFrom = (warehouse, table3, getWidth2, fallback2) => {\n      const columnCells = columns(warehouse);\n      const columns$12 = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells;\n      const backups = [Optional.some(width.edge(table3))].concat(map$1(width.positions(columnCells, table3), (pos) => pos.map((p2) => p2.x)));\n      const colFilter = not(hasColspan);\n      return map$1(columns$12, (cellOption, c2) => {\n        return getDimension(cellOption, c2, backups, colFilter, (column) => {\n          if (isValidColumn(column)) {\n            return getWidth2(column);\n          } else {\n            const cell2 = bindFrom(columnCells[c2], identity2);\n            return getDimension(cell2, c2, backups, colFilter, (cell3) => fallback2(Optional.some(get$9(cell3))), fallback2);\n          }\n        }, fallback2);\n      });\n    };\n    const getDeduced = (deduced) => {\n      return deduced.map((d2) => {\n        return d2 + \"px\";\n      }).getOr(\"\");\n    };\n    const getRawWidths = (warehouse, table3) => {\n      return getWidthFrom(warehouse, table3, getRawW, getDeduced);\n    };\n    const getPercentageWidths = (warehouse, table3, tableSize) => {\n      return getWidthFrom(warehouse, table3, 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, table3, tableSize) => {\n      return getWidthFrom(warehouse, table3, getPixelWidth$1, (deduced) => {\n        return deduced.getOrThunk(tableSize.minCellWidth);\n      });\n    };\n    const getHeightFrom = (warehouse, table3, direction, getHeight2, fallback2) => {\n      const rows$12 = rows(warehouse);\n      const backups = [Optional.some(direction.edge(table3))].concat(map$1(direction.positions(rows$12, table3), (pos) => pos.map((p2) => p2.y)));\n      return map$1(rows$12, (cellOption, c2) => {\n        return getDimension(cellOption, c2, backups, not(hasRowspan), getHeight2, fallback2);\n      });\n    };\n    const getPixelHeights = (warehouse, table3, direction) => {\n      return getHeightFrom(warehouse, table3, direction, getHeight, (deduced) => {\n        return deduced.getOrThunk(minHeight);\n      });\n    };\n    const getRawHeights = (warehouse, table3, direction) => {\n      return getHeightFrom(warehouse, table3, direction, getRawH, getDeduced);\n    };\n    const widthLookup = (table3, getter) => () => {\n      if (inBody(table3)) {\n        return getter(table3);\n      } else {\n        return parseFloat(getRaw$2(table3, \"width\").getOr(\"0\"));\n      }\n    };\n    const noneSize = (table3) => {\n      const getWidth2 = widthLookup(table3, get$9);\n      const zero2 = constant2(0);\n      const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table3, tableSize);\n      return {\n        width: getWidth2,\n        pixelWidth: getWidth2,\n        getWidths,\n        getCellDelta: zero2,\n        singleColumnWidth: constant2([0]),\n        minCellWidth: zero2,\n        setElementWidth: noop,\n        adjustTableWidth: noop,\n        isRelative: true,\n        label: \"none\"\n      };\n    };\n    const percentageSize = (table3) => {\n      const getFloatWidth = widthLookup(table3, (elem) => parseFloat(getPercentTableWidth(elem)));\n      const getWidth2 = widthLookup(table3, get$9);\n      const getCellDelta = (delta) => delta / getWidth2() * 100;\n      const singleColumnWidth = (w, _delta) => [100 - w];\n      const minCellWidth = () => minWidth() / getWidth2() * 100;\n      const adjustTableWidth = (delta) => {\n        const currentWidth = getFloatWidth();\n        const change = delta / 100 * currentWidth;\n        const newWidth = currentWidth + change;\n        setPercentageWidth(table3, newWidth);\n      };\n      const getWidths = (warehouse, tableSize) => getPercentageWidths(warehouse, table3, tableSize);\n      return {\n        width: getFloatWidth,\n        pixelWidth: getWidth2,\n        getWidths,\n        getCellDelta,\n        singleColumnWidth,\n        minCellWidth,\n        setElementWidth: setPercentageWidth,\n        adjustTableWidth,\n        isRelative: true,\n        label: \"percent\"\n      };\n    };\n    const pixelSize = (table3) => {\n      const getWidth2 = widthLookup(table3, get$9);\n      const getCellDelta = identity2;\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 = getWidth2() + delta;\n        setPixelWidth(table3, newWidth);\n      };\n      const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table3, tableSize);\n      return {\n        width: getWidth2,\n        pixelWidth: getWidth2,\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, width2) => {\n      const percentMatch = percentageBasedSizeRegex().exec(width2);\n      if (percentMatch !== null) {\n        return percentageSize(element);\n      } else {\n        return pixelSize(element);\n      }\n    };\n    const getTableSize = (table3) => {\n      const width2 = getRawWidth$1(table3);\n      return width2.fold(() => noneSize(table3), (w) => chooseSize(table3, w));\n    };\n    const TableSize = {\n      getTableSize,\n      pixelSize,\n      percentageSize,\n      noneSize\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, (detail2) => {\n        allCells.push(detail2);\n        if (isSelected(detail2)) {\n          selectedCells.push(detail2);\n          const startRow = detail2.row;\n          const endRow = startRow + detail2.rowspan - 1;\n          const startCol = detail2.column;\n          const endCol = startCol + detail2.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 = (list2, seenSelected, rowIndex) => {\n      const row2 = list2[rowIndex].element;\n      const td = SugarElement.fromTag(\"td\");\n      append$1(td, SugarElement.fromTag(\"br\"));\n      const f2 = seenSelected ? append$1 : prepend;\n      f2(row2, td);\n    };\n    const fillInGaps = (list2, house, stats, isSelected) => {\n      const rows2 = filter$2(list2, (row2) => row2.section !== \"colgroup\");\n      const totalColumns = house.grid.columns;\n      const totalRows = house.grid.rows;\n      for (let i3 = 0; i3 < totalRows; i3++) {\n        let seenSelected = false;\n        for (let j2 = 0; j2 < totalColumns; j2++) {\n          if (!(i3 < stats.minRow || i3 > stats.maxRow || j2 < stats.minCol || j2 > stats.maxCol)) {\n            const needCell = Warehouse.getAt(house, i3, j2).filter(isSelected).isNone();\n            if (needCell) {\n              makeCell(rows2, seenSelected, i3);\n            } else {\n              seenSelected = true;\n            }\n          }\n        }\n      }\n    };\n    const clean = (replica, stats, house, widthDelta) => {\n      each$1(house.columns, (col2) => {\n        if (col2.column < stats.minCol || col2.column > stats.maxCol) {\n          remove$6(col2.element);\n        }\n      });\n      const emptyRows = filter$2(firstLayer(replica, \"tr\"), (row2) => row2.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\"), (cell2) => {\n          remove$7(cell2, \"rowspan\");\n          remove$7(cell2, \"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 = (table3, warehouse, tableSize, stats) => {\n      if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) {\n        return 0;\n      }\n      const colWidths = getPixelWidths(warehouse, table3, tableSize);\n      const allColsWidth = foldl(colWidths, (acc, width2) => acc + width2, 0);\n      const selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), (acc, width2) => acc + width2, 0);\n      const newWidth = selectedColsWidth / allColsWidth * tableSize.pixelWidth();\n      const delta = newWidth - tableSize.pixelWidth();\n      return tableSize.getCellDelta(delta);\n    };\n    const extract$1 = (table3, selectedSelector) => {\n      const isSelected = (detail2) => is$2(detail2.element, selectedSelector);\n      const replica = deep(table3);\n      const list2 = fromTable$1(replica);\n      const tableSize = TableSize.getTableSize(table3);\n      const replicaHouse = Warehouse.generate(list2);\n      const replicaStats = findSelectedStats(replicaHouse, isSelected);\n      const selector = \"th:not(\" + selectedSelector + \"),td:not(\" + selectedSelector + \")\";\n      const unselectedCells = filterFirstLayer(replica, \"th,td\", (cell2) => is$2(cell2, selector));\n      each$2(unselectedCells, remove$6);\n      fillInGaps(list2, replicaHouse, replicaStats, isSelected);\n      const house = Warehouse.fromTable(table3);\n      const widthDelta = getTableWidthDelta(table3, house, tableSize, replicaStats);\n      clean(replica, replicaStats, replicaHouse, widthDelta);\n      return replica;\n    };\n    const nbsp = \" \";\n    const NodeValue = (is2, name2) => {\n      const get2 = (element) => {\n        if (!is2(element)) {\n          throw new Error(\"Can only get \" + name2 + \" value of a \" + name2 + \" node\");\n        }\n        return getOption2(element).getOr(\"\");\n      };\n      const getOption2 = (element) => is2(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n      const set3 = (element, value2) => {\n        if (!is2(element)) {\n          throw new Error(\"Can only set raw \" + name2 + \" value of a \" + name2 + \" node\");\n        }\n        element.dom.nodeValue = value2;\n      };\n      return {\n        get: get2,\n        getOption: getOption2,\n        set: set3\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 set2 = (element, value2) => api.set(element, value2);\n    const getEnd = (element) => name(element) === \"img\" ? 1 : getOption(element).fold(() => children$2(element).length, (v2) => v2.length);\n    const isTextNodeWithCursorPosition = (el) => getOption(el).filter((text2) => text2.trim().length !== 0 || text2.indexOf(nbsp) > -1).isSome();\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));\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 children2 = children$2(element);\n        for (let i3 = children2.length - 1; i3 >= 0; i3--) {\n          const child2 = children2[i3];\n          if (predicate(child2)) {\n            return Optional.some(child2);\n          }\n          const res = descend(child2);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope);\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 = (cell2, tag, attrs) => {\n      const replica = copy$2(cell2, tag);\n      each$1(attrs, (v2, k3) => {\n        if (v2 === null) {\n          remove$7(replica, k3);\n        } else {\n          set$2(replica, k3, v2);\n        }\n      });\n      return replica;\n    };\n    const pasteReplace = (cell2) => {\n      return cell2;\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 parents2 = ancestors$3(firstText, formatSelector, (element) => {\n          return eq$1(element, oldCell);\n        });\n        return foldr(parents2, (last2, parent2) => {\n          const clonedFormat = shallow(parent2);\n          remove$7(clonedFormat, \"contenteditable\");\n          append$1(last2, clonedFormat);\n          return clonedFormat;\n        }, newCell);\n      }).getOr(newCell);\n    };\n    const cloneAppropriateAttributes = (original, clone2) => {\n      each$1(transferableAttributes, (validAttributes, attributeName) => getOpt(original, attributeName).filter((attribute2) => contains$2(validAttributes, attribute2)).each((attribute2) => set$2(clone2, attributeName, attribute2)));\n    };\n    const cellOperations = (mutate2, doc, formatsToClone) => {\n      const cloneCss = (prev, clone2) => {\n        copy$1(prev.element, clone2);\n        remove$5(clone2, \"height\");\n        if (prev.colspan !== 1) {\n          remove$5(clone2, \"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        mutate2(prev.element, td);\n        return td;\n      };\n      const newCol = (prev) => {\n        const col2 = SugarElement.fromTag(name(prev.element), doc.dom);\n        cloneCss(prev, col2);\n        mutate2(prev.element, col2);\n        return col2;\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    const fromHtml = (html, scope) => {\n      const doc = 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    const getBody = (editor) => SugarElement.fromDom(editor.getBody());\n    const getIsRoot = (editor) => (element) => eq$1(element, getBody(editor));\n    const removeDataStyle = (table3) => {\n      remove$7(table3, \"data-mce-style\");\n      const removeStyleAttribute = (element) => remove$7(element, \"data-mce-style\");\n      each$2(cells$1(table3), removeStyleAttribute);\n      each$2(columns$1(table3), removeStyleAttribute);\n      each$2(rows$1(table3), 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 = (value2) => /^(\\d+(\\.\\d+)?)%$/.test(value2);\n    const isPixel = (value2) => /^(\\d+(\\.\\d+)?)px$/.test(value2);\n    const inSelection = (bounds2, detail2) => {\n      const leftEdge = detail2.column;\n      const rightEdge = detail2.column + detail2.colspan - 1;\n      const topEdge = detail2.row;\n      const bottomEdge = detail2.row + detail2.rowspan - 1;\n      return leftEdge <= bounds2.finishCol && rightEdge >= bounds2.startCol && (topEdge <= bounds2.finishRow && bottomEdge >= bounds2.startRow);\n    };\n    const isWithin = (bounds2, detail2) => {\n      return detail2.column >= bounds2.startCol && detail2.column + detail2.colspan - 1 <= bounds2.finishCol && detail2.row >= bounds2.startRow && detail2.row + detail2.rowspan - 1 <= bounds2.finishRow;\n    };\n    const isRectangular = (warehouse, bounds2) => {\n      let isRect = true;\n      const detailIsWithin = curry(isWithin, bounds2);\n      for (let i3 = bounds2.startRow; i3 <= bounds2.finishRow; i3++) {\n        for (let j2 = bounds2.startCol; j2 <= bounds2.finishCol; j2++) {\n          isRect = isRect && Warehouse.getAt(warehouse, i3, j2).exists(detailIsWithin);\n        }\n      }\n      return isRect ? Optional.some(bounds2) : Optional.none();\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((bounds2) => {\n        return isRectangular(warehouse, bounds2);\n      });\n    };\n    const moveBy$1 = (warehouse, cell2, row2, column) => {\n      return Warehouse.findItem(warehouse, cell2, eq$1).bind((detail2) => {\n        const startRow = row2 > 0 ? detail2.row + detail2.rowspan - 1 : detail2.row;\n        const startCol = column > 0 ? detail2.column + detail2.colspan - 1 : detail2.column;\n        const dest = Warehouse.getAt(warehouse, startRow + row2, startCol + column);\n        return dest.map((d2) => {\n          return d2.element;\n        });\n      });\n    };\n    const intercepts$1 = (warehouse, start, finish) => {\n      return getAnyBox(warehouse, start, finish).map((bounds2) => {\n        const inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds2));\n        return map$1(inside, (detail2) => {\n          return detail2.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((detail2) => {\n        return detail2.element;\n      });\n    };\n    const moveBy = (cell2, deltaRow, deltaColumn) => {\n      return table2(cell2).bind((table3) => {\n        const warehouse = getWarehouse(table3);\n        return moveBy$1(warehouse, cell2, deltaRow, deltaColumn);\n      });\n    };\n    const intercepts = (table3, first2, last2) => {\n      const warehouse = getWarehouse(table3);\n      return intercepts$1(warehouse, first2, last2);\n    };\n    const nestedIntercepts = (table3, first2, firstTable, last2, lastTable) => {\n      const warehouse = getWarehouse(table3);\n      const optStartCell = eq$1(table3, firstTable) ? Optional.some(first2) : parentCell(warehouse, first2);\n      const optLastCell = eq$1(table3, lastTable) ? Optional.some(last2) : parentCell(warehouse, last2);\n      return optStartCell.bind((startCell) => optLastCell.bind((lastCell) => intercepts$1(warehouse, startCell, lastCell)));\n    };\n    const getBox = (table3, first2, last2) => {\n      const warehouse = getWarehouse(table3);\n      return getBox$1(warehouse, first2, last2);\n    };\n    const getWarehouse = Warehouse.fromTable;\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    var DomUniverse = () => {\n      const clone2 = (element) => {\n        return SugarElement.fromDom(element.dom.cloneNode(false));\n      };\n      const document2 = (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 isEmptyTag2 = (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: constant2({\n          selector: ancestor$1,\n          closest: closest$1,\n          predicate: ancestor$2,\n          all: parents\n        }),\n        down: constant2({\n          selector: descendants,\n          predicate: descendants$1\n        }),\n        styles: constant2({\n          get: get$a,\n          getRaw: getRaw$2,\n          set: set$1,\n          remove: remove$5\n        }),\n        attrs: constant2({\n          get: get$b,\n          set: set$2,\n          remove: remove$7,\n          copyTo: copyAttributesTo\n        }),\n        insert: constant2({\n          before: before$3,\n          after: after$5,\n          afterAll: after$4,\n          append: append$1,\n          appendAll: append,\n          prepend,\n          wrap\n        }),\n        remove: constant2({\n          unwrap,\n          remove: remove$6\n        }),\n        create: constant2({\n          nu: SugarElement.fromTag,\n          clone: clone2,\n          text: SugarElement.fromText\n        }),\n        query: constant2({\n          comparePosition,\n          prevSibling,\n          nextSibling\n        }),\n        property: constant2({\n          children: children$2,\n          name,\n          parent,\n          document: document2,\n          isText,\n          isComment,\n          isElement,\n          isSpecial,\n          getLanguage,\n          getText: get$6,\n          setText: set2,\n          isBoundary,\n          isEmptyTag: isEmptyTag2,\n          isNonEditable\n        }),\n        eq: eq$1,\n        is: is$1\n      };\n    };\n    const all = (universe2, look, elements, f2) => {\n      const head2 = elements[0];\n      const tail = elements.slice(1);\n      return f2(universe2, look, head2, tail);\n    };\n    const oneAll = (universe2, look, elements) => {\n      return elements.length > 0 ? all(universe2, look, elements, unsafeOne) : Optional.none();\n    };\n    const unsafeOne = (universe2, look, head2, tail) => {\n      const start = look(universe2, head2);\n      return foldr(tail, (b2, a2) => {\n        const current = look(universe2, a2);\n        return commonElement(universe2, b2, current);\n      }, start);\n    };\n    const commonElement = (universe2, start, end) => {\n      return start.bind((s2) => {\n        return end.filter(curry(universe2.eq, s2));\n      });\n    };\n    const eq2 = (universe2, item) => {\n      return curry(universe2.eq, item);\n    };\n    const ancestors$2 = (universe2, start, end, isRoot = never) => {\n      const ps1 = [start].concat(universe2.up().all(start));\n      const ps2 = [end].concat(universe2.up().all(end));\n      const prune2 = (path) => {\n        const index2 = findIndex(path, isRoot);\n        return index2.fold(() => {\n          return path;\n        }, (ind) => {\n          return path.slice(0, ind + 1);\n        });\n      };\n      const pruned1 = prune2(ps1);\n      const pruned2 = prune2(ps2);\n      const shared = find$1(pruned1, (x2) => {\n        return exists(pruned2, eq2(universe2, x2));\n      });\n      return {\n        firstpath: pruned1,\n        secondpath: pruned2,\n        shared\n      };\n    };\n    const sharedOne$1 = oneAll;\n    const ancestors$1 = ancestors$2;\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    const lookupTable = (container) => {\n      return ancestor$1(container, \"table\");\n    };\n    const identify = (start, finish, isRoot) => {\n      const getIsRoot2 = (rootTable) => {\n        return (element) => {\n          return isRoot !== void 0 && 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\", getIsRoot2(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\", getIsRoot2(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\", getIsRoot2(lcaTable));\n                  const finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n                  const startAncestorCells = ancestors$3(start, \"td,th\", getIsRoot2(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((first2) => {\n        return descendant(container, lastSelectedSelector).bind((last2) => {\n          return sharedOne(lookupTable, [\n            first2,\n            last2\n          ]).map((table3) => {\n            return {\n              first: first2,\n              last: last2,\n              table: table3\n            };\n          });\n        });\n      });\n    };\n    const expandTo = (finish, firstSelectedSelector) => {\n      return ancestor$1(finish, \"table\").bind((table3) => {\n        return descendant(table3, 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((last2) => {\n        return moveBy(last2, deltaRow, deltaColumn).bind((finish) => {\n          return expandTo(finish, firstSelectedSelector);\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 = (ancestor2) => {\n          return eq$1(container, ancestor2);\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    const selection = identity2;\n    const unmergable = (selectedCells) => {\n      const hasSpan = (elem, type2) => getOpt(elem, type2).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 = (table3, selectedCells, ephemera2) => {\n      if (selectedCells.length <= 1) {\n        return Optional.none();\n      } else {\n        return retrieveBox(table3, ephemera2.firstSelectedSelector, ephemera2.lastSelectedSelector).map((bounds2) => ({\n          bounds: bounds2,\n          cells: selectedCells\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    const forMenu = (selectedCells, table3, cell2) => ({\n      element: cell2,\n      mergable: mergable(table3, 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    const getSelectionCellFallback = (element) => table2(element).bind((table3) => retrieve(table3, ephemera.firstSelectedSelector)).fold(constant2(element), (cells2) => cells2[0]);\n    const getSelectionFromSelector = (selector) => (initCell, isRoot) => {\n      const cellName = name(initCell);\n      const cell2 = cellName === \"col\" || cellName === \"colgroup\" ? getSelectionCellFallback(initCell) : initCell;\n      return closest$1(cell2, 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), (cell2) => is$2(cell2, ephemera.selectedSelector));\n    const extractSelected = (cells2) => {\n      return table2(cells2[0]).map((table3) => {\n        const replica = extract$1(table3, 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\", (e2) => {\n        const multiCellContext = (cells2) => {\n          e2.preventDefault();\n          extractSelected(cells2).each((elements) => {\n            e2.content = e2.format === \"text\" ? getTextContent(elements) : serializeElements(editor, elements);\n          });\n        };\n        if (e2.selection === true) {\n          const cells2 = getCellsFromFakeSelection(editor);\n          if (cells2.length >= 1) {\n            multiCellContext(cells2);\n          }\n        }\n      });\n      editor.on(\"BeforeSetContent\", (e2) => {\n        if (e2.selection === true && e2.paste === true) {\n          const selectedCells = getCellsFromSelection(editor);\n          head(selectedCells).each((cell2) => {\n            table2(cell2).each((table3) => {\n              const elements = filter$2(fromHtml(e2.content), (content) => {\n                return name(content) !== \"meta\";\n              });\n              const isTable2 = isTag(\"table\");\n              if (elements.length === 1 && isTable2(elements[0])) {\n                e2.preventDefault();\n                const doc = SugarElement.fromDom(editor.getDoc());\n                const generators = paste$1(doc);\n                const targets = paste(cell2, elements[0], generators);\n                actions.pasteCells(table3, targets).each(() => {\n                  editor.focus();\n                });\n              }\n            });\n          });\n        }\n      });\n    };\n    const point = (element, offset) => ({\n      element,\n      offset\n    });\n    const scan$1 = (universe2, element, direction) => {\n      if (universe2.property().isText(element) && universe2.property().getText(element).trim().length === 0 || universe2.property().isComment(element)) {\n        return direction(element).bind((elem) => {\n          return scan$1(universe2, elem, direction).orThunk(() => {\n            return Optional.some(elem);\n          });\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const toEnd = (universe2, element) => {\n      if (universe2.property().isText(element)) {\n        return universe2.property().getText(element).length;\n      }\n      const children2 = universe2.property().children(element);\n      return children2.length;\n    };\n    const freefallRtl$2 = (universe2, element) => {\n      const candidate = scan$1(universe2, element, universe2.query().prevSibling).getOr(element);\n      if (universe2.property().isText(candidate)) {\n        return point(candidate, toEnd(universe2, candidate));\n      }\n      const children2 = universe2.property().children(candidate);\n      return children2.length > 0 ? freefallRtl$2(universe2, children2[children2.length - 1]) : point(candidate, toEnd(universe2, candidate));\n    };\n    const freefallRtl$1 = freefallRtl$2;\n    const universe$2 = DomUniverse();\n    const freefallRtl = (element) => {\n      return freefallRtl$1(universe$2, element);\n    };\n    const halve = (main2, other) => {\n      if (!hasColspan(main2)) {\n        const width2 = getGenericWidth(main2);\n        width2.each((w) => {\n          const newWidth = w.value / 2;\n          setGenericWidth(main2, newWidth, w.unit);\n          setGenericWidth(other, newWidth, w.unit);\n        });\n      }\n    };\n    const zero = (array2) => map$1(array2, constant2(0));\n    const surround = (sizes, startIndex, endIndex, results, f2) => f2(sizes.slice(0, startIndex)).concat(results).concat(f2(sizes.slice(endIndex)));\n    const clampDeltaHelper = (predicate) => (sizes, index2, delta, minCellSize) => {\n      if (!predicate(delta)) {\n        return delta;\n      } else {\n        const newSize = Math.max(minCellSize, sizes[index2] - Math.abs(delta));\n        const diff = Math.abs(newSize - sizes[index2]);\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, index2, next, delta, minCellSize) => {\n        const clampedDelta = clampNegativeDelta(sizes, index2, delta, minCellSize);\n        return surround(sizes, index2, next + 1, [\n          clampedDelta,\n          0\n        ], zero);\n      };\n      const calcRelativeDeltas = (sizes, index2, delta, minCellSize) => {\n        const ratio = (100 + delta) / 100;\n        const newThis = Math.max(minCellSize, (sizes[index2] + delta) / ratio);\n        return map$1(sizes, (size, idx) => {\n          const newSize = idx === index2 ? newThis : size / ratio;\n          return newSize - size;\n        });\n      };\n      const calcLeftEdgeDeltas = (sizes, index2, next, delta, minCellSize, isRelative) => {\n        if (isRelative) {\n          return calcRelativeDeltas(sizes, index2, delta, minCellSize);\n        } else {\n          return calcFixedDeltas(sizes, index2, next, delta, minCellSize);\n        }\n      };\n      const calcMiddleDeltas = (sizes, _prev, index2, next, delta, minCellSize, isRelative) => calcLeftEdgeDeltas(sizes, index2, next, delta, minCellSize, isRelative);\n      const resizeTable2 = (resizer, delta) => resizer(delta);\n      const calcRightEdgeDeltas = (sizes, _prev, index2, delta, minCellSize, isRelative) => {\n        if (isRelative) {\n          return calcRelativeDeltas(sizes, index2, delta, minCellSize);\n        } else {\n          const clampedDelta = clampNegativeDelta(sizes, index2, delta, minCellSize);\n          return zero(sizes.slice(0, index2)).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: resizeTable2,\n        clampTableDelta: clampNegativeDelta,\n        calcLeftEdgeDeltas,\n        calcMiddleDeltas,\n        calcRightEdgeDeltas,\n        calcRedestributedWidths\n      };\n    };\n    const preserveTable = () => {\n      const calcLeftEdgeDeltas = (sizes, index2, next, delta, minCellSize) => {\n        const idx = delta >= 0 ? next : index2;\n        const clampedDelta = clampDelta(sizes, idx, delta, minCellSize);\n        return surround(sizes, index2, next + 1, [\n          clampedDelta,\n          -clampedDelta\n        ], zero);\n      };\n      const calcMiddleDeltas = (sizes, _prev, index2, next, delta, minCellSize) => calcLeftEdgeDeltas(sizes, index2, next, delta, minCellSize);\n      const resizeTable2 = (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, constant2(diff));\n        }\n      };\n      const clampTableDelta = (sizes, index2, delta, minCellSize, isLastColumn) => {\n        if (isLastColumn) {\n          if (delta >= 0) {\n            return delta;\n          } else {\n            const maxDelta = foldl(sizes, (a2, b2) => a2 + b2 - minCellSize, 0);\n            return Math.max(-maxDelta, delta);\n          }\n        } else {\n          return clampNegativeDelta(sizes, index2, delta, minCellSize);\n        }\n      };\n      const calcRedestributedWidths = (sizes, _totalWidth, _pixelDelta, _isRelative) => ({\n        delta: 0,\n        newSizes: sizes\n      });\n      return {\n        resizeTable: resizeTable2,\n        clampTableDelta,\n        calcLeftEdgeDeltas,\n        calcMiddleDeltas,\n        calcRightEdgeDeltas,\n        calcRedestributedWidths\n      };\n    };\n    const getGridSize = (table3) => {\n      const warehouse = Warehouse.fromTable(table3);\n      return warehouse.grid;\n    };\n    const isHeaderCell = isTag(\"th\");\n    const isHeaderCells = (cells2) => forall(cells2, (cell2) => isHeaderCell(cell2.element));\n    const getRowHeaderType = (isHeaderRow, isHeaderCells2) => {\n      if (isHeaderRow && isHeaderCells2) {\n        return \"sectionCells\";\n      } else if (isHeaderRow) {\n        return \"section\";\n      } else {\n        return \"cells\";\n      }\n    };\n    const getRowType = (row2) => {\n      const isHeaderRow = row2.section === \"thead\";\n      const isHeaderCells2 = is(findCommonCellType(row2.cells), \"th\");\n      if (row2.section === \"tfoot\") {\n        return { type: \"footer\" };\n      } else if (isHeaderRow || isHeaderCells2) {\n        return {\n          type: \"header\",\n          subType: getRowHeaderType(isHeaderRow, isHeaderCells2)\n        };\n      } else {\n        return { type: \"body\" };\n      }\n    };\n    const findCommonCellType = (cells2) => {\n      const headerCells = filter$2(cells2, (cell2) => isHeaderCell(cell2.element));\n      if (headerCells.length === 0) {\n        return Optional.some(\"td\");\n      } else if (headerCells.length === cells2.length) {\n        return Optional.some(\"th\");\n      } else {\n        return Optional.none();\n      }\n    };\n    const findCommonRowType = (rows2) => {\n      const rowTypes = map$1(rows2, (row2) => getRowType(row2).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, (row2) => {\n      const rowType = getRowType(row2);\n      return rowType.type === \"header\" ? Optional.from(rowType.subType) : Optional.none();\n    });\n    const transformCell = (cell2, comparator, substitution) => elementnew(substitution(cell2.element, comparator), true, cell2.isLocked);\n    const transformRow = (row2, section2) => row2.section !== section2 ? rowcells(row2.element, row2.cells, section2, row2.isNew) : row2;\n    const section = () => ({\n      transformRow,\n      transformCell: (cell2, comparator, substitution) => {\n        const newCell = substitution(cell2.element, comparator);\n        const fixedCell = name(newCell) !== \"td\" ? mutate$1(newCell, \"td\") : newCell;\n        return elementnew(fixedCell, cell2.isNew, cell2.isLocked);\n      }\n    });\n    const sectionCells = () => ({\n      transformRow,\n      transformCell\n    });\n    const cells = () => ({\n      transformRow: (row2, section2) => {\n        const newSection = section2 === \"thead\" ? \"tbody\" : section2;\n        return transformRow(row2, newSection);\n      },\n      transformCell\n    });\n    const fallback = () => ({\n      transformRow: identity2,\n      transformCell\n    });\n    const getTableSectionType = (table3, fallback2) => {\n      const warehouse = Warehouse.fromTable(table3);\n      const type2 = findTableRowHeaderType(warehouse).getOr(fallback2);\n      switch (type2) {\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    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(constant2(assumeEditable), (editable) => getRaw(editable) === \"true\");\n      }\n    };\n    const getRaw = (element) => element.dom.contentEditable;\n    const setIfNot = (element, property, value2, ignore) => {\n      if (value2 === ignore) {\n        remove$7(element, property);\n      } else {\n        set$2(element, property, value2);\n      }\n    };\n    const insert$1 = (table3, selector, element) => {\n      last$2(children(table3, selector)).fold(() => prepend(table3, element), (child2) => after$5(child2, element));\n    };\n    const generateSection = (table3, sectionName) => {\n      const section2 = child(table3, sectionName).getOrThunk(() => {\n        const newSection = SugarElement.fromTag(sectionName, owner(table3).dom);\n        if (sectionName === \"thead\") {\n          insert$1(table3, \"caption,colgroup\", newSection);\n        } else if (sectionName === \"colgroup\") {\n          insert$1(table3, \"caption\", newSection);\n        } else {\n          append$1(table3, newSection);\n        }\n        return newSection;\n      });\n      empty(section2);\n      return section2;\n    };\n    const render$1 = (table3, grid2) => {\n      const newRows = [];\n      const newCells = [];\n      const syncRows = (gridSection) => map$1(gridSection, (row2) => {\n        if (row2.isNew) {\n          newRows.push(row2.element);\n        }\n        const tr = row2.element;\n        empty(tr);\n        each$2(row2.cells, (cell2) => {\n          if (cell2.isNew) {\n            newCells.push(cell2.element);\n          }\n          setIfNot(cell2.element, \"colspan\", cell2.colspan, 1);\n          setIfNot(cell2.element, \"rowspan\", cell2.rowspan, 1);\n          append$1(tr, cell2.element);\n        });\n        return tr;\n      });\n      const syncColGroup = (gridSection) => bind$2(gridSection, (colGroup) => map$1(colGroup.cells, (col2) => {\n        setIfNot(col2.element, \"span\", col2.colspan, 1);\n        return col2.element;\n      }));\n      const renderSection = (gridSection, sectionName) => {\n        const section2 = generateSection(table3, sectionName);\n        const sync2 = sectionName === \"colgroup\" ? syncColGroup : syncRows;\n        const sectionElems = sync2(gridSection);\n        append(section2, sectionElems);\n      };\n      const removeSection = (sectionName) => {\n        child(table3, 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(grid2, (row2) => {\n        switch (row2.section) {\n          case \"thead\":\n            headSection.push(row2);\n            break;\n          case \"tbody\":\n            bodySection.push(row2);\n            break;\n          case \"tfoot\":\n            footSection.push(row2);\n            break;\n          case \"colgroup\":\n            columnGroupsSection.push(row2);\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 = (grid2) => map$1(grid2, (row2) => {\n      const tr = shallow(row2.element);\n      each$2(row2.cells, (cell2) => {\n        const clonedCell = deep(cell2.element);\n        setIfNot(clonedCell, \"colspan\", cell2.colspan, 1);\n        setIfNot(clonedCell, \"rowspan\", cell2.rowspan, 1);\n        append$1(tr, clonedCell);\n      });\n      return tr;\n    });\n    const getColumn = (grid2, index2) => {\n      return map$1(grid2, (row2) => {\n        return getCell(row2, index2);\n      });\n    };\n    const getRow = (grid2, index2) => {\n      return grid2[index2];\n    };\n    const findDiff = (xs, comp) => {\n      if (xs.length === 0) {\n        return 0;\n      }\n      const first2 = xs[0];\n      const index2 = findIndex(xs, (x2) => {\n        return !comp(first2.element, x2.element);\n      });\n      return index2.getOr(xs.length);\n    };\n    const subgrid = (grid2, row2, column, comparator) => {\n      const gridRow = getRow(grid2, row2);\n      const isColRow = gridRow.section === \"colgroup\";\n      const colspan = findDiff(gridRow.cells.slice(column), comparator);\n      const rowspan = isColRow ? 1 : findDiff(getColumn(grid2.slice(row2), column), comparator);\n      return {\n        colspan,\n        rowspan\n      };\n    };\n    const toDetails = (grid2, comparator) => {\n      const seen = map$1(grid2, (row2) => map$1(row2.cells, never));\n      const updateSeen = (rowIndex, columnIndex, rowspan, colspan) => {\n        for (let row2 = rowIndex; row2 < rowIndex + rowspan; row2++) {\n          for (let column = columnIndex; column < columnIndex + colspan; column++) {\n            seen[row2][column] = true;\n          }\n        }\n      };\n      return map$1(grid2, (row2, rowIndex) => {\n        const details = bind$2(row2.cells, (cell2, columnIndex) => {\n          if (seen[rowIndex][columnIndex] === false) {\n            const result = subgrid(grid2, rowIndex, columnIndex, comparator);\n            updateSeen(rowIndex, columnIndex, result.rowspan, result.colspan);\n            return [detailnew(cell2.element, result.rowspan, result.colspan, cell2.isNew)];\n          } else {\n            return [];\n          }\n        });\n        return rowdetailnew(row2.element, details, row2.section, row2.isNew);\n      });\n    };\n    const toGrid = (warehouse, generators, isNew) => {\n      const grid2 = [];\n      each$2(warehouse.colgroups, (colgroup2) => {\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        grid2.push(rowcells(colgroup2.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 row2 = rowcells(rowDetail.element, rowCells, rowDetail.section, isNew);\n        grid2.push(row2);\n      }\n      return grid2;\n    };\n    const fromWarehouse = (warehouse, generators) => toGrid(warehouse, generators, false);\n    const toDetailList = (grid2) => toDetails(grid2, eq$1);\n    const findInWarehouse = (warehouse, element) => findMap(warehouse.all, (r4) => find$1(r4.cells, (e2) => eq$1(element, e2.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 cells2 = cat(details);\n      return someIf(cells2.length > 0, cells2);\n    };\n    const run = (operation, extract2, adjustment, postAction, genWrappers) => (table3, target, generators, behaviours) => {\n      const warehouse = Warehouse.fromTable(table3);\n      const tableSection = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.section).getOrThunk(TableSection.fallback);\n      const output = extract2(warehouse, target).map((info) => {\n        const model2 = fromWarehouse(warehouse, generators);\n        const result = operation(model2, info, eq$1, genWrappers(generators), tableSection);\n        const lockedColumns = getLockedColumnsFromGrid(result.grid);\n        const grid2 = toDetailList(result.grid);\n        return {\n          info,\n          grid: grid2,\n          cursor: result.cursor,\n          lockedColumns\n        };\n      });\n      return output.bind((out) => {\n        const newElements = render$1(table3, out.grid);\n        const tableSizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.sizing).getOrThunk(() => TableSize.getTableSize(table3));\n        const resizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.resize).getOrThunk(preserveTable);\n        adjustment(table3, out.grid, out.info, {\n          sizing: tableSizing,\n          resize: resizing,\n          section: tableSection\n        });\n        postAction(table3);\n        remove$7(table3, LOCKED_COL_ATTR);\n        if (out.lockedColumns.length > 0) {\n          set$2(table3, 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((cell2) => findInWarehouse(warehouse, cell2).map((details) => {\n      const value2 = {\n        ...details,\n        generators: target.generators,\n        clipboard: target.clipboard\n      };\n      return value2;\n    }));\n    const onPasteByEditor = (warehouse, target) => extractCells(warehouse, target, always).map((cells2) => ({\n      cells: cells2,\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, (detail2) => !detail2.isLocked);\n    const isUnlockedTableCell = (warehouse, cell2) => findInWarehouse(warehouse, cell2).exists((detail2) => !detail2.isLocked);\n    const allUnlocked = (warehouse, cells2) => forall(cells2, (cell2) => isUnlockedTableCell(warehouse, cell2));\n    const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter((mergeable) => allUnlocked(warehouse, mergeable.cells));\n    const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter((cells2) => allUnlocked(warehouse, cells2));\n    const merge$2 = (grid2, bounds2, comparator, substitution) => {\n      const rows2 = extractGridDetails(grid2).rows;\n      if (rows2.length === 0) {\n        return grid2;\n      }\n      for (let i3 = bounds2.startRow; i3 <= bounds2.finishRow; i3++) {\n        for (let j2 = bounds2.startCol; j2 <= bounds2.finishCol; j2++) {\n          const row2 = rows2[i3];\n          const isLocked = getCell(row2, j2).isLocked;\n          mutateCell(row2, j2, elementnew(substitution(), false, isLocked));\n        }\n      }\n      return grid2;\n    };\n    const unmerge = (grid2, target, comparator, substitution) => {\n      const rows2 = extractGridDetails(grid2).rows;\n      let first2 = true;\n      for (let i3 = 0; i3 < rows2.length; i3++) {\n        for (let j2 = 0; j2 < cellLength(rows2[0]); j2++) {\n          const row2 = rows2[i3];\n          const currentCell = getCell(row2, j2);\n          const currentCellElm = currentCell.element;\n          const isToReplace = comparator(currentCellElm, target);\n          if (isToReplace && !first2) {\n            mutateCell(row2, j2, elementnew(substitution(), true, currentCell.isLocked));\n          } else if (isToReplace) {\n            first2 = false;\n          }\n        }\n      }\n      return grid2;\n    };\n    const uniqueCells = (row2, comparator) => {\n      return foldl(row2, (rest, cell2) => {\n        return exists(rest, (currentCell) => {\n          return comparator(currentCell.element, cell2.element);\n        }) ? rest : rest.concat([cell2]);\n      }, []);\n    };\n    const splitCols = (grid2, index2, comparator, substitution) => {\n      if (index2 > 0 && index2 < grid2[0].cells.length) {\n        each$2(grid2, (row2) => {\n          const prevCell = row2.cells[index2 - 1];\n          const current = row2.cells[index2];\n          const isToReplace = comparator(current.element, prevCell.element);\n          if (isToReplace) {\n            mutateCell(row2, index2, elementnew(substitution(), true, current.isLocked));\n          }\n        });\n      }\n      return grid2;\n    };\n    const splitRows = (grid2, index2, comparator, substitution) => {\n      const rows2 = extractGridDetails(grid2).rows;\n      if (index2 > 0 && index2 < rows2.length) {\n        const rowPrevCells = rows2[index2 - 1].cells;\n        const cells2 = uniqueCells(rowPrevCells, comparator);\n        each$2(cells2, (cell2) => {\n          let replacement = Optional.none();\n          for (let i3 = index2; i3 < rows2.length; i3++) {\n            for (let j2 = 0; j2 < cellLength(rows2[0]); j2++) {\n              const row2 = rows2[i3];\n              const current = getCell(row2, j2);\n              const isToReplace = comparator(current.element, cell2.element);\n              if (isToReplace) {\n                if (replacement.isNone()) {\n                  replacement = Optional.some(substitution());\n                }\n                replacement.each((sub) => {\n                  mutateCell(row2, j2, elementnew(sub, true, current.isLocked));\n                });\n              }\n            }\n          }\n        });\n      }\n      return grid2;\n    };\n    const value$1 = (value2) => {\n      const applyHelper = (fn) => fn(value2);\n      const constHelper = constant2(value2);\n      const outputHelper = () => output;\n      const output = {\n        tag: true,\n        inner: value2,\n        fold: (_onError, onValue) => onValue(value2),\n        isValue: always,\n        isError: never,\n        map: (mapper) => Result.value(mapper(value2)),\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(value2);\n        },\n        toOptional: () => Optional.some(value2)\n      };\n      return output;\n    };\n    const error2 = (error3) => {\n      const outputHelper = () => output;\n      const output = {\n        tag: false,\n        inner: error3,\n        fold: (onError, _onValue) => onError(error3),\n        isValue: never,\n        isError: always,\n        map: outputHelper,\n        mapError: (mapper) => Result.error(mapper(error3)),\n        bind: outputHelper,\n        exists: never,\n        forall: always,\n        getOr: identity2,\n        or: identity2,\n        getOrThunk: apply2,\n        orThunk: apply2,\n        getOrDie: die(String(error3)),\n        each: noop,\n        toOptional: Optional.none\n      };\n      return output;\n    };\n    const fromOption = (optional, err) => optional.fold(() => error2(err), value$1);\n    const Result = {\n      value: value$1,\n      error: error2,\n      fromOption\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, row2, generators, isLocked) => {\n      const generator = row2.section === \"colgroup\" ? generators.col : generators.cell;\n      return range$1(amount, (idx) => elementnew(generator(), true, isLocked(idx)));\n    };\n    const rowFill = (grid2, amount, generators, lockedColumns) => {\n      const exampleRow = grid2[grid2.length - 1];\n      return grid2.concat(range$1(amount, () => {\n        const generator = exampleRow.section === \"colgroup\" ? generators.colgroup : generators.row;\n        const row2 = clone(exampleRow, generator, identity2);\n        const elements = generateElements(row2.cells.length, row2, generators, (idx) => has$1(lockedColumns, idx.toString()));\n        return setCells(row2, elements);\n      }));\n    };\n    const colFill = (grid2, amount, generators, startIndex) => map$1(grid2, (row2) => {\n      const newChildren = generateElements(amount, row2, generators, never);\n      return addCells(row2, startIndex, newChildren);\n    });\n    const lockedColFill = (grid2, generators, lockedColumns) => map$1(grid2, (row2) => {\n      return foldl(lockedColumns, (acc, colNum) => {\n        const newChild = generateElements(1, row2, generators, always)[0];\n        return addCell(acc, colNum, newChild);\n      }, row2);\n    });\n    const tailor = (gridA, delta, generators) => {\n      const fillCols = delta.colDelta < 0 ? colFill : identity2;\n      const fillRows = delta.rowDelta < 0 ? rowFill : identity2;\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    const isSpanning = (grid2, row2, col2, comparator) => {\n      const candidate = getCell(grid2[row2], col2);\n      const matching = curry(comparator, candidate.element);\n      const currentRow = grid2[row2];\n      return grid2.length > 1 && cellLength(currentRow) > 1 && (col2 > 0 && matching(getCellElement(currentRow, col2 - 1)) || col2 < currentRow.cells.length - 1 && matching(getCellElement(currentRow, col2 + 1)) || row2 > 0 && matching(getCellElement(grid2[row2 - 1], col2)) || row2 < grid2.length - 1 && matching(getCellElement(grid2[row2 + 1], col2)));\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 r4 = startRow; r4 < endRow; r4++) {\n        let skippedCol = 0;\n        for (let c2 = startCol; c2 < endCol; c2++) {\n          if (lockedColumnObj[c2]) {\n            skippedCol++;\n            continue;\n          }\n          if (isSpanning(gridA, r4, c2, comparator)) {\n            unmerge(gridA, getCellElement(gridA[r4], c2), comparator, generator.cell);\n          }\n          const gridBColIndex = c2 - startCol - skippedCol;\n          const newCell = getCell(gridBRows[r4 - startRow], gridBColIndex);\n          const newCellElm = newCell.element;\n          const replacement = generator.replace(newCellElm);\n          mutateCell(gridA[r4], c2, elementnew(replacement, true, newCell.isLocked));\n        }\n      }\n      return gridA;\n    };\n    const getValidStartAddress = (currentStartAddress, grid2, lockedColumns) => {\n      const gridColLength = cellLength(grid2[0]);\n      const adjustedRowAddress = extractGridDetails(grid2).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, (col2) => col2 !== num)).getOr(gridColLength - 1);\n      return {\n        row: adjustedRowAddress,\n        column: validColAddress\n      };\n    };\n    const getLockedColumnsWithinBounds = (startAddress, rows2, lockedColumns) => filter$2(lockedColumns, (colNum) => colNum >= startAddress.column && colNum <= cellLength(rows2[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 = (index2, gridA, gridB, generator, comparator) => {\n      splitCols(gridA, index2, 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, i3) => {\n        return addCells(gridRow, index2, fittedNewGrid[i3].cells);\n      });\n    };\n    const insertRows = (index2, gridA, gridB, generator, comparator) => {\n      splitRows(gridA, index2, 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, index2),\n        ...fittedNewGrid,\n        ...oldRows.slice(index2, oldRows.length)\n      ];\n    };\n    const cloneRow = (row2, cloneCell, comparator, substitution) => clone(row2, (elem) => substitution(elem, comparator), cloneCell);\n    const insertRowAt = (grid2, index2, example, comparator, substitution) => {\n      const { rows: rows2, cols } = extractGridDetails(grid2);\n      const before2 = rows2.slice(0, index2);\n      const after2 = rows2.slice(index2);\n      const newRow = cloneRow(rows2[example], (ex, c2) => {\n        const withinSpan = index2 > 0 && index2 < rows2.length && comparator(getCellElement(rows2[index2 - 1], c2), getCellElement(rows2[index2], c2));\n        const ret = withinSpan ? getCell(rows2[index2], c2) : elementnew(substitution(ex.element, comparator), true, ex.isLocked);\n        return ret;\n      }, comparator, substitution);\n      return [\n        ...cols,\n        ...before2,\n        newRow,\n        ...after2\n      ];\n    };\n    const getElementFor = (row2, column, section2, withinSpan, example, comparator, substitution) => {\n      if (section2 === \"colgroup\" || !withinSpan) {\n        const cell2 = getCell(row2, example);\n        return elementnew(substitution(cell2.element, comparator), true, false);\n      } else {\n        return getCell(row2, column);\n      }\n    };\n    const insertColumnAt = (grid2, index2, example, comparator, substitution) => map$1(grid2, (row2) => {\n      const withinSpan = index2 > 0 && index2 < cellLength(row2) && comparator(getCellElement(row2, index2 - 1), getCellElement(row2, index2));\n      const sub = getElementFor(row2, index2, row2.section, withinSpan, example, comparator, substitution);\n      return addCell(row2, index2, sub);\n    });\n    const deleteColumnsAt = (grid2, columns2) => bind$2(grid2, (row2) => {\n      const existingCells = row2.cells;\n      const cells2 = foldr(columns2, (acc, column) => column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc, existingCells);\n      return cells2.length > 0 ? [rowcells(row2.element, cells2, row2.section, row2.isNew)] : [];\n    });\n    const deleteRowsAt = (grid2, start, finish) => {\n      const { rows: rows2, cols } = extractGridDetails(grid2);\n      return [\n        ...cols,\n        ...rows2.slice(0, start),\n        ...rows2.slice(finish + 1)\n      ];\n    };\n    const notInStartRow = (grid2, rowIndex, colIndex, comparator) => getCellElement(grid2[rowIndex], colIndex) !== void 0 && (rowIndex > 0 && comparator(getCellElement(grid2[rowIndex - 1], colIndex), getCellElement(grid2[rowIndex], colIndex)));\n    const notInStartColumn = (row2, index2, comparator) => index2 > 0 && comparator(getCellElement(row2, index2 - 1), getCellElement(row2, index2));\n    const isDuplicatedCell = (grid2, rowIndex, colIndex, comparator) => notInStartRow(grid2, rowIndex, colIndex, comparator) || notInStartColumn(grid2[rowIndex], colIndex, comparator);\n    const rowReplacerPredicate = (targetRow, columnHeaders) => {\n      const entireTableIsHeader = forall(columnHeaders, identity2) && isHeaderCells(targetRow.cells);\n      return entireTableIsHeader ? always : (cell2, _rowIndex, colIndex) => {\n        const type2 = name(cell2.element);\n        return !(type2 === \"th\" && columnHeaders[colIndex]);\n      };\n    };\n    const columnReplacePredicate = (targetColumn, rowHeaders) => {\n      const entireTableIsHeader = forall(rowHeaders, identity2) && isHeaderCells(targetColumn);\n      return entireTableIsHeader ? always : (cell2, rowIndex, _colIndex) => {\n        const type2 = name(cell2.element);\n        return !(type2 === \"th\" && rowHeaders[rowIndex]);\n      };\n    };\n    const determineScope = (applyScope, cell2, newScope, isInHeader) => {\n      const hasSpan = (scope) => scope === \"row\" ? hasRowspan(cell2) : hasColspan(cell2);\n      const getScope = (scope) => hasSpan(scope) ? `${scope}group` : scope;\n      if (applyScope) {\n        return isHeaderCell(cell2) ? getScope(newScope) : null;\n      } else if (isInHeader && isHeaderCell(cell2)) {\n        const oppositeScope = newScope === \"row\" ? \"col\" : \"row\";\n        return getScope(oppositeScope);\n      } else {\n        return null;\n      }\n    };\n    const rowScopeGenerator = (applyScope, columnHeaders) => (cell2, rowIndex, columnIndex) => Optional.some(determineScope(applyScope, cell2.element, \"col\", columnHeaders[columnIndex]));\n    const columnScopeGenerator = (applyScope, rowHeaders) => (cell2, rowIndex) => Optional.some(determineScope(applyScope, cell2.element, \"row\", rowHeaders[rowIndex]));\n    const replace2 = (cell2, comparator, substitute) => elementnew(substitute(cell2.element, comparator), true, cell2.isLocked);\n    const replaceIn = (grid2, targets, comparator, substitute, replacer, genScope, shouldReplace) => {\n      const isTarget = (cell2) => {\n        return exists(targets, (target) => {\n          return comparator(cell2.element, target.element);\n        });\n      };\n      return map$1(grid2, (row2, rowIndex) => {\n        return mapCells(row2, (cell2, colIndex) => {\n          if (isTarget(cell2)) {\n            const newCell = shouldReplace(cell2, rowIndex, colIndex) ? replacer(cell2, comparator, substitute) : cell2;\n            genScope(newCell, rowIndex, colIndex).each((scope) => {\n              setOptions(newCell.element, { scope: Optional.from(scope) });\n            });\n            return newCell;\n          } else {\n            return cell2;\n          }\n        });\n      });\n    };\n    const getColumnCells = (rows2, columnIndex, comparator) => bind$2(rows2, (row2, i3) => {\n      return isDuplicatedCell(rows2, i3, columnIndex, comparator) ? [] : [getCell(row2, columnIndex)];\n    });\n    const getRowCells = (rows2, rowIndex, comparator) => {\n      const targetRow = rows2[rowIndex];\n      return bind$2(targetRow.cells, (item, i3) => {\n        return isDuplicatedCell(rows2, rowIndex, i3, comparator) ? [] : [item];\n      });\n    };\n    const replaceColumns = (grid2, indexes, applyScope, comparator, substitution) => {\n      const rows2 = extractGridDetails(grid2).rows;\n      const targets = bind$2(indexes, (index2) => getColumnCells(rows2, index2, comparator));\n      const rowHeaders = map$1(rows2, (row2) => isHeaderCells(row2.cells));\n      const shouldReplaceCell = columnReplacePredicate(targets, rowHeaders);\n      const scopeGenerator = columnScopeGenerator(applyScope, rowHeaders);\n      return replaceIn(grid2, targets, comparator, substitution, replace2, scopeGenerator, shouldReplaceCell);\n    };\n    const replaceRows = (grid2, indexes, section2, applyScope, comparator, substitution, tableSection) => {\n      const { cols, rows: rows2 } = extractGridDetails(grid2);\n      const targetRow = rows2[indexes[0]];\n      const targets = bind$2(indexes, (index2) => getRowCells(rows2, index2, comparator));\n      const columnHeaders = map$1(targetRow.cells, (_cell, index2) => isHeaderCells(getColumnCells(rows2, index2, comparator)));\n      const newRows = [...rows2];\n      each$2(indexes, (index2) => {\n        newRows[index2] = tableSection.transformRow(rows2[index2], section2);\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 = (grid2, details, comparator, substitution) => {\n      const rows2 = extractGridDetails(grid2).rows;\n      const targetCells = map$1(details, (detail2) => getCell(rows2[detail2.row], detail2.column));\n      return replaceIn(grid2, targetCells, comparator, substitution, replace2, Optional.none, always);\n    };\n    const generate = (cases) => {\n      if (!isArray2(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 adt2 = {};\n      each$2(cases, (acase, count) => {\n        const keys$1 = keys2(acase);\n        if (keys$1.length !== 1) {\n          throw new Error(\"one and only one name per case\");\n        }\n        const key2 = keys$1[0];\n        const value2 = acase[key2];\n        if (adt2[key2] !== void 0) {\n          throw new Error(\"duplicate key detected:\" + key2);\n        } else if (key2 === \"cata\") {\n          throw new Error(\"cannot have a case named cata (sorry)\");\n        } else if (!isArray2(value2)) {\n          throw new Error(\"case arguments must be an array\");\n        }\n        constructors.push(key2);\n        adt2[key2] = (...args) => {\n          const argLength = args.length;\n          if (argLength !== value2.length) {\n            throw new Error(\"Wrong number of arguments to case \" + key2 + \". Expected \" + value2.length + \" (\" + value2 + \"), got \" + argLength);\n          }\n          const match3 = (branches) => {\n            const branchKeys = keys2(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[key2].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: match3,\n            log: (label) => {\n              console.log(label, {\n                constructors,\n                constructor: key2,\n                params: args\n              });\n            }\n          };\n        };\n      });\n      return adt2;\n    };\n    const Adt = { generate };\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    const neighbours = (input, index2) => {\n      if (input.length === 0) {\n        return ColumnContext.none();\n      }\n      if (input.length === 1) {\n        return ColumnContext.only(0);\n      }\n      if (index2 === 0) {\n        return ColumnContext.left(0, 1);\n      }\n      if (index2 === input.length - 1) {\n        return ColumnContext.right(index2 - 1, index2);\n      }\n      if (index2 > 0 && index2 < input.length - 1) {\n        return ColumnContext.middle(index2 - 1, index2, index2 + 1);\n      }\n      return ColumnContext.none();\n    };\n    const determine = (input, column, step, tableSize, resize2) => {\n      const result = input.slice(0);\n      const context = neighbours(input, column);\n      const onNone = constant2(map$1(result, constant2(0)));\n      const onOnly = (index2) => tableSize.singleColumnWidth(result[index2], step);\n      const onLeft = (index2, next) => resize2.calcLeftEdgeDeltas(result, index2, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n      const onMiddle = (prev, index2, next) => resize2.calcMiddleDeltas(result, prev, index2, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n      const onRight = (prev, index2) => resize2.calcRightEdgeDeltas(result, prev, index2, step, tableSize.minCellWidth(), tableSize.isRelative);\n      return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n    };\n    const total = (start, end, measures) => {\n      let r4 = 0;\n      for (let i3 = start; i3 < end; i3++) {\n        r4 += measures[i3] !== void 0 ? measures[i3] : 0;\n      }\n      return r4;\n    };\n    const recalculateWidthForCells = (warehouse, widths) => {\n      const all2 = Warehouse.justCells(warehouse);\n      return map$1(all2, (cell2) => {\n        const width2 = total(cell2.column, cell2.column + cell2.colspan, widths);\n        return {\n          element: cell2.element,\n          width: width2,\n          colspan: cell2.colspan\n        };\n      });\n    };\n    const recalculateWidthForColumns = (warehouse, widths) => {\n      const groups = Warehouse.justColumns(warehouse);\n      return map$1(groups, (column, index2) => ({\n        element: column.element,\n        width: widths[index2],\n        colspan: column.colspan\n      }));\n    };\n    const recalculateHeightForCells = (warehouse, heights) => {\n      const all2 = Warehouse.justCells(warehouse);\n      return map$1(all2, (cell2) => {\n        const height2 = total(cell2.row, cell2.row + cell2.rowspan, heights);\n        return {\n          element: cell2.element,\n          height: height2,\n          rowspan: cell2.rowspan\n        };\n      });\n    };\n    const matchRowHeight = (warehouse, heights) => {\n      return map$1(warehouse.all, (row2, i3) => {\n        return {\n          element: row2.element,\n          height: heights[i3]\n        };\n      });\n    };\n    const sumUp = (newSize) => foldr(newSize, (b2, a2) => b2 + a2, 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, (cell2) => {\n        tableSize.setElementWidth(cell2.element, cell2.width);\n      });\n    };\n    const adjustWidth = (table3, delta, index2, resizing, tableSize) => {\n      const warehouse = Warehouse.fromTable(table3);\n      const step = tableSize.getCellDelta(delta);\n      const widths = tableSize.getWidths(warehouse, tableSize);\n      const isLastColumn = index2 === warehouse.grid.columns - 1;\n      const clampedStep = resizing.clampTableDelta(widths, index2, step, tableSize.minCellWidth(), isLastColumn);\n      const deltas = determine(widths, index2, clampedStep, tableSize, resizing);\n      const newWidths = map$1(deltas, (dx, i3) => dx + widths[i3]);\n      recalculateAndApply(warehouse, newWidths, tableSize);\n      resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);\n    };\n    const adjustHeight = (table3, delta, index2, direction) => {\n      const warehouse = Warehouse.fromTable(table3);\n      const heights = getPixelHeights(warehouse, table3, direction);\n      const newHeights = map$1(heights, (dy, i3) => index2 === i3 ? Math.max(delta + dy, minHeight()) : dy);\n      const newCellSizes = recalculateHeightForCells(warehouse, newHeights);\n      const newRowSizes = matchRowHeight(warehouse, newHeights);\n      each$2(newRowSizes, (row2) => {\n        setHeight(row2.element, row2.height);\n      });\n      each$2(newCellSizes, (cell2) => {\n        setHeight(cell2.element, cell2.height);\n      });\n      const total2 = sumUp(newHeights);\n      setHeight(table3, total2);\n    };\n    const adjustAndRedistributeWidths$1 = (_table, list2, details, tableSize, resizeBehaviour) => {\n      const warehouse = Warehouse.generate(list2);\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, list2, _info, tableSize) => {\n      const warehouse = Warehouse.generate(list2);\n      const widths = tableSize.getWidths(warehouse, tableSize);\n      recalculateAndApply(warehouse, widths, tableSize);\n    };\n    const uniqueColumns = (details) => {\n      const uniqueCheck = (rest, detail2) => {\n        const columnExists = exists(rest, (currentDetail) => currentDetail.column === detail2.column);\n        return columnExists ? rest : rest.concat([detail2]);\n      };\n      return foldl(details, uniqueCheck, []).sort((detailA, detailB) => detailA.column - detailB.column);\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 add3 = (element) => {\n        if (isRow$1(element)) {\n          return nuRow({ element });\n        } else {\n          const cell2 = element;\n          const replacement = nuCell(toData(cell2));\n          recent = Optional.some({\n            item: cell2,\n            replacement\n          });\n          return replacement;\n        }\n      };\n      let recent = Optional.none();\n      const getOrInit = (element, comparator) => {\n        return recent.fold(() => {\n          return add3(element);\n        }, (p2) => {\n          return comparator(element, p2.item) ? p2.replacement : add3(element);\n        });\n      };\n      return { getOrInit };\n    };\n    const transform$1 = (tag) => {\n      return (generators) => {\n        const list2 = [];\n        const find2 = (element, comparator) => {\n          return find$1(list2, (x2) => {\n            return comparator(x2.item, element);\n          });\n        };\n        const makeNew = (element) => {\n          const attrs = tag === \"td\" ? { scope: null } : {};\n          const cell2 = generators.replace(element, tag, attrs);\n          list2.push({\n            item: element,\n            sub: cell2\n          });\n          return cell2;\n        };\n        const replaceOrInit = (element, comparator) => {\n          if (isRow$1(element) || isCol(element)) {\n            return element;\n          } else {\n            const cell2 = element;\n            return find2(cell2, comparator).fold(() => {\n              return makeNew(cell2);\n            }, (p2) => {\n              return comparator(element, p2.item) ? p2.sub : makeNew(cell2);\n            });\n          }\n        };\n        return { replaceOrInit };\n      };\n    };\n    const getScopeAttribute = (cell2) => getOpt(cell2, \"scope\").map((attribute2) => attribute2.substr(0, 3));\n    const merging = (generators) => {\n      const unmerge2 = (cell2) => {\n        const scope = getScopeAttribute(cell2);\n        scope.each((attribute2) => set$2(cell2, \"scope\", attribute2));\n        return () => {\n          const raw = generators.cell({\n            element: cell2,\n            colspan: 1,\n            rowspan: 1\n          });\n          remove$5(raw, \"width\");\n          remove$5(cell2, \"width\");\n          scope.each((attribute2) => set$2(raw, \"scope\", attribute2));\n          return raw;\n        };\n      };\n      const merge3 = (cells2) => {\n        const getScopeProperty = () => {\n          const stringAttributes = cat(map$1(cells2, 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, (attribute2) => {\n              return attribute2 !== baseScope && contains$2(scopes, attribute2);\n            });\n            return isMixed ? Optional.none() : Optional.from(baseScope);\n          }\n        };\n        remove$5(cells2[0], \"width\");\n        getScopeProperty().fold(() => remove$7(cells2[0], \"scope\"), (attribute2) => set$2(cells2[0], \"scope\", attribute2 + \"group\"));\n        return constant2(cells2[0]);\n      };\n      return {\n        unmerge: unmerge2,\n        merge: merge3\n      };\n    };\n    const Generators = {\n      modification,\n      transform: transform$1,\n      merging\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 = (universe2, item) => {\n      const tagName = universe2.property().name(item);\n      return contains$2([\n        \"ol\",\n        \"ul\"\n      ], tagName);\n    };\n    const isBlock$1 = (universe2, item) => {\n      const tagName = universe2.property().name(item);\n      return contains$2(blockList, tagName);\n    };\n    const isEmptyTag$1 = (universe2, item) => {\n      return contains$2([\n        \"br\",\n        \"img\",\n        \"hr\",\n        \"input\"\n      ], universe2.property().name(item));\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    const merge2 = (cells2) => {\n      const isBr2 = isTag(\"br\");\n      const advancedBr = (children2) => {\n        return forall(children2, (c2) => {\n          return isBr2(c2) || isText(c2) && get$6(c2).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 = (cell2) => {\n        return last$1(cell2).bind((rightEdge) => {\n          const rightSiblingIsBlock = siblingIsBlock(rightEdge);\n          return parent(rightEdge).map((parent2) => {\n            return rightSiblingIsBlock === true || isListItem(parent2) || isBr2(rightEdge) || isBlock(parent2) && !eq$1(cell2, parent2) ? [] : [SugarElement.fromTag(\"br\")];\n          });\n        }).getOr([]);\n      };\n      const markContent = () => {\n        const content = bind$2(cells2, (cell2) => {\n          const children2 = children$2(cell2);\n          return advancedBr(children2) ? [] : children2.concat(markCell(cell2));\n        });\n        return content.length === 0 ? [SugarElement.fromTag(\"br\")] : content;\n      };\n      const contents = markContent();\n      empty(cells2[0]);\n      append(cells2[0], contents);\n    };\n    const isEditable = (elem) => isEditable$1(elem, true);\n    const prune = (table3) => {\n      const cells2 = cells$1(table3);\n      if (cells2.length === 0) {\n        remove$6(table3);\n      }\n    };\n    const outcome = (grid2, cursor) => ({\n      grid: grid2,\n      cursor\n    });\n    const findEditableCursorPosition = (rows2) => findMap(rows2, (row2) => findMap(row2.cells, (cell2) => {\n      const elem = cell2.element;\n      return someIf(isEditable(elem), elem);\n    }));\n    const elementFromGrid = (grid2, row2, column) => {\n      var _a3, _b;\n      const rows2 = extractGridDetails(grid2).rows;\n      return Optional.from((_b = (_a3 = rows2[row2]) === null || _a3 === void 0 ? void 0 : _a3.cells[column]) === null || _b === void 0 ? void 0 : _b.element).filter(isEditable).orThunk(() => findEditableCursorPosition(rows2));\n    };\n    const bundle = (grid2, row2, column) => {\n      const cursorElement = elementFromGrid(grid2, row2, column);\n      return outcome(grid2, cursorElement);\n    };\n    const uniqueRows = (details) => {\n      const rowCompilation = (rest, detail2) => {\n        const rowExists = exists(rest, (currentDetail) => currentDetail.row === detail2.row);\n        return rowExists ? rest : rest.concat([detail2]);\n      };\n      return foldl(details, rowCompilation, []).sort((detailA, detailB) => detailA.row - detailB.row);\n    };\n    const opInsertRowsBefore = (grid2, details, comparator, genWrappers) => {\n      const targetIndex = details[0].row;\n      const rows2 = uniqueRows(details);\n      const newGrid = foldr(rows2, (acc, row2) => {\n        const newG = insertRowAt(acc.grid, targetIndex, row2.row + acc.delta, comparator, genWrappers.getOrInit);\n        return {\n          grid: newG,\n          delta: acc.delta + 1\n        };\n      }, {\n        grid: grid2,\n        delta: 0\n      }).grid;\n      return bundle(newGrid, targetIndex, details[0].column);\n    };\n    const opInsertRowsAfter = (grid2, details, comparator, genWrappers) => {\n      const rows2 = uniqueRows(details);\n      const target = rows2[rows2.length - 1];\n      const targetIndex = target.row + target.rowspan;\n      const newGrid = foldr(rows2, (newG, row2) => {\n        return insertRowAt(newG, targetIndex, row2.row, comparator, genWrappers.getOrInit);\n      }, grid2);\n      return bundle(newGrid, targetIndex, details[0].column);\n    };\n    const opInsertColumnsBefore = (grid2, extractDetail, comparator, genWrappers) => {\n      const details = extractDetail.details;\n      const columns2 = uniqueColumns(details);\n      const targetIndex = columns2[0].column;\n      const newGrid = foldr(columns2, (acc, col2) => {\n        const newG = insertColumnAt(acc.grid, targetIndex, col2.column + acc.delta, comparator, genWrappers.getOrInit);\n        return {\n          grid: newG,\n          delta: acc.delta + 1\n        };\n      }, {\n        grid: grid2,\n        delta: 0\n      }).grid;\n      return bundle(newGrid, details[0].row, targetIndex);\n    };\n    const opInsertColumnsAfter = (grid2, extractDetail, comparator, genWrappers) => {\n      const details = extractDetail.details;\n      const target = details[details.length - 1];\n      const targetIndex = target.column + target.colspan;\n      const columns2 = uniqueColumns(details);\n      const newGrid = foldr(columns2, (newG, col2) => {\n        return insertColumnAt(newG, targetIndex, col2.column, comparator, genWrappers.getOrInit);\n      }, grid2);\n      return bundle(newGrid, details[0].row, targetIndex);\n    };\n    const opMakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n      const columns2 = uniqueColumns(details);\n      const columnIndexes = map$1(columns2, (detail2) => detail2.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 columns2 = uniqueColumns(details);\n      const columnIndexes = map$1(columns2, (detail2) => detail2.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 = (section2, applyScope) => (initialGrid, details, comparator, genWrappers, tableSection) => {\n      const rows2 = uniqueRows(details);\n      const rowIndexes = map$1(rows2, (detail2) => detail2.row);\n      const newGrid = replaceRows(initialGrid, rowIndexes, section2, 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 = (grid2, extractDetail, _comparator, _genWrappers) => {\n      const columns2 = uniqueColumns(extractDetail.details);\n      const newGrid = deleteColumnsAt(grid2, map$1(columns2, (column) => column.column));\n      const maxColIndex = newGrid.length > 0 ? newGrid[0].cells.length - 1 : 0;\n      return bundle(newGrid, columns2[0].row, Math.min(columns2[0].column, maxColIndex));\n    };\n    const opEraseRows = (grid2, details, _comparator, _genWrappers) => {\n      const rows2 = uniqueRows(details);\n      const newGrid = deleteRowsAt(grid2, rows2[0].row, rows2[rows2.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 = (grid2, mergable2, comparator, genWrappers) => {\n      const cells2 = mergable2.cells;\n      merge2(cells2);\n      const newGrid = merge$2(grid2, mergable2.bounds, comparator, genWrappers.merge(cells2));\n      return outcome(newGrid, Optional.from(cells2[0]));\n    };\n    const opUnmergeCells = (grid2, unmergable2, comparator, genWrappers) => {\n      const unmerge$1 = (b2, cell2) => unmerge(b2, cell2, comparator, genWrappers.unmerge(cell2));\n      const newGrid = foldr(unmergable2, unmerge$1, grid2);\n      return outcome(newGrid, Optional.from(unmergable2[0]));\n    };\n    const opPasteCells = (grid2, pasteDetails, comparator, _genWrappers) => {\n      const gridify = (table3, generators) => {\n        const wh = Warehouse.fromTable(table3);\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, grid2, gridB, pasteDetails.generators, comparator);\n      return mergedGrid.fold(() => outcome(grid2, Optional.some(pasteDetails.element)), (newGrid) => {\n        return bundle(newGrid, pasteDetails.row, pasteDetails.column);\n      });\n    };\n    const gridifyRows = (rows2, generators, context) => {\n      const pasteDetails = fromPastedRows(rows2, context.section);\n      const wh = Warehouse.generate(pasteDetails);\n      return toGrid(wh, generators, true);\n    };\n    const opPasteColsBefore = (grid2, pasteDetails, comparator, _genWrappers) => {\n      const rows2 = extractGridDetails(grid2).rows;\n      const index2 = pasteDetails.cells[0].column;\n      const context = rows2[pasteDetails.cells[0].row];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertCols(index2, grid2, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opPasteColsAfter = (grid2, pasteDetails, comparator, _genWrappers) => {\n      const rows2 = extractGridDetails(grid2).rows;\n      const index2 = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan;\n      const context = rows2[pasteDetails.cells[0].row];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertCols(index2, grid2, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opPasteRowsBefore = (grid2, pasteDetails, comparator, _genWrappers) => {\n      const rows2 = extractGridDetails(grid2).rows;\n      const index2 = pasteDetails.cells[0].row;\n      const context = rows2[index2];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertRows(index2, grid2, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opPasteRowsAfter = (grid2, pasteDetails, comparator, _genWrappers) => {\n      const rows2 = extractGridDetails(grid2).rows;\n      const index2 = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan;\n      const context = rows2[pasteDetails.cells[0].row];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertRows(index2, grid2, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opGetColumnsType = (table3, target) => {\n      const house = Warehouse.fromTable(table3);\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, (row2) => filter$2(row2.cells, (cell2) => cell2.column >= minColRange && cell2.column < maxColRange)));\n        return findCommonCellType(selectedColumnCells);\n      }).getOr(\"\");\n    };\n    const opGetCellsType = (table3, target) => {\n      const house = Warehouse.fromTable(table3);\n      const details = onCells(house, target);\n      return details.bind(findCommonCellType).getOr(\"\");\n    };\n    const opGetRowsType = (table3, target) => {\n      const house = Warehouse.fromTable(table3);\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 = (table3, list2, details, behaviours) => adjustWidthTo(table3, list2, details, behaviours.sizing);\n    const adjustAndRedistributeWidths = (table3, list2, details, behaviours) => adjustAndRedistributeWidths$1(table3, list2, details, behaviours.sizing, behaviours.resize);\n    const firstColumnIsLocked = (_warehouse, details) => exists(details, (detail2) => detail2.column === 0 && detail2.isLocked);\n    const lastColumnIsLocked = (warehouse, details) => exists(details, (detail2) => detail2.column + detail2.colspan >= warehouse.grid.columns && detail2.isLocked);\n    const getColumnsWidth = (warehouse, details) => {\n      const columns$12 = columns(warehouse);\n      const uniqueCols = uniqueColumns(details);\n      return foldl(uniqueCols, (acc, detail2) => {\n        const column = columns$12[detail2.column];\n        const colWidth = column.map(getOuter$2).getOr(0);\n        return acc + colWidth;\n      }, 0);\n    };\n    const insertColumnsExtractor = (before2) => (warehouse, target) => onCells(warehouse, target).filter((details) => {\n      const checkLocked = before2 ? 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 = (before2) => (warehouse, target) => onPasteByEditor(warehouse, target).filter((details) => {\n      const checkLocked = before2 ? 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    const fireNewRow = (editor, row2) => editor.dispatch(\"NewRow\", { node: row2 });\n    const fireNewCell = (editor, cell2) => editor.dispatch(\"NewCell\", { node: cell2 });\n    const fireTableModified = (editor, table3, data) => {\n      editor.dispatch(\"TableModified\", {\n        ...data,\n        table: table3\n      });\n    };\n    const fireTableSelectionChange = (editor, cells2, start, finish, otherCells) => {\n      editor.dispatch(\"TableSelectionChange\", {\n        cells: cells2,\n        start,\n        finish,\n        otherCells\n      });\n    };\n    const fireTableSelectionClear = (editor) => {\n      editor.dispatch(\"TableSelectionClear\");\n    };\n    const fireObjectResizeStart = (editor, target, width2, height2, origin) => {\n      editor.dispatch(\"ObjectResizeStart\", {\n        target,\n        width: width2,\n        height: height2,\n        origin\n      });\n    };\n    const fireObjectResized = (editor, target, width2, height2, origin) => {\n      editor.dispatch(\"ObjectResized\", {\n        target,\n        width: width2,\n        height: height2,\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    const option = (name2) => (editor) => editor.options.get(name2);\n    const determineDefaultTableStyles = (editor, defaultStyles) => {\n      var _a3;\n      if (isTablePixelsForced(editor)) {\n        const dom2 = editor.dom;\n        const parentBlock = (_a3 = dom2.getParent(editor.selection.getStart(), dom2.isBlock)) !== null && _a3 !== void 0 ? _a3 : editor.getBody();\n        const contentWidth = getInner(SugarElement.fromDom(parentBlock));\n        return {\n          ...defaultStyles,\n          width: contentWidth + \"px\"\n        };\n      } else if (isTableResponsiveForced(editor)) {\n        return filter$1(defaultStyles, (_value, key2) => key2 !== \"width\");\n      } else {\n        return defaultStyles;\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: (value2) => {\n          const valid = contains$2([\n            \"section\",\n            \"cells\",\n            \"sectionCells\",\n            \"auto\"\n          ], value2);\n          return valid ? {\n            value: value2,\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: {\n          \"border-collapse\": \"collapse\",\n          \"width\": \"100%\"\n        }\n      });\n      registerOption(\"table_column_resizing\", {\n        processor: (value2) => {\n          const valid = contains$2([\n            \"preservetable\",\n            \"resizetable\"\n          ], value2);\n          return valid ? {\n            value: value2,\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    };\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 getTableDefaultAttributes = option(\"table_default_attributes\");\n    const getTableDefaultStyles = (editor) => {\n      const options = editor.options;\n      const defaultStyles = options.get(\"table_default_styles\");\n      return options.isSet(\"table_default_styles\") ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles);\n    };\n    const tableUseColumnGroup = option(\"table_use_colgroups\");\n    const get$5 = (editor, table3) => {\n      if (isTablePercentagesForced(editor)) {\n        return TableSize.percentageSize(table3);\n      } else if (isTablePixelsForced(editor)) {\n        return TableSize.pixelSize(table3);\n      } else {\n        return TableSize.getTableSize(table3);\n      }\n    };\n    const TableActions = (editor, resizeHandler, cellSelectionHandler) => {\n      const isTableBody = (editor2) => name(getBody(editor2)) === \"table\";\n      const lastRowGuard = (table3) => isTableBody(editor) === false || getGridSize(table3).rows > 1;\n      const lastColumnGuard = (table3) => isTableBody(editor) === false || getGridSize(table3).columns > 1;\n      const cloneFormats2 = getTableCloneElements(editor);\n      const colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve;\n      const getTableSectionType2 = (table3) => {\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(table3, \"section\");\n        }\n      };\n      const setSelectionFromAction = (table3, result) => result.cursor.fold(() => {\n        const cells2 = cells$1(table3);\n        return head(cells2).filter(inBody).map((firstCell) => {\n          cellSelectionHandler.clearSelectedCells(table3.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      }, (cell2) => {\n        const des = freefallRtl(cell2);\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(table3.dom);\n        return Optional.some(rng);\n      });\n      const execute = (operation, guard, mutate2, effect) => (table3, target, noEvents = false) => {\n        removeDataStyle(table3);\n        const doc = SugarElement.fromDom(editor.getDoc());\n        const generators = cellOperations(mutate2, doc, cloneFormats2);\n        const behaviours = {\n          sizing: get$5(editor, table3),\n          resize: isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable(),\n          section: getTableSectionType2(table3)\n        };\n        return guard(table3) ? operation(table3, target, generators, behaviours).bind((result) => {\n          resizeHandler.refresh(table3.dom);\n          each$2(result.newRows, (row2) => {\n            fireNewRow(editor, row2.dom);\n          });\n          each$2(result.newCells, (cell2) => {\n            fireNewCell(editor, cell2.dom);\n          });\n          const range2 = setSelectionFromAction(table3, result);\n          if (inBody(table3)) {\n            removeDataStyle(table3);\n            if (!noEvents) {\n              fireTableModified(editor, table3.dom, effect);\n            }\n          }\n          return range2.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    const constrainSpan = (element, property, value2) => {\n      const currentColspan = getAttrValue(element, property, 1);\n      if (value2 === 1 || currentColspan <= 1) {\n        remove$7(element, property);\n      } else {\n        set$2(element, property, Math.min(value2, currentColspan));\n      }\n    };\n    const generateColGroup = (house, minColRange, maxColRange) => {\n      if (Warehouse.hasColumns(house)) {\n        const colsToCopy = filter$2(Warehouse.justColumns(house), (col2) => col2.column >= minColRange && col2.column < maxColRange);\n        const copiedCols = map$1(colsToCopy, (c2) => {\n          const clonedCol = deep(c2.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, (row2) => {\n      const cellsToCopy = filter$2(row2.cells, (cell2) => cell2.column >= minColRange && cell2.column < maxColRange);\n      const copiedCells = map$1(cellsToCopy, (cell2) => {\n        const clonedCell = deep(cell2.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 = (table3, target) => {\n      const house = Warehouse.fromTable(table3);\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    const copyRows = (table3, target, generators) => {\n      const warehouse = Warehouse.fromTable(table3);\n      const details = onCells(warehouse, target);\n      return details.bind((selectedCells) => {\n        const grid2 = toGrid(warehouse, generators, false);\n        const rows2 = extractGridDetails(grid2).rows;\n        const slicedGrid = rows2.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan);\n        const filteredGrid = bind$2(slicedGrid, (row2) => {\n          const newCells = filter$2(row2.cells, (cell2) => !cell2.isLocked);\n          return newCells.length > 0 ? [{\n            ...row2,\n            cells: newCells\n          }] : [];\n        });\n        const slicedDetails = toDetailList(filteredGrid);\n        return someIf(slicedDetails.length > 0, slicedDetails);\n      }).map((slicedDetails) => copy(slicedDetails));\n    };\n    const adt$5 = Adt.generate([\n      { invalid: [\"raw\"] },\n      { pixels: [\"value\"] },\n      { percent: [\"value\"] }\n    ]);\n    const validateFor = (suffix, type2, value2) => {\n      const rawAmount = value2.substring(0, value2.length - suffix.length);\n      const amount = parseFloat(rawAmount);\n      return rawAmount === amount.toString() ? type2(amount) : adt$5.invalid(value2);\n    };\n    const from = (value2) => {\n      if (endsWith(value2, \"%\")) {\n        return validateFor(\"%\", adt$5.percent, value2);\n      }\n      if (endsWith(value2, \"px\")) {\n        return validateFor(\"px\", adt$5.pixels, value2);\n      }\n      return adt$5.invalid(value2);\n    };\n    const Size = {\n      ...adt$5,\n      from\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, columns2) => {\n      const f2 = newWidthType.fold(() => constant2(\"\"), (pixels) => {\n        const num = pixels / columns2;\n        return constant2(num + \"px\");\n      }, () => {\n        const num = 100 / columns2;\n        return constant2(num + \"%\");\n      });\n      return range$1(columns2, f2);\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, (s2) => {\n        return s2 === \"0px\";\n      }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth);\n      return normalize3(floats);\n    };\n    const sum = (values2, fallback2) => {\n      if (values2.length === 0) {\n        return fallback2;\n      }\n      return foldr(values2, (rest, v2) => {\n        return Size.from(v2).fold(constant2(0), identity2, identity2) + 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 = (value2, amount) => {\n      return Size.from(value2).fold(constant2(value2), (px) => {\n        return px + amount + \"px\";\n      }, (pc) => {\n        return pc + amount + \"%\";\n      });\n    };\n    const normalize3 = (values2) => {\n      if (values2.length === 0) {\n        return values2;\n      }\n      const scan2 = foldr(values2, (rest, value2) => {\n        const info = Size.from(value2).fold(() => ({\n          value: value2,\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 r4 = scan2.output;\n      return r4.slice(0, r4.length - 1).concat([add$3(r4[r4.length - 1], Math.round(scan2.remainder))]);\n    };\n    const validate = Size.from;\n    const redistributeToW = (newWidths, cells2, unit) => {\n      each$2(cells2, (cell2) => {\n        const widths = newWidths.slice(cell2.column, cell2.colspan + cell2.column);\n        const w = sum(widths, minWidth());\n        set$1(cell2.element, \"width\", w + unit);\n      });\n    };\n    const redistributeToColumns = (newWidths, columns2, unit) => {\n      each$2(columns2, (column, index2) => {\n        const width2 = sum([newWidths[index2]], minWidth());\n        set$1(column.element, \"width\", width2 + unit);\n      });\n    };\n    const redistributeToH = (newHeights, rows2, cells2, unit) => {\n      each$2(cells2, (cell2) => {\n        const heights = newHeights.slice(cell2.row, cell2.rowspan + cell2.row);\n        const h2 = sum(heights, minHeight());\n        set$1(cell2.element, \"height\", h2 + unit);\n      });\n      each$2(rows2, (row2, i3) => {\n        set$1(row2.element, \"height\", newHeights[i3]);\n      });\n    };\n    const getUnit = (newSize) => {\n      return validate(newSize).fold(constant2(\"px\"), constant2(\"px\"), constant2(\"%\"));\n    };\n    const redistribute = (table3, optWidth, optHeight) => {\n      const warehouse = Warehouse.fromTable(table3);\n      const rows2 = warehouse.all;\n      const cells2 = Warehouse.justCells(warehouse);\n      const columns2 = Warehouse.justColumns(warehouse);\n      optWidth.each((newWidth) => {\n        const widthUnit = getUnit(newWidth);\n        const totalWidth = get$9(table3);\n        const oldWidths = getRawWidths(warehouse, table3);\n        const nuWidths = redistribute$1(oldWidths, totalWidth, newWidth);\n        if (Warehouse.hasColumns(warehouse)) {\n          redistributeToColumns(nuWidths, columns2, widthUnit);\n        } else {\n          redistributeToW(nuWidths, cells2, widthUnit);\n        }\n        set$1(table3, \"width\", newWidth);\n      });\n      optHeight.each((newHeight) => {\n        const hUnit = getUnit(newHeight);\n        const totalHeight = get$8(table3);\n        const oldHeights = getRawHeights(warehouse, table3, height);\n        const nuHeights = redistribute$1(oldHeights, totalHeight, newHeight);\n        redistributeToH(nuHeights, rows2, cells2, hUnit);\n        set$1(table3, \"height\", newHeight);\n      });\n    };\n    const isPercentSizing = isPercentSizing$1;\n    const isPixelSizing = isPixelSizing$1;\n    const isNoneSizing = isNoneSizing$1;\n    const cleanupLegacyAttributes = (element) => {\n      remove$7(element, \"width\");\n    };\n    const convertToPercentSize = (table3) => {\n      const newWidth = getPercentTableWidth(table3);\n      redistribute(table3, Optional.some(newWidth), Optional.none());\n      cleanupLegacyAttributes(table3);\n    };\n    const convertToPixelSize = (table3) => {\n      const newWidth = getPixelTableWidth(table3);\n      redistribute(table3, Optional.some(newWidth), Optional.none());\n      cleanupLegacyAttributes(table3);\n    };\n    const convertToNoneSize = (table3) => {\n      remove$5(table3, \"width\");\n      const columns2 = columns$1(table3);\n      const rowElements = columns2.length > 0 ? columns2 : cells$1(table3);\n      each$2(rowElements, (cell2) => {\n        remove$5(cell2, \"width\");\n        cleanupLegacyAttributes(cell2);\n      });\n      cleanupLegacyAttributes(table3);\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 = (columns2, rowHeaders, columnHeaders, rowIndex) => {\n      const tr = SugarElement.fromTag(\"tr\");\n      for (let j2 = 0; j2 < columns2; j2++) {\n        const td = rowIndex < rowHeaders || j2 < columnHeaders ? tableHeaderCell() : tableCell();\n        if (j2 < 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 = (columns2) => {\n      const columnGroup = SugarElement.fromTag(\"colgroup\");\n      range$1(columns2, () => append$1(columnGroup, tableColumn()));\n      return columnGroup;\n    };\n    const createRows = (rows2, columns2, rowHeaders, columnHeaders) => range$1(rows2, (r4) => createRow(columns2, rowHeaders, columnHeaders, r4));\n    const render = (rows2, columns2, rowHeaders, columnHeaders, headerType, renderOpts = DefaultRenderOptions) => {\n      const table3 = SugarElement.fromTag(\"table\");\n      const rowHeadersGoInThead = headerType !== \"cells\";\n      setAll(table3, renderOpts.styles);\n      setAll$1(table3, renderOpts.attributes);\n      if (renderOpts.colGroups) {\n        append$1(table3, createGroupRow(columns2));\n      }\n      const actualRowHeaders = Math.min(rows2, rowHeaders);\n      if (rowHeadersGoInThead && rowHeaders > 0) {\n        const thead = SugarElement.fromTag(\"thead\");\n        append$1(table3, thead);\n        const theadRowHeaders = headerType === \"sectionCells\" ? actualRowHeaders : 0;\n        const theadRows = createRows(rowHeaders, columns2, theadRowHeaders, columnHeaders);\n        append(thead, theadRows);\n      }\n      const tbody = SugarElement.fromTag(\"tbody\");\n      append$1(table3, tbody);\n      const numRows = rowHeadersGoInThead ? rows2 - actualRowHeaders : rows2;\n      const numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders;\n      const tbodyRows = createRows(numRows, columns2, numRowHeaders, columnHeaders);\n      append(tbody, tbodyRows);\n      return table3;\n    };\n    const get$4 = (element) => element.dom.innerHTML;\n    const getOuter = (element) => {\n      const container = SugarElement.fromTag(\"div\");\n      const clone2 = SugarElement.fromDom(element.dom.cloneNode(true));\n      append$1(container, clone2);\n      return get$4(container);\n    };\n    const placeCaretInCell = (editor, cell2) => {\n      editor.selection.select(cell2.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, table3) => {\n      each$2(descendants(table3, \"tr\"), (row2) => {\n        fireNewRow(editor, row2.dom);\n        each$2(descendants(row2, \"th,td\"), (cell2) => {\n          fireNewCell(editor, cell2.dom);\n        });\n      });\n    };\n    const isPercentage = (width2) => isString2(width2) && width2.indexOf(\"%\") !== -1;\n    const insert = (editor, columns2, rows2, 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 table3 = render(rows2, columns2, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n        set$2(table3, \"data-mce-id\", \"__mce\");\n        const html = getOuter(table3);\n        editor.insertContent(html);\n        editor.addVisual();\n      });\n      return descendant(getBody(editor), 'table[data-mce-id=\"__mce\"]').map((table3) => {\n        if (isTablePixelsForced(editor)) {\n          convertToPixelSize(table3);\n        } else if (isTableResponsiveForced(editor)) {\n          convertToNoneSize(table3);\n        } else if (isTablePercentagesForced(editor) || isPercentage(defaultStyles.width)) {\n          convertToPercentSize(table3);\n        }\n        removeDataStyle(table3);\n        remove$7(table3, \"data-mce-id\");\n        fireEvents(editor, table3);\n        selectFirstCellInTable(editor, table3);\n        return table3.dom;\n      }).getOr(null);\n    };\n    const insertTable = (editor, rows2, columns2, options = {}) => {\n      const checkInput = (val) => isNumber2(val) && val > 0;\n      if (checkInput(rows2) && checkInput(columns2)) {\n        const headerRows = options.headerRows || 0;\n        const headerColumns = options.headerColumns || 0;\n        return insert(editor, columns2, rows2, 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    var global2 = tinymce.util.Tools.resolve(\"tinymce.FakeClipboard\");\n    const tableTypeBase = \"x-tinymce/dom-table-\";\n    const tableTypeRow = tableTypeBase + \"rows\";\n    const tableTypeColumn = tableTypeBase + \"columns\";\n    const setData = (items) => {\n      const fakeClipboardItem = global2.FakeClipboardItem(items);\n      global2.write([fakeClipboardItem]);\n    };\n    const getData = (type2) => {\n      var _a3;\n      const items = (_a3 = global2.read()) !== null && _a3 !== void 0 ? _a3 : [];\n      return findMap(items, (item) => Optional.from(item.getType(type2)));\n    };\n    const clearData = (type2) => {\n      if (getData(type2).isSome()) {\n        global2.clear();\n      }\n    };\n    const setRows = (rowsOpt) => {\n      rowsOpt.fold(clearRows, (rows2) => setData({ [tableTypeRow]: rows2 }));\n    };\n    const getRows = () => getData(tableTypeRow);\n    const clearRows = () => clearData(tableTypeRow);\n    const setColumns = (columnsOpt) => {\n      columnsOpt.fold(clearColumns, (columns2) => setData({ [tableTypeColumn]: columns2 }));\n    };\n    const getColumns = () => getData(tableTypeColumn);\n    const clearColumns = () => clearData(tableTypeColumn);\n    const getSelectionStartCellOrCaption = (editor) => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor));\n    const getSelectionStartCell = (editor) => getSelectionCell(getSelectionStart(editor), getIsRoot(editor));\n    const registerCommands = (editor, actions) => {\n      const isRoot = getIsRoot(editor);\n      const eraseTable = () => getSelectionStartCellOrCaption(editor).each((cellOrCaption) => {\n        table2(cellOrCaption, isRoot).filter(not(isRoot)).each((table3) => {\n          const cursor = SugarElement.fromText(\"\");\n          after$5(table3, cursor);\n          remove$6(table3);\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          table2(cellOrCaption, isRoot).each((table3) => {\n            if (sizing === \"relative\" && !isPercentSizing(table3)) {\n              convertToPercentSize(table3);\n            } else if (sizing === \"fixed\" && !isPixelSizing(table3)) {\n              convertToPixelSize(table3);\n            } else if (sizing === \"responsive\" && !isNoneSizing(table3)) {\n              convertToNoneSize(table3);\n            }\n            removeDataStyle(table3);\n            fireTableModified(editor, table3.dom, structureModified);\n          });\n        }\n      });\n      const getTableFromCell = (cell2) => table2(cell2, isRoot);\n      const performActionOnSelection = (action) => getSelectionStartCell(editor).bind((cell2) => getTableFromCell(cell2).map((table3) => action(table3, cell2)));\n      const toggleTableClass = (_ui, clazz) => {\n        performActionOnSelection((table3) => {\n          editor.formatter.toggle(\"tableclass\", { value: clazz }, table3.dom);\n          fireTableModified(editor, table3.dom, styleModified);\n        });\n      };\n      const toggleTableCellClass = (_ui, clazz) => {\n        performActionOnSelection((table3) => {\n          const selectedCells = getCellsFromSelection(editor);\n          const allHaveClass = forall(selectedCells, (cell2) => editor.formatter.match(\"tablecellclass\", { value: clazz }, cell2.dom));\n          const formatterAction = allHaveClass ? editor.formatter.remove : editor.formatter.apply;\n          each$2(selectedCells, (cell2) => formatterAction(\"tablecellclass\", { value: clazz }, cell2.dom));\n          fireTableModified(editor, table3.dom, styleModified);\n        });\n      };\n      const toggleCaption = () => {\n        getSelectionStartCellOrCaption(editor).each((cellOrCaption) => {\n          table2(cellOrCaption, isRoot).each((table3) => {\n            child(table3, \"caption\").fold(() => {\n              const caption = SugarElement.fromTag(\"caption\");\n              append$1(caption, SugarElement.fromText(\"Caption\"));\n              appendAt(table3, caption, 0);\n              editor.selection.setCursorLocation(caption.dom, 0);\n            }, (caption) => {\n              if (isTag(\"caption\")(cellOrCaption)) {\n                one(\"td\", table3).each((td) => editor.selection.setCursorLocation(td.dom, 0));\n              }\n              remove$6(caption);\n            });\n            fireTableModified(editor, table3.dom, structureModified);\n          });\n        });\n      };\n      const postExecute = (_data) => {\n        editor.focus();\n      };\n      const actOnSelection = (execute, noEvents = false) => performActionOnSelection((table3, startCell) => {\n        const targets = forMenu(getCellsFromSelection(editor), table3, startCell);\n        execute(table3, targets, noEvents).each(postExecute);\n      });\n      const copyRowSelection = () => performActionOnSelection((table3, startCell) => {\n        const targets = forMenu(getCellsFromSelection(editor), table3, startCell);\n        const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none());\n        return copyRows(table3, targets, generators);\n      });\n      const copyColSelection = () => performActionOnSelection((table3, startCell) => {\n        const targets = forMenu(getCellsFromSelection(editor), table3, startCell);\n        return copyCols(table3, targets);\n      });\n      const pasteOnSelection = (execute, getRows2) => getRows2().each((rows2) => {\n        const clonedRows = map$1(rows2, (row2) => deep(row2));\n        performActionOnSelection((table3, startCell) => {\n          const generators = paste$1(SugarElement.fromDom(editor.getDoc()));\n          const targets = pasteRows(getCellsFromSelection(editor), startCell, clonedRows, generators);\n          execute(table3, targets).each(postExecute);\n        });\n      });\n      const actOnType = (getAction) => (_ui, args) => get$c(args, \"type\").each((type2) => {\n        actOnSelection(getAction(type2), 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((selection2) => {\n          setColumns(selection2);\n          actOnSelection(actions.deleteColumn);\n        }),\n        mceTableCutRow: () => copyRowSelection().each((selection2) => {\n          setRows(selection2);\n          actOnSelection(actions.deleteRow);\n        }),\n        mceTableCopyCol: () => copyColSelection().each((selection2) => setColumns(selection2)),\n        mceTableCopyRow: () => copyRowSelection().each((selection2) => setRows(selection2)),\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((type2) => type2 === \"th\" ? actions.makeCellsHeader : actions.unmakeCellsHeader),\n        mceTableColType: actOnType((type2) => type2 === \"th\" ? actions.makeColumnsHeader : actions.unmakeColumnsHeader),\n        mceTableRowType: actOnType((type2) => {\n          switch (type2) {\n            case \"header\":\n              return actions.makeRowsHeader;\n            case \"footer\":\n              return actions.makeRowsFooter;\n            default:\n              return actions.makeRowsBody;\n          }\n        })\n      }, (func, name2) => editor.addCommand(name2, 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 (!isObject2(args)) {\n          return;\n        }\n        const cells2 = getCellsFromSelection(editor);\n        if (cells2.length === 0) {\n          return;\n        }\n        const validArgs = filter$1(args, (value2, style) => editor.formatter.has(getFormatName(style)) && isString2(value2));\n        if (isEmpty2(validArgs)) {\n          return;\n        }\n        each$1(validArgs, (value2, style) => {\n          const formatName = getFormatName(style);\n          each$2(cells2, (cell2) => {\n            if (value2 === \"\") {\n              editor.formatter.remove(formatName, { value: null }, cell2.dom, true);\n            } else {\n              editor.formatter.apply(formatName, { value: value2 }, cell2.dom);\n            }\n          });\n        });\n        getTableFromCell(cells2[0]).each((table3) => fireTableModified(editor, table3.dom, styleModified));\n      });\n    };\n    const registerQueryCommands = (editor, actions) => {\n      const isRoot = getIsRoot(editor);\n      const lookupOnSelection = (action) => getSelectionCell(getSelectionStart(editor)).bind((cell2) => table2(cell2, isRoot).map((table3) => {\n        const targets = forMenu(getCellsFromSelection(editor), table3, cell2);\n        return action(table3, targets);\n      })).getOr(\"\");\n      each$1({\n        mceTableRowType: () => lookupOnSelection(actions.getTableRowType),\n        mceTableCellType: () => lookupOnSelection(actions.getTableCellType),\n        mceTableColType: () => lookupOnSelection(actions.getTableColType)\n      }, (func, name2) => editor.addQueryValueHandler(name2, func));\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(identity2, identity2, identity2);\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    const create$4 = (selection2, kill) => ({\n      selection: selection2,\n      kill\n    });\n    const Response = { create: create$4 };\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((e2) => {\n        rng.setStartBefore(e2.dom);\n      }, (e2, o2) => {\n        rng.setStart(e2.dom, o2);\n      }, (e2) => {\n        rng.setStartAfter(e2.dom);\n      });\n    };\n    const setFinish = (rng, situ) => {\n      situ.fold((e2) => {\n        rng.setEndBefore(e2.dom);\n      }, (e2, o2) => {\n        rng.setEnd(e2.dom, o2);\n      }, (e2) => {\n        rng.setEndAfter(e2.dom);\n      });\n    };\n    const relativeToNative = (win, startSitu, finishSitu) => {\n      const range2 = win.document.createRange();\n      setStart(range2, startSitu);\n      setFinish(range2, finishSitu);\n      return range2;\n    };\n    const exactToNative = (win, start, soffset, finish, foffset) => {\n      const rng = win.document.createRange();\n      rng.setStart(start.dom, soffset);\n      rng.setEnd(finish.dom, foffset);\n      return rng;\n    };\n    const toRect = (rect) => ({\n      left: rect.left,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      width: rect.width,\n      height: rect.height\n    });\n    const getFirstRect$1 = (rng) => {\n      const rects = rng.getClientRects();\n      const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n      return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n    };\n    const 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, type2, range2) => type2(SugarElement.fromDom(range2.startContainer), range2.startOffset, SugarElement.fromDom(range2.endContainer), range2.endOffset);\n    const getRanges = (win, selection2) => selection2.match({\n      domRange: (rng) => {\n        return {\n          ltr: constant2(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, selection2) => {\n      const ranges = getRanges(win, selection2);\n      return doDiagnose(win, ranges);\n    };\n    const asLtrRange = (win, selection2) => {\n      const diagnosis = diagnose(win, selection2);\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    const create$3 = (start, soffset, finish, foffset) => ({\n      start,\n      soffset,\n      finish,\n      foffset\n    });\n    const SimRange = { create: create$3 };\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    const convertToRange = (win, selection2) => {\n      const rng = asLtrRange(win, selection2);\n      return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n    };\n    const makeSitus = Situs.create;\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((s2) => {\n          return closest$1(finish, \"td,th\", isRoot).bind((f2) => {\n            return detect(container, isRoot, s2, f2, 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 = (rows2, columns2, 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, rows2, columns2, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection);\n    };\n    const traverse2 = (item, mode) => ({\n      item,\n      mode\n    });\n    const backtrack = (universe2, item, _direction, transition = sidestep) => {\n      return universe2.property().parent(item).map((p2) => {\n        return traverse2(p2, transition);\n      });\n    };\n    const sidestep = (universe2, item, direction, transition = advance) => {\n      return direction.sibling(universe2, item).map((p2) => {\n        return traverse2(p2, transition);\n      });\n    };\n    const advance = (universe2, item, direction, transition = advance) => {\n      const children2 = universe2.property().children(item);\n      const result = direction.first(children2);\n      return result.map((r4) => {\n        return traverse2(r4, 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 = (universe2, 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(universe2, item, direction, rule.next).orThunk(() => {\n          return rule.fallback.bind((fb) => {\n            return go(universe2, item, fb, direction);\n          });\n        });\n      });\n    };\n    const left$1 = () => {\n      const sibling = (universe2, item) => {\n        return universe2.query().prevSibling(item);\n      };\n      const first2 = (children2) => {\n        return children2.length > 0 ? Optional.some(children2[children2.length - 1]) : Optional.none();\n      };\n      return {\n        sibling,\n        first: first2\n      };\n    };\n    const right$1 = () => {\n      const sibling = (universe2, item) => {\n        return universe2.query().nextSibling(item);\n      };\n      const first2 = (children2) => {\n        return children2.length > 0 ? Optional.some(children2[0]) : Optional.none();\n      };\n      return {\n        sibling,\n        first: first2\n      };\n    };\n    const Walkers = {\n      left: left$1,\n      right: right$1\n    };\n    const hone = (universe2, item, predicate, mode, direction, isRoot) => {\n      const next = go(universe2, item, mode, direction);\n      return next.bind((n3) => {\n        if (isRoot(n3.item)) {\n          return Optional.none();\n        } else {\n          return predicate(n3.item) ? Optional.some(n3.item) : hone(universe2, n3.item, predicate, n3.mode, direction, isRoot);\n        }\n      });\n    };\n    const left = (universe2, item, predicate, isRoot) => {\n      return hone(universe2, item, predicate, sidestep, Walkers.left(), isRoot);\n    };\n    const right = (universe2, item, predicate, isRoot) => {\n      return hone(universe2, item, predicate, sidestep, Walkers.right(), isRoot);\n    };\n    const isLeaf = (universe2) => (element) => universe2.property().children(element).length === 0;\n    const before$1 = (universe2, item, isRoot) => {\n      return seekLeft$1(universe2, item, isLeaf(universe2), isRoot);\n    };\n    const after$2 = (universe2, item, isRoot) => {\n      return seekRight$1(universe2, item, isLeaf(universe2), isRoot);\n    };\n    const seekLeft$1 = left;\n    const seekRight$1 = right;\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    const ancestor = (scope, predicate, isRoot) => ancestor$2(scope, predicate, isRoot).isSome();\n    const adt$2 = Adt.generate([\n      { none: [\"message\"] },\n      { success: [] },\n      { failedUp: [\"cell\"] },\n      { failedDown: [\"cell\"] }\n    ]);\n    const isOverlapping = (bridge, before2, after2) => {\n      const beforeBounds = bridge.getRect(before2);\n      const afterBounds = bridge.getRect(after2);\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, before2, beforeOffset, after2, afterOffset, failure, isRoot) => {\n      return closest$1(after2, \"td,th\", isRoot).bind((afterCell) => {\n        return closest$1(before2, \"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(after2, 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    const inParent = (parent2, children2, element, index2) => ({\n      parent: parent2,\n      children: children2,\n      element,\n      index: index2\n    });\n    const indexInParent = (element) => parent(element).bind((parent2) => {\n      const children2 = children$2(parent2);\n      return indexOf(children2, element).map((index2) => inParent(parent2, children2, element, index2));\n    });\n    const indexOf = (elements, element) => findIndex(elements, curry(eq$1, element));\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      }, (cell2) => {\n        return Optional.some(point(cell2, 0));\n      }, (cell2) => {\n        return Optional.some(point(cell2, getEnd(cell2)));\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    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    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, (cell2) => {\n        return getEntireBox(bridge, cell2).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, x2, y2) => {\n      return bridge.elementFromPoint(x2, y2).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: constant2(JUMP_SIZE)\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 range2 = bridge.fromSitus(brNeighbour);\n          const analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range2.finish, range2.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 range2 = bridge.fromSitus(situs);\n        const analysis = BeforeAfter.verify(bridge, element, offset, range2.finish, range2.foffset, direction.failure, isRoot);\n        return BeforeAfter.cata(analysis, () => {\n          return Optional.none();\n        }, () => {\n          return Optional.some(situs);\n        }, (cell2) => {\n          if (eq$1(element, cell2) && offset === 0) {\n            return tryAgain(bridge, element, offset, moveUp, direction);\n          } else {\n            return scan(bridge, isRoot, cell2, 0, direction, numRetries - 1);\n          }\n        }, (cell2) => {\n          if (eq$1(element, cell2) && offset === getEnd(cell2)) {\n            return tryAgain(bridge, element, offset, moveDown, direction);\n          } else {\n            return scan(bridge, isRoot, cell2, getEnd(cell2), 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    const inSameTable = (elem, table3) => {\n      return ancestor(elem, (e2) => {\n        return parent(e2).exists((p2) => {\n          return eq$1(p2, table3);\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((table3) => {\n          if (!inSameTable(anchor, table3)) {\n            return Optional.none();\n          }\n          return handle$1(bridge, isRoot, direction).bind((range2) => {\n            return closest$1(range2.finish, \"td,th\", isRoot).map((finish) => {\n              return {\n                start,\n                finish,\n                range: range2\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 range2 = info.range;\n          return Response.create(Optional.some(makeSitus(range2.start, range2.soffset, range2.finish, range2.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((table3) => {\n          const rows2 = descendants(table3, \"tr\");\n          if (eq$1(startRow, rows2[0])) {\n            return seekLeft(table3, (element) => {\n              return last$1(element).isSome();\n            }, isRoot).map((last2) => {\n              const lastOffset = getEnd(last2);\n              return Response.create(Optional.some(makeSitus(last2, lastOffset, last2, 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((table3) => {\n          const rows2 = descendants(table3, \"tr\");\n          if (eq$1(startRow, rows2[rows2.length - 1])) {\n            return seekRight(table3, (element) => {\n              return first(element).isSome();\n            }, isRoot).map((first2) => {\n              return Response.create(Optional.some(makeSitus(first2, 0, first2, 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    const Cell = (initial) => {\n      let value2 = initial;\n      const get2 = () => {\n        return value2;\n      };\n      const set3 = (v2) => {\n        value2 = v2;\n      };\n      return {\n        get: get2,\n        set: set3\n      };\n    };\n    const singleton = (doRevoke) => {\n      const subject = Cell(Optional.none());\n      const revoke = () => subject.get().each(doRevoke);\n      const clear2 = () => {\n        revoke();\n        subject.set(Optional.none());\n      };\n      const isSet2 = () => subject.get().isSome();\n      const get2 = () => subject.get();\n      const set3 = (s2) => {\n        revoke();\n        subject.set(Optional.some(s2));\n      };\n      return {\n        clear: clear2,\n        isSet: isSet2,\n        get: get2,\n        set: set3\n      };\n    };\n    const value = () => {\n      const subject = singleton(noop);\n      const on2 = (f2) => subject.get().each(f2);\n      return {\n        ...subject,\n        on: on2\n      };\n    };\n    const findCell = (target, isRoot) => closest$1(target, \"td,th\", isRoot);\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).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    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    const isKey = (key2) => {\n      return (keycode) => {\n        return keycode === key2;\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    const get$3 = (_DOC) => {\n      const doc = _DOC !== void 0 ? _DOC.dom : document;\n      const x2 = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n      const y2 = doc.body.scrollTop || doc.documentElement.scrollTop;\n      return SugarPosition(x2, y2);\n    };\n    const by = (x2, y2, _DOC) => {\n      const doc = _DOC !== void 0 ? _DOC.dom : document;\n      const win = doc.defaultView;\n      if (win) {\n        win.scrollBy(x2, y2);\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 = (selection2) => selection2.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 = (selection2) => {\n      const start = getStart(selection2);\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    const caretPositionFromPoint = (doc, x2, y2) => {\n      var _a3, _b;\n      return Optional.from((_b = (_a3 = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a3, x2, y2)).bind((pos) => {\n        if (pos.offsetNode === null) {\n          return Optional.none();\n        }\n        const r4 = doc.dom.createRange();\n        r4.setStart(pos.offsetNode, pos.offset);\n        r4.collapse();\n        return Optional.some(r4);\n      });\n    };\n    const caretRangeFromPoint = (doc, x2, y2) => {\n      var _a3, _b;\n      return Optional.from((_b = (_a3 = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a3, x2, y2));\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, x2, y2) => {\n      const doc = SugarElement.fromDom(win.document);\n      return availableSearch(doc, x2, y2).map((rng) => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n    };\n    const beforeSpecial = (element, offset) => {\n      const name$1 = name(element);\n      if (\"input\" === name$1) {\n        return Situ.after(element);\n      } else if (!contains$2([\n        \"br\",\n        \"img\"\n      ], name$1)) {\n        return Situ.on(element, offset);\n      } else {\n        return offset === 0 ? Situ.before(element) : Situ.after(element);\n      }\n    };\n    const preprocessRelative = (startSitu, finishSitu) => {\n      const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n      const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n      return SimSelection.relative(start, finish);\n    };\n    const preprocessExact = (start, soffset, finish, foffset) => {\n      const startSitu = beforeSpecial(start, soffset);\n      const finishSitu = beforeSpecial(finish, foffset);\n      return SimSelection.relative(startSitu, finishSitu);\n    };\n    const 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 r4 = makeRange(start, soffset, finish, foffset);\n      const same = eq$1(start, finish) && soffset === foffset;\n      return r4.collapsed && !same;\n    };\n    const getNativeSelection = (win) => Optional.from(win.getSelection());\n    const doSetNativeRange = (win, rng) => {\n      getNativeSelection(win).each((selection2) => {\n        selection2.removeAllRanges();\n        selection2.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, selection2, start, soffset, finish, foffset) => {\n      selection2.collapse(start.dom, soffset);\n      selection2.extend(finish.dom, foffset);\n    };\n    const setRangeFromRelative = (win, relative2) => diagnose(win, relative2).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((selection2) => {\n          if (selection2.setBaseAndExtent) {\n            selection2.setBaseAndExtent(start.dom, soffset, finish.dom, foffset);\n          } else if (selection2.extend) {\n            try {\n              setLegacyRtlRange(win, selection2, start, soffset, finish, foffset);\n            } catch (e2) {\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 relative2 = preprocessExact(start, soffset, finish, foffset);\n      setRangeFromRelative(win, relative2);\n    };\n    const setRelative = (win, startSitu, finishSitu) => {\n      const relative2 = preprocessRelative(startSitu, finishSitu);\n      setRangeFromRelative(win, relative2);\n    };\n    const readRange = (selection2) => {\n      if (selection2.rangeCount > 0) {\n        const firstRng = selection2.getRangeAt(0);\n        const lastRng = selection2.getRangeAt(selection2.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 = (selection2) => {\n      if (selection2.anchorNode === null || selection2.focusNode === null) {\n        return readRange(selection2);\n      } else {\n        const anchor = SugarElement.fromDom(selection2.anchorNode);\n        const focus = SugarElement.fromDom(selection2.focusNode);\n        return after(anchor, selection2.anchorOffset, focus, selection2.focusOffset) ? Optional.some(SimRange.create(anchor, selection2.anchorOffset, focus, selection2.focusOffset)) : readRange(selection2);\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((range2) => SimSelection.exact(range2.start, range2.soffset, range2.finish, range2.foffset));\n    const getFirstRect = (win, selection2) => {\n      const rng = asLtrRange(win, selection2);\n      return getFirstRect$1(rng);\n    };\n    const getAtPoint = (win, x2, y2) => fromPoint(win, x2, y2);\n    const clear = (win) => {\n      getNativeSelection(win).each((selection2) => selection2.removeAllRanges());\n    };\n    const WindowBridge = (win) => {\n      const elementFromPoint = (x2, y2) => {\n        return SugarElement.fromPoint(SugarElement.fromDom(win.document), x2, y2);\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 relative2 = SimSelection.relative(situs.start, situs.finish);\n        return convertToRange(win, relative2);\n      };\n      const situsFromPoint = (x2, y2) => {\n        return getAtPoint(win, x2, y2).map((exact2) => {\n          return Situs.create(exact2.start, exact2.soffset, exact2.finish, exact2.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 selectNode2 = (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 = (x2, y2) => {\n        by(x2, y2, 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: selectNode2,\n        selectContents,\n        getInnerHeight,\n        getScrollY,\n        scrollBy\n      };\n    };\n    const rc = (rows2, cols) => ({\n      rows: rows2,\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 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 (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 relative2 = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n                  bridge.setRelativeSelection(Situ.on(edges.first, 0), relative2(edges.table));\n                  annotations.clear(container);\n                  return Response.create(Optional.none(), true);\n                });\n              }, (_2) => {\n                return Optional.some(Response.create(Optional.none(), true));\n              });\n            };\n          };\n          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)) {\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    const read = (element, attr) => {\n      const value2 = get$b(element, attr);\n      return value2 === void 0 || value2 === \"\" ? [] : value2.split(\" \");\n    };\n    const add$2 = (element, attr, id) => {\n      const old = read(element, attr);\n      const nu2 = old.concat([id]);\n      set$2(element, attr, nu2.join(\" \"));\n      return true;\n    };\n    const remove$4 = (element, attr, id) => {\n      const nu2 = filter$2(read(element, attr), (v2) => v2 !== id);\n      if (nu2.length > 0) {\n        set$2(element, attr, nu2.join(\" \"));\n      } else {\n        remove$7(element, attr);\n      }\n      return false;\n    };\n    const supports = (element) => element.dom.classList !== void 0;\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    const add2 = (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 has2 = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n    const remove$1 = (element, classes) => {\n      each$2(classes, (x2) => {\n        remove$2(element, x2);\n      });\n    };\n    const addClass = (clazz) => (element) => {\n      add2(element, clazz);\n    };\n    const removeClasses = (classes) => (element) => {\n      remove$1(element, classes);\n    };\n    const byClass = (ephemera2) => {\n      const addSelectionClass = addClass(ephemera2.selected);\n      const removeSelectionClasses = removeClasses([\n        ephemera2.selected,\n        ephemera2.lastSelected,\n        ephemera2.firstSelected\n      ]);\n      const clear2 = (container) => {\n        const sels = descendants(container, ephemera2.selectedSelector);\n        each$2(sels, removeSelectionClasses);\n      };\n      const selectRange = (container, cells2, start, finish) => {\n        clear2(container);\n        each$2(cells2, addSelectionClass);\n        add2(start, ephemera2.firstSelected);\n        add2(finish, ephemera2.lastSelected);\n      };\n      return {\n        clearBeforeUpdate: clear2,\n        clear: clear2,\n        selectRange,\n        selectedSelector: ephemera2.selectedSelector,\n        firstSelectedSelector: ephemera2.firstSelectedSelector,\n        lastSelectedSelector: ephemera2.lastSelectedSelector\n      };\n    };\n    const byAttr = (ephemera2, onSelection, onClear) => {\n      const removeSelectionAttributes = (element) => {\n        remove$7(element, ephemera2.selected);\n        remove$7(element, ephemera2.firstSelected);\n        remove$7(element, ephemera2.lastSelected);\n      };\n      const addSelectionAttribute = (element) => {\n        set$2(element, ephemera2.selected, \"1\");\n      };\n      const clear2 = (container) => {\n        clearBeforeUpdate(container);\n        onClear();\n      };\n      const clearBeforeUpdate = (container) => {\n        const sels = descendants(container, `${ephemera2.selectedSelector},${ephemera2.firstSelectedSelector},${ephemera2.lastSelectedSelector}`);\n        each$2(sels, removeSelectionAttributes);\n      };\n      const selectRange = (container, cells2, start, finish) => {\n        clear2(container);\n        each$2(cells2, addSelectionAttribute);\n        set$2(start, ephemera2.firstSelected, \"1\");\n        set$2(finish, ephemera2.lastSelected, \"1\");\n        onSelection(cells2, start, finish);\n      };\n      return {\n        clearBeforeUpdate,\n        clear: clear2,\n        selectRange,\n        selectedSelector: ephemera2.selectedSelector,\n        firstSelectedSelector: ephemera2.firstSelectedSelector,\n        lastSelectedSelector: ephemera2.lastSelectedSelector\n      };\n    };\n    const SelectionAnnotation = {\n      byClass,\n      byAttr\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    const Selections = (lazyRoot, getStart2, selectedSelector) => {\n      const get2 = () => retrieve(lazyRoot(), selectedSelector).fold(() => getStart2().fold(none, single), multiple);\n      return { get: get2 };\n    };\n    const getUpOrLeftCells = (grid2, selectedCells) => {\n      const upGrid = grid2.slice(0, selectedCells[selectedCells.length - 1].row + 1);\n      const upDetails = toDetailList(upGrid);\n      return bind$2(upDetails, (detail2) => {\n        const slicedCells = detail2.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1);\n        return map$1(slicedCells, (cell2) => cell2.element);\n      });\n    };\n    const getDownOrRightCells = (grid2, selectedCells) => {\n      const downGrid = grid2.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid2.length);\n      const downDetails = toDetailList(downGrid);\n      return bind$2(downDetails, (detail2) => {\n        const slicedCells = detail2.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail2.cells.length);\n        return map$1(slicedCells, (cell2) => cell2.element);\n      });\n    };\n    const getOtherCells = (table3, target, generators) => {\n      const warehouse = Warehouse.fromTable(table3);\n      const details = onCells(warehouse, target);\n      return details.map((selectedCells) => {\n        const grid2 = toGrid(warehouse, generators, false);\n        const { rows: rows2 } = extractGridDetails(grid2);\n        const upOrLeftCells = getUpOrLeftCells(rows2, selectedCells);\n        const downOrRightCells = getDownOrRightCells(rows2, selectedCells);\n        return {\n          upOrLeftCells,\n          downOrRightCells\n        };\n      });\n    };\n    const mkEvent = (target, x2, y2, stop, prevent, kill, raw) => ({\n      target,\n      x: x2,\n      y: y2,\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 = (filter2, handler) => (rawEvent) => {\n      if (filter2(rawEvent)) {\n        handler(fromRawEvent$1(rawEvent));\n      }\n    };\n    const binder = (element, event, filter2, handler, useCapture) => {\n      const wrapped = handle(filter2, handler);\n      element.dom.addEventListener(event, wrapped, useCapture);\n      return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n    };\n    const bind$1 = (element, event, filter2, handler) => binder(element, event, filter2, handler, false);\n    const unbind = (element, event, handler, useCapture) => {\n      element.dom.removeEventListener(event, handler, useCapture);\n    };\n    const filter = always;\n    const bind = (element, event, handler) => bind$1(element, event, filter, handler);\n    const fromRawEvent = fromRawEvent$1;\n    const hasInternalTarget = (e2) => has2(SugarElement.fromDom(e2.target), \"ephox-snooker-resizer-bar\") === false;\n    const TableCellSelectionHandler = (editor, resizeHandler) => {\n      const cellSelection = Selections(() => SugarElement.fromDom(editor.getBody()), () => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)), ephemera.selectedSelector);\n      const onSelection = (cells2, start, finish) => {\n        const tableOpt = table2(start);\n        tableOpt.each((table3) => {\n          const cloneFormats2 = getTableCloneElements(editor);\n          const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats2);\n          const selectedCells = getCellsFromSelection(editor);\n          const otherCells = getOtherCells(table3, { selection: selectedCells }, generators);\n          fireTableSelectionChange(editor, cells2, 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 body2 = 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(table2, [\n            start,\n            end\n          ]);\n          shared.fold(() => annotations.clear(body2), noop);\n        };\n        const mouseHandlers = mouse(win, body2, isRoot, annotations);\n        const keyHandlers = keyboard(win, body2, isRoot, annotations);\n        const external$1 = external(win, body2, isRoot, annotations);\n        const hasShiftKey = (event) => event.raw.shiftKey === true;\n        editor.on(\"TableSelectorChange\", (e2) => external$1(e2.start, e2.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 relative2 = SimSelection.relative(ns.start, ns.finish);\n            const rng = asLtrRange(win, relative2);\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 === void 0) {\n            return true;\n          }\n          return (raw.buttons & 1) !== 0;\n        };\n        const dragStart = (_e2) => {\n          mouseHandlers.clearstate();\n        };\n        const mouseDown = (e2) => {\n          if (isLeftMouse(e2) && hasInternalTarget(e2)) {\n            mouseHandlers.mousedown(fromRawEvent(e2));\n          }\n        };\n        const mouseOver = (e2) => {\n          if (isLeftButtonPressed(e2) && hasInternalTarget(e2)) {\n            mouseHandlers.mouseover(fromRawEvent(e2));\n          }\n        };\n        const mouseUp = (e2) => {\n          if (isLeftMouse(e2) && hasInternalTarget(e2)) {\n            mouseHandlers.mouseup(fromRawEvent(e2));\n          }\n        };\n        const getDoubleTap = () => {\n          const lastTarget = Cell(SugarElement.fromDom(body2));\n          const lastTimeStamp = Cell(0);\n          const touchEnd = (t2) => {\n            const target = SugarElement.fromDom(t2.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) && t2.timeStamp - lTS < 300) {\n                t2.preventDefault();\n                external$1(target, target);\n              }\n            }\n            lastTarget.set(target);\n            lastTimeStamp.set(t2.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(), constant2([]), (cells2) => {\n        return map$1(cells2, (cell2) => cell2.dom);\n      }, (cell2) => [cell2.dom]);\n      return {\n        getSelectedCells,\n        clearSelectedCells\n      };\n    };\n    const Event2 = (fields) => {\n      let handlers = [];\n      const bind2 = (handler) => {\n        if (handler === void 0) {\n          throw new Error(\"Event bind error: undefined handler\");\n        }\n        handlers.push(handler);\n      };\n      const unbind2 = (handler) => {\n        handlers = filter$2(handlers, (h2) => {\n          return h2 !== handler;\n        });\n      };\n      const trigger = (...args) => {\n        const event = {};\n        each$2(fields, (name2, i3) => {\n          event[name2] = args[i3];\n        });\n        each$2(handlers, (handler) => {\n          handler(event);\n        });\n      };\n      return {\n        bind: bind2,\n        unbind: unbind2,\n        trigger\n      };\n    };\n    const create$1 = (typeDefs) => {\n      const registry = map2(typeDefs, (event) => {\n        return {\n          bind: event.bind,\n          unbind: event.unbind\n        };\n      });\n      const trigger = map2(typeDefs, (event) => {\n        return event.trigger;\n      });\n      return {\n        registry,\n        trigger\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    const sort = (arr) => {\n      return arr.slice(0).sort();\n    };\n    const reqMessage = (required, keys3) => {\n      throw new Error(\"All required keys (\" + sort(required).join(\", \") + \") were not specified. Specified keys were: \" + sort(keys3).join(\", \") + \".\");\n    };\n    const unsuppMessage = (unsupported) => {\n      throw new Error(\"Unsupported keys for object: \" + sort(unsupported).join(\", \"));\n    };\n    const validateStrArr = (label, array2) => {\n      if (!isArray2(array2)) {\n        throw new Error(\"The \" + label + \" fields must be an array. Was: \" + array2 + \".\");\n      }\n      each$2(array2, (a2) => {\n        if (!isString2(a2)) {\n          throw new Error(\"The value \" + a2 + \" in the \" + label + \" fields was not a string.\");\n        }\n      });\n    };\n    const invalidTypeMessage = (incorrect, type2) => {\n      throw new Error(\"All values need to be of type: \" + type2 + \". Keys (\" + sort(incorrect).join(\", \") + \") were not.\");\n    };\n    const checkDupes = (everything) => {\n      const sorted = sort(everything);\n      const dupe = find$1(sorted, (s2, i3) => {\n        return i3 < sorted.length - 1 && s2 === sorted[i3 + 1];\n      });\n      dupe.each((d2) => {\n        throw new Error(\"The field: \" + d2 + \" occurs more than once in the combined fields: [\" + sorted.join(\", \") + \"].\");\n      });\n    };\n    const base2 = (handleUnsupported, required) => {\n      return baseWith(handleUnsupported, required, {\n        validate: isFunction2,\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 = keys2(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, (key2) => {\n          return !pred.validate(obj[key2], key2);\n        });\n        if (invalidKeys.length > 0) {\n          invalidTypeMessage(invalidKeys, pred.label);\n        }\n        return obj;\n      };\n    };\n    const handleExact = (required, keys3) => {\n      const unsupported = filter$2(keys3, (key2) => {\n        return !contains$2(required, key2);\n      });\n      if (unsupported.length > 0) {\n        unsuppMessage(unsupported);\n      }\n    };\n    const exactly = (required) => base2(handleExact, required);\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    const InDrag = () => {\n      let previous = Optional.none();\n      const reset = () => {\n        previous = Optional.none();\n      };\n      const update2 = (mode, nu2) => {\n        const result = previous.map((old) => {\n          return mode.compare(old, nu2);\n        });\n        previous = Optional.some(nu2);\n        return result;\n      };\n      const onEvent = (event, mode) => {\n        const dataOption = mode.extract(event);\n        dataOption.each((data) => {\n          const offset = update2(mode, data);\n          offset.each((d2) => {\n            events.trigger.move(d2);\n          });\n        });\n      };\n      const events = create$1({ move: Event2([\"info\"]) });\n      return {\n        onEvent,\n        reset,\n        events: events.registry\n      };\n    };\n    const NoDrag = () => {\n      const events = create$1({ move: Event2([\"info\"]) });\n      return {\n        onEvent: noop,\n        reset: noop,\n        events: events.registry\n      };\n    };\n    const Movement = () => {\n      const noDragState = NoDrag();\n      const inDragState = InDrag();\n      let dragState = noDragState;\n      const on2 = () => {\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: on2,\n        off,\n        isOn,\n        onEvent,\n        events: inDragState.events\n      };\n    };\n    const setup = (mutation, mode, settings) => {\n      let active = false;\n      const events = create$1({\n        start: Event2([]),\n        stop: Event2([])\n      });\n      const movement = Movement();\n      const drop = () => {\n        sink2.stop();\n        if (movement.isOn()) {\n          movement.off();\n          events.trigger.stop();\n        }\n      };\n      const throttledDrop = last(drop, 200);\n      const go2 = (parent2) => {\n        sink2.start(parent2);\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 on2 = () => {\n        active = true;\n      };\n      const off = () => {\n        active = false;\n      };\n      const runIfActive = (f2) => {\n        return (...args) => {\n          if (active) {\n            f2.apply(null, args);\n          }\n        };\n      };\n      const sink2 = mode.sink(DragApi({\n        forceDrop: drop,\n        drop: runIfActive(drop),\n        move: runIfActive(mousemove),\n        delayDrop: runIfActive(throttledDrop.throttle)\n      }), settings);\n      const destroy2 = () => {\n        sink2.destroy();\n      };\n      return {\n        element: sink2.element,\n        go: go2,\n        on: on2,\n        off,\n        destroy: destroy2,\n        events: events.registry\n      };\n    };\n    const css = (namespace2) => {\n      const dashNamespace = namespace2.replace(/\\./g, \"-\");\n      const resolve2 = (str) => {\n        return dashNamespace + \"-\" + str;\n      };\n      return { resolve: resolve2 };\n    };\n    const styles$1 = css(\"ephox-dragster\");\n    const resolve$1 = styles$1.resolve;\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      add2(div, resolve$1(\"blocker\"));\n      add2(div, settings.layerClass);\n      const element = constant2(div);\n      const destroy2 = () => {\n        remove$6(div);\n      };\n      return {\n        element,\n        destroy: destroy2\n      };\n    };\n    const compare2 = (old, nu2) => {\n      return SugarPosition(nu2.left - old.left, nu2.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 destroy2 = () => {\n        blocker.destroy();\n        mup.unbind();\n        mmove.unbind();\n        mout.unbind();\n        mdown.unbind();\n      };\n      const start = (parent2) => {\n        append$1(parent2, 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: destroy2\n      });\n    };\n    var MouseDrag = DragMode({\n      compare: compare2,\n      extract,\n      sink,\n      mutate\n    });\n    const transform = (mutation, settings = {}) => {\n      var _a3;\n      const mode = (_a3 = settings.mode) !== null && _a3 !== void 0 ? _a3 : MouseDrag;\n      return setup(mutation, mode, settings);\n    };\n    const styles = css(\"ephox-snooker\");\n    const resolve = styles.resolve;\n    const Mutation = () => {\n      const events = create$1({\n        drag: Event2([\n          \"xDelta\",\n          \"yDelta\"\n        ])\n      });\n      const mutate2 = (x2, y2) => {\n        events.trigger.drag(x2, y2);\n      };\n      return {\n        mutate: mutate2,\n        events: events.registry\n      };\n    };\n    const BarMutation = () => {\n      const events = create$1({\n        drag: Event2([\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((t2) => {\n          events.trigger.drag(event.xDelta, event.yDelta, t2);\n        });\n      });\n      const assign2 = (t2) => {\n        target = Optional.some(t2);\n      };\n      const get2 = () => {\n        return target;\n      };\n      return {\n        assign: assign2,\n        get: get2,\n        mutate: delegate.mutate,\n        events: events.registry\n      };\n    };\n    const col = (column, x2, y2, w, h2) => {\n      const bar = SugarElement.fromTag(\"div\");\n      setAll(bar, {\n        position: \"absolute\",\n        left: x2 - w / 2 + \"px\",\n        top: y2 + \"px\",\n        height: h2 + \"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 = (r4, x2, y2, w, h2) => {\n      const bar = SugarElement.fromTag(\"div\");\n      setAll(bar, {\n        position: \"absolute\",\n        left: x2 + \"px\",\n        top: y2 - h2 / 2 + \"px\",\n        height: h2 + \"px\",\n        width: w + \"px\"\n      });\n      setAll$1(bar, {\n        \"data-row\": r4,\n        \"role\": \"presentation\"\n      });\n      return bar;\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, isResizable2) => bind$2(warehouse.all, (row2, i3) => isResizable2(row2.element) ? [i3] : []);\n    const resizableColumns = (warehouse, isResizable2) => {\n      const resizableCols = [];\n      range$1(warehouse.grid.columns, (index2) => {\n        const colElmOpt = Warehouse.getColumnAt(warehouse, index2).map((col2) => col2.element);\n        if (colElmOpt.forall(isResizable2)) {\n          resizableCols.push(index2);\n        }\n      });\n      return filter$2(resizableCols, (colIndex) => {\n        const columnCells = Warehouse.filterItems(warehouse, (cell2) => cell2.column === colIndex);\n        return forall(columnCells, (cell2) => isResizable2(cell2.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, create2) => {\n      const origin = wire.origin();\n      each$2(positions, (cpOption) => {\n        cpOption.each((cp) => {\n          const bar = create2(origin, cp);\n          add2(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        add2(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        add2(rowBar, resizeRowBar);\n        return rowBar;\n      });\n    };\n    const refreshGrid = (warhouse, wire, table3, rows2, cols) => {\n      const position = absolute(table3);\n      const isResizable2 = wire.isResizable;\n      const rowPositions = rows2.length > 0 ? height.positions(rows2, table3) : [];\n      const resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable2) : [];\n      const resizableRowPositions = filter$2(rowPositions, (_pos, i3) => exists(resizableRowBars, (barIndex) => i3 === barIndex));\n      refreshRow(wire, resizableRowPositions, position, getOuter$2(table3));\n      const colPositions = cols.length > 0 ? width.positions(cols, table3) : [];\n      const resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable2) : [];\n      const resizableColPositions = filter$2(colPositions, (_pos, i3) => exists(resizableColBars, (barIndex) => i3 === barIndex));\n      refreshCol(wire, resizableColPositions, position, getOuter$1(table3));\n    };\n    const refresh = (wire, table3) => {\n      destroy(wire);\n      if (wire.isResizable(table3)) {\n        const warehouse = Warehouse.fromTable(table3);\n        const rows$12 = rows(warehouse);\n        const cols = columns(warehouse);\n        refreshGrid(warehouse, wire, table3, rows$12, cols);\n      }\n    };\n    const each = (wire, f2) => {\n      const bars = descendants(wire.parent(), \".\" + resizeBar);\n      each$2(bars, f2);\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 has2(element, resizeRowBar);\n    };\n    const isColBar = (element) => {\n      return has2(element, resizeColBar);\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, type2) => {\n        return Optional.from(get$b(element, type2));\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((table3) => {\n            getResizer(target, \"data-row\").each((row2) => {\n              const delta = getDelta(target, \"top\");\n              remove$7(target, \"data-initial-top\");\n              events.trigger.adjustHeight(table3, delta, parseInt(row2, 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(table3, delta, parseInt(column, 10));\n            });\n            refresh(wire, table3);\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        add2(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 = (e2) => {\n        return eq$1(e2, 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        }, (table3) => {\n          hoverTable = Optional.some(table3);\n          refresh(wire, table3);\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: Event2([\n          \"table\",\n          \"delta\",\n          \"row\"\n        ]),\n        adjustWidth: Event2([\n          \"table\",\n          \"delta\",\n          \"column\"\n        ]),\n        startAdjust: Event2([])\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    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: Event2([\n          \"table\",\n          \"type\"\n        ]),\n        afterResize: Event2([\n          \"table\",\n          \"type\"\n        ]),\n        startDrag: Event2([])\n      });\n      manager.events.adjustHeight.bind((event) => {\n        const table3 = event.table;\n        events.trigger.beforeResize(table3, \"row\");\n        const delta = hdirection.delta(event.delta, table3);\n        adjustHeight(table3, delta, event.row, hdirection);\n        events.trigger.afterResize(table3, \"row\");\n      });\n      manager.events.startAdjust.bind((_event) => {\n        events.trigger.startDrag();\n      });\n      manager.events.adjustWidth.bind((event) => {\n        const table3 = event.table;\n        events.trigger.beforeResize(table3, \"col\");\n        const delta = vdirection.delta(event.delta, table3);\n        const tableSize = lazySizing(table3);\n        adjustWidth(table3, delta, event.column, resizing, tableSize);\n        events.trigger.afterResize(table3, \"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    const only = (element, isResizable2) => {\n      const parent2 = isDocument(element) ? documentElement(element) : element;\n      return {\n        parent: constant2(parent2),\n        view: constant2(element),\n        origin: constant2(SugarPosition(0, 0)),\n        isResizable: isResizable2\n      };\n    };\n    const detached = (editable, chrome, isResizable2) => {\n      const origin = () => absolute(chrome);\n      return {\n        parent: constant2(chrome),\n        view: constant2(editable),\n        origin,\n        isResizable: isResizable2\n      };\n    };\n    const body = (editable, chrome, isResizable2) => {\n      return {\n        parent: constant2(chrome),\n        view: constant2(editable),\n        origin: constant2(SugarPosition(0, 0)),\n        isResizable: isResizable2\n      };\n    };\n    const ResizeWire = {\n      only,\n      detached,\n      body\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, isResizable2) => {\n      return editor.inline ? ResizeWire.body(SugarElement.fromDom(editor.getBody()), createContainer(), isResizable2) : ResizeWire.only(SugarElement.fromDom(editor.getDoc()), isResizable2);\n    };\n    const remove2 = (editor, wire) => {\n      if (editor.inline) {\n        remove$6(wire.parent());\n      }\n    };\n    const isTable = (node) => isNonNullable(node) && node.tagName === \"TABLE\";\n    const barResizerPrefix = \"bar-\";\n    const isResizable = (elm) => get$b(elm, \"data-mce-resize\") !== \"false\";\n    const syncPixels = (table3) => {\n      const warehouse = Warehouse.fromTable(table3);\n      if (!Warehouse.hasColumns(warehouse)) {\n        each$2(cells$1(table3), (cell2) => {\n          const computedWidth = get$a(cell2, \"width\");\n          set$1(cell2, \"width\", computedWidth);\n          remove$7(cell2, \"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 = (table3) => get$5(editor, table3);\n      const lazyResizingBehaviour = () => isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();\n      const getNumColumns = (table3) => getGridSize(table3).columns;\n      const afterCornerResize = (table3, origin, width2) => {\n        const isRightEdgeResize = endsWith(origin, \"e\");\n        if (startRawW === \"\") {\n          convertToPercentSize(table3);\n        }\n        if (width2 !== startW && startRawW !== \"\") {\n          set$1(table3, \"width\", startRawW);\n          const resizing = lazyResizingBehaviour();\n          const tableSize = lazySizing(table3);\n          const col2 = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table3) - 1 : 0;\n          adjustWidth(table3, width2 - startW, col2, resizing, tableSize);\n        } else if (isPercentage$1(startRawW)) {\n          const percentW = parseFloat(startRawW.replace(\"%\", \"\"));\n          const targetPercentW = width2 * percentW / startW;\n          set$1(table3, \"width\", targetPercentW + \"%\");\n        }\n        if (isPixel(startRawW)) {\n          syncPixels(table3);\n        }\n      };\n      const destroy2 = () => {\n        tableResize.on((sz) => {\n          sz.destroy();\n        });\n        resizeWire.on((w) => {\n          remove2(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 table3 = event.table;\n            const rawTable = table3.dom;\n            removeDataStyle(table3);\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\", (e2) => {\n        const targetElm = e2.target;\n        if (isTable(targetElm)) {\n          const table3 = SugarElement.fromDom(targetElm);\n          each$2(editor.dom.select(\".mce-clonedresizable\"), (clone2) => {\n            editor.dom.addClass(clone2, \"mce-\" + getTableColumnResizingBehaviour(editor) + \"-columns\");\n          });\n          if (!isPixelSizing(table3) && isTablePixelsForced(editor)) {\n            convertToPixelSize(table3);\n          } else if (!isPercentSizing(table3) && isTablePercentagesForced(editor)) {\n            convertToPercentSize(table3);\n          }\n          if (isNoneSizing(table3) && startsWith(e2.origin, barResizerPrefix)) {\n            convertToPercentSize(table3);\n          }\n          startW = e2.width;\n          startRawW = isTableResponsiveForced(editor) ? \"\" : getRawWidth(editor, targetElm).getOr(\"\");\n        }\n      });\n      editor.on(\"ObjectResized\", (e2) => {\n        const targetElm = e2.target;\n        if (isTable(targetElm)) {\n          const table3 = SugarElement.fromDom(targetElm);\n          const origin = e2.origin;\n          if (startsWith(origin, \"corner-\")) {\n            afterCornerResize(table3, origin, e2.width);\n          }\n          removeDataStyle(table3);\n          fireTableModified(editor, table3.dom, styleModified);\n        }\n      });\n      editor.on(\"SwitchMode\", () => {\n        tableResize.on((resize2) => {\n          if (editor.mode.isReadOnly()) {\n            resize2.hideBars();\n          } else {\n            resize2.showBars();\n          }\n        });\n      });\n      editor.on(\"remove\", () => {\n        destroy2();\n      });\n      const refresh2 = (table3) => {\n        tableResize.on((resize2) => resize2.refreshBars(SugarElement.fromDom(table3)));\n      };\n      const hide2 = () => {\n        tableResize.on((resize2) => resize2.hideBars());\n      };\n      const show2 = () => {\n        tableResize.on((resize2) => resize2.showBars());\n      };\n      return {\n        refresh: refresh2,\n        hide: hide2,\n        show: show2\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    const DomModel = (editor) => {\n      const table3 = setupTable(editor);\n      return { table: table3 };\n    };\n    var Model = () => {\n      global$1.add(\"dom\", DomModel);\n    };\n    Model();\n  })();\n  return model;\n}\nvar hasRequiredDom;\nfunction requireDom() {\n  if (hasRequiredDom) return dom;\n  hasRequiredDom = 1;\n  requireModel();\n  return dom;\n}\nrequireDom();\nvar _default = {};\nvar icons = {};\nvar hasRequiredIcons;\nfunction requireIcons() {\n  if (hasRequiredIcons) return icons;\n  hasRequiredIcons = 1;\n  tinymce.IconManager.add(\"default\", {\n    icons: {\n      \"accessibility-check\": '<svg width=\"24\" height=\"24\"><path d=\"M12 2a2 2 0 012 2 2 2 0 01-2 2 2 2 0 01-2-2c0-1.1.9-2 2-2zm8 7h-5v12c0 .6-.4 1-1 1a1 1 0 01-1-1v-5c0-.6-.4-1-1-1a1 1 0 00-1 1v5c0 .6-.4 1-1 1a1 1 0 01-1-1V9H4a1 1 0 110-2h16c.6 0 1 .4 1 1s-.4 1-1 1z\" fill-rule=\"nonzero\"/></svg>',\n      \"action-next\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M5.7 7.3a1 1 0 00-1.4 1.4l7.7 7.7 7.7-7.7a1 1 0 10-1.4-1.4L12 13.6 5.7 7.3z\"/></svg>',\n      \"action-prev\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M18.3 15.7a1 1 0 001.4-1.4L12 6.6l-7.7 7.7a1 1 0 001.4 1.4L12 9.4l6.3 6.3z\"/></svg>',\n      \"align-center\": '<svg width=\"24\" height=\"24\"><path d=\"M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm3 4h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 110-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 010-2zm-3-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2z\" fill-rule=\"evenodd\"/></svg>',\n      \"align-justify\": '<svg width=\"24\" height=\"24\"><path d=\"M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2z\" fill-rule=\"evenodd\"/></svg>',\n      \"align-left\": '<svg width=\"24\" height=\"24\"><path d=\"M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm0 4h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2zm0-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2z\" fill-rule=\"evenodd\"/></svg>',\n      \"align-none\": '<svg width=\"24\" height=\"24\"><path d=\"M14.2 5L13 7H5a1 1 0 110-2h9.2zm4 0h.8a1 1 0 010 2h-2l1.2-2zm-6.4 4l-1.2 2H5a1 1 0 010-2h6.8zm4 0H19a1 1 0 010 2h-4.4l1.2-2zm-6.4 4l-1.2 2H5a1 1 0 010-2h4.4zm4 0H19a1 1 0 010 2h-6.8l1.2-2zM7 17l-1.2 2H5a1 1 0 010-2h2zm4 0h8a1 1 0 010 2H9.8l1.2-2zm5.2-13.5l1.3.7-9.7 16.3-1.3-.7 9.7-16.3z\" fill-rule=\"evenodd\"/></svg>',\n      \"align-right\": '<svg width=\"24\" height=\"24\"><path d=\"M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm6 4h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm-6-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2z\" fill-rule=\"evenodd\"/></svg>',\n      \"arrow-left\": '<svg width=\"24\" height=\"24\"><path d=\"M5.6 13l12 6a1 1 0 001.4-1V6a1 1 0 00-1.4-.9l-12 6a1 1 0 000 1.8z\" fill-rule=\"evenodd\"/></svg>',\n      \"arrow-right\": '<svg width=\"24\" height=\"24\"><path d=\"M18.5 13l-12 6A1 1 0 015 18V6a1 1 0 011.4-.9l12 6a1 1 0 010 1.8z\" fill-rule=\"evenodd\"/></svg>',\n      \"bold\": '<svg width=\"24\" height=\"24\"><path d=\"M7.8 19c-.3 0-.5 0-.6-.2l-.2-.5V5.7c0-.2 0-.4.2-.5l.6-.2h5c1.5 0 2.7.3 3.5 1 .7.6 1.1 1.4 1.1 2.5a3 3 0 01-.6 1.9c-.4.6-1 1-1.6 1.2.4.1.9.3 1.3.6s.8.7 1 1.2c.4.4.5 1 .5 1.6 0 1.3-.4 2.3-1.3 3-.8.7-2.1 1-3.8 1H7.8zm5-8.3c.6 0 1.2-.1 1.6-.5.4-.3.6-.7.6-1.3 0-1.1-.8-1.7-2.3-1.7H9.3v3.5h3.4zm.5 6c.7 0 1.3-.1 1.7-.4.4-.4.6-.9.6-1.5s-.2-1-.7-1.4c-.4-.3-1-.4-2-.4H9.4v3.8h4z\" fill-rule=\"evenodd\"/></svg>',\n      \"bookmark\": '<svg width=\"24\" height=\"24\"><path d=\"M6 4v17l6-4 6 4V4c0-.6-.4-1-1-1H7a1 1 0 00-1 1z\" fill-rule=\"nonzero\"/></svg>',\n      \"border-style\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><rect width=\"18\" height=\"2\" x=\"3\" y=\"6\" rx=\"1\"/><rect width=\"2.8\" height=\"2\" x=\"3\" y=\"16\" rx=\"1\"/><rect width=\"2.8\" height=\"2\" x=\"6.8\" y=\"16\" rx=\"1\"/><rect width=\"2.8\" height=\"2\" x=\"10.6\" y=\"16\" rx=\"1\"/><rect width=\"2.8\" height=\"2\" x=\"14.4\" y=\"16\" rx=\"1\"/><rect width=\"2.8\" height=\"2\" x=\"18.2\" y=\"16\" rx=\"1\"/><rect width=\"8\" height=\"2\" x=\"3\" y=\"11\" rx=\"1\"/><rect width=\"8\" height=\"2\" x=\"13\" y=\"11\" rx=\"1\"/></g></svg>',\n      \"border-width\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><rect width=\"18\" height=\"5\" x=\"3\" y=\"5\" rx=\"1\"/><rect width=\"18\" height=\"3.5\" x=\"3\" y=\"11.5\" rx=\"1\"/><rect width=\"18\" height=\"2\" x=\"3\" y=\"17\" rx=\"1\"/></g></svg>',\n      \"brightness\": '<svg width=\"24\" height=\"24\"><path d=\"M12 17c.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 01-.7.3 1 1 0 01-.7-.3 1 1 0 01-.3-.7v-1c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3zm0-10a1 1 0 01-.7-.3A1 1 0 0111 6V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 01-.7.3zm7 4c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 01-.7.3h-1a1 1 0 01-.7-.3 1 1 0 01-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1zM7 12c0 .3-.1.5-.3.7a1 1 0 01-.7.3H5a1 1 0 01-.7-.3A1 1 0 014 12c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1c.3 0 .5.1.7.3.2.2.3.4.3.7zm10 3.5l.7.8c.2.1.3.4.3.6 0 .3-.1.6-.3.8a1 1 0 01-.8.3 1 1 0 01-.6-.3l-.8-.7a1 1 0 01-.3-.8c0-.2.1-.5.3-.7a1 1 0 011.4 0zm-10-7l-.7-.8a1 1 0 01-.3-.6c0-.3.1-.6.3-.8.2-.2.5-.3.8-.3.2 0 .5.1.7.3l.7.7c.2.2.3.5.3.8 0 .2-.1.5-.3.7a1 1 0 01-.7.3 1 1 0 01-.8-.3zm10 0a1 1 0 01-.8.3 1 1 0 01-.7-.3 1 1 0 01-.3-.7c0-.3.1-.6.3-.8l.8-.7c.1-.2.4-.3.6-.3.3 0 .6.1.8.3.2.2.3.5.3.8 0 .2-.1.5-.3.7l-.7.7zm-10 7c.2-.2.5-.3.8-.3.2 0 .5.1.7.3a1 1 0 010 1.4l-.8.8a1 1 0 01-.6.3 1 1 0 01-.8-.3 1 1 0 01-.3-.8c0-.2.1-.5.3-.6l.7-.8zM12 8a4 4 0 013.7 2.4 4 4 0 010 3.2A4 4 0 0112 16a4 4 0 01-3.7-2.4 4 4 0 010-3.2A4 4 0 0112 8zm0 6.5c.7 0 1.3-.2 1.8-.7.5-.5.7-1.1.7-1.8s-.2-1.3-.7-1.8c-.5-.5-1.1-.7-1.8-.7s-1.3.2-1.8.7c-.5.5-.7 1.1-.7 1.8s.2 1.3.7 1.8c.5.5 1.1.7 1.8.7z\" fill-rule=\"evenodd\"/></svg>',\n      \"browse\": '<svg width=\"24\" height=\"24\"><path d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2h-4v-2h4V8H5v10h4v2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm-8 9.4l-2.3 2.3a1 1 0 11-1.4-1.4l4-4a1 1 0 011.4 0l4 4a1 1 0 01-1.4 1.4L13 13.4V20a1 1 0 01-2 0v-6.6z\" fill-rule=\"nonzero\"/></svg>',\n      \"cancel\": '<svg width=\"24\" height=\"24\"><path d=\"M12 4.6a7.4 7.4 0 110 14.8 7.4 7.4 0 010-14.8zM12 3a9 9 0 100 18 9 9 0 000-18zm0 8L14.8 8l1 1.1-2.7 2.8 2.7 2.7-1.1 1.1-2.7-2.7-2.7 2.7-1-1.1 2.6-2.7-2.7-2.7 1-1.1 2.8 2.7z\" fill-rule=\"nonzero\"/></svg>',\n      \"cell-background-color\": '<svg width=\"24\" height=\"24\"><path d=\"M15.7 2l1.6 1.6-2.7 2.6 5.9 5.8c.7.7.7 1.7 0 2.4l-6.3 6.1a1.7 1.7 0 01-2.4 0l-6.3-6.1c-.7-.7-.7-1.7 0-2.4L15.7 2zM18 12l-4.5-4L9 12h9zM4 16s2 2.4 2 3.8C6 21 5.1 22 4 22s-2-1-2-2.2C2 18.4 4 16 4 16z\"/></svg>',\n      \"cell-border-color\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path fill-rule=\"nonzero\" d=\"M5 13v5h2v2H5a2 2 0 01-2-2v-5h2zm8-7V4h6a2 2 0 012 2h-8z\" opacity=\".2\"/><path fill-rule=\"nonzero\" d=\"M13 4v2H5v7H3V6c0-1.1.9-2 2-2h8zm-2.6 14.1l.1-.1.1.1.2.3.2.2.2.2c.4.6.8 1.2.8 1.7 0 .8-.7 1.5-1.5 1.5S9 21.3 9 20.5c0-.5.4-1.1.8-1.7l.2-.2.2-.2.2-.3z\"/><path d=\"M13 11l-2 2H5v-2h6V6h2z\"/><path fill-rule=\"nonzero\" d=\"M18.4 8l1 1-1.8 1.9 4 4c.5.4.5 1.1 0 1.6l-4.3 4.2a1.2 1.2 0 01-1.6 0l-4.4-4.2c-.4-.5-.4-1.2 0-1.7l7-6.8zm1.6 7l-3-3-3 3h6z\"/></g></svg>',\n      \"change-case\": '<svg width=\"24\" height=\"24\"><path d=\"M18.4 18.2v-.6c-.5.8-1.3 1.2-2.4 1.2-2.2 0-3.3-1.6-3.3-4.8 0-3.1 1-4.7 3.3-4.7 1.1 0 1.8.3 2.4 1.1v-.6c0-.5.4-.8.8-.8s.8.3.8.8v8.4c0 .5-.4.8-.8.8a.8.8 0 01-.8-.8zm-2-7.4c-1.3 0-1.8.9-1.8 3.2 0 2.4.5 3.3 1.7 3.3 1.3 0 1.8-.9 1.8-3.2 0-2.4-.5-3.3-1.7-3.3zM10 15.7H5.5l-.8 2.6a1 1 0 01-1 .7h-.2a.7.7 0 01-.7-1l4-12a1 1 0 012 0l4 12a.7.7 0 01-.8 1h-.2a1 1 0 01-1-.7l-.8-2.6zm-.3-1.5l-2-6.5-1.9 6.5h3.9z\" fill-rule=\"evenodd\"/></svg>',\n      \"character-count\": '<svg width=\"24\" height=\"24\"><path d=\"M4 11.5h16v1H4v-1zm4.8-6.8V10H7.7V5.8h-1v-1h2zM11 8.3V9h2v1h-3V7.7l2-1v-.9h-2v-1h3v2.4l-2 1zm6.3-3.4V10h-3.1V9h2.1V8h-2.1V6.8h2.1v-1h-2.1v-1h3.1zM5.8 16.4c0-.5.2-.8.5-1 .2-.2.6-.3 1.2-.3l.8.1c.2 0 .4.2.5.3l.4.4v2.8l.2.3H8.2v-.1-.2l-.6.3H7c-.4 0-.7 0-1-.2a1 1 0 01-.3-.9c0-.3 0-.6.3-.8.3-.2.7-.4 1.2-.4l.6-.2h.3v-.2l-.1-.2a.8.8 0 00-.5-.1 1 1 0 00-.4 0l-.3.4h-1zm2.3.8h-.2l-.2.1-.4.1a1 1 0 00-.4.2l-.2.2.1.3.5.1h.4l.4-.4v-.6zm2-3.4h1.2v1.7l.5-.3h.5c.5 0 .9.1 1.2.5.3.4.5.8.5 1.4 0 .6-.2 1.1-.5 1.5-.3.4-.7.6-1.3.6l-.6-.1-.4-.4v.4h-1.1v-5.4zm1.1 3.3c0 .3 0 .6.2.8a.7.7 0 001.2 0l.2-.8c0-.4 0-.6-.2-.8a.7.7 0 00-.6-.3l-.6.3-.2.8zm6.1-.5c0-.2 0-.3-.2-.4a.8.8 0 00-.5-.2c-.3 0-.5.1-.6.3l-.2.9c0 .3 0 .6.2.8.1.2.3.3.6.3.2 0 .4 0 .5-.2l.2-.4h1.1c0 .5-.3.8-.6 1.1a2 2 0 01-1.3.4c-.5 0-1-.2-1.3-.6a2 2 0 01-.5-1.4c0-.6.1-1.1.5-1.5.3-.4.8-.5 1.4-.5.5 0 1 0 1.2.3.4.3.5.7.5 1.2h-1v-.1z\" fill-rule=\"evenodd\"/></svg>',\n      \"checklist-rtl\": '<svg width=\"24\" height=\"24\"><path d=\"M5 17h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm14.2 11c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 8c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8z\" fill-rule=\"evenodd\"/></svg>',\n      \"checklist\": '<svg width=\"24\" height=\"24\"><path d=\"M11 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0-6h8a1 1 0 010 2h-8a1 1 0 010-2zM7.2 16c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 8c-.2.3-.7.4-1 0L3.8 6.9a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8z\" fill-rule=\"evenodd\"/></svg>',\n      \"checkmark\": '<svg width=\"24\" height=\"24\"><path d=\"M18.2 5.4a1 1 0 011.6 1.2l-8 12a1 1 0 01-1.5.1l-5-5a1 1 0 111.4-1.4l4.1 4.1 7.4-11z\" fill-rule=\"nonzero\"/></svg>',\n      \"chevron-down\": '<svg width=\"10\" height=\"10\"><path d=\"M8.7 2.2c.3-.3.8-.3 1 0 .4.4.4.9 0 1.2L5.7 7.8c-.3.3-.9.3-1.2 0L.2 3.4a.8.8 0 010-1.2c.3-.3.8-.3 1.1 0L5 6l3.7-3.8z\" fill-rule=\"nonzero\"/></svg>',\n      \"chevron-left\": '<svg width=\"10\" height=\"10\"><path d=\"M7.8 1.3L4 5l3.8 3.7c.3.3.3.8 0 1-.4.4-.9.4-1.2 0L2.2 5.7a.8.8 0 010-1.2L6.6.2C7 0 7.4 0 7.8.2c.3.3.3.8 0 1.1z\" fill-rule=\"nonzero\"/></svg>',\n      \"chevron-right\": '<svg width=\"10\" height=\"10\"><path d=\"M2.2 1.3a.8.8 0 010-1c.4-.4.9-.4 1.2 0l4.4 4.1c.3.4.3.9 0 1.2L3.4 9.8c-.3.3-.8.3-1.2 0a.8.8 0 010-1.1L6 5 2.2 1.3z\" fill-rule=\"nonzero\"/></svg>',\n      \"chevron-up\": '<svg width=\"10\" height=\"10\"><path d=\"M8.7 7.8L5 4 1.3 7.8c-.3.3-.8.3-1 0a.8.8 0 010-1.2l4.1-4.4c.3-.3.9-.3 1.2 0l4.2 4.4c.3.3.3.9 0 1.2-.3.3-.8.3-1.1 0z\" fill-rule=\"nonzero\"/></svg>',\n      \"close\": '<svg width=\"24\" height=\"24\"><path d=\"M17.3 8.2L13.4 12l3.9 3.8a1 1 0 01-1.5 1.5L12 13.4l-3.8 3.9a1 1 0 01-1.5-1.5l3.9-3.8-3.9-3.8a1 1 0 011.5-1.5l3.8 3.9 3.8-3.9a1 1 0 011.5 1.5z\" fill-rule=\"evenodd\"/></svg>',\n      \"code-sample\": '<svg width=\"24\" height=\"26\"><path d=\"M7.1 11a2.8 2.8 0 01-.8 2 2.8 2.8 0 01.8 2v1.7c0 .3.1.6.4.8.2.3.5.4.8.4.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.7 0-1.4-.3-2-.8-.5-.6-.8-1.3-.8-2V15c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 01-.4-.4v-.8c0-.2.2-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V9.3c0-.7.3-1.4.8-2 .6-.5 1.3-.8 2-.8.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8V11zm9.8 0V9.3c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 01-.4-.4V7c0-.2.1-.4.4-.4.7 0 1.4.3 2 .8.5.6.8 1.3.8 2V11c0 .3.1.6.4.8.2.3.5.4.8.4.2 0 .4.2.4.4v.8c0 .2-.2.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8v1.7c0 .7-.3 1.4-.8 2-.6.5-1.3.8-2 .8a.4.4 0 01-.4-.4v-.8c0-.2.1-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V15a2.8 2.8 0 01.8-2 2.8 2.8 0 01-.8-2zm-3.3-.4c0 .4-.1.8-.5 1.1-.3.3-.7.5-1.1.5-.4 0-.8-.2-1.1-.5-.4-.3-.5-.7-.5-1.1 0-.5.1-.9.5-1.2.3-.3.7-.4 1.1-.4.4 0 .8.1 1.1.4.4.3.5.7.5 1.2zM12 13c.4 0 .8.1 1.1.5.4.3.5.7.5 1.1 0 1-.1 1.6-.5 2a3 3 0 01-1.1 1c-.4.3-.8.4-1.1.4a.5.5 0 01-.5-.5V17a3 3 0 001-.2l.6-.6c-.6 0-1-.2-1.3-.5-.2-.3-.3-.7-.3-1 0-.5.1-1 .5-1.2.3-.4.7-.5 1.1-.5z\" fill-rule=\"evenodd\"/></svg>',\n      \"color-levels\": '<svg width=\"24\" height=\"24\"><path d=\"M17.5 11.4A9 9 0 0118 14c0 .5 0 1-.2 1.4 0 .4-.3.9-.5 1.3a6.2 6.2 0 01-3.7 3 5.7 5.7 0 01-3.2 0A5.9 5.9 0 017.6 18a6.2 6.2 0 01-1.4-2.6 6.7 6.7 0 010-2.8c0-.4.1-.9.3-1.3a13.6 13.6 0 012.3-4A20 20 0 0112 4a26.4 26.4 0 013.2 3.4 18.2 18.2 0 012.3 4zm-2 4.5c.4-.7.5-1.4.5-2a7.3 7.3 0 00-1-3.2c.2.6.2 1.2.2 1.9a4.5 4.5 0 01-1.3 3 5.3 5.3 0 01-2.3 1.5 4.9 4.9 0 01-2 .1 4.3 4.3 0 002.4.8 4 4 0 002-.6 4 4 0 001.5-1.5z\" fill-rule=\"evenodd\"/></svg>',\n      \"color-picker\": '<svg width=\"24\" height=\"24\"><path d=\"M12 3a9 9 0 000 18 1.5 1.5 0 001.1-2.5c-.2-.3-.4-.6-.4-1 0-.8.7-1.5 1.5-1.5H16a5 5 0 005-5c0-4.4-4-8-9-8zm-5.5 9a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm3-4a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm5 0a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm3 4a1.5 1.5 0 110-3 1.5 1.5 0 010 3z\" fill-rule=\"nonzero\"/></svg>',\n      \"color-swatch-remove-color\": '<svg width=\"24\" height=\"24\"><path stroke=\"#000\" stroke-width=\"2\" d=\"M21 3L3 21\" fill-rule=\"evenodd\"/></svg>',\n      \"color-swatch\": '<svg width=\"24\" height=\"24\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"1\" fill-rule=\"evenodd\"/></svg>',\n      \"comment-add\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M9 19l3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 00-1 1v10c0 .6.4 1 1 1h4v2zm-2 4v-4H5a3 3 0 01-3-3V6a3 3 0 013-3h14a3 3 0 013 3v10a3 3 0 01-3 3h-6.4L7 23z\"/><path d=\"M13 10h2a1 1 0 010 2h-2v2a1 1 0 01-2 0v-2H9a1 1 0 010-2h2V8a1 1 0 012 0v2z\"/></g></svg>',\n      \"comment\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M9 19l3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 00-1 1v10c0 .6.4 1 1 1h4v2zm-2 4v-4H5a3 3 0 01-3-3V6a3 3 0 013-3h14a3 3 0 013 3v10a3 3 0 01-3 3h-6.4L7 23z\"/></svg>',\n      \"contrast\": '<svg width=\"24\" height=\"24\"><path d=\"M12 4a7.8 7.8 0 015.7 2.3A8 8 0 1112 4zm-6 8a6 6 0 006 6V6a6 6 0 00-6 6z\" fill-rule=\"evenodd\"/></svg>',\n      \"copy\": '<svg width=\"24\" height=\"24\"><path d=\"M16 3H6a2 2 0 00-2 2v11h2V5h10V3zm1 4a2 2 0 012 2v10a2 2 0 01-2 2h-7a2 2 0 01-2-2V9c0-1.2.9-2 2-2h7zm0 12V9h-7v10h7z\" fill-rule=\"nonzero\"/></svg>',\n      \"crop\": '<svg width=\"24\" height=\"24\"><path d=\"M17 8v7h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v2c0 .6-.4 1-1 1a1 1 0 01-1-1v-2H7V9H5a1 1 0 110-2h2V5c0-.6.4-1 1-1s1 .4 1 1v2h7l3-3 1 1-3 3zM9 9v5l5-5H9zm1 6h5v-5l-5 5z\" fill-rule=\"evenodd\"/></svg>',\n      \"cut-column\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M7.2 4.5c.9 0 1.6.4 2.2 1A3.7 3.7 0 0110.5 8v.5l1 1 4-4 1-.5a3.3 3.3 0 012 0c.4 0 .7.3 1 .5L17 8h4v13h-6V10l-1.5 1.5.5.5v4l-2.5-2.5-1 1v.5c0 .4 0 .8-.3 1.2-.2.5-.4.9-.8 1.2-.6.7-1.3 1-2.2 1-.8.2-1.5 0-2-.6l-.5-.8-.2-1c0-.4 0-.8.3-1.2A3.9 3.9 0 017 12.7c.5-.2 1-.3 1.5-.2l1-1-1-1c-.5 0-1 0-1.5-.2-.5-.1-1-.4-1.4-.9-.4-.3-.6-.7-.8-1.2L4.5 7c0-.4 0-.7.2-1 0-.3.3-.6.5-.8.5-.5 1.2-.8 2-.7zm12.3 5h-3v10h3v-10zM8 13.8h-.3l-.4.2a2.8 2.8 0 00-.7.4v.1a2.8 2.8 0 00-.6.8l-.1.4v.7l.2.5.5.2h.7a2.6 2.6 0 00.8-.3 2.4 2.4 0 00.7-.7 2.5 2.5 0 00.3-.8 1.5 1.5 0 000-.8 1 1 0 00-.2-.4 1 1 0 00-.5-.2H8zm3.5-3.7c-.4 0-.7.1-1 .4-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4s.7-.1 1-.4c.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4zM7 5.8h-.4a1 1 0 00-.5.3 1 1 0 00-.2.5v.7a2.5 2.5 0 00.3.8l.2.3h.1l.4.4.4.2.4.1h.7L9 9l.2-.4a1.6 1.6 0 000-.8 2.6 2.6 0 00-.3-.8A2.5 2.5 0 007.7 6l-.4-.1H7z\"/></svg>',\n      \"cut-row\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M22 3v5H9l3 3 2-2h4l-4 4 1 1h.5c.4 0 .8 0 1.2.3.5.2.9.4 1.2.8.7.6 1 1.3 1 2.2.2.8 0 1.5-.6 2l-.8.5-1 .2c-.4 0-.8 0-1.2-.3a3.9 3.9 0 01-2.1-2.2c-.2-.5-.3-1-.2-1.5l-1-1-1 1c0 .5 0 1-.2 1.5-.1.5-.4 1-.9 1.4-.3.4-.7.6-1.2.8l-1.2.3c-.4 0-.7 0-1-.2-.3 0-.6-.3-.8-.5-.5-.5-.8-1.2-.7-2 0-.9.4-1.6 1-2.2A3.7 3.7 0 018.6 14H9l1-1-4-4-.5-1a3.3 3.3 0 010-2c0-.4.3-.7.5-1l2 2V3h14zM8.5 15.3h-.3a2.6 2.6 0 00-.8.4 2.5 2.5 0 00-.9 1.1l-.1.4v.7l.2.5.5.2h.7a2.5 2.5 0 00.8-.3L9 18V18l.4-.4.2-.4.1-.4v-.3-.4a1 1 0 00-.2-.5 1 1 0 00-.4-.2h-.5zm7 0H15a1 1 0 00-.4.3 1 1 0 00-.2.5 1.5 1.5 0 000 .7v.4a2.8 2.8 0 00.5.7h.1a2.8 2.8 0 00.8.6l.4.1h.7l.5-.2.2-.5v-.4-.3a2.6 2.6 0 00-.3-.8 2.4 2.4 0 00-.7-.7 2.5 2.5 0 00-.8-.3h-.3zM12 11.6c-.4 0-.7.1-1 .4-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4s.7-.1 1-.4c.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4zm8.5-7.1h-11v2h11v-2z\"/></svg>',\n      \"cut\": '<svg width=\"24\" height=\"24\"><path d=\"M18 15c.6.7 1 1.4 1 2.3 0 .8-.2 1.5-.7 2l-.8.5-1 .2c-.4 0-.8 0-1.2-.3a3.9 3.9 0 01-2.1-2.2c-.2-.5-.3-1-.2-1.5l-1-1-1 1c0 .5 0 1-.2 1.5-.1.5-.4 1-.9 1.4-.3.4-.7.6-1.2.8l-1.2.3c-.4 0-.7 0-1-.2-.3 0-.6-.3-.8-.5-.5-.5-.8-1.2-.7-2 0-.9.4-1.6 1-2.2A3.7 3.7 0 018.6 14H9l1-1-4-4-.5-1a3.3 3.3 0 010-2c0-.4.3-.7.5-1l6 6 6-6 .5 1a3.3 3.3 0 010 2c0 .4-.3.7-.5 1l-4 4 1 1h.5c.4 0 .8 0 1.2.3.5.2.9.4 1.2.8zm-8.5 2.2l.1-.4v-.3-.4a1 1 0 00-.2-.5 1 1 0 00-.4-.2 1.6 1.6 0 00-.8 0 2.6 2.6 0 00-.8.3 2.5 2.5 0 00-.9 1.1l-.1.4v.7l.2.5.5.2h.7a2.5 2.5 0 00.8-.3 2.8 2.8 0 001-1zm2.5-2.8c.4 0 .7-.1 1-.4.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4s-.7.1-1 .4c-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4zm5.4 4l.2-.5v-.4-.3a2.6 2.6 0 00-.3-.8 2.4 2.4 0 00-.7-.7 2.5 2.5 0 00-.8-.3 1.5 1.5 0 00-.8 0 1 1 0 00-.4.2 1 1 0 00-.2.5 1.5 1.5 0 000 .7v.4l.3.4.3.4a2.8 2.8 0 00.8.5l.4.1h.7l.5-.2z\" fill-rule=\"evenodd\"/></svg>',\n      \"document-properties\": '<svg width=\"24\" height=\"24\"><path d=\"M14.4 3H7a2 2 0 00-2 2v14c0 1.1.9 2 2 2h10a2 2 0 002-2V7.6L14.4 3zM17 19H7V5h6v4h4v10z\" fill-rule=\"nonzero\"/></svg>',\n      \"drag\": '<svg width=\"24\" height=\"24\"><path d=\"M13 5h2v2h-2V5zm0 4h2v2h-2V9zM9 9h2v2H9V9zm4 4h2v2h-2v-2zm-4 0h2v2H9v-2zm0 4h2v2H9v-2zm4 0h2v2h-2v-2zM9 5h2v2H9V5z\" fill-rule=\"evenodd\"/></svg>',\n      \"duplicate-column\": '<svg width=\"24\" height=\"24\"><path d=\"M17 6v16h-7V6h7zm-2 2h-3v12h3V8zm-2-6v2H8v15H6V2h7z\"/></svg>',\n      \"duplicate-row\": '<svg width=\"24\" height=\"24\"><path d=\"M22 11v7H6v-7h16zm-2 2H8v3h12v-3zm-1-6v2H4v5H2V7h17z\"/></svg>',\n      \"duplicate\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M16 3v2H6v11H4V5c0-1.1.9-2 2-2h10zm3 8h-2V9h-7v10h9a2 2 0 01-2 2h-7a2 2 0 01-2-2V9c0-1.2.9-2 2-2h7a2 2 0 012 2v2z\"/><path d=\"M17 14h1a1 1 0 010 2h-1v1a1 1 0 01-2 0v-1h-1a1 1 0 010-2h1v-1a1 1 0 012 0v1z\"/></g></svg>',\n      \"edit-block\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19.8 8.8l-9.4 9.4c-.2.2-.5.4-.9.4l-5.4 1.2 1.2-5.4.5-.8 9.4-9.4c.7-.7 1.8-.7 2.5 0l2.1 2.1c.7.7.7 1.8 0 2.5zm-2-.2l1-.9v-.3l-2.2-2.2a.3.3 0 00-.3 0l-1 1L18 8.5zm-1 1l-2.5-2.4-6 6 2.5 2.5 6-6zm-7 7.1l-2.6-2.4-.3.3-.1.2-.7 3 3.1-.6h.1l.4-.5z\"/></svg>',\n      \"edit-image\": '<svg width=\"24\" height=\"24\"><path d=\"M18 16h2V7a2 2 0 00-2-2H7v2h11v9zM6 17h15a1 1 0 010 2h-1v1a1 1 0 01-2 0v-1H6a2 2 0 01-2-2V7H3a1 1 0 110-2h1V4a1 1 0 112 0v13zm3-5.3l1.3 2 3-4.7 3.7 6H7l2-3.3z\" fill-rule=\"nonzero\"/></svg>',\n      \"embed-page\": '<svg width=\"24\" height=\"24\"><path d=\"M19 6V5H5v14h2A13 13 0 0119 6zm0 1.4c-.8.8-1.6 2.4-2.2 4.6H19V7.4zm0 5.6h-2.4c-.4 1.8-.6 3.8-.6 6h3v-6zm-4 6c0-2.2.2-4.2.6-6H13c-.7 1.8-1.1 3.8-1.1 6h3zm-4 0c0-2.2.4-4.2 1-6H9.6A12 12 0 008 19h3zM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 01-1-1V4c0-.6.4-1 1-1zm11.8 9c.4-1.9 1-3.4 1.8-4.5a9.2 9.2 0 00-4 4.5h2.2zm-3.4 0a12 12 0 012.8-4 12 12 0 00-5 4h2.2z\" fill-rule=\"nonzero\"/></svg>',\n      \"embed\": '<svg width=\"24\" height=\"24\"><path d=\"M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 01-1-1V4c0-.6.4-1 1-1zm1 2v14h14V5H5zm4.8 2.6l5.6 4a.5.5 0 010 .8l-5.6 4A.5.5 0 019 16V8a.5.5 0 01.8-.4z\" fill-rule=\"nonzero\"/></svg>',\n      \"emoji\": '<svg width=\"24\" height=\"24\"><path d=\"M9 11c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 00-1 1c0 .6.4 1 1 1zm6 0c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 00-1 1c0 .6.4 1 1 1zm-3 5.5c2.1 0 4-1.5 4.4-3.5H7.6c.5 2 2.3 3.5 4.4 3.5zM12 4a8 8 0 100 16 8 8 0 000-16zm0 14.5a6.5 6.5 0 110-13 6.5 6.5 0 010 13z\" fill-rule=\"nonzero\"/></svg>',\n      \"export\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M14.4 3L18 7v1h-5V5H7v14h9a1 1 0 012 0c0 1-.8 2-1.9 2H7c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2h7.5z\"/><path d=\"M18.1 12c.5 0 .9.4.9 1 0 .5-.3 1-.8 1h-7.3c-.5 0-.9-.4-.9-1 0-.5.3-1 .8-1h7.3z\"/><path d=\"M16.4 9.2a1 1 0 011.4.2l2.4 3.6-2.4 3.6a1 1 0 01-1.7-1v-.2l1.7-2.4-1.6-2.4a1 1 0 01.2-1.4z\"/></g></svg>',\n      \"fill\": '<svg width=\"24\" height=\"26\"><path d=\"M16.6 12l-9-9-1.4 1.4 2.4 2.4-5.2 5.1c-.5.6-.5 1.6 0 2.2L9 19.6a1.5 1.5 0 002.2 0l5.5-5.5c.5-.6.5-1.6 0-2.2zM5.2 13L10 8.2l4.8 4.8H5.2zM19 14.5s-2 2.2-2 3.5c0 1.1.9 2 2 2a2 2 0 002-2c0-1.3-2-3.5-2-3.5z\" fill-rule=\"nonzero\"/></svg>',\n      \"flip-horizontally\": '<svg width=\"24\" height=\"24\"><path d=\"M14 19h2v-2h-2v2zm4-8h2V9h-2v2zM4 7v10c0 1.1.9 2 2 2h3v-2H6V7h3V5H6a2 2 0 00-2 2zm14-2v2h2a2 2 0 00-2-2zm-7 16h2V3h-2v18zm7-6h2v-2h-2v2zm-4-8h2V5h-2v2zm4 12a2 2 0 002-2h-2v2z\" fill-rule=\"nonzero\"/></svg>',\n      \"flip-vertically\": '<svg width=\"24\" height=\"24\"><path d=\"M5 14v2h2v-2H5zm8 4v2h2v-2h-2zm4-14H7a2 2 0 00-2 2v3h2V6h10v3h2V6a2 2 0 00-2-2zm2 14h-2v2a2 2 0 002-2zM3 11v2h18v-2H3zm6 7v2h2v-2H9zm8-4v2h2v-2h-2zM5 18c0 1.1.9 2 2 2v-2H5z\" fill-rule=\"nonzero\"/></svg>',\n      \"format-painter\": '<svg width=\"24\" height=\"24\"><path d=\"M18 5V4c0-.5-.4-1-1-1H5a1 1 0 00-1 1v4c0 .6.5 1 1 1h12c.6 0 1-.4 1-1V7h1v4H9v9c0 .6.4 1 1 1h2c.6 0 1-.4 1-1v-7h8V5h-3z\" fill-rule=\"nonzero\"/></svg>',\n      \"format\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M17 5a1 1 0 010 2h-4v11a1 1 0 01-2 0V7H7a1 1 0 110-2h10z\"/></svg>',\n      \"fullscreen\": '<svg width=\"24\" height=\"24\"><path d=\"M15.3 10l-1.2-1.3 2.9-3h-2.3a.9.9 0 110-1.7H19c.5 0 .9.4.9.9v4.4a.9.9 0 11-1.8 0V7l-2.9 3zm0 4l3 3v-2.3a.9.9 0 111.7 0V19c0 .5-.4.9-.9.9h-4.4a.9.9 0 110-1.8H17l-3-2.9 1.3-1.2zM10 15.4l-2.9 3h2.3a.9.9 0 110 1.7H5a.9.9 0 01-.9-.9v-4.4a.9.9 0 111.8 0V17l2.9-3 1.2 1.3zM8.7 10L5.7 7v2.3a.9.9 0 01-1.7 0V5c0-.5.4-.9.9-.9h4.4a.9.9 0 010 1.8H7l3 2.9-1.3 1.2z\" fill-rule=\"nonzero\"/></svg>',\n      \"gallery\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M5 15.7l2.3-2.2c.3-.3.7-.3 1 0L11 16l5.1-5c.3-.4.8-.4 1 0l2 1.9V8H5v7.7zM5 18V19h3l1.8-1.9-2-2L5 17.9zm14-3l-2.5-2.4-6.4 6.5H19v-4zM4 6h16c.6 0 1 .4 1 1v13c0 .6-.4 1-1 1H4a1 1 0 01-1-1V7c0-.6.4-1 1-1zm6 7a2 2 0 110-4 2 2 0 010 4zM4.5 4h15a.5.5 0 110 1h-15a.5.5 0 010-1zm2-2h11a.5.5 0 110 1h-11a.5.5 0 010-1z\"/></svg>',\n      \"gamma\": '<svg width=\"24\" height=\"24\"><path d=\"M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 01-1-1V4c0-.6.4-1 1-1zm1 2v14h14V5H5zm6.5 11.8V14L9.2 8.7a5.1 5.1 0 00-.4-.8l-.1-.2H8 8v-1l.3-.1.3-.1h.7a1 1 0 01.6.5l.1.3a8.5 8.5 0 01.3.6l1.9 4.6 2-5.2a1 1 0 011-.6.5.5 0 01.5.6L13 14v2.8a.7.7 0 01-1.4 0z\" fill-rule=\"nonzero\"/></svg>',\n      \"help\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path d=\"M12 5.5a6.5 6.5 0 00-6 9 6.3 6.3 0 001.4 2l1 1a6.3 6.3 0 003.6 1 6.5 6.5 0 006-9 6.3 6.3 0 00-1.4-2l-1-1a6.3 6.3 0 00-3.6-1zM12 4a7.8 7.8 0 015.7 2.3A8 8 0 1112 4z\"/><path d=\"M9.6 9.7a.7.7 0 01-.7-.8c0-1.1 1.5-1.8 3.2-1.8 1.8 0 3.2.8 3.2 2.4 0 1.4-.4 2.1-1.5 2.8-.2 0-.3.1-.3.2a2 2 0 00-.8.8.8.8 0 01-1.4-.6c.3-.7.8-1 1.3-1.5l.4-.2c.7-.4.8-.6.8-1.5 0-.5-.6-.9-1.7-.9-.5 0-1 .1-1.4.3-.2 0-.3.1-.3.2v-.2c0 .4-.4.8-.8.8z\" fill-rule=\"nonzero\"/><circle cx=\"12\" cy=\"16\" r=\"1\"/></g></svg>',\n      \"highlight-bg-color\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path id=\"tox-icon-highlight-bg-color__color\" d=\"M3 18h18v3H3z\"/><path fill-rule=\"nonzero\" d=\"M7.7 16.7H3l3.3-3.3-.7-.8L10.2 8l4 4.1-4 4.2c-.2.2-.6.2-.8 0l-.6-.7-1.1 1.1zm5-7.5L11 7.4l3-2.9a2 2 0 012.6 0L18 6c.7.7.7 2 0 2.7l-2.9 2.9-1.8-1.8-.5-.6\"/></g></svg>',\n      \"home\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"/></svg>',\n      \"horizontal-rule\": '<svg width=\"24\" height=\"24\"><path d=\"M4 11h16v2H4z\" fill-rule=\"evenodd\"/></svg>',\n      \"image-options\": '<svg width=\"24\" height=\"24\"><path d=\"M6 10a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2zm12 0a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2zm-6 0a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2z\" fill-rule=\"nonzero\"/></svg>',\n      \"image\": '<svg width=\"24\" height=\"24\"><path d=\"M5 15.7l3.3-3.2c.3-.3.7-.3 1 0L12 15l4.1-4c.3-.4.8-.4 1 0l2 1.9V5H5v10.7zM5 18V19h3l2.8-2.9-2-2L5 17.9zm14-3l-2.5-2.4-6.4 6.5H19v-4zM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 01-1-1V4c0-.6.4-1 1-1zm6 8a2 2 0 100-4 2 2 0 000 4z\" fill-rule=\"nonzero\"/></svg>',\n      \"indent\": '<svg width=\"24\" height=\"24\"><path d=\"M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 110-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm-5 4h12a1 1 0 010 2H7a1 1 0 010-2zm-2.6-3.8L6.2 12l-1.8-1.2a1 1 0 011.2-1.6l3 2a1 1 0 010 1.6l-3 2a1 1 0 11-1.2-1.6z\" fill-rule=\"evenodd\"/></svg>',\n      \"info\": '<svg width=\"24\" height=\"24\"><path d=\"M12 4a7.8 7.8 0 015.7 2.3A8 8 0 1112 4zm-1 3v2h2V7h-2zm3 10v-1h-1v-5h-3v1h1v4h-1v1h4z\" fill-rule=\"evenodd\"/></svg>',\n      \"insert-character\": '<svg width=\"24\" height=\"24\"><path d=\"M15 18h4l1-2v4h-6v-3.3l1.4-1a6 6 0 001.8-2.9 6.3 6.3 0 00-.1-4.1 5.8 5.8 0 00-3-3.2c-.6-.3-1.3-.5-2.1-.5a5.1 5.1 0 00-3.9 1.8 6.3 6.3 0 00-1.3 6 6.2 6.2 0 001.8 3l1.4.9V20H4v-4l1 2h4v-.5l-2-1L5.4 15A6.5 6.5 0 014 11c0-1 .2-1.9.6-2.7A7 7 0 016.3 6C7.1 5.4 8 5 9 4.5c1-.3 2-.5 3.1-.5a8.8 8.8 0 015.7 2 7 7 0 011.7 2.3 6 6 0 01.2 4.8c-.2.7-.6 1.3-1 1.9a7.6 7.6 0 01-3.6 2.5v.5z\" fill-rule=\"evenodd\"/></svg>',\n      \"insert-time\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M12 19a7 7 0 100-14 7 7 0 000 14zm0 2a9 9 0 110-18 9 9 0 010 18z\"/><path d=\"M16 12h-3V7c0-.6-.4-1-1-1a1 1 0 00-1 1v7h5c.6 0 1-.4 1-1s-.4-1-1-1z\"/></g></svg>',\n      \"invert\": '<svg width=\"24\" height=\"24\"><path d=\"M18 19.3L16.5 18a5.8 5.8 0 01-3.1 1.9 6.1 6.1 0 01-5.5-1.6A5.8 5.8 0 016 14v-.3l.1-1.2A13.9 13.9 0 017.7 9l-3-3 .7-.8 2.8 2.9 9 8.9 1.5 1.6-.7.6zm0-5.5v.3l-.1 1.1-.4 1-1.2-1.2a4.3 4.3 0 00.2-1v-.2c0-.4 0-.8-.2-1.3l-.5-1.4a14.8 14.8 0 00-3-4.2L12 6a26.1 26.1 0 00-2.2 2.5l-1-1a20.9 20.9 0 012.9-3.3L12 4l1 .8a22.2 22.2 0 014 5.4c.6 1.2 1 2.4 1 3.6z\" fill-rule=\"evenodd\"/></svg>',\n      \"italic\": '<svg width=\"24\" height=\"24\"><path d=\"M16.7 4.7l-.1.9h-.3c-.6 0-1 0-1.4.3-.3.3-.4.6-.5 1.1l-2.1 9.8v.6c0 .5.4.8 1.4.8h.2l-.2.8H8l.2-.8h.2c1.1 0 1.8-.5 2-1.5l2-9.8.1-.5c0-.6-.4-.8-1.4-.8h-.3l.2-.9h5.8z\" fill-rule=\"evenodd\"/></svg>',\n      \"language\": '<svg width=\"24\" height=\"24\"><path d=\"M12 3a9 9 0 110 18 9 9 0 010-18zm4.3 13.3c-.5 1-1.2 2-2 2.9a7.5 7.5 0 003.2-2.1l-.2-.2a6 6 0 00-1-.6zm-8.6 0c-.5.2-.9.5-1.2.8.9 1 2 1.7 3.2 2a10 10 0 01-2-2.8zm3.6-.8c-.8 0-1.6.1-2.2.3.5 1 1.2 1.9 2.1 2.7zm1.5 0v3c.9-.8 1.6-1.7 2.1-2.7-.6-.2-1.4-.3-2.1-.3zm-6-2.7H4.5c.2 1 .5 2.1 1 3h.3l1.3-1a10 10 0 01-.3-2zm12.7 0h-2.3c0 .7-.1 1.4-.3 2l1.6 1.1c.5-1 .9-2 1-3.1zm-3.8 0h-3V14c1 0 2 .1 2.7.4.2-.5.3-1 .3-1.6zm-4.4 0h-3l.3 1.6c.8-.3 1.7-.4 2.7-.4v-1.3zm-5.5-5c-.7 1-1.1 2.2-1.3 3.5h2.3c0-1 .2-1.8.5-2.6l-1.5-1zm2.9 1.4v.1c-.2.6-.4 1.3-.4 2h3V9.4c-1 0-1.8-.1-2.6-.3zm6.6 0h-.1l-2.4.3v1.8h3l-.5-2.1zm3-1.4l-.3.1-1.3.8c.3.8.5 1.6.5 2.6h2.3a7.5 7.5 0 00-1.3-3.5zm-9 0l2 .2V5.5a9 9 0 00-2 2.2zm3.5-2.3V8c.6 0 1.3 0 1.9-.2a9 9 0 00-2-2.3zm-3-.7h-.1c-1.1.4-2.1 1-3 1.8l1.2.7a10 10 0 011.9-2.5zm4.4 0l.1.1a10 10 0 011.8 2.4l1.1-.7a7.5 7.5 0 00-3-1.8z\"/></svg>',\n      \"line-height\": '<svg width=\"24\" height=\"24\"><path d=\"M21 5a1 1 0 01.1 2H13a1 1 0 01-.1-2H21zm0 4a1 1 0 01.1 2H13a1 1 0 01-.1-2H21zm0 4a1 1 0 01.1 2H13a1 1 0 01-.1-2H21zm0 4a1 1 0 01.1 2H13a1 1 0 01-.1-2H21zM7 3.6l3.7 3.7a1 1 0 01-1.3 1.5h-.1L8 7.3v9.2l1.3-1.3a1 1 0 011.3 0h.1c.4.4.4 1 0 1.3v.1L7 20.4l-3.7-3.7a1 1 0 011.3-1.5h.1L6 16.7V7.4L4.7 8.7a1 1 0 01-1.3 0h-.1a1 1 0 010-1.3v-.1L7 3.6z\"/></svg>',\n      \"line\": '<svg width=\"24\" height=\"24\"><path d=\"M15 9l-8 8H4v-3l8-8 3 3zm1-1l-3-3 1-1h1c-.2 0 0 0 0 0l2 2s0 .2 0 0v1l-1 1zM4 18h16v2H4v-2z\" fill-rule=\"evenodd\"/></svg>',\n      \"link\": '<svg width=\"24\" height=\"24\"><path d=\"M6.2 12.3a1 1 0 011.4 1.4l-2.1 2a2 2 0 102.7 2.8l4.8-4.8a1 1 0 000-1.4 1 1 0 111.4-1.3 2.9 2.9 0 010 4L9.6 20a3.9 3.9 0 01-5.5-5.5l2-2zm11.6-.6a1 1 0 01-1.4-1.4l2-2a2 2 0 10-2.6-2.8L11 10.3a1 1 0 000 1.4A1 1 0 119.6 13a2.9 2.9 0 010-4L14.4 4a3.9 3.9 0 015.5 5.5l-2 2z\" fill-rule=\"nonzero\"/></svg>',\n      \"list-bull-circle\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path d=\"M11 16a2 2 0 100-4 2 2 0 000 4zm0 1a3 3 0 110-6 3 3 0 010 6zM11 26a2 2 0 100-4 2 2 0 000 4zm0 1a3 3 0 110-6 3 3 0 010 6zM11 36a2 2 0 100-4 2 2 0 000 4zm0 1a3 3 0 110-6 3 3 0 010 6z\" fill-rule=\"nonzero\"/><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/></g></svg>',\n      \"list-bull-default\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><circle cx=\"11\" cy=\"14\" r=\"3\"/><circle cx=\"11\" cy=\"24\" r=\"3\"/><circle cx=\"11\" cy=\"34\" r=\"3\"/><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/></g></svg>',\n      \"list-bull-square\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path d=\"M8 11h6v6H8zM8 21h6v6H8zM8 31h6v6H8z\"/><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/></g></svg>',\n      \"list-num-default-rtl\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"M37.4 17v-4.8l-1.6 1v-1.1l1.6-1h1.2V17zM33.3 17.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm1.7 5.7c0-1.2 1-2 2.2-2 1.3 0 2.1.8 2.1 1.8 0 .7-.3 1.2-1.3 2.2l-1.2 1v.2h2.6v1h-4.3v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H35zm-1.7 4.3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm3.2 7.3v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H35c0-1.1 1-1.8 2.2-1.8 1.2 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.7.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .6 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7zm-3.3 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7z\"/></g></svg>',\n      \"list-num-default\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"M10 17v-4.8l-1.5 1v-1.1l1.6-1h1.2V17h-1.2zm3.6.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm-5 5.7c0-1.2.8-2 2.1-2s2.1.8 2.1 1.8c0 .7-.3 1.2-1.4 2.2l-1.1 1v.2h2.6v1H8.6v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H8.5zm6.3 4.3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM10 34.4v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H8.6c0-1.1 1-1.8 2.2-1.8 1.3 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.8.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .7 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7zm4.7 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7z\"/></g></svg>',\n      \"list-num-lower-alpha-rtl\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"M36.5 16c-.9 0-1.5-.5-1.5-1.3s.6-1.3 1.8-1.4h1v-.4c0-.4-.2-.6-.7-.6-.4 0-.7.1-.8.4h-1.1c0-.8.8-1.4 2-1.4S39 12 39 13V16h-1.2v-.6c-.3.4-.8.7-1.4.7zm.4-.8c.6 0 1-.4 1-.9V14h-1c-.5.1-.7.3-.7.6 0 .4.3.6.7.6zM33.1 16.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zM37.7 26c-.7 0-1.2-.2-1.5-.7v.7H35v-6.3h1.2v2.5c.3-.5.8-.9 1.5-.9 1.1 0 1.8 1 1.8 2.4 0 1.5-.7 2.4-1.8 2.4zm-.5-3.6c-.6 0-1 .5-1 1.3s.4 1.4 1 1.4c.7 0 1-.6 1-1.4 0-.8-.3-1.3-1-1.3zM33.2 26.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zm6 7h-1c-.1-.5-.4-.8-1-.8s-1 .5-1 1.4c0 1 .4 1.4 1 1.4.5 0 .9-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7zm-6.1 3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z\"/></g></svg>',\n      \"list-num-lower-alpha\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"M10.3 15.2c.5 0 1-.4 1-.9V14h-1c-.5.1-.8.3-.8.6 0 .4.3.6.8.6zm-.4.9c-1 0-1.5-.6-1.5-1.4 0-.8.6-1.3 1.7-1.4h1.1v-.4c0-.4-.2-.6-.7-.6-.5 0-.8.1-.9.4h-1c0-.8.8-1.4 2-1.4 1.1 0 1.8.6 1.8 1.6V16h-1.1v-.6h-.1c-.2.4-.7.7-1.3.7zm4.6 0c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-3.2 10c-.6 0-1.2-.3-1.4-.8v.7H8.5v-6.3H10v2.5c.3-.5.8-.9 1.4-.9 1.2 0 1.9 1 1.9 2.4 0 1.5-.7 2.4-1.9 2.4zm-.4-3.7c-.7 0-1 .5-1 1.3s.3 1.4 1 1.4c.6 0 1-.6 1-1.4 0-.8-.4-1.3-1-1.3zm4 3.7c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-2.2 7h-1.2c0-.5-.4-.8-.9-.8-.6 0-1 .5-1 1.4 0 1 .4 1.4 1 1.4.5 0 .8-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7zm1.8 3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z\"/></g></svg>',\n      \"list-num-lower-greek-rtl\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"M37.4 16c-1.2 0-2-.8-2-2.3 0-1.5.8-2.4 2-2.4.6 0 1 .4 1.3 1v-.9H40v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1-.7h-.2c-.2.4-.7.8-1.3.8zm.3-1c.6 0 1-.5 1-1.3s-.4-1.3-1-1.3-1 .5-1 1.3.4 1.4 1 1.4zM33.3 16.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM36 21.9c0-1.5.8-2.3 2.1-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.9 1.3.9.3 1.3.8 1.3 1.7 0 1.2-.7 1.9-1.8 1.9-.6 0-1.1-.3-1.4-.8v2.2H36V22zm1.8 1.2v-1h.3c.5 0 .9-.2.9-.7 0-.5-.3-.8-.9-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1 1.3s1-.4 1-1-.4-1-1.2-1h-.3zM33.3 26.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM37.1 34.6L34.8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.2.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2zm.7 1a2 2 0 00-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1zM33.3 36.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z\"/></g></svg>',\n      \"list-num-lower-greek\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"M10.5 15c.7 0 1-.5 1-1.3s-.3-1.3-1-1.3c-.5 0-.9.5-.9 1.3s.4 1.4 1 1.4zm-.3 1c-1.1 0-1.8-.8-1.8-2.3 0-1.5.7-2.4 1.8-2.4.7 0 1.1.4 1.3 1h.1v-.9h1.2v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1.1-.7h-.1c-.2.4-.7.8-1.4.8zm5 .1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zm-4.9 7v-1h.3c.6 0 1-.2 1-.7 0-.5-.4-.8-1-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1.1 1.3.6 0 1-.4 1-1s-.5-1-1.3-1h-.3zM8.6 22c0-1.5.7-2.3 2-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.8 1.3.8.3 1.3.8 1.3 1.7 0 1.2-.8 1.9-1.9 1.9-.6 0-1.1-.3-1.3-.8v2.2H8.5V22zm6.2 4.2c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm-4.5 8.5L8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.1.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2zm.7 1a2 2 0 00-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1zm4.5.5c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z\"/></g></svg>',\n      \"list-num-lower-roman-rtl\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"M32.9 16v-1.2h-1.3V16H33zm0 10v-1.2h-1.3V26H33zm0 10v-1.2h-1.3V36H33z\"/><path fill-rule=\"nonzero\" d=\"M36 21h-1.5v5H36zM36 31h-1.5v5H36zM39 21h-1.5v5H39zM39 31h-1.5v5H39zM42 31h-1.5v5H42zM36 11h-1.5v5H36zM36 19h-1.5v1H36zM36 29h-1.5v1H36zM39 19h-1.5v1H39zM39 29h-1.5v1H39zM42 29h-1.5v1H42zM36 9h-1.5v1H36z\"/></g></svg>',\n      \"list-num-lower-roman\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"M15.1 16v-1.2h1.3V16H15zm0 10v-1.2h1.3V26H15zm0 10v-1.2h1.3V36H15z\"/><path fill-rule=\"nonzero\" d=\"M12 21h1.5v5H12zM12 31h1.5v5H12zM9 21h1.5v5H9zM9 31h1.5v5H9zM6 31h1.5v5H6zM12 11h1.5v5H12zM12 19h1.5v1H12zM12 29h1.5v1H12zM9 19h1.5v1H9zM9 29h1.5v1H9zM6 29h1.5v1H6zM12 9h1.5v1H12z\"/></g></svg>',\n      \"list-num-upper-alpha-rtl\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"M39.3 17l-.5-1.4h-2l-.5 1.4H35l2-6h1.6l2 6h-1.3zm-1.6-4.7l-.7 2.3h1.6l-.8-2.3zM33.4 17c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm4.7 9.9h-2.7v-6H38c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7zm-1.4-5v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1zm0 4h1.1c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9h-1.1V26zM33 27.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm4.9 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2zm-4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z\"/></g></svg>',\n      \"list-num-upper-alpha\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"M12.6 17l-.5-1.4h-2L9.5 17H8.3l2-6H12l2 6h-1.3zM11 12.3l-.7 2.3h1.6l-.8-2.3zm4.7 4.8c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zM11.4 27H8.7v-6h2.6c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7zM10 22v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1zm0 4H11c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9H10V26zm5.4 1.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-4.1 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2zm4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z\"/></g></svg>',\n      \"list-num-upper-roman-rtl\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"M31.6 17v-1.2H33V17h-1.3zm0 10v-1.2H33V27h-1.3zm0 10v-1.2H33V37h-1.3z\"/><path fill-rule=\"nonzero\" d=\"M34.5 20H36v7h-1.5zM34.5 30H36v7h-1.5zM37.5 20H39v7h-1.5zM37.5 30H39v7h-1.5zM40.5 30H42v7h-1.5zM34.5 10H36v7h-1.5z\"/></g></svg>',\n      \"list-num-upper-roman\": '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"M15.1 17v-1.2h1.3V17H15zm0 10v-1.2h1.3V27H15zm0 10v-1.2h1.3V37H15z\"/><path fill-rule=\"nonzero\" d=\"M12 20h1.5v7H12zM12 30h1.5v7H12zM9 20h1.5v7H9zM9 30h1.5v7H9zM6 30h1.5v7H6zM12 10h1.5v7H12z\"/></g></svg>',\n      \"lock\": '<svg width=\"24\" height=\"24\"><path d=\"M16.3 11c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 01-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H8V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h.3zM10 8v3h4V8a1 1 0 00-.3-.7A1 1 0 0013 7h-2a1 1 0 00-.7.3 1 1 0 00-.3.7z\" fill-rule=\"evenodd\"/></svg>',\n      \"ltr\": '<svg width=\"24\" height=\"24\"><path d=\"M11 5h7a1 1 0 010 2h-1v11a1 1 0 01-2 0V7h-2v11a1 1 0 01-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 017.8 10a3.3 3.3 0 010-2.8 3.4 3.4 0 011.8-1.8L11 5zM4.4 16.2L6.2 15l-1.8-1.2a1 1 0 011.2-1.6l3 2a1 1 0 010 1.6l-3 2a1 1 0 11-1.2-1.6z\" fill-rule=\"evenodd\"/></svg>',\n      \"more-drawer\": '<svg width=\"24\" height=\"24\"><path d=\"M6 10a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2zm12 0a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2zm-6 0a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2z\" fill-rule=\"nonzero\"/></svg>',\n      \"new-document\": '<svg width=\"24\" height=\"24\"><path d=\"M14.4 3H7a2 2 0 00-2 2v14c0 1.1.9 2 2 2h10a2 2 0 002-2V7.6L14.4 3zM17 19H7V5h6v4h4v10z\" fill-rule=\"nonzero\"/></svg>',\n      \"new-tab\": '<svg width=\"24\" height=\"24\"><path d=\"M15 13l2-2v8H5V7h8l-2 2H7v8h8v-4zm4-8v5.5l-2-2-5.6 5.5H10v-1.4L15.5 7l-2-2H19z\" fill-rule=\"evenodd\"/></svg>',\n      \"non-breaking\": '<svg width=\"24\" height=\"24\"><path d=\"M11 11H8a1 1 0 110-2h3V6c0-.6.4-1 1-1s1 .4 1 1v3h3c.6 0 1 .4 1 1s-.4 1-1 1h-3v3c0 .6-.4 1-1 1a1 1 0 01-1-1v-3zm10 4v5H3v-5c0-.6.4-1 1-1s1 .4 1 1v3h14v-3c0-.6.4-1 1-1s1 .4 1 1z\" fill-rule=\"evenodd\"/></svg>',\n      \"notice\": '<svg width=\"24\" height=\"24\"><path d=\"M17.8 9.8L15.4 4 20 8.5v7L15.5 20h-7L4 15.5v-7L8.5 4h7l2.3 5.8zm0 0l2.2 5.7-2.3-5.8zM13 17v-2h-2v2h2zm0-4V7h-2v6h2z\" fill-rule=\"evenodd\"/></svg>',\n      \"ordered-list-rtl\": '<svg width=\"24\" height=\"24\"><path d=\"M6 17h8a1 1 0 010 2H6a1 1 0 010-2zm0-6h8a1 1 0 010 2H6a1 1 0 010-2zm0-6h8a1 1 0 010 2H6a1 1 0 110-2zm13-1v3.5a.5.5 0 11-1 0V5h-.5a.5.5 0 110-1H19zm-1 8.8l.2.2h1.3a.5.5 0 110 1h-1.6a1 1 0 01-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 00-.2-.2h-1.3a.5.5 0 01-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3zm2 4.2v2c0 .6-.4 1-1 1h-1.5a.5.5 0 010-1h1.2a.3.3 0 100-.6h-1.3a.4.4 0 110-.8h1.3a.3.3 0 000-.6h-1.2a.5.5 0 110-1H19c.6 0 1 .4 1 1z\" fill-rule=\"evenodd\"/></svg>',\n      \"ordered-list\": '<svg width=\"24\" height=\"24\"><path d=\"M10 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 110-2zM6 4v3.5c0 .3-.2.5-.5.5a.5.5 0 01-.5-.5V5h-.5a.5.5 0 010-1H6zm-1 8.8l.2.2h1.3c.3 0 .5.2.5.5s-.2.5-.5.5H4.9a1 1 0 01-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 00-.2-.2H4.5a.5.5 0 01-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3zM7 17v2c0 .6-.4 1-1 1H4.5a.5.5 0 010-1h1.2c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.4a.4.4 0 110-.8h1.3c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.5a.5.5 0 110-1H6c.6 0 1 .4 1 1z\" fill-rule=\"evenodd\"/></svg>',\n      \"orientation\": '<svg width=\"24\" height=\"24\"><path d=\"M7.3 6.4L1 13l6.4 6.5 6.5-6.5-6.5-6.5zM3.7 13l3.6-3.7L11 13l-3.7 3.7-3.6-3.7zM12 6l2.8 2.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0L9.2 5.7a.8.8 0 010-1.2L13.6.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L12 4h1a9 9 0 11-4.3 16.9l1.5-1.5A7 7 0 1013 6h-1z\" fill-rule=\"nonzero\"/></svg>',\n      \"outdent\": '<svg width=\"24\" height=\"24\"><path d=\"M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 110-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm-5 4h12a1 1 0 010 2H7a1 1 0 010-2zm1.6-3.8a1 1 0 01-1.2 1.6l-3-2a1 1 0 010-1.6l3-2a1 1 0 011.2 1.6L6.8 12l1.8 1.2z\" fill-rule=\"evenodd\"/></svg>',\n      \"page-break\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path d=\"M5 11c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 010-2zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1h-1a1 1 0 010-2zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zM7 3v5h10V3c0-.6.4-1 1-1s1 .4 1 1v7H5V3c0-.6.4-1 1-1s1 .4 1 1zM6 22a1 1 0 01-1-1v-7h14v7c0 .6-.4 1-1 1a1 1 0 01-1-1v-5H7v5c0 .6-.4 1-1 1z\"/></g></svg>',\n      \"paragraph\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M10 5h7a1 1 0 010 2h-1v11a1 1 0 01-2 0V7h-2v11a1 1 0 01-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 016.8 10a3.3 3.3 0 010-2.8 3.4 3.4 0 011.8-1.8L10 5z\"/></svg>',\n      \"paste-column-after\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M12 1a3 3 0 012.8 2H18c1 0 2 .8 2 1.9V7h-2V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v13h7v2H6c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2H9.2A3 3 0 0112 1zm8 7v12h-6V8h6zm-1.5 1.5h-3v9h3v-9zM12 3a1 1 0 100 2 1 1 0 000-2z\"/></svg>',\n      \"paste-column-before\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M12 1a3 3 0 012.8 2H18c1 0 2 .8 2 1.9V18c0 1-.8 2-1.9 2H11v-2h7V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v2H4V5c0-1 .8-2 1.9-2H9.2A3 3 0 0112 1zm-2 7v12H4V8h6zM8.5 9.5h-3v9h3v-9zM12 3a1 1 0 100 2 1 1 0 000-2z\"/></svg>',\n      \"paste-row-after\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M12 1a3 3 0 012.8 2H18c1 0 2 .8 2 1.9V11h-2V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v13h14c0 1-.8 2-1.9 2H6c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2H9.2A3 3 0 0112 1zm10 11v5H8v-5h14zm-1.5 1.5h-11v2h11v-2zM12 3a1 1 0 100 2 1 1 0 000-2z\"/></svg>',\n      \"paste-row-before\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M12 1a3 3 0 012.8 2H18c1 0 2 .8 2 1.9V7h-2V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v13h12v-4h2v4c0 1-.8 2-1.9 2H6c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2H9.2A3 3 0 0112 1zm10 7v5H8V8h14zm-1.5 1.5h-11v2h11v-2zM12 3a1 1 0 100 2 1 1 0 000-2z\"/></svg>',\n      \"paste-text\": '<svg width=\"24\" height=\"24\"><path d=\"M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v13h3V9h9zM9 20H6a2 2 0 01-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0112 1a3 3 0 012.8 2H18a2 2 0 012 2v4h1v12H9v-1zm1.5-9.5v9h9v-9h-9zM12 3a1 1 0 00-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1zm0 9h6v2h-.5l-.5-1h-1v4h.8v1h-3.6v-1h.8v-4h-1l-.5 1H12v-2z\" fill-rule=\"nonzero\"/></svg>',\n      \"paste\": '<svg width=\"24\" height=\"24\"><path d=\"M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v13h3V9h9zM9 20H6a2 2 0 01-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0112 1a3 3 0 012.8 2H18a2 2 0 012 2v4h1v12H9v-1zm1.5-9.5v9h9v-9h-9zM12 3a1 1 0 00-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1z\" fill-rule=\"nonzero\"/></svg>',\n      \"permanent-pen\": '<svg width=\"24\" height=\"24\"><path d=\"M10.5 17.5L8 20H3v-3l3.5-3.5a2 2 0 010-3L14 3l1 1-7.3 7.3a1 1 0 000 1.4l3.6 3.6c.4.4 1 .4 1.4 0L20 9l1 1-7.6 7.6a2 2 0 01-2.8 0l-.1-.1z\" fill-rule=\"nonzero\"/></svg>',\n      \"plus\": '<svg width=\"24\" height=\"24\"><path d=\"M12 4c.5 0 1 .4 1 .9V11h6a1 1 0 01.1 2H13v6a1 1 0 01-2 .1V13H5a1 1 0 01-.1-2H11V5c0-.6.4-1 1-1z\"/></svg>',\n      \"preferences\": '<svg width=\"24\" height=\"24\"><path d=\"M20.1 13.5l-1.9.2a5.8 5.8 0 01-.6 1.5l1.2 1.5c.4.4.3 1 0 1.4l-.7.7a1 1 0 01-1.4 0l-1.5-1.2a6.2 6.2 0 01-1.5.6l-.2 1.9c0 .5-.5.9-1 .9h-1a1 1 0 01-1-.9l-.2-1.9a5.8 5.8 0 01-1.5-.6l-1.5 1.2a1 1 0 01-1.4 0l-.7-.7a1 1 0 010-1.4l1.2-1.5a6.2 6.2 0 01-.6-1.5l-1.9-.2a1 1 0 01-.9-1v-1c0-.5.4-1 .9-1l1.9-.2a5.8 5.8 0 01.6-1.5L5.2 7.3a1 1 0 010-1.4l.7-.7a1 1 0 011.4 0l1.5 1.2a6.2 6.2 0 011.5-.6l.2-1.9c0-.5.5-.9 1-.9h1c.5 0 1 .4 1 .9l.2 1.9a5.8 5.8 0 011.5.6l1.5-1.2a1 1 0 011.4 0l.7.7c.3.4.4 1 0 1.4l-1.2 1.5a6.2 6.2 0 01.6 1.5l1.9.2c.5 0 .9.5.9 1v1c0 .5-.4 1-.9 1zM12 15a3 3 0 100-6 3 3 0 000 6z\" fill-rule=\"evenodd\"/></svg>',\n      \"preview\": '<svg width=\"24\" height=\"24\"><path d=\"M3.5 12.5c.5.8 1.1 1.6 1.8 2.3 2 2 4.2 3.2 6.7 3.2s4.7-1.2 6.7-3.2a16.2 16.2 0 002.1-2.8 15.7 15.7 0 00-2.1-2.8c-2-2-4.2-3.2-6.7-3.2a9.3 9.3 0 00-6.7 3.2A16.2 16.2 0 003.2 12c0 .2.2.3.3.5zm-2.4-1l.7-1.2L4 7.8C6.2 5.4 8.9 4 12 4c3 0 5.8 1.4 8.1 3.8a18.2 18.2 0 012.8 3.7v1l-.7 1.2-2.1 2.5c-2.3 2.4-5 3.8-8.1 3.8-3 0-5.8-1.4-8.1-3.8a18.2 18.2 0 01-2.8-3.7 1 1 0 010-1zm12-3.3a2 2 0 102.7 2.6 4 4 0 11-2.6-2.6z\" fill-rule=\"nonzero\"/></svg>',\n      \"print\": '<svg width=\"24\" height=\"24\"><path d=\"M18 8H6a3 3 0 00-3 3v6h2v3h14v-3h2v-6a3 3 0 00-3-3zm-1 10H7v-4h10v4zm.5-5c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm.5-8H6v2h12V5z\" fill-rule=\"nonzero\"/></svg>',\n      \"quote\": '<svg width=\"24\" height=\"24\"><path d=\"M7.5 17h.9c.4 0 .7-.2.9-.6L11 13V8c0-.6-.4-1-1-1H6a1 1 0 00-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 00.8 1.3zm8 0h.9c.4 0 .7-.2.9-.6L19 13V8c0-.6-.4-1-1-1h-4a1 1 0 00-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 00.8 1.3z\" fill-rule=\"nonzero\"/></svg>',\n      \"redo\": '<svg width=\"24\" height=\"24\"><path d=\"M17.6 10H12c-2.8 0-4.4 1.4-4.9 3.5-.4 2 .3 4 1.4 4.6a1 1 0 11-1 1.8c-2-1.2-2.9-4.1-2.3-6.8.6-3 3-5.1 6.8-5.1h5.6l-3.3-3.3a1 1 0 111.4-1.4l5 5a1 1 0 010 1.4l-5 5a1 1 0 01-1.4-1.4l3.3-3.3z\" fill-rule=\"nonzero\"/></svg>',\n      \"reload\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M5 22.1l-1.2-4.7v-.2a1 1 0 011-1l5 .4a1 1 0 11-.2 2l-2.2-.2a7.8 7.8 0 008.4.2 7.5 7.5 0 003.5-6.4 1 1 0 112 0 9.5 9.5 0 01-4.5 8 9.9 9.9 0 01-10.2 0l.4 1.4a1 1 0 11-2 .5zM13.6 7.4c0-.5.5-1 1-.9l2.8.2a8 8 0 00-9.5-1 7.5 7.5 0 00-3.6 7 1 1 0 01-2 0 9.5 9.5 0 014.5-8.6 10 10 0 0110.9.3l-.3-1a1 1 0 012-.5l1.1 4.8a1 1 0 01-1 1.2l-5-.4a1 1 0 01-.9-1z\"/></g></svg>',\n      \"remove-formatting\": '<svg width=\"24\" height=\"24\"><path d=\"M13.2 6a1 1 0 010 .2l-2.6 10a1 1 0 01-1 .8h-.2a.8.8 0 01-.8-1l2.6-10H8a1 1 0 110-2h9a1 1 0 010 2h-3.8zM5 18h7a1 1 0 010 2H5a1 1 0 010-2zm13 1.5L16.5 18 15 19.5a.7.7 0 01-1-1l1.5-1.5-1.5-1.5a.7.7 0 011-1l1.5 1.5 1.5-1.5a.7.7 0 011 1L17.5 17l1.5 1.5a.7.7 0 01-1 1z\" fill-rule=\"evenodd\"/></svg>',\n      \"remove\": '<svg width=\"24\" height=\"24\"><path d=\"M16 7h3a1 1 0 010 2h-1v9a3 3 0 01-3 3H9a3 3 0 01-3-3V9H5a1 1 0 110-2h3V6a3 3 0 013-3h2a3 3 0 013 3v1zm-2 0V6c0-.6-.4-1-1-1h-2a1 1 0 00-1 1v1h4zm2 2H8v9c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V9zm-7 3a1 1 0 012 0v4a1 1 0 01-2 0v-4zm4 0a1 1 0 012 0v4a1 1 0 01-2 0v-4z\" fill-rule=\"nonzero\"/></svg>',\n      \"resize-handle\": '<svg width=\"10\" height=\"10\"><g fill-rule=\"nonzero\"><path d=\"M8.1 1.1A.5.5 0 119 2l-7 7A.5.5 0 111 8l7-7zM8.1 5.1A.5.5 0 119 6l-3 3A.5.5 0 115 8l3-3z\"/></g></svg>',\n      \"resize\": '<svg width=\"24\" height=\"24\"><path d=\"M4 5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h6c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 01-.7.3H7.4L18 16.6V13c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v6c0 .3-.1.5-.3.7a1 1 0 01-.7.3h-6a1 1 0 01-.7-.3 1 1 0 01-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3.6L6 7.4V11c0 .3-.1.5-.3.7a1 1 0 01-.7.3 1 1 0 01-.7-.3A1 1 0 014 11V5z\" fill-rule=\"evenodd\"/></svg>',\n      \"restore-draft\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path d=\"M17 13c0 .6-.4 1-1 1h-4V8c0-.6.4-1 1-1s1 .4 1 1v4h2c.6 0 1 .4 1 1z\"/><path d=\"M4.7 10H9a1 1 0 010 2H3a1 1 0 01-1-1V5a1 1 0 112 0v3l2.5-2.4a9.2 9.2 0 0110.8-1.5A9 9 0 0113.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 111.3-1.5 7.2 7.2 0 0011.6-3.7 7 7 0 00-3.5-7.7A7.2 7.2 0 008 7L4.7 10z\" fill-rule=\"nonzero\"/></g></svg>',\n      \"rotate-left\": '<svg width=\"24\" height=\"24\"><path d=\"M4.7 10H9a1 1 0 010 2H3a1 1 0 01-1-1V5a1 1 0 112 0v3l2.5-2.4a9.2 9.2 0 0110.8-1.5A9 9 0 0113.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 111.3-1.5 7.2 7.2 0 0011.6-3.7 7 7 0 00-3.5-7.7A7.2 7.2 0 008 7L4.7 10z\" fill-rule=\"nonzero\"/></svg>',\n      \"rotate-right\": '<svg width=\"24\" height=\"24\"><path d=\"M20 8V5a1 1 0 012 0v6c0 .6-.4 1-1 1h-6a1 1 0 010-2h4.3L16 7A7.2 7.2 0 007.7 6a7 7 0 003 13.1c1.9.1 3.7-.5 5-1.7a1 1 0 011.4 1.5A9.2 9.2 0 012.2 14c-.9-3.9 1-8 4.5-9.9 3.5-1.9 8-1.3 10.8 1.5L20 8z\" fill-rule=\"nonzero\"/></svg>',\n      \"rtl\": '<svg width=\"24\" height=\"24\"><path d=\"M8 5h8v2h-2v12h-2V7h-2v12H8v-7c-.5 0-1 0-1.4-.3A3.4 3.4 0 014.8 10a3.3 3.3 0 010-2.8 3.4 3.4 0 011.8-1.8L8 5zm12 11.2a1 1 0 11-1 1.6l-3-2a1 1 0 010-1.6l3-2a1 1 0 111 1.6L18.4 15l1.8 1.2z\" fill-rule=\"evenodd\"/></svg>',\n      \"save\": '<svg width=\"24\" height=\"24\"><path d=\"M5 16h14a2 2 0 012 2v2a2 2 0 01-2 2H5a2 2 0 01-2-2v-2c0-1.1.9-2 2-2zm0 2v2h14v-2H5zm10 0h2v2h-2v-2zm-4-6.4L8.7 9.3a1 1 0 10-1.4 1.4l4 4c.4.4 1 .4 1.4 0l4-4a1 1 0 10-1.4-1.4L13 11.6V4a1 1 0 00-2 0v7.6z\" fill-rule=\"nonzero\"/></svg>',\n      \"search\": '<svg width=\"24\" height=\"24\"><path d=\"M16 17.3a8 8 0 111.4-1.4l4.3 4.4a1 1 0 01-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 100-12 6 6 0 000 12z\" fill-rule=\"nonzero\"/></svg>',\n      \"select-all\": '<svg width=\"24\" height=\"24\"><path d=\"M3 5h2V3a2 2 0 00-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2a2 2 0 00-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8a2 2 0 002-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2zM7 17h10V7H7v10zm2-8h6v6H9V9z\" fill-rule=\"nonzero\"/></svg>',\n      \"selected\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6c0-1.1.9-2 2-2zm3.6 10.9L7 12.3a.7.7 0 00-1 1L9.6 17 18 8.6a.7.7 0 000-1 .7.7 0 00-1 0l-7.4 7.3z\"/></svg>',\n      \"settings\": '<svg width=\"24\" height=\"24\"><path d=\"M11 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 01-.2-.6V8H5a1 1 0 110-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.5V6zM8 8h2V6H8v2zm9 2.8v.2h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v.3c0 .2 0 .3-.2.5l-.6.2h-2.4c-.3 0-.4 0-.6-.2a.7.7 0 01-.2-.6V13H5a1 1 0 010-2h8v-.3c0-.2 0-.3.2-.5l.6-.2h2.4c.3 0 .4 0 .6.2l.2.6zM14 13h2v-2h-2v2zm-3 2.8v.2h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 01-.2-.6V18H5a1 1 0 010-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.6zM8 18h2v-2H8v2z\" fill-rule=\"evenodd\"/></svg>',\n      \"sharpen\": '<svg width=\"24\" height=\"24\"><path d=\"M16 6l4 4-8 9-8-9 4-4h8zm-4 10.2l5.5-6.2-.1-.1H12v-.3h5.1l-.2-.2H12V9h4.6l-.2-.2H12v-.3h4.1l-.2-.2H12V8h3.6l-.2-.2H8.7L6.5 10l.1.1H12v.3H6.9l.2.2H12v.3H7.3l.2.2H12v.3H7.7l.3.2h4v.3H8.2l.2.2H12v.3H8.6l.3.2H12v.3H9l.3.2H12v.3H9.5l.2.2H12v.3h-2l.2.2H12v.3h-1.6l.2.2H12v.3h-1.1l.2.2h.9v.3h-.7l.2.2h.5v.3h-.3l.3.2z\" fill-rule=\"evenodd\"/></svg>',\n      \"sourcecode\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M9.8 15.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0l-4.4-4.1a.8.8 0 010-1.2l4.4-4.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L6 12l3.8 3.7zM14.2 15.7c-.3.3-.3.8 0 1 .4.4.9.4 1.2 0l4.4-4.1c.3-.3.3-.9 0-1.2l-4.4-4.2a.8.8 0 00-1.2 0c-.3.3-.3.8 0 1.1L18 12l-3.8 3.7z\"/></g></svg>',\n      \"spell-check\": '<svg width=\"24\" height=\"24\"><path d=\"M6 8v3H5V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h2c.3 0 .5.1.7.3.2.2.3.4.3.7v6H8V8H6zm0-3v2h2V5H6zm13 0h-3v5h3v1h-3a1 1 0 01-.7-.3 1 1 0 01-.3-.7V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3v1zm-5 1.5l-.1.7c-.1.2-.3.3-.6.3.3 0 .5.1.6.3l.1.7V10c0 .3-.1.5-.3.7a1 1 0 01-.7.3h-3V4h3c.3 0 .5.1.7.3.2.2.3.4.3.7v1.5zM13 10V8h-2v2h2zm0-3V5h-2v2h2zm3 5l1 1-6.5 7L7 15.5l1.3-1 2.2 2.2L16 12z\" fill-rule=\"evenodd\"/></svg>',\n      \"strike-through\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path d=\"M15.6 8.5c-.5-.7-1-1.1-1.3-1.3-.6-.4-1.3-.6-2-.6-2.7 0-2.8 1.7-2.8 2.1 0 1.6 1.8 2 3.2 2.3 4.4.9 4.6 2.8 4.6 3.9 0 1.4-.7 4.1-5 4.1A6.2 6.2 0 017 16.4l1.5-1.1c.4.6 1.6 2 3.7 2 1.6 0 2.5-.4 3-1.2.4-.8.3-2-.8-2.6-.7-.4-1.6-.7-2.9-1-1-.2-3.9-.8-3.9-3.6C7.6 6 10.3 5 12.4 5c2.9 0 4.2 1.6 4.7 2.4l-1.5 1.1z\"/><path d=\"M5 11h14a1 1 0 010 2H5a1 1 0 010-2z\" fill-rule=\"nonzero\"/></g></svg>',\n      \"subscript\": '<svg width=\"24\" height=\"24\"><path d=\"M10.4 10l4.6 4.6-1.4 1.4L9 11.4 4.4 16 3 14.6 7.6 10 3 5.4 4.4 4 9 8.6 13.6 4 15 5.4 10.4 10zM21 19h-5v-1l1-.8 1.7-1.6c.3-.4.5-.8.5-1.2 0-.3 0-.6-.2-.7-.2-.2-.5-.3-.9-.3a2 2 0 00-.8.2l-.7.3-.4-1.1 1-.6 1.2-.2c.8 0 1.4.3 1.8.7.4.4.6.9.6 1.5s-.2 1.1-.5 1.6a8 8 0 01-1.3 1.3l-.6.6h2.6V19z\" fill-rule=\"nonzero\"/></svg>',\n      \"superscript\": '<svg width=\"24\" height=\"24\"><path d=\"M15 9.4L10.4 14l4.6 4.6-1.4 1.4L9 15.4 4.4 20 3 18.6 7.6 14 3 9.4 4.4 8 9 12.6 13.6 8 15 9.4zm5.9 1.6h-5v-1l1-.8 1.7-1.6c.3-.5.5-.9.5-1.3 0-.3 0-.5-.2-.7-.2-.2-.5-.3-.9-.3l-.8.2-.7.4-.4-1.2c.2-.2.5-.4 1-.5.3-.2.8-.2 1.2-.2.8 0 1.4.2 1.8.6.4.4.6 1 .6 1.6 0 .5-.2 1-.5 1.5l-1.3 1.4-.6.5h2.6V11z\" fill-rule=\"nonzero\"/></svg>',\n      \"table-caption\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><rect width=\"12\" height=\"2\" x=\"3\" y=\"4\" rx=\"1\"/><path d=\"M19 8a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2v-8c0-1.1.9-2 2-2h14zM5 15v3h6v-3H5zm14 0h-6v3h6v-3zm0-5h-6v3h6v-3zM5 13h6v-3H5v3z\"/></g></svg>',\n      \"table-cell-classes\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path fill-rule=\"nonzero\" d=\"M13 4v9H3V6c0-1.1.9-2 2-2h8zm-2 2H5v5h6V6z\"/><path fill-rule=\"nonzero\" d=\"M13 4h6a2 2 0 012 2v7h-8v-2h6V6h-6V4z\" opacity=\".2\"/><path d=\"M18 20l-2.6 1.6.7-3-2.4-2 3.1-.2 1.2-2.9 1.2 2.9 3 .2-2.3 2 .7 3z\"/><path fill-rule=\"nonzero\" d=\"M3 13v5c0 1.1.9 2 2 2h8v-7h-2v5H5v-5H3z\" opacity=\".2\"/></g></svg>',\n      \"table-cell-properties\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm-8 9H5v5h6v-5zm8 0h-6v5h6v-5zm-8-7H5v5h6V6z\"/></svg>',\n      \"table-cell-select-all\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm0 2H5v12h14V6z\"/><path d=\"M13 6v5h6v2h-6v5h-2v-5H5v-2h6V6h2z\" opacity=\".2\"/></g></svg>',\n      \"table-cell-select-inner\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm0 2H5v12h14V6z\" opacity=\".2\"/><path d=\"M13 6v5h6v2h-6v5h-2v-5H5v-2h6V6h2z\"/></g></svg>',\n      \"table-classes\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 012 2v7h-8v7H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm-8 9H5v5h6v-5zm8-7h-6v5h6V6zm-8 0H5v5h6V6z\"/><path d=\"M18 20l-2.6 1.6.7-3-2.4-2 3.1-.2 1.2-2.9 1.2 2.9 3 .2-2.3 2 .7 3z\"/></g></svg>',\n      \"table-delete-column\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm-4 4h-2V6h-2v2H9V6H5v12h4v-2h2v2h2v-2h2v2h4V6h-4v2zm.3.5l1 1.2-3 2.3 3 2.3-1 1.2L12 13l-3.3 2.6-1-1.2 3-2.3-3-2.3 1-1.2L12 11l3.3-2.5z\"/></svg>',\n      \"table-delete-row\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm0 2H5v3h2.5v2H5v2h2.5v2H5v3h14v-3h-2.5v-2H19v-2h-2.5V9H19V6zm-4.7 1.8l1.2 1L13 12l2.6 3.3-1.2 1-2.3-3-2.3 3-1.2-1L11 12 8.5 8.7l1.2-1 2.3 3 2.3-3z\"/></svg>',\n      \"table-delete-table\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zM5 6v12h14V6H5z\"/><path d=\"M14.4 8.6l1 1-2.3 2.4 2.3 2.4-1 1-2.4-2.3-2.4 2.3-1-1 2.3-2.4-2.3-2.4 1-1 2.4 2.3z\"/></g></svg>',\n      \"table-insert-column-after\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M20 4c.6 0 1 .4 1 1v2a1 1 0 01-2 0V6h-8v12h8v-1a1 1 0 012 0v2c0 .5-.4 1-.9 1H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h15zM9 13H5v5h4v-5zm7-5c.5 0 1 .4 1 .9V11h2a1 1 0 01.1 2H17v2a1 1 0 01-2 .1V13h-2a1 1 0 01-.1-2H15V9c0-.6.4-1 1-1zM9 6H5v5h4V6z\"/></svg>',\n      \"table-insert-column-before\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H4a1 1 0 01-1-1v-2a1 1 0 012 0v1h8V6H5v1a1 1 0 11-2 0V5c0-.6.4-1 1-1h15zm0 9h-4v5h4v-5zM8 8c.5 0 1 .4 1 .9V11h2a1 1 0 01.1 2H9v2a1 1 0 01-2 .1V13H5a1 1 0 01-.1-2H7V9c0-.6.4-1 1-1zm11-2h-4v5h4V6z\"/></svg>',\n      \"table-insert-row-above\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M6 4a1 1 0 110 2H5v6h14V6h-1a1 1 0 010-2h2c.6 0 1 .4 1 1v13a2 2 0 01-2 2H5a2 2 0 01-2-2V5c0-.6.4-1 1-1h2zm5 10H5v4h6v-4zm8 0h-6v4h6v-4zM12 3c.5 0 1 .4 1 .9V6h2a1 1 0 010 2h-2v2a1 1 0 01-2 .1V8H9a1 1 0 010-2h2V4c0-.6.4-1 1-1z\"/></svg>',\n      \"table-insert-row-after\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M12 13c.5 0 1 .4 1 .9V16h2a1 1 0 01.1 2H13v2a1 1 0 01-2 .1V18H9a1 1 0 01-.1-2H11v-2c0-.6.4-1 1-1zm6 7a1 1 0 010-2h1v-6H5v6h1a1 1 0 010 2H4a1 1 0 01-1-1V6c0-1.1.9-2 2-2h14a2 2 0 012 2v13c0 .5-.4 1-.9 1H18zM11 6H5v4h6V6zm8 0h-6v4h6V6z\"/></svg>',\n      \"table-left-header\": '<svg width=\"24\" height=\"24\"><path d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm0 9h-4v5h4v-5zm-6 0H9v5h4v-5zm0-7H9v5h4V6zm6 0h-4v5h4V6z\"/></svg>',\n      \"table-merge-cells\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zM5 15.5V18h3v-2.5H5zm14-5h-9V18h9v-7.5zM19 6h-4v2.5h4V6zM8 6H5v2.5h3V6zm5 0h-3v2.5h3V6zm-8 7.5h3v-3H5v3z\"/></svg>',\n      \"table-row-numbering-rtl\": '<svg width=\"24\" height=\"24\"><path d=\"M6 4a2 2 0 00-2 2v13c0 1.1.9 2 2 2h12a2 2 0 002-2V6a2 2 0 00-2-2H6zm0 12h8v3H6v-3zm11 0c.6 0 1 .4 1 1v1a1 1 0 01-2 0v-1c0-.6.4-1 1-1zM6 11h8v3H6v-3zm11 0c.6 0 1 .4 1 1v1a1 1 0 01-2 0v-1c0-.6.4-1 1-1zM6 6h8v3H6V6zm11 0c.6 0 1 .4 1 1v1a1 1 0 11-2 0V7c0-.6.4-1 1-1z\"/></svg>',\n      \"table-row-numbering\": '<svg width=\"24\" height=\"24\"><path d=\"M18 4a2 2 0 012 2v13a2 2 0 01-2 2H6a2 2 0 01-2-2V6c0-1.1.9-2 2-2h12zm0 12h-8v3h8v-3zM7 16a1 1 0 00-1 1v1a1 1 0 002 0v-1c0-.6-.4-1-1-1zm11-5h-8v3h8v-3zM7 11a1 1 0 00-1 1v1a1 1 0 002 0v-1c0-.6-.4-1-1-1zm11-5h-8v3h8V6zM7 6a1 1 0 00-1 1v1a1 1 0 102 0V7c0-.6-.4-1-1-1z\"/></svg>',\n      \"table-row-properties\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zM5 15v3h6v-3H5zm14 0h-6v3h6v-3zm0-9h-6v3h6V6zM5 9h6V6H5v3z\"/></svg>',\n      \"table-split-cells\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zM8 15.5H5V18h3v-2.5zm11-5h-9V18h9v-7.5zm-2.5 1l1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2-2-2 1-1 2 2 2-2zm-8.5-1H5v3h3v-3zM19 6h-4v2.5h4V6zM8 6H5v2.5h3V6zm5 0h-3v2.5h3V6z\"/></svg>',\n      \"table-top-header\": '<svg width=\"24\" height=\"24\"><path d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm-8 11H5v3h6v-3zm8 0h-6v3h6v-3zm0-5h-6v3h6v-3zM5 13h6v-3H5v3z\"/></svg>',\n      \"table\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zM5 14v4h6v-4H5zm14 0h-6v4h6v-4zm0-6h-6v4h6V8zM5 12h6V8H5v4z\"/></svg>',\n      \"template\": '<svg width=\"24\" height=\"24\"><path d=\"M19 19v-1H5v1h14zM9 16v-4a5 5 0 116 0v4h4a2 2 0 012 2v3H3v-3c0-1.1.9-2 2-2h4zm4 0v-5l.8-.6a3 3 0 10-3.6 0l.8.6v5h2z\" fill-rule=\"nonzero\"/></svg>',\n      \"temporary-placeholder\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path d=\"M9 7.6V6h2.5V4.5a.5.5 0 111 0V6H15v1.6a8 8 0 11-6 0zm-2.6 5.3a.5.5 0 00.3.6c.3 0 .6 0 .6-.3l.1-.2a5 5 0 013.3-2.8c.3-.1.4-.4.4-.6-.1-.3-.4-.5-.6-.4a6 6 0 00-4.1 3.7z\"/><circle cx=\"14\" cy=\"4\" r=\"1\"/><circle cx=\"12\" cy=\"2\" r=\"1\"/><circle cx=\"10\" cy=\"4\" r=\"1\"/></g></svg>',\n      \"text-color\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path id=\"tox-icon-text-color__color\" d=\"M3 18h18v3H3z\"/><path d=\"M8.7 16h-.8a.5.5 0 01-.5-.6l2.7-9c.1-.3.3-.4.5-.4h2.8c.2 0 .4.1.5.4l2.7 9a.5.5 0 01-.5.6h-.8a.5.5 0 01-.4-.4l-.7-2.2c0-.3-.3-.4-.5-.4h-3.4c-.2 0-.4.1-.5.4l-.7 2.2c0 .3-.2.4-.4.4zm2.6-7.6l-.6 2a.5.5 0 00.5.6h1.6a.5.5 0 00.5-.6l-.6-2c0-.3-.3-.4-.5-.4h-.4c-.2 0-.4.1-.5.4z\"/></g></svg>',\n      \"toc\": '<svg width=\"24\" height=\"24\"><path d=\"M5 5c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 110-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 110-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 010-2zm0-4c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 110-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2z\" fill-rule=\"evenodd\"/></svg>',\n      \"translate\": '<svg width=\"24\" height=\"24\"><path d=\"M12.7 14.3l-.3.7-.4.7-2.2-2.2-3.1 3c-.3.4-.8.4-1 0a.7.7 0 010-1l3.1-3A12.4 12.4 0 016.7 9H8a10.1 10.1 0 001.7 2.4c.5-.5 1-1.1 1.4-1.8l.9-2H4.7a.7.7 0 110-1.5h4.4v-.7c0-.4.3-.8.7-.8.4 0 .7.4.7.8v.7H15c.4 0 .8.3.8.7 0 .4-.4.8-.8.8h-1.4a12.3 12.3 0 01-1 2.4 13.5 13.5 0 01-1.7 2.3l1.9 1.8zm4.3-3l2.7 7.3a.5.5 0 01-.4.7 1 1 0 01-1-.7l-.6-1.5h-3.4l-.6 1.5a1 1 0 01-1 .7.5.5 0 01-.4-.7l2.7-7.4a1 1 0 012 0zm-2.2 4.4h2.4L16 12.5l-1.2 3.2z\" fill-rule=\"evenodd\"/></svg>',\n      \"underline\": '<svg width=\"24\" height=\"24\"><path d=\"M16 5c.6 0 1 .4 1 1v5.5a4 4 0 01-.4 1.8l-1 1.4a5.3 5.3 0 01-5.5 1 5 5 0 01-1.6-1c-.5-.4-.8-.9-1.1-1.4a4 4 0 01-.4-1.8V6c0-.6.4-1 1-1s1 .4 1 1v5.5c0 .3 0 .6.2 1l.6.7a3.3 3.3 0 002.2.8 3.4 3.4 0 002.2-.8c.3-.2.4-.5.6-.8l.2-.9V6c0-.6.4-1 1-1zM8 17h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 010-2z\" fill-rule=\"evenodd\"/></svg>',\n      \"undo\": '<svg width=\"24\" height=\"24\"><path d=\"M6.4 8H12c3.7 0 6.2 2 6.8 5.1.6 2.7-.4 5.6-2.3 6.8a1 1 0 01-1-1.8c1.1-.6 1.8-2.7 1.4-4.6-.5-2.1-2.1-3.5-4.9-3.5H6.4l3.3 3.3a1 1 0 11-1.4 1.4l-5-5a1 1 0 010-1.4l5-5a1 1 0 011.4 1.4L6.4 8z\" fill-rule=\"nonzero\"/></svg>',\n      \"unlink\": '<svg width=\"24\" height=\"24\"><path d=\"M6.2 12.3a1 1 0 011.4 1.4l-2 2a2 2 0 102.6 2.8l4.8-4.8a1 1 0 000-1.4 1 1 0 111.4-1.3 2.9 2.9 0 010 4L9.6 20a3.9 3.9 0 01-5.5-5.5l2-2zm11.6-.6a1 1 0 01-1.4-1.4l2.1-2a2 2 0 10-2.7-2.8L11 10.3a1 1 0 000 1.4A1 1 0 119.6 13a2.9 2.9 0 010-4L14.4 4a3.9 3.9 0 015.5 5.5l-2 2zM7.6 6.3a.8.8 0 01-1 1.1L3.3 4.2a.7.7 0 111-1l3.2 3.1zM5.1 8.6a.8.8 0 010 1.5H3a.8.8 0 010-1.5H5zm5-3.5a.8.8 0 01-1.5 0V3a.8.8 0 011.5 0V5zm6 11.8a.8.8 0 011-1l3.2 3.2a.8.8 0 01-1 1L16 17zm-2.2 2a.8.8 0 011.5 0V21a.8.8 0 01-1.5 0V19zm5-3.5a.7.7 0 110-1.5H21a.8.8 0 010 1.5H19z\" fill-rule=\"nonzero\"/></svg>',\n      \"unlock\": '<svg width=\"24\" height=\"24\"><path d=\"M16 5c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h-2V8a1 1 0 00-.3-.7A1 1 0 0016 7h-2a1 1 0 00-.7.3 1 1 0 00-.3.7v3h.3c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H4.8c-.3 0-.4 0-.6-.2a.7.7 0 01-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H11V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2z\" fill-rule=\"evenodd\"/></svg>',\n      \"unordered-list\": '<svg width=\"24\" height=\"24\"><path d=\"M11 5h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zM4.5 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1z\" fill-rule=\"evenodd\"/></svg>',\n      \"unselected\": '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6c0-1.1.9-2 2-2zm0 1a1 1 0 00-1 1v12c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H6z\"/></svg>',\n      \"upload\": '<svg width=\"24\" height=\"24\"><path d=\"M18 19v-2a1 1 0 012 0v3c0 .6-.4 1-1 1H5a1 1 0 01-1-1v-3a1 1 0 012 0v2h12zM11 6.4L8.7 8.7a1 1 0 01-1.4-1.4l4-4a1 1 0 011.4 0l4 4a1 1 0 11-1.4 1.4L13 6.4V16a1 1 0 01-2 0V6.4z\" fill-rule=\"nonzero\"/></svg>',\n      \"user\": '<svg width=\"24\" height=\"24\"><path d=\"M12 24a12 12 0 110-24 12 12 0 010 24zm-8.7-5.3a11 11 0 0017.4 0C19.4 16.3 14.6 15 12 15c-2.6 0-7.4 1.3-8.7 3.7zM12 13c2.2 0 4-2 4-4.5S14.2 4 12 4 8 6 8 8.5 9.8 13 12 13z\" fill-rule=\"nonzero\"/></svg>',\n      \"vertical-align\": '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><rect width=\"18\" height=\"2\" x=\"3\" y=\"11\" rx=\"1\"/><path d=\"M12 2c.6 0 1 .4 1 1v4l2-1.3a1 1 0 011.2 1.5l-.1.1-4.1 3-4-3a1 1 0 011-1.7l2 1.5V3c0-.6.4-1 1-1zm0 11.8l4 2.9a1 1 0 01-1 1.7l-2-1.5V21c0 .5-.4 1-.9 1H12a1 1 0 01-1-1v-4l-2 1.3a1 1 0 01-1.2-.1l-.1-.1a1 1 0 01.1-1.3l.1-.1 4.1-3z\"/></g></svg>',\n      \"visualblocks\": '<svg width=\"24\" height=\"24\"><path d=\"M9 19v2H7v-2h2zm-4 0v2a2 2 0 01-2-2h2zm8 0v2h-2v-2h2zm8 0a2 2 0 01-2 2v-2h2zm-4 0v2h-2v-2h2zM15 7a1 1 0 010 2v7a1 1 0 01-2 0V9h-1v7a1 1 0 01-2 0v-4a2.5 2.5 0 01-.2-5H15zM5 15v2H3v-2h2zm16 0v2h-2v-2h2zM5 11v2H3v-2h2zm16 0v2h-2v-2h2zM5 7v2H3V7h2zm16 0v2h-2V7h2zM5 3v2H3c0-1.1.9-2 2-2zm8 0v2h-2V3h2zm6 0a2 2 0 012 2h-2V3zM9 3v2H7V3h2zm8 0v2h-2V3h2z\" fill-rule=\"evenodd\"/></svg>',\n      \"visualchars\": '<svg width=\"24\" height=\"24\"><path d=\"M10 5h7a1 1 0 010 2h-1v11a1 1 0 01-2 0V7h-2v11a1 1 0 01-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 016.8 10a3.3 3.3 0 010-2.8 3.4 3.4 0 011.8-1.8L10 5z\" fill-rule=\"evenodd\"/></svg>',\n      \"warning\": '<svg width=\"24\" height=\"24\"><path d=\"M19.8 18.3c.2.5.3.9 0 1.2-.1.3-.5.5-1 .5H5.2c-.5 0-.9-.2-1-.5-.3-.3-.2-.7 0-1.2L11 4.7l.5-.5.5-.2c.2 0 .3 0 .5.2.2 0 .3.3.5.5l6.8 13.6zM12 18c.3 0 .5-.1.7-.3.2-.2.3-.4.3-.7a1 1 0 00-.3-.7 1 1 0 00-.7-.3 1 1 0 00-.7.3 1 1 0 00-.3.7c0 .3.1.5.3.7.2.2.4.3.7.3zm.7-3l.3-4a1 1 0 00-.3-.7 1 1 0 00-.7-.3 1 1 0 00-.7.3 1 1 0 00-.3.7l.3 4h1.4z\" fill-rule=\"evenodd\"/></svg>',\n      \"zoom-in\": '<svg width=\"24\" height=\"24\"><path d=\"M16 17.3a8 8 0 111.4-1.4l4.3 4.4a1 1 0 01-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 100-12 6 6 0 000 12zm-1-9a1 1 0 012 0v6a1 1 0 01-2 0V8zm-2 4a1 1 0 010-2h6a1 1 0 010 2H8z\" fill-rule=\"nonzero\"/></svg>',\n      \"zoom-out\": '<svg width=\"24\" height=\"24\"><path d=\"M16 17.3a8 8 0 111.4-1.4l4.3 4.4a1 1 0 01-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 100-12 6 6 0 000 12zm-3-5a1 1 0 010-2h6a1 1 0 010 2H8z\" fill-rule=\"nonzero\"/></svg>'\n    }\n  });\n  return icons;\n}\nvar hasRequired_default;\nfunction require_default() {\n  if (hasRequired_default) return _default;\n  hasRequired_default = 1;\n  requireIcons();\n  return _default;\n}\nrequire_default();\nvar plugin$2 = {};\nvar hasRequiredPlugin$2;\nfunction requirePlugin$2() {\n  if (hasRequiredPlugin$2) return plugin$2;\n  hasRequiredPlugin$2 = 1;\n  (function() {\n    var global$6 = tinymce.util.Tools.resolve(\"tinymce.PluginManager\");\n    const hasProto = (v2, constructor, predicate) => {\n      var _a3;\n      if (predicate(v2, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a3 = v2.constructor) === null || _a3 === void 0 ? void 0 : _a3.name) === constructor.name;\n      }\n    };\n    const typeOf = (x2) => {\n      const t2 = typeof x2;\n      if (x2 === null) {\n        return \"null\";\n      } else if (t2 === \"object\" && Array.isArray(x2)) {\n        return \"array\";\n      } else if (t2 === \"object\" && hasProto(x2, String, (o2, proto) => proto.isPrototypeOf(o2))) {\n        return \"string\";\n      } else {\n        return t2;\n      }\n    };\n    const isType$1 = (type2) => (value) => typeOf(value) === type2;\n    const isSimpleType = (type2) => (value) => typeof value === type2;\n    const isString2 = isType$1(\"string\");\n    const isObject2 = isType$1(\"object\");\n    const isArray2 = isType$1(\"array\");\n    const isBoolean2 = isSimpleType(\"boolean\");\n    const isNullable = (a2) => a2 === null || a2 === void 0;\n    const isNonNullable = (a2) => !isNullable(a2);\n    const isFunction2 = isSimpleType(\"function\");\n    const isNumber2 = isSimpleType(\"number\");\n    const noop = () => {\n    };\n    const constant2 = (value) => {\n      return () => {\n        return value;\n      };\n    };\n    const tripleEquals = (a2, b2) => {\n      return a2 === b2;\n    };\n    const not = (f2) => (t2) => !f2(t2);\n    const never = constant2(false);\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    const nativeSlice = Array.prototype.slice;\n    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t2) => nativeIndexOf.call(ts, t2);\n    const contains$1 = (xs, x2) => rawIndexOf(xs, x2) > -1;\n    const exists = (xs, pred) => {\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (pred(x2, i3)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const map2 = (xs, f2) => {\n      const len = xs.length;\n      const r3 = new Array(len);\n      for (let i3 = 0; i3 < len; i3++) {\n        const x2 = xs[i3];\n        r3[i3] = f2(x2, i3);\n      }\n      return r3;\n    };\n    const each$1 = (xs, f2) => {\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        f2(x2, i3);\n      }\n    };\n    const filter$1 = (xs, pred) => {\n      const r3 = [];\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (pred(x2, i3)) {\n          r3.push(x2);\n        }\n      }\n      return r3;\n    };\n    const groupBy = (xs, f2) => {\n      if (xs.length === 0) {\n        return [];\n      } else {\n        let wasType = f2(xs[0]);\n        const r3 = [];\n        let group = [];\n        for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n          const x2 = xs[i3];\n          const type2 = f2(x2);\n          if (type2 !== wasType) {\n            r3.push(group);\n            group = [];\n          }\n          wasType = type2;\n          group.push(x2);\n        }\n        if (group.length !== 0) {\n          r3.push(group);\n        }\n        return r3;\n      }\n    };\n    const foldl = (xs, f2, acc) => {\n      each$1(xs, (x2, i3) => {\n        acc = f2(acc, x2, i3);\n      });\n      return acc;\n    };\n    const findUntil = (xs, pred, until) => {\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (pred(x2, i3)) {\n          return Optional.some(x2);\n        } else if (until(x2, i3)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find = (xs, pred) => {\n      return findUntil(xs, pred, never);\n    };\n    const flatten = (xs) => {\n      const r3 = [];\n      for (let i3 = 0, len = xs.length; i3 < len; ++i3) {\n        if (!isArray2(xs[i3])) {\n          throw new Error(\"Arr.flatten item \" + i3 + \" was not an array, input: \" + xs);\n        }\n        nativePush.apply(r3, xs[i3]);\n      }\n      return r3;\n    };\n    const bind = (xs, f2) => flatten(map2(xs, f2));\n    const reverse = (xs) => {\n      const r3 = nativeSlice.call(xs, 0);\n      r3.reverse();\n      return r3;\n    };\n    const get$1 = (xs, i3) => i3 >= 0 && i3 < xs.length ? Optional.some(xs[i3]) : Optional.none();\n    const head = (xs) => get$1(xs, 0);\n    const last = (xs) => get$1(xs, xs.length - 1);\n    const unique = (xs, comparator) => {\n      const r3 = [];\n      const isDuplicated = isFunction2(comparator) ? (x2) => exists(r3, (i3) => comparator(i3, x2)) : (x2) => contains$1(r3, x2);\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        if (!isDuplicated(x2)) {\n          r3.push(x2);\n        }\n      }\n      return r3;\n    };\n    const ELEMENT = 1;\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement(\"div\");\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = \"HTML does not have a single root node\";\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    const fromText = (text2, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text2);\n      return fromDom(node);\n    };\n    const fromDom = (node) => {\n      if (node === null || node === void 0) {\n        throw new Error(\"Node cannot be null or undefined\");\n      }\n      return { dom: node };\n    };\n    const fromPoint = (docElm, x2, y2) => Optional.from(docElm.dom.elementFromPoint(x2, y2)).map(fromDom);\n    const SugarElement = {\n      fromHtml,\n      fromTag,\n      fromText,\n      fromDom,\n      fromPoint\n    };\n    const is$2 = (element, selector) => {\n      const dom2 = element.dom;\n      if (dom2.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom2;\n        if (elem.matches !== void 0) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== void 0) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== void 0) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== void 0) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error(\"Browser lacks native selectors\");\n        }\n      }\n    };\n    const eq2 = (e1, e2) => e1.dom === e2.dom;\n    const contains2 = (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    typeof window !== \"undefined\" ? window : Function(\"return this;\")();\n    const name = (element) => {\n      const r3 = element.dom.nodeName;\n      return r3.toLowerCase();\n    };\n    const type = (element) => element.dom.nodeType;\n    const isType = (t2) => (element) => type(element) === t2;\n    const isElement = isType(ELEMENT);\n    const isTag = (tag) => (e2) => isElement(e2) && name(e2) === tag;\n    const parent = (element) => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    const nextSibling = (element) => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n    const children = (element) => map2(element.dom.childNodes, SugarElement.fromDom);\n    const child = (element, index2) => {\n      const cs = element.dom.childNodes;\n      return Optional.from(cs[index2]).map(SugarElement.fromDom);\n    };\n    const firstChild = (element) => child(element, 0);\n    const lastChild = (element) => child(element, element.dom.childNodes.length - 1);\n    const before$1 = (marker, element) => {\n      const parent$1 = parent(marker);\n      parent$1.each((v2) => {\n        v2.dom.insertBefore(element.dom, marker.dom);\n      });\n    };\n    const after = (marker, element) => {\n      const sibling = nextSibling(marker);\n      sibling.fold(() => {\n        const parent$1 = parent(marker);\n        parent$1.each((v2) => {\n          append$1(v2, element);\n        });\n      }, (v2) => {\n        before$1(v2, element);\n      });\n    };\n    const append$1 = (parent2, element) => {\n      parent2.dom.appendChild(element.dom);\n    };\n    const before = (marker, elements) => {\n      each$1(elements, (x2) => {\n        before$1(marker, x2);\n      });\n    };\n    const append = (parent2, elements) => {\n      each$1(elements, (x2) => {\n        append$1(parent2, x2);\n      });\n    };\n    const empty = (element) => {\n      element.dom.textContent = \"\";\n      each$1(children(element), (rogue) => {\n        remove2(rogue);\n      });\n    };\n    const remove2 = (element) => {\n      const dom2 = element.dom;\n      if (dom2.parentNode !== null) {\n        dom2.parentNode.removeChild(dom2);\n      }\n    };\n    var global$5 = tinymce.util.Tools.resolve(\"tinymce.dom.RangeUtils\");\n    var global$4 = tinymce.util.Tools.resolve(\"tinymce.dom.TreeWalker\");\n    var global$3 = tinymce.util.Tools.resolve(\"tinymce.util.VK\");\n    const keys2 = Object.keys;\n    const each = (obj, f2) => {\n      const props = keys2(obj);\n      for (let k3 = 0, len = props.length; k3 < len; k3++) {\n        const i3 = props[k3];\n        const x2 = obj[i3];\n        f2(x2, i3);\n      }\n    };\n    const objAcc = (r3) => (x2, i3) => {\n      r3[i3] = x2;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      const r3 = {};\n      each(obj, (x2, i3) => {\n        (pred(x2, i3) ? onTrue : onFalse)(x2, i3);\n      });\n      return r3;\n    };\n    const filter = (obj, pred) => {\n      const t2 = {};\n      internalFilter(obj, pred, objAcc(t2), noop);\n      return t2;\n    };\n    const rawSet = (dom2, key, value) => {\n      if (isString2(value) || isBoolean2(value) || isNumber2(value)) {\n        dom2.setAttribute(key, value + \"\");\n      } else {\n        console.error(\"Invalid call to Attribute.set. Key \", key, \":: Value \", value, \":: Element \", dom2);\n        throw new Error(\"Attribute value was not simple\");\n      }\n    };\n    const setAll = (element, attrs) => {\n      const dom2 = element.dom;\n      each(attrs, (v2, k3) => {\n        rawSet(dom2, k3, v2);\n      });\n    };\n    const clone$1 = (element) => foldl(element.dom.attributes, (acc, attr) => {\n      acc[attr.name] = attr.value;\n      return acc;\n    }, {});\n    const clone = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n    const deep = (original) => clone(original, true);\n    const shallowAs = (original, tag) => {\n      const nu = SugarElement.fromTag(tag);\n      const attributes = clone$1(original);\n      setAll(nu, attributes);\n      return nu;\n    };\n    const mutate = (original, tag) => {\n      const nu = shallowAs(original, tag);\n      after(original, nu);\n      const children$1 = children(original);\n      append(nu, children$1);\n      remove2(original);\n      return nu;\n    };\n    var global$2 = tinymce.util.Tools.resolve(\"tinymce.dom.DOMUtils\");\n    var global$1 = tinymce.util.Tools.resolve(\"tinymce.util.Tools\");\n    const matchNodeName = (name2) => (node) => node && node.nodeName.toLowerCase() === name2;\n    const matchNodeNames = (regex2) => (node) => node && regex2.test(node.nodeName);\n    const isTextNode = (node) => node && node.nodeType === 3;\n    const isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n    const isOlUlNode = matchNodeNames(/^(OL|UL)$/);\n    const isOlNode = matchNodeName(\"ol\");\n    const isListItemNode = matchNodeNames(/^(LI|DT|DD)$/);\n    const isDlItemNode = matchNodeNames(/^(DT|DD)$/);\n    const isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n    const isBr = matchNodeName(\"br\");\n    const isFirstChild = (node) => node.parentNode.firstChild === node;\n    const isTextBlock = (editor, node) => node && !!editor.schema.getTextBlockElements()[node.nodeName];\n    const isBlock = (node, blockElements) => node && node.nodeName in blockElements;\n    const isBogusBr = (dom2, node) => {\n      if (!isBr(node)) {\n        return false;\n      }\n      return dom2.isBlock(node.nextSibling) && !isBr(node.previousSibling);\n    };\n    const isEmpty$1 = (dom2, elm, keepBookmarks) => {\n      const empty2 = dom2.isEmpty(elm);\n      if (keepBookmarks && dom2.select(\"span[data-mce-type=bookmark]\", elm).length > 0) {\n        return false;\n      }\n      return empty2;\n    };\n    const isChildOfBody = (dom2, elm) => dom2.isChildOf(elm, dom2.getRoot());\n    const option = (name2) => (editor) => editor.options.get(name2);\n    const register$3 = (editor) => {\n      const registerOption = editor.options.register;\n      registerOption(\"lists_indent_on_tab\", {\n        processor: \"boolean\",\n        default: true\n      });\n    };\n    const shouldIndentOnTab = option(\"lists_indent_on_tab\");\n    const getForcedRootBlock = option(\"forced_root_block\");\n    const getForcedRootBlockAttrs = option(\"forced_root_block_attrs\");\n    const createTextBlock = (editor, contentNode) => {\n      const dom2 = editor.dom;\n      const blockElements = editor.schema.getBlockElements();\n      const fragment = dom2.createFragment();\n      const blockName = getForcedRootBlock(editor);\n      const blockAttrs = getForcedRootBlockAttrs(editor);\n      let node, textBlock, hasContentNode;\n      textBlock = dom2.create(blockName, blockAttrs);\n      if (!isBlock(contentNode.firstChild, blockElements)) {\n        fragment.appendChild(textBlock);\n      }\n      while (node = contentNode.firstChild) {\n        const nodeName = node.nodeName;\n        if (!hasContentNode && (nodeName !== \"SPAN\" || node.getAttribute(\"data-mce-type\") !== \"bookmark\")) {\n          hasContentNode = true;\n        }\n        if (isBlock(node, blockElements)) {\n          fragment.appendChild(node);\n          textBlock = null;\n        } else {\n          if (!textBlock) {\n            textBlock = dom2.create(blockName, blockAttrs);\n            fragment.appendChild(textBlock);\n          }\n          textBlock.appendChild(node);\n        }\n      }\n      if (!hasContentNode) {\n        textBlock.appendChild(dom2.create(\"br\", { \"data-mce-bogus\": \"1\" }));\n      }\n      return fragment;\n    };\n    const DOM$2 = global$2.DOM;\n    const splitList = (editor, list2, li) => {\n      const removeAndKeepBookmarks = (targetNode) => {\n        global$1.each(bookmarks, (node) => {\n          targetNode.parentNode.insertBefore(node, li.parentNode);\n        });\n        DOM$2.remove(targetNode);\n      };\n      const bookmarks = DOM$2.select('span[data-mce-type=\"bookmark\"]', list2);\n      const newBlock = createTextBlock(editor, li);\n      const tmpRng = DOM$2.createRng();\n      tmpRng.setStartAfter(li);\n      tmpRng.setEndAfter(list2);\n      const fragment = tmpRng.extractContents();\n      for (let node = fragment.firstChild; node; node = node.firstChild) {\n        if (node.nodeName === \"LI\" && editor.dom.isEmpty(node)) {\n          DOM$2.remove(node);\n          break;\n        }\n      }\n      if (!editor.dom.isEmpty(fragment)) {\n        DOM$2.insertAfter(fragment, list2);\n      }\n      DOM$2.insertAfter(newBlock, list2);\n      if (isEmpty$1(editor.dom, li.parentNode)) {\n        removeAndKeepBookmarks(li.parentNode);\n      }\n      DOM$2.remove(li);\n      if (isEmpty$1(editor.dom, list2)) {\n        DOM$2.remove(list2);\n      }\n    };\n    const isDescriptionDetail = isTag(\"dd\");\n    const isDescriptionTerm = isTag(\"dt\");\n    const outdentDlItem = (editor, item) => {\n      if (isDescriptionDetail(item)) {\n        mutate(item, \"dt\");\n      } else if (isDescriptionTerm(item)) {\n        parent(item).each((dl) => splitList(editor, dl.dom, item.dom));\n      }\n    };\n    const indentDlItem = (item) => {\n      if (isDescriptionTerm(item)) {\n        mutate(item, \"dd\");\n      }\n    };\n    const dlIndentation = (editor, indentation, dlItems) => {\n      if (indentation === \"Indent\") {\n        each$1(dlItems, indentDlItem);\n      } else {\n        each$1(dlItems, (item) => outdentDlItem(editor, item));\n      }\n    };\n    const getNormalizedPoint = (container, offset) => {\n      if (isTextNode(container)) {\n        return {\n          container,\n          offset\n        };\n      }\n      const node = global$5.getNode(container, offset);\n      if (isTextNode(node)) {\n        return {\n          container: node,\n          offset: offset >= container.childNodes.length ? node.data.length : 0\n        };\n      } else if (node.previousSibling && isTextNode(node.previousSibling)) {\n        return {\n          container: node.previousSibling,\n          offset: node.previousSibling.data.length\n        };\n      } else if (node.nextSibling && isTextNode(node.nextSibling)) {\n        return {\n          container: node.nextSibling,\n          offset: 0\n        };\n      }\n      return {\n        container,\n        offset\n      };\n    };\n    const normalizeRange = (rng) => {\n      const outRng = rng.cloneRange();\n      const rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n      outRng.setStart(rangeStart.container, rangeStart.offset);\n      const rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n      outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n      return outRng;\n    };\n    const getParentList = (editor, node) => {\n      const selectionStart = node || editor.selection.getStart(true);\n      return editor.dom.getParent(selectionStart, \"OL,UL,DL\", getClosestListRootElm(editor, selectionStart));\n    };\n    const isParentListSelected = (parentList, selectedBlocks) => parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n    const findSubLists = (parentList) => filter$1(parentList.querySelectorAll(\"ol,ul,dl\"), isListNode);\n    const getSelectedSubLists = (editor) => {\n      const parentList = getParentList(editor);\n      const selectedBlocks = editor.selection.getSelectedBlocks();\n      if (isParentListSelected(parentList, selectedBlocks)) {\n        return findSubLists(parentList);\n      } else {\n        return filter$1(selectedBlocks, (elm) => {\n          return isListNode(elm) && parentList !== elm;\n        });\n      }\n    };\n    const findParentListItemsNodes = (editor, elms) => {\n      const listItemsElms = global$1.map(elms, (elm) => {\n        const parentLi = editor.dom.getParent(elm, \"li,dd,dt\", getClosestListRootElm(editor, elm));\n        return parentLi ? parentLi : elm;\n      });\n      return unique(listItemsElms);\n    };\n    const getSelectedListItems = (editor) => {\n      const selectedBlocks = editor.selection.getSelectedBlocks();\n      return filter$1(findParentListItemsNodes(editor, selectedBlocks), isListItemNode);\n    };\n    const getSelectedDlItems = (editor) => filter$1(getSelectedListItems(editor), isDlItemNode);\n    const getClosestListRootElm = (editor, elm) => {\n      const parentTableCell = editor.dom.getParents(elm, \"TD,TH\");\n      return parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n    };\n    const findLastParentListNode = (editor, elm) => {\n      const parentLists = editor.dom.getParents(elm, \"ol,ul\", getClosestListRootElm(editor, elm));\n      return last(parentLists);\n    };\n    const getSelectedLists = (editor) => {\n      const firstList = findLastParentListNode(editor, editor.selection.getStart());\n      const subsequentLists = filter$1(editor.selection.getSelectedBlocks(), isOlUlNode);\n      return firstList.toArray().concat(subsequentLists);\n    };\n    const getSelectedListRoots = (editor) => {\n      const selectedLists = getSelectedLists(editor);\n      return getUniqueListRoots(editor, selectedLists);\n    };\n    const getUniqueListRoots = (editor, lists) => {\n      const listRoots = map2(lists, (list2) => findLastParentListNode(editor, list2).getOr(list2));\n      return unique(listRoots);\n    };\n    const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists((left) => comparator(left, rhs));\n    const lift2 = (oa, ob, f2) => oa.isSome() && ob.isSome() ? Optional.some(f2(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n    const fromElements = (elements, scope) => {\n      const doc = document;\n      const fragment = doc.createDocumentFragment();\n      each$1(elements, (element) => {\n        fragment.appendChild(element.dom);\n      });\n      return SugarElement.fromDom(fragment);\n    };\n    const fireListEvent = (editor, action, element) => editor.dispatch(\"ListMutation\", {\n      action,\n      element\n    });\n    const blank = (r3) => (s2) => s2.replace(r3, \"\");\n    const trim = blank(/^\\s+|\\s+$/g);\n    const isNotEmpty = (s2) => s2.length > 0;\n    const isEmpty2 = (s2) => !isNotEmpty(s2);\n    const isSupported = (dom2) => dom2.style !== void 0 && isFunction2(dom2.style.getPropertyValue);\n    const internalSet = (dom2, property, value) => {\n      if (!isString2(value)) {\n        console.error(\"Invalid call to CSS.set. Property \", property, \":: Value \", value, \":: Element \", dom2);\n        throw new Error(\"CSS value must be a string: \" + value);\n      }\n      if (isSupported(dom2)) {\n        dom2.style.setProperty(property, value);\n      }\n    };\n    const set2 = (element, property, value) => {\n      const dom2 = element.dom;\n      internalSet(dom2, property, value);\n    };\n    const joinSegment = (parent2, child2) => {\n      append$1(parent2.item, child2.list);\n    };\n    const joinSegments = (segments) => {\n      for (let i3 = 1; i3 < segments.length; i3++) {\n        joinSegment(segments[i3 - 1], segments[i3]);\n      }\n    };\n    const appendSegments = (head$1, tail) => {\n      lift2(last(head$1), head(tail), joinSegment);\n    };\n    const createSegment = (scope, listType) => {\n      const segment = {\n        list: SugarElement.fromTag(listType, scope),\n        item: SugarElement.fromTag(\"li\", scope)\n      };\n      append$1(segment.list, segment.item);\n      return segment;\n    };\n    const createSegments = (scope, entry, size) => {\n      const segments = [];\n      for (let i3 = 0; i3 < size; i3++) {\n        segments.push(createSegment(scope, entry.listType));\n      }\n      return segments;\n    };\n    const populateSegments = (segments, entry) => {\n      for (let i3 = 0; i3 < segments.length - 1; i3++) {\n        set2(segments[i3].item, \"list-style-type\", \"none\");\n      }\n      last(segments).each((segment) => {\n        setAll(segment.list, entry.listAttributes);\n        setAll(segment.item, entry.itemAttributes);\n        append(segment.item, entry.content);\n      });\n    };\n    const normalizeSegment = (segment, entry) => {\n      if (name(segment.list) !== entry.listType) {\n        segment.list = mutate(segment.list, entry.listType);\n      }\n      setAll(segment.list, entry.listAttributes);\n    };\n    const createItem = (scope, attr, content) => {\n      const item = SugarElement.fromTag(\"li\", scope);\n      setAll(item, attr);\n      append(item, content);\n      return item;\n    };\n    const appendItem = (segment, item) => {\n      append$1(segment.list, item);\n      segment.item = item;\n    };\n    const writeShallow = (scope, cast, entry) => {\n      const newCast = cast.slice(0, entry.depth);\n      last(newCast).each((segment) => {\n        const item = createItem(scope, entry.itemAttributes, entry.content);\n        appendItem(segment, item);\n        normalizeSegment(segment, entry);\n      });\n      return newCast;\n    };\n    const writeDeep = (scope, cast, entry) => {\n      const segments = createSegments(scope, entry, entry.depth - cast.length);\n      joinSegments(segments);\n      populateSegments(segments, entry);\n      appendSegments(cast, segments);\n      return cast.concat(segments);\n    };\n    const composeList = (scope, entries) => {\n      const cast = foldl(entries, (cast2, entry) => {\n        return entry.depth > cast2.length ? writeDeep(scope, cast2, entry) : writeShallow(scope, cast2, entry);\n      }, []);\n      return head(cast).map((segment) => segment.list);\n    };\n    const isList = (el) => is$1(el, \"OL,UL\");\n    const hasFirstChildList = (el) => firstChild(el).exists(isList);\n    const hasLastChildList = (el) => lastChild(el).exists(isList);\n    const isIndented = (entry) => entry.depth > 0;\n    const isSelected = (entry) => entry.isSelected;\n    const cloneItemContent = (li) => {\n      const children$1 = children(li);\n      const content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n      return map2(content, deep);\n    };\n    const createEntry = (li, depth, isSelected2) => parent(li).filter(isElement).map((list2) => ({\n      depth,\n      dirty: false,\n      isSelected: isSelected2,\n      content: cloneItemContent(li),\n      itemAttributes: clone$1(li),\n      listAttributes: clone$1(list2),\n      listType: name(list2)\n    }));\n    const indentEntry = (indentation, entry) => {\n      switch (indentation) {\n        case \"Indent\":\n          entry.depth++;\n          break;\n        case \"Outdent\":\n          entry.depth--;\n          break;\n        case \"Flatten\":\n          entry.depth = 0;\n      }\n      entry.dirty = true;\n    };\n    const cloneListProperties = (target, source) => {\n      target.listType = source.listType;\n      target.listAttributes = { ...source.listAttributes };\n    };\n    const cleanListProperties = (entry) => {\n      entry.listAttributes = filter(entry.listAttributes, (_value, key) => key !== \"start\");\n    };\n    const closestSiblingEntry = (entries, start) => {\n      const depth = entries[start].depth;\n      const matches = (entry) => entry.depth === depth && !entry.dirty;\n      const until = (entry) => entry.depth < depth;\n      return findUntil(reverse(entries.slice(0, start)), matches, until).orThunk(() => findUntil(entries.slice(start + 1), matches, until));\n    };\n    const normalizeEntries = (entries) => {\n      each$1(entries, (entry, i3) => {\n        closestSiblingEntry(entries, i3).fold(() => {\n          if (entry.dirty) {\n            cleanListProperties(entry);\n          }\n        }, (matchingEntry) => cloneListProperties(entry, matchingEntry));\n      });\n      return entries;\n    };\n    const Cell = (initial) => {\n      let value = initial;\n      const get2 = () => {\n        return value;\n      };\n      const set3 = (v2) => {\n        value = v2;\n      };\n      return {\n        get: get2,\n        set: set3\n      };\n    };\n    const parseItem = (depth, itemSelection, selectionState, item) => firstChild(item).filter(isList).fold(() => {\n      itemSelection.each((selection) => {\n        if (eq2(selection.start, item)) {\n          selectionState.set(true);\n        }\n      });\n      const currentItemEntry = createEntry(item, depth, selectionState.get());\n      itemSelection.each((selection) => {\n        if (eq2(selection.end, item)) {\n          selectionState.set(false);\n        }\n      });\n      const childListEntries = lastChild(item).filter(isList).map((list2) => parseList(depth, itemSelection, selectionState, list2)).getOr([]);\n      return currentItemEntry.toArray().concat(childListEntries);\n    }, (list2) => parseList(depth, itemSelection, selectionState, list2));\n    const parseList = (depth, itemSelection, selectionState, list2) => bind(children(list2), (element) => {\n      const parser = isList(element) ? parseList : parseItem;\n      const newDepth = depth + 1;\n      return parser(newDepth, itemSelection, selectionState, element);\n    });\n    const parseLists = (lists, itemSelection) => {\n      const selectionState = Cell(false);\n      const initialDepth = 0;\n      return map2(lists, (list2) => ({\n        sourceList: list2,\n        entries: parseList(initialDepth, itemSelection, selectionState, list2)\n      }));\n    };\n    const outdentedComposer = (editor, entries) => {\n      const normalizedEntries = normalizeEntries(entries);\n      return map2(normalizedEntries, (entry) => {\n        const content = fromElements(entry.content);\n        return SugarElement.fromDom(createTextBlock(editor, content.dom));\n      });\n    };\n    const indentedComposer = (editor, entries) => {\n      const normalizedEntries = normalizeEntries(entries);\n      return composeList(editor.contentDocument, normalizedEntries).toArray();\n    };\n    const composeEntries = (editor, entries) => bind(groupBy(entries, isIndented), (entries2) => {\n      const groupIsIndented = head(entries2).exists(isIndented);\n      return groupIsIndented ? indentedComposer(editor, entries2) : outdentedComposer(editor, entries2);\n    });\n    const indentSelectedEntries = (entries, indentation) => {\n      each$1(filter$1(entries, isSelected), (entry) => indentEntry(indentation, entry));\n    };\n    const getItemSelection = (editor) => {\n      const selectedListItems = map2(getSelectedListItems(editor), SugarElement.fromDom);\n      return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), (start, end) => ({\n        start,\n        end\n      }));\n    };\n    const listIndentation = (editor, lists, indentation) => {\n      const entrySets = parseLists(lists, getItemSelection(editor));\n      each$1(entrySets, (entrySet) => {\n        indentSelectedEntries(entrySet.entries, indentation);\n        const composedLists = composeEntries(editor, entrySet.entries);\n        each$1(composedLists, (composedList) => {\n          fireListEvent(editor, indentation === \"Indent\" ? \"IndentList\" : \"OutdentList\", composedList.dom);\n        });\n        before(entrySet.sourceList, composedLists);\n        remove2(entrySet.sourceList);\n      });\n    };\n    const selectionIndentation = (editor, indentation) => {\n      const lists = map2(getSelectedListRoots(editor), SugarElement.fromDom);\n      const dlItems = map2(getSelectedDlItems(editor), SugarElement.fromDom);\n      let isHandled = false;\n      if (lists.length || dlItems.length) {\n        const bookmark = editor.selection.getBookmark();\n        listIndentation(editor, lists, indentation);\n        dlIndentation(editor, indentation, dlItems);\n        editor.selection.moveToBookmark(bookmark);\n        editor.selection.setRng(normalizeRange(editor.selection.getRng()));\n        editor.nodeChanged();\n        isHandled = true;\n      }\n      return isHandled;\n    };\n    const indentListSelection = (editor) => selectionIndentation(editor, \"Indent\");\n    const outdentListSelection = (editor) => selectionIndentation(editor, \"Outdent\");\n    const flattenListSelection = (editor) => selectionIndentation(editor, \"Flatten\");\n    var global2 = tinymce.util.Tools.resolve(\"tinymce.dom.BookmarkManager\");\n    const DOM$1 = global$2.DOM;\n    const createBookmark = (rng) => {\n      const bookmark = {};\n      const setupEndPoint = (start) => {\n        let container = rng[start ? \"startContainer\" : \"endContainer\"];\n        let offset = rng[start ? \"startOffset\" : \"endOffset\"];\n        if (container.nodeType === 1) {\n          const offsetNode = DOM$1.create(\"span\", { \"data-mce-type\": \"bookmark\" });\n          if (container.hasChildNodes()) {\n            offset = Math.min(offset, container.childNodes.length - 1);\n            if (start) {\n              container.insertBefore(offsetNode, container.childNodes[offset]);\n            } else {\n              DOM$1.insertAfter(offsetNode, container.childNodes[offset]);\n            }\n          } else {\n            container.appendChild(offsetNode);\n          }\n          container = offsetNode;\n          offset = 0;\n        }\n        bookmark[start ? \"startContainer\" : \"endContainer\"] = container;\n        bookmark[start ? \"startOffset\" : \"endOffset\"] = offset;\n      };\n      setupEndPoint(true);\n      if (!rng.collapsed) {\n        setupEndPoint();\n      }\n      return bookmark;\n    };\n    const resolveBookmark = (bookmark) => {\n      const restoreEndPoint = (start) => {\n        let node;\n        const nodeIndex = (container2) => {\n          let node2 = container2.parentNode.firstChild, idx = 0;\n          while (node2) {\n            if (node2 === container2) {\n              return idx;\n            }\n            if (node2.nodeType !== 1 || node2.getAttribute(\"data-mce-type\") !== \"bookmark\") {\n              idx++;\n            }\n            node2 = node2.nextSibling;\n          }\n          return -1;\n        };\n        let container = node = bookmark[start ? \"startContainer\" : \"endContainer\"];\n        let offset = bookmark[start ? \"startOffset\" : \"endOffset\"];\n        if (!container) {\n          return;\n        }\n        if (container.nodeType === 1) {\n          offset = nodeIndex(container);\n          container = container.parentNode;\n          DOM$1.remove(node);\n          if (!container.hasChildNodes() && DOM$1.isBlock(container)) {\n            container.appendChild(DOM$1.create(\"br\"));\n          }\n        }\n        bookmark[start ? \"startContainer\" : \"endContainer\"] = container;\n        bookmark[start ? \"startOffset\" : \"endOffset\"] = offset;\n      };\n      restoreEndPoint(true);\n      restoreEndPoint();\n      const rng = DOM$1.createRng();\n      rng.setStart(bookmark.startContainer, bookmark.startOffset);\n      if (bookmark.endContainer) {\n        rng.setEnd(bookmark.endContainer, bookmark.endOffset);\n      }\n      return normalizeRange(rng);\n    };\n    const listToggleActionFromListName = (listName) => {\n      switch (listName) {\n        case \"UL\":\n          return \"ToggleUlList\";\n        case \"OL\":\n          return \"ToggleOlList\";\n        case \"DL\":\n          return \"ToggleDLList\";\n      }\n    };\n    const isCustomList = (list2) => /\\btox\\-/.test(list2.className);\n    const listState = (editor, listName, activate) => {\n      const nodeChangeHandler = (e2) => {\n        const inList = findUntil(e2.parents, isListNode, isTableCellNode).filter((list2) => list2.nodeName === listName && !isCustomList(list2)).isSome();\n        activate(inList);\n      };\n      const parents = editor.dom.getParents(editor.selection.getNode());\n      nodeChangeHandler({ parents });\n      editor.on(\"NodeChange\", nodeChangeHandler);\n      return () => editor.off(\"NodeChange\", nodeChangeHandler);\n    };\n    const updateListStyle = (dom2, el, detail) => {\n      const type2 = detail[\"list-style-type\"] ? detail[\"list-style-type\"] : null;\n      dom2.setStyle(el, \"list-style-type\", type2);\n    };\n    const setAttribs = (elm, attrs) => {\n      global$1.each(attrs, (value, key) => {\n        elm.setAttribute(key, value);\n      });\n    };\n    const updateListAttrs = (dom2, el, detail) => {\n      setAttribs(el, detail[\"list-attributes\"]);\n      global$1.each(dom2.select(\"li\", el), (li) => {\n        setAttribs(li, detail[\"list-item-attributes\"]);\n      });\n    };\n    const updateListWithDetails = (dom2, el, detail) => {\n      updateListStyle(dom2, el, detail);\n      updateListAttrs(dom2, el, detail);\n    };\n    const removeStyles = (dom2, element, styles) => {\n      global$1.each(styles, (style) => dom2.setStyle(element, style, \"\"));\n    };\n    const getEndPointNode = (editor, rng, start, root2) => {\n      let container = rng[start ? \"startContainer\" : \"endContainer\"];\n      const offset = rng[start ? \"startOffset\" : \"endOffset\"];\n      if (container.nodeType === 1) {\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n      }\n      if (!start && isBr(container.nextSibling)) {\n        container = container.nextSibling;\n      }\n      while (container.parentNode !== root2) {\n        if (isTextBlock(editor, container)) {\n          return container;\n        }\n        if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {\n          return container;\n        }\n        container = container.parentNode;\n      }\n      return container;\n    };\n    const getSelectedTextBlocks = (editor, rng, root2) => {\n      const textBlocks = [];\n      const dom2 = editor.dom;\n      const startNode = getEndPointNode(editor, rng, true, root2);\n      const endNode = getEndPointNode(editor, rng, false, root2);\n      let block2;\n      const siblings = [];\n      for (let node = startNode; node; node = node.nextSibling) {\n        siblings.push(node);\n        if (node === endNode) {\n          break;\n        }\n      }\n      global$1.each(siblings, (node) => {\n        if (isTextBlock(editor, node)) {\n          textBlocks.push(node);\n          block2 = null;\n          return;\n        }\n        if (dom2.isBlock(node) || isBr(node)) {\n          if (isBr(node)) {\n            dom2.remove(node);\n          }\n          block2 = null;\n          return;\n        }\n        const nextSibling2 = node.nextSibling;\n        if (global2.isBookmarkNode(node)) {\n          if (isListNode(nextSibling2) || isTextBlock(editor, nextSibling2) || !nextSibling2 && node.parentNode === root2) {\n            block2 = null;\n            return;\n          }\n        }\n        if (!block2) {\n          block2 = dom2.create(\"p\");\n          node.parentNode.insertBefore(block2, node);\n          textBlocks.push(block2);\n        }\n        block2.appendChild(node);\n      });\n      return textBlocks;\n    };\n    const hasCompatibleStyle = (dom2, sib, detail) => {\n      const sibStyle = dom2.getStyle(sib, \"list-style-type\");\n      let detailStyle = detail ? detail[\"list-style-type\"] : \"\";\n      detailStyle = detailStyle === null ? \"\" : detailStyle;\n      return sibStyle === detailStyle;\n    };\n    const applyList = (editor, listName, detail) => {\n      const rng = editor.selection.getRng();\n      let listItemName = \"LI\";\n      const root2 = getClosestListRootElm(editor, editor.selection.getStart(true));\n      const dom2 = editor.dom;\n      if (dom2.getContentEditable(editor.selection.getNode()) === \"false\") {\n        return;\n      }\n      listName = listName.toUpperCase();\n      if (listName === \"DL\") {\n        listItemName = \"DT\";\n      }\n      const bookmark = createBookmark(rng);\n      const selectedTextBlocks = getSelectedTextBlocks(editor, rng, root2);\n      global$1.each(selectedTextBlocks, (block2) => {\n        let listBlock;\n        const sibling = block2.previousSibling;\n        const parent2 = block2.parentNode;\n        if (!isListItemNode(parent2)) {\n          if (sibling && isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom2, sibling, detail)) {\n            listBlock = sibling;\n            block2 = dom2.rename(block2, listItemName);\n            sibling.appendChild(block2);\n          } else {\n            listBlock = dom2.create(listName);\n            block2.parentNode.insertBefore(listBlock, block2);\n            listBlock.appendChild(block2);\n            block2 = dom2.rename(block2, listItemName);\n          }\n          removeStyles(dom2, block2, [\n            \"margin\",\n            \"margin-right\",\n            \"margin-bottom\",\n            \"margin-left\",\n            \"margin-top\",\n            \"padding\",\n            \"padding-right\",\n            \"padding-bottom\",\n            \"padding-left\",\n            \"padding-top\"\n          ]);\n          updateListWithDetails(dom2, listBlock, detail);\n          mergeWithAdjacentLists(editor.dom, listBlock);\n        }\n      });\n      editor.selection.setRng(resolveBookmark(bookmark));\n    };\n    const isValidLists = (list1, list2) => {\n      return list1 && list2 && isListNode(list1) && list1.nodeName === list2.nodeName;\n    };\n    const hasSameListStyle = (dom2, list1, list2) => {\n      const targetStyle = dom2.getStyle(list1, \"list-style-type\", true);\n      const style = dom2.getStyle(list2, \"list-style-type\", true);\n      return targetStyle === style;\n    };\n    const hasSameClasses = (elm1, elm2) => {\n      return elm1.className === elm2.className;\n    };\n    const shouldMerge = (dom2, list1, list2) => {\n      return isValidLists(list1, list2) && hasSameListStyle(dom2, list1, list2) && hasSameClasses(list1, list2);\n    };\n    const mergeWithAdjacentLists = (dom2, listBlock) => {\n      let sibling, node;\n      sibling = listBlock.nextSibling;\n      if (shouldMerge(dom2, listBlock, sibling)) {\n        while (node = sibling.firstChild) {\n          listBlock.appendChild(node);\n        }\n        dom2.remove(sibling);\n      }\n      sibling = listBlock.previousSibling;\n      if (shouldMerge(dom2, listBlock, sibling)) {\n        while (node = sibling.lastChild) {\n          listBlock.insertBefore(node, listBlock.firstChild);\n        }\n        dom2.remove(sibling);\n      }\n    };\n    const updateList$1 = (editor, list2, listName, detail) => {\n      if (list2.nodeName !== listName) {\n        const newList = editor.dom.rename(list2, listName);\n        updateListWithDetails(editor.dom, newList, detail);\n        fireListEvent(editor, listToggleActionFromListName(listName), newList);\n      } else {\n        updateListWithDetails(editor.dom, list2, detail);\n        fireListEvent(editor, listToggleActionFromListName(listName), list2);\n      }\n    };\n    const toggleMultipleLists = (editor, parentList, lists, listName, detail) => {\n      const parentIsList = isListNode(parentList);\n      if (parentIsList && parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n        flattenListSelection(editor);\n      } else {\n        applyList(editor, listName, detail);\n        const bookmark = createBookmark(editor.selection.getRng());\n        const allLists = parentIsList ? [\n          parentList,\n          ...lists\n        ] : lists;\n        global$1.each(allLists, (elm) => {\n          updateList$1(editor, elm, listName, detail);\n        });\n        editor.selection.setRng(resolveBookmark(bookmark));\n      }\n    };\n    const hasListStyleDetail = (detail) => {\n      return \"list-style-type\" in detail;\n    };\n    const toggleSingleList = (editor, parentList, listName, detail) => {\n      if (parentList === editor.getBody()) {\n        return;\n      }\n      if (parentList) {\n        if (parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {\n          flattenListSelection(editor);\n        } else {\n          const bookmark = createBookmark(editor.selection.getRng());\n          updateListWithDetails(editor.dom, parentList, detail);\n          const newList = editor.dom.rename(parentList, listName);\n          mergeWithAdjacentLists(editor.dom, newList);\n          editor.selection.setRng(resolveBookmark(bookmark));\n          applyList(editor, listName, detail);\n          fireListEvent(editor, listToggleActionFromListName(listName), newList);\n        }\n      } else {\n        applyList(editor, listName, detail);\n        fireListEvent(editor, listToggleActionFromListName(listName), parentList);\n      }\n    };\n    const toggleList = (editor, listName, _detail) => {\n      const parentList = getParentList(editor);\n      const selectedSubLists = getSelectedSubLists(editor);\n      const detail = isObject2(_detail) ? _detail : {};\n      if (selectedSubLists.length > 0) {\n        toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n      } else {\n        toggleSingleList(editor, parentList, listName, detail);\n      }\n    };\n    const DOM = global$2.DOM;\n    const normalizeList = (dom2, list2) => {\n      const parentNode = list2.parentNode;\n      if (parentNode.nodeName === \"LI\" && parentNode.firstChild === list2) {\n        const sibling = parentNode.previousSibling;\n        if (sibling && sibling.nodeName === \"LI\") {\n          sibling.appendChild(list2);\n          if (isEmpty$1(dom2, parentNode)) {\n            DOM.remove(parentNode);\n          }\n        } else {\n          DOM.setStyle(parentNode, \"listStyleType\", \"none\");\n        }\n      }\n      if (isListNode(parentNode)) {\n        const sibling = parentNode.previousSibling;\n        if (sibling && sibling.nodeName === \"LI\") {\n          sibling.appendChild(list2);\n        }\n      }\n    };\n    const normalizeLists = (dom2, element) => {\n      const lists = global$1.grep(dom2.select(\"ol,ul\", element));\n      global$1.each(lists, (list2) => {\n        normalizeList(dom2, list2);\n      });\n    };\n    const findNextCaretContainer = (editor, rng, isForward, root2) => {\n      let node = rng.startContainer;\n      const offset = rng.startOffset;\n      if (isTextNode(node) && (isForward ? offset < node.data.length : offset > 0)) {\n        return node;\n      }\n      const nonEmptyBlocks = editor.schema.getNonEmptyElements();\n      if (node.nodeType === 1) {\n        node = global$5.getNode(node, offset);\n      }\n      const walker = new global$4(node, root2);\n      if (isForward) {\n        if (isBogusBr(editor.dom, node)) {\n          walker.next();\n        }\n      }\n      while (node = walker[isForward ? \"next\" : \"prev2\"]()) {\n        if (node.nodeName === \"LI\" && !node.hasChildNodes()) {\n          return node;\n        }\n        if (nonEmptyBlocks[node.nodeName]) {\n          return node;\n        }\n        if (isTextNode(node) && node.data.length > 0) {\n          return node;\n        }\n      }\n    };\n    const hasOnlyOneBlockChild = (dom2, elm) => {\n      const childNodes = elm.childNodes;\n      return childNodes.length === 1 && !isListNode(childNodes[0]) && dom2.isBlock(childNodes[0]);\n    };\n    const unwrapSingleBlockChild = (dom2, elm) => {\n      if (hasOnlyOneBlockChild(dom2, elm)) {\n        dom2.remove(elm.firstChild, true);\n      }\n    };\n    const moveChildren = (dom2, fromElm, toElm) => {\n      let node;\n      const targetElm = hasOnlyOneBlockChild(dom2, toElm) ? toElm.firstChild : toElm;\n      unwrapSingleBlockChild(dom2, fromElm);\n      if (!isEmpty$1(dom2, fromElm, true)) {\n        while (node = fromElm.firstChild) {\n          targetElm.appendChild(node);\n        }\n      }\n    };\n    const mergeLiElements = (dom2, fromElm, toElm) => {\n      let listNode;\n      const ul = fromElm.parentNode;\n      if (!isChildOfBody(dom2, fromElm) || !isChildOfBody(dom2, toElm)) {\n        return;\n      }\n      if (isListNode(toElm.lastChild)) {\n        listNode = toElm.lastChild;\n      }\n      if (ul === toElm.lastChild) {\n        if (isBr(ul.previousSibling)) {\n          dom2.remove(ul.previousSibling);\n        }\n      }\n      const node = toElm.lastChild;\n      if (node && isBr(node) && fromElm.hasChildNodes()) {\n        dom2.remove(node);\n      }\n      if (isEmpty$1(dom2, toElm, true)) {\n        empty(SugarElement.fromDom(toElm));\n      }\n      moveChildren(dom2, fromElm, toElm);\n      if (listNode) {\n        toElm.appendChild(listNode);\n      }\n      const contains$12 = contains2(SugarElement.fromDom(toElm), SugarElement.fromDom(fromElm));\n      const nestedLists = contains$12 ? dom2.getParents(fromElm, isListNode, toElm) : [];\n      dom2.remove(fromElm);\n      each$1(nestedLists, (list2) => {\n        if (isEmpty$1(dom2, list2) && list2 !== dom2.getRoot()) {\n          dom2.remove(list2);\n        }\n      });\n    };\n    const mergeIntoEmptyLi = (editor, fromLi, toLi) => {\n      empty(SugarElement.fromDom(toLi));\n      mergeLiElements(editor.dom, fromLi, toLi);\n      editor.selection.setCursorLocation(toLi, 0);\n    };\n    const mergeForward = (editor, rng, fromLi, toLi) => {\n      const dom2 = editor.dom;\n      if (dom2.isEmpty(toLi)) {\n        mergeIntoEmptyLi(editor, fromLi, toLi);\n      } else {\n        const bookmark = createBookmark(rng);\n        mergeLiElements(dom2, fromLi, toLi);\n        editor.selection.setRng(resolveBookmark(bookmark));\n      }\n    };\n    const mergeBackward = (editor, rng, fromLi, toLi) => {\n      const bookmark = createBookmark(rng);\n      mergeLiElements(editor.dom, fromLi, toLi);\n      const resolvedBookmark = resolveBookmark(bookmark);\n      editor.selection.setRng(resolvedBookmark);\n    };\n    const backspaceDeleteFromListToListCaret = (editor, isForward) => {\n      const dom2 = editor.dom, selection = editor.selection;\n      const selectionStartElm = selection.getStart();\n      const root2 = getClosestListRootElm(editor, selectionStartElm);\n      const li = dom2.getParent(selection.getStart(), \"LI\", root2);\n      if (li) {\n        const ul = li.parentNode;\n        if (ul === editor.getBody() && isEmpty$1(dom2, ul)) {\n          return true;\n        }\n        const rng = normalizeRange(selection.getRng());\n        const otherLi = dom2.getParent(findNextCaretContainer(editor, rng, isForward, root2), \"LI\", root2);\n        if (otherLi && otherLi !== li) {\n          editor.undoManager.transact(() => {\n            if (isForward) {\n              mergeForward(editor, rng, otherLi, li);\n            } else {\n              if (isFirstChild(li)) {\n                outdentListSelection(editor);\n              } else {\n                mergeBackward(editor, rng, li, otherLi);\n              }\n            }\n          });\n          return true;\n        } else if (!otherLi) {\n          if (!isForward && rng.startOffset === 0 && rng.endOffset === 0) {\n            editor.undoManager.transact(() => {\n              flattenListSelection(editor);\n            });\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n    const removeBlock = (dom2, block2, root2) => {\n      const parentBlock = dom2.getParent(block2.parentNode, dom2.isBlock, root2);\n      dom2.remove(block2);\n      if (parentBlock && dom2.isEmpty(parentBlock)) {\n        dom2.remove(parentBlock);\n      }\n    };\n    const backspaceDeleteIntoListCaret = (editor, isForward) => {\n      const dom2 = editor.dom;\n      const selectionStartElm = editor.selection.getStart();\n      const root2 = getClosestListRootElm(editor, selectionStartElm);\n      const block2 = dom2.getParent(selectionStartElm, dom2.isBlock, root2);\n      if (block2 && dom2.isEmpty(block2)) {\n        const rng = normalizeRange(editor.selection.getRng());\n        const otherLi = dom2.getParent(findNextCaretContainer(editor, rng, isForward, root2), \"LI\", root2);\n        if (otherLi) {\n          editor.undoManager.transact(() => {\n            removeBlock(dom2, block2, root2);\n            mergeWithAdjacentLists(dom2, otherLi.parentNode);\n            editor.selection.select(otherLi, true);\n            editor.selection.collapse(isForward);\n          });\n          return true;\n        }\n      }\n      return false;\n    };\n    const backspaceDeleteCaret = (editor, isForward) => {\n      return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n    };\n    const backspaceDeleteRange = (editor) => {\n      const selectionStartElm = editor.selection.getStart();\n      const root2 = getClosestListRootElm(editor, selectionStartElm);\n      const startListParent = editor.dom.getParent(selectionStartElm, \"LI,DT,DD\", root2);\n      if (startListParent || getSelectedListItems(editor).length > 0) {\n        editor.undoManager.transact(() => {\n          editor.execCommand(\"Delete\");\n          normalizeLists(editor.dom, editor.getBody());\n        });\n        return true;\n      }\n      return false;\n    };\n    const backspaceDelete = (editor, isForward) => {\n      return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);\n    };\n    const setup$1 = (editor) => {\n      editor.on(\"keydown\", (e2) => {\n        if (e2.keyCode === global$3.BACKSPACE) {\n          if (backspaceDelete(editor, false)) {\n            e2.preventDefault();\n          }\n        } else if (e2.keyCode === global$3.DELETE) {\n          if (backspaceDelete(editor, true)) {\n            e2.preventDefault();\n          }\n        }\n      });\n    };\n    const get = (editor) => ({\n      backspaceDelete: (isForward) => {\n        backspaceDelete(editor, isForward);\n      }\n    });\n    const updateList = (editor, update) => {\n      const parentList = getParentList(editor);\n      editor.undoManager.transact(() => {\n        if (isObject2(update.styles)) {\n          editor.dom.setStyles(parentList, update.styles);\n        }\n        if (isObject2(update.attrs)) {\n          each(update.attrs, (v2, k3) => editor.dom.setAttrib(parentList, k3, v2));\n        }\n      });\n    };\n    const parseAlphabeticBase26 = (str) => {\n      const chars = reverse(trim(str).split(\"\"));\n      const values = map2(chars, (char, i3) => {\n        const charValue = char.toUpperCase().charCodeAt(0) - \"A\".charCodeAt(0) + 1;\n        return Math.pow(26, i3) * charValue;\n      });\n      return foldl(values, (sum, v2) => sum + v2, 0);\n    };\n    const composeAlphabeticBase26 = (value) => {\n      value--;\n      if (value < 0) {\n        return \"\";\n      } else {\n        const remainder = value % 26;\n        const quotient = Math.floor(value / 26);\n        const rest = composeAlphabeticBase26(quotient);\n        const char = String.fromCharCode(\"A\".charCodeAt(0) + remainder);\n        return rest + char;\n      }\n    };\n    const isUppercase = (str) => /^[A-Z]+$/.test(str);\n    const isLowercase = (str) => /^[a-z]+$/.test(str);\n    const isNumeric = (str) => /^[0-9]+$/.test(str);\n    const deduceListType = (start) => {\n      if (isNumeric(start)) {\n        return 2;\n      } else if (isUppercase(start)) {\n        return 0;\n      } else if (isLowercase(start)) {\n        return 1;\n      } else if (isEmpty2(start)) {\n        return 3;\n      } else {\n        return 4;\n      }\n    };\n    const parseStartValue = (start) => {\n      switch (deduceListType(start)) {\n        case 2:\n          return Optional.some({\n            listStyleType: Optional.none(),\n            start\n          });\n        case 0:\n          return Optional.some({\n            listStyleType: Optional.some(\"upper-alpha\"),\n            start: parseAlphabeticBase26(start).toString()\n          });\n        case 1:\n          return Optional.some({\n            listStyleType: Optional.some(\"lower-alpha\"),\n            start: parseAlphabeticBase26(start).toString()\n          });\n        case 3:\n          return Optional.some({\n            listStyleType: Optional.none(),\n            start: \"\"\n          });\n        case 4:\n          return Optional.none();\n      }\n    };\n    const parseDetail = (detail) => {\n      const start = parseInt(detail.start, 10);\n      if (is(detail.listStyleType, \"upper-alpha\")) {\n        return composeAlphabeticBase26(start);\n      } else if (is(detail.listStyleType, \"lower-alpha\")) {\n        return composeAlphabeticBase26(start).toLowerCase();\n      } else {\n        return detail.start;\n      }\n    };\n    const open = (editor) => {\n      const currentList = getParentList(editor);\n      if (!isOlNode(currentList)) {\n        return;\n      }\n      editor.windowManager.open({\n        title: \"List Properties\",\n        body: {\n          type: \"panel\",\n          items: [{\n            type: \"input\",\n            name: \"start\",\n            label: \"Start list at number\",\n            inputMode: \"numeric\"\n          }]\n        },\n        initialData: {\n          start: parseDetail({\n            start: editor.dom.getAttrib(currentList, \"start\", \"1\"),\n            listStyleType: Optional.some(editor.dom.getStyle(currentList, \"list-style-type\"))\n          })\n        },\n        buttons: [\n          {\n            type: \"cancel\",\n            name: \"cancel\",\n            text: \"Cancel\"\n          },\n          {\n            type: \"submit\",\n            name: \"save\",\n            text: \"Save\",\n            primary: true\n          }\n        ],\n        onSubmit: (api) => {\n          const data = api.getData();\n          parseStartValue(data.start).each((detail) => {\n            editor.execCommand(\"mceListUpdate\", false, {\n              attrs: { start: detail.start === \"1\" ? \"\" : detail.start },\n              styles: { \"list-style-type\": detail.listStyleType.getOr(\"\") }\n            });\n          });\n          api.close();\n        }\n      });\n    };\n    const queryListCommandState = (editor, listName) => () => {\n      const parentList = getParentList(editor);\n      return parentList && parentList.nodeName === listName;\n    };\n    const registerDialog = (editor) => {\n      editor.addCommand(\"mceListProps\", () => {\n        open(editor);\n      });\n    };\n    const register$2 = (editor) => {\n      editor.on(\"BeforeExecCommand\", (e2) => {\n        const cmd = e2.command.toLowerCase();\n        if (cmd === \"indent\") {\n          indentListSelection(editor);\n        } else if (cmd === \"outdent\") {\n          outdentListSelection(editor);\n        }\n      });\n      editor.addCommand(\"InsertUnorderedList\", (ui, detail) => {\n        toggleList(editor, \"UL\", detail);\n      });\n      editor.addCommand(\"InsertOrderedList\", (ui, detail) => {\n        toggleList(editor, \"OL\", detail);\n      });\n      editor.addCommand(\"InsertDefinitionList\", (ui, detail) => {\n        toggleList(editor, \"DL\", detail);\n      });\n      editor.addCommand(\"RemoveList\", () => {\n        flattenListSelection(editor);\n      });\n      registerDialog(editor);\n      editor.addCommand(\"mceListUpdate\", (ui, detail) => {\n        if (isObject2(detail)) {\n          updateList(editor, detail);\n        }\n      });\n      editor.addQueryStateHandler(\"InsertUnorderedList\", queryListCommandState(editor, \"UL\"));\n      editor.addQueryStateHandler(\"InsertOrderedList\", queryListCommandState(editor, \"OL\"));\n      editor.addQueryStateHandler(\"InsertDefinitionList\", queryListCommandState(editor, \"DL\"));\n    };\n    const setupTabKey = (editor) => {\n      editor.on(\"keydown\", (e2) => {\n        if (e2.keyCode !== global$3.TAB || global$3.metaKeyPressed(e2)) {\n          return;\n        }\n        editor.undoManager.transact(() => {\n          if (e2.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n            e2.preventDefault();\n          }\n        });\n      });\n    };\n    const setup = (editor) => {\n      if (shouldIndentOnTab(editor)) {\n        setupTabKey(editor);\n      }\n      setup$1(editor);\n    };\n    const register$1 = (editor) => {\n      const exec = (command) => () => editor.execCommand(command);\n      if (!editor.hasPlugin(\"advlist\")) {\n        editor.ui.registry.addToggleButton(\"numlist\", {\n          icon: \"ordered-list\",\n          active: false,\n          tooltip: \"Numbered list\",\n          onAction: exec(\"InsertOrderedList\"),\n          onSetup: (api) => listState(editor, \"OL\", api.setActive)\n        });\n        editor.ui.registry.addToggleButton(\"bullist\", {\n          icon: \"unordered-list\",\n          active: false,\n          tooltip: \"Bullet list\",\n          onAction: exec(\"InsertUnorderedList\"),\n          onSetup: (api) => listState(editor, \"UL\", api.setActive)\n        });\n      }\n    };\n    const register = (editor) => {\n      const listProperties = {\n        text: \"List properties...\",\n        icon: \"ordered-list\",\n        onAction: () => editor.execCommand(\"mceListProps\"),\n        onSetup: (api) => listState(editor, \"OL\", api.setEnabled)\n      };\n      editor.ui.registry.addMenuItem(\"listprops\", listProperties);\n      editor.ui.registry.addContextMenu(\"lists\", {\n        update: (node) => {\n          const parentList = getParentList(editor, node);\n          return isOlNode(parentList) ? [\"listprops\"] : [];\n        }\n      });\n    };\n    var Plugin = () => {\n      global$6.add(\"lists\", (editor) => {\n        register$3(editor);\n        if (editor.hasPlugin(\"rtc\", true) === false) {\n          setup(editor);\n          register$2(editor);\n        } else {\n          registerDialog(editor);\n        }\n        register$1(editor);\n        register(editor);\n        return get(editor);\n      });\n    };\n    Plugin();\n  })();\n  return plugin$2;\n}\nrequirePlugin$2();\nvar plugin$1 = {};\nvar hasRequiredPlugin$1;\nfunction requirePlugin$1() {\n  if (hasRequiredPlugin$1) return plugin$1;\n  hasRequiredPlugin$1 = 1;\n  (function() {\n    var global$5 = tinymce.util.Tools.resolve(\"tinymce.PluginManager\");\n    var global$4 = tinymce.util.Tools.resolve(\"tinymce.util.VK\");\n    const hasProto = (v2, constructor, predicate) => {\n      var _a3;\n      if (predicate(v2, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a3 = v2.constructor) === null || _a3 === void 0 ? void 0 : _a3.name) === constructor.name;\n      }\n    };\n    const typeOf = (x2) => {\n      const t2 = typeof x2;\n      if (x2 === null) {\n        return \"null\";\n      } else if (t2 === \"object\" && Array.isArray(x2)) {\n        return \"array\";\n      } else if (t2 === \"object\" && hasProto(x2, String, (o2, proto) => proto.isPrototypeOf(o2))) {\n        return \"string\";\n      } else {\n        return t2;\n      }\n    };\n    const isType = (type) => (value) => typeOf(value) === type;\n    const isSimpleType = (type) => (value) => typeof value === type;\n    const eq2 = (t2) => (a2) => t2 === a2;\n    const isString2 = isType(\"string\");\n    const isObject2 = isType(\"object\");\n    const isArray2 = isType(\"array\");\n    const isNull = eq2(null);\n    const isBoolean2 = isSimpleType(\"boolean\");\n    const isNullable = (a2) => a2 === null || a2 === void 0;\n    const isNonNullable = (a2) => !isNullable(a2);\n    const isFunction2 = isSimpleType(\"function\");\n    const isArrayOf = (value, pred) => {\n      if (isArray2(value)) {\n        for (let i3 = 0, len = value.length; i3 < len; ++i3) {\n          if (!pred(value[i3])) {\n            return false;\n          }\n        }\n        return true;\n      }\n      return false;\n    };\n    const noop = () => {\n    };\n    const tripleEquals = (a2, b2) => {\n      return a2 === b2;\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    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t2) => nativeIndexOf.call(ts, t2);\n    const contains2 = (xs, x2) => rawIndexOf(xs, x2) > -1;\n    const map2 = (xs, f2) => {\n      const len = xs.length;\n      const r3 = new Array(len);\n      for (let i3 = 0; i3 < len; i3++) {\n        const x2 = xs[i3];\n        r3[i3] = f2(x2, i3);\n      }\n      return r3;\n    };\n    const each$1 = (xs, f2) => {\n      for (let i3 = 0, len = xs.length; i3 < len; i3++) {\n        const x2 = xs[i3];\n        f2(x2, i3);\n      }\n    };\n    const foldl = (xs, f2, acc) => {\n      each$1(xs, (x2, i3) => {\n        acc = f2(acc, x2, i3);\n      });\n      return acc;\n    };\n    const flatten = (xs) => {\n      const r3 = [];\n      for (let i3 = 0, len = xs.length; i3 < len; ++i3) {\n        if (!isArray2(xs[i3])) {\n          throw new Error(\"Arr.flatten item \" + i3 + \" was not an array, input: \" + xs);\n        }\n        nativePush.apply(r3, xs[i3]);\n      }\n      return r3;\n    };\n    const bind = (xs, f2) => flatten(map2(xs, f2));\n    const findMap = (arr, f2) => {\n      for (let i3 = 0; i3 < arr.length; i3++) {\n        const r3 = f2(arr[i3], i3);\n        if (r3.isSome()) {\n          return r3;\n        }\n      }\n      return Optional.none();\n    };\n    const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists((left) => comparator(left, rhs));\n    const cat = (arr) => {\n      const r3 = [];\n      const push = (x2) => {\n        r3.push(x2);\n      };\n      for (let i3 = 0; i3 < arr.length; i3++) {\n        arr[i3].each(push);\n      }\n      return r3;\n    };\n    const someIf = (b2, a2) => b2 ? Optional.some(a2) : Optional.none();\n    const option = (name) => (editor) => editor.options.get(name);\n    const register$1 = (editor) => {\n      const registerOption = editor.options.register;\n      registerOption(\"link_assume_external_targets\", {\n        processor: (value) => {\n          const valid = isString2(value) || isBoolean2(value);\n          if (valid) {\n            if (value === true) {\n              return {\n                value: 1,\n                valid\n              };\n            } else if (value === \"http\" || value === \"https\") {\n              return {\n                value,\n                valid\n              };\n            } else {\n              return {\n                value: 0,\n                valid\n              };\n            }\n          } else {\n            return {\n              valid: false,\n              message: \"Must be a string or a boolean.\"\n            };\n          }\n        },\n        default: false\n      });\n      registerOption(\"link_context_toolbar\", {\n        processor: \"boolean\",\n        default: false\n      });\n      registerOption(\"link_list\", { processor: (value) => isString2(value) || isFunction2(value) || isArrayOf(value, isObject2) });\n      registerOption(\"link_default_target\", { processor: \"string\" });\n      registerOption(\"link_default_protocol\", {\n        processor: \"string\",\n        default: \"https\"\n      });\n      registerOption(\"link_target_list\", {\n        processor: (value) => isBoolean2(value) || isArrayOf(value, isObject2),\n        default: true\n      });\n      registerOption(\"link_rel_list\", {\n        processor: \"object[]\",\n        default: []\n      });\n      registerOption(\"link_class_list\", {\n        processor: \"object[]\",\n        default: []\n      });\n      registerOption(\"link_title\", {\n        processor: \"boolean\",\n        default: true\n      });\n      registerOption(\"allow_unsafe_link_target\", {\n        processor: \"boolean\",\n        default: false\n      });\n      registerOption(\"link_quicklink\", {\n        processor: \"boolean\",\n        default: false\n      });\n    };\n    const assumeExternalTargets = option(\"link_assume_external_targets\");\n    const hasContextToolbar = option(\"link_context_toolbar\");\n    const getLinkList = option(\"link_list\");\n    const getDefaultLinkTarget = option(\"link_default_target\");\n    const getDefaultLinkProtocol = option(\"link_default_protocol\");\n    const getTargetList = option(\"link_target_list\");\n    const getRelList = option(\"link_rel_list\");\n    const getLinkClassList = option(\"link_class_list\");\n    const shouldShowLinkTitle = option(\"link_title\");\n    const allowUnsafeLinkTarget = option(\"allow_unsafe_link_target\");\n    const useQuickLink = option(\"link_quicklink\");\n    var global$3 = tinymce.util.Tools.resolve(\"tinymce.util.Tools\");\n    const getValue2 = (item) => isString2(item.value) ? item.value : \"\";\n    const getText = (item) => {\n      if (isString2(item.text)) {\n        return item.text;\n      } else if (isString2(item.title)) {\n        return item.title;\n      } else {\n        return \"\";\n      }\n    };\n    const sanitizeList = (list2, extractValue) => {\n      const out = [];\n      global$3.each(list2, (item) => {\n        const text2 = getText(item);\n        if (item.menu !== void 0) {\n          const items = sanitizeList(item.menu, extractValue);\n          out.push({\n            text: text2,\n            items\n          });\n        } else {\n          const value = extractValue(item);\n          out.push({\n            text: text2,\n            value\n          });\n        }\n      });\n      return out;\n    };\n    const sanitizeWith = (extracter = getValue2) => (list2) => Optional.from(list2).map((list3) => sanitizeList(list3, extracter));\n    const sanitize2 = (list2) => sanitizeWith(getValue2)(list2);\n    const createUi = (name, label) => (items) => ({\n      name,\n      type: \"listbox\",\n      label,\n      items\n    });\n    const ListOptions = {\n      sanitize: sanitize2,\n      sanitizeWith,\n      createUi,\n      getValue: getValue2\n    };\n    const keys2 = Object.keys;\n    const hasOwnProperty2 = Object.hasOwnProperty;\n    const each = (obj, f2) => {\n      const props = keys2(obj);\n      for (let k3 = 0, len = props.length; k3 < len; k3++) {\n        const i3 = props[k3];\n        const x2 = obj[i3];\n        f2(x2, i3);\n      }\n    };\n    const objAcc = (r3) => (x2, i3) => {\n      r3[i3] = x2;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      const r3 = {};\n      each(obj, (x2, i3) => {\n        (pred(x2, i3) ? onTrue : onFalse)(x2, i3);\n      });\n      return r3;\n    };\n    const filter = (obj, pred) => {\n      const t2 = {};\n      internalFilter(obj, pred, objAcc(t2), noop);\n      return t2;\n    };\n    const has2 = (obj, key) => hasOwnProperty2.call(obj, key);\n    const hasNonNullableKey = (obj, key) => has2(obj, key) && obj[key] !== void 0 && obj[key] !== null;\n    var global$2 = tinymce.util.Tools.resolve(\"tinymce.dom.TreeWalker\");\n    var global$1 = tinymce.util.Tools.resolve(\"tinymce.util.URI\");\n    const isAnchor = (elm) => elm && elm.nodeName.toLowerCase() === \"a\";\n    const isLink = (elm) => isAnchor(elm) && !!getHref(elm);\n    const collectNodesInRange = (rng, predicate) => {\n      if (rng.collapsed) {\n        return [];\n      } else {\n        const contents = rng.cloneContents();\n        const walker = new global$2(contents.firstChild, contents);\n        const elements = [];\n        let current = contents.firstChild;\n        do {\n          if (predicate(current)) {\n            elements.push(current);\n          }\n        } while (current = walker.next());\n        return elements;\n      }\n    };\n    const hasProtocol = (url2) => /^\\w+:/i.test(url2);\n    const getHref = (elm) => {\n      const href = elm.getAttribute(\"data-mce-href\");\n      return href ? href : elm.getAttribute(\"href\");\n    };\n    const applyRelTargetRules = (rel, isUnsafe) => {\n      const rules = [\"noopener\"];\n      const rels = rel ? rel.split(/\\s+/) : [];\n      const toString = (rels2) => global$3.trim(rels2.sort().join(\" \"));\n      const addTargetRules = (rels2) => {\n        rels2 = removeTargetRules(rels2);\n        return rels2.length > 0 ? rels2.concat(rules) : rules;\n      };\n      const removeTargetRules = (rels2) => rels2.filter((val) => global$3.inArray(rules, val) === -1);\n      const newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels);\n      return newRels.length > 0 ? toString(newRels) : \"\";\n    };\n    const trimCaretContainers = (text2) => text2.replace(/\\uFEFF/g, \"\");\n    const getAnchorElement = (editor, selectedElm) => {\n      selectedElm = selectedElm || editor.selection.getNode();\n      if (isImageFigure(selectedElm)) {\n        return editor.dom.select(\"a[href]\", selectedElm)[0];\n      } else {\n        return editor.dom.getParent(selectedElm, \"a[href]\");\n      }\n    };\n    const getAnchorText = (selection, anchorElm) => {\n      const text2 = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: \"text\" });\n      return trimCaretContainers(text2);\n    };\n    const hasLinks = (elements) => global$3.grep(elements, isLink).length > 0;\n    const hasLinksInSelection = (rng) => collectNodesInRange(rng, isLink).length > 0;\n    const isOnlyTextSelected = (editor) => {\n      const inlineTextElements = editor.schema.getTextInlineElements();\n      const isElement = (elm) => elm.nodeType === 1 && !isAnchor(elm) && !has2(inlineTextElements, elm.nodeName.toLowerCase());\n      const elements = collectNodesInRange(editor.selection.getRng(), isElement);\n      return elements.length === 0;\n    };\n    const isImageFigure = (elm) => elm && elm.nodeName === \"FIGURE\" && /\\bimage\\b/i.test(elm.className);\n    const getLinkAttrs = (data) => {\n      const attrs = [\n        \"title\",\n        \"rel\",\n        \"class\",\n        \"target\"\n      ];\n      return foldl(attrs, (acc, key) => {\n        data[key].each((value) => {\n          acc[key] = value.length > 0 ? value : null;\n        });\n        return acc;\n      }, { href: data.href });\n    };\n    const handleExternalTargets = (href, assumeExternalTargets2) => {\n      if ((assumeExternalTargets2 === \"http\" || assumeExternalTargets2 === \"https\") && !hasProtocol(href)) {\n        return assumeExternalTargets2 + \"://\" + href;\n      }\n      return href;\n    };\n    const applyLinkOverrides = (editor, linkAttrs) => {\n      const newLinkAttrs = { ...linkAttrs };\n      if (getRelList(editor).length === 0 && !allowUnsafeLinkTarget(editor)) {\n        const newRel = applyRelTargetRules(newLinkAttrs.rel, newLinkAttrs.target === \"_blank\");\n        newLinkAttrs.rel = newRel ? newRel : null;\n      }\n      if (Optional.from(newLinkAttrs.target).isNone() && getTargetList(editor) === false) {\n        newLinkAttrs.target = getDefaultLinkTarget(editor);\n      }\n      newLinkAttrs.href = handleExternalTargets(newLinkAttrs.href, assumeExternalTargets(editor));\n      return newLinkAttrs;\n    };\n    const updateLink = (editor, anchorElm, text2, linkAttrs) => {\n      text2.each((text3) => {\n        if (has2(anchorElm, \"innerText\")) {\n          anchorElm.innerText = text3;\n        } else {\n          anchorElm.textContent = text3;\n        }\n      });\n      editor.dom.setAttribs(anchorElm, linkAttrs);\n      editor.selection.select(anchorElm);\n    };\n    const createLink = (editor, selectedElm, text2, linkAttrs) => {\n      if (isImageFigure(selectedElm)) {\n        linkImageFigure(editor, selectedElm, linkAttrs);\n      } else {\n        text2.fold(() => {\n          editor.execCommand(\"mceInsertLink\", false, linkAttrs);\n        }, (text3) => {\n          editor.insertContent(editor.dom.createHTML(\"a\", linkAttrs, editor.dom.encode(text3)));\n        });\n      }\n    };\n    const linkDomMutation = (editor, attachState, data) => {\n      const selectedElm = editor.selection.getNode();\n      const anchorElm = getAnchorElement(editor, selectedElm);\n      const linkAttrs = applyLinkOverrides(editor, getLinkAttrs(data));\n      editor.undoManager.transact(() => {\n        if (data.href === attachState.href) {\n          attachState.attach();\n        }\n        if (anchorElm) {\n          editor.focus();\n          updateLink(editor, anchorElm, data.text, linkAttrs);\n        } else {\n          createLink(editor, selectedElm, data.text, linkAttrs);\n        }\n      });\n    };\n    const unlinkSelection = (editor) => {\n      const dom2 = editor.dom, selection = editor.selection;\n      const bookmark = selection.getBookmark();\n      const rng = selection.getRng().cloneRange();\n      const startAnchorElm = dom2.getParent(rng.startContainer, \"a[href]\", editor.getBody());\n      const endAnchorElm = dom2.getParent(rng.endContainer, \"a[href]\", editor.getBody());\n      if (startAnchorElm) {\n        rng.setStartBefore(startAnchorElm);\n      }\n      if (endAnchorElm) {\n        rng.setEndAfter(endAnchorElm);\n      }\n      selection.setRng(rng);\n      editor.execCommand(\"unlink\");\n      selection.moveToBookmark(bookmark);\n    };\n    const unlinkDomMutation = (editor) => {\n      editor.undoManager.transact(() => {\n        const node = editor.selection.getNode();\n        if (isImageFigure(node)) {\n          unlinkImageFigure(editor, node);\n        } else {\n          unlinkSelection(editor);\n        }\n        editor.focus();\n      });\n    };\n    const unwrapOptions = (data) => {\n      const {\n        class: cls,\n        href,\n        rel,\n        target,\n        text: text2,\n        title\n      } = data;\n      return filter({\n        class: cls.getOrNull(),\n        href,\n        rel: rel.getOrNull(),\n        target: target.getOrNull(),\n        text: text2.getOrNull(),\n        title: title.getOrNull()\n      }, (v2, _k) => isNull(v2) === false);\n    };\n    const sanitizeData = (editor, data) => {\n      const getOption = editor.options.get;\n      const uriOptions = {\n        allow_html_data_urls: getOption(\"allow_html_data_urls\"),\n        allow_script_urls: getOption(\"allow_script_urls\"),\n        allow_svg_data_urls: getOption(\"allow_svg_data_urls\")\n      };\n      const href = data.href;\n      return {\n        ...data,\n        href: global$1.isDomSafe(href, \"a\", uriOptions) ? href : \"\"\n      };\n    };\n    const link2 = (editor, attachState, data) => {\n      const sanitizedData = sanitizeData(editor, data);\n      editor.hasPlugin(\"rtc\", true) ? editor.execCommand(\"createlink\", false, unwrapOptions(sanitizedData)) : linkDomMutation(editor, attachState, sanitizedData);\n    };\n    const unlink = (editor) => {\n      editor.hasPlugin(\"rtc\", true) ? editor.execCommand(\"unlink\") : unlinkDomMutation(editor);\n    };\n    const unlinkImageFigure = (editor, fig) => {\n      const img = editor.dom.select(\"img\", fig)[0];\n      if (img) {\n        const a2 = editor.dom.getParents(img, \"a[href]\", fig)[0];\n        if (a2) {\n          a2.parentNode.insertBefore(img, a2);\n          editor.dom.remove(a2);\n        }\n      }\n    };\n    const linkImageFigure = (editor, fig, attrs) => {\n      const img = editor.dom.select(\"img\", fig)[0];\n      if (img) {\n        const a2 = editor.dom.create(\"a\", attrs);\n        img.parentNode.insertBefore(a2, img);\n        a2.appendChild(img);\n      }\n    };\n    const isListGroup = (item) => hasNonNullableKey(item, \"items\");\n    const findTextByValue = (value, catalog) => findMap(catalog, (item) => {\n      if (isListGroup(item)) {\n        return findTextByValue(value, item.items);\n      } else {\n        return someIf(item.value === value, item);\n      }\n    });\n    const getDelta = (persistentText, fieldName, catalog, data) => {\n      const value = data[fieldName];\n      const hasPersistentText = persistentText.length > 0;\n      return value !== void 0 ? findTextByValue(value, catalog).map((i3) => ({\n        url: {\n          value: i3.value,\n          meta: {\n            text: hasPersistentText ? persistentText : i3.text,\n            attach: noop\n          }\n        },\n        text: hasPersistentText ? persistentText : i3.text\n      })) : Optional.none();\n    };\n    const findCatalog = (catalogs, fieldName) => {\n      if (fieldName === \"link\") {\n        return catalogs.link;\n      } else if (fieldName === \"anchor\") {\n        return catalogs.anchor;\n      } else {\n        return Optional.none();\n      }\n    };\n    const init = (initialData, linkCatalog) => {\n      const persistentData = {\n        text: initialData.text,\n        title: initialData.title\n      };\n      const getTitleFromUrlChange = (url2) => someIf(persistentData.title.length <= 0, Optional.from(url2.meta.title).getOr(\"\"));\n      const getTextFromUrlChange = (url2) => someIf(persistentData.text.length <= 0, Optional.from(url2.meta.text).getOr(url2.value));\n      const onUrlChange = (data) => {\n        const text2 = getTextFromUrlChange(data.url);\n        const title = getTitleFromUrlChange(data.url);\n        if (text2.isSome() || title.isSome()) {\n          return Optional.some({\n            ...text2.map((text3) => ({ text: text3 })).getOr({}),\n            ...title.map((title2) => ({ title: title2 })).getOr({})\n          });\n        } else {\n          return Optional.none();\n        }\n      };\n      const onCatalogChange = (data, change) => {\n        const catalog = findCatalog(linkCatalog, change.name).getOr([]);\n        return getDelta(persistentData.text, change.name, catalog, data);\n      };\n      const onChange = (getData, change) => {\n        const name = change.name;\n        if (name === \"url\") {\n          return onUrlChange(getData());\n        } else if (contains2([\n          \"anchor\",\n          \"link\"\n        ], name)) {\n          return onCatalogChange(getData(), change);\n        } else if (name === \"text\" || name === \"title\") {\n          persistentData[name] = getData()[name];\n          return Optional.none();\n        } else {\n          return Optional.none();\n        }\n      };\n      return { onChange };\n    };\n    const DialogChanges = {\n      init,\n      getDelta\n    };\n    var global2 = tinymce.util.Tools.resolve(\"tinymce.util.Delay\");\n    const delayedConfirm = (editor, message, callback) => {\n      const rng = editor.selection.getRng();\n      global2.setEditorTimeout(editor, () => {\n        editor.windowManager.confirm(message, (state) => {\n          editor.selection.setRng(rng);\n          callback(state);\n        });\n      });\n    };\n    const tryEmailTransform = (data) => {\n      const url2 = data.href;\n      const suggestMailTo = url2.indexOf(\"@\") > 0 && url2.indexOf(\"/\") === -1 && url2.indexOf(\"mailto:\") === -1;\n      return suggestMailTo ? Optional.some({\n        message: \"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\",\n        preprocess: (oldData) => ({\n          ...oldData,\n          href: \"mailto:\" + url2\n        })\n      }) : Optional.none();\n    };\n    const tryProtocolTransform = (assumeExternalTargets2, defaultLinkProtocol) => (data) => {\n      const url2 = data.href;\n      const suggestProtocol = assumeExternalTargets2 === 1 && !hasProtocol(url2) || assumeExternalTargets2 === 0 && /^\\s*www(\\.|\\d\\.)/i.test(url2);\n      return suggestProtocol ? Optional.some({\n        message: `The URL you entered seems to be an external link. Do you want to add the required ${defaultLinkProtocol}:// prefix?`,\n        preprocess: (oldData) => ({\n          ...oldData,\n          href: defaultLinkProtocol + \"://\" + url2\n        })\n      }) : Optional.none();\n    };\n    const preprocess = (editor, data) => findMap([\n      tryEmailTransform,\n      tryProtocolTransform(assumeExternalTargets(editor), getDefaultLinkProtocol(editor))\n    ], (f2) => f2(data)).fold(() => Promise.resolve(data), (transform) => new Promise((callback) => {\n      delayedConfirm(editor, transform.message, (state) => {\n        callback(state ? transform.preprocess(data) : data);\n      });\n    }));\n    const DialogConfirms = { preprocess };\n    const getAnchors = (editor) => {\n      const anchorNodes = editor.dom.select(\"a:not([href])\");\n      const anchors = bind(anchorNodes, (anchor) => {\n        const id = anchor.name || anchor.id;\n        return id ? [{\n          text: id,\n          value: \"#\" + id\n        }] : [];\n      });\n      return anchors.length > 0 ? Optional.some([{\n        text: \"None\",\n        value: \"\"\n      }].concat(anchors)) : Optional.none();\n    };\n    const AnchorListOptions = { getAnchors };\n    const getClasses = (editor) => {\n      const list2 = getLinkClassList(editor);\n      if (list2.length > 0) {\n        return ListOptions.sanitize(list2);\n      }\n      return Optional.none();\n    };\n    const ClassListOptions = { getClasses };\n    const parseJson = (text2) => {\n      try {\n        return Optional.some(JSON.parse(text2));\n      } catch (err) {\n        return Optional.none();\n      }\n    };\n    const getLinks = (editor) => {\n      const extractor = (item) => editor.convertURL(item.value || item.url, \"href\");\n      const linkList = getLinkList(editor);\n      return new Promise((resolve) => {\n        if (isString2(linkList)) {\n          fetch(linkList).then((res) => res.ok ? res.text().then(parseJson) : Promise.reject()).then(resolve, () => resolve(Optional.none()));\n        } else if (isFunction2(linkList)) {\n          linkList((output) => resolve(Optional.some(output)));\n        } else {\n          resolve(Optional.from(linkList));\n        }\n      }).then((optItems) => optItems.bind(ListOptions.sanitizeWith(extractor)).map((items) => {\n        if (items.length > 0) {\n          const noneItem = [{\n            text: \"None\",\n            value: \"\"\n          }];\n          return noneItem.concat(items);\n        } else {\n          return items;\n        }\n      }));\n    };\n    const LinkListOptions = { getLinks };\n    const getRels = (editor, initialTarget) => {\n      const list2 = getRelList(editor);\n      if (list2.length > 0) {\n        const isTargetBlank = is(initialTarget, \"_blank\");\n        const enforceSafe = allowUnsafeLinkTarget(editor) === false;\n        const safeRelExtractor = (item) => applyRelTargetRules(ListOptions.getValue(item), isTargetBlank);\n        const sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize;\n        return sanitizer(list2);\n      }\n      return Optional.none();\n    };\n    const RelOptions = { getRels };\n    const fallbacks = [\n      {\n        text: \"Current window\",\n        value: \"\"\n      },\n      {\n        text: \"New window\",\n        value: \"_blank\"\n      }\n    ];\n    const getTargets = (editor) => {\n      const list2 = getTargetList(editor);\n      if (isArray2(list2)) {\n        return ListOptions.sanitize(list2).orThunk(() => Optional.some(fallbacks));\n      } else if (list2 === false) {\n        return Optional.none();\n      }\n      return Optional.some(fallbacks);\n    };\n    const TargetOptions = { getTargets };\n    const nonEmptyAttr = (dom2, elem, name) => {\n      const val = dom2.getAttrib(elem, name);\n      return val !== null && val.length > 0 ? Optional.some(val) : Optional.none();\n    };\n    const extractFromAnchor = (editor, anchor) => {\n      const dom2 = editor.dom;\n      const onlyText = isOnlyTextSelected(editor);\n      const text2 = onlyText ? Optional.some(getAnchorText(editor.selection, anchor)) : Optional.none();\n      const url2 = anchor ? Optional.some(dom2.getAttrib(anchor, \"href\")) : Optional.none();\n      const target = anchor ? Optional.from(dom2.getAttrib(anchor, \"target\")) : Optional.none();\n      const rel = nonEmptyAttr(dom2, anchor, \"rel\");\n      const linkClass = nonEmptyAttr(dom2, anchor, \"class\");\n      const title = nonEmptyAttr(dom2, anchor, \"title\");\n      return {\n        url: url2,\n        text: text2,\n        title,\n        target,\n        rel,\n        linkClass\n      };\n    };\n    const collect = (editor, linkNode) => LinkListOptions.getLinks(editor).then((links) => {\n      const anchor = extractFromAnchor(editor, linkNode);\n      return {\n        anchor,\n        catalogs: {\n          targets: TargetOptions.getTargets(editor),\n          rels: RelOptions.getRels(editor, anchor.target),\n          classes: ClassListOptions.getClasses(editor),\n          anchor: AnchorListOptions.getAnchors(editor),\n          link: links\n        },\n        optNode: Optional.from(linkNode),\n        flags: { titleEnabled: shouldShowLinkTitle(editor) }\n      };\n    });\n    const DialogInfo = { collect };\n    const handleSubmit = (editor, info) => (api) => {\n      const data = api.getData();\n      if (!data.url.value) {\n        unlink(editor);\n        api.close();\n        return;\n      }\n      const getChangedValue = (key) => Optional.from(data[key]).filter((value) => !is(info.anchor[key], value));\n      const changedData = {\n        href: data.url.value,\n        text: getChangedValue(\"text\"),\n        target: getChangedValue(\"target\"),\n        rel: getChangedValue(\"rel\"),\n        class: getChangedValue(\"linkClass\"),\n        title: getChangedValue(\"title\")\n      };\n      const attachState = {\n        href: data.url.value,\n        attach: data.url.meta !== void 0 && data.url.meta.attach ? data.url.meta.attach : noop\n      };\n      DialogConfirms.preprocess(editor, changedData).then((pData) => {\n        link2(editor, attachState, pData);\n      });\n      api.close();\n    };\n    const collectData = (editor) => {\n      const anchorNode = getAnchorElement(editor);\n      return DialogInfo.collect(editor, anchorNode);\n    };\n    const getInitialData = (info, defaultTarget) => {\n      const anchor = info.anchor;\n      const url2 = anchor.url.getOr(\"\");\n      return {\n        url: {\n          value: url2,\n          meta: { original: { value: url2 } }\n        },\n        text: anchor.text.getOr(\"\"),\n        title: anchor.title.getOr(\"\"),\n        anchor: url2,\n        link: url2,\n        rel: anchor.rel.getOr(\"\"),\n        target: anchor.target.or(defaultTarget).getOr(\"\"),\n        linkClass: anchor.linkClass.getOr(\"\")\n      };\n    };\n    const makeDialog = (settings, onSubmit, editor) => {\n      const urlInput = [{\n        name: \"url\",\n        type: \"urlinput\",\n        filetype: \"file\",\n        label: \"URL\"\n      }];\n      const displayText = settings.anchor.text.map(() => ({\n        name: \"text\",\n        type: \"input\",\n        label: \"Text to display\"\n      })).toArray();\n      const titleText = settings.flags.titleEnabled ? [{\n        name: \"title\",\n        type: \"input\",\n        label: \"Title\"\n      }] : [];\n      const defaultTarget = Optional.from(getDefaultLinkTarget(editor));\n      const initialData = getInitialData(settings, defaultTarget);\n      const catalogs = settings.catalogs;\n      const dialogDelta = DialogChanges.init(initialData, catalogs);\n      const body = {\n        type: \"panel\",\n        items: flatten([\n          urlInput,\n          displayText,\n          titleText,\n          cat([\n            catalogs.anchor.map(ListOptions.createUi(\"anchor\", \"Anchors\")),\n            catalogs.rels.map(ListOptions.createUi(\"rel\", \"Rel\")),\n            catalogs.targets.map(ListOptions.createUi(\"target\", \"Open link in...\")),\n            catalogs.link.map(ListOptions.createUi(\"link\", \"Link list\")),\n            catalogs.classes.map(ListOptions.createUi(\"linkClass\", \"Class\"))\n          ])\n        ])\n      };\n      return {\n        title: \"Insert/Edit Link\",\n        size: \"normal\",\n        body,\n        buttons: [\n          {\n            type: \"cancel\",\n            name: \"cancel\",\n            text: \"Cancel\"\n          },\n          {\n            type: \"submit\",\n            name: \"save\",\n            text: \"Save\",\n            primary: true\n          }\n        ],\n        initialData,\n        onChange: (api, { name }) => {\n          dialogDelta.onChange(api.getData, { name }).each((newData) => {\n            api.setData(newData);\n          });\n        },\n        onSubmit\n      };\n    };\n    const open$1 = (editor) => {\n      const data = collectData(editor);\n      data.then((info) => {\n        const onSubmit = handleSubmit(editor, info);\n        return makeDialog(info, onSubmit, editor);\n      }).then((spec) => {\n        editor.windowManager.open(spec);\n      });\n    };\n    const appendClickRemove = (link3, evt) => {\n      document.body.appendChild(link3);\n      link3.dispatchEvent(evt);\n      document.body.removeChild(link3);\n    };\n    const open = (url2) => {\n      const link3 = document.createElement(\"a\");\n      link3.target = \"_blank\";\n      link3.href = url2;\n      link3.rel = \"noreferrer noopener\";\n      const evt = document.createEvent(\"MouseEvents\");\n      evt.initMouseEvent(\"click\", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n      appendClickRemove(link3, evt);\n    };\n    const getLink = (editor, elm) => editor.dom.getParent(elm, \"a[href]\");\n    const getSelectedLink = (editor) => getLink(editor, editor.selection.getStart());\n    const hasOnlyAltModifier = (e2) => {\n      return e2.altKey === true && e2.shiftKey === false && e2.ctrlKey === false && e2.metaKey === false;\n    };\n    const gotoLink = (editor, a2) => {\n      if (a2) {\n        const href = getHref(a2);\n        if (/^#/.test(href)) {\n          const targetEl = editor.dom.select(href);\n          if (targetEl.length) {\n            editor.selection.scrollIntoView(targetEl[0], true);\n          }\n        } else {\n          open(a2.href);\n        }\n      }\n    };\n    const openDialog = (editor) => () => {\n      open$1(editor);\n    };\n    const gotoSelectedLink = (editor) => () => {\n      gotoLink(editor, getSelectedLink(editor));\n    };\n    const setupGotoLinks = (editor) => {\n      editor.on(\"click\", (e2) => {\n        const link3 = getLink(editor, e2.target);\n        if (link3 && global$4.metaKeyPressed(e2)) {\n          e2.preventDefault();\n          gotoLink(editor, link3);\n        }\n      });\n      editor.on(\"keydown\", (e2) => {\n        const link3 = getSelectedLink(editor);\n        if (link3 && e2.keyCode === 13 && hasOnlyAltModifier(e2)) {\n          e2.preventDefault();\n          gotoLink(editor, link3);\n        }\n      });\n    };\n    const toggleState = (editor, toggler) => {\n      editor.on(\"NodeChange\", toggler);\n      return () => editor.off(\"NodeChange\", toggler);\n    };\n    const toggleActiveState = (editor) => (api) => {\n      const updateState = () => api.setActive(!editor.mode.isReadOnly() && getAnchorElement(editor, editor.selection.getNode()) !== null);\n      updateState();\n      return toggleState(editor, updateState);\n    };\n    const toggleEnabledState = (editor) => (api) => {\n      const updateState = () => api.setEnabled(getAnchorElement(editor, editor.selection.getNode()) !== null);\n      updateState();\n      return toggleState(editor, updateState);\n    };\n    const toggleUnlinkState = (editor) => (api) => {\n      const hasLinks$1 = (parents2) => hasLinks(parents2) || hasLinksInSelection(editor.selection.getRng());\n      const parents = editor.dom.getParents(editor.selection.getStart());\n      api.setEnabled(hasLinks$1(parents));\n      return toggleState(editor, (e2) => api.setEnabled(hasLinks$1(e2.parents)));\n    };\n    const register = (editor) => {\n      editor.addCommand(\"mceLink\", () => {\n        if (useQuickLink(editor)) {\n          editor.dispatch(\"contexttoolbar-show\", { toolbarKey: \"quicklink\" });\n        } else {\n          openDialog(editor)();\n        }\n      });\n    };\n    const setup = (editor) => {\n      editor.addShortcut(\"Meta+K\", \"\", () => {\n        editor.execCommand(\"mceLink\");\n      });\n    };\n    const setupButtons = (editor) => {\n      editor.ui.registry.addToggleButton(\"link\", {\n        icon: \"link\",\n        tooltip: \"Insert/edit link\",\n        onAction: openDialog(editor),\n        onSetup: toggleActiveState(editor)\n      });\n      editor.ui.registry.addButton(\"openlink\", {\n        icon: \"new-tab\",\n        tooltip: \"Open link\",\n        onAction: gotoSelectedLink(editor),\n        onSetup: toggleEnabledState(editor)\n      });\n      editor.ui.registry.addButton(\"unlink\", {\n        icon: \"unlink\",\n        tooltip: \"Remove link\",\n        onAction: () => unlink(editor),\n        onSetup: toggleUnlinkState(editor)\n      });\n    };\n    const setupMenuItems = (editor) => {\n      editor.ui.registry.addMenuItem(\"openlink\", {\n        text: \"Open link\",\n        icon: \"new-tab\",\n        onAction: gotoSelectedLink(editor),\n        onSetup: toggleEnabledState(editor)\n      });\n      editor.ui.registry.addMenuItem(\"link\", {\n        icon: \"link\",\n        text: \"Link...\",\n        shortcut: \"Meta+K\",\n        onAction: openDialog(editor)\n      });\n      editor.ui.registry.addMenuItem(\"unlink\", {\n        icon: \"unlink\",\n        text: \"Remove link\",\n        onAction: () => unlink(editor),\n        onSetup: toggleUnlinkState(editor)\n      });\n    };\n    const setupContextMenu = (editor) => {\n      const inLink = \"link unlink openlink\";\n      const noLink = \"link\";\n      editor.ui.registry.addContextMenu(\"link\", { update: (element) => hasLinks(editor.dom.getParents(element, \"a\")) ? inLink : noLink });\n    };\n    const setupContextToolbars = (editor) => {\n      const collapseSelectionToEnd = (editor2) => {\n        editor2.selection.collapse(false);\n      };\n      const onSetupLink = (buttonApi) => {\n        const node = editor.selection.getNode();\n        buttonApi.setEnabled(getAnchorElement(editor, node) !== null);\n        return noop;\n      };\n      const getLinkText = (value) => {\n        const anchor = getAnchorElement(editor);\n        const onlyText = isOnlyTextSelected(editor);\n        if (!anchor && onlyText) {\n          const text2 = getAnchorText(editor.selection, anchor);\n          return Optional.some(text2.length > 0 ? text2 : value);\n        } else {\n          return Optional.none();\n        }\n      };\n      editor.ui.registry.addContextForm(\"quicklink\", {\n        launch: {\n          type: \"contextformtogglebutton\",\n          icon: \"link\",\n          tooltip: \"Link\",\n          onSetup: toggleActiveState(editor)\n        },\n        label: \"Link\",\n        predicate: (node) => !!getAnchorElement(editor, node) && hasContextToolbar(editor),\n        initValue: () => {\n          const elm = getAnchorElement(editor);\n          return !!elm ? getHref(elm) : \"\";\n        },\n        commands: [\n          {\n            type: \"contextformtogglebutton\",\n            icon: \"link\",\n            tooltip: \"Link\",\n            primary: true,\n            onSetup: (buttonApi) => {\n              const node = editor.selection.getNode();\n              buttonApi.setActive(!!getAnchorElement(editor, node));\n              return toggleActiveState(editor)(buttonApi);\n            },\n            onAction: (formApi) => {\n              const value = formApi.getValue();\n              const text2 = getLinkText(value);\n              const attachState = {\n                href: value,\n                attach: noop\n              };\n              link2(editor, attachState, {\n                href: value,\n                text: text2,\n                title: Optional.none(),\n                rel: Optional.none(),\n                target: Optional.none(),\n                class: Optional.none()\n              });\n              collapseSelectionToEnd(editor);\n              formApi.hide();\n            }\n          },\n          {\n            type: \"contextformbutton\",\n            icon: \"unlink\",\n            tooltip: \"Remove link\",\n            onSetup: onSetupLink,\n            onAction: (formApi) => {\n              unlink(editor);\n              formApi.hide();\n            }\n          },\n          {\n            type: \"contextformbutton\",\n            icon: \"new-tab\",\n            tooltip: \"Open link\",\n            onSetup: onSetupLink,\n            onAction: (formApi) => {\n              gotoSelectedLink(editor)();\n              formApi.hide();\n            }\n          }\n        ]\n      });\n    };\n    var Plugin = () => {\n      global$5.add(\"link\", (editor) => {\n        register$1(editor);\n        setupButtons(editor);\n        setupMenuItems(editor);\n        setupContextMenu(editor);\n        setupContextToolbars(editor);\n        setupGotoLinks(editor);\n        register(editor);\n        setup(editor);\n      });\n    };\n    Plugin();\n  })();\n  return plugin$1;\n}\nrequirePlugin$1();\nvar plugin = {};\nvar hasRequiredPlugin;\nfunction requirePlugin() {\n  if (hasRequiredPlugin) return plugin;\n  hasRequiredPlugin = 1;\n  (function() {\n    const Cell = (initial) => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set2 = (v2) => {\n        value = v2;\n      };\n      return {\n        get,\n        set: set2\n      };\n    };\n    var global$1 = tinymce.util.Tools.resolve(\"tinymce.PluginManager\");\n    var global2 = tinymce.util.Tools.resolve(\"tinymce.Env\");\n    const fireResizeEditor = (editor) => editor.dispatch(\"ResizeEditor\");\n    const option = (name) => (editor) => editor.options.get(name);\n    const register$1 = (editor) => {\n      const registerOption = editor.options.register;\n      registerOption(\"autoresize_overflow_padding\", {\n        processor: \"number\",\n        default: 1\n      });\n      registerOption(\"autoresize_bottom_margin\", {\n        processor: \"number\",\n        default: 50\n      });\n    };\n    const getMinHeight = option(\"min_height\");\n    const getMaxHeight = option(\"max_height\");\n    const getAutoResizeOverflowPadding = option(\"autoresize_overflow_padding\");\n    const getAutoResizeBottomMargin = option(\"autoresize_bottom_margin\");\n    const isFullscreen = (editor) => editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen();\n    const toggleScrolling = (editor, state) => {\n      const body = editor.getBody();\n      if (body) {\n        body.style.overflowY = state ? \"\" : \"hidden\";\n        if (!state) {\n          body.scrollTop = 0;\n        }\n      }\n    };\n    const parseCssValueToInt = (dom2, elm, name, computed) => {\n      const value = parseInt(dom2.getStyle(elm, name, computed), 10);\n      return isNaN(value) ? 0 : value;\n    };\n    const shouldScrollIntoView = (trigger) => {\n      if ((trigger === null || trigger === void 0 ? void 0 : trigger.type.toLowerCase()) === \"setcontent\") {\n        const setContentEvent = trigger;\n        return setContentEvent.selection === true || setContentEvent.paste === true;\n      } else {\n        return false;\n      }\n    };\n    const resize = (editor, oldSize, trigger) => {\n      var _a3;\n      const dom2 = editor.dom;\n      const doc = editor.getDoc();\n      if (!doc) {\n        return;\n      }\n      if (isFullscreen(editor)) {\n        toggleScrolling(editor, true);\n        return;\n      }\n      const docEle = doc.documentElement;\n      const resizeBottomMargin = getAutoResizeBottomMargin(editor);\n      const minHeight = (_a3 = getMinHeight(editor)) !== null && _a3 !== void 0 ? _a3 : editor.getElement().offsetHeight;\n      let resizeHeight = minHeight;\n      const marginTop = parseCssValueToInt(dom2, docEle, \"margin-top\", true);\n      const marginBottom = parseCssValueToInt(dom2, docEle, \"margin-bottom\", true);\n      let contentHeight = docEle.offsetHeight + marginTop + marginBottom + resizeBottomMargin;\n      if (contentHeight < 0) {\n        contentHeight = 0;\n      }\n      const containerHeight = editor.getContainer().offsetHeight;\n      const contentAreaHeight = editor.getContentAreaContainer().offsetHeight;\n      const chromeHeight = containerHeight - contentAreaHeight;\n      if (contentHeight + chromeHeight > minHeight) {\n        resizeHeight = contentHeight + chromeHeight;\n      }\n      const maxHeight = getMaxHeight(editor);\n      if (maxHeight && resizeHeight > maxHeight) {\n        resizeHeight = maxHeight;\n        toggleScrolling(editor, true);\n      } else {\n        toggleScrolling(editor, false);\n      }\n      if (resizeHeight !== oldSize.get()) {\n        const deltaSize = resizeHeight - oldSize.get();\n        dom2.setStyle(editor.getContainer(), \"height\", resizeHeight + \"px\");\n        oldSize.set(resizeHeight);\n        fireResizeEditor(editor);\n        if (global2.browser.isSafari() && (global2.os.isMacOS() || global2.os.isiOS())) {\n          const win = editor.getWin();\n          win.scrollTo(win.pageXOffset, win.pageYOffset);\n        }\n        if (editor.hasFocus() && shouldScrollIntoView(trigger)) {\n          editor.selection.scrollIntoView();\n        }\n        if ((global2.browser.isSafari() || global2.browser.isChromium()) && deltaSize < 0) {\n          resize(editor, oldSize, trigger);\n        }\n      }\n    };\n    const setup = (editor, oldSize) => {\n      editor.on(\"init\", () => {\n        const overflowPadding = getAutoResizeOverflowPadding(editor);\n        const dom2 = editor.dom;\n        dom2.setStyles(editor.getDoc().documentElement, { height: \"auto\" });\n        dom2.setStyles(editor.getBody(), {\n          \"paddingLeft\": overflowPadding,\n          \"paddingRight\": overflowPadding,\n          \"min-height\": 0\n        });\n      });\n      editor.on(\"NodeChange SetContent keyup FullscreenStateChanged ResizeContent\", (e2) => {\n        resize(editor, oldSize, e2);\n      });\n    };\n    const register = (editor, oldSize) => {\n      editor.addCommand(\"mceAutoResize\", () => {\n        resize(editor, oldSize);\n      });\n    };\n    var Plugin = () => {\n      global$1.add(\"autoresize\", (editor) => {\n        register$1(editor);\n        if (!editor.options.isSet(\"resize\")) {\n          editor.options.set(\"resize\", false);\n        }\n        if (!editor.inline) {\n          const oldSize = Cell(0);\n          register(editor, oldSize);\n          setup(editor, oldSize);\n        }\n      });\n    };\n    Plugin();\n  })();\n  return plugin;\n}\nrequirePlugin();\nvar showdown$2 = { exports: {} };\nvar showdown$1 = showdown$2.exports;\nvar hasRequiredShowdown;\nfunction requireShowdown() {\n  if (hasRequiredShowdown) return showdown$2.exports;\n  hasRequiredShowdown = 1;\n  (function(module2) {\n    (function() {\n      function getDefaultOpts(simple) {\n        var defaultOptions2 = {\n          omitExtraWLInCodeBlocks: {\n            defaultValue: false,\n            describe: \"Omit the default extra whiteline added to code blocks\",\n            type: \"boolean\"\n          },\n          noHeaderId: {\n            defaultValue: false,\n            describe: \"Turn on/off generated header id\",\n            type: \"boolean\"\n          },\n          prefixHeaderId: {\n            defaultValue: false,\n            describe: \"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix\",\n            type: \"string\"\n          },\n          rawPrefixHeaderId: {\n            defaultValue: false,\n            describe: 'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the \" char is used in the prefix)',\n            type: \"boolean\"\n          },\n          ghCompatibleHeaderId: {\n            defaultValue: false,\n            describe: \"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)\",\n            type: \"boolean\"\n          },\n          rawHeaderId: {\n            defaultValue: false,\n            describe: `Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids`,\n            type: \"boolean\"\n          },\n          headerLevelStart: {\n            defaultValue: false,\n            describe: \"The header blocks level start\",\n            type: \"integer\"\n          },\n          parseImgDimensions: {\n            defaultValue: false,\n            describe: \"Turn on/off image dimension parsing\",\n            type: \"boolean\"\n          },\n          simplifiedAutoLink: {\n            defaultValue: false,\n            describe: \"Turn on/off GFM autolink style\",\n            type: \"boolean\"\n          },\n          excludeTrailingPunctuationFromURLs: {\n            defaultValue: false,\n            describe: \"Excludes trailing punctuation from links generated with autoLinking\",\n            type: \"boolean\"\n          },\n          literalMidWordUnderscores: {\n            defaultValue: false,\n            describe: \"Parse midword underscores as literal underscores\",\n            type: \"boolean\"\n          },\n          literalMidWordAsterisks: {\n            defaultValue: false,\n            describe: \"Parse midword asterisks as literal asterisks\",\n            type: \"boolean\"\n          },\n          strikethrough: {\n            defaultValue: false,\n            describe: \"Turn on/off strikethrough support\",\n            type: \"boolean\"\n          },\n          tables: {\n            defaultValue: false,\n            describe: \"Turn on/off tables support\",\n            type: \"boolean\"\n          },\n          tablesHeaderId: {\n            defaultValue: false,\n            describe: \"Add an id to table headers\",\n            type: \"boolean\"\n          },\n          ghCodeBlocks: {\n            defaultValue: true,\n            describe: \"Turn on/off GFM fenced code blocks support\",\n            type: \"boolean\"\n          },\n          tasklists: {\n            defaultValue: false,\n            describe: \"Turn on/off GFM tasklist support\",\n            type: \"boolean\"\n          },\n          smoothLivePreview: {\n            defaultValue: false,\n            describe: \"Prevents weird effects in live previews due to incomplete input\",\n            type: \"boolean\"\n          },\n          smartIndentationFix: {\n            defaultValue: false,\n            describe: \"Tries to smartly fix indentation in es6 strings\",\n            type: \"boolean\"\n          },\n          disableForced4SpacesIndentedSublists: {\n            defaultValue: false,\n            describe: \"Disables the requirement of indenting nested sublists by 4 spaces\",\n            type: \"boolean\"\n          },\n          simpleLineBreaks: {\n            defaultValue: false,\n            describe: \"Parses simple line breaks as <br> (GFM Style)\",\n            type: \"boolean\"\n          },\n          requireSpaceBeforeHeadingText: {\n            defaultValue: false,\n            describe: \"Makes adding a space between `#` and the header text mandatory (GFM Style)\",\n            type: \"boolean\"\n          },\n          ghMentions: {\n            defaultValue: false,\n            describe: \"Enables github @mentions\",\n            type: \"boolean\"\n          },\n          ghMentionsLink: {\n            defaultValue: \"https://github.com/{u}\",\n            describe: \"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.\",\n            type: \"string\"\n          },\n          encodeEmails: {\n            defaultValue: true,\n            describe: \"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities\",\n            type: \"boolean\"\n          },\n          openLinksInNewWindow: {\n            defaultValue: false,\n            describe: \"Open all links in new windows\",\n            type: \"boolean\"\n          },\n          backslashEscapesHTMLTags: {\n            defaultValue: false,\n            describe: \"Support for HTML Tag escaping. ex: <div>foo</div>\",\n            type: \"boolean\"\n          },\n          emoji: {\n            defaultValue: false,\n            describe: \"Enable emoji support. Ex: `this is a :smile: emoji`\",\n            type: \"boolean\"\n          },\n          underline: {\n            defaultValue: false,\n            describe: \"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`\",\n            type: \"boolean\"\n          },\n          ellipsis: {\n            defaultValue: true,\n            describe: \"Replaces three dots with the ellipsis unicode character\",\n            type: \"boolean\"\n          },\n          completeHTMLDocument: {\n            defaultValue: false,\n            describe: \"Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags\",\n            type: \"boolean\"\n          },\n          metadata: {\n            defaultValue: false,\n            describe: \"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).\",\n            type: \"boolean\"\n          },\n          splitAdjacentBlockquotes: {\n            defaultValue: false,\n            describe: \"Split adjacent blockquote blocks\",\n            type: \"boolean\"\n          }\n        };\n        if (simple === false) {\n          return JSON.parse(JSON.stringify(defaultOptions2));\n        }\n        var ret = {};\n        for (var opt in defaultOptions2) {\n          if (defaultOptions2.hasOwnProperty(opt)) {\n            ret[opt] = defaultOptions2[opt].defaultValue;\n          }\n        }\n        return ret;\n      }\n      function allOptionsOn() {\n        var options = getDefaultOpts(true), ret = {};\n        for (var opt in options) {\n          if (options.hasOwnProperty(opt)) {\n            ret[opt] = true;\n          }\n        }\n        return ret;\n      }\n      var showdown2 = {}, parsers = {}, extensions = {}, globalOptions = getDefaultOpts(true), setFlavor = \"vanilla\", flavor = {\n        github: {\n          omitExtraWLInCodeBlocks: true,\n          simplifiedAutoLink: true,\n          excludeTrailingPunctuationFromURLs: true,\n          literalMidWordUnderscores: true,\n          strikethrough: true,\n          tables: true,\n          tablesHeaderId: true,\n          ghCodeBlocks: true,\n          tasklists: true,\n          disableForced4SpacesIndentedSublists: true,\n          simpleLineBreaks: true,\n          requireSpaceBeforeHeadingText: true,\n          ghCompatibleHeaderId: true,\n          ghMentions: true,\n          backslashEscapesHTMLTags: true,\n          emoji: true,\n          splitAdjacentBlockquotes: true\n        },\n        original: {\n          noHeaderId: true,\n          ghCodeBlocks: false\n        },\n        ghost: {\n          omitExtraWLInCodeBlocks: true,\n          parseImgDimensions: true,\n          simplifiedAutoLink: true,\n          excludeTrailingPunctuationFromURLs: true,\n          literalMidWordUnderscores: true,\n          strikethrough: true,\n          tables: true,\n          tablesHeaderId: true,\n          ghCodeBlocks: true,\n          tasklists: true,\n          smoothLivePreview: true,\n          simpleLineBreaks: true,\n          requireSpaceBeforeHeadingText: true,\n          ghMentions: false,\n          encodeEmails: true\n        },\n        vanilla: getDefaultOpts(true),\n        allOn: allOptionsOn()\n      };\n      showdown2.helper = {};\n      showdown2.extensions = {};\n      showdown2.setOption = function(key, value) {\n        globalOptions[key] = value;\n        return this;\n      };\n      showdown2.getOption = function(key) {\n        return globalOptions[key];\n      };\n      showdown2.getOptions = function() {\n        return globalOptions;\n      };\n      showdown2.resetOptions = function() {\n        globalOptions = getDefaultOpts(true);\n      };\n      showdown2.setFlavor = function(name) {\n        if (!flavor.hasOwnProperty(name)) {\n          throw Error(name + \" flavor was not found\");\n        }\n        showdown2.resetOptions();\n        var preset = flavor[name];\n        setFlavor = name;\n        for (var option in preset) {\n          if (preset.hasOwnProperty(option)) {\n            globalOptions[option] = preset[option];\n          }\n        }\n      };\n      showdown2.getFlavor = function() {\n        return setFlavor;\n      };\n      showdown2.getFlavorOptions = function(name) {\n        if (flavor.hasOwnProperty(name)) {\n          return flavor[name];\n        }\n      };\n      showdown2.getDefaultOptions = function(simple) {\n        return getDefaultOpts(simple);\n      };\n      showdown2.subParser = function(name, func) {\n        if (showdown2.helper.isString(name)) {\n          if (typeof func !== \"undefined\") {\n            parsers[name] = func;\n          } else {\n            if (parsers.hasOwnProperty(name)) {\n              return parsers[name];\n            } else {\n              throw Error(\"SubParser named \" + name + \" not registered!\");\n            }\n          }\n        }\n      };\n      showdown2.extension = function(name, ext) {\n        if (!showdown2.helper.isString(name)) {\n          throw Error(\"Extension 'name' must be a string\");\n        }\n        name = showdown2.helper.stdExtName(name);\n        if (showdown2.helper.isUndefined(ext)) {\n          if (!extensions.hasOwnProperty(name)) {\n            throw Error(\"Extension named \" + name + \" is not registered!\");\n          }\n          return extensions[name];\n        } else {\n          if (typeof ext === \"function\") {\n            ext = ext();\n          }\n          if (!showdown2.helper.isArray(ext)) {\n            ext = [ext];\n          }\n          var validExtension = validate(ext, name);\n          if (validExtension.valid) {\n            extensions[name] = ext;\n          } else {\n            throw Error(validExtension.error);\n          }\n        }\n      };\n      showdown2.getAllExtensions = function() {\n        return extensions;\n      };\n      showdown2.removeExtension = function(name) {\n        delete extensions[name];\n      };\n      showdown2.resetExtensions = function() {\n        extensions = {};\n      };\n      function validate(extension, name) {\n        var errMsg = name ? \"Error in \" + name + \" extension->\" : \"Error in unnamed extension\", ret = {\n          valid: true,\n          error: \"\"\n        };\n        if (!showdown2.helper.isArray(extension)) {\n          extension = [extension];\n        }\n        for (var i3 = 0; i3 < extension.length; ++i3) {\n          var baseMsg = errMsg + \" sub-extension \" + i3 + \": \", ext = extension[i3];\n          if (typeof ext !== \"object\") {\n            ret.valid = false;\n            ret.error = baseMsg + \"must be an object, but \" + typeof ext + \" given\";\n            return ret;\n          }\n          if (!showdown2.helper.isString(ext.type)) {\n            ret.valid = false;\n            ret.error = baseMsg + 'property \"type\" must be a string, but ' + typeof ext.type + \" given\";\n            return ret;\n          }\n          var type = ext.type = ext.type.toLowerCase();\n          if (type === \"language\") {\n            type = ext.type = \"lang\";\n          }\n          if (type === \"html\") {\n            type = ext.type = \"output\";\n          }\n          if (type !== \"lang\" && type !== \"output\" && type !== \"listener\") {\n            ret.valid = false;\n            ret.error = baseMsg + \"type \" + type + ' is not recognized. Valid values: \"lang/language\", \"output/html\" or \"listener\"';\n            return ret;\n          }\n          if (type === \"listener\") {\n            if (showdown2.helper.isUndefined(ext.listeners)) {\n              ret.valid = false;\n              ret.error = baseMsg + '. Extensions of type \"listener\" must have a property called \"listeners\"';\n              return ret;\n            }\n          } else {\n            if (showdown2.helper.isUndefined(ext.filter) && showdown2.helper.isUndefined(ext.regex)) {\n              ret.valid = false;\n              ret.error = baseMsg + type + ' extensions must define either a \"regex\" property or a \"filter\" method';\n              return ret;\n            }\n          }\n          if (ext.listeners) {\n            if (typeof ext.listeners !== \"object\") {\n              ret.valid = false;\n              ret.error = baseMsg + '\"listeners\" property must be an object but ' + typeof ext.listeners + \" given\";\n              return ret;\n            }\n            for (var ln in ext.listeners) {\n              if (ext.listeners.hasOwnProperty(ln)) {\n                if (typeof ext.listeners[ln] !== \"function\") {\n                  ret.valid = false;\n                  ret.error = baseMsg + '\"listeners\" property must be an hash of [event name]: [callback]. listeners.' + ln + \" must be a function but \" + typeof ext.listeners[ln] + \" given\";\n                  return ret;\n                }\n              }\n            }\n          }\n          if (ext.filter) {\n            if (typeof ext.filter !== \"function\") {\n              ret.valid = false;\n              ret.error = baseMsg + '\"filter\" must be a function, but ' + typeof ext.filter + \" given\";\n              return ret;\n            }\n          } else if (ext.regex) {\n            if (showdown2.helper.isString(ext.regex)) {\n              ext.regex = new RegExp(ext.regex, \"g\");\n            }\n            if (!(ext.regex instanceof RegExp)) {\n              ret.valid = false;\n              ret.error = baseMsg + '\"regex\" property must either be a string or a RegExp object, but ' + typeof ext.regex + \" given\";\n              return ret;\n            }\n            if (showdown2.helper.isUndefined(ext.replace)) {\n              ret.valid = false;\n              ret.error = baseMsg + '\"regex\" extensions must implement a replace string or function';\n              return ret;\n            }\n          }\n        }\n        return ret;\n      }\n      showdown2.validateExtension = function(ext) {\n        var validateExtension = validate(ext, null);\n        if (!validateExtension.valid) {\n          console.warn(validateExtension.error);\n          return false;\n        }\n        return true;\n      };\n      if (!showdown2.hasOwnProperty(\"helper\")) {\n        showdown2.helper = {};\n      }\n      showdown2.helper.isString = function(a2) {\n        return typeof a2 === \"string\" || a2 instanceof String;\n      };\n      showdown2.helper.isFunction = function(a2) {\n        var getType = {};\n        return a2 && getType.toString.call(a2) === \"[object Function]\";\n      };\n      showdown2.helper.isArray = function(a2) {\n        return Array.isArray(a2);\n      };\n      showdown2.helper.isUndefined = function(value) {\n        return typeof value === \"undefined\";\n      };\n      showdown2.helper.forEach = function(obj, callback) {\n        if (showdown2.helper.isUndefined(obj)) {\n          throw new Error(\"obj param is required\");\n        }\n        if (showdown2.helper.isUndefined(callback)) {\n          throw new Error(\"callback param is required\");\n        }\n        if (!showdown2.helper.isFunction(callback)) {\n          throw new Error(\"callback param must be a function/closure\");\n        }\n        if (typeof obj.forEach === \"function\") {\n          obj.forEach(callback);\n        } else if (showdown2.helper.isArray(obj)) {\n          for (var i3 = 0; i3 < obj.length; i3++) {\n            callback(obj[i3], i3, obj);\n          }\n        } else if (typeof obj === \"object\") {\n          for (var prop in obj) {\n            if (obj.hasOwnProperty(prop)) {\n              callback(obj[prop], prop, obj);\n            }\n          }\n        } else {\n          throw new Error(\"obj does not seem to be an array or an iterable object\");\n        }\n      };\n      showdown2.helper.stdExtName = function(s2) {\n        return s2.replace(/[_?*+\\/\\\\.^-]/g, \"\").replace(/\\s/g, \"\").toLowerCase();\n      };\n      function escapeCharactersCallback(wholeMatch, m1) {\n        var charCodeToEscape = m1.charCodeAt(0);\n        return \"¨E\" + charCodeToEscape + \"E\";\n      }\n      showdown2.helper.escapeCharactersCallback = escapeCharactersCallback;\n      showdown2.helper.escapeCharacters = function(text2, charsToEscape, afterBackslash) {\n        var regexString = \"([\" + charsToEscape.replace(/([\\[\\]\\\\])/g, \"\\\\$1\") + \"])\";\n        if (afterBackslash) {\n          regexString = \"\\\\\\\\\" + regexString;\n        }\n        var regex2 = new RegExp(regexString, \"g\");\n        text2 = text2.replace(regex2, escapeCharactersCallback);\n        return text2;\n      };\n      showdown2.helper.unescapeHTMLEntities = function(txt) {\n        return txt.replace(/&quot;/g, '\"').replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&amp;/g, \"&\");\n      };\n      var rgxFindMatchPos = function(str, left, right, flags) {\n        var f2 = flags || \"\", g2 = f2.indexOf(\"g\") > -1, x2 = new RegExp(left + \"|\" + right, \"g\" + f2.replace(/g/g, \"\")), l2 = new RegExp(left, f2.replace(/g/g, \"\")), pos = [], t2, s2, m2, start, end;\n        do {\n          t2 = 0;\n          while (m2 = x2.exec(str)) {\n            if (l2.test(m2[0])) {\n              if (!t2++) {\n                s2 = x2.lastIndex;\n                start = s2 - m2[0].length;\n              }\n            } else if (t2) {\n              if (!--t2) {\n                end = m2.index + m2[0].length;\n                var obj = {\n                  left: { start, end: s2 },\n                  match: { start: s2, end: m2.index },\n                  right: { start: m2.index, end },\n                  wholeMatch: { start, end }\n                };\n                pos.push(obj);\n                if (!g2) {\n                  return pos;\n                }\n              }\n            }\n          }\n        } while (t2 && (x2.lastIndex = s2));\n        return pos;\n      };\n      showdown2.helper.matchRecursiveRegExp = function(str, left, right, flags) {\n        var matchPos = rgxFindMatchPos(str, left, right, flags), results = [];\n        for (var i3 = 0; i3 < matchPos.length; ++i3) {\n          results.push([\n            str.slice(matchPos[i3].wholeMatch.start, matchPos[i3].wholeMatch.end),\n            str.slice(matchPos[i3].match.start, matchPos[i3].match.end),\n            str.slice(matchPos[i3].left.start, matchPos[i3].left.end),\n            str.slice(matchPos[i3].right.start, matchPos[i3].right.end)\n          ]);\n        }\n        return results;\n      };\n      showdown2.helper.replaceRecursiveRegExp = function(str, replacement, left, right, flags) {\n        if (!showdown2.helper.isFunction(replacement)) {\n          var repStr = replacement;\n          replacement = function() {\n            return repStr;\n          };\n        }\n        var matchPos = rgxFindMatchPos(str, left, right, flags), finalStr = str, lng = matchPos.length;\n        if (lng > 0) {\n          var bits = [];\n          if (matchPos[0].wholeMatch.start !== 0) {\n            bits.push(str.slice(0, matchPos[0].wholeMatch.start));\n          }\n          for (var i3 = 0; i3 < lng; ++i3) {\n            bits.push(\n              replacement(\n                str.slice(matchPos[i3].wholeMatch.start, matchPos[i3].wholeMatch.end),\n                str.slice(matchPos[i3].match.start, matchPos[i3].match.end),\n                str.slice(matchPos[i3].left.start, matchPos[i3].left.end),\n                str.slice(matchPos[i3].right.start, matchPos[i3].right.end)\n              )\n            );\n            if (i3 < lng - 1) {\n              bits.push(str.slice(matchPos[i3].wholeMatch.end, matchPos[i3 + 1].wholeMatch.start));\n            }\n          }\n          if (matchPos[lng - 1].wholeMatch.end < str.length) {\n            bits.push(str.slice(matchPos[lng - 1].wholeMatch.end));\n          }\n          finalStr = bits.join(\"\");\n        }\n        return finalStr;\n      };\n      showdown2.helper.regexIndexOf = function(str, regex2, fromIndex) {\n        if (!showdown2.helper.isString(str)) {\n          throw \"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string\";\n        }\n        if (regex2 instanceof RegExp === false) {\n          throw \"InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp\";\n        }\n        var indexOf = str.substring(fromIndex || 0).search(regex2);\n        return indexOf >= 0 ? indexOf + (fromIndex || 0) : indexOf;\n      };\n      showdown2.helper.splitAtIndex = function(str, index2) {\n        if (!showdown2.helper.isString(str)) {\n          throw \"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string\";\n        }\n        return [str.substring(0, index2), str.substring(index2)];\n      };\n      showdown2.helper.encodeEmailAddress = function(mail) {\n        var encode2 = [\n          function(ch) {\n            return \"&#\" + ch.charCodeAt(0) + \";\";\n          },\n          function(ch) {\n            return \"&#x\" + ch.charCodeAt(0).toString(16) + \";\";\n          },\n          function(ch) {\n            return ch;\n          }\n        ];\n        mail = mail.replace(/./g, function(ch) {\n          if (ch === \"@\") {\n            ch = encode2[Math.floor(Math.random() * 2)](ch);\n          } else {\n            var r3 = Math.random();\n            ch = r3 > 0.9 ? encode2[2](ch) : r3 > 0.45 ? encode2[1](ch) : encode2[0](ch);\n          }\n          return ch;\n        });\n        return mail;\n      };\n      showdown2.helper.padEnd = function padEnd(str, targetLength, padString) {\n        targetLength = targetLength >> 0;\n        padString = String(padString || \" \");\n        if (str.length > targetLength) {\n          return String(str);\n        } else {\n          targetLength = targetLength - str.length;\n          if (targetLength > padString.length) {\n            padString += padString.repeat(targetLength / padString.length);\n          }\n          return String(str) + padString.slice(0, targetLength);\n        }\n      };\n      if (typeof console === \"undefined\") {\n        console = {\n          warn: function(msg) {\n            alert(msg);\n          },\n          log: function(msg) {\n            alert(msg);\n          },\n          error: function(msg) {\n            throw msg;\n          }\n        };\n      }\n      showdown2.helper.regexes = {\n        asteriskDashAndColon: /([*_:~])/g\n      };\n      showdown2.helper.emojis = {\n        \"+1\": \"👍\",\n        \"-1\": \"👎\",\n        \"100\": \"💯\",\n        \"1234\": \"🔢\",\n        \"1st_place_medal\": \"🥇\",\n        \"2nd_place_medal\": \"🥈\",\n        \"3rd_place_medal\": \"🥉\",\n        \"8ball\": \"🎱\",\n        \"a\": \"🅰️\",\n        \"ab\": \"🆎\",\n        \"abc\": \"🔤\",\n        \"abcd\": \"🔡\",\n        \"accept\": \"🉑\",\n        \"aerial_tramway\": \"🚡\",\n        \"airplane\": \"✈️\",\n        \"alarm_clock\": \"⏰\",\n        \"alembic\": \"⚗️\",\n        \"alien\": \"👽\",\n        \"ambulance\": \"🚑\",\n        \"amphora\": \"🏺\",\n        \"anchor\": \"⚓️\",\n        \"angel\": \"👼\",\n        \"anger\": \"💢\",\n        \"angry\": \"😠\",\n        \"anguished\": \"😧\",\n        \"ant\": \"🐜\",\n        \"apple\": \"🍎\",\n        \"aquarius\": \"♒️\",\n        \"aries\": \"♈️\",\n        \"arrow_backward\": \"◀️\",\n        \"arrow_double_down\": \"⏬\",\n        \"arrow_double_up\": \"⏫\",\n        \"arrow_down\": \"⬇️\",\n        \"arrow_down_small\": \"🔽\",\n        \"arrow_forward\": \"▶️\",\n        \"arrow_heading_down\": \"⤵️\",\n        \"arrow_heading_up\": \"⤴️\",\n        \"arrow_left\": \"⬅️\",\n        \"arrow_lower_left\": \"↙️\",\n        \"arrow_lower_right\": \"↘️\",\n        \"arrow_right\": \"➡️\",\n        \"arrow_right_hook\": \"↪️\",\n        \"arrow_up\": \"⬆️\",\n        \"arrow_up_down\": \"↕️\",\n        \"arrow_up_small\": \"🔼\",\n        \"arrow_upper_left\": \"↖️\",\n        \"arrow_upper_right\": \"↗️\",\n        \"arrows_clockwise\": \"🔃\",\n        \"arrows_counterclockwise\": \"🔄\",\n        \"art\": \"🎨\",\n        \"articulated_lorry\": \"🚛\",\n        \"artificial_satellite\": \"🛰\",\n        \"astonished\": \"😲\",\n        \"athletic_shoe\": \"👟\",\n        \"atm\": \"🏧\",\n        \"atom_symbol\": \"⚛️\",\n        \"avocado\": \"🥑\",\n        \"b\": \"🅱️\",\n        \"baby\": \"👶\",\n        \"baby_bottle\": \"🍼\",\n        \"baby_chick\": \"🐤\",\n        \"baby_symbol\": \"🚼\",\n        \"back\": \"🔙\",\n        \"bacon\": \"🥓\",\n        \"badminton\": \"🏸\",\n        \"baggage_claim\": \"🛄\",\n        \"baguette_bread\": \"🥖\",\n        \"balance_scale\": \"⚖️\",\n        \"balloon\": \"🎈\",\n        \"ballot_box\": \"🗳\",\n        \"ballot_box_with_check\": \"☑️\",\n        \"bamboo\": \"🎍\",\n        \"banana\": \"🍌\",\n        \"bangbang\": \"‼️\",\n        \"bank\": \"🏦\",\n        \"bar_chart\": \"📊\",\n        \"barber\": \"💈\",\n        \"baseball\": \"⚾️\",\n        \"basketball\": \"🏀\",\n        \"basketball_man\": \"⛹️\",\n        \"basketball_woman\": \"⛹️&zwj;♀️\",\n        \"bat\": \"🦇\",\n        \"bath\": \"🛀\",\n        \"bathtub\": \"🛁\",\n        \"battery\": \"🔋\",\n        \"beach_umbrella\": \"🏖\",\n        \"bear\": \"🐻\",\n        \"bed\": \"🛏\",\n        \"bee\": \"🐝\",\n        \"beer\": \"🍺\",\n        \"beers\": \"🍻\",\n        \"beetle\": \"🐞\",\n        \"beginner\": \"🔰\",\n        \"bell\": \"🔔\",\n        \"bellhop_bell\": \"🛎\",\n        \"bento\": \"🍱\",\n        \"biking_man\": \"🚴\",\n        \"bike\": \"🚲\",\n        \"biking_woman\": \"🚴&zwj;♀️\",\n        \"bikini\": \"👙\",\n        \"biohazard\": \"☣️\",\n        \"bird\": \"🐦\",\n        \"birthday\": \"🎂\",\n        \"black_circle\": \"⚫️\",\n        \"black_flag\": \"🏴\",\n        \"black_heart\": \"🖤\",\n        \"black_joker\": \"🃏\",\n        \"black_large_square\": \"⬛️\",\n        \"black_medium_small_square\": \"◾️\",\n        \"black_medium_square\": \"◼️\",\n        \"black_nib\": \"✒️\",\n        \"black_small_square\": \"▪️\",\n        \"black_square_button\": \"🔲\",\n        \"blonde_man\": \"👱\",\n        \"blonde_woman\": \"👱&zwj;♀️\",\n        \"blossom\": \"🌼\",\n        \"blowfish\": \"🐡\",\n        \"blue_book\": \"📘\",\n        \"blue_car\": \"🚙\",\n        \"blue_heart\": \"💙\",\n        \"blush\": \"😊\",\n        \"boar\": \"🐗\",\n        \"boat\": \"⛵️\",\n        \"bomb\": \"💣\",\n        \"book\": \"📖\",\n        \"bookmark\": \"🔖\",\n        \"bookmark_tabs\": \"📑\",\n        \"books\": \"📚\",\n        \"boom\": \"💥\",\n        \"boot\": \"👢\",\n        \"bouquet\": \"💐\",\n        \"bowing_man\": \"🙇\",\n        \"bow_and_arrow\": \"🏹\",\n        \"bowing_woman\": \"🙇&zwj;♀️\",\n        \"bowling\": \"🎳\",\n        \"boxing_glove\": \"🥊\",\n        \"boy\": \"👦\",\n        \"bread\": \"🍞\",\n        \"bride_with_veil\": \"👰\",\n        \"bridge_at_night\": \"🌉\",\n        \"briefcase\": \"💼\",\n        \"broken_heart\": \"💔\",\n        \"bug\": \"🐛\",\n        \"building_construction\": \"🏗\",\n        \"bulb\": \"💡\",\n        \"bullettrain_front\": \"🚅\",\n        \"bullettrain_side\": \"🚄\",\n        \"burrito\": \"🌯\",\n        \"bus\": \"🚌\",\n        \"business_suit_levitating\": \"🕴\",\n        \"busstop\": \"🚏\",\n        \"bust_in_silhouette\": \"👤\",\n        \"busts_in_silhouette\": \"👥\",\n        \"butterfly\": \"🦋\",\n        \"cactus\": \"🌵\",\n        \"cake\": \"🍰\",\n        \"calendar\": \"📆\",\n        \"call_me_hand\": \"🤙\",\n        \"calling\": \"📲\",\n        \"camel\": \"🐫\",\n        \"camera\": \"📷\",\n        \"camera_flash\": \"📸\",\n        \"camping\": \"🏕\",\n        \"cancer\": \"♋️\",\n        \"candle\": \"🕯\",\n        \"candy\": \"🍬\",\n        \"canoe\": \"🛶\",\n        \"capital_abcd\": \"🔠\",\n        \"capricorn\": \"♑️\",\n        \"car\": \"🚗\",\n        \"card_file_box\": \"🗃\",\n        \"card_index\": \"📇\",\n        \"card_index_dividers\": \"🗂\",\n        \"carousel_horse\": \"🎠\",\n        \"carrot\": \"🥕\",\n        \"cat\": \"🐱\",\n        \"cat2\": \"🐈\",\n        \"cd\": \"💿\",\n        \"chains\": \"⛓\",\n        \"champagne\": \"🍾\",\n        \"chart\": \"💹\",\n        \"chart_with_downwards_trend\": \"📉\",\n        \"chart_with_upwards_trend\": \"📈\",\n        \"checkered_flag\": \"🏁\",\n        \"cheese\": \"🧀\",\n        \"cherries\": \"🍒\",\n        \"cherry_blossom\": \"🌸\",\n        \"chestnut\": \"🌰\",\n        \"chicken\": \"🐔\",\n        \"children_crossing\": \"🚸\",\n        \"chipmunk\": \"🐿\",\n        \"chocolate_bar\": \"🍫\",\n        \"christmas_tree\": \"🎄\",\n        \"church\": \"⛪️\",\n        \"cinema\": \"🎦\",\n        \"circus_tent\": \"🎪\",\n        \"city_sunrise\": \"🌇\",\n        \"city_sunset\": \"🌆\",\n        \"cityscape\": \"🏙\",\n        \"cl\": \"🆑\",\n        \"clamp\": \"🗜\",\n        \"clap\": \"👏\",\n        \"clapper\": \"🎬\",\n        \"classical_building\": \"🏛\",\n        \"clinking_glasses\": \"🥂\",\n        \"clipboard\": \"📋\",\n        \"clock1\": \"🕐\",\n        \"clock10\": \"🕙\",\n        \"clock1030\": \"🕥\",\n        \"clock11\": \"🕚\",\n        \"clock1130\": \"🕦\",\n        \"clock12\": \"🕛\",\n        \"clock1230\": \"🕧\",\n        \"clock130\": \"🕜\",\n        \"clock2\": \"🕑\",\n        \"clock230\": \"🕝\",\n        \"clock3\": \"🕒\",\n        \"clock330\": \"🕞\",\n        \"clock4\": \"🕓\",\n        \"clock430\": \"🕟\",\n        \"clock5\": \"🕔\",\n        \"clock530\": \"🕠\",\n        \"clock6\": \"🕕\",\n        \"clock630\": \"🕡\",\n        \"clock7\": \"🕖\",\n        \"clock730\": \"🕢\",\n        \"clock8\": \"🕗\",\n        \"clock830\": \"🕣\",\n        \"clock9\": \"🕘\",\n        \"clock930\": \"🕤\",\n        \"closed_book\": \"📕\",\n        \"closed_lock_with_key\": \"🔐\",\n        \"closed_umbrella\": \"🌂\",\n        \"cloud\": \"☁️\",\n        \"cloud_with_lightning\": \"🌩\",\n        \"cloud_with_lightning_and_rain\": \"⛈\",\n        \"cloud_with_rain\": \"🌧\",\n        \"cloud_with_snow\": \"🌨\",\n        \"clown_face\": \"🤡\",\n        \"clubs\": \"♣️\",\n        \"cocktail\": \"🍸\",\n        \"coffee\": \"☕️\",\n        \"coffin\": \"⚰️\",\n        \"cold_sweat\": \"😰\",\n        \"comet\": \"☄️\",\n        \"computer\": \"💻\",\n        \"computer_mouse\": \"🖱\",\n        \"confetti_ball\": \"🎊\",\n        \"confounded\": \"😖\",\n        \"confused\": \"😕\",\n        \"congratulations\": \"㊗️\",\n        \"construction\": \"🚧\",\n        \"construction_worker_man\": \"👷\",\n        \"construction_worker_woman\": \"👷&zwj;♀️\",\n        \"control_knobs\": \"🎛\",\n        \"convenience_store\": \"🏪\",\n        \"cookie\": \"🍪\",\n        \"cool\": \"🆒\",\n        \"policeman\": \"👮\",\n        \"copyright\": \"©️\",\n        \"corn\": \"🌽\",\n        \"couch_and_lamp\": \"🛋\",\n        \"couple\": \"👫\",\n        \"couple_with_heart_woman_man\": \"💑\",\n        \"couple_with_heart_man_man\": \"👨&zwj;❤️&zwj;👨\",\n        \"couple_with_heart_woman_woman\": \"👩&zwj;❤️&zwj;👩\",\n        \"couplekiss_man_man\": \"👨&zwj;❤️&zwj;💋&zwj;👨\",\n        \"couplekiss_man_woman\": \"💏\",\n        \"couplekiss_woman_woman\": \"👩&zwj;❤️&zwj;💋&zwj;👩\",\n        \"cow\": \"🐮\",\n        \"cow2\": \"🐄\",\n        \"cowboy_hat_face\": \"🤠\",\n        \"crab\": \"🦀\",\n        \"crayon\": \"🖍\",\n        \"credit_card\": \"💳\",\n        \"crescent_moon\": \"🌙\",\n        \"cricket\": \"🏏\",\n        \"crocodile\": \"🐊\",\n        \"croissant\": \"🥐\",\n        \"crossed_fingers\": \"🤞\",\n        \"crossed_flags\": \"🎌\",\n        \"crossed_swords\": \"⚔️\",\n        \"crown\": \"👑\",\n        \"cry\": \"😢\",\n        \"crying_cat_face\": \"😿\",\n        \"crystal_ball\": \"🔮\",\n        \"cucumber\": \"🥒\",\n        \"cupid\": \"💘\",\n        \"curly_loop\": \"➰\",\n        \"currency_exchange\": \"💱\",\n        \"curry\": \"🍛\",\n        \"custard\": \"🍮\",\n        \"customs\": \"🛃\",\n        \"cyclone\": \"🌀\",\n        \"dagger\": \"🗡\",\n        \"dancer\": \"💃\",\n        \"dancing_women\": \"👯\",\n        \"dancing_men\": \"👯&zwj;♂️\",\n        \"dango\": \"🍡\",\n        \"dark_sunglasses\": \"🕶\",\n        \"dart\": \"🎯\",\n        \"dash\": \"💨\",\n        \"date\": \"📅\",\n        \"deciduous_tree\": \"🌳\",\n        \"deer\": \"🦌\",\n        \"department_store\": \"🏬\",\n        \"derelict_house\": \"🏚\",\n        \"desert\": \"🏜\",\n        \"desert_island\": \"🏝\",\n        \"desktop_computer\": \"🖥\",\n        \"male_detective\": \"🕵️\",\n        \"diamond_shape_with_a_dot_inside\": \"💠\",\n        \"diamonds\": \"♦️\",\n        \"disappointed\": \"😞\",\n        \"disappointed_relieved\": \"😥\",\n        \"dizzy\": \"💫\",\n        \"dizzy_face\": \"😵\",\n        \"do_not_litter\": \"🚯\",\n        \"dog\": \"🐶\",\n        \"dog2\": \"🐕\",\n        \"dollar\": \"💵\",\n        \"dolls\": \"🎎\",\n        \"dolphin\": \"🐬\",\n        \"door\": \"🚪\",\n        \"doughnut\": \"🍩\",\n        \"dove\": \"🕊\",\n        \"dragon\": \"🐉\",\n        \"dragon_face\": \"🐲\",\n        \"dress\": \"👗\",\n        \"dromedary_camel\": \"🐪\",\n        \"drooling_face\": \"🤤\",\n        \"droplet\": \"💧\",\n        \"drum\": \"🥁\",\n        \"duck\": \"🦆\",\n        \"dvd\": \"📀\",\n        \"e-mail\": \"📧\",\n        \"eagle\": \"🦅\",\n        \"ear\": \"👂\",\n        \"ear_of_rice\": \"🌾\",\n        \"earth_africa\": \"🌍\",\n        \"earth_americas\": \"🌎\",\n        \"earth_asia\": \"🌏\",\n        \"egg\": \"🥚\",\n        \"eggplant\": \"🍆\",\n        \"eight_pointed_black_star\": \"✴️\",\n        \"eight_spoked_asterisk\": \"✳️\",\n        \"electric_plug\": \"🔌\",\n        \"elephant\": \"🐘\",\n        \"email\": \"✉️\",\n        \"end\": \"🔚\",\n        \"envelope_with_arrow\": \"📩\",\n        \"euro\": \"💶\",\n        \"european_castle\": \"🏰\",\n        \"european_post_office\": \"🏤\",\n        \"evergreen_tree\": \"🌲\",\n        \"exclamation\": \"❗️\",\n        \"expressionless\": \"😑\",\n        \"eye\": \"👁\",\n        \"eye_speech_bubble\": \"👁&zwj;🗨\",\n        \"eyeglasses\": \"👓\",\n        \"eyes\": \"👀\",\n        \"face_with_head_bandage\": \"🤕\",\n        \"face_with_thermometer\": \"🤒\",\n        \"fist_oncoming\": \"👊\",\n        \"factory\": \"🏭\",\n        \"fallen_leaf\": \"🍂\",\n        \"family_man_woman_boy\": \"👪\",\n        \"family_man_boy\": \"👨&zwj;👦\",\n        \"family_man_boy_boy\": \"👨&zwj;👦&zwj;👦\",\n        \"family_man_girl\": \"👨&zwj;👧\",\n        \"family_man_girl_boy\": \"👨&zwj;👧&zwj;👦\",\n        \"family_man_girl_girl\": \"👨&zwj;👧&zwj;👧\",\n        \"family_man_man_boy\": \"👨&zwj;👨&zwj;👦\",\n        \"family_man_man_boy_boy\": \"👨&zwj;👨&zwj;👦&zwj;👦\",\n        \"family_man_man_girl\": \"👨&zwj;👨&zwj;👧\",\n        \"family_man_man_girl_boy\": \"👨&zwj;👨&zwj;👧&zwj;👦\",\n        \"family_man_man_girl_girl\": \"👨&zwj;👨&zwj;👧&zwj;👧\",\n        \"family_man_woman_boy_boy\": \"👨&zwj;👩&zwj;👦&zwj;👦\",\n        \"family_man_woman_girl\": \"👨&zwj;👩&zwj;👧\",\n        \"family_man_woman_girl_boy\": \"👨&zwj;👩&zwj;👧&zwj;👦\",\n        \"family_man_woman_girl_girl\": \"👨&zwj;👩&zwj;👧&zwj;👧\",\n        \"family_woman_boy\": \"👩&zwj;👦\",\n        \"family_woman_boy_boy\": \"👩&zwj;👦&zwj;👦\",\n        \"family_woman_girl\": \"👩&zwj;👧\",\n        \"family_woman_girl_boy\": \"👩&zwj;👧&zwj;👦\",\n        \"family_woman_girl_girl\": \"👩&zwj;👧&zwj;👧\",\n        \"family_woman_woman_boy\": \"👩&zwj;👩&zwj;👦\",\n        \"family_woman_woman_boy_boy\": \"👩&zwj;👩&zwj;👦&zwj;👦\",\n        \"family_woman_woman_girl\": \"👩&zwj;👩&zwj;👧\",\n        \"family_woman_woman_girl_boy\": \"👩&zwj;👩&zwj;👧&zwj;👦\",\n        \"family_woman_woman_girl_girl\": \"👩&zwj;👩&zwj;👧&zwj;👧\",\n        \"fast_forward\": \"⏩\",\n        \"fax\": \"📠\",\n        \"fearful\": \"😨\",\n        \"feet\": \"🐾\",\n        \"female_detective\": \"🕵️&zwj;♀️\",\n        \"ferris_wheel\": \"🎡\",\n        \"ferry\": \"⛴\",\n        \"field_hockey\": \"🏑\",\n        \"file_cabinet\": \"🗄\",\n        \"file_folder\": \"📁\",\n        \"film_projector\": \"📽\",\n        \"film_strip\": \"🎞\",\n        \"fire\": \"🔥\",\n        \"fire_engine\": \"🚒\",\n        \"fireworks\": \"🎆\",\n        \"first_quarter_moon\": \"🌓\",\n        \"first_quarter_moon_with_face\": \"🌛\",\n        \"fish\": \"🐟\",\n        \"fish_cake\": \"🍥\",\n        \"fishing_pole_and_fish\": \"🎣\",\n        \"fist_raised\": \"✊\",\n        \"fist_left\": \"🤛\",\n        \"fist_right\": \"🤜\",\n        \"flags\": \"🎏\",\n        \"flashlight\": \"🔦\",\n        \"fleur_de_lis\": \"⚜️\",\n        \"flight_arrival\": \"🛬\",\n        \"flight_departure\": \"🛫\",\n        \"floppy_disk\": \"💾\",\n        \"flower_playing_cards\": \"🎴\",\n        \"flushed\": \"😳\",\n        \"fog\": \"🌫\",\n        \"foggy\": \"🌁\",\n        \"football\": \"🏈\",\n        \"footprints\": \"👣\",\n        \"fork_and_knife\": \"🍴\",\n        \"fountain\": \"⛲️\",\n        \"fountain_pen\": \"🖋\",\n        \"four_leaf_clover\": \"🍀\",\n        \"fox_face\": \"🦊\",\n        \"framed_picture\": \"🖼\",\n        \"free\": \"🆓\",\n        \"fried_egg\": \"🍳\",\n        \"fried_shrimp\": \"🍤\",\n        \"fries\": \"🍟\",\n        \"frog\": \"🐸\",\n        \"frowning\": \"😦\",\n        \"frowning_face\": \"☹️\",\n        \"frowning_man\": \"🙍&zwj;♂️\",\n        \"frowning_woman\": \"🙍\",\n        \"middle_finger\": \"🖕\",\n        \"fuelpump\": \"⛽️\",\n        \"full_moon\": \"🌕\",\n        \"full_moon_with_face\": \"🌝\",\n        \"funeral_urn\": \"⚱️\",\n        \"game_die\": \"🎲\",\n        \"gear\": \"⚙️\",\n        \"gem\": \"💎\",\n        \"gemini\": \"♊️\",\n        \"ghost\": \"👻\",\n        \"gift\": \"🎁\",\n        \"gift_heart\": \"💝\",\n        \"girl\": \"👧\",\n        \"globe_with_meridians\": \"🌐\",\n        \"goal_net\": \"🥅\",\n        \"goat\": \"🐐\",\n        \"golf\": \"⛳️\",\n        \"golfing_man\": \"🏌️\",\n        \"golfing_woman\": \"🏌️&zwj;♀️\",\n        \"gorilla\": \"🦍\",\n        \"grapes\": \"🍇\",\n        \"green_apple\": \"🍏\",\n        \"green_book\": \"📗\",\n        \"green_heart\": \"💚\",\n        \"green_salad\": \"🥗\",\n        \"grey_exclamation\": \"❕\",\n        \"grey_question\": \"❔\",\n        \"grimacing\": \"😬\",\n        \"grin\": \"😁\",\n        \"grinning\": \"😀\",\n        \"guardsman\": \"💂\",\n        \"guardswoman\": \"💂&zwj;♀️\",\n        \"guitar\": \"🎸\",\n        \"gun\": \"🔫\",\n        \"haircut_woman\": \"💇\",\n        \"haircut_man\": \"💇&zwj;♂️\",\n        \"hamburger\": \"🍔\",\n        \"hammer\": \"🔨\",\n        \"hammer_and_pick\": \"⚒\",\n        \"hammer_and_wrench\": \"🛠\",\n        \"hamster\": \"🐹\",\n        \"hand\": \"✋\",\n        \"handbag\": \"👜\",\n        \"handshake\": \"🤝\",\n        \"hankey\": \"💩\",\n        \"hatched_chick\": \"🐥\",\n        \"hatching_chick\": \"🐣\",\n        \"headphones\": \"🎧\",\n        \"hear_no_evil\": \"🙉\",\n        \"heart\": \"❤️\",\n        \"heart_decoration\": \"💟\",\n        \"heart_eyes\": \"😍\",\n        \"heart_eyes_cat\": \"😻\",\n        \"heartbeat\": \"💓\",\n        \"heartpulse\": \"💗\",\n        \"hearts\": \"♥️\",\n        \"heavy_check_mark\": \"✔️\",\n        \"heavy_division_sign\": \"➗\",\n        \"heavy_dollar_sign\": \"💲\",\n        \"heavy_heart_exclamation\": \"❣️\",\n        \"heavy_minus_sign\": \"➖\",\n        \"heavy_multiplication_x\": \"✖️\",\n        \"heavy_plus_sign\": \"➕\",\n        \"helicopter\": \"🚁\",\n        \"herb\": \"🌿\",\n        \"hibiscus\": \"🌺\",\n        \"high_brightness\": \"🔆\",\n        \"high_heel\": \"👠\",\n        \"hocho\": \"🔪\",\n        \"hole\": \"🕳\",\n        \"honey_pot\": \"🍯\",\n        \"horse\": \"🐴\",\n        \"horse_racing\": \"🏇\",\n        \"hospital\": \"🏥\",\n        \"hot_pepper\": \"🌶\",\n        \"hotdog\": \"🌭\",\n        \"hotel\": \"🏨\",\n        \"hotsprings\": \"♨️\",\n        \"hourglass\": \"⌛️\",\n        \"hourglass_flowing_sand\": \"⏳\",\n        \"house\": \"🏠\",\n        \"house_with_garden\": \"🏡\",\n        \"houses\": \"🏘\",\n        \"hugs\": \"🤗\",\n        \"hushed\": \"😯\",\n        \"ice_cream\": \"🍨\",\n        \"ice_hockey\": \"🏒\",\n        \"ice_skate\": \"⛸\",\n        \"icecream\": \"🍦\",\n        \"id\": \"🆔\",\n        \"ideograph_advantage\": \"🉐\",\n        \"imp\": \"👿\",\n        \"inbox_tray\": \"📥\",\n        \"incoming_envelope\": \"📨\",\n        \"tipping_hand_woman\": \"💁\",\n        \"information_source\": \"ℹ️\",\n        \"innocent\": \"😇\",\n        \"interrobang\": \"⁉️\",\n        \"iphone\": \"📱\",\n        \"izakaya_lantern\": \"🏮\",\n        \"jack_o_lantern\": \"🎃\",\n        \"japan\": \"🗾\",\n        \"japanese_castle\": \"🏯\",\n        \"japanese_goblin\": \"👺\",\n        \"japanese_ogre\": \"👹\",\n        \"jeans\": \"👖\",\n        \"joy\": \"😂\",\n        \"joy_cat\": \"😹\",\n        \"joystick\": \"🕹\",\n        \"kaaba\": \"🕋\",\n        \"key\": \"🔑\",\n        \"keyboard\": \"⌨️\",\n        \"keycap_ten\": \"🔟\",\n        \"kick_scooter\": \"🛴\",\n        \"kimono\": \"👘\",\n        \"kiss\": \"💋\",\n        \"kissing\": \"😗\",\n        \"kissing_cat\": \"😽\",\n        \"kissing_closed_eyes\": \"😚\",\n        \"kissing_heart\": \"😘\",\n        \"kissing_smiling_eyes\": \"😙\",\n        \"kiwi_fruit\": \"🥝\",\n        \"koala\": \"🐨\",\n        \"koko\": \"🈁\",\n        \"label\": \"🏷\",\n        \"large_blue_circle\": \"🔵\",\n        \"large_blue_diamond\": \"🔷\",\n        \"large_orange_diamond\": \"🔶\",\n        \"last_quarter_moon\": \"🌗\",\n        \"last_quarter_moon_with_face\": \"🌜\",\n        \"latin_cross\": \"✝️\",\n        \"laughing\": \"😆\",\n        \"leaves\": \"🍃\",\n        \"ledger\": \"📒\",\n        \"left_luggage\": \"🛅\",\n        \"left_right_arrow\": \"↔️\",\n        \"leftwards_arrow_with_hook\": \"↩️\",\n        \"lemon\": \"🍋\",\n        \"leo\": \"♌️\",\n        \"leopard\": \"🐆\",\n        \"level_slider\": \"🎚\",\n        \"libra\": \"♎️\",\n        \"light_rail\": \"🚈\",\n        \"link\": \"🔗\",\n        \"lion\": \"🦁\",\n        \"lips\": \"👄\",\n        \"lipstick\": \"💄\",\n        \"lizard\": \"🦎\",\n        \"lock\": \"🔒\",\n        \"lock_with_ink_pen\": \"🔏\",\n        \"lollipop\": \"🍭\",\n        \"loop\": \"➿\",\n        \"loud_sound\": \"🔊\",\n        \"loudspeaker\": \"📢\",\n        \"love_hotel\": \"🏩\",\n        \"love_letter\": \"💌\",\n        \"low_brightness\": \"🔅\",\n        \"lying_face\": \"🤥\",\n        \"m\": \"Ⓜ️\",\n        \"mag\": \"🔍\",\n        \"mag_right\": \"🔎\",\n        \"mahjong\": \"🀄️\",\n        \"mailbox\": \"📫\",\n        \"mailbox_closed\": \"📪\",\n        \"mailbox_with_mail\": \"📬\",\n        \"mailbox_with_no_mail\": \"📭\",\n        \"man\": \"👨\",\n        \"man_artist\": \"👨&zwj;🎨\",\n        \"man_astronaut\": \"👨&zwj;🚀\",\n        \"man_cartwheeling\": \"🤸&zwj;♂️\",\n        \"man_cook\": \"👨&zwj;🍳\",\n        \"man_dancing\": \"🕺\",\n        \"man_facepalming\": \"🤦&zwj;♂️\",\n        \"man_factory_worker\": \"👨&zwj;🏭\",\n        \"man_farmer\": \"👨&zwj;🌾\",\n        \"man_firefighter\": \"👨&zwj;🚒\",\n        \"man_health_worker\": \"👨&zwj;⚕️\",\n        \"man_in_tuxedo\": \"🤵\",\n        \"man_judge\": \"👨&zwj;⚖️\",\n        \"man_juggling\": \"🤹&zwj;♂️\",\n        \"man_mechanic\": \"👨&zwj;🔧\",\n        \"man_office_worker\": \"👨&zwj;💼\",\n        \"man_pilot\": \"👨&zwj;✈️\",\n        \"man_playing_handball\": \"🤾&zwj;♂️\",\n        \"man_playing_water_polo\": \"🤽&zwj;♂️\",\n        \"man_scientist\": \"👨&zwj;🔬\",\n        \"man_shrugging\": \"🤷&zwj;♂️\",\n        \"man_singer\": \"👨&zwj;🎤\",\n        \"man_student\": \"👨&zwj;🎓\",\n        \"man_teacher\": \"👨&zwj;🏫\",\n        \"man_technologist\": \"👨&zwj;💻\",\n        \"man_with_gua_pi_mao\": \"👲\",\n        \"man_with_turban\": \"👳\",\n        \"tangerine\": \"🍊\",\n        \"mans_shoe\": \"👞\",\n        \"mantelpiece_clock\": \"🕰\",\n        \"maple_leaf\": \"🍁\",\n        \"martial_arts_uniform\": \"🥋\",\n        \"mask\": \"😷\",\n        \"massage_woman\": \"💆\",\n        \"massage_man\": \"💆&zwj;♂️\",\n        \"meat_on_bone\": \"🍖\",\n        \"medal_military\": \"🎖\",\n        \"medal_sports\": \"🏅\",\n        \"mega\": \"📣\",\n        \"melon\": \"🍈\",\n        \"memo\": \"📝\",\n        \"men_wrestling\": \"🤼&zwj;♂️\",\n        \"menorah\": \"🕎\",\n        \"mens\": \"🚹\",\n        \"metal\": \"🤘\",\n        \"metro\": \"🚇\",\n        \"microphone\": \"🎤\",\n        \"microscope\": \"🔬\",\n        \"milk_glass\": \"🥛\",\n        \"milky_way\": \"🌌\",\n        \"minibus\": \"🚐\",\n        \"minidisc\": \"💽\",\n        \"mobile_phone_off\": \"📴\",\n        \"money_mouth_face\": \"🤑\",\n        \"money_with_wings\": \"💸\",\n        \"moneybag\": \"💰\",\n        \"monkey\": \"🐒\",\n        \"monkey_face\": \"🐵\",\n        \"monorail\": \"🚝\",\n        \"moon\": \"🌔\",\n        \"mortar_board\": \"🎓\",\n        \"mosque\": \"🕌\",\n        \"motor_boat\": \"🛥\",\n        \"motor_scooter\": \"🛵\",\n        \"motorcycle\": \"🏍\",\n        \"motorway\": \"🛣\",\n        \"mount_fuji\": \"🗻\",\n        \"mountain\": \"⛰\",\n        \"mountain_biking_man\": \"🚵\",\n        \"mountain_biking_woman\": \"🚵&zwj;♀️\",\n        \"mountain_cableway\": \"🚠\",\n        \"mountain_railway\": \"🚞\",\n        \"mountain_snow\": \"🏔\",\n        \"mouse\": \"🐭\",\n        \"mouse2\": \"🐁\",\n        \"movie_camera\": \"🎥\",\n        \"moyai\": \"🗿\",\n        \"mrs_claus\": \"🤶\",\n        \"muscle\": \"💪\",\n        \"mushroom\": \"🍄\",\n        \"musical_keyboard\": \"🎹\",\n        \"musical_note\": \"🎵\",\n        \"musical_score\": \"🎼\",\n        \"mute\": \"🔇\",\n        \"nail_care\": \"💅\",\n        \"name_badge\": \"📛\",\n        \"national_park\": \"🏞\",\n        \"nauseated_face\": \"🤢\",\n        \"necktie\": \"👔\",\n        \"negative_squared_cross_mark\": \"❎\",\n        \"nerd_face\": \"🤓\",\n        \"neutral_face\": \"😐\",\n        \"new\": \"🆕\",\n        \"new_moon\": \"🌑\",\n        \"new_moon_with_face\": \"🌚\",\n        \"newspaper\": \"📰\",\n        \"newspaper_roll\": \"🗞\",\n        \"next_track_button\": \"⏭\",\n        \"ng\": \"🆖\",\n        \"no_good_man\": \"🙅&zwj;♂️\",\n        \"no_good_woman\": \"🙅\",\n        \"night_with_stars\": \"🌃\",\n        \"no_bell\": \"🔕\",\n        \"no_bicycles\": \"🚳\",\n        \"no_entry\": \"⛔️\",\n        \"no_entry_sign\": \"🚫\",\n        \"no_mobile_phones\": \"📵\",\n        \"no_mouth\": \"😶\",\n        \"no_pedestrians\": \"🚷\",\n        \"no_smoking\": \"🚭\",\n        \"non-potable_water\": \"🚱\",\n        \"nose\": \"👃\",\n        \"notebook\": \"📓\",\n        \"notebook_with_decorative_cover\": \"📔\",\n        \"notes\": \"🎶\",\n        \"nut_and_bolt\": \"🔩\",\n        \"o\": \"⭕️\",\n        \"o2\": \"🅾️\",\n        \"ocean\": \"🌊\",\n        \"octopus\": \"🐙\",\n        \"oden\": \"🍢\",\n        \"office\": \"🏢\",\n        \"oil_drum\": \"🛢\",\n        \"ok\": \"🆗\",\n        \"ok_hand\": \"👌\",\n        \"ok_man\": \"🙆&zwj;♂️\",\n        \"ok_woman\": \"🙆\",\n        \"old_key\": \"🗝\",\n        \"older_man\": \"👴\",\n        \"older_woman\": \"👵\",\n        \"om\": \"🕉\",\n        \"on\": \"🔛\",\n        \"oncoming_automobile\": \"🚘\",\n        \"oncoming_bus\": \"🚍\",\n        \"oncoming_police_car\": \"🚔\",\n        \"oncoming_taxi\": \"🚖\",\n        \"open_file_folder\": \"📂\",\n        \"open_hands\": \"👐\",\n        \"open_mouth\": \"😮\",\n        \"open_umbrella\": \"☂️\",\n        \"ophiuchus\": \"⛎\",\n        \"orange_book\": \"📙\",\n        \"orthodox_cross\": \"☦️\",\n        \"outbox_tray\": \"📤\",\n        \"owl\": \"🦉\",\n        \"ox\": \"🐂\",\n        \"package\": \"📦\",\n        \"page_facing_up\": \"📄\",\n        \"page_with_curl\": \"📃\",\n        \"pager\": \"📟\",\n        \"paintbrush\": \"🖌\",\n        \"palm_tree\": \"🌴\",\n        \"pancakes\": \"🥞\",\n        \"panda_face\": \"🐼\",\n        \"paperclip\": \"📎\",\n        \"paperclips\": \"🖇\",\n        \"parasol_on_ground\": \"⛱\",\n        \"parking\": \"🅿️\",\n        \"part_alternation_mark\": \"〽️\",\n        \"partly_sunny\": \"⛅️\",\n        \"passenger_ship\": \"🛳\",\n        \"passport_control\": \"🛂\",\n        \"pause_button\": \"⏸\",\n        \"peace_symbol\": \"☮️\",\n        \"peach\": \"🍑\",\n        \"peanuts\": \"🥜\",\n        \"pear\": \"🍐\",\n        \"pen\": \"🖊\",\n        \"pencil2\": \"✏️\",\n        \"penguin\": \"🐧\",\n        \"pensive\": \"😔\",\n        \"performing_arts\": \"🎭\",\n        \"persevere\": \"😣\",\n        \"person_fencing\": \"🤺\",\n        \"pouting_woman\": \"🙎\",\n        \"phone\": \"☎️\",\n        \"pick\": \"⛏\",\n        \"pig\": \"🐷\",\n        \"pig2\": \"🐖\",\n        \"pig_nose\": \"🐽\",\n        \"pill\": \"💊\",\n        \"pineapple\": \"🍍\",\n        \"ping_pong\": \"🏓\",\n        \"pisces\": \"♓️\",\n        \"pizza\": \"🍕\",\n        \"place_of_worship\": \"🛐\",\n        \"plate_with_cutlery\": \"🍽\",\n        \"play_or_pause_button\": \"⏯\",\n        \"point_down\": \"👇\",\n        \"point_left\": \"👈\",\n        \"point_right\": \"👉\",\n        \"point_up\": \"☝️\",\n        \"point_up_2\": \"👆\",\n        \"police_car\": \"🚓\",\n        \"policewoman\": \"👮&zwj;♀️\",\n        \"poodle\": \"🐩\",\n        \"popcorn\": \"🍿\",\n        \"post_office\": \"🏣\",\n        \"postal_horn\": \"📯\",\n        \"postbox\": \"📮\",\n        \"potable_water\": \"🚰\",\n        \"potato\": \"🥔\",\n        \"pouch\": \"👝\",\n        \"poultry_leg\": \"🍗\",\n        \"pound\": \"💷\",\n        \"rage\": \"😡\",\n        \"pouting_cat\": \"😾\",\n        \"pouting_man\": \"🙎&zwj;♂️\",\n        \"pray\": \"🙏\",\n        \"prayer_beads\": \"📿\",\n        \"pregnant_woman\": \"🤰\",\n        \"previous_track_button\": \"⏮\",\n        \"prince\": \"🤴\",\n        \"princess\": \"👸\",\n        \"printer\": \"🖨\",\n        \"purple_heart\": \"💜\",\n        \"purse\": \"👛\",\n        \"pushpin\": \"📌\",\n        \"put_litter_in_its_place\": \"🚮\",\n        \"question\": \"❓\",\n        \"rabbit\": \"🐰\",\n        \"rabbit2\": \"🐇\",\n        \"racehorse\": \"🐎\",\n        \"racing_car\": \"🏎\",\n        \"radio\": \"📻\",\n        \"radio_button\": \"🔘\",\n        \"radioactive\": \"☢️\",\n        \"railway_car\": \"🚃\",\n        \"railway_track\": \"🛤\",\n        \"rainbow\": \"🌈\",\n        \"rainbow_flag\": \"🏳️&zwj;🌈\",\n        \"raised_back_of_hand\": \"🤚\",\n        \"raised_hand_with_fingers_splayed\": \"🖐\",\n        \"raised_hands\": \"🙌\",\n        \"raising_hand_woman\": \"🙋\",\n        \"raising_hand_man\": \"🙋&zwj;♂️\",\n        \"ram\": \"🐏\",\n        \"ramen\": \"🍜\",\n        \"rat\": \"🐀\",\n        \"record_button\": \"⏺\",\n        \"recycle\": \"♻️\",\n        \"red_circle\": \"🔴\",\n        \"registered\": \"®️\",\n        \"relaxed\": \"☺️\",\n        \"relieved\": \"😌\",\n        \"reminder_ribbon\": \"🎗\",\n        \"repeat\": \"🔁\",\n        \"repeat_one\": \"🔂\",\n        \"rescue_worker_helmet\": \"⛑\",\n        \"restroom\": \"🚻\",\n        \"revolving_hearts\": \"💞\",\n        \"rewind\": \"⏪\",\n        \"rhinoceros\": \"🦏\",\n        \"ribbon\": \"🎀\",\n        \"rice\": \"🍚\",\n        \"rice_ball\": \"🍙\",\n        \"rice_cracker\": \"🍘\",\n        \"rice_scene\": \"🎑\",\n        \"right_anger_bubble\": \"🗯\",\n        \"ring\": \"💍\",\n        \"robot\": \"🤖\",\n        \"rocket\": \"🚀\",\n        \"rofl\": \"🤣\",\n        \"roll_eyes\": \"🙄\",\n        \"roller_coaster\": \"🎢\",\n        \"rooster\": \"🐓\",\n        \"rose\": \"🌹\",\n        \"rosette\": \"🏵\",\n        \"rotating_light\": \"🚨\",\n        \"round_pushpin\": \"📍\",\n        \"rowing_man\": \"🚣\",\n        \"rowing_woman\": \"🚣&zwj;♀️\",\n        \"rugby_football\": \"🏉\",\n        \"running_man\": \"🏃\",\n        \"running_shirt_with_sash\": \"🎽\",\n        \"running_woman\": \"🏃&zwj;♀️\",\n        \"sa\": \"🈂️\",\n        \"sagittarius\": \"♐️\",\n        \"sake\": \"🍶\",\n        \"sandal\": \"👡\",\n        \"santa\": \"🎅\",\n        \"satellite\": \"📡\",\n        \"saxophone\": \"🎷\",\n        \"school\": \"🏫\",\n        \"school_satchel\": \"🎒\",\n        \"scissors\": \"✂️\",\n        \"scorpion\": \"🦂\",\n        \"scorpius\": \"♏️\",\n        \"scream\": \"😱\",\n        \"scream_cat\": \"🙀\",\n        \"scroll\": \"📜\",\n        \"seat\": \"💺\",\n        \"secret\": \"㊙️\",\n        \"see_no_evil\": \"🙈\",\n        \"seedling\": \"🌱\",\n        \"selfie\": \"🤳\",\n        \"shallow_pan_of_food\": \"🥘\",\n        \"shamrock\": \"☘️\",\n        \"shark\": \"🦈\",\n        \"shaved_ice\": \"🍧\",\n        \"sheep\": \"🐑\",\n        \"shell\": \"🐚\",\n        \"shield\": \"🛡\",\n        \"shinto_shrine\": \"⛩\",\n        \"ship\": \"🚢\",\n        \"shirt\": \"👕\",\n        \"shopping\": \"🛍\",\n        \"shopping_cart\": \"🛒\",\n        \"shower\": \"🚿\",\n        \"shrimp\": \"🦐\",\n        \"signal_strength\": \"📶\",\n        \"six_pointed_star\": \"🔯\",\n        \"ski\": \"🎿\",\n        \"skier\": \"⛷\",\n        \"skull\": \"💀\",\n        \"skull_and_crossbones\": \"☠️\",\n        \"sleeping\": \"😴\",\n        \"sleeping_bed\": \"🛌\",\n        \"sleepy\": \"😪\",\n        \"slightly_frowning_face\": \"🙁\",\n        \"slightly_smiling_face\": \"🙂\",\n        \"slot_machine\": \"🎰\",\n        \"small_airplane\": \"🛩\",\n        \"small_blue_diamond\": \"🔹\",\n        \"small_orange_diamond\": \"🔸\",\n        \"small_red_triangle\": \"🔺\",\n        \"small_red_triangle_down\": \"🔻\",\n        \"smile\": \"😄\",\n        \"smile_cat\": \"😸\",\n        \"smiley\": \"😃\",\n        \"smiley_cat\": \"😺\",\n        \"smiling_imp\": \"😈\",\n        \"smirk\": \"😏\",\n        \"smirk_cat\": \"😼\",\n        \"smoking\": \"🚬\",\n        \"snail\": \"🐌\",\n        \"snake\": \"🐍\",\n        \"sneezing_face\": \"🤧\",\n        \"snowboarder\": \"🏂\",\n        \"snowflake\": \"❄️\",\n        \"snowman\": \"⛄️\",\n        \"snowman_with_snow\": \"☃️\",\n        \"sob\": \"😭\",\n        \"soccer\": \"⚽️\",\n        \"soon\": \"🔜\",\n        \"sos\": \"🆘\",\n        \"sound\": \"🔉\",\n        \"space_invader\": \"👾\",\n        \"spades\": \"♠️\",\n        \"spaghetti\": \"🍝\",\n        \"sparkle\": \"❇️\",\n        \"sparkler\": \"🎇\",\n        \"sparkles\": \"✨\",\n        \"sparkling_heart\": \"💖\",\n        \"speak_no_evil\": \"🙊\",\n        \"speaker\": \"🔈\",\n        \"speaking_head\": \"🗣\",\n        \"speech_balloon\": \"💬\",\n        \"speedboat\": \"🚤\",\n        \"spider\": \"🕷\",\n        \"spider_web\": \"🕸\",\n        \"spiral_calendar\": \"🗓\",\n        \"spiral_notepad\": \"🗒\",\n        \"spoon\": \"🥄\",\n        \"squid\": \"🦑\",\n        \"stadium\": \"🏟\",\n        \"star\": \"⭐️\",\n        \"star2\": \"🌟\",\n        \"star_and_crescent\": \"☪️\",\n        \"star_of_david\": \"✡️\",\n        \"stars\": \"🌠\",\n        \"station\": \"🚉\",\n        \"statue_of_liberty\": \"🗽\",\n        \"steam_locomotive\": \"🚂\",\n        \"stew\": \"🍲\",\n        \"stop_button\": \"⏹\",\n        \"stop_sign\": \"🛑\",\n        \"stopwatch\": \"⏱\",\n        \"straight_ruler\": \"📏\",\n        \"strawberry\": \"🍓\",\n        \"stuck_out_tongue\": \"😛\",\n        \"stuck_out_tongue_closed_eyes\": \"😝\",\n        \"stuck_out_tongue_winking_eye\": \"😜\",\n        \"studio_microphone\": \"🎙\",\n        \"stuffed_flatbread\": \"🥙\",\n        \"sun_behind_large_cloud\": \"🌥\",\n        \"sun_behind_rain_cloud\": \"🌦\",\n        \"sun_behind_small_cloud\": \"🌤\",\n        \"sun_with_face\": \"🌞\",\n        \"sunflower\": \"🌻\",\n        \"sunglasses\": \"😎\",\n        \"sunny\": \"☀️\",\n        \"sunrise\": \"🌅\",\n        \"sunrise_over_mountains\": \"🌄\",\n        \"surfing_man\": \"🏄\",\n        \"surfing_woman\": \"🏄&zwj;♀️\",\n        \"sushi\": \"🍣\",\n        \"suspension_railway\": \"🚟\",\n        \"sweat\": \"😓\",\n        \"sweat_drops\": \"💦\",\n        \"sweat_smile\": \"😅\",\n        \"sweet_potato\": \"🍠\",\n        \"swimming_man\": \"🏊\",\n        \"swimming_woman\": \"🏊&zwj;♀️\",\n        \"symbols\": \"🔣\",\n        \"synagogue\": \"🕍\",\n        \"syringe\": \"💉\",\n        \"taco\": \"🌮\",\n        \"tada\": \"🎉\",\n        \"tanabata_tree\": \"🎋\",\n        \"taurus\": \"♉️\",\n        \"taxi\": \"🚕\",\n        \"tea\": \"🍵\",\n        \"telephone_receiver\": \"📞\",\n        \"telescope\": \"🔭\",\n        \"tennis\": \"🎾\",\n        \"tent\": \"⛺️\",\n        \"thermometer\": \"🌡\",\n        \"thinking\": \"🤔\",\n        \"thought_balloon\": \"💭\",\n        \"ticket\": \"🎫\",\n        \"tickets\": \"🎟\",\n        \"tiger\": \"🐯\",\n        \"tiger2\": \"🐅\",\n        \"timer_clock\": \"⏲\",\n        \"tipping_hand_man\": \"💁&zwj;♂️\",\n        \"tired_face\": \"😫\",\n        \"tm\": \"™️\",\n        \"toilet\": \"🚽\",\n        \"tokyo_tower\": \"🗼\",\n        \"tomato\": \"🍅\",\n        \"tongue\": \"👅\",\n        \"top\": \"🔝\",\n        \"tophat\": \"🎩\",\n        \"tornado\": \"🌪\",\n        \"trackball\": \"🖲\",\n        \"tractor\": \"🚜\",\n        \"traffic_light\": \"🚥\",\n        \"train\": \"🚋\",\n        \"train2\": \"🚆\",\n        \"tram\": \"🚊\",\n        \"triangular_flag_on_post\": \"🚩\",\n        \"triangular_ruler\": \"📐\",\n        \"trident\": \"🔱\",\n        \"triumph\": \"😤\",\n        \"trolleybus\": \"🚎\",\n        \"trophy\": \"🏆\",\n        \"tropical_drink\": \"🍹\",\n        \"tropical_fish\": \"🐠\",\n        \"truck\": \"🚚\",\n        \"trumpet\": \"🎺\",\n        \"tulip\": \"🌷\",\n        \"tumbler_glass\": \"🥃\",\n        \"turkey\": \"🦃\",\n        \"turtle\": \"🐢\",\n        \"tv\": \"📺\",\n        \"twisted_rightwards_arrows\": \"🔀\",\n        \"two_hearts\": \"💕\",\n        \"two_men_holding_hands\": \"👬\",\n        \"two_women_holding_hands\": \"👭\",\n        \"u5272\": \"🈹\",\n        \"u5408\": \"🈴\",\n        \"u55b6\": \"🈺\",\n        \"u6307\": \"🈯️\",\n        \"u6708\": \"🈷️\",\n        \"u6709\": \"🈶\",\n        \"u6e80\": \"🈵\",\n        \"u7121\": \"🈚️\",\n        \"u7533\": \"🈸\",\n        \"u7981\": \"🈲\",\n        \"u7a7a\": \"🈳\",\n        \"umbrella\": \"☔️\",\n        \"unamused\": \"😒\",\n        \"underage\": \"🔞\",\n        \"unicorn\": \"🦄\",\n        \"unlock\": \"🔓\",\n        \"up\": \"🆙\",\n        \"upside_down_face\": \"🙃\",\n        \"v\": \"✌️\",\n        \"vertical_traffic_light\": \"🚦\",\n        \"vhs\": \"📼\",\n        \"vibration_mode\": \"📳\",\n        \"video_camera\": \"📹\",\n        \"video_game\": \"🎮\",\n        \"violin\": \"🎻\",\n        \"virgo\": \"♍️\",\n        \"volcano\": \"🌋\",\n        \"volleyball\": \"🏐\",\n        \"vs\": \"🆚\",\n        \"vulcan_salute\": \"🖖\",\n        \"walking_man\": \"🚶\",\n        \"walking_woman\": \"🚶&zwj;♀️\",\n        \"waning_crescent_moon\": \"🌘\",\n        \"waning_gibbous_moon\": \"🌖\",\n        \"warning\": \"⚠️\",\n        \"wastebasket\": \"🗑\",\n        \"watch\": \"⌚️\",\n        \"water_buffalo\": \"🐃\",\n        \"watermelon\": \"🍉\",\n        \"wave\": \"👋\",\n        \"wavy_dash\": \"〰️\",\n        \"waxing_crescent_moon\": \"🌒\",\n        \"wc\": \"🚾\",\n        \"weary\": \"😩\",\n        \"wedding\": \"💒\",\n        \"weight_lifting_man\": \"🏋️\",\n        \"weight_lifting_woman\": \"🏋️&zwj;♀️\",\n        \"whale\": \"🐳\",\n        \"whale2\": \"🐋\",\n        \"wheel_of_dharma\": \"☸️\",\n        \"wheelchair\": \"♿️\",\n        \"white_check_mark\": \"✅\",\n        \"white_circle\": \"⚪️\",\n        \"white_flag\": \"🏳️\",\n        \"white_flower\": \"💮\",\n        \"white_large_square\": \"⬜️\",\n        \"white_medium_small_square\": \"◽️\",\n        \"white_medium_square\": \"◻️\",\n        \"white_small_square\": \"▫️\",\n        \"white_square_button\": \"🔳\",\n        \"wilted_flower\": \"🥀\",\n        \"wind_chime\": \"🎐\",\n        \"wind_face\": \"🌬\",\n        \"wine_glass\": \"🍷\",\n        \"wink\": \"😉\",\n        \"wolf\": \"🐺\",\n        \"woman\": \"👩\",\n        \"woman_artist\": \"👩&zwj;🎨\",\n        \"woman_astronaut\": \"👩&zwj;🚀\",\n        \"woman_cartwheeling\": \"🤸&zwj;♀️\",\n        \"woman_cook\": \"👩&zwj;🍳\",\n        \"woman_facepalming\": \"🤦&zwj;♀️\",\n        \"woman_factory_worker\": \"👩&zwj;🏭\",\n        \"woman_farmer\": \"👩&zwj;🌾\",\n        \"woman_firefighter\": \"👩&zwj;🚒\",\n        \"woman_health_worker\": \"👩&zwj;⚕️\",\n        \"woman_judge\": \"👩&zwj;⚖️\",\n        \"woman_juggling\": \"🤹&zwj;♀️\",\n        \"woman_mechanic\": \"👩&zwj;🔧\",\n        \"woman_office_worker\": \"👩&zwj;💼\",\n        \"woman_pilot\": \"👩&zwj;✈️\",\n        \"woman_playing_handball\": \"🤾&zwj;♀️\",\n        \"woman_playing_water_polo\": \"🤽&zwj;♀️\",\n        \"woman_scientist\": \"👩&zwj;🔬\",\n        \"woman_shrugging\": \"🤷&zwj;♀️\",\n        \"woman_singer\": \"👩&zwj;🎤\",\n        \"woman_student\": \"👩&zwj;🎓\",\n        \"woman_teacher\": \"👩&zwj;🏫\",\n        \"woman_technologist\": \"👩&zwj;💻\",\n        \"woman_with_turban\": \"👳&zwj;♀️\",\n        \"womans_clothes\": \"👚\",\n        \"womans_hat\": \"👒\",\n        \"women_wrestling\": \"🤼&zwj;♀️\",\n        \"womens\": \"🚺\",\n        \"world_map\": \"🗺\",\n        \"worried\": \"😟\",\n        \"wrench\": \"🔧\",\n        \"writing_hand\": \"✍️\",\n        \"x\": \"❌\",\n        \"yellow_heart\": \"💛\",\n        \"yen\": \"💴\",\n        \"yin_yang\": \"☯️\",\n        \"yum\": \"😋\",\n        \"zap\": \"⚡️\",\n        \"zipper_mouth_face\": \"🤐\",\n        \"zzz\": \"💤\",\n        /* special emojis :P */\n        \"octocat\": '<img alt=\":octocat:\" height=\"20\" width=\"20\" align=\"absmiddle\" src=\"https://assets-cdn.github.com/images/icons/emoji/octocat.png\">',\n        \"showdown\": `<span style=\"font-family: 'Anonymous Pro', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;\">S</span>`\n      };\n      showdown2.Converter = function(converterOptions) {\n        var options = {}, langExtensions = [], outputModifiers = [], listeners = {}, setConvFlavor = setFlavor, metadata = {\n          parsed: {},\n          raw: \"\",\n          format: \"\"\n        };\n        _constructor();\n        function _constructor() {\n          converterOptions = converterOptions || {};\n          for (var gOpt in globalOptions) {\n            if (globalOptions.hasOwnProperty(gOpt)) {\n              options[gOpt] = globalOptions[gOpt];\n            }\n          }\n          if (typeof converterOptions === \"object\") {\n            for (var opt in converterOptions) {\n              if (converterOptions.hasOwnProperty(opt)) {\n                options[opt] = converterOptions[opt];\n              }\n            }\n          } else {\n            throw Error(\"Converter expects the passed parameter to be an object, but \" + typeof converterOptions + \" was passed instead.\");\n          }\n          if (options.extensions) {\n            showdown2.helper.forEach(options.extensions, _parseExtension);\n          }\n        }\n        function _parseExtension(ext, name) {\n          name = name || null;\n          if (showdown2.helper.isString(ext)) {\n            ext = showdown2.helper.stdExtName(ext);\n            name = ext;\n            if (showdown2.extensions[ext]) {\n              console.warn(\"DEPRECATION WARNING: \" + ext + \" is an old extension that uses a deprecated loading method.Please inform the developer that the extension should be updated!\");\n              legacyExtensionLoading(showdown2.extensions[ext], ext);\n              return;\n            } else if (!showdown2.helper.isUndefined(extensions[ext])) {\n              ext = extensions[ext];\n            } else {\n              throw Error('Extension \"' + ext + '\" could not be loaded. It was either not found or is not a valid extension.');\n            }\n          }\n          if (typeof ext === \"function\") {\n            ext = ext();\n          }\n          if (!showdown2.helper.isArray(ext)) {\n            ext = [ext];\n          }\n          var validExt = validate(ext, name);\n          if (!validExt.valid) {\n            throw Error(validExt.error);\n          }\n          for (var i3 = 0; i3 < ext.length; ++i3) {\n            switch (ext[i3].type) {\n              case \"lang\":\n                langExtensions.push(ext[i3]);\n                break;\n              case \"output\":\n                outputModifiers.push(ext[i3]);\n                break;\n            }\n            if (ext[i3].hasOwnProperty(\"listeners\")) {\n              for (var ln in ext[i3].listeners) {\n                if (ext[i3].listeners.hasOwnProperty(ln)) {\n                  listen(ln, ext[i3].listeners[ln]);\n                }\n              }\n            }\n          }\n        }\n        function legacyExtensionLoading(ext, name) {\n          if (typeof ext === \"function\") {\n            ext = ext(new showdown2.Converter());\n          }\n          if (!showdown2.helper.isArray(ext)) {\n            ext = [ext];\n          }\n          var valid = validate(ext, name);\n          if (!valid.valid) {\n            throw Error(valid.error);\n          }\n          for (var i3 = 0; i3 < ext.length; ++i3) {\n            switch (ext[i3].type) {\n              case \"lang\":\n                langExtensions.push(ext[i3]);\n                break;\n              case \"output\":\n                outputModifiers.push(ext[i3]);\n                break;\n              default:\n                throw Error(\"Extension loader error: Type unrecognized!!!\");\n            }\n          }\n        }\n        function listen(name, callback) {\n          if (!showdown2.helper.isString(name)) {\n            throw Error(\"Invalid argument in converter.listen() method: name must be a string, but \" + typeof name + \" given\");\n          }\n          if (typeof callback !== \"function\") {\n            throw Error(\"Invalid argument in converter.listen() method: callback must be a function, but \" + typeof callback + \" given\");\n          }\n          if (!listeners.hasOwnProperty(name)) {\n            listeners[name] = [];\n          }\n          listeners[name].push(callback);\n        }\n        function rTrimInputText(text2) {\n          var rsp = text2.match(/^\\s*/)[0].length, rgx = new RegExp(\"^\\\\s{0,\" + rsp + \"}\", \"gm\");\n          return text2.replace(rgx, \"\");\n        }\n        this._dispatch = function dispatch(evtName, text2, options2, globals) {\n          if (listeners.hasOwnProperty(evtName)) {\n            for (var ei = 0; ei < listeners[evtName].length; ++ei) {\n              var nText = listeners[evtName][ei](evtName, text2, this, options2, globals);\n              if (nText && typeof nText !== \"undefined\") {\n                text2 = nText;\n              }\n            }\n          }\n          return text2;\n        };\n        this.listen = function(name, callback) {\n          listen(name, callback);\n          return this;\n        };\n        this.makeHtml = function(text2) {\n          if (!text2) {\n            return text2;\n          }\n          var globals = {\n            gHtmlBlocks: [],\n            gHtmlMdBlocks: [],\n            gHtmlSpans: [],\n            gUrls: {},\n            gTitles: {},\n            gDimensions: {},\n            gListLevel: 0,\n            hashLinkCounts: {},\n            langExtensions,\n            outputModifiers,\n            converter: this,\n            ghCodeBlocks: [],\n            metadata: {\n              parsed: {},\n              raw: \"\",\n              format: \"\"\n            }\n          };\n          text2 = text2.replace(/¨/g, \"¨T\");\n          text2 = text2.replace(/\\$/g, \"¨D\");\n          text2 = text2.replace(/\\r\\n/g, \"\\n\");\n          text2 = text2.replace(/\\r/g, \"\\n\");\n          text2 = text2.replace(/\\u00A0/g, \"&nbsp;\");\n          if (options.smartIndentationFix) {\n            text2 = rTrimInputText(text2);\n          }\n          text2 = \"\\n\\n\" + text2 + \"\\n\\n\";\n          text2 = showdown2.subParser(\"detab\")(text2, options, globals);\n          text2 = text2.replace(/^[ \\t]+$/mg, \"\");\n          showdown2.helper.forEach(langExtensions, function(ext) {\n            text2 = showdown2.subParser(\"runExtension\")(ext, text2, options, globals);\n          });\n          text2 = showdown2.subParser(\"metadata\")(text2, options, globals);\n          text2 = showdown2.subParser(\"hashPreCodeTags\")(text2, options, globals);\n          text2 = showdown2.subParser(\"githubCodeBlocks\")(text2, options, globals);\n          text2 = showdown2.subParser(\"hashHTMLBlocks\")(text2, options, globals);\n          text2 = showdown2.subParser(\"hashCodeTags\")(text2, options, globals);\n          text2 = showdown2.subParser(\"stripLinkDefinitions\")(text2, options, globals);\n          text2 = showdown2.subParser(\"blockGamut\")(text2, options, globals);\n          text2 = showdown2.subParser(\"unhashHTMLSpans\")(text2, options, globals);\n          text2 = showdown2.subParser(\"unescapeSpecialChars\")(text2, options, globals);\n          text2 = text2.replace(/¨D/g, \"$$\");\n          text2 = text2.replace(/¨T/g, \"¨\");\n          text2 = showdown2.subParser(\"completeHTMLDocument\")(text2, options, globals);\n          showdown2.helper.forEach(outputModifiers, function(ext) {\n            text2 = showdown2.subParser(\"runExtension\")(ext, text2, options, globals);\n          });\n          metadata = globals.metadata;\n          return text2;\n        };\n        this.makeMarkdown = this.makeMd = function(src, HTMLParser) {\n          src = src.replace(/\\r\\n/g, \"\\n\");\n          src = src.replace(/\\r/g, \"\\n\");\n          src = src.replace(/>[ \\t]+</, \">¨NBSP;<\");\n          if (!HTMLParser) {\n            if (window && window.document) {\n              HTMLParser = window.document;\n            } else {\n              throw new Error(\"HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM\");\n            }\n          }\n          var doc = HTMLParser.createElement(\"div\");\n          doc.innerHTML = src;\n          var globals = {\n            preList: substitutePreCodeTags(doc)\n          };\n          clean(doc);\n          var nodes = doc.childNodes, mdDoc = \"\";\n          for (var i3 = 0; i3 < nodes.length; i3++) {\n            mdDoc += showdown2.subParser(\"makeMarkdown.node\")(nodes[i3], globals);\n          }\n          function clean(node) {\n            for (var n3 = 0; n3 < node.childNodes.length; ++n3) {\n              var child = node.childNodes[n3];\n              if (child.nodeType === 3) {\n                if (!/\\S/.test(child.nodeValue) && !/^[ ]+$/.test(child.nodeValue)) {\n                  node.removeChild(child);\n                  --n3;\n                } else {\n                  child.nodeValue = child.nodeValue.split(\"\\n\").join(\" \");\n                  child.nodeValue = child.nodeValue.replace(/(\\s)+/g, \"$1\");\n                }\n              } else if (child.nodeType === 1) {\n                clean(child);\n              }\n            }\n          }\n          function substitutePreCodeTags(doc2) {\n            var pres = doc2.querySelectorAll(\"pre\"), presPH = [];\n            for (var i4 = 0; i4 < pres.length; ++i4) {\n              if (pres[i4].childElementCount === 1 && pres[i4].firstChild.tagName.toLowerCase() === \"code\") {\n                var content = pres[i4].firstChild.innerHTML.trim(), language = pres[i4].firstChild.getAttribute(\"data-language\") || \"\";\n                if (language === \"\") {\n                  var classes = pres[i4].firstChild.className.split(\" \");\n                  for (var c2 = 0; c2 < classes.length; ++c2) {\n                    var matches = classes[c2].match(/^language-(.+)$/);\n                    if (matches !== null) {\n                      language = matches[1];\n                      break;\n                    }\n                  }\n                }\n                content = showdown2.helper.unescapeHTMLEntities(content);\n                presPH.push(content);\n                pres[i4].outerHTML = '<precode language=\"' + language + '\" precodenum=\"' + i4.toString() + '\"></precode>';\n              } else {\n                presPH.push(pres[i4].innerHTML);\n                pres[i4].innerHTML = \"\";\n                pres[i4].setAttribute(\"prenum\", i4.toString());\n              }\n            }\n            return presPH;\n          }\n          return mdDoc;\n        };\n        this.setOption = function(key, value) {\n          options[key] = value;\n        };\n        this.getOption = function(key) {\n          return options[key];\n        };\n        this.getOptions = function() {\n          return options;\n        };\n        this.addExtension = function(extension, name) {\n          name = name || null;\n          _parseExtension(extension, name);\n        };\n        this.useExtension = function(extensionName) {\n          _parseExtension(extensionName);\n        };\n        this.setFlavor = function(name) {\n          if (!flavor.hasOwnProperty(name)) {\n            throw Error(name + \" flavor was not found\");\n          }\n          var preset = flavor[name];\n          setConvFlavor = name;\n          for (var option in preset) {\n            if (preset.hasOwnProperty(option)) {\n              options[option] = preset[option];\n            }\n          }\n        };\n        this.getFlavor = function() {\n          return setConvFlavor;\n        };\n        this.removeExtension = function(extension) {\n          if (!showdown2.helper.isArray(extension)) {\n            extension = [extension];\n          }\n          for (var a2 = 0; a2 < extension.length; ++a2) {\n            var ext = extension[a2];\n            for (var i3 = 0; i3 < langExtensions.length; ++i3) {\n              if (langExtensions[i3] === ext) {\n                langExtensions.splice(i3, 1);\n              }\n            }\n            for (var ii = 0; ii < outputModifiers.length; ++ii) {\n              if (outputModifiers[ii] === ext) {\n                outputModifiers.splice(ii, 1);\n              }\n            }\n          }\n        };\n        this.getAllExtensions = function() {\n          return {\n            language: langExtensions,\n            output: outputModifiers\n          };\n        };\n        this.getMetadata = function(raw) {\n          if (raw) {\n            return metadata.raw;\n          } else {\n            return metadata.parsed;\n          }\n        };\n        this.getMetadataFormat = function() {\n          return metadata.format;\n        };\n        this._setMetadataPair = function(key, value) {\n          metadata.parsed[key] = value;\n        };\n        this._setMetadataFormat = function(format2) {\n          metadata.format = format2;\n        };\n        this._setMetadataRaw = function(raw) {\n          metadata.raw = raw;\n        };\n      };\n      showdown2.subParser(\"anchors\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"anchors.before\", text2, options, globals);\n        var writeAnchorTag = function(wholeMatch, linkText, linkId, url2, m5, m6, title) {\n          if (showdown2.helper.isUndefined(title)) {\n            title = \"\";\n          }\n          linkId = linkId.toLowerCase();\n          if (wholeMatch.search(/\\(<?\\s*>? ?(['\"].*['\"])?\\)$/m) > -1) {\n            url2 = \"\";\n          } else if (!url2) {\n            if (!linkId) {\n              linkId = linkText.toLowerCase().replace(/ ?\\n/g, \" \");\n            }\n            url2 = \"#\" + linkId;\n            if (!showdown2.helper.isUndefined(globals.gUrls[linkId])) {\n              url2 = globals.gUrls[linkId];\n              if (!showdown2.helper.isUndefined(globals.gTitles[linkId])) {\n                title = globals.gTitles[linkId];\n              }\n            } else {\n              return wholeMatch;\n            }\n          }\n          url2 = url2.replace(showdown2.helper.regexes.asteriskDashAndColon, showdown2.helper.escapeCharactersCallback);\n          var result = '<a href=\"' + url2 + '\"';\n          if (title !== \"\" && title !== null) {\n            title = title.replace(/\"/g, \"&quot;\");\n            title = title.replace(showdown2.helper.regexes.asteriskDashAndColon, showdown2.helper.escapeCharactersCallback);\n            result += ' title=\"' + title + '\"';\n          }\n          if (options.openLinksInNewWindow && !/^#/.test(url2)) {\n            result += ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n          }\n          result += \">\" + linkText + \"</a>\";\n          return result;\n        };\n        text2 = text2.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)] ?(?:\\n *)?\\[(.*?)]()()()()/g, writeAnchorTag);\n        text2 = text2.replace(\n          /\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]?<([^>]*)>(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,\n          writeAnchorTag\n        );\n        text2 = text2.replace(\n          /\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]?<?([\\S]+?(?:\\([\\S]*?\\)[\\S]*?)?)>?(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,\n          writeAnchorTag\n        );\n        text2 = text2.replace(/\\[([^\\[\\]]+)]()()()()()/g, writeAnchorTag);\n        if (options.ghMentions) {\n          text2 = text2.replace(/(^|\\s)(\\\\)?(@([a-z\\d]+(?:[a-z\\d.-]+?[a-z\\d]+)*))/gmi, function(wm, st, escape2, mentions, username) {\n            if (escape2 === \"\\\\\") {\n              return st + mentions;\n            }\n            if (!showdown2.helper.isString(options.ghMentionsLink)) {\n              throw new Error(\"ghMentionsLink option must be a string\");\n            }\n            var lnk = options.ghMentionsLink.replace(/\\{u}/g, username), target = \"\";\n            if (options.openLinksInNewWindow) {\n              target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n            }\n            return st + '<a href=\"' + lnk + '\"' + target + \">\" + mentions + \"</a>\";\n          });\n        }\n        text2 = globals.converter._dispatch(\"anchors.after\", text2, options, globals);\n        return text2;\n      });\n      var simpleURLRegex = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+?\\.[^'\">\\s]+?)()(\\1)?(?=\\s|$)(?![\"<>])/gi, simpleURLRegex2 = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+\\.[^'\">\\s]+?)([.!?,()\\[\\]])?(\\1)?(?=\\s|$)(?![\"<>])/gi, delimUrlRegex = /()<(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+)()>()/gi, simpleMailRegex = /(^|\\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)(?=$|\\s)/gmi, delimMailRegex = /<()(?:mailto:)?([-.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)>/gi, replaceLink = function(options) {\n        return function(wm, leadingMagicChars, link2, m2, m3, trailingPunctuation, trailingMagicChars) {\n          link2 = link2.replace(showdown2.helper.regexes.asteriskDashAndColon, showdown2.helper.escapeCharactersCallback);\n          var lnkTxt = link2, append = \"\", target = \"\", lmc = leadingMagicChars || \"\", tmc = trailingMagicChars || \"\";\n          if (/^www\\./i.test(link2)) {\n            link2 = link2.replace(/^www\\./i, \"http://www.\");\n          }\n          if (options.excludeTrailingPunctuationFromURLs && trailingPunctuation) {\n            append = trailingPunctuation;\n          }\n          if (options.openLinksInNewWindow) {\n            target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n          }\n          return lmc + '<a href=\"' + link2 + '\"' + target + \">\" + lnkTxt + \"</a>\" + append + tmc;\n        };\n      }, replaceMail = function(options, globals) {\n        return function(wholeMatch, b2, mail) {\n          var href = \"mailto:\";\n          b2 = b2 || \"\";\n          mail = showdown2.subParser(\"unescapeSpecialChars\")(mail, options, globals);\n          if (options.encodeEmails) {\n            href = showdown2.helper.encodeEmailAddress(href + mail);\n            mail = showdown2.helper.encodeEmailAddress(mail);\n          } else {\n            href = href + mail;\n          }\n          return b2 + '<a href=\"' + href + '\">' + mail + \"</a>\";\n        };\n      };\n      showdown2.subParser(\"autoLinks\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"autoLinks.before\", text2, options, globals);\n        text2 = text2.replace(delimUrlRegex, replaceLink(options));\n        text2 = text2.replace(delimMailRegex, replaceMail(options, globals));\n        text2 = globals.converter._dispatch(\"autoLinks.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"simplifiedAutoLinks\", function(text2, options, globals) {\n        if (!options.simplifiedAutoLink) {\n          return text2;\n        }\n        text2 = globals.converter._dispatch(\"simplifiedAutoLinks.before\", text2, options, globals);\n        if (options.excludeTrailingPunctuationFromURLs) {\n          text2 = text2.replace(simpleURLRegex2, replaceLink(options));\n        } else {\n          text2 = text2.replace(simpleURLRegex, replaceLink(options));\n        }\n        text2 = text2.replace(simpleMailRegex, replaceMail(options, globals));\n        text2 = globals.converter._dispatch(\"simplifiedAutoLinks.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"blockGamut\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"blockGamut.before\", text2, options, globals);\n        text2 = showdown2.subParser(\"blockQuotes\")(text2, options, globals);\n        text2 = showdown2.subParser(\"headers\")(text2, options, globals);\n        text2 = showdown2.subParser(\"horizontalRule\")(text2, options, globals);\n        text2 = showdown2.subParser(\"lists\")(text2, options, globals);\n        text2 = showdown2.subParser(\"codeBlocks\")(text2, options, globals);\n        text2 = showdown2.subParser(\"tables\")(text2, options, globals);\n        text2 = showdown2.subParser(\"hashHTMLBlocks\")(text2, options, globals);\n        text2 = showdown2.subParser(\"paragraphs\")(text2, options, globals);\n        text2 = globals.converter._dispatch(\"blockGamut.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"blockQuotes\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"blockQuotes.before\", text2, options, globals);\n        text2 = text2 + \"\\n\\n\";\n        var rgx = /(^ {0,3}>[ \\t]?.+\\n(.+\\n)*\\n*)+/gm;\n        if (options.splitAdjacentBlockquotes) {\n          rgx = /^ {0,3}>[\\s\\S]*?(?:\\n\\n)/gm;\n        }\n        text2 = text2.replace(rgx, function(bq) {\n          bq = bq.replace(/^[ \\t]*>[ \\t]?/gm, \"\");\n          bq = bq.replace(/¨0/g, \"\");\n          bq = bq.replace(/^[ \\t]+$/gm, \"\");\n          bq = showdown2.subParser(\"githubCodeBlocks\")(bq, options, globals);\n          bq = showdown2.subParser(\"blockGamut\")(bq, options, globals);\n          bq = bq.replace(/(^|\\n)/g, \"$1  \");\n          bq = bq.replace(/(\\s*<pre>[^\\r]+?<\\/pre>)/gm, function(wholeMatch, m1) {\n            var pre = m1;\n            pre = pre.replace(/^  /mg, \"¨0\");\n            pre = pre.replace(/¨0/g, \"\");\n            return pre;\n          });\n          return showdown2.subParser(\"hashBlock\")(\"<blockquote>\\n\" + bq + \"\\n</blockquote>\", options, globals);\n        });\n        text2 = globals.converter._dispatch(\"blockQuotes.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"codeBlocks\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"codeBlocks.before\", text2, options, globals);\n        text2 += \"¨0\";\n        var pattern = /(?:\\n\\n|^)((?:(?:[ ]{4}|\\t).*\\n+)+)(\\n*[ ]{0,3}[^ \\t\\n]|(?=¨0))/g;\n        text2 = text2.replace(pattern, function(wholeMatch, m1, m2) {\n          var codeblock = m1, nextChar = m2, end = \"\\n\";\n          codeblock = showdown2.subParser(\"outdent\")(codeblock, options, globals);\n          codeblock = showdown2.subParser(\"encodeCode\")(codeblock, options, globals);\n          codeblock = showdown2.subParser(\"detab\")(codeblock, options, globals);\n          codeblock = codeblock.replace(/^\\n+/g, \"\");\n          codeblock = codeblock.replace(/\\n+$/g, \"\");\n          if (options.omitExtraWLInCodeBlocks) {\n            end = \"\";\n          }\n          codeblock = \"<pre><code>\" + codeblock + end + \"</code></pre>\";\n          return showdown2.subParser(\"hashBlock\")(codeblock, options, globals) + nextChar;\n        });\n        text2 = text2.replace(/¨0/, \"\");\n        text2 = globals.converter._dispatch(\"codeBlocks.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"codeSpans\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"codeSpans.before\", text2, options, globals);\n        if (typeof text2 === \"undefined\") {\n          text2 = \"\";\n        }\n        text2 = text2.replace(\n          /(^|[^\\\\])(`+)([^\\r]*?[^`])\\2(?!`)/gm,\n          function(wholeMatch, m1, m2, m3) {\n            var c2 = m3;\n            c2 = c2.replace(/^([ \\t]*)/g, \"\");\n            c2 = c2.replace(/[ \\t]*$/g, \"\");\n            c2 = showdown2.subParser(\"encodeCode\")(c2, options, globals);\n            c2 = m1 + \"<code>\" + c2 + \"</code>\";\n            c2 = showdown2.subParser(\"hashHTMLSpans\")(c2, options, globals);\n            return c2;\n          }\n        );\n        text2 = globals.converter._dispatch(\"codeSpans.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"completeHTMLDocument\", function(text2, options, globals) {\n        if (!options.completeHTMLDocument) {\n          return text2;\n        }\n        text2 = globals.converter._dispatch(\"completeHTMLDocument.before\", text2, options, globals);\n        var doctype = \"html\", doctypeParsed = \"<!DOCTYPE HTML>\\n\", title = \"\", charset = '<meta charset=\"utf-8\">\\n', lang = \"\", metadata = \"\";\n        if (typeof globals.metadata.parsed.doctype !== \"undefined\") {\n          doctypeParsed = \"<!DOCTYPE \" + globals.metadata.parsed.doctype + \">\\n\";\n          doctype = globals.metadata.parsed.doctype.toString().toLowerCase();\n          if (doctype === \"html\" || doctype === \"html5\") {\n            charset = '<meta charset=\"utf-8\">';\n          }\n        }\n        for (var meta in globals.metadata.parsed) {\n          if (globals.metadata.parsed.hasOwnProperty(meta)) {\n            switch (meta.toLowerCase()) {\n              case \"doctype\":\n                break;\n              case \"title\":\n                title = \"<title>\" + globals.metadata.parsed.title + \"</title>\\n\";\n                break;\n              case \"charset\":\n                if (doctype === \"html\" || doctype === \"html5\") {\n                  charset = '<meta charset=\"' + globals.metadata.parsed.charset + '\">\\n';\n                } else {\n                  charset = '<meta name=\"charset\" content=\"' + globals.metadata.parsed.charset + '\">\\n';\n                }\n                break;\n              case \"language\":\n              case \"lang\":\n                lang = ' lang=\"' + globals.metadata.parsed[meta] + '\"';\n                metadata += '<meta name=\"' + meta + '\" content=\"' + globals.metadata.parsed[meta] + '\">\\n';\n                break;\n              default:\n                metadata += '<meta name=\"' + meta + '\" content=\"' + globals.metadata.parsed[meta] + '\">\\n';\n            }\n          }\n        }\n        text2 = doctypeParsed + \"<html\" + lang + \">\\n<head>\\n\" + title + charset + metadata + \"</head>\\n<body>\\n\" + text2.trim() + \"\\n</body>\\n</html>\";\n        text2 = globals.converter._dispatch(\"completeHTMLDocument.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"detab\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"detab.before\", text2, options, globals);\n        text2 = text2.replace(/\\t(?=\\t)/g, \"    \");\n        text2 = text2.replace(/\\t/g, \"¨A¨B\");\n        text2 = text2.replace(/¨B(.+?)¨A/g, function(wholeMatch, m1) {\n          var leadingText = m1, numSpaces = 4 - leadingText.length % 4;\n          for (var i3 = 0; i3 < numSpaces; i3++) {\n            leadingText += \" \";\n          }\n          return leadingText;\n        });\n        text2 = text2.replace(/¨A/g, \"    \");\n        text2 = text2.replace(/¨B/g, \"\");\n        text2 = globals.converter._dispatch(\"detab.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"ellipsis\", function(text2, options, globals) {\n        if (!options.ellipsis) {\n          return text2;\n        }\n        text2 = globals.converter._dispatch(\"ellipsis.before\", text2, options, globals);\n        text2 = text2.replace(/\\.\\.\\./g, \"…\");\n        text2 = globals.converter._dispatch(\"ellipsis.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"emoji\", function(text2, options, globals) {\n        if (!options.emoji) {\n          return text2;\n        }\n        text2 = globals.converter._dispatch(\"emoji.before\", text2, options, globals);\n        var emojiRgx = /:([\\S]+?):/g;\n        text2 = text2.replace(emojiRgx, function(wm, emojiCode) {\n          if (showdown2.helper.emojis.hasOwnProperty(emojiCode)) {\n            return showdown2.helper.emojis[emojiCode];\n          }\n          return wm;\n        });\n        text2 = globals.converter._dispatch(\"emoji.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"encodeAmpsAndAngles\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"encodeAmpsAndAngles.before\", text2, options, globals);\n        text2 = text2.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\\w+);)/g, \"&amp;\");\n        text2 = text2.replace(/<(?![a-z\\/?$!])/gi, \"&lt;\");\n        text2 = text2.replace(/</g, \"&lt;\");\n        text2 = text2.replace(/>/g, \"&gt;\");\n        text2 = globals.converter._dispatch(\"encodeAmpsAndAngles.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"encodeBackslashEscapes\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"encodeBackslashEscapes.before\", text2, options, globals);\n        text2 = text2.replace(/\\\\(\\\\)/g, showdown2.helper.escapeCharactersCallback);\n        text2 = text2.replace(/\\\\([`*_{}\\[\\]()>#+.!~=|:-])/g, showdown2.helper.escapeCharactersCallback);\n        text2 = globals.converter._dispatch(\"encodeBackslashEscapes.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"encodeCode\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"encodeCode.before\", text2, options, globals);\n        text2 = text2.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/([*_{}\\[\\]\\\\=~-])/g, showdown2.helper.escapeCharactersCallback);\n        text2 = globals.converter._dispatch(\"encodeCode.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"escapeSpecialCharsWithinTagAttributes\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"escapeSpecialCharsWithinTagAttributes.before\", text2, options, globals);\n        var tags = /<\\/?[a-z\\d_:-]+(?:[\\s]+[\\s\\S]+?)?>/gi, comments = /<!(--(?:(?:[^>-]|-[^>])(?:[^-]|-[^-])*)--)>/gi;\n        text2 = text2.replace(tags, function(wholeMatch) {\n          return wholeMatch.replace(/(.)<\\/?code>(?=.)/g, \"$1`\").replace(/([\\\\`*_~=|])/g, showdown2.helper.escapeCharactersCallback);\n        });\n        text2 = text2.replace(comments, function(wholeMatch) {\n          return wholeMatch.replace(/([\\\\`*_~=|])/g, showdown2.helper.escapeCharactersCallback);\n        });\n        text2 = globals.converter._dispatch(\"escapeSpecialCharsWithinTagAttributes.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"githubCodeBlocks\", function(text2, options, globals) {\n        if (!options.ghCodeBlocks) {\n          return text2;\n        }\n        text2 = globals.converter._dispatch(\"githubCodeBlocks.before\", text2, options, globals);\n        text2 += \"¨0\";\n        text2 = text2.replace(/(?:^|\\n)(?: {0,3})(```+|~~~+)(?: *)([^\\s`~]*)\\n([\\s\\S]*?)\\n(?: {0,3})\\1/g, function(wholeMatch, delim, language, codeblock) {\n          var end = options.omitExtraWLInCodeBlocks ? \"\" : \"\\n\";\n          codeblock = showdown2.subParser(\"encodeCode\")(codeblock, options, globals);\n          codeblock = showdown2.subParser(\"detab\")(codeblock, options, globals);\n          codeblock = codeblock.replace(/^\\n+/g, \"\");\n          codeblock = codeblock.replace(/\\n+$/g, \"\");\n          codeblock = \"<pre><code\" + (language ? ' class=\"' + language + \" language-\" + language + '\"' : \"\") + \">\" + codeblock + end + \"</code></pre>\";\n          codeblock = showdown2.subParser(\"hashBlock\")(codeblock, options, globals);\n          return \"\\n\\n¨G\" + (globals.ghCodeBlocks.push({ text: wholeMatch, codeblock }) - 1) + \"G\\n\\n\";\n        });\n        text2 = text2.replace(/¨0/, \"\");\n        return globals.converter._dispatch(\"githubCodeBlocks.after\", text2, options, globals);\n      });\n      showdown2.subParser(\"hashBlock\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"hashBlock.before\", text2, options, globals);\n        text2 = text2.replace(/(^\\n+|\\n+$)/g, \"\");\n        text2 = \"\\n\\n¨K\" + (globals.gHtmlBlocks.push(text2) - 1) + \"K\\n\\n\";\n        text2 = globals.converter._dispatch(\"hashBlock.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"hashCodeTags\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"hashCodeTags.before\", text2, options, globals);\n        var repFunc = function(wholeMatch, match3, left, right) {\n          var codeblock = left + showdown2.subParser(\"encodeCode\")(match3, options, globals) + right;\n          return \"¨C\" + (globals.gHtmlSpans.push(codeblock) - 1) + \"C\";\n        };\n        text2 = showdown2.helper.replaceRecursiveRegExp(text2, repFunc, \"<code\\\\b[^>]*>\", \"</code>\", \"gim\");\n        text2 = globals.converter._dispatch(\"hashCodeTags.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"hashElement\", function(text2, options, globals) {\n        return function(wholeMatch, m1) {\n          var blockText = m1;\n          blockText = blockText.replace(/\\n\\n/g, \"\\n\");\n          blockText = blockText.replace(/^\\n/, \"\");\n          blockText = blockText.replace(/\\n+$/g, \"\");\n          blockText = \"\\n\\n¨K\" + (globals.gHtmlBlocks.push(blockText) - 1) + \"K\\n\\n\";\n          return blockText;\n        };\n      });\n      showdown2.subParser(\"hashHTMLBlocks\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"hashHTMLBlocks.before\", text2, options, globals);\n        var blockTags = [\n          \"pre\",\n          \"div\",\n          \"h1\",\n          \"h2\",\n          \"h3\",\n          \"h4\",\n          \"h5\",\n          \"h6\",\n          \"blockquote\",\n          \"table\",\n          \"dl\",\n          \"ol\",\n          \"ul\",\n          \"script\",\n          \"noscript\",\n          \"form\",\n          \"fieldset\",\n          \"iframe\",\n          \"math\",\n          \"style\",\n          \"section\",\n          \"header\",\n          \"footer\",\n          \"nav\",\n          \"article\",\n          \"aside\",\n          \"address\",\n          \"audio\",\n          \"canvas\",\n          \"figure\",\n          \"hgroup\",\n          \"output\",\n          \"video\",\n          \"p\"\n        ], repFunc = function(wholeMatch, match3, left, right) {\n          var txt = wholeMatch;\n          if (left.search(/\\bmarkdown\\b/) !== -1) {\n            txt = left + globals.converter.makeHtml(match3) + right;\n          }\n          return \"\\n\\n¨K\" + (globals.gHtmlBlocks.push(txt) - 1) + \"K\\n\\n\";\n        };\n        if (options.backslashEscapesHTMLTags) {\n          text2 = text2.replace(/\\\\<(\\/?[^>]+?)>/g, function(wm, inside) {\n            return \"&lt;\" + inside + \"&gt;\";\n          });\n        }\n        for (var i3 = 0; i3 < blockTags.length; ++i3) {\n          var opTagPos, rgx1 = new RegExp(\"^ {0,3}(<\" + blockTags[i3] + \"\\\\b[^>]*>)\", \"im\"), patLeft = \"<\" + blockTags[i3] + \"\\\\b[^>]*>\", patRight = \"</\" + blockTags[i3] + \">\";\n          while ((opTagPos = showdown2.helper.regexIndexOf(text2, rgx1)) !== -1) {\n            var subTexts = showdown2.helper.splitAtIndex(text2, opTagPos), newSubText1 = showdown2.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, \"im\");\n            if (newSubText1 === subTexts[1]) {\n              break;\n            }\n            text2 = subTexts[0].concat(newSubText1);\n          }\n        }\n        text2 = text2.replace(\n          /(\\n {0,3}(<(hr)\\b([^<>])*?\\/?>)[ \\t]*(?=\\n{2,}))/g,\n          showdown2.subParser(\"hashElement\")(text2, options, globals)\n        );\n        text2 = showdown2.helper.replaceRecursiveRegExp(text2, function(txt) {\n          return \"\\n\\n¨K\" + (globals.gHtmlBlocks.push(txt) - 1) + \"K\\n\\n\";\n        }, \"^ {0,3}<!--\", \"-->\", \"gm\");\n        text2 = text2.replace(\n          /(?:\\n\\n)( {0,3}(?:<([?%])[^\\r]*?\\2>)[ \\t]*(?=\\n{2,}))/g,\n          showdown2.subParser(\"hashElement\")(text2, options, globals)\n        );\n        text2 = globals.converter._dispatch(\"hashHTMLBlocks.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"hashHTMLSpans\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"hashHTMLSpans.before\", text2, options, globals);\n        function hashHTMLSpan(html) {\n          return \"¨C\" + (globals.gHtmlSpans.push(html) - 1) + \"C\";\n        }\n        text2 = text2.replace(/<[^>]+?\\/>/gi, function(wm) {\n          return hashHTMLSpan(wm);\n        });\n        text2 = text2.replace(/<([^>]+?)>[\\s\\S]*?<\\/\\1>/g, function(wm) {\n          return hashHTMLSpan(wm);\n        });\n        text2 = text2.replace(/<([^>]+?)\\s[^>]+?>[\\s\\S]*?<\\/\\1>/g, function(wm) {\n          return hashHTMLSpan(wm);\n        });\n        text2 = text2.replace(/<[^>]+?>/gi, function(wm) {\n          return hashHTMLSpan(wm);\n        });\n        text2 = globals.converter._dispatch(\"hashHTMLSpans.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"unhashHTMLSpans\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"unhashHTMLSpans.before\", text2, options, globals);\n        for (var i3 = 0; i3 < globals.gHtmlSpans.length; ++i3) {\n          var repText = globals.gHtmlSpans[i3], limit = 0;\n          while (/¨C(\\d+)C/.test(repText)) {\n            var num = RegExp.$1;\n            repText = repText.replace(\"¨C\" + num + \"C\", globals.gHtmlSpans[num]);\n            if (limit === 10) {\n              console.error(\"maximum nesting of 10 spans reached!!!\");\n              break;\n            }\n            ++limit;\n          }\n          text2 = text2.replace(\"¨C\" + i3 + \"C\", repText);\n        }\n        text2 = globals.converter._dispatch(\"unhashHTMLSpans.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"hashPreCodeTags\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"hashPreCodeTags.before\", text2, options, globals);\n        var repFunc = function(wholeMatch, match3, left, right) {\n          var codeblock = left + showdown2.subParser(\"encodeCode\")(match3, options, globals) + right;\n          return \"\\n\\n¨G\" + (globals.ghCodeBlocks.push({ text: wholeMatch, codeblock }) - 1) + \"G\\n\\n\";\n        };\n        text2 = showdown2.helper.replaceRecursiveRegExp(text2, repFunc, \"^ {0,3}<pre\\\\b[^>]*>\\\\s*<code\\\\b[^>]*>\", \"^ {0,3}</code>\\\\s*</pre>\", \"gim\");\n        text2 = globals.converter._dispatch(\"hashPreCodeTags.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"headers\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"headers.before\", text2, options, globals);\n        var headerLevelStart = isNaN(parseInt(options.headerLevelStart)) ? 1 : parseInt(options.headerLevelStart), setextRegexH1 = options.smoothLivePreview ? /^(.+)[ \\t]*\\n={2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n=+[ \\t]*\\n+/gm, setextRegexH2 = options.smoothLivePreview ? /^(.+)[ \\t]*\\n-{2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n-+[ \\t]*\\n+/gm;\n        text2 = text2.replace(setextRegexH1, function(wholeMatch, m1) {\n          var spanGamut = showdown2.subParser(\"spanGamut\")(m1, options, globals), hID = options.noHeaderId ? \"\" : ' id=\"' + headerId(m1) + '\"', hLevel = headerLevelStart, hashBlock = \"<h\" + hLevel + hID + \">\" + spanGamut + \"</h\" + hLevel + \">\";\n          return showdown2.subParser(\"hashBlock\")(hashBlock, options, globals);\n        });\n        text2 = text2.replace(setextRegexH2, function(matchFound, m1) {\n          var spanGamut = showdown2.subParser(\"spanGamut\")(m1, options, globals), hID = options.noHeaderId ? \"\" : ' id=\"' + headerId(m1) + '\"', hLevel = headerLevelStart + 1, hashBlock = \"<h\" + hLevel + hID + \">\" + spanGamut + \"</h\" + hLevel + \">\";\n          return showdown2.subParser(\"hashBlock\")(hashBlock, options, globals);\n        });\n        var atxStyle = options.requireSpaceBeforeHeadingText ? /^(#{1,6})[ \\t]+(.+?)[ \\t]*#*\\n+/gm : /^(#{1,6})[ \\t]*(.+?)[ \\t]*#*\\n+/gm;\n        text2 = text2.replace(atxStyle, function(wholeMatch, m1, m2) {\n          var hText = m2;\n          if (options.customizedHeaderId) {\n            hText = m2.replace(/\\s?\\{([^{]+?)}\\s*$/, \"\");\n          }\n          var span = showdown2.subParser(\"spanGamut\")(hText, options, globals), hID = options.noHeaderId ? \"\" : ' id=\"' + headerId(m2) + '\"', hLevel = headerLevelStart - 1 + m1.length, header = \"<h\" + hLevel + hID + \">\" + span + \"</h\" + hLevel + \">\";\n          return showdown2.subParser(\"hashBlock\")(header, options, globals);\n        });\n        function headerId(m2) {\n          var title, prefix;\n          if (options.customizedHeaderId) {\n            var match3 = m2.match(/\\{([^{]+?)}\\s*$/);\n            if (match3 && match3[1]) {\n              m2 = match3[1];\n            }\n          }\n          title = m2;\n          if (showdown2.helper.isString(options.prefixHeaderId)) {\n            prefix = options.prefixHeaderId;\n          } else if (options.prefixHeaderId === true) {\n            prefix = \"section-\";\n          } else {\n            prefix = \"\";\n          }\n          if (!options.rawPrefixHeaderId) {\n            title = prefix + title;\n          }\n          if (options.ghCompatibleHeaderId) {\n            title = title.replace(/ /g, \"-\").replace(/&amp;/g, \"\").replace(/¨T/g, \"\").replace(/¨D/g, \"\").replace(/[&+$,\\/:;=?@\"#{}|^¨~\\[\\]`\\\\*)(%.!'<>]/g, \"\").toLowerCase();\n          } else if (options.rawHeaderId) {\n            title = title.replace(/ /g, \"-\").replace(/&amp;/g, \"&\").replace(/¨T/g, \"¨\").replace(/¨D/g, \"$\").replace(/[\"']/g, \"-\").toLowerCase();\n          } else {\n            title = title.replace(/[^\\w]/g, \"\").toLowerCase();\n          }\n          if (options.rawPrefixHeaderId) {\n            title = prefix + title;\n          }\n          if (globals.hashLinkCounts[title]) {\n            title = title + \"-\" + globals.hashLinkCounts[title]++;\n          } else {\n            globals.hashLinkCounts[title] = 1;\n          }\n          return title;\n        }\n        text2 = globals.converter._dispatch(\"headers.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"horizontalRule\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"horizontalRule.before\", text2, options, globals);\n        var key = showdown2.subParser(\"hashBlock\")(\"<hr />\", options, globals);\n        text2 = text2.replace(/^ {0,2}( ?-){3,}[ \\t]*$/gm, key);\n        text2 = text2.replace(/^ {0,2}( ?\\*){3,}[ \\t]*$/gm, key);\n        text2 = text2.replace(/^ {0,2}( ?_){3,}[ \\t]*$/gm, key);\n        text2 = globals.converter._dispatch(\"horizontalRule.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"images\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"images.before\", text2, options, globals);\n        var inlineRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<?([\\S]+?(?:\\([\\S]*?\\)[\\S]*?)?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g, crazyRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<([^>]*)>(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:(?:([\"'])([^\"]*?)\\6))?[ \\t]?\\)/g, base64RegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<?(data:.+?\\/.+?;base64,[A-Za-z0-9+/=\\n]+?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g, referenceRegExp = /!\\[([^\\]]*?)] ?(?:\\n *)?\\[([\\s\\S]*?)]()()()()()/g, refShortcutRegExp = /!\\[([^\\[\\]]+)]()()()()()/g;\n        function writeImageTagBase64(wholeMatch, altText, linkId, url2, width, height, m5, title) {\n          url2 = url2.replace(/\\s/g, \"\");\n          return writeImageTag(wholeMatch, altText, linkId, url2, width, height, m5, title);\n        }\n        function writeImageTag(wholeMatch, altText, linkId, url2, width, height, m5, title) {\n          var gUrls = globals.gUrls, gTitles = globals.gTitles, gDims = globals.gDimensions;\n          linkId = linkId.toLowerCase();\n          if (!title) {\n            title = \"\";\n          }\n          if (wholeMatch.search(/\\(<?\\s*>? ?(['\"].*['\"])?\\)$/m) > -1) {\n            url2 = \"\";\n          } else if (url2 === \"\" || url2 === null) {\n            if (linkId === \"\" || linkId === null) {\n              linkId = altText.toLowerCase().replace(/ ?\\n/g, \" \");\n            }\n            url2 = \"#\" + linkId;\n            if (!showdown2.helper.isUndefined(gUrls[linkId])) {\n              url2 = gUrls[linkId];\n              if (!showdown2.helper.isUndefined(gTitles[linkId])) {\n                title = gTitles[linkId];\n              }\n              if (!showdown2.helper.isUndefined(gDims[linkId])) {\n                width = gDims[linkId].width;\n                height = gDims[linkId].height;\n              }\n            } else {\n              return wholeMatch;\n            }\n          }\n          altText = altText.replace(/\"/g, \"&quot;\").replace(showdown2.helper.regexes.asteriskDashAndColon, showdown2.helper.escapeCharactersCallback);\n          url2 = url2.replace(showdown2.helper.regexes.asteriskDashAndColon, showdown2.helper.escapeCharactersCallback);\n          var result = '<img src=\"' + url2 + '\" alt=\"' + altText + '\"';\n          if (title && showdown2.helper.isString(title)) {\n            title = title.replace(/\"/g, \"&quot;\").replace(showdown2.helper.regexes.asteriskDashAndColon, showdown2.helper.escapeCharactersCallback);\n            result += ' title=\"' + title + '\"';\n          }\n          if (width && height) {\n            width = width === \"*\" ? \"auto\" : width;\n            height = height === \"*\" ? \"auto\" : height;\n            result += ' width=\"' + width + '\"';\n            result += ' height=\"' + height + '\"';\n          }\n          result += \" />\";\n          return result;\n        }\n        text2 = text2.replace(referenceRegExp, writeImageTag);\n        text2 = text2.replace(base64RegExp, writeImageTagBase64);\n        text2 = text2.replace(crazyRegExp, writeImageTag);\n        text2 = text2.replace(inlineRegExp, writeImageTag);\n        text2 = text2.replace(refShortcutRegExp, writeImageTag);\n        text2 = globals.converter._dispatch(\"images.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"italicsAndBold\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"italicsAndBold.before\", text2, options, globals);\n        function parseInside(txt, left, right) {\n          return left + txt + right;\n        }\n        if (options.literalMidWordUnderscores) {\n          text2 = text2.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function(wm, txt) {\n            return parseInside(txt, \"<strong><em>\", \"</em></strong>\");\n          });\n          text2 = text2.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function(wm, txt) {\n            return parseInside(txt, \"<strong>\", \"</strong>\");\n          });\n          text2 = text2.replace(/\\b_(\\S[\\s\\S]*?)_\\b/g, function(wm, txt) {\n            return parseInside(txt, \"<em>\", \"</em>\");\n          });\n        } else {\n          text2 = text2.replace(/___(\\S[\\s\\S]*?)___/g, function(wm, m2) {\n            return /\\S$/.test(m2) ? parseInside(m2, \"<strong><em>\", \"</em></strong>\") : wm;\n          });\n          text2 = text2.replace(/__(\\S[\\s\\S]*?)__/g, function(wm, m2) {\n            return /\\S$/.test(m2) ? parseInside(m2, \"<strong>\", \"</strong>\") : wm;\n          });\n          text2 = text2.replace(/_([^\\s_][\\s\\S]*?)_/g, function(wm, m2) {\n            return /\\S$/.test(m2) ? parseInside(m2, \"<em>\", \"</em>\") : wm;\n          });\n        }\n        if (options.literalMidWordAsterisks) {\n          text2 = text2.replace(/([^*]|^)\\B\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*\\B(?!\\*)/g, function(wm, lead, txt) {\n            return parseInside(txt, lead + \"<strong><em>\", \"</em></strong>\");\n          });\n          text2 = text2.replace(/([^*]|^)\\B\\*\\*(\\S[\\s\\S]*?)\\*\\*\\B(?!\\*)/g, function(wm, lead, txt) {\n            return parseInside(txt, lead + \"<strong>\", \"</strong>\");\n          });\n          text2 = text2.replace(/([^*]|^)\\B\\*(\\S[\\s\\S]*?)\\*\\B(?!\\*)/g, function(wm, lead, txt) {\n            return parseInside(txt, lead + \"<em>\", \"</em>\");\n          });\n        } else {\n          text2 = text2.replace(/\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*/g, function(wm, m2) {\n            return /\\S$/.test(m2) ? parseInside(m2, \"<strong><em>\", \"</em></strong>\") : wm;\n          });\n          text2 = text2.replace(/\\*\\*(\\S[\\s\\S]*?)\\*\\*/g, function(wm, m2) {\n            return /\\S$/.test(m2) ? parseInside(m2, \"<strong>\", \"</strong>\") : wm;\n          });\n          text2 = text2.replace(/\\*([^\\s*][\\s\\S]*?)\\*/g, function(wm, m2) {\n            return /\\S$/.test(m2) ? parseInside(m2, \"<em>\", \"</em>\") : wm;\n          });\n        }\n        text2 = globals.converter._dispatch(\"italicsAndBold.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"lists\", function(text2, options, globals) {\n        function processListItems(listStr, trimTrailing) {\n          globals.gListLevel++;\n          listStr = listStr.replace(/\\n{2,}$/, \"\\n\");\n          listStr += \"¨0\";\n          var rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0| {0,3}([*+-]|\\d+[.])[ \\t]+))/gm, isParagraphed = /\\n[ \\t]*\\n(?!¨0)/.test(listStr);\n          if (options.disableForced4SpacesIndentedSublists) {\n            rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0|\\2([*+-]|\\d+[.])[ \\t]+))/gm;\n          }\n          listStr = listStr.replace(rgx, function(wholeMatch, m1, m2, m3, m4, taskbtn, checked) {\n            checked = checked && checked.trim() !== \"\";\n            var item = showdown2.subParser(\"outdent\")(m4, options, globals), bulletStyle = \"\";\n            if (taskbtn && options.tasklists) {\n              bulletStyle = ' class=\"task-list-item\" style=\"list-style-type: none;\"';\n              item = item.replace(/^[ \\t]*\\[(x|X| )?]/m, function() {\n                var otp = '<input type=\"checkbox\" disabled style=\"margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;\"';\n                if (checked) {\n                  otp += \" checked\";\n                }\n                otp += \">\";\n                return otp;\n              });\n            }\n            item = item.replace(/^([-*+]|\\d\\.)[ \\t]+[\\S\\n ]*/g, function(wm2) {\n              return \"¨A\" + wm2;\n            });\n            if (m1 || item.search(/\\n{2,}/) > -1) {\n              item = showdown2.subParser(\"githubCodeBlocks\")(item, options, globals);\n              item = showdown2.subParser(\"blockGamut\")(item, options, globals);\n            } else {\n              item = showdown2.subParser(\"lists\")(item, options, globals);\n              item = item.replace(/\\n$/, \"\");\n              item = showdown2.subParser(\"hashHTMLBlocks\")(item, options, globals);\n              item = item.replace(/\\n\\n+/g, \"\\n\\n\");\n              if (isParagraphed) {\n                item = showdown2.subParser(\"paragraphs\")(item, options, globals);\n              } else {\n                item = showdown2.subParser(\"spanGamut\")(item, options, globals);\n              }\n            }\n            item = item.replace(\"¨A\", \"\");\n            item = \"<li\" + bulletStyle + \">\" + item + \"</li>\\n\";\n            return item;\n          });\n          listStr = listStr.replace(/¨0/g, \"\");\n          globals.gListLevel--;\n          if (trimTrailing) {\n            listStr = listStr.replace(/\\s+$/, \"\");\n          }\n          return listStr;\n        }\n        function styleStartNumber(list2, listType) {\n          if (listType === \"ol\") {\n            var res = list2.match(/^ *(\\d+)\\./);\n            if (res && res[1] !== \"1\") {\n              return ' start=\"' + res[1] + '\"';\n            }\n          }\n          return \"\";\n        }\n        function parseConsecutiveLists(list2, listType, trimTrailing) {\n          var olRgx = options.disableForced4SpacesIndentedSublists ? /^ ?\\d+\\.[ \\t]/gm : /^ {0,3}\\d+\\.[ \\t]/gm, ulRgx = options.disableForced4SpacesIndentedSublists ? /^ ?[*+-][ \\t]/gm : /^ {0,3}[*+-][ \\t]/gm, counterRxg = listType === \"ul\" ? olRgx : ulRgx, result = \"\";\n          if (list2.search(counterRxg) !== -1) {\n            (function parseCL(txt) {\n              var pos = txt.search(counterRxg), style2 = styleStartNumber(list2, listType);\n              if (pos !== -1) {\n                result += \"\\n\\n<\" + listType + style2 + \">\\n\" + processListItems(txt.slice(0, pos), !!trimTrailing) + \"</\" + listType + \">\\n\";\n                listType = listType === \"ul\" ? \"ol\" : \"ul\";\n                counterRxg = listType === \"ul\" ? olRgx : ulRgx;\n                parseCL(txt.slice(pos));\n              } else {\n                result += \"\\n\\n<\" + listType + style2 + \">\\n\" + processListItems(txt, !!trimTrailing) + \"</\" + listType + \">\\n\";\n              }\n            })(list2);\n          } else {\n            var style = styleStartNumber(list2, listType);\n            result = \"\\n\\n<\" + listType + style + \">\\n\" + processListItems(list2, !!trimTrailing) + \"</\" + listType + \">\\n\";\n          }\n          return result;\n        }\n        text2 = globals.converter._dispatch(\"lists.before\", text2, options, globals);\n        text2 += \"¨0\";\n        if (globals.gListLevel) {\n          text2 = text2.replace(\n            /^(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,\n            function(wholeMatch, list2, m2) {\n              var listType = m2.search(/[*+-]/g) > -1 ? \"ul\" : \"ol\";\n              return parseConsecutiveLists(list2, listType, true);\n            }\n          );\n        } else {\n          text2 = text2.replace(\n            /(\\n\\n|^\\n?)(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,\n            function(wholeMatch, m1, list2, m3) {\n              var listType = m3.search(/[*+-]/g) > -1 ? \"ul\" : \"ol\";\n              return parseConsecutiveLists(list2, listType, false);\n            }\n          );\n        }\n        text2 = text2.replace(/¨0/, \"\");\n        text2 = globals.converter._dispatch(\"lists.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"metadata\", function(text2, options, globals) {\n        if (!options.metadata) {\n          return text2;\n        }\n        text2 = globals.converter._dispatch(\"metadata.before\", text2, options, globals);\n        function parseMetadataContents(content) {\n          globals.metadata.raw = content;\n          content = content.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n          content = content.replace(/\\n {4}/g, \" \");\n          content.replace(/^([\\S ]+): +([\\s\\S]+?)$/gm, function(wm, key, value) {\n            globals.metadata.parsed[key] = value;\n            return \"\";\n          });\n        }\n        text2 = text2.replace(/^\\s*«««+(\\S*?)\\n([\\s\\S]+?)\\n»»»+\\n/, function(wholematch, format2, content) {\n          parseMetadataContents(content);\n          return \"¨M\";\n        });\n        text2 = text2.replace(/^\\s*---+(\\S*?)\\n([\\s\\S]+?)\\n---+\\n/, function(wholematch, format2, content) {\n          if (format2) {\n            globals.metadata.format = format2;\n          }\n          parseMetadataContents(content);\n          return \"¨M\";\n        });\n        text2 = text2.replace(/¨M/g, \"\");\n        text2 = globals.converter._dispatch(\"metadata.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"outdent\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"outdent.before\", text2, options, globals);\n        text2 = text2.replace(/^(\\t|[ ]{1,4})/gm, \"¨0\");\n        text2 = text2.replace(/¨0/g, \"\");\n        text2 = globals.converter._dispatch(\"outdent.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"paragraphs\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"paragraphs.before\", text2, options, globals);\n        text2 = text2.replace(/^\\n+/g, \"\");\n        text2 = text2.replace(/\\n+$/g, \"\");\n        var grafs = text2.split(/\\n{2,}/g), grafsOut = [], end = grafs.length;\n        for (var i3 = 0; i3 < end; i3++) {\n          var str = grafs[i3];\n          if (str.search(/¨(K|G)(\\d+)\\1/g) >= 0) {\n            grafsOut.push(str);\n          } else if (str.search(/\\S/) >= 0) {\n            str = showdown2.subParser(\"spanGamut\")(str, options, globals);\n            str = str.replace(/^([ \\t]*)/g, \"<p>\");\n            str += \"</p>\";\n            grafsOut.push(str);\n          }\n        }\n        end = grafsOut.length;\n        for (i3 = 0; i3 < end; i3++) {\n          var blockText = \"\", grafsOutIt = grafsOut[i3], codeFlag = false;\n          while (/¨(K|G)(\\d+)\\1/.test(grafsOutIt)) {\n            var delim = RegExp.$1, num = RegExp.$2;\n            if (delim === \"K\") {\n              blockText = globals.gHtmlBlocks[num];\n            } else {\n              if (codeFlag) {\n                blockText = showdown2.subParser(\"encodeCode\")(globals.ghCodeBlocks[num].text, options, globals);\n              } else {\n                blockText = globals.ghCodeBlocks[num].codeblock;\n              }\n            }\n            blockText = blockText.replace(/\\$/g, \"$$$$\");\n            grafsOutIt = grafsOutIt.replace(/(\\n\\n)?¨(K|G)\\d+\\2(\\n\\n)?/, blockText);\n            if (/^<pre\\b[^>]*>\\s*<code\\b[^>]*>/.test(grafsOutIt)) {\n              codeFlag = true;\n            }\n          }\n          grafsOut[i3] = grafsOutIt;\n        }\n        text2 = grafsOut.join(\"\\n\");\n        text2 = text2.replace(/^\\n+/g, \"\");\n        text2 = text2.replace(/\\n+$/g, \"\");\n        return globals.converter._dispatch(\"paragraphs.after\", text2, options, globals);\n      });\n      showdown2.subParser(\"runExtension\", function(ext, text2, options, globals) {\n        if (ext.filter) {\n          text2 = ext.filter(text2, globals.converter, options);\n        } else if (ext.regex) {\n          var re = ext.regex;\n          if (!(re instanceof RegExp)) {\n            re = new RegExp(re, \"g\");\n          }\n          text2 = text2.replace(re, ext.replace);\n        }\n        return text2;\n      });\n      showdown2.subParser(\"spanGamut\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"spanGamut.before\", text2, options, globals);\n        text2 = showdown2.subParser(\"codeSpans\")(text2, options, globals);\n        text2 = showdown2.subParser(\"escapeSpecialCharsWithinTagAttributes\")(text2, options, globals);\n        text2 = showdown2.subParser(\"encodeBackslashEscapes\")(text2, options, globals);\n        text2 = showdown2.subParser(\"images\")(text2, options, globals);\n        text2 = showdown2.subParser(\"anchors\")(text2, options, globals);\n        text2 = showdown2.subParser(\"autoLinks\")(text2, options, globals);\n        text2 = showdown2.subParser(\"simplifiedAutoLinks\")(text2, options, globals);\n        text2 = showdown2.subParser(\"emoji\")(text2, options, globals);\n        text2 = showdown2.subParser(\"underline\")(text2, options, globals);\n        text2 = showdown2.subParser(\"italicsAndBold\")(text2, options, globals);\n        text2 = showdown2.subParser(\"strikethrough\")(text2, options, globals);\n        text2 = showdown2.subParser(\"ellipsis\")(text2, options, globals);\n        text2 = showdown2.subParser(\"hashHTMLSpans\")(text2, options, globals);\n        text2 = showdown2.subParser(\"encodeAmpsAndAngles\")(text2, options, globals);\n        if (options.simpleLineBreaks) {\n          if (!/\\n\\n¨K/.test(text2)) {\n            text2 = text2.replace(/\\n+/g, \"<br />\\n\");\n          }\n        } else {\n          text2 = text2.replace(/  +\\n/g, \"<br />\\n\");\n        }\n        text2 = globals.converter._dispatch(\"spanGamut.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"strikethrough\", function(text2, options, globals) {\n        function parseInside(txt) {\n          if (options.simplifiedAutoLink) {\n            txt = showdown2.subParser(\"simplifiedAutoLinks\")(txt, options, globals);\n          }\n          return \"<del>\" + txt + \"</del>\";\n        }\n        if (options.strikethrough) {\n          text2 = globals.converter._dispatch(\"strikethrough.before\", text2, options, globals);\n          text2 = text2.replace(/(?:~){2}([\\s\\S]+?)(?:~){2}/g, function(wm, txt) {\n            return parseInside(txt);\n          });\n          text2 = globals.converter._dispatch(\"strikethrough.after\", text2, options, globals);\n        }\n        return text2;\n      });\n      showdown2.subParser(\"stripLinkDefinitions\", function(text2, options, globals) {\n        var regex2 = /^ {0,3}\\[([^\\]]+)]:[ \\t]*\\n?[ \\t]*<?([^>\\s]+)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n+|(?=¨0))/gm, base64Regex = /^ {0,3}\\[([^\\]]+)]:[ \\t]*\\n?[ \\t]*<?(data:.+?\\/.+?;base64,[A-Za-z0-9+/=\\n]+?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n\\n|(?=¨0)|(?=\\n\\[))/gm;\n        text2 += \"¨0\";\n        var replaceFunc = function(wholeMatch, linkId, url2, width, height, blankLines, title) {\n          linkId = linkId.toLowerCase();\n          if (text2.toLowerCase().split(linkId).length - 1 < 2) {\n            return wholeMatch;\n          }\n          if (url2.match(/^data:.+?\\/.+?;base64,/)) {\n            globals.gUrls[linkId] = url2.replace(/\\s/g, \"\");\n          } else {\n            globals.gUrls[linkId] = showdown2.subParser(\"encodeAmpsAndAngles\")(url2, options, globals);\n          }\n          if (blankLines) {\n            return blankLines + title;\n          } else {\n            if (title) {\n              globals.gTitles[linkId] = title.replace(/\"|'/g, \"&quot;\");\n            }\n            if (options.parseImgDimensions && width && height) {\n              globals.gDimensions[linkId] = {\n                width,\n                height\n              };\n            }\n          }\n          return \"\";\n        };\n        text2 = text2.replace(base64Regex, replaceFunc);\n        text2 = text2.replace(regex2, replaceFunc);\n        text2 = text2.replace(/¨0/, \"\");\n        return text2;\n      });\n      showdown2.subParser(\"tables\", function(text2, options, globals) {\n        if (!options.tables) {\n          return text2;\n        }\n        var tableRgx = /^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm, singeColTblRgx = /^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm;\n        function parseStyles(sLine) {\n          if (/^:[ \\t]*--*$/.test(sLine)) {\n            return ' style=\"text-align:left;\"';\n          } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n            return ' style=\"text-align:right;\"';\n          } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n            return ' style=\"text-align:center;\"';\n          } else {\n            return \"\";\n          }\n        }\n        function parseHeaders(header, style) {\n          var id = \"\";\n          header = header.trim();\n          if (options.tablesHeaderId || options.tableHeaderId) {\n            id = ' id=\"' + header.replace(/ /g, \"_\").toLowerCase() + '\"';\n          }\n          header = showdown2.subParser(\"spanGamut\")(header, options, globals);\n          return \"<th\" + id + style + \">\" + header + \"</th>\\n\";\n        }\n        function parseCells(cell, style) {\n          var subText = showdown2.subParser(\"spanGamut\")(cell, options, globals);\n          return \"<td\" + style + \">\" + subText + \"</td>\\n\";\n        }\n        function buildTable(headers, cells) {\n          var tb = \"<table>\\n<thead>\\n<tr>\\n\", tblLgn = headers.length;\n          for (var i3 = 0; i3 < tblLgn; ++i3) {\n            tb += headers[i3];\n          }\n          tb += \"</tr>\\n</thead>\\n<tbody>\\n\";\n          for (i3 = 0; i3 < cells.length; ++i3) {\n            tb += \"<tr>\\n\";\n            for (var ii = 0; ii < tblLgn; ++ii) {\n              tb += cells[i3][ii];\n            }\n            tb += \"</tr>\\n\";\n          }\n          tb += \"</tbody>\\n</table>\\n\";\n          return tb;\n        }\n        function parseTable(rawTable) {\n          var i3, tableLines = rawTable.split(\"\\n\");\n          for (i3 = 0; i3 < tableLines.length; ++i3) {\n            if (/^ {0,3}\\|/.test(tableLines[i3])) {\n              tableLines[i3] = tableLines[i3].replace(/^ {0,3}\\|/, \"\");\n            }\n            if (/\\|[ \\t]*$/.test(tableLines[i3])) {\n              tableLines[i3] = tableLines[i3].replace(/\\|[ \\t]*$/, \"\");\n            }\n            tableLines[i3] = showdown2.subParser(\"codeSpans\")(tableLines[i3], options, globals);\n          }\n          var rawHeaders = tableLines[0].split(\"|\").map(function(s2) {\n            return s2.trim();\n          }), rawStyles = tableLines[1].split(\"|\").map(function(s2) {\n            return s2.trim();\n          }), rawCells = [], headers = [], styles = [], cells = [];\n          tableLines.shift();\n          tableLines.shift();\n          for (i3 = 0; i3 < tableLines.length; ++i3) {\n            if (tableLines[i3].trim() === \"\") {\n              continue;\n            }\n            rawCells.push(\n              tableLines[i3].split(\"|\").map(function(s2) {\n                return s2.trim();\n              })\n            );\n          }\n          if (rawHeaders.length < rawStyles.length) {\n            return rawTable;\n          }\n          for (i3 = 0; i3 < rawStyles.length; ++i3) {\n            styles.push(parseStyles(rawStyles[i3]));\n          }\n          for (i3 = 0; i3 < rawHeaders.length; ++i3) {\n            if (showdown2.helper.isUndefined(styles[i3])) {\n              styles[i3] = \"\";\n            }\n            headers.push(parseHeaders(rawHeaders[i3], styles[i3]));\n          }\n          for (i3 = 0; i3 < rawCells.length; ++i3) {\n            var row = [];\n            for (var ii = 0; ii < headers.length; ++ii) {\n              if (showdown2.helper.isUndefined(rawCells[i3][ii])) ;\n              row.push(parseCells(rawCells[i3][ii], styles[ii]));\n            }\n            cells.push(row);\n          }\n          return buildTable(headers, cells);\n        }\n        text2 = globals.converter._dispatch(\"tables.before\", text2, options, globals);\n        text2 = text2.replace(/\\\\(\\|)/g, showdown2.helper.escapeCharactersCallback);\n        text2 = text2.replace(tableRgx, parseTable);\n        text2 = text2.replace(singeColTblRgx, parseTable);\n        text2 = globals.converter._dispatch(\"tables.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"underline\", function(text2, options, globals) {\n        if (!options.underline) {\n          return text2;\n        }\n        text2 = globals.converter._dispatch(\"underline.before\", text2, options, globals);\n        if (options.literalMidWordUnderscores) {\n          text2 = text2.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function(wm, txt) {\n            return \"<u>\" + txt + \"</u>\";\n          });\n          text2 = text2.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function(wm, txt) {\n            return \"<u>\" + txt + \"</u>\";\n          });\n        } else {\n          text2 = text2.replace(/___(\\S[\\s\\S]*?)___/g, function(wm, m2) {\n            return /\\S$/.test(m2) ? \"<u>\" + m2 + \"</u>\" : wm;\n          });\n          text2 = text2.replace(/__(\\S[\\s\\S]*?)__/g, function(wm, m2) {\n            return /\\S$/.test(m2) ? \"<u>\" + m2 + \"</u>\" : wm;\n          });\n        }\n        text2 = text2.replace(/(_)/g, showdown2.helper.escapeCharactersCallback);\n        text2 = globals.converter._dispatch(\"underline.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"unescapeSpecialChars\", function(text2, options, globals) {\n        text2 = globals.converter._dispatch(\"unescapeSpecialChars.before\", text2, options, globals);\n        text2 = text2.replace(/¨E(\\d+)E/g, function(wholeMatch, m1) {\n          var charCodeToReplace = parseInt(m1);\n          return String.fromCharCode(charCodeToReplace);\n        });\n        text2 = globals.converter._dispatch(\"unescapeSpecialChars.after\", text2, options, globals);\n        return text2;\n      });\n      showdown2.subParser(\"makeMarkdown.blockquote\", function(node, globals) {\n        var txt = \"\";\n        if (node.hasChildNodes()) {\n          var children = node.childNodes, childrenLength = children.length;\n          for (var i3 = 0; i3 < childrenLength; ++i3) {\n            var innerTxt = showdown2.subParser(\"makeMarkdown.node\")(children[i3], globals);\n            if (innerTxt === \"\") {\n              continue;\n            }\n            txt += innerTxt;\n          }\n        }\n        txt = txt.trim();\n        txt = \"> \" + txt.split(\"\\n\").join(\"\\n> \");\n        return txt;\n      });\n      showdown2.subParser(\"makeMarkdown.codeBlock\", function(node, globals) {\n        var lang = node.getAttribute(\"language\"), num = node.getAttribute(\"precodenum\");\n        return \"```\" + lang + \"\\n\" + globals.preList[num] + \"\\n```\";\n      });\n      showdown2.subParser(\"makeMarkdown.codeSpan\", function(node) {\n        return \"`\" + node.innerHTML + \"`\";\n      });\n      showdown2.subParser(\"makeMarkdown.emphasis\", function(node, globals) {\n        var txt = \"\";\n        if (node.hasChildNodes()) {\n          txt += \"*\";\n          var children = node.childNodes, childrenLength = children.length;\n          for (var i3 = 0; i3 < childrenLength; ++i3) {\n            txt += showdown2.subParser(\"makeMarkdown.node\")(children[i3], globals);\n          }\n          txt += \"*\";\n        }\n        return txt;\n      });\n      showdown2.subParser(\"makeMarkdown.header\", function(node, globals, headerLevel) {\n        var headerMark = new Array(headerLevel + 1).join(\"#\"), txt = \"\";\n        if (node.hasChildNodes()) {\n          txt = headerMark + \" \";\n          var children = node.childNodes, childrenLength = children.length;\n          for (var i3 = 0; i3 < childrenLength; ++i3) {\n            txt += showdown2.subParser(\"makeMarkdown.node\")(children[i3], globals);\n          }\n        }\n        return txt;\n      });\n      showdown2.subParser(\"makeMarkdown.hr\", function() {\n        return \"---\";\n      });\n      showdown2.subParser(\"makeMarkdown.image\", function(node) {\n        var txt = \"\";\n        if (node.hasAttribute(\"src\")) {\n          txt += \"![\" + node.getAttribute(\"alt\") + \"](\";\n          txt += \"<\" + node.getAttribute(\"src\") + \">\";\n          if (node.hasAttribute(\"width\") && node.hasAttribute(\"height\")) {\n            txt += \" =\" + node.getAttribute(\"width\") + \"x\" + node.getAttribute(\"height\");\n          }\n          if (node.hasAttribute(\"title\")) {\n            txt += ' \"' + node.getAttribute(\"title\") + '\"';\n          }\n          txt += \")\";\n        }\n        return txt;\n      });\n      showdown2.subParser(\"makeMarkdown.links\", function(node, globals) {\n        var txt = \"\";\n        if (node.hasChildNodes() && node.hasAttribute(\"href\")) {\n          var children = node.childNodes, childrenLength = children.length;\n          txt = \"[\";\n          for (var i3 = 0; i3 < childrenLength; ++i3) {\n            txt += showdown2.subParser(\"makeMarkdown.node\")(children[i3], globals);\n          }\n          txt += \"](\";\n          txt += \"<\" + node.getAttribute(\"href\") + \">\";\n          if (node.hasAttribute(\"title\")) {\n            txt += ' \"' + node.getAttribute(\"title\") + '\"';\n          }\n          txt += \")\";\n        }\n        return txt;\n      });\n      showdown2.subParser(\"makeMarkdown.list\", function(node, globals, type) {\n        var txt = \"\";\n        if (!node.hasChildNodes()) {\n          return \"\";\n        }\n        var listItems = node.childNodes, listItemsLenght = listItems.length, listNum = node.getAttribute(\"start\") || 1;\n        for (var i3 = 0; i3 < listItemsLenght; ++i3) {\n          if (typeof listItems[i3].tagName === \"undefined\" || listItems[i3].tagName.toLowerCase() !== \"li\") {\n            continue;\n          }\n          var bullet = \"\";\n          if (type === \"ol\") {\n            bullet = listNum.toString() + \". \";\n          } else {\n            bullet = \"- \";\n          }\n          txt += bullet + showdown2.subParser(\"makeMarkdown.listItem\")(listItems[i3], globals);\n          ++listNum;\n        }\n        txt += \"\\n<!-- -->\\n\";\n        return txt.trim();\n      });\n      showdown2.subParser(\"makeMarkdown.listItem\", function(node, globals) {\n        var listItemTxt = \"\";\n        var children = node.childNodes, childrenLenght = children.length;\n        for (var i3 = 0; i3 < childrenLenght; ++i3) {\n          listItemTxt += showdown2.subParser(\"makeMarkdown.node\")(children[i3], globals);\n        }\n        if (!/\\n$/.test(listItemTxt)) {\n          listItemTxt += \"\\n\";\n        } else {\n          listItemTxt = listItemTxt.split(\"\\n\").join(\"\\n    \").replace(/^ {4}$/gm, \"\").replace(/\\n\\n+/g, \"\\n\\n\");\n        }\n        return listItemTxt;\n      });\n      showdown2.subParser(\"makeMarkdown.node\", function(node, globals, spansOnly) {\n        spansOnly = spansOnly || false;\n        var txt = \"\";\n        if (node.nodeType === 3) {\n          return showdown2.subParser(\"makeMarkdown.txt\")(node, globals);\n        }\n        if (node.nodeType === 8) {\n          return \"<!--\" + node.data + \"-->\\n\\n\";\n        }\n        if (node.nodeType !== 1) {\n          return \"\";\n        }\n        var tagName = node.tagName.toLowerCase();\n        switch (tagName) {\n          //\n          // BLOCKS\n          //\n          case \"h1\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.header\")(node, globals, 1) + \"\\n\\n\";\n            }\n            break;\n          case \"h2\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.header\")(node, globals, 2) + \"\\n\\n\";\n            }\n            break;\n          case \"h3\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.header\")(node, globals, 3) + \"\\n\\n\";\n            }\n            break;\n          case \"h4\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.header\")(node, globals, 4) + \"\\n\\n\";\n            }\n            break;\n          case \"h5\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.header\")(node, globals, 5) + \"\\n\\n\";\n            }\n            break;\n          case \"h6\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.header\")(node, globals, 6) + \"\\n\\n\";\n            }\n            break;\n          case \"p\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.paragraph\")(node, globals) + \"\\n\\n\";\n            }\n            break;\n          case \"blockquote\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.blockquote\")(node, globals) + \"\\n\\n\";\n            }\n            break;\n          case \"hr\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.hr\")(node, globals) + \"\\n\\n\";\n            }\n            break;\n          case \"ol\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.list\")(node, globals, \"ol\") + \"\\n\\n\";\n            }\n            break;\n          case \"ul\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.list\")(node, globals, \"ul\") + \"\\n\\n\";\n            }\n            break;\n          case \"precode\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.codeBlock\")(node, globals) + \"\\n\\n\";\n            }\n            break;\n          case \"pre\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.pre\")(node, globals) + \"\\n\\n\";\n            }\n            break;\n          case \"table\":\n            if (!spansOnly) {\n              txt = showdown2.subParser(\"makeMarkdown.table\")(node, globals) + \"\\n\\n\";\n            }\n            break;\n          //\n          // SPANS\n          //\n          case \"code\":\n            txt = showdown2.subParser(\"makeMarkdown.codeSpan\")(node, globals);\n            break;\n          case \"em\":\n          case \"i\":\n            txt = showdown2.subParser(\"makeMarkdown.emphasis\")(node, globals);\n            break;\n          case \"strong\":\n          case \"b\":\n            txt = showdown2.subParser(\"makeMarkdown.strong\")(node, globals);\n            break;\n          case \"del\":\n            txt = showdown2.subParser(\"makeMarkdown.strikethrough\")(node, globals);\n            break;\n          case \"a\":\n            txt = showdown2.subParser(\"makeMarkdown.links\")(node, globals);\n            break;\n          case \"img\":\n            txt = showdown2.subParser(\"makeMarkdown.image\")(node, globals);\n            break;\n          default:\n            txt = node.outerHTML + \"\\n\\n\";\n        }\n        return txt;\n      });\n      showdown2.subParser(\"makeMarkdown.paragraph\", function(node, globals) {\n        var txt = \"\";\n        if (node.hasChildNodes()) {\n          var children = node.childNodes, childrenLength = children.length;\n          for (var i3 = 0; i3 < childrenLength; ++i3) {\n            txt += showdown2.subParser(\"makeMarkdown.node\")(children[i3], globals);\n          }\n        }\n        txt = txt.trim();\n        return txt;\n      });\n      showdown2.subParser(\"makeMarkdown.pre\", function(node, globals) {\n        var num = node.getAttribute(\"prenum\");\n        return \"<pre>\" + globals.preList[num] + \"</pre>\";\n      });\n      showdown2.subParser(\"makeMarkdown.strikethrough\", function(node, globals) {\n        var txt = \"\";\n        if (node.hasChildNodes()) {\n          txt += \"~~\";\n          var children = node.childNodes, childrenLength = children.length;\n          for (var i3 = 0; i3 < childrenLength; ++i3) {\n            txt += showdown2.subParser(\"makeMarkdown.node\")(children[i3], globals);\n          }\n          txt += \"~~\";\n        }\n        return txt;\n      });\n      showdown2.subParser(\"makeMarkdown.strong\", function(node, globals) {\n        var txt = \"\";\n        if (node.hasChildNodes()) {\n          txt += \"**\";\n          var children = node.childNodes, childrenLength = children.length;\n          for (var i3 = 0; i3 < childrenLength; ++i3) {\n            txt += showdown2.subParser(\"makeMarkdown.node\")(children[i3], globals);\n          }\n          txt += \"**\";\n        }\n        return txt;\n      });\n      showdown2.subParser(\"makeMarkdown.table\", function(node, globals) {\n        var txt = \"\", tableArray = [[], []], headings = node.querySelectorAll(\"thead>tr>th\"), rows = node.querySelectorAll(\"tbody>tr\"), i3, ii;\n        for (i3 = 0; i3 < headings.length; ++i3) {\n          var headContent = showdown2.subParser(\"makeMarkdown.tableCell\")(headings[i3], globals), allign = \"---\";\n          if (headings[i3].hasAttribute(\"style\")) {\n            var style = headings[i3].getAttribute(\"style\").toLowerCase().replace(/\\s/g, \"\");\n            switch (style) {\n              case \"text-align:left;\":\n                allign = \":---\";\n                break;\n              case \"text-align:right;\":\n                allign = \"---:\";\n                break;\n              case \"text-align:center;\":\n                allign = \":---:\";\n                break;\n            }\n          }\n          tableArray[0][i3] = headContent.trim();\n          tableArray[1][i3] = allign;\n        }\n        for (i3 = 0; i3 < rows.length; ++i3) {\n          var r3 = tableArray.push([]) - 1, cols = rows[i3].getElementsByTagName(\"td\");\n          for (ii = 0; ii < headings.length; ++ii) {\n            var cellContent = \" \";\n            if (typeof cols[ii] !== \"undefined\") {\n              cellContent = showdown2.subParser(\"makeMarkdown.tableCell\")(cols[ii], globals);\n            }\n            tableArray[r3].push(cellContent);\n          }\n        }\n        var cellSpacesCount = 3;\n        for (i3 = 0; i3 < tableArray.length; ++i3) {\n          for (ii = 0; ii < tableArray[i3].length; ++ii) {\n            var strLen = tableArray[i3][ii].length;\n            if (strLen > cellSpacesCount) {\n              cellSpacesCount = strLen;\n            }\n          }\n        }\n        for (i3 = 0; i3 < tableArray.length; ++i3) {\n          for (ii = 0; ii < tableArray[i3].length; ++ii) {\n            if (i3 === 1) {\n              if (tableArray[i3][ii].slice(-1) === \":\") {\n                tableArray[i3][ii] = showdown2.helper.padEnd(tableArray[i3][ii].slice(-1), cellSpacesCount - 1, \"-\") + \":\";\n              } else {\n                tableArray[i3][ii] = showdown2.helper.padEnd(tableArray[i3][ii], cellSpacesCount, \"-\");\n              }\n            } else {\n              tableArray[i3][ii] = showdown2.helper.padEnd(tableArray[i3][ii], cellSpacesCount);\n            }\n          }\n          txt += \"| \" + tableArray[i3].join(\" | \") + \" |\\n\";\n        }\n        return txt.trim();\n      });\n      showdown2.subParser(\"makeMarkdown.tableCell\", function(node, globals) {\n        var txt = \"\";\n        if (!node.hasChildNodes()) {\n          return \"\";\n        }\n        var children = node.childNodes, childrenLength = children.length;\n        for (var i3 = 0; i3 < childrenLength; ++i3) {\n          txt += showdown2.subParser(\"makeMarkdown.node\")(children[i3], globals, true);\n        }\n        return txt.trim();\n      });\n      showdown2.subParser(\"makeMarkdown.txt\", function(node) {\n        var txt = node.nodeValue;\n        txt = txt.replace(/ +/g, \" \");\n        txt = txt.replace(/¨NBSP;/g, \" \");\n        txt = showdown2.helper.unescapeHTMLEntities(txt);\n        txt = txt.replace(/([*_~|`])/g, \"\\\\$1\");\n        txt = txt.replace(/^(\\s*)>/g, \"\\\\$1>\");\n        txt = txt.replace(/^#/gm, \"\\\\#\");\n        txt = txt.replace(/^(\\s*)([-=]{3,})(\\s*)$/, \"$1\\\\$2$3\");\n        txt = txt.replace(/^( {0,3}\\d+)\\./gm, \"$1\\\\.\");\n        txt = txt.replace(/^( {0,3})([+-])/gm, \"$1\\\\$2\");\n        txt = txt.replace(/]([\\s]*)\\(/g, \"\\\\]$1\\\\(\");\n        txt = txt.replace(/^ {0,3}\\[([\\S \\t]*?)]:/gm, \"\\\\[$1]:\");\n        return txt;\n      });\n      var root2 = this;\n      if (module2.exports) {\n        module2.exports = showdown2;\n      } else {\n        root2.showdown = showdown2;\n      }\n    }).call(showdown$1);\n  })(showdown$2);\n  return showdown$2.exports;\n}\nvar showdownExports = requireShowdown();\nconst showdown = /* @__PURE__ */ getDefaultExportFromCjs(showdownExports);\nconst EditorMixin = {\n  name: \"editor-mixin\",\n  initialState: {\n    tinymce: null\n  },\n  created() {\n    importCSS(\"https://cdn.skypack.dev/tinymce/skins/ui/oxide/skin.css\");\n    importCSS(\n      \"https://cdn.skypack.dev/tinymce/skins/content/default/content.css\"\n    );\n    importCSS(\"https://cdn.skypack.dev/tinymce/skins/ui/oxide/content.css\");\n    this.tinymce = null;\n    this.listAttributes.id = uniqID();\n    this.listCallbacks.attach(\n      this.addCallback.bind(this),\n      \"EditorMixin:addCallback\"\n    );\n  },\n  addCallback(value, listCallbacks) {\n    if (this.tinymce == null) {\n      const converter = new showdown.Converter();\n      const htmlValue = converter.makeHtml(this.value);\n      tinymce$1.init({\n        selector: `#${this.listAttributes.id}`,\n        max_height: 500,\n        min_height: 120,\n        resize: true,\n        menubar: false,\n        plugins: [\"lists\", \"link\", \"autoresize\"],\n        toolbar: \"styles | bold italic | blockquote | bullist numlist | link | removeformat\",\n        style_formats: [\n          { title: \"Normal\", format: \"p\" },\n          {\n            title: \"Headings\",\n            items: [\n              { title: \"Heading 1\", format: \"h1\" },\n              { title: \"Heading 2\", format: \"h2\" },\n              { title: \"Heading 3\", format: \"h3\" },\n              { title: \"Heading 4\", format: \"h4\" },\n              { title: \"Heading 5\", format: \"h5\" },\n              { title: \"Heading 6\", format: \"h6\" }\n            ]\n          }\n        ],\n        //to avoid simple line break\n        setup: (editor) => {\n          editor.on(\"keydown\", (event) => {\n            if (event.code === \"Enter\" && event.shiftKey) {\n              event.preventDefault();\n              event.stopPropagation();\n              return false;\n            }\n            return true;\n          });\n          editor.on(\"init\", () => {\n            editor.setContent(htmlValue);\n          });\n        }\n      });\n      if (this.value) {\n        const converter2 = new showdown.Converter();\n        const htmlValue2 = converter2.makeHtml(this.value);\n        const editor = tinymce$1.get(this.listAttributes.id);\n        if (editor != null) editor.setContent(htmlValue2);\n      }\n    }\n    const nextProcessor = listCallbacks.shift();\n    if (nextProcessor) nextProcessor(value, listCallbacks);\n  }\n};\nconst decodeCache = {};\nfunction getDecodeCache(exclude) {\n  let cache = decodeCache[exclude];\n  if (cache) {\n    return cache;\n  }\n  cache = decodeCache[exclude] = [];\n  for (let i3 = 0; i3 < 128; i3++) {\n    const ch = String.fromCharCode(i3);\n    cache.push(ch);\n  }\n  for (let i3 = 0; i3 < exclude.length; i3++) {\n    const ch = exclude.charCodeAt(i3);\n    cache[ch] = \"%\" + (\"0\" + ch.toString(16).toUpperCase()).slice(-2);\n  }\n  return cache;\n}\nfunction decode$1(string2, exclude) {\n  if (typeof exclude !== \"string\") {\n    exclude = decode$1.defaultChars;\n  }\n  const cache = getDecodeCache(exclude);\n  return string2.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n    let result = \"\";\n    for (let i3 = 0, l2 = seq.length; i3 < l2; i3 += 3) {\n      const b1 = parseInt(seq.slice(i3 + 1, i3 + 3), 16);\n      if (b1 < 128) {\n        result += cache[b1];\n        continue;\n      }\n      if ((b1 & 224) === 192 && i3 + 3 < l2) {\n        const b2 = parseInt(seq.slice(i3 + 4, i3 + 6), 16);\n        if ((b2 & 192) === 128) {\n          const chr = b1 << 6 & 1984 | b2 & 63;\n          if (chr < 128) {\n            result += \"��\";\n          } else {\n            result += String.fromCharCode(chr);\n          }\n          i3 += 3;\n          continue;\n        }\n      }\n      if ((b1 & 240) === 224 && i3 + 6 < l2) {\n        const b2 = parseInt(seq.slice(i3 + 4, i3 + 6), 16);\n        const b3 = parseInt(seq.slice(i3 + 7, i3 + 9), 16);\n        if ((b2 & 192) === 128 && (b3 & 192) === 128) {\n          const chr = b1 << 12 & 61440 | b2 << 6 & 4032 | b3 & 63;\n          if (chr < 2048 || chr >= 55296 && chr <= 57343) {\n            result += \"���\";\n          } else {\n            result += String.fromCharCode(chr);\n          }\n          i3 += 6;\n          continue;\n        }\n      }\n      if ((b1 & 248) === 240 && i3 + 9 < l2) {\n        const b2 = parseInt(seq.slice(i3 + 4, i3 + 6), 16);\n        const b3 = parseInt(seq.slice(i3 + 7, i3 + 9), 16);\n        const b4 = parseInt(seq.slice(i3 + 10, i3 + 12), 16);\n        if ((b2 & 192) === 128 && (b3 & 192) === 128 && (b4 & 192) === 128) {\n          let chr = b1 << 18 & 1835008 | b2 << 12 & 258048 | b3 << 6 & 4032 | b4 & 63;\n          if (chr < 65536 || chr > 1114111) {\n            result += \"����\";\n          } else {\n            chr -= 65536;\n            result += String.fromCharCode(55296 + (chr >> 10), 56320 + (chr & 1023));\n          }\n          i3 += 9;\n          continue;\n        }\n      }\n      result += \"�\";\n    }\n    return result;\n  });\n}\ndecode$1.defaultChars = \";/?:@&=+$,#\";\ndecode$1.componentChars = \"\";\nconst encodeCache = {};\nfunction getEncodeCache(exclude) {\n  let cache = encodeCache[exclude];\n  if (cache) {\n    return cache;\n  }\n  cache = encodeCache[exclude] = [];\n  for (let i3 = 0; i3 < 128; i3++) {\n    const ch = String.fromCharCode(i3);\n    if (/^[0-9a-z]$/i.test(ch)) {\n      cache.push(ch);\n    } else {\n      cache.push(\"%\" + (\"0\" + i3.toString(16).toUpperCase()).slice(-2));\n    }\n  }\n  for (let i3 = 0; i3 < exclude.length; i3++) {\n    cache[exclude.charCodeAt(i3)] = exclude[i3];\n  }\n  return cache;\n}\nfunction encode$1(string2, exclude, keepEscaped) {\n  if (typeof exclude !== \"string\") {\n    keepEscaped = exclude;\n    exclude = encode$1.defaultChars;\n  }\n  if (typeof keepEscaped === \"undefined\") {\n    keepEscaped = true;\n  }\n  const cache = getEncodeCache(exclude);\n  let result = \"\";\n  for (let i3 = 0, l2 = string2.length; i3 < l2; i3++) {\n    const code2 = string2.charCodeAt(i3);\n    if (keepEscaped && code2 === 37 && i3 + 2 < l2) {\n      if (/^[0-9a-f]{2}$/i.test(string2.slice(i3 + 1, i3 + 3))) {\n        result += string2.slice(i3, i3 + 3);\n        i3 += 2;\n        continue;\n      }\n    }\n    if (code2 < 128) {\n      result += cache[code2];\n      continue;\n    }\n    if (code2 >= 55296 && code2 <= 57343) {\n      if (code2 >= 55296 && code2 <= 56319 && i3 + 1 < l2) {\n        const nextCode = string2.charCodeAt(i3 + 1);\n        if (nextCode >= 56320 && nextCode <= 57343) {\n          result += encodeURIComponent(string2[i3] + string2[i3 + 1]);\n          i3++;\n          continue;\n        }\n      }\n      result += \"%EF%BF%BD\";\n      continue;\n    }\n    result += encodeURIComponent(string2[i3]);\n  }\n  return result;\n}\nencode$1.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode$1.componentChars = \"-_.!~*'()\";\nfunction format(url2) {\n  let result = \"\";\n  result += url2.protocol || \"\";\n  result += url2.slashes ? \"//\" : \"\";\n  result += url2.auth ? url2.auth + \"@\" : \"\";\n  if (url2.hostname && url2.hostname.indexOf(\":\") !== -1) {\n    result += \"[\" + url2.hostname + \"]\";\n  } else {\n    result += url2.hostname || \"\";\n  }\n  result += url2.port ? \":\" + url2.port : \"\";\n  result += url2.pathname || \"\";\n  result += url2.search || \"\";\n  result += url2.hash || \"\";\n  return result;\n}\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.pathname = null;\n}\nconst protocolPattern = /^([a-z0-9.+-]+:)/i;\nconst portPattern = /:[0-9]*$/;\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/;\nconst delims = [\"<\", \">\", '\"', \"`\", \" \", \"\\r\", \"\\n\", \"\t\"];\nconst unwise = [\"{\", \"}\", \"|\", \"\\\\\", \"^\", \"`\"].concat(delims);\nconst autoEscape = [\"'\"].concat(unwise);\nconst nonHostChars = [\"%\", \"/\", \"?\", \";\", \"#\"].concat(autoEscape);\nconst hostEndingChars = [\"/\", \"?\", \"#\"];\nconst hostnameMaxLen = 255;\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/;\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/;\nconst hostlessProtocol = {\n  javascript: true,\n  \"javascript:\": true\n};\nconst slashedProtocol = {\n  http: true,\n  https: true,\n  ftp: true,\n  gopher: true,\n  file: true,\n  \"http:\": true,\n  \"https:\": true,\n  \"ftp:\": true,\n  \"gopher:\": true,\n  \"file:\": true\n};\nfunction urlParse(url2, slashesDenoteHost) {\n  if (url2 && url2 instanceof Url) return url2;\n  const u2 = new Url();\n  u2.parse(url2, slashesDenoteHost);\n  return u2;\n}\nUrl.prototype.parse = function(url2, slashesDenoteHost) {\n  let lowerProto, hec, slashes;\n  let rest = url2;\n  rest = rest.trim();\n  if (!slashesDenoteHost && url2.split(\"#\").length === 1) {\n    const simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n      }\n      return this;\n    }\n  }\n  let proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    lowerProto = proto.toLowerCase();\n    this.protocol = proto;\n    rest = rest.substr(proto.length);\n  }\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    slashes = rest.substr(0, 2) === \"//\";\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n  if (!hostlessProtocol[proto] && (slashes || proto && !slashedProtocol[proto])) {\n    let hostEnd = -1;\n    for (let i3 = 0; i3 < hostEndingChars.length; i3++) {\n      hec = rest.indexOf(hostEndingChars[i3]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n    let auth, atSign;\n    if (hostEnd === -1) {\n      atSign = rest.lastIndexOf(\"@\");\n    } else {\n      atSign = rest.lastIndexOf(\"@\", hostEnd);\n    }\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = auth;\n    }\n    hostEnd = -1;\n    for (let i3 = 0; i3 < nonHostChars.length; i3++) {\n      hec = rest.indexOf(nonHostChars[i3]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n    if (hostEnd === -1) {\n      hostEnd = rest.length;\n    }\n    if (rest[hostEnd - 1] === \":\") {\n      hostEnd--;\n    }\n    const host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n    this.parseHost(host);\n    this.hostname = this.hostname || \"\";\n    const ipv6Hostname = this.hostname[0] === \"[\" && this.hostname[this.hostname.length - 1] === \"]\";\n    if (!ipv6Hostname) {\n      const hostparts = this.hostname.split(/\\./);\n      for (let i3 = 0, l2 = hostparts.length; i3 < l2; i3++) {\n        const part = hostparts[i3];\n        if (!part) {\n          continue;\n        }\n        if (!part.match(hostnamePartPattern)) {\n          let newpart = \"\";\n          for (let j2 = 0, k3 = part.length; j2 < k3; j2++) {\n            if (part.charCodeAt(j2) > 127) {\n              newpart += \"x\";\n            } else {\n              newpart += part[j2];\n            }\n          }\n          if (!newpart.match(hostnamePartPattern)) {\n            const validParts = hostparts.slice(0, i3);\n            const notHost = hostparts.slice(i3 + 1);\n            const bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = notHost.join(\".\") + rest;\n            }\n            this.hostname = validParts.join(\".\");\n            break;\n          }\n        }\n      }\n    }\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = \"\";\n    }\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n    }\n  }\n  const hash = rest.indexOf(\"#\");\n  if (hash !== -1) {\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  const qm = rest.indexOf(\"?\");\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    rest = rest.slice(0, qm);\n  }\n  if (rest) {\n    this.pathname = rest;\n  }\n  if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n    this.pathname = \"\";\n  }\n  return this;\n};\nUrl.prototype.parseHost = function(host) {\n  let port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== \":\") {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) {\n    this.hostname = host;\n  }\n};\nconst mdurl = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  decode: decode$1,\n  encode: encode$1,\n  format,\n  parse: urlParse\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst Any = /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nconst Cc = /[\\0-\\x1F\\x7F-\\x9F]/;\nconst regex$1 = /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/;\nconst P = /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDEAD\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/;\nconst regex = /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C0\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC2\\uFD40-\\uFD4F\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF76\\uDF7B-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC5\\uDECE-\\uDEDB\\uDEE0-\\uDEE8\\uDEF0-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFCA]/;\nconst Z = /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\nconst ucmicro = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  Any,\n  Cc,\n  Cf: regex$1,\n  P,\n  S: regex,\n  Z\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst htmlDecodeTree = new Uint16Array(\n  // prettier-ignore\n  'ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\\0\\0\\0\\0\\0\\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\\\bfms¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTǇǋǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\\0\\0\\0͔͂\\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\\0\\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\\0\\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\\0ц\\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\\0\\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\\0\\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\\0ֿ\\0\\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\\0ࣃbleBracket;柦nǔࣈ\\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻\"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\\0စbleBracket;柧nǔည\\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\\0\\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉ǲኀ\\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\\0ጬጱ\\0\\0\\0\\0\\0ጸጽ፷ᎅ\\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻ǲᕔ\\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\\0ᖰᖶᖿ\\0\\0\\0\\0ᗆᗛᗫᙟ᙭\\0ᚕ᚛ᚲᚹ\\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\\0\\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\\0\\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\\0ᠳƲᠯ\\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\\0᧨ᨑᨕᨲ\\0ᨷᩐ\\0\\0᪴\\0\\0᫁\\0\\0ᬡᬮ᭍᭒\\0᯽\\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\\0\\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\\0\\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\\0\\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\\0\\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\\0\\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\\0\\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤĳạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\\0\\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\\0ᾞ\\0ᾡᾧ\\0\\0ῆῌ\\0ΐ\\0ῦῪ \\0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ﬃɩᾹ\\0\\0᾽g;耀ﬀig;耀ﬄ;쀀𝔣lig;耀ﬁlig;쀀fjƀaltῙ῜ῡt;晭ig;耀ﬂns;斱of;䆒ǰ΅\\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒α‚‰‸⁅⁈\\0⁐β•‥‧‪‬\\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\\0‶;慔;慖ʴ‾⁁\\0\\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\\0⊪\\0⊸⋅⋎\\0⋕⋳\\0\\0⋸⌢⍧⍢⍿\\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\\0⒪\\0⒱\\0\\0\\0\\0\\0⒵Ⓔ\\0ⓆⓈⓍ\\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସǳ⧟\\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\\0\\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0ⴭ\\0ⴸⵈⵠⵥ⵲ⶄᬇ\\0\\0ⶍⶫ\\0ⷈⷎ\\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗǈⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\\0\\0⵼\\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\\0⹽\\0⺀⺝\\0⺢⺹\\0\\0⻋ຜ\\0⼓\\0\\0⼫⾼\\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\\0\\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\\0㍺㎤\\0\\0㏬㏰\\0㐨㑈㑚㒭㒱㓊㓱\\0㘖\\0\\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\\0\\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\\0㙾㛂\\0\\0\\0\\0\\0㛛㜃\\0㜉㝬\\0\\0\\0㞇ɲ㙖\\0\\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼ǲ㚋\\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\\0\\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\\0\\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\\0㪋\\0㪐㪛\\0\\0㪝㪨㪫㪯\\0\\0㫃㫎\\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split(\"\").map((c2) => c2.charCodeAt(0))\n);\nconst xmlDecodeTree = new Uint16Array(\n  // prettier-ignore\n  \"Ȁaglq\t\u0015\u0018\\x1Bɭ\u000f\\0\\0\u0012p;䀦os;䀧t;䀾t;䀼uot;䀢\".split(\"\").map((c2) => c2.charCodeAt(0))\n);\nvar _a;\nconst decodeMap = /* @__PURE__ */ new Map([\n  [0, 65533],\n  // C1 Unicode control character reference replacements\n  [128, 8364],\n  [130, 8218],\n  [131, 402],\n  [132, 8222],\n  [133, 8230],\n  [134, 8224],\n  [135, 8225],\n  [136, 710],\n  [137, 8240],\n  [138, 352],\n  [139, 8249],\n  [140, 338],\n  [142, 381],\n  [145, 8216],\n  [146, 8217],\n  [147, 8220],\n  [148, 8221],\n  [149, 8226],\n  [150, 8211],\n  [151, 8212],\n  [152, 732],\n  [153, 8482],\n  [154, 353],\n  [155, 8250],\n  [156, 339],\n  [158, 382],\n  [159, 376]\n]);\nconst fromCodePoint$1 = (\n  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n  (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function(codePoint) {\n    let output = \"\";\n    if (codePoint > 65535) {\n      codePoint -= 65536;\n      output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);\n      codePoint = 56320 | codePoint & 1023;\n    }\n    output += String.fromCharCode(codePoint);\n    return output;\n  }\n);\nfunction replaceCodePoint(codePoint) {\n  var _a3;\n  if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {\n    return 65533;\n  }\n  return (_a3 = decodeMap.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;\n}\nvar CharCodes;\n(function(CharCodes2) {\n  CharCodes2[CharCodes2[\"NUM\"] = 35] = \"NUM\";\n  CharCodes2[CharCodes2[\"SEMI\"] = 59] = \"SEMI\";\n  CharCodes2[CharCodes2[\"EQUALS\"] = 61] = \"EQUALS\";\n  CharCodes2[CharCodes2[\"ZERO\"] = 48] = \"ZERO\";\n  CharCodes2[CharCodes2[\"NINE\"] = 57] = \"NINE\";\n  CharCodes2[CharCodes2[\"LOWER_A\"] = 97] = \"LOWER_A\";\n  CharCodes2[CharCodes2[\"LOWER_F\"] = 102] = \"LOWER_F\";\n  CharCodes2[CharCodes2[\"LOWER_X\"] = 120] = \"LOWER_X\";\n  CharCodes2[CharCodes2[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n  CharCodes2[CharCodes2[\"UPPER_A\"] = 65] = \"UPPER_A\";\n  CharCodes2[CharCodes2[\"UPPER_F\"] = 70] = \"UPPER_F\";\n  CharCodes2[CharCodes2[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\nconst TO_LOWER_BIT = 32;\nvar BinTrieFlags;\n(function(BinTrieFlags2) {\n  BinTrieFlags2[BinTrieFlags2[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n  BinTrieFlags2[BinTrieFlags2[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n  BinTrieFlags2[BinTrieFlags2[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code2) {\n  return code2 >= CharCodes.ZERO && code2 <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code2) {\n  return code2 >= CharCodes.UPPER_A && code2 <= CharCodes.UPPER_F || code2 >= CharCodes.LOWER_A && code2 <= CharCodes.LOWER_F;\n}\nfunction isAsciiAlphaNumeric(code2) {\n  return code2 >= CharCodes.UPPER_A && code2 <= CharCodes.UPPER_Z || code2 >= CharCodes.LOWER_A && code2 <= CharCodes.LOWER_Z || isNumber(code2);\n}\nfunction isEntityInAttributeInvalidEnd(code2) {\n  return code2 === CharCodes.EQUALS || isAsciiAlphaNumeric(code2);\n}\nvar EntityDecoderState;\n(function(EntityDecoderState2) {\n  EntityDecoderState2[EntityDecoderState2[\"EntityStart\"] = 0] = \"EntityStart\";\n  EntityDecoderState2[EntityDecoderState2[\"NumericStart\"] = 1] = \"NumericStart\";\n  EntityDecoderState2[EntityDecoderState2[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n  EntityDecoderState2[EntityDecoderState2[\"NumericHex\"] = 3] = \"NumericHex\";\n  EntityDecoderState2[EntityDecoderState2[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nvar DecodingMode;\n(function(DecodingMode2) {\n  DecodingMode2[DecodingMode2[\"Legacy\"] = 0] = \"Legacy\";\n  DecodingMode2[DecodingMode2[\"Strict\"] = 1] = \"Strict\";\n  DecodingMode2[DecodingMode2[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\nclass EntityDecoder {\n  constructor(decodeTree, emitCodePoint, errors2) {\n    this.decodeTree = decodeTree;\n    this.emitCodePoint = emitCodePoint;\n    this.errors = errors2;\n    this.state = EntityDecoderState.EntityStart;\n    this.consumed = 1;\n    this.result = 0;\n    this.treeIndex = 0;\n    this.excess = 1;\n    this.decodeMode = DecodingMode.Strict;\n  }\n  /** Resets the instance to make it reusable. */\n  startEntity(decodeMode) {\n    this.decodeMode = decodeMode;\n    this.state = EntityDecoderState.EntityStart;\n    this.result = 0;\n    this.treeIndex = 0;\n    this.excess = 1;\n    this.consumed = 1;\n  }\n  /**\n   * Write an entity to the decoder. This can be called multiple times with partial entities.\n   * If the entity is incomplete, the decoder will return -1.\n   *\n   * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n   * entity is incomplete, and resume when the next string is written.\n   *\n   * @param string The string containing the entity (or a continuation of the entity).\n   * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  write(str, offset) {\n    switch (this.state) {\n      case EntityDecoderState.EntityStart: {\n        if (str.charCodeAt(offset) === CharCodes.NUM) {\n          this.state = EntityDecoderState.NumericStart;\n          this.consumed += 1;\n          return this.stateNumericStart(str, offset + 1);\n        }\n        this.state = EntityDecoderState.NamedEntity;\n        return this.stateNamedEntity(str, offset);\n      }\n      case EntityDecoderState.NumericStart: {\n        return this.stateNumericStart(str, offset);\n      }\n      case EntityDecoderState.NumericDecimal: {\n        return this.stateNumericDecimal(str, offset);\n      }\n      case EntityDecoderState.NumericHex: {\n        return this.stateNumericHex(str, offset);\n      }\n      case EntityDecoderState.NamedEntity: {\n        return this.stateNamedEntity(str, offset);\n      }\n    }\n  }\n  /**\n   * Switches between the numeric decimal and hexadecimal states.\n   *\n   * Equivalent to the `Numeric character reference state` in the HTML spec.\n   *\n   * @param str The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNumericStart(str, offset) {\n    if (offset >= str.length) {\n      return -1;\n    }\n    if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n      this.state = EntityDecoderState.NumericHex;\n      this.consumed += 1;\n      return this.stateNumericHex(str, offset + 1);\n    }\n    this.state = EntityDecoderState.NumericDecimal;\n    return this.stateNumericDecimal(str, offset);\n  }\n  addToNumericResult(str, start, end, base2) {\n    if (start !== end) {\n      const digitCount = end - start;\n      this.result = this.result * Math.pow(base2, digitCount) + parseInt(str.substr(start, digitCount), base2);\n      this.consumed += digitCount;\n    }\n  }\n  /**\n   * Parses a hexadecimal numeric entity.\n   *\n   * Equivalent to the `Hexademical character reference state` in the HTML spec.\n   *\n   * @param str The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNumericHex(str, offset) {\n    const startIdx = offset;\n    while (offset < str.length) {\n      const char = str.charCodeAt(offset);\n      if (isNumber(char) || isHexadecimalCharacter(char)) {\n        offset += 1;\n      } else {\n        this.addToNumericResult(str, startIdx, offset, 16);\n        return this.emitNumericEntity(char, 3);\n      }\n    }\n    this.addToNumericResult(str, startIdx, offset, 16);\n    return -1;\n  }\n  /**\n   * Parses a decimal numeric entity.\n   *\n   * Equivalent to the `Decimal character reference state` in the HTML spec.\n   *\n   * @param str The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNumericDecimal(str, offset) {\n    const startIdx = offset;\n    while (offset < str.length) {\n      const char = str.charCodeAt(offset);\n      if (isNumber(char)) {\n        offset += 1;\n      } else {\n        this.addToNumericResult(str, startIdx, offset, 10);\n        return this.emitNumericEntity(char, 2);\n      }\n    }\n    this.addToNumericResult(str, startIdx, offset, 10);\n    return -1;\n  }\n  /**\n   * Validate and emit a numeric entity.\n   *\n   * Implements the logic from the `Hexademical character reference start\n   * state` and `Numeric character reference end state` in the HTML spec.\n   *\n   * @param lastCp The last code point of the entity. Used to see if the\n   *               entity was terminated with a semicolon.\n   * @param expectedLength The minimum number of characters that should be\n   *                       consumed. Used to validate that at least one digit\n   *                       was consumed.\n   * @returns The number of characters that were consumed.\n   */\n  emitNumericEntity(lastCp, expectedLength) {\n    var _a3;\n    if (this.consumed <= expectedLength) {\n      (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);\n      return 0;\n    }\n    if (lastCp === CharCodes.SEMI) {\n      this.consumed += 1;\n    } else if (this.decodeMode === DecodingMode.Strict) {\n      return 0;\n    }\n    this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n    if (this.errors) {\n      if (lastCp !== CharCodes.SEMI) {\n        this.errors.missingSemicolonAfterCharacterReference();\n      }\n      this.errors.validateNumericCharacterReference(this.result);\n    }\n    return this.consumed;\n  }\n  /**\n   * Parses a named entity.\n   *\n   * Equivalent to the `Named character reference state` in the HTML spec.\n   *\n   * @param str The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNamedEntity(str, offset) {\n    const { decodeTree } = this;\n    let current = decodeTree[this.treeIndex];\n    let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n    for (; offset < str.length; offset++, this.excess++) {\n      const char = str.charCodeAt(offset);\n      this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n      if (this.treeIndex < 0) {\n        return this.result === 0 || // If we are parsing an attribute\n        this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity,\n        (valueLength === 0 || // And there should be no invalid characters.\n        isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();\n      }\n      current = decodeTree[this.treeIndex];\n      valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n      if (valueLength !== 0) {\n        if (char === CharCodes.SEMI) {\n          return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n        }\n        if (this.decodeMode !== DecodingMode.Strict) {\n          this.result = this.treeIndex;\n          this.consumed += this.excess;\n          this.excess = 0;\n        }\n      }\n    }\n    return -1;\n  }\n  /**\n   * Emit a named entity that was not terminated with a semicolon.\n   *\n   * @returns The number of characters consumed.\n   */\n  emitNotTerminatedNamedEntity() {\n    var _a3;\n    const { result, decodeTree } = this;\n    const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n    this.emitNamedEntityData(result, valueLength, this.consumed);\n    (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();\n    return this.consumed;\n  }\n  /**\n   * Emit a named entity.\n   *\n   * @param result The index of the entity in the decode tree.\n   * @param valueLength The number of bytes in the entity.\n   * @param consumed The number of characters consumed.\n   *\n   * @returns The number of characters consumed.\n   */\n  emitNamedEntityData(result, valueLength, consumed) {\n    const { decodeTree } = this;\n    this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed);\n    if (valueLength === 3) {\n      this.emitCodePoint(decodeTree[result + 2], consumed);\n    }\n    return consumed;\n  }\n  /**\n   * Signal to the parser that the end of the input was reached.\n   *\n   * Remaining data will be emitted and relevant errors will be produced.\n   *\n   * @returns The number of characters consumed.\n   */\n  end() {\n    var _a3;\n    switch (this.state) {\n      case EntityDecoderState.NamedEntity: {\n        return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;\n      }\n      // Otherwise, emit a numeric entity if we have one.\n      case EntityDecoderState.NumericDecimal: {\n        return this.emitNumericEntity(0, 2);\n      }\n      case EntityDecoderState.NumericHex: {\n        return this.emitNumericEntity(0, 3);\n      }\n      case EntityDecoderState.NumericStart: {\n        (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);\n        return 0;\n      }\n      case EntityDecoderState.EntityStart: {\n        return 0;\n      }\n    }\n  }\n}\nfunction getDecoder(decodeTree) {\n  let ret = \"\";\n  const decoder = new EntityDecoder(decodeTree, (str) => ret += fromCodePoint$1(str));\n  return function decodeWithTrie(str, decodeMode) {\n    let lastIndex = 0;\n    let offset = 0;\n    while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n      ret += str.slice(lastIndex, offset);\n      decoder.startEntity(decodeMode);\n      const len = decoder.write(\n        str,\n        // Skip the \"&\"\n        offset + 1\n      );\n      if (len < 0) {\n        lastIndex = offset + decoder.end();\n        break;\n      }\n      lastIndex = offset + len;\n      offset = len === 0 ? lastIndex + 1 : lastIndex;\n    }\n    const result = ret + str.slice(lastIndex);\n    ret = \"\";\n    return result;\n  };\n}\nfunction determineBranch(decodeTree, current, nodeIdx, char) {\n  const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n  const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n  if (branchCount === 0) {\n    return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n  }\n  if (jumpOffset) {\n    const value = char - jumpOffset;\n    return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;\n  }\n  let lo = nodeIdx;\n  let hi = lo + branchCount - 1;\n  while (lo <= hi) {\n    const mid = lo + hi >>> 1;\n    const midVal = decodeTree[mid];\n    if (midVal < char) {\n      lo = mid + 1;\n    } else if (midVal > char) {\n      hi = mid - 1;\n    } else {\n      return decodeTree[mid + branchCount];\n    }\n  }\n  return -1;\n}\nconst htmlDecoder = getDecoder(htmlDecodeTree);\ngetDecoder(xmlDecodeTree);\nfunction decodeHTML(str, mode = DecodingMode.Legacy) {\n  return htmlDecoder(str, mode);\n}\nfunction _class$1(obj) {\n  return Object.prototype.toString.call(obj);\n}\nfunction isString$1(obj) {\n  return _class$1(obj) === \"[object String]\";\n}\nconst _hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction has(object2, key) {\n  return _hasOwnProperty.call(object2, key);\n}\nfunction assign$1(obj) {\n  const sources = Array.prototype.slice.call(arguments, 1);\n  sources.forEach(function(source) {\n    if (!source) {\n      return;\n    }\n    if (typeof source !== \"object\") {\n      throw new TypeError(source + \"must be object\");\n    }\n    Object.keys(source).forEach(function(key) {\n      obj[key] = source[key];\n    });\n  });\n  return obj;\n}\nfunction arrayReplaceAt(src, pos, newElements) {\n  return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\nfunction isValidEntityCode(c2) {\n  if (c2 >= 55296 && c2 <= 57343) {\n    return false;\n  }\n  if (c2 >= 64976 && c2 <= 65007) {\n    return false;\n  }\n  if ((c2 & 65535) === 65535 || (c2 & 65535) === 65534) {\n    return false;\n  }\n  if (c2 >= 0 && c2 <= 8) {\n    return false;\n  }\n  if (c2 === 11) {\n    return false;\n  }\n  if (c2 >= 14 && c2 <= 31) {\n    return false;\n  }\n  if (c2 >= 127 && c2 <= 159) {\n    return false;\n  }\n  if (c2 > 1114111) {\n    return false;\n  }\n  return true;\n}\nfunction fromCodePoint(c2) {\n  if (c2 > 65535) {\n    c2 -= 65536;\n    const surrogate1 = 55296 + (c2 >> 10);\n    const surrogate2 = 56320 + (c2 & 1023);\n    return String.fromCharCode(surrogate1, surrogate2);\n  }\n  return String.fromCharCode(c2);\n}\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g;\nconst ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nconst UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + \"|\" + ENTITY_RE.source, \"gi\");\nconst DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;\nfunction replaceEntityPattern(match3, name) {\n  if (name.charCodeAt(0) === 35 && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    const code2 = name[1].toLowerCase() === \"x\" ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n    if (isValidEntityCode(code2)) {\n      return fromCodePoint(code2);\n    }\n    return match3;\n  }\n  const decoded = decodeHTML(match3);\n  if (decoded !== match3) {\n    return decoded;\n  }\n  return match3;\n}\nfunction unescapeMd(str) {\n  if (str.indexOf(\"\\\\\") < 0) {\n    return str;\n  }\n  return str.replace(UNESCAPE_MD_RE, \"$1\");\n}\nfunction unescapeAll(str) {\n  if (str.indexOf(\"\\\\\") < 0 && str.indexOf(\"&\") < 0) {\n    return str;\n  }\n  return str.replace(UNESCAPE_ALL_RE, function(match3, escaped, entity2) {\n    if (escaped) {\n      return escaped;\n    }\n    return replaceEntityPattern(match3, entity2);\n  });\n}\nconst HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nconst HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nconst HTML_REPLACEMENTS = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  '\"': \"&quot;\"\n};\nfunction replaceUnsafeChar(ch) {\n  return HTML_REPLACEMENTS[ch];\n}\nfunction escapeHtml(str) {\n  if (HTML_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n  }\n  return str;\n}\nconst REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\nfunction escapeRE$1(str) {\n  return str.replace(REGEXP_ESCAPE_RE, \"\\\\$&\");\n}\nfunction isSpace(code2) {\n  switch (code2) {\n    case 9:\n    case 32:\n      return true;\n  }\n  return false;\n}\nfunction isWhiteSpace(code2) {\n  if (code2 >= 8192 && code2 <= 8202) {\n    return true;\n  }\n  switch (code2) {\n    case 9:\n    // \\t\n    case 10:\n    // \\n\n    case 11:\n    // \\v\n    case 12:\n    // \\f\n    case 13:\n    // \\r\n    case 32:\n    case 160:\n    case 5760:\n    case 8239:\n    case 8287:\n    case 12288:\n      return true;\n  }\n  return false;\n}\nfunction isPunctChar(ch) {\n  return P.test(ch) || regex.test(ch);\n}\nfunction isMdAsciiPunct(ch) {\n  switch (ch) {\n    case 33:\n    case 34:\n    case 35:\n    case 36:\n    case 37:\n    case 38:\n    case 39:\n    case 40:\n    case 41:\n    case 42:\n    case 43:\n    case 44:\n    case 45:\n    case 46:\n    case 47:\n    case 58:\n    case 59:\n    case 60:\n    case 61:\n    case 62:\n    case 63:\n    case 64:\n    case 91:\n    case 92:\n    case 93:\n    case 94:\n    case 95:\n    case 96:\n    case 123:\n    case 124:\n    case 125:\n    case 126:\n      return true;\n    default:\n      return false;\n  }\n}\nfunction normalizeReference(str) {\n  str = str.trim().replace(/\\s+/g, \" \");\n  if (\"ẞ\".toLowerCase() === \"Ṿ\") {\n    str = str.replace(/ẞ/g, \"ß\");\n  }\n  return str.toLowerCase().toUpperCase();\n}\nconst lib = { mdurl, ucmicro };\nconst utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  arrayReplaceAt,\n  assign: assign$1,\n  escapeHtml,\n  escapeRE: escapeRE$1,\n  fromCodePoint,\n  has,\n  isMdAsciiPunct,\n  isPunctChar,\n  isSpace,\n  isString: isString$1,\n  isValidEntityCode,\n  isWhiteSpace,\n  lib,\n  normalizeReference,\n  unescapeAll,\n  unescapeMd\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction parseLinkLabel(state, start, disableNested) {\n  let level2, found, marker, prevPos;\n  const max = state.posMax;\n  const oldPos = state.pos;\n  state.pos = start + 1;\n  level2 = 1;\n  while (state.pos < max) {\n    marker = state.src.charCodeAt(state.pos);\n    if (marker === 93) {\n      level2--;\n      if (level2 === 0) {\n        found = true;\n        break;\n      }\n    }\n    prevPos = state.pos;\n    state.md.inline.skipToken(state);\n    if (marker === 91) {\n      if (prevPos === state.pos - 1) {\n        level2++;\n      } else if (disableNested) {\n        state.pos = oldPos;\n        return -1;\n      }\n    }\n  }\n  let labelEnd = -1;\n  if (found) {\n    labelEnd = state.pos;\n  }\n  state.pos = oldPos;\n  return labelEnd;\n}\nfunction parseLinkDestination(str, start, max) {\n  let code2;\n  let pos = start;\n  const result = {\n    ok: false,\n    pos: 0,\n    str: \"\"\n  };\n  if (str.charCodeAt(pos) === 60) {\n    pos++;\n    while (pos < max) {\n      code2 = str.charCodeAt(pos);\n      if (code2 === 10) {\n        return result;\n      }\n      if (code2 === 60) {\n        return result;\n      }\n      if (code2 === 62) {\n        result.pos = pos + 1;\n        result.str = unescapeAll(str.slice(start + 1, pos));\n        result.ok = true;\n        return result;\n      }\n      if (code2 === 92 && pos + 1 < max) {\n        pos += 2;\n        continue;\n      }\n      pos++;\n    }\n    return result;\n  }\n  let level2 = 0;\n  while (pos < max) {\n    code2 = str.charCodeAt(pos);\n    if (code2 === 32) {\n      break;\n    }\n    if (code2 < 32 || code2 === 127) {\n      break;\n    }\n    if (code2 === 92 && pos + 1 < max) {\n      if (str.charCodeAt(pos + 1) === 32) {\n        break;\n      }\n      pos += 2;\n      continue;\n    }\n    if (code2 === 40) {\n      level2++;\n      if (level2 > 32) {\n        return result;\n      }\n    }\n    if (code2 === 41) {\n      if (level2 === 0) {\n        break;\n      }\n      level2--;\n    }\n    pos++;\n  }\n  if (start === pos) {\n    return result;\n  }\n  if (level2 !== 0) {\n    return result;\n  }\n  result.str = unescapeAll(str.slice(start, pos));\n  result.pos = pos;\n  result.ok = true;\n  return result;\n}\nfunction parseLinkTitle(str, start, max, prev_state) {\n  let code2;\n  let pos = start;\n  const state = {\n    // if `true`, this is a valid link title\n    ok: false,\n    // if `true`, this link can be continued on the next line\n    can_continue: false,\n    // if `ok`, it's the position of the first character after the closing marker\n    pos: 0,\n    // if `ok`, it's the unescaped title\n    str: \"\",\n    // expected closing marker character code\n    marker: 0\n  };\n  if (prev_state) {\n    state.str = prev_state.str;\n    state.marker = prev_state.marker;\n  } else {\n    if (pos >= max) {\n      return state;\n    }\n    let marker = str.charCodeAt(pos);\n    if (marker !== 34 && marker !== 39 && marker !== 40) {\n      return state;\n    }\n    start++;\n    pos++;\n    if (marker === 40) {\n      marker = 41;\n    }\n    state.marker = marker;\n  }\n  while (pos < max) {\n    code2 = str.charCodeAt(pos);\n    if (code2 === state.marker) {\n      state.pos = pos + 1;\n      state.str += unescapeAll(str.slice(start, pos));\n      state.ok = true;\n      return state;\n    } else if (code2 === 40 && state.marker === 41) {\n      return state;\n    } else if (code2 === 92 && pos + 1 < max) {\n      pos++;\n    }\n    pos++;\n  }\n  state.can_continue = true;\n  state.str += unescapeAll(str.slice(start, pos));\n  return state;\n}\nconst helpers = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  parseLinkDestination,\n  parseLinkLabel,\n  parseLinkTitle\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst default_rules = {};\ndefault_rules.code_inline = function(tokens, idx, options, env, slf) {\n  const token = tokens[idx];\n  return \"<code\" + slf.renderAttrs(token) + \">\" + escapeHtml(token.content) + \"</code>\";\n};\ndefault_rules.code_block = function(tokens, idx, options, env, slf) {\n  const token = tokens[idx];\n  return \"<pre\" + slf.renderAttrs(token) + \"><code>\" + escapeHtml(tokens[idx].content) + \"</code></pre>\\n\";\n};\ndefault_rules.fence = function(tokens, idx, options, env, slf) {\n  const token = tokens[idx];\n  const info = token.info ? unescapeAll(token.info).trim() : \"\";\n  let langName = \"\";\n  let langAttrs = \"\";\n  if (info) {\n    const arr = info.split(/(\\s+)/g);\n    langName = arr[0];\n    langAttrs = arr.slice(2).join(\"\");\n  }\n  let highlighted;\n  if (options.highlight) {\n    highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n  } else {\n    highlighted = escapeHtml(token.content);\n  }\n  if (highlighted.indexOf(\"<pre\") === 0) {\n    return highlighted + \"\\n\";\n  }\n  if (info) {\n    const i3 = token.attrIndex(\"class\");\n    const tmpAttrs = token.attrs ? token.attrs.slice() : [];\n    if (i3 < 0) {\n      tmpAttrs.push([\"class\", options.langPrefix + langName]);\n    } else {\n      tmpAttrs[i3] = tmpAttrs[i3].slice();\n      tmpAttrs[i3][1] += \" \" + options.langPrefix + langName;\n    }\n    const tmpToken = {\n      attrs: tmpAttrs\n    };\n    return `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\n`;\n  }\n  return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\n`;\n};\ndefault_rules.image = function(tokens, idx, options, env, slf) {\n  const token = tokens[idx];\n  token.attrs[token.attrIndex(\"alt\")][1] = slf.renderInlineAsText(token.children, options, env);\n  return slf.renderToken(tokens, idx, options);\n};\ndefault_rules.hardbreak = function(tokens, idx, options) {\n  return options.xhtmlOut ? \"<br />\\n\" : \"<br>\\n\";\n};\ndefault_rules.softbreak = function(tokens, idx, options) {\n  return options.breaks ? options.xhtmlOut ? \"<br />\\n\" : \"<br>\\n\" : \"\\n\";\n};\ndefault_rules.text = function(tokens, idx) {\n  return escapeHtml(tokens[idx].content);\n};\ndefault_rules.html_block = function(tokens, idx) {\n  return tokens[idx].content;\n};\ndefault_rules.html_inline = function(tokens, idx) {\n  return tokens[idx].content;\n};\nfunction Renderer() {\n  this.rules = assign$1({}, default_rules);\n}\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n  let i3, l2, result;\n  if (!token.attrs) {\n    return \"\";\n  }\n  result = \"\";\n  for (i3 = 0, l2 = token.attrs.length; i3 < l2; i3++) {\n    result += \" \" + escapeHtml(token.attrs[i3][0]) + '=\"' + escapeHtml(token.attrs[i3][1]) + '\"';\n  }\n  return result;\n};\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n  const token = tokens[idx];\n  let result = \"\";\n  if (token.hidden) {\n    return \"\";\n  }\n  if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n    result += \"\\n\";\n  }\n  result += (token.nesting === -1 ? \"</\" : \"<\") + token.tag;\n  result += this.renderAttrs(token);\n  if (token.nesting === 0 && options.xhtmlOut) {\n    result += \" /\";\n  }\n  let needLf = false;\n  if (token.block) {\n    needLf = true;\n    if (token.nesting === 1) {\n      if (idx + 1 < tokens.length) {\n        const nextToken = tokens[idx + 1];\n        if (nextToken.type === \"inline\" || nextToken.hidden) {\n          needLf = false;\n        } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n          needLf = false;\n        }\n      }\n    }\n  }\n  result += needLf ? \">\\n\" : \">\";\n  return result;\n};\nRenderer.prototype.renderInline = function(tokens, options, env) {\n  let result = \"\";\n  const rules = this.rules;\n  for (let i3 = 0, len = tokens.length; i3 < len; i3++) {\n    const type = tokens[i3].type;\n    if (typeof rules[type] !== \"undefined\") {\n      result += rules[type](tokens, i3, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i3, options);\n    }\n  }\n  return result;\n};\nRenderer.prototype.renderInlineAsText = function(tokens, options, env) {\n  let result = \"\";\n  for (let i3 = 0, len = tokens.length; i3 < len; i3++) {\n    switch (tokens[i3].type) {\n      case \"text\":\n        result += tokens[i3].content;\n        break;\n      case \"image\":\n        result += this.renderInlineAsText(tokens[i3].children, options, env);\n        break;\n      case \"html_inline\":\n      case \"html_block\":\n        result += tokens[i3].content;\n        break;\n      case \"softbreak\":\n      case \"hardbreak\":\n        result += \"\\n\";\n        break;\n    }\n  }\n  return result;\n};\nRenderer.prototype.render = function(tokens, options, env) {\n  let result = \"\";\n  const rules = this.rules;\n  for (let i3 = 0, len = tokens.length; i3 < len; i3++) {\n    const type = tokens[i3].type;\n    if (type === \"inline\") {\n      result += this.renderInline(tokens[i3].children, options, env);\n    } else if (typeof rules[type] !== \"undefined\") {\n      result += rules[type](tokens, i3, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i3, options, env);\n    }\n  }\n  return result;\n};\nfunction Ruler() {\n  this.__rules__ = [];\n  this.__cache__ = null;\n}\nRuler.prototype.__find__ = function(name) {\n  for (let i3 = 0; i3 < this.__rules__.length; i3++) {\n    if (this.__rules__[i3].name === name) {\n      return i3;\n    }\n  }\n  return -1;\n};\nRuler.prototype.__compile__ = function() {\n  const self2 = this;\n  const chains = [\"\"];\n  self2.__rules__.forEach(function(rule) {\n    if (!rule.enabled) {\n      return;\n    }\n    rule.alt.forEach(function(altName) {\n      if (chains.indexOf(altName) < 0) {\n        chains.push(altName);\n      }\n    });\n  });\n  self2.__cache__ = {};\n  chains.forEach(function(chain) {\n    self2.__cache__[chain] = [];\n    self2.__rules__.forEach(function(rule) {\n      if (!rule.enabled) {\n        return;\n      }\n      if (chain && rule.alt.indexOf(chain) < 0) {\n        return;\n      }\n      self2.__cache__[chain].push(rule.fn);\n    });\n  });\n};\nRuler.prototype.at = function(name, fn, options) {\n  const index2 = this.__find__(name);\n  const opt = options || {};\n  if (index2 === -1) {\n    throw new Error(\"Parser rule not found: \" + name);\n  }\n  this.__rules__[index2].fn = fn;\n  this.__rules__[index2].alt = opt.alt || [];\n  this.__cache__ = null;\n};\nRuler.prototype.before = function(beforeName, ruleName, fn, options) {\n  const index2 = this.__find__(beforeName);\n  const opt = options || {};\n  if (index2 === -1) {\n    throw new Error(\"Parser rule not found: \" + beforeName);\n  }\n  this.__rules__.splice(index2, 0, {\n    name: ruleName,\n    enabled: true,\n    fn,\n    alt: opt.alt || []\n  });\n  this.__cache__ = null;\n};\nRuler.prototype.after = function(afterName, ruleName, fn, options) {\n  const index2 = this.__find__(afterName);\n  const opt = options || {};\n  if (index2 === -1) {\n    throw new Error(\"Parser rule not found: \" + afterName);\n  }\n  this.__rules__.splice(index2 + 1, 0, {\n    name: ruleName,\n    enabled: true,\n    fn,\n    alt: opt.alt || []\n  });\n  this.__cache__ = null;\n};\nRuler.prototype.push = function(ruleName, fn, options) {\n  const opt = options || {};\n  this.__rules__.push({\n    name: ruleName,\n    enabled: true,\n    fn,\n    alt: opt.alt || []\n  });\n  this.__cache__ = null;\n};\nRuler.prototype.enable = function(list2, ignoreInvalid) {\n  if (!Array.isArray(list2)) {\n    list2 = [list2];\n  }\n  const result = [];\n  list2.forEach(function(name) {\n    const idx = this.__find__(name);\n    if (idx < 0) {\n      if (ignoreInvalid) {\n        return;\n      }\n      throw new Error(\"Rules manager: invalid rule name \" + name);\n    }\n    this.__rules__[idx].enabled = true;\n    result.push(name);\n  }, this);\n  this.__cache__ = null;\n  return result;\n};\nRuler.prototype.enableOnly = function(list2, ignoreInvalid) {\n  if (!Array.isArray(list2)) {\n    list2 = [list2];\n  }\n  this.__rules__.forEach(function(rule) {\n    rule.enabled = false;\n  });\n  this.enable(list2, ignoreInvalid);\n};\nRuler.prototype.disable = function(list2, ignoreInvalid) {\n  if (!Array.isArray(list2)) {\n    list2 = [list2];\n  }\n  const result = [];\n  list2.forEach(function(name) {\n    const idx = this.__find__(name);\n    if (idx < 0) {\n      if (ignoreInvalid) {\n        return;\n      }\n      throw new Error(\"Rules manager: invalid rule name \" + name);\n    }\n    this.__rules__[idx].enabled = false;\n    result.push(name);\n  }, this);\n  this.__cache__ = null;\n  return result;\n};\nRuler.prototype.getRules = function(chainName) {\n  if (this.__cache__ === null) {\n    this.__compile__();\n  }\n  return this.__cache__[chainName] || [];\n};\nfunction Token(type, tag, nesting) {\n  this.type = type;\n  this.tag = tag;\n  this.attrs = null;\n  this.map = null;\n  this.nesting = nesting;\n  this.level = 0;\n  this.children = null;\n  this.content = \"\";\n  this.markup = \"\";\n  this.info = \"\";\n  this.meta = null;\n  this.block = false;\n  this.hidden = false;\n}\nToken.prototype.attrIndex = function attrIndex(name) {\n  if (!this.attrs) {\n    return -1;\n  }\n  const attrs = this.attrs;\n  for (let i3 = 0, len = attrs.length; i3 < len; i3++) {\n    if (attrs[i3][0] === name) {\n      return i3;\n    }\n  }\n  return -1;\n};\nToken.prototype.attrPush = function attrPush(attrData) {\n  if (this.attrs) {\n    this.attrs.push(attrData);\n  } else {\n    this.attrs = [attrData];\n  }\n};\nToken.prototype.attrSet = function attrSet(name, value) {\n  const idx = this.attrIndex(name);\n  const attrData = [name, value];\n  if (idx < 0) {\n    this.attrPush(attrData);\n  } else {\n    this.attrs[idx] = attrData;\n  }\n};\nToken.prototype.attrGet = function attrGet(name) {\n  const idx = this.attrIndex(name);\n  let value = null;\n  if (idx >= 0) {\n    value = this.attrs[idx][1];\n  }\n  return value;\n};\nToken.prototype.attrJoin = function attrJoin(name, value) {\n  const idx = this.attrIndex(name);\n  if (idx < 0) {\n    this.attrPush([name, value]);\n  } else {\n    this.attrs[idx][1] = this.attrs[idx][1] + \" \" + value;\n  }\n};\nfunction StateCore(src, md, env) {\n  this.src = src;\n  this.env = env;\n  this.tokens = [];\n  this.inlineMode = false;\n  this.md = md;\n}\nStateCore.prototype.Token = Token;\nconst NEWLINES_RE = /\\r\\n?|\\n/g;\nconst NULL_RE = /\\0/g;\nfunction normalize$3(state) {\n  let str;\n  str = state.src.replace(NEWLINES_RE, \"\\n\");\n  str = str.replace(NULL_RE, \"�\");\n  state.src = str;\n}\nfunction block(state) {\n  let token;\n  if (state.inlineMode) {\n    token = new state.Token(\"inline\", \"\", 0);\n    token.content = state.src;\n    token.map = [0, 1];\n    token.children = [];\n    state.tokens.push(token);\n  } else {\n    state.md.block.parse(state.src, state.md, state.env, state.tokens);\n  }\n}\nfunction inline(state) {\n  const tokens = state.tokens;\n  for (let i3 = 0, l2 = tokens.length; i3 < l2; i3++) {\n    const tok = tokens[i3];\n    if (tok.type === \"inline\") {\n      state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n    }\n  }\n}\nfunction isLinkOpen$1(str) {\n  return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose$1(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\nfunction linkify$1(state) {\n  const blockTokens = state.tokens;\n  if (!state.md.options.linkify) {\n    return;\n  }\n  for (let j2 = 0, l2 = blockTokens.length; j2 < l2; j2++) {\n    if (blockTokens[j2].type !== \"inline\" || !state.md.linkify.pretest(blockTokens[j2].content)) {\n      continue;\n    }\n    let tokens = blockTokens[j2].children;\n    let htmlLinkLevel = 0;\n    for (let i3 = tokens.length - 1; i3 >= 0; i3--) {\n      const currentToken = tokens[i3];\n      if (currentToken.type === \"link_close\") {\n        i3--;\n        while (tokens[i3].level !== currentToken.level && tokens[i3].type !== \"link_open\") {\n          i3--;\n        }\n        continue;\n      }\n      if (currentToken.type === \"html_inline\") {\n        if (isLinkOpen$1(currentToken.content) && htmlLinkLevel > 0) {\n          htmlLinkLevel--;\n        }\n        if (isLinkClose$1(currentToken.content)) {\n          htmlLinkLevel++;\n        }\n      }\n      if (htmlLinkLevel > 0) {\n        continue;\n      }\n      if (currentToken.type === \"text\" && state.md.linkify.test(currentToken.content)) {\n        const text2 = currentToken.content;\n        let links = state.md.linkify.match(text2);\n        const nodes = [];\n        let level2 = currentToken.level;\n        let lastPos = 0;\n        if (links.length > 0 && links[0].index === 0 && i3 > 0 && tokens[i3 - 1].type === \"text_special\") {\n          links = links.slice(1);\n        }\n        for (let ln = 0; ln < links.length; ln++) {\n          const url2 = links[ln].url;\n          const fullUrl = state.md.normalizeLink(url2);\n          if (!state.md.validateLink(fullUrl)) {\n            continue;\n          }\n          let urlText = links[ln].text;\n          if (!links[ln].schema) {\n            urlText = state.md.normalizeLinkText(\"http://\" + urlText).replace(/^http:\\/\\//, \"\");\n          } else if (links[ln].schema === \"mailto:\" && !/^mailto:/i.test(urlText)) {\n            urlText = state.md.normalizeLinkText(\"mailto:\" + urlText).replace(/^mailto:/, \"\");\n          } else {\n            urlText = state.md.normalizeLinkText(urlText);\n          }\n          const pos = links[ln].index;\n          if (pos > lastPos) {\n            const token = new state.Token(\"text\", \"\", 0);\n            token.content = text2.slice(lastPos, pos);\n            token.level = level2;\n            nodes.push(token);\n          }\n          const token_o = new state.Token(\"link_open\", \"a\", 1);\n          token_o.attrs = [[\"href\", fullUrl]];\n          token_o.level = level2++;\n          token_o.markup = \"linkify\";\n          token_o.info = \"auto\";\n          nodes.push(token_o);\n          const token_t = new state.Token(\"text\", \"\", 0);\n          token_t.content = urlText;\n          token_t.level = level2;\n          nodes.push(token_t);\n          const token_c = new state.Token(\"link_close\", \"a\", -1);\n          token_c.level = --level2;\n          token_c.markup = \"linkify\";\n          token_c.info = \"auto\";\n          nodes.push(token_c);\n          lastPos = links[ln].lastIndex;\n        }\n        if (lastPos < text2.length) {\n          const token = new state.Token(\"text\", \"\", 0);\n          token.content = text2.slice(lastPos);\n          token.level = level2;\n          nodes.push(token);\n        }\n        blockTokens[j2].children = tokens = arrayReplaceAt(tokens, i3, nodes);\n      }\n    }\n  }\n}\nconst RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\nconst SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i;\nconst SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig;\nconst SCOPED_ABBR = {\n  c: \"©\",\n  r: \"®\",\n  tm: \"™\"\n};\nfunction replaceFn(match3, name) {\n  return SCOPED_ABBR[name.toLowerCase()];\n}\nfunction replace_scoped(inlineTokens) {\n  let inside_autolink = 0;\n  for (let i3 = inlineTokens.length - 1; i3 >= 0; i3--) {\n    const token = inlineTokens[i3];\n    if (token.type === \"text\" && !inside_autolink) {\n      token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n    }\n    if (token.type === \"link_open\" && token.info === \"auto\") {\n      inside_autolink--;\n    }\n    if (token.type === \"link_close\" && token.info === \"auto\") {\n      inside_autolink++;\n    }\n  }\n}\nfunction replace_rare(inlineTokens) {\n  let inside_autolink = 0;\n  for (let i3 = inlineTokens.length - 1; i3 >= 0; i3--) {\n    const token = inlineTokens[i3];\n    if (token.type === \"text\" && !inside_autolink) {\n      if (RARE_RE.test(token.content)) {\n        token.content = token.content.replace(/\\+-/g, \"±\").replace(/\\.{2,}/g, \"…\").replace(/([?!])…/g, \"$1..\").replace(/([?!]){4,}/g, \"$1$1$1\").replace(/,{2,}/g, \",\").replace(/(^|[^-])---(?=[^-]|$)/mg, \"$1—\").replace(/(^|\\s)--(?=\\s|$)/mg, \"$1–\").replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, \"$1–\");\n      }\n    }\n    if (token.type === \"link_open\" && token.info === \"auto\") {\n      inside_autolink--;\n    }\n    if (token.type === \"link_close\" && token.info === \"auto\") {\n      inside_autolink++;\n    }\n  }\n}\nfunction replace(state) {\n  let blkIdx;\n  if (!state.md.options.typographer) {\n    return;\n  }\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n    if (state.tokens[blkIdx].type !== \"inline\") {\n      continue;\n    }\n    if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n      replace_scoped(state.tokens[blkIdx].children);\n    }\n    if (RARE_RE.test(state.tokens[blkIdx].content)) {\n      replace_rare(state.tokens[blkIdx].children);\n    }\n  }\n}\nconst QUOTE_TEST_RE = /['\"]/;\nconst QUOTE_RE = /['\"]/g;\nconst APOSTROPHE = \"’\";\nfunction replaceAt(str, index2, ch) {\n  return str.slice(0, index2) + ch + str.slice(index2 + 1);\n}\nfunction process_inlines(tokens, state) {\n  let j2;\n  const stack = [];\n  for (let i3 = 0; i3 < tokens.length; i3++) {\n    const token = tokens[i3];\n    const thisLevel = tokens[i3].level;\n    for (j2 = stack.length - 1; j2 >= 0; j2--) {\n      if (stack[j2].level <= thisLevel) {\n        break;\n      }\n    }\n    stack.length = j2 + 1;\n    if (token.type !== \"text\") {\n      continue;\n    }\n    let text2 = token.content;\n    let pos = 0;\n    let max = text2.length;\n    OUTER:\n      while (pos < max) {\n        QUOTE_RE.lastIndex = pos;\n        const t2 = QUOTE_RE.exec(text2);\n        if (!t2) {\n          break;\n        }\n        let canOpen = true;\n        let canClose = true;\n        pos = t2.index + 1;\n        const isSingle = t2[0] === \"'\";\n        let lastChar = 32;\n        if (t2.index - 1 >= 0) {\n          lastChar = text2.charCodeAt(t2.index - 1);\n        } else {\n          for (j2 = i3 - 1; j2 >= 0; j2--) {\n            if (tokens[j2].type === \"softbreak\" || tokens[j2].type === \"hardbreak\") break;\n            if (!tokens[j2].content) continue;\n            lastChar = tokens[j2].content.charCodeAt(tokens[j2].content.length - 1);\n            break;\n          }\n        }\n        let nextChar = 32;\n        if (pos < max) {\n          nextChar = text2.charCodeAt(pos);\n        } else {\n          for (j2 = i3 + 1; j2 < tokens.length; j2++) {\n            if (tokens[j2].type === \"softbreak\" || tokens[j2].type === \"hardbreak\") break;\n            if (!tokens[j2].content) continue;\n            nextChar = tokens[j2].content.charCodeAt(0);\n            break;\n          }\n        }\n        const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n        const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n        const isLastWhiteSpace = isWhiteSpace(lastChar);\n        const isNextWhiteSpace = isWhiteSpace(nextChar);\n        if (isNextWhiteSpace) {\n          canOpen = false;\n        } else if (isNextPunctChar) {\n          if (!(isLastWhiteSpace || isLastPunctChar)) {\n            canOpen = false;\n          }\n        }\n        if (isLastWhiteSpace) {\n          canClose = false;\n        } else if (isLastPunctChar) {\n          if (!(isNextWhiteSpace || isNextPunctChar)) {\n            canClose = false;\n          }\n        }\n        if (nextChar === 34 && t2[0] === '\"') {\n          if (lastChar >= 48 && lastChar <= 57) {\n            canClose = canOpen = false;\n          }\n        }\n        if (canOpen && canClose) {\n          canOpen = isLastPunctChar;\n          canClose = isNextPunctChar;\n        }\n        if (!canOpen && !canClose) {\n          if (isSingle) {\n            token.content = replaceAt(token.content, t2.index, APOSTROPHE);\n          }\n          continue;\n        }\n        if (canClose) {\n          for (j2 = stack.length - 1; j2 >= 0; j2--) {\n            let item = stack[j2];\n            if (stack[j2].level < thisLevel) {\n              break;\n            }\n            if (item.single === isSingle && stack[j2].level === thisLevel) {\n              item = stack[j2];\n              let openQuote;\n              let closeQuote;\n              if (isSingle) {\n                openQuote = state.md.options.quotes[2];\n                closeQuote = state.md.options.quotes[3];\n              } else {\n                openQuote = state.md.options.quotes[0];\n                closeQuote = state.md.options.quotes[1];\n              }\n              token.content = replaceAt(token.content, t2.index, closeQuote);\n              tokens[item.token].content = replaceAt(\n                tokens[item.token].content,\n                item.pos,\n                openQuote\n              );\n              pos += closeQuote.length - 1;\n              if (item.token === i3) {\n                pos += openQuote.length - 1;\n              }\n              text2 = token.content;\n              max = text2.length;\n              stack.length = j2;\n              continue OUTER;\n            }\n          }\n        }\n        if (canOpen) {\n          stack.push({\n            token: i3,\n            pos: t2.index,\n            single: isSingle,\n            level: thisLevel\n          });\n        } else if (canClose && isSingle) {\n          token.content = replaceAt(token.content, t2.index, APOSTROPHE);\n        }\n      }\n  }\n}\nfunction smartquotes(state) {\n  if (!state.md.options.typographer) {\n    return;\n  }\n  for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n    if (state.tokens[blkIdx].type !== \"inline\" || !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n      continue;\n    }\n    process_inlines(state.tokens[blkIdx].children, state);\n  }\n}\nfunction text_join(state) {\n  let curr, last;\n  const blockTokens = state.tokens;\n  const l2 = blockTokens.length;\n  for (let j2 = 0; j2 < l2; j2++) {\n    if (blockTokens[j2].type !== \"inline\") continue;\n    const tokens = blockTokens[j2].children;\n    const max = tokens.length;\n    for (curr = 0; curr < max; curr++) {\n      if (tokens[curr].type === \"text_special\") {\n        tokens[curr].type = \"text\";\n      }\n    }\n    for (curr = last = 0; curr < max; curr++) {\n      if (tokens[curr].type === \"text\" && curr + 1 < max && tokens[curr + 1].type === \"text\") {\n        tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n      } else {\n        if (curr !== last) {\n          tokens[last] = tokens[curr];\n        }\n        last++;\n      }\n    }\n    if (curr !== last) {\n      tokens.length = last;\n    }\n  }\n}\nconst _rules$2 = [\n  [\"normalize\", normalize$3],\n  [\"block\", block],\n  [\"inline\", inline],\n  [\"linkify\", linkify$1],\n  [\"replacements\", replace],\n  [\"smartquotes\", smartquotes],\n  // `text_join` finds `text_special` tokens (for escape sequences)\n  // and joins them with the rest of the text\n  [\"text_join\", text_join]\n];\nfunction Core() {\n  this.ruler = new Ruler();\n  for (let i3 = 0; i3 < _rules$2.length; i3++) {\n    this.ruler.push(_rules$2[i3][0], _rules$2[i3][1]);\n  }\n}\nCore.prototype.process = function(state) {\n  const rules = this.ruler.getRules(\"\");\n  for (let i3 = 0, l2 = rules.length; i3 < l2; i3++) {\n    rules[i3](state);\n  }\n};\nCore.prototype.State = StateCore;\nfunction StateBlock(src, md, env, tokens) {\n  this.src = src;\n  this.md = md;\n  this.env = env;\n  this.tokens = tokens;\n  this.bMarks = [];\n  this.eMarks = [];\n  this.tShift = [];\n  this.sCount = [];\n  this.bsCount = [];\n  this.blkIndent = 0;\n  this.line = 0;\n  this.lineMax = 0;\n  this.tight = false;\n  this.ddIndent = -1;\n  this.listIndent = -1;\n  this.parentType = \"root\";\n  this.level = 0;\n  const s2 = this.src;\n  for (let start = 0, pos = 0, indent = 0, offset = 0, len = s2.length, indent_found = false; pos < len; pos++) {\n    const ch = s2.charCodeAt(pos);\n    if (!indent_found) {\n      if (isSpace(ch)) {\n        indent++;\n        if (ch === 9) {\n          offset += 4 - offset % 4;\n        } else {\n          offset++;\n        }\n        continue;\n      } else {\n        indent_found = true;\n      }\n    }\n    if (ch === 10 || pos === len - 1) {\n      if (ch !== 10) {\n        pos++;\n      }\n      this.bMarks.push(start);\n      this.eMarks.push(pos);\n      this.tShift.push(indent);\n      this.sCount.push(offset);\n      this.bsCount.push(0);\n      indent_found = false;\n      indent = 0;\n      offset = 0;\n      start = pos + 1;\n    }\n  }\n  this.bMarks.push(s2.length);\n  this.eMarks.push(s2.length);\n  this.tShift.push(0);\n  this.sCount.push(0);\n  this.bsCount.push(0);\n  this.lineMax = this.bMarks.length - 1;\n}\nStateBlock.prototype.push = function(type, tag, nesting) {\n  const token = new Token(type, tag, nesting);\n  token.block = true;\n  if (nesting < 0) this.level--;\n  token.level = this.level;\n  if (nesting > 0) this.level++;\n  this.tokens.push(token);\n  return token;\n};\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n  return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n  for (let max = this.lineMax; from < max; from++) {\n    if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n      break;\n    }\n  }\n  return from;\n};\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n  for (let max = this.src.length; pos < max; pos++) {\n    const ch = this.src.charCodeAt(pos);\n    if (!isSpace(ch)) {\n      break;\n    }\n  }\n  return pos;\n};\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n  if (pos <= min) {\n    return pos;\n  }\n  while (pos > min) {\n    if (!isSpace(this.src.charCodeAt(--pos))) {\n      return pos + 1;\n    }\n  }\n  return pos;\n};\nStateBlock.prototype.skipChars = function skipChars(pos, code2) {\n  for (let max = this.src.length; pos < max; pos++) {\n    if (this.src.charCodeAt(pos) !== code2) {\n      break;\n    }\n  }\n  return pos;\n};\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code2, min) {\n  if (pos <= min) {\n    return pos;\n  }\n  while (pos > min) {\n    if (code2 !== this.src.charCodeAt(--pos)) {\n      return pos + 1;\n    }\n  }\n  return pos;\n};\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n  if (begin >= end) {\n    return \"\";\n  }\n  const queue = new Array(end - begin);\n  for (let i3 = 0, line = begin; line < end; line++, i3++) {\n    let lineIndent = 0;\n    const lineStart = this.bMarks[line];\n    let first = lineStart;\n    let last;\n    if (line + 1 < end || keepLastLF) {\n      last = this.eMarks[line] + 1;\n    } else {\n      last = this.eMarks[line];\n    }\n    while (first < last && lineIndent < indent) {\n      const ch = this.src.charCodeAt(first);\n      if (isSpace(ch)) {\n        if (ch === 9) {\n          lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n        } else {\n          lineIndent++;\n        }\n      } else if (first - lineStart < this.tShift[line]) {\n        lineIndent++;\n      } else {\n        break;\n      }\n      first++;\n    }\n    if (lineIndent > indent) {\n      queue[i3] = new Array(lineIndent - indent + 1).join(\" \") + this.src.slice(first, last);\n    } else {\n      queue[i3] = this.src.slice(first, last);\n    }\n  }\n  return queue.join(\"\");\n};\nStateBlock.prototype.Token = Token;\nconst MAX_AUTOCOMPLETED_CELLS = 65536;\nfunction getLine(state, line) {\n  const pos = state.bMarks[line] + state.tShift[line];\n  const max = state.eMarks[line];\n  return state.src.slice(pos, max);\n}\nfunction escapedSplit(str) {\n  const result = [];\n  const max = str.length;\n  let pos = 0;\n  let ch = str.charCodeAt(pos);\n  let isEscaped = false;\n  let lastPos = 0;\n  let current = \"\";\n  while (pos < max) {\n    if (ch === 124) {\n      if (!isEscaped) {\n        result.push(current + str.substring(lastPos, pos));\n        current = \"\";\n        lastPos = pos + 1;\n      } else {\n        current += str.substring(lastPos, pos - 1);\n        lastPos = pos;\n      }\n    }\n    isEscaped = ch === 92;\n    pos++;\n    ch = str.charCodeAt(pos);\n  }\n  result.push(current + str.substring(lastPos));\n  return result;\n}\nfunction table(state, startLine, endLine, silent) {\n  if (startLine + 2 > endLine) {\n    return false;\n  }\n  let nextLine = startLine + 1;\n  if (state.sCount[nextLine] < state.blkIndent) {\n    return false;\n  }\n  if (state.sCount[nextLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  let pos = state.bMarks[nextLine] + state.tShift[nextLine];\n  if (pos >= state.eMarks[nextLine]) {\n    return false;\n  }\n  const firstCh = state.src.charCodeAt(pos++);\n  if (firstCh !== 124 && firstCh !== 45 && firstCh !== 58) {\n    return false;\n  }\n  if (pos >= state.eMarks[nextLine]) {\n    return false;\n  }\n  const secondCh = state.src.charCodeAt(pos++);\n  if (secondCh !== 124 && secondCh !== 45 && secondCh !== 58 && !isSpace(secondCh)) {\n    return false;\n  }\n  if (firstCh === 45 && isSpace(secondCh)) {\n    return false;\n  }\n  while (pos < state.eMarks[nextLine]) {\n    const ch = state.src.charCodeAt(pos);\n    if (ch !== 124 && ch !== 45 && ch !== 58 && !isSpace(ch)) {\n      return false;\n    }\n    pos++;\n  }\n  let lineText = getLine(state, startLine + 1);\n  let columns = lineText.split(\"|\");\n  const aligns = [];\n  for (let i3 = 0; i3 < columns.length; i3++) {\n    const t2 = columns[i3].trim();\n    if (!t2) {\n      if (i3 === 0 || i3 === columns.length - 1) {\n        continue;\n      } else {\n        return false;\n      }\n    }\n    if (!/^:?-+:?$/.test(t2)) {\n      return false;\n    }\n    if (t2.charCodeAt(t2.length - 1) === 58) {\n      aligns.push(t2.charCodeAt(0) === 58 ? \"center\" : \"right\");\n    } else if (t2.charCodeAt(0) === 58) {\n      aligns.push(\"left\");\n    } else {\n      aligns.push(\"\");\n    }\n  }\n  lineText = getLine(state, startLine).trim();\n  if (lineText.indexOf(\"|\") === -1) {\n    return false;\n  }\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  columns = escapedSplit(lineText);\n  if (columns.length && columns[0] === \"\") columns.shift();\n  if (columns.length && columns[columns.length - 1] === \"\") columns.pop();\n  const columnCount = columns.length;\n  if (columnCount === 0 || columnCount !== aligns.length) {\n    return false;\n  }\n  if (silent) {\n    return true;\n  }\n  const oldParentType = state.parentType;\n  state.parentType = \"table\";\n  const terminatorRules = state.md.block.ruler.getRules(\"blockquote\");\n  const token_to = state.push(\"table_open\", \"table\", 1);\n  const tableLines = [startLine, 0];\n  token_to.map = tableLines;\n  const token_tho = state.push(\"thead_open\", \"thead\", 1);\n  token_tho.map = [startLine, startLine + 1];\n  const token_htro = state.push(\"tr_open\", \"tr\", 1);\n  token_htro.map = [startLine, startLine + 1];\n  for (let i3 = 0; i3 < columns.length; i3++) {\n    const token_ho = state.push(\"th_open\", \"th\", 1);\n    if (aligns[i3]) {\n      token_ho.attrs = [[\"style\", \"text-align:\" + aligns[i3]]];\n    }\n    const token_il = state.push(\"inline\", \"\", 0);\n    token_il.content = columns[i3].trim();\n    token_il.children = [];\n    state.push(\"th_close\", \"th\", -1);\n  }\n  state.push(\"tr_close\", \"tr\", -1);\n  state.push(\"thead_close\", \"thead\", -1);\n  let tbodyLines;\n  let autocompletedCells = 0;\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.sCount[nextLine] < state.blkIndent) {\n      break;\n    }\n    let terminate = false;\n    for (let i3 = 0, l2 = terminatorRules.length; i3 < l2; i3++) {\n      if (terminatorRules[i3](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) {\n      break;\n    }\n    lineText = getLine(state, nextLine).trim();\n    if (!lineText) {\n      break;\n    }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      break;\n    }\n    columns = escapedSplit(lineText);\n    if (columns.length && columns[0] === \"\") columns.shift();\n    if (columns.length && columns[columns.length - 1] === \"\") columns.pop();\n    autocompletedCells += columnCount - columns.length;\n    if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) {\n      break;\n    }\n    if (nextLine === startLine + 2) {\n      const token_tbo = state.push(\"tbody_open\", \"tbody\", 1);\n      token_tbo.map = tbodyLines = [startLine + 2, 0];\n    }\n    const token_tro = state.push(\"tr_open\", \"tr\", 1);\n    token_tro.map = [nextLine, nextLine + 1];\n    for (let i3 = 0; i3 < columnCount; i3++) {\n      const token_tdo = state.push(\"td_open\", \"td\", 1);\n      if (aligns[i3]) {\n        token_tdo.attrs = [[\"style\", \"text-align:\" + aligns[i3]]];\n      }\n      const token_il = state.push(\"inline\", \"\", 0);\n      token_il.content = columns[i3] ? columns[i3].trim() : \"\";\n      token_il.children = [];\n      state.push(\"td_close\", \"td\", -1);\n    }\n    state.push(\"tr_close\", \"tr\", -1);\n  }\n  if (tbodyLines) {\n    state.push(\"tbody_close\", \"tbody\", -1);\n    tbodyLines[1] = nextLine;\n  }\n  state.push(\"table_close\", \"table\", -1);\n  tableLines[1] = nextLine;\n  state.parentType = oldParentType;\n  state.line = nextLine;\n  return true;\n}\nfunction code(state, startLine, endLine) {\n  if (state.sCount[startLine] - state.blkIndent < 4) {\n    return false;\n  }\n  let nextLine = startLine + 1;\n  let last = nextLine;\n  while (nextLine < endLine) {\n    if (state.isEmpty(nextLine)) {\n      nextLine++;\n      continue;\n    }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      nextLine++;\n      last = nextLine;\n      continue;\n    }\n    break;\n  }\n  state.line = last;\n  const token = state.push(\"code_block\", \"code\", 0);\n  token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + \"\\n\";\n  token.map = [startLine, state.line];\n  return true;\n}\nfunction fence(state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  let max = state.eMarks[startLine];\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  if (pos + 3 > max) {\n    return false;\n  }\n  const marker = state.src.charCodeAt(pos);\n  if (marker !== 126 && marker !== 96) {\n    return false;\n  }\n  let mem = pos;\n  pos = state.skipChars(pos, marker);\n  let len = pos - mem;\n  if (len < 3) {\n    return false;\n  }\n  const markup = state.src.slice(mem, pos);\n  const params = state.src.slice(pos, max);\n  if (marker === 96) {\n    if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n      return false;\n    }\n  }\n  if (silent) {\n    return true;\n  }\n  let nextLine = startLine;\n  let haveEndMarker = false;\n  for (; ; ) {\n    nextLine++;\n    if (nextLine >= endLine) {\n      break;\n    }\n    pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n    if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n      break;\n    }\n    if (state.src.charCodeAt(pos) !== marker) {\n      continue;\n    }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      continue;\n    }\n    pos = state.skipChars(pos, marker);\n    if (pos - mem < len) {\n      continue;\n    }\n    pos = state.skipSpaces(pos);\n    if (pos < max) {\n      continue;\n    }\n    haveEndMarker = true;\n    break;\n  }\n  len = state.sCount[startLine];\n  state.line = nextLine + (haveEndMarker ? 1 : 0);\n  const token = state.push(\"fence\", \"code\", 0);\n  token.info = params;\n  token.content = state.getLines(startLine + 1, nextLine, len, true);\n  token.markup = markup;\n  token.map = [startLine, state.line];\n  return true;\n}\nfunction blockquote(state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  let max = state.eMarks[startLine];\n  const oldLineMax = state.lineMax;\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  if (state.src.charCodeAt(pos) !== 62) {\n    return false;\n  }\n  if (silent) {\n    return true;\n  }\n  const oldBMarks = [];\n  const oldBSCount = [];\n  const oldSCount = [];\n  const oldTShift = [];\n  const terminatorRules = state.md.block.ruler.getRules(\"blockquote\");\n  const oldParentType = state.parentType;\n  state.parentType = \"blockquote\";\n  let lastLineEmpty = false;\n  let nextLine;\n  for (nextLine = startLine; nextLine < endLine; nextLine++) {\n    const isOutdented = state.sCount[nextLine] < state.blkIndent;\n    pos = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n    if (pos >= max) {\n      break;\n    }\n    if (state.src.charCodeAt(pos++) === 62 && !isOutdented) {\n      let initial = state.sCount[nextLine] + 1;\n      let spaceAfterMarker;\n      let adjustTab;\n      if (state.src.charCodeAt(pos) === 32) {\n        pos++;\n        initial++;\n        adjustTab = false;\n        spaceAfterMarker = true;\n      } else if (state.src.charCodeAt(pos) === 9) {\n        spaceAfterMarker = true;\n        if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n          pos++;\n          initial++;\n          adjustTab = false;\n        } else {\n          adjustTab = true;\n        }\n      } else {\n        spaceAfterMarker = false;\n      }\n      let offset = initial;\n      oldBMarks.push(state.bMarks[nextLine]);\n      state.bMarks[nextLine] = pos;\n      while (pos < max) {\n        const ch = state.src.charCodeAt(pos);\n        if (isSpace(ch)) {\n          if (ch === 9) {\n            offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n          } else {\n            offset++;\n          }\n        } else {\n          break;\n        }\n        pos++;\n      }\n      lastLineEmpty = pos >= max;\n      oldBSCount.push(state.bsCount[nextLine]);\n      state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n      oldSCount.push(state.sCount[nextLine]);\n      state.sCount[nextLine] = offset - initial;\n      oldTShift.push(state.tShift[nextLine]);\n      state.tShift[nextLine] = pos - state.bMarks[nextLine];\n      continue;\n    }\n    if (lastLineEmpty) {\n      break;\n    }\n    let terminate = false;\n    for (let i3 = 0, l2 = terminatorRules.length; i3 < l2; i3++) {\n      if (terminatorRules[i3](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) {\n      state.lineMax = nextLine;\n      if (state.blkIndent !== 0) {\n        oldBMarks.push(state.bMarks[nextLine]);\n        oldBSCount.push(state.bsCount[nextLine]);\n        oldTShift.push(state.tShift[nextLine]);\n        oldSCount.push(state.sCount[nextLine]);\n        state.sCount[nextLine] -= state.blkIndent;\n      }\n      break;\n    }\n    oldBMarks.push(state.bMarks[nextLine]);\n    oldBSCount.push(state.bsCount[nextLine]);\n    oldTShift.push(state.tShift[nextLine]);\n    oldSCount.push(state.sCount[nextLine]);\n    state.sCount[nextLine] = -1;\n  }\n  const oldIndent = state.blkIndent;\n  state.blkIndent = 0;\n  const token_o = state.push(\"blockquote_open\", \"blockquote\", 1);\n  token_o.markup = \">\";\n  const lines = [startLine, 0];\n  token_o.map = lines;\n  state.md.block.tokenize(state, startLine, nextLine);\n  const token_c = state.push(\"blockquote_close\", \"blockquote\", -1);\n  token_c.markup = \">\";\n  state.lineMax = oldLineMax;\n  state.parentType = oldParentType;\n  lines[1] = state.line;\n  for (let i3 = 0; i3 < oldTShift.length; i3++) {\n    state.bMarks[i3 + startLine] = oldBMarks[i3];\n    state.tShift[i3 + startLine] = oldTShift[i3];\n    state.sCount[i3 + startLine] = oldSCount[i3];\n    state.bsCount[i3 + startLine] = oldBSCount[i3];\n  }\n  state.blkIndent = oldIndent;\n  return true;\n}\nfunction hr(state, startLine, endLine, silent) {\n  const max = state.eMarks[startLine];\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  const marker = state.src.charCodeAt(pos++);\n  if (marker !== 42 && marker !== 45 && marker !== 95) {\n    return false;\n  }\n  let cnt = 1;\n  while (pos < max) {\n    const ch = state.src.charCodeAt(pos++);\n    if (ch !== marker && !isSpace(ch)) {\n      return false;\n    }\n    if (ch === marker) {\n      cnt++;\n    }\n  }\n  if (cnt < 3) {\n    return false;\n  }\n  if (silent) {\n    return true;\n  }\n  state.line = startLine + 1;\n  const token = state.push(\"hr\", \"hr\", 0);\n  token.map = [startLine, state.line];\n  token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n  return true;\n}\nfunction skipBulletListMarker(state, startLine) {\n  const max = state.eMarks[startLine];\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  const marker = state.src.charCodeAt(pos++);\n  if (marker !== 42 && marker !== 45 && marker !== 43) {\n    return -1;\n  }\n  if (pos < max) {\n    const ch = state.src.charCodeAt(pos);\n    if (!isSpace(ch)) {\n      return -1;\n    }\n  }\n  return pos;\n}\nfunction skipOrderedListMarker(state, startLine) {\n  const start = state.bMarks[startLine] + state.tShift[startLine];\n  const max = state.eMarks[startLine];\n  let pos = start;\n  if (pos + 1 >= max) {\n    return -1;\n  }\n  let ch = state.src.charCodeAt(pos++);\n  if (ch < 48 || ch > 57) {\n    return -1;\n  }\n  for (; ; ) {\n    if (pos >= max) {\n      return -1;\n    }\n    ch = state.src.charCodeAt(pos++);\n    if (ch >= 48 && ch <= 57) {\n      if (pos - start >= 10) {\n        return -1;\n      }\n      continue;\n    }\n    if (ch === 41 || ch === 46) {\n      break;\n    }\n    return -1;\n  }\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n    if (!isSpace(ch)) {\n      return -1;\n    }\n  }\n  return pos;\n}\nfunction markTightParagraphs(state, idx) {\n  const level2 = state.level + 2;\n  for (let i3 = idx + 2, l2 = state.tokens.length - 2; i3 < l2; i3++) {\n    if (state.tokens[i3].level === level2 && state.tokens[i3].type === \"paragraph_open\") {\n      state.tokens[i3 + 2].hidden = true;\n      state.tokens[i3].hidden = true;\n      i3 += 2;\n    }\n  }\n}\nfunction list(state, startLine, endLine, silent) {\n  let max, pos, start, token;\n  let nextLine = startLine;\n  let tight = true;\n  if (state.sCount[nextLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  if (state.listIndent >= 0 && state.sCount[nextLine] - state.listIndent >= 4 && state.sCount[nextLine] < state.blkIndent) {\n    return false;\n  }\n  let isTerminatingParagraph = false;\n  if (silent && state.parentType === \"paragraph\") {\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      isTerminatingParagraph = true;\n    }\n  }\n  let isOrdered;\n  let markerValue;\n  let posAfterMarker;\n  if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n    isOrdered = true;\n    start = state.bMarks[nextLine] + state.tShift[nextLine];\n    markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n    if (isTerminatingParagraph && markerValue !== 1) return false;\n  } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n    isOrdered = false;\n  } else {\n    return false;\n  }\n  if (isTerminatingParagraph) {\n    if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false;\n  }\n  if (silent) {\n    return true;\n  }\n  const markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n  const listTokIdx = state.tokens.length;\n  if (isOrdered) {\n    token = state.push(\"ordered_list_open\", \"ol\", 1);\n    if (markerValue !== 1) {\n      token.attrs = [[\"start\", markerValue]];\n    }\n  } else {\n    token = state.push(\"bullet_list_open\", \"ul\", 1);\n  }\n  const listLines = [nextLine, 0];\n  token.map = listLines;\n  token.markup = String.fromCharCode(markerCharCode);\n  let prevEmptyEnd = false;\n  const terminatorRules = state.md.block.ruler.getRules(\"list\");\n  const oldParentType = state.parentType;\n  state.parentType = \"list\";\n  while (nextLine < endLine) {\n    pos = posAfterMarker;\n    max = state.eMarks[nextLine];\n    const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine]);\n    let offset = initial;\n    while (pos < max) {\n      const ch = state.src.charCodeAt(pos);\n      if (ch === 9) {\n        offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n      } else if (ch === 32) {\n        offset++;\n      } else {\n        break;\n      }\n      pos++;\n    }\n    const contentStart = pos;\n    let indentAfterMarker;\n    if (contentStart >= max) {\n      indentAfterMarker = 1;\n    } else {\n      indentAfterMarker = offset - initial;\n    }\n    if (indentAfterMarker > 4) {\n      indentAfterMarker = 1;\n    }\n    const indent = initial + indentAfterMarker;\n    token = state.push(\"list_item_open\", \"li\", 1);\n    token.markup = String.fromCharCode(markerCharCode);\n    const itemLines = [nextLine, 0];\n    token.map = itemLines;\n    if (isOrdered) {\n      token.info = state.src.slice(start, posAfterMarker - 1);\n    }\n    const oldTight = state.tight;\n    const oldTShift = state.tShift[nextLine];\n    const oldSCount = state.sCount[nextLine];\n    const oldListIndent = state.listIndent;\n    state.listIndent = state.blkIndent;\n    state.blkIndent = indent;\n    state.tight = true;\n    state.tShift[nextLine] = contentStart - state.bMarks[nextLine];\n    state.sCount[nextLine] = offset;\n    if (contentStart >= max && state.isEmpty(nextLine + 1)) {\n      state.line = Math.min(state.line + 2, endLine);\n    } else {\n      state.md.block.tokenize(state, nextLine, endLine, true);\n    }\n    if (!state.tight || prevEmptyEnd) {\n      tight = false;\n    }\n    prevEmptyEnd = state.line - nextLine > 1 && state.isEmpty(state.line - 1);\n    state.blkIndent = state.listIndent;\n    state.listIndent = oldListIndent;\n    state.tShift[nextLine] = oldTShift;\n    state.sCount[nextLine] = oldSCount;\n    state.tight = oldTight;\n    token = state.push(\"list_item_close\", \"li\", -1);\n    token.markup = String.fromCharCode(markerCharCode);\n    nextLine = state.line;\n    itemLines[1] = nextLine;\n    if (nextLine >= endLine) {\n      break;\n    }\n    if (state.sCount[nextLine] < state.blkIndent) {\n      break;\n    }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      break;\n    }\n    let terminate = false;\n    for (let i3 = 0, l2 = terminatorRules.length; i3 < l2; i3++) {\n      if (terminatorRules[i3](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) {\n      break;\n    }\n    if (isOrdered) {\n      posAfterMarker = skipOrderedListMarker(state, nextLine);\n      if (posAfterMarker < 0) {\n        break;\n      }\n      start = state.bMarks[nextLine] + state.tShift[nextLine];\n    } else {\n      posAfterMarker = skipBulletListMarker(state, nextLine);\n      if (posAfterMarker < 0) {\n        break;\n      }\n    }\n    if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) {\n      break;\n    }\n  }\n  if (isOrdered) {\n    token = state.push(\"ordered_list_close\", \"ol\", -1);\n  } else {\n    token = state.push(\"bullet_list_close\", \"ul\", -1);\n  }\n  token.markup = String.fromCharCode(markerCharCode);\n  listLines[1] = nextLine;\n  state.line = nextLine;\n  state.parentType = oldParentType;\n  if (tight) {\n    markTightParagraphs(state, listTokIdx);\n  }\n  return true;\n}\nfunction reference(state, startLine, _endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  let max = state.eMarks[startLine];\n  let nextLine = startLine + 1;\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  if (state.src.charCodeAt(pos) !== 91) {\n    return false;\n  }\n  function getNextLine(nextLine2) {\n    const endLine = state.lineMax;\n    if (nextLine2 >= endLine || state.isEmpty(nextLine2)) {\n      return null;\n    }\n    let isContinuation = false;\n    if (state.sCount[nextLine2] - state.blkIndent > 3) {\n      isContinuation = true;\n    }\n    if (state.sCount[nextLine2] < 0) {\n      isContinuation = true;\n    }\n    if (!isContinuation) {\n      const terminatorRules = state.md.block.ruler.getRules(\"reference\");\n      const oldParentType = state.parentType;\n      state.parentType = \"reference\";\n      let terminate = false;\n      for (let i3 = 0, l2 = terminatorRules.length; i3 < l2; i3++) {\n        if (terminatorRules[i3](state, nextLine2, endLine, true)) {\n          terminate = true;\n          break;\n        }\n      }\n      state.parentType = oldParentType;\n      if (terminate) {\n        return null;\n      }\n    }\n    const pos2 = state.bMarks[nextLine2] + state.tShift[nextLine2];\n    const max2 = state.eMarks[nextLine2];\n    return state.src.slice(pos2, max2 + 1);\n  }\n  let str = state.src.slice(pos, max + 1);\n  max = str.length;\n  let labelEnd = -1;\n  for (pos = 1; pos < max; pos++) {\n    const ch = str.charCodeAt(pos);\n    if (ch === 91) {\n      return false;\n    } else if (ch === 93) {\n      labelEnd = pos;\n      break;\n    } else if (ch === 10) {\n      const lineContent = getNextLine(nextLine);\n      if (lineContent !== null) {\n        str += lineContent;\n        max = str.length;\n        nextLine++;\n      }\n    } else if (ch === 92) {\n      pos++;\n      if (pos < max && str.charCodeAt(pos) === 10) {\n        const lineContent = getNextLine(nextLine);\n        if (lineContent !== null) {\n          str += lineContent;\n          max = str.length;\n          nextLine++;\n        }\n      }\n    }\n  }\n  if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 58) {\n    return false;\n  }\n  for (pos = labelEnd + 2; pos < max; pos++) {\n    const ch = str.charCodeAt(pos);\n    if (ch === 10) {\n      const lineContent = getNextLine(nextLine);\n      if (lineContent !== null) {\n        str += lineContent;\n        max = str.length;\n        nextLine++;\n      }\n    } else if (isSpace(ch)) ;\n    else {\n      break;\n    }\n  }\n  const destRes = state.md.helpers.parseLinkDestination(str, pos, max);\n  if (!destRes.ok) {\n    return false;\n  }\n  const href = state.md.normalizeLink(destRes.str);\n  if (!state.md.validateLink(href)) {\n    return false;\n  }\n  pos = destRes.pos;\n  const destEndPos = pos;\n  const destEndLineNo = nextLine;\n  const start = pos;\n  for (; pos < max; pos++) {\n    const ch = str.charCodeAt(pos);\n    if (ch === 10) {\n      const lineContent = getNextLine(nextLine);\n      if (lineContent !== null) {\n        str += lineContent;\n        max = str.length;\n        nextLine++;\n      }\n    } else if (isSpace(ch)) ;\n    else {\n      break;\n    }\n  }\n  let titleRes = state.md.helpers.parseLinkTitle(str, pos, max);\n  while (titleRes.can_continue) {\n    const lineContent = getNextLine(nextLine);\n    if (lineContent === null) break;\n    str += lineContent;\n    pos = max;\n    max = str.length;\n    nextLine++;\n    titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes);\n  }\n  let title;\n  if (pos < max && start !== pos && titleRes.ok) {\n    title = titleRes.str;\n    pos = titleRes.pos;\n  } else {\n    title = \"\";\n    pos = destEndPos;\n    nextLine = destEndLineNo;\n  }\n  while (pos < max) {\n    const ch = str.charCodeAt(pos);\n    if (!isSpace(ch)) {\n      break;\n    }\n    pos++;\n  }\n  if (pos < max && str.charCodeAt(pos) !== 10) {\n    if (title) {\n      title = \"\";\n      pos = destEndPos;\n      nextLine = destEndLineNo;\n      while (pos < max) {\n        const ch = str.charCodeAt(pos);\n        if (!isSpace(ch)) {\n          break;\n        }\n        pos++;\n      }\n    }\n  }\n  if (pos < max && str.charCodeAt(pos) !== 10) {\n    return false;\n  }\n  const label = normalizeReference(str.slice(1, labelEnd));\n  if (!label) {\n    return false;\n  }\n  if (silent) {\n    return true;\n  }\n  if (typeof state.env.references === \"undefined\") {\n    state.env.references = {};\n  }\n  if (typeof state.env.references[label] === \"undefined\") {\n    state.env.references[label] = { title, href };\n  }\n  state.line = nextLine;\n  return true;\n}\nconst block_names = [\n  \"address\",\n  \"article\",\n  \"aside\",\n  \"base\",\n  \"basefont\",\n  \"blockquote\",\n  \"body\",\n  \"caption\",\n  \"center\",\n  \"col\",\n  \"colgroup\",\n  \"dd\",\n  \"details\",\n  \"dialog\",\n  \"dir\",\n  \"div\",\n  \"dl\",\n  \"dt\",\n  \"fieldset\",\n  \"figcaption\",\n  \"figure\",\n  \"footer\",\n  \"form\",\n  \"frame\",\n  \"frameset\",\n  \"h1\",\n  \"h2\",\n  \"h3\",\n  \"h4\",\n  \"h5\",\n  \"h6\",\n  \"head\",\n  \"header\",\n  \"hr\",\n  \"html\",\n  \"iframe\",\n  \"legend\",\n  \"li\",\n  \"link\",\n  \"main\",\n  \"menu\",\n  \"menuitem\",\n  \"nav\",\n  \"noframes\",\n  \"ol\",\n  \"optgroup\",\n  \"option\",\n  \"p\",\n  \"param\",\n  \"search\",\n  \"section\",\n  \"summary\",\n  \"table\",\n  \"tbody\",\n  \"td\",\n  \"tfoot\",\n  \"th\",\n  \"thead\",\n  \"title\",\n  \"tr\",\n  \"track\",\n  \"ul\"\n];\nconst attr_name = \"[a-zA-Z_:][a-zA-Z0-9:._-]*\";\nconst unquoted = \"[^\\\"'=<>`\\\\x00-\\\\x20]+\";\nconst single_quoted = \"'[^']*'\";\nconst double_quoted = '\"[^\"]*\"';\nconst attr_value = \"(?:\" + unquoted + \"|\" + single_quoted + \"|\" + double_quoted + \")\";\nconst attribute = \"(?:\\\\s+\" + attr_name + \"(?:\\\\s*=\\\\s*\" + attr_value + \")?)\";\nconst open_tag = \"<[A-Za-z][A-Za-z0-9\\\\-]*\" + attribute + \"*\\\\s*\\\\/?>\";\nconst close_tag = \"<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>\";\nconst comment = \"<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->\";\nconst processing = \"<[?][\\\\s\\\\S]*?[?]>\";\nconst declaration = \"<![A-Za-z][^>]*>\";\nconst cdata = \"<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\";\nconst HTML_TAG_RE = new RegExp(\"^(?:\" + open_tag + \"|\" + close_tag + \"|\" + comment + \"|\" + processing + \"|\" + declaration + \"|\" + cdata + \")\");\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp(\"^(?:\" + open_tag + \"|\" + close_tag + \")\");\nconst HTML_SEQUENCES = [\n  [/^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true],\n  [/^<!--/, /-->/, true],\n  [/^<\\?/, /\\?>/, true],\n  [/^<![A-Z]/, />/, true],\n  [/^<!\\[CDATA\\[/, /\\]\\]>/, true],\n  [new RegExp(\"^</?(\" + block_names.join(\"|\") + \")(?=(\\\\s|/?>|$))\", \"i\"), /^$/, true],\n  [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + \"\\\\s*$\"), /^$/, false]\n];\nfunction html_block(state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  let max = state.eMarks[startLine];\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  if (!state.md.options.html) {\n    return false;\n  }\n  if (state.src.charCodeAt(pos) !== 60) {\n    return false;\n  }\n  let lineText = state.src.slice(pos, max);\n  let i3 = 0;\n  for (; i3 < HTML_SEQUENCES.length; i3++) {\n    if (HTML_SEQUENCES[i3][0].test(lineText)) {\n      break;\n    }\n  }\n  if (i3 === HTML_SEQUENCES.length) {\n    return false;\n  }\n  if (silent) {\n    return HTML_SEQUENCES[i3][2];\n  }\n  let nextLine = startLine + 1;\n  if (!HTML_SEQUENCES[i3][1].test(lineText)) {\n    for (; nextLine < endLine; nextLine++) {\n      if (state.sCount[nextLine] < state.blkIndent) {\n        break;\n      }\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n      lineText = state.src.slice(pos, max);\n      if (HTML_SEQUENCES[i3][1].test(lineText)) {\n        if (lineText.length !== 0) {\n          nextLine++;\n        }\n        break;\n      }\n    }\n  }\n  state.line = nextLine;\n  const token = state.push(\"html_block\", \"\", 0);\n  token.map = [startLine, nextLine];\n  token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n  return true;\n}\nfunction heading(state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  let max = state.eMarks[startLine];\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  let ch = state.src.charCodeAt(pos);\n  if (ch !== 35 || pos >= max) {\n    return false;\n  }\n  let level2 = 1;\n  ch = state.src.charCodeAt(++pos);\n  while (ch === 35 && pos < max && level2 <= 6) {\n    level2++;\n    ch = state.src.charCodeAt(++pos);\n  }\n  if (level2 > 6 || pos < max && !isSpace(ch)) {\n    return false;\n  }\n  if (silent) {\n    return true;\n  }\n  max = state.skipSpacesBack(max, pos);\n  const tmp = state.skipCharsBack(max, 35, pos);\n  if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n    max = tmp;\n  }\n  state.line = startLine + 1;\n  const token_o = state.push(\"heading_open\", \"h\" + String(level2), 1);\n  token_o.markup = \"########\".slice(0, level2);\n  token_o.map = [startLine, state.line];\n  const token_i = state.push(\"inline\", \"\", 0);\n  token_i.content = state.src.slice(pos, max).trim();\n  token_i.map = [startLine, state.line];\n  token_i.children = [];\n  const token_c = state.push(\"heading_close\", \"h\" + String(level2), -1);\n  token_c.markup = \"########\".slice(0, level2);\n  return true;\n}\nfunction lheading(state, startLine, endLine) {\n  const terminatorRules = state.md.block.ruler.getRules(\"paragraph\");\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  const oldParentType = state.parentType;\n  state.parentType = \"paragraph\";\n  let level2 = 0;\n  let marker;\n  let nextLine = startLine + 1;\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    if (state.sCount[nextLine] - state.blkIndent > 3) {\n      continue;\n    }\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      let pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      const max = state.eMarks[nextLine];\n      if (pos < max) {\n        marker = state.src.charCodeAt(pos);\n        if (marker === 45 || marker === 61) {\n          pos = state.skipChars(pos, marker);\n          pos = state.skipSpaces(pos);\n          if (pos >= max) {\n            level2 = marker === 61 ? 1 : 2;\n            break;\n          }\n        }\n      }\n    }\n    if (state.sCount[nextLine] < 0) {\n      continue;\n    }\n    let terminate = false;\n    for (let i3 = 0, l2 = terminatorRules.length; i3 < l2; i3++) {\n      if (terminatorRules[i3](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) {\n      break;\n    }\n  }\n  if (!level2) {\n    return false;\n  }\n  const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n  state.line = nextLine + 1;\n  const token_o = state.push(\"heading_open\", \"h\" + String(level2), 1);\n  token_o.markup = String.fromCharCode(marker);\n  token_o.map = [startLine, state.line];\n  const token_i = state.push(\"inline\", \"\", 0);\n  token_i.content = content;\n  token_i.map = [startLine, state.line - 1];\n  token_i.children = [];\n  const token_c = state.push(\"heading_close\", \"h\" + String(level2), -1);\n  token_c.markup = String.fromCharCode(marker);\n  state.parentType = oldParentType;\n  return true;\n}\nfunction paragraph(state, startLine, endLine) {\n  const terminatorRules = state.md.block.ruler.getRules(\"paragraph\");\n  const oldParentType = state.parentType;\n  let nextLine = startLine + 1;\n  state.parentType = \"paragraph\";\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    if (state.sCount[nextLine] - state.blkIndent > 3) {\n      continue;\n    }\n    if (state.sCount[nextLine] < 0) {\n      continue;\n    }\n    let terminate = false;\n    for (let i3 = 0, l2 = terminatorRules.length; i3 < l2; i3++) {\n      if (terminatorRules[i3](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) {\n      break;\n    }\n  }\n  const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n  state.line = nextLine;\n  const token_o = state.push(\"paragraph_open\", \"p\", 1);\n  token_o.map = [startLine, state.line];\n  const token_i = state.push(\"inline\", \"\", 0);\n  token_i.content = content;\n  token_i.map = [startLine, state.line];\n  token_i.children = [];\n  state.push(\"paragraph_close\", \"p\", -1);\n  state.parentType = oldParentType;\n  return true;\n}\nconst _rules$1 = [\n  // First 2 params - rule name & source. Secondary array - list of rules,\n  // which can be terminated by this one.\n  [\"table\", table, [\"paragraph\", \"reference\"]],\n  [\"code\", code],\n  [\"fence\", fence, [\"paragraph\", \"reference\", \"blockquote\", \"list\"]],\n  [\"blockquote\", blockquote, [\"paragraph\", \"reference\", \"blockquote\", \"list\"]],\n  [\"hr\", hr, [\"paragraph\", \"reference\", \"blockquote\", \"list\"]],\n  [\"list\", list, [\"paragraph\", \"reference\", \"blockquote\"]],\n  [\"reference\", reference],\n  [\"html_block\", html_block, [\"paragraph\", \"reference\", \"blockquote\"]],\n  [\"heading\", heading, [\"paragraph\", \"reference\", \"blockquote\"]],\n  [\"lheading\", lheading],\n  [\"paragraph\", paragraph]\n];\nfunction ParserBlock() {\n  this.ruler = new Ruler();\n  for (let i3 = 0; i3 < _rules$1.length; i3++) {\n    this.ruler.push(_rules$1[i3][0], _rules$1[i3][1], { alt: (_rules$1[i3][2] || []).slice() });\n  }\n}\nParserBlock.prototype.tokenize = function(state, startLine, endLine) {\n  const rules = this.ruler.getRules(\"\");\n  const len = rules.length;\n  const maxNesting = state.md.options.maxNesting;\n  let line = startLine;\n  let hasEmptyLines = false;\n  while (line < endLine) {\n    state.line = line = state.skipEmptyLines(line);\n    if (line >= endLine) {\n      break;\n    }\n    if (state.sCount[line] < state.blkIndent) {\n      break;\n    }\n    if (state.level >= maxNesting) {\n      state.line = endLine;\n      break;\n    }\n    const prevLine = state.line;\n    let ok = false;\n    for (let i3 = 0; i3 < len; i3++) {\n      ok = rules[i3](state, line, endLine, false);\n      if (ok) {\n        if (prevLine >= state.line) {\n          throw new Error(\"block rule didn't increment state.line\");\n        }\n        break;\n      }\n    }\n    if (!ok) throw new Error(\"none of the block rules matched\");\n    state.tight = !hasEmptyLines;\n    if (state.isEmpty(state.line - 1)) {\n      hasEmptyLines = true;\n    }\n    line = state.line;\n    if (line < endLine && state.isEmpty(line)) {\n      hasEmptyLines = true;\n      line++;\n      state.line = line;\n    }\n  }\n};\nParserBlock.prototype.parse = function(src, md, env, outTokens) {\n  if (!src) {\n    return;\n  }\n  const state = new this.State(src, md, env, outTokens);\n  this.tokenize(state, state.line, state.lineMax);\n};\nParserBlock.prototype.State = StateBlock;\nfunction StateInline(src, md, env, outTokens) {\n  this.src = src;\n  this.env = env;\n  this.md = md;\n  this.tokens = outTokens;\n  this.tokens_meta = Array(outTokens.length);\n  this.pos = 0;\n  this.posMax = this.src.length;\n  this.level = 0;\n  this.pending = \"\";\n  this.pendingLevel = 0;\n  this.cache = {};\n  this.delimiters = [];\n  this._prev_delimiters = [];\n  this.backticks = {};\n  this.backticksScanned = false;\n  this.linkLevel = 0;\n}\nStateInline.prototype.pushPending = function() {\n  const token = new Token(\"text\", \"\", 0);\n  token.content = this.pending;\n  token.level = this.pendingLevel;\n  this.tokens.push(token);\n  this.pending = \"\";\n  return token;\n};\nStateInline.prototype.push = function(type, tag, nesting) {\n  if (this.pending) {\n    this.pushPending();\n  }\n  const token = new Token(type, tag, nesting);\n  let token_meta = null;\n  if (nesting < 0) {\n    this.level--;\n    this.delimiters = this._prev_delimiters.pop();\n  }\n  token.level = this.level;\n  if (nesting > 0) {\n    this.level++;\n    this._prev_delimiters.push(this.delimiters);\n    this.delimiters = [];\n    token_meta = { delimiters: this.delimiters };\n  }\n  this.pendingLevel = this.level;\n  this.tokens.push(token);\n  this.tokens_meta.push(token_meta);\n  return token;\n};\nStateInline.prototype.scanDelims = function(start, canSplitWord) {\n  const max = this.posMax;\n  const marker = this.src.charCodeAt(start);\n  const lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 32;\n  let pos = start;\n  while (pos < max && this.src.charCodeAt(pos) === marker) {\n    pos++;\n  }\n  const count = pos - start;\n  const nextChar = pos < max ? this.src.charCodeAt(pos) : 32;\n  const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n  const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n  const isLastWhiteSpace = isWhiteSpace(lastChar);\n  const isNextWhiteSpace = isWhiteSpace(nextChar);\n  const left_flanking = !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar);\n  const right_flanking = !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar);\n  const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar);\n  const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar);\n  return { can_open, can_close, length: count };\n};\nStateInline.prototype.Token = Token;\nfunction isTerminatorChar(ch) {\n  switch (ch) {\n    case 10:\n    case 33:\n    case 35:\n    case 36:\n    case 37:\n    case 38:\n    case 42:\n    case 43:\n    case 45:\n    case 58:\n    case 60:\n    case 61:\n    case 62:\n    case 64:\n    case 91:\n    case 92:\n    case 93:\n    case 94:\n    case 95:\n    case 96:\n    case 123:\n    case 125:\n    case 126:\n      return true;\n    default:\n      return false;\n  }\n}\nfunction text(state, silent) {\n  let pos = state.pos;\n  while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n    pos++;\n  }\n  if (pos === state.pos) {\n    return false;\n  }\n  if (!silent) {\n    state.pending += state.src.slice(state.pos, pos);\n  }\n  state.pos = pos;\n  return true;\n}\nconst SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;\nfunction linkify(state, silent) {\n  if (!state.md.options.linkify) return false;\n  if (state.linkLevel > 0) return false;\n  const pos = state.pos;\n  const max = state.posMax;\n  if (pos + 3 > max) return false;\n  if (state.src.charCodeAt(pos) !== 58) return false;\n  if (state.src.charCodeAt(pos + 1) !== 47) return false;\n  if (state.src.charCodeAt(pos + 2) !== 47) return false;\n  const match3 = state.pending.match(SCHEME_RE);\n  if (!match3) return false;\n  const proto = match3[1];\n  const link2 = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length));\n  if (!link2) return false;\n  let url2 = link2.url;\n  if (url2.length <= proto.length) return false;\n  url2 = url2.replace(/\\*+$/, \"\");\n  const fullUrl = state.md.normalizeLink(url2);\n  if (!state.md.validateLink(fullUrl)) return false;\n  if (!silent) {\n    state.pending = state.pending.slice(0, -proto.length);\n    const token_o = state.push(\"link_open\", \"a\", 1);\n    token_o.attrs = [[\"href\", fullUrl]];\n    token_o.markup = \"linkify\";\n    token_o.info = \"auto\";\n    const token_t = state.push(\"text\", \"\", 0);\n    token_t.content = state.md.normalizeLinkText(url2);\n    const token_c = state.push(\"link_close\", \"a\", -1);\n    token_c.markup = \"linkify\";\n    token_c.info = \"auto\";\n  }\n  state.pos += url2.length - proto.length;\n  return true;\n}\nfunction newline(state, silent) {\n  let pos = state.pos;\n  if (state.src.charCodeAt(pos) !== 10) {\n    return false;\n  }\n  const pmax = state.pending.length - 1;\n  const max = state.posMax;\n  if (!silent) {\n    if (pmax >= 0 && state.pending.charCodeAt(pmax) === 32) {\n      if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 32) {\n        let ws = pmax - 1;\n        while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 32) ws--;\n        state.pending = state.pending.slice(0, ws);\n        state.push(\"hardbreak\", \"br\", 0);\n      } else {\n        state.pending = state.pending.slice(0, -1);\n        state.push(\"softbreak\", \"br\", 0);\n      }\n    } else {\n      state.push(\"softbreak\", \"br\", 0);\n    }\n  }\n  pos++;\n  while (pos < max && isSpace(state.src.charCodeAt(pos))) {\n    pos++;\n  }\n  state.pos = pos;\n  return true;\n}\nconst ESCAPED = [];\nfor (let i3 = 0; i3 < 256; i3++) {\n  ESCAPED.push(0);\n}\n\"\\\\!\\\"#$%&'()*+,./:;<=>?@[]^_`{|}~-\".split(\"\").forEach(function(ch) {\n  ESCAPED[ch.charCodeAt(0)] = 1;\n});\nfunction escape$1(state, silent) {\n  let pos = state.pos;\n  const max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 92) return false;\n  pos++;\n  if (pos >= max) return false;\n  let ch1 = state.src.charCodeAt(pos);\n  if (ch1 === 10) {\n    if (!silent) {\n      state.push(\"hardbreak\", \"br\", 0);\n    }\n    pos++;\n    while (pos < max) {\n      ch1 = state.src.charCodeAt(pos);\n      if (!isSpace(ch1)) break;\n      pos++;\n    }\n    state.pos = pos;\n    return true;\n  }\n  let escapedStr = state.src[pos];\n  if (ch1 >= 55296 && ch1 <= 56319 && pos + 1 < max) {\n    const ch2 = state.src.charCodeAt(pos + 1);\n    if (ch2 >= 56320 && ch2 <= 57343) {\n      escapedStr += state.src[pos + 1];\n      pos++;\n    }\n  }\n  const origStr = \"\\\\\" + escapedStr;\n  if (!silent) {\n    const token = state.push(\"text_special\", \"\", 0);\n    if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n      token.content = escapedStr;\n    } else {\n      token.content = origStr;\n    }\n    token.markup = origStr;\n    token.info = \"escape\";\n  }\n  state.pos = pos + 1;\n  return true;\n}\nfunction backtick(state, silent) {\n  let pos = state.pos;\n  const ch = state.src.charCodeAt(pos);\n  if (ch !== 96) {\n    return false;\n  }\n  const start = pos;\n  pos++;\n  const max = state.posMax;\n  while (pos < max && state.src.charCodeAt(pos) === 96) {\n    pos++;\n  }\n  const marker = state.src.slice(start, pos);\n  const openerLength = marker.length;\n  if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n    if (!silent) state.pending += marker;\n    state.pos += openerLength;\n    return true;\n  }\n  let matchEnd = pos;\n  let matchStart;\n  while ((matchStart = state.src.indexOf(\"`\", matchEnd)) !== -1) {\n    matchEnd = matchStart + 1;\n    while (matchEnd < max && state.src.charCodeAt(matchEnd) === 96) {\n      matchEnd++;\n    }\n    const closerLength = matchEnd - matchStart;\n    if (closerLength === openerLength) {\n      if (!silent) {\n        const token = state.push(\"code_inline\", \"code\", 0);\n        token.markup = marker;\n        token.content = state.src.slice(pos, matchStart).replace(/\\n/g, \" \").replace(/^ (.+) $/, \"$1\");\n      }\n      state.pos = matchEnd;\n      return true;\n    }\n    state.backticks[closerLength] = matchStart;\n  }\n  state.backticksScanned = true;\n  if (!silent) state.pending += marker;\n  state.pos += openerLength;\n  return true;\n}\nfunction strikethrough_tokenize(state, silent) {\n  const start = state.pos;\n  const marker = state.src.charCodeAt(start);\n  if (silent) {\n    return false;\n  }\n  if (marker !== 126) {\n    return false;\n  }\n  const scanned = state.scanDelims(state.pos, true);\n  let len = scanned.length;\n  const ch = String.fromCharCode(marker);\n  if (len < 2) {\n    return false;\n  }\n  let token;\n  if (len % 2) {\n    token = state.push(\"text\", \"\", 0);\n    token.content = ch;\n    len--;\n  }\n  for (let i3 = 0; i3 < len; i3 += 2) {\n    token = state.push(\"text\", \"\", 0);\n    token.content = ch + ch;\n    state.delimiters.push({\n      marker,\n      length: 0,\n      // disable \"rule of 3\" length checks meant for emphasis\n      token: state.tokens.length - 1,\n      end: -1,\n      open: scanned.can_open,\n      close: scanned.can_close\n    });\n  }\n  state.pos += scanned.length;\n  return true;\n}\nfunction postProcess$1(state, delimiters) {\n  let token;\n  const loneMarkers = [];\n  const max = delimiters.length;\n  for (let i3 = 0; i3 < max; i3++) {\n    const startDelim = delimiters[i3];\n    if (startDelim.marker !== 126) {\n      continue;\n    }\n    if (startDelim.end === -1) {\n      continue;\n    }\n    const endDelim = delimiters[startDelim.end];\n    token = state.tokens[startDelim.token];\n    token.type = \"s_open\";\n    token.tag = \"s\";\n    token.nesting = 1;\n    token.markup = \"~~\";\n    token.content = \"\";\n    token = state.tokens[endDelim.token];\n    token.type = \"s_close\";\n    token.tag = \"s\";\n    token.nesting = -1;\n    token.markup = \"~~\";\n    token.content = \"\";\n    if (state.tokens[endDelim.token - 1].type === \"text\" && state.tokens[endDelim.token - 1].content === \"~\") {\n      loneMarkers.push(endDelim.token - 1);\n    }\n  }\n  while (loneMarkers.length) {\n    const i3 = loneMarkers.pop();\n    let j2 = i3 + 1;\n    while (j2 < state.tokens.length && state.tokens[j2].type === \"s_close\") {\n      j2++;\n    }\n    j2--;\n    if (i3 !== j2) {\n      token = state.tokens[j2];\n      state.tokens[j2] = state.tokens[i3];\n      state.tokens[i3] = token;\n    }\n  }\n}\nfunction strikethrough_postProcess(state) {\n  const tokens_meta = state.tokens_meta;\n  const max = state.tokens_meta.length;\n  postProcess$1(state, state.delimiters);\n  for (let curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess$1(state, tokens_meta[curr].delimiters);\n    }\n  }\n}\nconst r_strikethrough = {\n  tokenize: strikethrough_tokenize,\n  postProcess: strikethrough_postProcess\n};\nfunction emphasis_tokenize(state, silent) {\n  const start = state.pos;\n  const marker = state.src.charCodeAt(start);\n  if (silent) {\n    return false;\n  }\n  if (marker !== 95 && marker !== 42) {\n    return false;\n  }\n  const scanned = state.scanDelims(state.pos, marker === 42);\n  for (let i3 = 0; i3 < scanned.length; i3++) {\n    const token = state.push(\"text\", \"\", 0);\n    token.content = String.fromCharCode(marker);\n    state.delimiters.push({\n      // Char code of the starting marker (number).\n      //\n      marker,\n      // Total length of these series of delimiters.\n      //\n      length: scanned.length,\n      // A position of the token this delimiter corresponds to.\n      //\n      token: state.tokens.length - 1,\n      // If this delimiter is matched as a valid opener, `end` will be\n      // equal to its position, otherwise it's `-1`.\n      //\n      end: -1,\n      // Boolean flags that determine if this delimiter could open or close\n      // an emphasis.\n      //\n      open: scanned.can_open,\n      close: scanned.can_close\n    });\n  }\n  state.pos += scanned.length;\n  return true;\n}\nfunction postProcess(state, delimiters) {\n  const max = delimiters.length;\n  for (let i3 = max - 1; i3 >= 0; i3--) {\n    const startDelim = delimiters[i3];\n    if (startDelim.marker !== 95 && startDelim.marker !== 42) {\n      continue;\n    }\n    if (startDelim.end === -1) {\n      continue;\n    }\n    const endDelim = delimiters[startDelim.end];\n    const isStrong = i3 > 0 && delimiters[i3 - 1].end === startDelim.end + 1 && // check that first two markers match and adjacent\n    delimiters[i3 - 1].marker === startDelim.marker && delimiters[i3 - 1].token === startDelim.token - 1 && // check that last two markers are adjacent (we can safely assume they match)\n    delimiters[startDelim.end + 1].token === endDelim.token + 1;\n    const ch = String.fromCharCode(startDelim.marker);\n    const token_o = state.tokens[startDelim.token];\n    token_o.type = isStrong ? \"strong_open\" : \"em_open\";\n    token_o.tag = isStrong ? \"strong\" : \"em\";\n    token_o.nesting = 1;\n    token_o.markup = isStrong ? ch + ch : ch;\n    token_o.content = \"\";\n    const token_c = state.tokens[endDelim.token];\n    token_c.type = isStrong ? \"strong_close\" : \"em_close\";\n    token_c.tag = isStrong ? \"strong\" : \"em\";\n    token_c.nesting = -1;\n    token_c.markup = isStrong ? ch + ch : ch;\n    token_c.content = \"\";\n    if (isStrong) {\n      state.tokens[delimiters[i3 - 1].token].content = \"\";\n      state.tokens[delimiters[startDelim.end + 1].token].content = \"\";\n      i3--;\n    }\n  }\n}\nfunction emphasis_post_process(state) {\n  const tokens_meta = state.tokens_meta;\n  const max = state.tokens_meta.length;\n  postProcess(state, state.delimiters);\n  for (let curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters);\n    }\n  }\n}\nconst r_emphasis = {\n  tokenize: emphasis_tokenize,\n  postProcess: emphasis_post_process\n};\nfunction link(state, silent) {\n  let code2, label, res, ref;\n  let href = \"\";\n  let title = \"\";\n  let start = state.pos;\n  let parseReference = true;\n  if (state.src.charCodeAt(state.pos) !== 91) {\n    return false;\n  }\n  const oldPos = state.pos;\n  const max = state.posMax;\n  const labelStart = state.pos + 1;\n  const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n  if (labelEnd < 0) {\n    return false;\n  }\n  let pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 40) {\n    parseReference = false;\n    pos++;\n    for (; pos < max; pos++) {\n      code2 = state.src.charCodeAt(pos);\n      if (!isSpace(code2) && code2 !== 10) {\n        break;\n      }\n    }\n    if (pos >= max) {\n      return false;\n    }\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = \"\";\n      }\n      start = pos;\n      for (; pos < max; pos++) {\n        code2 = state.src.charCodeAt(pos);\n        if (!isSpace(code2) && code2 !== 10) {\n          break;\n        }\n      }\n      res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n      if (pos < max && start !== pos && res.ok) {\n        title = res.str;\n        pos = res.pos;\n        for (; pos < max; pos++) {\n          code2 = state.src.charCodeAt(pos);\n          if (!isSpace(code2) && code2 !== 10) {\n            break;\n          }\n        }\n      }\n    }\n    if (pos >= max || state.src.charCodeAt(pos) !== 41) {\n      parseReference = true;\n    }\n    pos++;\n  }\n  if (parseReference) {\n    if (typeof state.env.references === \"undefined\") {\n      return false;\n    }\n    if (pos < max && state.src.charCodeAt(pos) === 91) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n    if (!label) {\n      label = state.src.slice(labelStart, labelEnd);\n    }\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n  if (!silent) {\n    state.pos = labelStart;\n    state.posMax = labelEnd;\n    const token_o = state.push(\"link_open\", \"a\", 1);\n    const attrs = [[\"href\", href]];\n    token_o.attrs = attrs;\n    if (title) {\n      attrs.push([\"title\", title]);\n    }\n    state.linkLevel++;\n    state.md.inline.tokenize(state);\n    state.linkLevel--;\n    state.push(\"link_close\", \"a\", -1);\n  }\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n}\nfunction image(state, silent) {\n  let code2, content, label, pos, ref, res, title, start;\n  let href = \"\";\n  const oldPos = state.pos;\n  const max = state.posMax;\n  if (state.src.charCodeAt(state.pos) !== 33) {\n    return false;\n  }\n  if (state.src.charCodeAt(state.pos + 1) !== 91) {\n    return false;\n  }\n  const labelStart = state.pos + 2;\n  const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n  if (labelEnd < 0) {\n    return false;\n  }\n  pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 40) {\n    pos++;\n    for (; pos < max; pos++) {\n      code2 = state.src.charCodeAt(pos);\n      if (!isSpace(code2) && code2 !== 10) {\n        break;\n      }\n    }\n    if (pos >= max) {\n      return false;\n    }\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = \"\";\n      }\n    }\n    start = pos;\n    for (; pos < max; pos++) {\n      code2 = state.src.charCodeAt(pos);\n      if (!isSpace(code2) && code2 !== 10) {\n        break;\n      }\n    }\n    res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n    if (pos < max && start !== pos && res.ok) {\n      title = res.str;\n      pos = res.pos;\n      for (; pos < max; pos++) {\n        code2 = state.src.charCodeAt(pos);\n        if (!isSpace(code2) && code2 !== 10) {\n          break;\n        }\n      }\n    } else {\n      title = \"\";\n    }\n    if (pos >= max || state.src.charCodeAt(pos) !== 41) {\n      state.pos = oldPos;\n      return false;\n    }\n    pos++;\n  } else {\n    if (typeof state.env.references === \"undefined\") {\n      return false;\n    }\n    if (pos < max && state.src.charCodeAt(pos) === 91) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n    if (!label) {\n      label = state.src.slice(labelStart, labelEnd);\n    }\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n  if (!silent) {\n    content = state.src.slice(labelStart, labelEnd);\n    const tokens = [];\n    state.md.inline.parse(\n      content,\n      state.md,\n      state.env,\n      tokens\n    );\n    const token = state.push(\"image\", \"img\", 0);\n    const attrs = [[\"src\", href], [\"alt\", \"\"]];\n    token.attrs = attrs;\n    token.children = tokens;\n    token.content = content;\n    if (title) {\n      attrs.push([\"title\", title]);\n    }\n  }\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n}\nconst EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nconst AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/;\nfunction autolink(state, silent) {\n  let pos = state.pos;\n  if (state.src.charCodeAt(pos) !== 60) {\n    return false;\n  }\n  const start = state.pos;\n  const max = state.posMax;\n  for (; ; ) {\n    if (++pos >= max) return false;\n    const ch = state.src.charCodeAt(pos);\n    if (ch === 60) return false;\n    if (ch === 62) break;\n  }\n  const url2 = state.src.slice(start + 1, pos);\n  if (AUTOLINK_RE.test(url2)) {\n    const fullUrl = state.md.normalizeLink(url2);\n    if (!state.md.validateLink(fullUrl)) {\n      return false;\n    }\n    if (!silent) {\n      const token_o = state.push(\"link_open\", \"a\", 1);\n      token_o.attrs = [[\"href\", fullUrl]];\n      token_o.markup = \"autolink\";\n      token_o.info = \"auto\";\n      const token_t = state.push(\"text\", \"\", 0);\n      token_t.content = state.md.normalizeLinkText(url2);\n      const token_c = state.push(\"link_close\", \"a\", -1);\n      token_c.markup = \"autolink\";\n      token_c.info = \"auto\";\n    }\n    state.pos += url2.length + 2;\n    return true;\n  }\n  if (EMAIL_RE.test(url2)) {\n    const fullUrl = state.md.normalizeLink(\"mailto:\" + url2);\n    if (!state.md.validateLink(fullUrl)) {\n      return false;\n    }\n    if (!silent) {\n      const token_o = state.push(\"link_open\", \"a\", 1);\n      token_o.attrs = [[\"href\", fullUrl]];\n      token_o.markup = \"autolink\";\n      token_o.info = \"auto\";\n      const token_t = state.push(\"text\", \"\", 0);\n      token_t.content = state.md.normalizeLinkText(url2);\n      const token_c = state.push(\"link_close\", \"a\", -1);\n      token_c.markup = \"autolink\";\n      token_c.info = \"auto\";\n    }\n    state.pos += url2.length + 2;\n    return true;\n  }\n  return false;\n}\nfunction isLinkOpen(str) {\n  return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\nfunction isLetter(ch) {\n  const lc = ch | 32;\n  return lc >= 97 && lc <= 122;\n}\nfunction html_inline(state, silent) {\n  if (!state.md.options.html) {\n    return false;\n  }\n  const max = state.posMax;\n  const pos = state.pos;\n  if (state.src.charCodeAt(pos) !== 60 || pos + 2 >= max) {\n    return false;\n  }\n  const ch = state.src.charCodeAt(pos + 1);\n  if (ch !== 33 && ch !== 63 && ch !== 47 && !isLetter(ch)) {\n    return false;\n  }\n  const match3 = state.src.slice(pos).match(HTML_TAG_RE);\n  if (!match3) {\n    return false;\n  }\n  if (!silent) {\n    const token = state.push(\"html_inline\", \"\", 0);\n    token.content = match3[0];\n    if (isLinkOpen(token.content)) state.linkLevel++;\n    if (isLinkClose(token.content)) state.linkLevel--;\n  }\n  state.pos += match3[0].length;\n  return true;\n}\nconst DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nconst NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\nfunction entity(state, silent) {\n  const pos = state.pos;\n  const max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 38) return false;\n  if (pos + 1 >= max) return false;\n  const ch = state.src.charCodeAt(pos + 1);\n  if (ch === 35) {\n    const match3 = state.src.slice(pos).match(DIGITAL_RE);\n    if (match3) {\n      if (!silent) {\n        const code2 = match3[1][0].toLowerCase() === \"x\" ? parseInt(match3[1].slice(1), 16) : parseInt(match3[1], 10);\n        const token = state.push(\"text_special\", \"\", 0);\n        token.content = isValidEntityCode(code2) ? fromCodePoint(code2) : fromCodePoint(65533);\n        token.markup = match3[0];\n        token.info = \"entity\";\n      }\n      state.pos += match3[0].length;\n      return true;\n    }\n  } else {\n    const match3 = state.src.slice(pos).match(NAMED_RE);\n    if (match3) {\n      const decoded = decodeHTML(match3[0]);\n      if (decoded !== match3[0]) {\n        if (!silent) {\n          const token = state.push(\"text_special\", \"\", 0);\n          token.content = decoded;\n          token.markup = match3[0];\n          token.info = \"entity\";\n        }\n        state.pos += match3[0].length;\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction processDelimiters(delimiters) {\n  const openersBottom = {};\n  const max = delimiters.length;\n  if (!max) return;\n  let headerIdx = 0;\n  let lastTokenIdx = -2;\n  const jumps = [];\n  for (let closerIdx = 0; closerIdx < max; closerIdx++) {\n    const closer = delimiters[closerIdx];\n    jumps.push(0);\n    if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n      headerIdx = closerIdx;\n    }\n    lastTokenIdx = closer.token;\n    closer.length = closer.length || 0;\n    if (!closer.close) continue;\n    if (!openersBottom.hasOwnProperty(closer.marker)) {\n      openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1];\n    }\n    const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + closer.length % 3];\n    let openerIdx = headerIdx - jumps[headerIdx] - 1;\n    let newMinOpenerIdx = openerIdx;\n    for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n      const opener = delimiters[openerIdx];\n      if (opener.marker !== closer.marker) continue;\n      if (opener.open && opener.end < 0) {\n        let isOddMatch = false;\n        if (opener.close || closer.open) {\n          if ((opener.length + closer.length) % 3 === 0) {\n            if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n              isOddMatch = true;\n            }\n          }\n        }\n        if (!isOddMatch) {\n          const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? jumps[openerIdx - 1] + 1 : 0;\n          jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n          jumps[openerIdx] = lastJump;\n          closer.open = false;\n          opener.end = closerIdx;\n          opener.close = false;\n          newMinOpenerIdx = -1;\n          lastTokenIdx = -2;\n          break;\n        }\n      }\n    }\n    if (newMinOpenerIdx !== -1) {\n      openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length || 0) % 3] = newMinOpenerIdx;\n    }\n  }\n}\nfunction link_pairs(state) {\n  const tokens_meta = state.tokens_meta;\n  const max = state.tokens_meta.length;\n  processDelimiters(state.delimiters);\n  for (let curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      processDelimiters(tokens_meta[curr].delimiters);\n    }\n  }\n}\nfunction fragments_join(state) {\n  let curr, last;\n  let level2 = 0;\n  const tokens = state.tokens;\n  const max = state.tokens.length;\n  for (curr = last = 0; curr < max; curr++) {\n    if (tokens[curr].nesting < 0) level2--;\n    tokens[curr].level = level2;\n    if (tokens[curr].nesting > 0) level2++;\n    if (tokens[curr].type === \"text\" && curr + 1 < max && tokens[curr + 1].type === \"text\") {\n      tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n    } else {\n      if (curr !== last) {\n        tokens[last] = tokens[curr];\n      }\n      last++;\n    }\n  }\n  if (curr !== last) {\n    tokens.length = last;\n  }\n}\nconst _rules = [\n  [\"text\", text],\n  [\"linkify\", linkify],\n  [\"newline\", newline],\n  [\"escape\", escape$1],\n  [\"backticks\", backtick],\n  [\"strikethrough\", r_strikethrough.tokenize],\n  [\"emphasis\", r_emphasis.tokenize],\n  [\"link\", link],\n  [\"image\", image],\n  [\"autolink\", autolink],\n  [\"html_inline\", html_inline],\n  [\"entity\", entity]\n];\nconst _rules2 = [\n  [\"balance_pairs\", link_pairs],\n  [\"strikethrough\", r_strikethrough.postProcess],\n  [\"emphasis\", r_emphasis.postProcess],\n  // rules for pairs separate '**' into its own text tokens, which may be left unused,\n  // rule below merges unused segments back with the rest of the text\n  [\"fragments_join\", fragments_join]\n];\nfunction ParserInline() {\n  this.ruler = new Ruler();\n  for (let i3 = 0; i3 < _rules.length; i3++) {\n    this.ruler.push(_rules[i3][0], _rules[i3][1]);\n  }\n  this.ruler2 = new Ruler();\n  for (let i3 = 0; i3 < _rules2.length; i3++) {\n    this.ruler2.push(_rules2[i3][0], _rules2[i3][1]);\n  }\n}\nParserInline.prototype.skipToken = function(state) {\n  const pos = state.pos;\n  const rules = this.ruler.getRules(\"\");\n  const len = rules.length;\n  const maxNesting = state.md.options.maxNesting;\n  const cache = state.cache;\n  if (typeof cache[pos] !== \"undefined\") {\n    state.pos = cache[pos];\n    return;\n  }\n  let ok = false;\n  if (state.level < maxNesting) {\n    for (let i3 = 0; i3 < len; i3++) {\n      state.level++;\n      ok = rules[i3](state, true);\n      state.level--;\n      if (ok) {\n        if (pos >= state.pos) {\n          throw new Error(\"inline rule didn't increment state.pos\");\n        }\n        break;\n      }\n    }\n  } else {\n    state.pos = state.posMax;\n  }\n  if (!ok) {\n    state.pos++;\n  }\n  cache[pos] = state.pos;\n};\nParserInline.prototype.tokenize = function(state) {\n  const rules = this.ruler.getRules(\"\");\n  const len = rules.length;\n  const end = state.posMax;\n  const maxNesting = state.md.options.maxNesting;\n  while (state.pos < end) {\n    const prevPos = state.pos;\n    let ok = false;\n    if (state.level < maxNesting) {\n      for (let i3 = 0; i3 < len; i3++) {\n        ok = rules[i3](state, false);\n        if (ok) {\n          if (prevPos >= state.pos) {\n            throw new Error(\"inline rule didn't increment state.pos\");\n          }\n          break;\n        }\n      }\n    }\n    if (ok) {\n      if (state.pos >= end) {\n        break;\n      }\n      continue;\n    }\n    state.pending += state.src[state.pos++];\n  }\n  if (state.pending) {\n    state.pushPending();\n  }\n};\nParserInline.prototype.parse = function(str, md, env, outTokens) {\n  const state = new this.State(str, md, env, outTokens);\n  this.tokenize(state);\n  const rules = this.ruler2.getRules(\"\");\n  const len = rules.length;\n  for (let i3 = 0; i3 < len; i3++) {\n    rules[i3](state);\n  }\n};\nParserInline.prototype.State = StateInline;\nfunction reFactory(opts) {\n  const re = {};\n  opts = opts || {};\n  re.src_Any = Any.source;\n  re.src_Cc = Cc.source;\n  re.src_Z = Z.source;\n  re.src_P = P.source;\n  re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join(\"|\");\n  re.src_ZCc = [re.src_Z, re.src_Cc].join(\"|\");\n  const text_separators = \"[><｜]\";\n  re.src_pseudo_letter = \"(?:(?!\" + text_separators + \"|\" + re.src_ZPCc + \")\" + re.src_Any + \")\";\n  re.src_ip4 = \"(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\";\n  re.src_auth = \"(?:(?:(?!\" + re.src_ZCc + \"|[@/\\\\[\\\\]()]).)+@)?\";\n  re.src_port = \"(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?\";\n  re.src_host_terminator = \"(?=$|\" + text_separators + \"|\" + re.src_ZPCc + \")(?!\" + (opts[\"---\"] ? \"-(?!--)|\" : \"-|\") + \"_|:\\\\d|\\\\.-|\\\\.(?!$|\" + re.src_ZPCc + \"))\";\n  re.src_path = \"(?:[/?#](?:(?!\" + re.src_ZCc + \"|\" + text_separators + `|[()[\\\\]{}.,\"'?!\\\\-;]).|\\\\[(?:(?!` + re.src_ZCc + \"|\\\\]).)*\\\\]|\\\\((?:(?!\" + re.src_ZCc + \"|[)]).)*\\\\)|\\\\{(?:(?!\" + re.src_ZCc + '|[}]).)*\\\\}|\\\\\"(?:(?!' + re.src_ZCc + `|[\"]).)+\\\\\"|\\\\'(?:(?!` + re.src_ZCc + \"|[']).)+\\\\'|\\\\'(?=\" + re.src_pseudo_letter + \"|[-])|\\\\.{2,}[a-zA-Z0-9%/&]|\\\\.(?!\" + re.src_ZCc + \"|[.]|$)|\" + (opts[\"---\"] ? \"\\\\-(?!--(?:[^-]|$))(?:-*)|\" : \"\\\\-+|\") + // allow `,,,` in paths\n  \",(?!\" + re.src_ZCc + \"|$)|;(?!\" + re.src_ZCc + \"|$)|\\\\!+(?!\" + re.src_ZCc + \"|[!]|$)|\\\\?(?!\" + re.src_ZCc + \"|[?]|$))+|\\\\/)?\";\n  re.src_email_name = '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n  re.src_xn = \"xn--[a-z0-9\\\\-]{1,59}\";\n  re.src_domain_root = // Allow letters & digits (http://test1)\n  \"(?:\" + re.src_xn + \"|\" + re.src_pseudo_letter + \"{1,63})\";\n  re.src_domain = \"(?:\" + re.src_xn + \"|(?:\" + re.src_pseudo_letter + \")|(?:\" + re.src_pseudo_letter + \"(?:-|\" + re.src_pseudo_letter + \"){0,61}\" + re.src_pseudo_letter + \"))\";\n  re.src_host = \"(?:(?:(?:(?:\" + re.src_domain + \")\\\\.)*\" + re.src_domain + \"))\";\n  re.tpl_host_fuzzy = \"(?:\" + re.src_ip4 + \"|(?:(?:(?:\" + re.src_domain + \")\\\\.)+(?:%TLDS%)))\";\n  re.tpl_host_no_ip_fuzzy = \"(?:(?:(?:\" + re.src_domain + \")\\\\.)+(?:%TLDS%))\";\n  re.src_host_strict = re.src_host + re.src_host_terminator;\n  re.tpl_host_fuzzy_strict = re.tpl_host_fuzzy + re.src_host_terminator;\n  re.src_host_port_strict = re.src_host + re.src_port + re.src_host_terminator;\n  re.tpl_host_port_fuzzy_strict = re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n  re.tpl_host_port_no_ip_fuzzy_strict = re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n  re.tpl_host_fuzzy_test = \"localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:\" + re.src_ZPCc + \"|>|$))\";\n  re.tpl_email_fuzzy = \"(^|\" + text_separators + '|\"|\\\\(|' + re.src_ZCc + \")(\" + re.src_email_name + \"@\" + re.tpl_host_fuzzy_strict + \")\";\n  re.tpl_link_fuzzy = // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n  // but can start with > (markdown blockquote)\n  \"(^|(?![.:/\\\\-_@])(?:[$+<=>^`|｜]|\" + re.src_ZPCc + \"))((?![$+<=>^`|｜])\" + re.tpl_host_port_fuzzy_strict + re.src_path + \")\";\n  re.tpl_link_no_ip_fuzzy = // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n  // but can start with > (markdown blockquote)\n  \"(^|(?![.:/\\\\-_@])(?:[$+<=>^`|｜]|\" + re.src_ZPCc + \"))((?![$+<=>^`|｜])\" + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + \")\";\n  return re;\n}\nfunction assign(obj) {\n  const sources = Array.prototype.slice.call(arguments, 1);\n  sources.forEach(function(source) {\n    if (!source) {\n      return;\n    }\n    Object.keys(source).forEach(function(key) {\n      obj[key] = source[key];\n    });\n  });\n  return obj;\n}\nfunction _class(obj) {\n  return Object.prototype.toString.call(obj);\n}\nfunction isString(obj) {\n  return _class(obj) === \"[object String]\";\n}\nfunction isObject$1(obj) {\n  return _class(obj) === \"[object Object]\";\n}\nfunction isRegExp(obj) {\n  return _class(obj) === \"[object RegExp]\";\n}\nfunction isFunction$1(obj) {\n  return _class(obj) === \"[object Function]\";\n}\nfunction escapeRE(str) {\n  return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, \"\\\\$&\");\n}\nconst defaultOptions$1 = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n};\nfunction isOptionsObj(obj) {\n  return Object.keys(obj || {}).reduce(function(acc, k3) {\n    return acc || defaultOptions$1.hasOwnProperty(k3);\n  }, false);\n}\nconst defaultSchemas = {\n  \"http:\": {\n    validate: function(text2, pos, self2) {\n      const tail = text2.slice(pos);\n      if (!self2.re.http) {\n        self2.re.http = new RegExp(\n          \"^\\\\/\\\\/\" + self2.re.src_auth + self2.re.src_host_port_strict + self2.re.src_path,\n          \"i\"\n        );\n      }\n      if (self2.re.http.test(tail)) {\n        return tail.match(self2.re.http)[0].length;\n      }\n      return 0;\n    }\n  },\n  \"https:\": \"http:\",\n  \"ftp:\": \"http:\",\n  \"//\": {\n    validate: function(text2, pos, self2) {\n      const tail = text2.slice(pos);\n      if (!self2.re.no_http) {\n        self2.re.no_http = new RegExp(\n          \"^\" + self2.re.src_auth + // Don't allow single-level domains, because of false positives like '//test'\n          // with code comments\n          \"(?:localhost|(?:(?:\" + self2.re.src_domain + \")\\\\.)+\" + self2.re.src_domain_root + \")\" + self2.re.src_port + self2.re.src_host_terminator + self2.re.src_path,\n          \"i\"\n        );\n      }\n      if (self2.re.no_http.test(tail)) {\n        if (pos >= 3 && text2[pos - 3] === \":\") {\n          return 0;\n        }\n        if (pos >= 3 && text2[pos - 3] === \"/\") {\n          return 0;\n        }\n        return tail.match(self2.re.no_http)[0].length;\n      }\n      return 0;\n    }\n  },\n  \"mailto:\": {\n    validate: function(text2, pos, self2) {\n      const tail = text2.slice(pos);\n      if (!self2.re.mailto) {\n        self2.re.mailto = new RegExp(\n          \"^\" + self2.re.src_email_name + \"@\" + self2.re.src_host_strict,\n          \"i\"\n        );\n      }\n      if (self2.re.mailto.test(tail)) {\n        return tail.match(self2.re.mailto)[0].length;\n      }\n      return 0;\n    }\n  }\n};\nconst tlds_2ch_src_re = \"a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]\";\nconst tlds_default = \"biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\".split(\"|\");\nfunction resetScanCache(self2) {\n  self2.__index__ = -1;\n  self2.__text_cache__ = \"\";\n}\nfunction createValidator(re) {\n  return function(text2, pos) {\n    const tail = text2.slice(pos);\n    if (re.test(tail)) {\n      return tail.match(re)[0].length;\n    }\n    return 0;\n  };\n}\nfunction createNormalizer() {\n  return function(match3, self2) {\n    self2.normalize(match3);\n  };\n}\nfunction compile(self2) {\n  const re = self2.re = reFactory(self2.__opts__);\n  const tlds2 = self2.__tlds__.slice();\n  self2.onCompile();\n  if (!self2.__tlds_replaced__) {\n    tlds2.push(tlds_2ch_src_re);\n  }\n  tlds2.push(re.src_xn);\n  re.src_tlds = tlds2.join(\"|\");\n  function untpl(tpl) {\n    return tpl.replace(\"%TLDS%\", re.src_tlds);\n  }\n  re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), \"i\");\n  re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), \"i\");\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), \"i\");\n  re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), \"i\");\n  const aliases = [];\n  self2.__compiled__ = {};\n  function schemaError(name, val) {\n    throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n  }\n  Object.keys(self2.__schemas__).forEach(function(name) {\n    const val = self2.__schemas__[name];\n    if (val === null) {\n      return;\n    }\n    const compiled = { validate: null, link: null };\n    self2.__compiled__[name] = compiled;\n    if (isObject$1(val)) {\n      if (isRegExp(val.validate)) {\n        compiled.validate = createValidator(val.validate);\n      } else if (isFunction$1(val.validate)) {\n        compiled.validate = val.validate;\n      } else {\n        schemaError(name, val);\n      }\n      if (isFunction$1(val.normalize)) {\n        compiled.normalize = val.normalize;\n      } else if (!val.normalize) {\n        compiled.normalize = createNormalizer();\n      } else {\n        schemaError(name, val);\n      }\n      return;\n    }\n    if (isString(val)) {\n      aliases.push(name);\n      return;\n    }\n    schemaError(name, val);\n  });\n  aliases.forEach(function(alias) {\n    if (!self2.__compiled__[self2.__schemas__[alias]]) {\n      return;\n    }\n    self2.__compiled__[alias].validate = self2.__compiled__[self2.__schemas__[alias]].validate;\n    self2.__compiled__[alias].normalize = self2.__compiled__[self2.__schemas__[alias]].normalize;\n  });\n  self2.__compiled__[\"\"] = { validate: null, normalize: createNormalizer() };\n  const slist = Object.keys(self2.__compiled__).filter(function(name) {\n    return name.length > 0 && self2.__compiled__[name];\n  }).map(escapeRE).join(\"|\");\n  self2.re.schema_test = RegExp(\"(^|(?!_)(?:[><｜]|\" + re.src_ZPCc + \"))(\" + slist + \")\", \"i\");\n  self2.re.schema_search = RegExp(\"(^|(?!_)(?:[><｜]|\" + re.src_ZPCc + \"))(\" + slist + \")\", \"ig\");\n  self2.re.schema_at_start = RegExp(\"^\" + self2.re.schema_search.source, \"i\");\n  self2.re.pretest = RegExp(\n    \"(\" + self2.re.schema_test.source + \")|(\" + self2.re.host_fuzzy_test.source + \")|@\",\n    \"i\"\n  );\n  resetScanCache(self2);\n}\nfunction Match(self2, shift) {\n  const start = self2.__index__;\n  const end = self2.__last_index__;\n  const text2 = self2.__text_cache__.slice(start, end);\n  this.schema = self2.__schema__.toLowerCase();\n  this.index = start + shift;\n  this.lastIndex = end + shift;\n  this.raw = text2;\n  this.text = text2;\n  this.url = text2;\n}\nfunction createMatch(self2, shift) {\n  const match3 = new Match(self2, shift);\n  self2.__compiled__[match3.schema].normalize(match3, self2);\n  return match3;\n}\nfunction LinkifyIt(schemas, options) {\n  if (!(this instanceof LinkifyIt)) {\n    return new LinkifyIt(schemas, options);\n  }\n  if (!options) {\n    if (isOptionsObj(schemas)) {\n      options = schemas;\n      schemas = {};\n    }\n  }\n  this.__opts__ = assign({}, defaultOptions$1, options);\n  this.__index__ = -1;\n  this.__last_index__ = -1;\n  this.__schema__ = \"\";\n  this.__text_cache__ = \"\";\n  this.__schemas__ = assign({}, defaultSchemas, schemas);\n  this.__compiled__ = {};\n  this.__tlds__ = tlds_default;\n  this.__tlds_replaced__ = false;\n  this.re = {};\n  compile(this);\n}\nLinkifyIt.prototype.add = function add(schema, definition) {\n  this.__schemas__[schema] = definition;\n  compile(this);\n  return this;\n};\nLinkifyIt.prototype.set = function set(options) {\n  this.__opts__ = assign(this.__opts__, options);\n  return this;\n};\nLinkifyIt.prototype.test = function test(text2) {\n  this.__text_cache__ = text2;\n  this.__index__ = -1;\n  if (!text2.length) {\n    return false;\n  }\n  let m2, ml, me, len, shift, next, re, tld_pos, at_pos;\n  if (this.re.schema_test.test(text2)) {\n    re = this.re.schema_search;\n    re.lastIndex = 0;\n    while ((m2 = re.exec(text2)) !== null) {\n      len = this.testSchemaAt(text2, m2[2], re.lastIndex);\n      if (len) {\n        this.__schema__ = m2[2];\n        this.__index__ = m2.index + m2[1].length;\n        this.__last_index__ = m2.index + m2[0].length + len;\n        break;\n      }\n    }\n  }\n  if (this.__opts__.fuzzyLink && this.__compiled__[\"http:\"]) {\n    tld_pos = text2.search(this.re.host_fuzzy_test);\n    if (tld_pos >= 0) {\n      if (this.__index__ < 0 || tld_pos < this.__index__) {\n        if ((ml = text2.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n          shift = ml.index + ml[1].length;\n          if (this.__index__ < 0 || shift < this.__index__) {\n            this.__schema__ = \"\";\n            this.__index__ = shift;\n            this.__last_index__ = ml.index + ml[0].length;\n          }\n        }\n      }\n    }\n  }\n  if (this.__opts__.fuzzyEmail && this.__compiled__[\"mailto:\"]) {\n    at_pos = text2.indexOf(\"@\");\n    if (at_pos >= 0) {\n      if ((me = text2.match(this.re.email_fuzzy)) !== null) {\n        shift = me.index + me[1].length;\n        next = me.index + me[0].length;\n        if (this.__index__ < 0 || shift < this.__index__ || shift === this.__index__ && next > this.__last_index__) {\n          this.__schema__ = \"mailto:\";\n          this.__index__ = shift;\n          this.__last_index__ = next;\n        }\n      }\n    }\n  }\n  return this.__index__ >= 0;\n};\nLinkifyIt.prototype.pretest = function pretest(text2) {\n  return this.re.pretest.test(text2);\n};\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text2, schema, pos) {\n  if (!this.__compiled__[schema.toLowerCase()]) {\n    return 0;\n  }\n  return this.__compiled__[schema.toLowerCase()].validate(text2, pos, this);\n};\nLinkifyIt.prototype.match = function match(text2) {\n  const result = [];\n  let shift = 0;\n  if (this.__index__ >= 0 && this.__text_cache__ === text2) {\n    result.push(createMatch(this, shift));\n    shift = this.__last_index__;\n  }\n  let tail = shift ? text2.slice(shift) : text2;\n  while (this.test(tail)) {\n    result.push(createMatch(this, shift));\n    tail = tail.slice(this.__last_index__);\n    shift += this.__last_index__;\n  }\n  if (result.length) {\n    return result;\n  }\n  return null;\n};\nLinkifyIt.prototype.matchAtStart = function matchAtStart(text2) {\n  this.__text_cache__ = text2;\n  this.__index__ = -1;\n  if (!text2.length) return null;\n  const m2 = this.re.schema_at_start.exec(text2);\n  if (!m2) return null;\n  const len = this.testSchemaAt(text2, m2[2], m2[0].length);\n  if (!len) return null;\n  this.__schema__ = m2[2];\n  this.__index__ = m2.index + m2[1].length;\n  this.__last_index__ = m2.index + m2[0].length + len;\n  return createMatch(this, 0);\n};\nLinkifyIt.prototype.tlds = function tlds(list2, keepOld) {\n  list2 = Array.isArray(list2) ? list2 : [list2];\n  if (!keepOld) {\n    this.__tlds__ = list2.slice();\n    this.__tlds_replaced__ = true;\n    compile(this);\n    return this;\n  }\n  this.__tlds__ = this.__tlds__.concat(list2).sort().filter(function(el, idx, arr) {\n    return el !== arr[idx - 1];\n  }).reverse();\n  compile(this);\n  return this;\n};\nLinkifyIt.prototype.normalize = function normalize(match3) {\n  if (!match3.schema) {\n    match3.url = \"http://\" + match3.url;\n  }\n  if (match3.schema === \"mailto:\" && !/^mailto:/i.test(match3.url)) {\n    match3.url = \"mailto:\" + match3.url;\n  }\n};\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\nconst maxInt = 2147483647;\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128;\nconst delimiter = \"-\";\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/;\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g;\nconst errors = {\n  \"overflow\": \"Overflow: input needs wider integers to process\",\n  \"not-basic\": \"Illegal input >= 0x80 (not a basic code point)\",\n  \"invalid-input\": \"Invalid input\"\n};\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\nfunction error(type) {\n  throw new RangeError(errors[type]);\n}\nfunction map(array2, callback) {\n  const result = [];\n  let length = array2.length;\n  while (length--) {\n    result[length] = callback(array2[length]);\n  }\n  return result;\n}\nfunction mapDomain(domain, callback) {\n  const parts = domain.split(\"@\");\n  let result = \"\";\n  if (parts.length > 1) {\n    result = parts[0] + \"@\";\n    domain = parts[1];\n  }\n  domain = domain.replace(regexSeparators, \".\");\n  const labels = domain.split(\".\");\n  const encoded = map(labels, callback).join(\".\");\n  return result + encoded;\n}\nfunction ucs2decode(string2) {\n  const output = [];\n  let counter = 0;\n  const length = string2.length;\n  while (counter < length) {\n    const value = string2.charCodeAt(counter++);\n    if (value >= 55296 && value <= 56319 && counter < length) {\n      const extra = string2.charCodeAt(counter++);\n      if ((extra & 64512) == 56320) {\n        output.push(((value & 1023) << 10) + (extra & 1023) + 65536);\n      } else {\n        output.push(value);\n        counter--;\n      }\n    } else {\n      output.push(value);\n    }\n  }\n  return output;\n}\nconst ucs2encode = (codePoints) => String.fromCodePoint(...codePoints);\nconst basicToDigit = function(codePoint) {\n  if (codePoint >= 48 && codePoint < 58) {\n    return 26 + (codePoint - 48);\n  }\n  if (codePoint >= 65 && codePoint < 91) {\n    return codePoint - 65;\n  }\n  if (codePoint >= 97 && codePoint < 123) {\n    return codePoint - 97;\n  }\n  return base;\n};\nconst digitToBasic = function(digit, flag) {\n  return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\nconst adapt = function(delta, numPoints, firstTime) {\n  let k3 = 0;\n  delta = firstTime ? floor(delta / damp) : delta >> 1;\n  delta += floor(delta / numPoints);\n  for (; delta > baseMinusTMin * tMax >> 1; k3 += base) {\n    delta = floor(delta / baseMinusTMin);\n  }\n  return floor(k3 + (baseMinusTMin + 1) * delta / (delta + skew));\n};\nconst decode = function(input) {\n  const output = [];\n  const inputLength = input.length;\n  let i3 = 0;\n  let n3 = initialN;\n  let bias = initialBias;\n  let basic = input.lastIndexOf(delimiter);\n  if (basic < 0) {\n    basic = 0;\n  }\n  for (let j2 = 0; j2 < basic; ++j2) {\n    if (input.charCodeAt(j2) >= 128) {\n      error(\"not-basic\");\n    }\n    output.push(input.charCodeAt(j2));\n  }\n  for (let index2 = basic > 0 ? basic + 1 : 0; index2 < inputLength; ) {\n    const oldi = i3;\n    for (let w = 1, k3 = base; ; k3 += base) {\n      if (index2 >= inputLength) {\n        error(\"invalid-input\");\n      }\n      const digit = basicToDigit(input.charCodeAt(index2++));\n      if (digit >= base) {\n        error(\"invalid-input\");\n      }\n      if (digit > floor((maxInt - i3) / w)) {\n        error(\"overflow\");\n      }\n      i3 += digit * w;\n      const t2 = k3 <= bias ? tMin : k3 >= bias + tMax ? tMax : k3 - bias;\n      if (digit < t2) {\n        break;\n      }\n      const baseMinusT = base - t2;\n      if (w > floor(maxInt / baseMinusT)) {\n        error(\"overflow\");\n      }\n      w *= baseMinusT;\n    }\n    const out = output.length + 1;\n    bias = adapt(i3 - oldi, out, oldi == 0);\n    if (floor(i3 / out) > maxInt - n3) {\n      error(\"overflow\");\n    }\n    n3 += floor(i3 / out);\n    i3 %= out;\n    output.splice(i3++, 0, n3);\n  }\n  return String.fromCodePoint(...output);\n};\nconst encode = function(input) {\n  const output = [];\n  input = ucs2decode(input);\n  const inputLength = input.length;\n  let n3 = initialN;\n  let delta = 0;\n  let bias = initialBias;\n  for (const currentValue of input) {\n    if (currentValue < 128) {\n      output.push(stringFromCharCode(currentValue));\n    }\n  }\n  const basicLength = output.length;\n  let handledCPCount = basicLength;\n  if (basicLength) {\n    output.push(delimiter);\n  }\n  while (handledCPCount < inputLength) {\n    let m2 = maxInt;\n    for (const currentValue of input) {\n      if (currentValue >= n3 && currentValue < m2) {\n        m2 = currentValue;\n      }\n    }\n    const handledCPCountPlusOne = handledCPCount + 1;\n    if (m2 - n3 > floor((maxInt - delta) / handledCPCountPlusOne)) {\n      error(\"overflow\");\n    }\n    delta += (m2 - n3) * handledCPCountPlusOne;\n    n3 = m2;\n    for (const currentValue of input) {\n      if (currentValue < n3 && ++delta > maxInt) {\n        error(\"overflow\");\n      }\n      if (currentValue === n3) {\n        let q = delta;\n        for (let k3 = base; ; k3 += base) {\n          const t2 = k3 <= bias ? tMin : k3 >= bias + tMax ? tMax : k3 - bias;\n          if (q < t2) {\n            break;\n          }\n          const qMinusT = q - t2;\n          const baseMinusT = base - t2;\n          output.push(\n            stringFromCharCode(digitToBasic(t2 + qMinusT % baseMinusT, 0))\n          );\n          q = floor(qMinusT / baseMinusT);\n        }\n        output.push(stringFromCharCode(digitToBasic(q, 0)));\n        bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n        delta = 0;\n        ++handledCPCount;\n      }\n    }\n    ++delta;\n    ++n3;\n  }\n  return output.join(\"\");\n};\nconst toUnicode = function(input) {\n  return mapDomain(input, function(string2) {\n    return regexPunycode.test(string2) ? decode(string2.slice(4).toLowerCase()) : string2;\n  });\n};\nconst toASCII = function(input) {\n  return mapDomain(input, function(string2) {\n    return regexNonASCII.test(string2) ? \"xn--\" + encode(string2) : string2;\n  });\n};\nconst punycode = {\n  /**\n   * A string representing the current Punycode.js version number.\n   * @memberOf punycode\n   * @type String\n   */\n  \"version\": \"2.3.1\",\n  /**\n   * An object of methods to convert from JavaScript's internal character\n   * representation (UCS-2) to Unicode code points, and back.\n   * @see <https://mathiasbynens.be/notes/javascript-encoding>\n   * @memberOf punycode\n   * @type Object\n   */\n  \"ucs2\": {\n    \"decode\": ucs2decode,\n    \"encode\": ucs2encode\n  },\n  \"decode\": decode,\n  \"encode\": encode,\n  \"toASCII\": toASCII,\n  \"toUnicode\": toUnicode\n};\nconst cfg_default = {\n  options: {\n    // Enable HTML tags in source\n    html: false,\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: false,\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n    // CSS language prefix for fenced blocks\n    langPrefix: \"language-\",\n    // autoconvert URL-like texts to links\n    linkify: false,\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: \"“”‘’\",\n    /* “”‘’ */\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n    // Internal protection, recursion limit\n    maxNesting: 100\n  },\n  components: {\n    core: {},\n    block: {},\n    inline: {}\n  }\n};\nconst cfg_zero = {\n  options: {\n    // Enable HTML tags in source\n    html: false,\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: false,\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n    // CSS language prefix for fenced blocks\n    langPrefix: \"language-\",\n    // autoconvert URL-like texts to links\n    linkify: false,\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: \"“”‘’\",\n    /* “”‘’ */\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n    // Internal protection, recursion limit\n    maxNesting: 20\n  },\n  components: {\n    core: {\n      rules: [\n        \"normalize\",\n        \"block\",\n        \"inline\",\n        \"text_join\"\n      ]\n    },\n    block: {\n      rules: [\n        \"paragraph\"\n      ]\n    },\n    inline: {\n      rules: [\n        \"text\"\n      ],\n      rules2: [\n        \"balance_pairs\",\n        \"fragments_join\"\n      ]\n    }\n  }\n};\nconst cfg_commonmark = {\n  options: {\n    // Enable HTML tags in source\n    html: true,\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: true,\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n    // CSS language prefix for fenced blocks\n    langPrefix: \"language-\",\n    // autoconvert URL-like texts to links\n    linkify: false,\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: \"“”‘’\",\n    /* “”‘’ */\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n    // Internal protection, recursion limit\n    maxNesting: 20\n  },\n  components: {\n    core: {\n      rules: [\n        \"normalize\",\n        \"block\",\n        \"inline\",\n        \"text_join\"\n      ]\n    },\n    block: {\n      rules: [\n        \"blockquote\",\n        \"code\",\n        \"fence\",\n        \"heading\",\n        \"hr\",\n        \"html_block\",\n        \"lheading\",\n        \"list\",\n        \"reference\",\n        \"paragraph\"\n      ]\n    },\n    inline: {\n      rules: [\n        \"autolink\",\n        \"backticks\",\n        \"emphasis\",\n        \"entity\",\n        \"escape\",\n        \"html_inline\",\n        \"image\",\n        \"link\",\n        \"newline\",\n        \"text\"\n      ],\n      rules2: [\n        \"balance_pairs\",\n        \"emphasis\",\n        \"fragments_join\"\n      ]\n    }\n  }\n};\nconst config$3 = {\n  default: cfg_default,\n  zero: cfg_zero,\n  commonmark: cfg_commonmark\n};\nconst BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nconst GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\nfunction validateLink(url2) {\n  const str = url2.trim().toLowerCase();\n  return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true;\n}\nconst RECODE_HOSTNAME_FOR = [\"http:\", \"https:\", \"mailto:\"];\nfunction normalizeLink(url2) {\n  const parsed = urlParse(url2, true);\n  if (parsed.hostname) {\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toASCII(parsed.hostname);\n      } catch (er) {\n      }\n    }\n  }\n  return encode$1(format(parsed));\n}\nfunction normalizeLinkText(url2) {\n  const parsed = urlParse(url2, true);\n  if (parsed.hostname) {\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toUnicode(parsed.hostname);\n      } catch (er) {\n      }\n    }\n  }\n  return decode$1(format(parsed), decode$1.defaultChars + \"%\");\n}\nfunction MarkdownIt(presetName, options) {\n  if (!(this instanceof MarkdownIt)) {\n    return new MarkdownIt(presetName, options);\n  }\n  if (!options) {\n    if (!isString$1(presetName)) {\n      options = presetName || {};\n      presetName = \"default\";\n    }\n  }\n  this.inline = new ParserInline();\n  this.block = new ParserBlock();\n  this.core = new Core();\n  this.renderer = new Renderer();\n  this.linkify = new LinkifyIt();\n  this.validateLink = validateLink;\n  this.normalizeLink = normalizeLink;\n  this.normalizeLinkText = normalizeLinkText;\n  this.utils = utils;\n  this.helpers = assign$1({}, helpers);\n  this.options = {};\n  this.configure(presetName);\n  if (options) {\n    this.set(options);\n  }\n}\nMarkdownIt.prototype.set = function(options) {\n  assign$1(this.options, options);\n  return this;\n};\nMarkdownIt.prototype.configure = function(presets) {\n  const self2 = this;\n  if (isString$1(presets)) {\n    const presetName = presets;\n    presets = config$3[presetName];\n    if (!presets) {\n      throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name');\n    }\n  }\n  if (!presets) {\n    throw new Error(\"Wrong `markdown-it` preset, can't be empty\");\n  }\n  if (presets.options) {\n    self2.set(presets.options);\n  }\n  if (presets.components) {\n    Object.keys(presets.components).forEach(function(name) {\n      if (presets.components[name].rules) {\n        self2[name].ruler.enableOnly(presets.components[name].rules);\n      }\n      if (presets.components[name].rules2) {\n        self2[name].ruler2.enableOnly(presets.components[name].rules2);\n      }\n    });\n  }\n  return this;\n};\nMarkdownIt.prototype.enable = function(list2, ignoreInvalid) {\n  let result = [];\n  if (!Array.isArray(list2)) {\n    list2 = [list2];\n  }\n  [\"core\", \"block\", \"inline\"].forEach(function(chain) {\n    result = result.concat(this[chain].ruler.enable(list2, true));\n  }, this);\n  result = result.concat(this.inline.ruler2.enable(list2, true));\n  const missed = list2.filter(function(name) {\n    return result.indexOf(name) < 0;\n  });\n  if (missed.length && !ignoreInvalid) {\n    throw new Error(\"MarkdownIt. Failed to enable unknown rule(s): \" + missed);\n  }\n  return this;\n};\nMarkdownIt.prototype.disable = function(list2, ignoreInvalid) {\n  let result = [];\n  if (!Array.isArray(list2)) {\n    list2 = [list2];\n  }\n  [\"core\", \"block\", \"inline\"].forEach(function(chain) {\n    result = result.concat(this[chain].ruler.disable(list2, true));\n  }, this);\n  result = result.concat(this.inline.ruler2.disable(list2, true));\n  const missed = list2.filter(function(name) {\n    return result.indexOf(name) < 0;\n  });\n  if (missed.length && !ignoreInvalid) {\n    throw new Error(\"MarkdownIt. Failed to disable unknown rule(s): \" + missed);\n  }\n  return this;\n};\nMarkdownIt.prototype.use = function(plugin2) {\n  const args = [this].concat(Array.prototype.slice.call(arguments, 1));\n  plugin2.apply(plugin2, args);\n  return this;\n};\nMarkdownIt.prototype.parse = function(src, env) {\n  if (typeof src !== \"string\") {\n    throw new Error(\"Input data should be a String\");\n  }\n  const state = new this.core.State(src, this, env);\n  this.core.process(state);\n  return state.tokens;\n};\nMarkdownIt.prototype.render = function(src, env) {\n  env = env || {};\n  return this.renderer.render(this.parse(src, env), this.options, env);\n};\nMarkdownIt.prototype.parseInline = function(src, env) {\n  const state = new this.core.State(src, this, env);\n  state.inlineMode = true;\n  this.core.process(state);\n  return state.tokens;\n};\nMarkdownIt.prototype.renderInline = function(src, env) {\n  env = env || {};\n  return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\nvar freeGlobal = typeof global == \"object\" && global && global.Object === Object && global;\nvar freeSelf = typeof self == \"object\" && self && self.Object === Object && self;\nvar root = freeGlobal || freeSelf || Function(\"return this\")();\nvar Symbol$1 = root.Symbol;\nvar objectProto$f = Object.prototype;\nvar hasOwnProperty$c = objectProto$f.hasOwnProperty;\nvar nativeObjectToString$1 = objectProto$f.toString;\nvar symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : void 0;\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty$c.call(value, symToStringTag$1), tag = value[symToStringTag$1];\n  try {\n    value[symToStringTag$1] = void 0;\n    var unmasked = true;\n  } catch (e2) {\n  }\n  var result = nativeObjectToString$1.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag$1] = tag;\n    } else {\n      delete value[symToStringTag$1];\n    }\n  }\n  return result;\n}\nvar objectProto$e = Object.prototype;\nvar nativeObjectToString = objectProto$e.toString;\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\nvar nullTag = \"[object Null]\", undefinedTag = \"[object Undefined]\";\nvar symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0;\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === void 0 ? undefinedTag : nullTag;\n  }\n  return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n}\nfunction isObjectLike(value) {\n  return value != null && typeof value == \"object\";\n}\nvar isArray = Array.isArray;\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == \"object\" || type == \"function\");\n}\nfunction identity(value) {\n  return value;\n}\nvar asyncTag = \"[object AsyncFunction]\", funcTag$2 = \"[object Function]\", genTag$1 = \"[object GeneratorFunction]\", proxyTag = \"[object Proxy]\";\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  var tag = baseGetTag(value);\n  return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag;\n}\nvar coreJsData = root[\"__core-js_shared__\"];\nvar maskSrcKey = function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || \"\");\n  return uid ? \"Symbol(src)_1.\" + uid : \"\";\n}();\nfunction isMasked(func) {\n  return !!maskSrcKey && maskSrcKey in func;\n}\nvar funcProto$2 = Function.prototype;\nvar funcToString$2 = funcProto$2.toString;\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString$2.call(func);\n    } catch (e2) {\n    }\n    try {\n      return func + \"\";\n    } catch (e2) {\n    }\n  }\n  return \"\";\n}\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\nvar funcProto$1 = Function.prototype, objectProto$d = Object.prototype;\nvar funcToString$1 = funcProto$1.toString;\nvar hasOwnProperty$b = objectProto$d.hasOwnProperty;\nvar reIsNative = RegExp(\n  \"^\" + funcToString$1.call(hasOwnProperty$b).replace(reRegExpChar, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"\n);\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\nfunction getValue(object2, key) {\n  return object2 == null ? void 0 : object2[key];\n}\nfunction getNative(object2, key) {\n  var value = getValue(object2, key);\n  return baseIsNative(value) ? value : void 0;\n}\nvar WeakMap$1 = getNative(root, \"WeakMap\");\nvar objectCreate = Object.create;\nvar baseCreate = /* @__PURE__ */ function() {\n  function object2() {\n  }\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object2.prototype = proto;\n    var result = new object2();\n    object2.prototype = void 0;\n    return result;\n  };\n}();\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0:\n      return func.call(thisArg);\n    case 1:\n      return func.call(thisArg, args[0]);\n    case 2:\n      return func.call(thisArg, args[0], args[1]);\n    case 3:\n      return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\nfunction copyArray(source, array2) {\n  var index2 = -1, length = source.length;\n  array2 || (array2 = Array(length));\n  while (++index2 < length) {\n    array2[index2] = source[index2];\n  }\n  return array2;\n}\nvar HOT_COUNT = 800, HOT_SPAN = 16;\nvar nativeNow = Date.now;\nfunction shortOut(func) {\n  var count = 0, lastCalled = 0;\n  return function() {\n    var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(void 0, arguments);\n  };\n}\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\nvar defineProperty = function() {\n  try {\n    var func = getNative(Object, \"defineProperty\");\n    func({}, \"\", {});\n    return func;\n  } catch (e2) {\n  }\n}();\nvar baseSetToString = !defineProperty ? identity : function(func, string2) {\n  return defineProperty(func, \"toString\", {\n    \"configurable\": true,\n    \"enumerable\": false,\n    \"value\": constant(string2),\n    \"writable\": true\n  });\n};\nvar setToString = shortOut(baseSetToString);\nfunction arrayEach(array2, iteratee) {\n  var index2 = -1, length = array2 == null ? 0 : array2.length;\n  while (++index2 < length) {\n    if (iteratee(array2[index2], index2, array2) === false) {\n      break;\n    }\n  }\n  return array2;\n}\nvar MAX_SAFE_INTEGER$1 = 9007199254740991;\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER$1 : length;\n  return !!length && (type == \"number\" || type != \"symbol\" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);\n}\nfunction baseAssignValue(object2, key, value) {\n  if (key == \"__proto__\" && defineProperty) {\n    defineProperty(object2, key, {\n      \"configurable\": true,\n      \"enumerable\": true,\n      \"value\": value,\n      \"writable\": true\n    });\n  } else {\n    object2[key] = value;\n  }\n}\nfunction eq(value, other) {\n  return value === other || value !== value && other !== other;\n}\nvar objectProto$c = Object.prototype;\nvar hasOwnProperty$a = objectProto$c.hasOwnProperty;\nfunction assignValue(object2, key, value) {\n  var objValue = object2[key];\n  if (!(hasOwnProperty$a.call(object2, key) && eq(objValue, value)) || value === void 0 && !(key in object2)) {\n    baseAssignValue(object2, key, value);\n  }\n}\nfunction copyObject(source, props, object2, customizer) {\n  var isNew = !object2;\n  object2 || (object2 = {});\n  var index2 = -1, length = props.length;\n  while (++index2 < length) {\n    var key = props[index2];\n    var newValue = void 0;\n    if (newValue === void 0) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object2, key, newValue);\n    } else {\n      assignValue(object2, key, newValue);\n    }\n  }\n  return object2;\n}\nvar nativeMax = Math.max;\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === void 0 ? func.length - 1 : start, 0);\n  return function() {\n    var args = arguments, index2 = -1, length = nativeMax(args.length - start, 0), array2 = Array(length);\n    while (++index2 < length) {\n      array2[index2] = args[start + index2];\n    }\n    index2 = -1;\n    var otherArgs = Array(start + 1);\n    while (++index2 < start) {\n      otherArgs[index2] = args[index2];\n    }\n    otherArgs[start] = transform(array2);\n    return apply(func, this, otherArgs);\n  };\n}\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + \"\");\n}\nvar MAX_SAFE_INTEGER = 9007199254740991;\nfunction isLength(value) {\n  return typeof value == \"number\" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\nfunction isIterateeCall(value, index2, object2) {\n  if (!isObject(object2)) {\n    return false;\n  }\n  var type = typeof index2;\n  if (type == \"number\" ? isArrayLike(object2) && isIndex(index2, object2.length) : type == \"string\" && index2 in object2) {\n    return eq(object2[index2], value);\n  }\n  return false;\n}\nfunction createAssigner(assigner) {\n  return baseRest(function(object2, sources) {\n    var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;\n    customizer = assigner.length > 3 && typeof customizer == \"function\" ? (length--, customizer) : void 0;\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? void 0 : customizer;\n      length = 1;\n    }\n    object2 = Object(object2);\n    while (++index2 < length) {\n      var source = sources[index2];\n      if (source) {\n        assigner(object2, source, index2, customizer);\n      }\n    }\n    return object2;\n  });\n}\nvar objectProto$b = Object.prototype;\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor, proto = typeof Ctor == \"function\" && Ctor.prototype || objectProto$b;\n  return value === proto;\n}\nfunction baseTimes(n3, iteratee) {\n  var index2 = -1, result = Array(n3);\n  while (++index2 < n3) {\n    result[index2] = iteratee(index2);\n  }\n  return result;\n}\nvar argsTag$3 = \"[object Arguments]\";\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag$3;\n}\nvar objectProto$a = Object.prototype;\nvar hasOwnProperty$9 = objectProto$a.hasOwnProperty;\nvar propertyIsEnumerable$1 = objectProto$a.propertyIsEnumerable;\nvar isArguments = baseIsArguments(/* @__PURE__ */ function() {\n  return arguments;\n}()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty$9.call(value, \"callee\") && !propertyIsEnumerable$1.call(value, \"callee\");\n};\nfunction stubFalse() {\n  return false;\n}\nvar freeExports$2 = typeof exports == \"object\" && exports && !exports.nodeType && exports;\nvar freeModule$2 = freeExports$2 && typeof module == \"object\" && module && !module.nodeType && module;\nvar moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2;\nvar Buffer$1 = moduleExports$2 ? root.Buffer : void 0;\nvar nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : void 0;\nvar isBuffer = nativeIsBuffer || stubFalse;\nvar argsTag$2 = \"[object Arguments]\", arrayTag$2 = \"[object Array]\", boolTag$3 = \"[object Boolean]\", dateTag$3 = \"[object Date]\", errorTag$2 = \"[object Error]\", funcTag$1 = \"[object Function]\", mapTag$5 = \"[object Map]\", numberTag$3 = \"[object Number]\", objectTag$4 = \"[object Object]\", regexpTag$3 = \"[object RegExp]\", setTag$5 = \"[object Set]\", stringTag$3 = \"[object String]\", weakMapTag$2 = \"[object WeakMap]\";\nvar arrayBufferTag$3 = \"[object ArrayBuffer]\", dataViewTag$4 = \"[object DataView]\", float32Tag$2 = \"[object Float32Array]\", float64Tag$2 = \"[object Float64Array]\", int8Tag$2 = \"[object Int8Array]\", int16Tag$2 = \"[object Int16Array]\", int32Tag$2 = \"[object Int32Array]\", uint8Tag$2 = \"[object Uint8Array]\", uint8ClampedTag$2 = \"[object Uint8ClampedArray]\", uint16Tag$2 = \"[object Uint16Array]\", uint32Tag$2 = \"[object Uint32Array]\";\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = typedArrayTags[uint32Tag$2] = true;\ntypedArrayTags[argsTag$2] = typedArrayTags[arrayTag$2] = typedArrayTags[arrayBufferTag$3] = typedArrayTags[boolTag$3] = typedArrayTags[dataViewTag$4] = typedArrayTags[dateTag$3] = typedArrayTags[errorTag$2] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag$5] = typedArrayTags[numberTag$3] = typedArrayTags[objectTag$4] = typedArrayTags[regexpTag$3] = typedArrayTags[setTag$5] = typedArrayTags[stringTag$3] = typedArrayTags[weakMapTag$2] = false;\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\nvar freeExports$1 = typeof exports == \"object\" && exports && !exports.nodeType && exports;\nvar freeModule$1 = freeExports$1 && typeof module == \"object\" && module && !module.nodeType && module;\nvar moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1;\nvar freeProcess = moduleExports$1 && freeGlobal.process;\nvar nodeUtil = function() {\n  try {\n    var types = freeModule$1 && freeModule$1.require && freeModule$1.require(\"util\").types;\n    if (types) {\n      return types;\n    }\n    return freeProcess && freeProcess.binding && freeProcess.binding(\"util\");\n  } catch (e2) {\n  }\n}();\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\nvar objectProto$9 = Object.prototype;\nvar hasOwnProperty$8 = objectProto$9.hasOwnProperty;\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;\n  for (var key in value) {\n    if ((inherited || hasOwnProperty$8.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.\n    (key == \"length\" || // Node.js 0.10 has enumerable non-index properties on buffers.\n    isBuff && (key == \"offset\" || key == \"parent\") || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n    isType && (key == \"buffer\" || key == \"byteLength\" || key == \"byteOffset\") || // Skip index properties.\n    isIndex(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\nvar nativeKeys = overArg(Object.keys, Object);\nvar objectProto$8 = Object.prototype;\nvar hasOwnProperty$7 = objectProto$8.hasOwnProperty;\nfunction baseKeys(object2) {\n  if (!isPrototype(object2)) {\n    return nativeKeys(object2);\n  }\n  var result = [];\n  for (var key in Object(object2)) {\n    if (hasOwnProperty$7.call(object2, key) && key != \"constructor\") {\n      result.push(key);\n    }\n  }\n  return result;\n}\nfunction keys(object2) {\n  return isArrayLike(object2) ? arrayLikeKeys(object2) : baseKeys(object2);\n}\nfunction nativeKeysIn(object2) {\n  var result = [];\n  if (object2 != null) {\n    for (var key in Object(object2)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nvar objectProto$7 = Object.prototype;\nvar hasOwnProperty$6 = objectProto$7.hasOwnProperty;\nfunction baseKeysIn(object2) {\n  if (!isObject(object2)) {\n    return nativeKeysIn(object2);\n  }\n  var isProto = isPrototype(object2), result = [];\n  for (var key in object2) {\n    if (!(key == \"constructor\" && (isProto || !hasOwnProperty$6.call(object2, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nfunction keysIn(object2) {\n  return isArrayLike(object2) ? arrayLikeKeys(object2, true) : baseKeysIn(object2);\n}\nvar nativeCreate = getNative(Object, \"create\");\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\nvar HASH_UNDEFINED$2 = \"__lodash_hash_undefined__\";\nvar objectProto$6 = Object.prototype;\nvar hasOwnProperty$5 = objectProto$6.hasOwnProperty;\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED$2 ? void 0 : result;\n  }\n  return hasOwnProperty$5.call(data, key) ? data[key] : void 0;\n}\nvar objectProto$5 = Object.prototype;\nvar hasOwnProperty$4 = objectProto$5.hasOwnProperty;\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? data[key] !== void 0 : hasOwnProperty$4.call(data, key);\n}\nvar HASH_UNDEFINED$1 = \"__lodash_hash_undefined__\";\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED$1 : value;\n  return this;\n}\nfunction Hash(entries) {\n  var index2 = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index2 < length) {\n    var entry = entries[index2];\n    this.set(entry[0], entry[1]);\n  }\n}\nHash.prototype.clear = hashClear;\nHash.prototype[\"delete\"] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\nfunction assocIndexOf(array2, key) {\n  var length = array2.length;\n  while (length--) {\n    if (eq(array2[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\nvar arrayProto = Array.prototype;\nvar splice = arrayProto.splice;\nfunction listCacheDelete(key) {\n  var data = this.__data__, index2 = assocIndexOf(data, key);\n  if (index2 < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index2 == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index2, 1);\n  }\n  --this.size;\n  return true;\n}\nfunction listCacheGet(key) {\n  var data = this.__data__, index2 = assocIndexOf(data, key);\n  return index2 < 0 ? void 0 : data[index2][1];\n}\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\nfunction listCacheSet(key, value) {\n  var data = this.__data__, index2 = assocIndexOf(data, key);\n  if (index2 < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index2][1] = value;\n  }\n  return this;\n}\nfunction ListCache(entries) {\n  var index2 = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index2 < length) {\n    var entry = entries[index2];\n    this.set(entry[0], entry[1]);\n  }\n}\nListCache.prototype.clear = listCacheClear;\nListCache.prototype[\"delete\"] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\nvar Map$1 = getNative(root, \"Map\");\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    \"hash\": new Hash(),\n    \"map\": new (Map$1 || ListCache)(),\n    \"string\": new Hash()\n  };\n}\nfunction isKeyable(value) {\n  var type = typeof value;\n  return type == \"string\" || type == \"number\" || type == \"symbol\" || type == \"boolean\" ? value !== \"__proto__\" : value === null;\n}\nfunction getMapData(map2, key) {\n  var data = map2.__data__;\n  return isKeyable(key) ? data[typeof key == \"string\" ? \"string\" : \"hash\"] : data.map;\n}\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)[\"delete\"](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key), size = data.size;\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\nfunction MapCache(entries) {\n  var index2 = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index2 < length) {\n    var entry = entries[index2];\n    this.set(entry[0], entry[1]);\n  }\n}\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype[\"delete\"] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\nfunction arrayPush(array2, values) {\n  var index2 = -1, length = values.length, offset = array2.length;\n  while (++index2 < length) {\n    array2[offset + index2] = values[index2];\n  }\n  return array2;\n}\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\nvar objectTag$3 = \"[object Object]\";\nvar funcProto = Function.prototype, objectProto$4 = Object.prototype;\nvar funcToString = funcProto.toString;\nvar hasOwnProperty$3 = objectProto$4.hasOwnProperty;\nvar objectCtorString = funcToString.call(Object);\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag$3) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty$3.call(proto, \"constructor\") && proto.constructor;\n  return typeof Ctor == \"function\" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;\n}\nfunction stackClear() {\n  this.__data__ = new ListCache();\n  this.size = 0;\n}\nfunction stackDelete(key) {\n  var data = this.__data__, result = data[\"delete\"](key);\n  this.size = data.size;\n  return result;\n}\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\nvar LARGE_ARRAY_SIZE = 200;\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\nStack.prototype.clear = stackClear;\nStack.prototype[\"delete\"] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\nvar freeExports = typeof exports == \"object\" && exports && !exports.nodeType && exports;\nvar freeModule = freeExports && typeof module == \"object\" && module && !module.nodeType && module;\nvar moduleExports = freeModule && freeModule.exports === freeExports;\nvar Buffer2 = moduleExports ? root.Buffer : void 0, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : void 0;\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n  buffer.copy(result);\n  return result;\n}\nfunction arrayFilter(array2, predicate) {\n  var index2 = -1, length = array2 == null ? 0 : array2.length, resIndex = 0, result = [];\n  while (++index2 < length) {\n    var value = array2[index2];\n    if (predicate(value, index2, array2)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\nfunction stubArray() {\n  return [];\n}\nvar objectProto$3 = Object.prototype;\nvar propertyIsEnumerable = objectProto$3.propertyIsEnumerable;\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object2) {\n  if (object2 == null) {\n    return [];\n  }\n  object2 = Object(object2);\n  return arrayFilter(nativeGetSymbols(object2), function(symbol) {\n    return propertyIsEnumerable.call(object2, symbol);\n  });\n};\nfunction baseGetAllKeys(object2, keysFunc, symbolsFunc) {\n  var result = keysFunc(object2);\n  return isArray(object2) ? result : arrayPush(result, symbolsFunc(object2));\n}\nfunction getAllKeys(object2) {\n  return baseGetAllKeys(object2, keys, getSymbols);\n}\nvar DataView = getNative(root, \"DataView\");\nvar Promise$1 = getNative(root, \"Promise\");\nvar Set$1 = getNative(root, \"Set\");\nvar mapTag$4 = \"[object Map]\", objectTag$2 = \"[object Object]\", promiseTag = \"[object Promise]\", setTag$4 = \"[object Set]\", weakMapTag$1 = \"[object WeakMap]\";\nvar dataViewTag$3 = \"[object DataView]\";\nvar dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1);\nvar getTag = baseGetTag;\nif (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$3 || Map$1 && getTag(new Map$1()) != mapTag$4 || Promise$1 && getTag(Promise$1.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$4 || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag$1) {\n  getTag = function(value) {\n    var result = baseGetTag(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : \"\";\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString:\n          return dataViewTag$3;\n        case mapCtorString:\n          return mapTag$4;\n        case promiseCtorString:\n          return promiseTag;\n        case setCtorString:\n          return setTag$4;\n        case weakMapCtorString:\n          return weakMapTag$1;\n      }\n    }\n    return result;\n  };\n}\nvar objectProto$2 = Object.prototype;\nvar hasOwnProperty$2 = objectProto$2.hasOwnProperty;\nfunction initCloneArray(array2) {\n  var length = array2.length, result = new array2.constructor(length);\n  if (length && typeof array2[0] == \"string\" && hasOwnProperty$2.call(array2, \"index\")) {\n    result.index = array2.index;\n    result.input = array2.input;\n  }\n  return result;\n}\nvar Uint8Array$1 = root.Uint8Array;\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer));\n  return result;\n}\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = cloneArrayBuffer(dataView.buffer);\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\nvar reFlags = /\\w*$/;\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\nvar symbolProto$1 = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : void 0;\nfunction cloneSymbol(symbol) {\n  return symbolValueOf$1 ? Object(symbolValueOf$1.call(symbol)) : {};\n}\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\nvar boolTag$2 = \"[object Boolean]\", dateTag$2 = \"[object Date]\", mapTag$3 = \"[object Map]\", numberTag$2 = \"[object Number]\", regexpTag$2 = \"[object RegExp]\", setTag$3 = \"[object Set]\", stringTag$2 = \"[object String]\", symbolTag$2 = \"[object Symbol]\";\nvar arrayBufferTag$2 = \"[object ArrayBuffer]\", dataViewTag$2 = \"[object DataView]\", float32Tag$1 = \"[object Float32Array]\", float64Tag$1 = \"[object Float64Array]\", int8Tag$1 = \"[object Int8Array]\", int16Tag$1 = \"[object Int16Array]\", int32Tag$1 = \"[object Int32Array]\", uint8Tag$1 = \"[object Uint8Array]\", uint8ClampedTag$1 = \"[object Uint8ClampedArray]\", uint16Tag$1 = \"[object Uint16Array]\", uint32Tag$1 = \"[object Uint32Array]\";\nfunction initCloneByTag(object2, tag, isDeep) {\n  var Ctor = object2.constructor;\n  switch (tag) {\n    case arrayBufferTag$2:\n      return cloneArrayBuffer(object2);\n    case boolTag$2:\n    case dateTag$2:\n      return new Ctor(+object2);\n    case dataViewTag$2:\n      return cloneDataView(object2);\n    case float32Tag$1:\n    case float64Tag$1:\n    case int8Tag$1:\n    case int16Tag$1:\n    case int32Tag$1:\n    case uint8Tag$1:\n    case uint8ClampedTag$1:\n    case uint16Tag$1:\n    case uint32Tag$1:\n      return cloneTypedArray(object2, isDeep);\n    case mapTag$3:\n      return new Ctor();\n    case numberTag$2:\n    case stringTag$2:\n      return new Ctor(object2);\n    case regexpTag$2:\n      return cloneRegExp(object2);\n    case setTag$3:\n      return new Ctor();\n    case symbolTag$2:\n      return cloneSymbol(object2);\n  }\n}\nfunction initCloneObject(object2) {\n  return typeof object2.constructor == \"function\" && !isPrototype(object2) ? baseCreate(getPrototype(object2)) : {};\n}\nvar mapTag$2 = \"[object Map]\";\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag$2;\n}\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\nvar setTag$2 = \"[object Set]\";\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag$2;\n}\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\nvar CLONE_DEEP_FLAG$1 = 1;\nvar argsTag$1 = \"[object Arguments]\", arrayTag$1 = \"[object Array]\", boolTag$1 = \"[object Boolean]\", dateTag$1 = \"[object Date]\", errorTag$1 = \"[object Error]\", funcTag = \"[object Function]\", genTag = \"[object GeneratorFunction]\", mapTag$1 = \"[object Map]\", numberTag$1 = \"[object Number]\", objectTag$1 = \"[object Object]\", regexpTag$1 = \"[object RegExp]\", setTag$1 = \"[object Set]\", stringTag$1 = \"[object String]\", symbolTag$1 = \"[object Symbol]\", weakMapTag = \"[object WeakMap]\";\nvar arrayBufferTag$1 = \"[object ArrayBuffer]\", dataViewTag$1 = \"[object DataView]\", float32Tag = \"[object Float32Array]\", float64Tag = \"[object Float64Array]\", int8Tag = \"[object Int8Array]\", int16Tag = \"[object Int16Array]\", int32Tag = \"[object Int32Array]\", uint8Tag = \"[object Uint8Array]\", uint8ClampedTag = \"[object Uint8ClampedArray]\", uint16Tag = \"[object Uint16Array]\", uint32Tag = \"[object Uint32Array]\";\nvar cloneableTags = {};\ncloneableTags[argsTag$1] = cloneableTags[arrayTag$1] = cloneableTags[arrayBufferTag$1] = cloneableTags[dataViewTag$1] = cloneableTags[boolTag$1] = cloneableTags[dateTag$1] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag$1] = cloneableTags[numberTag$1] = cloneableTags[objectTag$1] = cloneableTags[regexpTag$1] = cloneableTags[setTag$1] = cloneableTags[stringTag$1] = cloneableTags[symbolTag$1] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag$1] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;\nfunction baseClone(value, bitmask, customizer, key, object2, stack) {\n  var result, isDeep = bitmask & CLONE_DEEP_FLAG$1;\n  if (result !== void 0) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n  } else {\n    var tag = getTag(value), isFunc = tag == funcTag || tag == genTag;\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag$1 || tag == argsTag$1 || isFunc && !object2) {\n      result = isFunc ? {} : initCloneObject(value);\n    } else {\n      if (!cloneableTags[tag]) {\n        return object2 ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  stack || (stack = new Stack());\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key2) {\n      result.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack));\n    });\n  }\n  var keysFunc = getAllKeys;\n  var props = isArr ? void 0 : keysFunc(value);\n  arrayEach(props || value, function(subValue, key2) {\n    if (props) {\n      key2 = subValue;\n      subValue = value[key2];\n    }\n    assignValue(result, key2, baseClone(subValue, bitmask, customizer, key2, value, stack));\n  });\n  return result;\n}\nvar CLONE_DEEP_FLAG = 1, CLONE_SYMBOLS_FLAG = 4;\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\nvar HASH_UNDEFINED = \"__lodash_hash_undefined__\";\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\nfunction SetCache(values) {\n  var index2 = -1, length = values == null ? 0 : values.length;\n  this.__data__ = new MapCache();\n  while (++index2 < length) {\n    this.add(values[index2]);\n  }\n}\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\nfunction arraySome(array2, predicate) {\n  var index2 = -1, length = array2 == null ? 0 : array2.length;\n  while (++index2 < length) {\n    if (predicate(array2[index2], index2, array2)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\nvar COMPARE_PARTIAL_FLAG$3 = 1, COMPARE_UNORDERED_FLAG$1 = 2;\nfunction equalArrays(array2, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, arrLength = array2.length, othLength = other.length;\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  var arrStacked = stack.get(array2);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array2;\n  }\n  var index2 = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$1 ? new SetCache() : void 0;\n  stack.set(array2, other);\n  stack.set(other, array2);\n  while (++index2 < arrLength) {\n    var arrValue = array2[index2], othValue = other[index2];\n    if (customizer) {\n      var compared = isPartial ? customizer(othValue, arrValue, index2, other, array2, stack) : customizer(arrValue, othValue, index2, array2, other, stack);\n    }\n    if (compared !== void 0) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    if (seen) {\n      if (!arraySome(other, function(othValue2, othIndex) {\n        if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {\n          return seen.push(othIndex);\n        }\n      })) {\n        result = false;\n        break;\n      }\n    } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n      result = false;\n      break;\n    }\n  }\n  stack[\"delete\"](array2);\n  stack[\"delete\"](other);\n  return result;\n}\nfunction mapToArray(map2) {\n  var index2 = -1, result = Array(map2.size);\n  map2.forEach(function(value, key) {\n    result[++index2] = [key, value];\n  });\n  return result;\n}\nfunction setToArray(set2) {\n  var index2 = -1, result = Array(set2.size);\n  set2.forEach(function(value) {\n    result[++index2] = value;\n  });\n  return result;\n}\nvar COMPARE_PARTIAL_FLAG$2 = 1, COMPARE_UNORDERED_FLAG = 2;\nvar boolTag = \"[object Boolean]\", dateTag = \"[object Date]\", errorTag = \"[object Error]\", mapTag = \"[object Map]\", numberTag = \"[object Number]\", regexpTag = \"[object RegExp]\", setTag = \"[object Set]\", stringTag = \"[object String]\", symbolTag = \"[object Symbol]\";\nvar arrayBufferTag = \"[object ArrayBuffer]\", dataViewTag = \"[object DataView]\";\nvar symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;\nfunction equalByTag(object2, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if (object2.byteLength != other.byteLength || object2.byteOffset != other.byteOffset) {\n        return false;\n      }\n      object2 = object2.buffer;\n      other = other.buffer;\n    case arrayBufferTag:\n      if (object2.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object2), new Uint8Array$1(other))) {\n        return false;\n      }\n      return true;\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      return eq(+object2, +other);\n    case errorTag:\n      return object2.name == other.name && object2.message == other.message;\n    case regexpTag:\n    case stringTag:\n      return object2 == other + \"\";\n    case mapTag:\n      var convert = mapToArray;\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG$2;\n      convert || (convert = setToArray);\n      if (object2.size != other.size && !isPartial) {\n        return false;\n      }\n      var stacked = stack.get(object2);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n      stack.set(object2, other);\n      var result = equalArrays(convert(object2), convert(other), bitmask, customizer, equalFunc, stack);\n      stack[\"delete\"](object2);\n      return result;\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object2) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\nvar COMPARE_PARTIAL_FLAG$1 = 1;\nvar objectProto$1 = Object.prototype;\nvar hasOwnProperty$1 = objectProto$1.hasOwnProperty;\nfunction equalObjects(object2, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG$1, objProps = getAllKeys(object2), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index2 = objLength;\n  while (index2--) {\n    var key = objProps[index2];\n    if (!(isPartial ? key in other : hasOwnProperty$1.call(other, key))) {\n      return false;\n    }\n  }\n  var objStacked = stack.get(object2);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object2;\n  }\n  var result = true;\n  stack.set(object2, other);\n  stack.set(other, object2);\n  var skipCtor = isPartial;\n  while (++index2 < objLength) {\n    key = objProps[index2];\n    var objValue = object2[key], othValue = other[key];\n    if (customizer) {\n      var compared = isPartial ? customizer(othValue, objValue, key, other, object2, stack) : customizer(objValue, othValue, key, object2, other, stack);\n    }\n    if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == \"constructor\");\n  }\n  if (result && !skipCtor) {\n    var objCtor = object2.constructor, othCtor = other.constructor;\n    if (objCtor != othCtor && (\"constructor\" in object2 && \"constructor\" in other) && !(typeof objCtor == \"function\" && objCtor instanceof objCtor && typeof othCtor == \"function\" && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack[\"delete\"](object2);\n  stack[\"delete\"](other);\n  return result;\n}\nvar COMPARE_PARTIAL_FLAG = 1;\nvar argsTag = \"[object Arguments]\", arrayTag = \"[object Array]\", objectTag = \"[object Object]\";\nvar objectProto = Object.prototype;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nfunction baseIsEqualDeep(object2, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object2), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object2), othTag = othIsArr ? arrayTag : getTag(other);\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n  var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;\n  if (isSameTag && isBuffer(object2)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack());\n    return objIsArr || isTypedArray(object2) ? equalArrays(object2, other, bitmask, customizer, equalFunc, stack) : equalByTag(object2, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object2, \"__wrapped__\"), othIsWrapped = othIsObj && hasOwnProperty.call(other, \"__wrapped__\");\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object2.value() : object2, othUnwrapped = othIsWrapped ? other.value() : other;\n      stack || (stack = new Stack());\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack());\n  return equalObjects(object2, other, bitmask, customizer, equalFunc, stack);\n}\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\nfunction createBaseFor(fromRight) {\n  return function(object2, iteratee, keysFunc) {\n    var index2 = -1, iterable = Object(object2), props = keysFunc(object2), length = props.length;\n    while (length--) {\n      var key = props[++index2];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object2;\n  };\n}\nvar baseFor = createBaseFor();\nfunction assignMergeValue(object2, key, value) {\n  if (value !== void 0 && !eq(object2[key], value) || value === void 0 && !(key in object2)) {\n    baseAssignValue(object2, key, value);\n  }\n}\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\nfunction safeGet(object2, key) {\n  if (key === \"constructor\" && typeof object2[key] === \"function\") {\n    return;\n  }\n  if (key == \"__proto__\") {\n    return;\n  }\n  return object2[key];\n}\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\nfunction baseMergeDeep(object2, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object2, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue);\n  if (stacked) {\n    assignMergeValue(object2, key, stacked);\n    return;\n  }\n  var newValue = customizer ? customizer(objValue, srcValue, key + \"\", object2, source, stack) : void 0;\n  var isCommon = newValue === void 0;\n  if (isCommon) {\n    var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      } else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      } else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      } else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      } else {\n        newValue = [];\n      }\n    } else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      } else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    } else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack[\"delete\"](srcValue);\n  }\n  assignMergeValue(object2, key, newValue);\n}\nfunction baseMerge(object2, source, srcIndex, customizer, stack) {\n  if (object2 === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack());\n    if (isObject(srcValue)) {\n      baseMergeDeep(object2, source, key, srcIndex, baseMerge, customizer, stack);\n    } else {\n      var newValue = customizer ? customizer(safeGet(object2, key), srcValue, key + \"\", object2, source, stack) : void 0;\n      if (newValue === void 0) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object2, key, newValue);\n    }\n  }, keysIn);\n}\nfunction isEqual$1(value, other) {\n  return baseIsEqual(value, other);\n}\nvar merge = createAssigner(function(object2, source, srcIndex) {\n  baseMerge(object2, source, srcIndex);\n});\nvar Scope = /* @__PURE__ */ ((Scope2) => (Scope2[Scope2.TYPE = 3] = \"TYPE\", Scope2[Scope2.LEVEL = 12] = \"LEVEL\", Scope2[Scope2.ATTRIBUTE = 13] = \"ATTRIBUTE\", Scope2[Scope2.BLOT = 14] = \"BLOT\", Scope2[Scope2.INLINE = 7] = \"INLINE\", Scope2[Scope2.BLOCK = 11] = \"BLOCK\", Scope2[Scope2.BLOCK_BLOT = 10] = \"BLOCK_BLOT\", Scope2[Scope2.INLINE_BLOT = 6] = \"INLINE_BLOT\", Scope2[Scope2.BLOCK_ATTRIBUTE = 9] = \"BLOCK_ATTRIBUTE\", Scope2[Scope2.INLINE_ATTRIBUTE = 5] = \"INLINE_ATTRIBUTE\", Scope2[Scope2.ANY = 15] = \"ANY\", Scope2))(Scope || {});\nclass Attributor {\n  constructor(attrName, keyName, options = {}) {\n    this.attrName = attrName, this.keyName = keyName;\n    const attributeBit = Scope.TYPE & Scope.ATTRIBUTE;\n    this.scope = options.scope != null ? (\n      // Ignore type bits, force attribute bit\n      options.scope & Scope.LEVEL | attributeBit\n    ) : Scope.ATTRIBUTE, options.whitelist != null && (this.whitelist = options.whitelist);\n  }\n  static keys(node) {\n    return Array.from(node.attributes).map((item) => item.name);\n  }\n  add(node, value) {\n    return this.canAdd(node, value) ? (node.setAttribute(this.keyName, value), true) : false;\n  }\n  canAdd(_node, value) {\n    return this.whitelist == null ? true : typeof value == \"string\" ? this.whitelist.indexOf(value.replace(/[\"']/g, \"\")) > -1 : this.whitelist.indexOf(value) > -1;\n  }\n  remove(node) {\n    node.removeAttribute(this.keyName);\n  }\n  value(node) {\n    const value = node.getAttribute(this.keyName);\n    return this.canAdd(node, value) && value ? value : \"\";\n  }\n}\nclass ParchmentError extends Error {\n  constructor(message) {\n    message = \"[Parchment] \" + message, super(message), this.message = message, this.name = this.constructor.name;\n  }\n}\nconst _Registry = class _Registry2 {\n  constructor() {\n    this.attributes = {}, this.classes = {}, this.tags = {}, this.types = {};\n  }\n  static find(node, bubble = false) {\n    if (node == null)\n      return null;\n    if (this.blots.has(node))\n      return this.blots.get(node) || null;\n    if (bubble) {\n      let parentNode = null;\n      try {\n        parentNode = node.parentNode;\n      } catch {\n        return null;\n      }\n      return this.find(parentNode, bubble);\n    }\n    return null;\n  }\n  create(scroll, input, value) {\n    const match22 = this.query(input);\n    if (match22 == null)\n      throw new ParchmentError(`Unable to create ${input} blot`);\n    const blotClass = match22, node = (\n      // @ts-expect-error Fix me later\n      input instanceof Node || input.nodeType === Node.TEXT_NODE ? input : blotClass.create(value)\n    ), blot = new blotClass(scroll, node, value);\n    return _Registry2.blots.set(blot.domNode, blot), blot;\n  }\n  find(node, bubble = false) {\n    return _Registry2.find(node, bubble);\n  }\n  query(query, scope = Scope.ANY) {\n    let match22;\n    return typeof query == \"string\" ? match22 = this.types[query] || this.attributes[query] : query instanceof Text || query.nodeType === Node.TEXT_NODE ? match22 = this.types.text : typeof query == \"number\" ? query & Scope.LEVEL & Scope.BLOCK ? match22 = this.types.block : query & Scope.LEVEL & Scope.INLINE && (match22 = this.types.inline) : query instanceof Element && ((query.getAttribute(\"class\") || \"\").split(/\\s+/).some((name) => (match22 = this.classes[name], !!match22)), match22 = match22 || this.tags[query.tagName]), match22 == null ? null : \"scope\" in match22 && scope & Scope.LEVEL & match22.scope && scope & Scope.TYPE & match22.scope ? match22 : null;\n  }\n  register(...definitions) {\n    return definitions.map((definition) => {\n      const isBlot = \"blotName\" in definition, isAttr = \"attrName\" in definition;\n      if (!isBlot && !isAttr)\n        throw new ParchmentError(\"Invalid definition\");\n      if (isBlot && definition.blotName === \"abstract\")\n        throw new ParchmentError(\"Cannot register abstract class\");\n      const key = isBlot ? definition.blotName : isAttr ? definition.attrName : void 0;\n      return this.types[key] = definition, isAttr ? typeof definition.keyName == \"string\" && (this.attributes[definition.keyName] = definition) : isBlot && (definition.className && (this.classes[definition.className] = definition), definition.tagName && (Array.isArray(definition.tagName) ? definition.tagName = definition.tagName.map((tagName) => tagName.toUpperCase()) : definition.tagName = definition.tagName.toUpperCase(), (Array.isArray(definition.tagName) ? definition.tagName : [definition.tagName]).forEach((tag) => {\n        (this.tags[tag] == null || definition.className == null) && (this.tags[tag] = definition);\n      }))), definition;\n    });\n  }\n};\n_Registry.blots = /* @__PURE__ */ new WeakMap();\nlet Registry = _Registry;\nfunction match2(node, prefix) {\n  return (node.getAttribute(\"class\") || \"\").split(/\\s+/).filter((name) => name.indexOf(`${prefix}-`) === 0);\n}\nclass ClassAttributor extends Attributor {\n  static keys(node) {\n    return (node.getAttribute(\"class\") || \"\").split(/\\s+/).map((name) => name.split(\"-\").slice(0, -1).join(\"-\"));\n  }\n  add(node, value) {\n    return this.canAdd(node, value) ? (this.remove(node), node.classList.add(`${this.keyName}-${value}`), true) : false;\n  }\n  remove(node) {\n    match2(node, this.keyName).forEach((name) => {\n      node.classList.remove(name);\n    }), node.classList.length === 0 && node.removeAttribute(\"class\");\n  }\n  value(node) {\n    const value = (match2(node, this.keyName)[0] || \"\").slice(this.keyName.length + 1);\n    return this.canAdd(node, value) ? value : \"\";\n  }\n}\nconst ClassAttributor$1 = ClassAttributor;\nfunction camelize(name) {\n  const parts = name.split(\"-\"), rest = parts.slice(1).map((part) => part[0].toUpperCase() + part.slice(1)).join(\"\");\n  return parts[0] + rest;\n}\nclass StyleAttributor extends Attributor {\n  static keys(node) {\n    return (node.getAttribute(\"style\") || \"\").split(\";\").map((value) => value.split(\":\")[0].trim());\n  }\n  add(node, value) {\n    return this.canAdd(node, value) ? (node.style[camelize(this.keyName)] = value, true) : false;\n  }\n  remove(node) {\n    node.style[camelize(this.keyName)] = \"\", node.getAttribute(\"style\") || node.removeAttribute(\"style\");\n  }\n  value(node) {\n    const value = node.style[camelize(this.keyName)];\n    return this.canAdd(node, value) ? value : \"\";\n  }\n}\nconst StyleAttributor$1 = StyleAttributor;\nclass AttributorStore {\n  constructor(domNode) {\n    this.attributes = {}, this.domNode = domNode, this.build();\n  }\n  attribute(attribute2, value) {\n    value ? attribute2.add(this.domNode, value) && (attribute2.value(this.domNode) != null ? this.attributes[attribute2.attrName] = attribute2 : delete this.attributes[attribute2.attrName]) : (attribute2.remove(this.domNode), delete this.attributes[attribute2.attrName]);\n  }\n  build() {\n    this.attributes = {};\n    const blot = Registry.find(this.domNode);\n    if (blot == null)\n      return;\n    const attributes = Attributor.keys(this.domNode), classes = ClassAttributor$1.keys(this.domNode), styles = StyleAttributor$1.keys(this.domNode);\n    attributes.concat(classes).concat(styles).forEach((name) => {\n      const attr = blot.scroll.query(name, Scope.ATTRIBUTE);\n      attr instanceof Attributor && (this.attributes[attr.attrName] = attr);\n    });\n  }\n  copy(target) {\n    Object.keys(this.attributes).forEach((key) => {\n      const value = this.attributes[key].value(this.domNode);\n      target.format(key, value);\n    });\n  }\n  move(target) {\n    this.copy(target), Object.keys(this.attributes).forEach((key) => {\n      this.attributes[key].remove(this.domNode);\n    }), this.attributes = {};\n  }\n  values() {\n    return Object.keys(this.attributes).reduce(\n      (attributes, name) => (attributes[name] = this.attributes[name].value(this.domNode), attributes),\n      {}\n    );\n  }\n}\nconst AttributorStore$1 = AttributorStore, _ShadowBlot = class _ShadowBlot2 {\n  constructor(scroll, domNode) {\n    this.scroll = scroll, this.domNode = domNode, Registry.blots.set(domNode, this), this.prev = null, this.next = null;\n  }\n  static create(rawValue) {\n    if (this.tagName == null)\n      throw new ParchmentError(\"Blot definition missing tagName\");\n    let node, value;\n    return Array.isArray(this.tagName) ? (typeof rawValue == \"string\" ? (value = rawValue.toUpperCase(), parseInt(value, 10).toString() === value && (value = parseInt(value, 10))) : typeof rawValue == \"number\" && (value = rawValue), typeof value == \"number\" ? node = document.createElement(this.tagName[value - 1]) : value && this.tagName.indexOf(value) > -1 ? node = document.createElement(value) : node = document.createElement(this.tagName[0])) : node = document.createElement(this.tagName), this.className && node.classList.add(this.className), node;\n  }\n  // Hack for accessing inherited static methods\n  get statics() {\n    return this.constructor;\n  }\n  attach() {\n  }\n  clone() {\n    const domNode = this.domNode.cloneNode(false);\n    return this.scroll.create(domNode);\n  }\n  detach() {\n    this.parent != null && this.parent.removeChild(this), Registry.blots.delete(this.domNode);\n  }\n  deleteAt(index2, length) {\n    this.isolate(index2, length).remove();\n  }\n  formatAt(index2, length, name, value) {\n    const blot = this.isolate(index2, length);\n    if (this.scroll.query(name, Scope.BLOT) != null && value)\n      blot.wrap(name, value);\n    else if (this.scroll.query(name, Scope.ATTRIBUTE) != null) {\n      const parent = this.scroll.create(this.statics.scope);\n      blot.wrap(parent), parent.format(name, value);\n    }\n  }\n  insertAt(index2, value, def) {\n    const blot = def == null ? this.scroll.create(\"text\", value) : this.scroll.create(value, def), ref = this.split(index2);\n    this.parent.insertBefore(blot, ref || void 0);\n  }\n  isolate(index2, length) {\n    const target = this.split(index2);\n    if (target == null)\n      throw new Error(\"Attempt to isolate at end\");\n    return target.split(length), target;\n  }\n  length() {\n    return 1;\n  }\n  offset(root2 = this.parent) {\n    return this.parent == null || this === root2 ? 0 : this.parent.children.offset(this) + this.parent.offset(root2);\n  }\n  optimize(_context) {\n    this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer) && this.wrap(this.statics.requiredContainer.blotName);\n  }\n  remove() {\n    this.domNode.parentNode != null && this.domNode.parentNode.removeChild(this.domNode), this.detach();\n  }\n  replaceWith(name, value) {\n    const replacement = typeof name == \"string\" ? this.scroll.create(name, value) : name;\n    return this.parent != null && (this.parent.insertBefore(replacement, this.next || void 0), this.remove()), replacement;\n  }\n  split(index2, _force) {\n    return index2 === 0 ? this : this.next;\n  }\n  update(_mutations, _context) {\n  }\n  wrap(name, value) {\n    const wrapper = typeof name == \"string\" ? this.scroll.create(name, value) : name;\n    if (this.parent != null && this.parent.insertBefore(wrapper, this.next || void 0), typeof wrapper.appendChild != \"function\")\n      throw new ParchmentError(`Cannot wrap ${name}`);\n    return wrapper.appendChild(this), wrapper;\n  }\n};\n_ShadowBlot.blotName = \"abstract\";\nlet ShadowBlot = _ShadowBlot;\nconst _LeafBlot = class _LeafBlot2 extends ShadowBlot {\n  /**\n   * Returns the value represented by domNode if it is this Blot's type\n   * No checking that domNode can represent this Blot type is required so\n   * applications needing it should check externally before calling.\n   */\n  static value(_domNode) {\n    return true;\n  }\n  /**\n   * Given location represented by node and offset from DOM Selection Range,\n   * return index to that location.\n   */\n  index(node, offset) {\n    return this.domNode === node || this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY ? Math.min(offset, 1) : -1;\n  }\n  /**\n   * Given index to location within blot, return node and offset representing\n   * that location, consumable by DOM Selection Range\n   */\n  position(index2, _inclusive) {\n    let offset = Array.from(this.parent.domNode.childNodes).indexOf(this.domNode);\n    return index2 > 0 && (offset += 1), [this.parent.domNode, offset];\n  }\n  /**\n   * Return value represented by this blot\n   * Should not change without interaction from API or\n   * user change detectable by update()\n   */\n  value() {\n    return {\n      [this.statics.blotName]: this.statics.value(this.domNode) || true\n    };\n  }\n};\n_LeafBlot.scope = Scope.INLINE_BLOT;\nlet LeafBlot = _LeafBlot;\nconst LeafBlot$1 = LeafBlot;\nclass LinkedList {\n  constructor() {\n    this.head = null, this.tail = null, this.length = 0;\n  }\n  append(...nodes) {\n    if (this.insertBefore(nodes[0], null), nodes.length > 1) {\n      const rest = nodes.slice(1);\n      this.append(...rest);\n    }\n  }\n  at(index2) {\n    const next = this.iterator();\n    let cur = next();\n    for (; cur && index2 > 0; )\n      index2 -= 1, cur = next();\n    return cur;\n  }\n  contains(node) {\n    const next = this.iterator();\n    let cur = next();\n    for (; cur; ) {\n      if (cur === node)\n        return true;\n      cur = next();\n    }\n    return false;\n  }\n  indexOf(node) {\n    const next = this.iterator();\n    let cur = next(), index2 = 0;\n    for (; cur; ) {\n      if (cur === node)\n        return index2;\n      index2 += 1, cur = next();\n    }\n    return -1;\n  }\n  insertBefore(node, refNode) {\n    node != null && (this.remove(node), node.next = refNode, refNode != null ? (node.prev = refNode.prev, refNode.prev != null && (refNode.prev.next = node), refNode.prev = node, refNode === this.head && (this.head = node)) : this.tail != null ? (this.tail.next = node, node.prev = this.tail, this.tail = node) : (node.prev = null, this.head = this.tail = node), this.length += 1);\n  }\n  offset(target) {\n    let index2 = 0, cur = this.head;\n    for (; cur != null; ) {\n      if (cur === target)\n        return index2;\n      index2 += cur.length(), cur = cur.next;\n    }\n    return -1;\n  }\n  remove(node) {\n    this.contains(node) && (node.prev != null && (node.prev.next = node.next), node.next != null && (node.next.prev = node.prev), node === this.head && (this.head = node.next), node === this.tail && (this.tail = node.prev), this.length -= 1);\n  }\n  iterator(curNode = this.head) {\n    return () => {\n      const ret = curNode;\n      return curNode != null && (curNode = curNode.next), ret;\n    };\n  }\n  find(index2, inclusive = false) {\n    const next = this.iterator();\n    let cur = next();\n    for (; cur; ) {\n      const length = cur.length();\n      if (index2 < length || inclusive && index2 === length && (cur.next == null || cur.next.length() !== 0))\n        return [cur, index2];\n      index2 -= length, cur = next();\n    }\n    return [null, 0];\n  }\n  forEach(callback) {\n    const next = this.iterator();\n    let cur = next();\n    for (; cur; )\n      callback(cur), cur = next();\n  }\n  forEachAt(index2, length, callback) {\n    if (length <= 0)\n      return;\n    const [startNode, offset] = this.find(index2);\n    let curIndex = index2 - offset;\n    const next = this.iterator(startNode);\n    let cur = next();\n    for (; cur && curIndex < index2 + length; ) {\n      const curLength = cur.length();\n      index2 > curIndex ? callback(\n        cur,\n        index2 - curIndex,\n        Math.min(length, curIndex + curLength - index2)\n      ) : callback(cur, 0, Math.min(curLength, index2 + length - curIndex)), curIndex += curLength, cur = next();\n    }\n  }\n  map(callback) {\n    return this.reduce((memo, cur) => (memo.push(callback(cur)), memo), []);\n  }\n  reduce(callback, memo) {\n    const next = this.iterator();\n    let cur = next();\n    for (; cur; )\n      memo = callback(memo, cur), cur = next();\n    return memo;\n  }\n}\nfunction makeAttachedBlot(node, scroll) {\n  const found = scroll.find(node);\n  if (found)\n    return found;\n  try {\n    return scroll.create(node);\n  } catch {\n    const blot = scroll.create(Scope.INLINE);\n    return Array.from(node.childNodes).forEach((child) => {\n      blot.domNode.appendChild(child);\n    }), node.parentNode && node.parentNode.replaceChild(blot.domNode, node), blot.attach(), blot;\n  }\n}\nconst _ParentBlot = class _ParentBlot2 extends ShadowBlot {\n  constructor(scroll, domNode) {\n    super(scroll, domNode), this.uiNode = null, this.build();\n  }\n  appendChild(other) {\n    this.insertBefore(other);\n  }\n  attach() {\n    super.attach(), this.children.forEach((child) => {\n      child.attach();\n    });\n  }\n  attachUI(node) {\n    this.uiNode != null && this.uiNode.remove(), this.uiNode = node, _ParentBlot2.uiClass && this.uiNode.classList.add(_ParentBlot2.uiClass), this.uiNode.setAttribute(\"contenteditable\", \"false\"), this.domNode.insertBefore(this.uiNode, this.domNode.firstChild);\n  }\n  /**\n   * Called during construction, should fill its own children LinkedList.\n   */\n  build() {\n    this.children = new LinkedList(), Array.from(this.domNode.childNodes).filter((node) => node !== this.uiNode).reverse().forEach((node) => {\n      try {\n        const child = makeAttachedBlot(node, this.scroll);\n        this.insertBefore(child, this.children.head || void 0);\n      } catch (err) {\n        if (err instanceof ParchmentError)\n          return;\n        throw err;\n      }\n    });\n  }\n  deleteAt(index2, length) {\n    if (index2 === 0 && length === this.length())\n      return this.remove();\n    this.children.forEachAt(index2, length, (child, offset, childLength) => {\n      child.deleteAt(offset, childLength);\n    });\n  }\n  descendant(criteria, index2 = 0) {\n    const [child, offset] = this.children.find(index2);\n    return criteria.blotName == null && criteria(child) || criteria.blotName != null && child instanceof criteria ? [child, offset] : child instanceof _ParentBlot2 ? child.descendant(criteria, offset) : [null, -1];\n  }\n  descendants(criteria, index2 = 0, length = Number.MAX_VALUE) {\n    let descendants = [], lengthLeft = length;\n    return this.children.forEachAt(\n      index2,\n      length,\n      (child, childIndex, childLength) => {\n        (criteria.blotName == null && criteria(child) || criteria.blotName != null && child instanceof criteria) && descendants.push(child), child instanceof _ParentBlot2 && (descendants = descendants.concat(\n          child.descendants(criteria, childIndex, lengthLeft)\n        )), lengthLeft -= childLength;\n      }\n    ), descendants;\n  }\n  detach() {\n    this.children.forEach((child) => {\n      child.detach();\n    }), super.detach();\n  }\n  enforceAllowedChildren() {\n    let done = false;\n    this.children.forEach((child) => {\n      done || this.statics.allowedChildren.some(\n        (def) => child instanceof def\n      ) || (child.statics.scope === Scope.BLOCK_BLOT ? (child.next != null && this.splitAfter(child), child.prev != null && this.splitAfter(child.prev), child.parent.unwrap(), done = true) : child instanceof _ParentBlot2 ? child.unwrap() : child.remove());\n    });\n  }\n  formatAt(index2, length, name, value) {\n    this.children.forEachAt(index2, length, (child, offset, childLength) => {\n      child.formatAt(offset, childLength, name, value);\n    });\n  }\n  insertAt(index2, value, def) {\n    const [child, offset] = this.children.find(index2);\n    if (child)\n      child.insertAt(offset, value, def);\n    else {\n      const blot = def == null ? this.scroll.create(\"text\", value) : this.scroll.create(value, def);\n      this.appendChild(blot);\n    }\n  }\n  insertBefore(childBlot, refBlot) {\n    childBlot.parent != null && childBlot.parent.children.remove(childBlot);\n    let refDomNode = null;\n    this.children.insertBefore(childBlot, refBlot || null), childBlot.parent = this, refBlot != null && (refDomNode = refBlot.domNode), (this.domNode.parentNode !== childBlot.domNode || this.domNode.nextSibling !== refDomNode) && this.domNode.insertBefore(childBlot.domNode, refDomNode), childBlot.attach();\n  }\n  length() {\n    return this.children.reduce((memo, child) => memo + child.length(), 0);\n  }\n  moveChildren(targetParent, refNode) {\n    this.children.forEach((child) => {\n      targetParent.insertBefore(child, refNode);\n    });\n  }\n  optimize(context) {\n    if (super.optimize(context), this.enforceAllowedChildren(), this.uiNode != null && this.uiNode !== this.domNode.firstChild && this.domNode.insertBefore(this.uiNode, this.domNode.firstChild), this.children.length === 0)\n      if (this.statics.defaultChild != null) {\n        const child = this.scroll.create(this.statics.defaultChild.blotName);\n        this.appendChild(child);\n      } else\n        this.remove();\n  }\n  path(index2, inclusive = false) {\n    const [child, offset] = this.children.find(index2, inclusive), position = [[this, index2]];\n    return child instanceof _ParentBlot2 ? position.concat(child.path(offset, inclusive)) : (child != null && position.push([child, offset]), position);\n  }\n  removeChild(child) {\n    this.children.remove(child);\n  }\n  replaceWith(name, value) {\n    const replacement = typeof name == \"string\" ? this.scroll.create(name, value) : name;\n    return replacement instanceof _ParentBlot2 && this.moveChildren(replacement), super.replaceWith(replacement);\n  }\n  split(index2, force = false) {\n    if (!force) {\n      if (index2 === 0)\n        return this;\n      if (index2 === this.length())\n        return this.next;\n    }\n    const after = this.clone();\n    return this.parent && this.parent.insertBefore(after, this.next || void 0), this.children.forEachAt(index2, this.length(), (child, offset, _length) => {\n      const split = child.split(offset, force);\n      split != null && after.appendChild(split);\n    }), after;\n  }\n  splitAfter(child) {\n    const after = this.clone();\n    for (; child.next != null; )\n      after.appendChild(child.next);\n    return this.parent && this.parent.insertBefore(after, this.next || void 0), after;\n  }\n  unwrap() {\n    this.parent && this.moveChildren(this.parent, this.next || void 0), this.remove();\n  }\n  update(mutations, _context) {\n    const addedNodes = [], removedNodes = [];\n    mutations.forEach((mutation) => {\n      mutation.target === this.domNode && mutation.type === \"childList\" && (addedNodes.push(...mutation.addedNodes), removedNodes.push(...mutation.removedNodes));\n    }), removedNodes.forEach((node) => {\n      if (node.parentNode != null && // @ts-expect-error Fix me later\n      node.tagName !== \"IFRAME\" && document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY)\n        return;\n      const blot = this.scroll.find(node);\n      blot != null && (blot.domNode.parentNode == null || blot.domNode.parentNode === this.domNode) && blot.detach();\n    }), addedNodes.filter((node) => node.parentNode === this.domNode && node !== this.uiNode).sort((a2, b2) => a2 === b2 ? 0 : a2.compareDocumentPosition(b2) & Node.DOCUMENT_POSITION_FOLLOWING ? 1 : -1).forEach((node) => {\n      let refBlot = null;\n      node.nextSibling != null && (refBlot = this.scroll.find(node.nextSibling));\n      const blot = makeAttachedBlot(node, this.scroll);\n      (blot.next !== refBlot || blot.next == null) && (blot.parent != null && blot.parent.removeChild(this), this.insertBefore(blot, refBlot || void 0));\n    }), this.enforceAllowedChildren();\n  }\n};\n_ParentBlot.uiClass = \"\";\nlet ParentBlot = _ParentBlot;\nconst ParentBlot$1 = ParentBlot;\nfunction isEqual(obj1, obj2) {\n  if (Object.keys(obj1).length !== Object.keys(obj2).length)\n    return false;\n  for (const prop in obj1)\n    if (obj1[prop] !== obj2[prop])\n      return false;\n  return true;\n}\nconst _InlineBlot = class _InlineBlot2 extends ParentBlot$1 {\n  static create(value) {\n    return super.create(value);\n  }\n  static formats(domNode, scroll) {\n    const match22 = scroll.query(_InlineBlot2.blotName);\n    if (!(match22 != null && domNode.tagName === match22.tagName)) {\n      if (typeof this.tagName == \"string\")\n        return true;\n      if (Array.isArray(this.tagName))\n        return domNode.tagName.toLowerCase();\n    }\n  }\n  constructor(scroll, domNode) {\n    super(scroll, domNode), this.attributes = new AttributorStore$1(this.domNode);\n  }\n  format(name, value) {\n    if (name === this.statics.blotName && !value)\n      this.children.forEach((child) => {\n        child instanceof _InlineBlot2 || (child = child.wrap(_InlineBlot2.blotName, true)), this.attributes.copy(child);\n      }), this.unwrap();\n    else {\n      const format2 = this.scroll.query(name, Scope.INLINE);\n      if (format2 == null)\n        return;\n      format2 instanceof Attributor ? this.attributes.attribute(format2, value) : value && (name !== this.statics.blotName || this.formats()[name] !== value) && this.replaceWith(name, value);\n    }\n  }\n  formats() {\n    const formats = this.attributes.values(), format2 = this.statics.formats(this.domNode, this.scroll);\n    return format2 != null && (formats[this.statics.blotName] = format2), formats;\n  }\n  formatAt(index2, length, name, value) {\n    this.formats()[name] != null || this.scroll.query(name, Scope.ATTRIBUTE) ? this.isolate(index2, length).format(name, value) : super.formatAt(index2, length, name, value);\n  }\n  optimize(context) {\n    super.optimize(context);\n    const formats = this.formats();\n    if (Object.keys(formats).length === 0)\n      return this.unwrap();\n    const next = this.next;\n    next instanceof _InlineBlot2 && next.prev === this && isEqual(formats, next.formats()) && (next.moveChildren(this), next.remove());\n  }\n  replaceWith(name, value) {\n    const replacement = super.replaceWith(name, value);\n    return this.attributes.copy(replacement), replacement;\n  }\n  update(mutations, context) {\n    super.update(mutations, context), mutations.some(\n      (mutation) => mutation.target === this.domNode && mutation.type === \"attributes\"\n    ) && this.attributes.build();\n  }\n  wrap(name, value) {\n    const wrapper = super.wrap(name, value);\n    return wrapper instanceof _InlineBlot2 && this.attributes.move(wrapper), wrapper;\n  }\n};\n_InlineBlot.allowedChildren = [_InlineBlot, LeafBlot$1], _InlineBlot.blotName = \"inline\", _InlineBlot.scope = Scope.INLINE_BLOT, _InlineBlot.tagName = \"SPAN\";\nlet InlineBlot = _InlineBlot;\nconst InlineBlot$1 = InlineBlot, _BlockBlot = class _BlockBlot2 extends ParentBlot$1 {\n  static create(value) {\n    return super.create(value);\n  }\n  static formats(domNode, scroll) {\n    const match22 = scroll.query(_BlockBlot2.blotName);\n    if (!(match22 != null && domNode.tagName === match22.tagName)) {\n      if (typeof this.tagName == \"string\")\n        return true;\n      if (Array.isArray(this.tagName))\n        return domNode.tagName.toLowerCase();\n    }\n  }\n  constructor(scroll, domNode) {\n    super(scroll, domNode), this.attributes = new AttributorStore$1(this.domNode);\n  }\n  format(name, value) {\n    const format2 = this.scroll.query(name, Scope.BLOCK);\n    format2 != null && (format2 instanceof Attributor ? this.attributes.attribute(format2, value) : name === this.statics.blotName && !value ? this.replaceWith(_BlockBlot2.blotName) : value && (name !== this.statics.blotName || this.formats()[name] !== value) && this.replaceWith(name, value));\n  }\n  formats() {\n    const formats = this.attributes.values(), format2 = this.statics.formats(this.domNode, this.scroll);\n    return format2 != null && (formats[this.statics.blotName] = format2), formats;\n  }\n  formatAt(index2, length, name, value) {\n    this.scroll.query(name, Scope.BLOCK) != null ? this.format(name, value) : super.formatAt(index2, length, name, value);\n  }\n  insertAt(index2, value, def) {\n    if (def == null || this.scroll.query(value, Scope.INLINE) != null)\n      super.insertAt(index2, value, def);\n    else {\n      const after = this.split(index2);\n      if (after != null) {\n        const blot = this.scroll.create(value, def);\n        after.parent.insertBefore(blot, after);\n      } else\n        throw new Error(\"Attempt to insertAt after block boundaries\");\n    }\n  }\n  replaceWith(name, value) {\n    const replacement = super.replaceWith(name, value);\n    return this.attributes.copy(replacement), replacement;\n  }\n  update(mutations, context) {\n    super.update(mutations, context), mutations.some(\n      (mutation) => mutation.target === this.domNode && mutation.type === \"attributes\"\n    ) && this.attributes.build();\n  }\n};\n_BlockBlot.blotName = \"block\", _BlockBlot.scope = Scope.BLOCK_BLOT, _BlockBlot.tagName = \"P\", _BlockBlot.allowedChildren = [\n  InlineBlot$1,\n  _BlockBlot,\n  LeafBlot$1\n];\nlet BlockBlot = _BlockBlot;\nconst BlockBlot$1 = BlockBlot, _ContainerBlot = class _ContainerBlot2 extends ParentBlot$1 {\n  checkMerge() {\n    return this.next !== null && this.next.statics.blotName === this.statics.blotName;\n  }\n  deleteAt(index2, length) {\n    super.deleteAt(index2, length), this.enforceAllowedChildren();\n  }\n  formatAt(index2, length, name, value) {\n    super.formatAt(index2, length, name, value), this.enforceAllowedChildren();\n  }\n  insertAt(index2, value, def) {\n    super.insertAt(index2, value, def), this.enforceAllowedChildren();\n  }\n  optimize(context) {\n    super.optimize(context), this.children.length > 0 && this.next != null && this.checkMerge() && (this.next.moveChildren(this), this.next.remove());\n  }\n};\n_ContainerBlot.blotName = \"container\", _ContainerBlot.scope = Scope.BLOCK_BLOT;\nlet ContainerBlot = _ContainerBlot;\nconst ContainerBlot$1 = ContainerBlot;\nclass EmbedBlot extends LeafBlot$1 {\n  static formats(_domNode, _scroll) {\n  }\n  format(name, value) {\n    super.formatAt(0, this.length(), name, value);\n  }\n  formatAt(index2, length, name, value) {\n    index2 === 0 && length === this.length() ? this.format(name, value) : super.formatAt(index2, length, name, value);\n  }\n  formats() {\n    return this.statics.formats(this.domNode, this.scroll);\n  }\n}\nconst EmbedBlot$1 = EmbedBlot, OBSERVER_CONFIG = {\n  attributes: true,\n  characterData: true,\n  characterDataOldValue: true,\n  childList: true,\n  subtree: true\n}, MAX_OPTIMIZE_ITERATIONS = 100, _ScrollBlot = class _ScrollBlot2 extends ParentBlot$1 {\n  constructor(registry, node) {\n    super(null, node), this.registry = registry, this.scroll = this, this.build(), this.observer = new MutationObserver((mutations) => {\n      this.update(mutations);\n    }), this.observer.observe(this.domNode, OBSERVER_CONFIG), this.attach();\n  }\n  create(input, value) {\n    return this.registry.create(this, input, value);\n  }\n  find(node, bubble = false) {\n    const blot = this.registry.find(node, bubble);\n    return blot ? blot.scroll === this ? blot : bubble ? this.find(blot.scroll.domNode.parentNode, true) : null : null;\n  }\n  query(query, scope = Scope.ANY) {\n    return this.registry.query(query, scope);\n  }\n  register(...definitions) {\n    return this.registry.register(...definitions);\n  }\n  build() {\n    this.scroll != null && super.build();\n  }\n  detach() {\n    super.detach(), this.observer.disconnect();\n  }\n  deleteAt(index2, length) {\n    this.update(), index2 === 0 && length === this.length() ? this.children.forEach((child) => {\n      child.remove();\n    }) : super.deleteAt(index2, length);\n  }\n  formatAt(index2, length, name, value) {\n    this.update(), super.formatAt(index2, length, name, value);\n  }\n  insertAt(index2, value, def) {\n    this.update(), super.insertAt(index2, value, def);\n  }\n  optimize(mutations = [], context = {}) {\n    super.optimize(context);\n    const mutationsMap = context.mutationsMap || /* @__PURE__ */ new WeakMap();\n    let records = Array.from(this.observer.takeRecords());\n    for (; records.length > 0; )\n      mutations.push(records.pop());\n    const mark = (blot, markParent = true) => {\n      blot == null || blot === this || blot.domNode.parentNode != null && (mutationsMap.has(blot.domNode) || mutationsMap.set(blot.domNode, []), markParent && mark(blot.parent));\n    }, optimize = (blot) => {\n      mutationsMap.has(blot.domNode) && (blot instanceof ParentBlot$1 && blot.children.forEach(optimize), mutationsMap.delete(blot.domNode), blot.optimize(context));\n    };\n    let remaining = mutations;\n    for (let i3 = 0; remaining.length > 0; i3 += 1) {\n      if (i3 >= MAX_OPTIMIZE_ITERATIONS)\n        throw new Error(\"[Parchment] Maximum optimize iterations reached\");\n      for (remaining.forEach((mutation) => {\n        const blot = this.find(mutation.target, true);\n        blot != null && (blot.domNode === mutation.target && (mutation.type === \"childList\" ? (mark(this.find(mutation.previousSibling, false)), Array.from(mutation.addedNodes).forEach((node) => {\n          const child = this.find(node, false);\n          mark(child, false), child instanceof ParentBlot$1 && child.children.forEach((grandChild) => {\n            mark(grandChild, false);\n          });\n        })) : mutation.type === \"attributes\" && mark(blot.prev)), mark(blot));\n      }), this.children.forEach(optimize), remaining = Array.from(this.observer.takeRecords()), records = remaining.slice(); records.length > 0; )\n        mutations.push(records.pop());\n    }\n  }\n  update(mutations, context = {}) {\n    mutations = mutations || this.observer.takeRecords();\n    const mutationsMap = /* @__PURE__ */ new WeakMap();\n    mutations.map((mutation) => {\n      const blot = this.find(mutation.target, true);\n      return blot == null ? null : mutationsMap.has(blot.domNode) ? (mutationsMap.get(blot.domNode).push(mutation), null) : (mutationsMap.set(blot.domNode, [mutation]), blot);\n    }).forEach((blot) => {\n      blot != null && blot !== this && mutationsMap.has(blot.domNode) && blot.update(mutationsMap.get(blot.domNode) || [], context);\n    }), context.mutationsMap = mutationsMap, mutationsMap.has(this.domNode) && super.update(mutationsMap.get(this.domNode), context), this.optimize(mutations, context);\n  }\n};\n_ScrollBlot.blotName = \"scroll\", _ScrollBlot.defaultChild = BlockBlot$1, _ScrollBlot.allowedChildren = [BlockBlot$1, ContainerBlot$1], _ScrollBlot.scope = Scope.BLOCK_BLOT, _ScrollBlot.tagName = \"DIV\";\nlet ScrollBlot = _ScrollBlot;\nconst ScrollBlot$1 = ScrollBlot, _TextBlot = class _TextBlot2 extends LeafBlot$1 {\n  static create(value) {\n    return document.createTextNode(value);\n  }\n  static value(domNode) {\n    return domNode.data;\n  }\n  constructor(scroll, node) {\n    super(scroll, node), this.text = this.statics.value(this.domNode);\n  }\n  deleteAt(index2, length) {\n    this.domNode.data = this.text = this.text.slice(0, index2) + this.text.slice(index2 + length);\n  }\n  index(node, offset) {\n    return this.domNode === node ? offset : -1;\n  }\n  insertAt(index2, value, def) {\n    def == null ? (this.text = this.text.slice(0, index2) + value + this.text.slice(index2), this.domNode.data = this.text) : super.insertAt(index2, value, def);\n  }\n  length() {\n    return this.text.length;\n  }\n  optimize(context) {\n    super.optimize(context), this.text = this.statics.value(this.domNode), this.text.length === 0 ? this.remove() : this.next instanceof _TextBlot2 && this.next.prev === this && (this.insertAt(this.length(), this.next.value()), this.next.remove());\n  }\n  position(index2, _inclusive = false) {\n    return [this.domNode, index2];\n  }\n  split(index2, force = false) {\n    if (!force) {\n      if (index2 === 0)\n        return this;\n      if (index2 === this.length())\n        return this.next;\n    }\n    const after = this.scroll.create(this.domNode.splitText(index2));\n    return this.parent.insertBefore(after, this.next || void 0), this.text = this.statics.value(this.domNode), after;\n  }\n  update(mutations, _context) {\n    mutations.some((mutation) => mutation.type === \"characterData\" && mutation.target === this.domNode) && (this.text = this.statics.value(this.domNode));\n  }\n  value() {\n    return this.text;\n  }\n};\n_TextBlot.blotName = \"text\", _TextBlot.scope = Scope.INLINE_BLOT;\nlet TextBlot = _TextBlot;\nconst TextBlot$1 = TextBlot;\nconst Parchment = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  Attributor,\n  AttributorStore: AttributorStore$1,\n  BlockBlot: BlockBlot$1,\n  ClassAttributor: ClassAttributor$1,\n  ContainerBlot: ContainerBlot$1,\n  EmbedBlot: EmbedBlot$1,\n  InlineBlot: InlineBlot$1,\n  LeafBlot: LeafBlot$1,\n  ParentBlot: ParentBlot$1,\n  Registry,\n  Scope,\n  ScrollBlot: ScrollBlot$1,\n  StyleAttributor: StyleAttributor$1,\n  TextBlot: TextBlot$1\n}, Symbol.toStringTag, { value: \"Module\" }));\nvar Delta$1 = { exports: {} };\nvar diff_1;\nvar hasRequiredDiff;\nfunction requireDiff() {\n  if (hasRequiredDiff) return diff_1;\n  hasRequiredDiff = 1;\n  var DIFF_DELETE = -1;\n  var DIFF_INSERT = 1;\n  var DIFF_EQUAL = 0;\n  function diff_main(text1, text2, cursor_pos, cleanup, _fix_unicode) {\n    if (text1 === text2) {\n      if (text1) {\n        return [[DIFF_EQUAL, text1]];\n      }\n      return [];\n    }\n    if (cursor_pos != null) {\n      var editdiff = find_cursor_edit_diff(text1, text2, cursor_pos);\n      if (editdiff) {\n        return editdiff;\n      }\n    }\n    var commonlength = diff_commonPrefix(text1, text2);\n    var commonprefix = text1.substring(0, commonlength);\n    text1 = text1.substring(commonlength);\n    text2 = text2.substring(commonlength);\n    commonlength = diff_commonSuffix(text1, text2);\n    var commonsuffix = text1.substring(text1.length - commonlength);\n    text1 = text1.substring(0, text1.length - commonlength);\n    text2 = text2.substring(0, text2.length - commonlength);\n    var diffs = diff_compute_(text1, text2);\n    if (commonprefix) {\n      diffs.unshift([DIFF_EQUAL, commonprefix]);\n    }\n    if (commonsuffix) {\n      diffs.push([DIFF_EQUAL, commonsuffix]);\n    }\n    diff_cleanupMerge(diffs, _fix_unicode);\n    if (cleanup) {\n      diff_cleanupSemantic(diffs);\n    }\n    return diffs;\n  }\n  function diff_compute_(text1, text2) {\n    var diffs;\n    if (!text1) {\n      return [[DIFF_INSERT, text2]];\n    }\n    if (!text2) {\n      return [[DIFF_DELETE, text1]];\n    }\n    var longtext = text1.length > text2.length ? text1 : text2;\n    var shorttext = text1.length > text2.length ? text2 : text1;\n    var i3 = longtext.indexOf(shorttext);\n    if (i3 !== -1) {\n      diffs = [\n        [DIFF_INSERT, longtext.substring(0, i3)],\n        [DIFF_EQUAL, shorttext],\n        [DIFF_INSERT, longtext.substring(i3 + shorttext.length)]\n      ];\n      if (text1.length > text2.length) {\n        diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n      }\n      return diffs;\n    }\n    if (shorttext.length === 1) {\n      return [\n        [DIFF_DELETE, text1],\n        [DIFF_INSERT, text2]\n      ];\n    }\n    var hm = diff_halfMatch_(text1, text2);\n    if (hm) {\n      var text1_a = hm[0];\n      var text1_b = hm[1];\n      var text2_a = hm[2];\n      var text2_b = hm[3];\n      var mid_common = hm[4];\n      var diffs_a = diff_main(text1_a, text2_a);\n      var diffs_b = diff_main(text1_b, text2_b);\n      return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n    }\n    return diff_bisect_(text1, text2);\n  }\n  function diff_bisect_(text1, text2) {\n    var text1_length = text1.length;\n    var text2_length = text2.length;\n    var max_d = Math.ceil((text1_length + text2_length) / 2);\n    var v_offset = max_d;\n    var v_length = 2 * max_d;\n    var v1 = new Array(v_length);\n    var v2 = new Array(v_length);\n    for (var x2 = 0; x2 < v_length; x2++) {\n      v1[x2] = -1;\n      v2[x2] = -1;\n    }\n    v1[v_offset + 1] = 0;\n    v2[v_offset + 1] = 0;\n    var delta = text1_length - text2_length;\n    var front = delta % 2 !== 0;\n    var k1start = 0;\n    var k1end = 0;\n    var k2start = 0;\n    var k2end = 0;\n    for (var d2 = 0; d2 < max_d; d2++) {\n      for (var k1 = -d2 + k1start; k1 <= d2 - k1end; k1 += 2) {\n        var k1_offset = v_offset + k1;\n        var x1;\n        if (k1 === -d2 || k1 !== d2 && v1[k1_offset - 1] < v1[k1_offset + 1]) {\n          x1 = v1[k1_offset + 1];\n        } else {\n          x1 = v1[k1_offset - 1] + 1;\n        }\n        var y1 = x1 - k1;\n        while (x1 < text1_length && y1 < text2_length && text1.charAt(x1) === text2.charAt(y1)) {\n          x1++;\n          y1++;\n        }\n        v1[k1_offset] = x1;\n        if (x1 > text1_length) {\n          k1end += 2;\n        } else if (y1 > text2_length) {\n          k1start += 2;\n        } else if (front) {\n          var k2_offset = v_offset + delta - k1;\n          if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) {\n            var x22 = text1_length - v2[k2_offset];\n            if (x1 >= x22) {\n              return diff_bisectSplit_(text1, text2, x1, y1);\n            }\n          }\n        }\n      }\n      for (var k22 = -d2 + k2start; k22 <= d2 - k2end; k22 += 2) {\n        var k2_offset = v_offset + k22;\n        var x22;\n        if (k22 === -d2 || k22 !== d2 && v2[k2_offset - 1] < v2[k2_offset + 1]) {\n          x22 = v2[k2_offset + 1];\n        } else {\n          x22 = v2[k2_offset - 1] + 1;\n        }\n        var y2 = x22 - k22;\n        while (x22 < text1_length && y2 < text2_length && text1.charAt(text1_length - x22 - 1) === text2.charAt(text2_length - y2 - 1)) {\n          x22++;\n          y2++;\n        }\n        v2[k2_offset] = x22;\n        if (x22 > text1_length) {\n          k2end += 2;\n        } else if (y2 > text2_length) {\n          k2start += 2;\n        } else if (!front) {\n          var k1_offset = v_offset + delta - k22;\n          if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) {\n            var x1 = v1[k1_offset];\n            var y1 = v_offset + x1 - k1_offset;\n            x22 = text1_length - x22;\n            if (x1 >= x22) {\n              return diff_bisectSplit_(text1, text2, x1, y1);\n            }\n          }\n        }\n      }\n    }\n    return [\n      [DIFF_DELETE, text1],\n      [DIFF_INSERT, text2]\n    ];\n  }\n  function diff_bisectSplit_(text1, text2, x2, y2) {\n    var text1a = text1.substring(0, x2);\n    var text2a = text2.substring(0, y2);\n    var text1b = text1.substring(x2);\n    var text2b = text2.substring(y2);\n    var diffs = diff_main(text1a, text2a);\n    var diffsb = diff_main(text1b, text2b);\n    return diffs.concat(diffsb);\n  }\n  function diff_commonPrefix(text1, text2) {\n    if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {\n      return 0;\n    }\n    var pointermin = 0;\n    var pointermax = Math.min(text1.length, text2.length);\n    var pointermid = pointermax;\n    var pointerstart = 0;\n    while (pointermin < pointermid) {\n      if (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) {\n        pointermin = pointermid;\n        pointerstart = pointermin;\n      } else {\n        pointermax = pointermid;\n      }\n      pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n    }\n    if (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) {\n      pointermid--;\n    }\n    return pointermid;\n  }\n  function diff_commonOverlap_(text1, text2) {\n    var text1_length = text1.length;\n    var text2_length = text2.length;\n    if (text1_length == 0 || text2_length == 0) {\n      return 0;\n    }\n    if (text1_length > text2_length) {\n      text1 = text1.substring(text1_length - text2_length);\n    } else if (text1_length < text2_length) {\n      text2 = text2.substring(0, text1_length);\n    }\n    var text_length = Math.min(text1_length, text2_length);\n    if (text1 == text2) {\n      return text_length;\n    }\n    var best = 0;\n    var length = 1;\n    while (true) {\n      var pattern = text1.substring(text_length - length);\n      var found = text2.indexOf(pattern);\n      if (found == -1) {\n        return best;\n      }\n      length += found;\n      if (found == 0 || text1.substring(text_length - length) == text2.substring(0, length)) {\n        best = length;\n        length++;\n      }\n    }\n  }\n  function diff_commonSuffix(text1, text2) {\n    if (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) {\n      return 0;\n    }\n    var pointermin = 0;\n    var pointermax = Math.min(text1.length, text2.length);\n    var pointermid = pointermax;\n    var pointerend = 0;\n    while (pointermin < pointermid) {\n      if (text1.substring(text1.length - pointermid, text1.length - pointerend) == text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n        pointermin = pointermid;\n        pointerend = pointermin;\n      } else {\n        pointermax = pointermid;\n      }\n      pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n    }\n    if (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) {\n      pointermid--;\n    }\n    return pointermid;\n  }\n  function diff_halfMatch_(text1, text2) {\n    var longtext = text1.length > text2.length ? text1 : text2;\n    var shorttext = text1.length > text2.length ? text2 : text1;\n    if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n      return null;\n    }\n    function diff_halfMatchI_(longtext2, shorttext2, i3) {\n      var seed = longtext2.substring(i3, i3 + Math.floor(longtext2.length / 4));\n      var j2 = -1;\n      var best_common = \"\";\n      var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n      while ((j2 = shorttext2.indexOf(seed, j2 + 1)) !== -1) {\n        var prefixLength = diff_commonPrefix(\n          longtext2.substring(i3),\n          shorttext2.substring(j2)\n        );\n        var suffixLength = diff_commonSuffix(\n          longtext2.substring(0, i3),\n          shorttext2.substring(0, j2)\n        );\n        if (best_common.length < suffixLength + prefixLength) {\n          best_common = shorttext2.substring(j2 - suffixLength, j2) + shorttext2.substring(j2, j2 + prefixLength);\n          best_longtext_a = longtext2.substring(0, i3 - suffixLength);\n          best_longtext_b = longtext2.substring(i3 + prefixLength);\n          best_shorttext_a = shorttext2.substring(0, j2 - suffixLength);\n          best_shorttext_b = shorttext2.substring(j2 + prefixLength);\n        }\n      }\n      if (best_common.length * 2 >= longtext2.length) {\n        return [\n          best_longtext_a,\n          best_longtext_b,\n          best_shorttext_a,\n          best_shorttext_b,\n          best_common\n        ];\n      } else {\n        return null;\n      }\n    }\n    var hm1 = diff_halfMatchI_(\n      longtext,\n      shorttext,\n      Math.ceil(longtext.length / 4)\n    );\n    var hm2 = diff_halfMatchI_(\n      longtext,\n      shorttext,\n      Math.ceil(longtext.length / 2)\n    );\n    var hm;\n    if (!hm1 && !hm2) {\n      return null;\n    } else if (!hm2) {\n      hm = hm1;\n    } else if (!hm1) {\n      hm = hm2;\n    } else {\n      hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n    }\n    var text1_a, text1_b, text2_a, text2_b;\n    if (text1.length > text2.length) {\n      text1_a = hm[0];\n      text1_b = hm[1];\n      text2_a = hm[2];\n      text2_b = hm[3];\n    } else {\n      text2_a = hm[0];\n      text2_b = hm[1];\n      text1_a = hm[2];\n      text1_b = hm[3];\n    }\n    var mid_common = hm[4];\n    return [text1_a, text1_b, text2_a, text2_b, mid_common];\n  }\n  function diff_cleanupSemantic(diffs) {\n    var changes = false;\n    var equalities = [];\n    var equalitiesLength = 0;\n    var lastequality = null;\n    var pointer = 0;\n    var length_insertions1 = 0;\n    var length_deletions1 = 0;\n    var length_insertions2 = 0;\n    var length_deletions2 = 0;\n    while (pointer < diffs.length) {\n      if (diffs[pointer][0] == DIFF_EQUAL) {\n        equalities[equalitiesLength++] = pointer;\n        length_insertions1 = length_insertions2;\n        length_deletions1 = length_deletions2;\n        length_insertions2 = 0;\n        length_deletions2 = 0;\n        lastequality = diffs[pointer][1];\n      } else {\n        if (diffs[pointer][0] == DIFF_INSERT) {\n          length_insertions2 += diffs[pointer][1].length;\n        } else {\n          length_deletions2 += diffs[pointer][1].length;\n        }\n        if (lastequality && lastequality.length <= Math.max(length_insertions1, length_deletions1) && lastequality.length <= Math.max(length_insertions2, length_deletions2)) {\n          diffs.splice(equalities[equalitiesLength - 1], 0, [\n            DIFF_DELETE,\n            lastequality\n          ]);\n          diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n          equalitiesLength--;\n          equalitiesLength--;\n          pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n          length_insertions1 = 0;\n          length_deletions1 = 0;\n          length_insertions2 = 0;\n          length_deletions2 = 0;\n          lastequality = null;\n          changes = true;\n        }\n      }\n      pointer++;\n    }\n    if (changes) {\n      diff_cleanupMerge(diffs);\n    }\n    diff_cleanupSemanticLossless(diffs);\n    pointer = 1;\n    while (pointer < diffs.length) {\n      if (diffs[pointer - 1][0] == DIFF_DELETE && diffs[pointer][0] == DIFF_INSERT) {\n        var deletion = diffs[pointer - 1][1];\n        var insertion = diffs[pointer][1];\n        var overlap_length1 = diff_commonOverlap_(deletion, insertion);\n        var overlap_length2 = diff_commonOverlap_(insertion, deletion);\n        if (overlap_length1 >= overlap_length2) {\n          if (overlap_length1 >= deletion.length / 2 || overlap_length1 >= insertion.length / 2) {\n            diffs.splice(pointer, 0, [\n              DIFF_EQUAL,\n              insertion.substring(0, overlap_length1)\n            ]);\n            diffs[pointer - 1][1] = deletion.substring(\n              0,\n              deletion.length - overlap_length1\n            );\n            diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n            pointer++;\n          }\n        } else {\n          if (overlap_length2 >= deletion.length / 2 || overlap_length2 >= insertion.length / 2) {\n            diffs.splice(pointer, 0, [\n              DIFF_EQUAL,\n              deletion.substring(0, overlap_length2)\n            ]);\n            diffs[pointer - 1][0] = DIFF_INSERT;\n            diffs[pointer - 1][1] = insertion.substring(\n              0,\n              insertion.length - overlap_length2\n            );\n            diffs[pointer + 1][0] = DIFF_DELETE;\n            diffs[pointer + 1][1] = deletion.substring(overlap_length2);\n            pointer++;\n          }\n        }\n        pointer++;\n      }\n      pointer++;\n    }\n  }\n  var nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\n  var whitespaceRegex_ = /\\s/;\n  var linebreakRegex_ = /[\\r\\n]/;\n  var blanklineEndRegex_ = /\\n\\r?\\n$/;\n  var blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n  function diff_cleanupSemanticLossless(diffs) {\n    function diff_cleanupSemanticScore_(one, two) {\n      if (!one || !two) {\n        return 6;\n      }\n      var char1 = one.charAt(one.length - 1);\n      var char2 = two.charAt(0);\n      var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_);\n      var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_);\n      var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_);\n      var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_);\n      var lineBreak1 = whitespace1 && char1.match(linebreakRegex_);\n      var lineBreak2 = whitespace2 && char2.match(linebreakRegex_);\n      var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_);\n      var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_);\n      if (blankLine1 || blankLine2) {\n        return 5;\n      } else if (lineBreak1 || lineBreak2) {\n        return 4;\n      } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n        return 3;\n      } else if (whitespace1 || whitespace2) {\n        return 2;\n      } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n        return 1;\n      }\n      return 0;\n    }\n    var pointer = 1;\n    while (pointer < diffs.length - 1) {\n      if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) {\n        var equality1 = diffs[pointer - 1][1];\n        var edit = diffs[pointer][1];\n        var equality2 = diffs[pointer + 1][1];\n        var commonOffset = diff_commonSuffix(equality1, edit);\n        if (commonOffset) {\n          var commonString = edit.substring(edit.length - commonOffset);\n          equality1 = equality1.substring(0, equality1.length - commonOffset);\n          edit = commonString + edit.substring(0, edit.length - commonOffset);\n          equality2 = commonString + equality2;\n        }\n        var bestEquality1 = equality1;\n        var bestEdit = edit;\n        var bestEquality2 = equality2;\n        var bestScore = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2);\n        while (edit.charAt(0) === equality2.charAt(0)) {\n          equality1 += edit.charAt(0);\n          edit = edit.substring(1) + equality2.charAt(0);\n          equality2 = equality2.substring(1);\n          var score = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2);\n          if (score >= bestScore) {\n            bestScore = score;\n            bestEquality1 = equality1;\n            bestEdit = edit;\n            bestEquality2 = equality2;\n          }\n        }\n        if (diffs[pointer - 1][1] != bestEquality1) {\n          if (bestEquality1) {\n            diffs[pointer - 1][1] = bestEquality1;\n          } else {\n            diffs.splice(pointer - 1, 1);\n            pointer--;\n          }\n          diffs[pointer][1] = bestEdit;\n          if (bestEquality2) {\n            diffs[pointer + 1][1] = bestEquality2;\n          } else {\n            diffs.splice(pointer + 1, 1);\n            pointer--;\n          }\n        }\n      }\n      pointer++;\n    }\n  }\n  function diff_cleanupMerge(diffs, fix_unicode) {\n    diffs.push([DIFF_EQUAL, \"\"]);\n    var pointer = 0;\n    var count_delete = 0;\n    var count_insert = 0;\n    var text_delete = \"\";\n    var text_insert = \"\";\n    var commonlength;\n    while (pointer < diffs.length) {\n      if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n        diffs.splice(pointer, 1);\n        continue;\n      }\n      switch (diffs[pointer][0]) {\n        case DIFF_INSERT:\n          count_insert++;\n          text_insert += diffs[pointer][1];\n          pointer++;\n          break;\n        case DIFF_DELETE:\n          count_delete++;\n          text_delete += diffs[pointer][1];\n          pointer++;\n          break;\n        case DIFF_EQUAL:\n          var previous_equality = pointer - count_insert - count_delete - 1;\n          if (fix_unicode) {\n            if (previous_equality >= 0 && ends_with_pair_start(diffs[previous_equality][1])) {\n              var stray = diffs[previous_equality][1].slice(-1);\n              diffs[previous_equality][1] = diffs[previous_equality][1].slice(\n                0,\n                -1\n              );\n              text_delete = stray + text_delete;\n              text_insert = stray + text_insert;\n              if (!diffs[previous_equality][1]) {\n                diffs.splice(previous_equality, 1);\n                pointer--;\n                var k3 = previous_equality - 1;\n                if (diffs[k3] && diffs[k3][0] === DIFF_INSERT) {\n                  count_insert++;\n                  text_insert = diffs[k3][1] + text_insert;\n                  k3--;\n                }\n                if (diffs[k3] && diffs[k3][0] === DIFF_DELETE) {\n                  count_delete++;\n                  text_delete = diffs[k3][1] + text_delete;\n                  k3--;\n                }\n                previous_equality = k3;\n              }\n            }\n            if (starts_with_pair_end(diffs[pointer][1])) {\n              var stray = diffs[pointer][1].charAt(0);\n              diffs[pointer][1] = diffs[pointer][1].slice(1);\n              text_delete += stray;\n              text_insert += stray;\n            }\n          }\n          if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n            diffs.splice(pointer, 1);\n            break;\n          }\n          if (text_delete.length > 0 || text_insert.length > 0) {\n            if (text_delete.length > 0 && text_insert.length > 0) {\n              commonlength = diff_commonPrefix(text_insert, text_delete);\n              if (commonlength !== 0) {\n                if (previous_equality >= 0) {\n                  diffs[previous_equality][1] += text_insert.substring(\n                    0,\n                    commonlength\n                  );\n                } else {\n                  diffs.splice(0, 0, [\n                    DIFF_EQUAL,\n                    text_insert.substring(0, commonlength)\n                  ]);\n                  pointer++;\n                }\n                text_insert = text_insert.substring(commonlength);\n                text_delete = text_delete.substring(commonlength);\n              }\n              commonlength = diff_commonSuffix(text_insert, text_delete);\n              if (commonlength !== 0) {\n                diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1];\n                text_insert = text_insert.substring(\n                  0,\n                  text_insert.length - commonlength\n                );\n                text_delete = text_delete.substring(\n                  0,\n                  text_delete.length - commonlength\n                );\n              }\n            }\n            var n3 = count_insert + count_delete;\n            if (text_delete.length === 0 && text_insert.length === 0) {\n              diffs.splice(pointer - n3, n3);\n              pointer = pointer - n3;\n            } else if (text_delete.length === 0) {\n              diffs.splice(pointer - n3, n3, [DIFF_INSERT, text_insert]);\n              pointer = pointer - n3 + 1;\n            } else if (text_insert.length === 0) {\n              diffs.splice(pointer - n3, n3, [DIFF_DELETE, text_delete]);\n              pointer = pointer - n3 + 1;\n            } else {\n              diffs.splice(\n                pointer - n3,\n                n3,\n                [DIFF_DELETE, text_delete],\n                [DIFF_INSERT, text_insert]\n              );\n              pointer = pointer - n3 + 2;\n            }\n          }\n          if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n            diffs[pointer - 1][1] += diffs[pointer][1];\n            diffs.splice(pointer, 1);\n          } else {\n            pointer++;\n          }\n          count_insert = 0;\n          count_delete = 0;\n          text_delete = \"\";\n          text_insert = \"\";\n          break;\n      }\n    }\n    if (diffs[diffs.length - 1][1] === \"\") {\n      diffs.pop();\n    }\n    var changes = false;\n    pointer = 1;\n    while (pointer < diffs.length - 1) {\n      if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) {\n        if (diffs[pointer][1].substring(\n          diffs[pointer][1].length - diffs[pointer - 1][1].length\n        ) === diffs[pointer - 1][1]) {\n          diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(\n            0,\n            diffs[pointer][1].length - diffs[pointer - 1][1].length\n          );\n          diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n          diffs.splice(pointer - 1, 1);\n          changes = true;\n        } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) {\n          diffs[pointer - 1][1] += diffs[pointer + 1][1];\n          diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1];\n          diffs.splice(pointer + 1, 1);\n          changes = true;\n        }\n      }\n      pointer++;\n    }\n    if (changes) {\n      diff_cleanupMerge(diffs, fix_unicode);\n    }\n  }\n  function is_surrogate_pair_start(charCode) {\n    return charCode >= 55296 && charCode <= 56319;\n  }\n  function is_surrogate_pair_end(charCode) {\n    return charCode >= 56320 && charCode <= 57343;\n  }\n  function starts_with_pair_end(str) {\n    return is_surrogate_pair_end(str.charCodeAt(0));\n  }\n  function ends_with_pair_start(str) {\n    return is_surrogate_pair_start(str.charCodeAt(str.length - 1));\n  }\n  function remove_empty_tuples(tuples) {\n    var ret = [];\n    for (var i3 = 0; i3 < tuples.length; i3++) {\n      if (tuples[i3][1].length > 0) {\n        ret.push(tuples[i3]);\n      }\n    }\n    return ret;\n  }\n  function make_edit_splice(before, oldMiddle, newMiddle, after) {\n    if (ends_with_pair_start(before) || starts_with_pair_end(after)) {\n      return null;\n    }\n    return remove_empty_tuples([\n      [DIFF_EQUAL, before],\n      [DIFF_DELETE, oldMiddle],\n      [DIFF_INSERT, newMiddle],\n      [DIFF_EQUAL, after]\n    ]);\n  }\n  function find_cursor_edit_diff(oldText, newText, cursor_pos) {\n    var oldRange = typeof cursor_pos === \"number\" ? { index: cursor_pos, length: 0 } : cursor_pos.oldRange;\n    var newRange = typeof cursor_pos === \"number\" ? null : cursor_pos.newRange;\n    var oldLength = oldText.length;\n    var newLength = newText.length;\n    if (oldRange.length === 0 && (newRange === null || newRange.length === 0)) {\n      var oldCursor = oldRange.index;\n      var oldBefore = oldText.slice(0, oldCursor);\n      var oldAfter = oldText.slice(oldCursor);\n      var maybeNewCursor = newRange ? newRange.index : null;\n      editBefore: {\n        var newCursor = oldCursor + newLength - oldLength;\n        if (maybeNewCursor !== null && maybeNewCursor !== newCursor) {\n          break editBefore;\n        }\n        if (newCursor < 0 || newCursor > newLength) {\n          break editBefore;\n        }\n        var newBefore = newText.slice(0, newCursor);\n        var newAfter = newText.slice(newCursor);\n        if (newAfter !== oldAfter) {\n          break editBefore;\n        }\n        var prefixLength = Math.min(oldCursor, newCursor);\n        var oldPrefix = oldBefore.slice(0, prefixLength);\n        var newPrefix = newBefore.slice(0, prefixLength);\n        if (oldPrefix !== newPrefix) {\n          break editBefore;\n        }\n        var oldMiddle = oldBefore.slice(prefixLength);\n        var newMiddle = newBefore.slice(prefixLength);\n        return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter);\n      }\n      editAfter: {\n        if (maybeNewCursor !== null && maybeNewCursor !== oldCursor) {\n          break editAfter;\n        }\n        var cursor = oldCursor;\n        var newBefore = newText.slice(0, cursor);\n        var newAfter = newText.slice(cursor);\n        if (newBefore !== oldBefore) {\n          break editAfter;\n        }\n        var suffixLength = Math.min(oldLength - cursor, newLength - cursor);\n        var oldSuffix = oldAfter.slice(oldAfter.length - suffixLength);\n        var newSuffix = newAfter.slice(newAfter.length - suffixLength);\n        if (oldSuffix !== newSuffix) {\n          break editAfter;\n        }\n        var oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength);\n        var newMiddle = newAfter.slice(0, newAfter.length - suffixLength);\n        return make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix);\n      }\n    }\n    if (oldRange.length > 0 && newRange && newRange.length === 0) {\n      replaceRange: {\n        var oldPrefix = oldText.slice(0, oldRange.index);\n        var oldSuffix = oldText.slice(oldRange.index + oldRange.length);\n        var prefixLength = oldPrefix.length;\n        var suffixLength = oldSuffix.length;\n        if (newLength < prefixLength + suffixLength) {\n          break replaceRange;\n        }\n        var newPrefix = newText.slice(0, prefixLength);\n        var newSuffix = newText.slice(newLength - suffixLength);\n        if (oldPrefix !== newPrefix || oldSuffix !== newSuffix) {\n          break replaceRange;\n        }\n        var oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength);\n        var newMiddle = newText.slice(prefixLength, newLength - suffixLength);\n        return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix);\n      }\n    }\n    return null;\n  }\n  function diff(text1, text2, cursor_pos, cleanup) {\n    return diff_main(text1, text2, cursor_pos, cleanup, true);\n  }\n  diff.INSERT = DIFF_INSERT;\n  diff.DELETE = DIFF_DELETE;\n  diff.EQUAL = DIFF_EQUAL;\n  diff_1 = diff;\n  return diff_1;\n}\nvar lodash_clonedeep = { exports: {} };\nlodash_clonedeep.exports;\nvar hasRequiredLodash_clonedeep;\nfunction requireLodash_clonedeep() {\n  if (hasRequiredLodash_clonedeep) return lodash_clonedeep.exports;\n  hasRequiredLodash_clonedeep = 1;\n  (function(module2, exports2) {\n    var LARGE_ARRAY_SIZE2 = 200;\n    var HASH_UNDEFINED2 = \"__lodash_hash_undefined__\";\n    var MAX_SAFE_INTEGER2 = 9007199254740991;\n    var argsTag2 = \"[object Arguments]\", arrayTag2 = \"[object Array]\", boolTag2 = \"[object Boolean]\", dateTag2 = \"[object Date]\", errorTag2 = \"[object Error]\", funcTag2 = \"[object Function]\", genTag2 = \"[object GeneratorFunction]\", mapTag2 = \"[object Map]\", numberTag2 = \"[object Number]\", objectTag2 = \"[object Object]\", promiseTag2 = \"[object Promise]\", regexpTag2 = \"[object RegExp]\", setTag2 = \"[object Set]\", stringTag2 = \"[object String]\", symbolTag2 = \"[object Symbol]\", weakMapTag2 = \"[object WeakMap]\";\n    var arrayBufferTag2 = \"[object ArrayBuffer]\", dataViewTag2 = \"[object DataView]\", float32Tag2 = \"[object Float32Array]\", float64Tag2 = \"[object Float64Array]\", int8Tag2 = \"[object Int8Array]\", int16Tag2 = \"[object Int16Array]\", int32Tag2 = \"[object Int32Array]\", uint8Tag2 = \"[object Uint8Array]\", uint8ClampedTag2 = \"[object Uint8ClampedArray]\", uint16Tag2 = \"[object Uint16Array]\", uint32Tag2 = \"[object Uint32Array]\";\n    var reRegExpChar2 = /[\\\\^$.*+?()[\\]{}|]/g;\n    var reFlags2 = /\\w*$/;\n    var reIsHostCtor2 = /^\\[object .+?Constructor\\]$/;\n    var reIsUint2 = /^(?:0|[1-9]\\d*)$/;\n    var cloneableTags2 = {};\n    cloneableTags2[argsTag2] = cloneableTags2[arrayTag2] = cloneableTags2[arrayBufferTag2] = cloneableTags2[dataViewTag2] = cloneableTags2[boolTag2] = cloneableTags2[dateTag2] = cloneableTags2[float32Tag2] = cloneableTags2[float64Tag2] = cloneableTags2[int8Tag2] = cloneableTags2[int16Tag2] = cloneableTags2[int32Tag2] = cloneableTags2[mapTag2] = cloneableTags2[numberTag2] = cloneableTags2[objectTag2] = cloneableTags2[regexpTag2] = cloneableTags2[setTag2] = cloneableTags2[stringTag2] = cloneableTags2[symbolTag2] = cloneableTags2[uint8Tag2] = cloneableTags2[uint8ClampedTag2] = cloneableTags2[uint16Tag2] = cloneableTags2[uint32Tag2] = true;\n    cloneableTags2[errorTag2] = cloneableTags2[funcTag2] = cloneableTags2[weakMapTag2] = false;\n    var freeGlobal2 = typeof commonjsGlobal == \"object\" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n    var freeSelf2 = typeof self == \"object\" && self && self.Object === Object && self;\n    var root2 = freeGlobal2 || freeSelf2 || Function(\"return this\")();\n    var freeExports2 = exports2 && !exports2.nodeType && exports2;\n    var freeModule2 = freeExports2 && true && module2 && !module2.nodeType && module2;\n    var moduleExports2 = freeModule2 && freeModule2.exports === freeExports2;\n    function addMapEntry(map2, pair) {\n      map2.set(pair[0], pair[1]);\n      return map2;\n    }\n    function addSetEntry(set2, value) {\n      set2.add(value);\n      return set2;\n    }\n    function arrayEach2(array2, iteratee) {\n      var index2 = -1, length = array2 ? array2.length : 0;\n      while (++index2 < length) {\n        if (iteratee(array2[index2], index2, array2) === false) {\n          break;\n        }\n      }\n      return array2;\n    }\n    function arrayPush2(array2, values) {\n      var index2 = -1, length = values.length, offset = array2.length;\n      while (++index2 < length) {\n        array2[offset + index2] = values[index2];\n      }\n      return array2;\n    }\n    function arrayReduce(array2, iteratee, accumulator, initAccum) {\n      var index2 = -1, length = array2 ? array2.length : 0;\n      while (++index2 < length) {\n        accumulator = iteratee(accumulator, array2[index2], index2, array2);\n      }\n      return accumulator;\n    }\n    function baseTimes2(n3, iteratee) {\n      var index2 = -1, result = Array(n3);\n      while (++index2 < n3) {\n        result[index2] = iteratee(index2);\n      }\n      return result;\n    }\n    function getValue2(object2, key) {\n      return object2 == null ? void 0 : object2[key];\n    }\n    function isHostObject(value) {\n      var result = false;\n      if (value != null && typeof value.toString != \"function\") {\n        try {\n          result = !!(value + \"\");\n        } catch (e2) {\n        }\n      }\n      return result;\n    }\n    function mapToArray2(map2) {\n      var index2 = -1, result = Array(map2.size);\n      map2.forEach(function(value, key) {\n        result[++index2] = [key, value];\n      });\n      return result;\n    }\n    function overArg2(func, transform) {\n      return function(arg) {\n        return func(transform(arg));\n      };\n    }\n    function setToArray2(set2) {\n      var index2 = -1, result = Array(set2.size);\n      set2.forEach(function(value) {\n        result[++index2] = value;\n      });\n      return result;\n    }\n    var arrayProto2 = Array.prototype, funcProto2 = Function.prototype, objectProto2 = Object.prototype;\n    var coreJsData2 = root2[\"__core-js_shared__\"];\n    var maskSrcKey2 = function() {\n      var uid = /[^.]+$/.exec(coreJsData2 && coreJsData2.keys && coreJsData2.keys.IE_PROTO || \"\");\n      return uid ? \"Symbol(src)_1.\" + uid : \"\";\n    }();\n    var funcToString2 = funcProto2.toString;\n    var hasOwnProperty2 = objectProto2.hasOwnProperty;\n    var objectToString2 = objectProto2.toString;\n    var reIsNative2 = RegExp(\n      \"^\" + funcToString2.call(hasOwnProperty2).replace(reRegExpChar2, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"\n    );\n    var Buffer3 = moduleExports2 ? root2.Buffer : void 0, Symbol2 = root2.Symbol, Uint8Array2 = root2.Uint8Array, getPrototype2 = overArg2(Object.getPrototypeOf, Object), objectCreate2 = Object.create, propertyIsEnumerable2 = objectProto2.propertyIsEnumerable, splice2 = arrayProto2.splice;\n    var nativeGetSymbols2 = Object.getOwnPropertySymbols, nativeIsBuffer2 = Buffer3 ? Buffer3.isBuffer : void 0, nativeKeys2 = overArg2(Object.keys, Object);\n    var DataView2 = getNative2(root2, \"DataView\"), Map2 = getNative2(root2, \"Map\"), Promise2 = getNative2(root2, \"Promise\"), Set2 = getNative2(root2, \"Set\"), WeakMap2 = getNative2(root2, \"WeakMap\"), nativeCreate2 = getNative2(Object, \"create\");\n    var dataViewCtorString2 = toSource2(DataView2), mapCtorString2 = toSource2(Map2), promiseCtorString2 = toSource2(Promise2), setCtorString2 = toSource2(Set2), weakMapCtorString2 = toSource2(WeakMap2);\n    var symbolProto2 = Symbol2 ? Symbol2.prototype : void 0, symbolValueOf2 = symbolProto2 ? symbolProto2.valueOf : void 0;\n    function Hash2(entries) {\n      var index2 = -1, length = entries ? entries.length : 0;\n      this.clear();\n      while (++index2 < length) {\n        var entry = entries[index2];\n        this.set(entry[0], entry[1]);\n      }\n    }\n    function hashClear2() {\n      this.__data__ = nativeCreate2 ? nativeCreate2(null) : {};\n    }\n    function hashDelete2(key) {\n      return this.has(key) && delete this.__data__[key];\n    }\n    function hashGet2(key) {\n      var data = this.__data__;\n      if (nativeCreate2) {\n        var result = data[key];\n        return result === HASH_UNDEFINED2 ? void 0 : result;\n      }\n      return hasOwnProperty2.call(data, key) ? data[key] : void 0;\n    }\n    function hashHas2(key) {\n      var data = this.__data__;\n      return nativeCreate2 ? data[key] !== void 0 : hasOwnProperty2.call(data, key);\n    }\n    function hashSet2(key, value) {\n      var data = this.__data__;\n      data[key] = nativeCreate2 && value === void 0 ? HASH_UNDEFINED2 : value;\n      return this;\n    }\n    Hash2.prototype.clear = hashClear2;\n    Hash2.prototype[\"delete\"] = hashDelete2;\n    Hash2.prototype.get = hashGet2;\n    Hash2.prototype.has = hashHas2;\n    Hash2.prototype.set = hashSet2;\n    function ListCache2(entries) {\n      var index2 = -1, length = entries ? entries.length : 0;\n      this.clear();\n      while (++index2 < length) {\n        var entry = entries[index2];\n        this.set(entry[0], entry[1]);\n      }\n    }\n    function listCacheClear2() {\n      this.__data__ = [];\n    }\n    function listCacheDelete2(key) {\n      var data = this.__data__, index2 = assocIndexOf2(data, key);\n      if (index2 < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index2 == lastIndex) {\n        data.pop();\n      } else {\n        splice2.call(data, index2, 1);\n      }\n      return true;\n    }\n    function listCacheGet2(key) {\n      var data = this.__data__, index2 = assocIndexOf2(data, key);\n      return index2 < 0 ? void 0 : data[index2][1];\n    }\n    function listCacheHas2(key) {\n      return assocIndexOf2(this.__data__, key) > -1;\n    }\n    function listCacheSet2(key, value) {\n      var data = this.__data__, index2 = assocIndexOf2(data, key);\n      if (index2 < 0) {\n        data.push([key, value]);\n      } else {\n        data[index2][1] = value;\n      }\n      return this;\n    }\n    ListCache2.prototype.clear = listCacheClear2;\n    ListCache2.prototype[\"delete\"] = listCacheDelete2;\n    ListCache2.prototype.get = listCacheGet2;\n    ListCache2.prototype.has = listCacheHas2;\n    ListCache2.prototype.set = listCacheSet2;\n    function MapCache2(entries) {\n      var index2 = -1, length = entries ? entries.length : 0;\n      this.clear();\n      while (++index2 < length) {\n        var entry = entries[index2];\n        this.set(entry[0], entry[1]);\n      }\n    }\n    function mapCacheClear2() {\n      this.__data__ = {\n        \"hash\": new Hash2(),\n        \"map\": new (Map2 || ListCache2)(),\n        \"string\": new Hash2()\n      };\n    }\n    function mapCacheDelete2(key) {\n      return getMapData2(this, key)[\"delete\"](key);\n    }\n    function mapCacheGet2(key) {\n      return getMapData2(this, key).get(key);\n    }\n    function mapCacheHas2(key) {\n      return getMapData2(this, key).has(key);\n    }\n    function mapCacheSet2(key, value) {\n      getMapData2(this, key).set(key, value);\n      return this;\n    }\n    MapCache2.prototype.clear = mapCacheClear2;\n    MapCache2.prototype[\"delete\"] = mapCacheDelete2;\n    MapCache2.prototype.get = mapCacheGet2;\n    MapCache2.prototype.has = mapCacheHas2;\n    MapCache2.prototype.set = mapCacheSet2;\n    function Stack2(entries) {\n      this.__data__ = new ListCache2(entries);\n    }\n    function stackClear2() {\n      this.__data__ = new ListCache2();\n    }\n    function stackDelete2(key) {\n      return this.__data__[\"delete\"](key);\n    }\n    function stackGet2(key) {\n      return this.__data__.get(key);\n    }\n    function stackHas2(key) {\n      return this.__data__.has(key);\n    }\n    function stackSet2(key, value) {\n      var cache = this.__data__;\n      if (cache instanceof ListCache2) {\n        var pairs = cache.__data__;\n        if (!Map2 || pairs.length < LARGE_ARRAY_SIZE2 - 1) {\n          pairs.push([key, value]);\n          return this;\n        }\n        cache = this.__data__ = new MapCache2(pairs);\n      }\n      cache.set(key, value);\n      return this;\n    }\n    Stack2.prototype.clear = stackClear2;\n    Stack2.prototype[\"delete\"] = stackDelete2;\n    Stack2.prototype.get = stackGet2;\n    Stack2.prototype.has = stackHas2;\n    Stack2.prototype.set = stackSet2;\n    function arrayLikeKeys2(value, inherited) {\n      var result = isArray2(value) || isArguments2(value) ? baseTimes2(value.length, String) : [];\n      var length = result.length, skipIndexes = !!length;\n      for (var key in value) {\n        if (hasOwnProperty2.call(value, key) && !(skipIndexes && (key == \"length\" || isIndex2(key, length)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n    function assignValue2(object2, key, value) {\n      var objValue = object2[key];\n      if (!(hasOwnProperty2.call(object2, key) && eq2(objValue, value)) || value === void 0 && !(key in object2)) {\n        object2[key] = value;\n      }\n    }\n    function assocIndexOf2(array2, key) {\n      var length = array2.length;\n      while (length--) {\n        if (eq2(array2[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n    function baseAssign(object2, source) {\n      return object2 && copyObject2(source, keys2(source), object2);\n    }\n    function baseClone2(value, isDeep, isFull, customizer, key, object2, stack) {\n      var result;\n      if (customizer) {\n        result = object2 ? customizer(value, key, object2, stack) : customizer(value);\n      }\n      if (result !== void 0) {\n        return result;\n      }\n      if (!isObject2(value)) {\n        return value;\n      }\n      var isArr = isArray2(value);\n      if (isArr) {\n        result = initCloneArray2(value);\n        if (!isDeep) {\n          return copyArray2(value, result);\n        }\n      } else {\n        var tag = getTag2(value), isFunc = tag == funcTag2 || tag == genTag2;\n        if (isBuffer2(value)) {\n          return cloneBuffer2(value, isDeep);\n        }\n        if (tag == objectTag2 || tag == argsTag2 || isFunc && !object2) {\n          if (isHostObject(value)) {\n            return object2 ? value : {};\n          }\n          result = initCloneObject2(isFunc ? {} : value);\n          if (!isDeep) {\n            return copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags2[tag]) {\n            return object2 ? value : {};\n          }\n          result = initCloneByTag2(value, tag, baseClone2, isDeep);\n        }\n      }\n      stack || (stack = new Stack2());\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n      if (!isArr) {\n        var props = isFull ? getAllKeys2(value) : keys2(value);\n      }\n      arrayEach2(props || value, function(subValue, key2) {\n        if (props) {\n          key2 = subValue;\n          subValue = value[key2];\n        }\n        assignValue2(result, key2, baseClone2(subValue, isDeep, isFull, customizer, key2, value, stack));\n      });\n      return result;\n    }\n    function baseCreate2(proto) {\n      return isObject2(proto) ? objectCreate2(proto) : {};\n    }\n    function baseGetAllKeys2(object2, keysFunc, symbolsFunc) {\n      var result = keysFunc(object2);\n      return isArray2(object2) ? result : arrayPush2(result, symbolsFunc(object2));\n    }\n    function baseGetTag2(value) {\n      return objectToString2.call(value);\n    }\n    function baseIsNative2(value) {\n      if (!isObject2(value) || isMasked2(value)) {\n        return false;\n      }\n      var pattern = isFunction2(value) || isHostObject(value) ? reIsNative2 : reIsHostCtor2;\n      return pattern.test(toSource2(value));\n    }\n    function baseKeys2(object2) {\n      if (!isPrototype2(object2)) {\n        return nativeKeys2(object2);\n      }\n      var result = [];\n      for (var key in Object(object2)) {\n        if (hasOwnProperty2.call(object2, key) && key != \"constructor\") {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n    function cloneBuffer2(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var result = new buffer.constructor(buffer.length);\n      buffer.copy(result);\n      return result;\n    }\n    function cloneArrayBuffer2(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array2(result).set(new Uint8Array2(arrayBuffer));\n      return result;\n    }\n    function cloneDataView2(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer2(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n    function cloneMap(map2, isDeep, cloneFunc) {\n      var array2 = isDeep ? cloneFunc(mapToArray2(map2), true) : mapToArray2(map2);\n      return arrayReduce(array2, addMapEntry, new map2.constructor());\n    }\n    function cloneRegExp2(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags2.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n    function cloneSet(set2, isDeep, cloneFunc) {\n      var array2 = isDeep ? cloneFunc(setToArray2(set2), true) : setToArray2(set2);\n      return arrayReduce(array2, addSetEntry, new set2.constructor());\n    }\n    function cloneSymbol2(symbol) {\n      return symbolValueOf2 ? Object(symbolValueOf2.call(symbol)) : {};\n    }\n    function cloneTypedArray2(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer2(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n    function copyArray2(source, array2) {\n      var index2 = -1, length = source.length;\n      array2 || (array2 = Array(length));\n      while (++index2 < length) {\n        array2[index2] = source[index2];\n      }\n      return array2;\n    }\n    function copyObject2(source, props, object2, customizer) {\n      object2 || (object2 = {});\n      var index2 = -1, length = props.length;\n      while (++index2 < length) {\n        var key = props[index2];\n        var newValue = void 0;\n        assignValue2(object2, key, newValue === void 0 ? source[key] : newValue);\n      }\n      return object2;\n    }\n    function copySymbols(source, object2) {\n      return copyObject2(source, getSymbols2(source), object2);\n    }\n    function getAllKeys2(object2) {\n      return baseGetAllKeys2(object2, keys2, getSymbols2);\n    }\n    function getMapData2(map2, key) {\n      var data = map2.__data__;\n      return isKeyable2(key) ? data[typeof key == \"string\" ? \"string\" : \"hash\"] : data.map;\n    }\n    function getNative2(object2, key) {\n      var value = getValue2(object2, key);\n      return baseIsNative2(value) ? value : void 0;\n    }\n    var getSymbols2 = nativeGetSymbols2 ? overArg2(nativeGetSymbols2, Object) : stubArray2;\n    var getTag2 = baseGetTag2;\n    if (DataView2 && getTag2(new DataView2(new ArrayBuffer(1))) != dataViewTag2 || Map2 && getTag2(new Map2()) != mapTag2 || Promise2 && getTag2(Promise2.resolve()) != promiseTag2 || Set2 && getTag2(new Set2()) != setTag2 || WeakMap2 && getTag2(new WeakMap2()) != weakMapTag2) {\n      getTag2 = function(value) {\n        var result = objectToString2.call(value), Ctor = result == objectTag2 ? value.constructor : void 0, ctorString = Ctor ? toSource2(Ctor) : void 0;\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString2:\n              return dataViewTag2;\n            case mapCtorString2:\n              return mapTag2;\n            case promiseCtorString2:\n              return promiseTag2;\n            case setCtorString2:\n              return setTag2;\n            case weakMapCtorString2:\n              return weakMapTag2;\n          }\n        }\n        return result;\n      };\n    }\n    function initCloneArray2(array2) {\n      var length = array2.length, result = array2.constructor(length);\n      if (length && typeof array2[0] == \"string\" && hasOwnProperty2.call(array2, \"index\")) {\n        result.index = array2.index;\n        result.input = array2.input;\n      }\n      return result;\n    }\n    function initCloneObject2(object2) {\n      return typeof object2.constructor == \"function\" && !isPrototype2(object2) ? baseCreate2(getPrototype2(object2)) : {};\n    }\n    function initCloneByTag2(object2, tag, cloneFunc, isDeep) {\n      var Ctor = object2.constructor;\n      switch (tag) {\n        case arrayBufferTag2:\n          return cloneArrayBuffer2(object2);\n        case boolTag2:\n        case dateTag2:\n          return new Ctor(+object2);\n        case dataViewTag2:\n          return cloneDataView2(object2, isDeep);\n        case float32Tag2:\n        case float64Tag2:\n        case int8Tag2:\n        case int16Tag2:\n        case int32Tag2:\n        case uint8Tag2:\n        case uint8ClampedTag2:\n        case uint16Tag2:\n        case uint32Tag2:\n          return cloneTypedArray2(object2, isDeep);\n        case mapTag2:\n          return cloneMap(object2, isDeep, cloneFunc);\n        case numberTag2:\n        case stringTag2:\n          return new Ctor(object2);\n        case regexpTag2:\n          return cloneRegExp2(object2);\n        case setTag2:\n          return cloneSet(object2, isDeep, cloneFunc);\n        case symbolTag2:\n          return cloneSymbol2(object2);\n      }\n    }\n    function isIndex2(value, length) {\n      length = length == null ? MAX_SAFE_INTEGER2 : length;\n      return !!length && (typeof value == \"number\" || reIsUint2.test(value)) && (value > -1 && value % 1 == 0 && value < length);\n    }\n    function isKeyable2(value) {\n      var type = typeof value;\n      return type == \"string\" || type == \"number\" || type == \"symbol\" || type == \"boolean\" ? value !== \"__proto__\" : value === null;\n    }\n    function isMasked2(func) {\n      return !!maskSrcKey2 && maskSrcKey2 in func;\n    }\n    function isPrototype2(value) {\n      var Ctor = value && value.constructor, proto = typeof Ctor == \"function\" && Ctor.prototype || objectProto2;\n      return value === proto;\n    }\n    function toSource2(func) {\n      if (func != null) {\n        try {\n          return funcToString2.call(func);\n        } catch (e2) {\n        }\n        try {\n          return func + \"\";\n        } catch (e2) {\n        }\n      }\n      return \"\";\n    }\n    function cloneDeep2(value) {\n      return baseClone2(value, true, true);\n    }\n    function eq2(value, other) {\n      return value === other || value !== value && other !== other;\n    }\n    function isArguments2(value) {\n      return isArrayLikeObject2(value) && hasOwnProperty2.call(value, \"callee\") && (!propertyIsEnumerable2.call(value, \"callee\") || objectToString2.call(value) == argsTag2);\n    }\n    var isArray2 = Array.isArray;\n    function isArrayLike2(value) {\n      return value != null && isLength2(value.length) && !isFunction2(value);\n    }\n    function isArrayLikeObject2(value) {\n      return isObjectLike2(value) && isArrayLike2(value);\n    }\n    var isBuffer2 = nativeIsBuffer2 || stubFalse2;\n    function isFunction2(value) {\n      var tag = isObject2(value) ? objectToString2.call(value) : \"\";\n      return tag == funcTag2 || tag == genTag2;\n    }\n    function isLength2(value) {\n      return typeof value == \"number\" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2;\n    }\n    function isObject2(value) {\n      var type = typeof value;\n      return !!value && (type == \"object\" || type == \"function\");\n    }\n    function isObjectLike2(value) {\n      return !!value && typeof value == \"object\";\n    }\n    function keys2(object2) {\n      return isArrayLike2(object2) ? arrayLikeKeys2(object2) : baseKeys2(object2);\n    }\n    function stubArray2() {\n      return [];\n    }\n    function stubFalse2() {\n      return false;\n    }\n    module2.exports = cloneDeep2;\n  })(lodash_clonedeep, lodash_clonedeep.exports);\n  return lodash_clonedeep.exports;\n}\nvar lodash_isequal = { exports: {} };\nlodash_isequal.exports;\nvar hasRequiredLodash_isequal;\nfunction requireLodash_isequal() {\n  if (hasRequiredLodash_isequal) return lodash_isequal.exports;\n  hasRequiredLodash_isequal = 1;\n  (function(module2, exports2) {\n    var LARGE_ARRAY_SIZE2 = 200;\n    var HASH_UNDEFINED2 = \"__lodash_hash_undefined__\";\n    var COMPARE_PARTIAL_FLAG2 = 1, COMPARE_UNORDERED_FLAG2 = 2;\n    var MAX_SAFE_INTEGER2 = 9007199254740991;\n    var argsTag2 = \"[object Arguments]\", arrayTag2 = \"[object Array]\", asyncTag2 = \"[object AsyncFunction]\", boolTag2 = \"[object Boolean]\", dateTag2 = \"[object Date]\", errorTag2 = \"[object Error]\", funcTag2 = \"[object Function]\", genTag2 = \"[object GeneratorFunction]\", mapTag2 = \"[object Map]\", numberTag2 = \"[object Number]\", nullTag2 = \"[object Null]\", objectTag2 = \"[object Object]\", promiseTag2 = \"[object Promise]\", proxyTag2 = \"[object Proxy]\", regexpTag2 = \"[object RegExp]\", setTag2 = \"[object Set]\", stringTag2 = \"[object String]\", symbolTag2 = \"[object Symbol]\", undefinedTag2 = \"[object Undefined]\", weakMapTag2 = \"[object WeakMap]\";\n    var arrayBufferTag2 = \"[object ArrayBuffer]\", dataViewTag2 = \"[object DataView]\", float32Tag2 = \"[object Float32Array]\", float64Tag2 = \"[object Float64Array]\", int8Tag2 = \"[object Int8Array]\", int16Tag2 = \"[object Int16Array]\", int32Tag2 = \"[object Int32Array]\", uint8Tag2 = \"[object Uint8Array]\", uint8ClampedTag2 = \"[object Uint8ClampedArray]\", uint16Tag2 = \"[object Uint16Array]\", uint32Tag2 = \"[object Uint32Array]\";\n    var reRegExpChar2 = /[\\\\^$.*+?()[\\]{}|]/g;\n    var reIsHostCtor2 = /^\\[object .+?Constructor\\]$/;\n    var reIsUint2 = /^(?:0|[1-9]\\d*)$/;\n    var typedArrayTags2 = {};\n    typedArrayTags2[float32Tag2] = typedArrayTags2[float64Tag2] = typedArrayTags2[int8Tag2] = typedArrayTags2[int16Tag2] = typedArrayTags2[int32Tag2] = typedArrayTags2[uint8Tag2] = typedArrayTags2[uint8ClampedTag2] = typedArrayTags2[uint16Tag2] = typedArrayTags2[uint32Tag2] = true;\n    typedArrayTags2[argsTag2] = typedArrayTags2[arrayTag2] = typedArrayTags2[arrayBufferTag2] = typedArrayTags2[boolTag2] = typedArrayTags2[dataViewTag2] = typedArrayTags2[dateTag2] = typedArrayTags2[errorTag2] = typedArrayTags2[funcTag2] = typedArrayTags2[mapTag2] = typedArrayTags2[numberTag2] = typedArrayTags2[objectTag2] = typedArrayTags2[regexpTag2] = typedArrayTags2[setTag2] = typedArrayTags2[stringTag2] = typedArrayTags2[weakMapTag2] = false;\n    var freeGlobal2 = typeof commonjsGlobal == \"object\" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n    var freeSelf2 = typeof self == \"object\" && self && self.Object === Object && self;\n    var root2 = freeGlobal2 || freeSelf2 || Function(\"return this\")();\n    var freeExports2 = exports2 && !exports2.nodeType && exports2;\n    var freeModule2 = freeExports2 && true && module2 && !module2.nodeType && module2;\n    var moduleExports2 = freeModule2 && freeModule2.exports === freeExports2;\n    var freeProcess2 = moduleExports2 && freeGlobal2.process;\n    var nodeUtil2 = function() {\n      try {\n        return freeProcess2 && freeProcess2.binding && freeProcess2.binding(\"util\");\n      } catch (e2) {\n      }\n    }();\n    var nodeIsTypedArray2 = nodeUtil2 && nodeUtil2.isTypedArray;\n    function arrayFilter2(array2, predicate) {\n      var index2 = -1, length = array2 == null ? 0 : array2.length, resIndex = 0, result = [];\n      while (++index2 < length) {\n        var value = array2[index2];\n        if (predicate(value, index2, array2)) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n    function arrayPush2(array2, values) {\n      var index2 = -1, length = values.length, offset = array2.length;\n      while (++index2 < length) {\n        array2[offset + index2] = values[index2];\n      }\n      return array2;\n    }\n    function arraySome2(array2, predicate) {\n      var index2 = -1, length = array2 == null ? 0 : array2.length;\n      while (++index2 < length) {\n        if (predicate(array2[index2], index2, array2)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    function baseTimes2(n3, iteratee) {\n      var index2 = -1, result = Array(n3);\n      while (++index2 < n3) {\n        result[index2] = iteratee(index2);\n      }\n      return result;\n    }\n    function baseUnary2(func) {\n      return function(value) {\n        return func(value);\n      };\n    }\n    function cacheHas2(cache, key) {\n      return cache.has(key);\n    }\n    function getValue2(object2, key) {\n      return object2 == null ? void 0 : object2[key];\n    }\n    function mapToArray2(map2) {\n      var index2 = -1, result = Array(map2.size);\n      map2.forEach(function(value, key) {\n        result[++index2] = [key, value];\n      });\n      return result;\n    }\n    function overArg2(func, transform) {\n      return function(arg) {\n        return func(transform(arg));\n      };\n    }\n    function setToArray2(set2) {\n      var index2 = -1, result = Array(set2.size);\n      set2.forEach(function(value) {\n        result[++index2] = value;\n      });\n      return result;\n    }\n    var arrayProto2 = Array.prototype, funcProto2 = Function.prototype, objectProto2 = Object.prototype;\n    var coreJsData2 = root2[\"__core-js_shared__\"];\n    var funcToString2 = funcProto2.toString;\n    var hasOwnProperty2 = objectProto2.hasOwnProperty;\n    var maskSrcKey2 = function() {\n      var uid = /[^.]+$/.exec(coreJsData2 && coreJsData2.keys && coreJsData2.keys.IE_PROTO || \"\");\n      return uid ? \"Symbol(src)_1.\" + uid : \"\";\n    }();\n    var nativeObjectToString2 = objectProto2.toString;\n    var reIsNative2 = RegExp(\n      \"^\" + funcToString2.call(hasOwnProperty2).replace(reRegExpChar2, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"\n    );\n    var Buffer3 = moduleExports2 ? root2.Buffer : void 0, Symbol2 = root2.Symbol, Uint8Array2 = root2.Uint8Array, propertyIsEnumerable2 = objectProto2.propertyIsEnumerable, splice2 = arrayProto2.splice, symToStringTag2 = Symbol2 ? Symbol2.toStringTag : void 0;\n    var nativeGetSymbols2 = Object.getOwnPropertySymbols, nativeIsBuffer2 = Buffer3 ? Buffer3.isBuffer : void 0, nativeKeys2 = overArg2(Object.keys, Object);\n    var DataView2 = getNative2(root2, \"DataView\"), Map2 = getNative2(root2, \"Map\"), Promise2 = getNative2(root2, \"Promise\"), Set2 = getNative2(root2, \"Set\"), WeakMap2 = getNative2(root2, \"WeakMap\"), nativeCreate2 = getNative2(Object, \"create\");\n    var dataViewCtorString2 = toSource2(DataView2), mapCtorString2 = toSource2(Map2), promiseCtorString2 = toSource2(Promise2), setCtorString2 = toSource2(Set2), weakMapCtorString2 = toSource2(WeakMap2);\n    var symbolProto2 = Symbol2 ? Symbol2.prototype : void 0, symbolValueOf2 = symbolProto2 ? symbolProto2.valueOf : void 0;\n    function Hash2(entries) {\n      var index2 = -1, length = entries == null ? 0 : entries.length;\n      this.clear();\n      while (++index2 < length) {\n        var entry = entries[index2];\n        this.set(entry[0], entry[1]);\n      }\n    }\n    function hashClear2() {\n      this.__data__ = nativeCreate2 ? nativeCreate2(null) : {};\n      this.size = 0;\n    }\n    function hashDelete2(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n    function hashGet2(key) {\n      var data = this.__data__;\n      if (nativeCreate2) {\n        var result = data[key];\n        return result === HASH_UNDEFINED2 ? void 0 : result;\n      }\n      return hasOwnProperty2.call(data, key) ? data[key] : void 0;\n    }\n    function hashHas2(key) {\n      var data = this.__data__;\n      return nativeCreate2 ? data[key] !== void 0 : hasOwnProperty2.call(data, key);\n    }\n    function hashSet2(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = nativeCreate2 && value === void 0 ? HASH_UNDEFINED2 : value;\n      return this;\n    }\n    Hash2.prototype.clear = hashClear2;\n    Hash2.prototype[\"delete\"] = hashDelete2;\n    Hash2.prototype.get = hashGet2;\n    Hash2.prototype.has = hashHas2;\n    Hash2.prototype.set = hashSet2;\n    function ListCache2(entries) {\n      var index2 = -1, length = entries == null ? 0 : entries.length;\n      this.clear();\n      while (++index2 < length) {\n        var entry = entries[index2];\n        this.set(entry[0], entry[1]);\n      }\n    }\n    function listCacheClear2() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n    function listCacheDelete2(key) {\n      var data = this.__data__, index2 = assocIndexOf2(data, key);\n      if (index2 < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index2 == lastIndex) {\n        data.pop();\n      } else {\n        splice2.call(data, index2, 1);\n      }\n      --this.size;\n      return true;\n    }\n    function listCacheGet2(key) {\n      var data = this.__data__, index2 = assocIndexOf2(data, key);\n      return index2 < 0 ? void 0 : data[index2][1];\n    }\n    function listCacheHas2(key) {\n      return assocIndexOf2(this.__data__, key) > -1;\n    }\n    function listCacheSet2(key, value) {\n      var data = this.__data__, index2 = assocIndexOf2(data, key);\n      if (index2 < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index2][1] = value;\n      }\n      return this;\n    }\n    ListCache2.prototype.clear = listCacheClear2;\n    ListCache2.prototype[\"delete\"] = listCacheDelete2;\n    ListCache2.prototype.get = listCacheGet2;\n    ListCache2.prototype.has = listCacheHas2;\n    ListCache2.prototype.set = listCacheSet2;\n    function MapCache2(entries) {\n      var index2 = -1, length = entries == null ? 0 : entries.length;\n      this.clear();\n      while (++index2 < length) {\n        var entry = entries[index2];\n        this.set(entry[0], entry[1]);\n      }\n    }\n    function mapCacheClear2() {\n      this.size = 0;\n      this.__data__ = {\n        \"hash\": new Hash2(),\n        \"map\": new (Map2 || ListCache2)(),\n        \"string\": new Hash2()\n      };\n    }\n    function mapCacheDelete2(key) {\n      var result = getMapData2(this, key)[\"delete\"](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n    function mapCacheGet2(key) {\n      return getMapData2(this, key).get(key);\n    }\n    function mapCacheHas2(key) {\n      return getMapData2(this, key).has(key);\n    }\n    function mapCacheSet2(key, value) {\n      var data = getMapData2(this, key), size = data.size;\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n    MapCache2.prototype.clear = mapCacheClear2;\n    MapCache2.prototype[\"delete\"] = mapCacheDelete2;\n    MapCache2.prototype.get = mapCacheGet2;\n    MapCache2.prototype.has = mapCacheHas2;\n    MapCache2.prototype.set = mapCacheSet2;\n    function SetCache2(values) {\n      var index2 = -1, length = values == null ? 0 : values.length;\n      this.__data__ = new MapCache2();\n      while (++index2 < length) {\n        this.add(values[index2]);\n      }\n    }\n    function setCacheAdd2(value) {\n      this.__data__.set(value, HASH_UNDEFINED2);\n      return this;\n    }\n    function setCacheHas2(value) {\n      return this.__data__.has(value);\n    }\n    SetCache2.prototype.add = SetCache2.prototype.push = setCacheAdd2;\n    SetCache2.prototype.has = setCacheHas2;\n    function Stack2(entries) {\n      var data = this.__data__ = new ListCache2(entries);\n      this.size = data.size;\n    }\n    function stackClear2() {\n      this.__data__ = new ListCache2();\n      this.size = 0;\n    }\n    function stackDelete2(key) {\n      var data = this.__data__, result = data[\"delete\"](key);\n      this.size = data.size;\n      return result;\n    }\n    function stackGet2(key) {\n      return this.__data__.get(key);\n    }\n    function stackHas2(key) {\n      return this.__data__.has(key);\n    }\n    function stackSet2(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache2) {\n        var pairs = data.__data__;\n        if (!Map2 || pairs.length < LARGE_ARRAY_SIZE2 - 1) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache2(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n    Stack2.prototype.clear = stackClear2;\n    Stack2.prototype[\"delete\"] = stackDelete2;\n    Stack2.prototype.get = stackGet2;\n    Stack2.prototype.has = stackHas2;\n    Stack2.prototype.set = stackSet2;\n    function arrayLikeKeys2(value, inherited) {\n      var isArr = isArray2(value), isArg = !isArr && isArguments2(value), isBuff = !isArr && !isArg && isBuffer2(value), isType = !isArr && !isArg && !isBuff && isTypedArray2(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes2(value.length, String) : [], length = result.length;\n      for (var key in value) {\n        if (hasOwnProperty2.call(value, key) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.\n        (key == \"length\" || // Node.js 0.10 has enumerable non-index properties on buffers.\n        isBuff && (key == \"offset\" || key == \"parent\") || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n        isType && (key == \"buffer\" || key == \"byteLength\" || key == \"byteOffset\") || // Skip index properties.\n        isIndex2(key, length)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n    function assocIndexOf2(array2, key) {\n      var length = array2.length;\n      while (length--) {\n        if (eq2(array2[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n    function baseGetAllKeys2(object2, keysFunc, symbolsFunc) {\n      var result = keysFunc(object2);\n      return isArray2(object2) ? result : arrayPush2(result, symbolsFunc(object2));\n    }\n    function baseGetTag2(value) {\n      if (value == null) {\n        return value === void 0 ? undefinedTag2 : nullTag2;\n      }\n      return symToStringTag2 && symToStringTag2 in Object(value) ? getRawTag2(value) : objectToString2(value);\n    }\n    function baseIsArguments2(value) {\n      return isObjectLike2(value) && baseGetTag2(value) == argsTag2;\n    }\n    function baseIsEqual2(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || !isObjectLike2(value) && !isObjectLike2(other)) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep2(value, other, bitmask, customizer, baseIsEqual2, stack);\n    }\n    function baseIsEqualDeep2(object2, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray2(object2), othIsArr = isArray2(other), objTag = objIsArr ? arrayTag2 : getTag2(object2), othTag = othIsArr ? arrayTag2 : getTag2(other);\n      objTag = objTag == argsTag2 ? objectTag2 : objTag;\n      othTag = othTag == argsTag2 ? objectTag2 : othTag;\n      var objIsObj = objTag == objectTag2, othIsObj = othTag == objectTag2, isSameTag = objTag == othTag;\n      if (isSameTag && isBuffer2(object2)) {\n        if (!isBuffer2(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack2());\n        return objIsArr || isTypedArray2(object2) ? equalArrays2(object2, other, bitmask, customizer, equalFunc, stack) : equalByTag2(object2, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG2)) {\n        var objIsWrapped = objIsObj && hasOwnProperty2.call(object2, \"__wrapped__\"), othIsWrapped = othIsObj && hasOwnProperty2.call(other, \"__wrapped__\");\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object2.value() : object2, othUnwrapped = othIsWrapped ? other.value() : other;\n          stack || (stack = new Stack2());\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack2());\n      return equalObjects2(object2, other, bitmask, customizer, equalFunc, stack);\n    }\n    function baseIsNative2(value) {\n      if (!isObject2(value) || isMasked2(value)) {\n        return false;\n      }\n      var pattern = isFunction2(value) ? reIsNative2 : reIsHostCtor2;\n      return pattern.test(toSource2(value));\n    }\n    function baseIsTypedArray2(value) {\n      return isObjectLike2(value) && isLength2(value.length) && !!typedArrayTags2[baseGetTag2(value)];\n    }\n    function baseKeys2(object2) {\n      if (!isPrototype2(object2)) {\n        return nativeKeys2(object2);\n      }\n      var result = [];\n      for (var key in Object(object2)) {\n        if (hasOwnProperty2.call(object2, key) && key != \"constructor\") {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n    function equalArrays2(array2, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG2, arrLength = array2.length, othLength = other.length;\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      var stacked = stack.get(array2);\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n      var index2 = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG2 ? new SetCache2() : void 0;\n      stack.set(array2, other);\n      stack.set(other, array2);\n      while (++index2 < arrLength) {\n        var arrValue = array2[index2], othValue = other[index2];\n        if (customizer) {\n          var compared = isPartial ? customizer(othValue, arrValue, index2, other, array2, stack) : customizer(arrValue, othValue, index2, array2, other, stack);\n        }\n        if (compared !== void 0) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        if (seen) {\n          if (!arraySome2(other, function(othValue2, othIndex) {\n            if (!cacheHas2(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n            result = false;\n            break;\n          }\n        } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n          result = false;\n          break;\n        }\n      }\n      stack[\"delete\"](array2);\n      stack[\"delete\"](other);\n      return result;\n    }\n    function equalByTag2(object2, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag2:\n          if (object2.byteLength != other.byteLength || object2.byteOffset != other.byteOffset) {\n            return false;\n          }\n          object2 = object2.buffer;\n          other = other.buffer;\n        case arrayBufferTag2:\n          if (object2.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object2), new Uint8Array2(other))) {\n            return false;\n          }\n          return true;\n        case boolTag2:\n        case dateTag2:\n        case numberTag2:\n          return eq2(+object2, +other);\n        case errorTag2:\n          return object2.name == other.name && object2.message == other.message;\n        case regexpTag2:\n        case stringTag2:\n          return object2 == other + \"\";\n        case mapTag2:\n          var convert = mapToArray2;\n        case setTag2:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG2;\n          convert || (convert = setToArray2);\n          if (object2.size != other.size && !isPartial) {\n            return false;\n          }\n          var stacked = stack.get(object2);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG2;\n          stack.set(object2, other);\n          var result = equalArrays2(convert(object2), convert(other), bitmask, customizer, equalFunc, stack);\n          stack[\"delete\"](object2);\n          return result;\n        case symbolTag2:\n          if (symbolValueOf2) {\n            return symbolValueOf2.call(object2) == symbolValueOf2.call(other);\n          }\n      }\n      return false;\n    }\n    function equalObjects2(object2, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG2, objProps = getAllKeys2(object2), objLength = objProps.length, othProps = getAllKeys2(other), othLength = othProps.length;\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index2 = objLength;\n      while (index2--) {\n        var key = objProps[index2];\n        if (!(isPartial ? key in other : hasOwnProperty2.call(other, key))) {\n          return false;\n        }\n      }\n      var stacked = stack.get(object2);\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n      var result = true;\n      stack.set(object2, other);\n      stack.set(other, object2);\n      var skipCtor = isPartial;\n      while (++index2 < objLength) {\n        key = objProps[index2];\n        var objValue = object2[key], othValue = other[key];\n        if (customizer) {\n          var compared = isPartial ? customizer(othValue, objValue, key, other, object2, stack) : customizer(objValue, othValue, key, object2, other, stack);\n        }\n        if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == \"constructor\");\n      }\n      if (result && !skipCtor) {\n        var objCtor = object2.constructor, othCtor = other.constructor;\n        if (objCtor != othCtor && (\"constructor\" in object2 && \"constructor\" in other) && !(typeof objCtor == \"function\" && objCtor instanceof objCtor && typeof othCtor == \"function\" && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack[\"delete\"](object2);\n      stack[\"delete\"](other);\n      return result;\n    }\n    function getAllKeys2(object2) {\n      return baseGetAllKeys2(object2, keys2, getSymbols2);\n    }\n    function getMapData2(map2, key) {\n      var data = map2.__data__;\n      return isKeyable2(key) ? data[typeof key == \"string\" ? \"string\" : \"hash\"] : data.map;\n    }\n    function getNative2(object2, key) {\n      var value = getValue2(object2, key);\n      return baseIsNative2(value) ? value : void 0;\n    }\n    function getRawTag2(value) {\n      var isOwn = hasOwnProperty2.call(value, symToStringTag2), tag = value[symToStringTag2];\n      try {\n        value[symToStringTag2] = void 0;\n        var unmasked = true;\n      } catch (e2) {\n      }\n      var result = nativeObjectToString2.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag2] = tag;\n        } else {\n          delete value[symToStringTag2];\n        }\n      }\n      return result;\n    }\n    var getSymbols2 = !nativeGetSymbols2 ? stubArray2 : function(object2) {\n      if (object2 == null) {\n        return [];\n      }\n      object2 = Object(object2);\n      return arrayFilter2(nativeGetSymbols2(object2), function(symbol) {\n        return propertyIsEnumerable2.call(object2, symbol);\n      });\n    };\n    var getTag2 = baseGetTag2;\n    if (DataView2 && getTag2(new DataView2(new ArrayBuffer(1))) != dataViewTag2 || Map2 && getTag2(new Map2()) != mapTag2 || Promise2 && getTag2(Promise2.resolve()) != promiseTag2 || Set2 && getTag2(new Set2()) != setTag2 || WeakMap2 && getTag2(new WeakMap2()) != weakMapTag2) {\n      getTag2 = function(value) {\n        var result = baseGetTag2(value), Ctor = result == objectTag2 ? value.constructor : void 0, ctorString = Ctor ? toSource2(Ctor) : \"\";\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString2:\n              return dataViewTag2;\n            case mapCtorString2:\n              return mapTag2;\n            case promiseCtorString2:\n              return promiseTag2;\n            case setCtorString2:\n              return setTag2;\n            case weakMapCtorString2:\n              return weakMapTag2;\n          }\n        }\n        return result;\n      };\n    }\n    function isIndex2(value, length) {\n      length = length == null ? MAX_SAFE_INTEGER2 : length;\n      return !!length && (typeof value == \"number\" || reIsUint2.test(value)) && (value > -1 && value % 1 == 0 && value < length);\n    }\n    function isKeyable2(value) {\n      var type = typeof value;\n      return type == \"string\" || type == \"number\" || type == \"symbol\" || type == \"boolean\" ? value !== \"__proto__\" : value === null;\n    }\n    function isMasked2(func) {\n      return !!maskSrcKey2 && maskSrcKey2 in func;\n    }\n    function isPrototype2(value) {\n      var Ctor = value && value.constructor, proto = typeof Ctor == \"function\" && Ctor.prototype || objectProto2;\n      return value === proto;\n    }\n    function objectToString2(value) {\n      return nativeObjectToString2.call(value);\n    }\n    function toSource2(func) {\n      if (func != null) {\n        try {\n          return funcToString2.call(func);\n        } catch (e2) {\n        }\n        try {\n          return func + \"\";\n        } catch (e2) {\n        }\n      }\n      return \"\";\n    }\n    function eq2(value, other) {\n      return value === other || value !== value && other !== other;\n    }\n    var isArguments2 = baseIsArguments2(/* @__PURE__ */ function() {\n      return arguments;\n    }()) ? baseIsArguments2 : function(value) {\n      return isObjectLike2(value) && hasOwnProperty2.call(value, \"callee\") && !propertyIsEnumerable2.call(value, \"callee\");\n    };\n    var isArray2 = Array.isArray;\n    function isArrayLike2(value) {\n      return value != null && isLength2(value.length) && !isFunction2(value);\n    }\n    var isBuffer2 = nativeIsBuffer2 || stubFalse2;\n    function isEqual2(value, other) {\n      return baseIsEqual2(value, other);\n    }\n    function isFunction2(value) {\n      if (!isObject2(value)) {\n        return false;\n      }\n      var tag = baseGetTag2(value);\n      return tag == funcTag2 || tag == genTag2 || tag == asyncTag2 || tag == proxyTag2;\n    }\n    function isLength2(value) {\n      return typeof value == \"number\" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2;\n    }\n    function isObject2(value) {\n      var type = typeof value;\n      return value != null && (type == \"object\" || type == \"function\");\n    }\n    function isObjectLike2(value) {\n      return value != null && typeof value == \"object\";\n    }\n    var isTypedArray2 = nodeIsTypedArray2 ? baseUnary2(nodeIsTypedArray2) : baseIsTypedArray2;\n    function keys2(object2) {\n      return isArrayLike2(object2) ? arrayLikeKeys2(object2) : baseKeys2(object2);\n    }\n    function stubArray2() {\n      return [];\n    }\n    function stubFalse2() {\n      return false;\n    }\n    module2.exports = isEqual2;\n  })(lodash_isequal, lodash_isequal.exports);\n  return lodash_isequal.exports;\n}\nvar AttributeMap = {};\nvar hasRequiredAttributeMap;\nfunction requireAttributeMap() {\n  if (hasRequiredAttributeMap) return AttributeMap;\n  hasRequiredAttributeMap = 1;\n  Object.defineProperty(AttributeMap, \"__esModule\", { value: true });\n  const cloneDeep2 = requireLodash_clonedeep();\n  const isEqual2 = requireLodash_isequal();\n  var AttributeMap$1;\n  (function(AttributeMap2) {\n    function compose(a2 = {}, b2 = {}, keepNull = false) {\n      if (typeof a2 !== \"object\") {\n        a2 = {};\n      }\n      if (typeof b2 !== \"object\") {\n        b2 = {};\n      }\n      let attributes = cloneDeep2(b2);\n      if (!keepNull) {\n        attributes = Object.keys(attributes).reduce((copy, key) => {\n          if (attributes[key] != null) {\n            copy[key] = attributes[key];\n          }\n          return copy;\n        }, {});\n      }\n      for (const key in a2) {\n        if (a2[key] !== void 0 && b2[key] === void 0) {\n          attributes[key] = a2[key];\n        }\n      }\n      return Object.keys(attributes).length > 0 ? attributes : void 0;\n    }\n    AttributeMap2.compose = compose;\n    function diff(a2 = {}, b2 = {}) {\n      if (typeof a2 !== \"object\") {\n        a2 = {};\n      }\n      if (typeof b2 !== \"object\") {\n        b2 = {};\n      }\n      const attributes = Object.keys(a2).concat(Object.keys(b2)).reduce((attrs, key) => {\n        if (!isEqual2(a2[key], b2[key])) {\n          attrs[key] = b2[key] === void 0 ? null : b2[key];\n        }\n        return attrs;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : void 0;\n    }\n    AttributeMap2.diff = diff;\n    function invert(attr = {}, base2 = {}) {\n      attr = attr || {};\n      const baseInverted = Object.keys(base2).reduce((memo, key) => {\n        if (base2[key] !== attr[key] && attr[key] !== void 0) {\n          memo[key] = base2[key];\n        }\n        return memo;\n      }, {});\n      return Object.keys(attr).reduce((memo, key) => {\n        if (attr[key] !== base2[key] && base2[key] === void 0) {\n          memo[key] = null;\n        }\n        return memo;\n      }, baseInverted);\n    }\n    AttributeMap2.invert = invert;\n    function transform(a2, b2, priority = false) {\n      if (typeof a2 !== \"object\") {\n        return b2;\n      }\n      if (typeof b2 !== \"object\") {\n        return void 0;\n      }\n      if (!priority) {\n        return b2;\n      }\n      const attributes = Object.keys(b2).reduce((attrs, key) => {\n        if (a2[key] === void 0) {\n          attrs[key] = b2[key];\n        }\n        return attrs;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : void 0;\n    }\n    AttributeMap2.transform = transform;\n  })(AttributeMap$1 || (AttributeMap$1 = {}));\n  AttributeMap.default = AttributeMap$1;\n  return AttributeMap;\n}\nvar Op = {};\nvar hasRequiredOp;\nfunction requireOp() {\n  if (hasRequiredOp) return Op;\n  hasRequiredOp = 1;\n  Object.defineProperty(Op, \"__esModule\", { value: true });\n  var Op$1;\n  (function(Op2) {\n    function length(op) {\n      if (typeof op.delete === \"number\") {\n        return op.delete;\n      } else if (typeof op.retain === \"number\") {\n        return op.retain;\n      } else if (typeof op.retain === \"object\" && op.retain !== null) {\n        return 1;\n      } else {\n        return typeof op.insert === \"string\" ? op.insert.length : 1;\n      }\n    }\n    Op2.length = length;\n  })(Op$1 || (Op$1 = {}));\n  Op.default = Op$1;\n  return Op;\n}\nvar OpIterator = {};\nvar hasRequiredOpIterator;\nfunction requireOpIterator() {\n  if (hasRequiredOpIterator) return OpIterator;\n  hasRequiredOpIterator = 1;\n  Object.defineProperty(OpIterator, \"__esModule\", { value: true });\n  const Op_1 = requireOp();\n  class Iterator {\n    constructor(ops) {\n      this.ops = ops;\n      this.index = 0;\n      this.offset = 0;\n    }\n    hasNext() {\n      return this.peekLength() < Infinity;\n    }\n    next(length) {\n      if (!length) {\n        length = Infinity;\n      }\n      const nextOp = this.ops[this.index];\n      if (nextOp) {\n        const offset = this.offset;\n        const opLength = Op_1.default.length(nextOp);\n        if (length >= opLength - offset) {\n          length = opLength - offset;\n          this.index += 1;\n          this.offset = 0;\n        } else {\n          this.offset += length;\n        }\n        if (typeof nextOp.delete === \"number\") {\n          return { delete: length };\n        } else {\n          const retOp = {};\n          if (nextOp.attributes) {\n            retOp.attributes = nextOp.attributes;\n          }\n          if (typeof nextOp.retain === \"number\") {\n            retOp.retain = length;\n          } else if (typeof nextOp.retain === \"object\" && nextOp.retain !== null) {\n            retOp.retain = nextOp.retain;\n          } else if (typeof nextOp.insert === \"string\") {\n            retOp.insert = nextOp.insert.substr(offset, length);\n          } else {\n            retOp.insert = nextOp.insert;\n          }\n          return retOp;\n        }\n      } else {\n        return { retain: Infinity };\n      }\n    }\n    peek() {\n      return this.ops[this.index];\n    }\n    peekLength() {\n      if (this.ops[this.index]) {\n        return Op_1.default.length(this.ops[this.index]) - this.offset;\n      } else {\n        return Infinity;\n      }\n    }\n    peekType() {\n      const op = this.ops[this.index];\n      if (op) {\n        if (typeof op.delete === \"number\") {\n          return \"delete\";\n        } else if (typeof op.retain === \"number\" || typeof op.retain === \"object\" && op.retain !== null) {\n          return \"retain\";\n        } else {\n          return \"insert\";\n        }\n      }\n      return \"retain\";\n    }\n    rest() {\n      if (!this.hasNext()) {\n        return [];\n      } else if (this.offset === 0) {\n        return this.ops.slice(this.index);\n      } else {\n        const offset = this.offset;\n        const index2 = this.index;\n        const next = this.next();\n        const rest = this.ops.slice(this.index);\n        this.offset = offset;\n        this.index = index2;\n        return [next].concat(rest);\n      }\n    }\n  }\n  OpIterator.default = Iterator;\n  return OpIterator;\n}\nvar hasRequiredDelta;\nfunction requireDelta() {\n  if (hasRequiredDelta) return Delta$1.exports;\n  hasRequiredDelta = 1;\n  (function(module2, exports2) {\n    Object.defineProperty(exports2, \"__esModule\", { value: true });\n    exports2.AttributeMap = exports2.OpIterator = exports2.Op = void 0;\n    const diff = requireDiff();\n    const cloneDeep2 = requireLodash_clonedeep();\n    const isEqual2 = requireLodash_isequal();\n    const AttributeMap_1 = requireAttributeMap();\n    exports2.AttributeMap = AttributeMap_1.default;\n    const Op_1 = requireOp();\n    exports2.Op = Op_1.default;\n    const OpIterator_1 = requireOpIterator();\n    exports2.OpIterator = OpIterator_1.default;\n    const NULL_CHARACTER = String.fromCharCode(0);\n    const getEmbedTypeAndData = (a2, b2) => {\n      if (typeof a2 !== \"object\" || a2 === null) {\n        throw new Error(`cannot retain a ${typeof a2}`);\n      }\n      if (typeof b2 !== \"object\" || b2 === null) {\n        throw new Error(`cannot retain a ${typeof b2}`);\n      }\n      const embedType = Object.keys(a2)[0];\n      if (!embedType || embedType !== Object.keys(b2)[0]) {\n        throw new Error(`embed types not matched: ${embedType} != ${Object.keys(b2)[0]}`);\n      }\n      return [embedType, a2[embedType], b2[embedType]];\n    };\n    class Delta2 {\n      constructor(ops) {\n        if (Array.isArray(ops)) {\n          this.ops = ops;\n        } else if (ops != null && Array.isArray(ops.ops)) {\n          this.ops = ops.ops;\n        } else {\n          this.ops = [];\n        }\n      }\n      static registerEmbed(embedType, handler) {\n        this.handlers[embedType] = handler;\n      }\n      static unregisterEmbed(embedType) {\n        delete this.handlers[embedType];\n      }\n      static getHandler(embedType) {\n        const handler = this.handlers[embedType];\n        if (!handler) {\n          throw new Error(`no handlers for embed type \"${embedType}\"`);\n        }\n        return handler;\n      }\n      insert(arg, attributes) {\n        const newOp = {};\n        if (typeof arg === \"string\" && arg.length === 0) {\n          return this;\n        }\n        newOp.insert = arg;\n        if (attributes != null && typeof attributes === \"object\" && Object.keys(attributes).length > 0) {\n          newOp.attributes = attributes;\n        }\n        return this.push(newOp);\n      }\n      delete(length) {\n        if (length <= 0) {\n          return this;\n        }\n        return this.push({ delete: length });\n      }\n      retain(length, attributes) {\n        if (typeof length === \"number\" && length <= 0) {\n          return this;\n        }\n        const newOp = { retain: length };\n        if (attributes != null && typeof attributes === \"object\" && Object.keys(attributes).length > 0) {\n          newOp.attributes = attributes;\n        }\n        return this.push(newOp);\n      }\n      push(newOp) {\n        let index2 = this.ops.length;\n        let lastOp = this.ops[index2 - 1];\n        newOp = cloneDeep2(newOp);\n        if (typeof lastOp === \"object\") {\n          if (typeof newOp.delete === \"number\" && typeof lastOp.delete === \"number\") {\n            this.ops[index2 - 1] = { delete: lastOp.delete + newOp.delete };\n            return this;\n          }\n          if (typeof lastOp.delete === \"number\" && newOp.insert != null) {\n            index2 -= 1;\n            lastOp = this.ops[index2 - 1];\n            if (typeof lastOp !== \"object\") {\n              this.ops.unshift(newOp);\n              return this;\n            }\n          }\n          if (isEqual2(newOp.attributes, lastOp.attributes)) {\n            if (typeof newOp.insert === \"string\" && typeof lastOp.insert === \"string\") {\n              this.ops[index2 - 1] = { insert: lastOp.insert + newOp.insert };\n              if (typeof newOp.attributes === \"object\") {\n                this.ops[index2 - 1].attributes = newOp.attributes;\n              }\n              return this;\n            } else if (typeof newOp.retain === \"number\" && typeof lastOp.retain === \"number\") {\n              this.ops[index2 - 1] = { retain: lastOp.retain + newOp.retain };\n              if (typeof newOp.attributes === \"object\") {\n                this.ops[index2 - 1].attributes = newOp.attributes;\n              }\n              return this;\n            }\n          }\n        }\n        if (index2 === this.ops.length) {\n          this.ops.push(newOp);\n        } else {\n          this.ops.splice(index2, 0, newOp);\n        }\n        return this;\n      }\n      chop() {\n        const lastOp = this.ops[this.ops.length - 1];\n        if (lastOp && typeof lastOp.retain === \"number\" && !lastOp.attributes) {\n          this.ops.pop();\n        }\n        return this;\n      }\n      filter(predicate) {\n        return this.ops.filter(predicate);\n      }\n      forEach(predicate) {\n        this.ops.forEach(predicate);\n      }\n      map(predicate) {\n        return this.ops.map(predicate);\n      }\n      partition(predicate) {\n        const passed = [];\n        const failed = [];\n        this.forEach((op) => {\n          const target = predicate(op) ? passed : failed;\n          target.push(op);\n        });\n        return [passed, failed];\n      }\n      reduce(predicate, initialValue) {\n        return this.ops.reduce(predicate, initialValue);\n      }\n      changeLength() {\n        return this.reduce((length, elem) => {\n          if (elem.insert) {\n            return length + Op_1.default.length(elem);\n          } else if (elem.delete) {\n            return length - elem.delete;\n          }\n          return length;\n        }, 0);\n      }\n      length() {\n        return this.reduce((length, elem) => {\n          return length + Op_1.default.length(elem);\n        }, 0);\n      }\n      slice(start = 0, end = Infinity) {\n        const ops = [];\n        const iter = new OpIterator_1.default(this.ops);\n        let index2 = 0;\n        while (index2 < end && iter.hasNext()) {\n          let nextOp;\n          if (index2 < start) {\n            nextOp = iter.next(start - index2);\n          } else {\n            nextOp = iter.next(end - index2);\n            ops.push(nextOp);\n          }\n          index2 += Op_1.default.length(nextOp);\n        }\n        return new Delta2(ops);\n      }\n      compose(other) {\n        const thisIter = new OpIterator_1.default(this.ops);\n        const otherIter = new OpIterator_1.default(other.ops);\n        const ops = [];\n        const firstOther = otherIter.peek();\n        if (firstOther != null && typeof firstOther.retain === \"number\" && firstOther.attributes == null) {\n          let firstLeft = firstOther.retain;\n          while (thisIter.peekType() === \"insert\" && thisIter.peekLength() <= firstLeft) {\n            firstLeft -= thisIter.peekLength();\n            ops.push(thisIter.next());\n          }\n          if (firstOther.retain - firstLeft > 0) {\n            otherIter.next(firstOther.retain - firstLeft);\n          }\n        }\n        const delta = new Delta2(ops);\n        while (thisIter.hasNext() || otherIter.hasNext()) {\n          if (otherIter.peekType() === \"insert\") {\n            delta.push(otherIter.next());\n          } else if (thisIter.peekType() === \"delete\") {\n            delta.push(thisIter.next());\n          } else {\n            const length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n            const thisOp = thisIter.next(length);\n            const otherOp = otherIter.next(length);\n            if (otherOp.retain) {\n              const newOp = {};\n              if (typeof thisOp.retain === \"number\") {\n                newOp.retain = typeof otherOp.retain === \"number\" ? length : otherOp.retain;\n              } else {\n                if (typeof otherOp.retain === \"number\") {\n                  if (thisOp.retain == null) {\n                    newOp.insert = thisOp.insert;\n                  } else {\n                    newOp.retain = thisOp.retain;\n                  }\n                } else {\n                  const action = thisOp.retain == null ? \"insert\" : \"retain\";\n                  const [embedType, thisData, otherData] = getEmbedTypeAndData(thisOp[action], otherOp.retain);\n                  const handler = Delta2.getHandler(embedType);\n                  newOp[action] = {\n                    [embedType]: handler.compose(thisData, otherData, action === \"retain\")\n                  };\n                }\n              }\n              const attributes = AttributeMap_1.default.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === \"number\");\n              if (attributes) {\n                newOp.attributes = attributes;\n              }\n              delta.push(newOp);\n              if (!otherIter.hasNext() && isEqual2(delta.ops[delta.ops.length - 1], newOp)) {\n                const rest = new Delta2(thisIter.rest());\n                return delta.concat(rest).chop();\n              }\n            } else if (typeof otherOp.delete === \"number\" && (typeof thisOp.retain === \"number\" || typeof thisOp.retain === \"object\" && thisOp.retain !== null)) {\n              delta.push(otherOp);\n            }\n          }\n        }\n        return delta.chop();\n      }\n      concat(other) {\n        const delta = new Delta2(this.ops.slice());\n        if (other.ops.length > 0) {\n          delta.push(other.ops[0]);\n          delta.ops = delta.ops.concat(other.ops.slice(1));\n        }\n        return delta;\n      }\n      diff(other, cursor) {\n        if (this.ops === other.ops) {\n          return new Delta2();\n        }\n        const strings = [this, other].map((delta) => {\n          return delta.map((op) => {\n            if (op.insert != null) {\n              return typeof op.insert === \"string\" ? op.insert : NULL_CHARACTER;\n            }\n            const prep = delta === other ? \"on\" : \"with\";\n            throw new Error(\"diff() called \" + prep + \" non-document\");\n          }).join(\"\");\n        });\n        const retDelta = new Delta2();\n        const diffResult = diff(strings[0], strings[1], cursor, true);\n        const thisIter = new OpIterator_1.default(this.ops);\n        const otherIter = new OpIterator_1.default(other.ops);\n        diffResult.forEach((component) => {\n          let length = component[1].length;\n          while (length > 0) {\n            let opLength = 0;\n            switch (component[0]) {\n              case diff.INSERT:\n                opLength = Math.min(otherIter.peekLength(), length);\n                retDelta.push(otherIter.next(opLength));\n                break;\n              case diff.DELETE:\n                opLength = Math.min(length, thisIter.peekLength());\n                thisIter.next(opLength);\n                retDelta.delete(opLength);\n                break;\n              case diff.EQUAL:\n                opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);\n                const thisOp = thisIter.next(opLength);\n                const otherOp = otherIter.next(opLength);\n                if (isEqual2(thisOp.insert, otherOp.insert)) {\n                  retDelta.retain(opLength, AttributeMap_1.default.diff(thisOp.attributes, otherOp.attributes));\n                } else {\n                  retDelta.push(otherOp).delete(opLength);\n                }\n                break;\n            }\n            length -= opLength;\n          }\n        });\n        return retDelta.chop();\n      }\n      eachLine(predicate, newline2 = \"\\n\") {\n        const iter = new OpIterator_1.default(this.ops);\n        let line = new Delta2();\n        let i3 = 0;\n        while (iter.hasNext()) {\n          if (iter.peekType() !== \"insert\") {\n            return;\n          }\n          const thisOp = iter.peek();\n          const start = Op_1.default.length(thisOp) - iter.peekLength();\n          const index2 = typeof thisOp.insert === \"string\" ? thisOp.insert.indexOf(newline2, start) - start : -1;\n          if (index2 < 0) {\n            line.push(iter.next());\n          } else if (index2 > 0) {\n            line.push(iter.next(index2));\n          } else {\n            if (predicate(line, iter.next(1).attributes || {}, i3) === false) {\n              return;\n            }\n            i3 += 1;\n            line = new Delta2();\n          }\n        }\n        if (line.length() > 0) {\n          predicate(line, {}, i3);\n        }\n      }\n      invert(base2) {\n        const inverted = new Delta2();\n        this.reduce((baseIndex, op) => {\n          if (op.insert) {\n            inverted.delete(Op_1.default.length(op));\n          } else if (typeof op.retain === \"number\" && op.attributes == null) {\n            inverted.retain(op.retain);\n            return baseIndex + op.retain;\n          } else if (op.delete || typeof op.retain === \"number\") {\n            const length = op.delete || op.retain;\n            const slice = base2.slice(baseIndex, baseIndex + length);\n            slice.forEach((baseOp) => {\n              if (op.delete) {\n                inverted.push(baseOp);\n              } else if (op.retain && op.attributes) {\n                inverted.retain(Op_1.default.length(baseOp), AttributeMap_1.default.invert(op.attributes, baseOp.attributes));\n              }\n            });\n            return baseIndex + length;\n          } else if (typeof op.retain === \"object\" && op.retain !== null) {\n            const slice = base2.slice(baseIndex, baseIndex + 1);\n            const baseOp = new OpIterator_1.default(slice.ops).next();\n            const [embedType, opData, baseOpData] = getEmbedTypeAndData(op.retain, baseOp.insert);\n            const handler = Delta2.getHandler(embedType);\n            inverted.retain({ [embedType]: handler.invert(opData, baseOpData) }, AttributeMap_1.default.invert(op.attributes, baseOp.attributes));\n            return baseIndex + 1;\n          }\n          return baseIndex;\n        }, 0);\n        return inverted.chop();\n      }\n      transform(arg, priority = false) {\n        priority = !!priority;\n        if (typeof arg === \"number\") {\n          return this.transformPosition(arg, priority);\n        }\n        const other = arg;\n        const thisIter = new OpIterator_1.default(this.ops);\n        const otherIter = new OpIterator_1.default(other.ops);\n        const delta = new Delta2();\n        while (thisIter.hasNext() || otherIter.hasNext()) {\n          if (thisIter.peekType() === \"insert\" && (priority || otherIter.peekType() !== \"insert\")) {\n            delta.retain(Op_1.default.length(thisIter.next()));\n          } else if (otherIter.peekType() === \"insert\") {\n            delta.push(otherIter.next());\n          } else {\n            const length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n            const thisOp = thisIter.next(length);\n            const otherOp = otherIter.next(length);\n            if (thisOp.delete) {\n              continue;\n            } else if (otherOp.delete) {\n              delta.push(otherOp);\n            } else {\n              const thisData = thisOp.retain;\n              const otherData = otherOp.retain;\n              let transformedData = typeof otherData === \"object\" && otherData !== null ? otherData : length;\n              if (typeof thisData === \"object\" && thisData !== null && typeof otherData === \"object\" && otherData !== null) {\n                const embedType = Object.keys(thisData)[0];\n                if (embedType === Object.keys(otherData)[0]) {\n                  const handler = Delta2.getHandler(embedType);\n                  if (handler) {\n                    transformedData = {\n                      [embedType]: handler.transform(thisData[embedType], otherData[embedType], priority)\n                    };\n                  }\n                }\n              }\n              delta.retain(transformedData, AttributeMap_1.default.transform(thisOp.attributes, otherOp.attributes, priority));\n            }\n          }\n        }\n        return delta.chop();\n      }\n      transformPosition(index2, priority = false) {\n        priority = !!priority;\n        const thisIter = new OpIterator_1.default(this.ops);\n        let offset = 0;\n        while (thisIter.hasNext() && offset <= index2) {\n          const length = thisIter.peekLength();\n          const nextType = thisIter.peekType();\n          thisIter.next();\n          if (nextType === \"delete\") {\n            index2 -= Math.min(length, index2 - offset);\n            continue;\n          } else if (nextType === \"insert\" && (offset < index2 || !priority)) {\n            index2 += length;\n          }\n          offset += length;\n        }\n        return index2;\n      }\n    }\n    Delta2.Op = Op_1.default;\n    Delta2.OpIterator = OpIterator_1.default;\n    Delta2.AttributeMap = AttributeMap_1.default;\n    Delta2.handlers = {};\n    exports2.default = Delta2;\n    {\n      module2.exports = Delta2;\n      module2.exports.default = Delta2;\n    }\n  })(Delta$1, Delta$1.exports);\n  return Delta$1.exports;\n}\nvar DeltaExports = requireDelta();\nconst Delta = /* @__PURE__ */ getDefaultExportFromCjs(DeltaExports);\nclass Break extends EmbedBlot$1 {\n  static value() {\n    return void 0;\n  }\n  optimize() {\n    if (this.prev || this.next) {\n      this.remove();\n    }\n  }\n  length() {\n    return 0;\n  }\n  value() {\n    return \"\";\n  }\n}\nBreak.blotName = \"break\";\nBreak.tagName = \"BR\";\nlet Text$1 = class Text2 extends TextBlot$1 {\n};\nconst entityMap = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  '\"': \"&quot;\",\n  \"'\": \"&#39;\"\n};\nfunction escapeText(text2) {\n  return text2.replace(/[&<>\"']/g, (s2) => entityMap[s2]);\n}\nconst _Inline = class _Inline extends InlineBlot$1 {\n  static compare(self2, other) {\n    const selfIndex = _Inline.order.indexOf(self2);\n    const otherIndex = _Inline.order.indexOf(other);\n    if (selfIndex >= 0 || otherIndex >= 0) {\n      return selfIndex - otherIndex;\n    }\n    if (self2 === other) {\n      return 0;\n    }\n    if (self2 < other) {\n      return -1;\n    }\n    return 1;\n  }\n  formatAt(index2, length, name, value) {\n    if (_Inline.compare(this.statics.blotName, name) < 0 && this.scroll.query(name, Scope.BLOT)) {\n      const blot = this.isolate(index2, length);\n      if (value) {\n        blot.wrap(name, value);\n      }\n    } else {\n      super.formatAt(index2, length, name, value);\n    }\n  }\n  optimize(context) {\n    super.optimize(context);\n    if (this.parent instanceof _Inline && _Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {\n      const parent = this.parent.isolate(this.offset(), this.length());\n      this.moveChildren(parent);\n      parent.wrap(this);\n    }\n  }\n};\n__publicField(_Inline, \"allowedChildren\", [_Inline, Break, EmbedBlot$1, Text$1]);\n// Lower index means deeper in the DOM tree, since not found (-1) is for embeds\n__publicField(_Inline, \"order\", [\n  \"cursor\",\n  \"inline\",\n  // Must be lower\n  \"link\",\n  // Chrome wants <a> to be lower\n  \"underline\",\n  \"strike\",\n  \"italic\",\n  \"bold\",\n  \"script\",\n  \"code\"\n  // Must be higher\n]);\nlet Inline = _Inline;\nconst NEWLINE_LENGTH = 1;\nclass Block extends BlockBlot$1 {\n  constructor() {\n    super(...arguments);\n    __publicField(this, \"cache\", {});\n  }\n  delta() {\n    if (this.cache.delta == null) {\n      this.cache.delta = blockDelta(this);\n    }\n    return this.cache.delta;\n  }\n  deleteAt(index2, length) {\n    super.deleteAt(index2, length);\n    this.cache = {};\n  }\n  formatAt(index2, length, name, value) {\n    if (length <= 0) return;\n    if (this.scroll.query(name, Scope.BLOCK)) {\n      if (index2 + length === this.length()) {\n        this.format(name, value);\n      }\n    } else {\n      super.formatAt(index2, Math.min(length, this.length() - index2 - 1), name, value);\n    }\n    this.cache = {};\n  }\n  insertAt(index2, value, def) {\n    if (def != null) {\n      super.insertAt(index2, value, def);\n      this.cache = {};\n      return;\n    }\n    if (value.length === 0) return;\n    const lines = value.split(\"\\n\");\n    const text2 = lines.shift();\n    if (text2.length > 0) {\n      if (index2 < this.length() - 1 || this.children.tail == null) {\n        super.insertAt(Math.min(index2, this.length() - 1), text2);\n      } else {\n        this.children.tail.insertAt(this.children.tail.length(), text2);\n      }\n      this.cache = {};\n    }\n    let block2 = this;\n    lines.reduce((lineIndex, line) => {\n      block2 = block2.split(lineIndex, true);\n      block2.insertAt(0, line);\n      return line.length;\n    }, index2 + text2.length);\n  }\n  insertBefore(blot, ref) {\n    const {\n      head\n    } = this.children;\n    super.insertBefore(blot, ref);\n    if (head instanceof Break) {\n      head.remove();\n    }\n    this.cache = {};\n  }\n  length() {\n    if (this.cache.length == null) {\n      this.cache.length = super.length() + NEWLINE_LENGTH;\n    }\n    return this.cache.length;\n  }\n  moveChildren(target, ref) {\n    super.moveChildren(target, ref);\n    this.cache = {};\n  }\n  optimize(context) {\n    super.optimize(context);\n    this.cache = {};\n  }\n  path(index2) {\n    return super.path(index2, true);\n  }\n  removeChild(child) {\n    super.removeChild(child);\n    this.cache = {};\n  }\n  split(index2) {\n    let force = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n    if (force && (index2 === 0 || index2 >= this.length() - NEWLINE_LENGTH)) {\n      const clone = this.clone();\n      if (index2 === 0) {\n        this.parent.insertBefore(clone, this);\n        return this;\n      }\n      this.parent.insertBefore(clone, this.next);\n      return clone;\n    }\n    const next = super.split(index2, force);\n    this.cache = {};\n    return next;\n  }\n}\nBlock.blotName = \"block\";\nBlock.tagName = \"P\";\nBlock.defaultChild = Break;\nBlock.allowedChildren = [Break, Inline, EmbedBlot$1, Text$1];\nclass BlockEmbed extends EmbedBlot$1 {\n  attach() {\n    super.attach();\n    this.attributes = new AttributorStore$1(this.domNode);\n  }\n  delta() {\n    return new Delta().insert(this.value(), {\n      ...this.formats(),\n      ...this.attributes.values()\n    });\n  }\n  format(name, value) {\n    const attribute2 = this.scroll.query(name, Scope.BLOCK_ATTRIBUTE);\n    if (attribute2 != null) {\n      this.attributes.attribute(attribute2, value);\n    }\n  }\n  formatAt(index2, length, name, value) {\n    this.format(name, value);\n  }\n  insertAt(index2, value, def) {\n    if (def != null) {\n      super.insertAt(index2, value, def);\n      return;\n    }\n    const lines = value.split(\"\\n\");\n    const text2 = lines.pop();\n    const blocks = lines.map((line) => {\n      const block2 = this.scroll.create(Block.blotName);\n      block2.insertAt(0, line);\n      return block2;\n    });\n    const ref = this.split(index2);\n    blocks.forEach((block2) => {\n      this.parent.insertBefore(block2, ref);\n    });\n    if (text2) {\n      this.parent.insertBefore(this.scroll.create(\"text\", text2), ref);\n    }\n  }\n}\nBlockEmbed.scope = Scope.BLOCK_BLOT;\nfunction blockDelta(blot) {\n  let filter = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;\n  return blot.descendants(LeafBlot$1).reduce((delta, leaf) => {\n    if (leaf.length() === 0) {\n      return delta;\n    }\n    return delta.insert(leaf.value(), bubbleFormats(leaf, {}, filter));\n  }, new Delta()).insert(\"\\n\", bubbleFormats(blot));\n}\nfunction bubbleFormats(blot) {\n  let formats = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n  let filter = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true;\n  if (blot == null) return formats;\n  if (\"formats\" in blot && typeof blot.formats === \"function\") {\n    formats = {\n      ...formats,\n      ...blot.formats()\n    };\n    if (filter) {\n      delete formats[\"code-token\"];\n    }\n  }\n  if (blot.parent == null || blot.parent.statics.blotName === \"scroll\" || blot.parent.statics.scope !== blot.statics.scope) {\n    return formats;\n  }\n  return bubbleFormats(blot.parent, formats, filter);\n}\nconst _Cursor = class _Cursor extends EmbedBlot$1 {\n  // Zero width no break space\n  static value() {\n    return void 0;\n  }\n  constructor(scroll, domNode, selection) {\n    super(scroll, domNode);\n    this.selection = selection;\n    this.textNode = document.createTextNode(_Cursor.CONTENTS);\n    this.domNode.appendChild(this.textNode);\n    this.savedLength = 0;\n  }\n  detach() {\n    if (this.parent != null) this.parent.removeChild(this);\n  }\n  format(name, value) {\n    if (this.savedLength !== 0) {\n      super.format(name, value);\n      return;\n    }\n    let target = this;\n    let index2 = 0;\n    while (target != null && target.statics.scope !== Scope.BLOCK_BLOT) {\n      index2 += target.offset(target.parent);\n      target = target.parent;\n    }\n    if (target != null) {\n      this.savedLength = _Cursor.CONTENTS.length;\n      target.optimize();\n      target.formatAt(index2, _Cursor.CONTENTS.length, name, value);\n      this.savedLength = 0;\n    }\n  }\n  index(node, offset) {\n    if (node === this.textNode) return 0;\n    return super.index(node, offset);\n  }\n  length() {\n    return this.savedLength;\n  }\n  position() {\n    return [this.textNode, this.textNode.data.length];\n  }\n  remove() {\n    super.remove();\n    this.parent = null;\n  }\n  restore() {\n    if (this.selection.composing || this.parent == null) return null;\n    const range = this.selection.getNativeRange();\n    while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {\n      this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);\n    }\n    const prevTextBlot = this.prev instanceof Text$1 ? this.prev : null;\n    const prevTextLength = prevTextBlot ? prevTextBlot.length() : 0;\n    const nextTextBlot = this.next instanceof Text$1 ? this.next : null;\n    const nextText = nextTextBlot ? nextTextBlot.text : \"\";\n    const {\n      textNode\n    } = this;\n    const newText = textNode.data.split(_Cursor.CONTENTS).join(\"\");\n    textNode.data = _Cursor.CONTENTS;\n    let mergedTextBlot;\n    if (prevTextBlot) {\n      mergedTextBlot = prevTextBlot;\n      if (newText || nextTextBlot) {\n        prevTextBlot.insertAt(prevTextBlot.length(), newText + nextText);\n        if (nextTextBlot) {\n          nextTextBlot.remove();\n        }\n      }\n    } else if (nextTextBlot) {\n      mergedTextBlot = nextTextBlot;\n      nextTextBlot.insertAt(0, newText);\n    } else {\n      const newTextNode = document.createTextNode(newText);\n      mergedTextBlot = this.scroll.create(newTextNode);\n      this.parent.insertBefore(mergedTextBlot, this);\n    }\n    this.remove();\n    if (range) {\n      const remapOffset = (node, offset) => {\n        if (prevTextBlot && node === prevTextBlot.domNode) {\n          return offset;\n        }\n        if (node === textNode) {\n          return prevTextLength + offset - 1;\n        }\n        if (nextTextBlot && node === nextTextBlot.domNode) {\n          return prevTextLength + newText.length + offset;\n        }\n        return null;\n      };\n      const start = remapOffset(range.start.node, range.start.offset);\n      const end = remapOffset(range.end.node, range.end.offset);\n      if (start !== null && end !== null) {\n        return {\n          startNode: mergedTextBlot.domNode,\n          startOffset: start,\n          endNode: mergedTextBlot.domNode,\n          endOffset: end\n        };\n      }\n    }\n    return null;\n  }\n  update(mutations, context) {\n    if (mutations.some((mutation) => {\n      return mutation.type === \"characterData\" && mutation.target === this.textNode;\n    })) {\n      const range = this.restore();\n      if (range) context.range = range;\n    }\n  }\n  // Avoid .ql-cursor being a descendant of `<a/>`.\n  // The reason is Safari pushes down `<a/>` on text insertion.\n  // That will cause DOM nodes not sync with the model.\n  //\n  // For example ({I} is the caret), given the markup:\n  //    <a><span class=\"ql-cursor\">\\uFEFF{I}</span></a>\n  // When typing a char \"x\", `<a/>` will be pushed down inside the `<span>` first:\n  //    <span class=\"ql-cursor\"><a>\\uFEFF{I}</a></span>\n  // And then \"x\" will be inserted after `<a/>`:\n  //    <span class=\"ql-cursor\"><a>\\uFEFF</a>d{I}</span>\n  optimize(context) {\n    super.optimize(context);\n    let {\n      parent\n    } = this;\n    while (parent) {\n      if (parent.domNode.tagName === \"A\") {\n        this.savedLength = _Cursor.CONTENTS.length;\n        parent.isolate(this.offset(parent), this.length()).unwrap();\n        this.savedLength = 0;\n        break;\n      }\n      parent = parent.parent;\n    }\n  }\n  value() {\n    return \"\";\n  }\n};\n__publicField(_Cursor, \"blotName\", \"cursor\");\n__publicField(_Cursor, \"className\", \"ql-cursor\");\n__publicField(_Cursor, \"tagName\", \"span\");\n__publicField(_Cursor, \"CONTENTS\", \"\\uFEFF\");\nlet Cursor = _Cursor;\nvar eventemitter3 = { exports: {} };\nvar hasRequiredEventemitter3;\nfunction requireEventemitter3() {\n  if (hasRequiredEventemitter3) return eventemitter3.exports;\n  hasRequiredEventemitter3 = 1;\n  (function(module2) {\n    var has2 = Object.prototype.hasOwnProperty, prefix = \"~\";\n    function Events() {\n    }\n    if (Object.create) {\n      Events.prototype = /* @__PURE__ */ Object.create(null);\n      if (!new Events().__proto__) prefix = false;\n    }\n    function EE(fn, context, once) {\n      this.fn = fn;\n      this.context = context;\n      this.once = once || false;\n    }\n    function addListener(emitter, event, fn, context, once) {\n      if (typeof fn !== \"function\") {\n        throw new TypeError(\"The listener must be a function\");\n      }\n      var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;\n      if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n      else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n      else emitter._events[evt] = [emitter._events[evt], listener];\n      return emitter;\n    }\n    function clearEvent(emitter, evt) {\n      if (--emitter._eventsCount === 0) emitter._events = new Events();\n      else delete emitter._events[evt];\n    }\n    function EventEmitter2() {\n      this._events = new Events();\n      this._eventsCount = 0;\n    }\n    EventEmitter2.prototype.eventNames = function eventNames() {\n      var names = [], events, name;\n      if (this._eventsCount === 0) return names;\n      for (name in events = this._events) {\n        if (has2.call(events, name)) names.push(prefix ? name.slice(1) : name);\n      }\n      if (Object.getOwnPropertySymbols) {\n        return names.concat(Object.getOwnPropertySymbols(events));\n      }\n      return names;\n    };\n    EventEmitter2.prototype.listeners = function listeners(event) {\n      var evt = prefix ? prefix + event : event, handlers = this._events[evt];\n      if (!handlers) return [];\n      if (handlers.fn) return [handlers.fn];\n      for (var i3 = 0, l2 = handlers.length, ee = new Array(l2); i3 < l2; i3++) {\n        ee[i3] = handlers[i3].fn;\n      }\n      return ee;\n    };\n    EventEmitter2.prototype.listenerCount = function listenerCount(event) {\n      var evt = prefix ? prefix + event : event, listeners = this._events[evt];\n      if (!listeners) return 0;\n      if (listeners.fn) return 1;\n      return listeners.length;\n    };\n    EventEmitter2.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n      var evt = prefix ? prefix + event : event;\n      if (!this._events[evt]) return false;\n      var listeners = this._events[evt], len = arguments.length, args, i3;\n      if (listeners.fn) {\n        if (listeners.once) this.removeListener(event, listeners.fn, void 0, true);\n        switch (len) {\n          case 1:\n            return listeners.fn.call(listeners.context), true;\n          case 2:\n            return listeners.fn.call(listeners.context, a1), true;\n          case 3:\n            return listeners.fn.call(listeners.context, a1, a2), true;\n          case 4:\n            return listeners.fn.call(listeners.context, a1, a2, a3), true;\n          case 5:\n            return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n          case 6:\n            return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n        }\n        for (i3 = 1, args = new Array(len - 1); i3 < len; i3++) {\n          args[i3 - 1] = arguments[i3];\n        }\n        listeners.fn.apply(listeners.context, args);\n      } else {\n        var length = listeners.length, j2;\n        for (i3 = 0; i3 < length; i3++) {\n          if (listeners[i3].once) this.removeListener(event, listeners[i3].fn, void 0, true);\n          switch (len) {\n            case 1:\n              listeners[i3].fn.call(listeners[i3].context);\n              break;\n            case 2:\n              listeners[i3].fn.call(listeners[i3].context, a1);\n              break;\n            case 3:\n              listeners[i3].fn.call(listeners[i3].context, a1, a2);\n              break;\n            case 4:\n              listeners[i3].fn.call(listeners[i3].context, a1, a2, a3);\n              break;\n            default:\n              if (!args) for (j2 = 1, args = new Array(len - 1); j2 < len; j2++) {\n                args[j2 - 1] = arguments[j2];\n              }\n              listeners[i3].fn.apply(listeners[i3].context, args);\n          }\n        }\n      }\n      return true;\n    };\n    EventEmitter2.prototype.on = function on(event, fn, context) {\n      return addListener(this, event, fn, context, false);\n    };\n    EventEmitter2.prototype.once = function once(event, fn, context) {\n      return addListener(this, event, fn, context, true);\n    };\n    EventEmitter2.prototype.removeListener = function removeListener(event, fn, context, once) {\n      var evt = prefix ? prefix + event : event;\n      if (!this._events[evt]) return this;\n      if (!fn) {\n        clearEvent(this, evt);\n        return this;\n      }\n      var listeners = this._events[evt];\n      if (listeners.fn) {\n        if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {\n          clearEvent(this, evt);\n        }\n      } else {\n        for (var i3 = 0, events = [], length = listeners.length; i3 < length; i3++) {\n          if (listeners[i3].fn !== fn || once && !listeners[i3].once || context && listeners[i3].context !== context) {\n            events.push(listeners[i3]);\n          }\n        }\n        if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n        else clearEvent(this, evt);\n      }\n      return this;\n    };\n    EventEmitter2.prototype.removeAllListeners = function removeAllListeners(event) {\n      var evt;\n      if (event) {\n        evt = prefix ? prefix + event : event;\n        if (this._events[evt]) clearEvent(this, evt);\n      } else {\n        this._events = new Events();\n        this._eventsCount = 0;\n      }\n      return this;\n    };\n    EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;\n    EventEmitter2.prototype.addListener = EventEmitter2.prototype.on;\n    EventEmitter2.prefixed = prefix;\n    EventEmitter2.EventEmitter = EventEmitter2;\n    {\n      module2.exports = EventEmitter2;\n    }\n  })(eventemitter3);\n  return eventemitter3.exports;\n}\nvar eventemitter3Exports = requireEventemitter3();\nconst EventEmitter = /* @__PURE__ */ getDefaultExportFromCjs(eventemitter3Exports);\nconst instances = /* @__PURE__ */ new WeakMap();\nconst levels = [\"error\", \"warn\", \"log\", \"info\"];\nlet level = \"warn\";\nfunction debug$6(method) {\n  if (level) {\n    if (levels.indexOf(method) <= levels.indexOf(level)) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      console[method](...args);\n    }\n  }\n}\nfunction namespace(ns) {\n  return levels.reduce((logger, method) => {\n    logger[method] = debug$6.bind(console, method, ns);\n    return logger;\n  }, {});\n}\nnamespace.level = (newLevel) => {\n  level = newLevel;\n};\ndebug$6.level = namespace.level;\nconst debug$5 = namespace(\"quill:events\");\nconst EVENTS = [\"selectionchange\", \"mousedown\", \"mouseup\", \"click\"];\nEVENTS.forEach((eventName) => {\n  document.addEventListener(eventName, function() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    Array.from(document.querySelectorAll(\".ql-container\")).forEach((node) => {\n      const quill = instances.get(node);\n      if (quill && quill.emitter) {\n        quill.emitter.handleDOM(...args);\n      }\n    });\n  });\n});\nclass Emitter extends EventEmitter {\n  constructor() {\n    super();\n    this.domListeners = {};\n    this.on(\"error\", debug$5.error);\n  }\n  emit() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    debug$5.log.call(debug$5, ...args);\n    return super.emit(...args);\n  }\n  handleDOM(event) {\n    for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      args[_key3 - 1] = arguments[_key3];\n    }\n    (this.domListeners[event.type] || []).forEach((_ref) => {\n      let {\n        node,\n        handler\n      } = _ref;\n      if (event.target === node || node.contains(event.target)) {\n        handler(event, ...args);\n      }\n    });\n  }\n  listenDOM(eventName, node, handler) {\n    if (!this.domListeners[eventName]) {\n      this.domListeners[eventName] = [];\n    }\n    this.domListeners[eventName].push({\n      node,\n      handler\n    });\n  }\n}\n__publicField(Emitter, \"events\", {\n  EDITOR_CHANGE: \"editor-change\",\n  SCROLL_BEFORE_UPDATE: \"scroll-before-update\",\n  SCROLL_BLOT_MOUNT: \"scroll-blot-mount\",\n  SCROLL_BLOT_UNMOUNT: \"scroll-blot-unmount\",\n  SCROLL_OPTIMIZE: \"scroll-optimize\",\n  SCROLL_UPDATE: \"scroll-update\",\n  SCROLL_EMBED_UPDATE: \"scroll-embed-update\",\n  SELECTION_CHANGE: \"selection-change\",\n  TEXT_CHANGE: \"text-change\",\n  COMPOSITION_BEFORE_START: \"composition-before-start\",\n  COMPOSITION_START: \"composition-start\",\n  COMPOSITION_BEFORE_END: \"composition-before-end\",\n  COMPOSITION_END: \"composition-end\"\n});\n__publicField(Emitter, \"sources\", {\n  API: \"api\",\n  SILENT: \"silent\",\n  USER: \"user\"\n});\nconst debug$4 = namespace(\"quill:selection\");\nlet Range$1 = class Range2 {\n  constructor(index2) {\n    let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;\n    this.index = index2;\n    this.length = length;\n  }\n};\nclass Selection {\n  constructor(scroll, emitter) {\n    this.emitter = emitter;\n    this.scroll = scroll;\n    this.composing = false;\n    this.mouseDown = false;\n    this.root = this.scroll.domNode;\n    this.cursor = this.scroll.create(\"cursor\", this);\n    this.savedRange = new Range$1(0, 0);\n    this.lastRange = this.savedRange;\n    this.lastNative = null;\n    this.handleComposition();\n    this.handleDragging();\n    this.emitter.listenDOM(\"selectionchange\", document, () => {\n      if (!this.mouseDown && !this.composing) {\n        setTimeout(this.update.bind(this, Emitter.sources.USER), 1);\n      }\n    });\n    this.emitter.on(Emitter.events.SCROLL_BEFORE_UPDATE, () => {\n      if (!this.hasFocus()) return;\n      const native = this.getNativeRange();\n      if (native == null) return;\n      if (native.start.node === this.cursor.textNode) return;\n      this.emitter.once(Emitter.events.SCROLL_UPDATE, (source, mutations) => {\n        try {\n          if (this.root.contains(native.start.node) && this.root.contains(native.end.node)) {\n            this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);\n          }\n          const triggeredByTyping = mutations.some((mutation) => mutation.type === \"characterData\" || mutation.type === \"childList\" || mutation.type === \"attributes\" && mutation.target === this.root);\n          this.update(triggeredByTyping ? Emitter.sources.SILENT : source);\n        } catch (ignored) {\n        }\n      });\n    });\n    this.emitter.on(Emitter.events.SCROLL_OPTIMIZE, (mutations, context) => {\n      if (context.range) {\n        const {\n          startNode,\n          startOffset,\n          endNode,\n          endOffset\n        } = context.range;\n        this.setNativeRange(startNode, startOffset, endNode, endOffset);\n        this.update(Emitter.sources.SILENT);\n      }\n    });\n    this.update(Emitter.sources.SILENT);\n  }\n  handleComposition() {\n    this.emitter.on(Emitter.events.COMPOSITION_BEFORE_START, () => {\n      this.composing = true;\n    });\n    this.emitter.on(Emitter.events.COMPOSITION_END, () => {\n      this.composing = false;\n      if (this.cursor.parent) {\n        const range = this.cursor.restore();\n        if (!range) return;\n        setTimeout(() => {\n          this.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n        }, 1);\n      }\n    });\n  }\n  handleDragging() {\n    this.emitter.listenDOM(\"mousedown\", document.body, () => {\n      this.mouseDown = true;\n    });\n    this.emitter.listenDOM(\"mouseup\", document.body, () => {\n      this.mouseDown = false;\n      this.update(Emitter.sources.USER);\n    });\n  }\n  focus() {\n    if (this.hasFocus()) return;\n    this.root.focus({\n      preventScroll: true\n    });\n    this.setRange(this.savedRange);\n  }\n  format(format2, value) {\n    this.scroll.update();\n    const nativeRange = this.getNativeRange();\n    if (nativeRange == null || !nativeRange.native.collapsed || this.scroll.query(format2, Scope.BLOCK)) return;\n    if (nativeRange.start.node !== this.cursor.textNode) {\n      const blot = this.scroll.find(nativeRange.start.node, false);\n      if (blot == null) return;\n      if (blot instanceof LeafBlot$1) {\n        const after = blot.split(nativeRange.start.offset);\n        blot.parent.insertBefore(this.cursor, after);\n      } else {\n        blot.insertBefore(this.cursor, nativeRange.start.node);\n      }\n      this.cursor.attach();\n    }\n    this.cursor.format(format2, value);\n    this.scroll.optimize();\n    this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n    this.update();\n  }\n  getBounds(index2) {\n    let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;\n    const scrollLength = this.scroll.length();\n    index2 = Math.min(index2, scrollLength - 1);\n    length = Math.min(index2 + length, scrollLength - 1) - index2;\n    let node;\n    let [leaf, offset] = this.scroll.leaf(index2);\n    if (leaf == null) return null;\n    if (length > 0 && offset === leaf.length()) {\n      const [next] = this.scroll.leaf(index2 + 1);\n      if (next) {\n        const [line] = this.scroll.line(index2);\n        const [nextLine] = this.scroll.line(index2 + 1);\n        if (line === nextLine) {\n          leaf = next;\n          offset = 0;\n        }\n      }\n    }\n    [node, offset] = leaf.position(offset, true);\n    const range = document.createRange();\n    if (length > 0) {\n      range.setStart(node, offset);\n      [leaf, offset] = this.scroll.leaf(index2 + length);\n      if (leaf == null) return null;\n      [node, offset] = leaf.position(offset, true);\n      range.setEnd(node, offset);\n      return range.getBoundingClientRect();\n    }\n    let side = \"left\";\n    let rect;\n    if (node instanceof Text) {\n      if (!node.data.length) {\n        return null;\n      }\n      if (offset < node.data.length) {\n        range.setStart(node, offset);\n        range.setEnd(node, offset + 1);\n      } else {\n        range.setStart(node, offset - 1);\n        range.setEnd(node, offset);\n        side = \"right\";\n      }\n      rect = range.getBoundingClientRect();\n    } else {\n      if (!(leaf.domNode instanceof Element)) return null;\n      rect = leaf.domNode.getBoundingClientRect();\n      if (offset > 0) side = \"right\";\n    }\n    return {\n      bottom: rect.top + rect.height,\n      height: rect.height,\n      left: rect[side],\n      right: rect[side],\n      top: rect.top,\n      width: 0\n    };\n  }\n  getNativeRange() {\n    const selection = document.getSelection();\n    if (selection == null || selection.rangeCount <= 0) return null;\n    const nativeRange = selection.getRangeAt(0);\n    if (nativeRange == null) return null;\n    const range = this.normalizeNative(nativeRange);\n    debug$4.info(\"getNativeRange\", range);\n    return range;\n  }\n  getRange() {\n    const root2 = this.scroll.domNode;\n    if (\"isConnected\" in root2 && !root2.isConnected) {\n      return [null, null];\n    }\n    const normalized = this.getNativeRange();\n    if (normalized == null) return [null, null];\n    const range = this.normalizedToRange(normalized);\n    return [range, normalized];\n  }\n  hasFocus() {\n    return document.activeElement === this.root || document.activeElement != null && contains(this.root, document.activeElement);\n  }\n  normalizedToRange(range) {\n    const positions = [[range.start.node, range.start.offset]];\n    if (!range.native.collapsed) {\n      positions.push([range.end.node, range.end.offset]);\n    }\n    const indexes = positions.map((position) => {\n      const [node, offset] = position;\n      const blot = this.scroll.find(node, true);\n      const index2 = blot.offset(this.scroll);\n      if (offset === 0) {\n        return index2;\n      }\n      if (blot instanceof LeafBlot$1) {\n        return index2 + blot.index(node, offset);\n      }\n      return index2 + blot.length();\n    });\n    const end = Math.min(Math.max(...indexes), this.scroll.length() - 1);\n    const start = Math.min(end, ...indexes);\n    return new Range$1(start, end - start);\n  }\n  normalizeNative(nativeRange) {\n    if (!contains(this.root, nativeRange.startContainer) || !nativeRange.collapsed && !contains(this.root, nativeRange.endContainer)) {\n      return null;\n    }\n    const range = {\n      start: {\n        node: nativeRange.startContainer,\n        offset: nativeRange.startOffset\n      },\n      end: {\n        node: nativeRange.endContainer,\n        offset: nativeRange.endOffset\n      },\n      native: nativeRange\n    };\n    [range.start, range.end].forEach((position) => {\n      let {\n        node,\n        offset\n      } = position;\n      while (!(node instanceof Text) && node.childNodes.length > 0) {\n        if (node.childNodes.length > offset) {\n          node = node.childNodes[offset];\n          offset = 0;\n        } else if (node.childNodes.length === offset) {\n          node = node.lastChild;\n          if (node instanceof Text) {\n            offset = node.data.length;\n          } else if (node.childNodes.length > 0) {\n            offset = node.childNodes.length;\n          } else {\n            offset = node.childNodes.length + 1;\n          }\n        } else {\n          break;\n        }\n      }\n      position.node = node;\n      position.offset = offset;\n    });\n    return range;\n  }\n  rangeToNative(range) {\n    const scrollLength = this.scroll.length();\n    const getPosition = (index2, inclusive) => {\n      index2 = Math.min(scrollLength - 1, index2);\n      const [leaf, leafOffset] = this.scroll.leaf(index2);\n      return leaf ? leaf.position(leafOffset, inclusive) : [null, -1];\n    };\n    return [...getPosition(range.index, false), ...getPosition(range.index + range.length, true)];\n  }\n  setNativeRange(startNode, startOffset) {\n    let endNode = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : startNode;\n    let endOffset = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : startOffset;\n    let force = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : false;\n    debug$4.info(\"setNativeRange\", startNode, startOffset, endNode, endOffset);\n    if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null || // @ts-expect-error Fix me later\n    endNode.parentNode == null)) {\n      return;\n    }\n    const selection = document.getSelection();\n    if (selection == null) return;\n    if (startNode != null) {\n      if (!this.hasFocus()) this.root.focus({\n        preventScroll: true\n      });\n      const {\n        native\n      } = this.getNativeRange() || {};\n      if (native == null || force || startNode !== native.startContainer || startOffset !== native.startOffset || endNode !== native.endContainer || endOffset !== native.endOffset) {\n        if (startNode instanceof Element && startNode.tagName === \"BR\") {\n          startOffset = Array.from(startNode.parentNode.childNodes).indexOf(startNode);\n          startNode = startNode.parentNode;\n        }\n        if (endNode instanceof Element && endNode.tagName === \"BR\") {\n          endOffset = Array.from(endNode.parentNode.childNodes).indexOf(endNode);\n          endNode = endNode.parentNode;\n        }\n        const range = document.createRange();\n        range.setStart(startNode, startOffset);\n        range.setEnd(endNode, endOffset);\n        selection.removeAllRanges();\n        selection.addRange(range);\n      }\n    } else {\n      selection.removeAllRanges();\n      this.root.blur();\n    }\n  }\n  setRange(range) {\n    let force = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n    let source = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Emitter.sources.API;\n    if (typeof force === \"string\") {\n      source = force;\n      force = false;\n    }\n    debug$4.info(\"setRange\", range);\n    if (range != null) {\n      const args = this.rangeToNative(range);\n      this.setNativeRange(...args, force);\n    } else {\n      this.setNativeRange(null);\n    }\n    this.update(source);\n  }\n  update() {\n    let source = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : Emitter.sources.USER;\n    const oldRange = this.lastRange;\n    const [lastRange, nativeRange] = this.getRange();\n    this.lastRange = lastRange;\n    this.lastNative = nativeRange;\n    if (this.lastRange != null) {\n      this.savedRange = this.lastRange;\n    }\n    if (!isEqual$1(oldRange, this.lastRange)) {\n      if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {\n        const range = this.cursor.restore();\n        if (range) {\n          this.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n        }\n      }\n      const args = [Emitter.events.SELECTION_CHANGE, cloneDeep(this.lastRange), cloneDeep(oldRange), source];\n      this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n      if (source !== Emitter.sources.SILENT) {\n        this.emitter.emit(...args);\n      }\n    }\n  }\n}\nfunction contains(parent, descendant) {\n  try {\n    descendant.parentNode;\n  } catch (e2) {\n    return false;\n  }\n  return parent.contains(descendant);\n}\nconst ASCII = /^[ -~]*$/;\nclass Editor {\n  constructor(scroll) {\n    this.scroll = scroll;\n    this.delta = this.getDelta();\n  }\n  applyDelta(delta) {\n    this.scroll.update();\n    let scrollLength = this.scroll.length();\n    this.scroll.batchStart();\n    const normalizedDelta = normalizeDelta(delta);\n    const deleteDelta = new Delta();\n    const normalizedOps = splitOpLines(normalizedDelta.ops.slice());\n    normalizedOps.reduce((index2, op) => {\n      const length = DeltaExports.Op.length(op);\n      let attributes = op.attributes || {};\n      let isImplicitNewlinePrepended = false;\n      let isImplicitNewlineAppended = false;\n      if (op.insert != null) {\n        deleteDelta.retain(length);\n        if (typeof op.insert === \"string\") {\n          const text2 = op.insert;\n          isImplicitNewlineAppended = !text2.endsWith(\"\\n\") && (scrollLength <= index2 || !!this.scroll.descendant(BlockEmbed, index2)[0]);\n          this.scroll.insertAt(index2, text2);\n          const [line, offset] = this.scroll.line(index2);\n          let formats = merge({}, bubbleFormats(line));\n          if (line instanceof Block) {\n            const [leaf] = line.descendant(LeafBlot$1, offset);\n            if (leaf) {\n              formats = merge(formats, bubbleFormats(leaf));\n            }\n          }\n          attributes = DeltaExports.AttributeMap.diff(formats, attributes) || {};\n        } else if (typeof op.insert === \"object\") {\n          const key = Object.keys(op.insert)[0];\n          if (key == null) return index2;\n          const isInlineEmbed = this.scroll.query(key, Scope.INLINE) != null;\n          if (isInlineEmbed) {\n            if (scrollLength <= index2 || !!this.scroll.descendant(BlockEmbed, index2)[0]) {\n              isImplicitNewlineAppended = true;\n            }\n          } else if (index2 > 0) {\n            const [leaf, offset] = this.scroll.descendant(LeafBlot$1, index2 - 1);\n            if (leaf instanceof Text$1) {\n              const text2 = leaf.value();\n              if (text2[offset] !== \"\\n\") {\n                isImplicitNewlinePrepended = true;\n              }\n            } else if (leaf instanceof EmbedBlot$1 && leaf.statics.scope === Scope.INLINE_BLOT) {\n              isImplicitNewlinePrepended = true;\n            }\n          }\n          this.scroll.insertAt(index2, key, op.insert[key]);\n          if (isInlineEmbed) {\n            const [leaf] = this.scroll.descendant(LeafBlot$1, index2);\n            if (leaf) {\n              const formats = merge({}, bubbleFormats(leaf));\n              attributes = DeltaExports.AttributeMap.diff(formats, attributes) || {};\n            }\n          }\n        }\n        scrollLength += length;\n      } else {\n        deleteDelta.push(op);\n        if (op.retain !== null && typeof op.retain === \"object\") {\n          const key = Object.keys(op.retain)[0];\n          if (key == null) return index2;\n          this.scroll.updateEmbedAt(index2, key, op.retain[key]);\n        }\n      }\n      Object.keys(attributes).forEach((name) => {\n        this.scroll.formatAt(index2, length, name, attributes[name]);\n      });\n      const prependedLength = isImplicitNewlinePrepended ? 1 : 0;\n      const addedLength = isImplicitNewlineAppended ? 1 : 0;\n      scrollLength += prependedLength + addedLength;\n      deleteDelta.retain(prependedLength);\n      deleteDelta.delete(addedLength);\n      return index2 + length + prependedLength + addedLength;\n    }, 0);\n    deleteDelta.reduce((index2, op) => {\n      if (typeof op.delete === \"number\") {\n        this.scroll.deleteAt(index2, op.delete);\n        return index2;\n      }\n      return index2 + DeltaExports.Op.length(op);\n    }, 0);\n    this.scroll.batchEnd();\n    this.scroll.optimize();\n    return this.update(normalizedDelta);\n  }\n  deleteText(index2, length) {\n    this.scroll.deleteAt(index2, length);\n    return this.update(new Delta().retain(index2).delete(length));\n  }\n  formatLine(index2, length) {\n    let formats = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};\n    this.scroll.update();\n    Object.keys(formats).forEach((format2) => {\n      this.scroll.lines(index2, Math.max(length, 1)).forEach((line) => {\n        line.format(format2, formats[format2]);\n      });\n    });\n    this.scroll.optimize();\n    const delta = new Delta().retain(index2).retain(length, cloneDeep(formats));\n    return this.update(delta);\n  }\n  formatText(index2, length) {\n    let formats = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};\n    Object.keys(formats).forEach((format2) => {\n      this.scroll.formatAt(index2, length, format2, formats[format2]);\n    });\n    const delta = new Delta().retain(index2).retain(length, cloneDeep(formats));\n    return this.update(delta);\n  }\n  getContents(index2, length) {\n    return this.delta.slice(index2, index2 + length);\n  }\n  getDelta() {\n    return this.scroll.lines().reduce((delta, line) => {\n      return delta.concat(line.delta());\n    }, new Delta());\n  }\n  getFormat(index2) {\n    let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;\n    let lines = [];\n    let leaves = [];\n    if (length === 0) {\n      this.scroll.path(index2).forEach((path) => {\n        const [blot] = path;\n        if (blot instanceof Block) {\n          lines.push(blot);\n        } else if (blot instanceof LeafBlot$1) {\n          leaves.push(blot);\n        }\n      });\n    } else {\n      lines = this.scroll.lines(index2, length);\n      leaves = this.scroll.descendants(LeafBlot$1, index2, length);\n    }\n    const [lineFormats, leafFormats] = [lines, leaves].map((blots) => {\n      const blot = blots.shift();\n      if (blot == null) return {};\n      let formats = bubbleFormats(blot);\n      while (Object.keys(formats).length > 0) {\n        const blot2 = blots.shift();\n        if (blot2 == null) return formats;\n        formats = combineFormats(bubbleFormats(blot2), formats);\n      }\n      return formats;\n    });\n    return {\n      ...lineFormats,\n      ...leafFormats\n    };\n  }\n  getHTML(index2, length) {\n    const [line, lineOffset] = this.scroll.line(index2);\n    if (line) {\n      const lineLength = line.length();\n      const isWithinLine = line.length() >= lineOffset + length;\n      if (isWithinLine && !(lineOffset === 0 && length === lineLength)) {\n        return convertHTML(line, lineOffset, length, true);\n      }\n      return convertHTML(this.scroll, index2, length, true);\n    }\n    return \"\";\n  }\n  getText(index2, length) {\n    return this.getContents(index2, length).filter((op) => typeof op.insert === \"string\").map((op) => op.insert).join(\"\");\n  }\n  insertContents(index2, contents) {\n    const normalizedDelta = normalizeDelta(contents);\n    const change = new Delta().retain(index2).concat(normalizedDelta);\n    this.scroll.insertContents(index2, normalizedDelta);\n    return this.update(change);\n  }\n  insertEmbed(index2, embed, value) {\n    this.scroll.insertAt(index2, embed, value);\n    return this.update(new Delta().retain(index2).insert({\n      [embed]: value\n    }));\n  }\n  insertText(index2, text2) {\n    let formats = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};\n    text2 = text2.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n    this.scroll.insertAt(index2, text2);\n    Object.keys(formats).forEach((format2) => {\n      this.scroll.formatAt(index2, text2.length, format2, formats[format2]);\n    });\n    return this.update(new Delta().retain(index2).insert(text2, cloneDeep(formats)));\n  }\n  isBlank() {\n    if (this.scroll.children.length === 0) return true;\n    if (this.scroll.children.length > 1) return false;\n    const blot = this.scroll.children.head;\n    if ((blot == null ? void 0 : blot.statics.blotName) !== Block.blotName) return false;\n    const block2 = blot;\n    if (block2.children.length > 1) return false;\n    return block2.children.head instanceof Break;\n  }\n  removeFormat(index2, length) {\n    const text2 = this.getText(index2, length);\n    const [line, offset] = this.scroll.line(index2 + length);\n    let suffixLength = 0;\n    let suffix = new Delta();\n    if (line != null) {\n      suffixLength = line.length() - offset;\n      suffix = line.delta().slice(offset, offset + suffixLength - 1).insert(\"\\n\");\n    }\n    const contents = this.getContents(index2, length + suffixLength);\n    const diff = contents.diff(new Delta().insert(text2).concat(suffix));\n    const delta = new Delta().retain(index2).concat(diff);\n    return this.applyDelta(delta);\n  }\n  update(change) {\n    let mutations = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];\n    let selectionInfo = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : void 0;\n    const oldDelta = this.delta;\n    if (mutations.length === 1 && mutations[0].type === \"characterData\" && // @ts-expect-error Fix me later\n    mutations[0].target.data.match(ASCII) && this.scroll.find(mutations[0].target)) {\n      const textBlot = this.scroll.find(mutations[0].target);\n      const formats = bubbleFormats(textBlot);\n      const index2 = textBlot.offset(this.scroll);\n      const oldValue = mutations[0].oldValue.replace(Cursor.CONTENTS, \"\");\n      const oldText = new Delta().insert(oldValue);\n      const newText = new Delta().insert(textBlot.value());\n      const relativeSelectionInfo = selectionInfo && {\n        oldRange: shiftRange$1(selectionInfo.oldRange, -index2),\n        newRange: shiftRange$1(selectionInfo.newRange, -index2)\n      };\n      const diffDelta = new Delta().retain(index2).concat(oldText.diff(newText, relativeSelectionInfo));\n      change = diffDelta.reduce((delta, op) => {\n        if (op.insert) {\n          return delta.insert(op.insert, formats);\n        }\n        return delta.push(op);\n      }, new Delta());\n      this.delta = oldDelta.compose(change);\n    } else {\n      this.delta = this.getDelta();\n      if (!change || !isEqual$1(oldDelta.compose(change), this.delta)) {\n        change = oldDelta.diff(this.delta, selectionInfo);\n      }\n    }\n    return change;\n  }\n}\nfunction convertListHTML(items, lastIndent, types) {\n  if (items.length === 0) {\n    const [endTag2] = getListType(types.pop());\n    if (lastIndent <= 0) {\n      return `</li></${endTag2}>`;\n    }\n    return `</li></${endTag2}>${convertListHTML([], lastIndent - 1, types)}`;\n  }\n  const [{\n    child,\n    offset,\n    length,\n    indent,\n    type\n  }, ...rest] = items;\n  const [tag, attribute2] = getListType(type);\n  if (indent > lastIndent) {\n    types.push(type);\n    if (indent === lastIndent + 1) {\n      return `<${tag}><li${attribute2}>${convertHTML(child, offset, length)}${convertListHTML(rest, indent, types)}`;\n    }\n    return `<${tag}><li>${convertListHTML(items, lastIndent + 1, types)}`;\n  }\n  const previousType = types[types.length - 1];\n  if (indent === lastIndent && type === previousType) {\n    return `</li><li${attribute2}>${convertHTML(child, offset, length)}${convertListHTML(rest, indent, types)}`;\n  }\n  const [endTag] = getListType(types.pop());\n  return `</li></${endTag}>${convertListHTML(items, lastIndent - 1, types)}`;\n}\nfunction convertHTML(blot, index2, length) {\n  let isRoot = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false;\n  if (\"html\" in blot && typeof blot.html === \"function\") {\n    return blot.html(index2, length);\n  }\n  if (blot instanceof Text$1) {\n    const escapedText = escapeText(blot.value().slice(index2, index2 + length));\n    return escapedText.replaceAll(\" \", \"&nbsp;\");\n  }\n  if (blot instanceof ParentBlot$1) {\n    if (blot.statics.blotName === \"list-container\") {\n      const items = [];\n      blot.children.forEachAt(index2, length, (child, offset, childLength) => {\n        const formats = \"formats\" in child && typeof child.formats === \"function\" ? child.formats() : {};\n        items.push({\n          child,\n          offset,\n          length: childLength,\n          indent: formats.indent || 0,\n          type: formats.list\n        });\n      });\n      return convertListHTML(items, -1, []);\n    }\n    const parts = [];\n    blot.children.forEachAt(index2, length, (child, offset, childLength) => {\n      parts.push(convertHTML(child, offset, childLength));\n    });\n    if (isRoot || blot.statics.blotName === \"list\") {\n      return parts.join(\"\");\n    }\n    const {\n      outerHTML,\n      innerHTML\n    } = blot.domNode;\n    const [start, end] = outerHTML.split(`>${innerHTML}<`);\n    if (start === \"<table\") {\n      return `<table style=\"border: 1px solid #000;\">${parts.join(\"\")}<${end}`;\n    }\n    return `${start}>${parts.join(\"\")}<${end}`;\n  }\n  return blot.domNode instanceof Element ? blot.domNode.outerHTML : \"\";\n}\nfunction combineFormats(formats, combined) {\n  return Object.keys(combined).reduce((merged, name) => {\n    if (formats[name] == null) return merged;\n    const combinedValue = combined[name];\n    if (combinedValue === formats[name]) {\n      merged[name] = combinedValue;\n    } else if (Array.isArray(combinedValue)) {\n      if (combinedValue.indexOf(formats[name]) < 0) {\n        merged[name] = combinedValue.concat([formats[name]]);\n      } else {\n        merged[name] = combinedValue;\n      }\n    } else {\n      merged[name] = [combinedValue, formats[name]];\n    }\n    return merged;\n  }, {});\n}\nfunction getListType(type) {\n  const tag = type === \"ordered\" ? \"ol\" : \"ul\";\n  switch (type) {\n    case \"checked\":\n      return [tag, ' data-list=\"checked\"'];\n    case \"unchecked\":\n      return [tag, ' data-list=\"unchecked\"'];\n    default:\n      return [tag, \"\"];\n  }\n}\nfunction normalizeDelta(delta) {\n  return delta.reduce((normalizedDelta, op) => {\n    if (typeof op.insert === \"string\") {\n      const text2 = op.insert.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n      return normalizedDelta.insert(text2, op.attributes);\n    }\n    return normalizedDelta.push(op);\n  }, new Delta());\n}\nfunction shiftRange$1(_ref, amount) {\n  let {\n    index: index2,\n    length\n  } = _ref;\n  return new Range$1(index2 + amount, length);\n}\nfunction splitOpLines(ops) {\n  const split = [];\n  ops.forEach((op) => {\n    if (typeof op.insert === \"string\") {\n      const lines = op.insert.split(\"\\n\");\n      lines.forEach((line, index2) => {\n        if (index2) split.push({\n          insert: \"\\n\",\n          attributes: op.attributes\n        });\n        if (line) split.push({\n          insert: line,\n          attributes: op.attributes\n        });\n      });\n    } else {\n      split.push(op);\n    }\n  });\n  return split;\n}\nclass Module {\n  constructor(quill) {\n    let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n    this.quill = quill;\n    this.options = options;\n  }\n}\n__publicField(Module, \"DEFAULTS\", {});\nconst GUARD_TEXT = \"\\uFEFF\";\nclass Embed extends EmbedBlot$1 {\n  constructor(scroll, node) {\n    super(scroll, node);\n    this.contentNode = document.createElement(\"span\");\n    this.contentNode.setAttribute(\"contenteditable\", \"false\");\n    Array.from(this.domNode.childNodes).forEach((childNode) => {\n      this.contentNode.appendChild(childNode);\n    });\n    this.leftGuard = document.createTextNode(GUARD_TEXT);\n    this.rightGuard = document.createTextNode(GUARD_TEXT);\n    this.domNode.appendChild(this.leftGuard);\n    this.domNode.appendChild(this.contentNode);\n    this.domNode.appendChild(this.rightGuard);\n  }\n  index(node, offset) {\n    if (node === this.leftGuard) return 0;\n    if (node === this.rightGuard) return 1;\n    return super.index(node, offset);\n  }\n  restore(node) {\n    let range = null;\n    let textNode;\n    const text2 = node.data.split(GUARD_TEXT).join(\"\");\n    if (node === this.leftGuard) {\n      if (this.prev instanceof Text$1) {\n        const prevLength = this.prev.length();\n        this.prev.insertAt(prevLength, text2);\n        range = {\n          startNode: this.prev.domNode,\n          startOffset: prevLength + text2.length\n        };\n      } else {\n        textNode = document.createTextNode(text2);\n        this.parent.insertBefore(this.scroll.create(textNode), this);\n        range = {\n          startNode: textNode,\n          startOffset: text2.length\n        };\n      }\n    } else if (node === this.rightGuard) {\n      if (this.next instanceof Text$1) {\n        this.next.insertAt(0, text2);\n        range = {\n          startNode: this.next.domNode,\n          startOffset: text2.length\n        };\n      } else {\n        textNode = document.createTextNode(text2);\n        this.parent.insertBefore(this.scroll.create(textNode), this.next);\n        range = {\n          startNode: textNode,\n          startOffset: text2.length\n        };\n      }\n    }\n    node.data = GUARD_TEXT;\n    return range;\n  }\n  update(mutations, context) {\n    mutations.forEach((mutation) => {\n      if (mutation.type === \"characterData\" && (mutation.target === this.leftGuard || mutation.target === this.rightGuard)) {\n        const range = this.restore(mutation.target);\n        if (range) context.range = range;\n      }\n    });\n  }\n}\nclass Composition {\n  constructor(scroll, emitter) {\n    __publicField(this, \"isComposing\", false);\n    this.scroll = scroll;\n    this.emitter = emitter;\n    this.setupListeners();\n  }\n  setupListeners() {\n    this.scroll.domNode.addEventListener(\"compositionstart\", (event) => {\n      if (!this.isComposing) {\n        this.handleCompositionStart(event);\n      }\n    });\n    this.scroll.domNode.addEventListener(\"compositionend\", (event) => {\n      if (this.isComposing) {\n        queueMicrotask(() => {\n          this.handleCompositionEnd(event);\n        });\n      }\n    });\n  }\n  handleCompositionStart(event) {\n    const blot = event.target instanceof Node ? this.scroll.find(event.target, true) : null;\n    if (blot && !(blot instanceof Embed)) {\n      this.emitter.emit(Emitter.events.COMPOSITION_BEFORE_START, event);\n      this.scroll.batchStart();\n      this.emitter.emit(Emitter.events.COMPOSITION_START, event);\n      this.isComposing = true;\n    }\n  }\n  handleCompositionEnd(event) {\n    this.emitter.emit(Emitter.events.COMPOSITION_BEFORE_END, event);\n    this.scroll.batchEnd();\n    this.emitter.emit(Emitter.events.COMPOSITION_END, event);\n    this.isComposing = false;\n  }\n}\nconst _Theme = class _Theme {\n  constructor(quill, options) {\n    __publicField(this, \"modules\", {});\n    this.quill = quill;\n    this.options = options;\n  }\n  init() {\n    Object.keys(this.options.modules).forEach((name) => {\n      if (this.modules[name] == null) {\n        this.addModule(name);\n      }\n    });\n  }\n  addModule(name) {\n    const ModuleClass = this.quill.constructor.import(`modules/${name}`);\n    this.modules[name] = new ModuleClass(this.quill, this.options.modules[name] || {});\n    return this.modules[name];\n  }\n};\n__publicField(_Theme, \"DEFAULTS\", {\n  modules: {}\n});\n__publicField(_Theme, \"themes\", {\n  default: _Theme\n});\nlet Theme = _Theme;\nconst getParentElement = (element) => element.parentElement || element.getRootNode().host || null;\nconst getElementRect = (element) => {\n  const rect = element.getBoundingClientRect();\n  const scaleX = \"offsetWidth\" in element && Math.abs(rect.width) / element.offsetWidth || 1;\n  const scaleY = \"offsetHeight\" in element && Math.abs(rect.height) / element.offsetHeight || 1;\n  return {\n    top: rect.top,\n    right: rect.left + element.clientWidth * scaleX,\n    bottom: rect.top + element.clientHeight * scaleY,\n    left: rect.left\n  };\n};\nconst paddingValueToInt = (value) => {\n  const number = parseInt(value, 10);\n  return Number.isNaN(number) ? 0 : number;\n};\nconst getScrollDistance = (targetStart, targetEnd, scrollStart, scrollEnd, scrollPaddingStart, scrollPaddingEnd) => {\n  if (targetStart < scrollStart && targetEnd > scrollEnd) {\n    return 0;\n  }\n  if (targetStart < scrollStart) {\n    return -(scrollStart - targetStart + scrollPaddingStart);\n  }\n  if (targetEnd > scrollEnd) {\n    return targetEnd - targetStart > scrollEnd - scrollStart ? targetStart + scrollPaddingStart - scrollStart : targetEnd - scrollEnd + scrollPaddingEnd;\n  }\n  return 0;\n};\nconst scrollRectIntoView = (root2, targetRect) => {\n  var _a3, _b, _c;\n  const document2 = root2.ownerDocument;\n  let rect = targetRect;\n  let current = root2;\n  while (current) {\n    const isDocumentBody = current === document2.body;\n    const bounding = isDocumentBody ? {\n      top: 0,\n      right: ((_a3 = window.visualViewport) == null ? void 0 : _a3.width) ?? document2.documentElement.clientWidth,\n      bottom: ((_b = window.visualViewport) == null ? void 0 : _b.height) ?? document2.documentElement.clientHeight,\n      left: 0\n    } : getElementRect(current);\n    const style = getComputedStyle(current);\n    const scrollDistanceX = getScrollDistance(rect.left, rect.right, bounding.left, bounding.right, paddingValueToInt(style.scrollPaddingLeft), paddingValueToInt(style.scrollPaddingRight));\n    const scrollDistanceY = getScrollDistance(rect.top, rect.bottom, bounding.top, bounding.bottom, paddingValueToInt(style.scrollPaddingTop), paddingValueToInt(style.scrollPaddingBottom));\n    if (scrollDistanceX || scrollDistanceY) {\n      if (isDocumentBody) {\n        (_c = document2.defaultView) == null ? void 0 : _c.scrollBy(scrollDistanceX, scrollDistanceY);\n      } else {\n        const {\n          scrollLeft,\n          scrollTop\n        } = current;\n        if (scrollDistanceY) {\n          current.scrollTop += scrollDistanceY;\n        }\n        if (scrollDistanceX) {\n          current.scrollLeft += scrollDistanceX;\n        }\n        const scrolledLeft = current.scrollLeft - scrollLeft;\n        const scrolledTop = current.scrollTop - scrollTop;\n        rect = {\n          left: rect.left - scrolledLeft,\n          top: rect.top - scrolledTop,\n          right: rect.right - scrolledLeft,\n          bottom: rect.bottom - scrolledTop\n        };\n      }\n    }\n    current = isDocumentBody || style.position === \"fixed\" ? null : getParentElement(current);\n  }\n};\nconst MAX_REGISTER_ITERATIONS = 100;\nconst CORE_FORMATS = [\"block\", \"break\", \"cursor\", \"inline\", \"scroll\", \"text\"];\nconst createRegistryWithFormats = (formats, sourceRegistry, debug2) => {\n  const registry = new Registry();\n  CORE_FORMATS.forEach((name) => {\n    const coreBlot = sourceRegistry.query(name);\n    if (coreBlot) registry.register(coreBlot);\n  });\n  formats.forEach((name) => {\n    let format2 = sourceRegistry.query(name);\n    if (!format2) {\n      debug2.error(`Cannot register \"${name}\" specified in \"formats\" config. Are you sure it was registered?`);\n    }\n    let iterations = 0;\n    while (format2) {\n      registry.register(format2);\n      format2 = \"blotName\" in format2 ? format2.requiredContainer ?? null : null;\n      iterations += 1;\n      if (iterations > MAX_REGISTER_ITERATIONS) {\n        debug2.error(`Cycle detected in registering blot requiredContainer: \"${name}\"`);\n        break;\n      }\n    }\n  });\n  return registry;\n};\nconst debug$3 = namespace(\"quill\");\nconst globalRegistry = new Registry();\nParentBlot$1.uiClass = \"ql-ui\";\nconst _Quill = class _Quill {\n  static debug(limit) {\n    if (limit === true) {\n      limit = \"log\";\n    }\n    namespace.level(limit);\n  }\n  static find(node) {\n    let bubble = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n    return instances.get(node) || globalRegistry.find(node, bubble);\n  }\n  static import(name) {\n    if (this.imports[name] == null) {\n      debug$3.error(`Cannot import ${name}. Are you sure it was registered?`);\n    }\n    return this.imports[name];\n  }\n  static register() {\n    if (typeof (arguments.length <= 0 ? void 0 : arguments[0]) !== \"string\") {\n      const target = arguments.length <= 0 ? void 0 : arguments[0];\n      const overwrite = !!(arguments.length <= 1 ? void 0 : arguments[1]);\n      const name = \"attrName\" in target ? target.attrName : target.blotName;\n      if (typeof name === \"string\") {\n        this.register(`formats/${name}`, target, overwrite);\n      } else {\n        Object.keys(target).forEach((key) => {\n          this.register(key, target[key], overwrite);\n        });\n      }\n    } else {\n      const path = arguments.length <= 0 ? void 0 : arguments[0];\n      const target = arguments.length <= 1 ? void 0 : arguments[1];\n      const overwrite = !!(arguments.length <= 2 ? void 0 : arguments[2]);\n      if (this.imports[path] != null && !overwrite) {\n        debug$3.warn(`Overwriting ${path} with`, target);\n      }\n      this.imports[path] = target;\n      if ((path.startsWith(\"blots/\") || path.startsWith(\"formats/\")) && target && typeof target !== \"boolean\" && target.blotName !== \"abstract\") {\n        globalRegistry.register(target);\n      }\n      if (typeof target.register === \"function\") {\n        target.register(globalRegistry);\n      }\n    }\n  }\n  constructor(container) {\n    let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n    this.options = expandConfig(container, options);\n    this.container = this.options.container;\n    if (this.container == null) {\n      debug$3.error(\"Invalid Quill container\", container);\n      return;\n    }\n    if (this.options.debug) {\n      _Quill.debug(this.options.debug);\n    }\n    const html = this.container.innerHTML.trim();\n    this.container.classList.add(\"ql-container\");\n    this.container.innerHTML = \"\";\n    instances.set(this.container, this);\n    this.root = this.addContainer(\"ql-editor\");\n    this.root.classList.add(\"ql-blank\");\n    this.emitter = new Emitter();\n    const scrollBlotName = ScrollBlot$1.blotName;\n    const ScrollBlot2 = this.options.registry.query(scrollBlotName);\n    if (!ScrollBlot2 || !(\"blotName\" in ScrollBlot2)) {\n      throw new Error(`Cannot initialize Quill without \"${scrollBlotName}\" blot`);\n    }\n    this.scroll = new ScrollBlot2(this.options.registry, this.root, {\n      emitter: this.emitter\n    });\n    this.editor = new Editor(this.scroll);\n    this.selection = new Selection(this.scroll, this.emitter);\n    this.composition = new Composition(this.scroll, this.emitter);\n    this.theme = new this.options.theme(this, this.options);\n    this.keyboard = this.theme.addModule(\"keyboard\");\n    this.clipboard = this.theme.addModule(\"clipboard\");\n    this.history = this.theme.addModule(\"history\");\n    this.uploader = this.theme.addModule(\"uploader\");\n    this.theme.addModule(\"input\");\n    this.theme.addModule(\"uiNode\");\n    this.theme.init();\n    this.emitter.on(Emitter.events.EDITOR_CHANGE, (type) => {\n      if (type === Emitter.events.TEXT_CHANGE) {\n        this.root.classList.toggle(\"ql-blank\", this.editor.isBlank());\n      }\n    });\n    this.emitter.on(Emitter.events.SCROLL_UPDATE, (source, mutations) => {\n      const oldRange = this.selection.lastRange;\n      const [newRange] = this.selection.getRange();\n      const selectionInfo = oldRange && newRange ? {\n        oldRange,\n        newRange\n      } : void 0;\n      modify.call(this, () => this.editor.update(null, mutations, selectionInfo), source);\n    });\n    this.emitter.on(Emitter.events.SCROLL_EMBED_UPDATE, (blot, delta) => {\n      const oldRange = this.selection.lastRange;\n      const [newRange] = this.selection.getRange();\n      const selectionInfo = oldRange && newRange ? {\n        oldRange,\n        newRange\n      } : void 0;\n      modify.call(this, () => {\n        const change = new Delta().retain(blot.offset(this)).retain({\n          [blot.statics.blotName]: delta\n        });\n        return this.editor.update(change, [], selectionInfo);\n      }, _Quill.sources.USER);\n    });\n    if (html) {\n      const contents = this.clipboard.convert({\n        html: `${html}<p><br></p>`,\n        text: \"\\n\"\n      });\n      this.setContents(contents);\n    }\n    this.history.clear();\n    if (this.options.placeholder) {\n      this.root.setAttribute(\"data-placeholder\", this.options.placeholder);\n    }\n    if (this.options.readOnly) {\n      this.disable();\n    }\n    this.allowReadOnlyEdits = false;\n  }\n  addContainer(container) {\n    let refNode = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;\n    if (typeof container === \"string\") {\n      const className = container;\n      container = document.createElement(\"div\");\n      container.classList.add(className);\n    }\n    this.container.insertBefore(container, refNode);\n    return container;\n  }\n  blur() {\n    this.selection.setRange(null);\n  }\n  deleteText(index2, length, source) {\n    [index2, length, , source] = overload(index2, length, source);\n    return modify.call(this, () => {\n      return this.editor.deleteText(index2, length);\n    }, source, index2, -1 * length);\n  }\n  disable() {\n    this.enable(false);\n  }\n  editReadOnly(modifier) {\n    this.allowReadOnlyEdits = true;\n    const value = modifier();\n    this.allowReadOnlyEdits = false;\n    return value;\n  }\n  enable() {\n    let enabled = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;\n    this.scroll.enable(enabled);\n    this.container.classList.toggle(\"ql-disabled\", !enabled);\n  }\n  focus() {\n    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n    this.selection.focus();\n    if (!options.preventScroll) {\n      this.scrollSelectionIntoView();\n    }\n  }\n  format(name, value) {\n    let source = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Emitter.sources.API;\n    return modify.call(this, () => {\n      const range = this.getSelection(true);\n      let change = new Delta();\n      if (range == null) return change;\n      if (this.scroll.query(name, Scope.BLOCK)) {\n        change = this.editor.formatLine(range.index, range.length, {\n          [name]: value\n        });\n      } else if (range.length === 0) {\n        this.selection.format(name, value);\n        return change;\n      } else {\n        change = this.editor.formatText(range.index, range.length, {\n          [name]: value\n        });\n      }\n      this.setSelection(range, Emitter.sources.SILENT);\n      return change;\n    }, source);\n  }\n  formatLine(index2, length, name, value, source) {\n    let formats;\n    [index2, length, formats, source] = overload(\n      index2,\n      length,\n      // @ts-expect-error\n      name,\n      value,\n      source\n    );\n    return modify.call(this, () => {\n      return this.editor.formatLine(index2, length, formats);\n    }, source, index2, 0);\n  }\n  formatText(index2, length, name, value, source) {\n    let formats;\n    [index2, length, formats, source] = overload(\n      // @ts-expect-error\n      index2,\n      length,\n      name,\n      value,\n      source\n    );\n    return modify.call(this, () => {\n      return this.editor.formatText(index2, length, formats);\n    }, source, index2, 0);\n  }\n  getBounds(index2) {\n    let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;\n    let bounds = null;\n    if (typeof index2 === \"number\") {\n      bounds = this.selection.getBounds(index2, length);\n    } else {\n      bounds = this.selection.getBounds(index2.index, index2.length);\n    }\n    if (!bounds) return null;\n    const containerBounds = this.container.getBoundingClientRect();\n    return {\n      bottom: bounds.bottom - containerBounds.top,\n      height: bounds.height,\n      left: bounds.left - containerBounds.left,\n      right: bounds.right - containerBounds.left,\n      top: bounds.top - containerBounds.top,\n      width: bounds.width\n    };\n  }\n  getContents() {\n    let index2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;\n    let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this.getLength() - index2;\n    [index2, length] = overload(index2, length);\n    return this.editor.getContents(index2, length);\n  }\n  getFormat() {\n    let index2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this.getSelection(true);\n    let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;\n    if (typeof index2 === \"number\") {\n      return this.editor.getFormat(index2, length);\n    }\n    return this.editor.getFormat(index2.index, index2.length);\n  }\n  getIndex(blot) {\n    return blot.offset(this.scroll);\n  }\n  getLength() {\n    return this.scroll.length();\n  }\n  getLeaf(index2) {\n    return this.scroll.leaf(index2);\n  }\n  getLine(index2) {\n    return this.scroll.line(index2);\n  }\n  getLines() {\n    let index2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;\n    let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Number.MAX_VALUE;\n    if (typeof index2 !== \"number\") {\n      return this.scroll.lines(index2.index, index2.length);\n    }\n    return this.scroll.lines(index2, length);\n  }\n  getModule(name) {\n    return this.theme.modules[name];\n  }\n  getSelection() {\n    let focus = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;\n    if (focus) this.focus();\n    this.update();\n    return this.selection.getRange()[0];\n  }\n  getSemanticHTML() {\n    let index2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;\n    let length = arguments.length > 1 ? arguments[1] : void 0;\n    if (typeof index2 === \"number\") {\n      length = length ?? this.getLength() - index2;\n    }\n    [index2, length] = overload(index2, length);\n    return this.editor.getHTML(index2, length);\n  }\n  getText() {\n    let index2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;\n    let length = arguments.length > 1 ? arguments[1] : void 0;\n    if (typeof index2 === \"number\") {\n      length = length ?? this.getLength() - index2;\n    }\n    [index2, length] = overload(index2, length);\n    return this.editor.getText(index2, length);\n  }\n  hasFocus() {\n    return this.selection.hasFocus();\n  }\n  insertEmbed(index2, embed, value) {\n    let source = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : _Quill.sources.API;\n    return modify.call(this, () => {\n      return this.editor.insertEmbed(index2, embed, value);\n    }, source, index2);\n  }\n  insertText(index2, text2, name, value, source) {\n    let formats;\n    [index2, , formats, source] = overload(index2, 0, name, value, source);\n    return modify.call(this, () => {\n      return this.editor.insertText(index2, text2, formats);\n    }, source, index2, text2.length);\n  }\n  isEnabled() {\n    return this.scroll.isEnabled();\n  }\n  off() {\n    return this.emitter.off(...arguments);\n  }\n  on() {\n    return this.emitter.on(...arguments);\n  }\n  once() {\n    return this.emitter.once(...arguments);\n  }\n  removeFormat(index2, length, source) {\n    [index2, length, , source] = overload(index2, length, source);\n    return modify.call(this, () => {\n      return this.editor.removeFormat(index2, length);\n    }, source, index2);\n  }\n  scrollRectIntoView(rect) {\n    scrollRectIntoView(this.root, rect);\n  }\n  /**\n   * @deprecated Use Quill#scrollSelectionIntoView() instead.\n   */\n  scrollIntoView() {\n    console.warn(\"Quill#scrollIntoView() has been deprecated and will be removed in the near future. Please use Quill#scrollSelectionIntoView() instead.\");\n    this.scrollSelectionIntoView();\n  }\n  /**\n   * Scroll the current selection into the visible area.\n   * If the selection is already visible, no scrolling will occur.\n   */\n  scrollSelectionIntoView() {\n    const range = this.selection.lastRange;\n    const bounds = range && this.selection.getBounds(range.index, range.length);\n    if (bounds) {\n      this.scrollRectIntoView(bounds);\n    }\n  }\n  setContents(delta) {\n    let source = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Emitter.sources.API;\n    return modify.call(this, () => {\n      delta = new Delta(delta);\n      const length = this.getLength();\n      const delete1 = this.editor.deleteText(0, length);\n      const applied = this.editor.insertContents(0, delta);\n      const delete2 = this.editor.deleteText(this.getLength() - 1, 1);\n      return delete1.compose(applied).compose(delete2);\n    }, source);\n  }\n  setSelection(index2, length, source) {\n    if (index2 == null) {\n      this.selection.setRange(null, length || _Quill.sources.API);\n    } else {\n      [index2, length, , source] = overload(index2, length, source);\n      this.selection.setRange(new Range$1(Math.max(0, index2), length), source);\n      if (source !== Emitter.sources.SILENT) {\n        this.scrollSelectionIntoView();\n      }\n    }\n  }\n  setText(text2) {\n    let source = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Emitter.sources.API;\n    const delta = new Delta().insert(text2);\n    return this.setContents(delta, source);\n  }\n  update() {\n    let source = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : Emitter.sources.USER;\n    const change = this.scroll.update(source);\n    this.selection.update(source);\n    return change;\n  }\n  updateContents(delta) {\n    let source = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Emitter.sources.API;\n    return modify.call(this, () => {\n      delta = new Delta(delta);\n      return this.editor.applyDelta(delta);\n    }, source, true);\n  }\n};\n__publicField(_Quill, \"DEFAULTS\", {\n  bounds: null,\n  modules: {\n    clipboard: true,\n    keyboard: true,\n    history: true,\n    uploader: true\n  },\n  placeholder: \"\",\n  readOnly: false,\n  registry: globalRegistry,\n  theme: \"default\"\n});\n__publicField(_Quill, \"events\", Emitter.events);\n__publicField(_Quill, \"sources\", Emitter.sources);\n__publicField(_Quill, \"version\", \"2.0.3\");\n__publicField(_Quill, \"imports\", {\n  delta: Delta,\n  parchment: Parchment,\n  \"core/module\": Module,\n  \"core/theme\": Theme\n});\nlet Quill = _Quill;\nfunction resolveSelector(selector) {\n  return typeof selector === \"string\" ? document.querySelector(selector) : selector;\n}\nfunction expandModuleConfig(config2) {\n  return Object.entries(config2 ?? {}).reduce((expanded, _ref) => {\n    let [key, value] = _ref;\n    return {\n      ...expanded,\n      [key]: value === true ? {} : value\n    };\n  }, {});\n}\nfunction omitUndefinedValuesFromOptions(obj) {\n  return Object.fromEntries(Object.entries(obj).filter((entry) => entry[1] !== void 0));\n}\nfunction expandConfig(containerOrSelector, options) {\n  const container = resolveSelector(containerOrSelector);\n  if (!container) {\n    throw new Error(\"Invalid Quill container\");\n  }\n  const shouldUseDefaultTheme = !options.theme || options.theme === Quill.DEFAULTS.theme;\n  const theme2 = shouldUseDefaultTheme ? Theme : Quill.import(`themes/${options.theme}`);\n  if (!theme2) {\n    throw new Error(`Invalid theme ${options.theme}. Did you register it?`);\n  }\n  const {\n    modules: quillModuleDefaults,\n    ...quillDefaults\n  } = Quill.DEFAULTS;\n  const {\n    modules: themeModuleDefaults,\n    ...themeDefaults\n  } = theme2.DEFAULTS;\n  let userModuleOptions = expandModuleConfig(options.modules);\n  if (userModuleOptions != null && userModuleOptions.toolbar && userModuleOptions.toolbar.constructor !== Object) {\n    userModuleOptions = {\n      ...userModuleOptions,\n      toolbar: {\n        container: userModuleOptions.toolbar\n      }\n    };\n  }\n  const modules = merge({}, expandModuleConfig(quillModuleDefaults), expandModuleConfig(themeModuleDefaults), userModuleOptions);\n  const config2 = {\n    ...quillDefaults,\n    ...omitUndefinedValuesFromOptions(themeDefaults),\n    ...omitUndefinedValuesFromOptions(options)\n  };\n  let registry = options.registry;\n  if (registry) {\n    if (options.formats) {\n      debug$3.warn('Ignoring \"formats\" option because \"registry\" is specified');\n    }\n  } else {\n    registry = options.formats ? createRegistryWithFormats(options.formats, config2.registry, debug$3) : config2.registry;\n  }\n  return {\n    ...config2,\n    registry,\n    container,\n    theme: theme2,\n    modules: Object.entries(modules).reduce((modulesWithDefaults, _ref2) => {\n      let [name, value] = _ref2;\n      if (!value) return modulesWithDefaults;\n      const moduleClass = Quill.import(`modules/${name}`);\n      if (moduleClass == null) {\n        debug$3.error(`Cannot load ${name} module. Are you sure you registered it?`);\n        return modulesWithDefaults;\n      }\n      return {\n        ...modulesWithDefaults,\n        // @ts-expect-error\n        [name]: merge({}, moduleClass.DEFAULTS || {}, value)\n      };\n    }, {}),\n    bounds: resolveSelector(config2.bounds)\n  };\n}\nfunction modify(modifier, source, index2, shift) {\n  if (!this.isEnabled() && source === Emitter.sources.USER && !this.allowReadOnlyEdits) {\n    return new Delta();\n  }\n  let range = index2 == null ? null : this.getSelection();\n  const oldDelta = this.editor.delta;\n  const change = modifier();\n  if (range != null) {\n    if (index2 === true) {\n      index2 = range.index;\n    }\n    if (shift == null) {\n      range = shiftRange(range, change, source);\n    } else if (shift !== 0) {\n      range = shiftRange(range, index2, shift, source);\n    }\n    this.setSelection(range, Emitter.sources.SILENT);\n  }\n  if (change.length() > 0) {\n    const args = [Emitter.events.TEXT_CHANGE, change, oldDelta, source];\n    this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n    if (source !== Emitter.sources.SILENT) {\n      this.emitter.emit(...args);\n    }\n  }\n  return change;\n}\nfunction overload(index2, length, name, value, source) {\n  let formats = {};\n  if (typeof index2.index === \"number\" && typeof index2.length === \"number\") {\n    if (typeof length !== \"number\") {\n      source = value;\n      value = name;\n      name = length;\n      length = index2.length;\n      index2 = index2.index;\n    } else {\n      length = index2.length;\n      index2 = index2.index;\n    }\n  } else if (typeof length !== \"number\") {\n    source = value;\n    value = name;\n    name = length;\n    length = 0;\n  }\n  if (typeof name === \"object\") {\n    formats = name;\n    source = value;\n  } else if (typeof name === \"string\") {\n    if (value != null) {\n      formats[name] = value;\n    } else {\n      source = name;\n    }\n  }\n  source = source || Emitter.sources.API;\n  return [index2, length, formats, source];\n}\nfunction shiftRange(range, index2, lengthOrSource, source) {\n  const length = typeof lengthOrSource === \"number\" ? lengthOrSource : 0;\n  if (range == null) return null;\n  let start;\n  let end;\n  if (index2 && typeof index2.transformPosition === \"function\") {\n    [start, end] = [range.index, range.index + range.length].map((pos) => (\n      // @ts-expect-error -- TODO: add a better type guard around `index`\n      index2.transformPosition(pos, source !== Emitter.sources.USER)\n    ));\n  } else {\n    [start, end] = [range.index, range.index + range.length].map((pos) => {\n      if (pos < index2 || pos === index2 && source === Emitter.sources.USER) return pos;\n      if (length >= 0) {\n        return pos + length;\n      }\n      return Math.max(index2, pos + length);\n    });\n  }\n  return new Range$1(start, end - start);\n}\nclass Container extends ContainerBlot$1 {\n}\nfunction isLine$1(blot) {\n  return blot instanceof Block || blot instanceof BlockEmbed;\n}\nfunction isUpdatable(blot) {\n  return typeof blot.updateContent === \"function\";\n}\nclass Scroll extends ScrollBlot$1 {\n  constructor(registry, domNode, _ref) {\n    let {\n      emitter\n    } = _ref;\n    super(registry, domNode);\n    this.emitter = emitter;\n    this.batch = false;\n    this.optimize();\n    this.enable();\n    this.domNode.addEventListener(\"dragstart\", (e2) => this.handleDragStart(e2));\n  }\n  batchStart() {\n    if (!Array.isArray(this.batch)) {\n      this.batch = [];\n    }\n  }\n  batchEnd() {\n    if (!this.batch) return;\n    const mutations = this.batch;\n    this.batch = false;\n    this.update(mutations);\n  }\n  emitMount(blot) {\n    this.emitter.emit(Emitter.events.SCROLL_BLOT_MOUNT, blot);\n  }\n  emitUnmount(blot) {\n    this.emitter.emit(Emitter.events.SCROLL_BLOT_UNMOUNT, blot);\n  }\n  emitEmbedUpdate(blot, change) {\n    this.emitter.emit(Emitter.events.SCROLL_EMBED_UPDATE, blot, change);\n  }\n  deleteAt(index2, length) {\n    const [first, offset] = this.line(index2);\n    const [last] = this.line(index2 + length);\n    super.deleteAt(index2, length);\n    if (last != null && first !== last && offset > 0) {\n      if (first instanceof BlockEmbed || last instanceof BlockEmbed) {\n        this.optimize();\n        return;\n      }\n      const ref = last.children.head instanceof Break ? null : last.children.head;\n      first.moveChildren(last, ref);\n      first.remove();\n    }\n    this.optimize();\n  }\n  enable() {\n    let enabled = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;\n    this.domNode.setAttribute(\"contenteditable\", enabled ? \"true\" : \"false\");\n  }\n  formatAt(index2, length, format2, value) {\n    super.formatAt(index2, length, format2, value);\n    this.optimize();\n  }\n  insertAt(index2, value, def) {\n    if (index2 >= this.length()) {\n      if (def == null || this.scroll.query(value, Scope.BLOCK) == null) {\n        const blot = this.scroll.create(this.statics.defaultChild.blotName);\n        this.appendChild(blot);\n        if (def == null && value.endsWith(\"\\n\")) {\n          blot.insertAt(0, value.slice(0, -1), def);\n        } else {\n          blot.insertAt(0, value, def);\n        }\n      } else {\n        const embed = this.scroll.create(value, def);\n        this.appendChild(embed);\n      }\n    } else {\n      super.insertAt(index2, value, def);\n    }\n    this.optimize();\n  }\n  insertBefore(blot, ref) {\n    if (blot.statics.scope === Scope.INLINE_BLOT) {\n      const wrapper = this.scroll.create(this.statics.defaultChild.blotName);\n      wrapper.appendChild(blot);\n      super.insertBefore(wrapper, ref);\n    } else {\n      super.insertBefore(blot, ref);\n    }\n  }\n  insertContents(index2, delta) {\n    const renderBlocks = this.deltaToRenderBlocks(delta.concat(new Delta().insert(\"\\n\")));\n    const last = renderBlocks.pop();\n    if (last == null) return;\n    this.batchStart();\n    const first = renderBlocks.shift();\n    if (first) {\n      const shouldInsertNewlineChar = first.type === \"block\" && (first.delta.length() === 0 || !this.descendant(BlockEmbed, index2)[0] && index2 < this.length());\n      const delta2 = first.type === \"block\" ? first.delta : new Delta().insert({\n        [first.key]: first.value\n      });\n      insertInlineContents(this, index2, delta2);\n      const newlineCharLength = first.type === \"block\" ? 1 : 0;\n      const lineEndIndex = index2 + delta2.length() + newlineCharLength;\n      if (shouldInsertNewlineChar) {\n        this.insertAt(lineEndIndex - 1, \"\\n\");\n      }\n      const formats = bubbleFormats(this.line(index2)[0]);\n      const attributes = DeltaExports.AttributeMap.diff(formats, first.attributes) || {};\n      Object.keys(attributes).forEach((name) => {\n        this.formatAt(lineEndIndex - 1, 1, name, attributes[name]);\n      });\n      index2 = lineEndIndex;\n    }\n    let [refBlot, refBlotOffset] = this.children.find(index2);\n    if (renderBlocks.length) {\n      if (refBlot) {\n        refBlot = refBlot.split(refBlotOffset);\n        refBlotOffset = 0;\n      }\n      renderBlocks.forEach((renderBlock) => {\n        if (renderBlock.type === \"block\") {\n          const block2 = this.createBlock(renderBlock.attributes, refBlot || void 0);\n          insertInlineContents(block2, 0, renderBlock.delta);\n        } else {\n          const blockEmbed = this.create(renderBlock.key, renderBlock.value);\n          this.insertBefore(blockEmbed, refBlot || void 0);\n          Object.keys(renderBlock.attributes).forEach((name) => {\n            blockEmbed.format(name, renderBlock.attributes[name]);\n          });\n        }\n      });\n    }\n    if (last.type === \"block\" && last.delta.length()) {\n      const offset = refBlot ? refBlot.offset(refBlot.scroll) + refBlotOffset : this.length();\n      insertInlineContents(this, offset, last.delta);\n    }\n    this.batchEnd();\n    this.optimize();\n  }\n  isEnabled() {\n    return this.domNode.getAttribute(\"contenteditable\") === \"true\";\n  }\n  leaf(index2) {\n    const last = this.path(index2).pop();\n    if (!last) {\n      return [null, -1];\n    }\n    const [blot, offset] = last;\n    return blot instanceof LeafBlot$1 ? [blot, offset] : [null, -1];\n  }\n  line(index2) {\n    if (index2 === this.length()) {\n      return this.line(index2 - 1);\n    }\n    return this.descendant(isLine$1, index2);\n  }\n  lines() {\n    let index2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;\n    let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Number.MAX_VALUE;\n    const getLines2 = (blot, blotIndex, blotLength) => {\n      let lines = [];\n      let lengthLeft = blotLength;\n      blot.children.forEachAt(blotIndex, blotLength, (child, childIndex, childLength) => {\n        if (isLine$1(child)) {\n          lines.push(child);\n        } else if (child instanceof ContainerBlot$1) {\n          lines = lines.concat(getLines2(child, childIndex, lengthLeft));\n        }\n        lengthLeft -= childLength;\n      });\n      return lines;\n    };\n    return getLines2(this, index2, length);\n  }\n  optimize() {\n    let mutations = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];\n    let context = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n    if (this.batch) return;\n    super.optimize(mutations, context);\n    if (mutations.length > 0) {\n      this.emitter.emit(Emitter.events.SCROLL_OPTIMIZE, mutations, context);\n    }\n  }\n  path(index2) {\n    return super.path(index2).slice(1);\n  }\n  remove() {\n  }\n  update(mutations) {\n    if (this.batch) {\n      if (Array.isArray(mutations)) {\n        this.batch = this.batch.concat(mutations);\n      }\n      return;\n    }\n    let source = Emitter.sources.USER;\n    if (typeof mutations === \"string\") {\n      source = mutations;\n    }\n    if (!Array.isArray(mutations)) {\n      mutations = this.observer.takeRecords();\n    }\n    mutations = mutations.filter((_ref2) => {\n      let {\n        target\n      } = _ref2;\n      const blot = this.find(target, true);\n      return blot && !isUpdatable(blot);\n    });\n    if (mutations.length > 0) {\n      this.emitter.emit(Emitter.events.SCROLL_BEFORE_UPDATE, source, mutations);\n    }\n    super.update(mutations.concat([]));\n    if (mutations.length > 0) {\n      this.emitter.emit(Emitter.events.SCROLL_UPDATE, source, mutations);\n    }\n  }\n  updateEmbedAt(index2, key, change) {\n    const [blot] = this.descendant((b2) => b2 instanceof BlockEmbed, index2);\n    if (blot && blot.statics.blotName === key && isUpdatable(blot)) {\n      blot.updateContent(change);\n    }\n  }\n  handleDragStart(event) {\n    event.preventDefault();\n  }\n  deltaToRenderBlocks(delta) {\n    const renderBlocks = [];\n    let currentBlockDelta = new Delta();\n    delta.forEach((op) => {\n      const insert = op == null ? void 0 : op.insert;\n      if (!insert) return;\n      if (typeof insert === \"string\") {\n        const splitted = insert.split(\"\\n\");\n        splitted.slice(0, -1).forEach((text2) => {\n          currentBlockDelta.insert(text2, op.attributes);\n          renderBlocks.push({\n            type: \"block\",\n            delta: currentBlockDelta,\n            attributes: op.attributes ?? {}\n          });\n          currentBlockDelta = new Delta();\n        });\n        const last = splitted[splitted.length - 1];\n        if (last) {\n          currentBlockDelta.insert(last, op.attributes);\n        }\n      } else {\n        const key = Object.keys(insert)[0];\n        if (!key) return;\n        if (this.query(key, Scope.INLINE)) {\n          currentBlockDelta.push(op);\n        } else {\n          if (currentBlockDelta.length()) {\n            renderBlocks.push({\n              type: \"block\",\n              delta: currentBlockDelta,\n              attributes: {}\n            });\n          }\n          currentBlockDelta = new Delta();\n          renderBlocks.push({\n            type: \"blockEmbed\",\n            key,\n            value: insert[key],\n            attributes: op.attributes ?? {}\n          });\n        }\n      }\n    });\n    if (currentBlockDelta.length()) {\n      renderBlocks.push({\n        type: \"block\",\n        delta: currentBlockDelta,\n        attributes: {}\n      });\n    }\n    return renderBlocks;\n  }\n  createBlock(attributes, refBlot) {\n    let blotName;\n    const formats = {};\n    Object.entries(attributes).forEach((_ref3) => {\n      let [key, value] = _ref3;\n      const isBlockBlot = this.query(key, Scope.BLOCK & Scope.BLOT) != null;\n      if (isBlockBlot) {\n        blotName = key;\n      } else {\n        formats[key] = value;\n      }\n    });\n    const block2 = this.create(blotName || this.statics.defaultChild.blotName, blotName ? attributes[blotName] : void 0);\n    this.insertBefore(block2, refBlot || void 0);\n    const length = block2.length();\n    Object.entries(formats).forEach((_ref4) => {\n      let [key, value] = _ref4;\n      block2.formatAt(0, length, key, value);\n    });\n    return block2;\n  }\n}\n__publicField(Scroll, \"blotName\", \"scroll\");\n__publicField(Scroll, \"className\", \"ql-editor\");\n__publicField(Scroll, \"tagName\", \"DIV\");\n__publicField(Scroll, \"defaultChild\", Block);\n__publicField(Scroll, \"allowedChildren\", [Block, BlockEmbed, Container]);\nfunction insertInlineContents(parent, index2, inlineContents) {\n  inlineContents.reduce((index3, op) => {\n    const length = DeltaExports.Op.length(op);\n    let attributes = op.attributes || {};\n    if (op.insert != null) {\n      if (typeof op.insert === \"string\") {\n        const text2 = op.insert;\n        parent.insertAt(index3, text2);\n        const [leaf] = parent.descendant(LeafBlot$1, index3);\n        const formats = bubbleFormats(leaf);\n        attributes = DeltaExports.AttributeMap.diff(formats, attributes) || {};\n      } else if (typeof op.insert === \"object\") {\n        const key = Object.keys(op.insert)[0];\n        if (key == null) return index3;\n        parent.insertAt(index3, key, op.insert[key]);\n        const isInlineEmbed = parent.scroll.query(key, Scope.INLINE) != null;\n        if (isInlineEmbed) {\n          const [leaf] = parent.descendant(LeafBlot$1, index3);\n          const formats = bubbleFormats(leaf);\n          attributes = DeltaExports.AttributeMap.diff(formats, attributes) || {};\n        }\n      }\n    }\n    Object.keys(attributes).forEach((key) => {\n      parent.formatAt(index3, length, key, attributes[key]);\n    });\n    return index3 + length;\n  }, index2);\n}\nconst config$2 = {\n  scope: Scope.BLOCK,\n  whitelist: [\"right\", \"center\", \"justify\"]\n};\nconst AlignAttribute = new Attributor(\"align\", \"align\", config$2);\nconst AlignClass = new ClassAttributor$1(\"align\", \"ql-align\", config$2);\nconst AlignStyle = new StyleAttributor$1(\"align\", \"text-align\", config$2);\nclass ColorAttributor extends StyleAttributor$1 {\n  value(domNode) {\n    let value = super.value(domNode);\n    if (!value.startsWith(\"rgb(\")) return value;\n    value = value.replace(/^[^\\d]+/, \"\").replace(/[^\\d]+$/, \"\");\n    const hex = value.split(\",\").map((component) => `00${parseInt(component, 10).toString(16)}`.slice(-2)).join(\"\");\n    return `#${hex}`;\n  }\n}\nconst ColorClass = new ClassAttributor$1(\"color\", \"ql-color\", {\n  scope: Scope.INLINE\n});\nconst ColorStyle = new ColorAttributor(\"color\", \"color\", {\n  scope: Scope.INLINE\n});\nconst BackgroundClass = new ClassAttributor$1(\"background\", \"ql-bg\", {\n  scope: Scope.INLINE\n});\nconst BackgroundStyle = new ColorAttributor(\"background\", \"background-color\", {\n  scope: Scope.INLINE\n});\nclass CodeBlockContainer extends Container {\n  static create(value) {\n    const domNode = super.create(value);\n    domNode.setAttribute(\"spellcheck\", \"false\");\n    return domNode;\n  }\n  code(index2, length) {\n    return this.children.map((child) => child.length() <= 1 ? \"\" : child.domNode.innerText).join(\"\\n\").slice(index2, index2 + length);\n  }\n  html(index2, length) {\n    return `<pre>\n${escapeText(this.code(index2, length))}\n</pre>`;\n  }\n}\nclass CodeBlock extends Block {\n  static register() {\n    Quill.register(CodeBlockContainer);\n  }\n}\n__publicField(CodeBlock, \"TAB\", \"  \");\nclass Code extends Inline {\n}\nCode.blotName = \"code\";\nCode.tagName = \"CODE\";\nCodeBlock.blotName = \"code-block\";\nCodeBlock.className = \"ql-code-block\";\nCodeBlock.tagName = \"DIV\";\nCodeBlockContainer.blotName = \"code-block-container\";\nCodeBlockContainer.className = \"ql-code-block-container\";\nCodeBlockContainer.tagName = \"DIV\";\nCodeBlockContainer.allowedChildren = [CodeBlock];\nCodeBlock.allowedChildren = [Text$1, Break, Cursor];\nCodeBlock.requiredContainer = CodeBlockContainer;\nconst config$1 = {\n  scope: Scope.BLOCK,\n  whitelist: [\"rtl\"]\n};\nconst DirectionAttribute = new Attributor(\"direction\", \"dir\", config$1);\nconst DirectionClass = new ClassAttributor$1(\"direction\", \"ql-direction\", config$1);\nconst DirectionStyle = new StyleAttributor$1(\"direction\", \"direction\", config$1);\nconst config = {\n  scope: Scope.INLINE,\n  whitelist: [\"serif\", \"monospace\"]\n};\nconst FontClass = new ClassAttributor$1(\"font\", \"ql-font\", config);\nclass FontStyleAttributor extends StyleAttributor$1 {\n  value(node) {\n    return super.value(node).replace(/[\"']/g, \"\");\n  }\n}\nconst FontStyle = new FontStyleAttributor(\"font\", \"font-family\", config);\nconst SizeClass = new ClassAttributor$1(\"size\", \"ql-size\", {\n  scope: Scope.INLINE,\n  whitelist: [\"small\", \"large\", \"huge\"]\n});\nconst SizeStyle = new StyleAttributor$1(\"size\", \"font-size\", {\n  scope: Scope.INLINE,\n  whitelist: [\"10px\", \"18px\", \"32px\"]\n});\nconst debug$2 = namespace(\"quill:keyboard\");\nconst SHORTKEY = /Mac/i.test(navigator.platform) ? \"metaKey\" : \"ctrlKey\";\nclass Keyboard extends Module {\n  static match(evt, binding) {\n    if ([\"altKey\", \"ctrlKey\", \"metaKey\", \"shiftKey\"].some((key) => {\n      return !!binding[key] !== evt[key] && binding[key] !== null;\n    })) {\n      return false;\n    }\n    return binding.key === evt.key || binding.key === evt.which;\n  }\n  constructor(quill, options) {\n    super(quill, options);\n    this.bindings = {};\n    Object.keys(this.options.bindings).forEach((name) => {\n      if (this.options.bindings[name]) {\n        this.addBinding(this.options.bindings[name]);\n      }\n    });\n    this.addBinding({\n      key: \"Enter\",\n      shiftKey: null\n    }, this.handleEnter);\n    this.addBinding({\n      key: \"Enter\",\n      metaKey: null,\n      ctrlKey: null,\n      altKey: null\n    }, () => {\n    });\n    if (/Firefox/i.test(navigator.userAgent)) {\n      this.addBinding({\n        key: \"Backspace\"\n      }, {\n        collapsed: true\n      }, this.handleBackspace);\n      this.addBinding({\n        key: \"Delete\"\n      }, {\n        collapsed: true\n      }, this.handleDelete);\n    } else {\n      this.addBinding({\n        key: \"Backspace\"\n      }, {\n        collapsed: true,\n        prefix: /^.?$/\n      }, this.handleBackspace);\n      this.addBinding({\n        key: \"Delete\"\n      }, {\n        collapsed: true,\n        suffix: /^.?$/\n      }, this.handleDelete);\n    }\n    this.addBinding({\n      key: \"Backspace\"\n    }, {\n      collapsed: false\n    }, this.handleDeleteRange);\n    this.addBinding({\n      key: \"Delete\"\n    }, {\n      collapsed: false\n    }, this.handleDeleteRange);\n    this.addBinding({\n      key: \"Backspace\",\n      altKey: null,\n      ctrlKey: null,\n      metaKey: null,\n      shiftKey: null\n    }, {\n      collapsed: true,\n      offset: 0\n    }, this.handleBackspace);\n    this.listen();\n  }\n  addBinding(keyBinding) {\n    let context = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n    let handler = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};\n    const binding = normalize$2(keyBinding);\n    if (binding == null) {\n      debug$2.warn(\"Attempted to add invalid keyboard binding\", binding);\n      return;\n    }\n    if (typeof context === \"function\") {\n      context = {\n        handler: context\n      };\n    }\n    if (typeof handler === \"function\") {\n      handler = {\n        handler\n      };\n    }\n    const keys2 = Array.isArray(binding.key) ? binding.key : [binding.key];\n    keys2.forEach((key) => {\n      const singleBinding = {\n        ...binding,\n        key,\n        ...context,\n        ...handler\n      };\n      this.bindings[singleBinding.key] = this.bindings[singleBinding.key] || [];\n      this.bindings[singleBinding.key].push(singleBinding);\n    });\n  }\n  listen() {\n    this.quill.root.addEventListener(\"keydown\", (evt) => {\n      if (evt.defaultPrevented || evt.isComposing) return;\n      const isComposing = evt.keyCode === 229 && (evt.key === \"Enter\" || evt.key === \"Backspace\");\n      if (isComposing) return;\n      const bindings = (this.bindings[evt.key] || []).concat(this.bindings[evt.which] || []);\n      const matches = bindings.filter((binding) => Keyboard.match(evt, binding));\n      if (matches.length === 0) return;\n      const blot = Quill.find(evt.target, true);\n      if (blot && blot.scroll !== this.quill.scroll) return;\n      const range = this.quill.getSelection();\n      if (range == null || !this.quill.hasFocus()) return;\n      const [line, offset] = this.quill.getLine(range.index);\n      const [leafStart, offsetStart] = this.quill.getLeaf(range.index);\n      const [leafEnd, offsetEnd] = range.length === 0 ? [leafStart, offsetStart] : this.quill.getLeaf(range.index + range.length);\n      const prefixText = leafStart instanceof TextBlot$1 ? leafStart.value().slice(0, offsetStart) : \"\";\n      const suffixText = leafEnd instanceof TextBlot$1 ? leafEnd.value().slice(offsetEnd) : \"\";\n      const curContext = {\n        collapsed: range.length === 0,\n        // @ts-expect-error Fix me later\n        empty: range.length === 0 && line.length() <= 1,\n        format: this.quill.getFormat(range),\n        line,\n        offset,\n        prefix: prefixText,\n        suffix: suffixText,\n        event: evt\n      };\n      const prevented = matches.some((binding) => {\n        if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) {\n          return false;\n        }\n        if (binding.empty != null && binding.empty !== curContext.empty) {\n          return false;\n        }\n        if (binding.offset != null && binding.offset !== curContext.offset) {\n          return false;\n        }\n        if (Array.isArray(binding.format)) {\n          if (binding.format.every((name) => curContext.format[name] == null)) {\n            return false;\n          }\n        } else if (typeof binding.format === \"object\") {\n          if (!Object.keys(binding.format).every((name) => {\n            if (binding.format[name] === true) return curContext.format[name] != null;\n            if (binding.format[name] === false) return curContext.format[name] == null;\n            return isEqual$1(binding.format[name], curContext.format[name]);\n          })) {\n            return false;\n          }\n        }\n        if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) {\n          return false;\n        }\n        if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) {\n          return false;\n        }\n        return binding.handler.call(this, range, curContext, binding) !== true;\n      });\n      if (prevented) {\n        evt.preventDefault();\n      }\n    });\n  }\n  handleBackspace(range, context) {\n    const length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix) ? 2 : 1;\n    if (range.index === 0 || this.quill.getLength() <= 1) return;\n    let formats = {};\n    const [line] = this.quill.getLine(range.index);\n    let delta = new Delta().retain(range.index - length).delete(length);\n    if (context.offset === 0) {\n      const [prev] = this.quill.getLine(range.index - 1);\n      if (prev) {\n        const isPrevLineEmpty = prev.statics.blotName === \"block\" && prev.length() <= 1;\n        if (!isPrevLineEmpty) {\n          const curFormats = line.formats();\n          const prevFormats = this.quill.getFormat(range.index - 1, 1);\n          formats = DeltaExports.AttributeMap.diff(curFormats, prevFormats) || {};\n          if (Object.keys(formats).length > 0) {\n            const formatDelta = new Delta().retain(range.index + line.length() - 2).retain(1, formats);\n            delta = delta.compose(formatDelta);\n          }\n        }\n      }\n    }\n    this.quill.updateContents(delta, Quill.sources.USER);\n    this.quill.focus();\n  }\n  handleDelete(range, context) {\n    const length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix) ? 2 : 1;\n    if (range.index >= this.quill.getLength() - length) return;\n    let formats = {};\n    const [line] = this.quill.getLine(range.index);\n    let delta = new Delta().retain(range.index).delete(length);\n    if (context.offset >= line.length() - 1) {\n      const [next] = this.quill.getLine(range.index + 1);\n      if (next) {\n        const curFormats = line.formats();\n        const nextFormats = this.quill.getFormat(range.index, 1);\n        formats = DeltaExports.AttributeMap.diff(curFormats, nextFormats) || {};\n        if (Object.keys(formats).length > 0) {\n          delta = delta.retain(next.length() - 1).retain(1, formats);\n        }\n      }\n    }\n    this.quill.updateContents(delta, Quill.sources.USER);\n    this.quill.focus();\n  }\n  handleDeleteRange(range) {\n    deleteRange({\n      range,\n      quill: this.quill\n    });\n    this.quill.focus();\n  }\n  handleEnter(range, context) {\n    const lineFormats = Object.keys(context.format).reduce((formats, format2) => {\n      if (this.quill.scroll.query(format2, Scope.BLOCK) && !Array.isArray(context.format[format2])) {\n        formats[format2] = context.format[format2];\n      }\n      return formats;\n    }, {});\n    const delta = new Delta().retain(range.index).delete(range.length).insert(\"\\n\", lineFormats);\n    this.quill.updateContents(delta, Quill.sources.USER);\n    this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n    this.quill.focus();\n  }\n}\nconst defaultOptions = {\n  bindings: {\n    bold: makeFormatHandler(\"bold\"),\n    italic: makeFormatHandler(\"italic\"),\n    underline: makeFormatHandler(\"underline\"),\n    indent: {\n      // highlight tab or tab at beginning of list, indent or blockquote\n      key: \"Tab\",\n      format: [\"blockquote\", \"indent\", \"list\"],\n      handler(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format(\"indent\", \"+1\", Quill.sources.USER);\n        return false;\n      }\n    },\n    outdent: {\n      key: \"Tab\",\n      shiftKey: true,\n      format: [\"blockquote\", \"indent\", \"list\"],\n      // highlight tab or tab at beginning of list, indent or blockquote\n      handler(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format(\"indent\", \"-1\", Quill.sources.USER);\n        return false;\n      }\n    },\n    \"outdent backspace\": {\n      key: \"Backspace\",\n      collapsed: true,\n      shiftKey: null,\n      metaKey: null,\n      ctrlKey: null,\n      altKey: null,\n      format: [\"indent\", \"list\"],\n      offset: 0,\n      handler(range, context) {\n        if (context.format.indent != null) {\n          this.quill.format(\"indent\", \"-1\", Quill.sources.USER);\n        } else if (context.format.list != null) {\n          this.quill.format(\"list\", false, Quill.sources.USER);\n        }\n      }\n    },\n    \"indent code-block\": makeCodeBlockHandler(true),\n    \"outdent code-block\": makeCodeBlockHandler(false),\n    \"remove tab\": {\n      key: \"Tab\",\n      shiftKey: true,\n      collapsed: true,\n      prefix: /\\t$/,\n      handler(range) {\n        this.quill.deleteText(range.index - 1, 1, Quill.sources.USER);\n      }\n    },\n    tab: {\n      key: \"Tab\",\n      handler(range, context) {\n        if (context.format.table) return true;\n        this.quill.history.cutoff();\n        const delta = new Delta().retain(range.index).delete(range.length).insert(\"\t\");\n        this.quill.updateContents(delta, Quill.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n        return false;\n      }\n    },\n    \"blockquote empty enter\": {\n      key: \"Enter\",\n      collapsed: true,\n      format: [\"blockquote\"],\n      empty: true,\n      handler() {\n        this.quill.format(\"blockquote\", false, Quill.sources.USER);\n      }\n    },\n    \"list empty enter\": {\n      key: \"Enter\",\n      collapsed: true,\n      format: [\"list\"],\n      empty: true,\n      handler(range, context) {\n        const formats = {\n          list: false\n        };\n        if (context.format.indent) {\n          formats.indent = false;\n        }\n        this.quill.formatLine(range.index, range.length, formats, Quill.sources.USER);\n      }\n    },\n    \"checklist enter\": {\n      key: \"Enter\",\n      collapsed: true,\n      format: {\n        list: \"checked\"\n      },\n      handler(range) {\n        const [line, offset] = this.quill.getLine(range.index);\n        const formats = {\n          // @ts-expect-error Fix me later\n          ...line.formats(),\n          list: \"checked\"\n        };\n        const delta = new Delta().retain(range.index).insert(\"\\n\", formats).retain(line.length() - offset - 1).retain(1, {\n          list: \"unchecked\"\n        });\n        this.quill.updateContents(delta, Quill.sources.USER);\n        this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n        this.quill.scrollSelectionIntoView();\n      }\n    },\n    \"header enter\": {\n      key: \"Enter\",\n      collapsed: true,\n      format: [\"header\"],\n      suffix: /^$/,\n      handler(range, context) {\n        const [line, offset] = this.quill.getLine(range.index);\n        const delta = new Delta().retain(range.index).insert(\"\\n\", context.format).retain(line.length() - offset - 1).retain(1, {\n          header: null\n        });\n        this.quill.updateContents(delta, Quill.sources.USER);\n        this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n        this.quill.scrollSelectionIntoView();\n      }\n    },\n    \"table backspace\": {\n      key: \"Backspace\",\n      format: [\"table\"],\n      collapsed: true,\n      offset: 0,\n      handler() {\n      }\n    },\n    \"table delete\": {\n      key: \"Delete\",\n      format: [\"table\"],\n      collapsed: true,\n      suffix: /^$/,\n      handler() {\n      }\n    },\n    \"table enter\": {\n      key: \"Enter\",\n      shiftKey: null,\n      format: [\"table\"],\n      handler(range) {\n        const module2 = this.quill.getModule(\"table\");\n        if (module2) {\n          const [table2, row, cell, offset] = module2.getTable(range);\n          const shift = tableSide(table2, row, cell, offset);\n          if (shift == null) return;\n          let index2 = table2.offset();\n          if (shift < 0) {\n            const delta = new Delta().retain(index2).insert(\"\\n\");\n            this.quill.updateContents(delta, Quill.sources.USER);\n            this.quill.setSelection(range.index + 1, range.length, Quill.sources.SILENT);\n          } else if (shift > 0) {\n            index2 += table2.length();\n            const delta = new Delta().retain(index2).insert(\"\\n\");\n            this.quill.updateContents(delta, Quill.sources.USER);\n            this.quill.setSelection(index2, Quill.sources.USER);\n          }\n        }\n      }\n    },\n    \"table tab\": {\n      key: \"Tab\",\n      shiftKey: null,\n      format: [\"table\"],\n      handler(range, context) {\n        const {\n          event,\n          line: cell\n        } = context;\n        const offset = cell.offset(this.quill.scroll);\n        if (event.shiftKey) {\n          this.quill.setSelection(offset - 1, Quill.sources.USER);\n        } else {\n          this.quill.setSelection(offset + cell.length(), Quill.sources.USER);\n        }\n      }\n    },\n    \"list autofill\": {\n      key: \" \",\n      shiftKey: null,\n      collapsed: true,\n      format: {\n        \"code-block\": false,\n        blockquote: false,\n        table: false\n      },\n      prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n      handler(range, context) {\n        if (this.quill.scroll.query(\"list\") == null) return true;\n        const {\n          length\n        } = context.prefix;\n        const [line, offset] = this.quill.getLine(range.index);\n        if (offset > length) return true;\n        let value;\n        switch (context.prefix.trim()) {\n          case \"[]\":\n          case \"[ ]\":\n            value = \"unchecked\";\n            break;\n          case \"[x]\":\n            value = \"checked\";\n            break;\n          case \"-\":\n          case \"*\":\n            value = \"bullet\";\n            break;\n          default:\n            value = \"ordered\";\n        }\n        this.quill.insertText(range.index, \" \", Quill.sources.USER);\n        this.quill.history.cutoff();\n        const delta = new Delta().retain(range.index - offset).delete(length + 1).retain(line.length() - 2 - offset).retain(1, {\n          list: value\n        });\n        this.quill.updateContents(delta, Quill.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index - length, Quill.sources.SILENT);\n        return false;\n      }\n    },\n    \"code exit\": {\n      key: \"Enter\",\n      collapsed: true,\n      format: [\"code-block\"],\n      prefix: /^$/,\n      suffix: /^\\s*$/,\n      handler(range) {\n        const [line, offset] = this.quill.getLine(range.index);\n        let numLines = 2;\n        let cur = line;\n        while (cur != null && cur.length() <= 1 && cur.formats()[\"code-block\"]) {\n          cur = cur.prev;\n          numLines -= 1;\n          if (numLines <= 0) {\n            const delta = new Delta().retain(range.index + line.length() - offset - 2).retain(1, {\n              \"code-block\": null\n            }).delete(1);\n            this.quill.updateContents(delta, Quill.sources.USER);\n            this.quill.setSelection(range.index - 1, Quill.sources.SILENT);\n            return false;\n          }\n        }\n        return true;\n      }\n    },\n    \"embed left\": makeEmbedArrowHandler(\"ArrowLeft\", false),\n    \"embed left shift\": makeEmbedArrowHandler(\"ArrowLeft\", true),\n    \"embed right\": makeEmbedArrowHandler(\"ArrowRight\", false),\n    \"embed right shift\": makeEmbedArrowHandler(\"ArrowRight\", true),\n    \"table down\": makeTableArrowHandler(false),\n    \"table up\": makeTableArrowHandler(true)\n  }\n};\nKeyboard.DEFAULTS = defaultOptions;\nfunction makeCodeBlockHandler(indent) {\n  return {\n    key: \"Tab\",\n    shiftKey: !indent,\n    format: {\n      \"code-block\": true\n    },\n    handler(range, _ref) {\n      let {\n        event\n      } = _ref;\n      const CodeBlock2 = this.quill.scroll.query(\"code-block\");\n      const {\n        TAB\n      } = CodeBlock2;\n      if (range.length === 0 && !event.shiftKey) {\n        this.quill.insertText(range.index, TAB, Quill.sources.USER);\n        this.quill.setSelection(range.index + TAB.length, Quill.sources.SILENT);\n        return;\n      }\n      const lines = range.length === 0 ? this.quill.getLines(range.index, 1) : this.quill.getLines(range);\n      let {\n        index: index2,\n        length\n      } = range;\n      lines.forEach((line, i3) => {\n        if (indent) {\n          line.insertAt(0, TAB);\n          if (i3 === 0) {\n            index2 += TAB.length;\n          } else {\n            length += TAB.length;\n          }\n        } else if (line.domNode.textContent.startsWith(TAB)) {\n          line.deleteAt(0, TAB.length);\n          if (i3 === 0) {\n            index2 -= TAB.length;\n          } else {\n            length -= TAB.length;\n          }\n        }\n      });\n      this.quill.update(Quill.sources.USER);\n      this.quill.setSelection(index2, length, Quill.sources.SILENT);\n    }\n  };\n}\nfunction makeEmbedArrowHandler(key, shiftKey) {\n  const where = key === \"ArrowLeft\" ? \"prefix\" : \"suffix\";\n  return {\n    key,\n    shiftKey,\n    altKey: null,\n    [where]: /^$/,\n    handler(range) {\n      let {\n        index: index2\n      } = range;\n      if (key === \"ArrowRight\") {\n        index2 += range.length + 1;\n      }\n      const [leaf] = this.quill.getLeaf(index2);\n      if (!(leaf instanceof EmbedBlot$1)) return true;\n      if (key === \"ArrowLeft\") {\n        if (shiftKey) {\n          this.quill.setSelection(range.index - 1, range.length + 1, Quill.sources.USER);\n        } else {\n          this.quill.setSelection(range.index - 1, Quill.sources.USER);\n        }\n      } else if (shiftKey) {\n        this.quill.setSelection(range.index, range.length + 1, Quill.sources.USER);\n      } else {\n        this.quill.setSelection(range.index + range.length + 1, Quill.sources.USER);\n      }\n      return false;\n    }\n  };\n}\nfunction makeFormatHandler(format2) {\n  return {\n    key: format2[0],\n    shortKey: true,\n    handler(range, context) {\n      this.quill.format(format2, !context.format[format2], Quill.sources.USER);\n    }\n  };\n}\nfunction makeTableArrowHandler(up) {\n  return {\n    key: up ? \"ArrowUp\" : \"ArrowDown\",\n    collapsed: true,\n    format: [\"table\"],\n    handler(range, context) {\n      const key = up ? \"prev\" : \"next\";\n      const cell = context.line;\n      const targetRow = cell.parent[key];\n      if (targetRow != null) {\n        if (targetRow.statics.blotName === \"table-row\") {\n          let targetCell = targetRow.children.head;\n          let cur = cell;\n          while (cur.prev != null) {\n            cur = cur.prev;\n            targetCell = targetCell.next;\n          }\n          const index2 = targetCell.offset(this.quill.scroll) + Math.min(context.offset, targetCell.length() - 1);\n          this.quill.setSelection(index2, 0, Quill.sources.USER);\n        }\n      } else {\n        const targetLine = cell.table()[key];\n        if (targetLine != null) {\n          if (up) {\n            this.quill.setSelection(targetLine.offset(this.quill.scroll) + targetLine.length() - 1, 0, Quill.sources.USER);\n          } else {\n            this.quill.setSelection(targetLine.offset(this.quill.scroll), 0, Quill.sources.USER);\n          }\n        }\n      }\n      return false;\n    }\n  };\n}\nfunction normalize$2(binding) {\n  if (typeof binding === \"string\" || typeof binding === \"number\") {\n    binding = {\n      key: binding\n    };\n  } else if (typeof binding === \"object\") {\n    binding = cloneDeep(binding);\n  } else {\n    return null;\n  }\n  if (binding.shortKey) {\n    binding[SHORTKEY] = binding.shortKey;\n    delete binding.shortKey;\n  }\n  return binding;\n}\nfunction deleteRange(_ref2) {\n  let {\n    quill,\n    range\n  } = _ref2;\n  const lines = quill.getLines(range);\n  let formats = {};\n  if (lines.length > 1) {\n    const firstFormats = lines[0].formats();\n    const lastFormats = lines[lines.length - 1].formats();\n    formats = DeltaExports.AttributeMap.diff(lastFormats, firstFormats) || {};\n  }\n  quill.deleteText(range, Quill.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    quill.formatLine(range.index, 1, formats, Quill.sources.USER);\n  }\n  quill.setSelection(range.index, Quill.sources.SILENT);\n}\nfunction tableSide(_table, row, cell, offset) {\n  if (row.prev == null && row.next == null) {\n    if (cell.prev == null && cell.next == null) {\n      return offset === 0 ? -1 : 1;\n    }\n    return cell.prev == null ? -1 : 1;\n  }\n  if (row.prev == null) {\n    return -1;\n  }\n  if (row.next == null) {\n    return 1;\n  }\n  return null;\n}\nconst normalWeightRegexp = /font-weight:\\s*normal/;\nconst blockTagNames = [\"P\", \"OL\", \"UL\"];\nconst isBlockElement = (element) => {\n  return element && blockTagNames.includes(element.tagName);\n};\nconst normalizeEmptyLines = (doc) => {\n  Array.from(doc.querySelectorAll(\"br\")).filter((br) => isBlockElement(br.previousElementSibling) && isBlockElement(br.nextElementSibling)).forEach((br) => {\n    var _a3;\n    (_a3 = br.parentNode) == null ? void 0 : _a3.removeChild(br);\n  });\n};\nconst normalizeFontWeight = (doc) => {\n  Array.from(doc.querySelectorAll('b[style*=\"font-weight\"]')).filter((node) => {\n    var _a3;\n    return (_a3 = node.getAttribute(\"style\")) == null ? void 0 : _a3.match(normalWeightRegexp);\n  }).forEach((node) => {\n    var _a3;\n    const fragment = doc.createDocumentFragment();\n    fragment.append(...node.childNodes);\n    (_a3 = node.parentNode) == null ? void 0 : _a3.replaceChild(fragment, node);\n  });\n};\nfunction normalize$1(doc) {\n  if (doc.querySelector('[id^=\"docs-internal-guid-\"]')) {\n    normalizeFontWeight(doc);\n    normalizeEmptyLines(doc);\n  }\n}\nconst ignoreRegexp = /\\bmso-list:[^;]*ignore/i;\nconst idRegexp = /\\bmso-list:[^;]*\\bl(\\d+)/i;\nconst indentRegexp = /\\bmso-list:[^;]*\\blevel(\\d+)/i;\nconst parseListItem = (element, html) => {\n  const style = element.getAttribute(\"style\");\n  const idMatch = style == null ? void 0 : style.match(idRegexp);\n  if (!idMatch) {\n    return null;\n  }\n  const id = Number(idMatch[1]);\n  const indentMatch = style == null ? void 0 : style.match(indentRegexp);\n  const indent = indentMatch ? Number(indentMatch[1]) : 1;\n  const typeRegexp = new RegExp(`@list l${id}:level${indent}\\\\s*\\\\{[^\\\\}]*mso-level-number-format:\\\\s*([\\\\w-]+)`, \"i\");\n  const typeMatch = html.match(typeRegexp);\n  const type = typeMatch && typeMatch[1] === \"bullet\" ? \"bullet\" : \"ordered\";\n  return {\n    id,\n    indent,\n    type,\n    element\n  };\n};\nconst normalizeListItem = (doc) => {\n  var _a3, _b;\n  const msoList = Array.from(doc.querySelectorAll(\"[style*=mso-list]\"));\n  const ignored = [];\n  const others = [];\n  msoList.forEach((node) => {\n    const shouldIgnore = (node.getAttribute(\"style\") || \"\").match(ignoreRegexp);\n    if (shouldIgnore) {\n      ignored.push(node);\n    } else {\n      others.push(node);\n    }\n  });\n  ignored.forEach((node) => {\n    var _a4;\n    return (_a4 = node.parentNode) == null ? void 0 : _a4.removeChild(node);\n  });\n  const html = doc.documentElement.innerHTML;\n  const listItems = others.map((element) => parseListItem(element, html)).filter((parsed) => parsed);\n  while (listItems.length) {\n    const childListItems = [];\n    let current = listItems.shift();\n    while (current) {\n      childListItems.push(current);\n      current = listItems.length && ((_a3 = listItems[0]) == null ? void 0 : _a3.element) === current.element.nextElementSibling && // Different id means the next item doesn't belong to this group.\n      listItems[0].id === current.id ? listItems.shift() : null;\n    }\n    const ul = document.createElement(\"ul\");\n    childListItems.forEach((listItem) => {\n      const li = document.createElement(\"li\");\n      li.setAttribute(\"data-list\", listItem.type);\n      if (listItem.indent > 1) {\n        li.setAttribute(\"class\", `ql-indent-${listItem.indent - 1}`);\n      }\n      li.innerHTML = listItem.element.innerHTML;\n      ul.appendChild(li);\n    });\n    const element = (_b = childListItems[0]) == null ? void 0 : _b.element;\n    const {\n      parentNode\n    } = element ?? {};\n    if (element) {\n      parentNode == null ? void 0 : parentNode.replaceChild(ul, element);\n    }\n    childListItems.slice(1).forEach((_ref) => {\n      let {\n        element: e2\n      } = _ref;\n      parentNode == null ? void 0 : parentNode.removeChild(e2);\n    });\n  }\n};\nfunction normalize2(doc) {\n  if (doc.documentElement.getAttribute(\"xmlns:w\") === \"urn:schemas-microsoft-com:office:word\") {\n    normalizeListItem(doc);\n  }\n}\nconst NORMALIZERS = [normalize2, normalize$1];\nconst normalizeExternalHTML = (doc) => {\n  if (doc.documentElement) {\n    NORMALIZERS.forEach((normalize3) => {\n      normalize3(doc);\n    });\n  }\n};\nconst debug$1 = namespace(\"quill:clipboard\");\nconst CLIPBOARD_CONFIG = [[Node.TEXT_NODE, matchText], [Node.TEXT_NODE, matchNewline], [\"br\", matchBreak], [Node.ELEMENT_NODE, matchNewline], [Node.ELEMENT_NODE, matchBlot], [Node.ELEMENT_NODE, matchAttributor], [Node.ELEMENT_NODE, matchStyles], [\"li\", matchIndent], [\"ol, ul\", matchList], [\"pre\", matchCodeBlock], [\"tr\", matchTable], [\"b\", createMatchAlias(\"bold\")], [\"i\", createMatchAlias(\"italic\")], [\"strike\", createMatchAlias(\"strike\")], [\"style\", matchIgnore]];\nconst ATTRIBUTE_ATTRIBUTORS = [AlignAttribute, DirectionAttribute].reduce((memo, attr) => {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\nconst STYLE_ATTRIBUTORS = [AlignStyle, BackgroundStyle, ColorStyle, DirectionStyle, FontStyle, SizeStyle].reduce((memo, attr) => {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\nclass Clipboard extends Module {\n  constructor(quill, options) {\n    super(quill, options);\n    this.quill.root.addEventListener(\"copy\", (e2) => this.onCaptureCopy(e2, false));\n    this.quill.root.addEventListener(\"cut\", (e2) => this.onCaptureCopy(e2, true));\n    this.quill.root.addEventListener(\"paste\", this.onCapturePaste.bind(this));\n    this.matchers = [];\n    CLIPBOARD_CONFIG.concat(this.options.matchers ?? []).forEach((_ref) => {\n      let [selector, matcher] = _ref;\n      this.addMatcher(selector, matcher);\n    });\n  }\n  addMatcher(selector, matcher) {\n    this.matchers.push([selector, matcher]);\n  }\n  convert(_ref2) {\n    let {\n      html,\n      text: text2\n    } = _ref2;\n    let formats = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n    if (formats[CodeBlock.blotName]) {\n      return new Delta().insert(text2 || \"\", {\n        [CodeBlock.blotName]: formats[CodeBlock.blotName]\n      });\n    }\n    if (!html) {\n      return new Delta().insert(text2 || \"\", formats);\n    }\n    const delta = this.convertHTML(html);\n    if (deltaEndsWith(delta, \"\\n\") && (delta.ops[delta.ops.length - 1].attributes == null || formats.table)) {\n      return delta.compose(new Delta().retain(delta.length() - 1).delete(1));\n    }\n    return delta;\n  }\n  normalizeHTML(doc) {\n    normalizeExternalHTML(doc);\n  }\n  convertHTML(html) {\n    const doc = new DOMParser().parseFromString(html, \"text/html\");\n    this.normalizeHTML(doc);\n    const container = doc.body;\n    const nodeMatches = /* @__PURE__ */ new WeakMap();\n    const [elementMatchers, textMatchers] = this.prepareMatching(container, nodeMatches);\n    return traverse(this.quill.scroll, container, elementMatchers, textMatchers, nodeMatches);\n  }\n  dangerouslyPasteHTML(index2, html) {\n    let source = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Quill.sources.API;\n    if (typeof index2 === \"string\") {\n      const delta = this.convert({\n        html: index2,\n        text: \"\"\n      });\n      this.quill.setContents(delta, html);\n      this.quill.setSelection(0, Quill.sources.SILENT);\n    } else {\n      const paste = this.convert({\n        html,\n        text: \"\"\n      });\n      this.quill.updateContents(new Delta().retain(index2).concat(paste), source);\n      this.quill.setSelection(index2 + paste.length(), Quill.sources.SILENT);\n    }\n  }\n  onCaptureCopy(e2) {\n    var _a3, _b;\n    let isCut = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n    if (e2.defaultPrevented) return;\n    e2.preventDefault();\n    const [range] = this.quill.selection.getRange();\n    if (range == null) return;\n    const {\n      html,\n      text: text2\n    } = this.onCopy(range, isCut);\n    (_a3 = e2.clipboardData) == null ? void 0 : _a3.setData(\"text/plain\", text2);\n    (_b = e2.clipboardData) == null ? void 0 : _b.setData(\"text/html\", html);\n    if (isCut) {\n      deleteRange({\n        range,\n        quill: this.quill\n      });\n    }\n  }\n  /*\n   * https://www.iana.org/assignments/media-types/text/uri-list\n   */\n  normalizeURIList(urlList) {\n    return urlList.split(/\\r?\\n/).filter((url2) => url2[0] !== \"#\").join(\"\\n\");\n  }\n  onCapturePaste(e2) {\n    var _a3, _b, _c, _d, _e;\n    if (e2.defaultPrevented || !this.quill.isEnabled()) return;\n    e2.preventDefault();\n    const range = this.quill.getSelection(true);\n    if (range == null) return;\n    const html = (_a3 = e2.clipboardData) == null ? void 0 : _a3.getData(\"text/html\");\n    let text2 = (_b = e2.clipboardData) == null ? void 0 : _b.getData(\"text/plain\");\n    if (!html && !text2) {\n      const urlList = (_c = e2.clipboardData) == null ? void 0 : _c.getData(\"text/uri-list\");\n      if (urlList) {\n        text2 = this.normalizeURIList(urlList);\n      }\n    }\n    const files = Array.from(((_d = e2.clipboardData) == null ? void 0 : _d.files) || []);\n    if (!html && files.length > 0) {\n      this.quill.uploader.upload(range, files);\n      return;\n    }\n    if (html && files.length > 0) {\n      const doc = new DOMParser().parseFromString(html, \"text/html\");\n      if (doc.body.childElementCount === 1 && ((_e = doc.body.firstElementChild) == null ? void 0 : _e.tagName) === \"IMG\") {\n        this.quill.uploader.upload(range, files);\n        return;\n      }\n    }\n    this.onPaste(range, {\n      html,\n      text: text2\n    });\n  }\n  onCopy(range) {\n    const text2 = this.quill.getText(range);\n    const html = this.quill.getSemanticHTML(range);\n    return {\n      html,\n      text: text2\n    };\n  }\n  onPaste(range, _ref3) {\n    let {\n      text: text2,\n      html\n    } = _ref3;\n    const formats = this.quill.getFormat(range.index);\n    const pastedDelta = this.convert({\n      text: text2,\n      html\n    }, formats);\n    debug$1.log(\"onPaste\", pastedDelta, {\n      text: text2,\n      html\n    });\n    const delta = new Delta().retain(range.index).delete(range.length).concat(pastedDelta);\n    this.quill.updateContents(delta, Quill.sources.USER);\n    this.quill.setSelection(delta.length() - range.length, Quill.sources.SILENT);\n    this.quill.scrollSelectionIntoView();\n  }\n  prepareMatching(container, nodeMatches) {\n    const elementMatchers = [];\n    const textMatchers = [];\n    this.matchers.forEach((pair) => {\n      const [selector, matcher] = pair;\n      switch (selector) {\n        case Node.TEXT_NODE:\n          textMatchers.push(matcher);\n          break;\n        case Node.ELEMENT_NODE:\n          elementMatchers.push(matcher);\n          break;\n        default:\n          Array.from(container.querySelectorAll(selector)).forEach((node) => {\n            if (nodeMatches.has(node)) {\n              const matches = nodeMatches.get(node);\n              matches == null ? void 0 : matches.push(matcher);\n            } else {\n              nodeMatches.set(node, [matcher]);\n            }\n          });\n          break;\n      }\n    });\n    return [elementMatchers, textMatchers];\n  }\n}\n__publicField(Clipboard, \"DEFAULTS\", {\n  matchers: []\n});\nfunction applyFormat(delta, format2, value, scroll) {\n  if (!scroll.query(format2)) {\n    return delta;\n  }\n  return delta.reduce((newDelta, op) => {\n    if (!op.insert) return newDelta;\n    if (op.attributes && op.attributes[format2]) {\n      return newDelta.push(op);\n    }\n    const formats = value ? {\n      [format2]: value\n    } : {};\n    return newDelta.insert(op.insert, {\n      ...formats,\n      ...op.attributes\n    });\n  }, new Delta());\n}\nfunction deltaEndsWith(delta, text2) {\n  let endText = \"\";\n  for (let i3 = delta.ops.length - 1; i3 >= 0 && endText.length < text2.length; --i3) {\n    const op = delta.ops[i3];\n    if (typeof op.insert !== \"string\") break;\n    endText = op.insert + endText;\n  }\n  return endText.slice(-1 * text2.length) === text2;\n}\nfunction isLine(node, scroll) {\n  if (!(node instanceof Element)) return false;\n  const match3 = scroll.query(node);\n  if (match3 && match3.prototype instanceof EmbedBlot$1) return false;\n  return [\"address\", \"article\", \"blockquote\", \"canvas\", \"dd\", \"div\", \"dl\", \"dt\", \"fieldset\", \"figcaption\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"header\", \"iframe\", \"li\", \"main\", \"nav\", \"ol\", \"output\", \"p\", \"pre\", \"section\", \"table\", \"td\", \"tr\", \"ul\", \"video\"].includes(node.tagName.toLowerCase());\n}\nfunction isBetweenInlineElements(node, scroll) {\n  return node.previousElementSibling && node.nextElementSibling && !isLine(node.previousElementSibling, scroll) && !isLine(node.nextElementSibling, scroll);\n}\nconst preNodes = /* @__PURE__ */ new WeakMap();\nfunction isPre(node) {\n  if (node == null) return false;\n  if (!preNodes.has(node)) {\n    if (node.tagName === \"PRE\") {\n      preNodes.set(node, true);\n    } else {\n      preNodes.set(node, isPre(node.parentNode));\n    }\n  }\n  return preNodes.get(node);\n}\nfunction traverse(scroll, node, elementMatchers, textMatchers, nodeMatches) {\n  if (node.nodeType === node.TEXT_NODE) {\n    return textMatchers.reduce((delta, matcher) => {\n      return matcher(node, delta, scroll);\n    }, new Delta());\n  }\n  if (node.nodeType === node.ELEMENT_NODE) {\n    return Array.from(node.childNodes || []).reduce((delta, childNode) => {\n      let childrenDelta = traverse(scroll, childNode, elementMatchers, textMatchers, nodeMatches);\n      if (childNode.nodeType === node.ELEMENT_NODE) {\n        childrenDelta = elementMatchers.reduce((reducedDelta, matcher) => {\n          return matcher(childNode, reducedDelta, scroll);\n        }, childrenDelta);\n        childrenDelta = (nodeMatches.get(childNode) || []).reduce((reducedDelta, matcher) => {\n          return matcher(childNode, reducedDelta, scroll);\n        }, childrenDelta);\n      }\n      return delta.concat(childrenDelta);\n    }, new Delta());\n  }\n  return new Delta();\n}\nfunction createMatchAlias(format2) {\n  return (_node, delta, scroll) => {\n    return applyFormat(delta, format2, true, scroll);\n  };\n}\nfunction matchAttributor(node, delta, scroll) {\n  const attributes = Attributor.keys(node);\n  const classes = ClassAttributor$1.keys(node);\n  const styles = StyleAttributor$1.keys(node);\n  const formats = {};\n  attributes.concat(classes).concat(styles).forEach((name) => {\n    let attr = scroll.query(name, Scope.ATTRIBUTE);\n    if (attr != null) {\n      formats[attr.attrName] = attr.value(node);\n      if (formats[attr.attrName]) return;\n    }\n    attr = ATTRIBUTE_ATTRIBUTORS[name];\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      formats[attr.attrName] = attr.value(node) || void 0;\n    }\n    attr = STYLE_ATTRIBUTORS[name];\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      attr = STYLE_ATTRIBUTORS[name];\n      formats[attr.attrName] = attr.value(node) || void 0;\n    }\n  });\n  return Object.entries(formats).reduce((newDelta, _ref4) => {\n    let [name, value] = _ref4;\n    return applyFormat(newDelta, name, value, scroll);\n  }, delta);\n}\nfunction matchBlot(node, delta, scroll) {\n  const match3 = scroll.query(node);\n  if (match3 == null) return delta;\n  if (match3.prototype instanceof EmbedBlot$1) {\n    const embed = {};\n    const value = match3.value(node);\n    if (value != null) {\n      embed[match3.blotName] = value;\n      return new Delta().insert(embed, match3.formats(node, scroll));\n    }\n  } else {\n    if (match3.prototype instanceof BlockBlot$1 && !deltaEndsWith(delta, \"\\n\")) {\n      delta.insert(\"\\n\");\n    }\n    if (\"blotName\" in match3 && \"formats\" in match3 && typeof match3.formats === \"function\") {\n      return applyFormat(delta, match3.blotName, match3.formats(node, scroll), scroll);\n    }\n  }\n  return delta;\n}\nfunction matchBreak(node, delta) {\n  if (!deltaEndsWith(delta, \"\\n\")) {\n    delta.insert(\"\\n\");\n  }\n  return delta;\n}\nfunction matchCodeBlock(node, delta, scroll) {\n  const match3 = scroll.query(\"code-block\");\n  const language = match3 && \"formats\" in match3 && typeof match3.formats === \"function\" ? match3.formats(node, scroll) : true;\n  return applyFormat(delta, \"code-block\", language, scroll);\n}\nfunction matchIgnore() {\n  return new Delta();\n}\nfunction matchIndent(node, delta, scroll) {\n  const match3 = scroll.query(node);\n  if (match3 == null || // @ts-expect-error\n  match3.blotName !== \"list\" || !deltaEndsWith(delta, \"\\n\")) {\n    return delta;\n  }\n  let indent = -1;\n  let parent = node.parentNode;\n  while (parent != null) {\n    if ([\"OL\", \"UL\"].includes(parent.tagName)) {\n      indent += 1;\n    }\n    parent = parent.parentNode;\n  }\n  if (indent <= 0) return delta;\n  return delta.reduce((composed, op) => {\n    if (!op.insert) return composed;\n    if (op.attributes && typeof op.attributes.indent === \"number\") {\n      return composed.push(op);\n    }\n    return composed.insert(op.insert, {\n      indent,\n      ...op.attributes || {}\n    });\n  }, new Delta());\n}\nfunction matchList(node, delta, scroll) {\n  const element = node;\n  let list2 = element.tagName === \"OL\" ? \"ordered\" : \"bullet\";\n  const checkedAttr = element.getAttribute(\"data-checked\");\n  if (checkedAttr) {\n    list2 = checkedAttr === \"true\" ? \"checked\" : \"unchecked\";\n  }\n  return applyFormat(delta, \"list\", list2, scroll);\n}\nfunction matchNewline(node, delta, scroll) {\n  if (!deltaEndsWith(delta, \"\\n\")) {\n    if (isLine(node, scroll) && (node.childNodes.length > 0 || node instanceof HTMLParagraphElement)) {\n      return delta.insert(\"\\n\");\n    }\n    if (delta.length() > 0 && node.nextSibling) {\n      let nextSibling = node.nextSibling;\n      while (nextSibling != null) {\n        if (isLine(nextSibling, scroll)) {\n          return delta.insert(\"\\n\");\n        }\n        const match3 = scroll.query(nextSibling);\n        if (match3 && match3.prototype instanceof BlockEmbed) {\n          return delta.insert(\"\\n\");\n        }\n        nextSibling = nextSibling.firstChild;\n      }\n    }\n  }\n  return delta;\n}\nfunction matchStyles(node, delta, scroll) {\n  var _a3;\n  const formats = {};\n  const style = node.style || {};\n  if (style.fontStyle === \"italic\") {\n    formats.italic = true;\n  }\n  if (style.textDecoration === \"underline\") {\n    formats.underline = true;\n  }\n  if (style.textDecoration === \"line-through\") {\n    formats.strike = true;\n  }\n  if (((_a3 = style.fontWeight) == null ? void 0 : _a3.startsWith(\"bold\")) || // @ts-expect-error Fix me later\n  parseInt(style.fontWeight, 10) >= 700) {\n    formats.bold = true;\n  }\n  delta = Object.entries(formats).reduce((newDelta, _ref5) => {\n    let [name, value] = _ref5;\n    return applyFormat(newDelta, name, value, scroll);\n  }, delta);\n  if (parseFloat(style.textIndent || 0) > 0) {\n    return new Delta().insert(\"\t\").concat(delta);\n  }\n  return delta;\n}\nfunction matchTable(node, delta, scroll) {\n  var _a3, _b;\n  const table2 = ((_a3 = node.parentElement) == null ? void 0 : _a3.tagName) === \"TABLE\" ? node.parentElement : (_b = node.parentElement) == null ? void 0 : _b.parentElement;\n  if (table2 != null) {\n    const rows = Array.from(table2.querySelectorAll(\"tr\"));\n    const row = rows.indexOf(node) + 1;\n    return applyFormat(delta, \"table\", row, scroll);\n  }\n  return delta;\n}\nfunction matchText(node, delta, scroll) {\n  var _a3;\n  let text2 = node.data;\n  if (((_a3 = node.parentElement) == null ? void 0 : _a3.tagName) === \"O:P\") {\n    return delta.insert(text2.trim());\n  }\n  if (!isPre(node)) {\n    if (text2.trim().length === 0 && text2.includes(\"\\n\") && !isBetweenInlineElements(node, scroll)) {\n      return delta;\n    }\n    text2 = text2.replace(/[^\\S\\u00a0]/g, \" \");\n    text2 = text2.replace(/ {2,}/g, \" \");\n    if (node.previousSibling == null && node.parentElement != null && isLine(node.parentElement, scroll) || node.previousSibling instanceof Element && isLine(node.previousSibling, scroll)) {\n      text2 = text2.replace(/^ /, \"\");\n    }\n    if (node.nextSibling == null && node.parentElement != null && isLine(node.parentElement, scroll) || node.nextSibling instanceof Element && isLine(node.nextSibling, scroll)) {\n      text2 = text2.replace(/ $/, \"\");\n    }\n    text2 = text2.replaceAll(\" \", \" \");\n  }\n  return delta.insert(text2);\n}\nclass History extends Module {\n  constructor(quill, options) {\n    super(quill, options);\n    __publicField(this, \"lastRecorded\", 0);\n    __publicField(this, \"ignoreChange\", false);\n    __publicField(this, \"stack\", {\n      undo: [],\n      redo: []\n    });\n    __publicField(this, \"currentRange\", null);\n    this.quill.on(Quill.events.EDITOR_CHANGE, (eventName, value, oldValue, source) => {\n      if (eventName === Quill.events.SELECTION_CHANGE) {\n        if (value && source !== Quill.sources.SILENT) {\n          this.currentRange = value;\n        }\n      } else if (eventName === Quill.events.TEXT_CHANGE) {\n        if (!this.ignoreChange) {\n          if (!this.options.userOnly || source === Quill.sources.USER) {\n            this.record(value, oldValue);\n          } else {\n            this.transform(value);\n          }\n        }\n        this.currentRange = transformRange(this.currentRange, value);\n      }\n    });\n    this.quill.keyboard.addBinding({\n      key: \"z\",\n      shortKey: true\n    }, this.undo.bind(this));\n    this.quill.keyboard.addBinding({\n      key: [\"z\", \"Z\"],\n      shortKey: true,\n      shiftKey: true\n    }, this.redo.bind(this));\n    if (/Win/i.test(navigator.platform)) {\n      this.quill.keyboard.addBinding({\n        key: \"y\",\n        shortKey: true\n      }, this.redo.bind(this));\n    }\n    this.quill.root.addEventListener(\"beforeinput\", (event) => {\n      if (event.inputType === \"historyUndo\") {\n        this.undo();\n        event.preventDefault();\n      } else if (event.inputType === \"historyRedo\") {\n        this.redo();\n        event.preventDefault();\n      }\n    });\n  }\n  change(source, dest) {\n    if (this.stack[source].length === 0) return;\n    const item = this.stack[source].pop();\n    if (!item) return;\n    const base2 = this.quill.getContents();\n    const inverseDelta = item.delta.invert(base2);\n    this.stack[dest].push({\n      delta: inverseDelta,\n      range: transformRange(item.range, inverseDelta)\n    });\n    this.lastRecorded = 0;\n    this.ignoreChange = true;\n    this.quill.updateContents(item.delta, Quill.sources.USER);\n    this.ignoreChange = false;\n    this.restoreSelection(item);\n  }\n  clear() {\n    this.stack = {\n      undo: [],\n      redo: []\n    };\n  }\n  cutoff() {\n    this.lastRecorded = 0;\n  }\n  record(changeDelta, oldDelta) {\n    if (changeDelta.ops.length === 0) return;\n    this.stack.redo = [];\n    let undoDelta = changeDelta.invert(oldDelta);\n    let undoRange = this.currentRange;\n    const timestamp = Date.now();\n    if (\n      // @ts-expect-error Fix me later\n      this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0\n    ) {\n      const item = this.stack.undo.pop();\n      if (item) {\n        undoDelta = undoDelta.compose(item.delta);\n        undoRange = item.range;\n      }\n    } else {\n      this.lastRecorded = timestamp;\n    }\n    if (undoDelta.length() === 0) return;\n    this.stack.undo.push({\n      delta: undoDelta,\n      range: undoRange\n    });\n    if (this.stack.undo.length > this.options.maxStack) {\n      this.stack.undo.shift();\n    }\n  }\n  redo() {\n    this.change(\"redo\", \"undo\");\n  }\n  transform(delta) {\n    transformStack(this.stack.undo, delta);\n    transformStack(this.stack.redo, delta);\n  }\n  undo() {\n    this.change(\"undo\", \"redo\");\n  }\n  restoreSelection(stackItem) {\n    if (stackItem.range) {\n      this.quill.setSelection(stackItem.range, Quill.sources.USER);\n    } else {\n      const index2 = getLastChangeIndex(this.quill.scroll, stackItem.delta);\n      this.quill.setSelection(index2, Quill.sources.USER);\n    }\n  }\n}\n__publicField(History, \"DEFAULTS\", {\n  delay: 1e3,\n  maxStack: 100,\n  userOnly: false\n});\nfunction transformStack(stack, delta) {\n  let remoteDelta = delta;\n  for (let i3 = stack.length - 1; i3 >= 0; i3 -= 1) {\n    const oldItem = stack[i3];\n    stack[i3] = {\n      delta: remoteDelta.transform(oldItem.delta, true),\n      range: oldItem.range && transformRange(oldItem.range, remoteDelta)\n    };\n    remoteDelta = oldItem.delta.transform(remoteDelta);\n    if (stack[i3].delta.length() === 0) {\n      stack.splice(i3, 1);\n    }\n  }\n}\nfunction endsWithNewlineChange(scroll, delta) {\n  const lastOp = delta.ops[delta.ops.length - 1];\n  if (lastOp == null) return false;\n  if (lastOp.insert != null) {\n    return typeof lastOp.insert === \"string\" && lastOp.insert.endsWith(\"\\n\");\n  }\n  if (lastOp.attributes != null) {\n    return Object.keys(lastOp.attributes).some((attr) => {\n      return scroll.query(attr, Scope.BLOCK) != null;\n    });\n  }\n  return false;\n}\nfunction getLastChangeIndex(scroll, delta) {\n  const deleteLength = delta.reduce((length, op) => {\n    return length + (op.delete || 0);\n  }, 0);\n  let changeIndex = delta.length() - deleteLength;\n  if (endsWithNewlineChange(scroll, delta)) {\n    changeIndex -= 1;\n  }\n  return changeIndex;\n}\nfunction transformRange(range, delta) {\n  if (!range) return range;\n  const start = delta.transformPosition(range.index);\n  const end = delta.transformPosition(range.index + range.length);\n  return {\n    index: start,\n    length: end - start\n  };\n}\nclass Uploader extends Module {\n  constructor(quill, options) {\n    super(quill, options);\n    quill.root.addEventListener(\"drop\", (e2) => {\n      var _a3;\n      e2.preventDefault();\n      let native = null;\n      if (document.caretRangeFromPoint) {\n        native = document.caretRangeFromPoint(e2.clientX, e2.clientY);\n      } else if (document.caretPositionFromPoint) {\n        const position = document.caretPositionFromPoint(e2.clientX, e2.clientY);\n        native = document.createRange();\n        native.setStart(position.offsetNode, position.offset);\n        native.setEnd(position.offsetNode, position.offset);\n      }\n      const normalized = native && quill.selection.normalizeNative(native);\n      if (normalized) {\n        const range = quill.selection.normalizedToRange(normalized);\n        if ((_a3 = e2.dataTransfer) == null ? void 0 : _a3.files) {\n          this.upload(range, e2.dataTransfer.files);\n        }\n      }\n    });\n  }\n  upload(range, files) {\n    const uploads = [];\n    Array.from(files).forEach((file) => {\n      var _a3;\n      if (file && ((_a3 = this.options.mimetypes) == null ? void 0 : _a3.includes(file.type))) {\n        uploads.push(file);\n      }\n    });\n    if (uploads.length > 0) {\n      this.options.handler.call(this, range, uploads);\n    }\n  }\n}\nUploader.DEFAULTS = {\n  mimetypes: [\"image/png\", \"image/jpeg\"],\n  handler(range, files) {\n    if (!this.quill.scroll.query(\"image\")) {\n      return;\n    }\n    const promises = files.map((file) => {\n      return new Promise((resolve) => {\n        const reader = new FileReader();\n        reader.onload = () => {\n          resolve(reader.result);\n        };\n        reader.readAsDataURL(file);\n      });\n    });\n    Promise.all(promises).then((images) => {\n      const update = images.reduce((delta, image2) => {\n        return delta.insert({\n          image: image2\n        });\n      }, new Delta().retain(range.index).delete(range.length));\n      this.quill.updateContents(update, Emitter.sources.USER);\n      this.quill.setSelection(range.index + images.length, Emitter.sources.SILENT);\n    });\n  }\n};\nconst INSERT_TYPES = [\"insertText\", \"insertReplacementText\"];\nclass Input extends Module {\n  constructor(quill, options) {\n    super(quill, options);\n    quill.root.addEventListener(\"beforeinput\", (event) => {\n      this.handleBeforeInput(event);\n    });\n    if (!/Android/i.test(navigator.userAgent)) {\n      quill.on(Quill.events.COMPOSITION_BEFORE_START, () => {\n        this.handleCompositionStart();\n      });\n    }\n  }\n  deleteRange(range) {\n    deleteRange({\n      range,\n      quill: this.quill\n    });\n  }\n  replaceText(range) {\n    let text2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : \"\";\n    if (range.length === 0) return false;\n    if (text2) {\n      const formats = this.quill.getFormat(range.index, 1);\n      this.deleteRange(range);\n      this.quill.updateContents(new Delta().retain(range.index).insert(text2, formats), Quill.sources.USER);\n    } else {\n      this.deleteRange(range);\n    }\n    this.quill.setSelection(range.index + text2.length, 0, Quill.sources.SILENT);\n    return true;\n  }\n  handleBeforeInput(event) {\n    if (this.quill.composition.isComposing || event.defaultPrevented || !INSERT_TYPES.includes(event.inputType)) {\n      return;\n    }\n    const staticRange = event.getTargetRanges ? event.getTargetRanges()[0] : null;\n    if (!staticRange || staticRange.collapsed === true) {\n      return;\n    }\n    const text2 = getPlainTextFromInputEvent(event);\n    if (text2 == null) {\n      return;\n    }\n    const normalized = this.quill.selection.normalizeNative(staticRange);\n    const range = normalized ? this.quill.selection.normalizedToRange(normalized) : null;\n    if (range && this.replaceText(range, text2)) {\n      event.preventDefault();\n    }\n  }\n  handleCompositionStart() {\n    const range = this.quill.getSelection();\n    if (range) {\n      this.replaceText(range);\n    }\n  }\n}\nfunction getPlainTextFromInputEvent(event) {\n  var _a3;\n  if (typeof event.data === \"string\") {\n    return event.data;\n  }\n  if ((_a3 = event.dataTransfer) == null ? void 0 : _a3.types.includes(\"text/plain\")) {\n    return event.dataTransfer.getData(\"text/plain\");\n  }\n  return null;\n}\nconst isMac = /Mac/i.test(navigator.platform);\nconst TTL_FOR_VALID_SELECTION_CHANGE = 100;\nconst canMoveCaretBeforeUINode = (event) => {\n  if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\" || // RTL scripts or moving from the end of the previous line\n  event.key === \"ArrowUp\" || event.key === \"ArrowDown\" || event.key === \"Home\") {\n    return true;\n  }\n  if (isMac && event.key === \"a\" && event.ctrlKey === true) {\n    return true;\n  }\n  return false;\n};\nclass UINode extends Module {\n  constructor(quill, options) {\n    super(quill, options);\n    __publicField(this, \"isListening\", false);\n    __publicField(this, \"selectionChangeDeadline\", 0);\n    this.handleArrowKeys();\n    this.handleNavigationShortcuts();\n  }\n  handleArrowKeys() {\n    this.quill.keyboard.addBinding({\n      key: [\"ArrowLeft\", \"ArrowRight\"],\n      offset: 0,\n      shiftKey: null,\n      handler(range, _ref) {\n        let {\n          line,\n          event\n        } = _ref;\n        if (!(line instanceof ParentBlot$1) || !line.uiNode) {\n          return true;\n        }\n        const isRTL = getComputedStyle(line.domNode)[\"direction\"] === \"rtl\";\n        if (isRTL && event.key !== \"ArrowRight\" || !isRTL && event.key !== \"ArrowLeft\") {\n          return true;\n        }\n        this.quill.setSelection(range.index - 1, range.length + (event.shiftKey ? 1 : 0), Quill.sources.USER);\n        return false;\n      }\n    });\n  }\n  handleNavigationShortcuts() {\n    this.quill.root.addEventListener(\"keydown\", (event) => {\n      if (!event.defaultPrevented && canMoveCaretBeforeUINode(event)) {\n        this.ensureListeningToSelectionChange();\n      }\n    });\n  }\n  /**\n   * We only listen to the `selectionchange` event when\n   * there is an intention of moving the caret to the beginning using shortcuts.\n   * This is primarily implemented to prevent infinite loops, as we are changing\n   * the selection within the handler of a `selectionchange` event.\n   */\n  ensureListeningToSelectionChange() {\n    this.selectionChangeDeadline = Date.now() + TTL_FOR_VALID_SELECTION_CHANGE;\n    if (this.isListening) return;\n    this.isListening = true;\n    const listener = () => {\n      this.isListening = false;\n      if (Date.now() <= this.selectionChangeDeadline) {\n        this.handleSelectionChange();\n      }\n    };\n    document.addEventListener(\"selectionchange\", listener, {\n      once: true\n    });\n  }\n  handleSelectionChange() {\n    const selection = document.getSelection();\n    if (!selection) return;\n    const range = selection.getRangeAt(0);\n    if (range.collapsed !== true || range.startOffset !== 0) return;\n    const line = this.quill.scroll.find(range.startContainer);\n    if (!(line instanceof ParentBlot$1) || !line.uiNode) return;\n    const newRange = document.createRange();\n    newRange.setStartAfter(line.uiNode);\n    newRange.setEndAfter(line.uiNode);\n    selection.removeAllRanges();\n    selection.addRange(newRange);\n  }\n}\nQuill.register({\n  \"blots/block\": Block,\n  \"blots/block/embed\": BlockEmbed,\n  \"blots/break\": Break,\n  \"blots/container\": Container,\n  \"blots/cursor\": Cursor,\n  \"blots/embed\": Embed,\n  \"blots/inline\": Inline,\n  \"blots/scroll\": Scroll,\n  \"blots/text\": Text$1,\n  \"modules/clipboard\": Clipboard,\n  \"modules/history\": History,\n  \"modules/keyboard\": Keyboard,\n  \"modules/uploader\": Uploader,\n  \"modules/input\": Input,\n  \"modules/uiNode\": UINode\n});\nclass IndentAttributor extends ClassAttributor$1 {\n  add(node, value) {\n    let normalizedValue = 0;\n    if (value === \"+1\" || value === \"-1\") {\n      const indent = this.value(node) || 0;\n      normalizedValue = value === \"+1\" ? indent + 1 : indent - 1;\n    } else if (typeof value === \"number\") {\n      normalizedValue = value;\n    }\n    if (normalizedValue === 0) {\n      this.remove(node);\n      return true;\n    }\n    return super.add(node, normalizedValue.toString());\n  }\n  canAdd(node, value) {\n    return super.canAdd(node, value) || super.canAdd(node, parseInt(value, 10));\n  }\n  value(node) {\n    return parseInt(super.value(node), 10) || void 0;\n  }\n}\nconst IndentClass = new IndentAttributor(\"indent\", \"ql-indent\", {\n  scope: Scope.BLOCK,\n  // @ts-expect-error\n  whitelist: [1, 2, 3, 4, 5, 6, 7, 8]\n});\nclass Blockquote extends Block {\n}\n__publicField(Blockquote, \"blotName\", \"blockquote\");\n__publicField(Blockquote, \"tagName\", \"blockquote\");\nclass Header extends Block {\n  static formats(domNode) {\n    return this.tagName.indexOf(domNode.tagName) + 1;\n  }\n}\n__publicField(Header, \"blotName\", \"header\");\n__publicField(Header, \"tagName\", [\"H1\", \"H2\", \"H3\", \"H4\", \"H5\", \"H6\"]);\nclass ListContainer extends Container {\n}\nListContainer.blotName = \"list-container\";\nListContainer.tagName = \"OL\";\nclass ListItem extends Block {\n  static create(value) {\n    const node = super.create();\n    node.setAttribute(\"data-list\", value);\n    return node;\n  }\n  static formats(domNode) {\n    return domNode.getAttribute(\"data-list\") || void 0;\n  }\n  static register() {\n    Quill.register(ListContainer);\n  }\n  constructor(scroll, domNode) {\n    super(scroll, domNode);\n    const ui = domNode.ownerDocument.createElement(\"span\");\n    const listEventHandler = (e2) => {\n      if (!scroll.isEnabled()) return;\n      const format2 = this.statics.formats(domNode, scroll);\n      if (format2 === \"checked\") {\n        this.format(\"list\", \"unchecked\");\n        e2.preventDefault();\n      } else if (format2 === \"unchecked\") {\n        this.format(\"list\", \"checked\");\n        e2.preventDefault();\n      }\n    };\n    ui.addEventListener(\"mousedown\", listEventHandler);\n    ui.addEventListener(\"touchstart\", listEventHandler);\n    this.attachUI(ui);\n  }\n  format(name, value) {\n    if (name === this.statics.blotName && value) {\n      this.domNode.setAttribute(\"data-list\", value);\n    } else {\n      super.format(name, value);\n    }\n  }\n}\nListItem.blotName = \"list\";\nListItem.tagName = \"LI\";\nListContainer.allowedChildren = [ListItem];\nListItem.requiredContainer = ListContainer;\nclass Bold extends Inline {\n  static create() {\n    return super.create();\n  }\n  static formats() {\n    return true;\n  }\n  optimize(context) {\n    super.optimize(context);\n    if (this.domNode.tagName !== this.statics.tagName[0]) {\n      this.replaceWith(this.statics.blotName);\n    }\n  }\n}\n__publicField(Bold, \"blotName\", \"bold\");\n__publicField(Bold, \"tagName\", [\"STRONG\", \"B\"]);\nclass Italic extends Bold {\n}\n__publicField(Italic, \"blotName\", \"italic\");\n__publicField(Italic, \"tagName\", [\"EM\", \"I\"]);\nclass Link extends Inline {\n  static create(value) {\n    const node = super.create(value);\n    node.setAttribute(\"href\", this.sanitize(value));\n    node.setAttribute(\"rel\", \"noopener noreferrer\");\n    node.setAttribute(\"target\", \"_blank\");\n    return node;\n  }\n  static formats(domNode) {\n    return domNode.getAttribute(\"href\");\n  }\n  static sanitize(url2) {\n    return sanitize(url2, this.PROTOCOL_WHITELIST) ? url2 : this.SANITIZED_URL;\n  }\n  format(name, value) {\n    if (name !== this.statics.blotName || !value) {\n      super.format(name, value);\n    } else {\n      this.domNode.setAttribute(\"href\", this.constructor.sanitize(value));\n    }\n  }\n}\n__publicField(Link, \"blotName\", \"link\");\n__publicField(Link, \"tagName\", \"A\");\n__publicField(Link, \"SANITIZED_URL\", \"about:blank\");\n__publicField(Link, \"PROTOCOL_WHITELIST\", [\"http\", \"https\", \"mailto\", \"tel\", \"sms\"]);\nfunction sanitize(url2, protocols) {\n  const anchor = document.createElement(\"a\");\n  anchor.href = url2;\n  const protocol = anchor.href.slice(0, anchor.href.indexOf(\":\"));\n  return protocols.indexOf(protocol) > -1;\n}\nclass Script extends Inline {\n  static create(value) {\n    if (value === \"super\") {\n      return document.createElement(\"sup\");\n    }\n    if (value === \"sub\") {\n      return document.createElement(\"sub\");\n    }\n    return super.create(value);\n  }\n  static formats(domNode) {\n    if (domNode.tagName === \"SUB\") return \"sub\";\n    if (domNode.tagName === \"SUP\") return \"super\";\n    return void 0;\n  }\n}\n__publicField(Script, \"blotName\", \"script\");\n__publicField(Script, \"tagName\", [\"SUB\", \"SUP\"]);\nclass Strike extends Bold {\n}\n__publicField(Strike, \"blotName\", \"strike\");\n__publicField(Strike, \"tagName\", [\"S\", \"STRIKE\"]);\nclass Underline extends Inline {\n}\n__publicField(Underline, \"blotName\", \"underline\");\n__publicField(Underline, \"tagName\", \"U\");\nclass Formula extends Embed {\n  static create(value) {\n    if (window.katex == null) {\n      throw new Error(\"Formula module requires KaTeX.\");\n    }\n    const node = super.create(value);\n    if (typeof value === \"string\") {\n      window.katex.render(value, node, {\n        throwOnError: false,\n        errorColor: \"#f00\"\n      });\n      node.setAttribute(\"data-value\", value);\n    }\n    return node;\n  }\n  static value(domNode) {\n    return domNode.getAttribute(\"data-value\");\n  }\n  html() {\n    const {\n      formula\n    } = this.value();\n    return `<span>${formula}</span>`;\n  }\n}\n__publicField(Formula, \"blotName\", \"formula\");\n__publicField(Formula, \"className\", \"ql-formula\");\n__publicField(Formula, \"tagName\", \"SPAN\");\nconst ATTRIBUTES$1 = [\"alt\", \"height\", \"width\"];\nclass Image extends EmbedBlot$1 {\n  static create(value) {\n    const node = super.create(value);\n    if (typeof value === \"string\") {\n      node.setAttribute(\"src\", this.sanitize(value));\n    }\n    return node;\n  }\n  static formats(domNode) {\n    return ATTRIBUTES$1.reduce((formats, attribute2) => {\n      if (domNode.hasAttribute(attribute2)) {\n        formats[attribute2] = domNode.getAttribute(attribute2);\n      }\n      return formats;\n    }, {});\n  }\n  static match(url2) {\n    return /\\.(jpe?g|gif|png)$/.test(url2) || /^data:image\\/.+;base64/.test(url2);\n  }\n  static sanitize(url2) {\n    return sanitize(url2, [\"http\", \"https\", \"data\"]) ? url2 : \"//:0\";\n  }\n  static value(domNode) {\n    return domNode.getAttribute(\"src\");\n  }\n  format(name, value) {\n    if (ATTRIBUTES$1.indexOf(name) > -1) {\n      if (value) {\n        this.domNode.setAttribute(name, value);\n      } else {\n        this.domNode.removeAttribute(name);\n      }\n    } else {\n      super.format(name, value);\n    }\n  }\n}\n__publicField(Image, \"blotName\", \"image\");\n__publicField(Image, \"tagName\", \"IMG\");\nconst ATTRIBUTES = [\"height\", \"width\"];\nclass Video extends BlockEmbed {\n  static create(value) {\n    const node = super.create(value);\n    node.setAttribute(\"frameborder\", \"0\");\n    node.setAttribute(\"allowfullscreen\", \"true\");\n    node.setAttribute(\"src\", this.sanitize(value));\n    return node;\n  }\n  static formats(domNode) {\n    return ATTRIBUTES.reduce((formats, attribute2) => {\n      if (domNode.hasAttribute(attribute2)) {\n        formats[attribute2] = domNode.getAttribute(attribute2);\n      }\n      return formats;\n    }, {});\n  }\n  static sanitize(url2) {\n    return Link.sanitize(url2);\n  }\n  static value(domNode) {\n    return domNode.getAttribute(\"src\");\n  }\n  format(name, value) {\n    if (ATTRIBUTES.indexOf(name) > -1) {\n      if (value) {\n        this.domNode.setAttribute(name, value);\n      } else {\n        this.domNode.removeAttribute(name);\n      }\n    } else {\n      super.format(name, value);\n    }\n  }\n  html() {\n    const {\n      video\n    } = this.value();\n    return `<a href=\"${video}\">${video}</a>`;\n  }\n}\n__publicField(Video, \"blotName\", \"video\");\n__publicField(Video, \"className\", \"ql-video\");\n__publicField(Video, \"tagName\", \"IFRAME\");\nconst TokenAttributor = new ClassAttributor$1(\"code-token\", \"hljs\", {\n  scope: Scope.INLINE\n});\nclass CodeToken extends Inline {\n  static formats(node, scroll) {\n    while (node != null && node !== scroll.domNode) {\n      if (node.classList && node.classList.contains(CodeBlock.className)) {\n        return super.formats(node, scroll);\n      }\n      node = node.parentNode;\n    }\n    return void 0;\n  }\n  constructor(scroll, domNode, value) {\n    super(scroll, domNode, value);\n    TokenAttributor.add(this.domNode, value);\n  }\n  format(format2, value) {\n    if (format2 !== CodeToken.blotName) {\n      super.format(format2, value);\n    } else if (value) {\n      TokenAttributor.add(this.domNode, value);\n    } else {\n      TokenAttributor.remove(this.domNode);\n      this.domNode.classList.remove(this.statics.className);\n    }\n  }\n  optimize() {\n    super.optimize(...arguments);\n    if (!TokenAttributor.value(this.domNode)) {\n      this.unwrap();\n    }\n  }\n}\nCodeToken.blotName = \"code-token\";\nCodeToken.className = \"ql-token\";\nclass SyntaxCodeBlock extends CodeBlock {\n  static create(value) {\n    const domNode = super.create(value);\n    if (typeof value === \"string\") {\n      domNode.setAttribute(\"data-language\", value);\n    }\n    return domNode;\n  }\n  static formats(domNode) {\n    return domNode.getAttribute(\"data-language\") || \"plain\";\n  }\n  static register() {\n  }\n  // Syntax module will register\n  format(name, value) {\n    if (name === this.statics.blotName && value) {\n      this.domNode.setAttribute(\"data-language\", value);\n    } else {\n      super.format(name, value);\n    }\n  }\n  replaceWith(name, value) {\n    this.formatAt(0, this.length(), CodeToken.blotName, false);\n    return super.replaceWith(name, value);\n  }\n}\nclass SyntaxCodeBlockContainer extends CodeBlockContainer {\n  attach() {\n    super.attach();\n    this.forceNext = false;\n    this.scroll.emitMount(this);\n  }\n  format(name, value) {\n    if (name === SyntaxCodeBlock.blotName) {\n      this.forceNext = true;\n      this.children.forEach((child) => {\n        child.format(name, value);\n      });\n    }\n  }\n  formatAt(index2, length, name, value) {\n    if (name === SyntaxCodeBlock.blotName) {\n      this.forceNext = true;\n    }\n    super.formatAt(index2, length, name, value);\n  }\n  highlight(highlight2) {\n    let forced = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n    if (this.children.head == null) return;\n    const nodes = Array.from(this.domNode.childNodes).filter((node) => node !== this.uiNode);\n    const text2 = `${nodes.map((node) => node.textContent).join(\"\\n\")}\n`;\n    const language = SyntaxCodeBlock.formats(this.children.head.domNode);\n    if (forced || this.forceNext || this.cachedText !== text2) {\n      if (text2.trim().length > 0 || this.cachedText == null) {\n        const oldDelta = this.children.reduce((delta2, child) => {\n          return delta2.concat(blockDelta(child, false));\n        }, new Delta());\n        const delta = highlight2(text2, language);\n        oldDelta.diff(delta).reduce((index2, _ref) => {\n          let {\n            retain,\n            attributes\n          } = _ref;\n          if (!retain) return index2;\n          if (attributes) {\n            Object.keys(attributes).forEach((format2) => {\n              if ([SyntaxCodeBlock.blotName, CodeToken.blotName].includes(format2)) {\n                this.formatAt(index2, retain, format2, attributes[format2]);\n              }\n            });\n          }\n          return index2 + retain;\n        }, 0);\n      }\n      this.cachedText = text2;\n      this.forceNext = false;\n    }\n  }\n  html(index2, length) {\n    const [codeBlock] = this.children.find(index2);\n    const language = codeBlock ? SyntaxCodeBlock.formats(codeBlock.domNode) : \"plain\";\n    return `<pre data-language=\"${language}\">\n${escapeText(this.code(index2, length))}\n</pre>`;\n  }\n  optimize(context) {\n    super.optimize(context);\n    if (this.parent != null && this.children.head != null && this.uiNode != null) {\n      const language = SyntaxCodeBlock.formats(this.children.head.domNode);\n      if (language !== this.uiNode.value) {\n        this.uiNode.value = language;\n      }\n    }\n  }\n}\nSyntaxCodeBlockContainer.allowedChildren = [SyntaxCodeBlock];\nSyntaxCodeBlock.requiredContainer = SyntaxCodeBlockContainer;\nSyntaxCodeBlock.allowedChildren = [CodeToken, Cursor, Text$1, Break];\nconst highlight = (lib2, language, text2) => {\n  if (typeof lib2.versionString === \"string\") {\n    const majorVersion = lib2.versionString.split(\".\")[0];\n    if (parseInt(majorVersion, 10) >= 11) {\n      return lib2.highlight(text2, {\n        language\n      }).value;\n    }\n  }\n  return lib2.highlight(language, text2).value;\n};\nclass Syntax extends Module {\n  static register() {\n    Quill.register(CodeToken, true);\n    Quill.register(SyntaxCodeBlock, true);\n    Quill.register(SyntaxCodeBlockContainer, true);\n  }\n  constructor(quill, options) {\n    super(quill, options);\n    if (this.options.hljs == null) {\n      throw new Error(\"Syntax module requires highlight.js. Please include the library on the page before Quill.\");\n    }\n    this.languages = this.options.languages.reduce((memo, _ref2) => {\n      let {\n        key\n      } = _ref2;\n      memo[key] = true;\n      return memo;\n    }, {});\n    this.highlightBlot = this.highlightBlot.bind(this);\n    this.initListener();\n    this.initTimer();\n  }\n  initListener() {\n    this.quill.on(Quill.events.SCROLL_BLOT_MOUNT, (blot) => {\n      if (!(blot instanceof SyntaxCodeBlockContainer)) return;\n      const select = this.quill.root.ownerDocument.createElement(\"select\");\n      this.options.languages.forEach((_ref3) => {\n        let {\n          key,\n          label\n        } = _ref3;\n        const option = select.ownerDocument.createElement(\"option\");\n        option.textContent = label;\n        option.setAttribute(\"value\", key);\n        select.appendChild(option);\n      });\n      select.addEventListener(\"change\", () => {\n        blot.format(SyntaxCodeBlock.blotName, select.value);\n        this.quill.root.focus();\n        this.highlight(blot, true);\n      });\n      if (blot.uiNode == null) {\n        blot.attachUI(select);\n        if (blot.children.head) {\n          select.value = SyntaxCodeBlock.formats(blot.children.head.domNode);\n        }\n      }\n    });\n  }\n  initTimer() {\n    let timer = null;\n    this.quill.on(Quill.events.SCROLL_OPTIMIZE, () => {\n      if (timer) {\n        clearTimeout(timer);\n      }\n      timer = setTimeout(() => {\n        this.highlight();\n        timer = null;\n      }, this.options.interval);\n    });\n  }\n  highlight() {\n    let blot = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null;\n    let force = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n    if (this.quill.selection.composing) return;\n    this.quill.update(Quill.sources.USER);\n    const range = this.quill.getSelection();\n    const blots = blot == null ? this.quill.scroll.descendants(SyntaxCodeBlockContainer) : [blot];\n    blots.forEach((container) => {\n      container.highlight(this.highlightBlot, force);\n    });\n    this.quill.update(Quill.sources.SILENT);\n    if (range != null) {\n      this.quill.setSelection(range, Quill.sources.SILENT);\n    }\n  }\n  highlightBlot(text2) {\n    let language = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : \"plain\";\n    language = this.languages[language] ? language : \"plain\";\n    if (language === \"plain\") {\n      return escapeText(text2).split(\"\\n\").reduce((delta, line, i3) => {\n        if (i3 !== 0) {\n          delta.insert(\"\\n\", {\n            [CodeBlock.blotName]: language\n          });\n        }\n        return delta.insert(line);\n      }, new Delta());\n    }\n    const container = this.quill.root.ownerDocument.createElement(\"div\");\n    container.classList.add(CodeBlock.className);\n    container.innerHTML = highlight(this.options.hljs, language, text2);\n    return traverse(this.quill.scroll, container, [(node, delta) => {\n      const value = TokenAttributor.value(node);\n      if (value) {\n        return delta.compose(new Delta().retain(delta.length(), {\n          [CodeToken.blotName]: value\n        }));\n      }\n      return delta;\n    }], [(node, delta) => {\n      return node.data.split(\"\\n\").reduce((memo, nodeText, i3) => {\n        if (i3 !== 0) memo.insert(\"\\n\", {\n          [CodeBlock.blotName]: language\n        });\n        return memo.insert(nodeText);\n      }, delta);\n    }], /* @__PURE__ */ new WeakMap());\n  }\n}\nSyntax.DEFAULTS = {\n  hljs: (() => {\n    return window.hljs;\n  })(),\n  interval: 1e3,\n  languages: [{\n    key: \"plain\",\n    label: \"Plain\"\n  }, {\n    key: \"bash\",\n    label: \"Bash\"\n  }, {\n    key: \"cpp\",\n    label: \"C++\"\n  }, {\n    key: \"cs\",\n    label: \"C#\"\n  }, {\n    key: \"css\",\n    label: \"CSS\"\n  }, {\n    key: \"diff\",\n    label: \"Diff\"\n  }, {\n    key: \"xml\",\n    label: \"HTML/XML\"\n  }, {\n    key: \"java\",\n    label: \"Java\"\n  }, {\n    key: \"javascript\",\n    label: \"JavaScript\"\n  }, {\n    key: \"markdown\",\n    label: \"Markdown\"\n  }, {\n    key: \"php\",\n    label: \"PHP\"\n  }, {\n    key: \"python\",\n    label: \"Python\"\n  }, {\n    key: \"ruby\",\n    label: \"Ruby\"\n  }, {\n    key: \"sql\",\n    label: \"SQL\"\n  }]\n};\nconst _TableCell = class _TableCell extends Block {\n  static create(value) {\n    const node = super.create();\n    if (value) {\n      node.setAttribute(\"data-row\", value);\n    } else {\n      node.setAttribute(\"data-row\", tableId());\n    }\n    return node;\n  }\n  static formats(domNode) {\n    if (domNode.hasAttribute(\"data-row\")) {\n      return domNode.getAttribute(\"data-row\");\n    }\n    return void 0;\n  }\n  cellOffset() {\n    if (this.parent) {\n      return this.parent.children.indexOf(this);\n    }\n    return -1;\n  }\n  format(name, value) {\n    if (name === _TableCell.blotName && value) {\n      this.domNode.setAttribute(\"data-row\", value);\n    } else {\n      super.format(name, value);\n    }\n  }\n  row() {\n    return this.parent;\n  }\n  rowOffset() {\n    if (this.row()) {\n      return this.row().rowOffset();\n    }\n    return -1;\n  }\n  table() {\n    return this.row() && this.row().table();\n  }\n};\n__publicField(_TableCell, \"blotName\", \"table\");\n__publicField(_TableCell, \"tagName\", \"TD\");\nlet TableCell = _TableCell;\nclass TableRow extends Container {\n  checkMerge() {\n    if (super.checkMerge() && this.next.children.head != null) {\n      const thisHead = this.children.head.formats();\n      const thisTail = this.children.tail.formats();\n      const nextHead = this.next.children.head.formats();\n      const nextTail = this.next.children.tail.formats();\n      return thisHead.table === thisTail.table && thisHead.table === nextHead.table && thisHead.table === nextTail.table;\n    }\n    return false;\n  }\n  optimize(context) {\n    super.optimize(context);\n    this.children.forEach((child) => {\n      if (child.next == null) return;\n      const childFormats = child.formats();\n      const nextFormats = child.next.formats();\n      if (childFormats.table !== nextFormats.table) {\n        const next = this.splitAfter(child);\n        if (next) {\n          next.optimize();\n        }\n        if (this.prev) {\n          this.prev.optimize();\n        }\n      }\n    });\n  }\n  rowOffset() {\n    if (this.parent) {\n      return this.parent.children.indexOf(this);\n    }\n    return -1;\n  }\n  table() {\n    return this.parent && this.parent.parent;\n  }\n}\n__publicField(TableRow, \"blotName\", \"table-row\");\n__publicField(TableRow, \"tagName\", \"TR\");\nclass TableBody extends Container {\n}\n__publicField(TableBody, \"blotName\", \"table-body\");\n__publicField(TableBody, \"tagName\", \"TBODY\");\nclass TableContainer extends Container {\n  balanceCells() {\n    const rows = this.descendants(TableRow);\n    const maxColumns = rows.reduce((max, row) => {\n      return Math.max(row.children.length, max);\n    }, 0);\n    rows.forEach((row) => {\n      new Array(maxColumns - row.children.length).fill(0).forEach(() => {\n        let value;\n        if (row.children.head != null) {\n          value = TableCell.formats(row.children.head.domNode);\n        }\n        const blot = this.scroll.create(TableCell.blotName, value);\n        row.appendChild(blot);\n        blot.optimize();\n      });\n    });\n  }\n  cells(column) {\n    return this.rows().map((row) => row.children.at(column));\n  }\n  deleteColumn(index2) {\n    const [body] = this.descendant(TableBody);\n    if (body == null || body.children.head == null) return;\n    body.children.forEach((row) => {\n      const cell = row.children.at(index2);\n      if (cell != null) {\n        cell.remove();\n      }\n    });\n  }\n  insertColumn(index2) {\n    const [body] = this.descendant(TableBody);\n    if (body == null || body.children.head == null) return;\n    body.children.forEach((row) => {\n      const ref = row.children.at(index2);\n      const value = TableCell.formats(row.children.head.domNode);\n      const cell = this.scroll.create(TableCell.blotName, value);\n      row.insertBefore(cell, ref);\n    });\n  }\n  insertRow(index2) {\n    const [body] = this.descendant(TableBody);\n    if (body == null || body.children.head == null) return;\n    const id = tableId();\n    const row = this.scroll.create(TableRow.blotName);\n    body.children.head.children.forEach(() => {\n      const cell = this.scroll.create(TableCell.blotName, id);\n      row.appendChild(cell);\n    });\n    const ref = body.children.at(index2);\n    body.insertBefore(row, ref);\n  }\n  rows() {\n    const body = this.children.head;\n    if (body == null) return [];\n    return body.children.map((row) => row);\n  }\n}\n__publicField(TableContainer, \"blotName\", \"table-container\");\n__publicField(TableContainer, \"tagName\", \"TABLE\");\nTableContainer.allowedChildren = [TableBody];\nTableBody.requiredContainer = TableContainer;\nTableBody.allowedChildren = [TableRow];\nTableRow.requiredContainer = TableBody;\nTableRow.allowedChildren = [TableCell];\nTableCell.requiredContainer = TableRow;\nfunction tableId() {\n  const id = Math.random().toString(36).slice(2, 6);\n  return `row-${id}`;\n}\nclass Table extends Module {\n  static register() {\n    Quill.register(TableCell);\n    Quill.register(TableRow);\n    Quill.register(TableBody);\n    Quill.register(TableContainer);\n  }\n  constructor() {\n    super(...arguments);\n    this.listenBalanceCells();\n  }\n  balanceTables() {\n    this.quill.scroll.descendants(TableContainer).forEach((table2) => {\n      table2.balanceCells();\n    });\n  }\n  deleteColumn() {\n    const [table2, , cell] = this.getTable();\n    if (cell == null) return;\n    table2.deleteColumn(cell.cellOffset());\n    this.quill.update(Quill.sources.USER);\n  }\n  deleteRow() {\n    const [, row] = this.getTable();\n    if (row == null) return;\n    row.remove();\n    this.quill.update(Quill.sources.USER);\n  }\n  deleteTable() {\n    const [table2] = this.getTable();\n    if (table2 == null) return;\n    const offset = table2.offset();\n    table2.remove();\n    this.quill.update(Quill.sources.USER);\n    this.quill.setSelection(offset, Quill.sources.SILENT);\n  }\n  getTable() {\n    let range = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this.quill.getSelection();\n    if (range == null) return [null, null, null, -1];\n    const [cell, offset] = this.quill.getLine(range.index);\n    if (cell == null || cell.statics.blotName !== TableCell.blotName) {\n      return [null, null, null, -1];\n    }\n    const row = cell.parent;\n    const table2 = row.parent.parent;\n    return [table2, row, cell, offset];\n  }\n  insertColumn(offset) {\n    const range = this.quill.getSelection();\n    if (!range) return;\n    const [table2, row, cell] = this.getTable(range);\n    if (cell == null) return;\n    const column = cell.cellOffset();\n    table2.insertColumn(column + offset);\n    this.quill.update(Quill.sources.USER);\n    let shift = row.rowOffset();\n    if (offset === 0) {\n      shift += 1;\n    }\n    this.quill.setSelection(range.index + shift, range.length, Quill.sources.SILENT);\n  }\n  insertColumnLeft() {\n    this.insertColumn(0);\n  }\n  insertColumnRight() {\n    this.insertColumn(1);\n  }\n  insertRow(offset) {\n    const range = this.quill.getSelection();\n    if (!range) return;\n    const [table2, row, cell] = this.getTable(range);\n    if (cell == null) return;\n    const index2 = row.rowOffset();\n    table2.insertRow(index2 + offset);\n    this.quill.update(Quill.sources.USER);\n    if (offset > 0) {\n      this.quill.setSelection(range, Quill.sources.SILENT);\n    } else {\n      this.quill.setSelection(range.index + row.children.length, range.length, Quill.sources.SILENT);\n    }\n  }\n  insertRowAbove() {\n    this.insertRow(0);\n  }\n  insertRowBelow() {\n    this.insertRow(1);\n  }\n  insertTable(rows, columns) {\n    const range = this.quill.getSelection();\n    if (range == null) return;\n    const delta = new Array(rows).fill(0).reduce((memo) => {\n      const text2 = new Array(columns).fill(\"\\n\").join(\"\");\n      return memo.insert(text2, {\n        table: tableId()\n      });\n    }, new Delta().retain(range.index));\n    this.quill.updateContents(delta, Quill.sources.USER);\n    this.quill.setSelection(range.index, Quill.sources.SILENT);\n    this.balanceTables();\n  }\n  listenBalanceCells() {\n    this.quill.on(Quill.events.SCROLL_OPTIMIZE, (mutations) => {\n      mutations.some((mutation) => {\n        if ([\"TD\", \"TR\", \"TBODY\", \"TABLE\"].includes(mutation.target.tagName)) {\n          this.quill.once(Quill.events.TEXT_CHANGE, (delta, old, source) => {\n            if (source !== Quill.sources.USER) return;\n            this.balanceTables();\n          });\n          return true;\n        }\n        return false;\n      });\n    });\n  }\n}\nconst debug = namespace(\"quill:toolbar\");\nclass Toolbar extends Module {\n  constructor(quill, options) {\n    var _a3, _b;\n    super(quill, options);\n    if (Array.isArray(this.options.container)) {\n      const container = document.createElement(\"div\");\n      container.setAttribute(\"role\", \"toolbar\");\n      addControls(container, this.options.container);\n      (_b = (_a3 = quill.container) == null ? void 0 : _a3.parentNode) == null ? void 0 : _b.insertBefore(container, quill.container);\n      this.container = container;\n    } else if (typeof this.options.container === \"string\") {\n      this.container = document.querySelector(this.options.container);\n    } else {\n      this.container = this.options.container;\n    }\n    if (!(this.container instanceof HTMLElement)) {\n      debug.error(\"Container required for toolbar\", this.options);\n      return;\n    }\n    this.container.classList.add(\"ql-toolbar\");\n    this.controls = [];\n    this.handlers = {};\n    if (this.options.handlers) {\n      Object.keys(this.options.handlers).forEach((format2) => {\n        var _a4;\n        const handler = (_a4 = this.options.handlers) == null ? void 0 : _a4[format2];\n        if (handler) {\n          this.addHandler(format2, handler);\n        }\n      });\n    }\n    Array.from(this.container.querySelectorAll(\"button, select\")).forEach((input) => {\n      this.attach(input);\n    });\n    this.quill.on(Quill.events.EDITOR_CHANGE, () => {\n      const [range] = this.quill.selection.getRange();\n      this.update(range);\n    });\n  }\n  addHandler(format2, handler) {\n    this.handlers[format2] = handler;\n  }\n  attach(input) {\n    let format2 = Array.from(input.classList).find((className) => {\n      return className.indexOf(\"ql-\") === 0;\n    });\n    if (!format2) return;\n    format2 = format2.slice(\"ql-\".length);\n    if (input.tagName === \"BUTTON\") {\n      input.setAttribute(\"type\", \"button\");\n    }\n    if (this.handlers[format2] == null && this.quill.scroll.query(format2) == null) {\n      debug.warn(\"ignoring attaching to nonexistent format\", format2, input);\n      return;\n    }\n    const eventName = input.tagName === \"SELECT\" ? \"change\" : \"click\";\n    input.addEventListener(eventName, (e2) => {\n      let value;\n      if (input.tagName === \"SELECT\") {\n        if (input.selectedIndex < 0) return;\n        const selected = input.options[input.selectedIndex];\n        if (selected.hasAttribute(\"selected\")) {\n          value = false;\n        } else {\n          value = selected.value || false;\n        }\n      } else {\n        if (input.classList.contains(\"ql-active\")) {\n          value = false;\n        } else {\n          value = input.value || !input.hasAttribute(\"value\");\n        }\n        e2.preventDefault();\n      }\n      this.quill.focus();\n      const [range] = this.quill.selection.getRange();\n      if (this.handlers[format2] != null) {\n        this.handlers[format2].call(this, value);\n      } else if (\n        // @ts-expect-error\n        this.quill.scroll.query(format2).prototype instanceof EmbedBlot$1\n      ) {\n        value = prompt(`Enter ${format2}`);\n        if (!value) return;\n        this.quill.updateContents(new Delta().retain(range.index).delete(range.length).insert({\n          [format2]: value\n        }), Quill.sources.USER);\n      } else {\n        this.quill.format(format2, value, Quill.sources.USER);\n      }\n      this.update(range);\n    });\n    this.controls.push([format2, input]);\n  }\n  update(range) {\n    const formats = range == null ? {} : this.quill.getFormat(range);\n    this.controls.forEach((pair) => {\n      const [format2, input] = pair;\n      if (input.tagName === \"SELECT\") {\n        let option = null;\n        if (range == null) {\n          option = null;\n        } else if (formats[format2] == null) {\n          option = input.querySelector(\"option[selected]\");\n        } else if (!Array.isArray(formats[format2])) {\n          let value = formats[format2];\n          if (typeof value === \"string\") {\n            value = value.replace(/\"/g, '\\\\\"');\n          }\n          option = input.querySelector(`option[value=\"${value}\"]`);\n        }\n        if (option == null) {\n          input.value = \"\";\n          input.selectedIndex = -1;\n        } else {\n          option.selected = true;\n        }\n      } else if (range == null) {\n        input.classList.remove(\"ql-active\");\n        input.setAttribute(\"aria-pressed\", \"false\");\n      } else if (input.hasAttribute(\"value\")) {\n        const value = formats[format2];\n        const isActive = value === input.getAttribute(\"value\") || value != null && value.toString() === input.getAttribute(\"value\") || value == null && !input.getAttribute(\"value\");\n        input.classList.toggle(\"ql-active\", isActive);\n        input.setAttribute(\"aria-pressed\", isActive.toString());\n      } else {\n        const isActive = formats[format2] != null;\n        input.classList.toggle(\"ql-active\", isActive);\n        input.setAttribute(\"aria-pressed\", isActive.toString());\n      }\n    });\n  }\n}\nToolbar.DEFAULTS = {};\nfunction addButton(container, format2, value) {\n  const input = document.createElement(\"button\");\n  input.setAttribute(\"type\", \"button\");\n  input.classList.add(`ql-${format2}`);\n  input.setAttribute(\"aria-pressed\", \"false\");\n  if (value != null) {\n    input.value = value;\n    input.setAttribute(\"aria-label\", `${format2}: ${value}`);\n  } else {\n    input.setAttribute(\"aria-label\", format2);\n  }\n  container.appendChild(input);\n}\nfunction addControls(container, groups) {\n  if (!Array.isArray(groups[0])) {\n    groups = [groups];\n  }\n  groups.forEach((controls) => {\n    const group = document.createElement(\"span\");\n    group.classList.add(\"ql-formats\");\n    controls.forEach((control) => {\n      if (typeof control === \"string\") {\n        addButton(group, control);\n      } else {\n        const format2 = Object.keys(control)[0];\n        const value = control[format2];\n        if (Array.isArray(value)) {\n          addSelect(group, format2, value);\n        } else {\n          addButton(group, format2, value);\n        }\n      }\n    });\n    container.appendChild(group);\n  });\n}\nfunction addSelect(container, format2, values) {\n  const input = document.createElement(\"select\");\n  input.classList.add(`ql-${format2}`);\n  values.forEach((value) => {\n    const option = document.createElement(\"option\");\n    if (value !== false) {\n      option.setAttribute(\"value\", String(value));\n    } else {\n      option.setAttribute(\"selected\", \"selected\");\n    }\n    input.appendChild(option);\n  });\n  container.appendChild(input);\n}\nToolbar.DEFAULTS = {\n  container: null,\n  handlers: {\n    clean() {\n      const range = this.quill.getSelection();\n      if (range == null) return;\n      if (range.length === 0) {\n        const formats = this.quill.getFormat();\n        Object.keys(formats).forEach((name) => {\n          if (this.quill.scroll.query(name, Scope.INLINE) != null) {\n            this.quill.format(name, false, Quill.sources.USER);\n          }\n        });\n      } else {\n        this.quill.removeFormat(range.index, range.length, Quill.sources.USER);\n      }\n    },\n    direction(value) {\n      const {\n        align\n      } = this.quill.getFormat();\n      if (value === \"rtl\" && align == null) {\n        this.quill.format(\"align\", \"right\", Quill.sources.USER);\n      } else if (!value && align === \"right\") {\n        this.quill.format(\"align\", false, Quill.sources.USER);\n      }\n      this.quill.format(\"direction\", value, Quill.sources.USER);\n    },\n    indent(value) {\n      const range = this.quill.getSelection();\n      const formats = this.quill.getFormat(range);\n      const indent = parseInt(formats.indent || 0, 10);\n      if (value === \"+1\" || value === \"-1\") {\n        let modifier = value === \"+1\" ? 1 : -1;\n        if (formats.direction === \"rtl\") modifier *= -1;\n        this.quill.format(\"indent\", indent + modifier, Quill.sources.USER);\n      }\n    },\n    link(value) {\n      if (value === true) {\n        value = prompt(\"Enter link URL:\");\n      }\n      this.quill.format(\"link\", value, Quill.sources.USER);\n    },\n    list(value) {\n      const range = this.quill.getSelection();\n      const formats = this.quill.getFormat(range);\n      if (value === \"check\") {\n        if (formats.list === \"checked\" || formats.list === \"unchecked\") {\n          this.quill.format(\"list\", false, Quill.sources.USER);\n        } else {\n          this.quill.format(\"list\", \"unchecked\", Quill.sources.USER);\n        }\n      } else {\n        this.quill.format(\"list\", value, Quill.sources.USER);\n      }\n    }\n  }\n};\nconst alignLeftIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"3\" x2=\"15\" y1=\"9\" y2=\"9\"/><line class=\"ql-stroke\" x1=\"3\" x2=\"13\" y1=\"14\" y2=\"14\"/><line class=\"ql-stroke\" x1=\"3\" x2=\"9\" y1=\"4\" y2=\"4\"/></svg>';\nconst alignCenterIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"15\" x2=\"3\" y1=\"9\" y2=\"9\"/><line class=\"ql-stroke\" x1=\"14\" x2=\"4\" y1=\"14\" y2=\"14\"/><line class=\"ql-stroke\" x1=\"12\" x2=\"6\" y1=\"4\" y2=\"4\"/></svg>';\nconst alignRightIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"15\" x2=\"3\" y1=\"9\" y2=\"9\"/><line class=\"ql-stroke\" x1=\"15\" x2=\"5\" y1=\"14\" y2=\"14\"/><line class=\"ql-stroke\" x1=\"15\" x2=\"9\" y1=\"4\" y2=\"4\"/></svg>';\nconst alignJustifyIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"15\" x2=\"3\" y1=\"9\" y2=\"9\"/><line class=\"ql-stroke\" x1=\"15\" x2=\"3\" y1=\"14\" y2=\"14\"/><line class=\"ql-stroke\" x1=\"15\" x2=\"3\" y1=\"4\" y2=\"4\"/></svg>';\nconst backgroundIcon = '<svg viewbox=\"0 0 18 18\"><g class=\"ql-fill ql-color-label\"><polygon points=\"6 6.868 6 6 5 6 5 7 5.942 7 6 6.868\"/><rect height=\"1\" width=\"1\" x=\"4\" y=\"4\"/><polygon points=\"6.817 5 6 5 6 6 6.38 6 6.817 5\"/><rect height=\"1\" width=\"1\" x=\"2\" y=\"6\"/><rect height=\"1\" width=\"1\" x=\"3\" y=\"5\"/><rect height=\"1\" width=\"1\" x=\"4\" y=\"7\"/><polygon points=\"4 11.439 4 11 3 11 3 12 3.755 12 4 11.439\"/><rect height=\"1\" width=\"1\" x=\"2\" y=\"12\"/><rect height=\"1\" width=\"1\" x=\"2\" y=\"9\"/><rect height=\"1\" width=\"1\" x=\"2\" y=\"15\"/><polygon points=\"4.63 10 4 10 4 11 4.192 11 4.63 10\"/><rect height=\"1\" width=\"1\" x=\"3\" y=\"8\"/><path d=\"M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z\"/><path d=\"M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z\"/><path d=\"M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z\"/><rect height=\"1\" width=\"1\" x=\"12\" y=\"2\"/><rect height=\"1\" width=\"1\" x=\"11\" y=\"3\"/><path d=\"M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z\"/><rect height=\"1\" width=\"1\" x=\"2\" y=\"3\"/><rect height=\"1\" width=\"1\" x=\"6\" y=\"2\"/><rect height=\"1\" width=\"1\" x=\"3\" y=\"2\"/><rect height=\"1\" width=\"1\" x=\"5\" y=\"3\"/><rect height=\"1\" width=\"1\" x=\"9\" y=\"2\"/><rect height=\"1\" width=\"1\" x=\"15\" y=\"14\"/><polygon points=\"13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174\"/><rect height=\"1\" width=\"1\" x=\"13\" y=\"7\"/><rect height=\"1\" width=\"1\" x=\"15\" y=\"5\"/><rect height=\"1\" width=\"1\" x=\"14\" y=\"6\"/><rect height=\"1\" width=\"1\" x=\"15\" y=\"8\"/><rect height=\"1\" width=\"1\" x=\"14\" y=\"9\"/><path d=\"M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z\"/><rect height=\"1\" width=\"1\" x=\"14\" y=\"3\"/><polygon points=\"12 6.868 12 6 11.62 6 12 6.868\"/><rect height=\"1\" width=\"1\" x=\"15\" y=\"2\"/><rect height=\"1\" width=\"1\" x=\"12\" y=\"5\"/><rect height=\"1\" width=\"1\" x=\"13\" y=\"4\"/><polygon points=\"12.933 9 13 9 13 8 12.495 8 12.933 9\"/><rect height=\"1\" width=\"1\" x=\"9\" y=\"14\"/><rect height=\"1\" width=\"1\" x=\"8\" y=\"15\"/><path d=\"M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z\"/><rect height=\"1\" width=\"1\" x=\"5\" y=\"15\"/><path d=\"M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z\"/><rect height=\"1\" width=\"1\" x=\"11\" y=\"15\"/><path d=\"M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z\"/><rect height=\"1\" width=\"1\" x=\"14\" y=\"15\"/><rect height=\"1\" width=\"1\" x=\"15\" y=\"11\"/></g><polyline class=\"ql-stroke\" points=\"5.5 13 9 5 12.5 13\"/><line class=\"ql-stroke\" x1=\"11.63\" x2=\"6.38\" y1=\"11\" y2=\"11\"/></svg>';\nconst blockquoteIcon = '<svg viewbox=\"0 0 18 18\"><rect class=\"ql-fill ql-stroke\" height=\"3\" width=\"3\" x=\"4\" y=\"5\"/><rect class=\"ql-fill ql-stroke\" height=\"3\" width=\"3\" x=\"11\" y=\"5\"/><path class=\"ql-even ql-fill ql-stroke\" d=\"M7,8c0,4.031-3,5-3,5\"/><path class=\"ql-even ql-fill ql-stroke\" d=\"M14,8c0,4.031-3,5-3,5\"/></svg>';\nconst boldIcon = '<svg viewbox=\"0 0 18 18\"><path class=\"ql-stroke\" d=\"M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z\"/><path class=\"ql-stroke\" d=\"M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z\"/></svg>';\nconst cleanIcon = '<svg class=\"\" viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"5\" x2=\"13\" y1=\"3\" y2=\"3\"/><line class=\"ql-stroke\" x1=\"6\" x2=\"9.35\" y1=\"12\" y2=\"3\"/><line class=\"ql-stroke\" x1=\"11\" x2=\"15\" y1=\"11\" y2=\"15\"/><line class=\"ql-stroke\" x1=\"15\" x2=\"11\" y1=\"11\" y2=\"15\"/><rect class=\"ql-fill\" height=\"1\" rx=\"0.5\" ry=\"0.5\" width=\"7\" x=\"2\" y=\"14\"/></svg>';\nconst codeIcon = '<svg viewbox=\"0 0 18 18\"><polyline class=\"ql-even ql-stroke\" points=\"5 7 3 9 5 11\"/><polyline class=\"ql-even ql-stroke\" points=\"13 7 15 9 13 11\"/><line class=\"ql-stroke\" x1=\"10\" x2=\"8\" y1=\"5\" y2=\"13\"/></svg>';\nconst colorIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-color-label ql-stroke ql-transparent\" x1=\"3\" x2=\"15\" y1=\"15\" y2=\"15\"/><polyline class=\"ql-stroke\" points=\"5.5 11 9 3 12.5 11\"/><line class=\"ql-stroke\" x1=\"11.63\" x2=\"6.38\" y1=\"9\" y2=\"9\"/></svg>';\nconst directionLeftToRightIcon = '<svg viewbox=\"0 0 18 18\"><polygon class=\"ql-stroke ql-fill\" points=\"3 11 5 9 3 7 3 11\"/><line class=\"ql-stroke ql-fill\" x1=\"15\" x2=\"11\" y1=\"4\" y2=\"4\"/><path class=\"ql-fill\" d=\"M11,3a3,3,0,0,0,0,6h1V3H11Z\"/><rect class=\"ql-fill\" height=\"11\" width=\"1\" x=\"11\" y=\"4\"/><rect class=\"ql-fill\" height=\"11\" width=\"1\" x=\"13\" y=\"4\"/></svg>';\nconst directionRightToLeftIcon = '<svg viewbox=\"0 0 18 18\"><polygon class=\"ql-stroke ql-fill\" points=\"15 12 13 10 15 8 15 12\"/><line class=\"ql-stroke ql-fill\" x1=\"9\" x2=\"5\" y1=\"4\" y2=\"4\"/><path class=\"ql-fill\" d=\"M5,3A3,3,0,0,0,5,9H6V3H5Z\"/><rect class=\"ql-fill\" height=\"11\" width=\"1\" x=\"5\" y=\"4\"/><rect class=\"ql-fill\" height=\"11\" width=\"1\" x=\"7\" y=\"4\"/></svg>';\nconst formulaIcon = '<svg viewbox=\"0 0 18 18\"><path class=\"ql-fill\" d=\"M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z\"/><rect class=\"ql-fill\" height=\"1.6\" rx=\"0.8\" ry=\"0.8\" width=\"5\" x=\"5.15\" y=\"6.2\"/><path class=\"ql-fill\" d=\"M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z\"/></svg>';\nconst headerIcon = '<svg viewBox=\"0 0 18 18\"><path class=\"ql-fill\" d=\"M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z\"/></svg>';\nconst header2Icon = '<svg viewBox=\"0 0 18 18\"><path class=\"ql-fill\" d=\"M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z\"/></svg>';\nconst header3Icon = '<svg viewBox=\"0 0 18 18\"><path class=\"ql-fill\" d=\"M16.65186,12.30664a2.6742,2.6742,0,0,1-2.915,2.68457,3.96592,3.96592,0,0,1-2.25537-.6709.56007.56007,0,0,1-.13232-.83594L11.64648,13c.209-.34082.48389-.36328.82471-.1543a2.32654,2.32654,0,0,0,1.12256.33008c.71484,0,1.12207-.35156,1.12207-.78125,0-.61523-.61621-.86816-1.46338-.86816H13.2085a.65159.65159,0,0,1-.68213-.41895l-.05518-.10937a.67114.67114,0,0,1,.14307-.78125l.71533-.86914a8.55289,8.55289,0,0,1,.68213-.7373V8.58887a3.93913,3.93913,0,0,1-.748.05469H11.9873a.54085.54085,0,0,1-.605-.60547V7.59863a.54085.54085,0,0,1,.605-.60547h3.75146a.53773.53773,0,0,1,.60547.59375v.17676a1.03723,1.03723,0,0,1-.27539.748L14.74854,10.0293A2.31132,2.31132,0,0,1,16.65186,12.30664ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z\"/></svg>';\nconst header4Icon = '<svg viewBox=\"0 0 18 18\"><path class=\"ql-fill\" d=\"M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm7.05371,7.96582v.38477c0,.39648-.165.60547-.46191.60547h-.47314v1.29785a.54085.54085,0,0,1-.605.60547h-.69336a.54085.54085,0,0,1-.605-.60547V12.95605H11.333a.5412.5412,0,0,1-.60547-.60547v-.15332a1.199,1.199,0,0,1,.22021-.748l2.56348-4.05957a.7819.7819,0,0,1,.72607-.39648h1.27637a.54085.54085,0,0,1,.605.60547v3.7627h.33008A.54055.54055,0,0,1,17.05371,11.96582ZM14.28125,8.7207h-.022a4.18969,4.18969,0,0,1-.38525.81348l-1.188,1.80469v.02246h1.5293V9.60059A7.04058,7.04058,0,0,1,14.28125,8.7207Z\"/></svg>';\nconst header5Icon = '<svg viewBox=\"0 0 18 18\"><path class=\"ql-fill\" d=\"M16.74023,12.18555a2.75131,2.75131,0,0,1-2.91553,2.80566,3.908,3.908,0,0,1-2.25537-.68164.54809.54809,0,0,1-.13184-.8252L11.73438,13c.209-.34082.48389-.36328.8252-.1543a2.23757,2.23757,0,0,0,1.1001.33008,1.01827,1.01827,0,0,0,1.1001-.96777c0-.61621-.53906-.97949-1.25439-.97949a2.15554,2.15554,0,0,0-.64893.09961,1.15209,1.15209,0,0,1-.814.01074l-.12109-.04395a.64116.64116,0,0,1-.45117-.71484l.231-3.00391a.56666.56666,0,0,1,.62744-.583H15.541a.54085.54085,0,0,1,.605.60547v.43945a.54085.54085,0,0,1-.605.60547H13.41748l-.04395.72559a1.29306,1.29306,0,0,1-.04395.30859h.022a2.39776,2.39776,0,0,1,.57227-.07715A2.53266,2.53266,0,0,1,16.74023,12.18555ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z\"/></svg>';\nconst header6Icon = '<svg viewBox=\"0 0 18 18\"><path class=\"ql-fill\" d=\"M14.51758,9.64453a1.85627,1.85627,0,0,0-1.24316.38477H13.252a1.73532,1.73532,0,0,1,1.72754-1.4082,2.66491,2.66491,0,0,1,.5498.06641c.35254.05469.57227.01074.70508-.40723l.16406-.5166a.53393.53393,0,0,0-.373-.75977,4.83723,4.83723,0,0,0-1.17773-.14258c-2.43164,0-3.7627,2.17773-3.7627,4.43359,0,2.47559,1.60645,3.69629,3.19043,3.69629A2.70585,2.70585,0,0,0,16.96,12.19727,2.43861,2.43861,0,0,0,14.51758,9.64453Zm-.23047,3.58691c-.67187,0-1.22168-.81445-1.22168-1.45215,0-.47363.30762-.583.72559-.583.96875,0,1.27734.59375,1.27734,1.12207A.82182.82182,0,0,1,14.28711,13.23145ZM10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Z\"/></svg>';\nconst italicIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"7\" x2=\"13\" y1=\"4\" y2=\"4\"/><line class=\"ql-stroke\" x1=\"5\" x2=\"11\" y1=\"14\" y2=\"14\"/><line class=\"ql-stroke\" x1=\"8\" x2=\"10\" y1=\"14\" y2=\"4\"/></svg>';\nconst imageIcon = '<svg viewbox=\"0 0 18 18\"><rect class=\"ql-stroke\" height=\"10\" width=\"12\" x=\"3\" y=\"4\"/><circle class=\"ql-fill\" cx=\"6\" cy=\"7\" r=\"1\"/><polyline class=\"ql-even ql-fill\" points=\"5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12\"/></svg>';\nconst indentIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"3\" x2=\"15\" y1=\"14\" y2=\"14\"/><line class=\"ql-stroke\" x1=\"3\" x2=\"15\" y1=\"4\" y2=\"4\"/><line class=\"ql-stroke\" x1=\"9\" x2=\"15\" y1=\"9\" y2=\"9\"/><polyline class=\"ql-fill ql-stroke\" points=\"3 7 3 11 5 9 3 7\"/></svg>';\nconst outdentIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"3\" x2=\"15\" y1=\"14\" y2=\"14\"/><line class=\"ql-stroke\" x1=\"3\" x2=\"15\" y1=\"4\" y2=\"4\"/><line class=\"ql-stroke\" x1=\"9\" x2=\"15\" y1=\"9\" y2=\"9\"/><polyline class=\"ql-stroke\" points=\"5 7 5 11 3 9 5 7\"/></svg>';\nconst linkIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"7\" x2=\"11\" y1=\"7\" y2=\"11\"/><path class=\"ql-even ql-stroke\" d=\"M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z\"/><path class=\"ql-even ql-stroke\" d=\"M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z\"/></svg>';\nconst listBulletIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"6\" x2=\"15\" y1=\"4\" y2=\"4\"/><line class=\"ql-stroke\" x1=\"6\" x2=\"15\" y1=\"9\" y2=\"9\"/><line class=\"ql-stroke\" x1=\"6\" x2=\"15\" y1=\"14\" y2=\"14\"/><line class=\"ql-stroke\" x1=\"3\" x2=\"3\" y1=\"4\" y2=\"4\"/><line class=\"ql-stroke\" x1=\"3\" x2=\"3\" y1=\"9\" y2=\"9\"/><line class=\"ql-stroke\" x1=\"3\" x2=\"3\" y1=\"14\" y2=\"14\"/></svg>';\nconst listCheckIcon = '<svg class=\"\" viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"9\" x2=\"15\" y1=\"4\" y2=\"4\"/><polyline class=\"ql-stroke\" points=\"3 4 4 5 6 3\"/><line class=\"ql-stroke\" x1=\"9\" x2=\"15\" y1=\"14\" y2=\"14\"/><polyline class=\"ql-stroke\" points=\"3 14 4 15 6 13\"/><line class=\"ql-stroke\" x1=\"9\" x2=\"15\" y1=\"9\" y2=\"9\"/><polyline class=\"ql-stroke\" points=\"3 9 4 10 6 8\"/></svg>';\nconst listOrderedIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-stroke\" x1=\"7\" x2=\"15\" y1=\"4\" y2=\"4\"/><line class=\"ql-stroke\" x1=\"7\" x2=\"15\" y1=\"9\" y2=\"9\"/><line class=\"ql-stroke\" x1=\"7\" x2=\"15\" y1=\"14\" y2=\"14\"/><line class=\"ql-stroke ql-thin\" x1=\"2.5\" x2=\"4.5\" y1=\"5.5\" y2=\"5.5\"/><path class=\"ql-fill\" d=\"M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z\"/><path class=\"ql-stroke ql-thin\" d=\"M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156\"/><path class=\"ql-stroke ql-thin\" d=\"M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109\"/></svg>';\nconst subscriptIcon = '<svg viewbox=\"0 0 18 18\"><path class=\"ql-fill\" d=\"M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z\"/><path class=\"ql-fill\" d=\"M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z\"/></svg>';\nconst superscriptIcon = '<svg viewbox=\"0 0 18 18\"><path class=\"ql-fill\" d=\"M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z\"/><path class=\"ql-fill\" d=\"M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z\"/></svg>';\nconst strikeIcon = '<svg viewbox=\"0 0 18 18\"><line class=\"ql-stroke ql-thin\" x1=\"15.5\" x2=\"2.5\" y1=\"8.5\" y2=\"9.5\"/><path class=\"ql-fill\" d=\"M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z\"/><path class=\"ql-fill\" d=\"M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z\"/></svg>';\nconst tableIcon = '<svg viewbox=\"0 0 18 18\"><rect class=\"ql-stroke\" height=\"12\" width=\"12\" x=\"3\" y=\"3\"/><rect class=\"ql-fill\" height=\"2\" width=\"3\" x=\"5\" y=\"5\"/><rect class=\"ql-fill\" height=\"2\" width=\"4\" x=\"9\" y=\"5\"/><g class=\"ql-fill ql-transparent\"><rect height=\"2\" width=\"3\" x=\"5\" y=\"8\"/><rect height=\"2\" width=\"4\" x=\"9\" y=\"8\"/><rect height=\"2\" width=\"3\" x=\"5\" y=\"11\"/><rect height=\"2\" width=\"4\" x=\"9\" y=\"11\"/></g></svg>';\nconst underlineIcon = '<svg viewbox=\"0 0 18 18\"><path class=\"ql-stroke\" d=\"M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3\"/><rect class=\"ql-fill\" height=\"1\" rx=\"0.5\" ry=\"0.5\" width=\"12\" x=\"3\" y=\"15\"/></svg>';\nconst videoIcon = '<svg viewbox=\"0 0 18 18\"><rect class=\"ql-stroke\" height=\"12\" width=\"12\" x=\"3\" y=\"3\"/><rect class=\"ql-fill\" height=\"12\" width=\"1\" x=\"5\" y=\"3\"/><rect class=\"ql-fill\" height=\"12\" width=\"1\" x=\"12\" y=\"3\"/><rect class=\"ql-fill\" height=\"2\" width=\"8\" x=\"5\" y=\"8\"/><rect class=\"ql-fill\" height=\"1\" width=\"3\" x=\"3\" y=\"5\"/><rect class=\"ql-fill\" height=\"1\" width=\"3\" x=\"3\" y=\"7\"/><rect class=\"ql-fill\" height=\"1\" width=\"3\" x=\"3\" y=\"10\"/><rect class=\"ql-fill\" height=\"1\" width=\"3\" x=\"3\" y=\"12\"/><rect class=\"ql-fill\" height=\"1\" width=\"3\" x=\"12\" y=\"5\"/><rect class=\"ql-fill\" height=\"1\" width=\"3\" x=\"12\" y=\"7\"/><rect class=\"ql-fill\" height=\"1\" width=\"3\" x=\"12\" y=\"10\"/><rect class=\"ql-fill\" height=\"1\" width=\"3\" x=\"12\" y=\"12\"/></svg>';\nconst Icons = {\n  align: {\n    \"\": alignLeftIcon,\n    center: alignCenterIcon,\n    right: alignRightIcon,\n    justify: alignJustifyIcon\n  },\n  background: backgroundIcon,\n  blockquote: blockquoteIcon,\n  bold: boldIcon,\n  clean: cleanIcon,\n  code: codeIcon,\n  \"code-block\": codeIcon,\n  color: colorIcon,\n  direction: {\n    \"\": directionLeftToRightIcon,\n    rtl: directionRightToLeftIcon\n  },\n  formula: formulaIcon,\n  header: {\n    \"1\": headerIcon,\n    \"2\": header2Icon,\n    \"3\": header3Icon,\n    \"4\": header4Icon,\n    \"5\": header5Icon,\n    \"6\": header6Icon\n  },\n  italic: italicIcon,\n  image: imageIcon,\n  indent: {\n    \"+1\": indentIcon,\n    \"-1\": outdentIcon\n  },\n  link: linkIcon,\n  list: {\n    bullet: listBulletIcon,\n    check: listCheckIcon,\n    ordered: listOrderedIcon\n  },\n  script: {\n    sub: subscriptIcon,\n    super: superscriptIcon\n  },\n  strike: strikeIcon,\n  table: tableIcon,\n  underline: underlineIcon,\n  video: videoIcon\n};\nconst DropdownIcon = '<svg viewbox=\"0 0 18 18\"><polygon class=\"ql-stroke\" points=\"7 11 9 13 11 11 7 11\"/><polygon class=\"ql-stroke\" points=\"7 7 9 5 11 7 7 7\"/></svg>';\nlet optionsCounter = 0;\nfunction toggleAriaAttribute(element, attribute2) {\n  element.setAttribute(attribute2, `${!(element.getAttribute(attribute2) === \"true\")}`);\n}\nclass Picker {\n  constructor(select) {\n    this.select = select;\n    this.container = document.createElement(\"span\");\n    this.buildPicker();\n    this.select.style.display = \"none\";\n    this.select.parentNode.insertBefore(this.container, this.select);\n    this.label.addEventListener(\"mousedown\", () => {\n      this.togglePicker();\n    });\n    this.label.addEventListener(\"keydown\", (event) => {\n      switch (event.key) {\n        case \"Enter\":\n          this.togglePicker();\n          break;\n        case \"Escape\":\n          this.escape();\n          event.preventDefault();\n          break;\n      }\n    });\n    this.select.addEventListener(\"change\", this.update.bind(this));\n  }\n  togglePicker() {\n    this.container.classList.toggle(\"ql-expanded\");\n    toggleAriaAttribute(this.label, \"aria-expanded\");\n    toggleAriaAttribute(this.options, \"aria-hidden\");\n  }\n  buildItem(option) {\n    const item = document.createElement(\"span\");\n    item.tabIndex = \"0\";\n    item.setAttribute(\"role\", \"button\");\n    item.classList.add(\"ql-picker-item\");\n    const value = option.getAttribute(\"value\");\n    if (value) {\n      item.setAttribute(\"data-value\", value);\n    }\n    if (option.textContent) {\n      item.setAttribute(\"data-label\", option.textContent);\n    }\n    item.addEventListener(\"click\", () => {\n      this.selectItem(item, true);\n    });\n    item.addEventListener(\"keydown\", (event) => {\n      switch (event.key) {\n        case \"Enter\":\n          this.selectItem(item, true);\n          event.preventDefault();\n          break;\n        case \"Escape\":\n          this.escape();\n          event.preventDefault();\n          break;\n      }\n    });\n    return item;\n  }\n  buildLabel() {\n    const label = document.createElement(\"span\");\n    label.classList.add(\"ql-picker-label\");\n    label.innerHTML = DropdownIcon;\n    label.tabIndex = \"0\";\n    label.setAttribute(\"role\", \"button\");\n    label.setAttribute(\"aria-expanded\", \"false\");\n    this.container.appendChild(label);\n    return label;\n  }\n  buildOptions() {\n    const options = document.createElement(\"span\");\n    options.classList.add(\"ql-picker-options\");\n    options.setAttribute(\"aria-hidden\", \"true\");\n    options.tabIndex = \"-1\";\n    options.id = `ql-picker-options-${optionsCounter}`;\n    optionsCounter += 1;\n    this.label.setAttribute(\"aria-controls\", options.id);\n    this.options = options;\n    Array.from(this.select.options).forEach((option) => {\n      const item = this.buildItem(option);\n      options.appendChild(item);\n      if (option.selected === true) {\n        this.selectItem(item);\n      }\n    });\n    this.container.appendChild(options);\n  }\n  buildPicker() {\n    Array.from(this.select.attributes).forEach((item) => {\n      this.container.setAttribute(item.name, item.value);\n    });\n    this.container.classList.add(\"ql-picker\");\n    this.label = this.buildLabel();\n    this.buildOptions();\n  }\n  escape() {\n    this.close();\n    setTimeout(() => this.label.focus(), 1);\n  }\n  close() {\n    this.container.classList.remove(\"ql-expanded\");\n    this.label.setAttribute(\"aria-expanded\", \"false\");\n    this.options.setAttribute(\"aria-hidden\", \"true\");\n  }\n  selectItem(item) {\n    let trigger = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n    const selected = this.container.querySelector(\".ql-selected\");\n    if (item === selected) return;\n    if (selected != null) {\n      selected.classList.remove(\"ql-selected\");\n    }\n    if (item == null) return;\n    item.classList.add(\"ql-selected\");\n    this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(item);\n    if (item.hasAttribute(\"data-value\")) {\n      this.label.setAttribute(\"data-value\", item.getAttribute(\"data-value\"));\n    } else {\n      this.label.removeAttribute(\"data-value\");\n    }\n    if (item.hasAttribute(\"data-label\")) {\n      this.label.setAttribute(\"data-label\", item.getAttribute(\"data-label\"));\n    } else {\n      this.label.removeAttribute(\"data-label\");\n    }\n    if (trigger) {\n      this.select.dispatchEvent(new Event(\"change\"));\n      this.close();\n    }\n  }\n  update() {\n    let option;\n    if (this.select.selectedIndex > -1) {\n      const item = (\n        // @ts-expect-error Fix me later\n        this.container.querySelector(\".ql-picker-options\").children[this.select.selectedIndex]\n      );\n      option = this.select.options[this.select.selectedIndex];\n      this.selectItem(item);\n    } else {\n      this.selectItem(null);\n    }\n    const isActive = option != null && option !== this.select.querySelector(\"option[selected]\");\n    this.label.classList.toggle(\"ql-active\", isActive);\n  }\n}\nclass ColorPicker extends Picker {\n  constructor(select, label) {\n    super(select);\n    this.label.innerHTML = label;\n    this.container.classList.add(\"ql-color-picker\");\n    Array.from(this.container.querySelectorAll(\".ql-picker-item\")).slice(0, 7).forEach((item) => {\n      item.classList.add(\"ql-primary\");\n    });\n  }\n  buildItem(option) {\n    const item = super.buildItem(option);\n    item.style.backgroundColor = option.getAttribute(\"value\") || \"\";\n    return item;\n  }\n  selectItem(item, trigger) {\n    super.selectItem(item, trigger);\n    const colorLabel = this.label.querySelector(\".ql-color-label\");\n    const value = item ? item.getAttribute(\"data-value\") || \"\" : \"\";\n    if (colorLabel) {\n      if (colorLabel.tagName === \"line\") {\n        colorLabel.style.stroke = value;\n      } else {\n        colorLabel.style.fill = value;\n      }\n    }\n  }\n}\nclass IconPicker extends Picker {\n  constructor(select, icons2) {\n    super(select);\n    this.container.classList.add(\"ql-icon-picker\");\n    Array.from(this.container.querySelectorAll(\".ql-picker-item\")).forEach((item) => {\n      item.innerHTML = icons2[item.getAttribute(\"data-value\") || \"\"];\n    });\n    this.defaultItem = this.container.querySelector(\".ql-selected\");\n    this.selectItem(this.defaultItem);\n  }\n  selectItem(target, trigger) {\n    super.selectItem(target, trigger);\n    const item = target || this.defaultItem;\n    if (item != null) {\n      if (this.label.innerHTML === item.innerHTML) return;\n      this.label.innerHTML = item.innerHTML;\n    }\n  }\n}\nconst isScrollable = (el) => {\n  const {\n    overflowY\n  } = getComputedStyle(el, null);\n  return overflowY !== \"visible\" && overflowY !== \"clip\";\n};\nclass Tooltip {\n  constructor(quill, boundsContainer) {\n    this.quill = quill;\n    this.boundsContainer = boundsContainer || document.body;\n    this.root = quill.addContainer(\"ql-tooltip\");\n    this.root.innerHTML = this.constructor.TEMPLATE;\n    if (isScrollable(this.quill.root)) {\n      this.quill.root.addEventListener(\"scroll\", () => {\n        this.root.style.marginTop = `${-1 * this.quill.root.scrollTop}px`;\n      });\n    }\n    this.hide();\n  }\n  hide() {\n    this.root.classList.add(\"ql-hidden\");\n  }\n  position(reference2) {\n    const left = reference2.left + reference2.width / 2 - this.root.offsetWidth / 2;\n    const top = reference2.bottom + this.quill.root.scrollTop;\n    this.root.style.left = `${left}px`;\n    this.root.style.top = `${top}px`;\n    this.root.classList.remove(\"ql-flip\");\n    const containerBounds = this.boundsContainer.getBoundingClientRect();\n    const rootBounds = this.root.getBoundingClientRect();\n    let shift = 0;\n    if (rootBounds.right > containerBounds.right) {\n      shift = containerBounds.right - rootBounds.right;\n      this.root.style.left = `${left + shift}px`;\n    }\n    if (rootBounds.left < containerBounds.left) {\n      shift = containerBounds.left - rootBounds.left;\n      this.root.style.left = `${left + shift}px`;\n    }\n    if (rootBounds.bottom > containerBounds.bottom) {\n      const height = rootBounds.bottom - rootBounds.top;\n      const verticalShift = reference2.bottom - reference2.top + height;\n      this.root.style.top = `${top - verticalShift}px`;\n      this.root.classList.add(\"ql-flip\");\n    }\n    return shift;\n  }\n  show() {\n    this.root.classList.remove(\"ql-editing\");\n    this.root.classList.remove(\"ql-hidden\");\n  }\n}\nconst ALIGNS = [false, \"center\", \"right\", \"justify\"];\nconst COLORS = [\"#000000\", \"#e60000\", \"#ff9900\", \"#ffff00\", \"#008a00\", \"#0066cc\", \"#9933ff\", \"#ffffff\", \"#facccc\", \"#ffebcc\", \"#ffffcc\", \"#cce8cc\", \"#cce0f5\", \"#ebd6ff\", \"#bbbbbb\", \"#f06666\", \"#ffc266\", \"#ffff66\", \"#66b966\", \"#66a3e0\", \"#c285ff\", \"#888888\", \"#a10000\", \"#b26b00\", \"#b2b200\", \"#006100\", \"#0047b2\", \"#6b24b2\", \"#444444\", \"#5c0000\", \"#663d00\", \"#666600\", \"#003700\", \"#002966\", \"#3d1466\"];\nconst FONTS = [false, \"serif\", \"monospace\"];\nconst HEADERS = [\"1\", \"2\", \"3\", false];\nconst SIZES = [\"small\", false, \"large\", \"huge\"];\nclass BaseTheme extends Theme {\n  constructor(quill, options) {\n    super(quill, options);\n    const listener = (e2) => {\n      if (!document.body.contains(quill.root)) {\n        document.body.removeEventListener(\"click\", listener);\n        return;\n      }\n      if (this.tooltip != null && // @ts-expect-error\n      !this.tooltip.root.contains(e2.target) && // @ts-expect-error\n      document.activeElement !== this.tooltip.textbox && !this.quill.hasFocus()) {\n        this.tooltip.hide();\n      }\n      if (this.pickers != null) {\n        this.pickers.forEach((picker) => {\n          if (!picker.container.contains(e2.target)) {\n            picker.close();\n          }\n        });\n      }\n    };\n    quill.emitter.listenDOM(\"click\", document.body, listener);\n  }\n  addModule(name) {\n    const module2 = super.addModule(name);\n    if (name === \"toolbar\") {\n      this.extendToolbar(module2);\n    }\n    return module2;\n  }\n  buildButtons(buttons, icons2) {\n    Array.from(buttons).forEach((button) => {\n      const className = button.getAttribute(\"class\") || \"\";\n      className.split(/\\s+/).forEach((name) => {\n        if (!name.startsWith(\"ql-\")) return;\n        name = name.slice(\"ql-\".length);\n        if (icons2[name] == null) return;\n        if (name === \"direction\") {\n          button.innerHTML = icons2[name][\"\"] + icons2[name].rtl;\n        } else if (typeof icons2[name] === \"string\") {\n          button.innerHTML = icons2[name];\n        } else {\n          const value = button.value || \"\";\n          if (value != null && icons2[name][value]) {\n            button.innerHTML = icons2[name][value];\n          }\n        }\n      });\n    });\n  }\n  buildPickers(selects, icons2) {\n    this.pickers = Array.from(selects).map((select) => {\n      if (select.classList.contains(\"ql-align\")) {\n        if (select.querySelector(\"option\") == null) {\n          fillSelect(select, ALIGNS);\n        }\n        if (typeof icons2.align === \"object\") {\n          return new IconPicker(select, icons2.align);\n        }\n      }\n      if (select.classList.contains(\"ql-background\") || select.classList.contains(\"ql-color\")) {\n        const format2 = select.classList.contains(\"ql-background\") ? \"background\" : \"color\";\n        if (select.querySelector(\"option\") == null) {\n          fillSelect(select, COLORS, format2 === \"background\" ? \"#ffffff\" : \"#000000\");\n        }\n        return new ColorPicker(select, icons2[format2]);\n      }\n      if (select.querySelector(\"option\") == null) {\n        if (select.classList.contains(\"ql-font\")) {\n          fillSelect(select, FONTS);\n        } else if (select.classList.contains(\"ql-header\")) {\n          fillSelect(select, HEADERS);\n        } else if (select.classList.contains(\"ql-size\")) {\n          fillSelect(select, SIZES);\n        }\n      }\n      return new Picker(select);\n    });\n    const update = () => {\n      this.pickers.forEach((picker) => {\n        picker.update();\n      });\n    };\n    this.quill.on(Emitter.events.EDITOR_CHANGE, update);\n  }\n}\nBaseTheme.DEFAULTS = merge({}, Theme.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        formula() {\n          this.quill.theme.tooltip.edit(\"formula\");\n        },\n        image() {\n          let fileInput = this.container.querySelector(\"input.ql-image[type=file]\");\n          if (fileInput == null) {\n            fileInput = document.createElement(\"input\");\n            fileInput.setAttribute(\"type\", \"file\");\n            fileInput.setAttribute(\"accept\", this.quill.uploader.options.mimetypes.join(\", \"));\n            fileInput.classList.add(\"ql-image\");\n            fileInput.addEventListener(\"change\", () => {\n              const range = this.quill.getSelection(true);\n              this.quill.uploader.upload(range, fileInput.files);\n              fileInput.value = \"\";\n            });\n            this.container.appendChild(fileInput);\n          }\n          fileInput.click();\n        },\n        video() {\n          this.quill.theme.tooltip.edit(\"video\");\n        }\n      }\n    }\n  }\n});\nclass BaseTooltip extends Tooltip {\n  constructor(quill, boundsContainer) {\n    super(quill, boundsContainer);\n    this.textbox = this.root.querySelector('input[type=\"text\"]');\n    this.listen();\n  }\n  listen() {\n    this.textbox.addEventListener(\"keydown\", (event) => {\n      if (event.key === \"Enter\") {\n        this.save();\n        event.preventDefault();\n      } else if (event.key === \"Escape\") {\n        this.cancel();\n        event.preventDefault();\n      }\n    });\n  }\n  cancel() {\n    this.hide();\n    this.restoreFocus();\n  }\n  edit() {\n    let mode = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : \"link\";\n    let preview = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;\n    this.root.classList.remove(\"ql-hidden\");\n    this.root.classList.add(\"ql-editing\");\n    if (this.textbox == null) return;\n    if (preview != null) {\n      this.textbox.value = preview;\n    } else if (mode !== this.root.getAttribute(\"data-mode\")) {\n      this.textbox.value = \"\";\n    }\n    const bounds = this.quill.getBounds(this.quill.selection.savedRange);\n    if (bounds != null) {\n      this.position(bounds);\n    }\n    this.textbox.select();\n    this.textbox.setAttribute(\"placeholder\", this.textbox.getAttribute(`data-${mode}`) || \"\");\n    this.root.setAttribute(\"data-mode\", mode);\n  }\n  restoreFocus() {\n    this.quill.focus({\n      preventScroll: true\n    });\n  }\n  save() {\n    let {\n      value\n    } = this.textbox;\n    switch (this.root.getAttribute(\"data-mode\")) {\n      case \"link\": {\n        const {\n          scrollTop\n        } = this.quill.root;\n        if (this.linkRange) {\n          this.quill.formatText(this.linkRange, \"link\", value, Emitter.sources.USER);\n          delete this.linkRange;\n        } else {\n          this.restoreFocus();\n          this.quill.format(\"link\", value, Emitter.sources.USER);\n        }\n        this.quill.root.scrollTop = scrollTop;\n        break;\n      }\n      case \"video\": {\n        value = extractVideoUrl(value);\n      }\n      // eslint-disable-next-line no-fallthrough\n      case \"formula\": {\n        if (!value) break;\n        const range = this.quill.getSelection(true);\n        if (range != null) {\n          const index2 = range.index + range.length;\n          this.quill.insertEmbed(\n            index2,\n            // @ts-expect-error Fix me later\n            this.root.getAttribute(\"data-mode\"),\n            value,\n            Emitter.sources.USER\n          );\n          if (this.root.getAttribute(\"data-mode\") === \"formula\") {\n            this.quill.insertText(index2 + 1, \" \", Emitter.sources.USER);\n          }\n          this.quill.setSelection(index2 + 2, Emitter.sources.USER);\n        }\n        break;\n      }\n    }\n    this.textbox.value = \"\";\n    this.hide();\n  }\n}\nfunction extractVideoUrl(url2) {\n  let match3 = url2.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtube\\.com\\/watch.*v=([a-zA-Z0-9_-]+)/) || url2.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n  if (match3) {\n    return `${match3[1] || \"https\"}://www.youtube.com/embed/${match3[2]}?showinfo=0`;\n  }\n  if (match3 = url2.match(/^(?:(https?):\\/\\/)?(?:www\\.)?vimeo\\.com\\/(\\d+)/)) {\n    return `${match3[1] || \"https\"}://player.vimeo.com/video/${match3[2]}/`;\n  }\n  return url2;\n}\nfunction fillSelect(select, values) {\n  let defaultValue = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;\n  values.forEach((value) => {\n    const option = document.createElement(\"option\");\n    if (value === defaultValue) {\n      option.setAttribute(\"selected\", \"selected\");\n    } else {\n      option.setAttribute(\"value\", String(value));\n    }\n    select.appendChild(option);\n  });\n}\nconst TOOLBAR_CONFIG$1 = [[\"bold\", \"italic\", \"link\"], [{\n  header: 1\n}, {\n  header: 2\n}, \"blockquote\"]];\nclass BubbleTooltip extends BaseTooltip {\n  constructor(quill, bounds) {\n    super(quill, bounds);\n    this.quill.on(Emitter.events.EDITOR_CHANGE, (type, range, oldRange, source) => {\n      if (type !== Emitter.events.SELECTION_CHANGE) return;\n      if (range != null && range.length > 0 && source === Emitter.sources.USER) {\n        this.show();\n        this.root.style.left = \"0px\";\n        this.root.style.width = \"\";\n        this.root.style.width = `${this.root.offsetWidth}px`;\n        const lines = this.quill.getLines(range.index, range.length);\n        if (lines.length === 1) {\n          const bounds2 = this.quill.getBounds(range);\n          if (bounds2 != null) {\n            this.position(bounds2);\n          }\n        } else {\n          const lastLine = lines[lines.length - 1];\n          const index2 = this.quill.getIndex(lastLine);\n          const length = Math.min(lastLine.length() - 1, range.index + range.length - index2);\n          const indexBounds = this.quill.getBounds(new Range$1(index2, length));\n          if (indexBounds != null) {\n            this.position(indexBounds);\n          }\n        }\n      } else if (document.activeElement !== this.textbox && this.quill.hasFocus()) {\n        this.hide();\n      }\n    });\n  }\n  listen() {\n    super.listen();\n    this.root.querySelector(\".ql-close\").addEventListener(\"click\", () => {\n      this.root.classList.remove(\"ql-editing\");\n    });\n    this.quill.on(Emitter.events.SCROLL_OPTIMIZE, () => {\n      setTimeout(() => {\n        if (this.root.classList.contains(\"ql-hidden\")) return;\n        const range = this.quill.getSelection();\n        if (range != null) {\n          const bounds = this.quill.getBounds(range);\n          if (bounds != null) {\n            this.position(bounds);\n          }\n        }\n      }, 1);\n    });\n  }\n  cancel() {\n    this.show();\n  }\n  position(reference2) {\n    const shift = super.position(reference2);\n    const arrow = this.root.querySelector(\".ql-tooltip-arrow\");\n    arrow.style.marginLeft = \"\";\n    if (shift !== 0) {\n      arrow.style.marginLeft = `${-1 * shift - arrow.offsetWidth / 2}px`;\n    }\n    return shift;\n  }\n}\n__publicField(BubbleTooltip, \"TEMPLATE\", ['<span class=\"ql-tooltip-arrow\"></span>', '<div class=\"ql-tooltip-editor\">', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-close\"></a>', \"</div>\"].join(\"\"));\nclass BubbleTheme extends BaseTheme {\n  constructor(quill, options) {\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG$1;\n    }\n    super(quill, options);\n    this.quill.container.classList.add(\"ql-bubble\");\n  }\n  extendToolbar(toolbar) {\n    this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n    if (toolbar.container != null) {\n      this.tooltip.root.appendChild(toolbar.container);\n      this.buildButtons(toolbar.container.querySelectorAll(\"button\"), Icons);\n      this.buildPickers(toolbar.container.querySelectorAll(\"select\"), Icons);\n    }\n  }\n}\nBubbleTheme.DEFAULTS = merge({}, BaseTheme.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link(value) {\n          if (!value) {\n            this.quill.format(\"link\", false, Quill.sources.USER);\n          } else {\n            this.quill.theme.tooltip.edit();\n          }\n        }\n      }\n    }\n  }\n});\nconst TOOLBAR_CONFIG = [[{\n  header: [\"1\", \"2\", \"3\", false]\n}], [\"bold\", \"italic\", \"underline\", \"link\"], [{\n  list: \"ordered\"\n}, {\n  list: \"bullet\"\n}], [\"clean\"]];\nclass SnowTooltip extends BaseTooltip {\n  constructor() {\n    super(...arguments);\n    __publicField(this, \"preview\", this.root.querySelector(\"a.ql-preview\"));\n  }\n  listen() {\n    super.listen();\n    this.root.querySelector(\"a.ql-action\").addEventListener(\"click\", (event) => {\n      if (this.root.classList.contains(\"ql-editing\")) {\n        this.save();\n      } else {\n        this.edit(\"link\", this.preview.textContent);\n      }\n      event.preventDefault();\n    });\n    this.root.querySelector(\"a.ql-remove\").addEventListener(\"click\", (event) => {\n      if (this.linkRange != null) {\n        const range = this.linkRange;\n        this.restoreFocus();\n        this.quill.formatText(range, \"link\", false, Emitter.sources.USER);\n        delete this.linkRange;\n      }\n      event.preventDefault();\n      this.hide();\n    });\n    this.quill.on(Emitter.events.SELECTION_CHANGE, (range, oldRange, source) => {\n      if (range == null) return;\n      if (range.length === 0 && source === Emitter.sources.USER) {\n        const [link2, offset] = this.quill.scroll.descendant(Link, range.index);\n        if (link2 != null) {\n          this.linkRange = new Range$1(range.index - offset, link2.length());\n          const preview = Link.formats(link2.domNode);\n          this.preview.textContent = preview;\n          this.preview.setAttribute(\"href\", preview);\n          this.show();\n          const bounds = this.quill.getBounds(this.linkRange);\n          if (bounds != null) {\n            this.position(bounds);\n          }\n          return;\n        }\n      } else {\n        delete this.linkRange;\n      }\n      this.hide();\n    });\n  }\n  show() {\n    super.show();\n    this.root.removeAttribute(\"data-mode\");\n  }\n}\n__publicField(SnowTooltip, \"TEMPLATE\", ['<a class=\"ql-preview\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"about:blank\"></a>', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-action\"></a>', '<a class=\"ql-remove\"></a>'].join(\"\"));\nclass SnowTheme extends BaseTheme {\n  constructor(quill, options) {\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG;\n    }\n    super(quill, options);\n    this.quill.container.classList.add(\"ql-snow\");\n  }\n  extendToolbar(toolbar) {\n    if (toolbar.container != null) {\n      toolbar.container.classList.add(\"ql-snow\");\n      this.buildButtons(toolbar.container.querySelectorAll(\"button\"), Icons);\n      this.buildPickers(toolbar.container.querySelectorAll(\"select\"), Icons);\n      this.tooltip = new SnowTooltip(this.quill, this.options.bounds);\n      if (toolbar.container.querySelector(\".ql-link\")) {\n        this.quill.keyboard.addBinding({\n          key: \"k\",\n          shortKey: true\n        }, (_range, context) => {\n          toolbar.handlers.link.call(toolbar, !context.format.link);\n        });\n      }\n    }\n  }\n}\nSnowTheme.DEFAULTS = merge({}, BaseTheme.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link(value) {\n          if (value) {\n            const range = this.quill.getSelection();\n            if (range == null || range.length === 0) return;\n            let preview = this.quill.getText(range);\n            if (/^\\S+@\\S+\\.\\S+$/.test(preview) && preview.indexOf(\"mailto:\") !== 0) {\n              preview = `mailto:${preview}`;\n            }\n            const {\n              tooltip\n            } = this.quill.theme;\n            tooltip.edit(\"link\", preview);\n          } else {\n            this.quill.format(\"link\", false, Quill.sources.USER);\n          }\n        }\n      }\n    }\n  }\n});\nQuill.register({\n  \"attributors/attribute/direction\": DirectionAttribute,\n  \"attributors/class/align\": AlignClass,\n  \"attributors/class/background\": BackgroundClass,\n  \"attributors/class/color\": ColorClass,\n  \"attributors/class/direction\": DirectionClass,\n  \"attributors/class/font\": FontClass,\n  \"attributors/class/size\": SizeClass,\n  \"attributors/style/align\": AlignStyle,\n  \"attributors/style/background\": BackgroundStyle,\n  \"attributors/style/color\": ColorStyle,\n  \"attributors/style/direction\": DirectionStyle,\n  \"attributors/style/font\": FontStyle,\n  \"attributors/style/size\": SizeStyle\n}, true);\nQuill.register({\n  \"formats/align\": AlignClass,\n  \"formats/direction\": DirectionClass,\n  \"formats/indent\": IndentClass,\n  \"formats/background\": BackgroundStyle,\n  \"formats/color\": ColorStyle,\n  \"formats/font\": FontClass,\n  \"formats/size\": SizeClass,\n  \"formats/blockquote\": Blockquote,\n  \"formats/code-block\": CodeBlock,\n  \"formats/header\": Header,\n  \"formats/list\": ListItem,\n  \"formats/bold\": Bold,\n  \"formats/code\": Code,\n  \"formats/italic\": Italic,\n  \"formats/link\": Link,\n  \"formats/script\": Script,\n  \"formats/strike\": Strike,\n  \"formats/underline\": Underline,\n  \"formats/formula\": Formula,\n  \"formats/image\": Image,\n  \"formats/video\": Video,\n  \"modules/syntax\": Syntax,\n  \"modules/table\": Table,\n  \"modules/toolbar\": Toolbar,\n  \"themes/bubble\": BubbleTheme,\n  \"themes/snow\": SnowTheme,\n  \"ui/icons\": Icons,\n  \"ui/picker\": Picker,\n  \"ui/icon-picker\": IconPicker,\n  \"ui/color-picker\": ColorPicker,\n  \"ui/tooltip\": Tooltip\n}, true);\nconst RichtextMixin = {\n  name: \"richtext-mixin\",\n  initialState: {\n    quill: null\n  },\n  created() {\n    importInlineCSS(\"quill\", () => import(\"./quill.snow-BMrontFB.js\"));\n    this.quill = null;\n    this.listCallbacks.attach(\n      this.addCallback.bind(this),\n      \"RichtextMixin:addCallback\"\n    );\n  },\n  getPlaceHolderValue() {\n    return this.element.hasAttribute(\"placeholder\") ? this.element.getAttribute(\"placeholder\") : \"\";\n  },\n  addCallback(value, listCallbacks) {\n    if (this.quill == null) {\n      const toolbarOptions = [\n        [\"bold\", \"italic\"],\n        [\"blockquote\"],\n        [{ header: [1, 2, 3, 4, 5, 6, false] }],\n        [{ list: \"ordered\" }, { list: \"bullet\" }],\n        [\"link\"],\n        [\"clean\"]\n      ];\n      const richtext = this.element.querySelector(\n        \"[data-richtext]\"\n      );\n      this.quill = new Quill(richtext, {\n        modules: { toolbar: toolbarOptions },\n        placeholder: this.getPlaceHolderValue(),\n        theme: \"snow\"\n      });\n    }\n    const mdParser = new MarkdownIt({\n      html: true\n    });\n    const formattedValue = this.value.replace(/\\r\\n|\\n/g, \"<br>\");\n    const html = mdParser.render(formattedValue);\n    const delta = this.quill.clipboard.convert({ html });\n    this.quill.setContents(delta);\n    if (this.isRequired()) {\n      this.createHiddenRequiredInput();\n      this.quill.on(\"text-change\", this.onTextChange.bind(this));\n    }\n    const nextProcessor = listCallbacks.shift();\n    if (nextProcessor) nextProcessor(value, listCallbacks);\n  },\n  isRequired() {\n    return Array.from(this.element.attributes).some(\n      (attr) => attr.name === \"required\"\n    );\n  },\n  createHiddenRequiredInput() {\n    const attributeName = this.getAttributeValue(\"name\");\n    this.hiddenInput = document.querySelector(\n      `input[name=\"${`${attributeName}-hidden`}\"]`\n    );\n    if (!this.hiddenInput) {\n      this.hiddenInput = this.createHiddenInput(`${attributeName}-hidden`);\n      this.element.appendChild(this.hiddenInput);\n      this.addInvalidEventListener();\n    }\n    this.hiddenInput.value = this.quill.getText();\n  },\n  createHiddenInput(attributeName) {\n    const input = document.createElement(\"input\");\n    input.name = attributeName;\n    input.setAttribute(\"required\", \"true\");\n    input.style.opacity = \"0\";\n    input.style.position = \"absolute\";\n    input.style.pointerEvents = \"none\";\n    return input;\n  },\n  getAttributeValue(attributeName) {\n    const attribute2 = Array.from(this.element.attributes).find(\n      (attr) => attr.name === attributeName\n    );\n    return attribute2 ? attribute2.value : \"\";\n  },\n  displayCustomErrorMessage(message) {\n    const richtext = this.element.querySelector(\"[data-richtext]\");\n    if (richtext) {\n      let errorMessageElement = richtext.querySelector(\n        \".required-error-message\"\n      );\n      if (!errorMessageElement) {\n        errorMessageElement = document.createElement(\"div\");\n        errorMessageElement.className = \"required-error-message\";\n      }\n      richtext.appendChild(errorMessageElement);\n      errorMessageElement.textContent = message;\n      richtext.classList.add(\"error-border-richtext\");\n    }\n  },\n  addInvalidEventListener() {\n    this.hiddenInput.addEventListener(\"invalid\", (e2) => {\n      e2.preventDefault();\n      this.displayCustomErrorMessage(\"Please fill out this field.\");\n    });\n  },\n  onTextChange() {\n    this.hiddenInput.value = this.quill.getText();\n    this.removeErrorMessageAndStyling();\n  },\n  removeErrorMessageAndStyling() {\n    const richtext = this.element.querySelector(\"[data-richtext]\");\n    const errorMessageElement = richtext.querySelector(\n      \".required-error-message\"\n    );\n    if (errorMessageElement) errorMessageElement.remove();\n    richtext.classList.remove(\"error-border-richtext\");\n  }\n};\nconst callbackDirectory = {\n  autocompletion: AutocompletionMixin,\n  richtext: RichtextMixin,\n  editor: EditorMixin\n};\nconst index$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  AutocompletionMixin,\n  EditorMixin,\n  RichtextMixin,\n  callbackDirectory\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst AddableMixin = {\n  name: \"addable-mixin\",\n  created() {\n    this.listTemplateAdditions.attach(\n      this.addableValue.bind(this),\n      \"AddableMixin:addableValue\"\n    );\n  },\n  getAddableAttributes() {\n    const addableAttr = Array.from(this.element.attributes).filter(\n      (a2) => a2.name.startsWith(\"addable-\")\n    );\n    const cleanAddableAttr = {};\n    for (const attr of addableAttr)\n      cleanAddableAttr[attr.name.replace(\"addable-\", \"\")] = attr.value;\n    if (!Object.hasOwn(cleanAddableAttr, \"data-src\"))\n      cleanAddableAttr[\"data-src\"] = this.range;\n    return cleanAddableAttr;\n  },\n  addableValue(template, listTemplateAdditions, attributes) {\n    const addables = this.getAddableAttributes(attributes);\n    const newTemplate = x`\n      ${template}\n      <solid-form ...=${spread(addables)}>\n      </solid-form>\n    `;\n    const nextProcessor = listTemplateAdditions.shift();\n    if (nextProcessor) nextProcessor(newTemplate, listTemplateAdditions);\n  }\n};\nconst LabelLastMixin = {\n  name: \"label-last-mixin\",\n  created() {\n    this.listTemplateAdditions.attach(\n      this.addLabelLast.bind(this),\n      \"LabelLastMixin:addLabelLast\"\n    );\n  },\n  addLabelLast(template, listTemplateAdditions) {\n    const newTemplate = x`${template}<label>${this.label || this.name}</label>`;\n    const nextProcessor = listTemplateAdditions.shift();\n    if (nextProcessor) nextProcessor(newTemplate, listTemplateAdditions);\n  }\n};\nconst LabelMixin = {\n  name: \"label-mixin\",\n  created() {\n    this.listAttributes.id = uniqID();\n    this.listTemplateAdditions.attach(\n      this.addLabel.bind(this),\n      \"LabelMixin:addLabel\"\n    );\n  },\n  addLabel(template, listTemplateAdditions) {\n    const newTemplate = x`<label for=\"${this.listAttributes.id}\">${this.label || this.name}</label>${template}`;\n    const nextProcessor = listTemplateAdditions.shift();\n    if (nextProcessor) nextProcessor(newTemplate, listTemplateAdditions);\n  }\n};\nconst templateAdditionDirectory = {\n  label: LabelMixin,\n  labellast: LabelLastMixin,\n  addable: AddableMixin\n};\nconst index$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  AddableMixin,\n  LabelLastMixin,\n  LabelMixin,\n  templateAdditionDirectory\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst LinkTextMixin = {\n  name: \"link-text-mixin\",\n  attributes: {\n    linkText: {\n      type: String,\n      default: \"\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"linkText\");\n      }\n    }\n  }\n};\nconst defaultTemplates = {\n  action: {\n    template: (value, attributes) => x`\n      <solid-link\n        data-src=${o$2(attributes.src)}\n        next=${o$2(value)}\n        id=${o$2(attributes.id)}\n        link-text=${o$2(attributes.linkText)}\n      >\n        ${attributes.linkText == null ? attributes.name || \"\" : attributes.linkText}\n      </solid-link>\n    `,\n    dependencies: [LinkTextMixin]\n  },\n  multiple: {\n    template: (value, attributes) => x`\n      <solid-display\n        data-src=${value || \"\"}\n        fields=${o$2(attributes.fields)}\n        next=${o$2(attributes.next)}\n        empty-widget=${o$2(attributes.emptyWidget)}\n      ></solid-display>\n    `,\n    dependencies: []\n  }\n};\nconst AltMixin = {\n  name: \"alt-mixin\",\n  attributes: {\n    alt: {\n      type: String,\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"alt\");\n      }\n    }\n  }\n};\nconst EditableMixin = {\n  name: \"editable-mixin\",\n  use: [StoreMixin],\n  // used to get context\n  attributes: {\n    editable: {\n      type: Boolean,\n      default: null,\n      callback: function(newValue) {\n        if (newValue !== null) this.listAttributes.editable = true;\n      }\n    },\n    valueId: {\n      type: String,\n      default: \"\"\n    },\n    buttonLabel: {\n      type: String,\n      default: \"Modifier\"\n    }\n  },\n  created() {\n    this.listTemplateAdditions.attach(\n      this.addEditButton.bind(this),\n      \"EditableMixin:addEditButton\"\n    );\n  },\n  addEditButton(template, listTemplateAdditions) {\n    let newTemplate = null;\n    if (this.editable !== null) {\n      newTemplate = x`${template}<button @click=${this.activateEditableField.bind(this)}>${this.buttonLabel}</button>`;\n    }\n    const nextProcessor = listTemplateAdditions.shift();\n    if (nextProcessor)\n      nextProcessor(newTemplate || template, listTemplateAdditions);\n  },\n  activateEditableField(e2) {\n    const editableField = this.element.querySelector(\"[data-editable]\");\n    const editButton = e2.target;\n    editableField.toggleAttribute(\"contenteditable\", true);\n    editableField.focus();\n    editButton.toggleAttribute(\"disabled\", true);\n    editableField.addEventListener(\n      \"focusout\",\n      () => this.save(editableField, editButton)\n    );\n  },\n  save(editableField, editButton) {\n    editableField.toggleAttribute(\"contenteditable\", false);\n    editButton.removeAttribute(\"disabled\");\n    if (!this.name || !this.valueId) {\n      console.warn(\"Some attributes are missing to perform the update\");\n      return;\n    }\n    const resource = {};\n    resource[this.name] = editableField.innerText;\n    resource[\"@context\"] = this.context;\n    store.patch(resource, this.valueId);\n  }\n};\nconst displayTemplates = {\n  value: {\n    template: (value) => x`${value}`,\n    dependencies: []\n  },\n  div: {\n    template: (value, attributes) => x`<div name=${o$2(attributes.name)} ?data-editable=${attributes.editable}>${value}</div>`,\n    dependencies: [EditableMixin]\n  },\n  link: {\n    template: (value, attributes) => x`\n      <a\n        name=${o$2(attributes.name)}\n        href=${(attributes.mailto || attributes.tel || \"\") + (value || \"#\")}\n        target=${o$2(attributes.target)}\n        ?data-editable=${attributes.editable}\n        id=${o$2(attributes.id)}\n        link-text=${o$2(attributes.linkText)}\n      >\n        ${attributes.linkText || value || \"\"}\n      </a>\n    `,\n    dependencies: [EditableMixin, LinkTextMixin]\n  },\n  img: {\n    template: (value, attributes) => x`\n      <img\n        name=${o$2(attributes.name)}\n        src=${o$2(value)}\n        alt=${o$2(attributes.alt)}\n        style=\"max-width: 100%; max-height: 100%;\"\n      />\n    `,\n    dependencies: [AltMixin]\n  },\n  boolean: {\n    template: (value, attributes) => x`${value === \"true\" ? x`<label>${attributes.label || attributes.name || \"\"}</label>` : \"\"}`,\n    dependencies: []\n  }\n};\nconst FilterRangeFormMixin = {\n  name: \"filter-range-form-mixin\",\n  attributes: {\n    startValue: {\n      type: String,\n      default: \"\",\n      callback: function(value) {\n        this.addToAttributes(this.getDefaultValue(value), \"startValue\");\n      }\n    },\n    endValue: {\n      type: String,\n      default: \"\",\n      callback: function(value) {\n        this.addToAttributes(this.getDefaultValue(value), \"endValue\");\n      }\n    }\n  },\n  getDefaultValue(value) {\n    if (value === \"today\") return (/* @__PURE__ */ new Date()).toISOString().split(\"T\")[0];\n    return value;\n  },\n  getValue() {\n    if (!this.dataHolder) return [];\n    if (this.dataHolder.length !== 2)\n      this.showDataHolderError(2, this.dataHolder.length);\n    return [\n      // we expect 2 values, one min and one max\n      this.getValueFromElement(this.dataHolder[0]),\n      this.getValueFromElement(this.dataHolder[1])\n    ];\n  },\n  get type() {\n    return \"range\";\n  }\n};\nconst FormCheckboxMixin = {\n  name: \"form-checkbox-mixin\",\n  getValueFromElement(element) {\n    return element.checked;\n  },\n  get type() {\n    return \"boolean\";\n  }\n};\nconst FormCheckboxesMixin = {\n  name: \"form-checkboxes-mixin\",\n  attributes: {\n    values: {\n      type: String,\n      default: \"\",\n      callback: function(value) {\n        if (!value) return;\n        try {\n          this.listAttributes.values = JSON.parse(value);\n        } catch (e2) {\n          console.error(e2);\n          this.listAttributes.values = [];\n        }\n        this.render();\n        this.element.dispatchEvent(new Event(\"change\"));\n      }\n    }\n  },\n  created() {\n    this.listAttributes.values = [];\n  },\n  getValue() {\n    const options = Array.from(\n      this.element.querySelectorAll(\"input\")\n    );\n    return options.filter((el) => el.checked).map((el) => {\n      if (!el.value) return null;\n      let value = el.value;\n      try {\n        value = JSON.parse(el.value);\n      } catch {\n      }\n      return value;\n    });\n  },\n  get type() {\n    return this.enum === \"\" ? \"resource\" : \"string\";\n  },\n  get multiple() {\n    return true;\n  }\n};\nconst FormDropdownMixin = {\n  name: \"form-dropdown-mixin\",\n  attributes: {\n    values: {\n      // used to set more than 1 value, for multiple select\n      type: String,\n      default: \"\",\n      callback: function(value) {\n        if (value) {\n          try {\n            this.listAttributes.values = JSON.parse(value);\n          } catch (e2) {\n            console.error(e2);\n            this.listAttributes.values = [];\n          }\n          this.render();\n          this.dispatchChange();\n        }\n      }\n    },\n    dataId: {\n      type: String,\n      default: \"\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"id\");\n      }\n    }\n  },\n  created() {\n    this.listAttributes.values = [];\n    if (this.listAttributes.value && !JSON.parse(this.listAttributes.value[\"@id\"]) && Array.isArray(JSON.parse(this.listAttributes.value))) {\n      this.listAttributes.values = this.listAttributes.value;\n    }\n    if (this.multiple) this.listAttributes.multiple = true;\n  },\n  dispatchChange() {\n    if (!this.element.querySelector(\"select\")) return;\n    this.element.querySelector(\"select\").dispatchEvent(new Event(\"change\"));\n  },\n  getValue() {\n    if (!this.dataHolder) return \"\";\n    if (!this.multiple) {\n      if (this.dataHolder.length > 1)\n        this.showDataHolderError(1, this.dataHolder.length);\n      return this.getValueFromElement(this.dataHolder[0]);\n    }\n    const options = Array.from(\n      this.element.querySelectorAll(\"option\")\n    );\n    return options.filter((el) => el.selected).map((el) => el.value ? JSON.parse(el.value) : null);\n  },\n  get type() {\n    return this.enum === \"\" ? \"resource\" : \"string\";\n  },\n  get multiple() {\n    return this.element.hasAttribute(\"multiple\");\n  }\n};\nconst FormFileMixin = {\n  name: \"form-file-mixin\",\n  attributes: {\n    uploadUrl: {\n      type: String,\n      default: \"\"\n    }\n  },\n  initialState: {\n    initialValue: \"\"\n  },\n  created() {\n    this.listAttributes.output = \"\";\n    this.listAttributes.resetButtonHidden = true;\n    this.listAttributes.selectFile = this.selectFile.bind(this);\n    this.listAttributes.resetFile = this.resetFile.bind(this);\n  },\n  attached() {\n    this.element.closest(\"form\").addEventListener(\"reset\", this.resetFormFile.bind(this));\n    this.element.closest(\"solid-form\").addEventListener(\"populate\", this.onPopulate.bind(this));\n  },\n  onPopulate() {\n    const dataHolder = this.element.querySelector(\"input[data-holder]\");\n    dataHolder.value = this.value;\n    dataHolder.dispatchEvent(new Event(\"change\"));\n  },\n  resetFormFile(e2) {\n    if (e2.target && e2.target.contains(this.element)) {\n      if (this.initialValue !== \"\") {\n        this.value = this.initialValue;\n      }\n      this.listAttributes.resetButtonHidden = true;\n      this.planRender();\n      const dataHolder = this.element.querySelector(\"input[data-holder]\");\n      dataHolder.value = this.value;\n      dataHolder.dispatchEvent(new Event(\"change\"));\n    }\n  },\n  selectFile() {\n    var _a3, _b;\n    if (this.uploadUrl === null) return;\n    if (this.initialValue === \"\") {\n      this.initialValue = this.value;\n    }\n    const filePicker = this.element.querySelector('input[type=\"file\"]');\n    if (((_a3 = filePicker.files) == null ? void 0 : _a3.length) === 0) return;\n    const dataHolder = this.element.querySelector(\"input[data-holder]\");\n    this.listAttributes.output = \"⏳\";\n    this.planRender();\n    const file = (_b = filePicker.files) == null ? void 0 : _b[0];\n    const formData = new FormData();\n    formData.append(\"file\", file);\n    store.fetchAuthn(this.uploadUrl, {\n      method: \"POST\",\n      body: formData\n    }).then((response) => this.updateFile(dataHolder, response)).catch((error2) => {\n      this.listAttributes.fileValue = \"\";\n      this.listAttributes.output = \"upload error\";\n      this.planRender();\n      console.error(error2);\n    });\n  },\n  updateFile(dataHolder, response) {\n    const location2 = response.headers.get(\"location\");\n    if (location2 == null) {\n      this.listAttributes.output = \"header location not found!\";\n    } else {\n      this.value = location2;\n      this.listAttributes.output = \"\";\n      this.listAttributes.resetButtonHidden = false;\n      dataHolder.value = location2;\n      dataHolder.dispatchEvent(new Event(\"change\"));\n      this.planRender();\n    }\n  },\n  resetFile(event) {\n    event.preventDefault();\n    this.value = \"\";\n    const filePicker = this.element.querySelector('input[type=\"file\"]');\n    const dataHolder = this.element.querySelector(\"input[data-holder]\");\n    if (filePicker && dataHolder) {\n      filePicker.value = dataHolder.value = \"\";\n    }\n    this.listAttributes.fileValue = \"\";\n    this.listAttributes.output = \"\";\n    this.listAttributes.resetButtonHidden = true;\n    dataHolder.dispatchEvent(new Event(\"change\"));\n    this.planRender();\n  }\n};\nconst FormLengthMixin = {\n  name: \"form-length-mixin\",\n  attributes: {\n    maxlength: {\n      type: Number,\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"maxlength\");\n      }\n    },\n    minlength: {\n      type: Number,\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"minlength\");\n      }\n    }\n  }\n};\nconst FormMinMaxMixin = {\n  name: \"form-min-max-mixin\",\n  attributes: {\n    min: {\n      type: Number,\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"min\");\n      }\n    },\n    max: {\n      type: Number,\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"max\");\n      }\n    }\n  }\n};\nconst FormMixin = {\n  name: \"form-mixin\",\n  attributes: {\n    required: {\n      type: Boolean,\n      default: false,\n      callback: function() {\n        this.listAttributes.required = true;\n      }\n    },\n    autocomplete: {\n      type: String,\n      default: \"\",\n      callback: function(value) {\n        this.addToAttributes(value, \"autocomplete\");\n      }\n    }\n  },\n  attached() {\n    this.listAttributes.onChange = this.onChange.bind(this);\n  },\n  onChange(e2) {\n    e2.preventDefault();\n    e2.stopPropagation();\n    this.element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n  },\n  getValue() {\n    if (!this.dataHolder || this.dataHolder.length === 0) return this.value;\n    if (this.dataHolder.length > 1)\n      this.showDataHolderError(1, this.dataHolder.length);\n    return this.getValueFromElement(this.dataHolder[0]);\n  },\n  get type() {\n    return \"string\";\n  },\n  get multiple() {\n    return false;\n  },\n  get dataHolder() {\n    const dataHolders = Array.from(\n      this.element.querySelectorAll(\"[data-holder]\")\n    );\n    const widgetDataHolders = dataHolders.filter((element) => {\n      const dataHolderAncestor = element.parentElement ? element.parentElement.closest(\"[data-holder]\") : null;\n      return dataHolderAncestor === this.element || !dataHolderAncestor || !this.element.contains(dataHolderAncestor);\n    });\n    return widgetDataHolders.length > 0 ? widgetDataHolders : null;\n  },\n  getValueFromElement(element) {\n    return element.component ? element.component.getValue() : element.value;\n  },\n  showDataHolderError(expected, found) {\n    console.warn(\n      `Expected ${expected} data-holder element in ${this.element.tagName}. Found ${found}`\n    );\n  }\n};\nconst FormNumberMixin = {\n  name: \"form-number-mixin\",\n  getValueFromElement(element) {\n    return element.value ? Number(element.value) : \"\";\n  },\n  get type() {\n    return \"number\";\n  }\n};\nconst FormRadioMixin = {\n  name: \"form-radio-mixin\",\n  created() {\n    this.listAttributes.id = uniqID();\n  },\n  getValue() {\n    const checkedElement = this.element.querySelector(\n      \"input[type=radio]:checked\"\n    );\n    return checkedElement ? checkedElement.value : \"\";\n  }\n};\nconst FormStepMixin = {\n  name: \"form-time-mixin\",\n  attributes: {\n    step: {\n      type: Number,\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"step\");\n      }\n    }\n  }\n};\nconst MultipleFormMixin = {\n  name: \"multiple-form-mixin\",\n  use: [StoreMixin],\n  attributes: {\n    widget: {\n      type: String,\n      default: \"solid-form-text\"\n    },\n    addLabel: {\n      type: String,\n      default: \"+\",\n      callback: function(value) {\n        if (value !== this.listAttributes.addLabel)\n          this.listAttributes.addLabel = value;\n        this.planRender();\n      }\n    },\n    removeLabel: {\n      type: String,\n      default: \"×\",\n      callback: function(value) {\n        if (value !== this.listAttributes.removeLabel)\n          this.listAttributes.removeLabel = value;\n        this.planRender();\n      }\n    },\n    range: {\n      type: String,\n      default: \"\"\n    },\n    addClass: {\n      type: String,\n      default: void 0,\n      callback: function(value) {\n        if (value !== this.listAttributes.addClass)\n          this.listAttributes.addClass = value;\n        this.planRender();\n      }\n    },\n    removeClass: {\n      type: String,\n      default: void 0,\n      callback: function(value) {\n        if (value !== this.listAttributes.removeClass)\n          this.listAttributes.removeClass = value;\n        this.planRender();\n      }\n    }\n  },\n  created() {\n    this.listValueTransformations.attach(\n      this.setDataSrc.bind(this),\n      \"MultipleFormMixin:setDataSrc\"\n    );\n    this.listAttributes.children = [];\n    this.listAttributes.addLabel = this.addLabel;\n    this.listAttributes.removeLabel = this.removeLabel;\n    this.listAttributes.addClass = this.addClass;\n    this.listAttributes.removeClass = this.removeClass;\n    this.listAttributes.addItem = () => {\n      this.insertWidget();\n      this.planRender();\n    };\n    this.listAttributes.removeItem = (index2) => {\n      this.element.querySelector(`[data-index=\"${this.name + index2}\"]`).remove();\n      this.element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n    };\n  },\n  setDataSrc(value, listValueTransformations) {\n    if (value && value !== this.dataSrc) {\n      try {\n        if (Array.isArray(JSON.parse(value))) {\n          this.setValue(JSON.parse(value));\n        }\n      } catch {\n        this.dataSrc = value;\n      }\n    }\n    const nextProcessor = listValueTransformations.shift();\n    if (nextProcessor) nextProcessor(value, listValueTransformations);\n  },\n  populate() {\n    var _a3;\n    const resources = (_a3 = this.resource) == null ? void 0 : _a3[\"listPredicate\"];\n    if (!resources) return;\n    this.listAttributes.children = [];\n    for (const resource of resources) {\n      this.insertWidget(resource[\"@id\"]);\n    }\n    this.planRender();\n  },\n  insertWidget(value = \"\") {\n    if (!this.widget) return;\n    const widget = document.createElement(this.widget);\n    const attributes = {\n      \"data-holder\": true,\n      name: this.name,\n      value,\n      range: this.range,\n      class: this.widget\n    };\n    for (const name of Object.keys(attributes)) {\n      if (typeof attributes[name] === \"boolean\")\n        widget.toggleAttribute(name, attributes[name]);\n      else widget.setAttribute(name, attributes[name]);\n    }\n    this.listAttributes.children.push(widget);\n  },\n  empty() {\n    this.listAttributes.children = [];\n    this.planRender();\n  },\n  getValue() {\n    if (!this.dataHolder) return [];\n    return Array.from(this.dataHolder).map((element) => {\n      const elValue = this.getValueFromElement(element);\n      return elValue;\n    });\n  },\n  get type() {\n    return \"resource\";\n  },\n  get multiple() {\n    return true;\n  }\n};\nconst MultipleselectFormMixin = {\n  name: \"multipleselect-form-mixin\",\n  use: [StoreMixin],\n  attributes: {\n    range: {\n      // range attribute is passed to the solid-dropdown\n      type: String,\n      default: \"\",\n      callback: function(value) {\n        if (value && value !== this.listAttributes.range)\n          this.listAttributes.range = value;\n      }\n    },\n    enum: {\n      // enum attribute is passed to the solid-dropdown\n      type: String,\n      default: \"\",\n      callback: function(value) {\n        if (value && value !== this.listAttributes.enum)\n          this.listAttributes.enum = value;\n      }\n    },\n    orderAsc: {\n      type: String,\n      default: \"name\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"orderAsc\");\n      }\n    },\n    orderDesc: {\n      type: String,\n      default: \"name\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"orderDesc\");\n      }\n    }\n  },\n  created() {\n    this.listValueTransformations.attach(\n      this.setDataSrc.bind(this),\n      \"MultipleselectFormMixin:setDataSrc\"\n    );\n  },\n  setDataSrc(value, listValueTransformations) {\n    if (value && value !== this.dataSrc) {\n      try {\n        const values = JSON.parse(value);\n        if (values && Array.isArray(values)) {\n          this.setValue(values);\n        } else {\n          this.setValue([value]);\n        }\n      } catch {\n        this.dataSrc = value;\n        this.setValue([{ \"@id\": value }]);\n      }\n    }\n    const nextProcessor = listValueTransformations.shift();\n    if (nextProcessor) nextProcessor(value, listValueTransformations);\n  },\n  populate() {\n    var _a3;\n    const resources = (_a3 = this.resource) == null ? void 0 : _a3[\"listPredicate\"];\n    if (!this.resource || !resources && !Array.isArray(this.resource)) return;\n    this.setValue(resources);\n    this.planRender();\n  },\n  setValue(values) {\n    this.listAttributes.values = JSON.stringify(values.map((r3) => r3[\"@id\"]));\n  },\n  empty() {\n    this.listAttributes.values = [];\n    this.planRender();\n  },\n  get type() {\n    return this.enum === \"\" ? \"resource\" : \"string\";\n  },\n  get multiple() {\n    return true;\n  }\n};\nconst PatternMixin = {\n  name: \"pattern-mixin\",\n  attributes: {\n    pattern: {\n      type: String,\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"pattern\");\n      }\n    },\n    title: {\n      type: String,\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"title\");\n      }\n    }\n  }\n};\nconst RangeMixin = {\n  name: \"range-mixin\",\n  use: [StoreMixin, SorterMixin, FederationMixin],\n  attributes: {\n    range: {\n      type: String,\n      default: \"\",\n      callback: function(value) {\n        if (value !== this.dataSrc) this.dataSrc = value;\n      }\n    },\n    enum: {\n      type: String,\n      default: \"\",\n      callback: function(value) {\n        if (value !== null) {\n          const optional = value.trim().split(\",\");\n          const list2 = {};\n          for (const element of optional) {\n            if (element.includes(\"=\")) {\n              const option = element.trim().split(\"=\");\n              const key = option[1].trim();\n              const keyValue = option[0].trim();\n              list2[key] = keyValue;\n            } else {\n              const elem = element.trim();\n              list2[elem] = elem;\n            }\n          }\n          this.addToAttributes(list2, \"enum\");\n        }\n      }\n    },\n    optionLabel: {\n      type: String,\n      default: \"name\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"optionLabel\");\n      }\n    },\n    optionValue: {\n      type: String,\n      default: \"@id\",\n      callback: function(newValue) {\n        this.addToAttributes(newValue, \"optionValue\");\n      }\n    }\n  },\n  initialState: {\n    listPostProcessors: new PostProcessorRegistry()\n  },\n  created() {\n    this.listPostProcessors = new PostProcessorRegistry();\n    this.listAttributes.optionLabel = this.optionLabel;\n    this.listAttributes.optionValue = this.optionValue;\n  },\n  async populate() {\n    const resources = this.resource ? this.resource[\"listPredicate\"] : [];\n    const listPostProcessorsCopy = this.listPostProcessors.deepCopy();\n    listPostProcessorsCopy.attach(\n      this.setRangeAttribute.bind(this),\n      \"RangeMixin:setRangeAttribute\"\n    );\n    const nextProcessor = listPostProcessorsCopy.shift();\n    await nextProcessor(resources, listPostProcessorsCopy, null, this.dataSrc);\n  },\n  async setRangeAttribute(resources) {\n    if (resources) {\n      const getRangeValue = async (resource) => {\n        let res = await store.getData(\n          resource[\"@id\"],\n          this.context || base_context\n        );\n        if (res === null) {\n          res = resource;\n        }\n        const selectedValue = await resource[this.optionValue];\n        const value = this.optionValue.includes(\"@id\") || selectedValue[\"@id\"] ? `{\"@id\": \"${selectedValue}\"}` : (\n          //  resource\n          selectedValue\n        );\n        const labelProperty = this.optionLabel.split(/[.]+/).pop();\n        const label = await res[labelProperty];\n        return { value, label, selectedValue };\n      };\n      this.listAttributes.range = await Promise.all(\n        resources.filter((el) => el !== null).map((r3) => getRangeValue(r3))\n      );\n    }\n    this.planRender();\n  },\n  empty() {\n    this.listAttributes.range = [];\n    this.planRender();\n  },\n  get type() {\n    return this.enum === \"\" ? \"resource\" : \"string\";\n  }\n};\nconst ValueEditorMixin = {\n  name: \"valueeditor-mixin\",\n  getValue() {\n    const editor = document.getElementById(this.listAttributes.id);\n    if (editor == null) return;\n    const converter = new showdown.Converter();\n    const editorObj = tinymce$1.get(editor.id);\n    if (editorObj == null) return;\n    const markdown = converter.makeMarkdown(editorObj.getContent());\n    const comment2 = \"<!-- -->\\n\\n\";\n    return markdown.includes(comment2) ? markdown.split(comment2).join(\"\") : markdown;\n  }\n};\nvar main = {};\nvar QuillDeltaToHtmlConverter = {};\nvar InsertOpsConverter = {};\nvar DeltaInsertOp = {};\nvar valueTypes = {};\nvar hasRequiredValueTypes;\nfunction requireValueTypes() {\n  if (hasRequiredValueTypes) return valueTypes;\n  hasRequiredValueTypes = 1;\n  Object.defineProperty(valueTypes, \"__esModule\", { value: true });\n  var NewLine = \"\\n\";\n  valueTypes.NewLine = NewLine;\n  var ListType;\n  (function(ListType2) {\n    ListType2[\"Ordered\"] = \"ordered\";\n    ListType2[\"Bullet\"] = \"bullet\";\n    ListType2[\"Checked\"] = \"checked\";\n    ListType2[\"Unchecked\"] = \"unchecked\";\n  })(ListType || (ListType = {}));\n  valueTypes.ListType = ListType;\n  var ScriptType;\n  (function(ScriptType2) {\n    ScriptType2[\"Sub\"] = \"sub\";\n    ScriptType2[\"Super\"] = \"super\";\n  })(ScriptType || (ScriptType = {}));\n  valueTypes.ScriptType = ScriptType;\n  var DirectionType;\n  (function(DirectionType2) {\n    DirectionType2[\"Rtl\"] = \"rtl\";\n  })(DirectionType || (DirectionType = {}));\n  valueTypes.DirectionType = DirectionType;\n  var AlignType;\n  (function(AlignType2) {\n    AlignType2[\"Left\"] = \"left\";\n    AlignType2[\"Center\"] = \"center\";\n    AlignType2[\"Right\"] = \"right\";\n    AlignType2[\"Justify\"] = \"justify\";\n  })(AlignType || (AlignType = {}));\n  valueTypes.AlignType = AlignType;\n  var DataType;\n  (function(DataType2) {\n    DataType2[\"Image\"] = \"image\";\n    DataType2[\"Video\"] = \"video\";\n    DataType2[\"Formula\"] = \"formula\";\n    DataType2[\"Text\"] = \"text\";\n  })(DataType || (DataType = {}));\n  valueTypes.DataType = DataType;\n  var GroupType;\n  (function(GroupType2) {\n    GroupType2[\"Block\"] = \"block\";\n    GroupType2[\"InlineGroup\"] = \"inline-group\";\n    GroupType2[\"List\"] = \"list\";\n    GroupType2[\"Video\"] = \"video\";\n    GroupType2[\"Table\"] = \"table\";\n  })(GroupType || (GroupType = {}));\n  valueTypes.GroupType = GroupType;\n  return valueTypes;\n}\nvar InsertData = {};\nvar hasRequiredInsertData;\nfunction requireInsertData() {\n  if (hasRequiredInsertData) return InsertData;\n  hasRequiredInsertData = 1;\n  Object.defineProperty(InsertData, \"__esModule\", { value: true });\n  var InsertDataQuill = /* @__PURE__ */ function() {\n    function InsertDataQuill2(type, value) {\n      this.type = type;\n      this.value = value;\n    }\n    return InsertDataQuill2;\n  }();\n  InsertData.InsertDataQuill = InsertDataQuill;\n  var InsertDataCustom = /* @__PURE__ */ function() {\n    function InsertDataCustom2(type, value) {\n      this.type = type;\n      this.value = value;\n    }\n    return InsertDataCustom2;\n  }();\n  InsertData.InsertDataCustom = InsertDataCustom;\n  return InsertData;\n}\nvar hasRequiredDeltaInsertOp;\nfunction requireDeltaInsertOp() {\n  if (hasRequiredDeltaInsertOp) return DeltaInsertOp;\n  hasRequiredDeltaInsertOp = 1;\n  var __importDefault = DeltaInsertOp && DeltaInsertOp.__importDefault || function(mod) {\n    return mod && mod.__esModule ? mod : { \"default\": mod };\n  };\n  Object.defineProperty(DeltaInsertOp, \"__esModule\", { value: true });\n  var value_types_1 = requireValueTypes();\n  var InsertData_1 = requireInsertData();\n  var lodash_isequal_1 = __importDefault(requireLodash_isequal());\n  var DeltaInsertOp$1 = function() {\n    function DeltaInsertOp2(insertVal, attrs) {\n      if (typeof insertVal === \"string\") {\n        insertVal = new InsertData_1.InsertDataQuill(value_types_1.DataType.Text, insertVal + \"\");\n      }\n      this.insert = insertVal;\n      this.attributes = attrs || {};\n    }\n    DeltaInsertOp2.createNewLineOp = function() {\n      return new DeltaInsertOp2(value_types_1.NewLine);\n    };\n    DeltaInsertOp2.prototype.isContainerBlock = function() {\n      return this.isBlockquote() || this.isList() || this.isTable() || this.isCodeBlock() || this.isHeader() || this.isBlockAttribute() || this.isCustomTextBlock();\n    };\n    DeltaInsertOp2.prototype.isBlockAttribute = function() {\n      var attrs = this.attributes;\n      return !!(attrs.align || attrs.direction || attrs.indent);\n    };\n    DeltaInsertOp2.prototype.isBlockquote = function() {\n      return !!this.attributes.blockquote;\n    };\n    DeltaInsertOp2.prototype.isHeader = function() {\n      return !!this.attributes.header;\n    };\n    DeltaInsertOp2.prototype.isTable = function() {\n      return !!this.attributes.table;\n    };\n    DeltaInsertOp2.prototype.isSameHeaderAs = function(op) {\n      return op.attributes.header === this.attributes.header && this.isHeader();\n    };\n    DeltaInsertOp2.prototype.hasSameAdiAs = function(op) {\n      return this.attributes.align === op.attributes.align && this.attributes.direction === op.attributes.direction && this.attributes.indent === op.attributes.indent;\n    };\n    DeltaInsertOp2.prototype.hasSameIndentationAs = function(op) {\n      return this.attributes.indent === op.attributes.indent;\n    };\n    DeltaInsertOp2.prototype.hasSameAttr = function(op) {\n      return lodash_isequal_1.default(this.attributes, op.attributes);\n    };\n    DeltaInsertOp2.prototype.hasHigherIndentThan = function(op) {\n      return (Number(this.attributes.indent) || 0) > (Number(op.attributes.indent) || 0);\n    };\n    DeltaInsertOp2.prototype.isInline = function() {\n      return !(this.isContainerBlock() || this.isVideo() || this.isCustomEmbedBlock());\n    };\n    DeltaInsertOp2.prototype.isCodeBlock = function() {\n      return !!this.attributes[\"code-block\"];\n    };\n    DeltaInsertOp2.prototype.hasSameLangAs = function(op) {\n      return this.attributes[\"code-block\"] === op.attributes[\"code-block\"];\n    };\n    DeltaInsertOp2.prototype.isJustNewline = function() {\n      return this.insert.value === value_types_1.NewLine;\n    };\n    DeltaInsertOp2.prototype.isList = function() {\n      return this.isOrderedList() || this.isBulletList() || this.isCheckedList() || this.isUncheckedList();\n    };\n    DeltaInsertOp2.prototype.isOrderedList = function() {\n      return this.attributes.list === value_types_1.ListType.Ordered;\n    };\n    DeltaInsertOp2.prototype.isBulletList = function() {\n      return this.attributes.list === value_types_1.ListType.Bullet;\n    };\n    DeltaInsertOp2.prototype.isCheckedList = function() {\n      return this.attributes.list === value_types_1.ListType.Checked;\n    };\n    DeltaInsertOp2.prototype.isUncheckedList = function() {\n      return this.attributes.list === value_types_1.ListType.Unchecked;\n    };\n    DeltaInsertOp2.prototype.isACheckList = function() {\n      return this.attributes.list == value_types_1.ListType.Unchecked || this.attributes.list === value_types_1.ListType.Checked;\n    };\n    DeltaInsertOp2.prototype.isSameListAs = function(op) {\n      return !!op.attributes.list && (this.attributes.list === op.attributes.list || op.isACheckList() && this.isACheckList());\n    };\n    DeltaInsertOp2.prototype.isSameTableRowAs = function(op) {\n      return !!op.isTable() && this.isTable() && this.attributes.table === op.attributes.table;\n    };\n    DeltaInsertOp2.prototype.isText = function() {\n      return this.insert.type === value_types_1.DataType.Text;\n    };\n    DeltaInsertOp2.prototype.isImage = function() {\n      return this.insert.type === value_types_1.DataType.Image;\n    };\n    DeltaInsertOp2.prototype.isFormula = function() {\n      return this.insert.type === value_types_1.DataType.Formula;\n    };\n    DeltaInsertOp2.prototype.isVideo = function() {\n      return this.insert.type === value_types_1.DataType.Video;\n    };\n    DeltaInsertOp2.prototype.isLink = function() {\n      return this.isText() && !!this.attributes.link;\n    };\n    DeltaInsertOp2.prototype.isCustomEmbed = function() {\n      return this.insert instanceof InsertData_1.InsertDataCustom;\n    };\n    DeltaInsertOp2.prototype.isCustomEmbedBlock = function() {\n      return this.isCustomEmbed() && !!this.attributes.renderAsBlock;\n    };\n    DeltaInsertOp2.prototype.isCustomTextBlock = function() {\n      return this.isText() && !!this.attributes.renderAsBlock;\n    };\n    DeltaInsertOp2.prototype.isMentions = function() {\n      return this.isText() && !!this.attributes.mentions;\n    };\n    return DeltaInsertOp2;\n  }();\n  DeltaInsertOp.DeltaInsertOp = DeltaInsertOp$1;\n  return DeltaInsertOp;\n}\nvar OpAttributeSanitizer = {};\nvar MentionSanitizer = {};\nvar OpLinkSanitizer = {};\nvar url = {};\nvar hasRequiredUrl;\nfunction requireUrl() {\n  if (hasRequiredUrl) return url;\n  hasRequiredUrl = 1;\n  Object.defineProperty(url, \"__esModule\", { value: true });\n  function sanitize2(str) {\n    var val = str;\n    val = val.replace(/^\\s*/gm, \"\");\n    var whiteList = /^((https?|s?ftp|file|blob|mailto|tel):|#|\\/|data:image\\/)/;\n    if (whiteList.test(val)) {\n      return val;\n    }\n    return \"unsafe:\" + val;\n  }\n  url.sanitize = sanitize2;\n  return url;\n}\nvar funcsHtml = {};\nvar hasRequiredFuncsHtml;\nfunction requireFuncsHtml() {\n  if (hasRequiredFuncsHtml) return funcsHtml;\n  hasRequiredFuncsHtml = 1;\n  Object.defineProperty(funcsHtml, \"__esModule\", { value: true });\n  var EncodeTarget;\n  (function(EncodeTarget2) {\n    EncodeTarget2[EncodeTarget2[\"Html\"] = 0] = \"Html\";\n    EncodeTarget2[EncodeTarget2[\"Url\"] = 1] = \"Url\";\n  })(EncodeTarget || (EncodeTarget = {}));\n  function makeStartTag(tag, attrs) {\n    if (attrs === void 0) {\n      attrs = void 0;\n    }\n    if (!tag) {\n      return \"\";\n    }\n    var attrsStr = \"\";\n    if (attrs) {\n      var arrAttrs = [].concat(attrs);\n      attrsStr = arrAttrs.map(function(attr) {\n        return attr.key + (attr.value ? '=\"' + attr.value + '\"' : \"\");\n      }).join(\" \");\n    }\n    var closing = \">\";\n    if (tag === \"img\" || tag === \"br\") {\n      closing = \"/>\";\n    }\n    return attrsStr ? \"<\" + tag + \" \" + attrsStr + closing : \"<\" + tag + closing;\n  }\n  funcsHtml.makeStartTag = makeStartTag;\n  function makeEndTag(tag) {\n    if (tag === void 0) {\n      tag = \"\";\n    }\n    return tag && \"</\" + tag + \">\" || \"\";\n  }\n  funcsHtml.makeEndTag = makeEndTag;\n  function decodeHtml(str) {\n    return encodeMappings(EncodeTarget.Html).reduce(decodeMapping, str);\n  }\n  funcsHtml.decodeHtml = decodeHtml;\n  function encodeHtml(str, preventDoubleEncoding) {\n    if (preventDoubleEncoding === void 0) {\n      preventDoubleEncoding = true;\n    }\n    if (preventDoubleEncoding) {\n      str = decodeHtml(str);\n    }\n    return encodeMappings(EncodeTarget.Html).reduce(encodeMapping, str);\n  }\n  funcsHtml.encodeHtml = encodeHtml;\n  function encodeLink(str) {\n    var linkMaps = encodeMappings(EncodeTarget.Url);\n    var decoded = linkMaps.reduce(decodeMapping, str);\n    return linkMaps.reduce(encodeMapping, decoded);\n  }\n  funcsHtml.encodeLink = encodeLink;\n  function encodeMappings(mtype) {\n    var maps = [\n      [\"&\", \"&amp;\"],\n      [\"<\", \"&lt;\"],\n      [\">\", \"&gt;\"],\n      ['\"', \"&quot;\"],\n      [\"'\", \"&#x27;\"],\n      [\"\\\\/\", \"&#x2F;\"],\n      [\"\\\\(\", \"&#40;\"],\n      [\"\\\\)\", \"&#41;\"]\n    ];\n    if (mtype === EncodeTarget.Html) {\n      return maps.filter(function(_a3) {\n        var v2 = _a3[0];\n        _a3[1];\n        return v2.indexOf(\"(\") === -1 && v2.indexOf(\")\") === -1;\n      });\n    } else {\n      return maps.filter(function(_a3) {\n        var v2 = _a3[0];\n        _a3[1];\n        return v2.indexOf(\"/\") === -1;\n      });\n    }\n  }\n  function encodeMapping(str, mapping) {\n    return str.replace(new RegExp(mapping[0], \"g\"), mapping[1]);\n  }\n  function decodeMapping(str, mapping) {\n    return str.replace(new RegExp(mapping[1], \"g\"), mapping[0].replace(\"\\\\\", \"\"));\n  }\n  return funcsHtml;\n}\nvar hasRequiredOpLinkSanitizer;\nfunction requireOpLinkSanitizer() {\n  if (hasRequiredOpLinkSanitizer) return OpLinkSanitizer;\n  hasRequiredOpLinkSanitizer = 1;\n  var __importStar = OpLinkSanitizer && OpLinkSanitizer.__importStar || function(mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) {\n      for (var k3 in mod) if (Object.hasOwnProperty.call(mod, k3)) result[k3] = mod[k3];\n    }\n    result[\"default\"] = mod;\n    return result;\n  };\n  Object.defineProperty(OpLinkSanitizer, \"__esModule\", { value: true });\n  var url2 = __importStar(requireUrl());\n  var funcs_html_1 = requireFuncsHtml();\n  var OpLinkSanitizer$1 = function() {\n    function OpLinkSanitizer2() {\n    }\n    OpLinkSanitizer2.sanitize = function(link2, options) {\n      var sanitizerFn = function() {\n        return void 0;\n      };\n      if (options && typeof options.urlSanitizer === \"function\") {\n        sanitizerFn = options.urlSanitizer;\n      }\n      var result = sanitizerFn(link2);\n      return typeof result === \"string\" ? result : funcs_html_1.encodeLink(url2.sanitize(link2));\n    };\n    return OpLinkSanitizer2;\n  }();\n  OpLinkSanitizer.OpLinkSanitizer = OpLinkSanitizer$1;\n  return OpLinkSanitizer;\n}\nvar hasRequiredMentionSanitizer;\nfunction requireMentionSanitizer() {\n  if (hasRequiredMentionSanitizer) return MentionSanitizer;\n  hasRequiredMentionSanitizer = 1;\n  Object.defineProperty(MentionSanitizer, \"__esModule\", { value: true });\n  var OpLinkSanitizer_1 = requireOpLinkSanitizer();\n  var MentionSanitizer$1 = function() {\n    function MentionSanitizer2() {\n    }\n    MentionSanitizer2.sanitize = function(dirtyObj, sanitizeOptions) {\n      var cleanObj = {};\n      if (!dirtyObj || typeof dirtyObj !== \"object\") {\n        return cleanObj;\n      }\n      if (dirtyObj.class && MentionSanitizer2.IsValidClass(dirtyObj.class)) {\n        cleanObj.class = dirtyObj.class;\n      }\n      if (dirtyObj.id && MentionSanitizer2.IsValidId(dirtyObj.id)) {\n        cleanObj.id = dirtyObj.id;\n      }\n      if (MentionSanitizer2.IsValidTarget(dirtyObj.target + \"\")) {\n        cleanObj.target = dirtyObj.target;\n      }\n      if (dirtyObj.avatar) {\n        cleanObj.avatar = OpLinkSanitizer_1.OpLinkSanitizer.sanitize(dirtyObj.avatar + \"\", sanitizeOptions);\n      }\n      if (dirtyObj[\"end-point\"]) {\n        cleanObj[\"end-point\"] = OpLinkSanitizer_1.OpLinkSanitizer.sanitize(dirtyObj[\"end-point\"] + \"\", sanitizeOptions);\n      }\n      if (dirtyObj.slug) {\n        cleanObj.slug = dirtyObj.slug + \"\";\n      }\n      return cleanObj;\n    };\n    MentionSanitizer2.IsValidClass = function(classAttr) {\n      return !!classAttr.match(/^[a-zA-Z0-9_\\-]{1,500}$/i);\n    };\n    MentionSanitizer2.IsValidId = function(idAttr) {\n      return !!idAttr.match(/^[a-zA-Z0-9_\\-\\:\\.]{1,500}$/i);\n    };\n    MentionSanitizer2.IsValidTarget = function(target) {\n      return [\"_self\", \"_blank\", \"_parent\", \"_top\"].indexOf(target) > -1;\n    };\n    return MentionSanitizer2;\n  }();\n  MentionSanitizer.MentionSanitizer = MentionSanitizer$1;\n  return MentionSanitizer;\n}\nvar array = {};\nvar hasRequiredArray;\nfunction requireArray() {\n  if (hasRequiredArray) return array;\n  hasRequiredArray = 1;\n  Object.defineProperty(array, \"__esModule\", { value: true });\n  function preferSecond(arr) {\n    if (arr.length === 0) {\n      return null;\n    }\n    return arr.length >= 2 ? arr[1] : arr[0];\n  }\n  array.preferSecond = preferSecond;\n  function flatten(arr) {\n    return arr.reduce(function(pv, v2) {\n      return pv.concat(Array.isArray(v2) ? flatten(v2) : v2);\n    }, []);\n  }\n  array.flatten = flatten;\n  function find(arr, predicate) {\n    if (Array.prototype.find) {\n      return Array.prototype.find.call(arr, predicate);\n    }\n    for (var i3 = 0; i3 < arr.length; i3++) {\n      if (predicate(arr[i3]))\n        return arr[i3];\n    }\n    return void 0;\n  }\n  array.find = find;\n  function groupConsecutiveElementsWhile(arr, predicate) {\n    var groups = [];\n    var currElm, currGroup;\n    for (var i3 = 0; i3 < arr.length; i3++) {\n      currElm = arr[i3];\n      if (i3 > 0 && predicate(currElm, arr[i3 - 1])) {\n        currGroup = groups[groups.length - 1];\n        currGroup.push(currElm);\n      } else {\n        groups.push([currElm]);\n      }\n    }\n    return groups.map(function(g2) {\n      return g2.length === 1 ? g2[0] : g2;\n    });\n  }\n  array.groupConsecutiveElementsWhile = groupConsecutiveElementsWhile;\n  function sliceFromReverseWhile(arr, startIndex, predicate) {\n    var result = {\n      elements: [],\n      sliceStartsAt: -1\n    };\n    for (var i3 = startIndex; i3 >= 0; i3--) {\n      if (!predicate(arr[i3])) {\n        break;\n      }\n      result.sliceStartsAt = i3;\n      result.elements.unshift(arr[i3]);\n    }\n    return result;\n  }\n  array.sliceFromReverseWhile = sliceFromReverseWhile;\n  function intersperse(arr, item) {\n    return arr.reduce(function(pv, v2, index2) {\n      pv.push(v2);\n      if (index2 < arr.length - 1) {\n        pv.push(item);\n      }\n      return pv;\n    }, []);\n  }\n  array.intersperse = intersperse;\n  return array;\n}\nvar hasRequiredOpAttributeSanitizer;\nfunction requireOpAttributeSanitizer() {\n  if (hasRequiredOpAttributeSanitizer) return OpAttributeSanitizer;\n  hasRequiredOpAttributeSanitizer = 1;\n  Object.defineProperty(OpAttributeSanitizer, \"__esModule\", { value: true });\n  var value_types_1 = requireValueTypes();\n  var MentionSanitizer_1 = requireMentionSanitizer();\n  var array_1 = requireArray();\n  var OpLinkSanitizer_1 = requireOpLinkSanitizer();\n  var OpAttributeSanitizer$1 = function() {\n    function OpAttributeSanitizer2() {\n    }\n    OpAttributeSanitizer2.sanitize = function(dirtyAttrs, sanitizeOptions) {\n      var cleanAttrs = {};\n      if (!dirtyAttrs || typeof dirtyAttrs !== \"object\") {\n        return cleanAttrs;\n      }\n      var booleanAttrs = [\n        \"bold\",\n        \"italic\",\n        \"underline\",\n        \"strike\",\n        \"code\",\n        \"blockquote\",\n        \"code-block\",\n        \"renderAsBlock\"\n      ];\n      var colorAttrs = [\"background\", \"color\"];\n      var font = dirtyAttrs.font, size = dirtyAttrs.size, link2 = dirtyAttrs.link, script = dirtyAttrs.script, list2 = dirtyAttrs.list, header = dirtyAttrs.header, align = dirtyAttrs.align, direction = dirtyAttrs.direction, indent = dirtyAttrs.indent, mentions = dirtyAttrs.mentions, mention = dirtyAttrs.mention, width = dirtyAttrs.width, target = dirtyAttrs.target, rel = dirtyAttrs.rel;\n      var codeBlock = dirtyAttrs[\"code-block\"];\n      var sanitizedAttrs = booleanAttrs.concat(colorAttrs, [\n        \"font\",\n        \"size\",\n        \"link\",\n        \"script\",\n        \"list\",\n        \"header\",\n        \"align\",\n        \"direction\",\n        \"indent\",\n        \"mentions\",\n        \"mention\",\n        \"width\",\n        \"target\",\n        \"rel\",\n        \"code-block\"\n      ]);\n      booleanAttrs.forEach(function(prop) {\n        var v2 = dirtyAttrs[prop];\n        if (v2) {\n          cleanAttrs[prop] = !!v2;\n        }\n      });\n      colorAttrs.forEach(function(prop) {\n        var val = dirtyAttrs[prop];\n        if (val && (OpAttributeSanitizer2.IsValidHexColor(val + \"\") || OpAttributeSanitizer2.IsValidColorLiteral(val + \"\") || OpAttributeSanitizer2.IsValidRGBColor(val + \"\"))) {\n          cleanAttrs[prop] = val;\n        }\n      });\n      if (font && OpAttributeSanitizer2.IsValidFontName(font + \"\")) {\n        cleanAttrs.font = font;\n      }\n      if (size && OpAttributeSanitizer2.IsValidSize(size + \"\")) {\n        cleanAttrs.size = size;\n      }\n      if (width && OpAttributeSanitizer2.IsValidWidth(width + \"\")) {\n        cleanAttrs.width = width;\n      }\n      if (link2) {\n        cleanAttrs.link = OpLinkSanitizer_1.OpLinkSanitizer.sanitize(link2 + \"\", sanitizeOptions);\n      }\n      if (target && OpAttributeSanitizer2.isValidTarget(target)) {\n        cleanAttrs.target = target;\n      }\n      if (rel && OpAttributeSanitizer2.IsValidRel(rel)) {\n        cleanAttrs.rel = rel;\n      }\n      if (codeBlock) {\n        if (OpAttributeSanitizer2.IsValidLang(codeBlock)) {\n          cleanAttrs[\"code-block\"] = codeBlock;\n        } else {\n          cleanAttrs[\"code-block\"] = !!codeBlock;\n        }\n      }\n      if (script === value_types_1.ScriptType.Sub || value_types_1.ScriptType.Super === script) {\n        cleanAttrs.script = script;\n      }\n      if (list2 === value_types_1.ListType.Bullet || list2 === value_types_1.ListType.Ordered || list2 === value_types_1.ListType.Checked || list2 === value_types_1.ListType.Unchecked) {\n        cleanAttrs.list = list2;\n      }\n      if (Number(header)) {\n        cleanAttrs.header = Math.min(Number(header), 6);\n      }\n      if (array_1.find([value_types_1.AlignType.Center, value_types_1.AlignType.Right, value_types_1.AlignType.Justify, value_types_1.AlignType.Left], function(a2) {\n        return a2 === align;\n      })) {\n        cleanAttrs.align = align;\n      }\n      if (direction === value_types_1.DirectionType.Rtl) {\n        cleanAttrs.direction = direction;\n      }\n      if (indent && Number(indent)) {\n        cleanAttrs.indent = Math.min(Number(indent), 30);\n      }\n      if (mentions && mention) {\n        var sanitizedMention = MentionSanitizer_1.MentionSanitizer.sanitize(mention, sanitizeOptions);\n        if (Object.keys(sanitizedMention).length > 0) {\n          cleanAttrs.mentions = !!mentions;\n          cleanAttrs.mention = mention;\n        }\n      }\n      return Object.keys(dirtyAttrs).reduce(function(cleaned, k3) {\n        if (sanitizedAttrs.indexOf(k3) === -1) {\n          cleaned[k3] = dirtyAttrs[k3];\n        }\n        return cleaned;\n      }, cleanAttrs);\n    };\n    OpAttributeSanitizer2.IsValidHexColor = function(colorStr) {\n      return !!colorStr.match(/^#([0-9A-F]{6}|[0-9A-F]{3})$/i);\n    };\n    OpAttributeSanitizer2.IsValidColorLiteral = function(colorStr) {\n      return !!colorStr.match(/^[a-z]{1,50}$/i);\n    };\n    OpAttributeSanitizer2.IsValidRGBColor = function(colorStr) {\n      var re = /^rgb\\(((0|25[0-5]|2[0-4]\\d|1\\d\\d|0?\\d?\\d),\\s*){2}(0|25[0-5]|2[0-4]\\d|1\\d\\d|0?\\d?\\d)\\)$/i;\n      return !!colorStr.match(re);\n    };\n    OpAttributeSanitizer2.IsValidFontName = function(fontName) {\n      return !!fontName.match(/^[a-z\\s0-9\\- ]{1,30}$/i);\n    };\n    OpAttributeSanitizer2.IsValidSize = function(size) {\n      return !!size.match(/^[a-z0-9\\-]{1,20}$/i);\n    };\n    OpAttributeSanitizer2.IsValidWidth = function(width) {\n      return !!width.match(/^[0-9]*(px|em|%)?$/);\n    };\n    OpAttributeSanitizer2.isValidTarget = function(target) {\n      return !!target.match(/^[_a-zA-Z0-9\\-]{1,50}$/);\n    };\n    OpAttributeSanitizer2.IsValidRel = function(relStr) {\n      return !!relStr.match(/^[a-zA-Z\\s\\-]{1,250}$/i);\n    };\n    OpAttributeSanitizer2.IsValidLang = function(lang) {\n      if (typeof lang === \"boolean\") {\n        return true;\n      }\n      return !!lang.match(/^[a-zA-Z\\s\\-\\\\\\/\\+]{1,50}$/i);\n    };\n    return OpAttributeSanitizer2;\n  }();\n  OpAttributeSanitizer.OpAttributeSanitizer = OpAttributeSanitizer$1;\n  return OpAttributeSanitizer;\n}\nvar InsertOpDenormalizer = {};\nvar string = {};\nvar hasRequiredString;\nfunction requireString() {\n  if (hasRequiredString) return string;\n  hasRequiredString = 1;\n  Object.defineProperty(string, \"__esModule\", { value: true });\n  function tokenizeWithNewLines(str) {\n    var NewLine = \"\\n\";\n    if (str === NewLine) {\n      return [str];\n    }\n    var lines = str.split(NewLine);\n    if (lines.length === 1) {\n      return lines;\n    }\n    var lastIndex = lines.length - 1;\n    return lines.reduce(function(pv, line, ind) {\n      if (ind !== lastIndex) {\n        if (line !== \"\") {\n          pv = pv.concat(line, NewLine);\n        } else {\n          pv.push(NewLine);\n        }\n      } else if (line !== \"\") {\n        pv.push(line);\n      }\n      return pv;\n    }, []);\n  }\n  string.tokenizeWithNewLines = tokenizeWithNewLines;\n  return string;\n}\nvar object = {};\nvar hasRequiredObject;\nfunction requireObject() {\n  if (hasRequiredObject) return object;\n  hasRequiredObject = 1;\n  Object.defineProperty(object, \"__esModule\", { value: true });\n  function assign2(target) {\n    var sources = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n      sources[_i - 1] = arguments[_i];\n    }\n    if (target == null) {\n      throw new TypeError(\"Cannot convert undefined or null to object\");\n    }\n    var to = Object(target);\n    for (var index2 = 0; index2 < sources.length; index2++) {\n      var nextSource = sources[index2];\n      if (nextSource != null) {\n        for (var nextKey in nextSource) {\n          if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n            to[nextKey] = nextSource[nextKey];\n          }\n        }\n      }\n    }\n    return to;\n  }\n  object.assign = assign2;\n  return object;\n}\nvar hasRequiredInsertOpDenormalizer;\nfunction requireInsertOpDenormalizer() {\n  if (hasRequiredInsertOpDenormalizer) return InsertOpDenormalizer;\n  hasRequiredInsertOpDenormalizer = 1;\n  var __importStar = InsertOpDenormalizer && InsertOpDenormalizer.__importStar || function(mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) {\n      for (var k3 in mod) if (Object.hasOwnProperty.call(mod, k3)) result[k3] = mod[k3];\n    }\n    result[\"default\"] = mod;\n    return result;\n  };\n  Object.defineProperty(InsertOpDenormalizer, \"__esModule\", { value: true });\n  var value_types_1 = requireValueTypes();\n  var str = __importStar(requireString());\n  var obj = __importStar(requireObject());\n  var InsertOpDenormalizer$1 = function() {\n    function InsertOpDenormalizer2() {\n    }\n    InsertOpDenormalizer2.denormalize = function(op) {\n      if (!op || typeof op !== \"object\") {\n        return [];\n      }\n      if (typeof op.insert === \"object\" || op.insert === value_types_1.NewLine) {\n        return [op];\n      }\n      var newlinedArray = str.tokenizeWithNewLines(op.insert + \"\");\n      if (newlinedArray.length === 1) {\n        return [op];\n      }\n      var nlObj = obj.assign({}, op, { insert: value_types_1.NewLine });\n      return newlinedArray.map(function(line) {\n        if (line === value_types_1.NewLine) {\n          return nlObj;\n        }\n        return obj.assign({}, op, {\n          insert: line\n        });\n      });\n    };\n    return InsertOpDenormalizer2;\n  }();\n  InsertOpDenormalizer.InsertOpDenormalizer = InsertOpDenormalizer$1;\n  return InsertOpDenormalizer;\n}\nvar hasRequiredInsertOpsConverter;\nfunction requireInsertOpsConverter() {\n  if (hasRequiredInsertOpsConverter) return InsertOpsConverter;\n  hasRequiredInsertOpsConverter = 1;\n  Object.defineProperty(InsertOpsConverter, \"__esModule\", { value: true });\n  var DeltaInsertOp_1 = requireDeltaInsertOp();\n  var value_types_1 = requireValueTypes();\n  var InsertData_1 = requireInsertData();\n  var OpAttributeSanitizer_1 = requireOpAttributeSanitizer();\n  var InsertOpDenormalizer_1 = requireInsertOpDenormalizer();\n  var OpLinkSanitizer_1 = requireOpLinkSanitizer();\n  var InsertOpsConverter$1 = function() {\n    function InsertOpsConverter2() {\n    }\n    InsertOpsConverter2.convert = function(deltaOps, options) {\n      if (!Array.isArray(deltaOps)) {\n        return [];\n      }\n      var denormalizedOps = [].concat.apply([], deltaOps.map(InsertOpDenormalizer_1.InsertOpDenormalizer.denormalize));\n      var results = [];\n      var insertVal, attributes;\n      for (var _i = 0, denormalizedOps_1 = denormalizedOps; _i < denormalizedOps_1.length; _i++) {\n        var op = denormalizedOps_1[_i];\n        if (!op.insert) {\n          continue;\n        }\n        insertVal = InsertOpsConverter2.convertInsertVal(op.insert, options);\n        if (!insertVal) {\n          continue;\n        }\n        attributes = OpAttributeSanitizer_1.OpAttributeSanitizer.sanitize(op.attributes, options);\n        results.push(new DeltaInsertOp_1.DeltaInsertOp(insertVal, attributes));\n      }\n      return results;\n    };\n    InsertOpsConverter2.convertInsertVal = function(insertPropVal, sanitizeOptions) {\n      if (typeof insertPropVal === \"string\") {\n        return new InsertData_1.InsertDataQuill(value_types_1.DataType.Text, insertPropVal);\n      }\n      if (!insertPropVal || typeof insertPropVal !== \"object\") {\n        return null;\n      }\n      var keys2 = Object.keys(insertPropVal);\n      if (!keys2.length) {\n        return null;\n      }\n      return value_types_1.DataType.Image in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Image, OpLinkSanitizer_1.OpLinkSanitizer.sanitize(insertPropVal[value_types_1.DataType.Image] + \"\", sanitizeOptions)) : value_types_1.DataType.Video in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Video, OpLinkSanitizer_1.OpLinkSanitizer.sanitize(insertPropVal[value_types_1.DataType.Video] + \"\", sanitizeOptions)) : value_types_1.DataType.Formula in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Formula, insertPropVal[value_types_1.DataType.Formula]) : new InsertData_1.InsertDataCustom(keys2[0], insertPropVal[keys2[0]]);\n    };\n    return InsertOpsConverter2;\n  }();\n  InsertOpsConverter.InsertOpsConverter = InsertOpsConverter$1;\n  return InsertOpsConverter;\n}\nvar OpToHtmlConverter = {};\nvar hasRequiredOpToHtmlConverter;\nfunction requireOpToHtmlConverter() {\n  if (hasRequiredOpToHtmlConverter) return OpToHtmlConverter;\n  hasRequiredOpToHtmlConverter = 1;\n  (function(exports2) {\n    var __importStar = OpToHtmlConverter && OpToHtmlConverter.__importStar || function(mod) {\n      if (mod && mod.__esModule) return mod;\n      var result = {};\n      if (mod != null) {\n        for (var k3 in mod) if (Object.hasOwnProperty.call(mod, k3)) result[k3] = mod[k3];\n      }\n      result[\"default\"] = mod;\n      return result;\n    };\n    Object.defineProperty(exports2, \"__esModule\", { value: true });\n    var funcs_html_1 = requireFuncsHtml();\n    var value_types_1 = requireValueTypes();\n    var obj = __importStar(requireObject());\n    var arr = __importStar(requireArray());\n    var OpAttributeSanitizer_1 = requireOpAttributeSanitizer();\n    var DEFAULT_INLINE_FONTS = {\n      serif: \"font-family: Georgia, Times New Roman, serif\",\n      monospace: \"font-family: Monaco, Courier New, monospace\"\n    };\n    exports2.DEFAULT_INLINE_STYLES = {\n      font: function(value) {\n        return DEFAULT_INLINE_FONTS[value] || \"font-family:\" + value;\n      },\n      size: {\n        small: \"font-size: 0.75em\",\n        large: \"font-size: 1.5em\",\n        huge: \"font-size: 2.5em\"\n      },\n      indent: function(value, op) {\n        var indentSize = parseInt(value, 10) * 3;\n        var side = op.attributes[\"direction\"] === \"rtl\" ? \"right\" : \"left\";\n        return \"padding-\" + side + \":\" + indentSize + \"em\";\n      },\n      direction: function(value, op) {\n        if (value === \"rtl\") {\n          return \"direction:rtl\" + (op.attributes[\"align\"] ? \"\" : \"; text-align:inherit\");\n        } else {\n          return void 0;\n        }\n      }\n    };\n    var OpToHtmlConverter$1 = function() {\n      function OpToHtmlConverter2(op, options) {\n        this.op = op;\n        this.options = obj.assign({}, {\n          classPrefix: \"ql\",\n          inlineStyles: void 0,\n          encodeHtml: true,\n          listItemTag: \"li\",\n          paragraphTag: \"p\"\n        }, options);\n      }\n      OpToHtmlConverter2.prototype.prefixClass = function(className) {\n        if (!this.options.classPrefix) {\n          return className + \"\";\n        }\n        return this.options.classPrefix + \"-\" + className;\n      };\n      OpToHtmlConverter2.prototype.getHtml = function() {\n        var parts = this.getHtmlParts();\n        return parts.openingTag + parts.content + parts.closingTag;\n      };\n      OpToHtmlConverter2.prototype.getHtmlParts = function() {\n        var _this = this;\n        if (this.op.isJustNewline() && !this.op.isContainerBlock()) {\n          return { openingTag: \"\", closingTag: \"\", content: value_types_1.NewLine };\n        }\n        var tags = this.getTags(), attrs = this.getTagAttributes();\n        if (!tags.length && attrs.length) {\n          tags.push(\"span\");\n        }\n        var beginTags = [], endTags = [];\n        var imgTag = \"img\";\n        var isImageLink = function(tag2) {\n          return tag2 === imgTag && !!_this.op.attributes.link;\n        };\n        for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) {\n          var tag = tags_1[_i];\n          if (isImageLink(tag)) {\n            beginTags.push(funcs_html_1.makeStartTag(\"a\", this.getLinkAttrs()));\n          }\n          beginTags.push(funcs_html_1.makeStartTag(tag, attrs));\n          endTags.push(tag === \"img\" ? \"\" : funcs_html_1.makeEndTag(tag));\n          if (isImageLink(tag)) {\n            endTags.push(funcs_html_1.makeEndTag(\"a\"));\n          }\n          attrs = [];\n        }\n        endTags.reverse();\n        return {\n          openingTag: beginTags.join(\"\"),\n          content: this.getContent(),\n          closingTag: endTags.join(\"\")\n        };\n      };\n      OpToHtmlConverter2.prototype.getContent = function() {\n        if (this.op.isContainerBlock()) {\n          return \"\";\n        }\n        if (this.op.isMentions()) {\n          return this.op.insert.value;\n        }\n        var content = this.op.isFormula() || this.op.isText() ? this.op.insert.value : \"\";\n        return this.options.encodeHtml && funcs_html_1.encodeHtml(content) || content;\n      };\n      OpToHtmlConverter2.prototype.getCssClasses = function() {\n        var attrs = this.op.attributes;\n        if (this.options.inlineStyles) {\n          return [];\n        }\n        var propsArr = [\"indent\", \"align\", \"direction\", \"font\", \"size\"];\n        if (this.options.allowBackgroundClasses) {\n          propsArr.push(\"background\");\n        }\n        return (this.getCustomCssClasses() || []).concat(propsArr.filter(function(prop) {\n          return !!attrs[prop];\n        }).filter(function(prop) {\n          return prop === \"background\" ? OpAttributeSanitizer_1.OpAttributeSanitizer.IsValidColorLiteral(attrs[prop]) : true;\n        }).map(function(prop) {\n          return prop + \"-\" + attrs[prop];\n        }).concat(this.op.isFormula() ? \"formula\" : []).concat(this.op.isVideo() ? \"video\" : []).concat(this.op.isImage() ? \"image\" : []).map(this.prefixClass.bind(this)));\n      };\n      OpToHtmlConverter2.prototype.getCssStyles = function() {\n        var _this = this;\n        var attrs = this.op.attributes;\n        var propsArr = [[\"color\"]];\n        if (!!this.options.inlineStyles || !this.options.allowBackgroundClasses) {\n          propsArr.push([\"background\", \"background-color\"]);\n        }\n        if (this.options.inlineStyles) {\n          propsArr = propsArr.concat([\n            [\"indent\"],\n            [\"align\", \"text-align\"],\n            [\"direction\"],\n            [\"font\", \"font-family\"],\n            [\"size\"]\n          ]);\n        }\n        return (this.getCustomCssStyles() || []).concat(propsArr.filter(function(item) {\n          return !!attrs[item[0]];\n        }).map(function(item) {\n          var attribute2 = item[0];\n          var attrValue = attrs[attribute2];\n          var attributeConverter = _this.options.inlineStyles && _this.options.inlineStyles[attribute2] || exports2.DEFAULT_INLINE_STYLES[attribute2];\n          if (typeof attributeConverter === \"object\") {\n            return attributeConverter[attrValue];\n          } else if (typeof attributeConverter === \"function\") {\n            var converterFn = attributeConverter;\n            return converterFn(attrValue, _this.op);\n          } else {\n            return arr.preferSecond(item) + \":\" + attrValue;\n          }\n        })).filter(function(item) {\n          return item !== void 0;\n        });\n      };\n      OpToHtmlConverter2.prototype.getTagAttributes = function() {\n        if (this.op.attributes.code && !this.op.isLink()) {\n          return [];\n        }\n        var makeAttr = this.makeAttr.bind(this);\n        var customTagAttributes = this.getCustomTagAttributes();\n        var customAttr = customTagAttributes ? Object.keys(this.getCustomTagAttributes()).map(function(k3) {\n          return makeAttr(k3, customTagAttributes[k3]);\n        }) : [];\n        var classes = this.getCssClasses();\n        var tagAttrs = classes.length ? customAttr.concat([makeAttr(\"class\", classes.join(\" \"))]) : customAttr;\n        if (this.op.isImage()) {\n          this.op.attributes.width && (tagAttrs = tagAttrs.concat(makeAttr(\"width\", this.op.attributes.width)));\n          return tagAttrs.concat(makeAttr(\"src\", this.op.insert.value));\n        }\n        if (this.op.isACheckList()) {\n          return tagAttrs.concat(makeAttr(\"data-checked\", this.op.isCheckedList() ? \"true\" : \"false\"));\n        }\n        if (this.op.isFormula()) {\n          return tagAttrs;\n        }\n        if (this.op.isVideo()) {\n          return tagAttrs.concat(makeAttr(\"frameborder\", \"0\"), makeAttr(\"allowfullscreen\", \"true\"), makeAttr(\"src\", this.op.insert.value));\n        }\n        if (this.op.isMentions()) {\n          var mention = this.op.attributes.mention;\n          if (mention.class) {\n            tagAttrs = tagAttrs.concat(makeAttr(\"class\", mention.class));\n          }\n          if (mention[\"end-point\"] && mention.slug) {\n            tagAttrs = tagAttrs.concat(makeAttr(\"href\", mention[\"end-point\"] + \"/\" + mention.slug));\n          } else {\n            tagAttrs = tagAttrs.concat(makeAttr(\"href\", \"about:blank\"));\n          }\n          if (mention.target) {\n            tagAttrs = tagAttrs.concat(makeAttr(\"target\", mention.target));\n          }\n          return tagAttrs;\n        }\n        var styles = this.getCssStyles();\n        if (styles.length) {\n          tagAttrs.push(makeAttr(\"style\", styles.join(\";\")));\n        }\n        if (this.op.isCodeBlock() && typeof this.op.attributes[\"code-block\"] === \"string\") {\n          return tagAttrs.concat(makeAttr(\"data-language\", this.op.attributes[\"code-block\"]));\n        }\n        if (this.op.isContainerBlock()) {\n          return tagAttrs;\n        }\n        if (this.op.isLink()) {\n          tagAttrs = tagAttrs.concat(this.getLinkAttrs());\n        }\n        return tagAttrs;\n      };\n      OpToHtmlConverter2.prototype.makeAttr = function(k3, v2) {\n        return { key: k3, value: v2 };\n      };\n      OpToHtmlConverter2.prototype.getLinkAttrs = function() {\n        var tagAttrs = [];\n        var targetForAll = OpAttributeSanitizer_1.OpAttributeSanitizer.isValidTarget(this.options.linkTarget || \"\") ? this.options.linkTarget : void 0;\n        var relForAll = OpAttributeSanitizer_1.OpAttributeSanitizer.IsValidRel(this.options.linkRel || \"\") ? this.options.linkRel : void 0;\n        var target = this.op.attributes.target || targetForAll;\n        var rel = this.op.attributes.rel || relForAll;\n        return tagAttrs.concat(this.makeAttr(\"href\", this.op.attributes.link)).concat(target ? this.makeAttr(\"target\", target) : []).concat(rel ? this.makeAttr(\"rel\", rel) : []);\n      };\n      OpToHtmlConverter2.prototype.getCustomTag = function(format2) {\n        if (this.options.customTag && typeof this.options.customTag === \"function\") {\n          return this.options.customTag.apply(null, [format2, this.op]);\n        }\n      };\n      OpToHtmlConverter2.prototype.getCustomTagAttributes = function() {\n        if (this.options.customTagAttributes && typeof this.options.customTagAttributes === \"function\") {\n          return this.options.customTagAttributes.apply(null, [this.op]);\n        }\n      };\n      OpToHtmlConverter2.prototype.getCustomCssClasses = function() {\n        if (this.options.customCssClasses && typeof this.options.customCssClasses === \"function\") {\n          var res = this.options.customCssClasses.apply(null, [this.op]);\n          if (res) {\n            return Array.isArray(res) ? res : [res];\n          }\n        }\n      };\n      OpToHtmlConverter2.prototype.getCustomCssStyles = function() {\n        if (this.options.customCssStyles && typeof this.options.customCssStyles === \"function\") {\n          var res = this.options.customCssStyles.apply(null, [this.op]);\n          if (res) {\n            return Array.isArray(res) ? res : [res];\n          }\n        }\n      };\n      OpToHtmlConverter2.prototype.getTags = function() {\n        var _this = this;\n        var attrs = this.op.attributes;\n        if (!this.op.isText()) {\n          return [\n            this.op.isVideo() ? \"iframe\" : this.op.isImage() ? \"img\" : \"span\"\n          ];\n        }\n        var positionTag = this.options.paragraphTag || \"p\";\n        var blocks = [\n          [\"blockquote\"],\n          [\"code-block\", \"pre\"],\n          [\"list\", this.options.listItemTag],\n          [\"header\"],\n          [\"align\", positionTag],\n          [\"direction\", positionTag],\n          [\"indent\", positionTag]\n        ];\n        for (var _i = 0, blocks_1 = blocks; _i < blocks_1.length; _i++) {\n          var item = blocks_1[_i];\n          var firstItem = item[0];\n          if (attrs[firstItem]) {\n            var customTag = this.getCustomTag(firstItem);\n            return customTag ? [customTag] : firstItem === \"header\" ? [\"h\" + attrs[firstItem]] : [arr.preferSecond(item)];\n          }\n        }\n        if (this.op.isCustomTextBlock()) {\n          var customTag = this.getCustomTag(\"renderAsBlock\");\n          return customTag ? [customTag] : [positionTag];\n        }\n        var customTagsMap = Object.keys(attrs).reduce(function(res, it) {\n          var customTag2 = _this.getCustomTag(it);\n          if (customTag2) {\n            res[it] = customTag2;\n          }\n          return res;\n        }, {});\n        var inlineTags = [\n          [\"link\", \"a\"],\n          [\"mentions\", \"a\"],\n          [\"script\"],\n          [\"bold\", \"strong\"],\n          [\"italic\", \"em\"],\n          [\"strike\", \"s\"],\n          [\"underline\", \"u\"],\n          [\"code\"]\n        ];\n        return inlineTags.filter(function(item2) {\n          return !!attrs[item2[0]];\n        }).concat(Object.keys(customTagsMap).filter(function(t2) {\n          return !inlineTags.some(function(it) {\n            return it[0] == t2;\n          });\n        }).map(function(t2) {\n          return [t2, customTagsMap[t2]];\n        })).map(function(item2) {\n          return customTagsMap[item2[0]] ? customTagsMap[item2[0]] : item2[0] === \"script\" ? attrs[item2[0]] === value_types_1.ScriptType.Sub ? \"sub\" : \"sup\" : arr.preferSecond(item2);\n        });\n      };\n      return OpToHtmlConverter2;\n    }();\n    exports2.OpToHtmlConverter = OpToHtmlConverter$1;\n  })(OpToHtmlConverter);\n  return OpToHtmlConverter;\n}\nvar Grouper = {};\nvar groupTypes = {};\nvar hasRequiredGroupTypes;\nfunction requireGroupTypes() {\n  if (hasRequiredGroupTypes) return groupTypes;\n  hasRequiredGroupTypes = 1;\n  var __extends2 = groupTypes && groupTypes.__extends || function() {\n    var extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n      d2.__proto__ = b2;\n    } || function(d2, b2) {\n      for (var p2 in b2) if (b2.hasOwnProperty(p2)) d2[p2] = b2[p2];\n    };\n    return function(d2, b2) {\n      extendStatics2(d2, b2);\n      function __() {\n        this.constructor = d2;\n      }\n      d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __());\n    };\n  }();\n  Object.defineProperty(groupTypes, \"__esModule\", { value: true });\n  var InlineGroup = /* @__PURE__ */ function() {\n    function InlineGroup2(ops) {\n      this.ops = ops;\n    }\n    return InlineGroup2;\n  }();\n  groupTypes.InlineGroup = InlineGroup;\n  var SingleItem = /* @__PURE__ */ function() {\n    function SingleItem2(op) {\n      this.op = op;\n    }\n    return SingleItem2;\n  }();\n  var VideoItem = function(_super) {\n    __extends2(VideoItem2, _super);\n    function VideoItem2() {\n      return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return VideoItem2;\n  }(SingleItem);\n  groupTypes.VideoItem = VideoItem;\n  var BlotBlock = function(_super) {\n    __extends2(BlotBlock2, _super);\n    function BlotBlock2() {\n      return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return BlotBlock2;\n  }(SingleItem);\n  groupTypes.BlotBlock = BlotBlock;\n  var BlockGroup = /* @__PURE__ */ function() {\n    function BlockGroup2(op, ops) {\n      this.op = op;\n      this.ops = ops;\n    }\n    return BlockGroup2;\n  }();\n  groupTypes.BlockGroup = BlockGroup;\n  var ListGroup = /* @__PURE__ */ function() {\n    function ListGroup2(items) {\n      this.items = items;\n    }\n    return ListGroup2;\n  }();\n  groupTypes.ListGroup = ListGroup;\n  var ListItem2 = /* @__PURE__ */ function() {\n    function ListItem3(item, innerList) {\n      if (innerList === void 0) {\n        innerList = null;\n      }\n      this.item = item;\n      this.innerList = innerList;\n    }\n    return ListItem3;\n  }();\n  groupTypes.ListItem = ListItem2;\n  var TableGroup = /* @__PURE__ */ function() {\n    function TableGroup2(rows) {\n      this.rows = rows;\n    }\n    return TableGroup2;\n  }();\n  groupTypes.TableGroup = TableGroup;\n  var TableRow2 = /* @__PURE__ */ function() {\n    function TableRow3(cells) {\n      this.cells = cells;\n    }\n    return TableRow3;\n  }();\n  groupTypes.TableRow = TableRow2;\n  var TableCell2 = /* @__PURE__ */ function() {\n    function TableCell3(item) {\n      this.item = item;\n    }\n    return TableCell3;\n  }();\n  groupTypes.TableCell = TableCell2;\n  return groupTypes;\n}\nvar hasRequiredGrouper;\nfunction requireGrouper() {\n  if (hasRequiredGrouper) return Grouper;\n  hasRequiredGrouper = 1;\n  Object.defineProperty(Grouper, \"__esModule\", { value: true });\n  var DeltaInsertOp_1 = requireDeltaInsertOp();\n  var array_1 = requireArray();\n  var group_types_1 = requireGroupTypes();\n  var Grouper$1 = function() {\n    function Grouper2() {\n    }\n    Grouper2.pairOpsWithTheirBlock = function(ops) {\n      var result = [];\n      var canBeInBlock = function(op2) {\n        return !(op2.isJustNewline() || op2.isCustomEmbedBlock() || op2.isVideo() || op2.isContainerBlock());\n      };\n      var isInlineData = function(op2) {\n        return op2.isInline();\n      };\n      var lastInd = ops.length - 1;\n      var opsSlice;\n      for (var i3 = lastInd; i3 >= 0; i3--) {\n        var op = ops[i3];\n        if (op.isVideo()) {\n          result.push(new group_types_1.VideoItem(op));\n        } else if (op.isCustomEmbedBlock()) {\n          result.push(new group_types_1.BlotBlock(op));\n        } else if (op.isContainerBlock()) {\n          opsSlice = array_1.sliceFromReverseWhile(ops, i3 - 1, canBeInBlock);\n          result.push(new group_types_1.BlockGroup(op, opsSlice.elements));\n          i3 = opsSlice.sliceStartsAt > -1 ? opsSlice.sliceStartsAt : i3;\n        } else {\n          opsSlice = array_1.sliceFromReverseWhile(ops, i3 - 1, isInlineData);\n          result.push(new group_types_1.InlineGroup(opsSlice.elements.concat(op)));\n          i3 = opsSlice.sliceStartsAt > -1 ? opsSlice.sliceStartsAt : i3;\n        }\n      }\n      result.reverse();\n      return result;\n    };\n    Grouper2.groupConsecutiveSameStyleBlocks = function(groups, blocksOf) {\n      if (blocksOf === void 0) {\n        blocksOf = {\n          header: true,\n          codeBlocks: true,\n          blockquotes: true,\n          customBlocks: true\n        };\n      }\n      return array_1.groupConsecutiveElementsWhile(groups, function(g2, gPrev) {\n        if (!(g2 instanceof group_types_1.BlockGroup) || !(gPrev instanceof group_types_1.BlockGroup)) {\n          return false;\n        }\n        return blocksOf.codeBlocks && Grouper2.areBothCodeblocksWithSameLang(g2, gPrev) || blocksOf.blockquotes && Grouper2.areBothBlockquotesWithSameAdi(g2, gPrev) || blocksOf.header && Grouper2.areBothSameHeadersWithSameAdi(g2, gPrev) || blocksOf.customBlocks && Grouper2.areBothCustomBlockWithSameAttr(g2, gPrev);\n      });\n    };\n    Grouper2.reduceConsecutiveSameStyleBlocksToOne = function(groups) {\n      var newLineOp = DeltaInsertOp_1.DeltaInsertOp.createNewLineOp();\n      return groups.map(function(elm) {\n        if (!Array.isArray(elm)) {\n          if (elm instanceof group_types_1.BlockGroup && !elm.ops.length) {\n            elm.ops.push(newLineOp);\n          }\n          return elm;\n        }\n        var groupsLastInd = elm.length - 1;\n        elm[0].ops = array_1.flatten(elm.map(function(g2, i3) {\n          if (!g2.ops.length) {\n            return [newLineOp];\n          }\n          return g2.ops.concat(i3 < groupsLastInd ? [newLineOp] : []);\n        }));\n        return elm[0];\n      });\n    };\n    Grouper2.areBothCodeblocksWithSameLang = function(g1, gOther) {\n      return g1.op.isCodeBlock() && gOther.op.isCodeBlock() && g1.op.hasSameLangAs(gOther.op);\n    };\n    Grouper2.areBothSameHeadersWithSameAdi = function(g1, gOther) {\n      return g1.op.isSameHeaderAs(gOther.op) && g1.op.hasSameAdiAs(gOther.op);\n    };\n    Grouper2.areBothBlockquotesWithSameAdi = function(g2, gOther) {\n      return g2.op.isBlockquote() && gOther.op.isBlockquote() && g2.op.hasSameAdiAs(gOther.op);\n    };\n    Grouper2.areBothCustomBlockWithSameAttr = function(g2, gOther) {\n      return g2.op.isCustomTextBlock() && gOther.op.isCustomTextBlock() && g2.op.hasSameAttr(gOther.op);\n    };\n    return Grouper2;\n  }();\n  Grouper.Grouper = Grouper$1;\n  return Grouper;\n}\nvar ListNester = {};\nvar hasRequiredListNester;\nfunction requireListNester() {\n  if (hasRequiredListNester) return ListNester;\n  hasRequiredListNester = 1;\n  Object.defineProperty(ListNester, \"__esModule\", { value: true });\n  var group_types_1 = requireGroupTypes();\n  var array_1 = requireArray();\n  var ListNester$1 = function() {\n    function ListNester2() {\n    }\n    ListNester2.prototype.nest = function(groups) {\n      var _this = this;\n      var listBlocked = this.convertListBlocksToListGroups(groups);\n      var groupedByListGroups = this.groupConsecutiveListGroups(listBlocked);\n      var nested = array_1.flatten(groupedByListGroups.map(function(group) {\n        if (!Array.isArray(group)) {\n          return group;\n        }\n        return _this.nestListSection(group);\n      }));\n      var groupRootLists = array_1.groupConsecutiveElementsWhile(nested, function(curr, prev) {\n        if (!(curr instanceof group_types_1.ListGroup && prev instanceof group_types_1.ListGroup)) {\n          return false;\n        }\n        return curr.items[0].item.op.isSameListAs(prev.items[0].item.op);\n      });\n      return groupRootLists.map(function(v2) {\n        if (!Array.isArray(v2)) {\n          return v2;\n        }\n        var litems = v2.map(function(g2) {\n          return g2.items;\n        });\n        return new group_types_1.ListGroup(array_1.flatten(litems));\n      });\n    };\n    ListNester2.prototype.convertListBlocksToListGroups = function(items) {\n      var grouped = array_1.groupConsecutiveElementsWhile(items, function(g2, gPrev) {\n        return g2 instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g2.op.isList() && gPrev.op.isList() && g2.op.isSameListAs(gPrev.op) && g2.op.hasSameIndentationAs(gPrev.op);\n      });\n      return grouped.map(function(item) {\n        if (!Array.isArray(item)) {\n          if (item instanceof group_types_1.BlockGroup && item.op.isList()) {\n            return new group_types_1.ListGroup([new group_types_1.ListItem(item)]);\n          }\n          return item;\n        }\n        return new group_types_1.ListGroup(item.map(function(g2) {\n          return new group_types_1.ListItem(g2);\n        }));\n      });\n    };\n    ListNester2.prototype.groupConsecutiveListGroups = function(items) {\n      return array_1.groupConsecutiveElementsWhile(items, function(curr, prev) {\n        return curr instanceof group_types_1.ListGroup && prev instanceof group_types_1.ListGroup;\n      });\n    };\n    ListNester2.prototype.nestListSection = function(sectionItems) {\n      var _this = this;\n      var indentGroups = this.groupByIndent(sectionItems);\n      Object.keys(indentGroups).map(Number).sort().reverse().forEach(function(indent) {\n        indentGroups[indent].forEach(function(lg) {\n          var idx = sectionItems.indexOf(lg);\n          if (_this.placeUnderParent(lg, sectionItems.slice(0, idx))) {\n            sectionItems.splice(idx, 1);\n          }\n        });\n      });\n      return sectionItems;\n    };\n    ListNester2.prototype.groupByIndent = function(items) {\n      return items.reduce(function(pv, cv) {\n        var indent = cv.items[0].item.op.attributes.indent;\n        if (indent) {\n          pv[indent] = pv[indent] || [];\n          pv[indent].push(cv);\n        }\n        return pv;\n      }, {});\n    };\n    ListNester2.prototype.placeUnderParent = function(target, items) {\n      for (var i3 = items.length - 1; i3 >= 0; i3--) {\n        var elm = items[i3];\n        if (target.items[0].item.op.hasHigherIndentThan(elm.items[0].item.op)) {\n          var parent = elm.items[elm.items.length - 1];\n          if (parent.innerList) {\n            parent.innerList.items = parent.innerList.items.concat(target.items);\n          } else {\n            parent.innerList = target;\n          }\n          return true;\n        }\n      }\n      return false;\n    };\n    return ListNester2;\n  }();\n  ListNester.ListNester = ListNester$1;\n  return ListNester;\n}\nvar TableGrouper = {};\nvar hasRequiredTableGrouper;\nfunction requireTableGrouper() {\n  if (hasRequiredTableGrouper) return TableGrouper;\n  hasRequiredTableGrouper = 1;\n  Object.defineProperty(TableGrouper, \"__esModule\", { value: true });\n  var group_types_1 = requireGroupTypes();\n  var array_1 = requireArray();\n  var TableGrouper$1 = function() {\n    function TableGrouper2() {\n    }\n    TableGrouper2.prototype.group = function(groups) {\n      var tableBlocked = this.convertTableBlocksToTableGroups(groups);\n      return tableBlocked;\n    };\n    TableGrouper2.prototype.convertTableBlocksToTableGroups = function(items) {\n      var _this = this;\n      var grouped = array_1.groupConsecutiveElementsWhile(items, function(g2, gPrev) {\n        return g2 instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g2.op.isTable() && gPrev.op.isTable();\n      });\n      return grouped.map(function(item) {\n        if (!Array.isArray(item)) {\n          if (item instanceof group_types_1.BlockGroup && item.op.isTable()) {\n            return new group_types_1.TableGroup([new group_types_1.TableRow([new group_types_1.TableCell(item)])]);\n          }\n          return item;\n        }\n        return new group_types_1.TableGroup(_this.convertTableBlocksToTableRows(item));\n      });\n    };\n    TableGrouper2.prototype.convertTableBlocksToTableRows = function(items) {\n      var grouped = array_1.groupConsecutiveElementsWhile(items, function(g2, gPrev) {\n        return g2 instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g2.op.isTable() && gPrev.op.isTable() && g2.op.isSameTableRowAs(gPrev.op);\n      });\n      return grouped.map(function(item) {\n        return new group_types_1.TableRow(Array.isArray(item) ? item.map(function(it) {\n          return new group_types_1.TableCell(it);\n        }) : [new group_types_1.TableCell(item)]);\n      });\n    };\n    return TableGrouper2;\n  }();\n  TableGrouper.TableGrouper = TableGrouper$1;\n  return TableGrouper;\n}\nvar hasRequiredQuillDeltaToHtmlConverter;\nfunction requireQuillDeltaToHtmlConverter() {\n  if (hasRequiredQuillDeltaToHtmlConverter) return QuillDeltaToHtmlConverter;\n  hasRequiredQuillDeltaToHtmlConverter = 1;\n  var __importStar = QuillDeltaToHtmlConverter && QuillDeltaToHtmlConverter.__importStar || function(mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) {\n      for (var k3 in mod) if (Object.hasOwnProperty.call(mod, k3)) result[k3] = mod[k3];\n    }\n    result[\"default\"] = mod;\n    return result;\n  };\n  Object.defineProperty(QuillDeltaToHtmlConverter, \"__esModule\", { value: true });\n  var InsertOpsConverter_1 = requireInsertOpsConverter();\n  var OpToHtmlConverter_1 = requireOpToHtmlConverter();\n  var Grouper_1 = requireGrouper();\n  var group_types_1 = requireGroupTypes();\n  var ListNester_1 = requireListNester();\n  var funcs_html_1 = requireFuncsHtml();\n  var obj = __importStar(requireObject());\n  var value_types_1 = requireValueTypes();\n  var TableGrouper_1 = requireTableGrouper();\n  var BrTag = \"<br/>\";\n  var QuillDeltaToHtmlConverter$1 = function() {\n    function QuillDeltaToHtmlConverter2(deltaOps, options) {\n      this.rawDeltaOps = [];\n      this.callbacks = {};\n      this.options = obj.assign({\n        paragraphTag: \"p\",\n        encodeHtml: true,\n        classPrefix: \"ql\",\n        inlineStyles: false,\n        multiLineBlockquote: true,\n        multiLineHeader: true,\n        multiLineCodeblock: true,\n        multiLineParagraph: true,\n        multiLineCustomBlock: true,\n        allowBackgroundClasses: false,\n        linkTarget: \"_blank\"\n      }, options, {\n        orderedListTag: \"ol\",\n        bulletListTag: \"ul\",\n        listItemTag: \"li\"\n      });\n      var inlineStyles;\n      if (!this.options.inlineStyles) {\n        inlineStyles = void 0;\n      } else if (typeof this.options.inlineStyles === \"object\") {\n        inlineStyles = this.options.inlineStyles;\n      } else {\n        inlineStyles = {};\n      }\n      this.converterOptions = {\n        encodeHtml: this.options.encodeHtml,\n        classPrefix: this.options.classPrefix,\n        inlineStyles,\n        listItemTag: this.options.listItemTag,\n        paragraphTag: this.options.paragraphTag,\n        linkRel: this.options.linkRel,\n        linkTarget: this.options.linkTarget,\n        allowBackgroundClasses: this.options.allowBackgroundClasses,\n        customTag: this.options.customTag,\n        customTagAttributes: this.options.customTagAttributes,\n        customCssClasses: this.options.customCssClasses,\n        customCssStyles: this.options.customCssStyles\n      };\n      this.rawDeltaOps = deltaOps;\n    }\n    QuillDeltaToHtmlConverter2.prototype._getListTag = function(op) {\n      return op.isOrderedList() ? this.options.orderedListTag + \"\" : op.isBulletList() ? this.options.bulletListTag + \"\" : op.isCheckedList() ? this.options.bulletListTag + \"\" : op.isUncheckedList() ? this.options.bulletListTag + \"\" : \"\";\n    };\n    QuillDeltaToHtmlConverter2.prototype.getGroupedOps = function() {\n      var deltaOps = InsertOpsConverter_1.InsertOpsConverter.convert(this.rawDeltaOps, this.options);\n      var pairedOps = Grouper_1.Grouper.pairOpsWithTheirBlock(deltaOps);\n      var groupedSameStyleBlocks = Grouper_1.Grouper.groupConsecutiveSameStyleBlocks(pairedOps, {\n        blockquotes: !!this.options.multiLineBlockquote,\n        header: !!this.options.multiLineHeader,\n        codeBlocks: !!this.options.multiLineCodeblock,\n        customBlocks: !!this.options.multiLineCustomBlock\n      });\n      var groupedOps = Grouper_1.Grouper.reduceConsecutiveSameStyleBlocksToOne(groupedSameStyleBlocks);\n      var tableGrouper = new TableGrouper_1.TableGrouper();\n      groupedOps = tableGrouper.group(groupedOps);\n      var listNester = new ListNester_1.ListNester();\n      return listNester.nest(groupedOps);\n    };\n    QuillDeltaToHtmlConverter2.prototype.convert = function() {\n      var _this = this;\n      var groups = this.getGroupedOps();\n      return groups.map(function(group) {\n        if (group instanceof group_types_1.ListGroup) {\n          return _this._renderWithCallbacks(value_types_1.GroupType.List, group, function() {\n            return _this._renderList(group);\n          });\n        } else if (group instanceof group_types_1.TableGroup) {\n          return _this._renderWithCallbacks(value_types_1.GroupType.Table, group, function() {\n            return _this._renderTable(group);\n          });\n        } else if (group instanceof group_types_1.BlockGroup) {\n          var g2 = group;\n          return _this._renderWithCallbacks(value_types_1.GroupType.Block, group, function() {\n            return _this._renderBlock(g2.op, g2.ops);\n          });\n        } else if (group instanceof group_types_1.BlotBlock) {\n          return _this._renderCustom(group.op, null);\n        } else if (group instanceof group_types_1.VideoItem) {\n          return _this._renderWithCallbacks(value_types_1.GroupType.Video, group, function() {\n            var g3 = group;\n            var converter = new OpToHtmlConverter_1.OpToHtmlConverter(g3.op, _this.converterOptions);\n            return converter.getHtml();\n          });\n        } else {\n          return _this._renderWithCallbacks(value_types_1.GroupType.InlineGroup, group, function() {\n            return _this._renderInlines(group.ops, true);\n          });\n        }\n      }).join(\"\");\n    };\n    QuillDeltaToHtmlConverter2.prototype._renderWithCallbacks = function(groupType, group, myRenderFn) {\n      var html = \"\";\n      var beforeCb = this.callbacks[\"beforeRender_cb\"];\n      html = typeof beforeCb === \"function\" ? beforeCb.apply(null, [groupType, group]) : \"\";\n      if (!html) {\n        html = myRenderFn();\n      }\n      var afterCb = this.callbacks[\"afterRender_cb\"];\n      html = typeof afterCb === \"function\" ? afterCb.apply(null, [groupType, html]) : html;\n      return html;\n    };\n    QuillDeltaToHtmlConverter2.prototype._renderList = function(list2) {\n      var _this = this;\n      var firstItem = list2.items[0];\n      return funcs_html_1.makeStartTag(this._getListTag(firstItem.item.op)) + list2.items.map(function(li) {\n        return _this._renderListItem(li);\n      }).join(\"\") + funcs_html_1.makeEndTag(this._getListTag(firstItem.item.op));\n    };\n    QuillDeltaToHtmlConverter2.prototype._renderListItem = function(li) {\n      li.item.op.attributes.indent = 0;\n      var converter = new OpToHtmlConverter_1.OpToHtmlConverter(li.item.op, this.converterOptions);\n      var parts = converter.getHtmlParts();\n      var liElementsHtml = this._renderInlines(li.item.ops, false);\n      return parts.openingTag + liElementsHtml + (li.innerList ? this._renderList(li.innerList) : \"\") + parts.closingTag;\n    };\n    QuillDeltaToHtmlConverter2.prototype._renderTable = function(table2) {\n      var _this = this;\n      return funcs_html_1.makeStartTag(\"table\") + funcs_html_1.makeStartTag(\"tbody\") + table2.rows.map(function(row) {\n        return _this._renderTableRow(row);\n      }).join(\"\") + funcs_html_1.makeEndTag(\"tbody\") + funcs_html_1.makeEndTag(\"table\");\n    };\n    QuillDeltaToHtmlConverter2.prototype._renderTableRow = function(row) {\n      var _this = this;\n      return funcs_html_1.makeStartTag(\"tr\") + row.cells.map(function(cell) {\n        return _this._renderTableCell(cell);\n      }).join(\"\") + funcs_html_1.makeEndTag(\"tr\");\n    };\n    QuillDeltaToHtmlConverter2.prototype._renderTableCell = function(cell) {\n      var converter = new OpToHtmlConverter_1.OpToHtmlConverter(cell.item.op, this.converterOptions);\n      var parts = converter.getHtmlParts();\n      var cellElementsHtml = this._renderInlines(cell.item.ops, false);\n      return funcs_html_1.makeStartTag(\"td\", {\n        key: \"data-row\",\n        value: cell.item.op.attributes.table\n      }) + parts.openingTag + cellElementsHtml + parts.closingTag + funcs_html_1.makeEndTag(\"td\");\n    };\n    QuillDeltaToHtmlConverter2.prototype._renderBlock = function(bop, ops) {\n      var _this = this;\n      var converter = new OpToHtmlConverter_1.OpToHtmlConverter(bop, this.converterOptions);\n      var htmlParts = converter.getHtmlParts();\n      if (bop.isCodeBlock()) {\n        return htmlParts.openingTag + funcs_html_1.encodeHtml(ops.map(function(iop) {\n          return iop.isCustomEmbed() ? _this._renderCustom(iop, bop) : iop.insert.value;\n        }).join(\"\")) + htmlParts.closingTag;\n      }\n      var inlines = ops.map(function(op) {\n        return _this._renderInline(op, bop);\n      }).join(\"\");\n      return htmlParts.openingTag + (inlines || BrTag) + htmlParts.closingTag;\n    };\n    QuillDeltaToHtmlConverter2.prototype._renderInlines = function(ops, isInlineGroup) {\n      var _this = this;\n      if (isInlineGroup === void 0) {\n        isInlineGroup = true;\n      }\n      var opsLen = ops.length - 1;\n      var html = ops.map(function(op, i3) {\n        if (i3 > 0 && i3 === opsLen && op.isJustNewline()) {\n          return \"\";\n        }\n        return _this._renderInline(op, null);\n      }).join(\"\");\n      if (!isInlineGroup) {\n        return html;\n      }\n      var startParaTag = funcs_html_1.makeStartTag(this.options.paragraphTag);\n      var endParaTag = funcs_html_1.makeEndTag(this.options.paragraphTag);\n      if (html === BrTag || this.options.multiLineParagraph) {\n        return startParaTag + html + endParaTag;\n      }\n      return startParaTag + html.split(BrTag).map(function(v2) {\n        return v2 === \"\" ? BrTag : v2;\n      }).join(endParaTag + startParaTag) + endParaTag;\n    };\n    QuillDeltaToHtmlConverter2.prototype._renderInline = function(op, contextOp) {\n      if (op.isCustomEmbed()) {\n        return this._renderCustom(op, contextOp);\n      }\n      var converter = new OpToHtmlConverter_1.OpToHtmlConverter(op, this.converterOptions);\n      return converter.getHtml().replace(/\\n/g, BrTag);\n    };\n    QuillDeltaToHtmlConverter2.prototype._renderCustom = function(op, contextOp) {\n      var renderCb = this.callbacks[\"renderCustomOp_cb\"];\n      if (typeof renderCb === \"function\") {\n        return renderCb.apply(null, [op, contextOp]);\n      }\n      return \"\";\n    };\n    QuillDeltaToHtmlConverter2.prototype.beforeRender = function(cb) {\n      if (typeof cb === \"function\") {\n        this.callbacks[\"beforeRender_cb\"] = cb;\n      }\n    };\n    QuillDeltaToHtmlConverter2.prototype.afterRender = function(cb) {\n      if (typeof cb === \"function\") {\n        this.callbacks[\"afterRender_cb\"] = cb;\n      }\n    };\n    QuillDeltaToHtmlConverter2.prototype.renderCustomWith = function(cb) {\n      this.callbacks[\"renderCustomOp_cb\"] = cb;\n    };\n    return QuillDeltaToHtmlConverter2;\n  }();\n  QuillDeltaToHtmlConverter.QuillDeltaToHtmlConverter = QuillDeltaToHtmlConverter$1;\n  return QuillDeltaToHtmlConverter;\n}\nvar hasRequiredMain;\nfunction requireMain() {\n  if (hasRequiredMain) return main;\n  hasRequiredMain = 1;\n  Object.defineProperty(main, \"__esModule\", { value: true });\n  var QuillDeltaToHtmlConverter_1 = requireQuillDeltaToHtmlConverter();\n  main.QuillDeltaToHtmlConverter = QuillDeltaToHtmlConverter_1.QuillDeltaToHtmlConverter;\n  var OpToHtmlConverter_1 = requireOpToHtmlConverter();\n  main.OpToHtmlConverter = OpToHtmlConverter_1.OpToHtmlConverter;\n  var group_types_1 = requireGroupTypes();\n  main.InlineGroup = group_types_1.InlineGroup;\n  main.VideoItem = group_types_1.VideoItem;\n  main.BlockGroup = group_types_1.BlockGroup;\n  main.ListGroup = group_types_1.ListGroup;\n  main.ListItem = group_types_1.ListItem;\n  main.BlotBlock = group_types_1.BlotBlock;\n  var DeltaInsertOp_1 = requireDeltaInsertOp();\n  main.DeltaInsertOp = DeltaInsertOp_1.DeltaInsertOp;\n  var InsertData_1 = requireInsertData();\n  main.InsertDataQuill = InsertData_1.InsertDataQuill;\n  main.InsertDataCustom = InsertData_1.InsertDataCustom;\n  var value_types_1 = requireValueTypes();\n  main.NewLine = value_types_1.NewLine;\n  main.ListType = value_types_1.ListType;\n  main.ScriptType = value_types_1.ScriptType;\n  main.DirectionType = value_types_1.DirectionType;\n  main.AlignType = value_types_1.AlignType;\n  main.DataType = value_types_1.DataType;\n  main.GroupType = value_types_1.GroupType;\n  return main;\n}\nvar mainExports = requireMain();\nconst ValueRichtextMixin = {\n  name: \"valuerichtext-mixin\",\n  getValue() {\n    const ops = this.quill.getContents().ops;\n    const converter = new mainExports.QuillDeltaToHtmlConverter(ops, {\n      multiLineParagraph: false\n    });\n    return converter.convert();\n  }\n};\nconst formTemplates = {\n  text: {\n    template: (value, attributes) => x`\n      <input\n        type=\"text\"\n        placeholder=${o$2(attributes.placeholder)}\n        name=${o$2(attributes.name)}\n        id=${o$2(attributes.id)}\n        value=${value || \"\"}\n        pattern=${o$2(attributes.pattern)}\n        title=${o$2(attributes.title)}\n        ?required=${attributes.required}\n        autocomplete=${o$2(attributes.autocomplete)}\n        data-holder\n        maxlength=${o$2(attributes.maxlength)}\n        minlength=${o$2(attributes.minlength)}\n        @change=${attributes.onChange}\n      />\n    `,\n    dependencies: [FormMixin, PatternMixin, FormLengthMixin]\n  },\n  textarea: {\n    template: (value, attributes) => x`\n      <textarea\n        name=${o$2(attributes.name)}\n        id=${o$2(attributes.id)}\n        placeholder=${o$2(attributes.placeholder)}\n        data-holder\n        ?required=${attributes.required}\n        autocomplete=${o$2(attributes.autocomplete)}\n        maxlength=${o$2(attributes.maxlength)}\n        minlength=${o$2(attributes.minlength)}\n        @change=${attributes.onChange}\n      >${value}</textarea>\n    `,\n    dependencies: [FormMixin, FormLengthMixin]\n  },\n  checkbox: {\n    template: (value, attributes) => x`\n      <label>\n        <input\n          data-holder\n          type=\"checkbox\"\n          name=${o$2(attributes.name)}\n          ?required=${attributes.required}\n          ?checked=${value === \"true\"}\n          @change=${attributes.onChange}\n        >\n        <div>${attributes.label || attributes.name}</div>\n      </label>\n    `,\n    dependencies: [FormCheckboxMixin, FormMixin]\n  },\n  date: {\n    template: (_value, attributes) => x`\n      <input\n        type=\"date\"\n        placeholder=${o$2(attributes.placeholder)}\n        name=${o$2(attributes.name)}\n        id=${o$2(attributes.id)}\n        ?required=${attributes.required}\n        value=${o$2(attributes.originalValue)}\n        data-holder\n        @change=${attributes.onChange}\n      />\n    `,\n    dependencies: [FormMixin]\n  },\n  rangedate: {\n    template: (_value, attributes) => x`\n      <input\n        data-holder\n        type=\"date\"\n        name=\"${attributes.name || \"\"}-start\"\n        @change=${attributes.onChange}\n        value=${o$2(attributes.startValue)}\n        />\n        <input\n        data-holder\n        type=\"date\"\n        name=\"${attributes.name || \"\"}-end\"\n        @change=${attributes.onChange}\n        value=${o$2(attributes.endValue)}\n      />\n    `,\n    dependencies: [FilterRangeFormMixin, FormMixin]\n  },\n  number: {\n    template: (value, attributes) => x`\n      <input\n        type=\"number\"\n        placeholder=${o$2(attributes.placeholder)}\n        name=${o$2(attributes.name)}\n        id=${o$2(attributes.id)}\n        value=${value}\n        min=${o$2(attributes.min)}\n        max=${o$2(attributes.max)}\n        step=${o$2(attributes.step)}\n        ?required=${attributes.required}\n        data-holder\n        @change=${attributes.onChange}\n      />\n    `,\n    dependencies: [FormNumberMixin, FormMinMaxMixin, FormMixin, FormStepMixin]\n  },\n  rangenumber: {\n    template: (_value, attributes) => x`\n      <input\n        data-holder\n        type=\"number\"\n        name=\"${attributes.name || \"\"}-start\"\n        @change=${attributes.onChange}\n        value=${o$2(attributes.startValue)}\n      />\n      <input\n        data-holder\n        type=\"number\"\n        name=\"${attributes.name || \"\"}-end\"\n        @change=${attributes.onChange}\n        value=${o$2(attributes.endValue)}\n      />\n    `,\n    dependencies: [FilterRangeFormMixin, FormNumberMixin, FormMixin]\n  },\n  hidden: {\n    template: (value, attributes) => x`\n      <input\n        type=\"hidden\"\n        name=${o$2(attributes.name)}\n        value=${value}\n        data-holder\n        @change=${attributes.onChange}\n      />\n    `,\n    dependencies: [FormMixin]\n  },\n  dropdown: {\n    template: (value, attributes) => x`\n      <select\n        name=${o$2(attributes.name)}\n        id=${o$2(attributes.id)}\n        data-holder\n        ?required=${attributes.required}\n        ?multiple=${attributes.multiple}\n        autocomplete=${o$2(attributes.autocomplete)}\n        @change=${attributes.onChange}\n      >\n        ${!(attributes.multiple || attributes.autocomplete) ? x`\n        <option value=\"\" ?selected=${value === \"\"}>\n          ${attributes.placeholder || \"-\"}\n        </option>\n        ` : \"\"}\n        ${(attributes.range || []).map(\n      (el) => x`\n          <option\n            value=${el.value}\n            ?selected=${!attributes.multiple ? value === el.selectedValue : attributes.values.includes(el.selectedValue)}\n          >\n            ${el.label}\n          </option>\n        `\n    )}\n        ${Object.entries(attributes.enum || []).map(\n      ([key, val]) => x`\n          <option\n            value=\"${key}\"\n            ?selected=${!attributes.multiple ? value === key : attributes.values.includes(key)}\n          >\n            ${val}\n          </option>\n        `\n    )}\n      </select>\n    `,\n    dependencies: [FormDropdownMixin, FormMixin, RangeMixin]\n  },\n  radio: {\n    template: (value, attributes) => x`\n    <fieldset>\n      <legend\n        name=${o$2(attributes.name)}\n      >\n        ${attributes.label}\n      </legend>\n      ${(attributes.range || []).map(\n      (el) => x`\n        <label>\n          <input\n            type=\"radio\"\n            name=${o$2(attributes.id)}\n            value=${el.value}\n            ?required=${attributes.required}\n            ?checked=${value === el.selectedValue}\n          > <span>${el.label}</span>\n        </label>\n      `\n    )}\n      ${Object.entries(attributes.enum || []).map(\n      ([key, val]) => x`\n        <label>\n          <input\n            type=\"radio\"\n            value=\"${key}\"\n            name=${o$2(attributes.id)}\n            ?required=${attributes.required}\n            ?checked=${value === key}\n          > <span>${val}</span>\n        </label>\n      `\n    )}\n    </fieldset>\n    `,\n    dependencies: [FormRadioMixin, FormMixin, RangeMixin]\n  },\n  multicheckbox: {\n    template: (_value, attributes) => x`\n      <fieldset>\n        <legend \n          name=${o$2(attributes.name)}>\n            ${attributes.label}\n        </legend>\n        ${(attributes.range || []).map(\n      (el) => x`\n          <label>\n            <input\n              type=\"checkbox\"\n              value=${el.value}\n              ?checked=${attributes.values.includes(el.selectedValue)}\n            /> <span>${el.label}</span>\n          </label>\n        `\n    )}\n        ${Object.entries(attributes.enum || []).map(\n      ([key, val]) => x`\n          <label>\n            <input type=\"checkbox\"\n              value=\"${key}\"\n            /> <span>${val}</span>\n          </label>\n        `\n    )}\n      </fieldset>\n    `,\n    dependencies: [FormCheckboxesMixin, FormMixin, RangeMixin]\n  },\n  checkboxes: {\n    template: (_value, attributes) => x`\n      <solid-form-multicheckbox\n        data-holder\n        name=${o$2(attributes.name)}\n        range=${o$2(attributes.range)}\n        enum=${o$2(attributes.enum)}\n        values=${o$2(attributes.values)}\n        option-label=${o$2(attributes.optionLabel)}\n        option-value=${o$2(attributes.optionValue)}\n        order-asc=${o$2(attributes.orderAsc)}\n        order-desc=${o$2(attributes.orderDesc)}\n        ?required=${attributes.required}\n        label=${o$2(attributes.label)} \n      ></solid-form-multicheckbox>\n    `,\n    dependencies: [MultipleselectFormMixin, FormMixin, RangeMixin]\n  },\n  multiple: {\n    template: (_value, attributes) => x`\n      ${(attributes.children || []).map(\n      (child, index2) => x`\n        <div data-index=${attributes.name + index2}>\n          ${child}\n          <button type=\"button\" class=${o$2(attributes.removeClass)} @click=${() => attributes.removeItem(index2)}>${attributes.removeLabel}</button>\n        </div>\n      `\n    )}\n      <button type=\"button\" class=${o$2(attributes.addClass)} @click=${attributes.addItem}>${attributes.addLabel}</button>\n    `,\n    dependencies: [MultipleFormMixin, FormMixin]\n  },\n  multipleselect: {\n    template: (_value, attributes) => x`\n      <solid-form-dropdown\n        data-holder\n        class=\"solid-form-dropdown\"\n        name=${o$2(attributes.name)}\n        data-id=${o$2(attributes.id)}\n        range=${o$2(attributes.range)}\n        values=${o$2(attributes.values)}\n        option-label=${o$2(attributes.optionLabel)}\n        option-value=${o$2(attributes.optionValue)}\n        order-asc=${o$2(attributes.orderAsc)}\n        order-desc=${o$2(attributes.orderDesc)}\n        ?required=${attributes.required}\n        multiple\n      ></solid-form-dropdown>\n    `,\n    dependencies: [MultipleselectFormMixin, FormMixin, RangeMixin]\n  },\n  file: {\n    template: (value, attributes) => x`\n      <div>\n        <input\n          data-holder\n          type=\"text\"\n          ?required=${attributes.required}\n          name=${o$2(attributes.name)}\n          value=${value || \"\"}\n        >\n        <a\n          href=${value || \"\"}\n          ?hidden=${value === \"\"}\n        >${value !== \"\" ? decodeURI(value.split(\"/\").pop()) : \"\"}</a>\n\n        <input\n          type=\"file\"\n          id=${o$2(attributes.id)}\n          value=${o$2(attributes.fileValue)}\n          @change=${attributes.selectFile}\n        />\n        <button\n          ?hidden=${attributes.resetButtonHidden}\n          @click=${attributes.resetFile}\n        >×</button>\n        <span>${attributes.output}</span>\n      </div>\n    `,\n    dependencies: [FormFileMixin, FormMixin]\n  },\n  image: {\n    template: (value, attributes) => x`\n      <div>\n        <input\n          data-holder\n          type=\"text\"\n          name=${o$2(attributes.name)}\n          value=${value || \"\"}\n          ?required=${attributes.required}\n        >\n        <input\n          type=\"file\"\n          accept=\"image/*\"\n          id=${o$2(attributes.id)}\n          value=${o$2(attributes.fileValue)}\n          @change=${attributes.selectFile}\n        />\n        <img\n          src=${value || \"\"}\n          ?hidden=${value === \"\"}\n        />\n        <button\n          ?hidden=${attributes.resetButtonHidden}\n          @click=${attributes.resetFile}\n        >×</button>\n        <span>${attributes.output}</span>\n      </div>\n    `,\n    dependencies: [FormFileMixin, FormMixin]\n  },\n  richtext: {\n    template: (_value, attributes) => x`\n      <div \n        data-richtext\n        name=${o$2(attributes.name)}\n        data-holder\n      ></div>\n    `,\n    dependencies: [ValueRichtextMixin, FormMixin]\n  },\n  editor: {\n    template: (_value, attributes) => x`\n      <textarea\n        id=${attributes.id}\n        data-editor\n        name=${o$2(attributes.name)}\n        data-holder\n      ></textarea>\n    `,\n    dependencies: [ValueEditorMixin, FormMixin]\n  },\n  color: {\n    template: (_value, attributes) => x`\n      <input\n        type=\"color\"\n        placeholder=${o$2(attributes.placeholder)}\n        id=${o$2(attributes.id)}\n        name=${o$2(attributes.name)}\n        ?required=${attributes.required}\n        value=${o$2(attributes.originalValue)}\n        data-holder\n        @change=${attributes.onChange}\n      />\n    `,\n    dependencies: [FormMixin]\n  },\n  email: {\n    template: (value, attributes) => x`\n      <input\n        type=\"email\"\n        placeholder=${o$2(attributes.placeholder)}\n        id=${o$2(attributes.id)}\n        name=${o$2(attributes.name)}\n        value=${value || \"\"}\n        ?required=${attributes.required}\n        data-holder\n        maxlength=${o$2(attributes.maxlength)}\n        minlength=${o$2(attributes.minlength)}\n        @change=${attributes.onChange}\n      />\n    `,\n    dependencies: [FormMixin, FormLengthMixin]\n  },\n  password: {\n    template: (value, attributes) => x`\n      <input\n        type=\"password\"\n        placeholder=${o$2(attributes.placeholder)}\n        id=${o$2(attributes.id)}\n        name=${o$2(attributes.name)}\n        value=${value || \"\"}\n        ?required=${attributes.required}\n        pattern=${o$2(attributes.pattern)}\n        title=${o$2(attributes.title)}\n        data-holder\n        maxlength=${o$2(attributes.maxlength)}\n        minlength=${o$2(attributes.minlength)}\n        @change=${attributes.onChange}\n      />\n    `,\n    dependencies: [FormMixin, PatternMixin, FormLengthMixin]\n  },\n  time: {\n    template: (value, attributes) => x`\n      <input\n        type=\"time\"\n        placeholder=${o$2(attributes.placeholder)}\n        name=${o$2(attributes.name)}\n        id=${o$2(attributes.id)}\n        value=${value || \"\"}\n        min=${o$2(attributes.min)}\n        max=${o$2(attributes.max)}\n        step=${o$2(attributes.step)}\n        ?required=${attributes.required}\n        data-holder\n        @change=${attributes.onChange}\n      />\n    `,\n    dependencies: [FormMixin, FormMinMaxMixin, FormStepMixin]\n  }\n};\nconst SetMixin = {\n  name: \"set-mixin\",\n  /**\n   * For sets and group widgets, remove auto rendering\n   * function to allow only manual renders\n   */\n  planRender() {\n  }\n};\nconst groupTemplates = {\n  default: {\n    template: (value) => x`<span>${value}</span><div data-content></div>`,\n    dependencies: [SetMixin]\n  }\n};\nconst setTemplates = {\n  default: {\n    template: () => x``,\n    dependencies: [SetMixin]\n  },\n  div: {\n    template: () => x`<div data-content></div>`,\n    dependencies: [SetMixin]\n  },\n  ul: {\n    template: () => x`<ul data-content></ul>`,\n    dependencies: [SetMixin]\n  }\n};\nconst index$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  defaultTemplates,\n  displayTemplates,\n  formTemplates,\n  groupTemplates,\n  setTemplates\n}, Symbol.toStringTag, { value: \"Module\" }));\nvar version = \"4.1.0\";\nfunction isUndefined(value) {\n  return value === void 0;\n}\nfunction isBoolean(value) {\n  return typeof value === \"boolean\";\n}\nfunction defaults(dest, src) {\n  for (var prop in src) {\n    if (src.hasOwnProperty(prop) && isUndefined(dest[prop])) {\n      dest[prop] = src[prop];\n    }\n  }\n  return dest;\n}\nfunction ellipsis(str, truncateLen, ellipsisChars) {\n  var ellipsisLength;\n  if (str.length > truncateLen) {\n    if (ellipsisChars == null) {\n      ellipsisChars = \"&hellip;\";\n      ellipsisLength = 3;\n    } else {\n      ellipsisLength = ellipsisChars.length;\n    }\n    str = str.substring(0, truncateLen - ellipsisLength) + ellipsisChars;\n  }\n  return str;\n}\nfunction remove(arr, item) {\n  for (var i3 = arr.length - 1; i3 >= 0; i3--) {\n    if (arr[i3] === item) {\n      arr.splice(i3, 1);\n    }\n  }\n}\nfunction removeWithPredicate(arr, fn) {\n  for (var i3 = arr.length - 1; i3 >= 0; i3--) {\n    if (fn(arr[i3]) === true) {\n      arr.splice(i3, 1);\n    }\n  }\n}\nfunction assertNever(theValue) {\n  throw new Error(\"Unhandled case for value: '\".concat(theValue, \"'\"));\n}\nvar letterRe = /[A-Za-z]/;\nvar digitRe = /[\\d]/;\nvar whitespaceRe = /\\s/;\nvar quoteRe = /['\"]/;\nvar controlCharsRe = /[\\x00-\\x1F\\x7F]/;\nvar alphaCharsStr = /A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC/.source;\nvar emojiStr = /\\u2700-\\u27bf\\udde6-\\uddff\\ud800-\\udbff\\udc00-\\udfff\\ufe0e\\ufe0f\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0\\ud83c\\udffb-\\udfff\\u200d\\u3299\\u3297\\u303d\\u3030\\u24c2\\ud83c\\udd70-\\udd71\\udd7e-\\udd7f\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01-\\ude02\\ude1a\\ude2f\\ude32-\\ude3a\\ude50-\\ude51\\u203c\\u2049\\u25aa-\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u00a9\\u00ae\\u2122\\u2139\\udc04\\u2600-\\u26FF\\u2b05\\u2b06\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u231a\\u231b\\u2328\\u23cf\\u23e9-\\u23f3\\u23f8-\\u23fa\\udccf\\u2935\\u2934\\u2190-\\u21ff/.source;\nvar marksStr = /\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D4-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F/.source;\nvar alphaCharsAndMarksStr = alphaCharsStr + emojiStr + marksStr;\nvar decimalNumbersStr = /0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19/.source;\nvar alphaNumericAndMarksCharsStr = alphaCharsAndMarksStr + decimalNumbersStr;\nvar alphaNumericAndMarksRe = new RegExp(\"[\".concat(alphaNumericAndMarksCharsStr, \"]\"));\nvar HtmlTag = (\n  /** @class */\n  function() {\n    function HtmlTag2(cfg) {\n      if (cfg === void 0) {\n        cfg = {};\n      }\n      this.tagName = \"\";\n      this.attrs = {};\n      this.innerHTML = \"\";\n      this.tagName = cfg.tagName || \"\";\n      this.attrs = cfg.attrs || {};\n      this.innerHTML = cfg.innerHtml || cfg.innerHTML || \"\";\n    }\n    HtmlTag2.prototype.setTagName = function(tagName) {\n      this.tagName = tagName;\n      return this;\n    };\n    HtmlTag2.prototype.getTagName = function() {\n      return this.tagName || \"\";\n    };\n    HtmlTag2.prototype.setAttr = function(attrName, attrValue) {\n      var tagAttrs = this.getAttrs();\n      tagAttrs[attrName] = attrValue;\n      return this;\n    };\n    HtmlTag2.prototype.getAttr = function(attrName) {\n      return this.getAttrs()[attrName];\n    };\n    HtmlTag2.prototype.setAttrs = function(attrs) {\n      Object.assign(this.getAttrs(), attrs);\n      return this;\n    };\n    HtmlTag2.prototype.getAttrs = function() {\n      return this.attrs || (this.attrs = {});\n    };\n    HtmlTag2.prototype.setClass = function(cssClass) {\n      return this.setAttr(\"class\", cssClass);\n    };\n    HtmlTag2.prototype.addClass = function(cssClass) {\n      var classAttr = this.getClass(), classes = !classAttr ? [] : classAttr.split(whitespaceRe), newClasses = cssClass.split(whitespaceRe), newClass;\n      while (newClass = newClasses.shift()) {\n        if (classes.indexOf(newClass) === -1) {\n          classes.push(newClass);\n        }\n      }\n      this.getAttrs()[\"class\"] = classes.join(\" \");\n      return this;\n    };\n    HtmlTag2.prototype.removeClass = function(cssClass) {\n      var classAttr = this.getClass(), classes = !classAttr ? [] : classAttr.split(whitespaceRe), removeClasses = cssClass.split(whitespaceRe), removeClass;\n      while (classes.length && (removeClass = removeClasses.shift())) {\n        var idx = classes.indexOf(removeClass);\n        if (idx !== -1) {\n          classes.splice(idx, 1);\n        }\n      }\n      this.getAttrs()[\"class\"] = classes.join(\" \");\n      return this;\n    };\n    HtmlTag2.prototype.getClass = function() {\n      return this.getAttrs()[\"class\"] || \"\";\n    };\n    HtmlTag2.prototype.hasClass = function(cssClass) {\n      return (\" \" + this.getClass() + \" \").indexOf(\" \" + cssClass + \" \") !== -1;\n    };\n    HtmlTag2.prototype.setInnerHTML = function(html) {\n      this.innerHTML = html;\n      return this;\n    };\n    HtmlTag2.prototype.setInnerHtml = function(html) {\n      return this.setInnerHTML(html);\n    };\n    HtmlTag2.prototype.getInnerHTML = function() {\n      return this.innerHTML || \"\";\n    };\n    HtmlTag2.prototype.getInnerHtml = function() {\n      return this.getInnerHTML();\n    };\n    HtmlTag2.prototype.toAnchorString = function() {\n      var tagName = this.getTagName(), attrsStr = this.buildAttrsStr();\n      attrsStr = attrsStr ? \" \" + attrsStr : \"\";\n      return [\"<\", tagName, attrsStr, \">\", this.getInnerHtml(), \"</\", tagName, \">\"].join(\"\");\n    };\n    HtmlTag2.prototype.buildAttrsStr = function() {\n      if (!this.attrs)\n        return \"\";\n      var attrs = this.getAttrs(), attrsArr = [];\n      for (var prop in attrs) {\n        if (attrs.hasOwnProperty(prop)) {\n          attrsArr.push(prop + '=\"' + attrs[prop] + '\"');\n        }\n      }\n      return attrsArr.join(\" \");\n    };\n    return HtmlTag2;\n  }()\n);\nfunction truncateSmart(url2, truncateLen, ellipsisChars) {\n  var ellipsisLengthBeforeParsing;\n  var ellipsisLength;\n  if (ellipsisChars == null) {\n    ellipsisChars = \"&hellip;\";\n    ellipsisLength = 3;\n    ellipsisLengthBeforeParsing = 8;\n  } else {\n    ellipsisLength = ellipsisChars.length;\n    ellipsisLengthBeforeParsing = ellipsisChars.length;\n  }\n  var parse_url = function(url3) {\n    var urlObj2 = {};\n    var urlSub = url3;\n    var match3 = urlSub.match(/^([a-z]+):\\/\\//i);\n    if (match3) {\n      urlObj2.scheme = match3[1];\n      urlSub = urlSub.substr(match3[0].length);\n    }\n    match3 = urlSub.match(/^(.*?)(?=(\\?|#|\\/|$))/i);\n    if (match3) {\n      urlObj2.host = match3[1];\n      urlSub = urlSub.substr(match3[0].length);\n    }\n    match3 = urlSub.match(/^\\/(.*?)(?=(\\?|#|$))/i);\n    if (match3) {\n      urlObj2.path = match3[1];\n      urlSub = urlSub.substr(match3[0].length);\n    }\n    match3 = urlSub.match(/^\\?(.*?)(?=(#|$))/i);\n    if (match3) {\n      urlObj2.query = match3[1];\n      urlSub = urlSub.substr(match3[0].length);\n    }\n    match3 = urlSub.match(/^#(.*?)$/i);\n    if (match3) {\n      urlObj2.fragment = match3[1];\n    }\n    return urlObj2;\n  };\n  var buildUrl = function(urlObj2) {\n    var url3 = \"\";\n    if (urlObj2.scheme && urlObj2.host) {\n      url3 += urlObj2.scheme + \"://\";\n    }\n    if (urlObj2.host) {\n      url3 += urlObj2.host;\n    }\n    if (urlObj2.path) {\n      url3 += \"/\" + urlObj2.path;\n    }\n    if (urlObj2.query) {\n      url3 += \"?\" + urlObj2.query;\n    }\n    if (urlObj2.fragment) {\n      url3 += \"#\" + urlObj2.fragment;\n    }\n    return url3;\n  };\n  var buildSegment = function(segment, remainingAvailableLength3) {\n    var remainingAvailableLengthHalf = remainingAvailableLength3 / 2, startOffset = Math.ceil(remainingAvailableLengthHalf), endOffset = -1 * Math.floor(remainingAvailableLengthHalf), end2 = \"\";\n    if (endOffset < 0) {\n      end2 = segment.substr(endOffset);\n    }\n    return segment.substr(0, startOffset) + ellipsisChars + end2;\n  };\n  if (url2.length <= truncateLen) {\n    return url2;\n  }\n  var availableLength = truncateLen - ellipsisLength;\n  var urlObj = parse_url(url2);\n  if (urlObj.query) {\n    var matchQuery = urlObj.query.match(/^(.*?)(?=(\\?|\\#))(.*?)$/i);\n    if (matchQuery) {\n      urlObj.query = urlObj.query.substr(0, matchQuery[1].length);\n      url2 = buildUrl(urlObj);\n    }\n  }\n  if (url2.length <= truncateLen) {\n    return url2;\n  }\n  if (urlObj.host) {\n    urlObj.host = urlObj.host.replace(/^www\\./, \"\");\n    url2 = buildUrl(urlObj);\n  }\n  if (url2.length <= truncateLen) {\n    return url2;\n  }\n  var str = \"\";\n  if (urlObj.host) {\n    str += urlObj.host;\n  }\n  if (str.length >= availableLength) {\n    if (urlObj.host.length == truncateLen) {\n      return (urlObj.host.substr(0, truncateLen - ellipsisLength) + ellipsisChars).substr(0, availableLength + ellipsisLengthBeforeParsing);\n    }\n    return buildSegment(str, availableLength).substr(0, availableLength + ellipsisLengthBeforeParsing);\n  }\n  var pathAndQuery = \"\";\n  if (urlObj.path) {\n    pathAndQuery += \"/\" + urlObj.path;\n  }\n  if (urlObj.query) {\n    pathAndQuery += \"?\" + urlObj.query;\n  }\n  if (pathAndQuery) {\n    if ((str + pathAndQuery).length >= availableLength) {\n      if ((str + pathAndQuery).length == truncateLen) {\n        return (str + pathAndQuery).substr(0, truncateLen);\n      }\n      var remainingAvailableLength = availableLength - str.length;\n      return (str + buildSegment(pathAndQuery, remainingAvailableLength)).substr(0, availableLength + ellipsisLengthBeforeParsing);\n    } else {\n      str += pathAndQuery;\n    }\n  }\n  if (urlObj.fragment) {\n    var fragment = \"#\" + urlObj.fragment;\n    if ((str + fragment).length >= availableLength) {\n      if ((str + fragment).length == truncateLen) {\n        return (str + fragment).substr(0, truncateLen);\n      }\n      var remainingAvailableLength2 = availableLength - str.length;\n      return (str + buildSegment(fragment, remainingAvailableLength2)).substr(0, availableLength + ellipsisLengthBeforeParsing);\n    } else {\n      str += fragment;\n    }\n  }\n  if (urlObj.scheme && urlObj.host) {\n    var scheme = urlObj.scheme + \"://\";\n    if ((str + scheme).length < availableLength) {\n      return (scheme + str).substr(0, truncateLen);\n    }\n  }\n  if (str.length <= truncateLen) {\n    return str;\n  }\n  var end = \"\";\n  if (availableLength > 0) {\n    end = str.substr(-1 * Math.floor(availableLength / 2));\n  }\n  return (str.substr(0, Math.ceil(availableLength / 2)) + ellipsisChars + end).substr(0, availableLength + ellipsisLengthBeforeParsing);\n}\nfunction truncateMiddle(url2, truncateLen, ellipsisChars) {\n  if (url2.length <= truncateLen) {\n    return url2;\n  }\n  var ellipsisLengthBeforeParsing;\n  var ellipsisLength;\n  if (ellipsisChars == null) {\n    ellipsisChars = \"&hellip;\";\n    ellipsisLengthBeforeParsing = 8;\n    ellipsisLength = 3;\n  } else {\n    ellipsisLengthBeforeParsing = ellipsisChars.length;\n    ellipsisLength = ellipsisChars.length;\n  }\n  var availableLength = truncateLen - ellipsisLength;\n  var end = \"\";\n  if (availableLength > 0) {\n    end = url2.substr(-1 * Math.floor(availableLength / 2));\n  }\n  return (url2.substr(0, Math.ceil(availableLength / 2)) + ellipsisChars + end).substr(0, availableLength + ellipsisLengthBeforeParsing);\n}\nfunction truncateEnd(anchorText, truncateLen, ellipsisChars) {\n  return ellipsis(anchorText, truncateLen, ellipsisChars);\n}\nvar AnchorTagBuilder = (\n  /** @class */\n  function() {\n    function AnchorTagBuilder2(cfg) {\n      if (cfg === void 0) {\n        cfg = {};\n      }\n      this.newWindow = false;\n      this.truncate = {};\n      this.className = \"\";\n      this.newWindow = cfg.newWindow || false;\n      this.truncate = cfg.truncate || {};\n      this.className = cfg.className || \"\";\n    }\n    AnchorTagBuilder2.prototype.build = function(match3) {\n      return new HtmlTag({\n        tagName: \"a\",\n        attrs: this.createAttrs(match3),\n        innerHtml: this.processAnchorText(match3.getAnchorText())\n      });\n    };\n    AnchorTagBuilder2.prototype.createAttrs = function(match3) {\n      var attrs = {\n        href: match3.getAnchorHref()\n        // we'll always have the `href` attribute\n      };\n      var cssClass = this.createCssClass(match3);\n      if (cssClass) {\n        attrs[\"class\"] = cssClass;\n      }\n      if (this.newWindow) {\n        attrs[\"target\"] = \"_blank\";\n        attrs[\"rel\"] = \"noopener noreferrer\";\n      }\n      if (this.truncate) {\n        if (this.truncate.length && this.truncate.length < match3.getAnchorText().length) {\n          attrs[\"title\"] = match3.getAnchorHref();\n        }\n      }\n      return attrs;\n    };\n    AnchorTagBuilder2.prototype.createCssClass = function(match3) {\n      var className = this.className;\n      if (!className) {\n        return \"\";\n      } else {\n        var returnClasses = [className], cssClassSuffixes = match3.getCssClassSuffixes();\n        for (var i3 = 0, len = cssClassSuffixes.length; i3 < len; i3++) {\n          returnClasses.push(className + \"-\" + cssClassSuffixes[i3]);\n        }\n        return returnClasses.join(\" \");\n      }\n    };\n    AnchorTagBuilder2.prototype.processAnchorText = function(anchorText) {\n      anchorText = this.doTruncate(anchorText);\n      return anchorText;\n    };\n    AnchorTagBuilder2.prototype.doTruncate = function(anchorText) {\n      var truncate = this.truncate;\n      if (!truncate || !truncate.length)\n        return anchorText;\n      var truncateLength = truncate.length, truncateLocation = truncate.location;\n      if (truncateLocation === \"smart\") {\n        return truncateSmart(anchorText, truncateLength);\n      } else if (truncateLocation === \"middle\") {\n        return truncateMiddle(anchorText, truncateLength);\n      } else {\n        return truncateEnd(anchorText, truncateLength);\n      }\n    };\n    return AnchorTagBuilder2;\n  }()\n);\nvar extendStatics = function(d2, b2) {\n  extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b3) {\n    d3.__proto__ = b3;\n  } || function(d3, b3) {\n    for (var p2 in b3) if (Object.prototype.hasOwnProperty.call(b3, p2)) d3[p2] = b3[p2];\n  };\n  return extendStatics(d2, b2);\n};\nfunction __extends(d2, b2) {\n  if (typeof b2 !== \"function\" && b2 !== null)\n    throw new TypeError(\"Class extends value \" + String(b2) + \" is not a constructor or null\");\n  extendStatics(d2, b2);\n  function __() {\n    this.constructor = d2;\n  }\n  d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __());\n}\nvar __assign = function() {\n  __assign = Object.assign || function __assign2(t2) {\n    for (var s2, i3 = 1, n3 = arguments.length; i3 < n3; i3++) {\n      s2 = arguments[i3];\n      for (var p2 in s2) if (Object.prototype.hasOwnProperty.call(s2, p2)) t2[p2] = s2[p2];\n    }\n    return t2;\n  };\n  return __assign.apply(this, arguments);\n};\ntypeof SuppressedError === \"function\" ? SuppressedError : function(error2, suppressed, message) {\n  var e2 = new Error(message);\n  return e2.name = \"SuppressedError\", e2.error = error2, e2.suppressed = suppressed, e2;\n};\nvar AbstractMatch = (\n  /** @class */\n  function() {\n    function AbstractMatch2(cfg) {\n      this._ = null;\n      this.matchedText = \"\";\n      this.offset = 0;\n      this.tagBuilder = cfg.tagBuilder;\n      this.matchedText = cfg.matchedText;\n      this.offset = cfg.offset;\n    }\n    AbstractMatch2.prototype.getMatchedText = function() {\n      return this.matchedText;\n    };\n    AbstractMatch2.prototype.setOffset = function(offset) {\n      this.offset = offset;\n    };\n    AbstractMatch2.prototype.getOffset = function() {\n      return this.offset;\n    };\n    AbstractMatch2.prototype.getCssClassSuffixes = function() {\n      return [this.type];\n    };\n    AbstractMatch2.prototype.buildTag = function() {\n      return this.tagBuilder.build(this);\n    };\n    return AbstractMatch2;\n  }()\n);\nvar tldRegexStr = \"(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|travelersinsurance|vermögensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|wolterskluwer|xn--cckwcxetd|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--4dbrk0ce|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--q7ce6a|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|pramerica|richardli|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--qxa6a|xn--tckwe|xn--vhquv|yodobashi|موريتانيا|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|banamex|bauhaus|bentley|bestbuy|booking|brother|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|yamaxun|youtube|zuerich|католик|البحرين|الجزائر|العليان|پاکستان|كاثوليك|இந்தியா|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kindle|kosher|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|nagoya|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|walter|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|lipsy|loans|locus|lotte|lotto|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|ישראל|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|dvag|erni|fage|fail|fans|farm|fast|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kids|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|アマゾン|グーグル|クラウド|ポイント|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|ceo|cfa|cfd|com|cpa|crs|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|scb|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ລາວ|ストア|セール|みんな|中文网|亚马逊|天主教|我爱你|新加坡|淡马锡|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|ευ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|广东|微博|慈善|手机|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)\";\nvar tldRegex = new RegExp(\"^\" + tldRegexStr + \"$\");\nvar urlSuffixStartCharsRe = /[\\/?#]/;\nvar urlSuffixAllowedSpecialCharsRe = /[-+&@#/%=~_()|'$*\\[\\]{}\\u2713]/;\nvar urlSuffixNotAllowedAsLastCharRe = /[?!:,.;^]/;\nvar httpSchemeRe = /https?:\\/\\//i;\nvar httpSchemePrefixRe = new RegExp(\"^\" + httpSchemeRe.source, \"i\");\nvar urlSuffixedCharsNotAllowedAtEndRe = new RegExp(urlSuffixNotAllowedAsLastCharRe.source + \"$\");\nvar invalidSchemeRe = /^(javascript|vbscript):/i;\nvar schemeUrlRe = /^[A-Za-z][-.+A-Za-z0-9]*:(\\/\\/)?([^:/]*)/;\nvar tldUrlHostRe = /^(?:\\/\\/)?([^/#?:]+)/;\nfunction isSchemeStartChar(char) {\n  return letterRe.test(char);\n}\nfunction isSchemeChar(char) {\n  return letterRe.test(char) || digitRe.test(char) || char === \"+\" || char === \"-\" || char === \".\";\n}\nfunction isDomainLabelStartChar(char) {\n  return alphaNumericAndMarksRe.test(char);\n}\nfunction isDomainLabelChar(char) {\n  return char === \"_\" || isDomainLabelStartChar(char);\n}\nfunction isPathChar(char) {\n  return alphaNumericAndMarksRe.test(char) || urlSuffixAllowedSpecialCharsRe.test(char) || urlSuffixNotAllowedAsLastCharRe.test(char);\n}\nfunction isUrlSuffixStartChar(char) {\n  return urlSuffixStartCharsRe.test(char);\n}\nfunction isKnownTld(tld) {\n  return tldRegex.test(tld.toLowerCase());\n}\nfunction isValidSchemeUrl(url2) {\n  if (invalidSchemeRe.test(url2)) {\n    return false;\n  }\n  var schemeMatch = url2.match(schemeUrlRe);\n  if (!schemeMatch) {\n    return false;\n  }\n  var isAuthorityMatch = !!schemeMatch[1];\n  var host = schemeMatch[2];\n  if (isAuthorityMatch) {\n    return true;\n  }\n  if (host.indexOf(\".\") === -1 || !letterRe.test(host)) {\n    return false;\n  }\n  return true;\n}\nfunction isValidTldMatch(url2) {\n  var tldUrlHostMatch = url2.match(tldUrlHostRe);\n  if (!tldUrlHostMatch) {\n    return false;\n  }\n  var host = tldUrlHostMatch[0];\n  var hostLabels = host.split(\".\");\n  if (hostLabels.length < 2) {\n    return false;\n  }\n  var tld = hostLabels[hostLabels.length - 1];\n  if (!isKnownTld(tld)) {\n    return false;\n  }\n  return true;\n}\nvar ipV4Re = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\nvar ipV4PartRe = /[:/?#]/;\nfunction isValidIpV4Address(url2) {\n  var ipV4Part = url2.split(ipV4PartRe, 1)[0];\n  return ipV4Re.test(ipV4Part);\n}\nvar wwwPrefixRegex = /^(https?:\\/\\/)?(www\\.)?/i;\nvar protocolRelativeRegex = /^\\/\\//;\nvar UrlMatch = (\n  /** @class */\n  function(_super) {\n    __extends(UrlMatch2, _super);\n    function UrlMatch2(cfg) {\n      var _this = _super.call(this, cfg) || this;\n      _this.type = \"url\";\n      _this.url = \"\";\n      _this.urlMatchType = \"scheme\";\n      _this.protocolRelativeMatch = false;\n      _this.stripPrefix = {\n        scheme: true,\n        www: true\n      };\n      _this.stripTrailingSlash = true;\n      _this.decodePercentEncoding = true;\n      _this.protocolPrepended = false;\n      _this.urlMatchType = cfg.urlMatchType;\n      _this.url = cfg.url;\n      _this.protocolRelativeMatch = cfg.protocolRelativeMatch;\n      _this.stripPrefix = cfg.stripPrefix;\n      _this.stripTrailingSlash = cfg.stripTrailingSlash;\n      _this.decodePercentEncoding = cfg.decodePercentEncoding;\n      return _this;\n    }\n    UrlMatch2.prototype.getType = function() {\n      return \"url\";\n    };\n    UrlMatch2.prototype.getUrlMatchType = function() {\n      return this.urlMatchType;\n    };\n    UrlMatch2.prototype.getUrl = function() {\n      var url2 = this.url;\n      if (!this.protocolRelativeMatch && this.urlMatchType !== \"scheme\" && !this.protocolPrepended) {\n        url2 = this.url = \"http://\" + url2;\n        this.protocolPrepended = true;\n      }\n      return url2;\n    };\n    UrlMatch2.prototype.getAnchorHref = function() {\n      var url2 = this.getUrl();\n      return url2.replace(/&amp;/g, \"&\");\n    };\n    UrlMatch2.prototype.getAnchorText = function() {\n      var anchorText = this.getMatchedText();\n      if (this.protocolRelativeMatch) {\n        anchorText = stripProtocolRelativePrefix(anchorText);\n      }\n      if (this.stripPrefix.scheme) {\n        anchorText = stripSchemePrefix(anchorText);\n      }\n      if (this.stripPrefix.www) {\n        anchorText = stripWwwPrefix(anchorText);\n      }\n      if (this.stripTrailingSlash) {\n        anchorText = removeTrailingSlash(anchorText);\n      }\n      if (this.decodePercentEncoding) {\n        anchorText = removePercentEncoding(anchorText);\n      }\n      return anchorText;\n    };\n    return UrlMatch2;\n  }(AbstractMatch)\n);\nfunction stripSchemePrefix(url2) {\n  return url2.replace(httpSchemePrefixRe, \"\");\n}\nfunction stripWwwPrefix(url2) {\n  return url2.replace(wwwPrefixRegex, \"$1\");\n}\nfunction stripProtocolRelativePrefix(text2) {\n  return text2.replace(protocolRelativeRegex, \"\");\n}\nfunction removeTrailingSlash(anchorText) {\n  if (anchorText.charAt(anchorText.length - 1) === \"/\") {\n    anchorText = anchorText.slice(0, -1);\n  }\n  return anchorText;\n}\nfunction removePercentEncoding(anchorText) {\n  var preProcessedEntityAnchorText = anchorText.replace(/%22/gi, \"&quot;\").replace(/%26/gi, \"&amp;\").replace(/%27/gi, \"&#39;\").replace(/%3C/gi, \"&lt;\").replace(/%3E/gi, \"&gt;\");\n  try {\n    return decodeURIComponent(preProcessedEntityAnchorText);\n  } catch (e2) {\n    return preProcessedEntityAnchorText;\n  }\n}\nvar mailtoSchemePrefixRe = /^mailto:/i;\nvar emailLocalPartCharRegex = new RegExp(\"[\".concat(alphaNumericAndMarksCharsStr, \"!#$%&'*+/=?^_`{|}~-]\"));\nfunction isEmailLocalPartStartChar(char) {\n  return alphaNumericAndMarksRe.test(char);\n}\nfunction isEmailLocalPartChar(char) {\n  return emailLocalPartCharRegex.test(char);\n}\nfunction isValidEmail(emailAddress) {\n  var emailAddressTld = emailAddress.split(\".\").pop() || \"\";\n  return isKnownTld(emailAddressTld);\n}\nvar EmailMatch = (\n  /** @class */\n  function(_super) {\n    __extends(EmailMatch2, _super);\n    function EmailMatch2(cfg) {\n      var _this = _super.call(this, cfg) || this;\n      _this.type = \"email\";\n      _this.email = \"\";\n      _this.email = cfg.email;\n      return _this;\n    }\n    EmailMatch2.prototype.getType = function() {\n      return \"email\";\n    };\n    EmailMatch2.prototype.getEmail = function() {\n      return this.email;\n    };\n    EmailMatch2.prototype.getAnchorHref = function() {\n      return \"mailto:\" + this.email;\n    };\n    EmailMatch2.prototype.getAnchorText = function() {\n      return this.email;\n    };\n    return EmailMatch2;\n  }(AbstractMatch)\n);\nfunction isHashtagTextChar(char) {\n  return char === \"_\" || alphaNumericAndMarksRe.test(char);\n}\nfunction isValidHashtag(hashtag) {\n  return hashtag.length <= 140;\n}\nvar hashtagServices = [\n  \"twitter\",\n  \"facebook\",\n  \"instagram\",\n  \"tiktok\",\n  \"youtube\"\n];\nvar HashtagMatch = (\n  /** @class */\n  function(_super) {\n    __extends(HashtagMatch2, _super);\n    function HashtagMatch2(cfg) {\n      var _this = _super.call(this, cfg) || this;\n      _this.type = \"hashtag\";\n      _this.serviceName = \"twitter\";\n      _this.hashtag = \"\";\n      _this.serviceName = cfg.serviceName;\n      _this.hashtag = cfg.hashtag;\n      return _this;\n    }\n    HashtagMatch2.prototype.getType = function() {\n      return \"hashtag\";\n    };\n    HashtagMatch2.prototype.getServiceName = function() {\n      return this.serviceName;\n    };\n    HashtagMatch2.prototype.getHashtag = function() {\n      return this.hashtag;\n    };\n    HashtagMatch2.prototype.getAnchorHref = function() {\n      var serviceName = this.serviceName, hashtag = this.hashtag;\n      switch (serviceName) {\n        case \"twitter\":\n          return \"https://twitter.com/hashtag/\" + hashtag;\n        case \"facebook\":\n          return \"https://www.facebook.com/hashtag/\" + hashtag;\n        case \"instagram\":\n          return \"https://instagram.com/explore/tags/\" + hashtag;\n        case \"tiktok\":\n          return \"https://www.tiktok.com/tag/\" + hashtag;\n        case \"youtube\":\n          return \"https://youtube.com/hashtag/\" + hashtag;\n        default:\n          assertNever(serviceName);\n          throw new Error(\"Invalid hashtag service: \".concat(serviceName));\n      }\n    };\n    HashtagMatch2.prototype.getAnchorText = function() {\n      return \"#\" + this.hashtag;\n    };\n    HashtagMatch2.prototype.getCssClassSuffixes = function() {\n      var cssClassSuffixes = _super.prototype.getCssClassSuffixes.call(this), serviceName = this.getServiceName();\n      if (serviceName) {\n        cssClassSuffixes.push(serviceName);\n      }\n      return cssClassSuffixes;\n    };\n    return HashtagMatch2;\n  }(AbstractMatch)\n);\nvar mentionRegexes = {\n  twitter: /^@\\w{1,15}$/,\n  instagram: /^@[_\\w]{1,30}$/,\n  soundcloud: /^@[-a-z0-9_]{3,25}$/,\n  // TikTok usernames are 1-24 characters containing letters, numbers, underscores\n  // and periods, but cannot end in a period: https://support.tiktok.com/en/getting-started/setting-up-your-profile/changing-your-username\n  tiktok: /^@[.\\w]{1,23}[\\w]$/,\n  // Youtube usernames are 3-30 characters containing letters, numbers, underscores,\n  // dashes, or latin middle dots ('·').\n  // https://support.google.com/youtube/answer/11585688?hl=en&co=GENIE.Platform%3DAndroid#tns\n  youtube: /^@[-.·\\w]{3,30}$/\n};\nvar mentionTextCharRe = /[-\\w.]/;\nfunction isMentionTextChar(char) {\n  return mentionTextCharRe.test(char);\n}\nfunction isValidMention(mention, serviceName) {\n  var re = mentionRegexes[serviceName];\n  return re.test(mention);\n}\nvar mentionServices = [\n  \"twitter\",\n  \"instagram\",\n  \"soundcloud\",\n  \"tiktok\",\n  \"youtube\"\n];\nvar MentionMatch = (\n  /** @class */\n  function(_super) {\n    __extends(MentionMatch2, _super);\n    function MentionMatch2(cfg) {\n      var _this = _super.call(this, cfg) || this;\n      _this.type = \"mention\";\n      _this.serviceName = \"twitter\";\n      _this.mention = \"\";\n      _this.mention = cfg.mention;\n      _this.serviceName = cfg.serviceName;\n      return _this;\n    }\n    MentionMatch2.prototype.getType = function() {\n      return \"mention\";\n    };\n    MentionMatch2.prototype.getMention = function() {\n      return this.mention;\n    };\n    MentionMatch2.prototype.getServiceName = function() {\n      return this.serviceName;\n    };\n    MentionMatch2.prototype.getAnchorHref = function() {\n      switch (this.serviceName) {\n        case \"twitter\":\n          return \"https://twitter.com/\" + this.mention;\n        case \"instagram\":\n          return \"https://instagram.com/\" + this.mention;\n        case \"soundcloud\":\n          return \"https://soundcloud.com/\" + this.mention;\n        case \"tiktok\":\n          return \"https://www.tiktok.com/@\" + this.mention;\n        case \"youtube\":\n          return \"https://youtube.com/@\" + this.mention;\n        default:\n          assertNever(this.serviceName);\n          throw new Error(\"Unknown service name to point mention to: \" + this.serviceName);\n      }\n    };\n    MentionMatch2.prototype.getAnchorText = function() {\n      return \"@\" + this.mention;\n    };\n    MentionMatch2.prototype.getCssClassSuffixes = function() {\n      var cssClassSuffixes = _super.prototype.getCssClassSuffixes.call(this), serviceName = this.getServiceName();\n      if (serviceName) {\n        cssClassSuffixes.push(serviceName);\n      }\n      return cssClassSuffixes;\n    };\n    return MentionMatch2;\n  }(AbstractMatch)\n);\nvar separatorCharRe = /[-. ]/;\nvar hasDelimCharsRe = /[-. ()]/;\nvar controlCharRe = /[,;]/;\nvar mostPhoneNumbers = /(?:(?:(?:(\\+)?\\d{1,3}[-. ]?)?\\(?\\d{3}\\)?[-. ]?\\d{3}[-. ]?\\d{4})|(?:(\\+)(?:9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-. ]?(?:\\d[-. ]?){6,12}\\d+))([,;]+[0-9]+#?)*/;\nvar japanesePhoneRe = /(0([1-9]-?[1-9]\\d{3}|[1-9]{2}-?\\d{3}|[1-9]{2}\\d{1}-?\\d{2}|[1-9]{2}\\d{2}-?\\d{1})-?\\d{4}|0[789]0-?\\d{4}-?\\d{4}|050-?\\d{4}-?\\d{4})/;\nvar validPhoneNumberRe = new RegExp(\"^\".concat(mostPhoneNumbers.source, \"|\").concat(japanesePhoneRe.source, \"$\"));\nfunction isPhoneNumberSeparatorChar(char) {\n  return separatorCharRe.test(char);\n}\nfunction isPhoneNumberControlChar(char) {\n  return controlCharRe.test(char);\n}\nfunction isValidPhoneNumber(phoneNumberText) {\n  var hasDelimiters = phoneNumberText.charAt(0) === \"+\" || hasDelimCharsRe.test(phoneNumberText);\n  return hasDelimiters && validPhoneNumberRe.test(phoneNumberText);\n}\nvar PhoneMatch = (\n  /** @class */\n  function(_super) {\n    __extends(PhoneMatch2, _super);\n    function PhoneMatch2(cfg) {\n      var _this = _super.call(this, cfg) || this;\n      _this.type = \"phone\";\n      _this.number = \"\";\n      _this.plusSign = false;\n      _this.number = cfg.number;\n      _this.plusSign = cfg.plusSign;\n      return _this;\n    }\n    PhoneMatch2.prototype.getType = function() {\n      return \"phone\";\n    };\n    PhoneMatch2.prototype.getPhoneNumber = function() {\n      return this.number;\n    };\n    PhoneMatch2.prototype.getNumber = function() {\n      return this.getPhoneNumber();\n    };\n    PhoneMatch2.prototype.getAnchorHref = function() {\n      return \"tel:\" + (this.plusSign ? \"+\" : \"\") + this.number;\n    };\n    PhoneMatch2.prototype.getAnchorText = function() {\n      return this.matchedText;\n    };\n    return PhoneMatch2;\n  }(AbstractMatch)\n);\nfunction parseMatches(text2, args) {\n  var tagBuilder = args.tagBuilder;\n  var stripPrefix = args.stripPrefix;\n  var stripTrailingSlash = args.stripTrailingSlash;\n  var decodePercentEncoding = args.decodePercentEncoding;\n  var hashtagServiceName = args.hashtagServiceName;\n  var mentionServiceName = args.mentionServiceName;\n  var matches = [];\n  var textLen = text2.length;\n  var stateMachines = [];\n  var charIdx = 0;\n  for (; charIdx < textLen; charIdx++) {\n    var char = text2.charAt(charIdx);\n    if (stateMachines.length === 0) {\n      stateNoMatch(char);\n    } else {\n      for (var stateIdx = stateMachines.length - 1; stateIdx >= 0; stateIdx--) {\n        var stateMachine = stateMachines[stateIdx];\n        switch (stateMachine.state) {\n          // Protocol-relative URL states\n          case 11:\n            stateProtocolRelativeSlash1(stateMachine, char);\n            break;\n          case 12:\n            stateProtocolRelativeSlash2(stateMachine, char);\n            break;\n          case 0:\n            stateSchemeChar(stateMachine, char);\n            break;\n          case 1:\n            stateSchemeHyphen(stateMachine, char);\n            break;\n          case 2:\n            stateSchemeColon(stateMachine, char);\n            break;\n          case 3:\n            stateSchemeSlash1(stateMachine, char);\n            break;\n          case 4:\n            stateSchemeSlash2(stateMachine, char);\n            break;\n          case 5:\n            stateDomainLabelChar(stateMachine, char);\n            break;\n          case 6:\n            stateDomainHyphen(stateMachine, char);\n            break;\n          case 7:\n            stateDomainDot(stateMachine, char);\n            break;\n          case 13:\n            stateIpV4Digit(stateMachine, char);\n            break;\n          case 14:\n            stateIPv4Dot(stateMachine, char);\n            break;\n          case 8:\n            statePortColon(stateMachine, char);\n            break;\n          case 9:\n            statePortNumber(stateMachine, char);\n            break;\n          case 10:\n            statePath(stateMachine, char);\n            break;\n          // Email States\n          case 15:\n            stateEmailMailto_M(stateMachine, char);\n            break;\n          case 16:\n            stateEmailMailto_A(stateMachine, char);\n            break;\n          case 17:\n            stateEmailMailto_I(stateMachine, char);\n            break;\n          case 18:\n            stateEmailMailto_L(stateMachine, char);\n            break;\n          case 19:\n            stateEmailMailto_T(stateMachine, char);\n            break;\n          case 20:\n            stateEmailMailto_O(stateMachine, char);\n            break;\n          case 21:\n            stateEmailMailtoColon(stateMachine, char);\n            break;\n          case 22:\n            stateEmailLocalPart(stateMachine, char);\n            break;\n          case 23:\n            stateEmailLocalPartDot(stateMachine, char);\n            break;\n          case 24:\n            stateEmailAtSign(stateMachine, char);\n            break;\n          case 25:\n            stateEmailDomainChar(stateMachine, char);\n            break;\n          case 26:\n            stateEmailDomainHyphen(stateMachine, char);\n            break;\n          case 27:\n            stateEmailDomainDot(stateMachine, char);\n            break;\n          // Hashtag states\n          case 28:\n            stateHashtagHashChar(stateMachine, char);\n            break;\n          case 29:\n            stateHashtagTextChar(stateMachine, char);\n            break;\n          // Mention states\n          case 30:\n            stateMentionAtChar(stateMachine, char);\n            break;\n          case 31:\n            stateMentionTextChar(stateMachine, char);\n            break;\n          // Phone number states\n          case 32:\n            statePhoneNumberOpenParen(stateMachine, char);\n            break;\n          case 33:\n            statePhoneNumberAreaCodeDigit1(stateMachine, char);\n            break;\n          case 34:\n            statePhoneNumberAreaCodeDigit2(stateMachine, char);\n            break;\n          case 35:\n            statePhoneNumberAreaCodeDigit3(stateMachine, char);\n            break;\n          case 36:\n            statePhoneNumberCloseParen(stateMachine, char);\n            break;\n          case 37:\n            statePhoneNumberPlus(stateMachine, char);\n            break;\n          case 38:\n            statePhoneNumberDigit(stateMachine, char);\n            break;\n          case 39:\n            statePhoneNumberSeparator(stateMachine, char);\n            break;\n          case 40:\n            statePhoneNumberControlChar(stateMachine, char);\n            break;\n          case 41:\n            statePhoneNumberPoundChar(stateMachine, char);\n            break;\n          default:\n            assertNever(stateMachine.state);\n        }\n      }\n      if (charIdx > 0 && isSchemeStartChar(char)) {\n        var prevChar = text2.charAt(charIdx - 1);\n        if (!isSchemeStartChar(prevChar) && !stateMachines.some(isSchemeUrlStateMachine)) {\n          stateMachines.push(createSchemeUrlStateMachine(\n            charIdx,\n            0\n            /* State.SchemeChar */\n          ));\n        }\n      }\n    }\n  }\n  for (var i3 = stateMachines.length - 1; i3 >= 0; i3--) {\n    stateMachines.forEach(function(stateMachine2) {\n      return captureMatchIfValidAndRemove(stateMachine2);\n    });\n  }\n  return matches;\n  function stateNoMatch(char2) {\n    if (char2 === \"#\") {\n      stateMachines.push(createHashtagStateMachine(\n        charIdx,\n        28\n        /* State.HashtagHashChar */\n      ));\n    } else if (char2 === \"@\") {\n      stateMachines.push(createMentionStateMachine(\n        charIdx,\n        30\n        /* State.MentionAtChar */\n      ));\n    } else if (char2 === \"/\") {\n      stateMachines.push(createTldUrlStateMachine(\n        charIdx,\n        11\n        /* State.ProtocolRelativeSlash1 */\n      ));\n    } else if (char2 === \"+\") {\n      stateMachines.push(createPhoneNumberStateMachine(\n        charIdx,\n        37\n        /* State.PhoneNumberPlus */\n      ));\n    } else if (char2 === \"(\") {\n      stateMachines.push(createPhoneNumberStateMachine(\n        charIdx,\n        32\n        /* State.PhoneNumberOpenParen */\n      ));\n    } else {\n      if (digitRe.test(char2)) {\n        stateMachines.push(createPhoneNumberStateMachine(\n          charIdx,\n          38\n          /* State.PhoneNumberDigit */\n        ));\n        stateMachines.push(createIpV4UrlStateMachine(\n          charIdx,\n          13\n          /* State.IpV4Digit */\n        ));\n      }\n      if (isEmailLocalPartStartChar(char2)) {\n        var startState = char2.toLowerCase() === \"m\" ? 15 : 22;\n        stateMachines.push(createEmailStateMachine(charIdx, startState));\n      }\n      if (isSchemeStartChar(char2)) {\n        stateMachines.push(createSchemeUrlStateMachine(\n          charIdx,\n          0\n          /* State.SchemeChar */\n        ));\n      }\n      if (alphaNumericAndMarksRe.test(char2)) {\n        stateMachines.push(createTldUrlStateMachine(\n          charIdx,\n          5\n          /* State.DomainLabelChar */\n        ));\n      }\n    }\n  }\n  function stateSchemeChar(stateMachine2, char2) {\n    if (char2 === \":\") {\n      stateMachine2.state = 2;\n    } else if (char2 === \"-\") {\n      stateMachine2.state = 1;\n    } else if (isSchemeChar(char2)) ;\n    else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateSchemeHyphen(stateMachine2, char2) {\n    if (char2 === \"-\") ;\n    else if (char2 === \"/\") {\n      remove(stateMachines, stateMachine2);\n      stateMachines.push(createTldUrlStateMachine(\n        charIdx,\n        11\n        /* State.ProtocolRelativeSlash1 */\n      ));\n    } else if (isSchemeChar(char2)) {\n      stateMachine2.state = 0;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateSchemeColon(stateMachine2, char2) {\n    if (char2 === \"/\") {\n      stateMachine2.state = 3;\n    } else if (char2 === \".\") {\n      remove(stateMachines, stateMachine2);\n    } else if (isDomainLabelStartChar(char2)) {\n      stateMachine2.state = 5;\n      if (isSchemeStartChar(char2)) {\n        stateMachines.push(createSchemeUrlStateMachine(\n          charIdx,\n          0\n          /* State.SchemeChar */\n        ));\n      }\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateSchemeSlash1(stateMachine2, char2) {\n    if (char2 === \"/\") {\n      stateMachine2.state = 4;\n    } else if (isPathChar(char2)) {\n      stateMachine2.state = 10;\n      stateMachine2.acceptStateReached = true;\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function stateSchemeSlash2(stateMachine2, char2) {\n    if (char2 === \"/\") {\n      stateMachine2.state = 10;\n    } else if (isDomainLabelStartChar(char2)) {\n      stateMachine2.state = 5;\n      stateMachine2.acceptStateReached = true;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateProtocolRelativeSlash1(stateMachine2, char2) {\n    if (char2 === \"/\") {\n      stateMachine2.state = 12;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateProtocolRelativeSlash2(stateMachine2, char2) {\n    if (isDomainLabelStartChar(char2)) {\n      stateMachine2.state = 5;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateDomainLabelChar(stateMachine2, char2) {\n    if (char2 === \".\") {\n      stateMachine2.state = 7;\n    } else if (char2 === \"-\") {\n      stateMachine2.state = 6;\n    } else if (char2 === \":\") {\n      stateMachine2.state = 8;\n    } else if (isUrlSuffixStartChar(char2)) {\n      stateMachine2.state = 10;\n    } else if (isDomainLabelChar(char2)) ;\n    else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function stateDomainHyphen(stateMachine2, char2) {\n    if (char2 === \"-\") ;\n    else if (char2 === \".\") {\n      captureMatchIfValidAndRemove(stateMachine2);\n    } else if (isDomainLabelStartChar(char2)) {\n      stateMachine2.state = 5;\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function stateDomainDot(stateMachine2, char2) {\n    if (char2 === \".\") {\n      captureMatchIfValidAndRemove(stateMachine2);\n    } else if (isDomainLabelStartChar(char2)) {\n      stateMachine2.state = 5;\n      stateMachine2.acceptStateReached = true;\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function stateIpV4Digit(stateMachine2, char2) {\n    if (char2 === \".\") {\n      stateMachine2.state = 14;\n    } else if (char2 === \":\") {\n      stateMachine2.state = 8;\n    } else if (digitRe.test(char2)) ;\n    else if (isUrlSuffixStartChar(char2)) {\n      stateMachine2.state = 10;\n    } else if (alphaNumericAndMarksRe.test(char2)) {\n      remove(stateMachines, stateMachine2);\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function stateIPv4Dot(stateMachine2, char2) {\n    if (digitRe.test(char2)) {\n      stateMachine2.octetsEncountered++;\n      if (stateMachine2.octetsEncountered === 4) {\n        stateMachine2.acceptStateReached = true;\n      }\n      stateMachine2.state = 13;\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function statePortColon(stateMachine2, char2) {\n    if (digitRe.test(char2)) {\n      stateMachine2.state = 9;\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function statePortNumber(stateMachine2, char2) {\n    if (digitRe.test(char2)) ;\n    else if (isUrlSuffixStartChar(char2)) {\n      stateMachine2.state = 10;\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function statePath(stateMachine2, char2) {\n    if (isPathChar(char2)) ;\n    else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function stateEmailMailto_M(stateMachine2, char2) {\n    if (char2.toLowerCase() === \"a\") {\n      stateMachine2.state = 16;\n    } else {\n      stateEmailLocalPart(stateMachine2, char2);\n    }\n  }\n  function stateEmailMailto_A(stateMachine2, char2) {\n    if (char2.toLowerCase() === \"i\") {\n      stateMachine2.state = 17;\n    } else {\n      stateEmailLocalPart(stateMachine2, char2);\n    }\n  }\n  function stateEmailMailto_I(stateMachine2, char2) {\n    if (char2.toLowerCase() === \"l\") {\n      stateMachine2.state = 18;\n    } else {\n      stateEmailLocalPart(stateMachine2, char2);\n    }\n  }\n  function stateEmailMailto_L(stateMachine2, char2) {\n    if (char2.toLowerCase() === \"t\") {\n      stateMachine2.state = 19;\n    } else {\n      stateEmailLocalPart(stateMachine2, char2);\n    }\n  }\n  function stateEmailMailto_T(stateMachine2, char2) {\n    if (char2.toLowerCase() === \"o\") {\n      stateMachine2.state = 20;\n    } else {\n      stateEmailLocalPart(stateMachine2, char2);\n    }\n  }\n  function stateEmailMailto_O(stateMachine2, char2) {\n    if (char2.toLowerCase() === \":\") {\n      stateMachine2.state = 21;\n    } else {\n      stateEmailLocalPart(stateMachine2, char2);\n    }\n  }\n  function stateEmailMailtoColon(stateMachine2, char2) {\n    if (isEmailLocalPartChar(char2)) {\n      stateMachine2.state = 22;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateEmailLocalPart(stateMachine2, char2) {\n    if (char2 === \".\") {\n      stateMachine2.state = 23;\n    } else if (char2 === \"@\") {\n      stateMachine2.state = 24;\n    } else if (isEmailLocalPartChar(char2)) {\n      stateMachine2.state = 22;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateEmailLocalPartDot(stateMachine2, char2) {\n    if (char2 === \".\") {\n      remove(stateMachines, stateMachine2);\n    } else if (char2 === \"@\") {\n      remove(stateMachines, stateMachine2);\n    } else if (isEmailLocalPartChar(char2)) {\n      stateMachine2.state = 22;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateEmailAtSign(stateMachine2, char2) {\n    if (isDomainLabelStartChar(char2)) {\n      stateMachine2.state = 25;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateEmailDomainChar(stateMachine2, char2) {\n    if (char2 === \".\") {\n      stateMachine2.state = 27;\n    } else if (char2 === \"-\") {\n      stateMachine2.state = 26;\n    } else if (isDomainLabelChar(char2)) ;\n    else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function stateEmailDomainHyphen(stateMachine2, char2) {\n    if (char2 === \"-\" || char2 === \".\") {\n      captureMatchIfValidAndRemove(stateMachine2);\n    } else if (isDomainLabelChar(char2)) {\n      stateMachine2.state = 25;\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function stateEmailDomainDot(stateMachine2, char2) {\n    if (char2 === \".\" || char2 === \"-\") {\n      captureMatchIfValidAndRemove(stateMachine2);\n    } else if (isDomainLabelStartChar(char2)) {\n      stateMachine2.state = 25;\n      stateMachine2.acceptStateReached = true;\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function stateHashtagHashChar(stateMachine2, char2) {\n    if (isHashtagTextChar(char2)) {\n      stateMachine2.state = 29;\n      stateMachine2.acceptStateReached = true;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateHashtagTextChar(stateMachine2, char2) {\n    if (isHashtagTextChar(char2)) ;\n    else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function stateMentionAtChar(stateMachine2, char2) {\n    if (isMentionTextChar(char2)) {\n      stateMachine2.state = 31;\n      stateMachine2.acceptStateReached = true;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function stateMentionTextChar(stateMachine2, char2) {\n    if (isMentionTextChar(char2)) ;\n    else if (alphaNumericAndMarksRe.test(char2)) {\n      remove(stateMachines, stateMachine2);\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function statePhoneNumberPlus(stateMachine2, char2) {\n    if (digitRe.test(char2)) {\n      stateMachine2.state = 38;\n    } else {\n      remove(stateMachines, stateMachine2);\n      stateNoMatch(char2);\n    }\n  }\n  function statePhoneNumberOpenParen(stateMachine2, char2) {\n    if (digitRe.test(char2)) {\n      stateMachine2.state = 33;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n    stateNoMatch(char2);\n  }\n  function statePhoneNumberAreaCodeDigit1(stateMachine2, char2) {\n    if (digitRe.test(char2)) {\n      stateMachine2.state = 34;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function statePhoneNumberAreaCodeDigit2(stateMachine2, char2) {\n    if (digitRe.test(char2)) {\n      stateMachine2.state = 35;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function statePhoneNumberAreaCodeDigit3(stateMachine2, char2) {\n    if (char2 === \")\") {\n      stateMachine2.state = 36;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function statePhoneNumberCloseParen(stateMachine2, char2) {\n    if (digitRe.test(char2)) {\n      stateMachine2.state = 38;\n    } else if (isPhoneNumberSeparatorChar(char2)) {\n      stateMachine2.state = 39;\n    } else {\n      remove(stateMachines, stateMachine2);\n    }\n  }\n  function statePhoneNumberDigit(stateMachine2, char2) {\n    stateMachine2.acceptStateReached = true;\n    if (isPhoneNumberControlChar(char2)) {\n      stateMachine2.state = 40;\n    } else if (char2 === \"#\") {\n      stateMachine2.state = 41;\n    } else if (digitRe.test(char2)) ;\n    else if (char2 === \"(\") {\n      stateMachine2.state = 32;\n    } else if (isPhoneNumberSeparatorChar(char2)) {\n      stateMachine2.state = 39;\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n      if (isSchemeStartChar(char2)) {\n        stateMachines.push(createSchemeUrlStateMachine(\n          charIdx,\n          0\n          /* State.SchemeChar */\n        ));\n      }\n    }\n  }\n  function statePhoneNumberSeparator(stateMachine2, char2) {\n    if (digitRe.test(char2)) {\n      stateMachine2.state = 38;\n    } else if (char2 === \"(\") {\n      stateMachine2.state = 32;\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n      stateNoMatch(char2);\n    }\n  }\n  function statePhoneNumberControlChar(stateMachine2, char2) {\n    if (isPhoneNumberControlChar(char2)) ;\n    else if (char2 === \"#\") {\n      stateMachine2.state = 41;\n    } else if (digitRe.test(char2)) {\n      stateMachine2.state = 38;\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function statePhoneNumberPoundChar(stateMachine2, char2) {\n    if (isPhoneNumberControlChar(char2)) {\n      stateMachine2.state = 40;\n    } else if (digitRe.test(char2)) {\n      remove(stateMachines, stateMachine2);\n    } else {\n      captureMatchIfValidAndRemove(stateMachine2);\n    }\n  }\n  function captureMatchIfValidAndRemove(stateMachine2) {\n    remove(stateMachines, stateMachine2);\n    if (!stateMachine2.acceptStateReached) {\n      return;\n    }\n    var startIdx = stateMachine2.startIdx;\n    var matchedText = text2.slice(stateMachine2.startIdx, charIdx);\n    matchedText = excludeUnbalancedTrailingBracesAndPunctuation(matchedText);\n    if (stateMachine2.type === \"url\") {\n      var charBeforeUrlMatch = text2.charAt(stateMachine2.startIdx - 1);\n      if (charBeforeUrlMatch === \"@\") {\n        return;\n      }\n      var urlMatchType = stateMachine2.matchType;\n      if (urlMatchType === \"scheme\") {\n        var httpSchemeMatch = httpSchemeRe.exec(matchedText);\n        if (httpSchemeMatch) {\n          startIdx = startIdx + httpSchemeMatch.index;\n          matchedText = matchedText.slice(httpSchemeMatch.index);\n        }\n        if (!isValidSchemeUrl(matchedText)) {\n          return;\n        }\n      } else if (urlMatchType === \"tld\") {\n        if (!isValidTldMatch(matchedText)) {\n          return;\n        }\n      } else if (urlMatchType === \"ipV4\") {\n        if (!isValidIpV4Address(matchedText)) {\n          return;\n        }\n      } else {\n        assertNever(urlMatchType);\n      }\n      matches.push(new UrlMatch({\n        tagBuilder,\n        matchedText,\n        offset: startIdx,\n        urlMatchType,\n        url: matchedText,\n        protocolRelativeMatch: matchedText.slice(0, 2) === \"//\",\n        // TODO: Do these settings need to be passed to the match,\n        // or should we handle them here in UrlMatcher?\n        stripPrefix,\n        stripTrailingSlash,\n        decodePercentEncoding\n      }));\n    } else if (stateMachine2.type === \"email\") {\n      if (isValidEmail(matchedText)) {\n        matches.push(new EmailMatch({\n          tagBuilder,\n          matchedText,\n          offset: startIdx,\n          email: matchedText.replace(mailtoSchemePrefixRe, \"\")\n        }));\n      }\n    } else if (stateMachine2.type === \"hashtag\") {\n      if (isValidHashtag(matchedText)) {\n        matches.push(new HashtagMatch({\n          tagBuilder,\n          matchedText,\n          offset: startIdx,\n          serviceName: hashtagServiceName,\n          hashtag: matchedText.slice(1)\n        }));\n      }\n    } else if (stateMachine2.type === \"mention\") {\n      if (isValidMention(matchedText, mentionServiceName)) {\n        matches.push(new MentionMatch({\n          tagBuilder,\n          matchedText,\n          offset: startIdx,\n          serviceName: mentionServiceName,\n          mention: matchedText.slice(1)\n          // strip off the '@' character at the beginning\n        }));\n      }\n    } else if (stateMachine2.type === \"phone\") {\n      matchedText = matchedText.replace(/ +$/g, \"\");\n      if (isValidPhoneNumber(matchedText)) {\n        var cleanNumber = matchedText.replace(/[^0-9,;#]/g, \"\");\n        matches.push(new PhoneMatch({\n          tagBuilder,\n          matchedText,\n          offset: startIdx,\n          number: cleanNumber,\n          plusSign: matchedText.charAt(0) === \"+\"\n        }));\n      }\n    } else {\n      assertNever(stateMachine2);\n    }\n  }\n}\nvar openBraceRe = /[\\(\\{\\[]/;\nvar closeBraceRe = /[\\)\\}\\]]/;\nvar oppositeBrace = {\n  \")\": \"(\",\n  \"}\": \"{\",\n  \"]\": \"[\"\n};\nfunction excludeUnbalancedTrailingBracesAndPunctuation(matchedText) {\n  var braceCounts = {\n    \"(\": 0,\n    \"{\": 0,\n    \"[\": 0\n  };\n  for (var i3 = 0; i3 < matchedText.length; i3++) {\n    var char_1 = matchedText.charAt(i3);\n    if (openBraceRe.test(char_1)) {\n      braceCounts[char_1]++;\n    } else if (closeBraceRe.test(char_1)) {\n      braceCounts[oppositeBrace[char_1]]--;\n    }\n  }\n  var endIdx = matchedText.length - 1;\n  var char;\n  while (endIdx >= 0) {\n    char = matchedText.charAt(endIdx);\n    if (closeBraceRe.test(char)) {\n      var oppositeBraceChar = oppositeBrace[char];\n      if (braceCounts[oppositeBraceChar] < 0) {\n        braceCounts[oppositeBraceChar]++;\n        endIdx--;\n      } else {\n        break;\n      }\n    } else if (urlSuffixedCharsNotAllowedAtEndRe.test(char)) {\n      endIdx--;\n    } else {\n      break;\n    }\n  }\n  return matchedText.slice(0, endIdx + 1);\n}\nfunction createSchemeUrlStateMachine(startIdx, state) {\n  return {\n    type: \"url\",\n    startIdx,\n    state,\n    acceptStateReached: false,\n    matchType: \"scheme\"\n  };\n}\nfunction createTldUrlStateMachine(startIdx, state) {\n  return {\n    type: \"url\",\n    startIdx,\n    state,\n    acceptStateReached: false,\n    matchType: \"tld\"\n  };\n}\nfunction createIpV4UrlStateMachine(startIdx, state) {\n  return {\n    type: \"url\",\n    startIdx,\n    state,\n    acceptStateReached: false,\n    matchType: \"ipV4\",\n    octetsEncountered: 1\n    // starts at 1 because we create this machine when encountering the first octet\n  };\n}\nfunction createEmailStateMachine(startIdx, state) {\n  return {\n    type: \"email\",\n    startIdx,\n    state,\n    acceptStateReached: false\n  };\n}\nfunction createHashtagStateMachine(startIdx, state) {\n  return {\n    type: \"hashtag\",\n    startIdx,\n    state,\n    acceptStateReached: false\n  };\n}\nfunction createMentionStateMachine(startIdx, state) {\n  return {\n    type: \"mention\",\n    startIdx,\n    state,\n    acceptStateReached: false\n  };\n}\nfunction createPhoneNumberStateMachine(startIdx, state) {\n  return {\n    type: \"phone\",\n    startIdx,\n    state,\n    acceptStateReached: false\n  };\n}\nfunction isSchemeUrlStateMachine(machine) {\n  return machine.type === \"url\" && machine.matchType === \"scheme\";\n}\nfunction parseHtml(html, _a3) {\n  var onOpenTag = _a3.onOpenTag, onCloseTag = _a3.onCloseTag, onText = _a3.onText, onComment = _a3.onComment, onDoctype = _a3.onDoctype;\n  var noCurrentTag = new CurrentTag();\n  var charIdx = 0, len = html.length, state = 0, currentDataIdx = 0, currentTag = noCurrentTag;\n  while (charIdx < len) {\n    var char = html.charAt(charIdx);\n    switch (state) {\n      case 0:\n        stateData(char);\n        break;\n      case 1:\n        stateTagOpen(char);\n        break;\n      case 2:\n        stateEndTagOpen(char);\n        break;\n      case 3:\n        stateTagName(char);\n        break;\n      case 4:\n        stateBeforeAttributeName(char);\n        break;\n      case 5:\n        stateAttributeName(char);\n        break;\n      case 6:\n        stateAfterAttributeName(char);\n        break;\n      case 7:\n        stateBeforeAttributeValue(char);\n        break;\n      case 8:\n        stateAttributeValueDoubleQuoted(char);\n        break;\n      case 9:\n        stateAttributeValueSingleQuoted(char);\n        break;\n      case 10:\n        stateAttributeValueUnquoted(char);\n        break;\n      case 11:\n        stateAfterAttributeValueQuoted(char);\n        break;\n      case 12:\n        stateSelfClosingStartTag(char);\n        break;\n      case 13:\n        stateMarkupDeclarationOpen();\n        break;\n      case 14:\n        stateCommentStart(char);\n        break;\n      case 15:\n        stateCommentStartDash(char);\n        break;\n      case 16:\n        stateComment(char);\n        break;\n      case 17:\n        stateCommentEndDash(char);\n        break;\n      case 18:\n        stateCommentEnd(char);\n        break;\n      case 19:\n        stateCommentEndBang(char);\n        break;\n      case 20:\n        stateDoctype(char);\n        break;\n      default:\n        assertNever(state);\n    }\n    charIdx++;\n  }\n  if (currentDataIdx < charIdx) {\n    emitText();\n  }\n  function stateData(char2) {\n    if (char2 === \"<\") {\n      startNewTag();\n    }\n  }\n  function stateTagOpen(char2) {\n    if (char2 === \"!\") {\n      state = 13;\n    } else if (char2 === \"/\") {\n      state = 2;\n      currentTag = new CurrentTag(__assign(__assign({}, currentTag), { isClosing: true }));\n    } else if (char2 === \"<\") {\n      startNewTag();\n    } else if (letterRe.test(char2)) {\n      state = 3;\n      currentTag = new CurrentTag(__assign(__assign({}, currentTag), { isOpening: true }));\n    } else {\n      state = 0;\n      currentTag = noCurrentTag;\n    }\n  }\n  function stateTagName(char2) {\n    if (whitespaceRe.test(char2)) {\n      currentTag = new CurrentTag(__assign(__assign({}, currentTag), { name: captureTagName() }));\n      state = 4;\n    } else if (char2 === \"<\") {\n      startNewTag();\n    } else if (char2 === \"/\") {\n      currentTag = new CurrentTag(__assign(__assign({}, currentTag), { name: captureTagName() }));\n      state = 12;\n    } else if (char2 === \">\") {\n      currentTag = new CurrentTag(__assign(__assign({}, currentTag), { name: captureTagName() }));\n      emitTagAndPreviousTextNode();\n    } else if (!letterRe.test(char2) && !digitRe.test(char2) && char2 !== \":\") {\n      resetToDataState();\n    } else ;\n  }\n  function stateEndTagOpen(char2) {\n    if (char2 === \">\") {\n      resetToDataState();\n    } else if (letterRe.test(char2)) {\n      state = 3;\n    } else {\n      resetToDataState();\n    }\n  }\n  function stateBeforeAttributeName(char2) {\n    if (whitespaceRe.test(char2)) ;\n    else if (char2 === \"/\") {\n      state = 12;\n    } else if (char2 === \">\") {\n      emitTagAndPreviousTextNode();\n    } else if (char2 === \"<\") {\n      startNewTag();\n    } else if (char2 === \"=\" || quoteRe.test(char2) || controlCharsRe.test(char2)) {\n      resetToDataState();\n    } else {\n      state = 5;\n    }\n  }\n  function stateAttributeName(char2) {\n    if (whitespaceRe.test(char2)) {\n      state = 6;\n    } else if (char2 === \"/\") {\n      state = 12;\n    } else if (char2 === \"=\") {\n      state = 7;\n    } else if (char2 === \">\") {\n      emitTagAndPreviousTextNode();\n    } else if (char2 === \"<\") {\n      startNewTag();\n    } else if (quoteRe.test(char2)) {\n      resetToDataState();\n    } else ;\n  }\n  function stateAfterAttributeName(char2) {\n    if (whitespaceRe.test(char2)) ;\n    else if (char2 === \"/\") {\n      state = 12;\n    } else if (char2 === \"=\") {\n      state = 7;\n    } else if (char2 === \">\") {\n      emitTagAndPreviousTextNode();\n    } else if (char2 === \"<\") {\n      startNewTag();\n    } else if (quoteRe.test(char2)) {\n      resetToDataState();\n    } else {\n      state = 5;\n    }\n  }\n  function stateBeforeAttributeValue(char2) {\n    if (whitespaceRe.test(char2)) ;\n    else if (char2 === '\"') {\n      state = 8;\n    } else if (char2 === \"'\") {\n      state = 9;\n    } else if (/[>=`]/.test(char2)) {\n      resetToDataState();\n    } else if (char2 === \"<\") {\n      startNewTag();\n    } else {\n      state = 10;\n    }\n  }\n  function stateAttributeValueDoubleQuoted(char2) {\n    if (char2 === '\"') {\n      state = 11;\n    }\n  }\n  function stateAttributeValueSingleQuoted(char2) {\n    if (char2 === \"'\") {\n      state = 11;\n    }\n  }\n  function stateAttributeValueUnquoted(char2) {\n    if (whitespaceRe.test(char2)) {\n      state = 4;\n    } else if (char2 === \">\") {\n      emitTagAndPreviousTextNode();\n    } else if (char2 === \"<\") {\n      startNewTag();\n    } else ;\n  }\n  function stateAfterAttributeValueQuoted(char2) {\n    if (whitespaceRe.test(char2)) {\n      state = 4;\n    } else if (char2 === \"/\") {\n      state = 12;\n    } else if (char2 === \">\") {\n      emitTagAndPreviousTextNode();\n    } else if (char2 === \"<\") {\n      startNewTag();\n    } else {\n      state = 4;\n      reconsumeCurrentCharacter();\n    }\n  }\n  function stateSelfClosingStartTag(char2) {\n    if (char2 === \">\") {\n      currentTag = new CurrentTag(__assign(__assign({}, currentTag), { isClosing: true }));\n      emitTagAndPreviousTextNode();\n    } else {\n      state = 4;\n    }\n  }\n  function stateMarkupDeclarationOpen(char2) {\n    if (html.substr(charIdx, 2) === \"--\") {\n      charIdx += 2;\n      currentTag = new CurrentTag(__assign(__assign({}, currentTag), { type: \"comment\" }));\n      state = 14;\n    } else if (html.substr(charIdx, 7).toUpperCase() === \"DOCTYPE\") {\n      charIdx += 7;\n      currentTag = new CurrentTag(__assign(__assign({}, currentTag), { type: \"doctype\" }));\n      state = 20;\n    } else {\n      resetToDataState();\n    }\n  }\n  function stateCommentStart(char2) {\n    if (char2 === \"-\") {\n      state = 15;\n    } else if (char2 === \">\") {\n      resetToDataState();\n    } else {\n      state = 16;\n    }\n  }\n  function stateCommentStartDash(char2) {\n    if (char2 === \"-\") {\n      state = 18;\n    } else if (char2 === \">\") {\n      resetToDataState();\n    } else {\n      state = 16;\n    }\n  }\n  function stateComment(char2) {\n    if (char2 === \"-\") {\n      state = 17;\n    }\n  }\n  function stateCommentEndDash(char2) {\n    if (char2 === \"-\") {\n      state = 18;\n    } else {\n      state = 16;\n    }\n  }\n  function stateCommentEnd(char2) {\n    if (char2 === \">\") {\n      emitTagAndPreviousTextNode();\n    } else if (char2 === \"!\") {\n      state = 19;\n    } else if (char2 === \"-\") ;\n    else {\n      state = 16;\n    }\n  }\n  function stateCommentEndBang(char2) {\n    if (char2 === \"-\") {\n      state = 17;\n    } else if (char2 === \">\") {\n      emitTagAndPreviousTextNode();\n    } else {\n      state = 16;\n    }\n  }\n  function stateDoctype(char2) {\n    if (char2 === \">\") {\n      emitTagAndPreviousTextNode();\n    } else if (char2 === \"<\") {\n      startNewTag();\n    } else ;\n  }\n  function resetToDataState() {\n    state = 0;\n    currentTag = noCurrentTag;\n  }\n  function startNewTag() {\n    state = 1;\n    currentTag = new CurrentTag({ idx: charIdx });\n  }\n  function emitTagAndPreviousTextNode() {\n    var textBeforeTag = html.slice(currentDataIdx, currentTag.idx);\n    if (textBeforeTag) {\n      onText(textBeforeTag, currentDataIdx);\n    }\n    if (currentTag.type === \"comment\") {\n      onComment(currentTag.idx);\n    } else if (currentTag.type === \"doctype\") {\n      onDoctype(currentTag.idx);\n    } else {\n      if (currentTag.isOpening) {\n        onOpenTag(currentTag.name, currentTag.idx);\n      }\n      if (currentTag.isClosing) {\n        onCloseTag(currentTag.name, currentTag.idx);\n      }\n    }\n    resetToDataState();\n    currentDataIdx = charIdx + 1;\n  }\n  function emitText() {\n    var text2 = html.slice(currentDataIdx, charIdx);\n    onText(text2, currentDataIdx);\n    currentDataIdx = charIdx + 1;\n  }\n  function captureTagName() {\n    var startIdx = currentTag.idx + (currentTag.isClosing ? 2 : 1);\n    return html.slice(startIdx, charIdx).toLowerCase();\n  }\n  function reconsumeCurrentCharacter() {\n    charIdx--;\n  }\n}\nvar CurrentTag = (\n  /** @class */\n  /* @__PURE__ */ function() {\n    function CurrentTag2(cfg) {\n      if (cfg === void 0) {\n        cfg = {};\n      }\n      this.idx = cfg.idx !== void 0 ? cfg.idx : -1;\n      this.type = cfg.type || \"tag\";\n      this.name = cfg.name || \"\";\n      this.isOpening = !!cfg.isOpening;\n      this.isClosing = !!cfg.isClosing;\n    }\n    return CurrentTag2;\n  }()\n);\nvar Autolinker = (\n  /** @class */\n  function() {\n    function Autolinker2(cfg) {\n      if (cfg === void 0) {\n        cfg = {};\n      }\n      this.version = Autolinker2.version;\n      this.urls = {};\n      this.email = true;\n      this.phone = true;\n      this.hashtag = false;\n      this.mention = false;\n      this.newWindow = true;\n      this.stripPrefix = {\n        scheme: true,\n        www: true\n      };\n      this.stripTrailingSlash = true;\n      this.decodePercentEncoding = true;\n      this.truncate = {\n        length: 0,\n        location: \"end\"\n      };\n      this.className = \"\";\n      this.replaceFn = null;\n      this.context = void 0;\n      this.sanitizeHtml = false;\n      this.tagBuilder = null;\n      this.urls = normalizeUrlsCfg(cfg.urls);\n      this.email = isBoolean(cfg.email) ? cfg.email : this.email;\n      this.phone = isBoolean(cfg.phone) ? cfg.phone : this.phone;\n      this.hashtag = cfg.hashtag || this.hashtag;\n      this.mention = cfg.mention || this.mention;\n      this.newWindow = isBoolean(cfg.newWindow) ? cfg.newWindow : this.newWindow;\n      this.stripPrefix = normalizeStripPrefixCfg(cfg.stripPrefix);\n      this.stripTrailingSlash = isBoolean(cfg.stripTrailingSlash) ? cfg.stripTrailingSlash : this.stripTrailingSlash;\n      this.decodePercentEncoding = isBoolean(cfg.decodePercentEncoding) ? cfg.decodePercentEncoding : this.decodePercentEncoding;\n      this.sanitizeHtml = cfg.sanitizeHtml || false;\n      var mention = this.mention;\n      if (mention !== false && mentionServices.indexOf(mention) === -1) {\n        throw new Error(\"invalid `mention` cfg '\".concat(mention, \"' - see docs\"));\n      }\n      var hashtag = this.hashtag;\n      if (hashtag !== false && hashtagServices.indexOf(hashtag) === -1) {\n        throw new Error(\"invalid `hashtag` cfg '\".concat(hashtag, \"' - see docs\"));\n      }\n      this.truncate = normalizeTruncateCfg(cfg.truncate);\n      this.className = cfg.className || this.className;\n      this.replaceFn = cfg.replaceFn || this.replaceFn;\n      this.context = cfg.context || this;\n    }\n    Autolinker2.link = function(textOrHtml, options) {\n      var autolinker = new Autolinker2(options);\n      return autolinker.link(textOrHtml);\n    };\n    Autolinker2.parse = function(textOrHtml, options) {\n      var autolinker = new Autolinker2(options);\n      return autolinker.parse(textOrHtml);\n    };\n    Autolinker2.prototype.parse = function(textOrHtml) {\n      var _this = this;\n      var skipTagNames = [\"a\", \"style\", \"script\"], skipTagsStackCount = 0, matches = [];\n      parseHtml(textOrHtml, {\n        onOpenTag: function(tagName) {\n          if (skipTagNames.indexOf(tagName) >= 0) {\n            skipTagsStackCount++;\n          }\n        },\n        onText: function(text2, offset) {\n          if (skipTagsStackCount === 0) {\n            var htmlCharacterEntitiesRegex = /(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/gi;\n            var textSplit = text2.split(htmlCharacterEntitiesRegex);\n            var currentOffset_1 = offset;\n            textSplit.forEach(function(splitText, i3) {\n              if (i3 % 2 === 0) {\n                var textNodeMatches = _this.parseText(splitText, currentOffset_1);\n                matches.push.apply(matches, textNodeMatches);\n              }\n              currentOffset_1 += splitText.length;\n            });\n          }\n        },\n        onCloseTag: function(tagName) {\n          if (skipTagNames.indexOf(tagName) >= 0) {\n            skipTagsStackCount = Math.max(skipTagsStackCount - 1, 0);\n          }\n        },\n        onComment: function(_offset) {\n        },\n        // no need to process comment nodes\n        onDoctype: function(_offset) {\n        }\n        // no need to process doctype nodes\n      });\n      matches = this.compactMatches(matches);\n      matches = this.removeUnwantedMatches(matches);\n      return matches;\n    };\n    Autolinker2.prototype.compactMatches = function(matches) {\n      matches.sort(function(a2, b2) {\n        return a2.getOffset() - b2.getOffset();\n      });\n      var i3 = 0;\n      while (i3 < matches.length - 1) {\n        var match3 = matches[i3], offset = match3.getOffset(), matchedTextLength = match3.getMatchedText().length, endIdx = offset + matchedTextLength;\n        if (i3 + 1 < matches.length) {\n          if (matches[i3 + 1].getOffset() === offset) {\n            var removeIdx = matches[i3 + 1].getMatchedText().length > matchedTextLength ? i3 : i3 + 1;\n            matches.splice(removeIdx, 1);\n            continue;\n          }\n          if (matches[i3 + 1].getOffset() < endIdx) {\n            matches.splice(i3 + 1, 1);\n            continue;\n          }\n        }\n        i3++;\n      }\n      return matches;\n    };\n    Autolinker2.prototype.removeUnwantedMatches = function(matches) {\n      if (!this.hashtag)\n        removeWithPredicate(matches, function(match3) {\n          return match3.getType() === \"hashtag\";\n        });\n      if (!this.email)\n        removeWithPredicate(matches, function(match3) {\n          return match3.getType() === \"email\";\n        });\n      if (!this.phone)\n        removeWithPredicate(matches, function(match3) {\n          return match3.getType() === \"phone\";\n        });\n      if (!this.mention)\n        removeWithPredicate(matches, function(match3) {\n          return match3.getType() === \"mention\";\n        });\n      if (!this.urls.schemeMatches) {\n        removeWithPredicate(matches, function(m2) {\n          return m2.getType() === \"url\" && m2.getUrlMatchType() === \"scheme\";\n        });\n      }\n      if (!this.urls.tldMatches) {\n        removeWithPredicate(matches, function(m2) {\n          return m2.getType() === \"url\" && m2.getUrlMatchType() === \"tld\";\n        });\n      }\n      if (!this.urls.ipV4Matches) {\n        removeWithPredicate(matches, function(m2) {\n          return m2.getType() === \"url\" && m2.getUrlMatchType() === \"ipV4\";\n        });\n      }\n      return matches;\n    };\n    Autolinker2.prototype.parseText = function(text2, offset) {\n      if (offset === void 0) {\n        offset = 0;\n      }\n      offset = offset || 0;\n      var matches = parseMatches(text2, {\n        tagBuilder: this.getTagBuilder(),\n        stripPrefix: this.stripPrefix,\n        stripTrailingSlash: this.stripTrailingSlash,\n        decodePercentEncoding: this.decodePercentEncoding,\n        hashtagServiceName: this.hashtag,\n        mentionServiceName: this.mention || \"twitter\"\n      });\n      for (var i3 = 0, numTextMatches = matches.length; i3 < numTextMatches; i3++) {\n        matches[i3].setOffset(offset + matches[i3].getOffset());\n      }\n      return matches;\n    };\n    Autolinker2.prototype.link = function(textOrHtml) {\n      if (!textOrHtml) {\n        return \"\";\n      }\n      if (this.sanitizeHtml) {\n        textOrHtml = textOrHtml.replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n      }\n      var matches = this.parse(textOrHtml), newHtml = [], lastIndex = 0;\n      for (var i3 = 0, len = matches.length; i3 < len; i3++) {\n        var match3 = matches[i3];\n        newHtml.push(textOrHtml.substring(lastIndex, match3.getOffset()));\n        newHtml.push(this.createMatchReturnVal(match3));\n        lastIndex = match3.getOffset() + match3.getMatchedText().length;\n      }\n      newHtml.push(textOrHtml.substring(lastIndex));\n      return newHtml.join(\"\");\n    };\n    Autolinker2.prototype.createMatchReturnVal = function(match3) {\n      var replaceFnResult;\n      if (this.replaceFn) {\n        replaceFnResult = this.replaceFn.call(this.context, match3);\n      }\n      if (typeof replaceFnResult === \"string\") {\n        return replaceFnResult;\n      } else if (replaceFnResult === false) {\n        return match3.getMatchedText();\n      } else if (replaceFnResult instanceof HtmlTag) {\n        return replaceFnResult.toAnchorString();\n      } else {\n        var anchorTag = match3.buildTag();\n        return anchorTag.toAnchorString();\n      }\n    };\n    Autolinker2.prototype.getTagBuilder = function() {\n      var tagBuilder = this.tagBuilder;\n      if (!tagBuilder) {\n        tagBuilder = this.tagBuilder = new AnchorTagBuilder({\n          newWindow: this.newWindow,\n          truncate: this.truncate,\n          className: this.className\n        });\n      }\n      return tagBuilder;\n    };\n    Autolinker2.version = version;\n    return Autolinker2;\n  }()\n);\nfunction normalizeUrlsCfg(urls) {\n  if (urls == null)\n    urls = true;\n  if (isBoolean(urls)) {\n    return { schemeMatches: urls, tldMatches: urls, ipV4Matches: urls };\n  } else {\n    return {\n      schemeMatches: isBoolean(urls.schemeMatches) ? urls.schemeMatches : true,\n      tldMatches: isBoolean(urls.tldMatches) ? urls.tldMatches : true,\n      ipV4Matches: isBoolean(urls.ipV4Matches) ? urls.ipV4Matches : true\n    };\n  }\n}\nfunction normalizeStripPrefixCfg(stripPrefix) {\n  if (stripPrefix == null)\n    stripPrefix = true;\n  if (isBoolean(stripPrefix)) {\n    return { scheme: stripPrefix, www: stripPrefix };\n  } else {\n    return {\n      scheme: isBoolean(stripPrefix.scheme) ? stripPrefix.scheme : true,\n      www: isBoolean(stripPrefix.www) ? stripPrefix.www : true\n    };\n  }\n}\nfunction normalizeTruncateCfg(truncate) {\n  if (typeof truncate === \"number\") {\n    return { length: truncate, location: \"end\" };\n  } else {\n    return defaults(truncate || {}, {\n      length: Number.POSITIVE_INFINITY,\n      location: \"end\"\n    });\n  }\n}\nconst AutolinkMixin = {\n  name: \"autolink-mixin\",\n  created() {\n    this.listValueTransformations.attach(\n      this.transformValue.bind(this),\n      \"AutolinkMixin:transformValue\"\n    );\n  },\n  transformValue(value, listValueTransformations) {\n    const template = document.createElement(\"template\");\n    template.innerHTML = Autolinker.link(value);\n    const nextProcessor = listValueTransformations.shift();\n    if (nextProcessor)\n      nextProcessor(template.content, listValueTransformations);\n  }\n};\nconst DateMixin = {\n  name: \"date-mixin\",\n  created() {\n    this.listValueTransformations.attach(\n      this.transformValue.bind(this),\n      \"DateMixin:transformValue\"\n    );\n  },\n  transformValue(value, listValueTransformations) {\n    try {\n      this.listAttributes.originalValue = this.formatDateForInput(value);\n    } catch {\n      console.warn(\"Invalid date format for widget\", this.name);\n      this.listAttributes.originalValue = \"\";\n    }\n    const newValue = value ? new Date(value).toLocaleDateString() : value;\n    const nextProcessor = listValueTransformations.shift();\n    if (nextProcessor) nextProcessor(newValue, listValueTransformations);\n  },\n  formatDateForInput(date) {\n    const d2 = new Date(date);\n    if (Number.isNaN(d2.getTime())) throw new Error(\"Invalid date\");\n    let month = `${d2.getMonth() + 1}`;\n    let day = `${d2.getDate()}`;\n    const year = d2.getFullYear();\n    if (month.length < 2) month = `0${month}`;\n    if (day.length < 2) day = `0${day}`;\n    return [year, month, day].join(\"-\");\n  }\n};\nconst DateTimeMixin = {\n  name: \"date-time-mixin\",\n  created() {\n    this.listValueTransformations.attach(\n      this.transformValue.bind(this),\n      \"DateTimeMixin:transformValue\"\n    );\n  },\n  transformValue(value, listValueTransformations) {\n    const newValue = value ? new Date(value).toLocaleString() : value;\n    const nextProcessor = listValueTransformations.shift();\n    if (nextProcessor) nextProcessor(newValue, listValueTransformations);\n  }\n};\nvar markdownItLinkAttributes;\nvar hasRequiredMarkdownItLinkAttributes;\nfunction requireMarkdownItLinkAttributes() {\n  if (hasRequiredMarkdownItLinkAttributes) return markdownItLinkAttributes;\n  hasRequiredMarkdownItLinkAttributes = 1;\n  function findFirstMatchingConfig(link2, configs) {\n    var i3, config2;\n    var href = link2.attrs[link2.attrIndex(\"href\")][1];\n    for (i3 = 0; i3 < configs.length; ++i3) {\n      config2 = configs[i3];\n      if (typeof config2.matcher === \"function\") {\n        if (config2.matcher(href, config2)) {\n          return config2;\n        } else {\n          continue;\n        }\n      }\n      return config2;\n    }\n  }\n  function applyAttributes(idx, tokens, attributes) {\n    Object.keys(attributes).forEach(function(attr) {\n      var attrIndex2;\n      var value = attributes[attr];\n      if (attr === \"className\") {\n        attr = \"class\";\n      }\n      attrIndex2 = tokens[idx].attrIndex(attr);\n      if (attrIndex2 < 0) {\n        tokens[idx].attrPush([attr, value]);\n      } else {\n        tokens[idx].attrs[attrIndex2][1] = value;\n      }\n    });\n  }\n  function markdownitLinkAttributes(md, configs) {\n    if (!configs) {\n      configs = [];\n    } else {\n      configs = Array.isArray(configs) ? configs : [configs];\n    }\n    Object.freeze(configs);\n    var defaultRender = md.renderer.rules.link_open || this.defaultRender;\n    md.renderer.rules.link_open = function(tokens, idx, options, env, self2) {\n      var config2 = findFirstMatchingConfig(tokens[idx], configs);\n      var attributes = config2 && config2.attrs;\n      if (attributes) {\n        applyAttributes(idx, tokens, attributes);\n      }\n      return defaultRender(tokens, idx, options, env, self2);\n    };\n  }\n  markdownitLinkAttributes.defaultRender = function(tokens, idx, options, env, self2) {\n    return self2.renderToken(tokens, idx, options);\n  };\n  markdownItLinkAttributes = markdownitLinkAttributes;\n  return markdownItLinkAttributes;\n}\nvar markdownItLinkAttributesExports = requireMarkdownItLinkAttributes();\nconst mila = /* @__PURE__ */ getDefaultExportFromCjs(markdownItLinkAttributesExports);\nconst MarkdownMixin = {\n  name: \"markdown-mixin\",\n  created() {\n    this.listValueTransformations.attach(\n      this.transformValue.bind(this),\n      \"MarkdownMixin:transformValue\"\n    );\n  },\n  transformValue(value, listValueTransformations) {\n    let newValue = \"\";\n    if (value) {\n      const md = MarkdownIt({\n        breaks: true,\n        html: true,\n        linkify: true\n      });\n      md.use(mila, {\n        attrs: {\n          target: \"_blank\",\n          rel: \"noopener\"\n        }\n      });\n      const html = md.render(value);\n      newValue = o$1(html);\n    }\n    const nextProcessor = listValueTransformations.shift();\n    if (nextProcessor) nextProcessor(newValue, listValueTransformations);\n  }\n};\nconst MultilineMixin = {\n  name: \"multiline-mixin\",\n  created() {\n    this.listValueTransformations.attach(\n      this.transformValue.bind(this),\n      \"MultilineMixin:transformValue\"\n    );\n  },\n  transformValue(value, listValueTransformations) {\n    const newValue = value ? o$1(value.replace(/\\n/g, \"<br/>\")) : value;\n    const nextProcessor = listValueTransformations.shift();\n    if (nextProcessor) nextProcessor(newValue, listValueTransformations);\n  }\n};\nconst OembedMixin = {\n  name: \"oembed-mixin\",\n  initialState: {\n    existingOembed: null\n  },\n  created() {\n    this.listValueTransformations.attach(\n      this.transformValue.bind(this),\n      \"OembedMixin:transformValue\"\n    );\n  },\n  async transformValue(value, listValueTransformations) {\n    if (!value) return;\n    if (this.existingOembed == null) {\n      const response = await fetch(this.value);\n      this.existingOembed = await response.json();\n    }\n    const newValue = o$1(this.existingOembed.html);\n    const nextProcessor = listValueTransformations.shift();\n    if (nextProcessor) nextProcessor(newValue, listValueTransformations);\n  }\n};\nconst valueTransformationDirectory = {\n  date: DateMixin,\n  datetime: DateTimeMixin,\n  multiline: MultilineMixin,\n  markdown: MarkdownMixin,\n  oembed: OembedMixin,\n  autolink: AutolinkMixin\n};\nconst valueTransformationKeys = Object.keys(valueTransformationDirectory);\nconst attributeKeys = Object.keys(attributeDirectory);\nconst templateAdditionKeys = Object.keys(templateAdditionDirectory);\nconst callbackKeys = Object.keys(callbackDirectory);\nconst newWidgetFactory = (tagName) => {\n  let widgetMixins;\n  try {\n    widgetMixins = getWidgetMixins(tagName);\n  } catch (e2) {\n    console.error(e2);\n    return;\n  }\n  const newWidget = {\n    // compose widget\n    name: tagName,\n    use: [\n      ...widgetMixins.mixins,\n      BaseWidgetMixin\n      // at the end so created() is called first\n    ],\n    get template() {\n      return widgetMixins.templateMixin.template;\n    }\n  };\n  Sib.register(newWidget);\n};\nfunction getWidgetMixins(tagName) {\n  const valueTransformations = [];\n  const attributes = [];\n  const templateAdditions = [];\n  const callbacks = [];\n  let template = null;\n  const mixinNames = tagName.split(\"-\").filter((t2) => t2 !== \"solid\");\n  let widgetType = defaultTemplates;\n  if (mixinNames.includes(\"display\")) widgetType = displayTemplates;\n  else if (mixinNames.includes(\"form\")) widgetType = formTemplates;\n  else if (mixinNames.includes(\"set\")) widgetType = setTemplates;\n  else if (mixinNames.includes(\"group\")) widgetType = groupTemplates;\n  const templateKeys = Object.keys(widgetType);\n  for (const mixin of mixinNames) {\n    if (valueTransformationKeys.includes(mixin)) {\n      valueTransformations.push(valueTransformationDirectory[mixin]);\n    }\n    if (attributeKeys.includes(mixin)) {\n      attributes.push(attributeDirectory[mixin]);\n    }\n    if (templateAdditionKeys.includes(mixin)) {\n      templateAdditions.push(templateAdditionDirectory[mixin]);\n    }\n    if (callbackKeys.includes(mixin)) {\n      callbacks.push(callbackDirectory[mixin]);\n    }\n    if (templateKeys.includes(mixin)) {\n      template = widgetType[mixin];\n    }\n  }\n  if (!template) throw `No template found for widget \"${tagName}\"`;\n  return {\n    templateMixin: template,\n    mixins: [\n      ...valueTransformations,\n      ...attributes,\n      ...templateAdditions,\n      ...template.dependencies || [],\n      ...callbacks\n    ]\n  };\n}\nnewWidgetFactory(\"solid-form-dropdown\");\nnewWidgetFactory(\"solid-form-multicheckbox\");\nnewWidgetFactory(\"solid-form-file-label\");\nnewWidgetFactory(\"solid-action\");\nnewWidgetFactory(\"solid-group-default\");\nvar WidgetType = /* @__PURE__ */ ((WidgetType2) => {\n  WidgetType2[\"CUSTOM\"] = \"custom\";\n  WidgetType2[\"USER\"] = \"user\";\n  WidgetType2[\"NATIVE\"] = \"native\";\n  return WidgetType2;\n})(WidgetType || {});\nconst WidgetMixin = {\n  name: \"widget-mixin\",\n  use: [],\n  attributes: {\n    fields: {\n      type: String,\n      default: void 0\n    }\n  },\n  initialState: {\n    nameWidgets: null,\n    _div: null\n  },\n  created() {\n    this.nameWidgets = [];\n  },\n  attached() {\n    if (!this.dataSrc && !this.resource && this.noRender === null)\n      this.populate();\n  },\n  get parentElement() {\n    return \"div\";\n  },\n  get div() {\n    if (this._div) return this._div;\n    this._div = document.createElement(this.parentElement);\n    this.element.appendChild(this._div);\n    return this._div;\n  },\n  set div(value) {\n    this._div = value;\n  },\n  get widgets() {\n    return this.nameWidgets.map(\n      (name) => this.element.querySelector(`[name=\"${name}\"]`)\n    );\n  },\n  /**\n   * Return field list of the component\n   */\n  async getFields() {\n    var _a3;\n    this.nameWidgets = [];\n    const attr = this.fields;\n    if (attr === \"\") return [];\n    if (attr) return parseFieldsString(attr);\n    let resource = this.resource;\n    if ((_a3 = resource == null ? void 0 : resource.isContainer) == null ? void 0 : _a3.call(resource)) {\n      const resources = resource[\"listPredicate\"];\n      for (const res of resources) {\n        resource = res;\n        break;\n      }\n    } else if (resource && this.arrayField && this.predicateName) {\n      for (const res of resource[this.predicateName]) {\n        resource = res;\n        break;\n      }\n    }\n    if (!this.dataSrc)\n      console.error(new Error('You must provide a \"fields\" attribute'));\n    if (!resource) return [];\n    const fields = [];\n    for (const prop of resource.properties) {\n      if (!prop.startsWith(\"@\") && !(prop === \"permissions\")) {\n        if (!this.isAlias(prop) && await resource[prop]) fields.push(prop);\n        else if (this.isAlias(prop)) fields.push(prop);\n      }\n    }\n    return fields;\n  },\n  /**\n   * return attribute if \"field\" is an action\n   * @param field - string\n   */\n  getAction(field) {\n    const action = this.element.getAttribute(`action-${field}`);\n    return action;\n  },\n  /**\n   * return true if \"field\" is editable\n   * @param field - string\n   */\n  editable(field) {\n    return this.element.hasAttribute(`editable-${field}`);\n  },\n  /**\n   * Return regexp to check if \"field\" is a set\n   * @param field - string\n   */\n  getSetRegexp(field) {\n    return new RegExp(`(^|\\\\,|\\\\(|\\\\s)\\\\s*${field}\\\\s*\\\\(`, \"g\");\n  },\n  /**\n   * Return fields contained in set \"field\"\n   * @param field - string\n   */\n  getSet(field) {\n    const setString = this.fields.match(this.getSetRegexp(field));\n    if (!setString) return [];\n    const firstSetBracket = this.fields.indexOf(setString[0]) + setString[0].length - 1;\n    const lastSetBracket = findClosingBracketMatchIndex(\n      this.fields,\n      firstSetBracket\n    );\n    const set2 = this.fields.substring(firstSetBracket + 1, lastSetBracket);\n    return parseFieldsString(set2);\n  },\n  /**\n   * Return true if \"field\" is a set\n   * @param field - string\n   */\n  isSet(field) {\n    if (!this.fields) return false;\n    const foundSets = this.fields.match(this.getSetRegexp(field));\n    return foundSets ? foundSets.length > 0 : false;\n  },\n  /**\n   * Return true if \"field\" is a string\n   * @param field - string\n   */\n  isString(field) {\n    return field.startsWith(\"'\") || field.startsWith('\"');\n  },\n  /**\n   * Return true if \"field\" is an alias (contains \" as \")\n   * @param field - string\n   */\n  isAlias(field) {\n    const aliasRegex = /^[\\w@.]+\\s+as\\s+[\\w@.]+$/;\n    return aliasRegex.test(field);\n  },\n  /**\n   * Return the value of \"resource\" for predicate \"field\"\n   * @param field - string\n   * @param resource - Resource\n   */\n  async fetchValue(field, resource) {\n    var _a3, _b;\n    if (resource && !((_a3 = resource.isContainer) == null ? void 0 : _a3.call(resource))) {\n      let fieldValue = await resource[field];\n      if (fieldValue === null || fieldValue === void 0 || fieldValue === \"\") {\n        const expandedPredicate = sibStore.getExpandedPredicate(\n          field,\n          this.context\n        );\n        if (!expandedPredicate) return void 0;\n        fieldValue = await resource[expandedPredicate];\n      }\n      if (fieldValue === null || fieldValue === void 0 || fieldValue === \"\")\n        return void 0;\n      if (Array.isArray(fieldValue) && !doesResourceContainList(fieldValue)) {\n        return JSON.stringify(fieldValue);\n      }\n      if (typeof fieldValue === \"object\" && fieldValue[\"@id\"] && Object.keys(fieldValue).length === 1) {\n        return JSON.stringify([fieldValue]);\n      }\n    }\n    return resource && !((_b = resource.isContainer) == null ? void 0 : _b.call(resource)) ? await resource[field] : void 0;\n  },\n  /**\n   * Return the value of the field\n   * @param field - field\n   */\n  async getValue(field, resource) {\n    const escapedField = this.getEscapedField(field);\n    if (this.getAction(escapedField)) {\n      return this.getAction(escapedField);\n    }\n    if (this.element.hasAttribute(`value-${field}`)) {\n      return this.element.getAttribute(`value-${field}`);\n    }\n    if (this.isAlias(field)) {\n      const alias = field.split(\" as \");\n      return await this.fetchValue(alias[0], resource);\n    }\n    const resourceValue = await this.fetchValue(field, resource);\n    if (resourceValue === void 0 || resourceValue === \"\" || resourceValue === null)\n      return this.element.hasAttribute(`default-${field}`) ? this.element.getAttribute(`default-${field}`) : \"\";\n    return resourceValue;\n  },\n  empty() {\n  },\n  /**\n   * Return a widget from a tagName, and create it if necessary\n   * @param tagName - string\n   */\n  widgetFromTagName(tagName) {\n    let type = tagName.startsWith(\"solid\") ? WidgetType.CUSTOM : WidgetType.USER;\n    if (!customElements.get(tagName)) {\n      if (tagName.startsWith(\"solid\"))\n        newWidgetFactory(tagName);\n      else type = WidgetType.NATIVE;\n    }\n    return { tagName, type };\n  },\n  /**\n   * Return widget for field \"field\"\n   * @param field - string\n   * @param isSet - boolean\n   */\n  getWidget(field, isSet2 = false) {\n    if (this.isAlias(field)) field = field.split(\" as \")[1];\n    const widget = this.element.getAttribute(`widget-${field}`);\n    if (widget) return this.widgetFromTagName(widget);\n    if (this.getAction(field)) return this.widgetFromTagName(\"solid-action\");\n    return !isSet2 ? this.widgetFromTagName(this.defaultWidget) : this.widgetFromTagName(this.defaultSetWidget);\n  },\n  /**\n   * Return multiple widget if \"field\" is a multiple, false if it's not\n   * @param field - string\n   */\n  multiple(field) {\n    const attribute2 = `multiple-${field}`;\n    if (!this.element.hasAttribute(attribute2)) return null;\n    const widget = this.element.getAttribute(attribute2) || this.defaultMultipleWidget;\n    return this.widgetFromTagName(widget);\n  },\n  /**\n   * If attribute \"lookForAttr\" is set on element, add \"attrKey\" to the \"attributes\" list\n   * @param lookForAttr - string\n   * @param setAttrKey - string\n   * @param attributes - object\n   */\n  addToAttributes(lookForAttr, setAttrKey, attributes) {\n    const attribute2 = this.element.getAttribute(lookForAttr);\n    if (attribute2 == null) return;\n    attributes[setAttrKey] = attribute2;\n  },\n  /**\n   * Return all the attributes of widget \"field\"\n   * @param field - string\n   * @param resource - Resource\n   */\n  widgetAttributes(field, resource) {\n    const attrs = { name: field };\n    if (this.isAlias(field)) field = field.split(\" as \")[1];\n    const escapedField = this.getEscapedField(field);\n    const multipleAttributes = [\n      \"fields\",\n      \"label\",\n      \"widget\",\n      \"add-label\",\n      \"remove-label\",\n      \"next\",\n      \"empty-widget\",\n      \"add-class\",\n      \"remove-class\"\n    ];\n    for (const attr of multipleAttributes)\n      this.addToAttributes(`multiple-${escapedField}-${attr}`, attr, attrs);\n    const defaultAttributes = [\n      \"range\",\n      \"enum\",\n      \"label\",\n      \"placeholder\",\n      \"class\",\n      /* 'widget', */\n      \"required\",\n      \"editable\",\n      \"autocomplete\",\n      \"upload-url\",\n      \"option-label\",\n      \"option-value\",\n      \"order-by\",\n      // deprecated. Remove in 0.15\n      \"each-label\",\n      \"order-asc\",\n      \"order-desc\",\n      \"min\",\n      \"max\",\n      \"pattern\",\n      \"title\",\n      \"start-value\",\n      \"end-value\",\n      \"alt\",\n      \"step\",\n      \"maxlength\",\n      \"minlength\",\n      \"search-text\",\n      \"search-placeholder\",\n      \"link-text\",\n      \"target-src\",\n      \"data-label\"\n    ];\n    for (const attr of defaultAttributes)\n      this.addToAttributes(`${attr}-${escapedField}`, attr, attrs);\n    const addableAttributes = Array.from(this.element.attributes).filter((a2) => a2.name.startsWith(`addable-${escapedField}`));\n    for (const attr of addableAttributes)\n      this.addToAttributes(\n        attr.name,\n        attr.name.replace(`addable-${escapedField}`, \"addable\"),\n        attrs\n      );\n    const resourceId = (resource == null ? void 0 : resource[\"@id\"]) ?? null;\n    if (this.multiple(escapedField))\n      attrs.widget = this.getWidget(escapedField).tagName;\n    if (this.getAction(escapedField) && resourceId)\n      attrs.src = this.element.getAttribute(`src-${escapedField}`) || resourceId;\n    if (this.editable(escapedField) && resourceId)\n      attrs[\"value-id\"] = resourceId;\n    return attrs;\n  },\n  /**\n   * Creates and return a widget for field + add it to the widget list\n   * @param field - string\n   */\n  async createWidgetTemplate(field, resource = null, transformAttributes = false) {\n    if (this.isString(field)) return this.createString(field);\n    if (this.isSet(field)) return await this.createSet(field);\n    const currentResource = resource || this.resource;\n    let attributes = this.widgetAttributes(field, currentResource);\n    const escapedField = this.getEscapedField(field);\n    const widgetMeta = this.multiple(escapedField) || this.getWidget(escapedField);\n    let tagName = widgetMeta.tagName;\n    let widgetTemplate = x``;\n    const classAttr = attributes.class;\n    const value = await this.getValue(field, currentResource);\n    if (widgetMeta.type === WidgetType.NATIVE) {\n      widgetTemplate = preHTML`<${tagName} name=\"${o$2(attributes.name)}\" class=\"${o$2(attributes.class)}\">${value}</${tagName}>`;\n    } else {\n      if ((value === null || value === \"\") && this.element.hasAttribute(`default-widget-${field}`)) {\n        tagName = this.element.getAttribute(`default-widget-${field}`);\n      }\n      if (value === null || value === void 0) attributes.value = \"\";\n      if (widgetMeta.type === WidgetType.USER) {\n        if (value[\"@id\"]) {\n          attributes[\"data-src\"] = value[\"@id\"];\n        } else {\n          try {\n            const isUrl = new URL(value);\n            if (isUrl) attributes[\"data-src\"] = value;\n          } catch {\n          }\n          attributes.value = value;\n        }\n      } else {\n        attributes.value = value;\n      }\n      if (value == null ? void 0 : value[\"@id\"]) attributes[\"auto-subscribe\"] = value[\"@id\"];\n      if (transformAttributes)\n        attributes = await this.transformAttributes(\n          attributes,\n          currentResource\n        );\n      if (value == null ? void 0 : value[\"@id\"]) attributes[\"auto-subscribe\"] = value[\"@id\"];\n      widgetTemplate = preHTML`\n        <${tagName}\n          ...=${spread(attributes)}\n          class=\"${classAttr !== void 0 ? tagName.concat(\" \", classAttr) : tagName}\"\n        ></${tagName}>`;\n    }\n    this.nameWidgets.push(field);\n    return widgetTemplate;\n  },\n  defineAttribute(widget, attribute2, value) {\n    if (widget.getAttribute(attribute2) !== value) {\n      widget.setAttribute(attribute2, value);\n    }\n  },\n  /**\n   * Create a set and add fields to it\n   * @param field - string\n   */\n  async createSet(field) {\n    const setWidget = this.getWidget(field, true);\n    const attrs = { name: field, class: setWidget.tagName };\n    const setAttributes = [\"class\", \"label\"];\n    for (const attr of setAttributes)\n      this.addToAttributes(`${attr}-${field}`, attr, attrs);\n    if (attrs.class !== void 0) {\n      attrs.class = setWidget.tagName.concat(\" \", attrs.class);\n    } else attrs.class = setWidget.tagName;\n    let widget = this.element.querySelector(\n      `${setWidget.tagName}[name=\"${field}\"]`\n    );\n    let initializing = false;\n    if (!widget) {\n      widget = document.createElement(setWidget.tagName);\n      initializing = true;\n    }\n    for (const name of Object.keys(attrs)) {\n      this.defineAttribute(widget, name, attrs[name], setWidget.type);\n    }\n    if (widget.component && initializing) widget.component.render();\n    const setFields = this.getSet(field);\n    if (this.element.hasAttribute(`empty-${field}`)) {\n      let hasOnlyEmpty = true;\n      for (const field2 of setFields) {\n        const value = await this.getValue(field2, this.resource);\n        if (value !== \"\") {\n          hasOnlyEmpty = false;\n          break;\n        }\n      }\n      if (hasOnlyEmpty) {\n        const attributes = this.widgetAttributes(field, this.resource);\n        const tagName = this.element.getAttribute(`empty-${field}`);\n        const valueSet = this.element.getAttribute(`empty-${field}-value`);\n        if (valueSet) attributes.value = valueSet;\n        return preHTML`\n        <${tagName}\n          ...=${spread(attributes)}\n          class=\"${tagName}\"\n        ></${tagName}>`;\n      }\n    }\n    const widgetsTemplate = await Promise.all(\n      setFields.map((field2) => this.createWidgetTemplate(field2))\n    );\n    const template = x`${widgetsTemplate}`;\n    B(template, widget.querySelector(\"[data-content]\") || widget);\n    return widget;\n  },\n  createString(value) {\n    return x`<span>${value.slice(1, -1).replace(/\\\\(['\"])/g, \"$1\")}</span>`;\n  },\n  /**\n   * Returns field name without starting \"@\"\n   * @param field\n   */\n  getEscapedField(field) {\n    return field.startsWith(\"@\") ? field.slice(1, field.length) : field;\n  }\n};\nconst SolidDisplay = {\n  name: \"solid-display\",\n  use: [\n    WidgetMixin,\n    ListMixin,\n    StoreMixin,\n    PaginateMixin,\n    GrouperMixin,\n    CounterMixin,\n    HighlighterMixin,\n    FilterMixin,\n    SorterMixin,\n    RequiredMixin,\n    FederationMixin,\n    NextMixin\n  ],\n  attributes: {\n    defaultWidget: {\n      type: String,\n      default: \"solid-display-value\"\n    }\n  },\n  initialState: {\n    activeSubscription: null,\n    removeActiveSubscription: null,\n    resources: []\n  },\n  created() {\n    const route = document.querySelector(\"solid-route[active]\");\n    if (!route) return;\n    setTimeout(() => {\n      if (route.resourceId === this.resourceId) this.addActiveCallback();\n    });\n  },\n  detached() {\n    if (this.activeSubscription) PubSub.unsubscribe(this.activeSubscription);\n    if (this.removeActiveSubscription)\n      PubSub.unsubscribe(this.removeActiveSubscription);\n  },\n  // Update subscription when id changes\n  updateNavigateSubscription() {\n    if (this.activeSubscription) PubSub.unsubscribe(this.activeSubscription);\n    if (this.resourceId) {\n      this.activeSubscription = PubSub.subscribe(\n        `enterRoute.${this.resourceId}`,\n        this.addActiveCallback.bind(this)\n      );\n    }\n  },\n  addActiveCallback() {\n    this.element.setAttribute(\"active\", \"\");\n    this.removeActiveSubscription = PubSub.subscribe(\n      \"leaveRoute\",\n      this.removeActiveCallback.bind(this)\n    );\n  },\n  removeActiveCallback() {\n    this.element.removeAttribute(\"active\");\n    PubSub.unsubscribe(this.removeActiveSubscription);\n  },\n  get childTag() {\n    return this.element.dataset.child || this.element.tagName;\n  },\n  get defaultMultipleWidget() {\n    return \"solid-multiple\";\n  },\n  get defaultSetWidget() {\n    return \"solid-set-default\";\n  },\n  // Here \"even.target\" points to the content of the widgets of the children of solid-display\n  dispatchSelect(event, resourceId) {\n    const linkTarget = (event == null ? void 0 : event.target).closest(\"a\");\n    if (linkTarget == null ? void 0 : linkTarget.hasAttribute(\"href\")) return;\n    const resource = { \"@id\": resourceId };\n    this.element.dispatchEvent(\n      new CustomEvent(\"resourceSelect\", { detail: { resource } })\n    );\n    this.goToNext(resource);\n  },\n  enterKeydownAction(event, resourceId) {\n    if (event.keyCode === 13) {\n      const resource = { \"@id\": resourceId };\n      this.goToNext(resource);\n    }\n  },\n  /**\n   * Returns template of a child element (resource)\n   * @param resourceId\n   * @param attributes\n   */\n  getChildTemplate(resourceId, attributes) {\n    const template = x`\n      <solid-display\n        data-src=${resourceId}\n        @click=${(event) => this.dispatchSelect(event, resourceId)}\n        @keydown=${(event) => this.enterKeydownAction(event, resourceId)}\n        fields=${o$2(this.fields)}\n        ...=${spread(attributes)}\n      ></solid-display>\n    `;\n    return template;\n  },\n  /**\n   * Creates and render the content of a single element (resource)\n   * @param parent\n   */\n  async appendSingleElt(parent) {\n    const fields = await this.getFields();\n    const widgetTemplates = await Promise.all(\n      // generate all widget templates\n      fields.map((field) => this.createWidgetTemplate(field))\n    );\n    B(x`${widgetTemplates}`, parent);\n  },\n  /**\n   * @override listMixin method to use litHtml\n   *\n   * Render resources from a container\n   * @param resources\n   * @param listPostProcessors\n   * @param div\n   * @param context\n   */\n  renderDOM: trackRenderAsync(async function(resources, listPostProcessors, div, context) {\n    const attributes = this.getChildAttributes();\n    const template = x`${resources.map((r3) => r3 ? this.getChildTemplate(r3[\"@id\"], attributes) : null)}`;\n    B(template, div);\n    const nextProcessor = listPostProcessors.shift();\n    if (nextProcessor)\n      await nextProcessor(resources, listPostProcessors, div, context);\n  }, \"SolidDisplay:renderDom\"),\n  /**\n   * Get attributes to dispatch to children from current element\n   */\n  getChildAttributes() {\n    const attributes = {};\n    for (const attr of this.element.attributes) {\n      if (attr.name.startsWith(\"value-\") || attr.name.startsWith(\"label-\") || attr.name.startsWith(\"placeholder-\") || attr.name.startsWith(\"widget-\") || attr.name.startsWith(\"class-\") || attr.name.startsWith(\"multiple-\") || attr.name.startsWith(\"editable-\") || attr.name.startsWith(\"action-\") || attr.name.startsWith(\"default-\") || attr.name.startsWith(\"link-text-\") || attr.name.startsWith(\"target-src-\") || attr.name.startsWith(\"data-label-\") || attr.name === \"extra-context\")\n        attributes[attr.name] = attr.value;\n      if (attr.name.startsWith(\"child-\"))\n        attributes[attr.name.replace(/^child-/, \"\")] = attr.value;\n      if (attr.name === \"next\") {\n        attributes.role = \"button\";\n        attributes.tabindex = \"0\";\n      }\n    }\n    return attributes;\n  }\n};\nSib.register(SolidDisplay);\nconst SolidFormSearch = {\n  name: \"solid-form-search\",\n  use: [WidgetMixin, AttributeBinderMixin, ContextMixin],\n  debounceTimeout: void 0,\n  attributes: {\n    defaultWidget: {\n      type: String,\n      default: \"solid-form-label-text\"\n    },\n    submitButton: {\n      type: String,\n      default: null,\n      callback: function(newValue, oldValue) {\n        if (this.noRender == null && newValue !== oldValue) this.populate();\n      }\n    },\n    submitWidget: {\n      type: String,\n      default: void 0\n    },\n    classSubmitButton: {\n      type: String,\n      default: void 0\n    },\n    noRender: {\n      type: String,\n      default: null,\n      callback: function(value) {\n        if (value === null) this.populate();\n      }\n    },\n    debounce: {\n      type: Number,\n      default: 0\n      // Avoiding blink effect with static values\n    }\n  },\n  initialState: {\n    error: \"\"\n  },\n  created() {\n    if (this.element.closest(\"[no-render]\")) this.noRender = \"\";\n    this.autoRangeValues = {};\n    this.rangeId = uniqID();\n    this.attachedElements = /* @__PURE__ */ new Set();\n  },\n  get defaultMultipleWidget() {\n    return \"solid-multiple-form\";\n  },\n  get defaultSetWidget() {\n    return \"solid-set-default\";\n  },\n  get value() {\n    const values = {};\n    for (const widget of this.widgets) {\n      if (widget == null) continue;\n      const name = (widget.component || widget).name;\n      if (name == null) continue;\n      let value = widget.component ? widget.component.getValue() : widget.value;\n      try {\n        value = JSON.parse(value);\n      } catch {\n      }\n      value = {\n        type: widget.component.type,\n        list: !!widget.component.multiple,\n        value\n      };\n      values[name] = value;\n    }\n    return values;\n  },\n  getWidget(field, isSet2 = false) {\n    let tagName = \"\";\n    if (this.element.hasAttribute(`auto-range-${field}`) && !this.element.hasAttribute(`range-${field}`)) {\n      const idField = `${this.rangeId}_${field}`;\n      this.element.setAttribute(`range-${field}`, `store://local.${idField}`);\n      this.populate();\n    }\n    const widgetAttribute = this.element.getAttribute(`widget-${field}`);\n    if (!widgetAttribute && (this.element.hasAttribute(`range-${field}`) || this.element.hasAttribute(`enum-${field}`))) {\n      tagName = \"solid-form-dropdown\";\n    } else {\n      tagName = widgetAttribute || (!isSet2 ? this.defaultWidget : this.defaultSetWidget);\n    }\n    if (!customElements.get(tagName)) {\n      if (tagName.startsWith(\"solid\")) newWidgetFactory(tagName);\n    }\n    return this.widgetFromTagName(tagName);\n  },\n  async attach(elm) {\n    if (this.attachedElements.has(elm)) return;\n    this.attachedElements.add(elm);\n    await this.updateAutoRanges();\n  },\n  async detach(elm) {\n    if (!this.attachedElements.has(elm)) return;\n    this.attachedElements.delete(elm);\n    await this.updateAutoRanges();\n  },\n  async updateAutoRanges() {\n    for (const attr of this.element.attributes) {\n      if (!attr.name.startsWith(\"auto-range-\")) continue;\n      const fieldName = attr.value !== \"\" ? attr.value : attr.name.replace(\"auto-range-\", \"\");\n      const autoRangeValues = /* @__PURE__ */ new Set();\n      for (const elm of this.attachedElements) {\n        for (const value of await elm.getValuesOfField(fieldName)) {\n          autoRangeValues.add(value);\n        }\n      }\n      const idField = `${this.rangeId}_${fieldName}`;\n      const id = `store://local.${idField}`;\n      const ldpContains = Array.from(autoRangeValues).map((id2) => ({\n        \"@id\": id2\n      }));\n      const data = {\n        \"@type\": \"ldp:Container\",\n        \"@context\": this.context,\n        \"ldp:contains\": ldpContains\n      };\n      sibStore.setLocalData(data, id);\n    }\n  },\n  change(resource, eventOptions) {\n    if (!resource) return;\n    this.element.dispatchEvent(\n      new CustomEvent(\"formChange\", {\n        bubbles: true,\n        detail: { resource }\n      })\n    );\n    if (!eventOptions.value) return;\n    this.element.dispatchEvent(\n      new CustomEvent(\"filterChange\", {\n        bubbles: true,\n        detail: {\n          value: eventOptions.value,\n          inputLabel: eventOptions.inputLabel,\n          type: eventOptions.type\n        }\n      })\n    );\n  },\n  inputChange(input) {\n    var _a3, _b;\n    const parentElementLabel = (_a3 = input == null ? void 0 : input.parentElement) == null ? void 0 : _a3.getAttribute(\"label\");\n    try {\n      const selectedLabel = (_b = input.selectedOptions[0].textContent) == null ? void 0 : _b.trim();\n      this.change(this.value, {\n        value: selectedLabel,\n        inputLabel: parentElementLabel,\n        type: \"select\"\n      });\n    } catch {\n      this.change(this.value, {\n        value: input.value,\n        inputLabel: parentElementLabel,\n        type: \"input\"\n      });\n    }\n  },\n  getSubmitTemplate() {\n    return x`\n      <div class=${o$2(this.classSubmitButton)}>\n        ${this.submitWidget === \"button\" ? x`<button type=\"submit\">${this.submitButton || \"\"}</button>` : x`<input type=\"submit\" value=${o$2(this.submitButton || void 0)}>`}\n      </div>\n    `;\n  },\n  empty() {\n  },\n  debounceInput(input) {\n    clearTimeout(this.debounceTimeout);\n    this.debounceTimeout = setTimeout(() => {\n      this.debounceTimeout = void 0;\n      this.inputChange(input);\n    }, this.debounce);\n  },\n  populate: trackRenderAsync(async function() {\n    await this.replaceAttributesData();\n    if (this.submitButton == null) {\n      this.element.addEventListener(\"input\", (e2) => {\n        this.debounceInput(e2.target);\n      });\n    }\n    this.element.addEventListener(\"submit\", (e2) => {\n      e2.preventDefault();\n      this.inputChange(e2.target);\n    });\n    const fields = await this.getFields();\n    const widgetTemplates = await Promise.all(\n      fields.map((field) => this.createWidgetTemplate(field))\n    );\n    const template = x`\n        <form>\n          ${widgetTemplates}\n          ${this.submitButton == null ? \"\" : this.getSubmitTemplate()}\n        </form>\n      `;\n    B(template, this.element);\n  }, \"SolidFormSearch:populate\")\n};\nSib.register(SolidFormSearch);\nconst SolidForm = {\n  name: \"solid-form\",\n  use: [WidgetMixin, StoreMixin, NextMixin, ValidationMixin],\n  attributes: {\n    autosave: {\n      type: Boolean,\n      default: null\n    },\n    classSubmitButton: {\n      type: String,\n      default: void 0\n    },\n    defaultWidget: {\n      type: String,\n      default: \"solid-form-label-text\"\n    },\n    naked: {\n      type: Boolean,\n      default: null\n    },\n    partial: {\n      type: Boolean,\n      default: null\n    },\n    submitButton: {\n      type: String,\n      default: void 0,\n      callback: function(newValue, oldValue) {\n        if (this.noRender == null && newValue !== oldValue) this.populate();\n      }\n    },\n    submitWidget: {\n      type: String,\n      default: null\n    }\n  },\n  initialState: {\n    error: \"\"\n  },\n  get defaultMultipleWidget() {\n    return \"solid-multiple-form\";\n  },\n  get defaultSetWidget() {\n    return \"solid-set-default\";\n  },\n  get value() {\n    var _a3, _b;\n    const values = {};\n    for (const widget of this.widgets) {\n      const name = (widget.component || widget).name;\n      if (name == null) continue;\n      let value = widget.component ? widget.component.getValue() : widget.value;\n      try {\n        value = JSON.parse(value);\n      } catch {\n      }\n      setDeepProperty(values, name.split(\".\"), value);\n    }\n    if (this.resource && !((_b = (_a3 = this.resource).isContainer) == null ? void 0 : _b.call(_a3)))\n      values[\"@id\"] = this.resourceId;\n    return values;\n  },\n  get isNaked() {\n    return this.element.hasAttribute(\"naked\");\n  },\n  get isSavingAutomatically() {\n    return this.autosave !== null;\n  },\n  isCreationForm(formValue) {\n    return !(\"@id\" in formValue);\n  },\n  async getFormValue() {\n    var _a3, _b;\n    const value = this.value;\n    if (this.resource && !((_b = (_a3 = this.resource).isContainer) == null ? void 0 : _b.call(_a3))) {\n      for (const predicate of Object.keys(this.value)) {\n        const object2 = await this.resource.getList(predicate);\n        if ((object2 == null ? void 0 : object2[\"@id\"]) && !value[predicate][\"@id\"])\n          value[predicate][\"@id\"] = object2[\"@id\"];\n        if (object2 && !object2[\"@id\"] && Array.isArray(object2) && value[predicate].length === 0 && object2.length > 0) {\n          value[predicate] = object2;\n        }\n      }\n    }\n    return transformArrayToContainer(value);\n  },\n  getWidget(field, isSet2 = false) {\n    let tagName = \"\";\n    const widgetAttribute = this.element.getAttribute(`widget-${field}`);\n    if (!widgetAttribute && this.element.hasAttribute(`upload-url-${field}`)) {\n      tagName = \"solid-form-file\";\n    } else if (!widgetAttribute && (this.element.hasAttribute(`range-${field}`) || this.element.hasAttribute(`enum-${field}`))) {\n      tagName = \"solid-form-dropdown\";\n    } else {\n      tagName = widgetAttribute || (!isSet2 ? this.defaultWidget : this.defaultSetWidget);\n    }\n    return this.widgetFromTagName(tagName);\n  },\n  change(resource) {\n    this.element.dispatchEvent(\n      new CustomEvent(\"formChange\", {\n        bubbles: true,\n        detail: { resource }\n      })\n    );\n  },\n  async save() {\n    this.toggleLoaderHidden(false);\n    this.hideError();\n    const resource = await this.getFormValue();\n    resource[\"@context\"] = this.context;\n    let saved;\n    try {\n      if (this.partial == null) {\n        saved = resource[\"@id\"] ? await store.put(resource, this.resourceId) : await store.post(resource, this.resourceId);\n      } else {\n        saved = await store.patch(resource, this.resourceId);\n      }\n    } catch (e2) {\n      this.toggleLoaderHidden(true);\n      if (e2 == null ? void 0 : e2.json) {\n        e2.json().then((error2) => this.showError(error2));\n        throw e2;\n      }\n    }\n    this.element.dispatchEvent(\n      new CustomEvent(\"save\", {\n        bubbles: true,\n        detail: {\n          resource,\n          id: saved || null\n        }\n      })\n    );\n    this.toggleLoaderHidden(true);\n    return saved;\n  },\n  async submitForm() {\n    let id;\n    try {\n      id = await this.save() || this.getFormValue()[\"@id\"];\n    } catch (_e) {\n      return;\n    }\n    this.reset();\n    this.goToNext({ \"@id\": id });\n  },\n  async onInput() {\n    const formValue = await this.getFormValue();\n    this.change(formValue);\n  },\n  async onChange() {\n    const formValue = await this.getFormValue();\n    if (!this.isCreationForm(formValue) && this.isSavingAutomatically)\n      this.submitForm();\n  },\n  displayErrorMessage(errors2, errorFullName = \"\") {\n    for (const member of errors2) {\n      const errorNextName = Object.values(member)[0];\n      const subErrorName = errorFullName === \"\" ? errorNextName : `${errorFullName}.${errorNextName}`;\n      let errorFieldName = \"\";\n      if (errorFullName) errorFieldName = `${errorFullName}.${errorNextName}`;\n      else errorFieldName = errorNextName;\n      if (errorFieldName) {\n        const formField = this.element.querySelector(\n          `[name=\"${errorFieldName}\"]`\n        );\n        if (formField) {\n          formField.classList.add(\"error\");\n          const errorParagraph = document.createElement(\"p\");\n          if (Array.isArray(Object.values(member)[1]) === true) {\n            for (const error2 of Object.values(member)[1]) {\n              const errorText = document.createElement(\"p\");\n              errorText.textContent = error2;\n              errorParagraph.appendChild(errorText);\n            }\n          } else if (typeof Object.values(member)[1] === \"object\") {\n            for (const value of Object.values(Object.values(member)[1])) {\n              if (Array.isArray(value)) {\n                for (const error2 of value) {\n                  const errorText = document.createElement(\"p\");\n                  errorText.textContent = error2;\n                  errorParagraph.appendChild(errorText);\n                }\n              } else if (typeof value === \"string\") {\n                const errorText = document.createElement(\"p\");\n                errorText.textContent = value;\n                errorParagraph.appendChild(errorText);\n              }\n            }\n          } else {\n            errorParagraph.textContent = Object.values(member)[1];\n          }\n          errorParagraph.classList.add(\"error-message\");\n          formField.appendChild(errorParagraph);\n        }\n      }\n      if (!Array.isArray(Object.values(member)[1]) === true) {\n        const objectErrors = Object.values(member)[1];\n        const subErrors = Object.entries(objectErrors);\n        this.displayErrorMessage(subErrors, subErrorName);\n      }\n    }\n  },\n  empty() {\n  },\n  showError(e2) {\n    const errors2 = Object.entries(e2).filter(\n      (field) => !field[0].startsWith(\"@context\")\n    );\n    this.displayErrorMessage(errors2);\n    const errorTemplate = x`<p>${this.t(\"solid-form.validation-error\")}</p>`;\n    const parentElement = this.element.querySelector(\"[data-id=error]\");\n    if (parentElement) B(errorTemplate, parentElement);\n  },\n  hideError() {\n    const formErrors = this.element.querySelectorAll(\".error-message\");\n    if (formErrors) for (const error2 of formErrors) error2.remove();\n    const errorFields = this.element.querySelectorAll(\".error\");\n    if (errorFields)\n      for (const errorField of errorFields)\n        errorField.classList.remove(\"error\");\n    const parentElement = this.element.querySelector(\"[data-id=error]\");\n    if (parentElement) B(\"\", parentElement);\n  },\n  reset() {\n    if (!this.isNaked) this.element.querySelector(\"form\").reset();\n  },\n  onSubmit(event) {\n    if (!this.isNaked) {\n      event.preventDefault();\n      this.performAction();\n    }\n  },\n  validateModal() {\n    return this.submitForm();\n  },\n  onReset() {\n    if (!this.isNaked) setTimeout(() => this.onInput());\n  },\n  getSubmitTemplate() {\n    return x`\n      <div class=${o$2(this.classSubmitButton)}>\n        ${this.submitWidget === \"button\" ? x`<button type=\"submit\">${this.submitButton || this.t(\"solid-form.submit-button\")}</button>` : x`<input type=\"submit\" value=${this.submitButton || this.t(\"solid-form.submit-button\")}>`}\n      </div>\n    `;\n  },\n  populate: trackRenderAsync(async function() {\n    this.element.oninput = () => this.onInput();\n    this.element.onchange = () => this.onChange();\n    const fields = await this.getFields();\n    const widgetTemplates = await Promise.all(\n      fields.map((field) => this.createWidgetTemplate(field))\n    );\n    const template = x`\n        <div data-id=\"error\"></div>\n        ${!this.isNaked ? x`\n          <form\n            @submit=${this.onSubmit.bind(this)}\n            @reset=${this.onReset.bind(this)}\n          >\n            ${widgetTemplates}\n            ${!this.isSavingAutomatically ? this.getSubmitTemplate() : \"\"}\n            ${this.element.hasAttribute(\"reset\") ? x`<input type=\"reset\" />` : \"\"}\n          </form>\n        ` : x`${widgetTemplates}`}\n        ${this.getModalDialog()}\n      `;\n    B(template, this.element);\n  }, \"SolidForm:populate\")\n};\nSib.register(SolidForm);\nconst SolidLang = {\n  name: \"solid-lang\",\n  use: [],\n  attributes: {\n    lang: {\n      type: String,\n      default: null\n    },\n    dataLabel: {\n      type: String,\n      default: null\n    }\n  },\n  created() {\n    this.render();\n  },\n  languageLoader() {\n    store.selectLanguage(this.lang);\n    location.reload();\n  },\n  render() {\n    const template = x`<button @click=${this.languageLoader.bind(this)}>${this.dataLabel}</button>`;\n    B(template, this.element);\n  }\n};\nSib.register(SolidLang);\nconst SolidMemberAdd = {\n  name: \"solid-member-add\",\n  use: [NextMixin, ValidationMixin, ContextMixin, StoreMixin],\n  attributes: {\n    // The list of users to load\n    rangeUsers: {\n      type: String,\n      default: null,\n      callback: function(newValue, oldValue) {\n        if (newValue !== oldValue) this.planRender();\n      }\n    },\n    addMemberLabel: {\n      type: String,\n      default: \"Add a member\",\n      callback: function(newValue, oldValue) {\n        if (newValue !== oldValue) this.planRender();\n      }\n    },\n    classSubmitButton: {\n      type: String,\n      default: void 0\n    },\n    orderAsc: {\n      type: String,\n      default: void 0\n    }\n  },\n  initialState: {\n    renderPlanned: false\n  },\n  created() {\n    newWidgetFactory(\"solid-form-dropdown-autocompletion\");\n    this.planRender();\n  },\n  planRender() {\n    if (!this.renderPlanned) {\n      this.renderPlanned = true;\n      setTimeout(() => {\n        this.updateDOM();\n        this.renderPlanned = false;\n      });\n    }\n  },\n  addMember(e2) {\n    if (!this.dataSrc || !this.resourceId) return;\n    e2.preventDefault();\n    this.performAction();\n  },\n  async addMembership() {\n    this.currentMembers.push(JSON.parse(this.dataTargetSrc));\n    const currentRes = {\n      \"@context\": this.context,\n      user_set: this.currentMembers\n    };\n    return store.patch(currentRes, this.resourceId).then((response) => {\n      if (!response) {\n        console.warn(\n          `Error while adding user ${this.dataTargetSrc} to group ${this.resourceId}`\n        );\n        return;\n      }\n      this.goToNext(null);\n      const eventData = {\n        detail: { resource: { \"@id\": this.dataSrc } },\n        bubbles: true\n      };\n      this.element.dispatchEvent(new CustomEvent(\"save\", eventData));\n      this.element.dispatchEvent(new CustomEvent(\"memberAdded\", eventData));\n      this.planRender();\n    });\n  },\n  validateModal() {\n    return this.addMembership();\n  },\n  changeSelectedUser(e2) {\n    var _a3;\n    if (!e2.target || !e2.target.firstElementChild) return;\n    this.dataTargetSrc = (_a3 = e2.target.firstElementChild) == null ? void 0 : _a3.value;\n  },\n  async populate() {\n    if (!this.resource) return;\n    const memberPredicate = store.getExpandedPredicate(\n      \"user_set\",\n      normalizeContext(base_context)\n    );\n    if (!memberPredicate) return;\n    this.currentMembers = await this.resource[memberPredicate];\n    if (!Array.isArray(this.currentMembers)) {\n      this.currentMembers = [this.currentMembers];\n    }\n    this.currentMembers = this.currentMembers.map((member) => {\n      return { \"@id\": member[\"@id\"] };\n    });\n    const button = x`\n      <solid-ac-checker data-src=\"${this.dataSrc}\"\n        permission=\"acl:Write\"\n      >\n        <form\n          src=\"${this.dataSrc}\"\n          @submit=\"${this.addMember.bind(this)}\"\n        >\n          <solid-form-dropdown-autocompletion\n            range=\"${this.rangeUsers}\"\n            data-src=\"${this.rangeUsers}\"\n            name=\"users\"\n            @change=\"${this.changeSelectedUser.bind(this)}\"\n            order-asc=\"${o$2(this.orderAsc || \"name\")}\"\n          ></solid-form-dropdown-autocompletion>\n          <div class=${o$2(this.classSubmitButton)}>\n            <button type=\"submit\">\n              ${this.addMemberLabel}\n            </button>\n          </div>\n        </form>\n\n        ${this.getModalDialog()}\n      </solid-ac-checker>\n      `;\n    B(button, this.element);\n  }\n};\nSib.register(SolidMemberAdd);\nconst SolidMemberDelete = {\n  name: \"solid-member-delete\",\n  use: [NextMixin, ValidationMixin, ContextMixin],\n  attributes: {\n    // Data Source being a group URI in that case\n    dataSrc: {\n      type: String,\n      default: null,\n      callback: function() {\n        this.resourceId = this.dataSrc;\n      }\n    },\n    dataLabel: {\n      type: String,\n      default: null,\n      callback: function(newValue, oldValue) {\n        if (newValue !== oldValue) this.planRender();\n      }\n    },\n    // The user id to remove from the group\n    dataTargetSrc: {\n      type: String,\n      default: null,\n      callback: function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          this.planRender();\n        }\n      }\n    },\n    dataUnknownMember: {\n      type: String,\n      default: \"Given user is not a member of this group\",\n      callback: function(newValue, oldValue) {\n        if (newValue !== oldValue) this.planRender();\n      }\n    },\n    classSubmitButton: {\n      type: String,\n      default: void 0\n    }\n  },\n  initialState: {\n    renderPlanned: false\n  },\n  created() {\n    this.planRender();\n  },\n  async populate() {\n    if (!this.resourceId) return;\n    this.resource = await store.getData(this.resourceId);\n    if (!this.resource) return;\n    const memberPredicate = store.getExpandedPredicate(\n      \"user_set\",\n      normalizeContext(base_context)\n    );\n    if (!memberPredicate) return;\n    this.currentMembers = await this.resource[memberPredicate];\n    if (!Array.isArray(this.currentMembers)) {\n      this.currentMembers = [this.currentMembers];\n    }\n    this.currentMembers = this.currentMembers.map((member) => {\n      return { \"@id\": member[\"@id\"] };\n    });\n    this.isMember = this.currentMembers ? this.currentMembers.some((member) => member[\"@id\"] === this.dataTargetSrc) : false;\n  },\n  planRender() {\n    if (!this.renderPlanned) {\n      this.renderPlanned = true;\n      setTimeout(() => {\n        this.render();\n        this.renderPlanned = false;\n      });\n    }\n  },\n  removeMember(e2) {\n    e2.stopPropagation();\n    if (!this.dataSrc) return;\n    this.performAction();\n  },\n  async deleteMembership() {\n    const userSet = this.currentMembers.filter((value) => {\n      const userId = value[\"@id\"];\n      if (userId === this.dataTargetSrc) return false;\n      return true;\n    });\n    const currentRes = {\n      \"@context\": this.context,\n      user_set: userSet\n    };\n    return store.patch(currentRes, this.dataSrc).then((response) => {\n      if (!response) {\n        console.warn(\n          `Error while removing user ${this.dataTargetSrc} from group ${this.dataSrc}`\n        );\n        return;\n      }\n      this.goToNext(null);\n      const eventData = {\n        detail: { resource: { \"@id\": this.dataSrc } },\n        bubbles: true\n      };\n      this.element.dispatchEvent(new CustomEvent(\"save\", eventData));\n      this.element.dispatchEvent(new CustomEvent(\"memberRemoved\", eventData));\n      this.planRender();\n    });\n  },\n  validateModal() {\n    return this.deleteMembership();\n  },\n  update() {\n    this.render();\n  },\n  render: trackRenderAsync(async function() {\n    await this.populate();\n    let button = x``;\n    if (this.isMember) {\n      button = x`\n        <solid-ac-checker data-src=\"${this.dataSrc}\"\n              permission=\"acl:Write\"\n              class=${o$2(this.classSubmitButton)}\n            >\n          <button\n            @click=${this.removeMember.bind(this)}>\n              ${this.dataLabel || this.t(\"solid-delete-member.button\")}\n          </button>\n          ${this.getModalDialog()}\n        </solid-ac-checker>\n        `;\n    } else {\n      button = x`<span>${this.dataUnknownMember || this.t(\"solid-member-unknown.span\")}</span>`;\n    }\n    B(button, this.element);\n  }, \"SolidMemberDelete:render\")\n};\nSib.register(SolidMemberDelete);\nconst SolidMembership = {\n  name: \"solid-membership\",\n  use: [NextMixin, ValidationMixin, ContextMixin],\n  attributes: {\n    dataSrc: {\n      type: String,\n      default: null,\n      callback: function() {\n        this.resourceId = this.dataSrc;\n      }\n    },\n    dataTargetSrc: {\n      type: String,\n      default: null\n    },\n    dataLeaveLabel: {\n      type: String,\n      default: null,\n      callback: function(newValue, oldValue) {\n        if (newValue !== oldValue) this.planRender();\n      }\n    },\n    dataJoinLabel: {\n      type: String,\n      default: null,\n      callback: function(newValue, oldValue) {\n        if (newValue !== oldValue) this.planRender();\n      }\n    },\n    classSubmitButton: {\n      type: String,\n      default: void 0\n    }\n  },\n  initialState: {\n    renderPlanned: false\n  },\n  created() {\n    this.planRender();\n  },\n  async populate() {\n    if (!store.session) return;\n    const currentUserSession = await store.session;\n    if (!currentUserSession) return;\n    if (!this.dataTargetSrc) this.userId = await currentUserSession.webId;\n    else this.userId = this.dataTargetSrc;\n    if (!this.userId) return;\n    this.resource = await store.getData(this.resourceId);\n    if (!this.resource) return;\n    const memberPredicate = store.getExpandedPredicate(\n      \"user_set\",\n      normalizeContext(base_context)\n    );\n    if (!memberPredicate) return;\n    this.currentMembers = await this.resource[memberPredicate];\n    if (!Array.isArray(this.currentMembers)) {\n      this.currentMembers = [this.currentMembers];\n    }\n    this.currentMembers = this.currentMembers.map((member) => {\n      return { \"@id\": member[\"@id\"] };\n    });\n    this.isMember = this.currentMembers ? this.currentMembers.some((member) => member[\"@id\"] === this.userId) : false;\n  },\n  planRender() {\n    if (!this.renderPlanned) {\n      this.renderPlanned = true;\n      setTimeout(() => {\n        this.render();\n        this.renderPlanned = false;\n      });\n    }\n  },\n  changeMembership(e2) {\n    e2.stopPropagation();\n    if (!this.dataSrc) return;\n    this.performAction();\n  },\n  async joinGroup() {\n    this.currentMembers.push({ \"@id\": this.userId });\n    const currentRes = {\n      \"@context\": this.context,\n      user_set: this.currentMembers\n    };\n    return store.patch(currentRes, this.dataSrc).then((response) => {\n      if (!response) {\n        console.warn(\n          `Error while joining group ${this.dataSrc} for user ${this.userId}`\n        );\n        return;\n      }\n      this.goToNext(null);\n      const eventData = {\n        detail: { resource: { \"@id\": this.dataSrc } },\n        bubbles: true\n      };\n      this.element.dispatchEvent(new CustomEvent(\"save\", eventData));\n      this.element.dispatchEvent(new CustomEvent(\"memberAdded\", eventData));\n      this.planRender();\n    });\n  },\n  async leaveGroup() {\n    const userSet = this.currentMembers.filter((value) => {\n      const userId = value[\"@id\"];\n      if (userId === this.userId) return false;\n      return true;\n    });\n    const currentRes = {\n      \"@context\": this.context,\n      user_set: userSet\n    };\n    return store.patch(currentRes, this.dataSrc).then((response) => {\n      if (!response) {\n        console.warn(\n          `Error while leaving group ${this.dataSrc} for user ${this.userId}`\n        );\n        return;\n      }\n      this.goToNext(null);\n      const eventData = {\n        detail: { resource: { \"@id\": this.dataSrc } },\n        bubbles: true\n      };\n      this.element.dispatchEvent(new CustomEvent(\"save\", eventData));\n      this.element.dispatchEvent(new CustomEvent(\"memberRemoved\", eventData));\n      this.planRender();\n    });\n  },\n  switchMembership() {\n    if (this.isMember) {\n      return this.leaveGroup();\n    }\n    return this.joinGroup();\n  },\n  validateModal() {\n    return this.switchMembership();\n  },\n  update() {\n    this.render();\n  },\n  render: trackRenderAsync(async function() {\n    await this.populate();\n    let button = x``;\n    if (this.isMember) {\n      button = x`\n          <solid-ac-checker data-src=\"${this.dataSrc}\"\n                permission=\"acl:Read\"\n                class=${o$2(`${this.classSubmitButton ? `leave ${this.classSubmitButton}` : \"leave\"}`)}\n              >\n            <button @click=${this.changeMembership.bind(this)}>${this.dataLeaveLabel || this.t(\"solid-leave-group.button\")}</button>\n            ${this.getModalDialog()}\n          </solid-ac-checker>\n          `;\n    } else {\n      button = x`\n          <solid-ac-checker data-src=\"${this.dataSrc}\"\n                permission=\"acl:Read\"\n                class=${o$2(`${this.classSubmitButton ? `join ${this.classSubmitButton}` : \"join\"}`)}\n              >\n            <button @click=${this.changeMembership.bind(this)}>${this.dataJoinLabel || this.t(\"solid-join-group.button\")}</button>\n            ${this.getModalDialog()}\n          </solid-ac-checker>\n          `;\n    }\n    B(button, this.element);\n  }, \"SolidMembership:render\")\n};\nSib.register(SolidMembership);\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst i$1 = (o2) => null === o2 || \"object\" != typeof o2 && \"function\" != typeof o2, f$1 = (o2) => void 0 === o2.strings;\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst s$1 = (i3, t2) => {\n  var _a3;\n  const e2 = i3._$AN;\n  if (void 0 === e2) return false;\n  for (const i4 of e2) (_a3 = i4._$AO) == null ? void 0 : _a3.call(i4, t2, false), s$1(i4, t2);\n  return true;\n}, o = (i3) => {\n  let t2, e2;\n  do {\n    if (void 0 === (t2 = i3._$AM)) break;\n    e2 = t2._$AN, e2.delete(i3), i3 = t2;\n  } while (0 === (e2 == null ? void 0 : e2.size));\n}, r2 = (i3) => {\n  for (let t2; t2 = i3._$AM; i3 = t2) {\n    let e2 = t2._$AN;\n    if (void 0 === e2) t2._$AN = e2 = /* @__PURE__ */ new Set();\n    else if (e2.has(i3)) break;\n    e2.add(i3), c$1(t2);\n  }\n};\nfunction h$1(i3) {\n  void 0 !== this._$AN ? (o(this), this._$AM = i3, r2(this)) : this._$AM = i3;\n}\nfunction n$1(i3, t2 = false, e2 = 0) {\n  const r3 = this._$AH, h2 = this._$AN;\n  if (void 0 !== h2 && 0 !== h2.size) if (t2) if (Array.isArray(r3)) for (let i4 = e2; i4 < r3.length; i4++) s$1(r3[i4], false), o(r3[i4]);\n  else null != r3 && (s$1(r3, false), o(r3));\n  else s$1(this, i3);\n}\nconst c$1 = (i3) => {\n  i3.type == t.CHILD && (i3._$AP ?? (i3._$AP = n$1), i3._$AQ ?? (i3._$AQ = h$1));\n};\nclass f extends i$2 {\n  constructor() {\n    super(...arguments), this._$AN = void 0;\n  }\n  _$AT(i3, t2, e2) {\n    super._$AT(i3, t2, e2), r2(this), this.isConnected = i3._$AU;\n  }\n  _$AO(i3, t2 = true) {\n    var _a3, _b;\n    i3 !== this.isConnected && (this.isConnected = i3, i3 ? (_a3 = this.reconnected) == null ? void 0 : _a3.call(this) : (_b = this.disconnected) == null ? void 0 : _b.call(this)), t2 && (s$1(this, i3), o(this));\n  }\n  setValue(t2) {\n    if (f$1(this._$Ct)) this._$Ct._$AI(t2, this);\n    else {\n      const i3 = [...this._$Ct._$AH];\n      i3[this._$Ci] = t2, this._$Ct._$AI(i3, this, 0);\n    }\n  }\n  disconnected() {\n  }\n  reconnected() {\n  }\n}\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nclass s {\n  constructor(t2) {\n    this.Y = t2;\n  }\n  disconnect() {\n    this.Y = void 0;\n  }\n  reconnect(t2) {\n    this.Y = t2;\n  }\n  deref() {\n    return this.Y;\n  }\n}\nclass i2 {\n  constructor() {\n    this.Z = void 0, this.q = void 0;\n  }\n  get() {\n    return this.Z;\n  }\n  pause() {\n    this.Z ?? (this.Z = new Promise((t2) => this.q = t2));\n  }\n  resume() {\n    var _a3;\n    (_a3 = this.q) == null ? void 0 : _a3.call(this), this.Z = this.q = void 0;\n  }\n}\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst n2 = (t2) => !i$1(t2) && \"function\" == typeof t2.then, h = 1073741823;\nclass c extends f {\n  constructor() {\n    super(...arguments), this._$Cwt = h, this._$Cbt = [], this._$CK = new s(this), this._$CX = new i2();\n  }\n  render(...s2) {\n    return s2.find((t2) => !n2(t2)) ?? T;\n  }\n  update(s2, i3) {\n    const e2 = this._$Cbt;\n    let r3 = e2.length;\n    this._$Cbt = i3;\n    const o2 = this._$CK, c2 = this._$CX;\n    this.isConnected || this.disconnected();\n    for (let t2 = 0; t2 < i3.length && !(t2 > this._$Cwt); t2++) {\n      const s3 = i3[t2];\n      if (!n2(s3)) return this._$Cwt = t2, s3;\n      t2 < r3 && s3 === e2[t2] || (this._$Cwt = h, r3 = 0, Promise.resolve(s3).then(async (t3) => {\n        for (; c2.get(); ) await c2.get();\n        const i4 = o2.deref();\n        if (void 0 !== i4) {\n          const e3 = i4._$Cbt.indexOf(s3);\n          e3 > -1 && e3 < i4._$Cwt && (i4._$Cwt = e3, i4.setValue(t3));\n        }\n      }));\n    }\n    return T;\n  }\n  disconnected() {\n    this._$CK.disconnect(), this._$CX.pause();\n  }\n  reconnected() {\n    this._$CK.reconnect(this), this._$CX.resume();\n  }\n}\nconst m = e$1(c);\nconst SolidTable = {\n  name: \"solid-table\",\n  use: [\n    WidgetMixin,\n    ListMixin,\n    StoreMixin,\n    PaginateMixin,\n    GrouperMixin,\n    CounterMixin,\n    HighlighterMixin,\n    FilterMixin,\n    SorterMixin,\n    RequiredMixin,\n    FederationMixin\n  ],\n  attributes: {\n    defaultWidget: {\n      type: String,\n      default: \"solid-display-value\"\n    },\n    selectable: {\n      type: String,\n      default: null\n    },\n    header: {\n      type: String,\n      default: null\n    }\n  },\n  initialState: {\n    resources: []\n  },\n  get parentElement() {\n    return \"table\";\n  },\n  get defaultMultipleWidget() {\n    return \"solid-multiple\";\n  },\n  get defaultSetWidget() {\n    return \"solid-set-default\";\n  },\n  get selectedLines() {\n    if (this.selectable === null) return [];\n    return Array.from(\n      this.element.querySelectorAll(\"input[data-selection]:checked\")\n    ).map((e2) => {\n      var _a3;\n      return (_a3 = e2 == null ? void 0 : e2.closest(\"[data-resource]\")) == null ? void 0 : _a3.getAttribute(\"data-resource\");\n    });\n  },\n  /**\n   * Select all lines\n   * @param e - event\n   */\n  selectAll(e2) {\n    if (this.selectable === null) return;\n    for (const checkbox of Array.from(\n      this.element.querySelectorAll(\n        \"input[data-selection]\"\n      )\n    )) {\n      checkbox.checked = e2.target.checked;\n    }\n  },\n  /**\n   * Unselect all lines\n   */\n  unselectAll() {\n    if (this.selectable === null) return;\n    for (const checkbox of Array.from(\n      this.element.querySelectorAll(\n        \"input[data-selection]\"\n      )\n    )) {\n      checkbox.checked = false;\n    }\n  },\n  /**\n   * Select specific lines\n   * @param lines - array of selected lines\n   */\n  selectLines(lines) {\n    if (this.selectable === null || lines.length === 0) return;\n    for (const line of lines) {\n      const checkbox = this.element.querySelector(\n        `[data-resource=\"${line}\"] input[data-selection]`\n      );\n      if (checkbox) checkbox.checked = true;\n    }\n  },\n  /**\n   * Create a widget for the field or a form if it's editable\n   * @param field\n   * @param resource\n   */\n  createCellWidget(field, resource) {\n    if (!this.element.hasAttribute(`editable-${field}`))\n      return this.createWidgetTemplate(field, resource, true);\n    const attributes = {};\n    const formWidgetAttributes = [\n      // attributes to give to the form widget\n      \"range\",\n      \"enum\",\n      \"placeholder\",\n      \"required\",\n      \"autocomplete\",\n      \"option-label\",\n      \"option-value\",\n      \"min\",\n      \"max\",\n      \"pattern\",\n      \"title\",\n      \"widget\"\n    ];\n    for (const attr of formWidgetAttributes)\n      this.addToAttributes(`${attr}-${field}`, `${attr}-${field}`, attributes);\n    const formAttributes = [\n      // attributes to give to the form\n      \"class\",\n      \"submit-button\",\n      \"next\"\n    ];\n    for (const attr of formAttributes)\n      this.addToAttributes(`${attr}-${field}`, attr, attributes);\n    return x`\n      <solid-form\n        data-src=\"${resource[\"@id\"]}\"\n        fields=\"${field}\"\n        partial\n        autosave\n        ...=${spread(attributes)}\n      ></solid-form>\n    `;\n  },\n  /**\n   * Creates a header line for the table\n   * @param fields\n   */\n  getHeader(fields) {\n    const template = x`\n      <tr>\n        ${this.selectable !== null ? x`<th><input type=\"checkbox\" @change=\"${this.selectAll.bind(this)}\" /></th>` : \"\"}\n        ${fields.map((field) => x`<th>${this.element.hasAttribute(`label-${field}`) ? this.element.getAttribute(`label-${field}`) : field}</th>`)}\n      </tr>\n    `;\n    return template;\n  },\n  /**\n   * Returns template of a child element (resource)\n   * @param resourceId\n   * @param attributes\n   */\n  async getChildTemplate(resourceId, fields) {\n    const resource = await store.getData(resourceId, this.context);\n    const template = x`\n      <tr data-resource=\"${resourceId}\">\n        ${this.selectable !== null ? x`<td><input type=\"checkbox\" data-selection /></td>` : \"\"}\n        ${fields.map((field) => x`<td>${m(this.createCellWidget(field, resource))}</td>`)}\n      </tr>\n    `;\n    return template;\n  },\n  /**\n   * Creates and render the content of a single element (resource)\n   * @param parent\n   */\n  async appendSingleElt(parent) {\n    const fields = await this.getFields();\n    const template = x`${this.header !== null ? this.getHeader(fields) : \"\"}${m(this.getChildTemplate(this.resource[\"@id\"], fields))}`;\n    B(template, parent);\n  },\n  /**\n   * @override listMixin method to use litHtml\n   *\n   * Render resources from a container\n   * @param resources\n   * @param listPostProcessors\n   * @param div\n   * @param context\n   */\n  renderDOM: trackRenderAsync(async function(resources, listPostProcessors, div, context) {\n    const selectedLines = [...this.selectedLines];\n    const fields = await this.getFields();\n    const childTemplates = await Promise.all(\n      resources.map((r3) => r3 ? this.getChildTemplate(r3[\"@id\"], fields) : null)\n    );\n    const template = x`${this.header !== null ? this.getHeader(fields) : \"\"}${childTemplates}`;\n    B(template, div);\n    this.unselectAll();\n    this.selectLines(selectedLines);\n    const nextProcessor = listPostProcessors.shift();\n    if (nextProcessor)\n      await nextProcessor(resources, listPostProcessors, div, context);\n  }, \"SolidTable:renderDom\")\n};\nSib.register(SolidTable);\nconst SolidWidget = {\n  name: \"solid-widget\",\n  use: [],\n  attributes: {\n    name: {\n      type: String,\n      default: \"\",\n      required: true\n    }\n  },\n  attached() {\n    if (!this.name) return;\n    const template = this.template;\n    const newWidget = {\n      name: this.name,\n      class: this.template,\n      use: [BaseWidgetMixin, StoreMixin, FormMixin, ActionMixin],\n      attributes: {\n        label: {\n          type: String,\n          default: \"\",\n          callback: function(newValue) {\n            this.addToAttributes(newValue, \"label\");\n          }\n        }\n      },\n      get template() {\n        return () => this.evalTemplate(template).then(\n          (tpl) => x`${o$1(tpl)}`\n        );\n      },\n      evalTemplate(template2) {\n        const tpl = evalTemplateString(template2, {\n          name: this.name,\n          value: this.value || this.resource || \"\",\n          src: this.src,\n          label: this.label,\n          targetSrc: this.targetSrc || \"\"\n        });\n        return tpl;\n      },\n      async templateToDOM(template2) {\n        B(await template2, this.element);\n      },\n      // For form widgets, handle nested solid-form\n      // TODO: type custom elements\n      getValueFromElement(element) {\n        if (element.tagName === \"SOLID-FORM\") return element.component.value;\n        if (element.component) return element.component.getValue();\n        return element.value;\n      },\n      updateDOM() {\n        this.planRender();\n      }\n    };\n    Sib.register(newWidget);\n  },\n  get template() {\n    return this.element.querySelector(\"template:not([data-range])\").innerHTML;\n  },\n  get childTemplate() {\n    const child = this.element.querySelector(\"template[data-range]\");\n    return child ? child.innerHTML : null;\n  }\n};\nSib.register(SolidWidget);\nconst index = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  AltMixin,\n  EditableMixin,\n  FilterRangeFormMixin,\n  FormCheckboxMixin,\n  FormCheckboxesMixin,\n  FormDropdownMixin,\n  FormFileMixin,\n  FormLengthMixin,\n  FormMinMaxMixin,\n  FormMixin,\n  FormNumberMixin,\n  FormRadioMixin,\n  FormStepMixin,\n  LinkTextMixin,\n  MultipleFormMixin,\n  MultipleselectFormMixin,\n  PatternMixin,\n  RangeMixin,\n  SetMixin,\n  ValueRichtextMixin\n}, Symbol.toStringTag, { value: \"Module\" }));\nclass SolidTemplateElement extends HTMLElement {\n  constructor() {\n    super();\n    __publicField(this, \"renderPlanned\", false);\n    __publicField(this, \"strings\", {});\n    __publicField(this, \"translationsPath\", null);\n    __publicField(this, \"translationsFetched\", false);\n    __publicField(this, \"props\", {});\n    this.initProps();\n  }\n  static get observedAttributes() {\n    return Object.values(SolidTemplateElement.propsDefinition);\n  }\n  static get propsDefinition() {\n    return {};\n  }\n  initProps() {\n    this.props = {};\n    for (const key in this.constructor.propsDefinition) {\n      this.props[key] = void 0;\n    }\n  }\n  updateProps() {\n    const declaredAttributes = [];\n    for (const key in this.constructor.propsDefinition) {\n      const def = this.constructor.propsDefinition[key];\n      if (typeof def === \"string\") {\n        this.props[key] = this.hasAttribute(def) ? this.getAttribute(def) : void 0;\n        declaredAttributes.push(def);\n      } else if (typeof def === \"object\" && def.attribute && typeof def.attribute === \"string\") {\n        this.props[key] = this.hasAttribute(def.attribute) ? this.getAttribute(def.attribute) : def.default || void 0;\n        declaredAttributes.push(def.attribute);\n      }\n    }\n    for (const attr of this.attributes) {\n      if (!declaredAttributes.includes(attr.name)) {\n        this.props[this._camelize(attr.name)] = attr.value || void 0;\n      }\n    }\n  }\n  /**\n   * Define the path folder of translations files\n   * @param path\n   */\n  setTranslationsPath(path) {\n    this.translationsPath = path;\n  }\n  /**\n   * Fetch all localized strings\n   */\n  async fetchLocaleStrings() {\n    if (this.translationsFetched) return;\n    const filesToFetch = [];\n    if (this.translationsPath)\n      filesToFetch.push(this.fetchTranslationFile(this.translationsPath));\n    const extraTranslationsPath = this.getAttribute(\"extra-translations-path\");\n    if (extraTranslationsPath)\n      filesToFetch.push(this.fetchTranslationFile(extraTranslationsPath));\n    return Promise.all(filesToFetch).then((res) => {\n      this.translationsFetched = true;\n      this.strings = Object.assign({}, ...res);\n    });\n  }\n  /**\n   * Fetch the translation file from [path]\n   */\n  async fetchTranslationFile(path) {\n    const ln = this.getLocale();\n    const fullPath = `${path}/${ln}.json`;\n    return fetch(fullPath).then((result) => {\n      if (result.ok) {\n        return result.json().catch(\n          () => console.error(\n            `Error while parsing the translation file: ${fullPath}`\n          )\n        );\n      }\n    }).catch(\n      () => console.error(\n        `Error while retrieving the translation file: ${fullPath}`\n      )\n    );\n  }\n  /**\n   * Returns current locale of app\n   */\n  getLocale() {\n    return localStorage.getItem(\"language\") || window.navigator.language.slice(0, 2);\n  }\n  /**\n   * Return localized string for [key]\n   * @param key\n   */\n  localize(key) {\n    return this.strings[key] || key;\n  }\n  attributeChangedCallback() {\n    this.updateProps();\n    this.planRender();\n  }\n  connectedCallback() {\n    this.updateProps();\n    this.planRender();\n  }\n  /**\n   * Plan a render if none is already waiting to prevent multi re-renders\n   */\n  planRender() {\n    if (!this.renderPlanned) {\n      this.renderPlanned = true;\n      setTimeout(() => {\n        this.render();\n        this.renderPlanned = false;\n      });\n    }\n  }\n  renderCallback() {\n  }\n  render() {\n    this.fetchLocaleStrings().finally(() => {\n      this.innerHTML = this.template(this.props);\n      this.renderCallback();\n    });\n  }\n  template() {\n    return \"\";\n  }\n  _camelize(str) {\n    return str.replace(/\\W+(.)/g, (_match, chr) => chr.toUpperCase());\n  }\n}\nclass BaseWidget extends HTMLElement {\n  constructor() {\n    super(...arguments);\n    __publicField(this, \"src\");\n    __publicField(this, \"multiple\");\n    __publicField(this, \"editable\");\n    __publicField(this, \"required\");\n    __publicField(this, \"resourceId\");\n    __publicField(this, \"_value\");\n    __publicField(this, \"_range\");\n    __publicField(this, \"_context\");\n    __publicField(this, \"_subscriptions\", /* @__PURE__ */ new Map());\n  }\n  connectedCallback() {\n    this.render();\n  }\n  disconnectedCallback() {\n    for (const subscription of this._subscriptions.values()) {\n      PubSub.unsubscribe(subscription);\n    }\n  }\n  async render() {\n    var _a3;\n    this.innerHTML = await evalTemplateString(this.template, {\n      src: this.src,\n      name: this.name,\n      label: this.label,\n      placeholder: this.placeholder,\n      value: this.value,\n      id: ((_a3 = this._value) == null ? void 0 : _a3[\"@id\"]) || \"\",\n      escapedValue: this.escapedValue,\n      range: await this.htmlRange,\n      multiple: this.multiple,\n      editable: this.editable === \"\",\n      required: this.required === \"\"\n    });\n    this.addEditButtons();\n    this.initChangeEvents();\n  }\n  get label() {\n    return this.hasAttribute(\"label\") ? this.getAttribute(\"label\") : this.name;\n  }\n  set label(label) {\n    if (label != null) this.setAttribute(\"label\", label);\n    this.render();\n  }\n  get placeholder() {\n    return this.hasAttribute(\"placeholder\") ? this.getAttribute(\"placeholder\") : this.label;\n  }\n  set placeholder(placeholder) {\n    if (placeholder != null) this.setAttribute(\"placeholder\", placeholder);\n    this.render();\n  }\n  get name() {\n    return this.getAttribute(\"name\");\n  }\n  set name(name) {\n    if (name) this.setAttribute(\"name\", name);\n    this.render();\n  }\n  get value() {\n    if (this.dataHolder) {\n      const values = this.dataHolder.map((element) => {\n        if (element instanceof HTMLInputElement && element.type === \"checkbox\")\n          return element.checked;\n        return this.getValueHolder(element).value;\n      });\n      return values.length === 1 ? values[0] : values;\n    }\n    return this._value || \"\";\n  }\n  set value(value) {\n    this._value = value;\n    if (this._value == null) return;\n    if (this.dataHolder && this.dataHolder.length === 1) {\n      const element = this.getValueHolder(this.dataHolder[0]);\n      if (element.type === \"checkbox\") {\n        element.checked = value;\n      } else {\n        element.value = value;\n      }\n      if (element.dispatchEvent) element.dispatchEvent(new Event(\"change\"));\n    } else if (this.dataHolder && this.dataHolder.length > 1) {\n      this.dataHolder.forEach((el, index2) => {\n        const element = this.getValueHolder(el);\n        if (element.type === \"checkbox\") {\n          element.checked = value ? value[index2] : \"\";\n        } else {\n          element.value = value ? value[index2] : \"\";\n        }\n        element.dispatchEvent(new Event(\"change\"));\n      });\n    }\n    this.render();\n  }\n  get \"each-label\"() {\n    return this.getAttribute(\"each-label\") || \"\";\n  }\n  set \"each-label\"(label) {\n    this.setAttribute(\"each-label\", label);\n  }\n  set \"add-label\"(label) {\n    this.setAttribute(\"add-label\", label);\n  }\n  set \"remove-label\"(label) {\n    this.setAttribute(\"remove-label\", label);\n  }\n  get dataHolder() {\n    const widgetDataHolders = Array.from(\n      this.querySelectorAll(\"[data-holder]\")\n    ).filter((element) => {\n      const dataHolderAncestor = element.parentElement ? element.parentElement.closest(\"[data-holder]\") : null;\n      return dataHolderAncestor === this || !dataHolderAncestor || !this.contains(dataHolderAncestor);\n    });\n    return widgetDataHolders.length > 0 ? widgetDataHolders : null;\n  }\n  get template() {\n    return \"\";\n  }\n  get childTemplate() {\n    return \"\";\n  }\n  get escapedValue() {\n    return `${this.value}`.replace(/&/g, \"&amp;\").replace(/'/g, \"&apos;\").replace(/\"/g, \"&quot;\");\n  }\n  set context(value) {\n    this._context = value;\n  }\n  get context() {\n    return this._context || {};\n  }\n  get range() {\n    return this.fetchSources(this._range);\n  }\n  set range(range) {\n    (async () => {\n      this._listen(range, async () => {\n        this._range = await store.getData(range, this.context);\n      });\n      this._range = await store.getData(range, this.context);\n      this.render();\n    })();\n  }\n  async fetchSources(resource) {\n    var _a3;\n    const data = resource[\"listPredicate\"];\n    if (!data) return null;\n    const resources = [];\n    let index2 = 0;\n    for (let res of data) {\n      if (!res) {\n        try {\n          const resourceId = data[index2][\"@id\"];\n          res = await store.getData(resourceId, this.context);\n        } catch {\n          continue;\n        }\n      }\n      if ((_a3 = res.isContainer) == null ? void 0 : _a3.call(res)) {\n        const resourcesFromContainer = await store.getData(\n          res[\"@id\"],\n          this.context\n        );\n        this._listen(res[\"@id\"]);\n        if (resourcesFromContainer) {\n          resources.push(...resourcesFromContainer[\"listPredicate\"]);\n        }\n      } else {\n        resources.push(res);\n      }\n      index2++;\n    }\n    return resources;\n  }\n  async htmlRange() {\n    var _a3, _b;\n    let htmlRange = \"\";\n    const rangeResources = await this.range;\n    if (!rangeResources) return;\n    for await (let element of rangeResources) {\n      element = await store.getData(element[\"@id\"], this.context);\n      this._listen(element[\"@id\"]);\n      let selected;\n      if ((_b = (_a3 = this._value) == null ? void 0 : _a3.isContainer) == null ? void 0 : _b.call(_a3)) {\n        selected = false;\n        for await (const value of this._value[\"listPredicate\"]) {\n          if (value[\"@id\"] === element[\"@id\"]) {\n            selected = true;\n            break;\n          }\n        }\n      } else {\n        selected = this._value ? this._value[\"@id\"] === element[\"@id\"] : false;\n      }\n      htmlRange += await evalTemplateString(this.childTemplate, {\n        name: await element.name,\n        id: element[\"@id\"],\n        selected\n      });\n    }\n    return htmlRange || \"\";\n  }\n  getValueHolder(element) {\n    return element.component ? element.component : element;\n  }\n  subscribe(event) {\n    this._listen(event);\n  }\n  _listen(id, callback = () => {\n  }) {\n    if (!this._subscriptions.get(id)) {\n      this._subscriptions.set(\n        id,\n        PubSub.subscribe(id, async () => {\n          await callback();\n          this.render();\n        })\n      );\n    }\n  }\n  // Editable widgets\n  addEditButtons() {\n    const editableField = this.querySelector(\"[data-editable]\");\n    if (editableField) {\n      const editButton = document.createElement(\"button\");\n      editButton.innerText = \"Modifier\";\n      editButton.onclick = () => this.activateEditableField(editableField, editButton);\n      editableField.insertAdjacentElement(\"afterend\", editButton);\n      editableField.addEventListener(\n        \"focusout\",\n        () => this.save(editableField, editButton)\n      );\n    }\n  }\n  activateEditableField(editableField, editButton) {\n    editableField.setAttribute(\"contenteditable\", \"true\");\n    editableField.focus();\n    editButton.setAttribute(\"disabled\", \"disabled\");\n  }\n  /**\n   * Dispatch change events of data holders from the current widget\n   */\n  initChangeEvents() {\n    if (this.dataHolder) {\n      const event = new Event(\"change\", { bubbles: true });\n      for (const element of this.dataHolder) {\n        element.addEventListener(\"change\", (e2) => {\n          e2.preventDefault();\n          e2.stopPropagation();\n          this.dispatchEvent(event);\n        });\n      }\n    }\n  }\n  save(editableField, editButton) {\n    editableField.setAttribute(\"contenteditable\", \"false\");\n    editButton.removeAttribute(\"disabled\");\n    if (!this.name) return;\n    const resource = {};\n    resource[this.name] = editableField.innerText;\n    resource[\"@context\"] = this.context;\n    if (this.resourceId && resource) store.patch(resource, this.resourceId);\n  }\n}\nconst widgetFactory = (tagName, customTemplate, childTemplate = \"\", callback) => {\n  const registered = customElements.get(tagName);\n  if (registered) return registered;\n  const cls = class extends BaseWidget {\n    async render() {\n      await super.render();\n      if (callback) callback(this);\n    }\n    get template() {\n      return customTemplate;\n    }\n    get childTemplate() {\n      return childTemplate;\n    }\n  };\n  defineComponent(tagName, cls);\n  return cls;\n};\nexport {\n  index$4 as AttributeMixins,\n  BaseWidgetMixin,\n  index$3 as CallbackMixins,\n  CounterMixin,\n  FederationMixin,\n  FilterMixin,\n  GrouperMixin,\n  k as Helpers,\n  HighlighterMixin,\n  ListMixin,\n  NextMixin,\n  PaginateMixin,\n  RequiredMixin,\n  Sib,\n  SolidAcChecker,\n  SolidDelete,\n  SolidDisplay,\n  SolidForm,\n  SolidFormSearch,\n  SolidLang,\n  SolidMemberAdd,\n  SolidMemberDelete,\n  SolidMembership,\n  SolidTable,\n  SolidTemplateElement,\n  SolidWidget,\n  SorterMixin,\n  StoreMixin,\n  index$2 as TemplateAdditionMixins,\n  index$1 as Templates,\n  index as TemplatesDependenciesMixins,\n  TranslationMixin,\n  ValidationMixin,\n  WidgetMixin,\n  base_context as baseContext,\n  x as html,\n  o$2 as ifDefined,\n  newWidgetFactory,\n  B as render,\n  store,\n  o$1 as unsafeHTML,\n  m as until,\n  widgetFactory\n};\n"]}