{"version":3,"file":"index.mjs","sources":["../node_modules/ts-browser-helpers/dist/bundle.esm.js","../node_modules/tweakpane/dist/tweakpane.js","../node_modules/uiconfig.js/dist/index.js","../src/tpUtils.ts","../src/tpGenerators.ts","../src/tpGeneratorsThree.ts","../src/UiConfigRendererTweakpane.ts","../src/index.ts"],"sourcesContent":["/**\n * @license\n * ts-browser-helpers v0.16.0\n * Copyright 2022-2024 repalash <palash@shaders.app>\n * MIT License\n * See ./dependencies.txt for bundled third-party dependencies and licenses.\n */\nclass I {\n  constructor() {\n    this._eventListeners = {}, this.dispatchEvent = this.dispatchEvent.bind(this), this.addEventListener = this.addEventListener.bind(this), this.removeEventListener = this.removeEventListener.bind(this), this.hasEventListener = this.hasEventListener.bind(this);\n  }\n  addEventListener(e, t) {\n    const i = this._eventListeners;\n    i[e] === void 0 && (i[e] = []), i[e].includes(t) || i[e].push(t);\n  }\n  hasEventListener(e, t) {\n    const i = this._eventListeners;\n    return i[e] !== void 0 && i[e].includes(t);\n  }\n  removeEventListener(e, t) {\n    const r = this._eventListeners[e];\n    if (r !== void 0) {\n      const s = r.indexOf(t);\n      s !== -1 && r.splice(s, 1);\n    }\n  }\n  dispatchEvent(e) {\n    const i = this._eventListeners[e.type];\n    if (i !== void 0) {\n      e.target = this;\n      const r = i.slice(0);\n      for (let s = 0, o = r.length; s < o; s++) r[s].call(this, e);\n    }\n  }\n}\nasync function X(n) {\n  return new Promise((e) => setTimeout(e, Math.max(0, n)));\n}\nfunction g() {\n  return (typeof performance > \"u\" ? Date : performance).now();\n}\nclass Z extends I {\n  constructor() {\n    super(...arguments), this._onPointerDown = (e) => {\n      if (e.button !== 0 || !this._element) return;\n      this._pointerUp = void 0;\n      const t = e.clientX / this._element.clientWidth * 2 - 1, i = -(e.clientY / this._element.clientHeight) * 2 + 1, r = g();\n      this._pointerDown = { x: t, y: i, time: r }, this._pointer = this._pointerDown, this.dispatchEvent({ type: \"dragStart\", pointer: this._pointerDown });\n    }, this._onPointerMove = (e) => {\n      if (!this._pointerDown || !this._pointer || !this._element) return;\n      const t = e.clientX / this._element.clientWidth * 2 - 1, i = -(e.clientY / this._element.clientHeight) * 2 + 1, r = g();\n      this.dispatchEvent({\n        type: \"drag\",\n        pointer: this._pointer,\n        drag: { x: t - this._pointerDown.x, y: i - this._pointerDown.y, time: r - this._pointerDown.time },\n        delta: { x: t - this._pointer.x, y: i - this._pointer.y, time: r - this._pointer.time }\n      }), this._pointer = { x: t, y: i, time: g() }, e.buttons % 2 === 0 && this._onPointerUp(e);\n    }, this._onPointerUp = (e) => {\n      if (e.button !== 0 || !this._pointerDown || !this._element) return;\n      const t = e.clientX / this._element.clientWidth * 2 - 1, i = -(e.clientY / this._element.clientHeight) * 2 + 1, r = g();\n      this._pointerUp = { x: t, y: i, time: r }, this.dispatchEvent({\n        type: \"dragEnd\",\n        pointer: this._pointerUp,\n        drag: {\n          x: this._pointerUp.x - this._pointerDown.x,\n          y: this._pointerUp.y - this._pointerDown.y,\n          time: this._pointerUp.time - this._pointerDown.time\n        }\n      }), this._pointerDown = void 0, this._pointer = void 0;\n    };\n  }\n  get element() {\n    return this._element;\n  }\n  set element(e) {\n    this._element !== e && (this._element && this._removeElement(), this._element = e, this._element && this._addElement());\n  }\n  _removeElement() {\n    var e, t, i, r, s;\n    (e = this._element) == null || e.removeEventListener(\"pointerdown\", this._onPointerDown), (t = this._element) == null || t.removeEventListener(\"pointermove\", this._onPointerMove), (i = this._element) == null || i.removeEventListener(\"pointerup\", this._onPointerUp), (r = this._element) == null || r.removeEventListener(\"pointercancel\", this._onPointerUp), (s = this._element) == null || s.removeEventListener(\"pointerout\", this._onPointerUp);\n  }\n  _addElement() {\n    var e, t, i, r, s;\n    (e = this._element) == null || e.addEventListener(\"pointerdown\", this._onPointerDown), (t = this._element) == null || t.addEventListener(\"pointermove\", this._onPointerMove), (i = this._element) == null || i.addEventListener(\"pointerup\", this._onPointerUp), (r = this._element) == null || r.addEventListener(\"pointercancel\", this._onPointerUp), (s = this._element) == null || s.addEventListener(\"pointerout\", this._onPointerUp);\n  }\n  dispose() {\n    this.element = void 0;\n  }\n}\n/*!\n * Fork Of -\n * JavaScript Undo Manager 1.0.0\n * Simple JavaScript undo/redo command manager supporting transactions with no dependencies.\n *\n * Copyright: Alexey Grinko, 2017\n * Git repository: https://github.com/agrinko/js-undo-manager.git\n *\n * @license MIT - https://opensource.org/licenses/MIT\n *\n * Changes -\n * 1. Added presets commands\n * 2. Port to TypeScript\n * 3. Remove transactions\n */\nclass Q {\n  constructor(e) {\n    this.options = {\n      limit: 500,\n      // maximum commands stack size\n      debug: !1,\n      // whether to emit execution status in console\n      bindHotKeys: !1\n      // whether to bind \"undo\" and \"redo\" commands to \"Ctrl+Z\", \"Ctrl+Y\" & \"Ctrl+Shift+Z\" hot keys\n      // useTransactions: true   // whether to initialize transactions manager\n    }, this.enabled = !0, this.presets = {}, this._keyDown = (t) => {\n      if (!this.enabled) return;\n      const i = t.ctrlKey || t.metaKey;\n      t.code === \"KeyZ\" && i && !t.shiftKey ? this.undo() : (t.code === \"KeyZ\" && i && t.shiftKey || t.code === \"KeyY\" && t.ctrlKey) && this.redo();\n    }, Object.assign(this.options, e), this.limit = e.limit, this.options = e, this.reset(), e.bindHotKeys && this.bindHotKeys(), this.log(`Initialized with stack limit of ${this.limit} commands`);\n  }\n  /**\n   * Bind 'undo' and 'redo' actions to 'Ctrl/Cmd+Z', 'Ctrl+Y' & 'Ctrl/Cmd+Shift+Z' hot keys.\n   * It is a basic implementation for quick testing and should be replaced with custom event handlers\n   * for more flexible processing.\n   * @returns {JSUndoManager}\n   */\n  bindHotKeys() {\n    return this.log(\"Bound 'undo' and 'redo' actions to 'Ctrl/Cmd+Z', 'Ctrl+Y' & 'Ctrl/Cmd+Shift+Z' hot keys\"), (this.options.hotKeyRoot ?? document).addEventListener(\"keydown\", this._keyDown), this;\n  }\n  dispose() {\n    return (this.options.hotKeyRoot ?? document).removeEventListener(\"keydown\", this._keyDown), this.reset();\n  }\n  /**\n   * Remember executed command containing \"redo\" and \"undo\" functions\n   * @param {Object|Function} command - either an object with \"redo\" and \"undo\" functions\n   * @returns {JSUndoManager}\n   */\n  record(e) {\n    return this.enabled ? (this._record(e), this) : this;\n  }\n  replaceLast(e) {\n    const t = this.peek();\n    if (t)\n      return this.log(\"replace\", t, \"with\", e), this.stack[this.sp] = e, this;\n  }\n  /**\n   * Execute function and record it with its opposite \"undo\" function\n   * @param {Object|Function} command - either an object with \"redo\" and \"undo\" functions\n   * @param {Function} [undo] - \"undo\" function, used if the first argument is also a function\n   * @returns {JSUndoManager}\n   */\n  execute(e) {\n    if (!this.enabled) return;\n    let t = this._rc(e), i = t.redo;\n    return this.record.apply(this, t), this.log(\"Executing function...\"), i.apply(e), this;\n  }\n  _rc(e) {\n    if (e.type) {\n      const t = this.presets[e.type];\n      if (typeof t == \"function\")\n        return t(e);\n      throw console.error(e, t, this.presets), new Error(\"Predefined command not found\");\n    } else\n      return e;\n  }\n  _record(e) {\n    this.enabled && (this.log(\"Recording command\", e), this._rebase(), this.stack.push(e), this.sp++, this._keepLimit());\n  }\n  //forget \"future\" commands if stack pointer is not at the end\n  _rebase() {\n    this.canRedo() && (this.stack.length = this.sp + 1);\n  }\n  //sustain limited size of stack; cut extra commands starting with the latest ones\n  _keepLimit() {\n    if (this.stack.length <= this.limit)\n      return;\n    let e = this.stack.length - this.limit;\n    this.log(\"Stack size reached its limit: ${this.limit} commands. Cutting off most old commands...\"), e === 1 ? this.stack.shift() : this.stack.splice(0, e), this.sp -= e;\n  }\n  /**\n   * Undo previous command if possible\n   * @returns {JSUndoManager}\n   */\n  undo() {\n    if (!this.canUndo())\n      return this;\n    let e = this.stack[this.sp];\n    return this.log(\"undo\"), this.sp--, this._rc(e).undo(), this;\n  }\n  /**\n   * Check whether undoing previous command is possible\n   * @returns {boolean}\n   */\n  canUndo() {\n    return this.sp >= 0 && this.enabled;\n  }\n  /**\n   * Get the last command that was done\n   */\n  peek() {\n    return this.canUndo() ? this.stack[this.sp] : null;\n  }\n  /**\n   * Redo the command which was previously undone\n   * @returns {JSUndoManager}\n   */\n  redo() {\n    if (!this.canRedo())\n      return this;\n    let e = this.stack[this.sp + 1];\n    return this.log(\"redo\"), this.sp++, this._rc(e).redo(), this;\n  }\n  /**\n   * Check whether redoing command is possible\n   * @returns {boolean}\n   */\n  canRedo() {\n    return this.sp < this.stack.length - 1 && this.enabled;\n  }\n  /**\n   * Gets the last command that was undone\n   */\n  peekForward() {\n    return this.canRedo() ? this.stack[this.sp + 1] : null;\n  }\n  /**\n   * Change stack size limit initially defined in the constructor options\n   * @param {number} limit\n   */\n  setLimit(e) {\n    let t = this.stack.length - this.sp - 1;\n    if (e < 1 || typeof e != \"number\")\n      throw new TypeError(`JSUndoManager.setLimit(): unexpected argument limit=${e}. Should be a positive number`);\n    return e < t ? console.warn(`JSUndoManager.setLimit(): cannot set stack limit (${e}) less than the number of 'redoable' commands (${t})`) : (this.limit = Math.floor(e), this._keepLimit()), this;\n  }\n  /**\n   * Reset all commands from memory\n   */\n  reset() {\n    return this.log(\"reset\"), this.stack = [], this.sp = -1, this;\n  }\n  /**\n   * Check whether the commands stack is empty\n   * @returns {boolean}\n   */\n  isEmpty() {\n    return !this.stack.length;\n  }\n  /**\n   * Check whether the commands stack size reaches its limit\n   * @returns {boolean}\n   */\n  isFull() {\n    return this.stack.length === this.limit;\n  }\n  /**\n   * Get number of commands in memory stack\n   * @returns {Number}\n   */\n  getSize() {\n    return this.stack.length;\n  }\n  log(e, ...t) {\n    this.options.debug && console.log(`Command Manager: ${e}`, ...t);\n  }\n}\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst p = class p {\n  constructor(e = p.DECAY_MILLISECONDS) {\n    this.velocity = 0, this.naturalFrequency = 0, this.setDecayTime(e);\n  }\n  setDecayTime(e) {\n    this.naturalFrequency = 1 / Math.max(p.MIN_DECAY_MILLISECONDS, e);\n  }\n  update(e, t, i, r) {\n    const s = 2e-4 * this.naturalFrequency;\n    if (e == null || r === 0 || e === t && this.velocity === 0)\n      return t;\n    if (i < 0)\n      return e;\n    const o = e - t, c = this.velocity + this.naturalFrequency * o, a = o + i * c, u = Math.exp(-this.naturalFrequency * i), h = (c - this.naturalFrequency * a) * u, w = -this.naturalFrequency * (h + c * u);\n    return Math.abs(h) < s * Math.abs(r) && w * o >= 0 ? (this.velocity = 0, t) : (this.velocity = h, t + a * u);\n  }\n};\np.SETTLING_TIME = 1e4, p.MIN_DECAY_MILLISECONDS = 1e-3, p.DECAY_MILLISECONDS = 50;\nlet k = p;\nfunction j() {\n  const n = document.createElementNS(\"http://www.w3.org/1999/xhtml\", \"canvas\");\n  return n.style.display = \"block\", n;\n}\nfunction ee({ innerHTML: n = \"\", id: e, classList: t, addToBody: i = !0, elementTag: r = \"div\" }) {\n  const s = document.createElement(r);\n  return e && (s.id = e), s.innerHTML = n, t && s.classList.add(...t), i && document.body.appendChild(s), s;\n}\nasync function T(n) {\n  return new Promise((e, t) => {\n    const i = new Image();\n    i.onload = () => e(i), i.onerror = t, i.crossOrigin = \"anonymous\", i.decoding = \"sync\", i.src = n;\n  });\n}\nfunction P(n, e = document.head) {\n  const t = document.createElement(\"style\");\n  return t.type = \"text/css\", t.innerText = n, e == null || e.appendChild(t), t;\n}\nasync function te(n, e = document.head) {\n  return new Promise((t, i) => {\n    const r = document.createElement(\"script\");\n    r.setAttribute(\"src\", n), r.addEventListener(\"load\", () => t(r)), r.addEventListener(\"error\", i), e.appendChild(r);\n  });\n}\nasync function ne(n, e) {\n  var i;\n  n.innerHTML = e;\n  const t = n.getElementsByTagName(\"script\");\n  for (let r = 0; r < t.length; r++) {\n    const s = t[r], o = M(s);\n    let c = !1;\n    await new Promise((a) => {\n      o.onload = a, o.onerror = () => {\n        c = !0, a(void 0);\n      };\n    }), !c && ((i = s.parentNode) == null || i.replaceChild(o, s));\n  }\n}\nfunction M(n, e) {\n  e = e ?? document.createElement(\"script\"), e.type = n.type || \"text/javascript\", e.text = n.text;\n  for (let t = 0; t < n.attributes.length; t++) {\n    const i = n.attributes[t];\n    e.setAttribute(i.name, i.value);\n  }\n  return e;\n}\nfunction ie(n) {\n  if (!window)\n    return console.warn(\"window is required\"), \"\";\n  let e = \"\";\n  const t = new Uint8Array(n), i = t.byteLength;\n  for (let r = 0; r < i; r++)\n    e += String.fromCharCode(t[r]);\n  return window.btoa(e);\n}\nfunction re(n) {\n  if (!window)\n    return console.warn(\"window is required\"), new Uint8Array(0);\n  const e = window.atob(n), t = e.length, i = new Uint8Array(t);\n  for (let r = 0; r < t; r++)\n    i[r] = e.charCodeAt(r);\n  return i.buffer;\n}\nconst R = {\n  Int8Array,\n  Uint8Array,\n  Uint8ClampedArray,\n  Int16Array,\n  Uint16Array,\n  Int32Array,\n  Uint32Array,\n  Float32Array,\n  Float64Array\n};\nfunction se(n, e) {\n  return new R[n](e);\n}\nfunction oe(n) {\n  return n.replace(\n    /\\w\\S*/g,\n    function(e) {\n      return e.charAt(0).toUpperCase() + e.substr(1).toLowerCase();\n    }\n  );\n}\nfunction ce(n) {\n  return n.replace(\n    /([-_][a-z])/ig,\n    (e) => e.toUpperCase().replace(\"-\", \"\").replace(\"_\", \"\")\n  );\n}\nfunction ae(n) {\n  if (!n || n === \"\" || n.match(/__MACOSX\\/.*\\._/)) return \"\";\n  n = n.replace(/\\?.*$/, \"\");\n  const e = n.split(/[\\\\/]/).pop() ?? \"\", t = e.lastIndexOf(\".\");\n  return e === \"\" || t < 1 ? \"\" : e.slice(t + 1);\n}\nfunction le(n) {\n  return n.substring(n.lastIndexOf(\"/\") + 1);\n}\nfunction F(n) {\n  return n.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, \"\\\\$1\");\n}\nfunction f(n, e, t) {\n  return n.replace(new RegExp(F(e), \"g\"), t);\n}\nfunction ue(n, e, t, {\n  replaceAll: i = !1,\n  prepend: r = !1,\n  append: s = !1,\n  notFoundCallback: o = () => {\n  }\n} = {}) {\n  if (o && !n.includes(e))\n    return o(), n;\n  let c = t;\n  return r ? c = t + e : s && (c = e + t), i ? n.replaceAll(e, c) : n.replace(e, c);\n}\nfunction he(n) {\n  return n.sort(), n[0].split(\"\").map((e, t) => n[n.length - 1][t] === e ? e : \"\\0\").join(\"\").split(\"\\0\").at(0) || \"\";\n}\nconst fe = (n, ...e) => String.raw({ raw: n }, ...e), $ = (n, ...e) => String.raw({ raw: n }, ...e), de = (n, ...e) => String.raw({ raw: n }, ...e), B = (n, ...e) => {\n  let t = String.raw({ raw: n }, ...e);\n  return t = f(t, \"%\", \"%25\"), t = f(t, \"> <\", \"><\"), t = f(t, \"; }\", \";}\"), t = f(t, \"<\", \"%3c\"), t = f(t, \">\", \"%3e\"), t = f(t, '\"', \"'\"), t = f(t, \"#\", \"%23\"), t = f(t, \"{\", \"%7b\"), t = f(t, \"}\", \"%7d\"), t = f(t, \"|\", \"%7c\"), t = f(t, \"^\", \"%5e\"), t = f(t, \"`\", \"%60\"), t = f(t, \"@\", \"%40\"), t = f(t, \"&\", \"&amp;\"), t = f(t, `\n`, \"%0A\"), \"data:image/svg+xml;charset=UTF-8,\" + t;\n};\nfunction pe(n = document.head) {\n  return P($`\n      ::-webkit-scrollbar\n      {\n        width: 8px;  /* for vertical scrollbars */\n        height: 8px; /* for horizontal scrollbars */\n      }\n      ::-webkit-scrollbar-track\n      {\n        background: rgba(64, 64, 64, 0.4);\n        border-radius: 6px;\n      }\n      ::-webkit-scrollbar-thumb\n      {\n        background: rgba(128, 128, 128, 0.2);\n        border-radius: 6px;\n      }\n      ::-webkit-scrollbar-corner {background: rgba(0,0,0,0.5);}\n    `, n);\n}\nfunction N(n, e) {\n  const t = window.URL.createObjectURL(n), i = document.createElement(\"a\");\n  i.style.display = \"none\", i.href = t, i.download = e, document.body.appendChild(i), i.click(), setTimeout(() => {\n    document.body.removeChild(i), window.URL.revokeObjectURL(t);\n  }, 1e3);\n}\nasync function q(n) {\n  return new Promise((e, t) => {\n    const i = new FileReader();\n    i.onload = (r) => e(i.result), i.onerror = (r) => t(i.error), i.onabort = (r) => t(new Error(\"Read aborted\")), i.readAsDataURL(n);\n  });\n}\nfunction me(n, e) {\n  return N(n, e ?? n.name);\n}\nasync function ge(n = !1, e = !1, t) {\n  const i = document.createElement(\"input\");\n  i.type = \"file\", i.multiple = n, i.accept = t || \"*\", i.webkitdirectory = e, i.style.display = \"none\", document.body.appendChild(i), i.click();\n  const r = await new Promise((s) => {\n    i.onchange = (o) => {\n      s(Array.from(i.files || []));\n    };\n  });\n  return document.body.removeChild(i), r;\n}\nfunction we() {\n  let n = !1;\n  return function(e) {\n    (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(e.substr(0, 4))) && (n = !0);\n  }(navigator.userAgent || navigator.vendor || window.opera), n;\n}\nfunction ye(n) {\n  return n < 0.04045 ? n * 0.0773993808 : Math.pow(n * 0.9478672986 + 0.0521327014, 2.4);\n}\nfunction ve(n) {\n  return n < 31308e-7 ? n * 12.92 : 1.055 * Math.pow(n, 0.41666) - 0.055;\n}\nfunction be(n, e = 1, t = 1) {\n  const i = document.createElement(\"canvas\");\n  i.width = e, i.height = t;\n  const r = i.getContext(\"2d\");\n  r.fillStyle = \"#\" + n, r.fillRect(0, 0, e, t);\n  const s = i.toDataURL();\n  return i.remove(), s;\n}\nfunction H(n, e) {\n  let t;\n  do\n    t = Object.getOwnPropertyDescriptor(n, e);\n  while (!t && (n = Object.getPrototypeOf(n)));\n  return t;\n}\nfunction W(n, e, t = !0, i = !1) {\n  const r = H(n, e);\n  return !!(r != null && r.set) || t && (r == null ? void 0 : r.writable) !== !1 && (r == null ? void 0 : r.get) === void 0 || i && !r;\n}\nfunction S(n, e, t, i = !0, r = !1) {\n  return n && W(n, e, i, r) ? (n[e] = t, !0) : !1;\n}\nfunction Ee(n, ...e) {\n  return typeof n == \"function\" && (n = n(...e)), n;\n}\nfunction xe(n, e, t) {\n  for (const i of t) {\n    const r = n[i];\n    r !== void 0 && S(e, i, r, !0);\n  }\n  return e;\n}\nfunction Ce(n, e) {\n  for (const t of e)\n    if (!n.includes(t)) return !1;\n  return !0;\n}\nfunction Y(n, e) {\n  for (let t = n.length - 1; t >= 0; t--)\n    if (e(n[t])) return t;\n  return -1;\n}\nfunction ke(n, e) {\n  return function(...t) {\n    return n(), e && e.call(this, ...t);\n  };\n}\nfunction _e(n, e) {\n  return function(...t) {\n    return n(...t), e && e.call(this, ...t);\n  };\n}\nfunction Se(n, e, t = !1) {\n  for (typeof n == \"string\" && (n = n.split(\".\")); n.length > 0; ) {\n    if (!e) return e;\n    const i = n.splice(0, 1)[0];\n    if (!(i.length < 1))\n      if (Array.isArray(e))\n        e = e[parseInt(i)];\n      else if (typeof e == \"object\" && i in e)\n        e = e[i];\n      else {\n        if (t)\n          throw new Error(\"invalid access, check \" + i + \" in \" + e);\n        return;\n      }\n  }\n  return e;\n}\nfunction Ue(n, e) {\n  return Object.keys(n).find((t) => n[t] === e);\n}\nfunction v(n, e) {\n  return Object.hasOwn ? Object.hasOwn(n, e) : n.hasOwnProperty(e);\n}\nfunction Le(n, e, t = !0) {\n  const i = t ? n : {}, r = Object.keys(n);\n  for (const s of r) i[s] = e(n[s], s);\n  return i;\n}\nfunction _(n, e) {\n  return Object.fromEntries(Object.entries(n).map((t) => e(t)));\n}\nconst b = {\n  // object\n  priority: 1 / 0,\n  serialize: (n, e) => _(n, ([t, i]) => [t, d.Serialize(i, e, !1)]),\n  deserialize: (n, e, t) => Object.assign(e || {}, _(n, ([i, r]) => [i, d.Deserialize(r, e == null ? void 0 : e[i], t, !1)])),\n  isType: (n) => (n.constructor || Object) === Object\n}, l = class l {\n  static GetSerializer(e) {\n    return l.Serializers.find((t) => t.isType(e));\n  }\n  static RegisterSerializer(...e) {\n    for (const t of e) {\n      const i = t.priority ?? 1e10, r = Y(l.Serializers, (s) => s.priority !== void 0 && s.priority < i);\n      r >= 0 ? l.Serializers.splice(r + 1, 0, t) : l.Serializers.push(t);\n    }\n  }\n  static UnregisterSerializer(...e) {\n    for (const t of e) {\n      const i = l.Serializers.indexOf(t);\n      i >= 0 && l.Serializers.splice(i, 1);\n    }\n  }\n  /**\n   * Serialize an object\n   * @param obj - object to serialize\n   * @param meta - Optional object to store common meta-data/resources across the serialization process of multiple objects\n   * @param isThis - true if called from inside the serialization function, like custom {@link IJSONSerializable.toJSON}.\n   */\n  static Serialize(e, t, i = !1) {\n    if (typeof e == \"function\") return;\n    if (!i) {\n      const o = l.GetSerializer(e);\n      if (o) return o.serialize(e, t);\n      if (typeof e.toJSON == \"function\") {\n        const c = e.toJSON(t);\n        return e.serializableClassId && c && (c.serializableClassId = e.serializableClassId), c;\n      }\n    }\n    let r = e.constructor ?? Object;\n    const s = {};\n    for (; r && r !== Object; ) {\n      const o = l.TypeMap.get(r) ?? [];\n      for (const [c, a] of o)\n        s[c] = l.Serialize(e[a], t, !1);\n      r = Object.getPrototypeOf(r);\n    }\n    return e.serializableClassId && (s.serializableClassId = e.serializableClassId), s;\n  }\n  /**\n   * Deserialize an object\n   * @param data - data to deserialize\n   * @param obj - current object that's set. If of the same class/type the data is deserialized into that instead of creating new objects.\n   * @param meta - Optional object to retrieve common meta-data/resources across the deserialization process of multiple objects. Objects in meta must be class instances, not js objects. (like Material, Texture, Object3D etc)\n   * @param isThis - true if called from inside the deserialization function, like custom {@link IJSONSerializable.fromJSON}\n   */\n  static Deserialize(e, t, i, r = !1) {\n    if (e === void 0 || t === e) return t;\n    if (e && typeof e == \"object\" && (e.constructor || Object) === Object && e.resource && typeof e.resource == \"string\" && e.uuid) {\n      const o = i == null ? void 0 : i[e.resource];\n      if (o) {\n        if (e = o[e.uuid], typeof e == \"object\" && (e.__useCount = e.__useCount ? e.__useCount + 1 : 1), e || console.warn(`Resource ${e.resource} with uuid ${e.uuid} not found`), t === e) return t;\n        if (e && typeof e == \"object\") {\n          if ((e.constructor || Object) !== Object)\n            return t && console.warn(\"replacing object\", t, \"with deserialized object from meta\", e), e;\n          console.error(\"Deserialize; meta should only have class instances, not js objects\", e, t, i);\n        }\n      } else\n        return console.warn(`Resource ${e.resource} not found`), t;\n    }\n    if (e && typeof e == \"object\" && (e.constructor || Object) !== Object && !Array.isArray(e) && !e.serializableClassId) {\n      if (e instanceof Blob) return e;\n      console.warn(\"Data might already be deserialized. It will be cloned, or copied to source\", e, \"source\", t, e.constructor, e.constructor !== Object);\n    }\n    if (e && typeof e == \"object\")\n      if (e.serializableClassId && (!t || t.serializableClassId !== e.serializableClassId)) {\n        const o = l.SerializableClasses.get(e.serializableClassId);\n        o && (o.DataInConstructor ? t = new o(e) : t = new o());\n      } else (e.constructor || Object) === Object && !t ? t = {} : Array.isArray(e) && !t && (t = []);\n    if (typeof t == \"function\")\n      return console.error(\"cannot deserialize a function\", t, e), t;\n    if (!r) {\n      const o = l.GetSerializer(e);\n      if (o && o !== b) return o.deserialize(e, t, i);\n    }\n    if (!e || t === void 0 || t === null || typeof t != \"object\")\n      return e;\n    if (!r && typeof (t == null ? void 0 : t.fromJSON) == \"function\")\n      return t.fromJSON(e, i), t;\n    let s = t.constructor ?? Object;\n    if (s === Object) return b.deserialize(e, t, i);\n    for (; s && s !== Object; ) {\n      const o = l.TypeMap.get(s) ?? [];\n      for (const [c, a] of o) {\n        const u = t[a], h = l.Deserialize(e[c], u, i, !1);\n        h !== u && S(t, a, h, !0);\n      }\n      s = Object.getPrototypeOf(s);\n    }\n    return t;\n  }\n};\nl.TypeMap = /* @__PURE__ */ new Map(), l.SerializableClasses = /* @__PURE__ */ new Map(), l.Serializers = [\n  {\n    // arrays\n    priority: 0,\n    isType: (e) => Array.isArray(e),\n    serialize: (e, t) => e.map((i) => l.Serialize(i, t, !1)),\n    deserialize: (e, t, i) => {\n      const r = e.length;\n      Array.isArray(t) || (t = []);\n      for (let s = 0; s < r; s++) {\n        const o = e[s], c = t.length > s ? l.Deserialize(o, t[s], i, !1) : l.Deserialize(o, void 0, i, !1);\n        t.length <= s ? t.push(c) : t[s] = c;\n      }\n      return t;\n    }\n  },\n  {\n    // primitives\n    priority: 0,\n    isType: (e) => !e || typeof e != \"object\",\n    serialize: (e) => {\n      if (e && typeof e == \"number\") {\n        if (e === 1 / 0) return \"Infinity\";\n        if (e === -1 / 0) return \"-Infinity\";\n        if (isNaN(e)) return \"NaN\";\n      }\n      return e;\n    },\n    deserialize: (e, t) => {\n      if (typeof t == \"number\") {\n        if (e === \"Infinity\") return 1 / 0;\n        if (e === \"-Infinity\") return -1 / 0;\n        if (e === \"NaN\") return NaN;\n        if (typeof e == \"number\" || !e) return e;\n      }\n      return e;\n    }\n  },\n  b\n];\nlet d = l;\nconst m = class m {\n  static callFunction(e, t, i = []) {\n    if (!t) return e(...i);\n    if (e.name && t[e.name] === e) return e.call(t, ...i);\n    m.methodMap.has(t) || m.methodMap.set(t, /* @__PURE__ */ new WeakMap());\n    const r = m.methodMap.get(t);\n    if (!r.has(e)) {\n      let s = t;\n      for (; s; ) {\n        const o = Object.values(Object.getOwnPropertyDescriptors(s));\n        for (let c of o)\n          if (c.value === e)\n            return r.set(e, !0), e.call(t, ...i);\n        s = Object.getPrototypeOf(s);\n      }\n      r.set(e, !1);\n    }\n    return r.get(e) ? e.call(t, ...i) : e(...i);\n  }\n};\nm.methodMap = /* @__PURE__ */ new WeakMap();\nlet E = m;\nfunction x(n, e = \"param\") {\n  if (!n) throw new Error(\"onChange: fnKey is undefined, make sure the function exists or provide a string\");\n  return (t, i, r) => {\n    const s = {\n      get() {\n        return this[`_oc_${i}`];\n      },\n      set(o) {\n        var u;\n        const c = this[`_oc_${i}`];\n        if (c === o) return;\n        this[`_oc_${i}`] = o;\n        const a = e === \"param\" ? [i, o, c, this] : e === \"object\" ? [{ key: i, value: o, oldValue: c, target: this }] : [];\n        typeof n == \"string\" ? (u = this[n]) == null || u.call(this, ...a) : typeof n == \"function\" && E.callFunction(n, this, a);\n      }\n    };\n    if (r)\n      return v(r, \"value\") && delete r.value, v(r, \"writable\") && delete r.writable, v(r, \"initializer\") && delete r.initializer, Object.assign(r, s);\n    Object.defineProperty(t, i, s);\n  };\n}\nfunction ze(n, e = \"void\") {\n  if (!n) throw new Error(\"onChange: fnKey is undefined, make sure the function exists or provide a string\");\n  return x(n, e);\n}\nfunction Ae(n, e = \"object\") {\n  if (!n) throw new Error(\"onChange: fnKey is undefined, make sure the function exists or provide a string\");\n  return x(n, e);\n}\nfunction Oe(n) {\n  return x((e, t, i, r) => {\n    if (!r.dispatchEvent) throw new Error(\"onChangeDispatchEvent: target does not have dispatchEvent\");\n    r.dispatchEvent({ type: n || `${e}-changed`, detail: { key: e, value: t, oldValue: i } });\n  }, \"param\");\n}\nfunction De(n) {\n  return (e, t) => {\n    const i = e.constructor;\n    if (i === Object) throw new Error(\"All properties in an object are serialized by default\");\n    d.TypeMap.has(i) || d.TypeMap.set(i, []), d.TypeMap.get(i).push([n || t, t]);\n  };\n}\nfunction Ie(n) {\n  return (e) => (e = class extends e {\n    constructor() {\n      super(...arguments), this.serializableClassId = n;\n    }\n    // static DataInConstructor = false // if constructor is equivalent to fromJSON, see LUTCubeTextureWrapper.\n  }, d.SerializableClasses.set(n, e), e);\n}\nasync function Te(n, e, t) {\n  const i = typeof e == \"string\" ? new TextEncoder().encode(e) : e, r = await crypto.subtle.digest(\"SHA-256\", i), s = crypto.getRandomValues(new Uint8Array(12)), o = Array.from(s).map((y) => String.fromCharCode(y)).join(\"\"), c = { name: \"AES-GCM\", iv: s }, a = await crypto.subtle.importKey(\"raw\", r, c, !1, [\"encrypt\"]), u = typeof n == \"string\" ? new TextEncoder().encode(n) : n, h = await crypto.subtle.encrypt(c, a, u), w = new Uint8Array(h), C = Array.from(w), A = C.map((y) => String.fromCharCode(y)).join(\"\"), O = t ? typeof t == \"string\" ? t : new TextDecoder().decode(t) : \"\", D = t ? typeof t == \"string\" ? new TextEncoder().encode(t) : Array.from(t) : [];\n  return typeof n == \"string\" ? O + o + A : new Uint8Array([...D, ...s, ...C]);\n}\nasync function Pe(n, e) {\n  const t = typeof e == \"string\" ? new TextEncoder().encode(e) : e, i = await crypto.subtle.digest(\"SHA-256\", t), r = n.slice(0, 12), o = { name: \"AES-GCM\", iv: typeof r == \"string\" ? new Uint8Array(Array.from(r).map((h) => h.charCodeAt(0))) : r }, c = await crypto.subtle.importKey(\"raw\", i, o, !1, [\"decrypt\"]), a = n.slice(12), u = typeof a == \"string\" ? new Uint8Array(Array.from(a).map((h) => h.charCodeAt(0))) : a;\n  try {\n    const h = await crypto.subtle.decrypt(o, c, u);\n    return typeof n == \"string\" ? new TextDecoder().decode(h) : new Uint8Array(h);\n  } catch {\n    throw new Error(\"Decrypt failed\");\n  }\n}\nasync function Me() {\n  return \"showOpenFilePicker\" in window ? window.showOpenFilePicker().then((n) => n[0]) : window.chooseFileSystemEntries();\n}\nfunction Re() {\n  if (\"showSaveFilePicker\" in window) {\n    const e = {\n      types: [{\n        description: \"Text file\",\n        accept: { \"text/plain\": [\".txt\"] }\n      }]\n    };\n    return window.showSaveFilePicker(e);\n  }\n  const n = {\n    type: \"save-file\",\n    accepts: [{\n      description: \"Text file\",\n      extensions: [\"txt\"],\n      mimeTypes: [\"text/plain\"]\n    }]\n  };\n  return window.chooseFileSystemEntries(n);\n}\nfunction Fe(n) {\n  return n.text ? n.text() : K(n);\n}\nfunction K(n) {\n  return new Promise((e) => {\n    const t = new FileReader();\n    t.addEventListener(\"loadend\", (i) => {\n      const r = (i.srcElement || i.target).result;\n      e(r);\n    }), t.readAsText(n);\n  });\n}\nasync function $e(n, e) {\n  if (n.createWriter) {\n    const i = await n.createWriter();\n    await i.write(0, e), await i.close();\n    return;\n  }\n  const t = await n.createWritable();\n  await t.write(e), await t.close();\n}\nasync function Be(n, e) {\n  const t = {};\n  return e && (t.writable = !0, t.mode = \"readwrite\"), await n.queryPermission(t) === \"granted\" || await n.requestPermission(t) === \"granted\";\n}\nfunction U(n, e = 8192, t = !1) {\n  var o;\n  if (!n.width || !n.height) throw new Error(\"Invalid bitmap\");\n  const i = document.createElement(\"canvas\");\n  i.width = Math.min(e, n.width), i.height = Math.floor(1 + i.width * n.height / n.width);\n  const r = n instanceof ImageBitmap, s = r && t && Math.abs(i.width - n.width) < 0.5 ? i.getContext(\"bitmaprenderer\") : void 0;\n  return s ? s.transferFromImageBitmap(n) : (o = i.getContext(\"2d\")) == null || o.drawImage(n, 0, 0, i.width, i.height), r && t && n.close(), i;\n}\nfunction Ne(n, e = 8192, t = !1, i = \"image/png\") {\n  if (!n.width || !n.height) return \"\";\n  const r = U(n, e, !1), s = r.toDataURL(i);\n  return r.remove(), t && n instanceof ImageBitmap && n.close(), s;\n}\nasync function qe(n, e = 8192, t = !1, i = \"image/png\") {\n  if (!n.width || !n.height) return Promise.reject(\"Invalid bitmap\");\n  const r = U(n, e, !1);\n  return new Promise((s, o) => {\n    r.toBlob((c) => {\n      c ? s(c) : o(\"Could not get blob\"), r.remove(), t && n instanceof ImageBitmap && n.close();\n    }, i);\n  });\n}\nasync function He(n) {\n  return new Promise((e, t) => {\n    const i = new Image();\n    i.addEventListener(\"load\", () => {\n      const r = document.createElement(\"canvas\");\n      r.width = i.width, r.height = i.height;\n      const s = r.getContext(\"2d\");\n      if (!s) {\n        t(new Error(\"Could not get 2d context\"));\n        return;\n      }\n      s.drawImage(i, 0, 0, r.width, r.height);\n      const o = s.getImageData(0, 0, r.width, r.height);\n      e(o), r.remove(), i.remove();\n    }, !1), i.addEventListener(\"error\", (r) => {\n      i.remove(), t(r);\n    }, !1), i.src = n;\n  });\n}\nfunction V(n, {\n  backgroundColor: e = \"\",\n  scale: t = 1,\n  width: i = 512,\n  height: r = 512\n}) {\n  const s = document.createElement(\"canvas\"), o = s.getContext(\"2d\"), c = t, a = i, u = r;\n  return s.width = a * c, s.height = u * c, s.style.width = `${a}`, s.style.height = `${u}`, (e == null ? void 0 : e.length) > 0 && (o.fillStyle = e, o.fillRect(0, 0, s.width, s.height)), o.drawImage(n, 0, 0, s.width, s.height), s;\n}\nfunction We(n) {\n  const e = document.createElement(\"canvas\");\n  return e.width = n.width, e.height = n.height, e.getContext(\"2d\").putImageData(n, 0, 0), e;\n}\nfunction Ye() {\n  const n = document.createElement(\"canvas\");\n  return n.getContext && n.getContext(\"2d\") ? n.toDataURL(\"image/webp\").startsWith(\"data:image/webp\") : !1;\n}\nfunction Ke(n) {\n  const e = document.createElement(\"canvas\");\n  e.width = n.width, e.height = n.height;\n  const t = e.getContext(\"2d\");\n  if (!t) throw new Error(\"Unable to get 2d context\");\n  return t.translate(0, n.height), t.scale(1, -1), t.drawImage(n, 0, 0), e;\n}\nfunction Ve(n) {\n  return new Promise((e, t) => {\n    const i = new Image(), r = URL.createObjectURL(n);\n    i.onload = () => {\n      URL.revokeObjectURL(r), e(i);\n    }, i.onerror = (s) => {\n      URL.revokeObjectURL(r), t(s);\n    }, i.src = r;\n  });\n}\nconst Je = (n) => `data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='16' height='16' fill='%23${n}'/%3E%3C/svg%3E%0A`, Ge = (n) => `data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='7' fill='%23${n}'/%3E%3C/svg%3E%0A`, Xe = (n) => `data:image/svg+xml,%3Csvg viewBox='0 0 80 14' xmlns='http://www.w3.org/2000/svg'%3E%3Ctext style='font: 8px \"Roboto Mono\", \"Source Code Pro\", Menlo, Courier, monospace; fill: white;' x='9' y='9'%3E${n}%3C/text%3E%3C/svg%3E%0A`, L = async (n, e) => {\n  const t = await T(n);\n  return V(t, e);\n}, J = async (n, e) => await L(n, e).then((t) => t.toDataURL(\"image/png\")), G = async (n) => q(await (await fetch(n)).blob());\nasync function Ze(n, e = G) {\n  const t = n.match(/(((ftp|https?):\\/\\/)[\\-\\w@:%_\\+.~#?,&\\/\\/=]+)/g);\n  if (t)\n    for (const i of t) {\n      const r = await e(i);\n      n = n.replace(i, r);\n    }\n  return n;\n}\nfunction z(n, e, { width: t, height: i }, r = !0) {\n  const s = `\n<svg viewBox=\"0 0 ${t} ${i}\" xmlns=\"http://www.w3.org/2000/svg\">\n    <style>\n    ${e}\n    </style>\n    <foreignObject x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">\n        <div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"height: 100%; width: 100%; position: absolute: top:0; left:0\">\n            ${n}\n        </div>\n    </foreignObject>\n</svg>\n    `;\n  return r ? B(s) : s;\n}\nasync function Qe(n, e, t) {\n  const i = z(n, e, t);\n  return await L(i, t);\n}\nasync function je(n, e, t) {\n  const i = z(n, e, t);\n  return await J(i, t);\n}\nfunction et(n, e) {\n  return Math.abs(n) > Math.abs(e) ? n : e;\n}\nfunction tt(n, e, t) {\n  const i = t ? 1 : 0, r = ~(1 << e);\n  return n & r | i << e;\n}\nfunction nt(n, e) {\n  const t = ~(1 << e);\n  return n & t;\n}\nfunction it() {\n  const n = (i, r) => i.toString(16).padStart(r, \"0\"), e = crypto.getRandomValues(new Uint8Array(16));\n  e[6] = e[6] & 15 | 64, e[8] = e[8] & 63 | 128;\n  const t = new DataView(e.buffer);\n  return `${n(t.getUint32(0), 8)}-${n(t.getUint16(4), 4)}-${n(t.getUint16(6), 4)}-${n(t.getUint16(8), 4)}-${n(t.getUint32(10), 8)}${n(t.getUint16(14), 4)}`;\n}\nfunction rt(n, e = null) {\n  return new URL(window.location.href).searchParams.get(n) ?? e;\n}\nfunction st(n, e, t = !1) {\n  const i = new URLSearchParams(location.search);\n  e == null ? i.has(n) && i.delete(n) : i.set(n, e), t ? window.location.search = i.toString() : window.history.replaceState({}, \"\", \"?\" + i.toString());\n}\nfunction ot(n, e = \"/\") {\n  return n.join(e);\n}\nfunction ct(n, e) {\n  const t = (e ? `var Module = { locateFile: function(s) { return \"${e}\"; } }; \n` : \"\") + `importScripts( \"${n}\" );`;\n  return URL.createObjectURL(new Blob([t], { type: \"text/javascript\" }));\n}\nexport {\n  k as Damper,\n  E as FnCaller,\n  Q as JSUndoManager,\n  ve as LinearToSRGB,\n  Z as PointerDragHelper,\n  ye as SRGBToLinear,\n  d as Serialization,\n  I as SimpleEventDispatcher,\n  R as TYPED_ARRAYS,\n  et as absMax,\n  Pe as aesGcmDecrypt,\n  Te as aesGcmEncrypt,\n  ie as arrayBufferToBase64,\n  re as base64ToArrayBuffer,\n  q as blobToDataURL,\n  Ve as blobToImage,\n  Ke as canvasFlipY,\n  nt as clearBit,\n  M as cloneScriptTag,\n  be as colorToDataUrl,\n  xe as copyProps,\n  j as createCanvasElement,\n  ee as createDiv,\n  T as createImage,\n  te as createScriptFromURL,\n  P as createStyles,\n  $ as css,\n  Se as deepAccessObject,\n  N as downloadBlob,\n  me as downloadFile,\n  Ze as embedUrlRefs,\n  F as escapeRegExp,\n  Y as findLastIndex,\n  Me as getFileHandle,\n  le as getFilenameFromPath,\n  Ue as getKeyByValue,\n  Re as getNewFileHandle,\n  Ee as getOrCall,\n  H as getPropertyDescriptor,\n  se as getTypedArray,\n  rt as getUrlQueryParam,\n  fe as glsl,\n  de as html,\n  Qe as htmlToCanvas,\n  je as htmlToPng,\n  z as htmlToSvg,\n  Ne as imageBitmapToBase64,\n  qe as imageBitmapToBlob,\n  U as imageBitmapToCanvas,\n  We as imageDataToCanvas,\n  V as imageToCanvas,\n  He as imageUrlToImageData,\n  Ce as includesAll,\n  W as isPropertyWritable,\n  Ye as isWebpExportSupported,\n  he as longestCommonPrefix,\n  Je as makeColorSvg,\n  Ge as makeColorSvgCircle,\n  Xe as makeTextSvg,\n  we as mobileAndTabletCheck,\n  g as now,\n  v as objectHasOwn,\n  Le as objectMap,\n  _ as objectMap2,\n  x as onChange,\n  ze as onChange2,\n  Ae as onChange3,\n  Oe as onChangeDispatchEvent,\n  ae as parseFileExtension,\n  ot as pathJoin,\n  pe as prettyScrollbar,\n  Fe as readFile,\n  ct as remoteWorkerURL,\n  f as replaceAll,\n  ue as safeReplaceString,\n  S as safeSetProperty,\n  Ie as serializable,\n  De as serialize,\n  ne as setInnerHTMLWithScripts,\n  st as setUrlQueryParam,\n  L as svgToCanvas,\n  J as svgToPng,\n  B as svgUrl,\n  X as timeout,\n  ce as toCamelCase,\n  oe as toTitleCase,\n  tt as updateBit,\n  ge as uploadFile,\n  it as uuidV4,\n  Be as verifyPermission,\n  ke as wrapThisFunction,\n  _e as wrapThisFunction2,\n  $e as writeFile\n};\n//# sourceMappingURL=bundle.esm.js.map\n","/*! Tweakpane 3.1.10 (c) 2016 cocopon, licensed under the MIT license. */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Tweakpane = {}));\n})(this, (function (exports) { 'use strict';\n\n    /***\n     * A simple semantic versioning perser.\n     */\n    class Semver {\n        /**\n         * @hidden\n         */\n        constructor(text) {\n            const [core, prerelease] = text.split('-');\n            const coreComps = core.split('.');\n            this.major = parseInt(coreComps[0], 10);\n            this.minor = parseInt(coreComps[1], 10);\n            this.patch = parseInt(coreComps[2], 10);\n            this.prerelease = prerelease !== null && prerelease !== void 0 ? prerelease : null;\n        }\n        toString() {\n            const core = [this.major, this.minor, this.patch].join('.');\n            return this.prerelease !== null ? [core, this.prerelease].join('-') : core;\n        }\n    }\n\n    class BladeApi {\n        constructor(controller) {\n            this.controller_ = controller;\n        }\n        get element() {\n            return this.controller_.view.element;\n        }\n        get disabled() {\n            return this.controller_.viewProps.get('disabled');\n        }\n        set disabled(disabled) {\n            this.controller_.viewProps.set('disabled', disabled);\n        }\n        get hidden() {\n            return this.controller_.viewProps.get('hidden');\n        }\n        set hidden(hidden) {\n            this.controller_.viewProps.set('hidden', hidden);\n        }\n        dispose() {\n            this.controller_.viewProps.set('disposed', true);\n        }\n    }\n\n    class TpEvent {\n        constructor(target) {\n            this.target = target;\n        }\n    }\n    class TpChangeEvent extends TpEvent {\n        constructor(target, value, presetKey, last) {\n            super(target);\n            this.value = value;\n            this.presetKey = presetKey;\n            this.last = last !== null && last !== void 0 ? last : true;\n        }\n    }\n    class TpUpdateEvent extends TpEvent {\n        constructor(target, value, presetKey) {\n            super(target);\n            this.value = value;\n            this.presetKey = presetKey;\n        }\n    }\n    class TpFoldEvent extends TpEvent {\n        constructor(target, expanded) {\n            super(target);\n            this.expanded = expanded;\n        }\n    }\n    class TpTabSelectEvent extends TpEvent {\n        constructor(target, index) {\n            super(target);\n            this.index = index;\n        }\n    }\n\n    function forceCast(v) {\n        return v;\n    }\n    function isEmpty(value) {\n        return value === null || value === undefined;\n    }\n    function deepEqualsArray(a1, a2) {\n        if (a1.length !== a2.length) {\n            return false;\n        }\n        for (let i = 0; i < a1.length; i++) {\n            if (a1[i] !== a2[i]) {\n                return false;\n            }\n        }\n        return true;\n    }\n    function isPropertyWritable(obj, key) {\n        let target = obj;\n        do {\n            const d = Object.getOwnPropertyDescriptor(target, key);\n            if (d && (d.set !== undefined || d.writable === true)) {\n                return true;\n            }\n            target = Object.getPrototypeOf(target);\n        } while (target !== null);\n        return false;\n    }\n\n    const CREATE_MESSAGE_MAP = {\n        alreadydisposed: () => 'View has been already disposed',\n        invalidparams: (context) => `Invalid parameters for '${context.name}'`,\n        nomatchingcontroller: (context) => `No matching controller for '${context.key}'`,\n        nomatchingview: (context) => `No matching view for '${JSON.stringify(context.params)}'`,\n        notbindable: () => `Value is not bindable`,\n        propertynotfound: (context) => `Property '${context.name}' not found`,\n        shouldneverhappen: () => 'This error should never happen',\n    };\n    class TpError {\n        static alreadyDisposed() {\n            return new TpError({ type: 'alreadydisposed' });\n        }\n        static notBindable() {\n            return new TpError({\n                type: 'notbindable',\n            });\n        }\n        static propertyNotFound(name) {\n            return new TpError({\n                type: 'propertynotfound',\n                context: {\n                    name: name,\n                },\n            });\n        }\n        static shouldNeverHappen() {\n            return new TpError({ type: 'shouldneverhappen' });\n        }\n        constructor(config) {\n            var _a;\n            this.message =\n                (_a = CREATE_MESSAGE_MAP[config.type](forceCast(config.context))) !== null && _a !== void 0 ? _a : 'Unexpected error';\n            this.name = this.constructor.name;\n            this.stack = new Error(this.message).stack;\n            this.type = config.type;\n        }\n    }\n\n    class BindingTarget {\n        constructor(obj, key, opt_id) {\n            this.obj_ = obj;\n            this.key_ = key;\n            this.presetKey_ = opt_id !== null && opt_id !== void 0 ? opt_id : key;\n        }\n        static isBindable(obj) {\n            if (obj === null) {\n                return false;\n            }\n            if (typeof obj !== 'object' && typeof obj !== 'function') {\n                return false;\n            }\n            return true;\n        }\n        get key() {\n            return this.key_;\n        }\n        get presetKey() {\n            return this.presetKey_;\n        }\n        read() {\n            return this.obj_[this.key_];\n        }\n        write(value) {\n            this.obj_[this.key_] = value;\n        }\n        writeProperty(name, value) {\n            const valueObj = this.read();\n            if (!BindingTarget.isBindable(valueObj)) {\n                throw TpError.notBindable();\n            }\n            if (!(name in valueObj)) {\n                throw TpError.propertyNotFound(name);\n            }\n            valueObj[name] = value;\n        }\n    }\n\n    class ButtonApi extends BladeApi {\n        get label() {\n            return this.controller_.props.get('label');\n        }\n        set label(label) {\n            this.controller_.props.set('label', label);\n        }\n        get title() {\n            var _a;\n            return (_a = this.controller_.valueController.props.get('title')) !== null && _a !== void 0 ? _a : '';\n        }\n        set title(title) {\n            this.controller_.valueController.props.set('title', title);\n        }\n        on(eventName, handler) {\n            const bh = handler.bind(this);\n            const emitter = this.controller_.valueController.emitter;\n            emitter.on(eventName, () => {\n                bh(new TpEvent(this));\n            });\n            return this;\n        }\n    }\n\n    class Emitter {\n        constructor() {\n            this.observers_ = {};\n        }\n        on(eventName, handler) {\n            let observers = this.observers_[eventName];\n            if (!observers) {\n                observers = this.observers_[eventName] = [];\n            }\n            observers.push({\n                handler: handler,\n            });\n            return this;\n        }\n        off(eventName, handler) {\n            const observers = this.observers_[eventName];\n            if (observers) {\n                this.observers_[eventName] = observers.filter((observer) => {\n                    return observer.handler !== handler;\n                });\n            }\n            return this;\n        }\n        emit(eventName, event) {\n            const observers = this.observers_[eventName];\n            if (!observers) {\n                return;\n            }\n            observers.forEach((observer) => {\n                observer.handler(event);\n            });\n        }\n    }\n\n    const PREFIX = 'tp';\n    function ClassName(viewName) {\n        const fn = (opt_elementName, opt_modifier) => {\n            return [\n                PREFIX,\n                '-',\n                viewName,\n                'v',\n                opt_elementName ? `_${opt_elementName}` : '',\n                opt_modifier ? `-${opt_modifier}` : '',\n            ].join('');\n        };\n        return fn;\n    }\n\n    function compose(h1, h2) {\n        return (input) => h2(h1(input));\n    }\n    function extractValue(ev) {\n        return ev.rawValue;\n    }\n    function bindValue(value, applyValue) {\n        value.emitter.on('change', compose(extractValue, applyValue));\n        applyValue(value.rawValue);\n    }\n    function bindValueMap(valueMap, key, applyValue) {\n        bindValue(valueMap.value(key), applyValue);\n    }\n\n    function applyClass(elem, className, active) {\n        if (active) {\n            elem.classList.add(className);\n        }\n        else {\n            elem.classList.remove(className);\n        }\n    }\n    function valueToClassName(elem, className) {\n        return (value) => {\n            applyClass(elem, className, value);\n        };\n    }\n    function bindValueToTextContent(value, elem) {\n        bindValue(value, (text) => {\n            elem.textContent = text !== null && text !== void 0 ? text : '';\n        });\n    }\n\n    const className$q = ClassName('btn');\n    class ButtonView {\n        constructor(doc, config) {\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$q());\n            config.viewProps.bindClassModifiers(this.element);\n            const buttonElem = doc.createElement('button');\n            buttonElem.classList.add(className$q('b'));\n            config.viewProps.bindDisabled(buttonElem);\n            this.element.appendChild(buttonElem);\n            this.buttonElement = buttonElem;\n            const titleElem = doc.createElement('div');\n            titleElem.classList.add(className$q('t'));\n            bindValueToTextContent(config.props.value('title'), titleElem);\n            this.buttonElement.appendChild(titleElem);\n        }\n    }\n\n    class ButtonController {\n        constructor(doc, config) {\n            this.emitter = new Emitter();\n            this.onClick_ = this.onClick_.bind(this);\n            this.props = config.props;\n            this.viewProps = config.viewProps;\n            this.view = new ButtonView(doc, {\n                props: this.props,\n                viewProps: this.viewProps,\n            });\n            this.view.buttonElement.addEventListener('click', this.onClick_);\n        }\n        onClick_() {\n            this.emitter.emit('click', {\n                sender: this,\n            });\n        }\n    }\n\n    class BoundValue {\n        constructor(initialValue, config) {\n            var _a;\n            this.constraint_ = config === null || config === void 0 ? void 0 : config.constraint;\n            this.equals_ = (_a = config === null || config === void 0 ? void 0 : config.equals) !== null && _a !== void 0 ? _a : ((v1, v2) => v1 === v2);\n            this.emitter = new Emitter();\n            this.rawValue_ = initialValue;\n        }\n        get constraint() {\n            return this.constraint_;\n        }\n        get rawValue() {\n            return this.rawValue_;\n        }\n        set rawValue(rawValue) {\n            this.setRawValue(rawValue, {\n                forceEmit: false,\n                last: true,\n            });\n        }\n        setRawValue(rawValue, options) {\n            const opts = options !== null && options !== void 0 ? options : {\n                forceEmit: false,\n                last: true,\n            };\n            const constrainedValue = this.constraint_\n                ? this.constraint_.constrain(rawValue)\n                : rawValue;\n            const prevValue = this.rawValue_;\n            const changed = !this.equals_(prevValue, constrainedValue);\n            if (!changed && !opts.forceEmit) {\n                return;\n            }\n            this.emitter.emit('beforechange', {\n                sender: this,\n            });\n            this.rawValue_ = constrainedValue;\n            this.emitter.emit('change', {\n                options: opts,\n                previousRawValue: prevValue,\n                rawValue: constrainedValue,\n                sender: this,\n            });\n        }\n    }\n\n    class PrimitiveValue {\n        constructor(initialValue) {\n            this.emitter = new Emitter();\n            this.value_ = initialValue;\n        }\n        get rawValue() {\n            return this.value_;\n        }\n        set rawValue(value) {\n            this.setRawValue(value, {\n                forceEmit: false,\n                last: true,\n            });\n        }\n        setRawValue(value, options) {\n            const opts = options !== null && options !== void 0 ? options : {\n                forceEmit: false,\n                last: true,\n            };\n            const prevValue = this.value_;\n            if (prevValue === value && !opts.forceEmit) {\n                return;\n            }\n            this.emitter.emit('beforechange', {\n                sender: this,\n            });\n            this.value_ = value;\n            this.emitter.emit('change', {\n                options: opts,\n                previousRawValue: prevValue,\n                rawValue: this.value_,\n                sender: this,\n            });\n        }\n    }\n\n    function createValue(initialValue, config) {\n        const constraint = config === null || config === void 0 ? void 0 : config.constraint;\n        const equals = config === null || config === void 0 ? void 0 : config.equals;\n        if (!constraint && !equals) {\n            return new PrimitiveValue(initialValue);\n        }\n        return new BoundValue(initialValue, config);\n    }\n\n    class ValueMap {\n        constructor(valueMap) {\n            this.emitter = new Emitter();\n            this.valMap_ = valueMap;\n            for (const key in this.valMap_) {\n                const v = this.valMap_[key];\n                v.emitter.on('change', () => {\n                    this.emitter.emit('change', {\n                        key: key,\n                        sender: this,\n                    });\n                });\n            }\n        }\n        static createCore(initialValue) {\n            const keys = Object.keys(initialValue);\n            return keys.reduce((o, key) => {\n                return Object.assign(o, {\n                    [key]: createValue(initialValue[key]),\n                });\n            }, {});\n        }\n        static fromObject(initialValue) {\n            const core = this.createCore(initialValue);\n            return new ValueMap(core);\n        }\n        get(key) {\n            return this.valMap_[key].rawValue;\n        }\n        set(key, value) {\n            this.valMap_[key].rawValue = value;\n        }\n        value(key) {\n            return this.valMap_[key];\n        }\n    }\n\n    function parseObject(value, keyToParserMap) {\n        const keys = Object.keys(keyToParserMap);\n        const result = keys.reduce((tmp, key) => {\n            if (tmp === undefined) {\n                return undefined;\n            }\n            const parser = keyToParserMap[key];\n            const result = parser(value[key]);\n            return result.succeeded\n                ? Object.assign(Object.assign({}, tmp), { [key]: result.value }) : undefined;\n        }, {});\n        return forceCast(result);\n    }\n    function parseArray(value, parseItem) {\n        return value.reduce((tmp, item) => {\n            if (tmp === undefined) {\n                return undefined;\n            }\n            const result = parseItem(item);\n            if (!result.succeeded || result.value === undefined) {\n                return undefined;\n            }\n            return [...tmp, result.value];\n        }, []);\n    }\n    function isObject(value) {\n        if (value === null) {\n            return false;\n        }\n        return typeof value === 'object';\n    }\n    function createParamsParserBuilder(parse) {\n        return (optional) => (v) => {\n            if (!optional && v === undefined) {\n                return {\n                    succeeded: false,\n                    value: undefined,\n                };\n            }\n            if (optional && v === undefined) {\n                return {\n                    succeeded: true,\n                    value: undefined,\n                };\n            }\n            const result = parse(v);\n            return result !== undefined\n                ? {\n                    succeeded: true,\n                    value: result,\n                }\n                : {\n                    succeeded: false,\n                    value: undefined,\n                };\n        };\n    }\n    function createParamsParserBuilders(optional) {\n        return {\n            custom: (parse) => createParamsParserBuilder(parse)(optional),\n            boolean: createParamsParserBuilder((v) => typeof v === 'boolean' ? v : undefined)(optional),\n            number: createParamsParserBuilder((v) => typeof v === 'number' ? v : undefined)(optional),\n            string: createParamsParserBuilder((v) => typeof v === 'string' ? v : undefined)(optional),\n            function: createParamsParserBuilder((v) =>\n            typeof v === 'function' ? v : undefined)(optional),\n            constant: (value) => createParamsParserBuilder((v) => (v === value ? value : undefined))(optional),\n            raw: createParamsParserBuilder((v) => v)(optional),\n            object: (keyToParserMap) => createParamsParserBuilder((v) => {\n                if (!isObject(v)) {\n                    return undefined;\n                }\n                return parseObject(v, keyToParserMap);\n            })(optional),\n            array: (itemParser) => createParamsParserBuilder((v) => {\n                if (!Array.isArray(v)) {\n                    return undefined;\n                }\n                return parseArray(v, itemParser);\n            })(optional),\n        };\n    }\n    const ParamsParsers = {\n        optional: createParamsParserBuilders(true),\n        required: createParamsParserBuilders(false),\n    };\n    function parseParams(value, keyToParserMap) {\n        const result = ParamsParsers.required.object(keyToParserMap)(value);\n        return result.succeeded ? result.value : undefined;\n    }\n\n    function warnMissing(info) {\n        console.warn([\n            `Missing '${info.key}' of ${info.target} in ${info.place}.`,\n            'Please rebuild plugins with the latest core package.',\n        ].join(' '));\n    }\n\n    function disposeElement(elem) {\n        if (elem && elem.parentElement) {\n            elem.parentElement.removeChild(elem);\n        }\n        return null;\n    }\n\n    class ReadonlyValue {\n        constructor(value) {\n            this.value_ = value;\n        }\n        static create(value) {\n            return [\n                new ReadonlyValue(value),\n                (rawValue, options) => {\n                    value.setRawValue(rawValue, options);\n                },\n            ];\n        }\n        get emitter() {\n            return this.value_.emitter;\n        }\n        get rawValue() {\n            return this.value_.rawValue;\n        }\n    }\n\n    const className$p = ClassName('');\n    function valueToModifier(elem, modifier) {\n        return valueToClassName(elem, className$p(undefined, modifier));\n    }\n    class ViewProps extends ValueMap {\n        constructor(valueMap) {\n            var _a;\n            super(valueMap);\n            this.onDisabledChange_ = this.onDisabledChange_.bind(this);\n            this.onParentChange_ = this.onParentChange_.bind(this);\n            this.onParentGlobalDisabledChange_ =\n                this.onParentGlobalDisabledChange_.bind(this);\n            [this.globalDisabled_, this.setGlobalDisabled_] = ReadonlyValue.create(createValue(this.getGlobalDisabled_()));\n            this.value('disabled').emitter.on('change', this.onDisabledChange_);\n            this.value('parent').emitter.on('change', this.onParentChange_);\n            (_a = this.get('parent')) === null || _a === void 0 ? void 0 : _a.globalDisabled.emitter.on('change', this.onParentGlobalDisabledChange_);\n        }\n        static create(opt_initialValue) {\n            var _a, _b, _c;\n            const initialValue = opt_initialValue !== null && opt_initialValue !== void 0 ? opt_initialValue : {};\n            return new ViewProps(ValueMap.createCore({\n                disabled: (_a = initialValue.disabled) !== null && _a !== void 0 ? _a : false,\n                disposed: false,\n                hidden: (_b = initialValue.hidden) !== null && _b !== void 0 ? _b : false,\n                parent: (_c = initialValue.parent) !== null && _c !== void 0 ? _c : null,\n            }));\n        }\n        get globalDisabled() {\n            return this.globalDisabled_;\n        }\n        bindClassModifiers(elem) {\n            bindValue(this.globalDisabled_, valueToModifier(elem, 'disabled'));\n            bindValueMap(this, 'hidden', valueToModifier(elem, 'hidden'));\n        }\n        bindDisabled(target) {\n            bindValue(this.globalDisabled_, (disabled) => {\n                target.disabled = disabled;\n            });\n        }\n        bindTabIndex(elem) {\n            bindValue(this.globalDisabled_, (disabled) => {\n                elem.tabIndex = disabled ? -1 : 0;\n            });\n        }\n        handleDispose(callback) {\n            this.value('disposed').emitter.on('change', (disposed) => {\n                if (disposed) {\n                    callback();\n                }\n            });\n        }\n        getGlobalDisabled_() {\n            const parent = this.get('parent');\n            const parentDisabled = parent ? parent.globalDisabled.rawValue : false;\n            return parentDisabled || this.get('disabled');\n        }\n        updateGlobalDisabled_() {\n            this.setGlobalDisabled_(this.getGlobalDisabled_());\n        }\n        onDisabledChange_() {\n            this.updateGlobalDisabled_();\n        }\n        onParentGlobalDisabledChange_() {\n            this.updateGlobalDisabled_();\n        }\n        onParentChange_(ev) {\n            var _a;\n            const prevParent = ev.previousRawValue;\n            prevParent === null || prevParent === void 0 ? void 0 : prevParent.globalDisabled.emitter.off('change', this.onParentGlobalDisabledChange_);\n            (_a = this.get('parent')) === null || _a === void 0 ? void 0 : _a.globalDisabled.emitter.on('change', this.onParentGlobalDisabledChange_);\n            this.updateGlobalDisabled_();\n        }\n    }\n\n    function getAllBladePositions() {\n        return ['veryfirst', 'first', 'last', 'verylast'];\n    }\n\n    const className$o = ClassName('');\n    const POS_TO_CLASS_NAME_MAP = {\n        veryfirst: 'vfst',\n        first: 'fst',\n        last: 'lst',\n        verylast: 'vlst',\n    };\n    class BladeController {\n        constructor(config) {\n            this.parent_ = null;\n            this.blade = config.blade;\n            this.view = config.view;\n            this.viewProps = config.viewProps;\n            const elem = this.view.element;\n            this.blade.value('positions').emitter.on('change', () => {\n                getAllBladePositions().forEach((pos) => {\n                    elem.classList.remove(className$o(undefined, POS_TO_CLASS_NAME_MAP[pos]));\n                });\n                this.blade.get('positions').forEach((pos) => {\n                    elem.classList.add(className$o(undefined, POS_TO_CLASS_NAME_MAP[pos]));\n                });\n            });\n            this.viewProps.handleDispose(() => {\n                disposeElement(elem);\n            });\n        }\n        get parent() {\n            return this.parent_;\n        }\n        set parent(parent) {\n            this.parent_ = parent;\n            if (!('parent' in this.viewProps.valMap_)) {\n                warnMissing({\n                    key: 'parent',\n                    target: ViewProps.name,\n                    place: 'BladeController.parent',\n                });\n                return;\n            }\n            this.viewProps.set('parent', this.parent_ ? this.parent_.viewProps : null);\n        }\n    }\n\n    const SVG_NS = 'http://www.w3.org/2000/svg';\n    function forceReflow(element) {\n        element.offsetHeight;\n    }\n    function disableTransitionTemporarily(element, callback) {\n        const t = element.style.transition;\n        element.style.transition = 'none';\n        callback();\n        element.style.transition = t;\n    }\n    function supportsTouch(doc) {\n        return doc.ontouchstart !== undefined;\n    }\n    function getGlobalObject() {\n        return globalThis;\n    }\n    function getWindowDocument() {\n        const globalObj = forceCast(getGlobalObject());\n        return globalObj.document;\n    }\n    function getCanvasContext(canvasElement) {\n        const win = canvasElement.ownerDocument.defaultView;\n        if (!win) {\n            return null;\n        }\n        const isBrowser = 'document' in win;\n        return isBrowser\n            ? canvasElement.getContext('2d', {\n                willReadFrequently: true,\n            })\n            : null;\n    }\n    const ICON_ID_TO_INNER_HTML_MAP = {\n        check: '<path d=\"M2 8l4 4l8 -8\"/>',\n        dropdown: '<path d=\"M5 7h6l-3 3 z\"/>',\n        p2dpad: '<path d=\"M8 4v8\"/><path d=\"M4 8h8\"/><circle cx=\"12\" cy=\"12\" r=\"1.2\"/>',\n    };\n    function createSvgIconElement(document, iconId) {\n        const elem = document.createElementNS(SVG_NS, 'svg');\n        elem.innerHTML = ICON_ID_TO_INNER_HTML_MAP[iconId];\n        return elem;\n    }\n    function insertElementAt(parentElement, element, index) {\n        parentElement.insertBefore(element, parentElement.children[index]);\n    }\n    function removeElement(element) {\n        if (element.parentElement) {\n            element.parentElement.removeChild(element);\n        }\n    }\n    function removeChildElements(element) {\n        while (element.children.length > 0) {\n            element.removeChild(element.children[0]);\n        }\n    }\n    function removeChildNodes(element) {\n        while (element.childNodes.length > 0) {\n            element.removeChild(element.childNodes[0]);\n        }\n    }\n    function findNextTarget(ev) {\n        if (ev.relatedTarget) {\n            return forceCast(ev.relatedTarget);\n        }\n        if ('explicitOriginalTarget' in ev) {\n            return ev.explicitOriginalTarget;\n        }\n        return null;\n    }\n\n    const className$n = ClassName('lbl');\n    function createLabelNode(doc, label) {\n        const frag = doc.createDocumentFragment();\n        const lineNodes = label.split('\\n').map((line) => {\n            return doc.createTextNode(line);\n        });\n        lineNodes.forEach((lineNode, index) => {\n            if (index > 0) {\n                frag.appendChild(doc.createElement('br'));\n            }\n            frag.appendChild(lineNode);\n        });\n        return frag;\n    }\n    class LabelView {\n        constructor(doc, config) {\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$n());\n            config.viewProps.bindClassModifiers(this.element);\n            const labelElem = doc.createElement('div');\n            labelElem.classList.add(className$n('l'));\n            bindValueMap(config.props, 'label', (value) => {\n                if (isEmpty(value)) {\n                    this.element.classList.add(className$n(undefined, 'nol'));\n                }\n                else {\n                    this.element.classList.remove(className$n(undefined, 'nol'));\n                    removeChildNodes(labelElem);\n                    labelElem.appendChild(createLabelNode(doc, value));\n                }\n            });\n            this.element.appendChild(labelElem);\n            this.labelElement = labelElem;\n            const valueElem = doc.createElement('div');\n            valueElem.classList.add(className$n('v'));\n            this.element.appendChild(valueElem);\n            this.valueElement = valueElem;\n        }\n    }\n\n    class LabelController extends BladeController {\n        constructor(doc, config) {\n            const viewProps = config.valueController.viewProps;\n            super(Object.assign(Object.assign({}, config), { view: new LabelView(doc, {\n                    props: config.props,\n                    viewProps: viewProps,\n                }), viewProps: viewProps }));\n            this.props = config.props;\n            this.valueController = config.valueController;\n            this.view.valueElement.appendChild(this.valueController.view.element);\n        }\n    }\n\n    const ButtonBladePlugin = {\n        id: 'button',\n        type: 'blade',\n        accept(params) {\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                title: p.required.string,\n                view: p.required.constant('button'),\n                label: p.optional.string,\n            });\n            return result ? { params: result } : null;\n        },\n        controller(args) {\n            return new LabelController(args.document, {\n                blade: args.blade,\n                props: ValueMap.fromObject({\n                    label: args.params.label,\n                }),\n                valueController: new ButtonController(args.document, {\n                    props: ValueMap.fromObject({\n                        title: args.params.title,\n                    }),\n                    viewProps: args.viewProps,\n                }),\n            });\n        },\n        api(args) {\n            if (!(args.controller instanceof LabelController)) {\n                return null;\n            }\n            if (!(args.controller.valueController instanceof ButtonController)) {\n                return null;\n            }\n            return new ButtonApi(args.controller);\n        },\n    };\n\n    class ValueBladeController extends BladeController {\n        constructor(config) {\n            super(config);\n            this.value = config.value;\n        }\n    }\n\n    function createBlade() {\n        return new ValueMap({\n            positions: createValue([], {\n                equals: deepEqualsArray,\n            }),\n        });\n    }\n\n    class Foldable extends ValueMap {\n        constructor(valueMap) {\n            super(valueMap);\n        }\n        static create(expanded) {\n            const coreObj = {\n                completed: true,\n                expanded: expanded,\n                expandedHeight: null,\n                shouldFixHeight: false,\n                temporaryExpanded: null,\n            };\n            const core = ValueMap.createCore(coreObj);\n            return new Foldable(core);\n        }\n        get styleExpanded() {\n            var _a;\n            return (_a = this.get('temporaryExpanded')) !== null && _a !== void 0 ? _a : this.get('expanded');\n        }\n        get styleHeight() {\n            if (!this.styleExpanded) {\n                return '0';\n            }\n            const exHeight = this.get('expandedHeight');\n            if (this.get('shouldFixHeight') && !isEmpty(exHeight)) {\n                return `${exHeight}px`;\n            }\n            return 'auto';\n        }\n        bindExpandedClass(elem, expandedClassName) {\n            const onExpand = () => {\n                const expanded = this.styleExpanded;\n                if (expanded) {\n                    elem.classList.add(expandedClassName);\n                }\n                else {\n                    elem.classList.remove(expandedClassName);\n                }\n            };\n            bindValueMap(this, 'expanded', onExpand);\n            bindValueMap(this, 'temporaryExpanded', onExpand);\n        }\n        cleanUpTransition() {\n            this.set('shouldFixHeight', false);\n            this.set('expandedHeight', null);\n            this.set('completed', true);\n        }\n    }\n    function computeExpandedFolderHeight(folder, containerElement) {\n        let height = 0;\n        disableTransitionTemporarily(containerElement, () => {\n            folder.set('expandedHeight', null);\n            folder.set('temporaryExpanded', true);\n            forceReflow(containerElement);\n            height = containerElement.clientHeight;\n            folder.set('temporaryExpanded', null);\n            forceReflow(containerElement);\n        });\n        return height;\n    }\n    function applyHeight(foldable, elem) {\n        elem.style.height = foldable.styleHeight;\n    }\n    function bindFoldable(foldable, elem) {\n        foldable.value('expanded').emitter.on('beforechange', () => {\n            foldable.set('completed', false);\n            if (isEmpty(foldable.get('expandedHeight'))) {\n                const h = computeExpandedFolderHeight(foldable, elem);\n                if (h > 0) {\n                    foldable.set('expandedHeight', h);\n                }\n            }\n            foldable.set('shouldFixHeight', true);\n            forceReflow(elem);\n        });\n        foldable.emitter.on('change', () => {\n            applyHeight(foldable, elem);\n        });\n        applyHeight(foldable, elem);\n        elem.addEventListener('transitionend', (ev) => {\n            if (ev.propertyName !== 'height') {\n                return;\n            }\n            foldable.cleanUpTransition();\n        });\n    }\n\n    class RackLikeApi extends BladeApi {\n        constructor(controller, rackApi) {\n            super(controller);\n            this.rackApi_ = rackApi;\n        }\n    }\n\n    function addButtonAsBlade(api, params) {\n        return api.addBlade(Object.assign(Object.assign({}, params), { view: 'button' }));\n    }\n    function addFolderAsBlade(api, params) {\n        return api.addBlade(Object.assign(Object.assign({}, params), { view: 'folder' }));\n    }\n    function addSeparatorAsBlade(api, opt_params) {\n        const params = opt_params !== null && opt_params !== void 0 ? opt_params : {};\n        return api.addBlade(Object.assign(Object.assign({}, params), { view: 'separator' }));\n    }\n    function addTabAsBlade(api, params) {\n        return api.addBlade(Object.assign(Object.assign({}, params), { view: 'tab' }));\n    }\n\n    class NestedOrderedSet {\n        constructor(extract) {\n            this.emitter = new Emitter();\n            this.items_ = [];\n            this.cache_ = new Set();\n            this.onSubListAdd_ = this.onSubListAdd_.bind(this);\n            this.onSubListRemove_ = this.onSubListRemove_.bind(this);\n            this.extract_ = extract;\n        }\n        get items() {\n            return this.items_;\n        }\n        allItems() {\n            return Array.from(this.cache_);\n        }\n        find(callback) {\n            for (const item of this.allItems()) {\n                if (callback(item)) {\n                    return item;\n                }\n            }\n            return null;\n        }\n        includes(item) {\n            return this.cache_.has(item);\n        }\n        add(item, opt_index) {\n            if (this.includes(item)) {\n                throw TpError.shouldNeverHappen();\n            }\n            const index = opt_index !== undefined ? opt_index : this.items_.length;\n            this.items_.splice(index, 0, item);\n            this.cache_.add(item);\n            const subList = this.extract_(item);\n            if (subList) {\n                subList.emitter.on('add', this.onSubListAdd_);\n                subList.emitter.on('remove', this.onSubListRemove_);\n                subList.allItems().forEach((item) => {\n                    this.cache_.add(item);\n                });\n            }\n            this.emitter.emit('add', {\n                index: index,\n                item: item,\n                root: this,\n                target: this,\n            });\n        }\n        remove(item) {\n            const index = this.items_.indexOf(item);\n            if (index < 0) {\n                return;\n            }\n            this.items_.splice(index, 1);\n            this.cache_.delete(item);\n            const subList = this.extract_(item);\n            if (subList) {\n                subList.emitter.off('add', this.onSubListAdd_);\n                subList.emitter.off('remove', this.onSubListRemove_);\n            }\n            this.emitter.emit('remove', {\n                index: index,\n                item: item,\n                root: this,\n                target: this,\n            });\n        }\n        onSubListAdd_(ev) {\n            this.cache_.add(ev.item);\n            this.emitter.emit('add', {\n                index: ev.index,\n                item: ev.item,\n                root: this,\n                target: ev.target,\n            });\n        }\n        onSubListRemove_(ev) {\n            this.cache_.delete(ev.item);\n            this.emitter.emit('remove', {\n                index: ev.index,\n                item: ev.item,\n                root: this,\n                target: ev.target,\n            });\n        }\n    }\n\n    class InputBindingApi extends BladeApi {\n        constructor(controller) {\n            super(controller);\n            this.onBindingChange_ = this.onBindingChange_.bind(this);\n            this.emitter_ = new Emitter();\n            this.controller_.binding.emitter.on('change', this.onBindingChange_);\n        }\n        get label() {\n            return this.controller_.props.get('label');\n        }\n        set label(label) {\n            this.controller_.props.set('label', label);\n        }\n        on(eventName, handler) {\n            const bh = handler.bind(this);\n            this.emitter_.on(eventName, (ev) => {\n                bh(ev.event);\n            });\n            return this;\n        }\n        refresh() {\n            this.controller_.binding.read();\n        }\n        onBindingChange_(ev) {\n            const value = ev.sender.target.read();\n            this.emitter_.emit('change', {\n                event: new TpChangeEvent(this, forceCast(value), this.controller_.binding.target.presetKey, ev.options.last),\n            });\n        }\n    }\n\n    class InputBindingController extends LabelController {\n        constructor(doc, config) {\n            super(doc, config);\n            this.binding = config.binding;\n        }\n    }\n\n    class MonitorBindingApi extends BladeApi {\n        constructor(controller) {\n            super(controller);\n            this.onBindingUpdate_ = this.onBindingUpdate_.bind(this);\n            this.emitter_ = new Emitter();\n            this.controller_.binding.emitter.on('update', this.onBindingUpdate_);\n        }\n        get label() {\n            return this.controller_.props.get('label');\n        }\n        set label(label) {\n            this.controller_.props.set('label', label);\n        }\n        on(eventName, handler) {\n            const bh = handler.bind(this);\n            this.emitter_.on(eventName, (ev) => {\n                bh(ev.event);\n            });\n            return this;\n        }\n        refresh() {\n            this.controller_.binding.read();\n        }\n        onBindingUpdate_(ev) {\n            const value = ev.sender.target.read();\n            this.emitter_.emit('update', {\n                event: new TpUpdateEvent(this, forceCast(value), this.controller_.binding.target.presetKey),\n            });\n        }\n    }\n\n    class MonitorBindingController extends LabelController {\n        constructor(doc, config) {\n            super(doc, config);\n            this.binding = config.binding;\n            this.viewProps.bindDisabled(this.binding.ticker);\n            this.viewProps.handleDispose(() => {\n                this.binding.dispose();\n            });\n        }\n    }\n\n    function findSubBladeApiSet(api) {\n        if (api instanceof RackApi) {\n            return api['apiSet_'];\n        }\n        if (api instanceof RackLikeApi) {\n            return api['rackApi_']['apiSet_'];\n        }\n        return null;\n    }\n    function getApiByController(apiSet, controller) {\n        const api = apiSet.find((api) => api.controller_ === controller);\n        if (!api) {\n            throw TpError.shouldNeverHappen();\n        }\n        return api;\n    }\n    function createBindingTarget(obj, key, opt_id) {\n        if (!BindingTarget.isBindable(obj)) {\n            throw TpError.notBindable();\n        }\n        return new BindingTarget(obj, key, opt_id);\n    }\n    class RackApi extends BladeApi {\n        constructor(controller, pool) {\n            super(controller);\n            this.onRackAdd_ = this.onRackAdd_.bind(this);\n            this.onRackRemove_ = this.onRackRemove_.bind(this);\n            this.onRackInputChange_ = this.onRackInputChange_.bind(this);\n            this.onRackMonitorUpdate_ = this.onRackMonitorUpdate_.bind(this);\n            this.emitter_ = new Emitter();\n            this.apiSet_ = new NestedOrderedSet(findSubBladeApiSet);\n            this.pool_ = pool;\n            const rack = this.controller_.rack;\n            rack.emitter.on('add', this.onRackAdd_);\n            rack.emitter.on('remove', this.onRackRemove_);\n            rack.emitter.on('inputchange', this.onRackInputChange_);\n            rack.emitter.on('monitorupdate', this.onRackMonitorUpdate_);\n            rack.children.forEach((bc) => {\n                this.setUpApi_(bc);\n            });\n        }\n        get children() {\n            return this.controller_.rack.children.map((bc) => getApiByController(this.apiSet_, bc));\n        }\n        addInput(object, key, opt_params) {\n            const params = opt_params !== null && opt_params !== void 0 ? opt_params : {};\n            const doc = this.controller_.view.element.ownerDocument;\n            const bc = this.pool_.createInput(doc, createBindingTarget(object, key, params.presetKey), params);\n            const api = new InputBindingApi(bc);\n            return this.add(api, params.index);\n        }\n        addMonitor(object, key, opt_params) {\n            const params = opt_params !== null && opt_params !== void 0 ? opt_params : {};\n            const doc = this.controller_.view.element.ownerDocument;\n            const bc = this.pool_.createMonitor(doc, createBindingTarget(object, key), params);\n            const api = new MonitorBindingApi(bc);\n            return forceCast(this.add(api, params.index));\n        }\n        addFolder(params) {\n            return addFolderAsBlade(this, params);\n        }\n        addButton(params) {\n            return addButtonAsBlade(this, params);\n        }\n        addSeparator(opt_params) {\n            return addSeparatorAsBlade(this, opt_params);\n        }\n        addTab(params) {\n            return addTabAsBlade(this, params);\n        }\n        add(api, opt_index) {\n            this.controller_.rack.add(api.controller_, opt_index);\n            const gapi = this.apiSet_.find((a) => a.controller_ === api.controller_);\n            if (gapi) {\n                this.apiSet_.remove(gapi);\n            }\n            this.apiSet_.add(api);\n            return api;\n        }\n        remove(api) {\n            this.controller_.rack.remove(api.controller_);\n        }\n        addBlade(params) {\n            const doc = this.controller_.view.element.ownerDocument;\n            const bc = this.pool_.createBlade(doc, params);\n            const api = this.pool_.createBladeApi(bc);\n            return this.add(api, params.index);\n        }\n        on(eventName, handler) {\n            const bh = handler.bind(this);\n            this.emitter_.on(eventName, (ev) => {\n                bh(ev.event);\n            });\n            return this;\n        }\n        setUpApi_(bc) {\n            const api = this.apiSet_.find((api) => api.controller_ === bc);\n            if (!api) {\n                this.apiSet_.add(this.pool_.createBladeApi(bc));\n            }\n        }\n        onRackAdd_(ev) {\n            this.setUpApi_(ev.bladeController);\n        }\n        onRackRemove_(ev) {\n            if (ev.isRoot) {\n                const api = getApiByController(this.apiSet_, ev.bladeController);\n                this.apiSet_.remove(api);\n            }\n        }\n        onRackInputChange_(ev) {\n            const bc = ev.bladeController;\n            if (bc instanceof InputBindingController) {\n                const api = getApiByController(this.apiSet_, bc);\n                const binding = bc.binding;\n                this.emitter_.emit('change', {\n                    event: new TpChangeEvent(api, forceCast(binding.target.read()), binding.target.presetKey, ev.options.last),\n                });\n            }\n            else if (bc instanceof ValueBladeController) {\n                const api = getApiByController(this.apiSet_, bc);\n                this.emitter_.emit('change', {\n                    event: new TpChangeEvent(api, bc.value.rawValue, undefined, ev.options.last),\n                });\n            }\n        }\n        onRackMonitorUpdate_(ev) {\n            if (!(ev.bladeController instanceof MonitorBindingController)) {\n                throw TpError.shouldNeverHappen();\n            }\n            const api = getApiByController(this.apiSet_, ev.bladeController);\n            const binding = ev.bladeController.binding;\n            this.emitter_.emit('update', {\n                event: new TpUpdateEvent(api, forceCast(binding.target.read()), binding.target.presetKey),\n            });\n        }\n    }\n\n    class FolderApi extends RackLikeApi {\n        constructor(controller, pool) {\n            super(controller, new RackApi(controller.rackController, pool));\n            this.emitter_ = new Emitter();\n            this.controller_.foldable\n                .value('expanded')\n                .emitter.on('change', (ev) => {\n                this.emitter_.emit('fold', {\n                    event: new TpFoldEvent(this, ev.sender.rawValue),\n                });\n            });\n            this.rackApi_.on('change', (ev) => {\n                this.emitter_.emit('change', {\n                    event: ev,\n                });\n            });\n            this.rackApi_.on('update', (ev) => {\n                this.emitter_.emit('update', {\n                    event: ev,\n                });\n            });\n        }\n        get expanded() {\n            return this.controller_.foldable.get('expanded');\n        }\n        set expanded(expanded) {\n            this.controller_.foldable.set('expanded', expanded);\n        }\n        get title() {\n            return this.controller_.props.get('title');\n        }\n        set title(title) {\n            this.controller_.props.set('title', title);\n        }\n        get children() {\n            return this.rackApi_.children;\n        }\n        addInput(object, key, opt_params) {\n            return this.rackApi_.addInput(object, key, opt_params);\n        }\n        addMonitor(object, key, opt_params) {\n            return this.rackApi_.addMonitor(object, key, opt_params);\n        }\n        addFolder(params) {\n            return this.rackApi_.addFolder(params);\n        }\n        addButton(params) {\n            return this.rackApi_.addButton(params);\n        }\n        addSeparator(opt_params) {\n            return this.rackApi_.addSeparator(opt_params);\n        }\n        addTab(params) {\n            return this.rackApi_.addTab(params);\n        }\n        add(api, opt_index) {\n            return this.rackApi_.add(api, opt_index);\n        }\n        remove(api) {\n            this.rackApi_.remove(api);\n        }\n        addBlade(params) {\n            return this.rackApi_.addBlade(params);\n        }\n        on(eventName, handler) {\n            const bh = handler.bind(this);\n            this.emitter_.on(eventName, (ev) => {\n                bh(ev.event);\n            });\n            return this;\n        }\n    }\n\n    class RackLikeController extends BladeController {\n        constructor(config) {\n            super({\n                blade: config.blade,\n                view: config.view,\n                viewProps: config.rackController.viewProps,\n            });\n            this.rackController = config.rackController;\n        }\n    }\n\n    class PlainView {\n        constructor(doc, config) {\n            const className = ClassName(config.viewName);\n            this.element = doc.createElement('div');\n            this.element.classList.add(className());\n            config.viewProps.bindClassModifiers(this.element);\n        }\n    }\n\n    function findInputBindingController(bcs, b) {\n        for (let i = 0; i < bcs.length; i++) {\n            const bc = bcs[i];\n            if (bc instanceof InputBindingController && bc.binding === b) {\n                return bc;\n            }\n        }\n        return null;\n    }\n    function findMonitorBindingController(bcs, b) {\n        for (let i = 0; i < bcs.length; i++) {\n            const bc = bcs[i];\n            if (bc instanceof MonitorBindingController && bc.binding === b) {\n                return bc;\n            }\n        }\n        return null;\n    }\n    function findValueBladeController(bcs, v) {\n        for (let i = 0; i < bcs.length; i++) {\n            const bc = bcs[i];\n            if (bc instanceof ValueBladeController && bc.value === v) {\n                return bc;\n            }\n        }\n        return null;\n    }\n    function findSubRack(bc) {\n        if (bc instanceof RackController) {\n            return bc.rack;\n        }\n        if (bc instanceof RackLikeController) {\n            return bc.rackController.rack;\n        }\n        return null;\n    }\n    function findSubBladeControllerSet(bc) {\n        const rack = findSubRack(bc);\n        return rack ? rack['bcSet_'] : null;\n    }\n    class BladeRack {\n        constructor(config) {\n            var _a, _b;\n            this.onBladePositionsChange_ = this.onBladePositionsChange_.bind(this);\n            this.onSetAdd_ = this.onSetAdd_.bind(this);\n            this.onSetRemove_ = this.onSetRemove_.bind(this);\n            this.onChildDispose_ = this.onChildDispose_.bind(this);\n            this.onChildPositionsChange_ = this.onChildPositionsChange_.bind(this);\n            this.onChildInputChange_ = this.onChildInputChange_.bind(this);\n            this.onChildMonitorUpdate_ = this.onChildMonitorUpdate_.bind(this);\n            this.onChildValueChange_ = this.onChildValueChange_.bind(this);\n            this.onChildViewPropsChange_ = this.onChildViewPropsChange_.bind(this);\n            this.onDescendantLayout_ = this.onDescendantLayout_.bind(this);\n            this.onDescendantInputChange_ = this.onDescendantInputChange_.bind(this);\n            this.onDescendantMonitorUpdate_ =\n                this.onDescendantMonitorUpdate_.bind(this);\n            this.emitter = new Emitter();\n            this.blade_ = (_a = config.blade) !== null && _a !== void 0 ? _a : null;\n            (_b = this.blade_) === null || _b === void 0 ? void 0 : _b.value('positions').emitter.on('change', this.onBladePositionsChange_);\n            this.viewProps = config.viewProps;\n            this.bcSet_ = new NestedOrderedSet(findSubBladeControllerSet);\n            this.bcSet_.emitter.on('add', this.onSetAdd_);\n            this.bcSet_.emitter.on('remove', this.onSetRemove_);\n        }\n        get children() {\n            return this.bcSet_.items;\n        }\n        add(bc, opt_index) {\n            var _a;\n            (_a = bc.parent) === null || _a === void 0 ? void 0 : _a.remove(bc);\n            if (isPropertyWritable(bc, 'parent')) {\n                bc.parent = this;\n            }\n            else {\n                bc['parent_'] = this;\n                warnMissing({\n                    key: 'parent',\n                    target: 'BladeController',\n                    place: 'BladeRack.add',\n                });\n            }\n            this.bcSet_.add(bc, opt_index);\n        }\n        remove(bc) {\n            if (isPropertyWritable(bc, 'parent')) {\n                bc.parent = null;\n            }\n            else {\n                bc['parent_'] = null;\n                warnMissing({\n                    key: 'parent',\n                    target: 'BladeController',\n                    place: 'BladeRack.remove',\n                });\n            }\n            this.bcSet_.remove(bc);\n        }\n        find(controllerClass) {\n            return forceCast(this.bcSet_.allItems().filter((bc) => {\n                return bc instanceof controllerClass;\n            }));\n        }\n        onSetAdd_(ev) {\n            this.updatePositions_();\n            const isRoot = ev.target === ev.root;\n            this.emitter.emit('add', {\n                bladeController: ev.item,\n                index: ev.index,\n                isRoot: isRoot,\n                sender: this,\n            });\n            if (!isRoot) {\n                return;\n            }\n            const bc = ev.item;\n            bc.viewProps.emitter.on('change', this.onChildViewPropsChange_);\n            bc.blade\n                .value('positions')\n                .emitter.on('change', this.onChildPositionsChange_);\n            bc.viewProps.handleDispose(this.onChildDispose_);\n            if (bc instanceof InputBindingController) {\n                bc.binding.emitter.on('change', this.onChildInputChange_);\n            }\n            else if (bc instanceof MonitorBindingController) {\n                bc.binding.emitter.on('update', this.onChildMonitorUpdate_);\n            }\n            else if (bc instanceof ValueBladeController) {\n                bc.value.emitter.on('change', this.onChildValueChange_);\n            }\n            else {\n                const rack = findSubRack(bc);\n                if (rack) {\n                    const emitter = rack.emitter;\n                    emitter.on('layout', this.onDescendantLayout_);\n                    emitter.on('inputchange', this.onDescendantInputChange_);\n                    emitter.on('monitorupdate', this.onDescendantMonitorUpdate_);\n                }\n            }\n        }\n        onSetRemove_(ev) {\n            this.updatePositions_();\n            const isRoot = ev.target === ev.root;\n            this.emitter.emit('remove', {\n                bladeController: ev.item,\n                isRoot: isRoot,\n                sender: this,\n            });\n            if (!isRoot) {\n                return;\n            }\n            const bc = ev.item;\n            if (bc instanceof InputBindingController) {\n                bc.binding.emitter.off('change', this.onChildInputChange_);\n            }\n            else if (bc instanceof MonitorBindingController) {\n                bc.binding.emitter.off('update', this.onChildMonitorUpdate_);\n            }\n            else if (bc instanceof ValueBladeController) {\n                bc.value.emitter.off('change', this.onChildValueChange_);\n            }\n            else {\n                const rack = findSubRack(bc);\n                if (rack) {\n                    const emitter = rack.emitter;\n                    emitter.off('layout', this.onDescendantLayout_);\n                    emitter.off('inputchange', this.onDescendantInputChange_);\n                    emitter.off('monitorupdate', this.onDescendantMonitorUpdate_);\n                }\n            }\n        }\n        updatePositions_() {\n            const visibleItems = this.bcSet_.items.filter((bc) => !bc.viewProps.get('hidden'));\n            const firstVisibleItem = visibleItems[0];\n            const lastVisibleItem = visibleItems[visibleItems.length - 1];\n            this.bcSet_.items.forEach((bc) => {\n                const ps = [];\n                if (bc === firstVisibleItem) {\n                    ps.push('first');\n                    if (!this.blade_ ||\n                        this.blade_.get('positions').includes('veryfirst')) {\n                        ps.push('veryfirst');\n                    }\n                }\n                if (bc === lastVisibleItem) {\n                    ps.push('last');\n                    if (!this.blade_ || this.blade_.get('positions').includes('verylast')) {\n                        ps.push('verylast');\n                    }\n                }\n                bc.blade.set('positions', ps);\n            });\n        }\n        onChildPositionsChange_() {\n            this.updatePositions_();\n            this.emitter.emit('layout', {\n                sender: this,\n            });\n        }\n        onChildViewPropsChange_(_ev) {\n            this.updatePositions_();\n            this.emitter.emit('layout', {\n                sender: this,\n            });\n        }\n        onChildDispose_() {\n            const disposedUcs = this.bcSet_.items.filter((bc) => {\n                return bc.viewProps.get('disposed');\n            });\n            disposedUcs.forEach((bc) => {\n                this.bcSet_.remove(bc);\n            });\n        }\n        onChildInputChange_(ev) {\n            const bc = findInputBindingController(this.find(InputBindingController), ev.sender);\n            if (!bc) {\n                throw TpError.alreadyDisposed();\n            }\n            this.emitter.emit('inputchange', {\n                bladeController: bc,\n                options: ev.options,\n                sender: this,\n            });\n        }\n        onChildMonitorUpdate_(ev) {\n            const bc = findMonitorBindingController(this.find(MonitorBindingController), ev.sender);\n            if (!bc) {\n                throw TpError.alreadyDisposed();\n            }\n            this.emitter.emit('monitorupdate', {\n                bladeController: bc,\n                sender: this,\n            });\n        }\n        onChildValueChange_(ev) {\n            const bc = findValueBladeController(this.find(ValueBladeController), ev.sender);\n            if (!bc) {\n                throw TpError.alreadyDisposed();\n            }\n            this.emitter.emit('inputchange', {\n                bladeController: bc,\n                options: ev.options,\n                sender: this,\n            });\n        }\n        onDescendantLayout_(_) {\n            this.updatePositions_();\n            this.emitter.emit('layout', {\n                sender: this,\n            });\n        }\n        onDescendantInputChange_(ev) {\n            this.emitter.emit('inputchange', {\n                bladeController: ev.bladeController,\n                options: ev.options,\n                sender: this,\n            });\n        }\n        onDescendantMonitorUpdate_(ev) {\n            this.emitter.emit('monitorupdate', {\n                bladeController: ev.bladeController,\n                sender: this,\n            });\n        }\n        onBladePositionsChange_() {\n            this.updatePositions_();\n        }\n    }\n\n    class RackController extends BladeController {\n        constructor(doc, config) {\n            super(Object.assign(Object.assign({}, config), { view: new PlainView(doc, {\n                    viewName: 'brk',\n                    viewProps: config.viewProps,\n                }) }));\n            this.onRackAdd_ = this.onRackAdd_.bind(this);\n            this.onRackRemove_ = this.onRackRemove_.bind(this);\n            const rack = new BladeRack({\n                blade: config.root ? undefined : config.blade,\n                viewProps: config.viewProps,\n            });\n            rack.emitter.on('add', this.onRackAdd_);\n            rack.emitter.on('remove', this.onRackRemove_);\n            this.rack = rack;\n            this.viewProps.handleDispose(() => {\n                for (let i = this.rack.children.length - 1; i >= 0; i--) {\n                    const bc = this.rack.children[i];\n                    bc.viewProps.set('disposed', true);\n                }\n            });\n        }\n        onRackAdd_(ev) {\n            if (!ev.isRoot) {\n                return;\n            }\n            insertElementAt(this.view.element, ev.bladeController.view.element, ev.index);\n        }\n        onRackRemove_(ev) {\n            if (!ev.isRoot) {\n                return;\n            }\n            removeElement(ev.bladeController.view.element);\n        }\n    }\n\n    const bladeContainerClassName = ClassName('cnt');\n\n    class FolderView {\n        constructor(doc, config) {\n            var _a;\n            this.className_ = ClassName((_a = config.viewName) !== null && _a !== void 0 ? _a : 'fld');\n            this.element = doc.createElement('div');\n            this.element.classList.add(this.className_(), bladeContainerClassName());\n            config.viewProps.bindClassModifiers(this.element);\n            this.foldable_ = config.foldable;\n            this.foldable_.bindExpandedClass(this.element, this.className_(undefined, 'expanded'));\n            bindValueMap(this.foldable_, 'completed', valueToClassName(this.element, this.className_(undefined, 'cpl')));\n            const buttonElem = doc.createElement('button');\n            buttonElem.classList.add(this.className_('b'));\n            bindValueMap(config.props, 'title', (title) => {\n                if (isEmpty(title)) {\n                    this.element.classList.add(this.className_(undefined, 'not'));\n                }\n                else {\n                    this.element.classList.remove(this.className_(undefined, 'not'));\n                }\n            });\n            config.viewProps.bindDisabled(buttonElem);\n            this.element.appendChild(buttonElem);\n            this.buttonElement = buttonElem;\n            const indentElem = doc.createElement('div');\n            indentElem.classList.add(this.className_('i'));\n            this.element.appendChild(indentElem);\n            const titleElem = doc.createElement('div');\n            titleElem.classList.add(this.className_('t'));\n            bindValueToTextContent(config.props.value('title'), titleElem);\n            this.buttonElement.appendChild(titleElem);\n            this.titleElement = titleElem;\n            const markElem = doc.createElement('div');\n            markElem.classList.add(this.className_('m'));\n            this.buttonElement.appendChild(markElem);\n            const containerElem = config.containerElement;\n            containerElem.classList.add(this.className_('c'));\n            this.element.appendChild(containerElem);\n            this.containerElement = containerElem;\n        }\n    }\n\n    class FolderController extends RackLikeController {\n        constructor(doc, config) {\n            var _a;\n            const foldable = Foldable.create((_a = config.expanded) !== null && _a !== void 0 ? _a : true);\n            const rc = new RackController(doc, {\n                blade: config.blade,\n                root: config.root,\n                viewProps: config.viewProps,\n            });\n            super(Object.assign(Object.assign({}, config), { rackController: rc, view: new FolderView(doc, {\n                    containerElement: rc.view.element,\n                    foldable: foldable,\n                    props: config.props,\n                    viewName: config.root ? 'rot' : undefined,\n                    viewProps: config.viewProps,\n                }) }));\n            this.onTitleClick_ = this.onTitleClick_.bind(this);\n            this.props = config.props;\n            this.foldable = foldable;\n            bindFoldable(this.foldable, this.view.containerElement);\n            this.rackController.rack.emitter.on('add', () => {\n                this.foldable.cleanUpTransition();\n            });\n            this.rackController.rack.emitter.on('remove', () => {\n                this.foldable.cleanUpTransition();\n            });\n            this.view.buttonElement.addEventListener('click', this.onTitleClick_);\n        }\n        get document() {\n            return this.view.element.ownerDocument;\n        }\n        onTitleClick_() {\n            this.foldable.set('expanded', !this.foldable.get('expanded'));\n        }\n    }\n\n    const FolderBladePlugin = {\n        id: 'folder',\n        type: 'blade',\n        accept(params) {\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                title: p.required.string,\n                view: p.required.constant('folder'),\n                expanded: p.optional.boolean,\n            });\n            return result ? { params: result } : null;\n        },\n        controller(args) {\n            return new FolderController(args.document, {\n                blade: args.blade,\n                expanded: args.params.expanded,\n                props: ValueMap.fromObject({\n                    title: args.params.title,\n                }),\n                viewProps: args.viewProps,\n            });\n        },\n        api(args) {\n            if (!(args.controller instanceof FolderController)) {\n                return null;\n            }\n            return new FolderApi(args.controller, args.pool);\n        },\n    };\n\n    class LabeledValueController extends ValueBladeController {\n        constructor(doc, config) {\n            const viewProps = config.valueController.viewProps;\n            super(Object.assign(Object.assign({}, config), { value: config.valueController.value, view: new LabelView(doc, {\n                    props: config.props,\n                    viewProps: viewProps,\n                }), viewProps: viewProps }));\n            this.props = config.props;\n            this.valueController = config.valueController;\n            this.view.valueElement.appendChild(this.valueController.view.element);\n        }\n    }\n\n    class SeparatorApi extends BladeApi {\n    }\n\n    const className$m = ClassName('spr');\n    class SeparatorView {\n        constructor(doc, config) {\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$m());\n            config.viewProps.bindClassModifiers(this.element);\n            const hrElem = doc.createElement('hr');\n            hrElem.classList.add(className$m('r'));\n            this.element.appendChild(hrElem);\n        }\n    }\n\n    class SeparatorController extends BladeController {\n        constructor(doc, config) {\n            super(Object.assign(Object.assign({}, config), { view: new SeparatorView(doc, {\n                    viewProps: config.viewProps,\n                }) }));\n        }\n    }\n\n    const SeparatorBladePlugin = {\n        id: 'separator',\n        type: 'blade',\n        accept(params) {\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                view: p.required.constant('separator'),\n            });\n            return result ? { params: result } : null;\n        },\n        controller(args) {\n            return new SeparatorController(args.document, {\n                blade: args.blade,\n                viewProps: args.viewProps,\n            });\n        },\n        api(args) {\n            if (!(args.controller instanceof SeparatorController)) {\n                return null;\n            }\n            return new SeparatorApi(args.controller);\n        },\n    };\n\n    const className$l = ClassName('tbi');\n    class TabItemView {\n        constructor(doc, config) {\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$l());\n            config.viewProps.bindClassModifiers(this.element);\n            bindValueMap(config.props, 'selected', (selected) => {\n                if (selected) {\n                    this.element.classList.add(className$l(undefined, 'sel'));\n                }\n                else {\n                    this.element.classList.remove(className$l(undefined, 'sel'));\n                }\n            });\n            const buttonElem = doc.createElement('button');\n            buttonElem.classList.add(className$l('b'));\n            config.viewProps.bindDisabled(buttonElem);\n            this.element.appendChild(buttonElem);\n            this.buttonElement = buttonElem;\n            const titleElem = doc.createElement('div');\n            titleElem.classList.add(className$l('t'));\n            bindValueToTextContent(config.props.value('title'), titleElem);\n            this.buttonElement.appendChild(titleElem);\n            this.titleElement = titleElem;\n        }\n    }\n\n    class TabItemController {\n        constructor(doc, config) {\n            this.emitter = new Emitter();\n            this.onClick_ = this.onClick_.bind(this);\n            this.props = config.props;\n            this.viewProps = config.viewProps;\n            this.view = new TabItemView(doc, {\n                props: config.props,\n                viewProps: config.viewProps,\n            });\n            this.view.buttonElement.addEventListener('click', this.onClick_);\n        }\n        onClick_() {\n            this.emitter.emit('click', {\n                sender: this,\n            });\n        }\n    }\n\n    class TabPageController {\n        constructor(doc, config) {\n            this.onItemClick_ = this.onItemClick_.bind(this);\n            this.ic_ = new TabItemController(doc, {\n                props: config.itemProps,\n                viewProps: ViewProps.create(),\n            });\n            this.ic_.emitter.on('click', this.onItemClick_);\n            this.cc_ = new RackController(doc, {\n                blade: createBlade(),\n                viewProps: ViewProps.create(),\n            });\n            this.props = config.props;\n            bindValueMap(this.props, 'selected', (selected) => {\n                this.itemController.props.set('selected', selected);\n                this.contentController.viewProps.set('hidden', !selected);\n            });\n        }\n        get itemController() {\n            return this.ic_;\n        }\n        get contentController() {\n            return this.cc_;\n        }\n        onItemClick_() {\n            this.props.set('selected', true);\n        }\n    }\n\n    class TabPageApi {\n        constructor(controller, contentRackApi) {\n            this.controller_ = controller;\n            this.rackApi_ = contentRackApi;\n        }\n        get title() {\n            var _a;\n            return (_a = this.controller_.itemController.props.get('title')) !== null && _a !== void 0 ? _a : '';\n        }\n        set title(title) {\n            this.controller_.itemController.props.set('title', title);\n        }\n        get selected() {\n            return this.controller_.props.get('selected');\n        }\n        set selected(selected) {\n            this.controller_.props.set('selected', selected);\n        }\n        get children() {\n            return this.rackApi_.children;\n        }\n        addButton(params) {\n            return this.rackApi_.addButton(params);\n        }\n        addFolder(params) {\n            return this.rackApi_.addFolder(params);\n        }\n        addSeparator(opt_params) {\n            return this.rackApi_.addSeparator(opt_params);\n        }\n        addTab(params) {\n            return this.rackApi_.addTab(params);\n        }\n        add(api, opt_index) {\n            this.rackApi_.add(api, opt_index);\n        }\n        remove(api) {\n            this.rackApi_.remove(api);\n        }\n        addInput(object, key, opt_params) {\n            return this.rackApi_.addInput(object, key, opt_params);\n        }\n        addMonitor(object, key, opt_params) {\n            return this.rackApi_.addMonitor(object, key, opt_params);\n        }\n        addBlade(params) {\n            return this.rackApi_.addBlade(params);\n        }\n    }\n\n    class TabApi extends RackLikeApi {\n        constructor(controller, pool) {\n            super(controller, new RackApi(controller.rackController, pool));\n            this.onPageAdd_ = this.onPageAdd_.bind(this);\n            this.onPageRemove_ = this.onPageRemove_.bind(this);\n            this.onSelect_ = this.onSelect_.bind(this);\n            this.emitter_ = new Emitter();\n            this.pageApiMap_ = new Map();\n            this.rackApi_.on('change', (ev) => {\n                this.emitter_.emit('change', {\n                    event: ev,\n                });\n            });\n            this.rackApi_.on('update', (ev) => {\n                this.emitter_.emit('update', {\n                    event: ev,\n                });\n            });\n            this.controller_.tab.selectedIndex.emitter.on('change', this.onSelect_);\n            this.controller_.pageSet.emitter.on('add', this.onPageAdd_);\n            this.controller_.pageSet.emitter.on('remove', this.onPageRemove_);\n            this.controller_.pageSet.items.forEach((pc) => {\n                this.setUpPageApi_(pc);\n            });\n        }\n        get pages() {\n            return this.controller_.pageSet.items.map((pc) => {\n                const api = this.pageApiMap_.get(pc);\n                if (!api) {\n                    throw TpError.shouldNeverHappen();\n                }\n                return api;\n            });\n        }\n        addPage(params) {\n            const doc = this.controller_.view.element.ownerDocument;\n            const pc = new TabPageController(doc, {\n                itemProps: ValueMap.fromObject({\n                    selected: false,\n                    title: params.title,\n                }),\n                props: ValueMap.fromObject({\n                    selected: false,\n                }),\n            });\n            this.controller_.add(pc, params.index);\n            const api = this.pageApiMap_.get(pc);\n            if (!api) {\n                throw TpError.shouldNeverHappen();\n            }\n            return api;\n        }\n        removePage(index) {\n            this.controller_.remove(index);\n        }\n        on(eventName, handler) {\n            const bh = handler.bind(this);\n            this.emitter_.on(eventName, (ev) => {\n                bh(ev.event);\n            });\n            return this;\n        }\n        setUpPageApi_(pc) {\n            const rackApi = this.rackApi_['apiSet_'].find((api) => api.controller_ === pc.contentController);\n            if (!rackApi) {\n                throw TpError.shouldNeverHappen();\n            }\n            const api = new TabPageApi(pc, rackApi);\n            this.pageApiMap_.set(pc, api);\n        }\n        onPageAdd_(ev) {\n            this.setUpPageApi_(ev.item);\n        }\n        onPageRemove_(ev) {\n            const api = this.pageApiMap_.get(ev.item);\n            if (!api) {\n                throw TpError.shouldNeverHappen();\n            }\n            this.pageApiMap_.delete(ev.item);\n        }\n        onSelect_(ev) {\n            this.emitter_.emit('select', {\n                event: new TpTabSelectEvent(this, ev.rawValue),\n            });\n        }\n    }\n\n    const INDEX_NOT_SELECTED = -1;\n    class Tab {\n        constructor() {\n            this.onItemSelectedChange_ = this.onItemSelectedChange_.bind(this);\n            this.empty = createValue(true);\n            this.selectedIndex = createValue(INDEX_NOT_SELECTED);\n            this.items_ = [];\n        }\n        add(item, opt_index) {\n            const index = opt_index !== null && opt_index !== void 0 ? opt_index : this.items_.length;\n            this.items_.splice(index, 0, item);\n            item.emitter.on('change', this.onItemSelectedChange_);\n            this.keepSelection_();\n        }\n        remove(item) {\n            const index = this.items_.indexOf(item);\n            if (index < 0) {\n                return;\n            }\n            this.items_.splice(index, 1);\n            item.emitter.off('change', this.onItemSelectedChange_);\n            this.keepSelection_();\n        }\n        keepSelection_() {\n            if (this.items_.length === 0) {\n                this.selectedIndex.rawValue = INDEX_NOT_SELECTED;\n                this.empty.rawValue = true;\n                return;\n            }\n            const firstSelIndex = this.items_.findIndex((s) => s.rawValue);\n            if (firstSelIndex < 0) {\n                this.items_.forEach((s, i) => {\n                    s.rawValue = i === 0;\n                });\n                this.selectedIndex.rawValue = 0;\n            }\n            else {\n                this.items_.forEach((s, i) => {\n                    s.rawValue = i === firstSelIndex;\n                });\n                this.selectedIndex.rawValue = firstSelIndex;\n            }\n            this.empty.rawValue = false;\n        }\n        onItemSelectedChange_(ev) {\n            if (ev.rawValue) {\n                const index = this.items_.findIndex((s) => s === ev.sender);\n                this.items_.forEach((s, i) => {\n                    s.rawValue = i === index;\n                });\n                this.selectedIndex.rawValue = index;\n            }\n            else {\n                this.keepSelection_();\n            }\n        }\n    }\n\n    const className$k = ClassName('tab');\n    class TabView {\n        constructor(doc, config) {\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$k(), bladeContainerClassName());\n            config.viewProps.bindClassModifiers(this.element);\n            bindValue(config.empty, valueToClassName(this.element, className$k(undefined, 'nop')));\n            const titleElem = doc.createElement('div');\n            titleElem.classList.add(className$k('t'));\n            this.element.appendChild(titleElem);\n            this.itemsElement = titleElem;\n            const indentElem = doc.createElement('div');\n            indentElem.classList.add(className$k('i'));\n            this.element.appendChild(indentElem);\n            const contentsElem = config.contentsElement;\n            contentsElem.classList.add(className$k('c'));\n            this.element.appendChild(contentsElem);\n            this.contentsElement = contentsElem;\n        }\n    }\n\n    class TabController extends RackLikeController {\n        constructor(doc, config) {\n            const cr = new RackController(doc, {\n                blade: config.blade,\n                viewProps: config.viewProps,\n            });\n            const tab = new Tab();\n            super({\n                blade: config.blade,\n                rackController: cr,\n                view: new TabView(doc, {\n                    contentsElement: cr.view.element,\n                    empty: tab.empty,\n                    viewProps: config.viewProps,\n                }),\n            });\n            this.onPageAdd_ = this.onPageAdd_.bind(this);\n            this.onPageRemove_ = this.onPageRemove_.bind(this);\n            this.pageSet_ = new NestedOrderedSet(() => null);\n            this.pageSet_.emitter.on('add', this.onPageAdd_);\n            this.pageSet_.emitter.on('remove', this.onPageRemove_);\n            this.tab = tab;\n        }\n        get pageSet() {\n            return this.pageSet_;\n        }\n        add(pc, opt_index) {\n            this.pageSet_.add(pc, opt_index);\n        }\n        remove(index) {\n            this.pageSet_.remove(this.pageSet_.items[index]);\n        }\n        onPageAdd_(ev) {\n            const pc = ev.item;\n            insertElementAt(this.view.itemsElement, pc.itemController.view.element, ev.index);\n            pc.itemController.viewProps.set('parent', this.viewProps);\n            this.rackController.rack.add(pc.contentController, ev.index);\n            this.tab.add(pc.props.value('selected'));\n        }\n        onPageRemove_(ev) {\n            const pc = ev.item;\n            removeElement(pc.itemController.view.element);\n            pc.itemController.viewProps.set('parent', null);\n            this.rackController.rack.remove(pc.contentController);\n            this.tab.remove(pc.props.value('selected'));\n        }\n    }\n\n    const TabBladePlugin = {\n        id: 'tab',\n        type: 'blade',\n        accept(params) {\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                pages: p.required.array(p.required.object({ title: p.required.string })),\n                view: p.required.constant('tab'),\n            });\n            if (!result || result.pages.length === 0) {\n                return null;\n            }\n            return { params: result };\n        },\n        controller(args) {\n            const c = new TabController(args.document, {\n                blade: args.blade,\n                viewProps: args.viewProps,\n            });\n            args.params.pages.forEach((p) => {\n                const pc = new TabPageController(args.document, {\n                    itemProps: ValueMap.fromObject({\n                        selected: false,\n                        title: p.title,\n                    }),\n                    props: ValueMap.fromObject({\n                        selected: false,\n                    }),\n                });\n                c.add(pc);\n            });\n            return c;\n        },\n        api(args) {\n            if (!(args.controller instanceof TabController)) {\n                return null;\n            }\n            return new TabApi(args.controller, args.pool);\n        },\n    };\n\n    function createBladeController(plugin, args) {\n        const ac = plugin.accept(args.params);\n        if (!ac) {\n            return null;\n        }\n        const disabled = ParamsParsers.optional.boolean(args.params['disabled']).value;\n        const hidden = ParamsParsers.optional.boolean(args.params['hidden']).value;\n        return plugin.controller({\n            blade: createBlade(),\n            document: args.document,\n            params: forceCast(Object.assign(Object.assign({}, ac.params), { disabled: disabled, hidden: hidden })),\n            viewProps: ViewProps.create({\n                disabled: disabled,\n                hidden: hidden,\n            }),\n        });\n    }\n\n    class ManualTicker {\n        constructor() {\n            this.disabled = false;\n            this.emitter = new Emitter();\n        }\n        dispose() { }\n        tick() {\n            if (this.disabled) {\n                return;\n            }\n            this.emitter.emit('tick', {\n                sender: this,\n            });\n        }\n    }\n\n    class IntervalTicker {\n        constructor(doc, interval) {\n            this.disabled_ = false;\n            this.timerId_ = null;\n            this.onTick_ = this.onTick_.bind(this);\n            this.doc_ = doc;\n            this.emitter = new Emitter();\n            this.interval_ = interval;\n            this.setTimer_();\n        }\n        get disabled() {\n            return this.disabled_;\n        }\n        set disabled(inactive) {\n            this.disabled_ = inactive;\n            if (this.disabled_) {\n                this.clearTimer_();\n            }\n            else {\n                this.setTimer_();\n            }\n        }\n        dispose() {\n            this.clearTimer_();\n        }\n        clearTimer_() {\n            if (this.timerId_ === null) {\n                return;\n            }\n            const win = this.doc_.defaultView;\n            if (win) {\n                win.clearInterval(this.timerId_);\n            }\n            this.timerId_ = null;\n        }\n        setTimer_() {\n            this.clearTimer_();\n            if (this.interval_ <= 0) {\n                return;\n            }\n            const win = this.doc_.defaultView;\n            if (win) {\n                this.timerId_ = win.setInterval(this.onTick_, this.interval_);\n            }\n        }\n        onTick_() {\n            if (this.disabled_) {\n                return;\n            }\n            this.emitter.emit('tick', {\n                sender: this,\n            });\n        }\n    }\n\n    class InputBinding {\n        constructor(config) {\n            this.onValueChange_ = this.onValueChange_.bind(this);\n            this.reader = config.reader;\n            this.writer = config.writer;\n            this.emitter = new Emitter();\n            this.value = config.value;\n            this.value.emitter.on('change', this.onValueChange_);\n            this.target = config.target;\n            this.read();\n        }\n        read() {\n            const targetValue = this.target.read();\n            if (targetValue !== undefined) {\n                this.value.rawValue = this.reader(targetValue);\n            }\n        }\n        write_(rawValue) {\n            this.writer(this.target, rawValue);\n        }\n        onValueChange_(ev) {\n            this.write_(ev.rawValue);\n            this.emitter.emit('change', {\n                options: ev.options,\n                rawValue: ev.rawValue,\n                sender: this,\n            });\n        }\n    }\n\n    function fillBuffer(buffer, bufferSize) {\n        while (buffer.length < bufferSize) {\n            buffer.push(undefined);\n        }\n    }\n    function initializeBuffer(bufferSize) {\n        const buffer = [];\n        fillBuffer(buffer, bufferSize);\n        return createValue(buffer);\n    }\n    function createTrimmedBuffer(buffer) {\n        const index = buffer.indexOf(undefined);\n        return forceCast(index < 0 ? buffer : buffer.slice(0, index));\n    }\n    function createPushedBuffer(buffer, newValue) {\n        const newBuffer = [...createTrimmedBuffer(buffer), newValue];\n        if (newBuffer.length > buffer.length) {\n            newBuffer.splice(0, newBuffer.length - buffer.length);\n        }\n        else {\n            fillBuffer(newBuffer, buffer.length);\n        }\n        return newBuffer;\n    }\n\n    class MonitorBinding {\n        constructor(config) {\n            this.onTick_ = this.onTick_.bind(this);\n            this.reader_ = config.reader;\n            this.target = config.target;\n            this.emitter = new Emitter();\n            this.value = config.value;\n            this.ticker = config.ticker;\n            this.ticker.emitter.on('tick', this.onTick_);\n            this.read();\n        }\n        dispose() {\n            this.ticker.dispose();\n        }\n        read() {\n            const targetValue = this.target.read();\n            if (targetValue === undefined) {\n                return;\n            }\n            const buffer = this.value.rawValue;\n            const newValue = this.reader_(targetValue);\n            this.value.rawValue = createPushedBuffer(buffer, newValue);\n            this.emitter.emit('update', {\n                rawValue: newValue,\n                sender: this,\n            });\n        }\n        onTick_(_) {\n            this.read();\n        }\n    }\n\n    class CompositeConstraint {\n        constructor(constraints) {\n            this.constraints = constraints;\n        }\n        constrain(value) {\n            return this.constraints.reduce((result, c) => {\n                return c.constrain(result);\n            }, value);\n        }\n    }\n    function findConstraint(c, constraintClass) {\n        if (c instanceof constraintClass) {\n            return c;\n        }\n        if (c instanceof CompositeConstraint) {\n            const result = c.constraints.reduce((tmpResult, sc) => {\n                if (tmpResult) {\n                    return tmpResult;\n                }\n                return sc instanceof constraintClass ? sc : null;\n            }, null);\n            if (result) {\n                return result;\n            }\n        }\n        return null;\n    }\n\n    class DefiniteRangeConstraint {\n        constructor(config) {\n            this.values = ValueMap.fromObject({\n                max: config.max,\n                min: config.min,\n            });\n        }\n        constrain(value) {\n            const max = this.values.get('max');\n            const min = this.values.get('min');\n            return Math.min(Math.max(value, min), max);\n        }\n    }\n\n    class ListConstraint {\n        constructor(options) {\n            this.values = ValueMap.fromObject({\n                options: options,\n            });\n        }\n        get options() {\n            return this.values.get('options');\n        }\n        constrain(value) {\n            const opts = this.values.get('options');\n            if (opts.length === 0) {\n                return value;\n            }\n            const matched = opts.filter((item) => {\n                return item.value === value;\n            }).length > 0;\n            return matched ? value : opts[0].value;\n        }\n    }\n\n    class RangeConstraint {\n        constructor(config) {\n            this.values = ValueMap.fromObject({\n                max: config.max,\n                min: config.min,\n            });\n        }\n        get maxValue() {\n            return this.values.get('max');\n        }\n        get minValue() {\n            return this.values.get('min');\n        }\n        constrain(value) {\n            const max = this.values.get('max');\n            const min = this.values.get('min');\n            let result = value;\n            if (!isEmpty(min)) {\n                result = Math.max(result, min);\n            }\n            if (!isEmpty(max)) {\n                result = Math.min(result, max);\n            }\n            return result;\n        }\n    }\n\n    class StepConstraint {\n        constructor(step, origin = 0) {\n            this.step = step;\n            this.origin = origin;\n        }\n        constrain(value) {\n            const o = this.origin % this.step;\n            const r = Math.round((value - o) / this.step);\n            return o + r * this.step;\n        }\n    }\n\n    const className$j = ClassName('lst');\n    class ListView {\n        constructor(doc, config) {\n            this.onValueChange_ = this.onValueChange_.bind(this);\n            this.props_ = config.props;\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$j());\n            config.viewProps.bindClassModifiers(this.element);\n            const selectElem = doc.createElement('select');\n            selectElem.classList.add(className$j('s'));\n            config.viewProps.bindDisabled(selectElem);\n            this.element.appendChild(selectElem);\n            this.selectElement = selectElem;\n            const markElem = doc.createElement('div');\n            markElem.classList.add(className$j('m'));\n            markElem.appendChild(createSvgIconElement(doc, 'dropdown'));\n            this.element.appendChild(markElem);\n            config.value.emitter.on('change', this.onValueChange_);\n            this.value_ = config.value;\n            bindValueMap(this.props_, 'options', (opts) => {\n                removeChildElements(this.selectElement);\n                opts.forEach((item) => {\n                    const optionElem = doc.createElement('option');\n                    optionElem.textContent = item.text;\n                    this.selectElement.appendChild(optionElem);\n                });\n                this.update_();\n            });\n        }\n        update_() {\n            const values = this.props_.get('options').map((o) => o.value);\n            this.selectElement.selectedIndex = values.indexOf(this.value_.rawValue);\n        }\n        onValueChange_() {\n            this.update_();\n        }\n    }\n\n    class ListController {\n        constructor(doc, config) {\n            this.onSelectChange_ = this.onSelectChange_.bind(this);\n            this.props = config.props;\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.view = new ListView(doc, {\n                props: this.props,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.view.selectElement.addEventListener('change', this.onSelectChange_);\n        }\n        onSelectChange_(e) {\n            const selectElem = forceCast(e.currentTarget);\n            this.value.rawValue =\n                this.props.get('options')[selectElem.selectedIndex].value;\n        }\n    }\n\n    const className$i = ClassName('pop');\n    class PopupView {\n        constructor(doc, config) {\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$i());\n            config.viewProps.bindClassModifiers(this.element);\n            bindValue(config.shows, valueToClassName(this.element, className$i(undefined, 'v')));\n        }\n    }\n\n    class PopupController {\n        constructor(doc, config) {\n            this.shows = createValue(false);\n            this.viewProps = config.viewProps;\n            this.view = new PopupView(doc, {\n                shows: this.shows,\n                viewProps: this.viewProps,\n            });\n        }\n    }\n\n    const className$h = ClassName('txt');\n    class TextView {\n        constructor(doc, config) {\n            this.onChange_ = this.onChange_.bind(this);\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$h());\n            config.viewProps.bindClassModifiers(this.element);\n            this.props_ = config.props;\n            this.props_.emitter.on('change', this.onChange_);\n            const inputElem = doc.createElement('input');\n            inputElem.classList.add(className$h('i'));\n            inputElem.type = 'text';\n            config.viewProps.bindDisabled(inputElem);\n            this.element.appendChild(inputElem);\n            this.inputElement = inputElem;\n            config.value.emitter.on('change', this.onChange_);\n            this.value_ = config.value;\n            this.refresh();\n        }\n        refresh() {\n            const formatter = this.props_.get('formatter');\n            this.inputElement.value = formatter(this.value_.rawValue);\n        }\n        onChange_() {\n            this.refresh();\n        }\n    }\n\n    class TextController {\n        constructor(doc, config) {\n            this.onInputChange_ = this.onInputChange_.bind(this);\n            this.parser_ = config.parser;\n            this.props = config.props;\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.view = new TextView(doc, {\n                props: config.props,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.view.inputElement.addEventListener('change', this.onInputChange_);\n        }\n        onInputChange_(e) {\n            const inputElem = forceCast(e.currentTarget);\n            const value = inputElem.value;\n            const parsedValue = this.parser_(value);\n            if (!isEmpty(parsedValue)) {\n                this.value.rawValue = parsedValue;\n            }\n            this.view.refresh();\n        }\n    }\n\n    function boolToString(value) {\n        return String(value);\n    }\n    function boolFromUnknown(value) {\n        if (value === 'false') {\n            return false;\n        }\n        return !!value;\n    }\n    function BooleanFormatter(value) {\n        return boolToString(value);\n    }\n\n    class NumberLiteralNode {\n        constructor(text) {\n            this.text = text;\n        }\n        evaluate() {\n            return Number(this.text);\n        }\n        toString() {\n            return this.text;\n        }\n    }\n    const BINARY_OPERATION_MAP = {\n        '**': (v1, v2) => Math.pow(v1, v2),\n        '*': (v1, v2) => v1 * v2,\n        '/': (v1, v2) => v1 / v2,\n        '%': (v1, v2) => v1 % v2,\n        '+': (v1, v2) => v1 + v2,\n        '-': (v1, v2) => v1 - v2,\n        '<<': (v1, v2) => v1 << v2,\n        '>>': (v1, v2) => v1 >> v2,\n        '>>>': (v1, v2) => v1 >>> v2,\n        '&': (v1, v2) => v1 & v2,\n        '^': (v1, v2) => v1 ^ v2,\n        '|': (v1, v2) => v1 | v2,\n    };\n    class BinaryOperationNode {\n        constructor(operator, left, right) {\n            this.left = left;\n            this.operator = operator;\n            this.right = right;\n        }\n        evaluate() {\n            const op = BINARY_OPERATION_MAP[this.operator];\n            if (!op) {\n                throw new Error(`unexpected binary operator: '${this.operator}`);\n            }\n            return op(this.left.evaluate(), this.right.evaluate());\n        }\n        toString() {\n            return [\n                'b(',\n                this.left.toString(),\n                this.operator,\n                this.right.toString(),\n                ')',\n            ].join(' ');\n        }\n    }\n    const UNARY_OPERATION_MAP = {\n        '+': (v) => v,\n        '-': (v) => -v,\n        '~': (v) => ~v,\n    };\n    class UnaryOperationNode {\n        constructor(operator, expr) {\n            this.operator = operator;\n            this.expression = expr;\n        }\n        evaluate() {\n            const op = UNARY_OPERATION_MAP[this.operator];\n            if (!op) {\n                throw new Error(`unexpected unary operator: '${this.operator}`);\n            }\n            return op(this.expression.evaluate());\n        }\n        toString() {\n            return ['u(', this.operator, this.expression.toString(), ')'].join(' ');\n        }\n    }\n\n    function combineReader(parsers) {\n        return (text, cursor) => {\n            for (let i = 0; i < parsers.length; i++) {\n                const result = parsers[i](text, cursor);\n                if (result !== '') {\n                    return result;\n                }\n            }\n            return '';\n        };\n    }\n    function readWhitespace(text, cursor) {\n        var _a;\n        const m = text.substr(cursor).match(/^\\s+/);\n        return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n    }\n    function readNonZeroDigit(text, cursor) {\n        const ch = text.substr(cursor, 1);\n        return ch.match(/^[1-9]$/) ? ch : '';\n    }\n    function readDecimalDigits(text, cursor) {\n        var _a;\n        const m = text.substr(cursor).match(/^[0-9]+/);\n        return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n    }\n    function readSignedInteger(text, cursor) {\n        const ds = readDecimalDigits(text, cursor);\n        if (ds !== '') {\n            return ds;\n        }\n        const sign = text.substr(cursor, 1);\n        cursor += 1;\n        if (sign !== '-' && sign !== '+') {\n            return '';\n        }\n        const sds = readDecimalDigits(text, cursor);\n        if (sds === '') {\n            return '';\n        }\n        return sign + sds;\n    }\n    function readExponentPart(text, cursor) {\n        const e = text.substr(cursor, 1);\n        cursor += 1;\n        if (e.toLowerCase() !== 'e') {\n            return '';\n        }\n        const si = readSignedInteger(text, cursor);\n        if (si === '') {\n            return '';\n        }\n        return e + si;\n    }\n    function readDecimalIntegerLiteral(text, cursor) {\n        const ch = text.substr(cursor, 1);\n        if (ch === '0') {\n            return ch;\n        }\n        const nzd = readNonZeroDigit(text, cursor);\n        cursor += nzd.length;\n        if (nzd === '') {\n            return '';\n        }\n        return nzd + readDecimalDigits(text, cursor);\n    }\n    function readDecimalLiteral1(text, cursor) {\n        const dil = readDecimalIntegerLiteral(text, cursor);\n        cursor += dil.length;\n        if (dil === '') {\n            return '';\n        }\n        const dot = text.substr(cursor, 1);\n        cursor += dot.length;\n        if (dot !== '.') {\n            return '';\n        }\n        const dds = readDecimalDigits(text, cursor);\n        cursor += dds.length;\n        return dil + dot + dds + readExponentPart(text, cursor);\n    }\n    function readDecimalLiteral2(text, cursor) {\n        const dot = text.substr(cursor, 1);\n        cursor += dot.length;\n        if (dot !== '.') {\n            return '';\n        }\n        const dds = readDecimalDigits(text, cursor);\n        cursor += dds.length;\n        if (dds === '') {\n            return '';\n        }\n        return dot + dds + readExponentPart(text, cursor);\n    }\n    function readDecimalLiteral3(text, cursor) {\n        const dil = readDecimalIntegerLiteral(text, cursor);\n        cursor += dil.length;\n        if (dil === '') {\n            return '';\n        }\n        return dil + readExponentPart(text, cursor);\n    }\n    const readDecimalLiteral = combineReader([\n        readDecimalLiteral1,\n        readDecimalLiteral2,\n        readDecimalLiteral3,\n    ]);\n    function parseBinaryDigits(text, cursor) {\n        var _a;\n        const m = text.substr(cursor).match(/^[01]+/);\n        return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n    }\n    function readBinaryIntegerLiteral(text, cursor) {\n        const prefix = text.substr(cursor, 2);\n        cursor += prefix.length;\n        if (prefix.toLowerCase() !== '0b') {\n            return '';\n        }\n        const bds = parseBinaryDigits(text, cursor);\n        if (bds === '') {\n            return '';\n        }\n        return prefix + bds;\n    }\n    function readOctalDigits(text, cursor) {\n        var _a;\n        const m = text.substr(cursor).match(/^[0-7]+/);\n        return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n    }\n    function readOctalIntegerLiteral(text, cursor) {\n        const prefix = text.substr(cursor, 2);\n        cursor += prefix.length;\n        if (prefix.toLowerCase() !== '0o') {\n            return '';\n        }\n        const ods = readOctalDigits(text, cursor);\n        if (ods === '') {\n            return '';\n        }\n        return prefix + ods;\n    }\n    function readHexDigits(text, cursor) {\n        var _a;\n        const m = text.substr(cursor).match(/^[0-9a-f]+/i);\n        return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n    }\n    function readHexIntegerLiteral(text, cursor) {\n        const prefix = text.substr(cursor, 2);\n        cursor += prefix.length;\n        if (prefix.toLowerCase() !== '0x') {\n            return '';\n        }\n        const hds = readHexDigits(text, cursor);\n        if (hds === '') {\n            return '';\n        }\n        return prefix + hds;\n    }\n    const readNonDecimalIntegerLiteral = combineReader([\n        readBinaryIntegerLiteral,\n        readOctalIntegerLiteral,\n        readHexIntegerLiteral,\n    ]);\n    const readNumericLiteral = combineReader([\n        readNonDecimalIntegerLiteral,\n        readDecimalLiteral,\n    ]);\n\n    function parseLiteral(text, cursor) {\n        const num = readNumericLiteral(text, cursor);\n        cursor += num.length;\n        if (num === '') {\n            return null;\n        }\n        return {\n            evaluable: new NumberLiteralNode(num),\n            cursor: cursor,\n        };\n    }\n    function parseParenthesizedExpression(text, cursor) {\n        const op = text.substr(cursor, 1);\n        cursor += op.length;\n        if (op !== '(') {\n            return null;\n        }\n        const expr = parseExpression(text, cursor);\n        if (!expr) {\n            return null;\n        }\n        cursor = expr.cursor;\n        cursor += readWhitespace(text, cursor).length;\n        const cl = text.substr(cursor, 1);\n        cursor += cl.length;\n        if (cl !== ')') {\n            return null;\n        }\n        return {\n            evaluable: expr.evaluable,\n            cursor: cursor,\n        };\n    }\n    function parsePrimaryExpression(text, cursor) {\n        var _a;\n        return ((_a = parseLiteral(text, cursor)) !== null && _a !== void 0 ? _a : parseParenthesizedExpression(text, cursor));\n    }\n    function parseUnaryExpression(text, cursor) {\n        const expr = parsePrimaryExpression(text, cursor);\n        if (expr) {\n            return expr;\n        }\n        const op = text.substr(cursor, 1);\n        cursor += op.length;\n        if (op !== '+' && op !== '-' && op !== '~') {\n            return null;\n        }\n        const num = parseUnaryExpression(text, cursor);\n        if (!num) {\n            return null;\n        }\n        cursor = num.cursor;\n        return {\n            cursor: cursor,\n            evaluable: new UnaryOperationNode(op, num.evaluable),\n        };\n    }\n    function readBinaryOperator(ops, text, cursor) {\n        cursor += readWhitespace(text, cursor).length;\n        const op = ops.filter((op) => text.startsWith(op, cursor))[0];\n        if (!op) {\n            return null;\n        }\n        cursor += op.length;\n        cursor += readWhitespace(text, cursor).length;\n        return {\n            cursor: cursor,\n            operator: op,\n        };\n    }\n    function createBinaryOperationExpressionParser(exprParser, ops) {\n        return (text, cursor) => {\n            const firstExpr = exprParser(text, cursor);\n            if (!firstExpr) {\n                return null;\n            }\n            cursor = firstExpr.cursor;\n            let expr = firstExpr.evaluable;\n            for (;;) {\n                const op = readBinaryOperator(ops, text, cursor);\n                if (!op) {\n                    break;\n                }\n                cursor = op.cursor;\n                const nextExpr = exprParser(text, cursor);\n                if (!nextExpr) {\n                    return null;\n                }\n                cursor = nextExpr.cursor;\n                expr = new BinaryOperationNode(op.operator, expr, nextExpr.evaluable);\n            }\n            return expr\n                ? {\n                    cursor: cursor,\n                    evaluable: expr,\n                }\n                : null;\n        };\n    }\n    const parseBinaryOperationExpression = [\n        ['**'],\n        ['*', '/', '%'],\n        ['+', '-'],\n        ['<<', '>>>', '>>'],\n        ['&'],\n        ['^'],\n        ['|'],\n    ].reduce((parser, ops) => {\n        return createBinaryOperationExpressionParser(parser, ops);\n    }, parseUnaryExpression);\n    function parseExpression(text, cursor) {\n        cursor += readWhitespace(text, cursor).length;\n        return parseBinaryOperationExpression(text, cursor);\n    }\n    function parseEcmaNumberExpression(text) {\n        const expr = parseExpression(text, 0);\n        if (!expr) {\n            return null;\n        }\n        const cursor = expr.cursor + readWhitespace(text, expr.cursor).length;\n        if (cursor !== text.length) {\n            return null;\n        }\n        return expr.evaluable;\n    }\n\n    function parseNumber(text) {\n        var _a;\n        const r = parseEcmaNumberExpression(text);\n        return (_a = r === null || r === void 0 ? void 0 : r.evaluate()) !== null && _a !== void 0 ? _a : null;\n    }\n    function numberFromUnknown(value) {\n        if (typeof value === 'number') {\n            return value;\n        }\n        if (typeof value === 'string') {\n            const pv = parseNumber(value);\n            if (!isEmpty(pv)) {\n                return pv;\n            }\n        }\n        return 0;\n    }\n    function numberToString(value) {\n        return String(value);\n    }\n    function createNumberFormatter(digits) {\n        return (value) => {\n            return value.toFixed(Math.max(Math.min(digits, 20), 0));\n        };\n    }\n\n    const innerFormatter = createNumberFormatter(0);\n    function formatPercentage(value) {\n        return innerFormatter(value) + '%';\n    }\n\n    function stringFromUnknown(value) {\n        return String(value);\n    }\n    function formatString(value) {\n        return value;\n    }\n\n    function connectValues({ primary, secondary, forward, backward, }) {\n        let changing = false;\n        function preventFeedback(callback) {\n            if (changing) {\n                return;\n            }\n            changing = true;\n            callback();\n            changing = false;\n        }\n        primary.emitter.on('change', (ev) => {\n            preventFeedback(() => {\n                secondary.setRawValue(forward(primary, secondary), ev.options);\n            });\n        });\n        secondary.emitter.on('change', (ev) => {\n            preventFeedback(() => {\n                primary.setRawValue(backward(primary, secondary), ev.options);\n            });\n            preventFeedback(() => {\n                secondary.setRawValue(forward(primary, secondary), ev.options);\n            });\n        });\n        preventFeedback(() => {\n            secondary.setRawValue(forward(primary, secondary), {\n                forceEmit: false,\n                last: true,\n            });\n        });\n    }\n\n    function getStepForKey(baseStep, keys) {\n        const step = baseStep * (keys.altKey ? 0.1 : 1) * (keys.shiftKey ? 10 : 1);\n        if (keys.upKey) {\n            return +step;\n        }\n        else if (keys.downKey) {\n            return -step;\n        }\n        return 0;\n    }\n    function getVerticalStepKeys(ev) {\n        return {\n            altKey: ev.altKey,\n            downKey: ev.key === 'ArrowDown',\n            shiftKey: ev.shiftKey,\n            upKey: ev.key === 'ArrowUp',\n        };\n    }\n    function getHorizontalStepKeys(ev) {\n        return {\n            altKey: ev.altKey,\n            downKey: ev.key === 'ArrowLeft',\n            shiftKey: ev.shiftKey,\n            upKey: ev.key === 'ArrowRight',\n        };\n    }\n    function isVerticalArrowKey(key) {\n        return key === 'ArrowUp' || key === 'ArrowDown';\n    }\n    function isArrowKey(key) {\n        return isVerticalArrowKey(key) || key === 'ArrowLeft' || key === 'ArrowRight';\n    }\n\n    function computeOffset$1(ev, elem) {\n        var _a, _b;\n        const win = elem.ownerDocument.defaultView;\n        const rect = elem.getBoundingClientRect();\n        return {\n            x: ev.pageX - (((_a = (win && win.scrollX)) !== null && _a !== void 0 ? _a : 0) + rect.left),\n            y: ev.pageY - (((_b = (win && win.scrollY)) !== null && _b !== void 0 ? _b : 0) + rect.top),\n        };\n    }\n    class PointerHandler {\n        constructor(element) {\n            this.lastTouch_ = null;\n            this.onDocumentMouseMove_ = this.onDocumentMouseMove_.bind(this);\n            this.onDocumentMouseUp_ = this.onDocumentMouseUp_.bind(this);\n            this.onMouseDown_ = this.onMouseDown_.bind(this);\n            this.onTouchEnd_ = this.onTouchEnd_.bind(this);\n            this.onTouchMove_ = this.onTouchMove_.bind(this);\n            this.onTouchStart_ = this.onTouchStart_.bind(this);\n            this.elem_ = element;\n            this.emitter = new Emitter();\n            element.addEventListener('touchstart', this.onTouchStart_, {\n                passive: false,\n            });\n            element.addEventListener('touchmove', this.onTouchMove_, {\n                passive: true,\n            });\n            element.addEventListener('touchend', this.onTouchEnd_);\n            element.addEventListener('mousedown', this.onMouseDown_);\n        }\n        computePosition_(offset) {\n            const rect = this.elem_.getBoundingClientRect();\n            return {\n                bounds: {\n                    width: rect.width,\n                    height: rect.height,\n                },\n                point: offset\n                    ? {\n                        x: offset.x,\n                        y: offset.y,\n                    }\n                    : null,\n            };\n        }\n        onMouseDown_(ev) {\n            var _a;\n            ev.preventDefault();\n            (_a = ev.currentTarget) === null || _a === void 0 ? void 0 : _a.focus();\n            const doc = this.elem_.ownerDocument;\n            doc.addEventListener('mousemove', this.onDocumentMouseMove_);\n            doc.addEventListener('mouseup', this.onDocumentMouseUp_);\n            this.emitter.emit('down', {\n                altKey: ev.altKey,\n                data: this.computePosition_(computeOffset$1(ev, this.elem_)),\n                sender: this,\n                shiftKey: ev.shiftKey,\n            });\n        }\n        onDocumentMouseMove_(ev) {\n            this.emitter.emit('move', {\n                altKey: ev.altKey,\n                data: this.computePosition_(computeOffset$1(ev, this.elem_)),\n                sender: this,\n                shiftKey: ev.shiftKey,\n            });\n        }\n        onDocumentMouseUp_(ev) {\n            const doc = this.elem_.ownerDocument;\n            doc.removeEventListener('mousemove', this.onDocumentMouseMove_);\n            doc.removeEventListener('mouseup', this.onDocumentMouseUp_);\n            this.emitter.emit('up', {\n                altKey: ev.altKey,\n                data: this.computePosition_(computeOffset$1(ev, this.elem_)),\n                sender: this,\n                shiftKey: ev.shiftKey,\n            });\n        }\n        onTouchStart_(ev) {\n            ev.preventDefault();\n            const touch = ev.targetTouches.item(0);\n            const rect = this.elem_.getBoundingClientRect();\n            this.emitter.emit('down', {\n                altKey: ev.altKey,\n                data: this.computePosition_(touch\n                    ? {\n                        x: touch.clientX - rect.left,\n                        y: touch.clientY - rect.top,\n                    }\n                    : undefined),\n                sender: this,\n                shiftKey: ev.shiftKey,\n            });\n            this.lastTouch_ = touch;\n        }\n        onTouchMove_(ev) {\n            const touch = ev.targetTouches.item(0);\n            const rect = this.elem_.getBoundingClientRect();\n            this.emitter.emit('move', {\n                altKey: ev.altKey,\n                data: this.computePosition_(touch\n                    ? {\n                        x: touch.clientX - rect.left,\n                        y: touch.clientY - rect.top,\n                    }\n                    : undefined),\n                sender: this,\n                shiftKey: ev.shiftKey,\n            });\n            this.lastTouch_ = touch;\n        }\n        onTouchEnd_(ev) {\n            var _a;\n            const touch = (_a = ev.targetTouches.item(0)) !== null && _a !== void 0 ? _a : this.lastTouch_;\n            const rect = this.elem_.getBoundingClientRect();\n            this.emitter.emit('up', {\n                altKey: ev.altKey,\n                data: this.computePosition_(touch\n                    ? {\n                        x: touch.clientX - rect.left,\n                        y: touch.clientY - rect.top,\n                    }\n                    : undefined),\n                sender: this,\n                shiftKey: ev.shiftKey,\n            });\n        }\n    }\n\n    function mapRange(value, start1, end1, start2, end2) {\n        const p = (value - start1) / (end1 - start1);\n        return start2 + p * (end2 - start2);\n    }\n    function getDecimalDigits(value) {\n        const text = String(value.toFixed(10));\n        const frac = text.split('.')[1];\n        return frac.replace(/0+$/, '').length;\n    }\n    function constrainRange(value, min, max) {\n        return Math.min(Math.max(value, min), max);\n    }\n    function loopRange(value, max) {\n        return ((value % max) + max) % max;\n    }\n\n    const className$g = ClassName('txt');\n    class NumberTextView {\n        constructor(doc, config) {\n            this.onChange_ = this.onChange_.bind(this);\n            this.props_ = config.props;\n            this.props_.emitter.on('change', this.onChange_);\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$g(), className$g(undefined, 'num'));\n            if (config.arrayPosition) {\n                this.element.classList.add(className$g(undefined, config.arrayPosition));\n            }\n            config.viewProps.bindClassModifiers(this.element);\n            const inputElem = doc.createElement('input');\n            inputElem.classList.add(className$g('i'));\n            inputElem.type = 'text';\n            config.viewProps.bindDisabled(inputElem);\n            this.element.appendChild(inputElem);\n            this.inputElement = inputElem;\n            this.onDraggingChange_ = this.onDraggingChange_.bind(this);\n            this.dragging_ = config.dragging;\n            this.dragging_.emitter.on('change', this.onDraggingChange_);\n            this.element.classList.add(className$g());\n            this.inputElement.classList.add(className$g('i'));\n            const knobElem = doc.createElement('div');\n            knobElem.classList.add(className$g('k'));\n            this.element.appendChild(knobElem);\n            this.knobElement = knobElem;\n            const guideElem = doc.createElementNS(SVG_NS, 'svg');\n            guideElem.classList.add(className$g('g'));\n            this.knobElement.appendChild(guideElem);\n            const bodyElem = doc.createElementNS(SVG_NS, 'path');\n            bodyElem.classList.add(className$g('gb'));\n            guideElem.appendChild(bodyElem);\n            this.guideBodyElem_ = bodyElem;\n            const headElem = doc.createElementNS(SVG_NS, 'path');\n            headElem.classList.add(className$g('gh'));\n            guideElem.appendChild(headElem);\n            this.guideHeadElem_ = headElem;\n            const tooltipElem = doc.createElement('div');\n            tooltipElem.classList.add(ClassName('tt')());\n            this.knobElement.appendChild(tooltipElem);\n            this.tooltipElem_ = tooltipElem;\n            config.value.emitter.on('change', this.onChange_);\n            this.value = config.value;\n            this.refresh();\n        }\n        onDraggingChange_(ev) {\n            if (ev.rawValue === null) {\n                this.element.classList.remove(className$g(undefined, 'drg'));\n                return;\n            }\n            this.element.classList.add(className$g(undefined, 'drg'));\n            const x = ev.rawValue / this.props_.get('draggingScale');\n            const aox = x + (x > 0 ? -1 : x < 0 ? +1 : 0);\n            const adx = constrainRange(-aox, -4, +4);\n            this.guideHeadElem_.setAttributeNS(null, 'd', [`M ${aox + adx},0 L${aox},4 L${aox + adx},8`, `M ${x},-1 L${x},9`].join(' '));\n            this.guideBodyElem_.setAttributeNS(null, 'd', `M 0,4 L${x},4`);\n            const formatter = this.props_.get('formatter');\n            this.tooltipElem_.textContent = formatter(this.value.rawValue);\n            this.tooltipElem_.style.left = `${x}px`;\n        }\n        refresh() {\n            const formatter = this.props_.get('formatter');\n            this.inputElement.value = formatter(this.value.rawValue);\n        }\n        onChange_() {\n            this.refresh();\n        }\n    }\n\n    class NumberTextController {\n        constructor(doc, config) {\n            var _a;\n            this.originRawValue_ = 0;\n            this.onInputChange_ = this.onInputChange_.bind(this);\n            this.onInputKeyDown_ = this.onInputKeyDown_.bind(this);\n            this.onInputKeyUp_ = this.onInputKeyUp_.bind(this);\n            this.onPointerDown_ = this.onPointerDown_.bind(this);\n            this.onPointerMove_ = this.onPointerMove_.bind(this);\n            this.onPointerUp_ = this.onPointerUp_.bind(this);\n            this.baseStep_ = config.baseStep;\n            this.parser_ = config.parser;\n            this.props = config.props;\n            this.sliderProps_ = (_a = config.sliderProps) !== null && _a !== void 0 ? _a : null;\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.dragging_ = createValue(null);\n            this.view = new NumberTextView(doc, {\n                arrayPosition: config.arrayPosition,\n                dragging: this.dragging_,\n                props: this.props,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.view.inputElement.addEventListener('change', this.onInputChange_);\n            this.view.inputElement.addEventListener('keydown', this.onInputKeyDown_);\n            this.view.inputElement.addEventListener('keyup', this.onInputKeyUp_);\n            const ph = new PointerHandler(this.view.knobElement);\n            ph.emitter.on('down', this.onPointerDown_);\n            ph.emitter.on('move', this.onPointerMove_);\n            ph.emitter.on('up', this.onPointerUp_);\n        }\n        constrainValue_(value) {\n            var _a, _b;\n            const min = (_a = this.sliderProps_) === null || _a === void 0 ? void 0 : _a.get('minValue');\n            const max = (_b = this.sliderProps_) === null || _b === void 0 ? void 0 : _b.get('maxValue');\n            let v = value;\n            if (min !== undefined) {\n                v = Math.max(v, min);\n            }\n            if (max !== undefined) {\n                v = Math.min(v, max);\n            }\n            return v;\n        }\n        onInputChange_(e) {\n            const inputElem = forceCast(e.currentTarget);\n            const value = inputElem.value;\n            const parsedValue = this.parser_(value);\n            if (!isEmpty(parsedValue)) {\n                this.value.rawValue = this.constrainValue_(parsedValue);\n            }\n            this.view.refresh();\n        }\n        onInputKeyDown_(ev) {\n            const step = getStepForKey(this.baseStep_, getVerticalStepKeys(ev));\n            if (step === 0) {\n                return;\n            }\n            this.value.setRawValue(this.constrainValue_(this.value.rawValue + step), {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onInputKeyUp_(ev) {\n            const step = getStepForKey(this.baseStep_, getVerticalStepKeys(ev));\n            if (step === 0) {\n                return;\n            }\n            this.value.setRawValue(this.value.rawValue, {\n                forceEmit: true,\n                last: true,\n            });\n        }\n        onPointerDown_() {\n            this.originRawValue_ = this.value.rawValue;\n            this.dragging_.rawValue = 0;\n        }\n        computeDraggingValue_(data) {\n            if (!data.point) {\n                return null;\n            }\n            const dx = data.point.x - data.bounds.width / 2;\n            return this.constrainValue_(this.originRawValue_ + dx * this.props.get('draggingScale'));\n        }\n        onPointerMove_(ev) {\n            const v = this.computeDraggingValue_(ev.data);\n            if (v === null) {\n                return;\n            }\n            this.value.setRawValue(v, {\n                forceEmit: false,\n                last: false,\n            });\n            this.dragging_.rawValue = this.value.rawValue - this.originRawValue_;\n        }\n        onPointerUp_(ev) {\n            const v = this.computeDraggingValue_(ev.data);\n            if (v === null) {\n                return;\n            }\n            this.value.setRawValue(v, {\n                forceEmit: true,\n                last: true,\n            });\n            this.dragging_.rawValue = null;\n        }\n    }\n\n    const className$f = ClassName('sld');\n    class SliderView {\n        constructor(doc, config) {\n            this.onChange_ = this.onChange_.bind(this);\n            this.props_ = config.props;\n            this.props_.emitter.on('change', this.onChange_);\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$f());\n            config.viewProps.bindClassModifiers(this.element);\n            const trackElem = doc.createElement('div');\n            trackElem.classList.add(className$f('t'));\n            config.viewProps.bindTabIndex(trackElem);\n            this.element.appendChild(trackElem);\n            this.trackElement = trackElem;\n            const knobElem = doc.createElement('div');\n            knobElem.classList.add(className$f('k'));\n            this.trackElement.appendChild(knobElem);\n            this.knobElement = knobElem;\n            config.value.emitter.on('change', this.onChange_);\n            this.value = config.value;\n            this.update_();\n        }\n        update_() {\n            const p = constrainRange(mapRange(this.value.rawValue, this.props_.get('minValue'), this.props_.get('maxValue'), 0, 100), 0, 100);\n            this.knobElement.style.width = `${p}%`;\n        }\n        onChange_() {\n            this.update_();\n        }\n    }\n\n    class SliderController {\n        constructor(doc, config) {\n            this.onKeyDown_ = this.onKeyDown_.bind(this);\n            this.onKeyUp_ = this.onKeyUp_.bind(this);\n            this.onPointerDownOrMove_ = this.onPointerDownOrMove_.bind(this);\n            this.onPointerUp_ = this.onPointerUp_.bind(this);\n            this.baseStep_ = config.baseStep;\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.props = config.props;\n            this.view = new SliderView(doc, {\n                props: this.props,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.ptHandler_ = new PointerHandler(this.view.trackElement);\n            this.ptHandler_.emitter.on('down', this.onPointerDownOrMove_);\n            this.ptHandler_.emitter.on('move', this.onPointerDownOrMove_);\n            this.ptHandler_.emitter.on('up', this.onPointerUp_);\n            this.view.trackElement.addEventListener('keydown', this.onKeyDown_);\n            this.view.trackElement.addEventListener('keyup', this.onKeyUp_);\n        }\n        handlePointerEvent_(d, opts) {\n            if (!d.point) {\n                return;\n            }\n            this.value.setRawValue(mapRange(constrainRange(d.point.x, 0, d.bounds.width), 0, d.bounds.width, this.props.get('minValue'), this.props.get('maxValue')), opts);\n        }\n        onPointerDownOrMove_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onPointerUp_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: true,\n                last: true,\n            });\n        }\n        onKeyDown_(ev) {\n            const step = getStepForKey(this.baseStep_, getHorizontalStepKeys(ev));\n            if (step === 0) {\n                return;\n            }\n            this.value.setRawValue(this.value.rawValue + step, {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onKeyUp_(ev) {\n            const step = getStepForKey(this.baseStep_, getHorizontalStepKeys(ev));\n            if (step === 0) {\n                return;\n            }\n            this.value.setRawValue(this.value.rawValue, {\n                forceEmit: true,\n                last: true,\n            });\n        }\n    }\n\n    const className$e = ClassName('sldtxt');\n    class SliderTextView {\n        constructor(doc, config) {\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$e());\n            const sliderElem = doc.createElement('div');\n            sliderElem.classList.add(className$e('s'));\n            this.sliderView_ = config.sliderView;\n            sliderElem.appendChild(this.sliderView_.element);\n            this.element.appendChild(sliderElem);\n            const textElem = doc.createElement('div');\n            textElem.classList.add(className$e('t'));\n            this.textView_ = config.textView;\n            textElem.appendChild(this.textView_.element);\n            this.element.appendChild(textElem);\n        }\n    }\n\n    class SliderTextController {\n        constructor(doc, config) {\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.sliderC_ = new SliderController(doc, {\n                baseStep: config.baseStep,\n                props: config.sliderProps,\n                value: config.value,\n                viewProps: this.viewProps,\n            });\n            this.textC_ = new NumberTextController(doc, {\n                baseStep: config.baseStep,\n                parser: config.parser,\n                props: config.textProps,\n                sliderProps: config.sliderProps,\n                value: config.value,\n                viewProps: config.viewProps,\n            });\n            this.view = new SliderTextView(doc, {\n                sliderView: this.sliderC_.view,\n                textView: this.textC_.view,\n            });\n        }\n        get sliderController() {\n            return this.sliderC_;\n        }\n        get textController() {\n            return this.textC_;\n        }\n    }\n\n    function writePrimitive(target, value) {\n        target.write(value);\n    }\n\n    function parseListOptions(value) {\n        const p = ParamsParsers;\n        if (Array.isArray(value)) {\n            return p.required.array(p.required.object({\n                text: p.required.string,\n                value: p.required.raw,\n            }))(value).value;\n        }\n        if (typeof value === 'object') {\n            return p.required.raw(value)\n                .value;\n        }\n        return undefined;\n    }\n    function parsePickerLayout(value) {\n        if (value === 'inline' || value === 'popup') {\n            return value;\n        }\n        return undefined;\n    }\n    function parsePointDimensionParams(value) {\n        const p = ParamsParsers;\n        return p.required.object({\n            max: p.optional.number,\n            min: p.optional.number,\n            step: p.optional.number,\n        })(value).value;\n    }\n    function normalizeListOptions(options) {\n        if (Array.isArray(options)) {\n            return options;\n        }\n        const items = [];\n        Object.keys(options).forEach((text) => {\n            items.push({ text: text, value: options[text] });\n        });\n        return items;\n    }\n    function createListConstraint(options) {\n        return !isEmpty(options)\n            ? new ListConstraint(normalizeListOptions(forceCast(options)))\n            : null;\n    }\n    function findStep(constraint) {\n        const c = constraint ? findConstraint(constraint, StepConstraint) : null;\n        if (!c) {\n            return null;\n        }\n        return c.step;\n    }\n    function getSuitableDecimalDigits(constraint, rawValue) {\n        const sc = constraint && findConstraint(constraint, StepConstraint);\n        if (sc) {\n            return getDecimalDigits(sc.step);\n        }\n        return Math.max(getDecimalDigits(rawValue), 2);\n    }\n    function getBaseStep(constraint) {\n        const step = findStep(constraint);\n        return step !== null && step !== void 0 ? step : 1;\n    }\n    function getSuitableDraggingScale(constraint, rawValue) {\n        var _a;\n        const sc = constraint && findConstraint(constraint, StepConstraint);\n        const base = Math.abs((_a = sc === null || sc === void 0 ? void 0 : sc.step) !== null && _a !== void 0 ? _a : rawValue);\n        return base === 0 ? 0.1 : Math.pow(10, Math.floor(Math.log10(base)) - 1);\n    }\n\n    const className$d = ClassName('ckb');\n    class CheckboxView {\n        constructor(doc, config) {\n            this.onValueChange_ = this.onValueChange_.bind(this);\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$d());\n            config.viewProps.bindClassModifiers(this.element);\n            const labelElem = doc.createElement('label');\n            labelElem.classList.add(className$d('l'));\n            this.element.appendChild(labelElem);\n            const inputElem = doc.createElement('input');\n            inputElem.classList.add(className$d('i'));\n            inputElem.type = 'checkbox';\n            labelElem.appendChild(inputElem);\n            this.inputElement = inputElem;\n            config.viewProps.bindDisabled(this.inputElement);\n            const wrapperElem = doc.createElement('div');\n            wrapperElem.classList.add(className$d('w'));\n            labelElem.appendChild(wrapperElem);\n            const markElem = createSvgIconElement(doc, 'check');\n            wrapperElem.appendChild(markElem);\n            config.value.emitter.on('change', this.onValueChange_);\n            this.value = config.value;\n            this.update_();\n        }\n        update_() {\n            this.inputElement.checked = this.value.rawValue;\n        }\n        onValueChange_() {\n            this.update_();\n        }\n    }\n\n    class CheckboxController {\n        constructor(doc, config) {\n            this.onInputChange_ = this.onInputChange_.bind(this);\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.view = new CheckboxView(doc, {\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.view.inputElement.addEventListener('change', this.onInputChange_);\n        }\n        onInputChange_(e) {\n            const inputElem = forceCast(e.currentTarget);\n            this.value.rawValue = inputElem.checked;\n        }\n    }\n\n    function createConstraint$6(params) {\n        const constraints = [];\n        const lc = createListConstraint(params.options);\n        if (lc) {\n            constraints.push(lc);\n        }\n        return new CompositeConstraint(constraints);\n    }\n    const BooleanInputPlugin = {\n        id: 'input-bool',\n        type: 'input',\n        accept: (value, params) => {\n            if (typeof value !== 'boolean') {\n                return null;\n            }\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                options: p.optional.custom(parseListOptions),\n            });\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            reader: (_args) => boolFromUnknown,\n            constraint: (args) => createConstraint$6(args.params),\n            writer: (_args) => writePrimitive,\n        },\n        controller: (args) => {\n            const doc = args.document;\n            const value = args.value;\n            const c = args.constraint;\n            const lc = c && findConstraint(c, ListConstraint);\n            if (lc) {\n                return new ListController(doc, {\n                    props: new ValueMap({\n                        options: lc.values.value('options'),\n                    }),\n                    value: value,\n                    viewProps: args.viewProps,\n                });\n            }\n            return new CheckboxController(doc, {\n                value: value,\n                viewProps: args.viewProps,\n            });\n        },\n    };\n\n    const className$c = ClassName('col');\n    class ColorView {\n        constructor(doc, config) {\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$c());\n            config.foldable.bindExpandedClass(this.element, className$c(undefined, 'expanded'));\n            bindValueMap(config.foldable, 'completed', valueToClassName(this.element, className$c(undefined, 'cpl')));\n            const headElem = doc.createElement('div');\n            headElem.classList.add(className$c('h'));\n            this.element.appendChild(headElem);\n            const swatchElem = doc.createElement('div');\n            swatchElem.classList.add(className$c('s'));\n            headElem.appendChild(swatchElem);\n            this.swatchElement = swatchElem;\n            const textElem = doc.createElement('div');\n            textElem.classList.add(className$c('t'));\n            headElem.appendChild(textElem);\n            this.textElement = textElem;\n            if (config.pickerLayout === 'inline') {\n                const pickerElem = doc.createElement('div');\n                pickerElem.classList.add(className$c('p'));\n                this.element.appendChild(pickerElem);\n                this.pickerElement = pickerElem;\n            }\n            else {\n                this.pickerElement = null;\n            }\n        }\n    }\n\n    function rgbToHslInt(r, g, b) {\n        const rp = constrainRange(r / 255, 0, 1);\n        const gp = constrainRange(g / 255, 0, 1);\n        const bp = constrainRange(b / 255, 0, 1);\n        const cmax = Math.max(rp, gp, bp);\n        const cmin = Math.min(rp, gp, bp);\n        const c = cmax - cmin;\n        let h = 0;\n        let s = 0;\n        const l = (cmin + cmax) / 2;\n        if (c !== 0) {\n            s = c / (1 - Math.abs(cmax + cmin - 1));\n            if (rp === cmax) {\n                h = (gp - bp) / c;\n            }\n            else if (gp === cmax) {\n                h = 2 + (bp - rp) / c;\n            }\n            else {\n                h = 4 + (rp - gp) / c;\n            }\n            h = h / 6 + (h < 0 ? 1 : 0);\n        }\n        return [h * 360, s * 100, l * 100];\n    }\n    function hslToRgbInt(h, s, l) {\n        const hp = ((h % 360) + 360) % 360;\n        const sp = constrainRange(s / 100, 0, 1);\n        const lp = constrainRange(l / 100, 0, 1);\n        const c = (1 - Math.abs(2 * lp - 1)) * sp;\n        const x = c * (1 - Math.abs(((hp / 60) % 2) - 1));\n        const m = lp - c / 2;\n        let rp, gp, bp;\n        if (hp >= 0 && hp < 60) {\n            [rp, gp, bp] = [c, x, 0];\n        }\n        else if (hp >= 60 && hp < 120) {\n            [rp, gp, bp] = [x, c, 0];\n        }\n        else if (hp >= 120 && hp < 180) {\n            [rp, gp, bp] = [0, c, x];\n        }\n        else if (hp >= 180 && hp < 240) {\n            [rp, gp, bp] = [0, x, c];\n        }\n        else if (hp >= 240 && hp < 300) {\n            [rp, gp, bp] = [x, 0, c];\n        }\n        else {\n            [rp, gp, bp] = [c, 0, x];\n        }\n        return [(rp + m) * 255, (gp + m) * 255, (bp + m) * 255];\n    }\n    function rgbToHsvInt(r, g, b) {\n        const rp = constrainRange(r / 255, 0, 1);\n        const gp = constrainRange(g / 255, 0, 1);\n        const bp = constrainRange(b / 255, 0, 1);\n        const cmax = Math.max(rp, gp, bp);\n        const cmin = Math.min(rp, gp, bp);\n        const d = cmax - cmin;\n        let h;\n        if (d === 0) {\n            h = 0;\n        }\n        else if (cmax === rp) {\n            h = 60 * (((((gp - bp) / d) % 6) + 6) % 6);\n        }\n        else if (cmax === gp) {\n            h = 60 * ((bp - rp) / d + 2);\n        }\n        else {\n            h = 60 * ((rp - gp) / d + 4);\n        }\n        const s = cmax === 0 ? 0 : d / cmax;\n        const v = cmax;\n        return [h, s * 100, v * 100];\n    }\n    function hsvToRgbInt(h, s, v) {\n        const hp = loopRange(h, 360);\n        const sp = constrainRange(s / 100, 0, 1);\n        const vp = constrainRange(v / 100, 0, 1);\n        const c = vp * sp;\n        const x = c * (1 - Math.abs(((hp / 60) % 2) - 1));\n        const m = vp - c;\n        let rp, gp, bp;\n        if (hp >= 0 && hp < 60) {\n            [rp, gp, bp] = [c, x, 0];\n        }\n        else if (hp >= 60 && hp < 120) {\n            [rp, gp, bp] = [x, c, 0];\n        }\n        else if (hp >= 120 && hp < 180) {\n            [rp, gp, bp] = [0, c, x];\n        }\n        else if (hp >= 180 && hp < 240) {\n            [rp, gp, bp] = [0, x, c];\n        }\n        else if (hp >= 240 && hp < 300) {\n            [rp, gp, bp] = [x, 0, c];\n        }\n        else {\n            [rp, gp, bp] = [c, 0, x];\n        }\n        return [(rp + m) * 255, (gp + m) * 255, (bp + m) * 255];\n    }\n    function hslToHsvInt(h, s, l) {\n        const sd = l + (s * (100 - Math.abs(2 * l - 100))) / (2 * 100);\n        return [\n            h,\n            sd !== 0 ? (s * (100 - Math.abs(2 * l - 100))) / sd : 0,\n            l + (s * (100 - Math.abs(2 * l - 100))) / (2 * 100),\n        ];\n    }\n    function hsvToHslInt(h, s, v) {\n        const sd = 100 - Math.abs((v * (200 - s)) / 100 - 100);\n        return [h, sd !== 0 ? (s * v) / sd : 0, (v * (200 - s)) / (2 * 100)];\n    }\n    function removeAlphaComponent(comps) {\n        return [comps[0], comps[1], comps[2]];\n    }\n    function appendAlphaComponent(comps, alpha) {\n        return [comps[0], comps[1], comps[2], alpha];\n    }\n    const MODE_CONVERTER_MAP = {\n        hsl: {\n            hsl: (h, s, l) => [h, s, l],\n            hsv: hslToHsvInt,\n            rgb: hslToRgbInt,\n        },\n        hsv: {\n            hsl: hsvToHslInt,\n            hsv: (h, s, v) => [h, s, v],\n            rgb: hsvToRgbInt,\n        },\n        rgb: {\n            hsl: rgbToHslInt,\n            hsv: rgbToHsvInt,\n            rgb: (r, g, b) => [r, g, b],\n        },\n    };\n    function getColorMaxComponents(mode, type) {\n        return [\n            type === 'float' ? 1 : mode === 'rgb' ? 255 : 360,\n            type === 'float' ? 1 : mode === 'rgb' ? 255 : 100,\n            type === 'float' ? 1 : mode === 'rgb' ? 255 : 100,\n        ];\n    }\n    function loopHueRange(hue, max) {\n        return hue === max ? max : loopRange(hue, max);\n    }\n    function constrainColorComponents(components, mode, type) {\n        var _a;\n        const ms = getColorMaxComponents(mode, type);\n        return [\n            mode === 'rgb'\n                ? constrainRange(components[0], 0, ms[0])\n                : loopHueRange(components[0], ms[0]),\n            constrainRange(components[1], 0, ms[1]),\n            constrainRange(components[2], 0, ms[2]),\n            constrainRange((_a = components[3]) !== null && _a !== void 0 ? _a : 1, 0, 1),\n        ];\n    }\n    function convertColorType(comps, mode, from, to) {\n        const fms = getColorMaxComponents(mode, from);\n        const tms = getColorMaxComponents(mode, to);\n        return comps.map((c, index) => (c / fms[index]) * tms[index]);\n    }\n    function convertColor(components, from, to) {\n        const intComps = convertColorType(components, from.mode, from.type, 'int');\n        const result = MODE_CONVERTER_MAP[from.mode][to.mode](...intComps);\n        return convertColorType(result, to.mode, 'int', to.type);\n    }\n\n    function isRgbColorComponent(obj, key) {\n        if (typeof obj !== 'object' || isEmpty(obj)) {\n            return false;\n        }\n        return key in obj && typeof obj[key] === 'number';\n    }\n    class Color {\n        static black(type = 'int') {\n            return new Color([0, 0, 0], 'rgb', type);\n        }\n        static fromObject(obj, type = 'int') {\n            const comps = 'a' in obj ? [obj.r, obj.g, obj.b, obj.a] : [obj.r, obj.g, obj.b];\n            return new Color(comps, 'rgb', type);\n        }\n        static toRgbaObject(color, type = 'int') {\n            return color.toRgbaObject(type);\n        }\n        static isRgbColorObject(obj) {\n            return (isRgbColorComponent(obj, 'r') &&\n                isRgbColorComponent(obj, 'g') &&\n                isRgbColorComponent(obj, 'b'));\n        }\n        static isRgbaColorObject(obj) {\n            return this.isRgbColorObject(obj) && isRgbColorComponent(obj, 'a');\n        }\n        static isColorObject(obj) {\n            return this.isRgbColorObject(obj);\n        }\n        static equals(v1, v2) {\n            if (v1.mode !== v2.mode) {\n                return false;\n            }\n            const comps1 = v1.comps_;\n            const comps2 = v2.comps_;\n            for (let i = 0; i < comps1.length; i++) {\n                if (comps1[i] !== comps2[i]) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        constructor(comps, mode, type = 'int') {\n            this.mode = mode;\n            this.type = type;\n            this.comps_ = constrainColorComponents(comps, mode, type);\n        }\n        getComponents(opt_mode, type = 'int') {\n            return appendAlphaComponent(convertColor(removeAlphaComponent(this.comps_), { mode: this.mode, type: this.type }, { mode: opt_mode !== null && opt_mode !== void 0 ? opt_mode : this.mode, type }), this.comps_[3]);\n        }\n        toRgbaObject(type = 'int') {\n            const rgbComps = this.getComponents('rgb', type);\n            return {\n                r: rgbComps[0],\n                g: rgbComps[1],\n                b: rgbComps[2],\n                a: rgbComps[3],\n            };\n        }\n    }\n\n    const className$b = ClassName('colp');\n    class ColorPickerView {\n        constructor(doc, config) {\n            this.alphaViews_ = null;\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$b());\n            config.viewProps.bindClassModifiers(this.element);\n            const hsvElem = doc.createElement('div');\n            hsvElem.classList.add(className$b('hsv'));\n            const svElem = doc.createElement('div');\n            svElem.classList.add(className$b('sv'));\n            this.svPaletteView_ = config.svPaletteView;\n            svElem.appendChild(this.svPaletteView_.element);\n            hsvElem.appendChild(svElem);\n            const hElem = doc.createElement('div');\n            hElem.classList.add(className$b('h'));\n            this.hPaletteView_ = config.hPaletteView;\n            hElem.appendChild(this.hPaletteView_.element);\n            hsvElem.appendChild(hElem);\n            this.element.appendChild(hsvElem);\n            const rgbElem = doc.createElement('div');\n            rgbElem.classList.add(className$b('rgb'));\n            this.textView_ = config.textView;\n            rgbElem.appendChild(this.textView_.element);\n            this.element.appendChild(rgbElem);\n            if (config.alphaViews) {\n                this.alphaViews_ = {\n                    palette: config.alphaViews.palette,\n                    text: config.alphaViews.text,\n                };\n                const aElem = doc.createElement('div');\n                aElem.classList.add(className$b('a'));\n                const apElem = doc.createElement('div');\n                apElem.classList.add(className$b('ap'));\n                apElem.appendChild(this.alphaViews_.palette.element);\n                aElem.appendChild(apElem);\n                const atElem = doc.createElement('div');\n                atElem.classList.add(className$b('at'));\n                atElem.appendChild(this.alphaViews_.text.element);\n                aElem.appendChild(atElem);\n                this.element.appendChild(aElem);\n            }\n        }\n        get allFocusableElements() {\n            const elems = [\n                this.svPaletteView_.element,\n                this.hPaletteView_.element,\n                this.textView_.modeSelectElement,\n                ...this.textView_.textViews.map((v) => v.inputElement),\n            ];\n            if (this.alphaViews_) {\n                elems.push(this.alphaViews_.palette.element, this.alphaViews_.text.inputElement);\n            }\n            return elems;\n        }\n    }\n\n    function parseColorType(value) {\n        return value === 'int' ? 'int' : value === 'float' ? 'float' : undefined;\n    }\n    function parseColorInputParams(params) {\n        const p = ParamsParsers;\n        return parseParams(params, {\n            alpha: p.optional.boolean,\n            color: p.optional.object({\n                alpha: p.optional.boolean,\n                type: p.optional.custom(parseColorType),\n            }),\n            expanded: p.optional.boolean,\n            picker: p.optional.custom(parsePickerLayout),\n        });\n    }\n    function getBaseStepForColor(forAlpha) {\n        return forAlpha ? 0.1 : 1;\n    }\n    function extractColorType(params) {\n        var _a;\n        return (_a = params.color) === null || _a === void 0 ? void 0 : _a.type;\n    }\n\n    function equalsStringColorFormat(f1, f2) {\n        return (f1.alpha === f2.alpha &&\n            f1.mode === f2.mode &&\n            f1.notation === f2.notation &&\n            f1.type === f2.type);\n    }\n    function parseCssNumberOrPercentage(text, maxValue) {\n        const m = text.match(/^(.+)%$/);\n        if (!m) {\n            return Math.min(parseFloat(text), maxValue);\n        }\n        return Math.min(parseFloat(m[1]) * 0.01 * maxValue, maxValue);\n    }\n    const ANGLE_TO_DEG_MAP = {\n        deg: (angle) => angle,\n        grad: (angle) => (angle * 360) / 400,\n        rad: (angle) => (angle * 360) / (2 * Math.PI),\n        turn: (angle) => angle * 360,\n    };\n    function parseCssNumberOrAngle(text) {\n        const m = text.match(/^([0-9.]+?)(deg|grad|rad|turn)$/);\n        if (!m) {\n            return parseFloat(text);\n        }\n        const angle = parseFloat(m[1]);\n        const unit = m[2];\n        return ANGLE_TO_DEG_MAP[unit](angle);\n    }\n    function parseFunctionalRgbColorComponents(text) {\n        const m = text.match(/^rgb\\(\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n        if (!m) {\n            return null;\n        }\n        const comps = [\n            parseCssNumberOrPercentage(m[1], 255),\n            parseCssNumberOrPercentage(m[2], 255),\n            parseCssNumberOrPercentage(m[3], 255),\n        ];\n        if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n            return null;\n        }\n        return comps;\n    }\n    function createFunctionalRgbColorParser(type) {\n        return (text) => {\n            const comps = parseFunctionalRgbColorComponents(text);\n            return comps ? new Color(comps, 'rgb', type) : null;\n        };\n    }\n    function parseFunctionalRgbaColorComponents(text) {\n        const m = text.match(/^rgba\\(\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n        if (!m) {\n            return null;\n        }\n        const comps = [\n            parseCssNumberOrPercentage(m[1], 255),\n            parseCssNumberOrPercentage(m[2], 255),\n            parseCssNumberOrPercentage(m[3], 255),\n            parseCssNumberOrPercentage(m[4], 1),\n        ];\n        if (isNaN(comps[0]) ||\n            isNaN(comps[1]) ||\n            isNaN(comps[2]) ||\n            isNaN(comps[3])) {\n            return null;\n        }\n        return comps;\n    }\n    function createFunctionalRgbaColorParser(type) {\n        return (text) => {\n            const comps = parseFunctionalRgbaColorComponents(text);\n            return comps ? new Color(comps, 'rgb', type) : null;\n        };\n    }\n    function parseHslColorComponents(text) {\n        const m = text.match(/^hsl\\(\\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n        if (!m) {\n            return null;\n        }\n        const comps = [\n            parseCssNumberOrAngle(m[1]),\n            parseCssNumberOrPercentage(m[2], 100),\n            parseCssNumberOrPercentage(m[3], 100),\n        ];\n        if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n            return null;\n        }\n        return comps;\n    }\n    function createHslColorParser(type) {\n        return (text) => {\n            const comps = parseHslColorComponents(text);\n            return comps ? new Color(comps, 'hsl', type) : null;\n        };\n    }\n    function parseHslaColorComponents(text) {\n        const m = text.match(/^hsla\\(\\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n        if (!m) {\n            return null;\n        }\n        const comps = [\n            parseCssNumberOrAngle(m[1]),\n            parseCssNumberOrPercentage(m[2], 100),\n            parseCssNumberOrPercentage(m[3], 100),\n            parseCssNumberOrPercentage(m[4], 1),\n        ];\n        if (isNaN(comps[0]) ||\n            isNaN(comps[1]) ||\n            isNaN(comps[2]) ||\n            isNaN(comps[3])) {\n            return null;\n        }\n        return comps;\n    }\n    function createHslaColorParser(type) {\n        return (text) => {\n            const comps = parseHslaColorComponents(text);\n            return comps ? new Color(comps, 'hsl', type) : null;\n        };\n    }\n    function parseHexRgbColorComponents(text) {\n        const mRgb = text.match(/^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);\n        if (mRgb) {\n            return [\n                parseInt(mRgb[1] + mRgb[1], 16),\n                parseInt(mRgb[2] + mRgb[2], 16),\n                parseInt(mRgb[3] + mRgb[3], 16),\n            ];\n        }\n        const mRrggbb = text.match(/^(?:#|0x)([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);\n        if (mRrggbb) {\n            return [\n                parseInt(mRrggbb[1], 16),\n                parseInt(mRrggbb[2], 16),\n                parseInt(mRrggbb[3], 16),\n            ];\n        }\n        return null;\n    }\n    function parseHexRgbColor(text) {\n        const comps = parseHexRgbColorComponents(text);\n        return comps ? new Color(comps, 'rgb', 'int') : null;\n    }\n    function parseHexRgbaColorComponents(text) {\n        const mRgb = text.match(/^#?([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);\n        if (mRgb) {\n            return [\n                parseInt(mRgb[1] + mRgb[1], 16),\n                parseInt(mRgb[2] + mRgb[2], 16),\n                parseInt(mRgb[3] + mRgb[3], 16),\n                mapRange(parseInt(mRgb[4] + mRgb[4], 16), 0, 255, 0, 1),\n            ];\n        }\n        const mRrggbb = text.match(/^(?:#|0x)?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);\n        if (mRrggbb) {\n            return [\n                parseInt(mRrggbb[1], 16),\n                parseInt(mRrggbb[2], 16),\n                parseInt(mRrggbb[3], 16),\n                mapRange(parseInt(mRrggbb[4], 16), 0, 255, 0, 1),\n            ];\n        }\n        return null;\n    }\n    function parseHexRgbaColor(text) {\n        const comps = parseHexRgbaColorComponents(text);\n        return comps ? new Color(comps, 'rgb', 'int') : null;\n    }\n    function parseObjectRgbColorComponents(text) {\n        const m = text.match(/^\\{\\s*r\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*g\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*b\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*\\}$/);\n        if (!m) {\n            return null;\n        }\n        const comps = [\n            parseFloat(m[1]),\n            parseFloat(m[2]),\n            parseFloat(m[3]),\n        ];\n        if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n            return null;\n        }\n        return comps;\n    }\n    function createObjectRgbColorParser(type) {\n        return (text) => {\n            const comps = parseObjectRgbColorComponents(text);\n            return comps ? new Color(comps, 'rgb', type) : null;\n        };\n    }\n    function parseObjectRgbaColorComponents(text) {\n        const m = text.match(/^\\{\\s*r\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*g\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*b\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*a\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*\\}$/);\n        if (!m) {\n            return null;\n        }\n        const comps = [\n            parseFloat(m[1]),\n            parseFloat(m[2]),\n            parseFloat(m[3]),\n            parseFloat(m[4]),\n        ];\n        if (isNaN(comps[0]) ||\n            isNaN(comps[1]) ||\n            isNaN(comps[2]) ||\n            isNaN(comps[3])) {\n            return null;\n        }\n        return comps;\n    }\n    function createObjectRgbaColorParser(type) {\n        return (text) => {\n            const comps = parseObjectRgbaColorComponents(text);\n            return comps ? new Color(comps, 'rgb', type) : null;\n        };\n    }\n    const PARSER_AND_RESULT = [\n        {\n            parser: parseHexRgbColorComponents,\n            result: {\n                alpha: false,\n                mode: 'rgb',\n                notation: 'hex',\n            },\n        },\n        {\n            parser: parseHexRgbaColorComponents,\n            result: {\n                alpha: true,\n                mode: 'rgb',\n                notation: 'hex',\n            },\n        },\n        {\n            parser: parseFunctionalRgbColorComponents,\n            result: {\n                alpha: false,\n                mode: 'rgb',\n                notation: 'func',\n            },\n        },\n        {\n            parser: parseFunctionalRgbaColorComponents,\n            result: {\n                alpha: true,\n                mode: 'rgb',\n                notation: 'func',\n            },\n        },\n        {\n            parser: parseHslColorComponents,\n            result: {\n                alpha: false,\n                mode: 'hsl',\n                notation: 'func',\n            },\n        },\n        {\n            parser: parseHslaColorComponents,\n            result: {\n                alpha: true,\n                mode: 'hsl',\n                notation: 'func',\n            },\n        },\n        {\n            parser: parseObjectRgbColorComponents,\n            result: {\n                alpha: false,\n                mode: 'rgb',\n                notation: 'object',\n            },\n        },\n        {\n            parser: parseObjectRgbaColorComponents,\n            result: {\n                alpha: true,\n                mode: 'rgb',\n                notation: 'object',\n            },\n        },\n    ];\n    function detectStringColor(text) {\n        return PARSER_AND_RESULT.reduce((prev, { parser, result: detection }) => {\n            if (prev) {\n                return prev;\n            }\n            return parser(text) ? detection : null;\n        }, null);\n    }\n    function detectStringColorFormat(text, type = 'int') {\n        const r = detectStringColor(text);\n        if (!r) {\n            return null;\n        }\n        if (r.notation === 'hex' && type !== 'float') {\n            return Object.assign(Object.assign({}, r), { type: 'int' });\n        }\n        if (r.notation === 'func') {\n            return Object.assign(Object.assign({}, r), { type: type });\n        }\n        return null;\n    }\n    const TYPE_TO_PARSERS = {\n        int: [\n            parseHexRgbColor,\n            parseHexRgbaColor,\n            createFunctionalRgbColorParser('int'),\n            createFunctionalRgbaColorParser('int'),\n            createHslColorParser('int'),\n            createHslaColorParser('int'),\n            createObjectRgbColorParser('int'),\n            createObjectRgbaColorParser('int'),\n        ],\n        float: [\n            createFunctionalRgbColorParser('float'),\n            createFunctionalRgbaColorParser('float'),\n            createHslColorParser('float'),\n            createHslaColorParser('float'),\n            createObjectRgbColorParser('float'),\n            createObjectRgbaColorParser('float'),\n        ],\n    };\n    function createColorStringBindingReader(type) {\n        const parsers = TYPE_TO_PARSERS[type];\n        return (value) => {\n            if (typeof value !== 'string') {\n                return Color.black(type);\n            }\n            const result = parsers.reduce((prev, parser) => {\n                if (prev) {\n                    return prev;\n                }\n                return parser(value);\n            }, null);\n            return result !== null && result !== void 0 ? result : Color.black(type);\n        };\n    }\n    function createColorStringParser(type) {\n        const parsers = TYPE_TO_PARSERS[type];\n        return (value) => {\n            return parsers.reduce((prev, parser) => {\n                if (prev) {\n                    return prev;\n                }\n                return parser(value);\n            }, null);\n        };\n    }\n    function zerofill(comp) {\n        const hex = constrainRange(Math.floor(comp), 0, 255).toString(16);\n        return hex.length === 1 ? `0${hex}` : hex;\n    }\n    function colorToHexRgbString(value, prefix = '#') {\n        const hexes = removeAlphaComponent(value.getComponents('rgb'))\n            .map(zerofill)\n            .join('');\n        return `${prefix}${hexes}`;\n    }\n    function colorToHexRgbaString(value, prefix = '#') {\n        const rgbaComps = value.getComponents('rgb');\n        const hexes = [rgbaComps[0], rgbaComps[1], rgbaComps[2], rgbaComps[3] * 255]\n            .map(zerofill)\n            .join('');\n        return `${prefix}${hexes}`;\n    }\n    function colorToFunctionalRgbString(value, opt_type) {\n        const formatter = createNumberFormatter(opt_type === 'float' ? 2 : 0);\n        const comps = removeAlphaComponent(value.getComponents('rgb', opt_type)).map((comp) => formatter(comp));\n        return `rgb(${comps.join(', ')})`;\n    }\n    function createFunctionalRgbColorFormatter(type) {\n        return (value) => {\n            return colorToFunctionalRgbString(value, type);\n        };\n    }\n    function colorToFunctionalRgbaString(value, opt_type) {\n        const aFormatter = createNumberFormatter(2);\n        const rgbFormatter = createNumberFormatter(opt_type === 'float' ? 2 : 0);\n        const comps = value.getComponents('rgb', opt_type).map((comp, index) => {\n            const formatter = index === 3 ? aFormatter : rgbFormatter;\n            return formatter(comp);\n        });\n        return `rgba(${comps.join(', ')})`;\n    }\n    function createFunctionalRgbaColorFormatter(type) {\n        return (value) => {\n            return colorToFunctionalRgbaString(value, type);\n        };\n    }\n    function colorToFunctionalHslString(value) {\n        const formatters = [\n            createNumberFormatter(0),\n            formatPercentage,\n            formatPercentage,\n        ];\n        const comps = removeAlphaComponent(value.getComponents('hsl')).map((comp, index) => formatters[index](comp));\n        return `hsl(${comps.join(', ')})`;\n    }\n    function colorToFunctionalHslaString(value) {\n        const formatters = [\n            createNumberFormatter(0),\n            formatPercentage,\n            formatPercentage,\n            createNumberFormatter(2),\n        ];\n        const comps = value\n            .getComponents('hsl')\n            .map((comp, index) => formatters[index](comp));\n        return `hsla(${comps.join(', ')})`;\n    }\n    function colorToObjectRgbString(value, type) {\n        const formatter = createNumberFormatter(type === 'float' ? 2 : 0);\n        const names = ['r', 'g', 'b'];\n        const comps = removeAlphaComponent(value.getComponents('rgb', type)).map((comp, index) => `${names[index]}: ${formatter(comp)}`);\n        return `{${comps.join(', ')}}`;\n    }\n    function createObjectRgbColorFormatter(type) {\n        return (value) => colorToObjectRgbString(value, type);\n    }\n    function colorToObjectRgbaString(value, type) {\n        const aFormatter = createNumberFormatter(2);\n        const rgbFormatter = createNumberFormatter(type === 'float' ? 2 : 0);\n        const names = ['r', 'g', 'b', 'a'];\n        const comps = value.getComponents('rgb', type).map((comp, index) => {\n            const formatter = index === 3 ? aFormatter : rgbFormatter;\n            return `${names[index]}: ${formatter(comp)}`;\n        });\n        return `{${comps.join(', ')}}`;\n    }\n    function createObjectRgbaColorFormatter(type) {\n        return (value) => colorToObjectRgbaString(value, type);\n    }\n    const FORMAT_AND_STRINGIFIERS = [\n        {\n            format: {\n                alpha: false,\n                mode: 'rgb',\n                notation: 'hex',\n                type: 'int',\n            },\n            stringifier: colorToHexRgbString,\n        },\n        {\n            format: {\n                alpha: true,\n                mode: 'rgb',\n                notation: 'hex',\n                type: 'int',\n            },\n            stringifier: colorToHexRgbaString,\n        },\n        {\n            format: {\n                alpha: false,\n                mode: 'hsl',\n                notation: 'func',\n                type: 'int',\n            },\n            stringifier: colorToFunctionalHslString,\n        },\n        {\n            format: {\n                alpha: true,\n                mode: 'hsl',\n                notation: 'func',\n                type: 'int',\n            },\n            stringifier: colorToFunctionalHslaString,\n        },\n        ...['int', 'float'].reduce((prev, type) => {\n            return [\n                ...prev,\n                {\n                    format: {\n                        alpha: false,\n                        mode: 'rgb',\n                        notation: 'func',\n                        type: type,\n                    },\n                    stringifier: createFunctionalRgbColorFormatter(type),\n                },\n                {\n                    format: {\n                        alpha: true,\n                        mode: 'rgb',\n                        notation: 'func',\n                        type: type,\n                    },\n                    stringifier: createFunctionalRgbaColorFormatter(type),\n                },\n                {\n                    format: {\n                        alpha: false,\n                        mode: 'rgb',\n                        notation: 'object',\n                        type: type,\n                    },\n                    stringifier: createObjectRgbColorFormatter(type),\n                },\n                {\n                    format: {\n                        alpha: true,\n                        mode: 'rgb',\n                        notation: 'object',\n                        type: type,\n                    },\n                    stringifier: createObjectRgbaColorFormatter(type),\n                },\n            ];\n        }, []),\n    ];\n    function findColorStringifier(format) {\n        return FORMAT_AND_STRINGIFIERS.reduce((prev, fas) => {\n            if (prev) {\n                return prev;\n            }\n            return equalsStringColorFormat(fas.format, format)\n                ? fas.stringifier\n                : null;\n        }, null);\n    }\n\n    const className$a = ClassName('apl');\n    class APaletteView {\n        constructor(doc, config) {\n            this.onValueChange_ = this.onValueChange_.bind(this);\n            this.value = config.value;\n            this.value.emitter.on('change', this.onValueChange_);\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$a());\n            config.viewProps.bindClassModifiers(this.element);\n            config.viewProps.bindTabIndex(this.element);\n            const barElem = doc.createElement('div');\n            barElem.classList.add(className$a('b'));\n            this.element.appendChild(barElem);\n            const colorElem = doc.createElement('div');\n            colorElem.classList.add(className$a('c'));\n            barElem.appendChild(colorElem);\n            this.colorElem_ = colorElem;\n            const markerElem = doc.createElement('div');\n            markerElem.classList.add(className$a('m'));\n            this.element.appendChild(markerElem);\n            this.markerElem_ = markerElem;\n            const previewElem = doc.createElement('div');\n            previewElem.classList.add(className$a('p'));\n            this.markerElem_.appendChild(previewElem);\n            this.previewElem_ = previewElem;\n            this.update_();\n        }\n        update_() {\n            const c = this.value.rawValue;\n            const rgbaComps = c.getComponents('rgb');\n            const leftColor = new Color([rgbaComps[0], rgbaComps[1], rgbaComps[2], 0], 'rgb');\n            const rightColor = new Color([rgbaComps[0], rgbaComps[1], rgbaComps[2], 255], 'rgb');\n            const gradientComps = [\n                'to right',\n                colorToFunctionalRgbaString(leftColor),\n                colorToFunctionalRgbaString(rightColor),\n            ];\n            this.colorElem_.style.background = `linear-gradient(${gradientComps.join(',')})`;\n            this.previewElem_.style.backgroundColor = colorToFunctionalRgbaString(c);\n            const left = mapRange(rgbaComps[3], 0, 1, 0, 100);\n            this.markerElem_.style.left = `${left}%`;\n        }\n        onValueChange_() {\n            this.update_();\n        }\n    }\n\n    class APaletteController {\n        constructor(doc, config) {\n            this.onKeyDown_ = this.onKeyDown_.bind(this);\n            this.onKeyUp_ = this.onKeyUp_.bind(this);\n            this.onPointerDown_ = this.onPointerDown_.bind(this);\n            this.onPointerMove_ = this.onPointerMove_.bind(this);\n            this.onPointerUp_ = this.onPointerUp_.bind(this);\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.view = new APaletteView(doc, {\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.ptHandler_ = new PointerHandler(this.view.element);\n            this.ptHandler_.emitter.on('down', this.onPointerDown_);\n            this.ptHandler_.emitter.on('move', this.onPointerMove_);\n            this.ptHandler_.emitter.on('up', this.onPointerUp_);\n            this.view.element.addEventListener('keydown', this.onKeyDown_);\n            this.view.element.addEventListener('keyup', this.onKeyUp_);\n        }\n        handlePointerEvent_(d, opts) {\n            if (!d.point) {\n                return;\n            }\n            const alpha = d.point.x / d.bounds.width;\n            const c = this.value.rawValue;\n            const [h, s, v] = c.getComponents('hsv');\n            this.value.setRawValue(new Color([h, s, v, alpha], 'hsv'), opts);\n        }\n        onPointerDown_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onPointerMove_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onPointerUp_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: true,\n                last: true,\n            });\n        }\n        onKeyDown_(ev) {\n            const step = getStepForKey(getBaseStepForColor(true), getHorizontalStepKeys(ev));\n            if (step === 0) {\n                return;\n            }\n            const c = this.value.rawValue;\n            const [h, s, v, a] = c.getComponents('hsv');\n            this.value.setRawValue(new Color([h, s, v, a + step], 'hsv'), {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onKeyUp_(ev) {\n            const step = getStepForKey(getBaseStepForColor(true), getHorizontalStepKeys(ev));\n            if (step === 0) {\n                return;\n            }\n            this.value.setRawValue(this.value.rawValue, {\n                forceEmit: true,\n                last: true,\n            });\n        }\n    }\n\n    const className$9 = ClassName('coltxt');\n    function createModeSelectElement(doc) {\n        const selectElem = doc.createElement('select');\n        const items = [\n            { text: 'RGB', value: 'rgb' },\n            { text: 'HSL', value: 'hsl' },\n            { text: 'HSV', value: 'hsv' },\n        ];\n        selectElem.appendChild(items.reduce((frag, item) => {\n            const optElem = doc.createElement('option');\n            optElem.textContent = item.text;\n            optElem.value = item.value;\n            frag.appendChild(optElem);\n            return frag;\n        }, doc.createDocumentFragment()));\n        return selectElem;\n    }\n    class ColorTextView {\n        constructor(doc, config) {\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$9());\n            config.viewProps.bindClassModifiers(this.element);\n            const modeElem = doc.createElement('div');\n            modeElem.classList.add(className$9('m'));\n            this.modeElem_ = createModeSelectElement(doc);\n            this.modeElem_.classList.add(className$9('ms'));\n            modeElem.appendChild(this.modeSelectElement);\n            config.viewProps.bindDisabled(this.modeElem_);\n            const modeMarkerElem = doc.createElement('div');\n            modeMarkerElem.classList.add(className$9('mm'));\n            modeMarkerElem.appendChild(createSvgIconElement(doc, 'dropdown'));\n            modeElem.appendChild(modeMarkerElem);\n            this.element.appendChild(modeElem);\n            const textsElem = doc.createElement('div');\n            textsElem.classList.add(className$9('w'));\n            this.element.appendChild(textsElem);\n            this.textsElem_ = textsElem;\n            this.textViews_ = config.textViews;\n            this.applyTextViews_();\n            bindValue(config.colorMode, (mode) => {\n                this.modeElem_.value = mode;\n            });\n        }\n        get modeSelectElement() {\n            return this.modeElem_;\n        }\n        get textViews() {\n            return this.textViews_;\n        }\n        set textViews(textViews) {\n            this.textViews_ = textViews;\n            this.applyTextViews_();\n        }\n        applyTextViews_() {\n            removeChildElements(this.textsElem_);\n            const doc = this.element.ownerDocument;\n            this.textViews_.forEach((v) => {\n                const compElem = doc.createElement('div');\n                compElem.classList.add(className$9('c'));\n                compElem.appendChild(v.element);\n                this.textsElem_.appendChild(compElem);\n            });\n        }\n    }\n\n    function createFormatter$2(type) {\n        return createNumberFormatter(type === 'float' ? 2 : 0);\n    }\n    function createConstraint$5(mode, type, index) {\n        const max = getColorMaxComponents(mode, type)[index];\n        return new DefiniteRangeConstraint({\n            min: 0,\n            max: max,\n        });\n    }\n    function createComponentController(doc, config, index) {\n        return new NumberTextController(doc, {\n            arrayPosition: index === 0 ? 'fst' : index === 3 - 1 ? 'lst' : 'mid',\n            baseStep: getBaseStepForColor(false),\n            parser: config.parser,\n            props: ValueMap.fromObject({\n                draggingScale: config.colorType === 'float' ? 0.01 : 1,\n                formatter: createFormatter$2(config.colorType),\n            }),\n            value: createValue(0, {\n                constraint: createConstraint$5(config.colorMode, config.colorType, index),\n            }),\n            viewProps: config.viewProps,\n        });\n    }\n    class ColorTextController {\n        constructor(doc, config) {\n            this.onModeSelectChange_ = this.onModeSelectChange_.bind(this);\n            this.colorType_ = config.colorType;\n            this.parser_ = config.parser;\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.colorMode = createValue(this.value.rawValue.mode);\n            this.ccs_ = this.createComponentControllers_(doc);\n            this.view = new ColorTextView(doc, {\n                colorMode: this.colorMode,\n                textViews: [this.ccs_[0].view, this.ccs_[1].view, this.ccs_[2].view],\n                viewProps: this.viewProps,\n            });\n            this.view.modeSelectElement.addEventListener('change', this.onModeSelectChange_);\n        }\n        createComponentControllers_(doc) {\n            const cc = {\n                colorMode: this.colorMode.rawValue,\n                colorType: this.colorType_,\n                parser: this.parser_,\n                viewProps: this.viewProps,\n            };\n            const ccs = [\n                createComponentController(doc, cc, 0),\n                createComponentController(doc, cc, 1),\n                createComponentController(doc, cc, 2),\n            ];\n            ccs.forEach((cs, index) => {\n                connectValues({\n                    primary: this.value,\n                    secondary: cs.value,\n                    forward: (p) => {\n                        return p.rawValue.getComponents(this.colorMode.rawValue, this.colorType_)[index];\n                    },\n                    backward: (p, s) => {\n                        const pickedMode = this.colorMode.rawValue;\n                        const comps = p.rawValue.getComponents(pickedMode, this.colorType_);\n                        comps[index] = s.rawValue;\n                        return new Color(appendAlphaComponent(removeAlphaComponent(comps), comps[3]), pickedMode, this.colorType_);\n                    },\n                });\n            });\n            return ccs;\n        }\n        onModeSelectChange_(ev) {\n            const selectElem = ev.currentTarget;\n            this.colorMode.rawValue = selectElem.value;\n            this.ccs_ = this.createComponentControllers_(this.view.element.ownerDocument);\n            this.view.textViews = [\n                this.ccs_[0].view,\n                this.ccs_[1].view,\n                this.ccs_[2].view,\n            ];\n        }\n    }\n\n    const className$8 = ClassName('hpl');\n    class HPaletteView {\n        constructor(doc, config) {\n            this.onValueChange_ = this.onValueChange_.bind(this);\n            this.value = config.value;\n            this.value.emitter.on('change', this.onValueChange_);\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$8());\n            config.viewProps.bindClassModifiers(this.element);\n            config.viewProps.bindTabIndex(this.element);\n            const colorElem = doc.createElement('div');\n            colorElem.classList.add(className$8('c'));\n            this.element.appendChild(colorElem);\n            const markerElem = doc.createElement('div');\n            markerElem.classList.add(className$8('m'));\n            this.element.appendChild(markerElem);\n            this.markerElem_ = markerElem;\n            this.update_();\n        }\n        update_() {\n            const c = this.value.rawValue;\n            const [h] = c.getComponents('hsv');\n            this.markerElem_.style.backgroundColor = colorToFunctionalRgbString(new Color([h, 100, 100], 'hsv'));\n            const left = mapRange(h, 0, 360, 0, 100);\n            this.markerElem_.style.left = `${left}%`;\n        }\n        onValueChange_() {\n            this.update_();\n        }\n    }\n\n    class HPaletteController {\n        constructor(doc, config) {\n            this.onKeyDown_ = this.onKeyDown_.bind(this);\n            this.onKeyUp_ = this.onKeyUp_.bind(this);\n            this.onPointerDown_ = this.onPointerDown_.bind(this);\n            this.onPointerMove_ = this.onPointerMove_.bind(this);\n            this.onPointerUp_ = this.onPointerUp_.bind(this);\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.view = new HPaletteView(doc, {\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.ptHandler_ = new PointerHandler(this.view.element);\n            this.ptHandler_.emitter.on('down', this.onPointerDown_);\n            this.ptHandler_.emitter.on('move', this.onPointerMove_);\n            this.ptHandler_.emitter.on('up', this.onPointerUp_);\n            this.view.element.addEventListener('keydown', this.onKeyDown_);\n            this.view.element.addEventListener('keyup', this.onKeyUp_);\n        }\n        handlePointerEvent_(d, opts) {\n            if (!d.point) {\n                return;\n            }\n            const hue = mapRange(constrainRange(d.point.x, 0, d.bounds.width), 0, d.bounds.width, 0, 360);\n            const c = this.value.rawValue;\n            const [, s, v, a] = c.getComponents('hsv');\n            this.value.setRawValue(new Color([hue, s, v, a], 'hsv'), opts);\n        }\n        onPointerDown_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onPointerMove_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onPointerUp_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: true,\n                last: true,\n            });\n        }\n        onKeyDown_(ev) {\n            const step = getStepForKey(getBaseStepForColor(false), getHorizontalStepKeys(ev));\n            if (step === 0) {\n                return;\n            }\n            const c = this.value.rawValue;\n            const [h, s, v, a] = c.getComponents('hsv');\n            this.value.setRawValue(new Color([h + step, s, v, a], 'hsv'), {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onKeyUp_(ev) {\n            const step = getStepForKey(getBaseStepForColor(false), getHorizontalStepKeys(ev));\n            if (step === 0) {\n                return;\n            }\n            this.value.setRawValue(this.value.rawValue, {\n                forceEmit: true,\n                last: true,\n            });\n        }\n    }\n\n    const className$7 = ClassName('svp');\n    const CANVAS_RESOL = 64;\n    class SvPaletteView {\n        constructor(doc, config) {\n            this.onValueChange_ = this.onValueChange_.bind(this);\n            this.value = config.value;\n            this.value.emitter.on('change', this.onValueChange_);\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$7());\n            config.viewProps.bindClassModifiers(this.element);\n            config.viewProps.bindTabIndex(this.element);\n            const canvasElem = doc.createElement('canvas');\n            canvasElem.height = CANVAS_RESOL;\n            canvasElem.width = CANVAS_RESOL;\n            canvasElem.classList.add(className$7('c'));\n            this.element.appendChild(canvasElem);\n            this.canvasElement = canvasElem;\n            const markerElem = doc.createElement('div');\n            markerElem.classList.add(className$7('m'));\n            this.element.appendChild(markerElem);\n            this.markerElem_ = markerElem;\n            this.update_();\n        }\n        update_() {\n            const ctx = getCanvasContext(this.canvasElement);\n            if (!ctx) {\n                return;\n            }\n            const c = this.value.rawValue;\n            const hsvComps = c.getComponents('hsv');\n            const width = this.canvasElement.width;\n            const height = this.canvasElement.height;\n            const imgData = ctx.getImageData(0, 0, width, height);\n            const data = imgData.data;\n            for (let iy = 0; iy < height; iy++) {\n                for (let ix = 0; ix < width; ix++) {\n                    const s = mapRange(ix, 0, width, 0, 100);\n                    const v = mapRange(iy, 0, height, 100, 0);\n                    const rgbComps = hsvToRgbInt(hsvComps[0], s, v);\n                    const i = (iy * width + ix) * 4;\n                    data[i] = rgbComps[0];\n                    data[i + 1] = rgbComps[1];\n                    data[i + 2] = rgbComps[2];\n                    data[i + 3] = 255;\n                }\n            }\n            ctx.putImageData(imgData, 0, 0);\n            const left = mapRange(hsvComps[1], 0, 100, 0, 100);\n            this.markerElem_.style.left = `${left}%`;\n            const top = mapRange(hsvComps[2], 0, 100, 100, 0);\n            this.markerElem_.style.top = `${top}%`;\n        }\n        onValueChange_() {\n            this.update_();\n        }\n    }\n\n    class SvPaletteController {\n        constructor(doc, config) {\n            this.onKeyDown_ = this.onKeyDown_.bind(this);\n            this.onKeyUp_ = this.onKeyUp_.bind(this);\n            this.onPointerDown_ = this.onPointerDown_.bind(this);\n            this.onPointerMove_ = this.onPointerMove_.bind(this);\n            this.onPointerUp_ = this.onPointerUp_.bind(this);\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.view = new SvPaletteView(doc, {\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.ptHandler_ = new PointerHandler(this.view.element);\n            this.ptHandler_.emitter.on('down', this.onPointerDown_);\n            this.ptHandler_.emitter.on('move', this.onPointerMove_);\n            this.ptHandler_.emitter.on('up', this.onPointerUp_);\n            this.view.element.addEventListener('keydown', this.onKeyDown_);\n            this.view.element.addEventListener('keyup', this.onKeyUp_);\n        }\n        handlePointerEvent_(d, opts) {\n            if (!d.point) {\n                return;\n            }\n            const saturation = mapRange(d.point.x, 0, d.bounds.width, 0, 100);\n            const value = mapRange(d.point.y, 0, d.bounds.height, 100, 0);\n            const [h, , , a] = this.value.rawValue.getComponents('hsv');\n            this.value.setRawValue(new Color([h, saturation, value, a], 'hsv'), opts);\n        }\n        onPointerDown_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onPointerMove_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onPointerUp_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: true,\n                last: true,\n            });\n        }\n        onKeyDown_(ev) {\n            if (isArrowKey(ev.key)) {\n                ev.preventDefault();\n            }\n            const [h, s, v, a] = this.value.rawValue.getComponents('hsv');\n            const baseStep = getBaseStepForColor(false);\n            const ds = getStepForKey(baseStep, getHorizontalStepKeys(ev));\n            const dv = getStepForKey(baseStep, getVerticalStepKeys(ev));\n            if (ds === 0 && dv === 0) {\n                return;\n            }\n            this.value.setRawValue(new Color([h, s + ds, v + dv, a], 'hsv'), {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onKeyUp_(ev) {\n            const baseStep = getBaseStepForColor(false);\n            const ds = getStepForKey(baseStep, getHorizontalStepKeys(ev));\n            const dv = getStepForKey(baseStep, getVerticalStepKeys(ev));\n            if (ds === 0 && dv === 0) {\n                return;\n            }\n            this.value.setRawValue(this.value.rawValue, {\n                forceEmit: true,\n                last: true,\n            });\n        }\n    }\n\n    class ColorPickerController {\n        constructor(doc, config) {\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.hPaletteC_ = new HPaletteController(doc, {\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.svPaletteC_ = new SvPaletteController(doc, {\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.alphaIcs_ = config.supportsAlpha\n                ? {\n                    palette: new APaletteController(doc, {\n                        value: this.value,\n                        viewProps: this.viewProps,\n                    }),\n                    text: new NumberTextController(doc, {\n                        parser: parseNumber,\n                        baseStep: 0.1,\n                        props: ValueMap.fromObject({\n                            draggingScale: 0.01,\n                            formatter: createNumberFormatter(2),\n                        }),\n                        value: createValue(0, {\n                            constraint: new DefiniteRangeConstraint({ min: 0, max: 1 }),\n                        }),\n                        viewProps: this.viewProps,\n                    }),\n                }\n                : null;\n            if (this.alphaIcs_) {\n                connectValues({\n                    primary: this.value,\n                    secondary: this.alphaIcs_.text.value,\n                    forward: (p) => {\n                        return p.rawValue.getComponents()[3];\n                    },\n                    backward: (p, s) => {\n                        const comps = p.rawValue.getComponents();\n                        comps[3] = s.rawValue;\n                        return new Color(comps, p.rawValue.mode);\n                    },\n                });\n            }\n            this.textC_ = new ColorTextController(doc, {\n                colorType: config.colorType,\n                parser: parseNumber,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.view = new ColorPickerView(doc, {\n                alphaViews: this.alphaIcs_\n                    ? {\n                        palette: this.alphaIcs_.palette.view,\n                        text: this.alphaIcs_.text.view,\n                    }\n                    : null,\n                hPaletteView: this.hPaletteC_.view,\n                supportsAlpha: config.supportsAlpha,\n                svPaletteView: this.svPaletteC_.view,\n                textView: this.textC_.view,\n                viewProps: this.viewProps,\n            });\n        }\n        get textController() {\n            return this.textC_;\n        }\n    }\n\n    const className$6 = ClassName('colsw');\n    class ColorSwatchView {\n        constructor(doc, config) {\n            this.onValueChange_ = this.onValueChange_.bind(this);\n            config.value.emitter.on('change', this.onValueChange_);\n            this.value = config.value;\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$6());\n            config.viewProps.bindClassModifiers(this.element);\n            const swatchElem = doc.createElement('div');\n            swatchElem.classList.add(className$6('sw'));\n            this.element.appendChild(swatchElem);\n            this.swatchElem_ = swatchElem;\n            const buttonElem = doc.createElement('button');\n            buttonElem.classList.add(className$6('b'));\n            config.viewProps.bindDisabled(buttonElem);\n            this.element.appendChild(buttonElem);\n            this.buttonElement = buttonElem;\n            this.update_();\n        }\n        update_() {\n            const value = this.value.rawValue;\n            this.swatchElem_.style.backgroundColor = colorToHexRgbaString(value);\n        }\n        onValueChange_() {\n            this.update_();\n        }\n    }\n\n    class ColorSwatchController {\n        constructor(doc, config) {\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.view = new ColorSwatchView(doc, {\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n        }\n    }\n\n    class ColorController {\n        constructor(doc, config) {\n            this.onButtonBlur_ = this.onButtonBlur_.bind(this);\n            this.onButtonClick_ = this.onButtonClick_.bind(this);\n            this.onPopupChildBlur_ = this.onPopupChildBlur_.bind(this);\n            this.onPopupChildKeydown_ = this.onPopupChildKeydown_.bind(this);\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.foldable_ = Foldable.create(config.expanded);\n            this.swatchC_ = new ColorSwatchController(doc, {\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            const buttonElem = this.swatchC_.view.buttonElement;\n            buttonElem.addEventListener('blur', this.onButtonBlur_);\n            buttonElem.addEventListener('click', this.onButtonClick_);\n            this.textC_ = new TextController(doc, {\n                parser: config.parser,\n                props: ValueMap.fromObject({\n                    formatter: config.formatter,\n                }),\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.view = new ColorView(doc, {\n                foldable: this.foldable_,\n                pickerLayout: config.pickerLayout,\n            });\n            this.view.swatchElement.appendChild(this.swatchC_.view.element);\n            this.view.textElement.appendChild(this.textC_.view.element);\n            this.popC_ =\n                config.pickerLayout === 'popup'\n                    ? new PopupController(doc, {\n                        viewProps: this.viewProps,\n                    })\n                    : null;\n            const pickerC = new ColorPickerController(doc, {\n                colorType: config.colorType,\n                supportsAlpha: config.supportsAlpha,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            pickerC.view.allFocusableElements.forEach((elem) => {\n                elem.addEventListener('blur', this.onPopupChildBlur_);\n                elem.addEventListener('keydown', this.onPopupChildKeydown_);\n            });\n            this.pickerC_ = pickerC;\n            if (this.popC_) {\n                this.view.element.appendChild(this.popC_.view.element);\n                this.popC_.view.element.appendChild(pickerC.view.element);\n                connectValues({\n                    primary: this.foldable_.value('expanded'),\n                    secondary: this.popC_.shows,\n                    forward: (p) => p.rawValue,\n                    backward: (_, s) => s.rawValue,\n                });\n            }\n            else if (this.view.pickerElement) {\n                this.view.pickerElement.appendChild(this.pickerC_.view.element);\n                bindFoldable(this.foldable_, this.view.pickerElement);\n            }\n        }\n        get textController() {\n            return this.textC_;\n        }\n        onButtonBlur_(e) {\n            if (!this.popC_) {\n                return;\n            }\n            const elem = this.view.element;\n            const nextTarget = forceCast(e.relatedTarget);\n            if (!nextTarget || !elem.contains(nextTarget)) {\n                this.popC_.shows.rawValue = false;\n            }\n        }\n        onButtonClick_() {\n            this.foldable_.set('expanded', !this.foldable_.get('expanded'));\n            if (this.foldable_.get('expanded')) {\n                this.pickerC_.view.allFocusableElements[0].focus();\n            }\n        }\n        onPopupChildBlur_(ev) {\n            if (!this.popC_) {\n                return;\n            }\n            const elem = this.popC_.view.element;\n            const nextTarget = findNextTarget(ev);\n            if (nextTarget && elem.contains(nextTarget)) {\n                return;\n            }\n            if (nextTarget &&\n                nextTarget === this.swatchC_.view.buttonElement &&\n                !supportsTouch(elem.ownerDocument)) {\n                return;\n            }\n            this.popC_.shows.rawValue = false;\n        }\n        onPopupChildKeydown_(ev) {\n            if (this.popC_) {\n                if (ev.key === 'Escape') {\n                    this.popC_.shows.rawValue = false;\n                }\n            }\n            else if (this.view.pickerElement) {\n                if (ev.key === 'Escape') {\n                    this.swatchC_.view.buttonElement.focus();\n                }\n            }\n        }\n    }\n\n    function colorFromObject(value, opt_type) {\n        if (Color.isColorObject(value)) {\n            return Color.fromObject(value, opt_type);\n        }\n        return Color.black(opt_type);\n    }\n    function colorToRgbNumber(value) {\n        return removeAlphaComponent(value.getComponents('rgb')).reduce((result, comp) => {\n            return (result << 8) | (Math.floor(comp) & 0xff);\n        }, 0);\n    }\n    function colorToRgbaNumber(value) {\n        return (value.getComponents('rgb').reduce((result, comp, index) => {\n            const hex = Math.floor(index === 3 ? comp * 255 : comp) & 0xff;\n            return (result << 8) | hex;\n        }, 0) >>> 0);\n    }\n    function numberToRgbColor(num) {\n        return new Color([(num >> 16) & 0xff, (num >> 8) & 0xff, num & 0xff], 'rgb');\n    }\n    function numberToRgbaColor(num) {\n        return new Color([\n            (num >> 24) & 0xff,\n            (num >> 16) & 0xff,\n            (num >> 8) & 0xff,\n            mapRange(num & 0xff, 0, 255, 0, 1),\n        ], 'rgb');\n    }\n    function colorFromRgbNumber(value) {\n        if (typeof value !== 'number') {\n            return Color.black();\n        }\n        return numberToRgbColor(value);\n    }\n    function colorFromRgbaNumber(value) {\n        if (typeof value !== 'number') {\n            return Color.black();\n        }\n        return numberToRgbaColor(value);\n    }\n\n    function createColorStringWriter(format) {\n        const stringify = findColorStringifier(format);\n        return stringify\n            ? (target, value) => {\n                writePrimitive(target, stringify(value));\n            }\n            : null;\n    }\n    function createColorNumberWriter(supportsAlpha) {\n        const colorToNumber = supportsAlpha ? colorToRgbaNumber : colorToRgbNumber;\n        return (target, value) => {\n            writePrimitive(target, colorToNumber(value));\n        };\n    }\n    function writeRgbaColorObject(target, value, opt_type) {\n        const obj = value.toRgbaObject(opt_type);\n        target.writeProperty('r', obj.r);\n        target.writeProperty('g', obj.g);\n        target.writeProperty('b', obj.b);\n        target.writeProperty('a', obj.a);\n    }\n    function writeRgbColorObject(target, value, opt_type) {\n        const obj = value.toRgbaObject(opt_type);\n        target.writeProperty('r', obj.r);\n        target.writeProperty('g', obj.g);\n        target.writeProperty('b', obj.b);\n    }\n    function createColorObjectWriter(supportsAlpha, opt_type) {\n        return (target, inValue) => {\n            if (supportsAlpha) {\n                writeRgbaColorObject(target, inValue, opt_type);\n            }\n            else {\n                writeRgbColorObject(target, inValue, opt_type);\n            }\n        };\n    }\n\n    function shouldSupportAlpha$1(inputParams) {\n        var _a;\n        if ((inputParams === null || inputParams === void 0 ? void 0 : inputParams.alpha) || ((_a = inputParams === null || inputParams === void 0 ? void 0 : inputParams.color) === null || _a === void 0 ? void 0 : _a.alpha)) {\n            return true;\n        }\n        return false;\n    }\n    function createFormatter$1(supportsAlpha) {\n        return supportsAlpha\n            ? (v) => colorToHexRgbaString(v, '0x')\n            : (v) => colorToHexRgbString(v, '0x');\n    }\n    function isForColor(params) {\n        if ('color' in params) {\n            return true;\n        }\n        if ('view' in params && params.view === 'color') {\n            return true;\n        }\n        return false;\n    }\n    const NumberColorInputPlugin = {\n        id: 'input-color-number',\n        type: 'input',\n        accept: (value, params) => {\n            if (typeof value !== 'number') {\n                return null;\n            }\n            if (!isForColor(params)) {\n                return null;\n            }\n            const result = parseColorInputParams(params);\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            reader: (args) => {\n                return shouldSupportAlpha$1(args.params)\n                    ? colorFromRgbaNumber\n                    : colorFromRgbNumber;\n            },\n            equals: Color.equals,\n            writer: (args) => {\n                return createColorNumberWriter(shouldSupportAlpha$1(args.params));\n            },\n        },\n        controller: (args) => {\n            const supportsAlpha = shouldSupportAlpha$1(args.params);\n            const expanded = 'expanded' in args.params ? args.params.expanded : undefined;\n            const picker = 'picker' in args.params ? args.params.picker : undefined;\n            return new ColorController(args.document, {\n                colorType: 'int',\n                expanded: expanded !== null && expanded !== void 0 ? expanded : false,\n                formatter: createFormatter$1(supportsAlpha),\n                parser: createColorStringParser('int'),\n                pickerLayout: picker !== null && picker !== void 0 ? picker : 'popup',\n                supportsAlpha: supportsAlpha,\n                value: args.value,\n                viewProps: args.viewProps,\n            });\n        },\n    };\n\n    function shouldSupportAlpha(initialValue) {\n        return Color.isRgbaColorObject(initialValue);\n    }\n    function createColorObjectReader(opt_type) {\n        return (value) => {\n            return colorFromObject(value, opt_type);\n        };\n    }\n    function createColorObjectFormatter(supportsAlpha, type) {\n        return (value) => {\n            if (supportsAlpha) {\n                return colorToObjectRgbaString(value, type);\n            }\n            return colorToObjectRgbString(value, type);\n        };\n    }\n    const ObjectColorInputPlugin = {\n        id: 'input-color-object',\n        type: 'input',\n        accept: (value, params) => {\n            if (!Color.isColorObject(value)) {\n                return null;\n            }\n            const result = parseColorInputParams(params);\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            reader: (args) => createColorObjectReader(extractColorType(args.params)),\n            equals: Color.equals,\n            writer: (args) => createColorObjectWriter(shouldSupportAlpha(args.initialValue), extractColorType(args.params)),\n        },\n        controller: (args) => {\n            var _a;\n            const supportsAlpha = Color.isRgbaColorObject(args.initialValue);\n            const expanded = 'expanded' in args.params ? args.params.expanded : undefined;\n            const picker = 'picker' in args.params ? args.params.picker : undefined;\n            const type = (_a = extractColorType(args.params)) !== null && _a !== void 0 ? _a : 'int';\n            return new ColorController(args.document, {\n                colorType: type,\n                expanded: expanded !== null && expanded !== void 0 ? expanded : false,\n                formatter: createColorObjectFormatter(supportsAlpha, type),\n                parser: createColorStringParser(type),\n                pickerLayout: picker !== null && picker !== void 0 ? picker : 'popup',\n                supportsAlpha: supportsAlpha,\n                value: args.value,\n                viewProps: args.viewProps,\n            });\n        },\n    };\n\n    const StringColorInputPlugin = {\n        id: 'input-color-string',\n        type: 'input',\n        accept: (value, params) => {\n            if (typeof value !== 'string') {\n                return null;\n            }\n            if ('view' in params && params.view === 'text') {\n                return null;\n            }\n            const format = detectStringColorFormat(value, extractColorType(params));\n            if (!format) {\n                return null;\n            }\n            const stringifier = findColorStringifier(format);\n            if (!stringifier) {\n                return null;\n            }\n            const result = parseColorInputParams(params);\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            reader: (args) => { var _a; return createColorStringBindingReader((_a = extractColorType(args.params)) !== null && _a !== void 0 ? _a : 'int'); },\n            equals: Color.equals,\n            writer: (args) => {\n                const format = detectStringColorFormat(args.initialValue, extractColorType(args.params));\n                if (!format) {\n                    throw TpError.shouldNeverHappen();\n                }\n                const writer = createColorStringWriter(format);\n                if (!writer) {\n                    throw TpError.notBindable();\n                }\n                return writer;\n            },\n        },\n        controller: (args) => {\n            const format = detectStringColorFormat(args.initialValue, extractColorType(args.params));\n            if (!format) {\n                throw TpError.shouldNeverHappen();\n            }\n            const stringifier = findColorStringifier(format);\n            if (!stringifier) {\n                throw TpError.shouldNeverHappen();\n            }\n            const expanded = 'expanded' in args.params ? args.params.expanded : undefined;\n            const picker = 'picker' in args.params ? args.params.picker : undefined;\n            return new ColorController(args.document, {\n                colorType: format.type,\n                expanded: expanded !== null && expanded !== void 0 ? expanded : false,\n                formatter: stringifier,\n                parser: createColorStringParser(format.type),\n                pickerLayout: picker !== null && picker !== void 0 ? picker : 'popup',\n                supportsAlpha: format.alpha,\n                value: args.value,\n                viewProps: args.viewProps,\n            });\n        },\n    };\n\n    class PointNdConstraint {\n        constructor(config) {\n            this.components = config.components;\n            this.asm_ = config.assembly;\n        }\n        constrain(value) {\n            const comps = this.asm_\n                .toComponents(value)\n                .map((comp, index) => { var _a, _b; return (_b = (_a = this.components[index]) === null || _a === void 0 ? void 0 : _a.constrain(comp)) !== null && _b !== void 0 ? _b : comp; });\n            return this.asm_.fromComponents(comps);\n        }\n    }\n\n    const className$5 = ClassName('pndtxt');\n    class PointNdTextView {\n        constructor(doc, config) {\n            this.textViews = config.textViews;\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$5());\n            this.textViews.forEach((v) => {\n                const axisElem = doc.createElement('div');\n                axisElem.classList.add(className$5('a'));\n                axisElem.appendChild(v.element);\n                this.element.appendChild(axisElem);\n            });\n        }\n    }\n\n    function createAxisController(doc, config, index) {\n        return new NumberTextController(doc, {\n            arrayPosition: index === 0 ? 'fst' : index === config.axes.length - 1 ? 'lst' : 'mid',\n            baseStep: config.axes[index].baseStep,\n            parser: config.parser,\n            props: config.axes[index].textProps,\n            value: createValue(0, {\n                constraint: config.axes[index].constraint,\n            }),\n            viewProps: config.viewProps,\n        });\n    }\n    class PointNdTextController {\n        constructor(doc, config) {\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.acs_ = config.axes.map((_, index) => createAxisController(doc, config, index));\n            this.acs_.forEach((c, index) => {\n                connectValues({\n                    primary: this.value,\n                    secondary: c.value,\n                    forward: (p) => {\n                        return config.assembly.toComponents(p.rawValue)[index];\n                    },\n                    backward: (p, s) => {\n                        const comps = config.assembly.toComponents(p.rawValue);\n                        comps[index] = s.rawValue;\n                        return config.assembly.fromComponents(comps);\n                    },\n                });\n            });\n            this.view = new PointNdTextView(doc, {\n                textViews: this.acs_.map((ac) => ac.view),\n            });\n        }\n    }\n\n    function createStepConstraint(params, initialValue) {\n        if ('step' in params && !isEmpty(params.step)) {\n            return new StepConstraint(params.step, initialValue);\n        }\n        return null;\n    }\n    function createRangeConstraint(params) {\n        if (!isEmpty(params.max) && !isEmpty(params.min)) {\n            return new DefiniteRangeConstraint({\n                max: params.max,\n                min: params.min,\n            });\n        }\n        if (!isEmpty(params.max) || !isEmpty(params.min)) {\n            return new RangeConstraint({\n                max: params.max,\n                min: params.min,\n            });\n        }\n        return null;\n    }\n    function findNumberRange(c) {\n        const drc = findConstraint(c, DefiniteRangeConstraint);\n        if (drc) {\n            return [drc.values.get('min'), drc.values.get('max')];\n        }\n        const rc = findConstraint(c, RangeConstraint);\n        if (rc) {\n            return [rc.minValue, rc.maxValue];\n        }\n        return [undefined, undefined];\n    }\n    function createConstraint$4(params,\n    initialValue) {\n        const constraints = [];\n        const sc = createStepConstraint(params, initialValue);\n        if (sc) {\n            constraints.push(sc);\n        }\n        const rc = createRangeConstraint(params);\n        if (rc) {\n            constraints.push(rc);\n        }\n        const lc = createListConstraint(params.options);\n        if (lc) {\n            constraints.push(lc);\n        }\n        return new CompositeConstraint(constraints);\n    }\n    const NumberInputPlugin = {\n        id: 'input-number',\n        type: 'input',\n        accept: (value, params) => {\n            if (typeof value !== 'number') {\n                return null;\n            }\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                format: p.optional.function,\n                max: p.optional.number,\n                min: p.optional.number,\n                options: p.optional.custom(parseListOptions),\n                step: p.optional.number,\n            });\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            reader: (_args) => numberFromUnknown,\n            constraint: (args) => createConstraint$4(args.params, args.initialValue),\n            writer: (_args) => writePrimitive,\n        },\n        controller: (args) => {\n            var _a;\n            const value = args.value;\n            const c = args.constraint;\n            const lc = c && findConstraint(c, ListConstraint);\n            if (lc) {\n                return new ListController(args.document, {\n                    props: new ValueMap({\n                        options: lc.values.value('options'),\n                    }),\n                    value: value,\n                    viewProps: args.viewProps,\n                });\n            }\n            const formatter = (_a = ('format' in args.params ? args.params.format : undefined)) !== null && _a !== void 0 ? _a : createNumberFormatter(getSuitableDecimalDigits(c, value.rawValue));\n            const drc = c && findConstraint(c, DefiniteRangeConstraint);\n            if (drc) {\n                return new SliderTextController(args.document, {\n                    baseStep: getBaseStep(c),\n                    parser: parseNumber,\n                    sliderProps: new ValueMap({\n                        maxValue: drc.values.value('max'),\n                        minValue: drc.values.value('min'),\n                    }),\n                    textProps: ValueMap.fromObject({\n                        draggingScale: getSuitableDraggingScale(c, value.rawValue),\n                        formatter: formatter,\n                    }),\n                    value: value,\n                    viewProps: args.viewProps,\n                });\n            }\n            return new NumberTextController(args.document, {\n                baseStep: getBaseStep(c),\n                parser: parseNumber,\n                props: ValueMap.fromObject({\n                    draggingScale: getSuitableDraggingScale(c, value.rawValue),\n                    formatter: formatter,\n                }),\n                value: value,\n                viewProps: args.viewProps,\n            });\n        },\n    };\n\n    class Point2d {\n        constructor(x = 0, y = 0) {\n            this.x = x;\n            this.y = y;\n        }\n        getComponents() {\n            return [this.x, this.y];\n        }\n        static isObject(obj) {\n            if (isEmpty(obj)) {\n                return false;\n            }\n            const x = obj.x;\n            const y = obj.y;\n            if (typeof x !== 'number' || typeof y !== 'number') {\n                return false;\n            }\n            return true;\n        }\n        static equals(v1, v2) {\n            return v1.x === v2.x && v1.y === v2.y;\n        }\n        toObject() {\n            return {\n                x: this.x,\n                y: this.y,\n            };\n        }\n    }\n    const Point2dAssembly = {\n        toComponents: (p) => p.getComponents(),\n        fromComponents: (comps) => new Point2d(...comps),\n    };\n\n    const className$4 = ClassName('p2d');\n    class Point2dView {\n        constructor(doc, config) {\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$4());\n            config.viewProps.bindClassModifiers(this.element);\n            bindValue(config.expanded, valueToClassName(this.element, className$4(undefined, 'expanded')));\n            const headElem = doc.createElement('div');\n            headElem.classList.add(className$4('h'));\n            this.element.appendChild(headElem);\n            const buttonElem = doc.createElement('button');\n            buttonElem.classList.add(className$4('b'));\n            buttonElem.appendChild(createSvgIconElement(doc, 'p2dpad'));\n            config.viewProps.bindDisabled(buttonElem);\n            headElem.appendChild(buttonElem);\n            this.buttonElement = buttonElem;\n            const textElem = doc.createElement('div');\n            textElem.classList.add(className$4('t'));\n            headElem.appendChild(textElem);\n            this.textElement = textElem;\n            if (config.pickerLayout === 'inline') {\n                const pickerElem = doc.createElement('div');\n                pickerElem.classList.add(className$4('p'));\n                this.element.appendChild(pickerElem);\n                this.pickerElement = pickerElem;\n            }\n            else {\n                this.pickerElement = null;\n            }\n        }\n    }\n\n    const className$3 = ClassName('p2dp');\n    class Point2dPickerView {\n        constructor(doc, config) {\n            this.onFoldableChange_ = this.onFoldableChange_.bind(this);\n            this.onValueChange_ = this.onValueChange_.bind(this);\n            this.invertsY_ = config.invertsY;\n            this.maxValue_ = config.maxValue;\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$3());\n            if (config.layout === 'popup') {\n                this.element.classList.add(className$3(undefined, 'p'));\n            }\n            config.viewProps.bindClassModifiers(this.element);\n            const padElem = doc.createElement('div');\n            padElem.classList.add(className$3('p'));\n            config.viewProps.bindTabIndex(padElem);\n            this.element.appendChild(padElem);\n            this.padElement = padElem;\n            const svgElem = doc.createElementNS(SVG_NS, 'svg');\n            svgElem.classList.add(className$3('g'));\n            this.padElement.appendChild(svgElem);\n            this.svgElem_ = svgElem;\n            const xAxisElem = doc.createElementNS(SVG_NS, 'line');\n            xAxisElem.classList.add(className$3('ax'));\n            xAxisElem.setAttributeNS(null, 'x1', '0');\n            xAxisElem.setAttributeNS(null, 'y1', '50%');\n            xAxisElem.setAttributeNS(null, 'x2', '100%');\n            xAxisElem.setAttributeNS(null, 'y2', '50%');\n            this.svgElem_.appendChild(xAxisElem);\n            const yAxisElem = doc.createElementNS(SVG_NS, 'line');\n            yAxisElem.classList.add(className$3('ax'));\n            yAxisElem.setAttributeNS(null, 'x1', '50%');\n            yAxisElem.setAttributeNS(null, 'y1', '0');\n            yAxisElem.setAttributeNS(null, 'x2', '50%');\n            yAxisElem.setAttributeNS(null, 'y2', '100%');\n            this.svgElem_.appendChild(yAxisElem);\n            const lineElem = doc.createElementNS(SVG_NS, 'line');\n            lineElem.classList.add(className$3('l'));\n            lineElem.setAttributeNS(null, 'x1', '50%');\n            lineElem.setAttributeNS(null, 'y1', '50%');\n            this.svgElem_.appendChild(lineElem);\n            this.lineElem_ = lineElem;\n            const markerElem = doc.createElement('div');\n            markerElem.classList.add(className$3('m'));\n            this.padElement.appendChild(markerElem);\n            this.markerElem_ = markerElem;\n            config.value.emitter.on('change', this.onValueChange_);\n            this.value = config.value;\n            this.update_();\n        }\n        get allFocusableElements() {\n            return [this.padElement];\n        }\n        update_() {\n            const [x, y] = this.value.rawValue.getComponents();\n            const max = this.maxValue_;\n            const px = mapRange(x, -max, +max, 0, 100);\n            const py = mapRange(y, -max, +max, 0, 100);\n            const ipy = this.invertsY_ ? 100 - py : py;\n            this.lineElem_.setAttributeNS(null, 'x2', `${px}%`);\n            this.lineElem_.setAttributeNS(null, 'y2', `${ipy}%`);\n            this.markerElem_.style.left = `${px}%`;\n            this.markerElem_.style.top = `${ipy}%`;\n        }\n        onValueChange_() {\n            this.update_();\n        }\n        onFoldableChange_() {\n            this.update_();\n        }\n    }\n\n    function computeOffset(ev, baseSteps, invertsY) {\n        return [\n            getStepForKey(baseSteps[0], getHorizontalStepKeys(ev)),\n            getStepForKey(baseSteps[1], getVerticalStepKeys(ev)) * (invertsY ? 1 : -1),\n        ];\n    }\n    class Point2dPickerController {\n        constructor(doc, config) {\n            this.onPadKeyDown_ = this.onPadKeyDown_.bind(this);\n            this.onPadKeyUp_ = this.onPadKeyUp_.bind(this);\n            this.onPointerDown_ = this.onPointerDown_.bind(this);\n            this.onPointerMove_ = this.onPointerMove_.bind(this);\n            this.onPointerUp_ = this.onPointerUp_.bind(this);\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.baseSteps_ = config.baseSteps;\n            this.maxValue_ = config.maxValue;\n            this.invertsY_ = config.invertsY;\n            this.view = new Point2dPickerView(doc, {\n                invertsY: this.invertsY_,\n                layout: config.layout,\n                maxValue: this.maxValue_,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.ptHandler_ = new PointerHandler(this.view.padElement);\n            this.ptHandler_.emitter.on('down', this.onPointerDown_);\n            this.ptHandler_.emitter.on('move', this.onPointerMove_);\n            this.ptHandler_.emitter.on('up', this.onPointerUp_);\n            this.view.padElement.addEventListener('keydown', this.onPadKeyDown_);\n            this.view.padElement.addEventListener('keyup', this.onPadKeyUp_);\n        }\n        handlePointerEvent_(d, opts) {\n            if (!d.point) {\n                return;\n            }\n            const max = this.maxValue_;\n            const px = mapRange(d.point.x, 0, d.bounds.width, -max, +max);\n            const py = mapRange(this.invertsY_ ? d.bounds.height - d.point.y : d.point.y, 0, d.bounds.height, -max, +max);\n            this.value.setRawValue(new Point2d(px, py), opts);\n        }\n        onPointerDown_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onPointerMove_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onPointerUp_(ev) {\n            this.handlePointerEvent_(ev.data, {\n                forceEmit: true,\n                last: true,\n            });\n        }\n        onPadKeyDown_(ev) {\n            if (isArrowKey(ev.key)) {\n                ev.preventDefault();\n            }\n            const [dx, dy] = computeOffset(ev, this.baseSteps_, this.invertsY_);\n            if (dx === 0 && dy === 0) {\n                return;\n            }\n            this.value.setRawValue(new Point2d(this.value.rawValue.x + dx, this.value.rawValue.y + dy), {\n                forceEmit: false,\n                last: false,\n            });\n        }\n        onPadKeyUp_(ev) {\n            const [dx, dy] = computeOffset(ev, this.baseSteps_, this.invertsY_);\n            if (dx === 0 && dy === 0) {\n                return;\n            }\n            this.value.setRawValue(this.value.rawValue, {\n                forceEmit: true,\n                last: true,\n            });\n        }\n    }\n\n    class Point2dController {\n        constructor(doc, config) {\n            var _a, _b;\n            this.onPopupChildBlur_ = this.onPopupChildBlur_.bind(this);\n            this.onPopupChildKeydown_ = this.onPopupChildKeydown_.bind(this);\n            this.onPadButtonBlur_ = this.onPadButtonBlur_.bind(this);\n            this.onPadButtonClick_ = this.onPadButtonClick_.bind(this);\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.foldable_ = Foldable.create(config.expanded);\n            this.popC_ =\n                config.pickerLayout === 'popup'\n                    ? new PopupController(doc, {\n                        viewProps: this.viewProps,\n                    })\n                    : null;\n            const padC = new Point2dPickerController(doc, {\n                baseSteps: [config.axes[0].baseStep, config.axes[1].baseStep],\n                invertsY: config.invertsY,\n                layout: config.pickerLayout,\n                maxValue: config.maxValue,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            padC.view.allFocusableElements.forEach((elem) => {\n                elem.addEventListener('blur', this.onPopupChildBlur_);\n                elem.addEventListener('keydown', this.onPopupChildKeydown_);\n            });\n            this.pickerC_ = padC;\n            this.textC_ = new PointNdTextController(doc, {\n                assembly: Point2dAssembly,\n                axes: config.axes,\n                parser: config.parser,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            this.view = new Point2dView(doc, {\n                expanded: this.foldable_.value('expanded'),\n                pickerLayout: config.pickerLayout,\n                viewProps: this.viewProps,\n            });\n            this.view.textElement.appendChild(this.textC_.view.element);\n            (_a = this.view.buttonElement) === null || _a === void 0 ? void 0 : _a.addEventListener('blur', this.onPadButtonBlur_);\n            (_b = this.view.buttonElement) === null || _b === void 0 ? void 0 : _b.addEventListener('click', this.onPadButtonClick_);\n            if (this.popC_) {\n                this.view.element.appendChild(this.popC_.view.element);\n                this.popC_.view.element.appendChild(this.pickerC_.view.element);\n                connectValues({\n                    primary: this.foldable_.value('expanded'),\n                    secondary: this.popC_.shows,\n                    forward: (p) => p.rawValue,\n                    backward: (_, s) => s.rawValue,\n                });\n            }\n            else if (this.view.pickerElement) {\n                this.view.pickerElement.appendChild(this.pickerC_.view.element);\n                bindFoldable(this.foldable_, this.view.pickerElement);\n            }\n        }\n        onPadButtonBlur_(e) {\n            if (!this.popC_) {\n                return;\n            }\n            const elem = this.view.element;\n            const nextTarget = forceCast(e.relatedTarget);\n            if (!nextTarget || !elem.contains(nextTarget)) {\n                this.popC_.shows.rawValue = false;\n            }\n        }\n        onPadButtonClick_() {\n            this.foldable_.set('expanded', !this.foldable_.get('expanded'));\n            if (this.foldable_.get('expanded')) {\n                this.pickerC_.view.allFocusableElements[0].focus();\n            }\n        }\n        onPopupChildBlur_(ev) {\n            if (!this.popC_) {\n                return;\n            }\n            const elem = this.popC_.view.element;\n            const nextTarget = findNextTarget(ev);\n            if (nextTarget && elem.contains(nextTarget)) {\n                return;\n            }\n            if (nextTarget &&\n                nextTarget === this.view.buttonElement &&\n                !supportsTouch(elem.ownerDocument)) {\n                return;\n            }\n            this.popC_.shows.rawValue = false;\n        }\n        onPopupChildKeydown_(ev) {\n            if (this.popC_) {\n                if (ev.key === 'Escape') {\n                    this.popC_.shows.rawValue = false;\n                }\n            }\n            else if (this.view.pickerElement) {\n                if (ev.key === 'Escape') {\n                    this.view.buttonElement.focus();\n                }\n            }\n        }\n    }\n\n    class Point3d {\n        constructor(x = 0, y = 0, z = 0) {\n            this.x = x;\n            this.y = y;\n            this.z = z;\n        }\n        getComponents() {\n            return [this.x, this.y, this.z];\n        }\n        static isObject(obj) {\n            if (isEmpty(obj)) {\n                return false;\n            }\n            const x = obj.x;\n            const y = obj.y;\n            const z = obj.z;\n            if (typeof x !== 'number' ||\n                typeof y !== 'number' ||\n                typeof z !== 'number') {\n                return false;\n            }\n            return true;\n        }\n        static equals(v1, v2) {\n            return v1.x === v2.x && v1.y === v2.y && v1.z === v2.z;\n        }\n        toObject() {\n            return {\n                x: this.x,\n                y: this.y,\n                z: this.z,\n            };\n        }\n    }\n    const Point3dAssembly = {\n        toComponents: (p) => p.getComponents(),\n        fromComponents: (comps) => new Point3d(...comps),\n    };\n\n    function point3dFromUnknown(value) {\n        return Point3d.isObject(value)\n            ? new Point3d(value.x, value.y, value.z)\n            : new Point3d();\n    }\n    function writePoint3d(target, value) {\n        target.writeProperty('x', value.x);\n        target.writeProperty('y', value.y);\n        target.writeProperty('z', value.z);\n    }\n\n    function createConstraint$3(params, initialValue) {\n        return new PointNdConstraint({\n            assembly: Point3dAssembly,\n            components: [\n                createDimensionConstraint('x' in params ? params.x : undefined, initialValue.x),\n                createDimensionConstraint('y' in params ? params.y : undefined, initialValue.y),\n                createDimensionConstraint('z' in params ? params.z : undefined, initialValue.z),\n            ],\n        });\n    }\n    function createAxis$2(initialValue, constraint) {\n        return {\n            baseStep: getBaseStep(constraint),\n            constraint: constraint,\n            textProps: ValueMap.fromObject({\n                draggingScale: getSuitableDraggingScale(constraint, initialValue),\n                formatter: createNumberFormatter(getSuitableDecimalDigits(constraint, initialValue)),\n            }),\n        };\n    }\n    const Point3dInputPlugin = {\n        id: 'input-point3d',\n        type: 'input',\n        accept: (value, params) => {\n            if (!Point3d.isObject(value)) {\n                return null;\n            }\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                x: p.optional.custom(parsePointDimensionParams),\n                y: p.optional.custom(parsePointDimensionParams),\n                z: p.optional.custom(parsePointDimensionParams),\n            });\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            reader: (_args) => point3dFromUnknown,\n            constraint: (args) => createConstraint$3(args.params, args.initialValue),\n            equals: Point3d.equals,\n            writer: (_args) => writePoint3d,\n        },\n        controller: (args) => {\n            const value = args.value;\n            const c = args.constraint;\n            if (!(c instanceof PointNdConstraint)) {\n                throw TpError.shouldNeverHappen();\n            }\n            return new PointNdTextController(args.document, {\n                assembly: Point3dAssembly,\n                axes: [\n                    createAxis$2(value.rawValue.x, c.components[0]),\n                    createAxis$2(value.rawValue.y, c.components[1]),\n                    createAxis$2(value.rawValue.z, c.components[2]),\n                ],\n                parser: parseNumber,\n                value: value,\n                viewProps: args.viewProps,\n            });\n        },\n    };\n\n    class Point4d {\n        constructor(x = 0, y = 0, z = 0, w = 0) {\n            this.x = x;\n            this.y = y;\n            this.z = z;\n            this.w = w;\n        }\n        getComponents() {\n            return [this.x, this.y, this.z, this.w];\n        }\n        static isObject(obj) {\n            if (isEmpty(obj)) {\n                return false;\n            }\n            const x = obj.x;\n            const y = obj.y;\n            const z = obj.z;\n            const w = obj.w;\n            if (typeof x !== 'number' ||\n                typeof y !== 'number' ||\n                typeof z !== 'number' ||\n                typeof w !== 'number') {\n                return false;\n            }\n            return true;\n        }\n        static equals(v1, v2) {\n            return v1.x === v2.x && v1.y === v2.y && v1.z === v2.z && v1.w === v2.w;\n        }\n        toObject() {\n            return {\n                x: this.x,\n                y: this.y,\n                z: this.z,\n                w: this.w,\n            };\n        }\n    }\n    const Point4dAssembly = {\n        toComponents: (p) => p.getComponents(),\n        fromComponents: (comps) => new Point4d(...comps),\n    };\n\n    function point4dFromUnknown(value) {\n        return Point4d.isObject(value)\n            ? new Point4d(value.x, value.y, value.z, value.w)\n            : new Point4d();\n    }\n    function writePoint4d(target, value) {\n        target.writeProperty('x', value.x);\n        target.writeProperty('y', value.y);\n        target.writeProperty('z', value.z);\n        target.writeProperty('w', value.w);\n    }\n\n    function createConstraint$2(params, initialValue) {\n        return new PointNdConstraint({\n            assembly: Point4dAssembly,\n            components: [\n                createDimensionConstraint('x' in params ? params.x : undefined, initialValue.x),\n                createDimensionConstraint('y' in params ? params.y : undefined, initialValue.y),\n                createDimensionConstraint('z' in params ? params.z : undefined, initialValue.z),\n                createDimensionConstraint('w' in params ? params.w : undefined, initialValue.w),\n            ],\n        });\n    }\n    function createAxis$1(initialValue, constraint) {\n        return {\n            baseStep: getBaseStep(constraint),\n            constraint: constraint,\n            textProps: ValueMap.fromObject({\n                draggingScale: getSuitableDraggingScale(constraint, initialValue),\n                formatter: createNumberFormatter(getSuitableDecimalDigits(constraint, initialValue)),\n            }),\n        };\n    }\n    const Point4dInputPlugin = {\n        id: 'input-point4d',\n        type: 'input',\n        accept: (value, params) => {\n            if (!Point4d.isObject(value)) {\n                return null;\n            }\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                x: p.optional.custom(parsePointDimensionParams),\n                y: p.optional.custom(parsePointDimensionParams),\n                z: p.optional.custom(parsePointDimensionParams),\n                w: p.optional.custom(parsePointDimensionParams),\n            });\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            reader: (_args) => point4dFromUnknown,\n            constraint: (args) => createConstraint$2(args.params, args.initialValue),\n            equals: Point4d.equals,\n            writer: (_args) => writePoint4d,\n        },\n        controller: (args) => {\n            const value = args.value;\n            const c = args.constraint;\n            if (!(c instanceof PointNdConstraint)) {\n                throw TpError.shouldNeverHappen();\n            }\n            return new PointNdTextController(args.document, {\n                assembly: Point4dAssembly,\n                axes: value.rawValue\n                    .getComponents()\n                    .map((comp, index) => createAxis$1(comp, c.components[index])),\n                parser: parseNumber,\n                value: value,\n                viewProps: args.viewProps,\n            });\n        },\n    };\n\n    function createConstraint$1(params) {\n        const constraints = [];\n        const lc = createListConstraint(params.options);\n        if (lc) {\n            constraints.push(lc);\n        }\n        return new CompositeConstraint(constraints);\n    }\n    const StringInputPlugin = {\n        id: 'input-string',\n        type: 'input',\n        accept: (value, params) => {\n            if (typeof value !== 'string') {\n                return null;\n            }\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                options: p.optional.custom(parseListOptions),\n            });\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            reader: (_args) => stringFromUnknown,\n            constraint: (args) => createConstraint$1(args.params),\n            writer: (_args) => writePrimitive,\n        },\n        controller: (args) => {\n            const doc = args.document;\n            const value = args.value;\n            const c = args.constraint;\n            const lc = c && findConstraint(c, ListConstraint);\n            if (lc) {\n                return new ListController(doc, {\n                    props: new ValueMap({\n                        options: lc.values.value('options'),\n                    }),\n                    value: value,\n                    viewProps: args.viewProps,\n                });\n            }\n            return new TextController(doc, {\n                parser: (v) => v,\n                props: ValueMap.fromObject({\n                    formatter: formatString,\n                }),\n                value: value,\n                viewProps: args.viewProps,\n            });\n        },\n    };\n\n    const Constants = {\n        monitor: {\n            defaultInterval: 200,\n            defaultLineCount: 3,\n        },\n    };\n\n    const className$2 = ClassName('mll');\n    class MultiLogView {\n        constructor(doc, config) {\n            this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n            this.formatter_ = config.formatter;\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$2());\n            config.viewProps.bindClassModifiers(this.element);\n            const textareaElem = doc.createElement('textarea');\n            textareaElem.classList.add(className$2('i'));\n            textareaElem.style.height = `calc(var(--bld-us) * ${config.lineCount})`;\n            textareaElem.readOnly = true;\n            config.viewProps.bindDisabled(textareaElem);\n            this.element.appendChild(textareaElem);\n            this.textareaElem_ = textareaElem;\n            config.value.emitter.on('change', this.onValueUpdate_);\n            this.value = config.value;\n            this.update_();\n        }\n        update_() {\n            const elem = this.textareaElem_;\n            const shouldScroll = elem.scrollTop === elem.scrollHeight - elem.clientHeight;\n            const lines = [];\n            this.value.rawValue.forEach((value) => {\n                if (value !== undefined) {\n                    lines.push(this.formatter_(value));\n                }\n            });\n            elem.textContent = lines.join('\\n');\n            if (shouldScroll) {\n                elem.scrollTop = elem.scrollHeight;\n            }\n        }\n        onValueUpdate_() {\n            this.update_();\n        }\n    }\n\n    class MultiLogController {\n        constructor(doc, config) {\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.view = new MultiLogView(doc, {\n                formatter: config.formatter,\n                lineCount: config.lineCount,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n        }\n    }\n\n    const className$1 = ClassName('sgl');\n    class SingleLogView {\n        constructor(doc, config) {\n            this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n            this.formatter_ = config.formatter;\n            this.element = doc.createElement('div');\n            this.element.classList.add(className$1());\n            config.viewProps.bindClassModifiers(this.element);\n            const inputElem = doc.createElement('input');\n            inputElem.classList.add(className$1('i'));\n            inputElem.readOnly = true;\n            inputElem.type = 'text';\n            config.viewProps.bindDisabled(inputElem);\n            this.element.appendChild(inputElem);\n            this.inputElement = inputElem;\n            config.value.emitter.on('change', this.onValueUpdate_);\n            this.value = config.value;\n            this.update_();\n        }\n        update_() {\n            const values = this.value.rawValue;\n            const lastValue = values[values.length - 1];\n            this.inputElement.value =\n                lastValue !== undefined ? this.formatter_(lastValue) : '';\n        }\n        onValueUpdate_() {\n            this.update_();\n        }\n    }\n\n    class SingleLogController {\n        constructor(doc, config) {\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.view = new SingleLogView(doc, {\n                formatter: config.formatter,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n        }\n    }\n\n    const BooleanMonitorPlugin = {\n        id: 'monitor-bool',\n        type: 'monitor',\n        accept: (value, params) => {\n            if (typeof value !== 'boolean') {\n                return null;\n            }\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                lineCount: p.optional.number,\n            });\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            reader: (_args) => boolFromUnknown,\n        },\n        controller: (args) => {\n            var _a;\n            if (args.value.rawValue.length === 1) {\n                return new SingleLogController(args.document, {\n                    formatter: BooleanFormatter,\n                    value: args.value,\n                    viewProps: args.viewProps,\n                });\n            }\n            return new MultiLogController(args.document, {\n                formatter: BooleanFormatter,\n                lineCount: (_a = args.params.lineCount) !== null && _a !== void 0 ? _a : Constants.monitor.defaultLineCount,\n                value: args.value,\n                viewProps: args.viewProps,\n            });\n        },\n    };\n\n    const className = ClassName('grl');\n    class GraphLogView {\n        constructor(doc, config) {\n            this.onCursorChange_ = this.onCursorChange_.bind(this);\n            this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n            this.element = doc.createElement('div');\n            this.element.classList.add(className());\n            config.viewProps.bindClassModifiers(this.element);\n            this.formatter_ = config.formatter;\n            this.props_ = config.props;\n            this.cursor_ = config.cursor;\n            this.cursor_.emitter.on('change', this.onCursorChange_);\n            const svgElem = doc.createElementNS(SVG_NS, 'svg');\n            svgElem.classList.add(className('g'));\n            svgElem.style.height = `calc(var(--bld-us) * ${config.lineCount})`;\n            this.element.appendChild(svgElem);\n            this.svgElem_ = svgElem;\n            const lineElem = doc.createElementNS(SVG_NS, 'polyline');\n            this.svgElem_.appendChild(lineElem);\n            this.lineElem_ = lineElem;\n            const tooltipElem = doc.createElement('div');\n            tooltipElem.classList.add(className('t'), ClassName('tt')());\n            this.element.appendChild(tooltipElem);\n            this.tooltipElem_ = tooltipElem;\n            config.value.emitter.on('change', this.onValueUpdate_);\n            this.value = config.value;\n            this.update_();\n        }\n        get graphElement() {\n            return this.svgElem_;\n        }\n        update_() {\n            const bounds = this.svgElem_.getBoundingClientRect();\n            const maxIndex = this.value.rawValue.length - 1;\n            const min = this.props_.get('minValue');\n            const max = this.props_.get('maxValue');\n            const points = [];\n            this.value.rawValue.forEach((v, index) => {\n                if (v === undefined) {\n                    return;\n                }\n                const x = mapRange(index, 0, maxIndex, 0, bounds.width);\n                const y = mapRange(v, min, max, bounds.height, 0);\n                points.push([x, y].join(','));\n            });\n            this.lineElem_.setAttributeNS(null, 'points', points.join(' '));\n            const tooltipElem = this.tooltipElem_;\n            const value = this.value.rawValue[this.cursor_.rawValue];\n            if (value === undefined) {\n                tooltipElem.classList.remove(className('t', 'a'));\n                return;\n            }\n            const tx = mapRange(this.cursor_.rawValue, 0, maxIndex, 0, bounds.width);\n            const ty = mapRange(value, min, max, bounds.height, 0);\n            tooltipElem.style.left = `${tx}px`;\n            tooltipElem.style.top = `${ty}px`;\n            tooltipElem.textContent = `${this.formatter_(value)}`;\n            if (!tooltipElem.classList.contains(className('t', 'a'))) {\n                tooltipElem.classList.add(className('t', 'a'), className('t', 'in'));\n                forceReflow(tooltipElem);\n                tooltipElem.classList.remove(className('t', 'in'));\n            }\n        }\n        onValueUpdate_() {\n            this.update_();\n        }\n        onCursorChange_() {\n            this.update_();\n        }\n    }\n\n    class GraphLogController {\n        constructor(doc, config) {\n            this.onGraphMouseMove_ = this.onGraphMouseMove_.bind(this);\n            this.onGraphMouseLeave_ = this.onGraphMouseLeave_.bind(this);\n            this.onGraphPointerDown_ = this.onGraphPointerDown_.bind(this);\n            this.onGraphPointerMove_ = this.onGraphPointerMove_.bind(this);\n            this.onGraphPointerUp_ = this.onGraphPointerUp_.bind(this);\n            this.props_ = config.props;\n            this.value = config.value;\n            this.viewProps = config.viewProps;\n            this.cursor_ = createValue(-1);\n            this.view = new GraphLogView(doc, {\n                cursor: this.cursor_,\n                formatter: config.formatter,\n                lineCount: config.lineCount,\n                props: this.props_,\n                value: this.value,\n                viewProps: this.viewProps,\n            });\n            if (!supportsTouch(doc)) {\n                this.view.element.addEventListener('mousemove', this.onGraphMouseMove_);\n                this.view.element.addEventListener('mouseleave', this.onGraphMouseLeave_);\n            }\n            else {\n                const ph = new PointerHandler(this.view.element);\n                ph.emitter.on('down', this.onGraphPointerDown_);\n                ph.emitter.on('move', this.onGraphPointerMove_);\n                ph.emitter.on('up', this.onGraphPointerUp_);\n            }\n        }\n        onGraphMouseLeave_() {\n            this.cursor_.rawValue = -1;\n        }\n        onGraphMouseMove_(ev) {\n            const bounds = this.view.element.getBoundingClientRect();\n            this.cursor_.rawValue = Math.floor(mapRange(ev.offsetX, 0, bounds.width, 0, this.value.rawValue.length));\n        }\n        onGraphPointerDown_(ev) {\n            this.onGraphPointerMove_(ev);\n        }\n        onGraphPointerMove_(ev) {\n            if (!ev.data.point) {\n                this.cursor_.rawValue = -1;\n                return;\n            }\n            this.cursor_.rawValue = Math.floor(mapRange(ev.data.point.x, 0, ev.data.bounds.width, 0, this.value.rawValue.length));\n        }\n        onGraphPointerUp_() {\n            this.cursor_.rawValue = -1;\n        }\n    }\n\n    function createFormatter(params) {\n        return 'format' in params && !isEmpty(params.format)\n            ? params.format\n            : createNumberFormatter(2);\n    }\n    function createTextMonitor(args) {\n        var _a;\n        if (args.value.rawValue.length === 1) {\n            return new SingleLogController(args.document, {\n                formatter: createFormatter(args.params),\n                value: args.value,\n                viewProps: args.viewProps,\n            });\n        }\n        return new MultiLogController(args.document, {\n            formatter: createFormatter(args.params),\n            lineCount: (_a = args.params.lineCount) !== null && _a !== void 0 ? _a : Constants.monitor.defaultLineCount,\n            value: args.value,\n            viewProps: args.viewProps,\n        });\n    }\n    function createGraphMonitor(args) {\n        var _a, _b, _c;\n        return new GraphLogController(args.document, {\n            formatter: createFormatter(args.params),\n            lineCount: (_a = args.params.lineCount) !== null && _a !== void 0 ? _a : Constants.monitor.defaultLineCount,\n            props: ValueMap.fromObject({\n                maxValue: (_b = ('max' in args.params ? args.params.max : null)) !== null && _b !== void 0 ? _b : 100,\n                minValue: (_c = ('min' in args.params ? args.params.min : null)) !== null && _c !== void 0 ? _c : 0,\n            }),\n            value: args.value,\n            viewProps: args.viewProps,\n        });\n    }\n    function shouldShowGraph(params) {\n        return 'view' in params && params.view === 'graph';\n    }\n    const NumberMonitorPlugin = {\n        id: 'monitor-number',\n        type: 'monitor',\n        accept: (value, params) => {\n            if (typeof value !== 'number') {\n                return null;\n            }\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                format: p.optional.function,\n                lineCount: p.optional.number,\n                max: p.optional.number,\n                min: p.optional.number,\n                view: p.optional.string,\n            });\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            defaultBufferSize: (params) => (shouldShowGraph(params) ? 64 : 1),\n            reader: (_args) => numberFromUnknown,\n        },\n        controller: (args) => {\n            if (shouldShowGraph(args.params)) {\n                return createGraphMonitor(args);\n            }\n            return createTextMonitor(args);\n        },\n    };\n\n    const StringMonitorPlugin = {\n        id: 'monitor-string',\n        type: 'monitor',\n        accept: (value, params) => {\n            if (typeof value !== 'string') {\n                return null;\n            }\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                lineCount: p.optional.number,\n                multiline: p.optional.boolean,\n            });\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            reader: (_args) => stringFromUnknown,\n        },\n        controller: (args) => {\n            var _a;\n            const value = args.value;\n            const multiline = value.rawValue.length > 1 ||\n                ('multiline' in args.params && args.params.multiline);\n            if (multiline) {\n                return new MultiLogController(args.document, {\n                    formatter: formatString,\n                    lineCount: (_a = args.params.lineCount) !== null && _a !== void 0 ? _a : Constants.monitor.defaultLineCount,\n                    value: value,\n                    viewProps: args.viewProps,\n                });\n            }\n            return new SingleLogController(args.document, {\n                formatter: formatString,\n                value: value,\n                viewProps: args.viewProps,\n            });\n        },\n    };\n\n    function createInputBindingController(plugin, args) {\n        var _a;\n        const result = plugin.accept(args.target.read(), args.params);\n        if (isEmpty(result)) {\n            return null;\n        }\n        const p = ParamsParsers;\n        const valueArgs = {\n            target: args.target,\n            initialValue: result.initialValue,\n            params: result.params,\n        };\n        const reader = plugin.binding.reader(valueArgs);\n        const constraint = plugin.binding.constraint\n            ? plugin.binding.constraint(valueArgs)\n            : undefined;\n        const value = createValue(reader(result.initialValue), {\n            constraint: constraint,\n            equals: plugin.binding.equals,\n        });\n        const binding = new InputBinding({\n            reader: reader,\n            target: args.target,\n            value: value,\n            writer: plugin.binding.writer(valueArgs),\n        });\n        const disabled = p.optional.boolean(args.params.disabled).value;\n        const hidden = p.optional.boolean(args.params.hidden).value;\n        const controller = plugin.controller({\n            constraint: constraint,\n            document: args.document,\n            initialValue: result.initialValue,\n            params: result.params,\n            value: binding.value,\n            viewProps: ViewProps.create({\n                disabled: disabled,\n                hidden: hidden,\n            }),\n        });\n        return new InputBindingController(args.document, {\n            binding: binding,\n            blade: createBlade(),\n            props: ValueMap.fromObject({\n                label: 'label' in args.params\n                    ? (_a = p.optional.string(args.params.label).value) !== null && _a !== void 0 ? _a : null\n                    : args.target.key,\n            }),\n            valueController: controller,\n        });\n    }\n\n    function createTicker(document, interval) {\n        return interval === 0\n            ? new ManualTicker()\n            : new IntervalTicker(document, interval !== null && interval !== void 0 ? interval : Constants.monitor.defaultInterval);\n    }\n    function createMonitorBindingController(plugin, args) {\n        var _a, _b, _c;\n        const p = ParamsParsers;\n        const result = plugin.accept(args.target.read(), args.params);\n        if (isEmpty(result)) {\n            return null;\n        }\n        const bindingArgs = {\n            target: args.target,\n            initialValue: result.initialValue,\n            params: result.params,\n        };\n        const reader = plugin.binding.reader(bindingArgs);\n        const bufferSize = (_b = (_a = p.optional.number(args.params.bufferSize).value) !== null && _a !== void 0 ? _a : (plugin.binding.defaultBufferSize &&\n            plugin.binding.defaultBufferSize(result.params))) !== null && _b !== void 0 ? _b : 1;\n        const interval = p.optional.number(args.params.interval).value;\n        const binding = new MonitorBinding({\n            reader: reader,\n            target: args.target,\n            ticker: createTicker(args.document, interval),\n            value: initializeBuffer(bufferSize),\n        });\n        const disabled = p.optional.boolean(args.params.disabled).value;\n        const hidden = p.optional.boolean(args.params.hidden).value;\n        const controller = plugin.controller({\n            document: args.document,\n            params: result.params,\n            value: binding.value,\n            viewProps: ViewProps.create({\n                disabled: disabled,\n                hidden: hidden,\n            }),\n        });\n        return new MonitorBindingController(args.document, {\n            binding: binding,\n            blade: createBlade(),\n            props: ValueMap.fromObject({\n                label: 'label' in args.params\n                    ? (_c = p.optional.string(args.params.label).value) !== null && _c !== void 0 ? _c : null\n                    : args.target.key,\n            }),\n            valueController: controller,\n        });\n    }\n\n    class PluginPool {\n        constructor() {\n            this.pluginsMap_ = {\n                blades: [],\n                inputs: [],\n                monitors: [],\n            };\n        }\n        getAll() {\n            return [\n                ...this.pluginsMap_.blades,\n                ...this.pluginsMap_.inputs,\n                ...this.pluginsMap_.monitors,\n            ];\n        }\n        register(r) {\n            if (r.type === 'blade') {\n                this.pluginsMap_.blades.unshift(r);\n            }\n            else if (r.type === 'input') {\n                this.pluginsMap_.inputs.unshift(r);\n            }\n            else if (r.type === 'monitor') {\n                this.pluginsMap_.monitors.unshift(r);\n            }\n        }\n        createInput(document, target, params) {\n            const initialValue = target.read();\n            if (isEmpty(initialValue)) {\n                throw new TpError({\n                    context: {\n                        key: target.key,\n                    },\n                    type: 'nomatchingcontroller',\n                });\n            }\n            const bc = this.pluginsMap_.inputs.reduce((result, plugin) => result !== null && result !== void 0 ? result : createInputBindingController(plugin, {\n                document: document,\n                target: target,\n                params: params,\n            }), null);\n            if (bc) {\n                return bc;\n            }\n            throw new TpError({\n                context: {\n                    key: target.key,\n                },\n                type: 'nomatchingcontroller',\n            });\n        }\n        createMonitor(document, target, params) {\n            const bc = this.pluginsMap_.monitors.reduce((result, plugin) => result !== null && result !== void 0 ? result : createMonitorBindingController(plugin, {\n                document: document,\n                params: params,\n                target: target,\n            }), null);\n            if (bc) {\n                return bc;\n            }\n            throw new TpError({\n                context: {\n                    key: target.key,\n                },\n                type: 'nomatchingcontroller',\n            });\n        }\n        createBlade(document, params) {\n            const bc = this.pluginsMap_.blades.reduce((result, plugin) => result !== null && result !== void 0 ? result : createBladeController(plugin, {\n                document: document,\n                params: params,\n            }), null);\n            if (!bc) {\n                throw new TpError({\n                    type: 'nomatchingview',\n                    context: {\n                        params: params,\n                    },\n                });\n            }\n            return bc;\n        }\n        createBladeApi(bc) {\n            if (bc instanceof InputBindingController) {\n                return new InputBindingApi(bc);\n            }\n            if (bc instanceof MonitorBindingController) {\n                return new MonitorBindingApi(bc);\n            }\n            if (bc instanceof RackController) {\n                return new RackApi(bc, this);\n            }\n            const api = this.pluginsMap_.blades.reduce((result, plugin) => result !== null && result !== void 0 ? result : plugin.api({\n                controller: bc,\n                pool: this,\n            }), null);\n            if (!api) {\n                throw TpError.shouldNeverHappen();\n            }\n            return api;\n        }\n    }\n\n    function createDefaultPluginPool() {\n        const pool = new PluginPool();\n        [\n            Point2dInputPlugin,\n            Point3dInputPlugin,\n            Point4dInputPlugin,\n            StringInputPlugin,\n            NumberInputPlugin,\n            StringColorInputPlugin,\n            ObjectColorInputPlugin,\n            NumberColorInputPlugin,\n            BooleanInputPlugin,\n            BooleanMonitorPlugin,\n            StringMonitorPlugin,\n            NumberMonitorPlugin,\n            ButtonBladePlugin,\n            FolderBladePlugin,\n            SeparatorBladePlugin,\n            TabBladePlugin,\n        ].forEach((p) => {\n            pool.register(p);\n        });\n        return pool;\n    }\n\n    function point2dFromUnknown(value) {\n        return Point2d.isObject(value)\n            ? new Point2d(value.x, value.y)\n            : new Point2d();\n    }\n    function writePoint2d(target, value) {\n        target.writeProperty('x', value.x);\n        target.writeProperty('y', value.y);\n    }\n\n    function createDimensionConstraint(params, initialValue) {\n        if (!params) {\n            return undefined;\n        }\n        const constraints = [];\n        const cs = createStepConstraint(params, initialValue);\n        if (cs) {\n            constraints.push(cs);\n        }\n        const rs = createRangeConstraint(params);\n        if (rs) {\n            constraints.push(rs);\n        }\n        return new CompositeConstraint(constraints);\n    }\n    function createConstraint(params, initialValue) {\n        return new PointNdConstraint({\n            assembly: Point2dAssembly,\n            components: [\n                createDimensionConstraint('x' in params ? params.x : undefined, initialValue.x),\n                createDimensionConstraint('y' in params ? params.y : undefined, initialValue.y),\n            ],\n        });\n    }\n    function getSuitableMaxDimensionValue(constraint, rawValue) {\n        const [min, max] = constraint ? findNumberRange(constraint) : [];\n        if (!isEmpty(min) || !isEmpty(max)) {\n            return Math.max(Math.abs(min !== null && min !== void 0 ? min : 0), Math.abs(max !== null && max !== void 0 ? max : 0));\n        }\n        const step = getBaseStep(constraint);\n        return Math.max(Math.abs(step) * 10, Math.abs(rawValue) * 10);\n    }\n    function getSuitableMaxValue(initialValue, constraint) {\n        const xc = constraint instanceof PointNdConstraint\n            ? constraint.components[0]\n            : undefined;\n        const yc = constraint instanceof PointNdConstraint\n            ? constraint.components[1]\n            : undefined;\n        const xr = getSuitableMaxDimensionValue(xc, initialValue.x);\n        const yr = getSuitableMaxDimensionValue(yc, initialValue.y);\n        return Math.max(xr, yr);\n    }\n    function createAxis(initialValue, constraint) {\n        return {\n            baseStep: getBaseStep(constraint),\n            constraint: constraint,\n            textProps: ValueMap.fromObject({\n                draggingScale: getSuitableDraggingScale(constraint, initialValue),\n                formatter: createNumberFormatter(getSuitableDecimalDigits(constraint, initialValue)),\n            }),\n        };\n    }\n    function shouldInvertY(params) {\n        if (!('y' in params)) {\n            return false;\n        }\n        const yParams = params.y;\n        if (!yParams) {\n            return false;\n        }\n        return 'inverted' in yParams ? !!yParams.inverted : false;\n    }\n    const Point2dInputPlugin = {\n        id: 'input-point2d',\n        type: 'input',\n        accept: (value, params) => {\n            if (!Point2d.isObject(value)) {\n                return null;\n            }\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                expanded: p.optional.boolean,\n                picker: p.optional.custom(parsePickerLayout),\n                x: p.optional.custom(parsePointDimensionParams),\n                y: p.optional.object({\n                    inverted: p.optional.boolean,\n                    max: p.optional.number,\n                    min: p.optional.number,\n                    step: p.optional.number,\n                }),\n            });\n            return result\n                ? {\n                    initialValue: value,\n                    params: result,\n                }\n                : null;\n        },\n        binding: {\n            reader: (_args) => point2dFromUnknown,\n            constraint: (args) => createConstraint(args.params, args.initialValue),\n            equals: Point2d.equals,\n            writer: (_args) => writePoint2d,\n        },\n        controller: (args) => {\n            const doc = args.document;\n            const value = args.value;\n            const c = args.constraint;\n            if (!(c instanceof PointNdConstraint)) {\n                throw TpError.shouldNeverHappen();\n            }\n            const expanded = 'expanded' in args.params ? args.params.expanded : undefined;\n            const picker = 'picker' in args.params ? args.params.picker : undefined;\n            return new Point2dController(doc, {\n                axes: [\n                    createAxis(value.rawValue.x, c.components[0]),\n                    createAxis(value.rawValue.y, c.components[1]),\n                ],\n                expanded: expanded !== null && expanded !== void 0 ? expanded : false,\n                invertsY: shouldInvertY(args.params),\n                maxValue: getSuitableMaxValue(value.rawValue, c),\n                parser: parseNumber,\n                pickerLayout: picker !== null && picker !== void 0 ? picker : 'popup',\n                value: value,\n                viewProps: args.viewProps,\n            });\n        },\n    };\n\n    class ListApi extends BladeApi {\n        constructor(controller) {\n            super(controller);\n            this.emitter_ = new Emitter();\n            this.controller_.valueController.value.emitter.on('change', (ev) => {\n                this.emitter_.emit('change', {\n                    event: new TpChangeEvent(this, ev.rawValue),\n                });\n            });\n        }\n        get label() {\n            return this.controller_.props.get('label');\n        }\n        set label(label) {\n            this.controller_.props.set('label', label);\n        }\n        get options() {\n            return this.controller_.valueController.props.get('options');\n        }\n        set options(options) {\n            this.controller_.valueController.props.set('options', options);\n        }\n        get value() {\n            return this.controller_.valueController.value.rawValue;\n        }\n        set value(value) {\n            this.controller_.valueController.value.rawValue = value;\n        }\n        on(eventName, handler) {\n            const bh = handler.bind(this);\n            this.emitter_.on(eventName, (ev) => {\n                bh(ev.event);\n            });\n            return this;\n        }\n    }\n\n    class SliderApi extends BladeApi {\n        constructor(controller) {\n            super(controller);\n            this.emitter_ = new Emitter();\n            this.controller_.valueController.value.emitter.on('change', (ev) => {\n                this.emitter_.emit('change', {\n                    event: new TpChangeEvent(this, ev.rawValue),\n                });\n            });\n        }\n        get label() {\n            return this.controller_.props.get('label');\n        }\n        set label(label) {\n            this.controller_.props.set('label', label);\n        }\n        get maxValue() {\n            return this.controller_.valueController.sliderController.props.get('maxValue');\n        }\n        set maxValue(maxValue) {\n            this.controller_.valueController.sliderController.props.set('maxValue', maxValue);\n        }\n        get minValue() {\n            return this.controller_.valueController.sliderController.props.get('minValue');\n        }\n        set minValue(minValue) {\n            this.controller_.valueController.sliderController.props.set('minValue', minValue);\n        }\n        get value() {\n            return this.controller_.valueController.value.rawValue;\n        }\n        set value(value) {\n            this.controller_.valueController.value.rawValue = value;\n        }\n        on(eventName, handler) {\n            const bh = handler.bind(this);\n            this.emitter_.on(eventName, (ev) => {\n                bh(ev.event);\n            });\n            return this;\n        }\n    }\n\n    class TextApi extends BladeApi {\n        constructor(controller) {\n            super(controller);\n            this.emitter_ = new Emitter();\n            this.controller_.valueController.value.emitter.on('change', (ev) => {\n                this.emitter_.emit('change', {\n                    event: new TpChangeEvent(this, ev.rawValue),\n                });\n            });\n        }\n        get label() {\n            return this.controller_.props.get('label');\n        }\n        set label(label) {\n            this.controller_.props.set('label', label);\n        }\n        get formatter() {\n            return this.controller_.valueController.props.get('formatter');\n        }\n        set formatter(formatter) {\n            this.controller_.valueController.props.set('formatter', formatter);\n        }\n        get value() {\n            return this.controller_.valueController.value.rawValue;\n        }\n        set value(value) {\n            this.controller_.valueController.value.rawValue = value;\n        }\n        on(eventName, handler) {\n            const bh = handler.bind(this);\n            this.emitter_.on(eventName, (ev) => {\n                bh(ev.event);\n            });\n            return this;\n        }\n    }\n\n    const ListBladePlugin = (function () {\n        return {\n            id: 'list',\n            type: 'blade',\n            accept(params) {\n                const p = ParamsParsers;\n                const result = parseParams(params, {\n                    options: p.required.custom(parseListOptions),\n                    value: p.required.raw,\n                    view: p.required.constant('list'),\n                    label: p.optional.string,\n                });\n                return result ? { params: result } : null;\n            },\n            controller(args) {\n                const lc = new ListConstraint(normalizeListOptions(args.params.options));\n                const value = createValue(args.params.value, {\n                    constraint: lc,\n                });\n                const ic = new ListController(args.document, {\n                    props: new ValueMap({\n                        options: lc.values.value('options'),\n                    }),\n                    value: value,\n                    viewProps: args.viewProps,\n                });\n                return new LabeledValueController(args.document, {\n                    blade: args.blade,\n                    props: ValueMap.fromObject({\n                        label: args.params.label,\n                    }),\n                    valueController: ic,\n                });\n            },\n            api(args) {\n                if (!(args.controller instanceof LabeledValueController)) {\n                    return null;\n                }\n                if (!(args.controller.valueController instanceof ListController)) {\n                    return null;\n                }\n                return new ListApi(args.controller);\n            },\n        };\n    })();\n\n    /**\n     * @hidden\n     */\n    function exportPresetJson(targets) {\n        return targets.reduce((result, target) => {\n            return Object.assign(result, {\n                [target.presetKey]: target.read(),\n            });\n        }, {});\n    }\n    /**\n     * @hidden\n     */\n    function importPresetJson(bindings, preset) {\n        bindings.forEach((binding) => {\n            const value = preset[binding.target.presetKey];\n            if (value !== undefined) {\n                binding.writer(binding.target, binding.reader(value));\n            }\n        });\n    }\n\n    class RootApi extends FolderApi {\n        /**\n         * @hidden\n         */\n        constructor(controller, pool) {\n            super(controller, pool);\n        }\n        get element() {\n            return this.controller_.view.element;\n        }\n        /**\n         * Imports a preset of all inputs.\n         * @param preset The preset object to import.\n         */\n        importPreset(preset) {\n            const bindings = this.controller_.rackController.rack\n                .find(InputBindingController)\n                .map((ibc) => {\n                return ibc.binding;\n            });\n            importPresetJson(bindings, preset);\n            this.refresh();\n        }\n        /**\n         * Exports a preset of all inputs.\n         * @return An exported preset object.\n         */\n        exportPreset() {\n            const targets = this.controller_.rackController.rack\n                .find(InputBindingController)\n                .map((ibc) => {\n                return ibc.binding.target;\n            });\n            return exportPresetJson(targets);\n        }\n        /**\n         * Refreshes all bindings of the pane.\n         */\n        refresh() {\n            // Force-read all input bindings\n            this.controller_.rackController.rack\n                .find(InputBindingController)\n                .forEach((ibc) => {\n                ibc.binding.read();\n            });\n            // Force-read all monitor bindings\n            this.controller_.rackController.rack\n                .find(MonitorBindingController)\n                .forEach((mbc) => {\n                mbc.binding.read();\n            });\n        }\n    }\n\n    class RootController extends FolderController {\n        constructor(doc, config) {\n            super(doc, {\n                expanded: config.expanded,\n                blade: config.blade,\n                props: config.props,\n                root: true,\n                viewProps: config.viewProps,\n            });\n        }\n    }\n\n    const SliderBladePlugin = {\n        id: 'slider',\n        type: 'blade',\n        accept(params) {\n            const p = ParamsParsers;\n            const result = parseParams(params, {\n                max: p.required.number,\n                min: p.required.number,\n                view: p.required.constant('slider'),\n                format: p.optional.function,\n                label: p.optional.string,\n                value: p.optional.number,\n            });\n            return result ? { params: result } : null;\n        },\n        controller(args) {\n            var _a, _b;\n            const initialValue = (_a = args.params.value) !== null && _a !== void 0 ? _a : 0;\n            const drc = new DefiniteRangeConstraint({\n                max: args.params.max,\n                min: args.params.min,\n            });\n            const vc = new SliderTextController(args.document, {\n                baseStep: 1,\n                parser: parseNumber,\n                sliderProps: new ValueMap({\n                    maxValue: drc.values.value('max'),\n                    minValue: drc.values.value('min'),\n                }),\n                textProps: ValueMap.fromObject({\n                    draggingScale: getSuitableDraggingScale(undefined, initialValue),\n                    formatter: (_b = args.params.format) !== null && _b !== void 0 ? _b : numberToString,\n                }),\n                value: createValue(initialValue, {\n                    constraint: drc,\n                }),\n                viewProps: args.viewProps,\n            });\n            return new LabeledValueController(args.document, {\n                blade: args.blade,\n                props: ValueMap.fromObject({\n                    label: args.params.label,\n                }),\n                valueController: vc,\n            });\n        },\n        api(args) {\n            if (!(args.controller instanceof LabeledValueController)) {\n                return null;\n            }\n            if (!(args.controller.valueController instanceof SliderTextController)) {\n                return null;\n            }\n            return new SliderApi(args.controller);\n        },\n    };\n\n    const TextBladePlugin = (function () {\n        return {\n            id: 'text',\n            type: 'blade',\n            accept(params) {\n                const p = ParamsParsers;\n                const result = parseParams(params, {\n                    parse: p.required.function,\n                    value: p.required.raw,\n                    view: p.required.constant('text'),\n                    format: p.optional.function,\n                    label: p.optional.string,\n                });\n                return result ? { params: result } : null;\n            },\n            controller(args) {\n                var _a;\n                const ic = new TextController(args.document, {\n                    parser: args.params.parse,\n                    props: ValueMap.fromObject({\n                        formatter: (_a = args.params.format) !== null && _a !== void 0 ? _a : ((v) => String(v)),\n                    }),\n                    value: createValue(args.params.value),\n                    viewProps: args.viewProps,\n                });\n                return new LabeledValueController(args.document, {\n                    blade: args.blade,\n                    props: ValueMap.fromObject({\n                        label: args.params.label,\n                    }),\n                    valueController: ic,\n                });\n            },\n            api(args) {\n                if (!(args.controller instanceof LabeledValueController)) {\n                    return null;\n                }\n                if (!(args.controller.valueController instanceof TextController)) {\n                    return null;\n                }\n                return new TextApi(args.controller);\n            },\n        };\n    })();\n\n    function createDefaultWrapperElement(doc) {\n        const elem = doc.createElement('div');\n        elem.classList.add(ClassName('dfw')());\n        if (doc.body) {\n            doc.body.appendChild(elem);\n        }\n        return elem;\n    }\n    function embedStyle(doc, id, css) {\n        if (doc.querySelector(`style[data-tp-style=${id}]`)) {\n            return;\n        }\n        const styleElem = doc.createElement('style');\n        styleElem.dataset.tpStyle = id;\n        styleElem.textContent = css;\n        doc.head.appendChild(styleElem);\n    }\n    /**\n     * The root pane of Tweakpane.\n     */\n    class Pane extends RootApi {\n        constructor(opt_config) {\n            var _a, _b;\n            const config = opt_config !== null && opt_config !== void 0 ? opt_config : {};\n            const doc = (_a = config.document) !== null && _a !== void 0 ? _a : getWindowDocument();\n            const pool = createDefaultPluginPool();\n            const rootController = new RootController(doc, {\n                expanded: config.expanded,\n                blade: createBlade(),\n                props: ValueMap.fromObject({\n                    title: config.title,\n                }),\n                viewProps: ViewProps.create(),\n            });\n            super(rootController, pool);\n            this.pool_ = pool;\n            this.containerElem_ = (_b = config.container) !== null && _b !== void 0 ? _b : createDefaultWrapperElement(doc);\n            this.containerElem_.appendChild(this.element);\n            this.doc_ = doc;\n            this.usesDefaultWrapper_ = !config.container;\n            this.setUpDefaultPlugins_();\n        }\n        get document() {\n            if (!this.doc_) {\n                throw TpError.alreadyDisposed();\n            }\n            return this.doc_;\n        }\n        dispose() {\n            const containerElem = this.containerElem_;\n            if (!containerElem) {\n                throw TpError.alreadyDisposed();\n            }\n            if (this.usesDefaultWrapper_) {\n                const parentElem = containerElem.parentElement;\n                if (parentElem) {\n                    parentElem.removeChild(containerElem);\n                }\n            }\n            this.containerElem_ = null;\n            this.doc_ = null;\n            super.dispose();\n        }\n        registerPlugin(bundle) {\n            const plugins = 'plugin' in bundle\n                ? [bundle.plugin]\n                : 'plugins' in bundle\n                    ? bundle.plugins\n                    : [];\n            plugins.forEach((p) => {\n                this.pool_.register(p);\n                this.embedPluginStyle_(p);\n            });\n        }\n        embedPluginStyle_(plugin) {\n            if (plugin.css) {\n                embedStyle(this.document, `plugin-${plugin.id}`, plugin.css);\n            }\n        }\n        setUpDefaultPlugins_() {\n            // NOTE: This string literal will be replaced with the default CSS by Rollup at the compilation time\n            embedStyle(this.document, 'default', '.tp-tbiv_b,.tp-coltxtv_ms,.tp-ckbv_i,.tp-rotv_b,.tp-fldv_b,.tp-mllv_i,.tp-sglv_i,.tp-grlv_g,.tp-txtv_i,.tp-p2dpv_p,.tp-colswv_sw,.tp-p2dv_b,.tp-btnv_b,.tp-lstv_s{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0}.tp-p2dv_b,.tp-btnv_b,.tp-lstv_s{background-color:var(--btn-bg);border-radius:var(--elm-br);color:var(--btn-fg);cursor:pointer;display:block;font-weight:bold;height:var(--bld-us);line-height:var(--bld-us);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tp-p2dv_b:hover,.tp-btnv_b:hover,.tp-lstv_s:hover{background-color:var(--btn-bg-h)}.tp-p2dv_b:focus,.tp-btnv_b:focus,.tp-lstv_s:focus{background-color:var(--btn-bg-f)}.tp-p2dv_b:active,.tp-btnv_b:active,.tp-lstv_s:active{background-color:var(--btn-bg-a)}.tp-p2dv_b:disabled,.tp-btnv_b:disabled,.tp-lstv_s:disabled{opacity:.5}.tp-txtv_i,.tp-p2dpv_p,.tp-colswv_sw{background-color:var(--in-bg);border-radius:var(--elm-br);box-sizing:border-box;color:var(--in-fg);font-family:inherit;height:var(--bld-us);line-height:var(--bld-us);min-width:0;width:100%}.tp-txtv_i:hover,.tp-p2dpv_p:hover,.tp-colswv_sw:hover{background-color:var(--in-bg-h)}.tp-txtv_i:focus,.tp-p2dpv_p:focus,.tp-colswv_sw:focus{background-color:var(--in-bg-f)}.tp-txtv_i:active,.tp-p2dpv_p:active,.tp-colswv_sw:active{background-color:var(--in-bg-a)}.tp-txtv_i:disabled,.tp-p2dpv_p:disabled,.tp-colswv_sw:disabled{opacity:.5}.tp-mllv_i,.tp-sglv_i,.tp-grlv_g{background-color:var(--mo-bg);border-radius:var(--elm-br);box-sizing:border-box;color:var(--mo-fg);height:var(--bld-us);scrollbar-color:currentColor rgba(0,0,0,0);scrollbar-width:thin;width:100%}.tp-mllv_i::-webkit-scrollbar,.tp-sglv_i::-webkit-scrollbar,.tp-grlv_g::-webkit-scrollbar{height:8px;width:8px}.tp-mllv_i::-webkit-scrollbar-corner,.tp-sglv_i::-webkit-scrollbar-corner,.tp-grlv_g::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.tp-mllv_i::-webkit-scrollbar-thumb,.tp-sglv_i::-webkit-scrollbar-thumb,.tp-grlv_g::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:currentColor;border:rgba(0,0,0,0) solid 2px;border-radius:4px}.tp-rotv{--font-family: var(--tp-font-family, Roboto Mono, Source Code Pro, Menlo, Courier, monospace);--bs-br: var(--tp-base-border-radius, 6px);--cnt-h-p: var(--tp-container-horizontal-padding, 4px);--cnt-v-p: var(--tp-container-vertical-padding, 4px);--elm-br: var(--tp-element-border-radius, 2px);--bld-s: var(--tp-blade-spacing, 4px);--bld-us: var(--tp-blade-unit-size, 20px);--bs-bg: var(--tp-base-background-color, hsl(230, 7%, 17%));--bs-sh: var(--tp-base-shadow-color, rgba(0, 0, 0, 0.2));--btn-bg: var(--tp-button-background-color, hsl(230, 7%, 70%));--btn-bg-a: var(--tp-button-background-color-active, #d6d7db);--btn-bg-f: var(--tp-button-background-color-focus, #c8cad0);--btn-bg-h: var(--tp-button-background-color-hover, #bbbcc4);--btn-fg: var(--tp-button-foreground-color, hsl(230, 7%, 17%));--cnt-bg: var(--tp-container-background-color, rgba(187, 188, 196, 0.1));--cnt-bg-a: var(--tp-container-background-color-active, rgba(187, 188, 196, 0.25));--cnt-bg-f: var(--tp-container-background-color-focus, rgba(187, 188, 196, 0.2));--cnt-bg-h: var(--tp-container-background-color-hover, rgba(187, 188, 196, 0.15));--cnt-fg: var(--tp-container-foreground-color, hsl(230, 7%, 75%));--in-bg: var(--tp-input-background-color, rgba(187, 188, 196, 0.1));--in-bg-a: var(--tp-input-background-color-active, rgba(187, 188, 196, 0.25));--in-bg-f: var(--tp-input-background-color-focus, rgba(187, 188, 196, 0.2));--in-bg-h: var(--tp-input-background-color-hover, rgba(187, 188, 196, 0.15));--in-fg: var(--tp-input-foreground-color, hsl(230, 7%, 75%));--lbl-fg: var(--tp-label-foreground-color, rgba(187, 188, 196, 0.7));--mo-bg: var(--tp-monitor-background-color, rgba(0, 0, 0, 0.2));--mo-fg: var(--tp-monitor-foreground-color, rgba(187, 188, 196, 0.7));--grv-fg: var(--tp-groove-foreground-color, rgba(187, 188, 196, 0.1))}.tp-rotv_c>.tp-cntv.tp-v-lst,.tp-tabv_c .tp-brkv>.tp-cntv.tp-v-lst,.tp-fldv_c>.tp-cntv.tp-v-lst{margin-bottom:calc(-1*var(--cnt-v-p))}.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-tabv_c .tp-brkv>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_c{border-bottom-left-radius:0}.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-tabv_c .tp-brkv>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_b{border-bottom-left-radius:0}.tp-rotv_c>*:not(.tp-v-fst),.tp-tabv_c .tp-brkv>*:not(.tp-v-fst),.tp-fldv_c>*:not(.tp-v-fst){margin-top:var(--bld-s)}.tp-rotv_c>.tp-sprv:not(.tp-v-fst),.tp-tabv_c .tp-brkv>.tp-sprv:not(.tp-v-fst),.tp-fldv_c>.tp-sprv:not(.tp-v-fst),.tp-rotv_c>.tp-cntv:not(.tp-v-fst),.tp-tabv_c .tp-brkv>.tp-cntv:not(.tp-v-fst),.tp-fldv_c>.tp-cntv:not(.tp-v-fst){margin-top:var(--cnt-v-p)}.tp-rotv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-tabv_c .tp-brkv>.tp-sprv+*:not(.tp-v-hidden),.tp-fldv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-rotv_c>.tp-cntv+*:not(.tp-v-hidden),.tp-tabv_c .tp-brkv>.tp-cntv+*:not(.tp-v-hidden),.tp-fldv_c>.tp-cntv+*:not(.tp-v-hidden){margin-top:var(--cnt-v-p)}.tp-rotv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-tabv_c .tp-brkv>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-fldv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-rotv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-tabv_c .tp-brkv>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-fldv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv{margin-top:0}.tp-tabv_c .tp-brkv>.tp-cntv,.tp-fldv_c>.tp-cntv{margin-left:4px}.tp-tabv_c .tp-brkv>.tp-fldv>.tp-fldv_b,.tp-fldv_c>.tp-fldv>.tp-fldv_b{border-top-left-radius:var(--elm-br);border-bottom-left-radius:var(--elm-br)}.tp-tabv_c .tp-brkv>.tp-fldv.tp-fldv-expanded>.tp-fldv_b,.tp-fldv_c>.tp-fldv.tp-fldv-expanded>.tp-fldv_b{border-bottom-left-radius:0}.tp-tabv_c .tp-brkv .tp-fldv>.tp-fldv_c,.tp-fldv_c .tp-fldv>.tp-fldv_c{border-bottom-left-radius:var(--elm-br)}.tp-tabv_c .tp-brkv>.tp-cntv+.tp-fldv>.tp-fldv_b,.tp-fldv_c>.tp-cntv+.tp-fldv>.tp-fldv_b{border-top-left-radius:0}.tp-tabv_c .tp-brkv>.tp-cntv+.tp-tabv>.tp-tabv_t,.tp-fldv_c>.tp-cntv+.tp-tabv>.tp-tabv_t{border-top-left-radius:0}.tp-tabv_c .tp-brkv>.tp-tabv>.tp-tabv_t,.tp-fldv_c>.tp-tabv>.tp-tabv_t{border-top-left-radius:var(--elm-br)}.tp-tabv_c .tp-brkv .tp-tabv>.tp-tabv_c,.tp-fldv_c .tp-tabv>.tp-tabv_c{border-bottom-left-radius:var(--elm-br)}.tp-rotv_b,.tp-fldv_b{background-color:var(--cnt-bg);color:var(--cnt-fg);cursor:pointer;display:block;height:calc(var(--bld-us) + 4px);line-height:calc(var(--bld-us) + 4px);overflow:hidden;padding-left:var(--cnt-h-p);padding-right:calc(4px + var(--bld-us) + var(--cnt-h-p));position:relative;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%;transition:border-radius .2s ease-in-out .2s}.tp-rotv_b:hover,.tp-fldv_b:hover{background-color:var(--cnt-bg-h)}.tp-rotv_b:focus,.tp-fldv_b:focus{background-color:var(--cnt-bg-f)}.tp-rotv_b:active,.tp-fldv_b:active{background-color:var(--cnt-bg-a)}.tp-rotv_b:disabled,.tp-fldv_b:disabled{opacity:.5}.tp-rotv_m,.tp-fldv_m{background:linear-gradient(to left, var(--cnt-fg), var(--cnt-fg) 2px, transparent 2px, transparent 4px, var(--cnt-fg) 4px);border-radius:2px;bottom:0;content:\"\";display:block;height:6px;right:calc(var(--cnt-h-p) + (var(--bld-us) + 4px - 6px)/2 - 2px);margin:auto;opacity:.5;position:absolute;top:0;transform:rotate(90deg);transition:transform .2s ease-in-out;width:6px}.tp-rotv.tp-rotv-expanded .tp-rotv_m,.tp-fldv.tp-fldv-expanded>.tp-fldv_b>.tp-fldv_m{transform:none}.tp-rotv_c,.tp-fldv_c{box-sizing:border-box;height:0;opacity:0;overflow:hidden;padding-bottom:0;padding-top:0;position:relative;transition:height .2s ease-in-out,opacity .2s linear,padding .2s ease-in-out}.tp-rotv.tp-rotv-cpl:not(.tp-rotv-expanded) .tp-rotv_c,.tp-fldv.tp-fldv-cpl:not(.tp-fldv-expanded)>.tp-fldv_c{display:none}.tp-rotv.tp-rotv-expanded .tp-rotv_c,.tp-fldv.tp-fldv-expanded>.tp-fldv_c{opacity:1;padding-bottom:var(--cnt-v-p);padding-top:var(--cnt-v-p);transform:none;overflow:visible;transition:height .2s ease-in-out,opacity .2s linear .2s,padding .2s ease-in-out}.tp-lstv,.tp-coltxtv_m{position:relative}.tp-lstv_s{padding:0 20px 0 4px;width:100%}.tp-lstv_m,.tp-coltxtv_mm{bottom:0;margin:auto;pointer-events:none;position:absolute;right:2px;top:0}.tp-lstv_m svg,.tp-coltxtv_mm svg{bottom:0;height:16px;margin:auto;position:absolute;right:0;top:0;width:16px}.tp-lstv_m svg path,.tp-coltxtv_mm svg path{fill:currentColor}.tp-pndtxtv,.tp-coltxtv_w{display:flex}.tp-pndtxtv_a,.tp-coltxtv_c{width:100%}.tp-pndtxtv_a+.tp-pndtxtv_a,.tp-coltxtv_c+.tp-pndtxtv_a,.tp-pndtxtv_a+.tp-coltxtv_c,.tp-coltxtv_c+.tp-coltxtv_c{margin-left:2px}.tp-btnv_b{width:100%}.tp-btnv_t{text-align:center}.tp-ckbv_l{display:block;position:relative}.tp-ckbv_i{left:0;opacity:0;position:absolute;top:0}.tp-ckbv_w{background-color:var(--in-bg);border-radius:var(--elm-br);cursor:pointer;display:block;height:var(--bld-us);position:relative;width:var(--bld-us)}.tp-ckbv_w svg{bottom:0;display:block;height:16px;left:0;margin:auto;opacity:0;position:absolute;right:0;top:0;width:16px}.tp-ckbv_w svg path{fill:none;stroke:var(--in-fg);stroke-width:2}.tp-ckbv_i:hover+.tp-ckbv_w{background-color:var(--in-bg-h)}.tp-ckbv_i:focus+.tp-ckbv_w{background-color:var(--in-bg-f)}.tp-ckbv_i:active+.tp-ckbv_w{background-color:var(--in-bg-a)}.tp-ckbv_i:checked+.tp-ckbv_w svg{opacity:1}.tp-ckbv.tp-v-disabled .tp-ckbv_w{opacity:.5}.tp-colv{position:relative}.tp-colv_h{display:flex}.tp-colv_s{flex-grow:0;flex-shrink:0;width:var(--bld-us)}.tp-colv_t{flex:1;margin-left:4px}.tp-colv_p{height:0;margin-top:0;opacity:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s linear,margin .2s ease-in-out}.tp-colv.tp-colv-expanded.tp-colv-cpl .tp-colv_p{overflow:visible}.tp-colv.tp-colv-expanded .tp-colv_p{margin-top:var(--bld-s);opacity:1}.tp-colv .tp-popv{left:calc(-1*var(--cnt-h-p));right:calc(-1*var(--cnt-h-p));top:var(--bld-us)}.tp-colpv_h,.tp-colpv_ap{margin-left:6px;margin-right:6px}.tp-colpv_h{margin-top:var(--bld-s)}.tp-colpv_rgb{display:flex;margin-top:var(--bld-s);width:100%}.tp-colpv_a{display:flex;margin-top:var(--cnt-v-p);padding-top:calc(var(--cnt-v-p) + 2px);position:relative}.tp-colpv_a::before{background-color:var(--grv-fg);content:\"\";height:2px;left:calc(-1*var(--cnt-h-p));position:absolute;right:calc(-1*var(--cnt-h-p));top:0}.tp-colpv.tp-v-disabled .tp-colpv_a::before{opacity:.5}.tp-colpv_ap{align-items:center;display:flex;flex:3}.tp-colpv_at{flex:1;margin-left:4px}.tp-svpv{border-radius:var(--elm-br);outline:none;overflow:hidden;position:relative}.tp-svpv.tp-v-disabled{opacity:.5}.tp-svpv_c{cursor:crosshair;display:block;height:calc(var(--bld-us)*4);width:100%}.tp-svpv_m{border-radius:100%;border:rgba(255,255,255,.75) solid 2px;box-sizing:border-box;filter:drop-shadow(0 0 1px rgba(0, 0, 0, 0.3));height:12px;margin-left:-6px;margin-top:-6px;pointer-events:none;position:absolute;width:12px}.tp-svpv:focus .tp-svpv_m{border-color:#fff}.tp-hplv{cursor:pointer;height:var(--bld-us);outline:none;position:relative}.tp-hplv.tp-v-disabled{opacity:.5}.tp-hplv_c{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAABCAYAAABubagXAAAAQ0lEQVQoU2P8z8Dwn0GCgQEDi2OK/RBgYHjBgIpfovFh8j8YBIgzFGQxuqEgPhaDOT5gOhPkdCxOZeBg+IDFZZiGAgCaSSMYtcRHLgAAAABJRU5ErkJggg==);background-position:left top;background-repeat:no-repeat;background-size:100% 100%;border-radius:2px;display:block;height:4px;left:0;margin-top:-2px;position:absolute;top:50%;width:100%}.tp-hplv_m{border-radius:var(--elm-br);border:rgba(255,255,255,.75) solid 2px;box-shadow:0 0 2px rgba(0,0,0,.1);box-sizing:border-box;height:12px;left:50%;margin-left:-6px;margin-top:-6px;pointer-events:none;position:absolute;top:50%;width:12px}.tp-hplv:focus .tp-hplv_m{border-color:#fff}.tp-aplv{cursor:pointer;height:var(--bld-us);outline:none;position:relative;width:100%}.tp-aplv.tp-v-disabled{opacity:.5}.tp-aplv_b{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:4px 4px;background-position:0 0,2px 2px;border-radius:2px;display:block;height:4px;left:0;margin-top:-2px;overflow:hidden;position:absolute;top:50%;width:100%}.tp-aplv_c{bottom:0;left:0;position:absolute;right:0;top:0}.tp-aplv_m{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:12px 12px;background-position:0 0,6px 6px;border-radius:var(--elm-br);box-shadow:0 0 2px rgba(0,0,0,.1);height:12px;left:50%;margin-left:-6px;margin-top:-6px;overflow:hidden;pointer-events:none;position:absolute;top:50%;width:12px}.tp-aplv_p{border-radius:var(--elm-br);border:rgba(255,255,255,.75) solid 2px;box-sizing:border-box;bottom:0;left:0;position:absolute;right:0;top:0}.tp-aplv:focus .tp-aplv_p{border-color:#fff}.tp-colswv{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:10px 10px;background-position:0 0,5px 5px;border-radius:var(--elm-br);overflow:hidden}.tp-colswv.tp-v-disabled{opacity:.5}.tp-colswv_sw{border-radius:0}.tp-colswv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border-width:0;cursor:pointer;display:block;height:var(--bld-us);left:0;margin:0;outline:none;padding:0;position:absolute;top:0;width:var(--bld-us)}.tp-colswv_b:focus::after{border:rgba(255,255,255,.75) solid 2px;border-radius:var(--elm-br);bottom:0;content:\"\";display:block;left:0;position:absolute;right:0;top:0}.tp-coltxtv{display:flex;width:100%}.tp-coltxtv_m{margin-right:4px}.tp-coltxtv_ms{border-radius:var(--elm-br);color:var(--lbl-fg);cursor:pointer;height:var(--bld-us);line-height:var(--bld-us);padding:0 18px 0 4px}.tp-coltxtv_ms:hover{background-color:var(--in-bg-h)}.tp-coltxtv_ms:focus{background-color:var(--in-bg-f)}.tp-coltxtv_ms:active{background-color:var(--in-bg-a)}.tp-coltxtv_mm{color:var(--lbl-fg)}.tp-coltxtv.tp-v-disabled .tp-coltxtv_mm{opacity:.5}.tp-coltxtv_w{flex:1}.tp-dfwv{position:absolute;top:8px;right:8px;width:256px}.tp-fldv{position:relative}.tp-fldv.tp-fldv-not .tp-fldv_b{display:none}.tp-fldv_t{padding-left:4px}.tp-fldv_b:disabled .tp-fldv_m{display:none}.tp-fldv_c{padding-left:4px}.tp-fldv_i{bottom:0;color:var(--cnt-bg);left:0;overflow:hidden;position:absolute;top:calc(var(--bld-us) + 4px);width:var(--bs-br)}.tp-fldv_i::before{background-color:currentColor;bottom:0;content:\"\";left:0;position:absolute;top:0;width:4px}.tp-fldv_b:hover+.tp-fldv_i{color:var(--cnt-bg-h)}.tp-fldv_b:focus+.tp-fldv_i{color:var(--cnt-bg-f)}.tp-fldv_b:active+.tp-fldv_i{color:var(--cnt-bg-a)}.tp-fldv.tp-v-disabled>.tp-fldv_i{opacity:.5}.tp-grlv{position:relative}.tp-grlv_g{display:block;height:calc(var(--bld-us)*3)}.tp-grlv_g polyline{fill:none;stroke:var(--mo-fg);stroke-linejoin:round}.tp-grlv_t{margin-top:-4px;transition:left .05s,top .05s;visibility:hidden}.tp-grlv_t.tp-grlv_t-a{visibility:visible}.tp-grlv_t.tp-grlv_t-in{transition:none}.tp-grlv.tp-v-disabled .tp-grlv_g{opacity:.5}.tp-grlv .tp-ttv{background-color:var(--mo-fg)}.tp-grlv .tp-ttv::before{border-top-color:var(--mo-fg)}.tp-lblv{align-items:center;display:flex;line-height:1.3;padding-left:var(--cnt-h-p);padding-right:var(--cnt-h-p)}.tp-lblv.tp-lblv-nol{display:block}.tp-lblv_l{color:var(--lbl-fg);flex:1;-webkit-hyphens:auto;hyphens:auto;overflow:hidden;padding-left:4px;padding-right:16px}.tp-lblv.tp-v-disabled .tp-lblv_l{opacity:.5}.tp-lblv.tp-lblv-nol .tp-lblv_l{display:none}.tp-lblv_v{align-self:flex-start;flex-grow:0;flex-shrink:0;width:160px}.tp-lblv.tp-lblv-nol .tp-lblv_v{width:100%}.tp-lstv_s{padding:0 20px 0 4px;width:100%}.tp-lstv_m{color:var(--btn-fg)}.tp-sglv_i{padding:0 4px}.tp-sglv.tp-v-disabled .tp-sglv_i{opacity:.5}.tp-mllv_i{display:block;height:calc(var(--bld-us)*3);line-height:var(--bld-us);padding:0 4px;resize:none;white-space:pre}.tp-mllv.tp-v-disabled .tp-mllv_i{opacity:.5}.tp-p2dv{position:relative}.tp-p2dv_h{display:flex}.tp-p2dv_b{height:var(--bld-us);margin-right:4px;position:relative;width:var(--bld-us)}.tp-p2dv_b svg{display:block;height:16px;left:50%;margin-left:-8px;margin-top:-8px;position:absolute;top:50%;width:16px}.tp-p2dv_b svg path{stroke:currentColor;stroke-width:2}.tp-p2dv_b svg circle{fill:currentColor}.tp-p2dv_t{flex:1}.tp-p2dv_p{height:0;margin-top:0;opacity:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s linear,margin .2s ease-in-out}.tp-p2dv.tp-p2dv-expanded .tp-p2dv_p{margin-top:var(--bld-s);opacity:1}.tp-p2dv .tp-popv{left:calc(-1*var(--cnt-h-p));right:calc(-1*var(--cnt-h-p));top:var(--bld-us)}.tp-p2dpv{padding-left:calc(var(--bld-us) + 4px)}.tp-p2dpv_p{cursor:crosshair;height:0;overflow:hidden;padding-bottom:100%;position:relative}.tp-p2dpv.tp-v-disabled .tp-p2dpv_p{opacity:.5}.tp-p2dpv_g{display:block;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.tp-p2dpv_ax{opacity:.1;stroke:var(--in-fg);stroke-dasharray:1}.tp-p2dpv_l{opacity:.5;stroke:var(--in-fg);stroke-dasharray:1}.tp-p2dpv_m{border:var(--in-fg) solid 1px;border-radius:50%;box-sizing:border-box;height:4px;margin-left:-2px;margin-top:-2px;position:absolute;width:4px}.tp-p2dpv_p:focus .tp-p2dpv_m{background-color:var(--in-fg);border-width:0}.tp-popv{background-color:var(--bs-bg);border-radius:6px;box-shadow:0 2px 4px var(--bs-sh);display:none;max-width:168px;padding:var(--cnt-v-p) var(--cnt-h-p);position:absolute;visibility:hidden;z-index:1000}.tp-popv.tp-popv-v{display:block;visibility:visible}.tp-sprv_r{background-color:var(--grv-fg);border-width:0;display:block;height:2px;margin:0;width:100%}.tp-sprv.tp-v-disabled .tp-sprv_r{opacity:.5}.tp-sldv.tp-v-disabled{opacity:.5}.tp-sldv_t{box-sizing:border-box;cursor:pointer;height:var(--bld-us);margin:0 6px;outline:none;position:relative}.tp-sldv_t::before{background-color:var(--in-bg);border-radius:1px;bottom:0;content:\"\";display:block;height:2px;left:0;margin:auto;position:absolute;right:0;top:0}.tp-sldv_k{height:100%;left:0;position:absolute;top:0}.tp-sldv_k::before{background-color:var(--in-fg);border-radius:1px;bottom:0;content:\"\";display:block;height:2px;left:0;margin-bottom:auto;margin-top:auto;position:absolute;right:0;top:0}.tp-sldv_k::after{background-color:var(--btn-bg);border-radius:var(--elm-br);bottom:0;content:\"\";display:block;height:12px;margin-bottom:auto;margin-top:auto;position:absolute;right:-6px;top:0;width:12px}.tp-sldv_t:hover .tp-sldv_k::after{background-color:var(--btn-bg-h)}.tp-sldv_t:focus .tp-sldv_k::after{background-color:var(--btn-bg-f)}.tp-sldv_t:active .tp-sldv_k::after{background-color:var(--btn-bg-a)}.tp-sldtxtv{display:flex}.tp-sldtxtv_s{flex:2}.tp-sldtxtv_t{flex:1;margin-left:4px}.tp-tabv{position:relative}.tp-tabv_t{align-items:flex-end;color:var(--cnt-bg);display:flex;overflow:hidden;position:relative}.tp-tabv_t:hover{color:var(--cnt-bg-h)}.tp-tabv_t:has(*:focus){color:var(--cnt-bg-f)}.tp-tabv_t:has(*:active){color:var(--cnt-bg-a)}.tp-tabv_t::before{background-color:currentColor;bottom:0;content:\"\";height:2px;left:0;pointer-events:none;position:absolute;right:0}.tp-tabv.tp-v-disabled .tp-tabv_t::before{opacity:.5}.tp-tabv.tp-tabv-nop .tp-tabv_t{height:calc(var(--bld-us) + 4px);position:relative}.tp-tabv.tp-tabv-nop .tp-tabv_t::before{background-color:var(--cnt-bg);bottom:0;content:\"\";height:2px;left:0;position:absolute;right:0}.tp-tabv_c{padding-bottom:var(--cnt-v-p);padding-left:4px;padding-top:var(--cnt-v-p)}.tp-tabv_i{bottom:0;color:var(--cnt-bg);left:0;overflow:hidden;position:absolute;top:calc(var(--bld-us) + 4px);width:var(--bs-br)}.tp-tabv_i::before{background-color:currentColor;bottom:0;content:\"\";left:0;position:absolute;top:0;width:4px}.tp-tabv_t:hover+.tp-tabv_i{color:var(--cnt-bg-h)}.tp-tabv_t:has(*:focus)+.tp-tabv_i{color:var(--cnt-bg-f)}.tp-tabv_t:has(*:active)+.tp-tabv_i{color:var(--cnt-bg-a)}.tp-tabv.tp-v-disabled>.tp-tabv_i{opacity:.5}.tp-tbiv{flex:1;min-width:0;position:relative}.tp-tbiv+.tp-tbiv{margin-left:2px}.tp-tbiv+.tp-tbiv.tp-v-disabled::before{opacity:.5}.tp-tbiv_b{display:block;padding-left:calc(var(--cnt-h-p) + 4px);padding-right:calc(var(--cnt-h-p) + 4px);position:relative;width:100%}.tp-tbiv_b:disabled{opacity:.5}.tp-tbiv_b::before{background-color:var(--cnt-bg);bottom:2px;content:\"\";left:0;pointer-events:none;position:absolute;right:0;top:0}.tp-tbiv_b:hover::before{background-color:var(--cnt-bg-h)}.tp-tbiv_b:focus::before{background-color:var(--cnt-bg-f)}.tp-tbiv_b:active::before{background-color:var(--cnt-bg-a)}.tp-tbiv_t{color:var(--cnt-fg);height:calc(var(--bld-us) + 4px);line-height:calc(var(--bld-us) + 4px);opacity:.5;overflow:hidden;text-overflow:ellipsis}.tp-tbiv.tp-tbiv-sel .tp-tbiv_t{opacity:1}.tp-txtv{position:relative}.tp-txtv_i{padding:0 4px}.tp-txtv.tp-txtv-fst .tp-txtv_i{border-bottom-right-radius:0;border-top-right-radius:0}.tp-txtv.tp-txtv-mid .tp-txtv_i{border-radius:0}.tp-txtv.tp-txtv-lst .tp-txtv_i{border-bottom-left-radius:0;border-top-left-radius:0}.tp-txtv.tp-txtv-num .tp-txtv_i{text-align:right}.tp-txtv.tp-txtv-drg .tp-txtv_i{opacity:.3}.tp-txtv_k{cursor:pointer;height:100%;left:-3px;position:absolute;top:0;width:12px}.tp-txtv_k::before{background-color:var(--in-fg);border-radius:1px;bottom:0;content:\"\";height:calc(var(--bld-us) - 4px);left:50%;margin-bottom:auto;margin-left:-1px;margin-top:auto;opacity:.1;position:absolute;top:0;transition:border-radius .1s,height .1s,transform .1s,width .1s;width:2px}.tp-txtv_k:hover::before,.tp-txtv.tp-txtv-drg .tp-txtv_k::before{opacity:1}.tp-txtv.tp-txtv-drg .tp-txtv_k::before{border-radius:50%;height:4px;transform:translateX(-1px);width:4px}.tp-txtv_g{bottom:0;display:block;height:8px;left:50%;margin:auto;overflow:visible;pointer-events:none;position:absolute;top:0;visibility:hidden;width:100%}.tp-txtv.tp-txtv-drg .tp-txtv_g{visibility:visible}.tp-txtv_gb{fill:none;stroke:var(--in-fg);stroke-dasharray:1}.tp-txtv_gh{fill:none;stroke:var(--in-fg)}.tp-txtv .tp-ttv{margin-left:6px;visibility:hidden}.tp-txtv.tp-txtv-drg .tp-ttv{visibility:visible}.tp-ttv{background-color:var(--in-fg);border-radius:var(--elm-br);color:var(--bs-bg);padding:2px 4px;pointer-events:none;position:absolute;transform:translate(-50%, -100%)}.tp-ttv::before{border-color:var(--in-fg) rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);border-style:solid;border-width:2px;box-sizing:border-box;content:\"\";font-size:.9em;height:4px;left:50%;margin-left:-2px;position:absolute;top:100%;width:4px}.tp-rotv{background-color:var(--bs-bg);border-radius:var(--bs-br);box-shadow:0 2px 4px var(--bs-sh);font-family:var(--font-family);font-size:11px;font-weight:500;line-height:1;text-align:left}.tp-rotv_b{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br);border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br);padding-left:calc(4px + var(--bld-us) + var(--cnt-h-p));text-align:center}.tp-rotv.tp-rotv-expanded .tp-rotv_b{border-bottom-left-radius:0;border-bottom-right-radius:0}.tp-rotv.tp-rotv-not .tp-rotv_b{display:none}.tp-rotv_b:disabled .tp-rotv_m{display:none}.tp-rotv_c>.tp-fldv.tp-v-lst>.tp-fldv_c{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c>.tp-fldv.tp-v-lst>.tp-fldv_i{border-bottom-left-radius:var(--bs-br)}.tp-rotv_c>.tp-fldv.tp-v-lst:not(.tp-fldv-expanded)>.tp-fldv_b{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c .tp-fldv.tp-v-vlst:not(.tp-fldv-expanded)>.tp-fldv_b{border-bottom-right-radius:var(--bs-br)}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-fldv.tp-v-fst{margin-top:calc(-1*var(--cnt-v-p))}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-fldv.tp-v-fst>.tp-fldv_b{border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br)}.tp-rotv_c>.tp-tabv.tp-v-lst>.tp-tabv_c{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c>.tp-tabv.tp-v-lst>.tp-tabv_i{border-bottom-left-radius:var(--bs-br)}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-tabv.tp-v-fst{margin-top:calc(-1*var(--cnt-v-p))}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-tabv.tp-v-fst>.tp-tabv_t{border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br)}.tp-rotv.tp-v-disabled,.tp-rotv .tp-v-disabled{pointer-events:none}.tp-rotv.tp-v-hidden,.tp-rotv .tp-v-hidden{display:none}');\n            this.pool_.getAll().forEach((plugin) => {\n                this.embedPluginStyle_(plugin);\n            });\n            this.registerPlugin({\n                plugins: [\n                    SliderBladePlugin,\n                    ListBladePlugin,\n                    TabBladePlugin,\n                    TextBladePlugin,\n                ],\n            });\n        }\n    }\n\n    const VERSION = new Semver('3.1.10');\n\n    exports.BladeApi = BladeApi;\n    exports.ButtonApi = ButtonApi;\n    exports.FolderApi = FolderApi;\n    exports.InputBindingApi = InputBindingApi;\n    exports.ListApi = ListApi;\n    exports.MonitorBindingApi = MonitorBindingApi;\n    exports.Pane = Pane;\n    exports.SeparatorApi = SeparatorApi;\n    exports.SliderApi = SliderApi;\n    exports.TabApi = TabApi;\n    exports.TabPageApi = TabPageApi;\n    exports.TextApi = TextApi;\n    exports.TpChangeEvent = TpChangeEvent;\n    exports.VERSION = VERSION;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","/**\n * @license\n * uiconfig.js v0.1.1\n * Copyright 2022-2024 repalash <palash@shaders.app>\n * MIT License\n */\n\n/**\n * @license\n * ts-browser-helpers v0.16.0\n * Copyright 2022-2024 repalash <palash@shaders.app>\n * MIT License\n * See ./dependencies.txt for bundled third-party dependencies and licenses.\n */\nclass I {\n  constructor() {\n    this._eventListeners = {}, this.dispatchEvent = this.dispatchEvent.bind(this), this.addEventListener = this.addEventListener.bind(this), this.removeEventListener = this.removeEventListener.bind(this), this.hasEventListener = this.hasEventListener.bind(this);\n  }\n  addEventListener(e, t) {\n    const i = this._eventListeners;\n    i[e] === void 0 && (i[e] = []), i[e].includes(t) || i[e].push(t);\n  }\n  hasEventListener(e, t) {\n    const i = this._eventListeners;\n    return i[e] !== void 0 && i[e].includes(t);\n  }\n  removeEventListener(e, t) {\n    const r = this._eventListeners[e];\n    if (r !== void 0) {\n      const s = r.indexOf(t);\n      s !== -1 && r.splice(s, 1);\n    }\n  }\n  dispatchEvent(e) {\n    const i = this._eventListeners[e.type];\n    if (i !== void 0) {\n      e.target = this;\n      const r = i.slice(0);\n      for (let s = 0, o = r.length; s < o; s++) r[s].call(this, e);\n    }\n  }\n}\nasync function X(n) {\n  return new Promise((e) => setTimeout(e, Math.max(0, n)));\n}\nfunction g() {\n  return (typeof performance > \"u\" ? Date : performance).now();\n}\n/*!\n * Fork Of -\n * JavaScript Undo Manager 1.0.0\n * Simple JavaScript undo/redo command manager supporting transactions with no dependencies.\n *\n * Copyright: Alexey Grinko, 2017\n * Git repository: https://github.com/agrinko/js-undo-manager.git\n *\n * @license MIT - https://opensource.org/licenses/MIT\n *\n * Changes -\n * 1. Added presets commands\n * 2. Port to TypeScript\n * 3. Remove transactions\n */\nclass Q {\n  constructor(e) {\n    this.options = {\n      limit: 500,\n      // maximum commands stack size\n      debug: !1,\n      // whether to emit execution status in console\n      bindHotKeys: !1\n      // whether to bind \"undo\" and \"redo\" commands to \"Ctrl+Z\", \"Ctrl+Y\" & \"Ctrl+Shift+Z\" hot keys\n      // useTransactions: true   // whether to initialize transactions manager\n    }, this.enabled = !0, this.presets = {}, this._keyDown = (t) => {\n      if (!this.enabled) return;\n      const i = t.ctrlKey || t.metaKey;\n      t.code === \"KeyZ\" && i && !t.shiftKey ? this.undo() : (t.code === \"KeyZ\" && i && t.shiftKey || t.code === \"KeyY\" && t.ctrlKey) && this.redo();\n    }, Object.assign(this.options, e), this.limit = e.limit, this.options = e, this.reset(), e.bindHotKeys && this.bindHotKeys(), this.log(`Initialized with stack limit of ${this.limit} commands`);\n  }\n  /**\n   * Bind 'undo' and 'redo' actions to 'Ctrl/Cmd+Z', 'Ctrl+Y' & 'Ctrl/Cmd+Shift+Z' hot keys.\n   * It is a basic implementation for quick testing and should be replaced with custom event handlers\n   * for more flexible processing.\n   * @returns {JSUndoManager}\n   */\n  bindHotKeys() {\n    return this.log(\"Bound 'undo' and 'redo' actions to 'Ctrl/Cmd+Z', 'Ctrl+Y' & 'Ctrl/Cmd+Shift+Z' hot keys\"), (this.options.hotKeyRoot ?? document).addEventListener(\"keydown\", this._keyDown), this;\n  }\n  dispose() {\n    return (this.options.hotKeyRoot ?? document).removeEventListener(\"keydown\", this._keyDown), this.reset();\n  }\n  /**\n   * Remember executed command containing \"redo\" and \"undo\" functions\n   * @param {Object|Function} command - either an object with \"redo\" and \"undo\" functions\n   * @returns {JSUndoManager}\n   */\n  record(e) {\n    return this.enabled ? (this._record(e), this) : this;\n  }\n  replaceLast(e) {\n    const t = this.peek();\n    if (t)\n      return this.log(\"replace\", t, \"with\", e), this.stack[this.sp] = e, this;\n  }\n  /**\n   * Execute function and record it with its opposite \"undo\" function\n   * @param {Object|Function} command - either an object with \"redo\" and \"undo\" functions\n   * @param {Function} [undo] - \"undo\" function, used if the first argument is also a function\n   * @returns {JSUndoManager}\n   */\n  execute(e) {\n    if (!this.enabled) return;\n    let t = this._rc(e), i = t.redo;\n    return this.record.apply(this, t), this.log(\"Executing function...\"), i.apply(e), this;\n  }\n  _rc(e) {\n    if (e.type) {\n      const t = this.presets[e.type];\n      if (typeof t == \"function\")\n        return t(e);\n      throw console.error(e, t, this.presets), new Error(\"Predefined command not found\");\n    } else\n      return e;\n  }\n  _record(e) {\n    this.enabled && (this.log(\"Recording command\", e), this._rebase(), this.stack.push(e), this.sp++, this._keepLimit());\n  }\n  //forget \"future\" commands if stack pointer is not at the end\n  _rebase() {\n    this.canRedo() && (this.stack.length = this.sp + 1);\n  }\n  //sustain limited size of stack; cut extra commands starting with the latest ones\n  _keepLimit() {\n    if (this.stack.length <= this.limit)\n      return;\n    let e = this.stack.length - this.limit;\n    this.log(\"Stack size reached its limit: ${this.limit} commands. Cutting off most old commands...\"), e === 1 ? this.stack.shift() : this.stack.splice(0, e), this.sp -= e;\n  }\n  /**\n   * Undo previous command if possible\n   * @returns {JSUndoManager}\n   */\n  undo() {\n    if (!this.canUndo())\n      return this;\n    let e = this.stack[this.sp];\n    return this.log(\"undo\"), this.sp--, this._rc(e).undo(), this;\n  }\n  /**\n   * Check whether undoing previous command is possible\n   * @returns {boolean}\n   */\n  canUndo() {\n    return this.sp >= 0 && this.enabled;\n  }\n  /**\n   * Get the last command that was done\n   */\n  peek() {\n    return this.canUndo() ? this.stack[this.sp] : null;\n  }\n  /**\n   * Redo the command which was previously undone\n   * @returns {JSUndoManager}\n   */\n  redo() {\n    if (!this.canRedo())\n      return this;\n    let e = this.stack[this.sp + 1];\n    return this.log(\"redo\"), this.sp++, this._rc(e).redo(), this;\n  }\n  /**\n   * Check whether redoing command is possible\n   * @returns {boolean}\n   */\n  canRedo() {\n    return this.sp < this.stack.length - 1 && this.enabled;\n  }\n  /**\n   * Gets the last command that was undone\n   */\n  peekForward() {\n    return this.canRedo() ? this.stack[this.sp + 1] : null;\n  }\n  /**\n   * Change stack size limit initially defined in the constructor options\n   * @param {number} limit\n   */\n  setLimit(e) {\n    let t = this.stack.length - this.sp - 1;\n    if (e < 1 || typeof e != \"number\")\n      throw new TypeError(`JSUndoManager.setLimit(): unexpected argument limit=${e}. Should be a positive number`);\n    return e < t ? console.warn(`JSUndoManager.setLimit(): cannot set stack limit (${e}) less than the number of 'redoable' commands (${t})`) : (this.limit = Math.floor(e), this._keepLimit()), this;\n  }\n  /**\n   * Reset all commands from memory\n   */\n  reset() {\n    return this.log(\"reset\"), this.stack = [], this.sp = -1, this;\n  }\n  /**\n   * Check whether the commands stack is empty\n   * @returns {boolean}\n   */\n  isEmpty() {\n    return !this.stack.length;\n  }\n  /**\n   * Check whether the commands stack size reaches its limit\n   * @returns {boolean}\n   */\n  isFull() {\n    return this.stack.length === this.limit;\n  }\n  /**\n   * Get number of commands in memory stack\n   * @returns {Number}\n   */\n  getSize() {\n    return this.stack.length;\n  }\n  log(e, ...t) {\n    this.options.debug && console.log(`Command Manager: ${e}`, ...t);\n  }\n}\nfunction ee({ innerHTML: n = \"\", id: e, classList: t, addToBody: i = !0, elementTag: r = \"div\" }) {\n  const s = document.createElement(r);\n  return e && (s.id = e), s.innerHTML = n, t && s.classList.add(...t), i && document.body.appendChild(s), s;\n}\nfunction H(n, e) {\n  let t;\n  do\n    t = Object.getOwnPropertyDescriptor(n, e);\n  while (!t && (n = Object.getPrototypeOf(n)));\n  return t;\n}\nfunction W(n, e, t = !0, i = !1) {\n  const r = H(n, e);\n  return !!(r != null && r.set) || t && (r == null ? void 0 : r.writable) !== !1 && (r == null ? void 0 : r.get) === void 0 || i && !r;\n}\nfunction S(n, e, t, i = !0, r = !1) {\n  return n && W(n, e, i, r) ? (n[e] = t, !0) : !1;\n}\nfunction Ee(n, ...e) {\n  return typeof n == \"function\" && (n = n(...e)), n;\n}\nfunction it() {\n  const n = (i, r) => i.toString(16).padStart(r, \"0\"), e = crypto.getRandomValues(new Uint8Array(16));\n  e[6] = e[6] & 15 | 64, e[8] = e[8] & 63 | 128;\n  const t = new DataView(e.buffer);\n  return `${n(t.getUint32(0), 8)}-${n(t.getUint16(4), 4)}-${n(t.getUint16(6), 4)}-${n(t.getUint16(8), 4)}-${n(t.getUint32(10), 8)}${n(t.getUint16(14), 4)}`;\n}\nfunction rt(n, e = null) {\n  return new URL(window.location.href).searchParams.get(n) ?? e;\n}\n\nclass UiConfigTypeMap {\n}\nUiConfigTypeMap.Map = new Map();\nfunction generateValueConfig(obj, key, label, val) {\n    val = val !== null && val !== void 0 ? val : obj[key];\n    const config = val === null || val === void 0 ? void 0 : val.uiConfig;\n    let result = undefined;\n    if (config) {\n        result = config;\n    }\n    else {\n        const uiType = valueToUiType(val);\n        if (uiType === 'folder') {\n            result = generateUiFolder(key + '', val, {}, 'folder', true);\n        }\n        else if (uiType)\n            result = {\n                type: uiType,\n                label: key + '',\n                property: [obj, key],\n            };\n    }\n    label = label !== null && label !== void 0 ? label : key + '';\n    if (result && !result.label)\n        result.label = label;\n    return result;\n}\nfunction generateUiConfig(obj) {\n    if (!obj)\n        return [];\n    let type = obj.constructor || Object;\n    if (type === Array)\n        type = Object;\n    const result = [];\n    const types = [];\n    while (type && type !== Object) {\n        types.push(type);\n        type = Object.getPrototypeOf(type);\n    }\n    if (!types.length || Array.isArray(obj)) {\n        const keys = typeof obj === 'object' ? Object.keys(obj) : Array.isArray(obj) ? obj.map((_, i) => i) : [];\n        for (const key of keys) {\n            const val = obj[key];\n            if (val === undefined || val === null)\n                continue;\n            // if (Array.isArray(obj)) debugger\n            // todo: make only the children of folder inside the value config dynamic instead of the whole thing? as in webgi\n            const c = () => generateValueConfig(obj, key, key + '', val);\n            if (c)\n                result.push(c);\n        }\n    }\n    // reversing so we get the parent first\n    types.reverse().forEach(t => {\n        var _a;\n        (_a = UiConfigTypeMap.Map.get(t)) === null || _a === void 0 ? void 0 : _a.forEach(({ params, propKey, uiType }) => {\n            let config;\n            if (!uiType) {\n                config = () => generateValueConfig(obj, propKey);\n            }\n            if (!config) {\n                config = {\n                    property: [obj, propKey],\n                    type: uiType || 'input',\n                    // ...params,\n                    // ...extraParams,\n                };\n            }\n            if (params) {\n                const extraParams = typeof params.params === 'function' ? params.params(obj) : params.params || {};\n                const params1 = Object.assign({}, params);\n                delete params1.params;\n                if (typeof config === 'function') {\n                    const c1 = config;\n                    config = () => Object.assign(c1(), Object.assign(Object.assign({}, params1), extraParams));\n                }\n                Object.assign(config, Object.assign(Object.assign({}, params1), extraParams));\n            }\n            result.push(config);\n            // if (typeof obj.setDirty === 'function') {\n            //     const changer = ()=>obj.setDirty()\n            //     if (!obj.onChange) obj.onChange = changer\n            //     else {\n            //         const oldOnChange = obj.onChange\n            //         Array.isArray(oldOnChange) ? oldOnChange.push(changer) : obj.onChange = [...oldOnChange, changer]\n            //     }\n            // }\n        });\n    });\n    return result;\n}\nfunction generateUiFolder(label, obj, params = {}, type = 'folder', dynamic = false) {\n    return Object.assign({ type, label, children: !dynamic ? generateUiConfig(obj) : [() => generateUiConfig(obj)], uuid: it() }, params);\n}\nfunction valueToUiType(val) {\n    if (val === null || val === undefined)\n        return null;\n    if (Array.isArray(val))\n        return 'folder';\n    if (typeof val === 'boolean')\n        return 'checkbox';\n    if (typeof val === 'number')\n        return 'number';\n    if (typeof val === 'string')\n        return 'input';\n    if (typeof val === 'function')\n        return 'button';\n    if (typeof val.x === 'number')\n        return 'vec';\n    if (typeof val.r === 'number')\n        return 'color';\n    if (val.isTexture)\n        return 'image';\n    if (typeof val === 'object')\n        return 'folder';\n    return null;\n}\n\n/**\n * Decorator for uiConfig\n * @param action - function that will be called with the targetPrototype, propertyKey and uiConfigs, and should modify the uiConfigs\n */\nfunction uiConfigDecorator(action) {\n    return (targetPrototype, propertyKey) => {\n        const type = targetPrototype.constructor;\n        if (type === Object)\n            throw new Error('Not possible to use uiConfig decorator on an object, use class instead');\n        if (!UiConfigTypeMap.Map.has(type))\n            UiConfigTypeMap.Map.set(type, []);\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        action(targetPrototype, propertyKey, UiConfigTypeMap.Map.get(type));\n    };\n}\n// for properties\nfunction uiConfig(uiType, params) {\n    return uiConfigDecorator((_, propertyKey, uiConfigs) => {\n        const index = uiConfigs.findIndex(item => item.propKey === propertyKey);\n        if (index && index < 0)\n            uiConfigs.push({\n                params: params || {},\n                propKey: propertyKey,\n                uiType,\n            });\n        else {\n            throw new Error(`Property ${propertyKey} already has a uiConfig decorator`);\n        }\n    });\n}\n// for classes\nfunction uiContainer(label, params, type = 'panel') {\n    return (constructor) => {\n        return class extends constructor {\n            constructor() {\n                super(...arguments);\n                this.uiConfig = generateUiFolder(Ee(label, this) || '', this, params || {}, type);\n            }\n        };\n    };\n}\n\nfunction uiMonitor(label, params) {\n    return uiConfig('monitor', { label, params });\n}\nfunction uiSlider(label, bounds, stepSize, params) {\n    return uiConfig('slider', { label, bounds, stepSize, params });\n}\nfunction uiVector(label, bounds, stepSize, params) {\n    return uiConfig('vec', { label, bounds, stepSize, params });\n}\nfunction uiDropdown(label, children, params) {\n    if (Array.isArray(children) && typeof children[0] === 'string')\n        children = children.map((c) => ({ label: c, value: c }));\n    return uiConfig('dropdown', { label, children: children, params });\n}\nfunction uiButton(label, params) {\n    return uiConfig('button', { label, params });\n}\nfunction uiInput(label, params) {\n    return uiConfig('input', { label, params });\n}\nfunction uiNumber(label, params) {\n    return uiConfig('number', { label, params });\n}\nfunction uiColor(label, params) {\n    return uiConfig('color', { label, params });\n}\nfunction uiImage(label, params) {\n    return uiConfig('image', { label, params });\n}\nfunction uiToggle(label, params) {\n    return uiConfig('checkbox', { label, params });\n}\nfunction uiPanelContainer(label, params) {\n    return uiContainer(label, params, 'panel');\n}\nfunction uiFolderContainer(label, params) {\n    return uiContainer(label, params, 'folder');\n}\n\nfunction createValueUiConfig(config) {\n    return config;\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction clonePrimitive(a) {\n    if (a === null || typeof a !== 'object')\n        return a;\n    if (Array.isArray(a))\n        return a.map(clonePrimitive);\n    if (typeof a.clone === 'function')\n        return a.clone();\n    return a;\n}\nfunction equalsPrimitive(a, b) {\n    if (a === null || typeof a !== 'object')\n        return a === b;\n    if (Array.isArray(a))\n        return Array.isArray(b) && a.length === b.length && a.every((v, i) => equalsPrimitive(v, b[i]));\n    if (typeof a.equals === 'function')\n        return !!a.equals(b);\n    // direct equality check in case of objects\n    return a === b;\n}\nfunction copyPrimitive(a, b) {\n    if (b === null || typeof b !== 'object')\n        return b;\n    else if (Array.isArray(b)) {\n        // const a = target[key]\n        if (a && Array.isArray(a)) {\n            if (a.length < b.length) {\n                for (let i = 0; i < a.length; i++)\n                    a[i] = copyPrimitive(a[i], b[i]);\n                for (let i = a.length; i < b.length; i++)\n                    a.push(clonePrimitive(b[i]));\n            }\n            else {\n                for (let i = 0; i < b.length; i++)\n                    a[i] = copyPrimitive(a[i], b[i]);\n                a.length = b.length;\n            }\n            return a;\n        }\n        else\n            return clonePrimitive(b);\n    }\n    else if (typeof b.copy === 'function') {\n        // const a = target[key]\n        if (a && typeof a === 'object' && !Array.isArray(a) && typeof a.copy === 'function') {\n            a.copy(b);\n            return a;\n        }\n        else\n            return clonePrimitive(b);\n    }\n    else\n        return b;\n}\n\nclass UiConfigMethods {\n    constructor(_renderer) {\n        this._renderer = _renderer;\n        this.undoEditingWaitTime = 2000;\n        this.undoPresets = {\n            ['UiConfigMethods_set']: (c) => {\n                const ref = () => { var _a, _b; return (_b = (_a = c.config).uiRefresh) === null || _b === void 0 ? void 0 : _b.call(_a, false); };\n                return {\n                    undo: () => {\n                        // console.log('undo', c.lastVal)\n                        this.setValue(c.config, c.lastVal, c.props, undefined, false).then(ref);\n                    },\n                    redo: () => {\n                        // console.log('redo', c.val)\n                        this.setValue(c.config, c.val, c.props, undefined, false).then(ref);\n                    },\n                };\n            },\n            ['UiConfigMethods_action']: (c) => {\n                const ref = () => { var _a, _b; return (_b = (_a = c.config).uiRefresh) === null || _b === void 0 ? void 0 : _b.call(_a, false); };\n                return {\n                    undo: () => __awaiter(this, void 0, void 0, function* () {\n                        yield c.undo.call(c.target, ...c.args);\n                        ref();\n                    }),\n                    redo: () => __awaiter(this, void 0, void 0, function* () {\n                        yield c.redo.call(c.target, ...c.args);\n                        ref();\n                    }),\n                };\n            },\n        };\n    }\n    getBinding(config, parent = true) {\n        let prop = Ee(config.property, config);\n        const path = Ee(config.path, config);\n        if (prop === undefined && Object.hasOwn(config, 'value')) {\n            prop = [config, 'value'];\n        }\n        if (prop === undefined && parent) {\n            prop = Ee(config.parentProperty, config);\n        }\n        if (!prop || typeof prop[0] !== 'object' || !prop[1]) {\n            // console.warn('Cannot determine property for uiConfig', config)\n            return [undefined, ''];\n        }\n        if (typeof prop[1] === 'string' && path && path.length)\n            prop = [prop[0], prop[1] + '.' + path];\n        if (typeof prop[1] === 'string' && prop[1].includes('.')) {\n            // json path\n            const path1 = prop[1].split('.');\n            let tar = prop[0];\n            const key = path1.pop() || '';\n            for (const p of path1) {\n                tar = Array.isArray(tar) ? tar[parseInt(p)] : tar[p];\n                if (!tar) {\n                    console.warn('Cannot determine property, invalid property path', config, prop);\n                    return [undefined, ''];\n                }\n            }\n            prop = [tar, key];\n        }\n        if (Array.isArray(prop[0]) && typeof prop[1] === 'string')\n            prop[1] = parseInt(prop[1]);\n        return prop;\n    }\n    getRawValue(config) {\n        const [tar, key] = this.getBinding(config);\n        if (!tar)\n            return undefined;\n        const res = tar[key];\n        return res;\n    }\n    getValue(config, val, copyOnEqual = true) {\n        const [tar, key] = this.getBinding(config);\n        if (!tar)\n            return undefined;\n        const res = tar[key];\n        // console.log('get', config, res)\n        if (val !== undefined && res !== undefined) {\n            if (equalsPrimitive(val, res) && !copyOnEqual)\n                return undefined;\n            return copyPrimitive(val, res);\n        }\n        return clonePrimitive(res);\n    }\n    dispatchOnChangeSync(config, props, ...args) {\n        var _a, _b, _c;\n        const changeEvent = {\n            type: 'change',\n            last: (_a = props.last) !== null && _a !== void 0 ? _a : true,\n            config: (_b = props.config) !== null && _b !== void 0 ? _b : config,\n            configPath: [config, ...props.configPath || []],\n            target: config,\n            value: props.value,\n            lastValue: props.lastValue,\n        };\n        const changeArgs = [changeEvent, ...args];\n        if (typeof config.onChange === 'function')\n            config.onChange(...changeArgs);\n        else if (Array.isArray(config.onChange)) {\n            config.onChange.flat().forEach((c) => typeof c === 'function' && (c === null || c === void 0 ? void 0 : c(...changeArgs)));\n        }\n        else if (config.onChange) {\n            console.error('Invalid onChange type, must be a function or array of functions', config.onChange);\n        }\n        (_c = config.parentOnChange) === null || _c === void 0 ? void 0 : _c.call(config, ...changeArgs);\n    }\n    recordUndo(com) {\n        const um = this._renderer.undoManager;\n        if (!um || !um.enabled)\n            return;\n        const c = com;\n        if (c.type !== 'UiConfigMethods_set')\n            return um.record(com);\n        const lastCommand = um.peek();\n        let sameType = !!lastCommand && lastCommand.type === 'UiConfigMethods_set' && lastCommand.config === c.config;\n        if (sameType) {\n            const cLast = lastCommand;\n            if (!cLast.final && c.time - cLast.time < 2000) {\n                // replace cLast with c using lastVal from cLast\n                c.lastVal = cLast.lastVal;\n                c.val = clonePrimitive(c.val);\n                um.replaceLast(c);\n            }\n            else {\n                sameType = false;\n            }\n        }\n        if (!sameType) {\n            if (!equalsPrimitive(c.lastVal, c.val)) {\n                c.val = clonePrimitive(c.val);\n                um.record(c);\n            }\n        }\n    }\n    /**\n     *\n     * @param config\n     * @param value\n     * @param props - only the prop `last` need to be set, rest are optional. `lastValue` can be set if known (but it should be exactly equal to the value in the binding and not cloned). `config`, `configPath` are for parentOnChange, no need to set that.\n     * @param forceOnChange\n     * @param trackUndo\n     */\n    setValue(config_1, value_1, props_1, forceOnChange_1) {\n        return __awaiter(this, arguments, void 0, function* (config, value, props, forceOnChange, trackUndo = true) {\n            return this.runAtEvent(config, () => {\n                var _a, _b;\n                const [tar, key] = this.getBinding(config);\n                const lastValueRaw = (_a = props.lastValue) !== null && _a !== void 0 ? _a : tar === null || tar === void 0 ? void 0 : tar[key];\n                let failed = false;\n                const final = (_b = props.last) !== null && _b !== void 0 ? _b : true;\n                const same = equalsPrimitive(lastValueRaw, value);\n                const lastValue = clonePrimitive(lastValueRaw);\n                if (same)\n                    failed = !final;\n                else if (tar) {\n                    const a = copyPrimitive(lastValueRaw, value);\n                    if (a !== lastValueRaw)\n                        failed = !S(tar, key, value, true, true);\n                    else\n                        failed = false;\n                }\n                else\n                    failed = true;\n                // console.log('set', config, value, lastValue, failed, same, final)\n                if (failed) {\n                    if (!forceOnChange)\n                        return false;\n                }\n                if (trackUndo && !failed && (final || !same)) {\n                    this.recordUndo({\n                        type: 'UiConfigMethods_set',\n                        config,\n                        lastVal: lastValue,\n                        val: value,\n                        final,\n                        props,\n                        time: Date.now(),\n                    });\n                }\n                this.dispatchOnChangeSync(config, Object.assign(Object.assign({}, props), { last: final, value, lastValue: lastValue }));\n                return true;\n            });\n        });\n    }\n    /**\n     *\n     * @param config\n     * @param props - only last needs to be set. check the docs for `setValue`\n     */\n    dispatchOnChange(config, props) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.runAtEvent(config, () => {\n                this.dispatchOnChangeSync(config, props);\n            });\n        });\n    }\n    getLabel(config) {\n        var _a, _b;\n        return ((_a = Ee(config.label, config)) !== null && _a !== void 0 ? _a : (_b = this.getBinding(config)) === null || _b === void 0 ? void 0 : _b[1]) + '';\n    }\n    getChildren(config) {\n        var _a;\n        return ((_a = Ee(config.children, config)) !== null && _a !== void 0 ? _a : []).map(v => Ee(v)).flat(2).filter(v => v);\n    }\n    clickButton(config, options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.runAtEvent(config, () => __awaiter(this, void 0, void 0, function* () {\n                // const args: any[] = []\n                // const prmpt = getOrCall(config.prompt)\n                // if (prmpt) args.push(await this._renderer.prompt(...prmpt))\n                var _a, _b, _c, _d, _e, _f;\n                const binding = this.getBinding(config, false);\n                const tar = binding[0];\n                const key = binding[1];\n                const args = Ee(config.sendArgs, config) === false ? [] : (_a = options === null || options === void 0 ? void 0 : options.args) !== null && _a !== void 0 ? _a : [];\n                const actions = [];\n                if (tar) {\n                    const action = ((_b = tar[key]) !== null && _b !== void 0 ? _b : tar.value);\n                    if (typeof action === 'function') {\n                        actions.push([action, tar]);\n                    }\n                    else if (action) {\n                        console.warn('Invalid action type for button', action);\n                    }\n                }\n                if (typeof config.onClick === 'function') {\n                    actions.push([config.onClick, config]);\n                }\n                for (const [action, targ] of actions) {\n                    let res = yield action.call(targ, ...args); // if a function is returned, it is treated as undo function\n                    const undo = typeof res === 'function' ? res : (_c = res === null || res === void 0 ? void 0 : res.undo) === null || _c === void 0 ? void 0 : _c.bind(res);\n                    const resAction = typeof res !== 'function' ? (_d = res === null || res === void 0 ? void 0 : res.action) === null || _d === void 0 ? void 0 : _d.bind(res) : null;\n                    const redo = typeof res === 'function' ? action : (_f = (_e = res === null || res === void 0 ? void 0 : res.redo) === null || _e === void 0 ? void 0 : _e.bind(res)) !== null && _f !== void 0 ? _f : resAction;\n                    if (typeof resAction === 'function') {\n                        res = resAction(); // execute the action now.\n                    }\n                    if (typeof undo === 'function') {\n                        this.recordUndo({\n                            type: 'UiConfigMethods_action',\n                            config,\n                            target: targ,\n                            undo: undo,\n                            redo: redo,\n                            args,\n                        });\n                    }\n                }\n                yield this.dispatchOnChange(config, {});\n                // this.dispatchOnChangeSync(config, {})\n            }));\n        });\n    }\n    runAtEvent(config, run) {\n        return __awaiter(this, void 0, void 0, function* () {\n            var _a;\n            const dispatchMode = (_a = Ee(config.dispatchMode, config)) !== null && _a !== void 0 ? _a : 'postFrame';\n            if (dispatchMode === 'immediate')\n                return run();\n            return new Promise((resolve) => {\n                const listener = () => __awaiter(this, void 0, void 0, function* () {\n                    this._renderer.removeEventListener(dispatchMode, listener);\n                    resolve(yield run());\n                });\n                this._renderer.addEventListener(dispatchMode, listener);\n            });\n        });\n    }\n    initUiConfig(config) {\n        if (!config)\n            return;\n        if (!config.type) {\n            console.warn('No type for config', config);\n            config.type = 'input';\n        }\n        if (!config.uuid)\n            config.uuid = it();\n        if (config.property === undefined) {\n            if (config.binding)\n                config.property = config.binding;\n            else if (config.value === undefined) {\n                if (config.getValue || config.setValue) {\n                    Object.defineProperty(config, 'value', {\n                        get: () => config.getValue && config.getValue(),\n                        set: (v) => config.setValue && config.setValue(v),\n                    });\n                    config.property = [config, 'value'];\n                }\n            }\n            else if (config.getValue || config.setValue) {\n                console.warn('getValue/setValue is ignored since value is provided', config);\n            }\n            if (config.property === undefined) ;\n        }\n    }\n    getBounds(config, unbounded = false) {\n        var _a, _b;\n        const bounds = Ee(config.bounds);\n        const max = ((_a = bounds === null || bounds === void 0 ? void 0 : bounds.length) !== null && _a !== void 0 ? _a : 0) >= 2 ? bounds[1] : unbounded ? Infinity : 1;\n        const min = ((_b = bounds === null || bounds === void 0 ? void 0 : bounds.length) !== null && _b !== void 0 ? _b : 0) >= 1 ? bounds[0] : unbounded ? -Infinity : 0;\n        const step = Ee(config.stepSize) || (unbounded ? 0.01 : Math.pow(10, Math.floor(Math.log10((max - min) / 100))));\n        return { min, max, step };\n    }\n}\n\nclass UiConfigRendererBase extends I {\n    get undoManager() {\n        return this._undoManager;\n    }\n    set undoManager(value) {\n        this._undoManager = value;\n        if (this._undoManager)\n            Object.assign(this._undoManager.presets, this.methods.undoPresets);\n    }\n    constructor(autoFrameEvents = true, methods, undoManager) {\n        super();\n        this._rafId = null;\n        this.raf = () => {\n            if (!this._autoFrameEvents)\n                return;\n            this.dispatchEvent({ type: 'preFrame' });\n            this.dispatchEvent({ type: 'preRender' });\n            this.dispatchEvent({ type: 'postRender' });\n            this.dispatchEvent({ type: 'postFrame' });\n            this._rafId = requestAnimationFrame(this.raf);\n        };\n        this._refreshQueue = {\n            'preRender': [],\n            'postRender': [],\n            'preFrame': [],\n            'postFrame': [],\n        };\n        this._lastModeTime = {\n            'preRender': 0,\n            'postRender': 0,\n            'preFrame': 0,\n            'postFrame': 0,\n        };\n        this.methods = methods || new UiConfigMethods(this);\n        this.undoManager = undoManager === false ? undefined : undoManager || new Q({ bindHotKeys: true, limit: 1000, debug: rt('debugUndo') !== null });\n        this._autoFrameEvents = autoFrameEvents;\n        if (autoFrameEvents) {\n            this.addEventListener('preFrame', () => this.refreshQueue('preFrame'));\n            this.addEventListener('postFrame', () => this.refreshQueue('postFrame'));\n            this.addEventListener('preRender', () => this.refreshQueue('preRender'));\n            this.addEventListener('postRender', () => this.refreshQueue('postRender'));\n        }\n    }\n    // call from render or onMount\n    start() {\n        if (this._rafId === null) {\n            this._rafId = requestAnimationFrame(this.raf);\n        }\n    }\n    // call from unmount or onDispose etc\n    stop() {\n        if (this._rafId !== null) {\n            cancelAnimationFrame(this._rafId);\n            this._rafId = null;\n        }\n    }\n    refreshQueue(mode) {\n        const l = this._refreshQueue[mode];\n        const l2 = [];\n        const t = g();\n        const delta = t - this._lastModeTime[mode];\n        l.forEach(value => {\n            if (value[1] > 0.001) {\n                value[1] -= delta;\n                l2.push(value);\n            }\n            else\n                this._refreshUiConfigObject(value[0]);\n        }); // todo: add option to disable ui refresh like for when animating\n        this._refreshQueue[mode] = l2;\n        this._lastModeTime[mode] = t;\n    }\n    _addToRefreshQueue(mode, config, delay) {\n        const uuid = config.uuid;\n        const l = this._refreshQueue[mode];\n        // if (uuid) {\n        //     l = l.filter(v=>v[3] !== uuid)\n        // }\n        // console.warn('add to refresh queue:', uuid)\n        const old = l.find(value => value[2] === uuid);\n        if (!old)\n            l.push([config, delay, uuid]);\n        else {\n            old[1] = Math.max(old[1], delay); // push delay\n        }\n        this._refreshQueue[mode] = l;\n    }\n    /**\n     * Disposes the UI associated with a config, doesn't makes change to the object or its parent.\n     * @param config\n     * @param performDispose\n     */\n    disposeUiConfig(config, performDispose = true) {\n        var _a, _b;\n        if (!config)\n            return;\n        if (config.uiRef) {\n            if (performDispose)\n                (_b = (_a = config.uiRef).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);\n            config.uiRef = undefined;\n        }\n        config.uiRefType = undefined;\n        config.uiRefresh = undefined;\n    }\n    addToRefreshQueue(mode, uiConfig, deep, delay) {\n        const list = deep ? this._flattenUiConfig(uiConfig) : [uiConfig];\n        for (const value of list) {\n            if (mode === 'immediate')\n                X(delay).then(() => this._refreshUiConfigObject(value));\n            else\n                this._addToRefreshQueue(mode, value, delay);\n        }\n    }\n    _flattenUiConfig(uiC, list) {\n        var _a;\n        list = list !== null && list !== void 0 ? list : [];\n        if (!uiC || !uiC.uiRef)\n            return list;\n        list.push(uiC);\n        if (typeof uiC.children === 'function')\n            return list; // todo call function, see below.\n        (_a = uiC.children) === null || _a === void 0 ? void 0 : _a.forEach(value => {\n            if (typeof value === 'function') {\n                return;\n                //  todo: call function. this is commented because it makes it slower and it doesnt matter much since result of function most likely wont have uiRef\n                // value = value()\n            }\n            if (!value)\n                return;\n            if (Array.isArray(value))\n                value.forEach(v1 => list = this._flattenUiConfig(v1, list));\n            else\n                list = this._flattenUiConfig(value, list);\n        });\n        return list;\n    }\n}\n\nclass UiConfigRenderer extends UiConfigRendererBase {\n    constructor(container = document.body, autoFrameEvents = true, methods, undoManager) {\n        super(autoFrameEvents, methods, undoManager);\n        this.config = {\n            type: 'panel',\n            label: 'Configuration',\n            children: [],\n        };\n        this._uiContainer = this._createUiContainer();\n        container.appendChild(this._uiContainer);\n        this.start();\n    }\n    unmount() {\n        this.disposeUiConfig(this.config);\n        this._uiContainer.remove();\n        this.stop();\n    }\n    // appendUiConfig(uiConfig: UiObjectConfig): void {\n    //     if (!uiConfig) return\n    //     this._renderUiConfig(uiConfig)\n    // }\n    appendChild(config, params) {\n        if (!config)\n            return;\n        Object.assign(config, params);\n        this.config.children.push(config);\n        this.refreshRoot();\n    }\n    removeChild(config) {\n        const index = this.config.children.indexOf(config);\n        if (index === -1)\n            return;\n        this.config.children.splice(index, 1);\n        this.disposeUiConfig(config);\n        this.refreshRoot();\n    }\n    refreshRoot(deep = true, mode = 'postFrame', delay = 0) {\n        var _a, _b;\n        (_b = (_a = this.config).uiRefresh) === null || _b === void 0 ? void 0 : _b.call(_a, deep, mode, delay);\n    }\n    _createUiContainer() {\n        return ee({ id: 'uiConfigContainer', addToBody: false });\n    }\n}\n\nexport { UiConfigMethods, UiConfigRenderer, UiConfigRendererBase, UiConfigTypeMap, clonePrimitive, copyPrimitive, createValueUiConfig, equalsPrimitive, generateUiConfig, generateUiFolder, generateValueConfig, uiButton, uiColor, uiConfig, uiContainer, uiDropdown, uiFolderContainer, uiImage, uiInput, uiMonitor, uiNumber, uiPanelContainer, uiSlider, uiToggle, uiVector };\n//# sourceMappingURL=index.js.map\n","import {BladeApi, FolderApi} from 'tweakpane'\nimport {BladeController, View} from '@tweakpane/core'\n\n/**\n * Check if child.parent === parent\n * @param child\n * @param parent\n */\nexport const tweakpaneCheckParent = (child: BladeApi<BladeController<View>>, parent: FolderApi) => {\n    return parent.controller_.rackController.rack === child.controller_.parent\n}\n/**\n * Move to a new parent or change index in the same parent.\n * @param child\n * @param newParent\n * @param index\n */\nexport const tweakPaneMoveToParentIndex = (child: BladeApi<BladeController<View>>, newParent: FolderApi, index: number): boolean => {\n    // console.log('tweakpane moving', (child as any).title, newParent.title, index)\n    const cont = child.controller_\n    const ind = cont.parent?.children?.indexOf(cont)\n    const sameParent = tweakpaneCheckParent(child, newParent)\n    if (!sameParent || ind !== index) {\n        // if (ind !== undefined && ind >= 0) {\n        //     cont.parent?.remove(cont)\n        // }\n        newParent.add(child as any, index)\n        return true\n    }\n    return false\n}\n","import {BladeApi, ButtonApi, FolderApi, InputBindingApi, MonitorBindingApi} from 'tweakpane'\nimport {BladeController, TextView, View} from '@tweakpane/core'\nimport {tweakPaneMoveToParentIndex} from './tpUtils'\nimport {ChangeEvent, UiObjectConfig} from 'uiconfig.js'\nimport {getOrCall, objectHasOwn, safeSetProperty} from 'ts-browser-helpers'\nimport {UiConfigRendererTweakpane} from './UiConfigRendererTweakpane'\n\nexport const tpFolderGenerator = (parent: FolderApi, config: UiObjectConfig, plugin: UiConfigRendererTweakpane, _?: any) => {\n    let folder = config.uiRef as FolderApi | undefined\n    if (folder?.controller_.viewProps.get('disposed')) folder = undefined\n    const lastExpanded = folder?.expanded\n    if (!folder) {\n        const folder1 = parent.addFolder({\n            title: '',\n        })\n        folder = folder1\n        folder.on('fold', _2 => {\n            let expanded = folder1.expanded\n            safeSetProperty(config, 'expanded', expanded, true)\n            expanded = getOrCall(config.expanded) ?? expanded\n            if (expanded !== folder1.expanded) folder1.expanded = expanded\n            config.uiRefresh?.(expanded, 'postFrame')\n            if (expanded) {\n                config.onExpand?.(config)\n            }\n        })\n    }\n\n    if (!folder) return folder\n    folder.expanded = getOrCall(config.expanded) ?? lastExpanded ?? false // todo;;\n\n    const childObjects = plugin.methods.getChildren(config)\n    // console.log(childObjects)\n    // if (childObjects) {\n    // const children = childObjects?.map(value => value.uiRef) as BladeApi<BladeController<View>>[]\n    let i = 0\n    for (const child of childObjects) { // todo check comparison with uiConfig.uuid\n        child.parentOnChange = (ev: ChangeEvent, ...args) => { // there will be an issue if this child is then added to the root pane in tweakpane\n            plugin.methods.dispatchOnChangeSync(config, {...ev}, ...args)\n        }\n        if (child.property === undefined &&\n            child.value === undefined &&\n            child.getValue === undefined &&\n            child.setValue === undefined &&\n            child.type !== 'button' &&\n            (config.property !== undefined || config.value !== undefined)\n        ) child.property = config.property !== undefined ? config.property : [config, 'value']\n\n        let ui = child.uiRef as BladeApi<BladeController<View>> | undefined\n        if (ui) {\n            // check if all correct or set child.uiRef to undefined.\n\n            // if (!tweakpaneCheckParent(ui, folder)) { // different parent\n            // }\n            if (ui.controller_.viewProps.get('disposed')) {\n                plugin.disposeUiConfig(child, false)\n            }\n        }\n\n        ui = child.uiRef\n        if (!ui) {\n            plugin.renderUiObject(child, folder)\n            ui = child.uiRef\n        } else {\n            // this._refreshUiObject({uiConfig: child}, folder) // this is done in add, see flattenUiConfig\n        }\n\n        if (ui) {\n            const moved = tweakPaneMoveToParentIndex(ui, folder, i++)\n            if (moved) {\n                // child.uiRefresh?.('postFrame', false)\n                // plugin._refreshUiObject({uiConfig: child}, folder)\n                plugin.renderUiObject(child, folder) // its the same as refresh\n            }\n        }\n    }\n    let ch = folder.children\n    while (ch.length > i) {\n        const rm = ch[ch.length - 1]\n        folder.remove(rm) // todo; remove listeners etc\n        ch = folder.children\n        const child = (rm as any).srcUiConfig as UiObjectConfig\n        if (child) {\n            child.parentOnChange = undefined\n            if (Array.isArray(child.property) &&\n                (child.property === config.property ||\n                    child.property[0] === config &&\n                        child.property[1] === 'value'\n                )\n            ) delete child.property\n            // todo: remove uiRef here?\n        }\n        // todo: do we need to do disposeUiConfig?\n    }\n\n    folder.controller_.props.set('title', plugin.methods.getLabel(config))\n\n    const container = folder.controller_.view.containerElement\n    const domChildren = getOrCall(config.domChildren, [])\n    if (domChildren?.length !== undefined) {\n        const x: any = []\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let j = 0; j < container.children.length; j++) {\n            const child: any = container.children[j]\n            if (!child.dataset?.tpCustomDOM) continue\n            x.push(child)\n        }\n        for (const child of x) {\n            container.removeChild(child)\n        }\n        for (const domChild of domChildren) {\n            if (domChild.parentElement !== container) {\n                container.appendChild(domChild)\n                domChild.dataset.tpCustomDOM = 'true'\n            }\n            // check ordering maybe?\n        }\n        folder.controller_.foldable.cleanUpTransition()\n    }\n\n    return folder\n}\n\nexport const tpButtonInputGenerator = (parent: FolderApi, config: UiObjectConfig, plugin: UiConfigRendererTweakpane, _?: any) => {\n    let input = config.uiRef as ButtonApi | undefined\n    if (input?.controller_.viewProps.get('disposed')) input = undefined\n    if (!input) {\n        // Create button in parent and bind click to property\n        input = parent.addButton({title: ''})\n        input.on('click', async() => plugin.methods.clickButton(config))\n    }\n    if (input) {\n        input.title = plugin.methods.getLabel(config) || 'click me'\n    }\n    return input\n}\n\nexport const tpDropdownInputGenerator = (parent: FolderApi, config: UiObjectConfig, plugin: UiConfigRendererTweakpane, params?: any) => {\n    const children = plugin.methods.getChildren(config)\n    const options = Object.fromEntries(children.map(value => {\n        const label = plugin.methods.getLabel(value)\n        return [label, value!.value ?? label]\n    }))\n    const i = tpInputGenerator(parent, config, plugin, {options, ...params ?? {}})\n    return i\n}\n\nexport const tpSliderInputGenerator = (parent: FolderApi, config: UiObjectConfig, plugin: UiConfigRendererTweakpane, params?: any) => {\n    const bounds = getOrCall(config.bounds)\n    const max = (bounds?.length ?? 0) >= 2 ? bounds![1] : 1\n    const min = (bounds?.length ?? 0) >= 1 ? bounds![0] : 0\n    const step = getOrCall(config.stepSize) || undefined\n    return tpInputGenerator(parent, config, plugin, {min, max, step, ...params ?? {}})\n}\n\nexport const tpInputGenerator = (parent: FolderApi, config: UiObjectConfig, renderer: UiConfigRendererTweakpane, params?: any) => {\n    params = params ?? {}\n    const inputParams = {\n        label: renderer.methods.getLabel(config),\n        ...params,\n    }\n\n    let input = config.uiRef as InputBindingApi<any, any> | MonitorBindingApi<any> | undefined\n    if (input?.controller_.viewProps.get('disposed')) input = undefined\n\n    let proxy = config.__proxy\n    if (!proxy) proxy = config.__proxy = {} // see tpColorInputGenerator\n    if (!objectHasOwn(proxy, 'value_')) {\n        const n = renderer.methods.getValue(config, proxy.value || undefined)\n        proxy.value = n\n    }\n    if (!input) {\n        // Create input in parent and bind to property\n        try {\n            if (!inputParams.view && getOrCall(config.readOnly)) {\n                const [tar, key] = renderer.methods.getBinding(config)\n                input = tar ? parent.addMonitor(tar, key, inputParams) : undefined\n            } else {\n                input = parent.addInput(proxy, 'value', inputParams).on('change', ev => {\n                    if (proxy.listedOnChange === false) return // used in tpImageInputGenerator\n                    // console.log(ev.last ?? true)\n                    config.dispatchMode = \"immediate\" // this is required so that the value is set before the next uiRefresh.\n                    renderer.methods.setValue(config, proxy.value_ ?? proxy.value, {last: ev.last ?? true}, proxy.forceOnChange || false)\n                })\n            }\n        } catch (e: any) {\n            if (e.message.startsWith('No matching controller for')) input = undefined\n            else throw e\n        }\n    }\n\n    if (input) {\n        for (const [key, val] of Object.entries(inputParams)) {\n            const cont = input.controller_\n            const oVal = cont.props.value(key as any)\n            if (oVal !== undefined) {\n                if (oVal.rawValue !== val) input.controller_.props.set(key as any, val)\n            } else {\n                // todo: update??\n                // const vCont: any = cont.valueController\n                // oVal = vCont.props?.value?.(key as any)\n                // if (oVal !== undefined && oVal.rawValue !== val) {\n                //     console.log(key, val, oVal)\n                //     vCont.props.set(key as any, val)\n                // }\n            }\n        }\n        // update min max value of slider manually because it has a separate controller.\n        if (config.type === 'slider') {\n            if (inputParams.min !== undefined) (input as any).controller_.valueController.sliderController.props.set(\n                'minValue',\n                inputParams.min,\n            )\n            if (inputParams.max !== undefined) (input as any).controller_.valueController.sliderController.props.set(\n                'maxValue',\n                inputParams.max,\n            )\n        }\n\n        // placeholder for text input\n        (input?.controller_.valueController.view as TextView<any>).inputElement?.setAttribute('placeholder', getOrCall(config.placeholder) ?? '')\n\n        input.refresh()\n    }\n    // console.log('refresh', input)\n    // console.log(ev)\n    return input\n}\n\nexport const tpVecInputGenerator = (parent: FolderApi, config: UiObjectConfig, renderer: UiConfigRendererTweakpane, params?: any) => {\n    if (!config.__proxy) config.__proxy = {}\n    config.__proxy.forceOnChange = false\n\n    // todo handle array type of values instead of {x,y,z,w}\n\n    const bounds = getOrCall(config.bounds)\n    if (!bounds || bounds.length < 1)\n        return tpInputGenerator(parent, config, renderer, {...params ?? {}})\n\n    // todo: bounds are not working properly\n    const max = (bounds.length ?? 0) >= 2 ? bounds[1] : 1\n    const min = (bounds.length ?? 0) >= 1 ? bounds[0] : 0\n    const step = config.stepSize ?? (max - min) / 100\n    const p = {min, max, step}\n    const pp: any = {x: p, y: p}\n    if (config.type === 'vec3' || config.type === 'vec4') pp.z = p\n    if (config.type === 'vec4') pp.w = p\n    return tpInputGenerator(parent, config, renderer, {...pp, ...params ?? {}})\n}\n","import {FolderApi} from 'tweakpane'\nimport {UiObjectConfig} from 'uiconfig.js'\nimport {getOrCall} from 'ts-browser-helpers'\nimport {UiConfigRendererTweakpane} from './UiConfigRendererTweakpane'\n// eslint-disable-next-line @typescript-eslint/naming-convention\nimport type * as THREE_1 from 'three'\nimport {tpInputGenerator} from './tpGenerators'\n\nexport type THREE = Pick<typeof THREE_1, 'Color' | 'Vector2' | 'Vector3' | 'Vector4'>\n\nexport const tpColorInputGenerator = (parent: FolderApi, config: UiObjectConfig, renderer: UiConfigRendererTweakpane, params?: any) => {\n    if (!renderer.THREE) {\n        console.error('tpColorInputGenerator requires THREE to be set in the renderer')\n        return\n    }\n    if (!config.__proxy) {\n        config.__proxy = {\n            forceOnChange: false,\n        }\n        const uiColorSpace = 'srgb'\n        const tempColor = new renderer.THREE.Color()\n        Object.defineProperty(config.__proxy, 'value', {\n            get: () => {\n                // config.__proxy.value_ = renderer.methods.getValue(config) // this is done below so it will be triggered on ui refresh\n                const cc: any = config.__proxy.value_\n                if (cc)\n                    return tempColor.set(cc).getHex(uiColorSpace)\n                return 0\n            },\n            set: (v: number) => {\n                config.__proxy.value_ = renderer.methods.getValue(config, config.__proxy.value_ || undefined)\n                const cc: any = config.__proxy.value_\n                const tempC = tempColor.setHex(v, uiColorSpace)\n                if (cc?.isColor) {\n                    (cc as THREE_1.Color).copy(tempC)\n                } else if (typeof cc === 'number') config.__proxy.value_ = tempC.getHex()\n                else if (typeof cc === 'string') config.__proxy.value_ = '#' + tempC.getHexString()\n            },\n        })\n    }\n    config.__proxy.value_ = renderer.methods.getValue(config, config.__proxy.value_ || undefined)\n    // console.log(config.__proxy.value_)\n    params = params ?? {}\n    params.view = 'color'\n    if (getOrCall(config.inlinePicker))\n        params.picker = 'inline'\n    return tpInputGenerator(parent, config, renderer, params)\n}\n\n","import {AnyOptions, createDiv, createStyles, css, getOrCall, JSUndoManager} from 'ts-browser-helpers'\nimport {BladeApi, FolderApi, Pane} from 'tweakpane'\nimport {TUiRefreshModes, UiConfigRenderer, UiObjectConfig} from 'uiconfig.js'\nimport {BladeController, View} from '@tweakpane/core'\nimport {\n    tpButtonInputGenerator,\n    tpDropdownInputGenerator,\n    tpFolderGenerator,\n    tpInputGenerator,\n    tpSliderInputGenerator,\n    tpVecInputGenerator,\n} from './tpGenerators'\nimport {THREE, tpColorInputGenerator} from './tpGeneratorsThree'\n\nexport class UiConfigRendererTweakpane extends UiConfigRenderer {\n\n    protected _root?: Pane\n\n    unmount() {\n        this._root?.dispose()\n        super.unmount()\n    }\n\n    constructor(container: HTMLElement = document.body, {expanded = true, autoPostFrame = true} = {}, undoManager?: JSUndoManager|false) {\n        super(container, autoPostFrame, undefined, undoManager)\n        if (this._root) this._root.expanded = expanded\n    }\n\n    protected _createUiContainer(): HTMLDivElement {\n        const container = createDiv({id: 'tweakpaneUiContainer', addToBody: false})\n        createStyles(css`\n          :root{\n            --tweakpane-ui-container-width: 300px;\n          }\n          @media only screen and (min-width: 1500px) {\n            :root{\n              --tweakpane-ui-container-width: 300px;\n            }\n          }\n          @media only screen and (min-width: 2500px) {\n            :root{\n              --tweakpane-ui-container-width: 500px;\n            }\n          }\n          #tweakpaneUiContainer {\n            position: fixed;\n            top: 1rem;\n            padding-right: 4px;\n            padding-bottom: 20px;\n            right: 1rem;\n            width: var(--tweakpane-ui-container-width);\n            height: auto;\n            overflow-y: scroll;\n            z-index: 100;\n            pointer-events: auto;\n            max-height: calc(100% - 3rem);\n            border-radius: 0.5rem;\n            font-family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\";\n          }\n        `)\n\n        this._root = new Pane({title: 'Configuration', container})\n        return container\n    }\n\n\n    appendChild(config?: UiObjectConfig, params?: UiObjectConfig) {\n        if (!config) return\n        super.appendChild(config, params)\n        this.renderUiConfig(config)\n    }\n\n    renderUiConfig(uiConfig: UiObjectConfig): void {\n        this.renderUiObject(uiConfig)\n    }\n\n    renderUiObject(uiConfig: UiObjectConfig, parent?: FolderApi) {\n        parent = parent ?? this._root\n        if (!uiConfig.type) return\n        this.methods.initUiConfig(uiConfig)\n        if (uiConfig.uiRef && uiConfig.uiRefType !== uiConfig.type) {\n            // console.log('Removing UI object because of type mismatch', uiConfig.uiRef)\n            this.disposeUiConfig(uiConfig)\n        }\n        const ui = uiConfig.type ? this.typeGenerators[uiConfig.type]?.(parent, uiConfig, this) as BladeApi<BladeController<View>> | undefined : undefined\n        if (ui) {\n            ui.hidden = getOrCall(uiConfig.hidden) ?? false\n            ui.disabled = getOrCall(uiConfig.disabled) ?? false // todo: also see if property is writable?\n            ;(ui as any).srcUiConfig = uiConfig\n        }\n        uiConfig.uiRef = ui\n        uiConfig.uiRefType = ui ? uiConfig.type : undefined\n        uiConfig.__uiParent = parent\n        uiConfig.uiRefresh =\n            (deep = false, mode: TUiRefreshModes | 'immediate' = 'postFrame', delay = 0) =>\n                this.addToRefreshQueue(mode, uiConfig, deep, delay)\n        ui?.controller_.viewProps.handleDispose(()=>{\n            uiConfig.uiRef = undefined\n            uiConfig.uiRefType = undefined\n            uiConfig.uiRefresh = undefined\n        })\n    }\n\n    protected _refreshUiConfigObject(config: UiObjectConfig) {\n        if (!config.__uiParent) {\n            console.error('No parent for ui object', config)\n        }\n        this.renderUiObject(config, config.__uiParent)\n    }\n\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    THREE: THREE|undefined = (window as any).THREE\n\n    readonly typeGenerators: typeof defaultGenerators & AnyOptions = {\n        ...defaultGenerators,\n    }\n\n}\n\nconst defaultGenerators = {\n    panel: tpFolderGenerator,\n    folder: tpFolderGenerator,\n    input: tpInputGenerator,\n    number: tpInputGenerator,\n    slider: tpSliderInputGenerator,\n    dropdown: tpDropdownInputGenerator,\n    checkbox: tpInputGenerator,\n    toggle: tpInputGenerator,\n    button: tpButtonInputGenerator,\n    vec: tpVecInputGenerator,\n    vector: tpVecInputGenerator,\n    vec2: tpVecInputGenerator,\n    vec3: tpVecInputGenerator,\n    vec4: tpVecInputGenerator,\n\n    // three\n    color: tpColorInputGenerator,\n\n    // others\n    monitor: (parent: FolderApi, config: UiObjectConfig, plugin: UiConfigRendererTweakpane, params?: any) => {\n        config.readOnly = true\n        return tpInputGenerator(parent, config, plugin, params)\n    },\n    // dummy for creating new ones, do not remove.\n    dummy: (parent: FolderApi, config: UiObjectConfig, plugin: UiConfigRendererTweakpane, params?: any) => {\n        return tpInputGenerator(parent, config, plugin, params)\n    },\n}\n","import {UiConfigRendererTweakpane} from './UiConfigRendererTweakpane'\nimport {THREE} from './tpGeneratorsThree'\n\nclass UI extends UiConfigRendererTweakpane {\n\n}\n\nexport {UiConfigRendererTweakpane, UI, type THREE}\n"],"names":["ee","n","e","t","i","r","s","P","$","H","W","S","Ee","v","global","factory","exports","this","Semver","text","core","prerelease","coreComps","BladeApi","controller","disabled","hidden","TpEvent","target","TpChangeEvent","value","presetKey","last","TpUpdateEvent","TpFoldEvent","expanded","TpTabSelectEvent","index","forceCast","isEmpty","deepEqualsArray","a1","a2","isPropertyWritable","obj","key","d","CREATE_MESSAGE_MAP","context","TpError","name","config","_a","BindingTarget","opt_id","valueObj","ButtonApi","label","title","eventName","handler","bh","Emitter","observers","observer","event","PREFIX","ClassName","viewName","opt_elementName","opt_modifier","compose","h1","h2","input","extractValue","ev","bindValue","applyValue","bindValueMap","valueMap","applyClass","elem","className","active","valueToClassName","bindValueToTextContent","className$q","ButtonView","doc","buttonElem","titleElem","ButtonController","BoundValue","initialValue","v1","v2","rawValue","options","opts","constrainedValue","prevValue","PrimitiveValue","createValue","constraint","equals","ValueMap","o","parseObject","keyToParserMap","result","tmp","parser","parseArray","parseItem","item","isObject","createParamsParserBuilder","parse","optional","createParamsParserBuilders","itemParser","ParamsParsers","parseParams","warnMissing","info","disposeElement","ReadonlyValue","className$p","valueToModifier","modifier","ViewProps","opt_initialValue","_b","_c","callback","disposed","parent","prevParent","getAllBladePositions","className$o","POS_TO_CLASS_NAME_MAP","BladeController","pos","SVG_NS","forceReflow","element","disableTransitionTemporarily","supportsTouch","getGlobalObject","getWindowDocument","getCanvasContext","canvasElement","win","ICON_ID_TO_INNER_HTML_MAP","createSvgIconElement","document","iconId","insertElementAt","parentElement","removeElement","removeChildElements","removeChildNodes","findNextTarget","className$n","createLabelNode","frag","line","lineNode","LabelView","labelElem","valueElem","LabelController","viewProps","ButtonBladePlugin","params","p","args","ValueBladeController","createBlade","Foldable","coreObj","exHeight","expandedClassName","onExpand","computeExpandedFolderHeight","folder","containerElement","height","applyHeight","foldable","bindFoldable","h","RackLikeApi","rackApi","addButtonAsBlade","api","addFolderAsBlade","addSeparatorAsBlade","opt_params","addTabAsBlade","NestedOrderedSet","extract","opt_index","subList","InputBindingApi","InputBindingController","MonitorBindingApi","MonitorBindingController","findSubBladeApiSet","RackApi","getApiByController","apiSet","createBindingTarget","pool","rack","bc","object","gapi","a","binding","FolderApi","RackLikeController","PlainView","findInputBindingController","bcs","b","findMonitorBindingController","findValueBladeController","findSubRack","RackController","findSubBladeControllerSet","BladeRack","controllerClass","isRoot","emitter","visibleItems","firstVisibleItem","lastVisibleItem","ps","_ev","_","bladeContainerClassName","FolderView","indentElem","markElem","containerElem","FolderController","rc","FolderBladePlugin","LabeledValueController","SeparatorApi","className$m","SeparatorView","hrElem","SeparatorController","SeparatorBladePlugin","className$l","TabItemView","selected","TabItemController","TabPageController","TabPageApi","contentRackApi","TabApi","pc","INDEX_NOT_SELECTED","Tab","firstSelIndex","className$k","TabView","contentsElem","TabController","cr","tab","TabBladePlugin","c","createBladeController","plugin","ac","ManualTicker","IntervalTicker","interval","inactive","InputBinding","targetValue","fillBuffer","buffer","bufferSize","initializeBuffer","createTrimmedBuffer","createPushedBuffer","newValue","newBuffer","MonitorBinding","CompositeConstraint","constraints","findConstraint","constraintClass","tmpResult","sc","DefiniteRangeConstraint","max","min","ListConstraint","RangeConstraint","StepConstraint","step","origin","className$j","ListView","selectElem","optionElem","values","ListController","className$i","PopupView","PopupController","className$h","TextView","inputElem","formatter","TextController","parsedValue","boolToString","boolFromUnknown","BooleanFormatter","NumberLiteralNode","BINARY_OPERATION_MAP","BinaryOperationNode","operator","left","right","op","UNARY_OPERATION_MAP","UnaryOperationNode","expr","combineReader","parsers","cursor","readWhitespace","m","readNonZeroDigit","ch","readDecimalDigits","readSignedInteger","ds","sign","sds","readExponentPart","si","readDecimalIntegerLiteral","nzd","readDecimalLiteral1","dil","dot","dds","readDecimalLiteral2","readDecimalLiteral3","readDecimalLiteral","parseBinaryDigits","readBinaryIntegerLiteral","prefix","bds","readOctalDigits","readOctalIntegerLiteral","ods","readHexDigits","readHexIntegerLiteral","hds","readNonDecimalIntegerLiteral","readNumericLiteral","parseLiteral","num","parseParenthesizedExpression","parseExpression","cl","parsePrimaryExpression","parseUnaryExpression","readBinaryOperator","ops","createBinaryOperationExpressionParser","exprParser","firstExpr","nextExpr","parseBinaryOperationExpression","parseEcmaNumberExpression","parseNumber","numberFromUnknown","pv","numberToString","createNumberFormatter","digits","innerFormatter","formatPercentage","stringFromUnknown","formatString","connectValues","primary","secondary","forward","backward","changing","preventFeedback","getStepForKey","baseStep","keys","getVerticalStepKeys","getHorizontalStepKeys","isVerticalArrowKey","isArrowKey","computeOffset$1","rect","PointerHandler","offset","touch","mapRange","start1","end1","start2","end2","getDecimalDigits","constrainRange","loopRange","className$g","NumberTextView","knobElem","guideElem","bodyElem","headElem","tooltipElem","x","aox","adx","NumberTextController","ph","data","dx","className$f","SliderView","trackElem","SliderController","className$e","SliderTextView","sliderElem","textElem","SliderTextController","writePrimitive","parseListOptions","parsePickerLayout","parsePointDimensionParams","normalizeListOptions","items","createListConstraint","findStep","getSuitableDecimalDigits","getBaseStep","getSuitableDraggingScale","base","className$d","CheckboxView","wrapperElem","CheckboxController","createConstraint$6","lc","BooleanInputPlugin","_args","className$c","ColorView","swatchElem","pickerElem","rgbToHslInt","g","rp","gp","bp","cmax","cmin","l","hslToRgbInt","hp","sp","lp","rgbToHsvInt","hsvToRgbInt","vp","hslToHsvInt","sd","hsvToHslInt","removeAlphaComponent","comps","appendAlphaComponent","alpha","MODE_CONVERTER_MAP","getColorMaxComponents","mode","type","loopHueRange","hue","constrainColorComponents","components","ms","convertColorType","from","to","fms","tms","convertColor","intComps","isRgbColorComponent","Color","color","comps1","comps2","opt_mode","rgbComps","className$b","ColorPickerView","hsvElem","svElem","hElem","rgbElem","aElem","apElem","atElem","elems","parseColorType","parseColorInputParams","getBaseStepForColor","forAlpha","extractColorType","equalsStringColorFormat","f1","f2","parseCssNumberOrPercentage","maxValue","ANGLE_TO_DEG_MAP","angle","parseCssNumberOrAngle","unit","parseFunctionalRgbColorComponents","createFunctionalRgbColorParser","parseFunctionalRgbaColorComponents","createFunctionalRgbaColorParser","parseHslColorComponents","createHslColorParser","parseHslaColorComponents","createHslaColorParser","parseHexRgbColorComponents","mRgb","mRrggbb","parseHexRgbColor","parseHexRgbaColorComponents","parseHexRgbaColor","parseObjectRgbColorComponents","createObjectRgbColorParser","parseObjectRgbaColorComponents","createObjectRgbaColorParser","PARSER_AND_RESULT","detectStringColor","prev","detection","detectStringColorFormat","TYPE_TO_PARSERS","createColorStringBindingReader","createColorStringParser","zerofill","comp","hex","colorToHexRgbString","hexes","colorToHexRgbaString","rgbaComps","colorToFunctionalRgbString","opt_type","createFunctionalRgbColorFormatter","colorToFunctionalRgbaString","aFormatter","rgbFormatter","createFunctionalRgbaColorFormatter","colorToFunctionalHslString","formatters","colorToFunctionalHslaString","colorToObjectRgbString","names","createObjectRgbColorFormatter","colorToObjectRgbaString","createObjectRgbaColorFormatter","FORMAT_AND_STRINGIFIERS","findColorStringifier","format","fas","className$a","APaletteView","barElem","colorElem","markerElem","previewElem","leftColor","rightColor","gradientComps","APaletteController","className$9","createModeSelectElement","optElem","ColorTextView","modeElem","modeMarkerElem","textsElem","textViews","compElem","createFormatter$2","createConstraint$5","createComponentController","ColorTextController","cc","ccs","cs","pickedMode","className$8","HPaletteView","HPaletteController","className$7","CANVAS_RESOL","SvPaletteView","canvasElem","ctx","hsvComps","width","imgData","iy","ix","top","SvPaletteController","saturation","dv","ColorPickerController","className$6","ColorSwatchView","ColorSwatchController","ColorController","pickerC","nextTarget","colorFromObject","colorToRgbNumber","colorToRgbaNumber","numberToRgbColor","numberToRgbaColor","colorFromRgbNumber","colorFromRgbaNumber","createColorStringWriter","stringify","createColorNumberWriter","supportsAlpha","colorToNumber","writeRgbaColorObject","writeRgbColorObject","createColorObjectWriter","inValue","shouldSupportAlpha$1","inputParams","createFormatter$1","isForColor","NumberColorInputPlugin","picker","shouldSupportAlpha","createColorObjectReader","createColorObjectFormatter","ObjectColorInputPlugin","StringColorInputPlugin","writer","stringifier","PointNdConstraint","className$5","PointNdTextView","axisElem","createAxisController","PointNdTextController","createStepConstraint","createRangeConstraint","findNumberRange","drc","createConstraint$4","NumberInputPlugin","Point2d","y","Point2dAssembly","className$4","Point2dView","className$3","Point2dPickerView","padElem","svgElem","xAxisElem","yAxisElem","lineElem","px","py","ipy","computeOffset","baseSteps","invertsY","Point2dPickerController","dy","Point2dController","padC","Point3d","z","Point3dAssembly","point3dFromUnknown","writePoint3d","createConstraint$3","createDimensionConstraint","createAxis$2","Point3dInputPlugin","Point4d","w","Point4dAssembly","point4dFromUnknown","writePoint4d","createConstraint$2","createAxis$1","Point4dInputPlugin","createConstraint$1","StringInputPlugin","Constants","className$2","MultiLogView","textareaElem","shouldScroll","lines","MultiLogController","className$1","SingleLogView","lastValue","SingleLogController","BooleanMonitorPlugin","GraphLogView","bounds","maxIndex","points","tx","ty","GraphLogController","createFormatter","createTextMonitor","createGraphMonitor","shouldShowGraph","NumberMonitorPlugin","StringMonitorPlugin","createInputBindingController","valueArgs","reader","createTicker","createMonitorBindingController","bindingArgs","PluginPool","createDefaultPluginPool","Point2dInputPlugin","point2dFromUnknown","writePoint2d","rs","createConstraint","getSuitableMaxDimensionValue","getSuitableMaxValue","xc","yc","xr","yr","createAxis","shouldInvertY","yParams","ListApi","SliderApi","minValue","TextApi","ListBladePlugin","ic","exportPresetJson","targets","importPresetJson","bindings","preset","RootApi","ibc","mbc","RootController","SliderBladePlugin","vc","TextBladePlugin","createDefaultWrapperElement","embedStyle","id","css","styleElem","Pane","opt_config","rootController","parentElem","bundle","VERSION","I","X","Q","it","rt","__awaiter","thisArg","_arguments","generator","adopt","resolve","reject","fulfilled","rejected","clonePrimitive","equalsPrimitive","copyPrimitive","UiConfigMethods","_renderer","ref","prop","path","path1","tar","val","copyOnEqual","res","props","changeArgs","com","um","lastCommand","sameType","cLast","config_1","value_1","props_1","forceOnChange_1","forceOnChange","trackUndo","lastValueRaw","failed","final","same","_d","_e","_f","actions","action","targ","undo","resAction","redo","run","dispatchMode","listener","unbounded","UiConfigRendererBase","autoFrameEvents","methods","undoManager","l2","delta","delay","uuid","old","performDispose","uiConfig","deep","list","uiC","UiConfigRenderer","container","tweakpaneCheckParent","child","tweakPaneMoveToParentIndex","newParent","cont","ind","tpFolderGenerator","lastExpanded","folder1","_2","safeSetProperty","getOrCall","childObjects","ui","rm","domChildren","j","domChild","tpButtonInputGenerator","tpDropdownInputGenerator","children","tpInputGenerator","tpSliderInputGenerator","renderer","proxy","objectHasOwn","oVal","tpVecInputGenerator","pp","tpColorInputGenerator","uiColorSpace","tempColor","tempC","UiConfigRendererTweakpane","autoPostFrame","defaultGenerators","createDiv","createStyles","UI"],"mappings":"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","x_google_ignoreList":[0,1,2]}