@opentui/core 0.1.12 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,28 +9,28 @@
9
9
  "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-ignore untyped from Emscripten\nimport loadYoga from '../binaries/yoga-wasm-base64-esm.js';\nimport wrapAssembly from \"./wrapAssembly.js\";\nconst Yoga = wrapAssembly(await loadYoga());\nexport default Yoga;\nexport * from \"./generated/YGEnums.js\";\n//# sourceMappingURL=index.js.map",
10
10
  "import Yoga, { type Config, type Node as YogaNode } from \"yoga-layout\"\nimport { EventEmitter } from \"events\"\n\n// TrackedNode\n// A TypeScript wrapper for Yoga nodes that tracks indices and maintains parent-child relationships.\n\ninterface NodeMetadata {\n [key: string]: any\n}\n\nclass TrackedNode<T extends NodeMetadata = NodeMetadata> extends EventEmitter {\n private static idCounter = 0\n id: number\n yogaNode: YogaNode\n metadata: T\n parent: TrackedNode<any> | null\n children: TrackedNode<any>[]\n protected _destroyed: boolean = false\n\n // Yoga calculates subpixels and the setMeasureFunc throws all over the place when trying to use it,\n // so we make up for rounding errors by calculating the percentual manually.\n protected _width: number | \"auto\" | `${number}%` = \"auto\"\n protected _height: number | \"auto\" | `${number}%` = \"auto\"\n\n constructor(yogaNode: YogaNode, metadata: T = {} as T) {\n super()\n this.id = TrackedNode.idCounter++\n this.yogaNode = yogaNode\n this.metadata = metadata\n this.parent = null\n this.children = []\n }\n\n parseWidth(width: number | \"auto\" | `${number}%`): number | \"auto\" {\n if (this._destroyed) {\n // Fatal: Something is very wrong (debug why we are trying to parse width after destruction)\n throw new Error(\"Node is destroyed\")\n }\n if (typeof width === \"number\" || width === \"auto\") {\n return width\n }\n if (!this.parent) {\n return this.yogaNode.getComputedWidth()\n }\n if (this.parent._destroyed) {\n // Fatal: Something is very wrong (debug why we are trying to parse width after destruction)\n throw new Error(\"Parent node is destroyed\")\n }\n return Math.floor((this.parent.yogaNode.getComputedWidth() * parseInt(width)) / 100)\n }\n\n parseHeight(height: number | \"auto\" | `${number}%`): number | \"auto\" {\n if (this._destroyed) {\n // Fatal: Something is very wrong (debug why we are trying to parse height after destruction)\n throw new Error(\"Node is destroyed\")\n }\n if (typeof height === \"number\" || height === \"auto\") {\n return height\n }\n if (!this.parent) {\n return this.yogaNode.getComputedHeight()\n }\n if (this.parent._destroyed) {\n // Fatal: Something is very wrong (debug why we are trying to parse height after destruction)\n throw new Error(\"Parent node is destroyed\")\n }\n return Math.floor((this.parent.yogaNode.getComputedHeight() * parseInt(height)) / 100)\n }\n\n setWidth(width: number | \"auto\" | `${number}%`): void {\n this._width = width\n const parsedWidth = this.parseWidth(width)\n if (parsedWidth === \"auto\") {\n this.yogaNode.setWidthAuto()\n } else {\n this.yogaNode.setWidth(parsedWidth)\n }\n }\n\n setHeight(height: number | \"auto\" | `${number}%`): void {\n this._height = height\n const parsedHeight = this.parseHeight(height)\n if (parsedHeight === \"auto\") {\n this.yogaNode.setHeightAuto()\n } else {\n this.yogaNode.setHeight(parsedHeight)\n }\n }\n\n addChild<U extends NodeMetadata>(childNode: TrackedNode<U>): number {\n if (childNode.parent) {\n childNode.parent.removeChild(childNode)\n }\n\n childNode.parent = this\n\n const index = this.children.length\n this.children.push(childNode)\n this.yogaNode.insertChild(childNode.yogaNode, index)\n\n try {\n childNode.yogaNode.setWidth(childNode.parseWidth(childNode._width))\n childNode.yogaNode.setHeight(childNode.parseHeight(childNode._height))\n } catch (e) {\n console.error(\"Error setting width and height\", e)\n }\n\n return index\n }\n\n getChildIndex<U extends NodeMetadata>(childNode: TrackedNode<U>): number {\n return this.children.indexOf(childNode)\n }\n\n removeChild<U extends NodeMetadata>(childNode: TrackedNode<U>): boolean {\n const index = this.children.indexOf(childNode)\n if (index === -1) {\n return false\n }\n\n this.children.splice(index, 1)\n this.yogaNode.removeChild(childNode.yogaNode)\n\n childNode.parent = null\n\n return true\n }\n\n removeChildAtIndex(index: number): TrackedNode<any> | null {\n if (index < 0 || index >= this.children.length) {\n return null\n }\n\n const childNode = this.children[index]\n\n this.children.splice(index, 1)\n this.yogaNode.removeChild(childNode.yogaNode)\n\n childNode.parent = null\n\n return childNode\n }\n\n moveChild<U extends NodeMetadata>(childNode: TrackedNode<U>, newIndex: number): number {\n const currentIndex = this.children.indexOf(childNode)\n if (currentIndex === -1) {\n throw new Error(\"Node is not a child of this parent\")\n }\n\n const boundedNewIndex = Math.max(0, Math.min(newIndex, this.children.length - 1))\n\n if (currentIndex === boundedNewIndex) {\n return currentIndex\n }\n\n this.children.splice(currentIndex, 1)\n this.children.splice(boundedNewIndex, 0, childNode)\n\n this.yogaNode.removeChild(childNode.yogaNode)\n this.yogaNode.insertChild(childNode.yogaNode, boundedNewIndex)\n\n return boundedNewIndex\n }\n\n insertChild<U extends NodeMetadata>(childNode: TrackedNode<U>, index: number): number {\n if (childNode.parent) {\n childNode.parent.removeChild(childNode)\n }\n\n childNode.parent = this\n const boundedIndex = Math.max(0, Math.min(index, this.children.length))\n\n this.children.splice(boundedIndex, 0, childNode)\n this.yogaNode.insertChild(childNode.yogaNode, boundedIndex)\n\n try {\n childNode.yogaNode.setWidth(childNode.parseWidth(childNode._width))\n childNode.yogaNode.setHeight(childNode.parseHeight(childNode._height))\n } catch (e) {\n console.error(\"Error setting width and height\", e)\n }\n\n return boundedIndex\n }\n\n getChildCount(): number {\n return this.children.length\n }\n\n getChildAtIndex(index: number): TrackedNode<any> | null {\n if (index < 0 || index >= this.children.length) {\n return null\n }\n return this.children[index]\n }\n\n setMetadata(key: keyof T, value: T[keyof T]): void {\n this.metadata[key] = value\n }\n\n getMetadata<K extends keyof T>(key: K): T[K] {\n return this.metadata[key]\n }\n\n removeMetadata<K extends keyof T>(key: K): void {\n delete this.metadata[key]\n }\n\n hasChild<U extends NodeMetadata>(childNode: TrackedNode<U>): boolean {\n return this.children.includes(childNode)\n }\n\n destroy(): void {\n if (this._destroyed) {\n return\n }\n if (this.parent) {\n this.parent.removeChild(this)\n }\n try {\n this.yogaNode.free()\n } catch (e) {\n // Might be already freed and will throw an error if we try to free it again\n }\n this._destroyed = true\n }\n}\n\nfunction createTrackedNode<T extends NodeMetadata>(metadata: T = {} as T, yogaConfig?: Config): TrackedNode<T> {\n const yogaNode = Yoga.Node.create(yogaConfig)\n return new TrackedNode<T>(yogaNode, metadata)\n}\n\nexport { TrackedNode, createTrackedNode }\n",
11
11
  "// Copied from https://github.com/enquirer/enquirer/blob/36785f3399a41cd61e9d28d1eb9c2fcd73d69b4c/lib/keypress.js\nimport { Buffer } from \"node:buffer\"\n\nconst metaKeyCodeRe = /^(?:\\x1b)([a-zA-Z0-9])$/\n\nconst fnKeyRe = /^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/\n\nconst keyName: Record<string, string> = {\n /* xterm/gnome ESC O letter */\n OP: \"f1\",\n OQ: \"f2\",\n OR: \"f3\",\n OS: \"f4\",\n /* xterm/rxvt ESC [ number ~ */\n \"[11~\": \"f1\",\n \"[12~\": \"f2\",\n \"[13~\": \"f3\",\n \"[14~\": \"f4\",\n /* from Cygwin and used in libuv */\n \"[[A\": \"f1\",\n \"[[B\": \"f2\",\n \"[[C\": \"f3\",\n \"[[D\": \"f4\",\n \"[[E\": \"f5\",\n /* common */\n \"[15~\": \"f5\",\n \"[17~\": \"f6\",\n \"[18~\": \"f7\",\n \"[19~\": \"f8\",\n \"[20~\": \"f9\",\n \"[21~\": \"f10\",\n \"[23~\": \"f11\",\n \"[24~\": \"f12\",\n /* xterm ESC [ letter */\n \"[A\": \"up\",\n \"[B\": \"down\",\n \"[C\": \"right\",\n \"[D\": \"left\",\n \"[E\": \"clear\",\n \"[F\": \"end\",\n \"[H\": \"home\",\n /* xterm/gnome ESC O letter */\n OA: \"up\",\n OB: \"down\",\n OC: \"right\",\n OD: \"left\",\n OE: \"clear\",\n OF: \"end\",\n OH: \"home\",\n /* xterm/rxvt ESC [ number ~ */\n \"[1~\": \"home\",\n \"[2~\": \"insert\",\n \"[3~\": \"delete\",\n \"[4~\": \"end\",\n \"[5~\": \"pageup\",\n \"[6~\": \"pagedown\",\n /* putty */\n \"[[5~\": \"pageup\",\n \"[[6~\": \"pagedown\",\n /* rxvt */\n \"[7~\": \"home\",\n \"[8~\": \"end\",\n /* rxvt keys with modifiers */\n \"[a\": \"up\",\n \"[b\": \"down\",\n \"[c\": \"right\",\n \"[d\": \"left\",\n \"[e\": \"clear\",\n /* option + arrow keys (old style) */\n f: \"right\",\n b: \"left\",\n p: \"up\",\n n: \"down\",\n\n \"[2$\": \"insert\",\n \"[3$\": \"delete\",\n \"[5$\": \"pageup\",\n \"[6$\": \"pagedown\",\n \"[7$\": \"home\",\n \"[8$\": \"end\",\n\n Oa: \"up\",\n Ob: \"down\",\n Oc: \"right\",\n Od: \"left\",\n Oe: \"clear\",\n\n \"[2^\": \"insert\",\n \"[3^\": \"delete\",\n \"[5^\": \"pageup\",\n \"[6^\": \"pagedown\",\n \"[7^\": \"home\",\n \"[8^\": \"end\",\n /* misc. */\n \"[Z\": \"tab\",\n}\n\nexport const nonAlphanumericKeys = [...Object.values(keyName), \"backspace\"]\n\nconst isShiftKey = (code: string) => {\n return [\"[a\", \"[b\", \"[c\", \"[d\", \"[e\", \"[2$\", \"[3$\", \"[5$\", \"[6$\", \"[7$\", \"[8$\", \"[Z\"].includes(code)\n}\n\nconst isCtrlKey = (code: string) => {\n return [\"Oa\", \"Ob\", \"Oc\", \"Od\", \"Oe\", \"[2^\", \"[3^\", \"[5^\", \"[6^\", \"[7^\", \"[8^\"].includes(code)\n}\n\nexport type ParsedKey = {\n name: string\n ctrl: boolean\n meta: boolean\n shift: boolean\n option: boolean\n sequence: string\n number: boolean\n raw: string\n code?: string\n}\n\nexport const parseKeypress = (s: Buffer | string = \"\"): ParsedKey => {\n let parts\n\n if (Buffer.isBuffer(s)) {\n if (s[0]! > 127 && s[1] === undefined) {\n ;(s[0] as unknown as number) -= 128\n s = \"\\x1b\" + String(s)\n } else {\n s = String(s)\n }\n } else if (s !== undefined && typeof s !== \"string\") {\n s = String(s)\n } else if (!s) {\n s = \"\"\n }\n\n const key: ParsedKey = {\n name: \"\",\n ctrl: false,\n meta: false,\n shift: false,\n option: false,\n number: false,\n sequence: s,\n raw: s,\n }\n\n key.sequence = key.sequence || s || key.name\n\n if (s === \"\\r\") {\n // carriage return\n key.name = \"return\"\n } else if (s === \"\\n\") {\n // enter, should have been called linefeed\n key.name = \"enter\"\n } else if (s === \"\\t\") {\n // tab\n key.name = \"tab\"\n } else if (s === \"\\b\" || s === \"\\x1b\\b\" || s === \"\\x7f\" || s === \"\\x1b\\x7f\") {\n // backspace or ctrl+h\n // On OSX, \\x7f is also backspace\n key.name = \"backspace\"\n key.meta = s.charAt(0) === \"\\x1b\"\n } else if (s === \"\\x1b\" || s === \"\\x1b\\x1b\") {\n // escape key\n key.name = \"escape\"\n key.meta = s.length === 2\n } else if (s === \" \" || s === \"\\x1b \") {\n key.name = \"space\"\n key.meta = s.length === 2\n } else if (s.length === 1 && s <= \"\\x1a\") {\n // ctrl+letter\n key.name = String.fromCharCode(s.charCodeAt(0) + \"a\".charCodeAt(0) - 1)\n key.ctrl = true\n } else if (s.length === 1 && s >= \"0\" && s <= \"9\") {\n // number - keep the actual number character for vim commands\n key.name = s\n key.number = true\n } else if (s.length === 1 && s >= \"a\" && s <= \"z\") {\n // lowercase letter\n key.name = s\n } else if (s.length === 1 && s >= \"A\" && s <= \"Z\") {\n // shift+letter\n key.name = s.toLowerCase()\n key.shift = true\n } else if (s.length === 1) {\n // Special characters (like $, ^, etc.) - preserve the character\n key.name = s\n } else if ((parts = metaKeyCodeRe.exec(s))) {\n // meta+character key\n key.meta = true\n key.shift = /^[A-Z]$/.test(parts[1]!)\n key.name = parts[1]\n } else if ((parts = fnKeyRe.exec(s))) {\n const segs = [...s]\n\n if (segs[0] === \"\\u001b\" && segs[1] === \"\\u001b\") {\n key.option = true\n }\n\n // ansi escape sequence\n // reassemble the key code leaving out leading \\x1b's,\n // the modifier key bitflag and any meaningless \"1;\" sequence\n const code = [parts[1], parts[2], parts[4], parts[6]].filter(Boolean).join(\"\")\n\n const modifier = ((parts[3] || parts[5] || 1) as number) - 1\n\n // Parse the key modifier\n key.ctrl = !!(modifier & 4)\n key.meta = !!(modifier & 10)\n key.shift = !!(modifier & 1)\n key.option = !!(modifier & 2) // Add option/alt modifier detection\n key.code = code\n\n key.name = keyName[code]!\n key.shift = isShiftKey(code) || key.shift\n key.ctrl = isCtrlKey(code) || key.ctrl\n } else if (s === \"\\x1b[3~\") {\n // delete key\n key.name = \"delete\"\n key.meta = false\n key.code = \"[3~\"\n }\n\n return key\n}\n",
12
- "import { EventEmitter } from \"events\"\nimport { parseKeypress } from \"./parse.keypress\"\nimport { singleton } from \"../singleton\"\n\nexport class KeyHandler extends EventEmitter {\n constructor() {\n super()\n\n if (process.stdin.setRawMode) {\n process.stdin.setRawMode(true)\n }\n process.stdin.resume()\n process.stdin.setEncoding(\"utf8\")\n\n process.stdin.on(\"data\", (key: Buffer) => {\n const parsedKey = parseKeypress(key)\n this.emit(\"keypress\", parsedKey)\n })\n }\n\n public destroy(): void {\n process.stdin.removeAllListeners(\"data\")\n }\n}\n\nlet keyHandler: KeyHandler | null = null\n\nexport function getKeyHandler(): KeyHandler {\n if (!keyHandler) {\n keyHandler = singleton(\"KeyHandler\", () => new KeyHandler())\n }\n return keyHandler\n}\n",
12
+ "import { EventEmitter } from \"events\"\nimport { parseKeypress, type ParsedKey } from \"./parse.keypress\"\nimport { singleton } from \"../singleton\"\n\ntype KeyHandlerEventMap = {\n keypress: [ParsedKey]\n}\n\nexport class KeyHandler extends EventEmitter<KeyHandlerEventMap> {\n constructor() {\n super()\n\n if (process.stdin.setRawMode) {\n process.stdin.setRawMode(true)\n }\n process.stdin.resume()\n process.stdin.setEncoding(\"utf8\")\n\n process.stdin.on(\"data\", (key: Buffer) => {\n const parsedKey = parseKeypress(key)\n this.emit(\"keypress\", parsedKey)\n })\n }\n\n public destroy(): void {\n process.stdin.removeAllListeners(\"data\")\n }\n}\n\nlet keyHandler: KeyHandler | null = null\n\nexport function getKeyHandler(): KeyHandler {\n if (!keyHandler) {\n keyHandler = singleton(\"KeyHandler\", () => new KeyHandler())\n }\n return keyHandler\n}\n",
13
13
  "const singletonCacheSymbol = Symbol.for(\"@opentui/core/singleton\")\n\n/**\n * Ensures a value is initialized once per process,\n * persists across Bun hot reloads, and is type-safe.\n */\nexport function singleton<T>(key: string, factory: () => T): T {\n // @ts-expect-error this symbol is only used in this file and is not part of the public API\n const bag = (globalThis[singletonCacheSymbol] ??= {})\n if (!(key in bag)) {\n bag[key] = factory()\n }\n return bag[key] as T\n}\n",
14
14
  "export class RGBA {\n buffer: Float32Array\n\n constructor(buffer: Float32Array) {\n this.buffer = buffer\n }\n\n static fromArray(array: Float32Array) {\n return new RGBA(array)\n }\n\n static fromValues(r: number, g: number, b: number, a: number = 1.0) {\n return new RGBA(new Float32Array([r, g, b, a]))\n }\n\n static fromInts(r: number, g: number, b: number, a: number = 255) {\n return new RGBA(new Float32Array([r / 255, g / 255, b / 255, a / 255]))\n }\n\n static fromHex(hex: string): RGBA {\n return hexToRgb(hex)\n }\n\n toInts(): [number, number, number, number] {\n return [Math.round(this.r * 255), Math.round(this.g * 255), Math.round(this.b * 255), Math.round(this.a * 255)]\n }\n\n get r(): number {\n return this.buffer[0]\n }\n\n set r(value: number) {\n this.buffer[0] = value\n }\n\n get g(): number {\n return this.buffer[1]\n }\n\n set g(value: number) {\n this.buffer[1] = value\n }\n\n get b(): number {\n return this.buffer[2]\n }\n\n set b(value: number) {\n this.buffer[2] = value\n }\n\n get a(): number {\n return this.buffer[3]\n }\n\n set a(value: number) {\n this.buffer[3] = value\n }\n\n map<R>(fn: (value: number) => R) {\n return [fn(this.r), fn(this.g), fn(this.b), fn(this.a)]\n }\n\n toString() {\n return `rgba(${this.r.toFixed(2)}, ${this.g.toFixed(2)}, ${this.b.toFixed(2)}, ${this.a.toFixed(2)})`\n }\n}\n\nexport type ColorInput = string | RGBA\n\nexport function hexToRgb(hex: string): RGBA {\n hex = hex.replace(/^#/, \"\")\n\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]\n }\n\n if (!/^[0-9A-Fa-f]{6}$/.test(hex)) {\n console.warn(`Invalid hex color: ${hex}, defaulting to magenta`)\n return RGBA.fromValues(1, 0, 1, 1)\n }\n\n const r = parseInt(hex.substring(0, 2), 16) / 255\n const g = parseInt(hex.substring(2, 4), 16) / 255\n const b = parseInt(hex.substring(4, 6), 16) / 255\n\n return RGBA.fromValues(r, g, b, 1)\n}\n\nexport function rgbToHex(rgb: RGBA): string {\n return (\n \"#\" +\n [rgb.r, rgb.g, rgb.b]\n .map((x) => {\n const hex = Math.floor(Math.max(0, Math.min(1, x) * 255)).toString(16)\n return hex.length === 1 ? \"0\" + hex : hex\n })\n .join(\"\")\n )\n}\n\nexport function hsvToRgb(h: number, s: number, v: number): RGBA {\n let r = 0,\n g = 0,\n b = 0\n\n const i = Math.floor(h / 60) % 6\n const f = h / 60 - Math.floor(h / 60)\n const p = v * (1 - s)\n const q = v * (1 - f * s)\n const t = v * (1 - (1 - f) * s)\n\n switch (i) {\n case 0:\n r = v\n g = t\n b = p\n break\n case 1:\n r = q\n g = v\n b = p\n break\n case 2:\n r = p\n g = v\n b = t\n break\n case 3:\n r = p\n g = q\n b = v\n break\n case 4:\n r = t\n g = p\n b = v\n break\n case 5:\n r = v\n g = p\n b = q\n break\n }\n\n return RGBA.fromValues(r, g, b, 1)\n}\n\nconst CSS_COLOR_NAMES: Record<string, string> = {\n black: \"#000000\",\n white: \"#FFFFFF\",\n red: \"#FF0000\",\n green: \"#008000\",\n blue: \"#0000FF\",\n yellow: \"#FFFF00\",\n cyan: \"#00FFFF\",\n magenta: \"#FF00FF\",\n silver: \"#C0C0C0\",\n gray: \"#808080\",\n grey: \"#808080\",\n maroon: \"#800000\",\n olive: \"#808000\",\n lime: \"#00FF00\",\n aqua: \"#00FFFF\",\n teal: \"#008080\",\n navy: \"#000080\",\n fuchsia: \"#FF00FF\",\n purple: \"#800080\",\n orange: \"#FFA500\",\n brightblack: \"#666666\",\n brightred: \"#FF6666\",\n brightgreen: \"#66FF66\",\n brightblue: \"#6666FF\",\n brightyellow: \"#FFFF66\",\n brightcyan: \"#66FFFF\",\n brightmagenta: \"#FF66FF\",\n brightwhite: \"#FFFFFF\",\n}\n\nexport function parseColor(color: ColorInput): RGBA {\n if (typeof color === \"string\") {\n const lowerColor = color.toLowerCase()\n\n if (lowerColor === \"transparent\") {\n return RGBA.fromValues(0, 0, 0, 0)\n }\n\n if (CSS_COLOR_NAMES[lowerColor]) {\n return hexToRgb(CSS_COLOR_NAMES[lowerColor])\n }\n\n return hexToRgb(color)\n }\n return color\n}\n",
15
15
  "import { OptimizedBuffer } from \"../buffer\"\nimport { RGBA } from \"./RGBA\"\nimport tiny from \"./fonts/tiny.json\"\nimport block from \"./fonts/block.json\"\nimport shade from \"./fonts/shade.json\"\nimport slick from \"./fonts/slick.json\"\n\n/*\n * Renders ASCII fonts to a buffer.\n * Font definitions plugged from cfonts - https://github.com/dominikwilkowski/cfonts\n */\n\nexport type ASCIIFontName = \"tiny\" | \"block\" | \"shade\" | \"slick\"\n\nexport const fonts = {\n tiny,\n block,\n shade,\n slick,\n}\n\ntype FontSegment = {\n text: string\n colorIndex: number\n}\n\ntype FontDefinition = {\n name: string\n lines: number\n letterspace_size: number\n letterspace: string[]\n colors?: number\n chars: Record<string, string[]>\n}\n\ntype ParsedFontDefinition = {\n name: string\n lines: number\n letterspace_size: number\n letterspace: string[]\n colors: number\n chars: Record<string, FontSegment[][]>\n}\n\nconst parsedFonts: Record<string, ParsedFontDefinition> = {}\n\nfunction parseColorTags(text: string): FontSegment[] {\n const segments: FontSegment[] = []\n let currentIndex = 0\n\n const colorTagRegex = /<c(\\d+)>(.*?)<\\/c\\d+>/g\n let lastIndex = 0\n let match\n\n while ((match = colorTagRegex.exec(text)) !== null) {\n if (match.index > lastIndex) {\n const plainText = text.slice(lastIndex, match.index)\n if (plainText) {\n segments.push({ text: plainText, colorIndex: 0 })\n }\n }\n\n const colorIndex = parseInt(match[1]) - 1\n const taggedText = match[2]\n segments.push({ text: taggedText, colorIndex: Math.max(0, colorIndex) })\n\n lastIndex = match.index + match[0].length\n }\n\n if (lastIndex < text.length) {\n const remainingText = text.slice(lastIndex)\n if (remainingText) {\n segments.push({ text: remainingText, colorIndex: 0 })\n }\n }\n\n return segments\n}\n\nfunction getParsedFont(fontKey: keyof typeof fonts): ParsedFontDefinition {\n if (!parsedFonts[fontKey]) {\n const fontDef = fonts[fontKey] as FontDefinition\n const parsedChars: Record<string, FontSegment[][]> = {}\n\n for (const [char, lines] of Object.entries(fontDef.chars)) {\n parsedChars[char] = lines.map((line) => parseColorTags(line))\n }\n\n parsedFonts[fontKey] = {\n ...fontDef,\n colors: fontDef.colors || 1,\n chars: parsedChars,\n }\n }\n\n return parsedFonts[fontKey]\n}\n\nexport function measureText({ text, font = \"tiny\" }: { text: string; font?: keyof typeof fonts }): {\n width: number\n height: number\n} {\n const fontDef = getParsedFont(font)\n if (!fontDef) {\n console.warn(`Font '${font}' not found`)\n return { width: 0, height: 0 }\n }\n\n let currentX = 0\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i].toUpperCase()\n const charDef = fontDef.chars[char]\n\n if (!charDef) {\n const spaceChar = fontDef.chars[\" \"]\n if (spaceChar && spaceChar[0]) {\n let spaceWidth = 0\n for (const segment of spaceChar[0]) {\n spaceWidth += segment.text.length\n }\n currentX += spaceWidth\n } else {\n currentX += 1\n }\n continue\n }\n\n let charWidth = 0\n if (charDef[0]) {\n for (const segment of charDef[0]) {\n charWidth += segment.text.length\n }\n }\n\n currentX += charWidth\n\n if (i < text.length - 1) {\n currentX += fontDef.letterspace_size\n }\n }\n\n return {\n width: currentX,\n height: fontDef.lines,\n }\n}\n\nexport function getCharacterPositions(text: string, font: keyof typeof fonts = \"tiny\"): number[] {\n const fontDef = getParsedFont(font)\n if (!fontDef) {\n return [0]\n }\n\n const positions: number[] = [0]\n let currentX = 0\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i].toUpperCase()\n const charDef = fontDef.chars[char]\n\n let charWidth = 0\n if (!charDef) {\n const spaceChar = fontDef.chars[\" \"]\n if (spaceChar && spaceChar[0]) {\n for (const segment of spaceChar[0]) {\n charWidth += segment.text.length\n }\n } else {\n charWidth = 1\n }\n } else if (charDef[0]) {\n for (const segment of charDef[0]) {\n charWidth += segment.text.length\n }\n }\n\n currentX += charWidth\n\n if (i < text.length - 1) {\n currentX += fontDef.letterspace_size\n }\n\n positions.push(currentX)\n }\n\n return positions\n}\n\nexport function coordinateToCharacterIndex(x: number, text: string, font: keyof typeof fonts = \"tiny\"): number {\n const positions = getCharacterPositions(text, font)\n\n if (x < 0) {\n return 0\n }\n\n for (let i = 0; i < positions.length - 1; i++) {\n const currentPos = positions[i]\n const nextPos = positions[i + 1]\n\n if (x >= currentPos && x < nextPos) {\n const charMidpoint = currentPos + (nextPos - currentPos) / 2\n return x < charMidpoint ? i : i + 1\n }\n }\n\n if (positions.length > 0 && x >= positions[positions.length - 1]) {\n return text.length\n }\n\n return 0\n}\n\nexport function renderFontToFrameBuffer(\n buffer: OptimizedBuffer,\n {\n text,\n x = 0,\n y = 0,\n fg = [RGBA.fromInts(255, 255, 255, 255)],\n bg = RGBA.fromInts(0, 0, 0, 255),\n font = \"tiny\",\n }: {\n text: string\n x?: number\n y?: number\n fg?: RGBA | RGBA[]\n bg?: RGBA\n font?: keyof typeof fonts\n },\n): { width: number; height: number } {\n const width = buffer.width\n const height = buffer.height\n\n const fontDef = getParsedFont(font)\n if (!fontDef) {\n console.warn(`Font '${font}' not found`)\n return { width: 0, height: 0 }\n }\n\n const colors = Array.isArray(fg) ? fg : [fg]\n\n if (y < 0 || y + fontDef.lines > height) {\n return { width: 0, height: fontDef.lines }\n }\n\n let currentX = x\n const startX = x\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i].toUpperCase()\n const charDef = fontDef.chars[char]\n\n if (!charDef) {\n const spaceChar = fontDef.chars[\" \"]\n if (spaceChar && spaceChar[0]) {\n let spaceWidth = 0\n for (const segment of spaceChar[0]) {\n spaceWidth += segment.text.length\n }\n currentX += spaceWidth\n } else {\n currentX += 1\n }\n continue\n }\n\n let charWidth = 0\n if (charDef[0]) {\n for (const segment of charDef[0]) {\n charWidth += segment.text.length\n }\n }\n\n if (currentX >= width) break\n if (currentX + charWidth < 0) {\n currentX += charWidth + fontDef.letterspace_size\n continue\n }\n\n for (let lineIdx = 0; lineIdx < fontDef.lines && lineIdx < charDef.length; lineIdx++) {\n const segments = charDef[lineIdx]\n const renderY = y + lineIdx\n\n if (renderY >= 0 && renderY < height) {\n let segmentX = currentX\n\n for (const segment of segments) {\n const segmentColor = colors[segment.colorIndex] || colors[0]\n\n for (let charIdx = 0; charIdx < segment.text.length; charIdx++) {\n const renderX = segmentX + charIdx\n\n if (renderX >= 0 && renderX < width) {\n const fontChar = segment.text[charIdx]\n if (fontChar !== \" \") {\n buffer.setCell(renderX, renderY, fontChar, segmentColor, bg)\n }\n }\n }\n\n segmentX += segment.text.length\n }\n }\n }\n\n currentX += charWidth\n\n if (i < text.length - 1) {\n currentX += fontDef.letterspace_size\n }\n }\n\n return {\n width: currentX - startX,\n height: fontDef.lines,\n }\n}\n",
16
- "import type { RGBA } from \"./lib/RGBA\"\n\nexport const TextAttributes = {\n NONE: 0,\n BOLD: 1 << 0, // 1\n DIM: 1 << 1, // 2\n ITALIC: 1 << 2, // 4\n UNDERLINE: 1 << 3, // 8\n BLINK: 1 << 4, // 16\n INVERSE: 1 << 5, // 32\n HIDDEN: 1 << 6, // 64\n STRIKETHROUGH: 1 << 7, // 128\n}\n\nexport type CursorStyle = \"block\" | \"line\" | \"underline\"\n\nexport enum DebugOverlayCorner {\n topLeft = 0,\n topRight = 1,\n bottomLeft = 2,\n bottomRight = 3,\n}\n\nexport type WidthMethod = \"wcwidth\" | \"unicode\"\n\nexport interface RenderContext {\n addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void\n width: number\n height: number\n needsUpdate: () => void\n setCursorPosition: (x: number, y: number, visible: boolean) => void\n setCursorStyle: (style: CursorStyle, blinking: boolean) => void\n setCursorColor: (color: RGBA) => void\n widthMethod: WidthMethod\n capabilities: any | null\n requestLive: () => void\n dropLive: () => void\n}\n\nexport interface SelectionState {\n anchor: { x: number; y: number }\n focus: { x: number; y: number }\n isActive: boolean\n isSelecting: boolean\n}\n",
16
+ "import type { RGBA } from \"./lib/RGBA\"\n\nexport const TextAttributes = {\n NONE: 0,\n BOLD: 1 << 0, // 1\n DIM: 1 << 1, // 2\n ITALIC: 1 << 2, // 4\n UNDERLINE: 1 << 3, // 8\n BLINK: 1 << 4, // 16\n INVERSE: 1 << 5, // 32\n HIDDEN: 1 << 6, // 64\n STRIKETHROUGH: 1 << 7, // 128\n}\n\nexport type CursorStyle = \"block\" | \"line\" | \"underline\"\n\nexport enum DebugOverlayCorner {\n topLeft = 0,\n topRight = 1,\n bottomLeft = 2,\n bottomRight = 3,\n}\n\nexport type WidthMethod = \"wcwidth\" | \"unicode\"\n\nexport interface RenderContext {\n addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void\n width: number\n height: number\n requestRender: () => void\n setCursorPosition: (x: number, y: number, visible: boolean) => void\n setCursorStyle: (style: CursorStyle, blinking: boolean) => void\n setCursorColor: (color: RGBA) => void\n widthMethod: WidthMethod\n capabilities: any | null\n requestLive: () => void\n dropLive: () => void\n}\n\nexport interface SelectionState {\n anchor: { x: number; y: number }\n focus: { x: number; y: number }\n isActive: boolean\n isSelecting: boolean\n}\n",
17
17
  "import { TextAttributes } from \"./types\"\n\nexport function createTextAttributes({\n bold = false,\n italic = false,\n underline = false,\n dim = false,\n blink = false,\n inverse = false,\n hidden = false,\n strikethrough = false,\n}: {\n bold?: boolean\n italic?: boolean\n underline?: boolean\n dim?: boolean\n blink?: boolean\n inverse?: boolean\n hidden?: boolean\n strikethrough?: boolean\n} = {}): number {\n let attributes = TextAttributes.NONE\n\n if (bold) attributes |= TextAttributes.BOLD\n if (italic) attributes |= TextAttributes.ITALIC\n if (underline) attributes |= TextAttributes.UNDERLINE\n if (dim) attributes |= TextAttributes.DIM\n if (blink) attributes |= TextAttributes.BLINK\n if (inverse) attributes |= TextAttributes.INVERSE\n if (hidden) attributes |= TextAttributes.HIDDEN\n if (strikethrough) attributes |= TextAttributes.STRIKETHROUGH\n\n return attributes\n}\n",
18
18
  "import type { TextChunk } from \"../text-buffer\"\nimport { createTextAttributes } from \"../utils\"\nimport { parseColor, type ColorInput } from \"./RGBA\"\n\nexport type Color = ColorInput\nconst textEncoder = new TextEncoder()\n\nexport interface StyleAttrs {\n fg?: Color\n bg?: Color\n bold?: boolean\n italic?: boolean\n underline?: boolean\n strikethrough?: boolean\n dim?: boolean\n reverse?: boolean\n blink?: boolean\n}\n\nexport class StyledText {\n public readonly chunks: TextChunk[]\n // TODO: plaintext should not be needed anymore when selection moved to native\n private _plainText: string = \"\"\n\n constructor(chunks: TextChunk[]) {\n this.chunks = chunks\n\n for (let i = 0; i < chunks.length; i++) {\n this._plainText += chunks[i].plainText\n }\n }\n\n toString(): string {\n return this._plainText\n }\n\n private static _createInstance(chunks: TextChunk[], plainText: string): StyledText {\n const newInstance = Object.create(StyledText.prototype)\n newInstance.chunks = chunks\n newInstance._plainText = plainText\n return newInstance\n }\n\n private static _chunksToPlainText(chunks: TextChunk[]): string {\n let plainText = \"\"\n for (const chunk of chunks) {\n plainText += chunk.plainText\n }\n return plainText\n }\n\n insert(chunk: TextChunk, index?: number): StyledText {\n const originalLength = this.chunks.length\n let newChunks: TextChunk[]\n let newPlainText: string\n\n if (index === undefined) {\n newChunks = [...this.chunks, chunk]\n newPlainText = this._plainText + chunk.plainText\n } else if (index === originalLength) {\n newChunks = [...this.chunks, chunk]\n newPlainText = this._plainText + chunk.plainText\n } else {\n newChunks = [...this.chunks.slice(0, index), chunk, ...this.chunks.slice(index)]\n newPlainText = StyledText._chunksToPlainText(newChunks)\n }\n\n return StyledText._createInstance(newChunks, newPlainText)\n }\n\n remove(chunk: TextChunk): StyledText {\n const originalLength = this.chunks.length\n const index = this.chunks.indexOf(chunk)\n if (index === -1) return this\n\n let newChunks: TextChunk[]\n let newPlainText: string\n\n if (index === originalLength - 1) {\n newChunks = this.chunks.slice(0, -1)\n newPlainText = this._plainText.slice(0, this._plainText.length - chunk.plainText.length)\n } else {\n newChunks = [...this.chunks.slice(0, index), ...this.chunks.slice(index + 1)]\n newPlainText = StyledText._chunksToPlainText(newChunks)\n }\n\n return StyledText._createInstance(newChunks, newPlainText)\n }\n\n replace(chunk: TextChunk, oldChunk: TextChunk): StyledText {\n const index = this.chunks.indexOf(oldChunk)\n if (index === -1) return this\n\n let newChunks: TextChunk[]\n let newPlainText: string\n\n if (index === this.chunks.length - 1) {\n newChunks = [...this.chunks.slice(0, -1), chunk]\n newPlainText = this._plainText.slice(0, this._plainText.length - oldChunk.plainText.length) + chunk.plainText\n } else {\n newChunks = [...this.chunks.slice(0, index), chunk, ...this.chunks.slice(index + 1)]\n newPlainText = StyledText._chunksToPlainText(newChunks)\n }\n\n return StyledText._createInstance(newChunks, newPlainText)\n }\n}\n\nexport function stringToStyledText(content: string): StyledText {\n const textEncoder = new TextEncoder()\n const chunk = {\n __isChunk: true as const,\n text: textEncoder.encode(content),\n plainText: content,\n }\n return new StyledText([chunk])\n}\n\nexport type StylableInput = string | number | boolean | TextChunk\n\nconst templateCache = new WeakMap<TemplateStringsArray, (TextChunk | null)[]>()\n\nfunction applyStyle(input: StylableInput, style: StyleAttrs): TextChunk {\n if (typeof input === \"object\" && \"__isChunk\" in input) {\n const existingChunk = input as TextChunk\n\n const fg = style.fg ? parseColor(style.fg) : existingChunk.fg\n const bg = style.bg ? parseColor(style.bg) : existingChunk.bg\n\n const newAttrs = createTextAttributes(style)\n const mergedAttrs = existingChunk.attributes ? existingChunk.attributes | newAttrs : newAttrs\n\n return {\n __isChunk: true,\n text: existingChunk.text,\n plainText: existingChunk.plainText,\n fg,\n bg,\n attributes: mergedAttrs,\n }\n } else {\n const plainTextStr = String(input)\n const text = textEncoder.encode(plainTextStr)\n const fg = style.fg ? parseColor(style.fg) : undefined\n const bg = style.bg ? parseColor(style.bg) : undefined\n const attributes = createTextAttributes(style)\n\n return {\n __isChunk: true,\n text,\n plainText: plainTextStr,\n fg,\n bg,\n attributes,\n }\n }\n}\n\n// Color functions\nexport const black = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"black\" })\nexport const red = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"red\" })\nexport const green = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"green\" })\nexport const yellow = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"yellow\" })\nexport const blue = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"blue\" })\nexport const magenta = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"magenta\" })\nexport const cyan = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"cyan\" })\nexport const white = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"white\" })\n\n// Bright color functions\nexport const brightBlack = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightBlack\" })\nexport const brightRed = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightRed\" })\nexport const brightGreen = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightGreen\" })\nexport const brightYellow = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightYellow\" })\nexport const brightBlue = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightBlue\" })\nexport const brightMagenta = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightMagenta\" })\nexport const brightCyan = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightCyan\" })\nexport const brightWhite = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightWhite\" })\n\n// Background color functions\nexport const bgBlack = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"black\" })\nexport const bgRed = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"red\" })\nexport const bgGreen = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"green\" })\nexport const bgYellow = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"yellow\" })\nexport const bgBlue = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"blue\" })\nexport const bgMagenta = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"magenta\" })\nexport const bgCyan = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"cyan\" })\nexport const bgWhite = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"white\" })\n\n// Style functions\nexport const bold = (input: StylableInput): TextChunk => applyStyle(input, { bold: true })\nexport const italic = (input: StylableInput): TextChunk => applyStyle(input, { italic: true })\nexport const underline = (input: StylableInput): TextChunk => applyStyle(input, { underline: true })\nexport const strikethrough = (input: StylableInput): TextChunk => applyStyle(input, { strikethrough: true })\nexport const dim = (input: StylableInput): TextChunk => applyStyle(input, { dim: true })\nexport const reverse = (input: StylableInput): TextChunk => applyStyle(input, { reverse: true })\nexport const blink = (input: StylableInput): TextChunk => applyStyle(input, { blink: true })\n\n// Custom color functions\nexport const fg =\n (color: Color) =>\n (input: StylableInput): TextChunk =>\n applyStyle(input, { fg: color })\nexport const bg =\n (color: Color) =>\n (input: StylableInput): TextChunk =>\n applyStyle(input, { bg: color })\n\n/**\n * Template literal handler for styled text (non-cached version).\n * Returns a StyledText object containing chunks of text with optional styles.\n */\nexport function tn(strings: TemplateStringsArray, ...values: StylableInput[]): StyledText {\n const chunks: TextChunk[] = []\n let length = 0\n let plainText = \"\"\n\n for (let i = 0; i < strings.length; i++) {\n const raw = strings[i]\n\n if (raw) {\n chunks.push({\n __isChunk: true,\n text: textEncoder.encode(raw),\n plainText: raw,\n attributes: 0,\n })\n length += raw.length\n plainText += raw\n }\n\n const val = values[i]\n if (typeof val === \"object\" && \"__isChunk\" in val) {\n chunks.push(val as TextChunk)\n length += (val as TextChunk).plainText.length\n plainText += (val as TextChunk).plainText\n } else if (val !== undefined) {\n const plainTextStr = String(val)\n chunks.push({\n __isChunk: true,\n text: textEncoder.encode(plainTextStr),\n plainText: plainTextStr,\n attributes: 0,\n })\n length += plainTextStr.length\n plainText += plainTextStr\n }\n }\n\n return new StyledText(chunks)\n}\n\n/**\n * Template literal handler for styled text (cached version).\n * Returns a StyledText object containing chunks of text with optional styles.\n * Uses caching to avoid re-encoding the same template strings.\n */\nexport function t(strings: TemplateStringsArray, ...values: StylableInput[]): StyledText {\n let cachedStringChunks = templateCache.get(strings)\n let length = 0\n let plainText = \"\"\n\n if (!cachedStringChunks) {\n cachedStringChunks = []\n for (let i = 0; i < strings.length; i++) {\n const raw = strings[i]\n if (raw) {\n cachedStringChunks.push({\n __isChunk: true,\n text: textEncoder.encode(raw),\n plainText: raw,\n attributes: 0,\n })\n } else {\n cachedStringChunks.push(null)\n }\n }\n templateCache.set(strings, cachedStringChunks)\n }\n\n const chunks: TextChunk[] = []\n\n for (let i = 0; i < strings.length; i++) {\n const stringChunk = cachedStringChunks[i]\n if (stringChunk) {\n chunks.push(stringChunk)\n length += stringChunk.plainText.length\n plainText += stringChunk.plainText\n }\n\n const val = values[i]\n if (typeof val === \"object\" && \"__isChunk\" in val) {\n chunks.push(val as TextChunk)\n length += (val as TextChunk).plainText.length\n plainText += (val as TextChunk).plainText\n } else if (val !== undefined) {\n const plainTextStr = String(val)\n chunks.push({\n __isChunk: true,\n text: textEncoder.encode(plainTextStr),\n plainText: plainTextStr,\n attributes: 0,\n })\n length += plainTextStr.length\n plainText += plainTextStr\n }\n }\n\n return new StyledText(chunks)\n}\n",
19
19
  "import type { TextChunk } from \"../text-buffer\"\nimport { RGBA } from \"./RGBA\"\nimport { createTextAttributes } from \"../utils\"\nimport { StyledText } from \"./styled-text\"\n\nexport interface HASTText {\n type: \"text\"\n value: string\n}\n\nexport interface HASTElement {\n type: \"element\"\n tagName: string\n properties?: {\n className?: string\n }\n children: HASTNode[]\n}\n\nexport type HASTNode = HASTText | HASTElement\n\nexport interface StyleDefinition {\n fg?: RGBA\n bg?: RGBA\n bold?: boolean\n italic?: boolean\n underline?: boolean\n dim?: boolean\n}\n\ninterface MergedStyle {\n fg?: RGBA\n bg?: RGBA\n attributes: number\n}\n\nexport class SyntaxStyle {\n private styles: Record<string, StyleDefinition>\n private mergedStyleCache: Map<string, MergedStyle>\n\n constructor(styles: Record<string, StyleDefinition>) {\n this.styles = styles\n this.mergedStyleCache = new Map()\n }\n\n mergeStyles(...styleNames: string[]): MergedStyle {\n const cacheKey = styleNames.join(\":\")\n const cached = this.mergedStyleCache.get(cacheKey)\n if (cached) return cached\n\n const styleDefinition: StyleDefinition = {}\n\n for (const name of styleNames) {\n const style = this.styles[name]\n if (!style) continue\n\n if (style.fg) styleDefinition.fg = style.fg\n if (style.bg) styleDefinition.bg = style.bg\n if (style.bold !== undefined) styleDefinition.bold = style.bold\n if (style.italic !== undefined) styleDefinition.italic = style.italic\n if (style.underline !== undefined) styleDefinition.underline = style.underline\n if (style.dim !== undefined) styleDefinition.dim = style.dim\n }\n\n const attributes = createTextAttributes({\n bold: styleDefinition.bold,\n italic: styleDefinition.italic,\n underline: styleDefinition.underline,\n dim: styleDefinition.dim,\n })\n\n const merged: MergedStyle = {\n fg: styleDefinition.fg,\n bg: styleDefinition.bg,\n attributes,\n }\n\n this.mergedStyleCache.set(cacheKey, merged)\n\n return merged\n }\n\n clearCache(): void {\n this.mergedStyleCache.clear()\n }\n\n getCacheSize(): number {\n return this.mergedStyleCache.size\n }\n}\n\nconst textEncoder = new TextEncoder()\n\nfunction hastToTextChunks(node: HASTNode, syntaxStyle: SyntaxStyle, parentStyles: string[] = []): TextChunk[] {\n const chunks: TextChunk[] = []\n\n if (node.type === \"text\") {\n const stylesToMerge = parentStyles.length > 0 ? parentStyles : [\"default\"]\n const mergedStyle = syntaxStyle.mergeStyles(...stylesToMerge)\n\n chunks.push({\n __isChunk: true,\n text: textEncoder.encode(node.value),\n plainText: node.value,\n fg: mergedStyle.fg,\n bg: mergedStyle.bg,\n attributes: mergedStyle.attributes,\n })\n } else if (node.type === \"element\") {\n let currentStyles = [...parentStyles]\n\n if (node.properties?.className) {\n const classes = node.properties.className.split(\" \")\n\n for (const cls of classes) {\n currentStyles.push(cls)\n }\n }\n\n for (const child of node.children) {\n chunks.push(...hastToTextChunks(child, syntaxStyle, currentStyles))\n }\n }\n\n return chunks\n}\n\nexport function hastToStyledText(hast: HASTNode, syntaxStyle: SyntaxStyle): StyledText {\n const chunks = hastToTextChunks(hast, syntaxStyle)\n return new StyledText(chunks)\n}\n",
20
20
  "import {\n BoxSizing,\n Align,\n Dimension,\n Direction,\n Display,\n Edge,\n FlexDirection,\n Gutter,\n Justify,\n LogLevel,\n MeasureMode,\n Overflow,\n PositionType,\n Unit,\n Wrap,\n} from \"yoga-layout\"\n\nexport type AlignString =\n | \"auto\"\n | \"flex-start\"\n | \"center\"\n | \"flex-end\"\n | \"stretch\"\n | \"baseline\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\"\nexport type BoxSizingString = \"border-box\" | \"content-box\"\nexport type DimensionString = \"width\" | \"height\"\nexport type DirectionString = \"inherit\" | \"ltr\" | \"rtl\"\nexport type DisplayString = \"flex\" | \"none\" | \"contents\"\nexport type EdgeString = \"left\" | \"top\" | \"right\" | \"bottom\" | \"start\" | \"end\" | \"horizontal\" | \"vertical\" | \"all\"\nexport type FlexDirectionString = \"column\" | \"column-reverse\" | \"row\" | \"row-reverse\"\nexport type GutterString = \"column\" | \"row\" | \"all\"\nexport type JustifyString = \"flex-start\" | \"center\" | \"flex-end\" | \"space-between\" | \"space-around\" | \"space-evenly\"\nexport type LogLevelString = \"error\" | \"warn\" | \"info\" | \"debug\" | \"verbose\" | \"fatal\"\nexport type MeasureModeString = \"undefined\" | \"exactly\" | \"at-most\"\nexport type OverflowString = \"visible\" | \"hidden\" | \"scroll\"\nexport type PositionTypeString = \"static\" | \"relative\" | \"absolute\"\nexport type UnitString = \"undefined\" | \"point\" | \"percent\" | \"auto\"\nexport type WrapString = \"no-wrap\" | \"wrap\" | \"wrap-reverse\"\n\nexport function parseAlign(value: string): Align {\n switch (value.toLowerCase()) {\n case \"auto\":\n return Align.Auto\n case \"flex-start\":\n return Align.FlexStart\n case \"center\":\n return Align.Center\n case \"flex-end\":\n return Align.FlexEnd\n case \"stretch\":\n return Align.Stretch\n case \"baseline\":\n return Align.Baseline\n case \"space-between\":\n return Align.SpaceBetween\n case \"space-around\":\n return Align.SpaceAround\n case \"space-evenly\":\n return Align.SpaceEvenly\n default:\n return Align.Auto\n }\n}\n\nexport function parseBoxSizing(value: string): BoxSizing {\n switch (value.toLowerCase()) {\n case \"border-box\":\n return BoxSizing.BorderBox\n case \"content-box\":\n return BoxSizing.ContentBox\n default:\n return BoxSizing.BorderBox\n }\n}\n\nexport function parseDimension(value: string): Dimension {\n switch (value.toLowerCase()) {\n case \"width\":\n return Dimension.Width\n case \"height\":\n return Dimension.Height\n default:\n return Dimension.Width\n }\n}\n\nexport function parseDirection(value: string): Direction {\n switch (value.toLowerCase()) {\n case \"inherit\":\n return Direction.Inherit\n case \"ltr\":\n return Direction.LTR\n case \"rtl\":\n return Direction.RTL\n default:\n return Direction.LTR\n }\n}\n\nexport function parseDisplay(value: string): Display {\n switch (value.toLowerCase()) {\n case \"flex\":\n return Display.Flex\n case \"none\":\n return Display.None\n case \"contents\":\n return Display.Contents\n default:\n return Display.Flex\n }\n}\n\nexport function parseEdge(value: string): Edge {\n switch (value.toLowerCase()) {\n case \"left\":\n return Edge.Left\n case \"top\":\n return Edge.Top\n case \"right\":\n return Edge.Right\n case \"bottom\":\n return Edge.Bottom\n case \"start\":\n return Edge.Start\n case \"end\":\n return Edge.End\n case \"horizontal\":\n return Edge.Horizontal\n case \"vertical\":\n return Edge.Vertical\n case \"all\":\n return Edge.All\n default:\n return Edge.All\n }\n}\n\nexport function parseFlexDirection(value: string): FlexDirection {\n switch (value.toLowerCase()) {\n case \"column\":\n return FlexDirection.Column\n case \"column-reverse\":\n return FlexDirection.ColumnReverse\n case \"row\":\n return FlexDirection.Row\n case \"row-reverse\":\n return FlexDirection.RowReverse\n default:\n return FlexDirection.Column\n }\n}\n\nexport function parseGutter(value: string): Gutter {\n switch (value.toLowerCase()) {\n case \"column\":\n return Gutter.Column\n case \"row\":\n return Gutter.Row\n case \"all\":\n return Gutter.All\n default:\n return Gutter.All\n }\n}\n\nexport function parseJustify(value: string): Justify {\n switch (value.toLowerCase()) {\n case \"flex-start\":\n return Justify.FlexStart\n case \"center\":\n return Justify.Center\n case \"flex-end\":\n return Justify.FlexEnd\n case \"space-between\":\n return Justify.SpaceBetween\n case \"space-around\":\n return Justify.SpaceAround\n case \"space-evenly\":\n return Justify.SpaceEvenly\n default:\n return Justify.FlexStart\n }\n}\n\nexport function parseLogLevel(value: string): LogLevel {\n switch (value.toLowerCase()) {\n case \"error\":\n return LogLevel.Error\n case \"warn\":\n return LogLevel.Warn\n case \"info\":\n return LogLevel.Info\n case \"debug\":\n return LogLevel.Debug\n case \"verbose\":\n return LogLevel.Verbose\n case \"fatal\":\n return LogLevel.Fatal\n default:\n return LogLevel.Info\n }\n}\n\nexport function parseMeasureMode(value: string): MeasureMode {\n switch (value.toLowerCase()) {\n case \"undefined\":\n return MeasureMode.Undefined\n case \"exactly\":\n return MeasureMode.Exactly\n case \"at-most\":\n return MeasureMode.AtMost\n default:\n return MeasureMode.Undefined\n }\n}\n\nexport function parseOverflow(value: string): Overflow {\n switch (value.toLowerCase()) {\n case \"visible\":\n return Overflow.Visible\n case \"hidden\":\n return Overflow.Hidden\n case \"scroll\":\n return Overflow.Scroll\n default:\n return Overflow.Visible\n }\n}\n\nexport function parsePositionType(value: string): PositionType {\n switch (value.toLowerCase()) {\n case \"static\":\n return PositionType.Static\n case \"relative\":\n return PositionType.Relative\n case \"absolute\":\n return PositionType.Absolute\n default:\n return PositionType.Static\n }\n}\n\nexport function parseUnit(value: string): Unit {\n switch (value.toLowerCase()) {\n case \"undefined\":\n return Unit.Undefined\n case \"point\":\n return Unit.Point\n case \"percent\":\n return Unit.Percent\n case \"auto\":\n return Unit.Auto\n default:\n return Unit.Point\n }\n}\n\nexport function parseWrap(value: string): Wrap {\n switch (value.toLowerCase()) {\n case \"no-wrap\":\n return Wrap.NoWrap\n case \"wrap\":\n return Wrap.Wrap\n case \"wrap-reverse\":\n return Wrap.WrapReverse\n default:\n return Wrap.NoWrap\n }\n}\n",
21
21
  "export type MouseEventType = \"down\" | \"up\" | \"move\" | \"drag\" | \"drag-end\" | \"drop\" | \"over\" | \"out\" | \"scroll\"\n\nexport interface ScrollInfo {\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n delta: number\n}\n\nexport type RawMouseEvent = {\n type: MouseEventType\n button: number\n x: number\n y: number\n modifiers: { shift: boolean; alt: boolean; ctrl: boolean }\n scroll?: ScrollInfo\n}\n\nexport class MouseParser {\n private mouseButtonsPressed = new Set<number>()\n\n private static readonly SCROLL_DIRECTIONS: Record<number, \"up\" | \"down\" | \"left\" | \"right\"> = {\n 64: \"up\",\n 65: \"down\",\n 66: \"left\",\n 67: \"right\",\n }\n\n public reset(): void {\n this.mouseButtonsPressed.clear()\n }\n\n public parseMouseEvent(data: Buffer): RawMouseEvent | null {\n const str = data.toString()\n // Parse SGR mouse mode: \\x1b[<b;x;yM or \\x1b[<b;x;ym\n const sgrMatch = str.match(/\\x1b\\[<(\\d+);(\\d+);(\\d+)([Mm])/)\n if (sgrMatch) {\n const [, buttonCode, x, y, pressRelease] = sgrMatch\n const rawButtonCode = parseInt(buttonCode)\n\n const scrollDirection = MouseParser.SCROLL_DIRECTIONS[rawButtonCode]\n const isScroll = scrollDirection !== undefined\n\n const button = rawButtonCode & 3\n const isMotion = (rawButtonCode & 32) !== 0\n const modifiers = {\n shift: (rawButtonCode & 4) !== 0,\n alt: (rawButtonCode & 8) !== 0,\n ctrl: (rawButtonCode & 16) !== 0,\n }\n\n let type: MouseEventType\n let scrollInfo: ScrollInfo | undefined\n\n if (isScroll && pressRelease === \"M\") {\n type = \"scroll\"\n scrollInfo = {\n direction: scrollDirection!,\n delta: 1,\n }\n } else if (isMotion) {\n const isDragging = this.mouseButtonsPressed.size > 0\n\n if (button === 3) {\n type = \"move\"\n } else if (isDragging) {\n type = \"drag\"\n } else {\n type = \"move\"\n }\n } else {\n type = pressRelease === \"M\" ? \"down\" : \"up\"\n\n if (type === \"down\" && button !== 3) {\n this.mouseButtonsPressed.add(button)\n } else if (type === \"up\") {\n this.mouseButtonsPressed.clear()\n }\n }\n\n return {\n type,\n button: button === 3 ? 0 : button,\n x: parseInt(x) - 1,\n y: parseInt(y) - 1,\n modifiers,\n scroll: scrollInfo,\n }\n }\n\n // Parse basic mouse mode: \\x1b[M followed by 3 bytes\n if (str.startsWith(\"\\x1b[M\") && str.length >= 6) {\n const buttonByte = str.charCodeAt(3) - 32\n // Convert from 1-based to 0-based\n const x = str.charCodeAt(4) - 33\n const y = str.charCodeAt(5) - 33\n\n const scrollDirection = MouseParser.SCROLL_DIRECTIONS[buttonByte]\n const isScroll = scrollDirection !== undefined\n\n const button = buttonByte & 3\n const modifiers = {\n shift: (buttonByte & 4) !== 0,\n alt: (buttonByte & 8) !== 0,\n ctrl: (buttonByte & 16) !== 0,\n }\n\n let type: MouseEventType\n let actualButton: number\n let scrollInfo: ScrollInfo | undefined\n\n if (isScroll) {\n type = \"scroll\"\n actualButton = 0\n scrollInfo = {\n direction: scrollDirection!,\n delta: 1,\n }\n } else {\n type = button === 3 ? \"up\" : \"down\"\n actualButton = button === 3 ? 0 : button\n }\n\n return {\n type,\n button: actualButton,\n x,\n y,\n modifiers,\n scroll: scrollInfo,\n }\n }\n\n return null\n }\n}\n",
22
22
  "import { Renderable } from \"..\"\nimport type { SelectionState } from \"../types\"\nimport { coordinateToCharacterIndex, fonts } from \"./ascii.font\"\n\nexport class Selection {\n private _anchor: { x: number; y: number }\n private _focus: { x: number; y: number }\n private _selectedRenderables: Renderable[] = []\n\n constructor(anchor: { x: number; y: number }, focus: { x: number; y: number }) {\n this._anchor = { ...anchor }\n this._focus = { ...focus }\n }\n\n get anchor(): { x: number; y: number } {\n return { ...this._anchor }\n }\n\n get focus(): { x: number; y: number } {\n return { ...this._focus }\n }\n\n get bounds(): { startX: number; startY: number; endX: number; endY: number } {\n return {\n startX: Math.min(this._anchor.x, this._focus.x),\n startY: Math.min(this._anchor.y, this._focus.y),\n endX: Math.max(this._anchor.x, this._focus.x),\n endY: Math.max(this._anchor.y, this._focus.y),\n }\n }\n\n updateSelectedRenderables(selectedRenderables: Renderable[]): void {\n this._selectedRenderables = selectedRenderables\n }\n\n getSelectedText(): string {\n const selectedTexts = this._selectedRenderables\n // Sort by reading order: top-to-bottom, then left-to-right\n .sort((a, b) => {\n const aY = a.y\n const bY = b.y\n if (aY !== bY) {\n return aY - bY\n }\n return a.x - b.x\n })\n .map((renderable) => renderable.getSelectedText())\n .filter((text) => text)\n return selectedTexts.join(\"\\n\")\n }\n}\n\nexport class TextSelectionHelper {\n private localSelection: { start: number; end: number } | null = null\n private cachedGlobalSelection: SelectionState | null = null\n\n constructor(\n private getX: () => number,\n private getY: () => number,\n private getTextLength: () => number,\n private getLineInfo?: () => { lineStarts: number[]; lineWidths: number[] },\n ) {}\n\n hasSelection(): boolean {\n return this.localSelection !== null\n }\n\n getSelection(): { start: number; end: number } | null {\n return this.localSelection\n }\n\n reevaluateSelection(width: number, height: number = 1): boolean {\n if (!this.cachedGlobalSelection) {\n return false\n }\n return this.onSelectionChanged(this.cachedGlobalSelection, width, height)\n }\n\n shouldStartSelection(x: number, y: number, width: number, height: number): boolean {\n const localX = x - this.getX()\n const localY = y - this.getY()\n return localX >= 0 && localX < width && localY >= 0 && localY < height\n }\n\n onSelectionChanged(selection: SelectionState | null, width: number, height: number = 1): boolean {\n this.cachedGlobalSelection = selection\n\n const previousSelection = this.localSelection\n\n if (!selection?.isActive) {\n this.localSelection = null\n return previousSelection !== null\n }\n\n const myY = this.getY()\n const myEndY = myY + height - 1\n\n if (myEndY < selection.anchor.y || myY > selection.focus.y) {\n this.localSelection = null\n return previousSelection !== null\n }\n\n if (height === 1) {\n this.localSelection = this.calculateSingleLineSelection(\n myY,\n selection.anchor.y,\n selection.focus.y,\n selection.anchor.x,\n selection.focus.x,\n width,\n )\n } else {\n this.localSelection = this.calculateMultiLineSelection(\n myY,\n selection.anchor.y,\n selection.focus.y,\n selection.anchor.x,\n selection.focus.x,\n )\n }\n\n return (\n (this.localSelection !== null) !== (previousSelection !== null) ||\n this.localSelection?.start !== previousSelection?.start ||\n this.localSelection?.end !== previousSelection?.end\n )\n }\n\n private calculateSingleLineSelection(\n lineY: number,\n anchorY: number,\n focusY: number,\n anchorX: number,\n focusX: number,\n width: number,\n ): { start: number; end: number } | null {\n const textLength = this.getTextLength()\n const myX = this.getX()\n\n // Entire line is selected\n if (lineY > anchorY && lineY < focusY) {\n return { start: 0, end: textLength }\n }\n\n // Selection spans this single line\n if (lineY === anchorY && lineY === focusY) {\n const start = Math.max(0, Math.min(anchorX - myX, textLength))\n const end = Math.max(0, Math.min(focusX - myX, textLength))\n return start < end ? { start, end } : null\n }\n\n // Line is at start of selection\n if (lineY === anchorY) {\n const start = Math.max(0, Math.min(anchorX - myX, textLength))\n return start < textLength ? { start, end: textLength } : null\n }\n\n // Line is at end of selection\n if (lineY === focusY) {\n const end = Math.max(0, Math.min(focusX - myX, textLength))\n return end > 0 ? { start: 0, end } : null\n }\n\n return null\n }\n\n private calculateMultiLineSelection(\n startY: number,\n anchorY: number,\n focusY: number,\n anchorX: number,\n focusX: number,\n ): { start: number; end: number } | null {\n const lineInfo = this.getLineInfo?.()\n if (!lineInfo) {\n // Fallback: select entire text if we overlap with selection\n return { start: 0, end: this.getTextLength() }\n }\n\n const myX = this.getX()\n let selectionStart: number | null = null\n let selectionEnd: number | null = null\n\n for (let i = 0; i < lineInfo.lineStarts.length; i++) {\n const lineY = startY + i\n\n if (lineY < anchorY || lineY > focusY) continue\n\n const lineStart = lineInfo.lineStarts[i]\n const lineEnd = i < lineInfo.lineStarts.length - 1 ? lineInfo.lineStarts[i + 1] - 1 : this.getTextLength()\n const lineWidth = lineInfo.lineWidths[i]\n\n if (lineY > anchorY && lineY < focusY) {\n // Entire line is selected\n if (selectionStart === null) selectionStart = lineStart\n selectionEnd = lineEnd\n } else if (lineY === anchorY && lineY === focusY) {\n // Selection starts and ends on this line\n const localStartX = Math.max(0, Math.min(anchorX - myX, lineWidth))\n const localEndX = Math.max(0, Math.min(focusX - myX, lineWidth))\n if (localStartX < localEndX) {\n selectionStart = lineStart + localStartX\n selectionEnd = lineStart + localEndX\n }\n } else if (lineY === anchorY) {\n // Selection starts on this line\n const localStartX = Math.max(0, Math.min(anchorX - myX, lineWidth))\n if (localStartX < lineWidth) {\n selectionStart = lineStart + localStartX\n selectionEnd = lineEnd\n }\n } else if (lineY === focusY) {\n // Selection ends on this line\n const localEndX = Math.max(0, Math.min(focusX - myX, lineWidth))\n if (localEndX > 0) {\n if (selectionStart === null) selectionStart = lineStart\n selectionEnd = lineStart + localEndX\n }\n }\n }\n\n return selectionStart !== null && selectionEnd !== null && selectionStart < selectionEnd\n ? { start: selectionStart, end: selectionEnd }\n : null\n }\n}\n\nexport class ASCIIFontSelectionHelper {\n private localSelection: { start: number; end: number } | null = null\n private cachedGlobalSelection: SelectionState | null = null\n\n constructor(\n private getX: () => number,\n private getY: () => number,\n private getText: () => string,\n private getFont: () => keyof typeof fonts,\n ) {}\n\n hasSelection(): boolean {\n return this.localSelection !== null\n }\n\n getSelection(): { start: number; end: number } | null {\n return this.localSelection\n }\n\n shouldStartSelection(x: number, y: number, width: number, height: number): boolean {\n const localX = x - this.getX()\n const localY = y - this.getY()\n\n if (localX < 0 || localX >= width || localY < 0 || localY >= height) {\n return false\n }\n\n const text = this.getText()\n const font = this.getFont()\n const charIndex = coordinateToCharacterIndex(localX, text, font)\n\n return charIndex >= 0 && charIndex <= text.length\n }\n\n onSelectionChanged(selection: SelectionState | null, width: number, height: number): boolean {\n this.cachedGlobalSelection = selection\n\n const previousSelection = this.localSelection\n\n if (!selection?.isActive) {\n this.localSelection = null\n return previousSelection !== null\n }\n\n const myX = this.getX()\n const myY = this.getY()\n const myEndY = myY + height - 1\n const text = this.getText()\n const font = this.getFont()\n\n let selStart: { x: number; y: number }\n let selEnd: { x: number; y: number }\n\n if (\n selection.anchor.y < selection.focus.y ||\n (selection.anchor.y === selection.focus.y && selection.anchor.x <= selection.focus.x)\n ) {\n selStart = selection.anchor\n selEnd = selection.focus\n } else {\n selStart = selection.focus\n selEnd = selection.anchor\n }\n\n if (myEndY < selStart.y || myY > selEnd.y) {\n this.localSelection = null\n return previousSelection !== null\n }\n\n let startCharIndex = 0\n let endCharIndex = text.length\n\n if (selStart.y > myEndY) {\n // Selection starts below us - we're not selected\n this.localSelection = null\n return previousSelection !== null\n } else if (selStart.y >= myY && selStart.y <= myEndY) {\n // Selection starts within our Y range - use the actual start X coordinate\n const localX = selStart.x - myX\n if (localX > 0) {\n startCharIndex = coordinateToCharacterIndex(localX, text, font)\n }\n }\n\n if (selEnd.y < myY) {\n // Selection ends above us - we're not selected\n this.localSelection = null\n return previousSelection !== null\n } else if (selEnd.y >= myY && selEnd.y <= myEndY) {\n // Selection ends within our Y range - use the actual end X coordinate\n const localX = selEnd.x - myX\n if (localX >= 0) {\n endCharIndex = coordinateToCharacterIndex(localX, text, font)\n } else {\n endCharIndex = 0\n }\n }\n\n if (startCharIndex < endCharIndex && startCharIndex >= 0 && endCharIndex <= text.length) {\n this.localSelection = { start: startCharIndex, end: endCharIndex }\n } else {\n this.localSelection = null\n }\n\n return (\n (this.localSelection !== null) !== (previousSelection !== null) ||\n this.localSelection?.start !== previousSelection?.start ||\n this.localSelection?.end !== previousSelection?.end\n )\n }\n\n reevaluateSelection(width: number, height: number): boolean {\n if (!this.cachedGlobalSelection) {\n return false\n }\n return this.onSelectionChanged(this.cachedGlobalSelection, width, height)\n }\n}\n",
23
- "import { dlopen, toArrayBuffer, type Pointer } from \"bun:ffi\"\nimport { existsSync } from \"fs\"\nimport { type CursorStyle, type DebugOverlayCorner, type WidthMethod } from \"./types\"\nimport { RGBA } from \"./lib/RGBA\"\nimport { OptimizedBuffer } from \"./buffer\"\nimport { TextBuffer } from \"./text-buffer\"\n\nconst module = await import(`@opentui/core-${process.platform}-${process.arch}/index.ts`)\nconst targetLibPath = module.default\nif (!existsSync(targetLibPath)) {\n throw new Error(`opentui is not supported on the current platform: ${process.platform}-${process.arch}`)\n}\n\nfunction getOpenTUILib(libPath?: string) {\n const resolvedLibPath = libPath || targetLibPath\n\n return dlopen(resolvedLibPath, {\n // Renderer management\n createRenderer: {\n args: [\"u32\", \"u32\"],\n returns: \"ptr\",\n },\n destroyRenderer: {\n args: [\"ptr\", \"bool\", \"u32\"],\n returns: \"void\",\n },\n setUseThread: {\n args: [\"ptr\", \"bool\"],\n returns: \"void\",\n },\n setBackgroundColor: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n setRenderOffset: {\n args: [\"ptr\", \"u32\"],\n returns: \"void\",\n },\n updateStats: {\n args: [\"ptr\", \"f64\", \"u32\", \"f64\"],\n returns: \"void\",\n },\n updateMemoryStats: {\n args: [\"ptr\", \"u32\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n render: {\n args: [\"ptr\", \"bool\"],\n returns: \"void\",\n },\n getNextBuffer: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n getCurrentBuffer: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n\n createOptimizedBuffer: {\n args: [\"u32\", \"u32\", \"bool\", \"u8\"],\n returns: \"ptr\",\n },\n destroyOptimizedBuffer: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n\n drawFrameBuffer: {\n args: [\"ptr\", \"i32\", \"i32\", \"ptr\", \"u32\", \"u32\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n getBufferWidth: {\n args: [\"ptr\"],\n returns: \"u32\",\n },\n getBufferHeight: {\n args: [\"ptr\"],\n returns: \"u32\",\n },\n bufferClear: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n bufferGetCharPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n bufferGetFgPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n bufferGetBgPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n bufferGetAttributesPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n bufferGetRespectAlpha: {\n args: [\"ptr\"],\n returns: \"bool\",\n },\n bufferSetRespectAlpha: {\n args: [\"ptr\", \"bool\"],\n returns: \"void\",\n },\n\n bufferDrawText: {\n args: [\"ptr\", \"ptr\", \"u32\", \"u32\", \"u32\", \"ptr\", \"ptr\", \"u8\"],\n returns: \"void\",\n },\n bufferSetCellWithAlphaBlending: {\n args: [\"ptr\", \"u32\", \"u32\", \"u32\", \"ptr\", \"ptr\", \"u8\"],\n returns: \"void\",\n },\n bufferFillRect: {\n args: [\"ptr\", \"u32\", \"u32\", \"u32\", \"u32\", \"ptr\"],\n returns: \"void\",\n },\n bufferResize: {\n args: [\"ptr\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n\n resizeRenderer: {\n args: [\"ptr\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n\n // Cursor functions (now renderer-scoped)\n setCursorPosition: {\n args: [\"ptr\", \"i32\", \"i32\", \"bool\"],\n returns: \"void\",\n },\n setCursorStyle: {\n args: [\"ptr\", \"ptr\", \"u32\", \"bool\"],\n returns: \"void\",\n },\n setCursorColor: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n\n // Debug overlay\n setDebugOverlay: {\n args: [\"ptr\", \"bool\", \"u8\"],\n returns: \"void\",\n },\n\n // Terminal control\n clearTerminal: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n\n bufferDrawSuperSampleBuffer: {\n args: [\"ptr\", \"u32\", \"u32\", \"ptr\", \"usize\", \"u8\", \"u32\"],\n returns: \"void\",\n },\n bufferDrawPackedBuffer: {\n args: [\"ptr\", \"ptr\", \"usize\", \"u32\", \"u32\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n bufferDrawBox: {\n args: [\"ptr\", \"i32\", \"i32\", \"u32\", \"u32\", \"ptr\", \"u32\", \"ptr\", \"ptr\", \"ptr\", \"u32\"],\n returns: \"void\",\n },\n\n addToHitGrid: {\n args: [\"ptr\", \"i32\", \"i32\", \"u32\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n checkHit: {\n args: [\"ptr\", \"u32\", \"u32\"],\n returns: \"u32\",\n },\n dumpHitGrid: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n dumpBuffers: {\n args: [\"ptr\", \"i64\"],\n returns: \"void\",\n },\n dumpStdoutBuffer: {\n args: [\"ptr\", \"i64\"],\n returns: \"void\",\n },\n enableMouse: {\n args: [\"ptr\", \"bool\"],\n returns: \"void\",\n },\n disableMouse: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n enableKittyKeyboard: {\n args: [\"ptr\", \"u8\"],\n returns: \"void\",\n },\n disableKittyKeyboard: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n setupTerminal: {\n args: [\"ptr\", \"bool\"],\n returns: \"void\",\n },\n\n // TextBuffer functions\n createTextBuffer: {\n args: [\"u32\", \"u8\"],\n returns: \"ptr\",\n },\n destroyTextBuffer: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n textBufferGetCharPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetFgPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetBgPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetAttributesPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetLength: {\n args: [\"ptr\"],\n returns: \"u32\",\n },\n textBufferSetCell: {\n args: [\"ptr\", \"u32\", \"u32\", \"ptr\", \"ptr\", \"u16\"],\n returns: \"void\",\n },\n textBufferConcat: {\n args: [\"ptr\", \"ptr\"],\n returns: \"ptr\",\n },\n textBufferResize: {\n args: [\"ptr\", \"u32\"],\n returns: \"void\",\n },\n textBufferReset: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n textBufferSetSelection: {\n args: [\"ptr\", \"u32\", \"u32\", \"ptr\", \"ptr\"],\n returns: \"void\",\n },\n textBufferResetSelection: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n textBufferSetDefaultFg: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n textBufferSetDefaultBg: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n textBufferSetDefaultAttributes: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n textBufferResetDefaults: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n textBufferWriteChunk: {\n args: [\"ptr\", \"ptr\", \"u32\", \"ptr\", \"ptr\", \"ptr\"],\n returns: \"u32\",\n },\n textBufferGetCapacity: {\n args: [\"ptr\"],\n returns: \"u32\",\n },\n textBufferFinalizeLineInfo: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n textBufferGetLineStartsPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetLineWidthsPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetLineCount: {\n args: [\"ptr\"],\n returns: \"u32\",\n },\n bufferDrawTextBuffer: {\n args: [\"ptr\", \"ptr\", \"i32\", \"i32\", \"i32\", \"i32\", \"u32\", \"u32\", \"bool\"],\n returns: \"void\",\n },\n\n // Terminal capability functions\n getTerminalCapabilities: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n processCapabilityResponse: {\n args: [\"ptr\", \"ptr\", \"usize\"],\n returns: \"void\",\n },\n })\n}\n\nexport interface RenderLib {\n createRenderer: (width: number, height: number) => Pointer | null\n destroyRenderer: (renderer: Pointer, useAlternateScreen: boolean, splitHeight: number) => void\n setUseThread: (renderer: Pointer, useThread: boolean) => void\n setBackgroundColor: (renderer: Pointer, color: RGBA) => void\n setRenderOffset: (renderer: Pointer, offset: number) => void\n updateStats: (renderer: Pointer, time: number, fps: number, frameCallbackTime: number) => void\n updateMemoryStats: (renderer: Pointer, heapUsed: number, heapTotal: number, arrayBuffers: number) => void\n render: (renderer: Pointer, force: boolean) => void\n getNextBuffer: (renderer: Pointer) => OptimizedBuffer\n getCurrentBuffer: (renderer: Pointer) => OptimizedBuffer\n createOptimizedBuffer: (\n width: number,\n height: number,\n widthMethod: WidthMethod,\n respectAlpha?: boolean,\n ) => OptimizedBuffer\n destroyOptimizedBuffer: (bufferPtr: Pointer) => void\n drawFrameBuffer: (\n targetBufferPtr: Pointer,\n destX: number,\n destY: number,\n bufferPtr: Pointer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ) => void\n getBufferWidth: (buffer: Pointer) => number\n getBufferHeight: (buffer: Pointer) => number\n bufferClear: (buffer: Pointer, color: RGBA) => void\n bufferGetCharPtr: (buffer: Pointer) => Pointer\n bufferGetFgPtr: (buffer: Pointer) => Pointer\n bufferGetBgPtr: (buffer: Pointer) => Pointer\n bufferGetAttributesPtr: (buffer: Pointer) => Pointer\n bufferGetRespectAlpha: (buffer: Pointer) => boolean\n bufferSetRespectAlpha: (buffer: Pointer, respectAlpha: boolean) => void\n bufferDrawText: (\n buffer: Pointer,\n text: string,\n x: number,\n y: number,\n color: RGBA,\n bgColor?: RGBA,\n attributes?: number,\n ) => void\n bufferSetCellWithAlphaBlending: (\n buffer: Pointer,\n x: number,\n y: number,\n char: string,\n color: RGBA,\n bgColor: RGBA,\n attributes?: number,\n ) => void\n bufferFillRect: (buffer: Pointer, x: number, y: number, width: number, height: number, color: RGBA) => void\n bufferDrawSuperSampleBuffer: (\n buffer: Pointer,\n x: number,\n y: number,\n pixelDataPtr: Pointer,\n pixelDataLength: number,\n format: \"bgra8unorm\" | \"rgba8unorm\",\n alignedBytesPerRow: number,\n ) => void\n bufferDrawPackedBuffer: (\n buffer: Pointer,\n dataPtr: Pointer,\n dataLen: number,\n posX: number,\n posY: number,\n terminalWidthCells: number,\n terminalHeightCells: number,\n ) => void\n bufferDrawBox: (\n buffer: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n borderChars: Uint32Array,\n packedOptions: number,\n borderColor: RGBA,\n backgroundColor: RGBA,\n title: string | null,\n ) => void\n bufferResize: (\n buffer: Pointer,\n width: number,\n height: number,\n ) => {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n }\n resizeRenderer: (renderer: Pointer, width: number, height: number) => void\n setCursorPosition: (renderer: Pointer, x: number, y: number, visible: boolean) => void\n setCursorStyle: (renderer: Pointer, style: CursorStyle, blinking: boolean) => void\n setCursorColor: (renderer: Pointer, color: RGBA) => void\n setDebugOverlay: (renderer: Pointer, enabled: boolean, corner: DebugOverlayCorner) => void\n clearTerminal: (renderer: Pointer) => void\n addToHitGrid: (renderer: Pointer, x: number, y: number, width: number, height: number, id: number) => void\n checkHit: (renderer: Pointer, x: number, y: number) => number\n dumpHitGrid: (renderer: Pointer) => void\n dumpBuffers: (renderer: Pointer, timestamp?: number) => void\n dumpStdoutBuffer: (renderer: Pointer, timestamp?: number) => void\n enableMouse: (renderer: Pointer, enableMovement: boolean) => void\n disableMouse: (renderer: Pointer) => void\n enableKittyKeyboard: (renderer: Pointer, flags: number) => void\n disableKittyKeyboard: (renderer: Pointer) => void\n setupTerminal: (renderer: Pointer, useAlternateScreen: boolean) => void\n\n // TextBuffer methods\n createTextBuffer: (capacity: number, widthMethod: WidthMethod) => TextBuffer\n destroyTextBuffer: (buffer: Pointer) => void\n textBufferGetCharPtr: (buffer: Pointer) => Pointer\n textBufferGetFgPtr: (buffer: Pointer) => Pointer\n textBufferGetBgPtr: (buffer: Pointer) => Pointer\n textBufferGetAttributesPtr: (buffer: Pointer) => Pointer\n textBufferGetLength: (buffer: Pointer) => number\n textBufferSetCell: (\n buffer: Pointer,\n index: number,\n char: number,\n fg: Float32Array,\n bg: Float32Array,\n attr: number,\n ) => void\n textBufferConcat: (buffer1: Pointer, buffer2: Pointer) => TextBuffer\n textBufferResize: (\n buffer: Pointer,\n newLength: number,\n ) => {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n }\n textBufferReset: (buffer: Pointer) => void\n textBufferSetSelection: (\n buffer: Pointer,\n start: number,\n end: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => void\n textBufferResetSelection: (buffer: Pointer) => void\n textBufferSetDefaultFg: (buffer: Pointer, fg: RGBA | null) => void\n textBufferSetDefaultBg: (buffer: Pointer, bg: RGBA | null) => void\n textBufferSetDefaultAttributes: (buffer: Pointer, attributes: number | null) => void\n textBufferResetDefaults: (buffer: Pointer) => void\n textBufferWriteChunk: (\n buffer: Pointer,\n textBytes: Uint8Array,\n fg: RGBA | null,\n bg: RGBA | null,\n attributes: number | null,\n ) => number\n textBufferGetCapacity: (buffer: Pointer) => number\n textBufferFinalizeLineInfo: (buffer: Pointer) => void\n textBufferGetLineInfo: (buffer: Pointer) => { lineStarts: number[]; lineWidths: number[] }\n getTextBufferArrays: (\n buffer: Pointer,\n size: number,\n ) => {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n }\n bufferDrawTextBuffer: (\n buffer: Pointer,\n textBuffer: Pointer,\n x: number,\n y: number,\n clipRect?: { x: number; y: number; width: number; height: number },\n ) => void\n\n getTerminalCapabilities: (renderer: Pointer) => any\n processCapabilityResponse: (renderer: Pointer, response: string) => void\n}\n\nclass FFIRenderLib implements RenderLib {\n private opentui: ReturnType<typeof getOpenTUILib>\n private encoder: TextEncoder = new TextEncoder()\n\n constructor(libPath?: string) {\n this.opentui = getOpenTUILib(libPath)\n }\n\n public createRenderer(width: number, height: number) {\n return this.opentui.symbols.createRenderer(width, height)\n }\n\n public destroyRenderer(renderer: Pointer, useAlternateScreen: boolean, splitHeight: number) {\n this.opentui.symbols.destroyRenderer(renderer, useAlternateScreen, splitHeight)\n }\n\n public setUseThread(renderer: Pointer, useThread: boolean) {\n this.opentui.symbols.setUseThread(renderer, useThread)\n }\n\n public setBackgroundColor(renderer: Pointer, color: RGBA) {\n this.opentui.symbols.setBackgroundColor(renderer, color.buffer)\n }\n\n public setRenderOffset(renderer: Pointer, offset: number) {\n this.opentui.symbols.setRenderOffset(renderer, offset)\n }\n\n public updateStats(renderer: Pointer, time: number, fps: number, frameCallbackTime: number) {\n this.opentui.symbols.updateStats(renderer, time, fps, frameCallbackTime)\n }\n\n public updateMemoryStats(renderer: Pointer, heapUsed: number, heapTotal: number, arrayBuffers: number) {\n this.opentui.symbols.updateMemoryStats(renderer, heapUsed, heapTotal, arrayBuffers)\n }\n\n public getNextBuffer(renderer: Pointer): OptimizedBuffer {\n const bufferPtr = this.opentui.symbols.getNextBuffer(renderer)\n if (!bufferPtr) {\n throw new Error(\"Failed to get next buffer\")\n }\n\n const width = this.opentui.symbols.getBufferWidth(bufferPtr)\n const height = this.opentui.symbols.getBufferHeight(bufferPtr)\n const size = width * height\n const buffers = this.getBuffer(bufferPtr, size)\n\n return new OptimizedBuffer(this, bufferPtr, buffers, width, height, {})\n }\n\n public getCurrentBuffer(renderer: Pointer): OptimizedBuffer {\n const bufferPtr = this.opentui.symbols.getCurrentBuffer(renderer)\n if (!bufferPtr) {\n throw new Error(\"Failed to get current buffer\")\n }\n\n const width = this.opentui.symbols.getBufferWidth(bufferPtr)\n const height = this.opentui.symbols.getBufferHeight(bufferPtr)\n const size = width * height\n const buffers = this.getBuffer(bufferPtr, size)\n\n return new OptimizedBuffer(this, bufferPtr, buffers, width, height, {})\n }\n\n private getBuffer(\n bufferPtr: Pointer,\n size: number,\n ): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n } {\n const charPtr = this.opentui.symbols.bufferGetCharPtr(bufferPtr)\n const fgPtr = this.opentui.symbols.bufferGetFgPtr(bufferPtr)\n const bgPtr = this.opentui.symbols.bufferGetBgPtr(bufferPtr)\n const attributesPtr = this.opentui.symbols.bufferGetAttributesPtr(bufferPtr)\n\n if (!charPtr || !fgPtr || !bgPtr || !attributesPtr) {\n throw new Error(\"Failed to get buffer pointers\")\n }\n\n const buffers = {\n char: new Uint32Array(toArrayBuffer(charPtr, 0, size * 4)),\n fg: new Float32Array(toArrayBuffer(fgPtr, 0, size * 4 * 4)), // 4 floats per RGBA\n bg: new Float32Array(toArrayBuffer(bgPtr, 0, size * 4 * 4)), // 4 floats per RGBA\n attributes: new Uint8Array(toArrayBuffer(attributesPtr, 0, size)),\n }\n\n return buffers\n }\n\n private getTextBuffer(\n bufferPtr: Pointer,\n size: number,\n ): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n } {\n const charPtr = this.opentui.symbols.textBufferGetCharPtr(bufferPtr)\n const fgPtr = this.opentui.symbols.textBufferGetFgPtr(bufferPtr)\n const bgPtr = this.opentui.symbols.textBufferGetBgPtr(bufferPtr)\n const attributesPtr = this.opentui.symbols.textBufferGetAttributesPtr(bufferPtr)\n\n if (!charPtr || !fgPtr || !bgPtr || !attributesPtr) {\n throw new Error(\"Failed to get text buffer pointers\")\n }\n\n const buffers = {\n char: new Uint32Array(toArrayBuffer(charPtr, 0, size * 4)),\n fg: new Float32Array(toArrayBuffer(fgPtr, 0, size * 4 * 4)), // 4 floats per RGBA\n bg: new Float32Array(toArrayBuffer(bgPtr, 0, size * 4 * 4)), // 4 floats per RGBA\n attributes: new Uint16Array(toArrayBuffer(attributesPtr, 0, size * 2)), // 2 bytes per u16\n }\n\n return buffers\n }\n\n public bufferGetCharPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.bufferGetCharPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get char pointer\")\n }\n return ptr\n }\n\n public bufferGetFgPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.bufferGetFgPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get fg pointer\")\n }\n return ptr\n }\n\n public bufferGetBgPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.bufferGetBgPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get bg pointer\")\n }\n return ptr\n }\n\n public bufferGetAttributesPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.bufferGetAttributesPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get attributes pointer\")\n }\n return ptr\n }\n\n public bufferGetRespectAlpha(buffer: Pointer): boolean {\n return this.opentui.symbols.bufferGetRespectAlpha(buffer)\n }\n\n public bufferSetRespectAlpha(buffer: Pointer, respectAlpha: boolean): void {\n this.opentui.symbols.bufferSetRespectAlpha(buffer, respectAlpha)\n }\n\n public getBufferWidth(buffer: Pointer): number {\n return this.opentui.symbols.getBufferWidth(buffer)\n }\n\n public getBufferHeight(buffer: Pointer): number {\n return this.opentui.symbols.getBufferHeight(buffer)\n }\n\n public bufferClear(buffer: Pointer, color: RGBA) {\n this.opentui.symbols.bufferClear(buffer, color.buffer)\n }\n\n public bufferDrawText(\n buffer: Pointer,\n text: string,\n x: number,\n y: number,\n color: RGBA,\n bgColor?: RGBA,\n attributes?: number,\n ) {\n const textBytes = this.encoder.encode(text)\n const textLength = textBytes.byteLength\n const bg = bgColor ? bgColor.buffer : null\n const fg = color.buffer\n\n this.opentui.symbols.bufferDrawText(buffer, textBytes, textLength, x, y, fg, bg, attributes ?? 0)\n }\n\n public bufferSetCellWithAlphaBlending(\n buffer: Pointer,\n x: number,\n y: number,\n char: string,\n color: RGBA,\n bgColor: RGBA,\n attributes?: number,\n ) {\n const charPtr = char.codePointAt(0) ?? \" \".codePointAt(0)!\n const bg = bgColor.buffer\n const fg = color.buffer\n\n this.opentui.symbols.bufferSetCellWithAlphaBlending(buffer, x, y, charPtr, fg, bg, attributes ?? 0)\n }\n\n public bufferFillRect(buffer: Pointer, x: number, y: number, width: number, height: number, color: RGBA) {\n const bg = color.buffer\n this.opentui.symbols.bufferFillRect(buffer, x, y, width, height, bg)\n }\n\n public bufferDrawSuperSampleBuffer(\n buffer: Pointer,\n x: number,\n y: number,\n pixelDataPtr: Pointer,\n pixelDataLength: number,\n format: \"bgra8unorm\" | \"rgba8unorm\",\n alignedBytesPerRow: number,\n ): void {\n const formatId = format === \"bgra8unorm\" ? 0 : 1\n this.opentui.symbols.bufferDrawSuperSampleBuffer(\n buffer,\n x,\n y,\n pixelDataPtr,\n pixelDataLength,\n formatId,\n alignedBytesPerRow,\n )\n }\n\n public bufferDrawPackedBuffer(\n buffer: Pointer,\n dataPtr: Pointer,\n dataLen: number,\n posX: number,\n posY: number,\n terminalWidthCells: number,\n terminalHeightCells: number,\n ): void {\n this.opentui.symbols.bufferDrawPackedBuffer(\n buffer,\n dataPtr,\n dataLen,\n posX,\n posY,\n terminalWidthCells,\n terminalHeightCells,\n )\n }\n\n public bufferDrawBox(\n buffer: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n borderChars: Uint32Array,\n packedOptions: number,\n borderColor: RGBA,\n backgroundColor: RGBA,\n title: string | null,\n ): void {\n const titleBytes = title ? this.encoder.encode(title) : null\n const titleLen = title ? titleBytes!.length : 0\n const titlePtr = title ? titleBytes : null\n\n this.opentui.symbols.bufferDrawBox(\n buffer,\n x,\n y,\n width,\n height,\n borderChars,\n packedOptions,\n borderColor.buffer,\n backgroundColor.buffer,\n titlePtr,\n titleLen,\n )\n }\n\n public bufferResize(\n buffer: Pointer,\n width: number,\n height: number,\n ): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n } {\n this.opentui.symbols.bufferResize(buffer, width, height)\n const buffers = this.getBuffer(buffer, width * height)\n return buffers\n }\n\n public resizeRenderer(renderer: Pointer, width: number, height: number) {\n this.opentui.symbols.resizeRenderer(renderer, width, height)\n }\n\n public setCursorPosition(renderer: Pointer, x: number, y: number, visible: boolean) {\n this.opentui.symbols.setCursorPosition(renderer, x, y, visible)\n }\n\n public setCursorStyle(renderer: Pointer, style: CursorStyle, blinking: boolean) {\n const stylePtr = this.encoder.encode(style)\n this.opentui.symbols.setCursorStyle(renderer, stylePtr, style.length, blinking)\n }\n\n public setCursorColor(renderer: Pointer, color: RGBA) {\n this.opentui.symbols.setCursorColor(renderer, color.buffer)\n }\n\n public render(renderer: Pointer, force: boolean) {\n this.opentui.symbols.render(renderer, force)\n }\n\n public createOptimizedBuffer(\n width: number,\n height: number,\n widthMethod: WidthMethod,\n respectAlpha: boolean = false,\n ): OptimizedBuffer {\n if (Number.isNaN(width) || Number.isNaN(height)) {\n console.error(new Error(`Invalid dimensions for OptimizedBuffer: ${width}x${height}`).stack)\n }\n\n const widthMethodCode = widthMethod === \"wcwidth\" ? 0 : 1\n const bufferPtr = this.opentui.symbols.createOptimizedBuffer(width, height, respectAlpha, widthMethodCode)\n if (!bufferPtr) {\n throw new Error(`Failed to create optimized buffer: ${width}x${height}`)\n }\n const size = width * height\n const buffers = this.getBuffer(bufferPtr, size)\n\n return new OptimizedBuffer(this, bufferPtr, buffers, width, height, { respectAlpha })\n }\n\n public destroyOptimizedBuffer(bufferPtr: Pointer) {\n this.opentui.symbols.destroyOptimizedBuffer(bufferPtr)\n }\n\n public drawFrameBuffer(\n targetBufferPtr: Pointer,\n destX: number,\n destY: number,\n bufferPtr: Pointer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ) {\n const srcX = sourceX ?? 0\n const srcY = sourceY ?? 0\n const srcWidth = sourceWidth ?? 0\n const srcHeight = sourceHeight ?? 0\n this.opentui.symbols.drawFrameBuffer(targetBufferPtr, destX, destY, bufferPtr, srcX, srcY, srcWidth, srcHeight)\n }\n\n public setDebugOverlay(renderer: Pointer, enabled: boolean, corner: DebugOverlayCorner) {\n this.opentui.symbols.setDebugOverlay(renderer, enabled, corner)\n }\n\n public clearTerminal(renderer: Pointer) {\n this.opentui.symbols.clearTerminal(renderer)\n }\n\n public addToHitGrid(renderer: Pointer, x: number, y: number, width: number, height: number, id: number) {\n this.opentui.symbols.addToHitGrid(renderer, x, y, width, height, id)\n }\n\n public checkHit(renderer: Pointer, x: number, y: number): number {\n return this.opentui.symbols.checkHit(renderer, x, y)\n }\n\n public dumpHitGrid(renderer: Pointer): void {\n this.opentui.symbols.dumpHitGrid(renderer)\n }\n\n public dumpBuffers(renderer: Pointer, timestamp?: number): void {\n const ts = timestamp ?? Date.now()\n this.opentui.symbols.dumpBuffers(renderer, ts)\n }\n\n public dumpStdoutBuffer(renderer: Pointer, timestamp?: number): void {\n const ts = timestamp ?? Date.now()\n this.opentui.symbols.dumpStdoutBuffer(renderer, ts)\n }\n\n public enableMouse(renderer: Pointer, enableMovement: boolean): void {\n this.opentui.symbols.enableMouse(renderer, enableMovement)\n }\n\n public disableMouse(renderer: Pointer): void {\n this.opentui.symbols.disableMouse(renderer)\n }\n\n public enableKittyKeyboard(renderer: Pointer, flags: number): void {\n this.opentui.symbols.enableKittyKeyboard(renderer, flags)\n }\n\n public disableKittyKeyboard(renderer: Pointer): void {\n this.opentui.symbols.disableKittyKeyboard(renderer)\n }\n\n public setupTerminal(renderer: Pointer, useAlternateScreen: boolean): void {\n this.opentui.symbols.setupTerminal(renderer, useAlternateScreen)\n }\n\n // TextBuffer methods\n public createTextBuffer(capacity: number, widthMethod: WidthMethod): TextBuffer {\n const widthMethodCode = widthMethod === \"wcwidth\" ? 0 : 1\n const bufferPtr = this.opentui.symbols.createTextBuffer(capacity, widthMethodCode)\n if (!bufferPtr) {\n throw new Error(`Failed to create TextBuffer with capacity ${capacity}`)\n }\n\n const charPtr = this.textBufferGetCharPtr(bufferPtr)\n const fgPtr = this.textBufferGetFgPtr(bufferPtr)\n const bgPtr = this.textBufferGetBgPtr(bufferPtr)\n const attributesPtr = this.textBufferGetAttributesPtr(bufferPtr)\n\n const buffer = {\n char: new Uint32Array(toArrayBuffer(charPtr, 0, capacity * 4)),\n fg: new Float32Array(toArrayBuffer(fgPtr, 0, capacity * 4 * 4)),\n bg: new Float32Array(toArrayBuffer(bgPtr, 0, capacity * 4 * 4)),\n attributes: new Uint16Array(toArrayBuffer(attributesPtr, 0, capacity * 2)), // 2 bytes per u16\n }\n\n return new TextBuffer(this, bufferPtr, buffer, capacity)\n }\n\n public destroyTextBuffer(buffer: Pointer): void {\n this.opentui.symbols.destroyTextBuffer(buffer)\n }\n\n public textBufferGetCharPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.textBufferGetCharPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get TextBuffer char pointer\")\n }\n return ptr\n }\n\n public textBufferGetFgPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.textBufferGetFgPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get TextBuffer fg pointer\")\n }\n return ptr\n }\n\n public textBufferGetBgPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.textBufferGetBgPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get TextBuffer bg pointer\")\n }\n return ptr\n }\n\n public textBufferGetAttributesPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.textBufferGetAttributesPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get TextBuffer attributes pointer\")\n }\n return ptr\n }\n\n public textBufferGetLength(buffer: Pointer): number {\n return this.opentui.symbols.textBufferGetLength(buffer)\n }\n\n public textBufferSetCell(\n buffer: Pointer,\n index: number,\n char: number,\n fg: Float32Array,\n bg: Float32Array,\n attr: number,\n ): void {\n this.opentui.symbols.textBufferSetCell(buffer, index, char, fg, bg, attr)\n }\n\n public textBufferConcat(buffer1: Pointer, buffer2: Pointer): TextBuffer {\n const resultPtr = this.opentui.symbols.textBufferConcat(buffer1, buffer2)\n if (!resultPtr) {\n throw new Error(\"Failed to concatenate TextBuffers\")\n }\n\n const length = this.textBufferGetLength(resultPtr)\n const charPtr = this.textBufferGetCharPtr(resultPtr)\n const fgPtr = this.textBufferGetFgPtr(resultPtr)\n const bgPtr = this.textBufferGetBgPtr(resultPtr)\n const attributesPtr = this.textBufferGetAttributesPtr(resultPtr)\n\n const buffer = {\n char: new Uint32Array(toArrayBuffer(charPtr, 0, length * 4)),\n fg: new Float32Array(toArrayBuffer(fgPtr, 0, length * 4 * 4)),\n bg: new Float32Array(toArrayBuffer(bgPtr, 0, length * 4 * 4)),\n attributes: new Uint16Array(toArrayBuffer(attributesPtr, 0, length * 2)),\n }\n\n return new TextBuffer(this, resultPtr, buffer, length)\n }\n\n public textBufferResize(\n buffer: Pointer,\n newLength: number,\n ): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n } {\n this.opentui.symbols.textBufferResize(buffer, newLength)\n const buffers = this.getTextBuffer(buffer, newLength)\n return buffers\n }\n\n public textBufferReset(buffer: Pointer): void {\n this.opentui.symbols.textBufferReset(buffer)\n }\n\n public textBufferSetSelection(\n buffer: Pointer,\n start: number,\n end: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ): void {\n const bg = bgColor ? bgColor.buffer : null\n const fg = fgColor ? fgColor.buffer : null\n this.opentui.symbols.textBufferSetSelection(buffer, start, end, bg, fg)\n }\n\n public textBufferResetSelection(buffer: Pointer): void {\n this.opentui.symbols.textBufferResetSelection(buffer)\n }\n\n public textBufferSetDefaultFg(buffer: Pointer, fg: RGBA | null): void {\n const fgPtr = fg ? fg.buffer : null\n this.opentui.symbols.textBufferSetDefaultFg(buffer, fgPtr)\n }\n\n public textBufferSetDefaultBg(buffer: Pointer, bg: RGBA | null): void {\n const bgPtr = bg ? bg.buffer : null\n this.opentui.symbols.textBufferSetDefaultBg(buffer, bgPtr)\n }\n\n public textBufferSetDefaultAttributes(buffer: Pointer, attributes: number | null): void {\n const attrValue = attributes === null ? null : new Uint8Array([attributes])\n this.opentui.symbols.textBufferSetDefaultAttributes(buffer, attrValue)\n }\n\n public textBufferResetDefaults(buffer: Pointer): void {\n this.opentui.symbols.textBufferResetDefaults(buffer)\n }\n\n public textBufferWriteChunk(\n buffer: Pointer,\n textBytes: Uint8Array,\n fg: RGBA | null,\n bg: RGBA | null,\n attributes: number | null,\n ): number {\n const attrValue = attributes === null ? null : new Uint8Array([attributes])\n return this.opentui.symbols.textBufferWriteChunk(\n buffer,\n textBytes,\n textBytes.length,\n fg ? fg.buffer : null,\n bg ? bg.buffer : null,\n attrValue,\n )\n }\n\n public textBufferGetCapacity(buffer: Pointer): number {\n return this.opentui.symbols.textBufferGetCapacity(buffer)\n }\n\n public textBufferFinalizeLineInfo(buffer: Pointer): void {\n this.opentui.symbols.textBufferFinalizeLineInfo(buffer)\n }\n\n public textBufferGetLineInfo(buffer: Pointer): { lineStarts: number[]; lineWidths: number[] } {\n const lineCount = this.opentui.symbols.textBufferGetLineCount(buffer)\n if (lineCount === 0) {\n return { lineStarts: [], lineWidths: [] }\n }\n\n const lineStartsPtr = this.opentui.symbols.textBufferGetLineStartsPtr(buffer)\n const lineWidthsPtr = this.opentui.symbols.textBufferGetLineWidthsPtr(buffer)\n\n if (!lineStartsPtr || !lineWidthsPtr) {\n return { lineStarts: [], lineWidths: [] }\n }\n\n const lineStartsArray = new Uint32Array(toArrayBuffer(lineStartsPtr, 0, lineCount * 4))\n const lineWidthsArray = new Uint32Array(toArrayBuffer(lineWidthsPtr, 0, lineCount * 4))\n\n const lineStarts = Array.from(lineStartsArray)\n const lineWidths = Array.from(lineWidthsArray)\n\n return { lineStarts, lineWidths }\n }\n\n public getTextBufferArrays(\n buffer: Pointer,\n size: number,\n ): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n } {\n return this.getTextBuffer(buffer, size)\n }\n\n public bufferDrawTextBuffer(\n buffer: Pointer,\n textBuffer: Pointer,\n x: number,\n y: number,\n clipRect?: { x: number; y: number; width: number; height: number },\n ): void {\n const hasClipRect = clipRect !== undefined && clipRect !== null\n const clipX = clipRect?.x ?? 0\n const clipY = clipRect?.y ?? 0\n const clipWidth = clipRect?.width ?? 0\n const clipHeight = clipRect?.height ?? 0\n\n this.opentui.symbols.bufferDrawTextBuffer(\n buffer,\n textBuffer,\n x,\n y,\n clipX,\n clipY,\n clipWidth,\n clipHeight,\n hasClipRect,\n )\n }\n\n public getTerminalCapabilities(renderer: Pointer): any {\n const capsBuffer = new Uint8Array(64)\n this.opentui.symbols.getTerminalCapabilities(renderer, capsBuffer)\n\n let offset = 0\n const capabilities = {\n kitty_keyboard: capsBuffer[offset++] !== 0,\n kitty_graphics: capsBuffer[offset++] !== 0,\n rgb: capsBuffer[offset++] !== 0,\n unicode: capsBuffer[offset++] === 0 ? \"wcwidth\" : \"unicode\",\n sgr_pixels: capsBuffer[offset++] !== 0,\n color_scheme_updates: capsBuffer[offset++] !== 0,\n explicit_width: capsBuffer[offset++] !== 0,\n scaled_text: capsBuffer[offset++] !== 0,\n sixel: capsBuffer[offset++] !== 0,\n focus_tracking: capsBuffer[offset++] !== 0,\n sync: capsBuffer[offset++] !== 0,\n bracketed_paste: capsBuffer[offset++] !== 0,\n hyperlinks: capsBuffer[offset++] !== 0,\n }\n\n return capabilities\n }\n\n public processCapabilityResponse(renderer: Pointer, response: string): void {\n const responseBytes = this.encoder.encode(response)\n this.opentui.symbols.processCapabilityResponse(renderer, responseBytes, responseBytes.length)\n }\n}\n\nlet opentuiLibPath: string | undefined\nlet opentuiLib: RenderLib | undefined\n\nexport function setRenderLibPath(libPath: string) {\n if (opentuiLibPath !== libPath) {\n opentuiLibPath = libPath\n opentuiLib = undefined\n }\n}\n\nexport function resolveRenderLib(): RenderLib {\n if (!opentuiLib) {\n try {\n opentuiLib = new FFIRenderLib(opentuiLibPath)\n } catch (error) {\n throw new Error(\n `Failed to initialize OpenTUI render library: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n )\n }\n }\n return opentuiLib\n}\n\n// Try eager loading\ntry {\n opentuiLib = new FFIRenderLib(opentuiLibPath)\n} catch (error) {}\n",
24
- "import type { TextBuffer } from \"./text-buffer\"\nimport { RGBA } from \"./lib\"\nimport { resolveRenderLib, type RenderLib } from \"./zig\"\nimport { type Pointer } from \"bun:ffi\"\nimport { type BorderStyle, type BorderSides, type BorderCharacters, BorderCharArrays, borderCharsToArray } from \"./lib\"\nimport { type WidthMethod } from \"./types\"\n\nfunction isRGBAWithAlpha(color: RGBA): boolean {\n return color.a < 1.0\n}\n\n// Pack drawing options into a single u32\n// bits 0-3: borderSides, bit 4: shouldFill, bits 5-6: titleAlignment\nfunction packDrawOptions(\n border: boolean | BorderSides[],\n shouldFill: boolean,\n titleAlignment: \"left\" | \"center\" | \"right\",\n): number {\n let packed = 0\n\n if (border === true) {\n packed |= 0b1111 // All sides\n } else if (Array.isArray(border)) {\n if (border.includes(\"top\")) packed |= 0b1000\n if (border.includes(\"right\")) packed |= 0b0100\n if (border.includes(\"bottom\")) packed |= 0b0010\n if (border.includes(\"left\")) packed |= 0b0001\n }\n\n if (shouldFill) {\n packed |= 1 << 4\n }\n\n const alignmentMap: Record<string, number> = {\n left: 0,\n center: 1,\n right: 2,\n }\n const alignment = alignmentMap[titleAlignment]\n packed |= alignment << 5\n\n return packed\n}\n\nfunction blendColors(overlay: RGBA, text: RGBA): RGBA {\n const [overlayR, overlayG, overlayB, overlayA] = overlay.buffer\n const [textR, textG, textB, textA] = text.buffer\n\n if (overlayA === 1.0) {\n return overlay\n }\n\n const alpha = overlayA\n\n let perceptualAlpha: number\n\n if (alpha > 0.8) {\n const normalizedHighAlpha = (alpha - 0.8) * 5.0\n const curvedHighAlpha = Math.pow(normalizedHighAlpha, 0.2)\n perceptualAlpha = 0.8 + curvedHighAlpha * 0.2\n } else {\n perceptualAlpha = Math.pow(alpha, 0.9)\n }\n\n const r = overlayR * perceptualAlpha + textR * (1 - perceptualAlpha)\n const g = overlayG * perceptualAlpha + textG * (1 - perceptualAlpha)\n const b = overlayB * perceptualAlpha + textB * (1 - perceptualAlpha)\n\n return RGBA.fromValues(r, g, b, textA)\n}\n\nexport class OptimizedBuffer {\n private static fbIdCounter = 0\n public id: string\n public lib: RenderLib\n private bufferPtr: Pointer\n private buffer: {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n }\n private _width: number\n private _height: number\n public respectAlpha: boolean = false\n private useFFI: boolean = true\n\n get ptr(): Pointer {\n return this.bufferPtr\n }\n\n constructor(\n lib: RenderLib,\n ptr: Pointer,\n buffer: {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n },\n width: number,\n height: number,\n options: { respectAlpha?: boolean },\n ) {\n this.id = `fb_${OptimizedBuffer.fbIdCounter++}`\n this.lib = lib\n this.respectAlpha = options.respectAlpha || false\n this._width = width\n this._height = height\n this.bufferPtr = ptr\n this.buffer = buffer\n }\n\n static create(\n width: number,\n height: number,\n widthMethod: WidthMethod,\n options: { respectAlpha?: boolean } = {},\n ): OptimizedBuffer {\n const lib = resolveRenderLib()\n const respectAlpha = options.respectAlpha || false\n return lib.createOptimizedBuffer(width, height, widthMethod, respectAlpha)\n }\n\n public get buffers(): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n } {\n return this.buffer\n }\n\n private coordsToIndex(x: number, y: number): number {\n return y * this._width + x\n }\n\n public get width(): number {\n return this._width\n }\n\n public get height(): number {\n return this._height\n }\n\n public setRespectAlpha(respectAlpha: boolean): void {\n this.lib.bufferSetRespectAlpha(this.bufferPtr, respectAlpha)\n this.respectAlpha = respectAlpha\n }\n\n public clear(bg: RGBA = RGBA.fromValues(0, 0, 0, 1), clearChar: string = \" \"): void {\n if (this.useFFI) {\n this.clearFFI(bg)\n } else {\n this.clearLocal(bg, clearChar)\n }\n }\n\n public clearLocal(bg: RGBA = RGBA.fromValues(0, 0, 0, 1), clearChar: string = \" \"): void {\n this.buffer.char.fill(clearChar.charCodeAt(0))\n this.buffer.attributes.fill(0)\n\n for (let i = 0; i < this._width * this._height; i++) {\n const index = i * 4\n\n this.buffer.fg[index] = 1.0\n this.buffer.fg[index + 1] = 1.0\n this.buffer.fg[index + 2] = 1.0\n this.buffer.fg[index + 3] = 1.0\n\n this.buffer.bg[index] = bg.r\n this.buffer.bg[index + 1] = bg.g\n this.buffer.bg[index + 2] = bg.b\n this.buffer.bg[index + 3] = bg.a\n }\n }\n\n public setCell(x: number, y: number, char: string, fg: RGBA, bg: RGBA, attributes: number = 0): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n\n const index = this.coordsToIndex(x, y)\n const colorIndex = index * 4\n\n // Set character and attributes\n this.buffer.char[index] = char.charCodeAt(0)\n this.buffer.attributes[index] = attributes\n\n // Set foreground color\n this.buffer.fg[colorIndex] = fg.r\n this.buffer.fg[colorIndex + 1] = fg.g\n this.buffer.fg[colorIndex + 2] = fg.b\n this.buffer.fg[colorIndex + 3] = fg.a\n\n // Set background color\n this.buffer.bg[colorIndex] = bg.r\n this.buffer.bg[colorIndex + 1] = bg.g\n this.buffer.bg[colorIndex + 2] = bg.b\n this.buffer.bg[colorIndex + 3] = bg.a\n }\n\n public get(x: number, y: number): { char: number; fg: RGBA; bg: RGBA; attributes: number } | null {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return null\n\n const index = this.coordsToIndex(x, y)\n const colorIndex = index * 4\n\n return {\n char: this.buffer.char[index],\n fg: RGBA.fromArray(this.buffer.fg.slice(colorIndex, colorIndex + 4)),\n bg: RGBA.fromArray(this.buffer.bg.slice(colorIndex, colorIndex + 4)),\n attributes: this.buffer.attributes[index],\n }\n }\n\n public setCellWithAlphaBlending(\n x: number,\n y: number,\n char: string,\n fg: RGBA,\n bg: RGBA,\n attributes: number = 0,\n ): void {\n if (this.useFFI) {\n this.setCellWithAlphaBlendingFFI(x, y, char, fg, bg, attributes)\n } else {\n this.setCellWithAlphaBlendingLocal(x, y, char, fg, bg, attributes)\n }\n }\n\n public setCellWithAlphaBlendingLocal(\n x: number,\n y: number,\n char: string,\n fg: RGBA,\n bg: RGBA,\n attributes: number = 0,\n ): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n\n const hasBgAlpha = isRGBAWithAlpha(bg)\n const hasFgAlpha = isRGBAWithAlpha(fg)\n\n if (hasBgAlpha || hasFgAlpha) {\n const destCell = this.get(x, y)\n if (destCell) {\n const blendedBgRgb = hasBgAlpha ? blendColors(bg, destCell.bg) : bg\n\n const preserveChar = char === \" \" && destCell.char !== 0 && String.fromCharCode(destCell.char) !== \" \"\n const finalChar = preserveChar ? destCell.char : char.charCodeAt(0)\n\n let finalFg: RGBA\n if (preserveChar) {\n finalFg = blendColors(bg, destCell.fg)\n } else {\n finalFg = hasFgAlpha ? blendColors(fg, destCell.bg) : fg\n }\n\n const finalAttributes = preserveChar ? destCell.attributes : attributes\n const finalBg = RGBA.fromValues(blendedBgRgb.r, blendedBgRgb.g, blendedBgRgb.b, bg.a)\n\n this.setCell(x, y, String.fromCharCode(finalChar), finalFg, finalBg, finalAttributes)\n return\n }\n }\n\n this.setCell(x, y, char, fg, bg, attributes)\n }\n\n public drawText(\n text: string,\n x: number,\n y: number,\n fg: RGBA,\n bg?: RGBA,\n attributes: number = 0,\n selection?: { start: number; end: number; bgColor?: RGBA; fgColor?: RGBA } | null,\n ): void {\n if (!selection) {\n this.drawTextFFI.call(this, text, x, y, fg, bg, attributes)\n return\n }\n\n const { start, end } = selection\n\n let selectionBg: RGBA\n let selectionFg: RGBA\n\n if (selection.bgColor) {\n selectionBg = selection.bgColor\n selectionFg = selection.fgColor || fg\n } else {\n const defaultBg = bg || RGBA.fromValues(0, 0, 0, 0)\n selectionFg = defaultBg.a > 0 ? defaultBg : RGBA.fromValues(0, 0, 0, 1)\n selectionBg = fg\n }\n\n if (start > 0) {\n const beforeText = text.slice(0, start)\n this.drawTextFFI.call(this, beforeText, x, y, fg, bg, attributes)\n }\n\n if (end > start) {\n const selectedText = text.slice(start, end)\n this.drawTextFFI.call(this, selectedText, x + start, y, selectionFg, selectionBg, attributes)\n }\n\n if (end < text.length) {\n const afterText = text.slice(end)\n this.drawTextFFI.call(this, afterText, x + end, y, fg, bg, attributes)\n }\n }\n\n public fillRect(x: number, y: number, width: number, height: number, bg: RGBA): void {\n if (this.useFFI) {\n this.fillRectFFI(x, y, width, height, bg)\n } else {\n this.fillRectLocal(x, y, width, height, bg)\n }\n }\n\n public fillRectLocal(x: number, y: number, width: number, height: number, bg: RGBA): void {\n const startX = Math.max(0, x)\n const startY = Math.max(0, y)\n const endX = Math.min(this.width - 1, x + width - 1)\n const endY = Math.min(this.height - 1, y + height - 1)\n\n if (startX > endX || startY > endY) return\n\n const hasAlpha = isRGBAWithAlpha(bg)\n\n if (hasAlpha) {\n const fg = RGBA.fromValues(1.0, 1.0, 1.0, 1.0)\n for (let fillY = startY; fillY <= endY; fillY++) {\n for (let fillX = startX; fillX <= endX; fillX++) {\n this.setCellWithAlphaBlending(fillX, fillY, \" \", fg, bg, 0)\n }\n }\n } else {\n for (let fillY = startY; fillY <= endY; fillY++) {\n for (let fillX = startX; fillX <= endX; fillX++) {\n const index = this.coordsToIndex(fillX, fillY)\n const colorIndex = index * 4\n\n this.buffer.char[index] = \" \".charCodeAt(0)\n this.buffer.attributes[index] = 0\n\n this.buffer.fg[colorIndex] = 1.0\n this.buffer.fg[colorIndex + 1] = 1.0\n this.buffer.fg[colorIndex + 2] = 1.0\n this.buffer.fg[colorIndex + 3] = 1.0\n\n this.buffer.bg[colorIndex] = bg.r\n this.buffer.bg[colorIndex + 1] = bg.g\n this.buffer.bg[colorIndex + 2] = bg.b\n this.buffer.bg[colorIndex + 3] = bg.a\n }\n }\n }\n }\n\n public drawFrameBuffer(\n destX: number,\n destY: number,\n frameBuffer: OptimizedBuffer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ): void {\n // Prefer FFI for framebuffer drawing\n this.drawFrameBufferFFI(destX, destY, frameBuffer, sourceX, sourceY, sourceWidth, sourceHeight)\n }\n\n // TODO: REMOVE -- ffi only\n // @deprecated\n public drawFrameBufferLocal(\n destX: number,\n destY: number,\n frameBuffer: OptimizedBuffer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ): void {\n const srcX = sourceX ?? 0\n const srcY = sourceY ?? 0\n const srcWidth = sourceWidth ?? frameBuffer.width\n const srcHeight = sourceHeight ?? frameBuffer.height\n\n if (srcX >= frameBuffer.width || srcY >= frameBuffer.height) return\n if (srcWidth === 0 || srcHeight === 0) return\n\n const clampedSrcWidth = Math.min(srcWidth, frameBuffer.width - srcX)\n const clampedSrcHeight = Math.min(srcHeight, frameBuffer.height - srcY)\n\n const startDestX = Math.max(0, destX)\n const startDestY = Math.max(0, destY)\n const endDestX = Math.min(this._width - 1, destX + clampedSrcWidth - 1)\n const endDestY = Math.min(this._height - 1, destY + clampedSrcHeight - 1)\n\n if (!frameBuffer.respectAlpha) {\n for (let dY = startDestY; dY <= endDestY; dY++) {\n for (let dX = startDestX; dX <= endDestX; dX++) {\n const relativeDestX = dX - destX\n const relativeDestY = dY - destY\n const sX = srcX + relativeDestX\n const sY = srcY + relativeDestY\n\n if (sX >= frameBuffer.width || sY >= frameBuffer.height) continue\n\n const destIndex = this.coordsToIndex(dX, dY)\n const srcIndex = frameBuffer.coordsToIndex(sX, sY)\n\n const destColorIndex = destIndex * 4\n const srcColorIndex = srcIndex * 4\n\n // Copy character and attributes\n this.buffer.char[destIndex] = frameBuffer.buffer.char[srcIndex]\n this.buffer.attributes[destIndex] = frameBuffer.buffer.attributes[srcIndex]\n\n // Copy foreground color\n this.buffer.fg[destColorIndex] = frameBuffer.buffer.fg[srcColorIndex]\n this.buffer.fg[destColorIndex + 1] = frameBuffer.buffer.fg[srcColorIndex + 1]\n this.buffer.fg[destColorIndex + 2] = frameBuffer.buffer.fg[srcColorIndex + 2]\n this.buffer.fg[destColorIndex + 3] = frameBuffer.buffer.fg[srcColorIndex + 3]\n\n // Copy background color\n this.buffer.bg[destColorIndex] = frameBuffer.buffer.bg[srcColorIndex]\n this.buffer.bg[destColorIndex + 1] = frameBuffer.buffer.bg[srcColorIndex + 1]\n this.buffer.bg[destColorIndex + 2] = frameBuffer.buffer.bg[srcColorIndex + 2]\n this.buffer.bg[destColorIndex + 3] = frameBuffer.buffer.bg[srcColorIndex + 3]\n }\n }\n return\n }\n\n for (let dY = startDestY; dY <= endDestY; dY++) {\n for (let dX = startDestX; dX <= endDestX; dX++) {\n const relativeDestX = dX - destX\n const relativeDestY = dY - destY\n const sX = srcX + relativeDestX\n const sY = srcY + relativeDestY\n\n if (sX >= frameBuffer.width || sY >= frameBuffer.height) continue\n\n const srcIndex = frameBuffer.coordsToIndex(sX, sY)\n const srcColorIndex = srcIndex * 4\n\n if (frameBuffer.buffer.bg[srcColorIndex + 3] === 0 && frameBuffer.buffer.fg[srcColorIndex + 3] === 0) {\n continue\n }\n\n const charCode = frameBuffer.buffer.char[srcIndex]\n const fg: RGBA = RGBA.fromArray(frameBuffer.buffer.fg.slice(srcColorIndex, srcColorIndex + 4))\n const bg: RGBA = RGBA.fromArray(frameBuffer.buffer.bg.slice(srcColorIndex, srcColorIndex + 4))\n const attributes = frameBuffer.buffer.attributes[srcIndex]\n\n this.setCellWithAlphaBlending(dX, dY, String.fromCharCode(charCode), fg, bg, attributes)\n }\n }\n }\n\n public destroy(): void {\n this.lib.destroyOptimizedBuffer(this.bufferPtr)\n }\n\n public drawTextBuffer(\n textBuffer: TextBuffer,\n x: number,\n y: number,\n clipRect?: { x: number; y: number; width: number; height: number },\n ): void {\n // Use native implementation\n this.lib.bufferDrawTextBuffer(this.bufferPtr, textBuffer.ptr, x, y, clipRect)\n }\n\n public drawSuperSampleBuffer(\n x: number,\n y: number,\n pixelDataPtr: Pointer,\n pixelDataLength: number,\n format: \"bgra8unorm\" | \"rgba8unorm\",\n alignedBytesPerRow: number,\n ): void {\n // Prefer FFI for super sample buffer drawing\n this.drawSuperSampleBufferFFI(x, y, pixelDataPtr, pixelDataLength, format, alignedBytesPerRow)\n }\n\n //\n // FFI\n //\n\n public drawSuperSampleBufferFFI(\n x: number,\n y: number,\n pixelDataPtr: Pointer,\n pixelDataLength: number,\n format: \"bgra8unorm\" | \"rgba8unorm\",\n alignedBytesPerRow: number,\n ): void {\n this.lib.bufferDrawSuperSampleBuffer(\n this.bufferPtr,\n x,\n y,\n pixelDataPtr,\n pixelDataLength,\n format,\n alignedBytesPerRow,\n )\n }\n\n public drawPackedBuffer(\n dataPtr: Pointer,\n dataLen: number,\n posX: number,\n posY: number,\n terminalWidthCells: number,\n terminalHeightCells: number,\n ): void {\n this.lib.bufferDrawPackedBuffer(\n this.bufferPtr,\n dataPtr,\n dataLen,\n posX,\n posY,\n terminalWidthCells,\n terminalHeightCells,\n )\n }\n\n public setCellWithAlphaBlendingFFI(\n x: number,\n y: number,\n char: string,\n fg: RGBA,\n bg: RGBA,\n attributes?: number,\n ): void {\n this.lib.bufferSetCellWithAlphaBlending(this.bufferPtr, x, y, char, fg, bg, attributes)\n }\n\n public fillRectFFI(x: number, y: number, width: number, height: number, bg: RGBA): void {\n this.lib.bufferFillRect(this.bufferPtr, x, y, width, height, bg)\n }\n\n public resize(width: number, height: number): void {\n if (this._width === width && this._height === height) return\n\n this._width = width\n this._height = height\n\n this.buffer = this.lib.bufferResize(this.bufferPtr, width, height)\n }\n\n public clearFFI(bg: RGBA = RGBA.fromValues(0, 0, 0, 1)): void {\n this.lib.bufferClear(this.bufferPtr, bg)\n }\n\n public drawTextFFI(\n text: string,\n x: number,\n y: number,\n fg: RGBA = RGBA.fromValues(1.0, 1.0, 1.0, 1.0),\n bg?: RGBA,\n attributes: number = 0,\n ): void {\n this.lib.bufferDrawText(this.bufferPtr, text, x, y, fg, bg, attributes)\n }\n\n public drawFrameBufferFFI(\n destX: number,\n destY: number,\n frameBuffer: OptimizedBuffer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ): void {\n this.lib.drawFrameBuffer(this.bufferPtr, destX, destY, frameBuffer.ptr, sourceX, sourceY, sourceWidth, sourceHeight)\n }\n\n public drawBox(options: {\n x: number\n y: number\n width: number\n height: number\n borderStyle?: BorderStyle\n customBorderChars?: Uint32Array\n border: boolean | BorderSides[]\n borderColor: RGBA\n backgroundColor: RGBA\n shouldFill?: boolean\n title?: string\n titleAlignment?: \"left\" | \"center\" | \"right\"\n }): void {\n const style = options.borderStyle || \"single\"\n const borderChars: Uint32Array = options.customBorderChars ?? BorderCharArrays[style]\n\n const packedOptions = packDrawOptions(options.border, options.shouldFill ?? false, options.titleAlignment || \"left\")\n\n this.lib.bufferDrawBox(\n this.bufferPtr,\n options.x,\n options.y,\n options.width,\n options.height,\n borderChars,\n packedOptions,\n options.borderColor,\n options.backgroundColor,\n options.title ?? null,\n )\n }\n}\n",
23
+ "import { dlopen, toArrayBuffer, JSCallback, ptr, type Pointer } from \"bun:ffi\"\nimport { existsSync } from \"fs\"\nimport { type CursorStyle, type DebugOverlayCorner, type WidthMethod } from \"./types\"\nimport { RGBA } from \"./lib/RGBA\"\nimport { OptimizedBuffer } from \"./buffer\"\nimport { TextBuffer } from \"./text-buffer\"\n\nconst module = await import(`@opentui/core-${process.platform}-${process.arch}/index.ts`)\nconst targetLibPath = module.default\nif (!existsSync(targetLibPath)) {\n throw new Error(`opentui is not supported on the current platform: ${process.platform}-${process.arch}`)\n}\n\nfunction getOpenTUILib(libPath?: string) {\n const resolvedLibPath = libPath || targetLibPath\n\n return dlopen(resolvedLibPath, {\n // Logging\n setLogCallback: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n // Renderer management\n createRenderer: {\n args: [\"u32\", \"u32\"],\n returns: \"ptr\",\n },\n destroyRenderer: {\n args: [\"ptr\", \"bool\", \"u32\"],\n returns: \"void\",\n },\n setUseThread: {\n args: [\"ptr\", \"bool\"],\n returns: \"void\",\n },\n setBackgroundColor: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n setRenderOffset: {\n args: [\"ptr\", \"u32\"],\n returns: \"void\",\n },\n updateStats: {\n args: [\"ptr\", \"f64\", \"u32\", \"f64\"],\n returns: \"void\",\n },\n updateMemoryStats: {\n args: [\"ptr\", \"u32\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n render: {\n args: [\"ptr\", \"bool\"],\n returns: \"void\",\n },\n getNextBuffer: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n getCurrentBuffer: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n\n createOptimizedBuffer: {\n args: [\"u32\", \"u32\", \"bool\", \"u8\", \"ptr\", \"usize\"],\n returns: \"ptr\",\n },\n destroyOptimizedBuffer: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n\n drawFrameBuffer: {\n args: [\"ptr\", \"i32\", \"i32\", \"ptr\", \"u32\", \"u32\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n getBufferWidth: {\n args: [\"ptr\"],\n returns: \"u32\",\n },\n getBufferHeight: {\n args: [\"ptr\"],\n returns: \"u32\",\n },\n bufferClear: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n bufferGetCharPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n bufferGetFgPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n bufferGetBgPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n bufferGetAttributesPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n bufferGetRespectAlpha: {\n args: [\"ptr\"],\n returns: \"bool\",\n },\n bufferSetRespectAlpha: {\n args: [\"ptr\", \"bool\"],\n returns: \"void\",\n },\n bufferGetId: {\n args: [\"ptr\", \"ptr\", \"usize\"],\n returns: \"usize\",\n },\n\n bufferDrawText: {\n args: [\"ptr\", \"ptr\", \"u32\", \"u32\", \"u32\", \"ptr\", \"ptr\", \"u8\"],\n returns: \"void\",\n },\n bufferSetCellWithAlphaBlending: {\n args: [\"ptr\", \"u32\", \"u32\", \"u32\", \"ptr\", \"ptr\", \"u8\"],\n returns: \"void\",\n },\n bufferFillRect: {\n args: [\"ptr\", \"u32\", \"u32\", \"u32\", \"u32\", \"ptr\"],\n returns: \"void\",\n },\n bufferResize: {\n args: [\"ptr\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n\n resizeRenderer: {\n args: [\"ptr\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n\n // Cursor functions (now renderer-scoped)\n setCursorPosition: {\n args: [\"ptr\", \"i32\", \"i32\", \"bool\"],\n returns: \"void\",\n },\n setCursorStyle: {\n args: [\"ptr\", \"ptr\", \"u32\", \"bool\"],\n returns: \"void\",\n },\n setCursorColor: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n\n // Debug overlay\n setDebugOverlay: {\n args: [\"ptr\", \"bool\", \"u8\"],\n returns: \"void\",\n },\n\n // Terminal control\n clearTerminal: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n setTerminalTitle: {\n args: [\"ptr\", \"ptr\", \"usize\"],\n returns: \"void\",\n },\n\n bufferDrawSuperSampleBuffer: {\n args: [\"ptr\", \"u32\", \"u32\", \"ptr\", \"usize\", \"u8\", \"u32\"],\n returns: \"void\",\n },\n bufferDrawPackedBuffer: {\n args: [\"ptr\", \"ptr\", \"usize\", \"u32\", \"u32\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n bufferDrawBox: {\n args: [\"ptr\", \"i32\", \"i32\", \"u32\", \"u32\", \"ptr\", \"u32\", \"ptr\", \"ptr\", \"ptr\", \"u32\"],\n returns: \"void\",\n },\n bufferPushScissorRect: {\n args: [\"ptr\", \"i32\", \"i32\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n bufferPopScissorRect: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n bufferClearScissorRects: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n\n addToHitGrid: {\n args: [\"ptr\", \"i32\", \"i32\", \"u32\", \"u32\", \"u32\"],\n returns: \"void\",\n },\n checkHit: {\n args: [\"ptr\", \"u32\", \"u32\"],\n returns: \"u32\",\n },\n dumpHitGrid: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n dumpBuffers: {\n args: [\"ptr\", \"i64\"],\n returns: \"void\",\n },\n dumpStdoutBuffer: {\n args: [\"ptr\", \"i64\"],\n returns: \"void\",\n },\n enableMouse: {\n args: [\"ptr\", \"bool\"],\n returns: \"void\",\n },\n disableMouse: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n enableKittyKeyboard: {\n args: [\"ptr\", \"u8\"],\n returns: \"void\",\n },\n disableKittyKeyboard: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n setupTerminal: {\n args: [\"ptr\", \"bool\"],\n returns: \"void\",\n },\n\n // TextBuffer functions\n createTextBuffer: {\n args: [\"u32\", \"u8\"],\n returns: \"ptr\",\n },\n destroyTextBuffer: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n textBufferGetCharPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetFgPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetBgPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetAttributesPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetLength: {\n args: [\"ptr\"],\n returns: \"u32\",\n },\n textBufferSetCell: {\n args: [\"ptr\", \"u32\", \"u32\", \"ptr\", \"ptr\", \"u16\"],\n returns: \"void\",\n },\n textBufferConcat: {\n args: [\"ptr\", \"ptr\"],\n returns: \"ptr\",\n },\n textBufferResize: {\n args: [\"ptr\", \"u32\"],\n returns: \"void\",\n },\n textBufferReset: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n textBufferSetSelection: {\n args: [\"ptr\", \"u32\", \"u32\", \"ptr\", \"ptr\"],\n returns: \"void\",\n },\n textBufferResetSelection: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n textBufferSetDefaultFg: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n textBufferSetDefaultBg: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n textBufferSetDefaultAttributes: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n textBufferResetDefaults: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n textBufferWriteChunk: {\n args: [\"ptr\", \"ptr\", \"u32\", \"ptr\", \"ptr\", \"ptr\"],\n returns: \"u32\",\n },\n textBufferGetCapacity: {\n args: [\"ptr\"],\n returns: \"u32\",\n },\n textBufferFinalizeLineInfo: {\n args: [\"ptr\"],\n returns: \"void\",\n },\n textBufferGetLineStartsPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetLineWidthsPtr: {\n args: [\"ptr\"],\n returns: \"ptr\",\n },\n textBufferGetLineCount: {\n args: [\"ptr\"],\n returns: \"u32\",\n },\n bufferDrawTextBuffer: {\n args: [\"ptr\", \"ptr\", \"i32\", \"i32\", \"i32\", \"i32\", \"u32\", \"u32\", \"bool\"],\n returns: \"void\",\n },\n\n // Terminal capability functions\n getTerminalCapabilities: {\n args: [\"ptr\", \"ptr\"],\n returns: \"void\",\n },\n processCapabilityResponse: {\n args: [\"ptr\", \"ptr\", \"usize\"],\n returns: \"void\",\n },\n })\n}\n\n// Log levels matching Zig's LogLevel enum\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n}\n\nexport interface RenderLib {\n createRenderer: (width: number, height: number) => Pointer | null\n destroyRenderer: (renderer: Pointer, useAlternateScreen: boolean, splitHeight: number) => void\n setUseThread: (renderer: Pointer, useThread: boolean) => void\n setBackgroundColor: (renderer: Pointer, color: RGBA) => void\n setRenderOffset: (renderer: Pointer, offset: number) => void\n updateStats: (renderer: Pointer, time: number, fps: number, frameCallbackTime: number) => void\n updateMemoryStats: (renderer: Pointer, heapUsed: number, heapTotal: number, arrayBuffers: number) => void\n render: (renderer: Pointer, force: boolean) => void\n getNextBuffer: (renderer: Pointer) => OptimizedBuffer\n getCurrentBuffer: (renderer: Pointer) => OptimizedBuffer\n createOptimizedBuffer: (\n width: number,\n height: number,\n widthMethod: WidthMethod,\n respectAlpha?: boolean,\n id?: string,\n ) => OptimizedBuffer\n destroyOptimizedBuffer: (bufferPtr: Pointer) => void\n drawFrameBuffer: (\n targetBufferPtr: Pointer,\n destX: number,\n destY: number,\n bufferPtr: Pointer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ) => void\n getBufferWidth: (buffer: Pointer) => number\n getBufferHeight: (buffer: Pointer) => number\n bufferClear: (buffer: Pointer, color: RGBA) => void\n bufferGetCharPtr: (buffer: Pointer) => Pointer\n bufferGetFgPtr: (buffer: Pointer) => Pointer\n bufferGetBgPtr: (buffer: Pointer) => Pointer\n bufferGetAttributesPtr: (buffer: Pointer) => Pointer\n bufferGetRespectAlpha: (buffer: Pointer) => boolean\n bufferSetRespectAlpha: (buffer: Pointer, respectAlpha: boolean) => void\n bufferGetId: (buffer: Pointer) => string\n bufferDrawText: (\n buffer: Pointer,\n text: string,\n x: number,\n y: number,\n color: RGBA,\n bgColor?: RGBA,\n attributes?: number,\n ) => void\n bufferSetCellWithAlphaBlending: (\n buffer: Pointer,\n x: number,\n y: number,\n char: string,\n color: RGBA,\n bgColor: RGBA,\n attributes?: number,\n ) => void\n bufferFillRect: (buffer: Pointer, x: number, y: number, width: number, height: number, color: RGBA) => void\n bufferDrawSuperSampleBuffer: (\n buffer: Pointer,\n x: number,\n y: number,\n pixelDataPtr: Pointer,\n pixelDataLength: number,\n format: \"bgra8unorm\" | \"rgba8unorm\",\n alignedBytesPerRow: number,\n ) => void\n bufferDrawPackedBuffer: (\n buffer: Pointer,\n dataPtr: Pointer,\n dataLen: number,\n posX: number,\n posY: number,\n terminalWidthCells: number,\n terminalHeightCells: number,\n ) => void\n bufferDrawBox: (\n buffer: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n borderChars: Uint32Array,\n packedOptions: number,\n borderColor: RGBA,\n backgroundColor: RGBA,\n title: string | null,\n ) => void\n bufferResize: (\n buffer: Pointer,\n width: number,\n height: number,\n ) => {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n }\n resizeRenderer: (renderer: Pointer, width: number, height: number) => void\n setCursorPosition: (renderer: Pointer, x: number, y: number, visible: boolean) => void\n setCursorStyle: (renderer: Pointer, style: CursorStyle, blinking: boolean) => void\n setCursorColor: (renderer: Pointer, color: RGBA) => void\n setDebugOverlay: (renderer: Pointer, enabled: boolean, corner: DebugOverlayCorner) => void\n clearTerminal: (renderer: Pointer) => void\n setTerminalTitle: (renderer: Pointer, title: string) => void\n addToHitGrid: (renderer: Pointer, x: number, y: number, width: number, height: number, id: number) => void\n checkHit: (renderer: Pointer, x: number, y: number) => number\n dumpHitGrid: (renderer: Pointer) => void\n dumpBuffers: (renderer: Pointer, timestamp?: number) => void\n dumpStdoutBuffer: (renderer: Pointer, timestamp?: number) => void\n enableMouse: (renderer: Pointer, enableMovement: boolean) => void\n disableMouse: (renderer: Pointer) => void\n enableKittyKeyboard: (renderer: Pointer, flags: number) => void\n disableKittyKeyboard: (renderer: Pointer) => void\n setupTerminal: (renderer: Pointer, useAlternateScreen: boolean) => void\n\n // TextBuffer methods\n createTextBuffer: (capacity: number, widthMethod: WidthMethod) => TextBuffer\n destroyTextBuffer: (buffer: Pointer) => void\n textBufferGetCharPtr: (buffer: Pointer) => Pointer\n textBufferGetFgPtr: (buffer: Pointer) => Pointer\n textBufferGetBgPtr: (buffer: Pointer) => Pointer\n textBufferGetAttributesPtr: (buffer: Pointer) => Pointer\n textBufferGetLength: (buffer: Pointer) => number\n textBufferSetCell: (\n buffer: Pointer,\n index: number,\n char: number,\n fg: Float32Array,\n bg: Float32Array,\n attr: number,\n ) => void\n textBufferConcat: (buffer1: Pointer, buffer2: Pointer) => TextBuffer\n textBufferResize: (\n buffer: Pointer,\n newLength: number,\n ) => {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n }\n textBufferReset: (buffer: Pointer) => void\n textBufferSetSelection: (\n buffer: Pointer,\n start: number,\n end: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => void\n textBufferResetSelection: (buffer: Pointer) => void\n textBufferSetDefaultFg: (buffer: Pointer, fg: RGBA | null) => void\n textBufferSetDefaultBg: (buffer: Pointer, bg: RGBA | null) => void\n textBufferSetDefaultAttributes: (buffer: Pointer, attributes: number | null) => void\n textBufferResetDefaults: (buffer: Pointer) => void\n textBufferWriteChunk: (\n buffer: Pointer,\n textBytes: Uint8Array,\n fg: RGBA | null,\n bg: RGBA | null,\n attributes: number | null,\n ) => number\n textBufferGetCapacity: (buffer: Pointer) => number\n textBufferFinalizeLineInfo: (buffer: Pointer) => void\n textBufferGetLineInfo: (buffer: Pointer) => { lineStarts: number[]; lineWidths: number[] }\n getTextBufferArrays: (\n buffer: Pointer,\n size: number,\n ) => {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n }\n bufferDrawTextBuffer: (\n buffer: Pointer,\n textBuffer: Pointer,\n x: number,\n y: number,\n clipRect?: { x: number; y: number; width: number; height: number },\n ) => void\n bufferPushScissorRect: (buffer: Pointer, x: number, y: number, width: number, height: number) => void\n bufferPopScissorRect: (buffer: Pointer) => void\n bufferClearScissorRects: (buffer: Pointer) => void\n\n getTerminalCapabilities: (renderer: Pointer) => any\n processCapabilityResponse: (renderer: Pointer, response: string) => void\n}\n\nclass FFIRenderLib implements RenderLib {\n private opentui: ReturnType<typeof getOpenTUILib>\n private encoder: TextEncoder = new TextEncoder()\n private decoder: TextDecoder = new TextDecoder()\n private logCallbackWrapper: any // Store the FFI callback wrapper\n\n constructor(libPath?: string) {\n this.opentui = getOpenTUILib(libPath)\n this.setupLogging()\n }\n\n private setupLogging() {\n if (this.logCallbackWrapper) {\n return\n }\n\n const logCallback = new JSCallback(\n (level: number, msgPtr: Pointer, msgLenBigInt: bigint | number) => {\n try {\n const msgLen = typeof msgLenBigInt === \"bigint\" ? Number(msgLenBigInt) : msgLenBigInt\n\n if (msgLen === 0 || !msgPtr) {\n return\n }\n\n const msgBuffer = toArrayBuffer(msgPtr, 0, msgLen)\n const msgBytes = new Uint8Array(msgBuffer)\n const message = this.decoder.decode(msgBytes)\n\n switch (level) {\n case LogLevel.Error:\n console.error(message)\n break\n case LogLevel.Warn:\n console.warn(message)\n break\n case LogLevel.Info:\n console.info(message)\n break\n case LogLevel.Debug:\n console.debug(message)\n break\n default:\n console.log(message)\n }\n } catch (error) {\n console.error(\"Error in Zig log callback:\", error)\n }\n },\n {\n args: [\"u8\", \"ptr\", \"usize\"],\n returns: \"void\",\n },\n )\n\n this.logCallbackWrapper = logCallback\n\n if (!logCallback.ptr) {\n throw new Error(\"Failed to create log callback\")\n }\n\n this.setLogCallback(logCallback.ptr)\n }\n\n private setLogCallback(callbackPtr: Pointer) {\n this.opentui.symbols.setLogCallback(callbackPtr)\n }\n\n public createRenderer(width: number, height: number) {\n return this.opentui.symbols.createRenderer(width, height)\n }\n\n public destroyRenderer(renderer: Pointer, useAlternateScreen: boolean, splitHeight: number) {\n this.opentui.symbols.destroyRenderer(renderer, useAlternateScreen, splitHeight)\n }\n\n public setUseThread(renderer: Pointer, useThread: boolean) {\n this.opentui.symbols.setUseThread(renderer, useThread)\n }\n\n public setBackgroundColor(renderer: Pointer, color: RGBA) {\n this.opentui.symbols.setBackgroundColor(renderer, color.buffer)\n }\n\n public setRenderOffset(renderer: Pointer, offset: number) {\n this.opentui.symbols.setRenderOffset(renderer, offset)\n }\n\n public updateStats(renderer: Pointer, time: number, fps: number, frameCallbackTime: number) {\n this.opentui.symbols.updateStats(renderer, time, fps, frameCallbackTime)\n }\n\n public updateMemoryStats(renderer: Pointer, heapUsed: number, heapTotal: number, arrayBuffers: number) {\n this.opentui.symbols.updateMemoryStats(renderer, heapUsed, heapTotal, arrayBuffers)\n }\n\n public getNextBuffer(renderer: Pointer): OptimizedBuffer {\n const bufferPtr = this.opentui.symbols.getNextBuffer(renderer)\n if (!bufferPtr) {\n throw new Error(\"Failed to get next buffer\")\n }\n\n const width = this.opentui.symbols.getBufferWidth(bufferPtr)\n const height = this.opentui.symbols.getBufferHeight(bufferPtr)\n const size = width * height\n const buffers = this.getBuffer(bufferPtr, size)\n\n return new OptimizedBuffer(this, bufferPtr, buffers, width, height, { id: \"next buffer\" })\n }\n\n public getCurrentBuffer(renderer: Pointer): OptimizedBuffer {\n const bufferPtr = this.opentui.symbols.getCurrentBuffer(renderer)\n if (!bufferPtr) {\n throw new Error(\"Failed to get current buffer\")\n }\n\n const width = this.opentui.symbols.getBufferWidth(bufferPtr)\n const height = this.opentui.symbols.getBufferHeight(bufferPtr)\n const size = width * height\n const buffers = this.getBuffer(bufferPtr, size)\n\n return new OptimizedBuffer(this, bufferPtr, buffers, width, height, { id: \"current buffer\" })\n }\n\n private getBuffer(\n bufferPtr: Pointer,\n size: number,\n ): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n } {\n const charPtr = this.opentui.symbols.bufferGetCharPtr(bufferPtr)\n const fgPtr = this.opentui.symbols.bufferGetFgPtr(bufferPtr)\n const bgPtr = this.opentui.symbols.bufferGetBgPtr(bufferPtr)\n const attributesPtr = this.opentui.symbols.bufferGetAttributesPtr(bufferPtr)\n\n if (!charPtr || !fgPtr || !bgPtr || !attributesPtr) {\n throw new Error(\"Failed to get buffer pointers\")\n }\n\n const buffers = {\n char: new Uint32Array(toArrayBuffer(charPtr, 0, size * 4)),\n fg: new Float32Array(toArrayBuffer(fgPtr, 0, size * 4 * 4)), // 4 floats per RGBA\n bg: new Float32Array(toArrayBuffer(bgPtr, 0, size * 4 * 4)), // 4 floats per RGBA\n attributes: new Uint8Array(toArrayBuffer(attributesPtr, 0, size)),\n }\n\n return buffers\n }\n\n private getTextBuffer(\n bufferPtr: Pointer,\n size: number,\n ): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n } {\n const charPtr = this.opentui.symbols.textBufferGetCharPtr(bufferPtr)\n const fgPtr = this.opentui.symbols.textBufferGetFgPtr(bufferPtr)\n const bgPtr = this.opentui.symbols.textBufferGetBgPtr(bufferPtr)\n const attributesPtr = this.opentui.symbols.textBufferGetAttributesPtr(bufferPtr)\n\n if (!charPtr || !fgPtr || !bgPtr || !attributesPtr) {\n throw new Error(\"Failed to get text buffer pointers\")\n }\n\n const buffers = {\n char: new Uint32Array(toArrayBuffer(charPtr, 0, size * 4)),\n fg: new Float32Array(toArrayBuffer(fgPtr, 0, size * 4 * 4)), // 4 floats per RGBA\n bg: new Float32Array(toArrayBuffer(bgPtr, 0, size * 4 * 4)), // 4 floats per RGBA\n attributes: new Uint16Array(toArrayBuffer(attributesPtr, 0, size * 2)), // 2 bytes per u16\n }\n\n return buffers\n }\n\n public bufferGetCharPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.bufferGetCharPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get char pointer\")\n }\n return ptr\n }\n\n public bufferGetFgPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.bufferGetFgPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get fg pointer\")\n }\n return ptr\n }\n\n public bufferGetBgPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.bufferGetBgPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get bg pointer\")\n }\n return ptr\n }\n\n public bufferGetAttributesPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.bufferGetAttributesPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get attributes pointer\")\n }\n return ptr\n }\n\n public bufferGetRespectAlpha(buffer: Pointer): boolean {\n return this.opentui.symbols.bufferGetRespectAlpha(buffer)\n }\n\n public bufferSetRespectAlpha(buffer: Pointer, respectAlpha: boolean): void {\n this.opentui.symbols.bufferSetRespectAlpha(buffer, respectAlpha)\n }\n\n public bufferGetId(buffer: Pointer): string {\n const maxLen = 256\n const outBuffer = new Uint8Array(maxLen)\n const actualLen = this.opentui.symbols.bufferGetId(buffer, outBuffer, maxLen)\n const len = typeof actualLen === \"bigint\" ? Number(actualLen) : actualLen\n return this.decoder.decode(outBuffer.slice(0, len))\n }\n\n public getBufferWidth(buffer: Pointer): number {\n return this.opentui.symbols.getBufferWidth(buffer)\n }\n\n public getBufferHeight(buffer: Pointer): number {\n return this.opentui.symbols.getBufferHeight(buffer)\n }\n\n public bufferClear(buffer: Pointer, color: RGBA) {\n this.opentui.symbols.bufferClear(buffer, color.buffer)\n }\n\n public bufferDrawText(\n buffer: Pointer,\n text: string,\n x: number,\n y: number,\n color: RGBA,\n bgColor?: RGBA,\n attributes?: number,\n ) {\n const textBytes = this.encoder.encode(text)\n const textLength = textBytes.byteLength\n const bg = bgColor ? bgColor.buffer : null\n const fg = color.buffer\n\n this.opentui.symbols.bufferDrawText(buffer, textBytes, textLength, x, y, fg, bg, attributes ?? 0)\n }\n\n public bufferSetCellWithAlphaBlending(\n buffer: Pointer,\n x: number,\n y: number,\n char: string,\n color: RGBA,\n bgColor: RGBA,\n attributes?: number,\n ) {\n const charPtr = char.codePointAt(0) ?? \" \".codePointAt(0)!\n const bg = bgColor.buffer\n const fg = color.buffer\n\n this.opentui.symbols.bufferSetCellWithAlphaBlending(buffer, x, y, charPtr, fg, bg, attributes ?? 0)\n }\n\n public bufferFillRect(buffer: Pointer, x: number, y: number, width: number, height: number, color: RGBA) {\n const bg = color.buffer\n this.opentui.symbols.bufferFillRect(buffer, x, y, width, height, bg)\n }\n\n public bufferDrawSuperSampleBuffer(\n buffer: Pointer,\n x: number,\n y: number,\n pixelDataPtr: Pointer,\n pixelDataLength: number,\n format: \"bgra8unorm\" | \"rgba8unorm\",\n alignedBytesPerRow: number,\n ): void {\n const formatId = format === \"bgra8unorm\" ? 0 : 1\n this.opentui.symbols.bufferDrawSuperSampleBuffer(\n buffer,\n x,\n y,\n pixelDataPtr,\n pixelDataLength,\n formatId,\n alignedBytesPerRow,\n )\n }\n\n public bufferDrawPackedBuffer(\n buffer: Pointer,\n dataPtr: Pointer,\n dataLen: number,\n posX: number,\n posY: number,\n terminalWidthCells: number,\n terminalHeightCells: number,\n ): void {\n this.opentui.symbols.bufferDrawPackedBuffer(\n buffer,\n dataPtr,\n dataLen,\n posX,\n posY,\n terminalWidthCells,\n terminalHeightCells,\n )\n }\n\n public bufferDrawBox(\n buffer: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n borderChars: Uint32Array,\n packedOptions: number,\n borderColor: RGBA,\n backgroundColor: RGBA,\n title: string | null,\n ): void {\n const titleBytes = title ? this.encoder.encode(title) : null\n const titleLen = title ? titleBytes!.length : 0\n const titlePtr = title ? titleBytes : null\n\n this.opentui.symbols.bufferDrawBox(\n buffer,\n x,\n y,\n width,\n height,\n borderChars,\n packedOptions,\n borderColor.buffer,\n backgroundColor.buffer,\n titlePtr,\n titleLen,\n )\n }\n\n public bufferResize(\n buffer: Pointer,\n width: number,\n height: number,\n ): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n } {\n this.opentui.symbols.bufferResize(buffer, width, height)\n const buffers = this.getBuffer(buffer, width * height)\n return buffers\n }\n\n public resizeRenderer(renderer: Pointer, width: number, height: number) {\n this.opentui.symbols.resizeRenderer(renderer, width, height)\n }\n\n public setCursorPosition(renderer: Pointer, x: number, y: number, visible: boolean) {\n this.opentui.symbols.setCursorPosition(renderer, x, y, visible)\n }\n\n public setCursorStyle(renderer: Pointer, style: CursorStyle, blinking: boolean) {\n const stylePtr = this.encoder.encode(style)\n this.opentui.symbols.setCursorStyle(renderer, stylePtr, style.length, blinking)\n }\n\n public setCursorColor(renderer: Pointer, color: RGBA) {\n this.opentui.symbols.setCursorColor(renderer, color.buffer)\n }\n\n public render(renderer: Pointer, force: boolean) {\n this.opentui.symbols.render(renderer, force)\n }\n\n public createOptimizedBuffer(\n width: number,\n height: number,\n widthMethod: WidthMethod,\n respectAlpha: boolean = false,\n id?: string,\n ): OptimizedBuffer {\n if (Number.isNaN(width) || Number.isNaN(height)) {\n console.error(new Error(`Invalid dimensions for OptimizedBuffer: ${width}x${height}`).stack)\n }\n\n const widthMethodCode = widthMethod === \"wcwidth\" ? 0 : 1\n const idToUse = id || \"unnamed buffer\"\n const idBytes = this.encoder.encode(idToUse)\n const bufferPtr = this.opentui.symbols.createOptimizedBuffer(\n width,\n height,\n respectAlpha,\n widthMethodCode,\n idBytes,\n idBytes.length,\n )\n if (!bufferPtr) {\n throw new Error(`Failed to create optimized buffer: ${width}x${height}`)\n }\n const size = width * height\n const buffers = this.getBuffer(bufferPtr, size)\n\n return new OptimizedBuffer(this, bufferPtr, buffers, width, height, { respectAlpha, id })\n }\n\n public destroyOptimizedBuffer(bufferPtr: Pointer) {\n this.opentui.symbols.destroyOptimizedBuffer(bufferPtr)\n }\n\n public drawFrameBuffer(\n targetBufferPtr: Pointer,\n destX: number,\n destY: number,\n bufferPtr: Pointer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ) {\n const srcX = sourceX ?? 0\n const srcY = sourceY ?? 0\n const srcWidth = sourceWidth ?? 0\n const srcHeight = sourceHeight ?? 0\n this.opentui.symbols.drawFrameBuffer(targetBufferPtr, destX, destY, bufferPtr, srcX, srcY, srcWidth, srcHeight)\n }\n\n public setDebugOverlay(renderer: Pointer, enabled: boolean, corner: DebugOverlayCorner) {\n this.opentui.symbols.setDebugOverlay(renderer, enabled, corner)\n }\n\n public clearTerminal(renderer: Pointer) {\n this.opentui.symbols.clearTerminal(renderer)\n }\n\n public setTerminalTitle(renderer: Pointer, title: string) {\n const titleBytes = this.encoder.encode(title)\n this.opentui.symbols.setTerminalTitle(renderer, titleBytes, titleBytes.length)\n }\n\n public addToHitGrid(renderer: Pointer, x: number, y: number, width: number, height: number, id: number) {\n this.opentui.symbols.addToHitGrid(renderer, x, y, width, height, id)\n }\n\n public checkHit(renderer: Pointer, x: number, y: number): number {\n return this.opentui.symbols.checkHit(renderer, x, y)\n }\n\n public dumpHitGrid(renderer: Pointer): void {\n this.opentui.symbols.dumpHitGrid(renderer)\n }\n\n public dumpBuffers(renderer: Pointer, timestamp?: number): void {\n const ts = timestamp ?? Date.now()\n this.opentui.symbols.dumpBuffers(renderer, ts)\n }\n\n public dumpStdoutBuffer(renderer: Pointer, timestamp?: number): void {\n const ts = timestamp ?? Date.now()\n this.opentui.symbols.dumpStdoutBuffer(renderer, ts)\n }\n\n public enableMouse(renderer: Pointer, enableMovement: boolean): void {\n this.opentui.symbols.enableMouse(renderer, enableMovement)\n }\n\n public disableMouse(renderer: Pointer): void {\n this.opentui.symbols.disableMouse(renderer)\n }\n\n public enableKittyKeyboard(renderer: Pointer, flags: number): void {\n this.opentui.symbols.enableKittyKeyboard(renderer, flags)\n }\n\n public disableKittyKeyboard(renderer: Pointer): void {\n this.opentui.symbols.disableKittyKeyboard(renderer)\n }\n\n public setupTerminal(renderer: Pointer, useAlternateScreen: boolean): void {\n this.opentui.symbols.setupTerminal(renderer, useAlternateScreen)\n }\n\n // TextBuffer methods\n public createTextBuffer(capacity: number, widthMethod: WidthMethod): TextBuffer {\n const widthMethodCode = widthMethod === \"wcwidth\" ? 0 : 1\n const bufferPtr = this.opentui.symbols.createTextBuffer(capacity, widthMethodCode)\n if (!bufferPtr) {\n throw new Error(`Failed to create TextBuffer with capacity ${capacity}`)\n }\n\n const charPtr = this.textBufferGetCharPtr(bufferPtr)\n const fgPtr = this.textBufferGetFgPtr(bufferPtr)\n const bgPtr = this.textBufferGetBgPtr(bufferPtr)\n const attributesPtr = this.textBufferGetAttributesPtr(bufferPtr)\n\n const buffer = {\n char: new Uint32Array(toArrayBuffer(charPtr, 0, capacity * 4)),\n fg: new Float32Array(toArrayBuffer(fgPtr, 0, capacity * 4 * 4)),\n bg: new Float32Array(toArrayBuffer(bgPtr, 0, capacity * 4 * 4)),\n attributes: new Uint16Array(toArrayBuffer(attributesPtr, 0, capacity * 2)), // 2 bytes per u16\n }\n\n return new TextBuffer(this, bufferPtr, buffer, capacity)\n }\n\n public destroyTextBuffer(buffer: Pointer): void {\n this.opentui.symbols.destroyTextBuffer(buffer)\n }\n\n public textBufferGetCharPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.textBufferGetCharPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get TextBuffer char pointer\")\n }\n return ptr\n }\n\n public textBufferGetFgPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.textBufferGetFgPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get TextBuffer fg pointer\")\n }\n return ptr\n }\n\n public textBufferGetBgPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.textBufferGetBgPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get TextBuffer bg pointer\")\n }\n return ptr\n }\n\n public textBufferGetAttributesPtr(buffer: Pointer): Pointer {\n const ptr = this.opentui.symbols.textBufferGetAttributesPtr(buffer)\n if (!ptr) {\n throw new Error(\"Failed to get TextBuffer attributes pointer\")\n }\n return ptr\n }\n\n public textBufferGetLength(buffer: Pointer): number {\n return this.opentui.symbols.textBufferGetLength(buffer)\n }\n\n public textBufferSetCell(\n buffer: Pointer,\n index: number,\n char: number,\n fg: Float32Array,\n bg: Float32Array,\n attr: number,\n ): void {\n this.opentui.symbols.textBufferSetCell(buffer, index, char, fg, bg, attr)\n }\n\n public textBufferConcat(buffer1: Pointer, buffer2: Pointer): TextBuffer {\n const resultPtr = this.opentui.symbols.textBufferConcat(buffer1, buffer2)\n if (!resultPtr) {\n throw new Error(\"Failed to concatenate TextBuffers\")\n }\n\n const length = this.textBufferGetLength(resultPtr)\n const charPtr = this.textBufferGetCharPtr(resultPtr)\n const fgPtr = this.textBufferGetFgPtr(resultPtr)\n const bgPtr = this.textBufferGetBgPtr(resultPtr)\n const attributesPtr = this.textBufferGetAttributesPtr(resultPtr)\n\n const buffer = {\n char: new Uint32Array(toArrayBuffer(charPtr, 0, length * 4)),\n fg: new Float32Array(toArrayBuffer(fgPtr, 0, length * 4 * 4)),\n bg: new Float32Array(toArrayBuffer(bgPtr, 0, length * 4 * 4)),\n attributes: new Uint16Array(toArrayBuffer(attributesPtr, 0, length * 2)),\n }\n\n return new TextBuffer(this, resultPtr, buffer, length)\n }\n\n public textBufferResize(\n buffer: Pointer,\n newLength: number,\n ): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n } {\n this.opentui.symbols.textBufferResize(buffer, newLength)\n const buffers = this.getTextBuffer(buffer, newLength)\n return buffers\n }\n\n public textBufferReset(buffer: Pointer): void {\n this.opentui.symbols.textBufferReset(buffer)\n }\n\n public textBufferSetSelection(\n buffer: Pointer,\n start: number,\n end: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ): void {\n const bg = bgColor ? bgColor.buffer : null\n const fg = fgColor ? fgColor.buffer : null\n this.opentui.symbols.textBufferSetSelection(buffer, start, end, bg, fg)\n }\n\n public textBufferResetSelection(buffer: Pointer): void {\n this.opentui.symbols.textBufferResetSelection(buffer)\n }\n\n public textBufferSetDefaultFg(buffer: Pointer, fg: RGBA | null): void {\n const fgPtr = fg ? fg.buffer : null\n this.opentui.symbols.textBufferSetDefaultFg(buffer, fgPtr)\n }\n\n public textBufferSetDefaultBg(buffer: Pointer, bg: RGBA | null): void {\n const bgPtr = bg ? bg.buffer : null\n this.opentui.symbols.textBufferSetDefaultBg(buffer, bgPtr)\n }\n\n public textBufferSetDefaultAttributes(buffer: Pointer, attributes: number | null): void {\n const attrValue = attributes === null ? null : new Uint8Array([attributes])\n this.opentui.symbols.textBufferSetDefaultAttributes(buffer, attrValue)\n }\n\n public textBufferResetDefaults(buffer: Pointer): void {\n this.opentui.symbols.textBufferResetDefaults(buffer)\n }\n\n public textBufferWriteChunk(\n buffer: Pointer,\n textBytes: Uint8Array,\n fg: RGBA | null,\n bg: RGBA | null,\n attributes: number | null,\n ): number {\n const attrValue = attributes === null ? null : new Uint8Array([attributes])\n return this.opentui.symbols.textBufferWriteChunk(\n buffer,\n textBytes,\n textBytes.length,\n fg ? fg.buffer : null,\n bg ? bg.buffer : null,\n attrValue,\n )\n }\n\n public textBufferGetCapacity(buffer: Pointer): number {\n return this.opentui.symbols.textBufferGetCapacity(buffer)\n }\n\n public textBufferFinalizeLineInfo(buffer: Pointer): void {\n this.opentui.symbols.textBufferFinalizeLineInfo(buffer)\n }\n\n public textBufferGetLineInfo(buffer: Pointer): { lineStarts: number[]; lineWidths: number[] } {\n const lineCount = this.opentui.symbols.textBufferGetLineCount(buffer)\n if (lineCount === 0) {\n return { lineStarts: [], lineWidths: [] }\n }\n\n const lineStartsPtr = this.opentui.symbols.textBufferGetLineStartsPtr(buffer)\n const lineWidthsPtr = this.opentui.symbols.textBufferGetLineWidthsPtr(buffer)\n\n if (!lineStartsPtr || !lineWidthsPtr) {\n return { lineStarts: [], lineWidths: [] }\n }\n\n const lineStartsArray = new Uint32Array(toArrayBuffer(lineStartsPtr, 0, lineCount * 4))\n const lineWidthsArray = new Uint32Array(toArrayBuffer(lineWidthsPtr, 0, lineCount * 4))\n\n const lineStarts = Array.from(lineStartsArray)\n const lineWidths = Array.from(lineWidthsArray)\n\n return { lineStarts, lineWidths }\n }\n\n public getTextBufferArrays(\n buffer: Pointer,\n size: number,\n ): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n } {\n return this.getTextBuffer(buffer, size)\n }\n\n public bufferDrawTextBuffer(\n buffer: Pointer,\n textBuffer: Pointer,\n x: number,\n y: number,\n clipRect?: { x: number; y: number; width: number; height: number },\n ): void {\n const hasClipRect = clipRect !== undefined && clipRect !== null\n const clipX = clipRect?.x ?? 0\n const clipY = clipRect?.y ?? 0\n const clipWidth = clipRect?.width ?? 0\n const clipHeight = clipRect?.height ?? 0\n\n this.opentui.symbols.bufferDrawTextBuffer(\n buffer,\n textBuffer,\n x,\n y,\n clipX,\n clipY,\n clipWidth,\n clipHeight,\n hasClipRect,\n )\n }\n\n public bufferPushScissorRect(buffer: Pointer, x: number, y: number, width: number, height: number): void {\n this.opentui.symbols.bufferPushScissorRect(buffer, x, y, width, height)\n }\n\n public bufferPopScissorRect(buffer: Pointer): void {\n this.opentui.symbols.bufferPopScissorRect(buffer)\n }\n\n public bufferClearScissorRects(buffer: Pointer): void {\n this.opentui.symbols.bufferClearScissorRects(buffer)\n }\n\n public getTerminalCapabilities(renderer: Pointer): any {\n const capsBuffer = new Uint8Array(64)\n this.opentui.symbols.getTerminalCapabilities(renderer, capsBuffer)\n\n let offset = 0\n const capabilities = {\n kitty_keyboard: capsBuffer[offset++] !== 0,\n kitty_graphics: capsBuffer[offset++] !== 0,\n rgb: capsBuffer[offset++] !== 0,\n unicode: capsBuffer[offset++] === 0 ? \"wcwidth\" : \"unicode\",\n sgr_pixels: capsBuffer[offset++] !== 0,\n color_scheme_updates: capsBuffer[offset++] !== 0,\n explicit_width: capsBuffer[offset++] !== 0,\n scaled_text: capsBuffer[offset++] !== 0,\n sixel: capsBuffer[offset++] !== 0,\n focus_tracking: capsBuffer[offset++] !== 0,\n sync: capsBuffer[offset++] !== 0,\n bracketed_paste: capsBuffer[offset++] !== 0,\n hyperlinks: capsBuffer[offset++] !== 0,\n }\n\n return capabilities\n }\n\n public processCapabilityResponse(renderer: Pointer, response: string): void {\n const responseBytes = this.encoder.encode(response)\n this.opentui.symbols.processCapabilityResponse(renderer, responseBytes, responseBytes.length)\n }\n}\n\nlet opentuiLibPath: string | undefined\nlet opentuiLib: RenderLib | undefined\n\nexport function setRenderLibPath(libPath: string) {\n if (opentuiLibPath !== libPath) {\n opentuiLibPath = libPath\n opentuiLib = undefined\n }\n}\n\nexport function resolveRenderLib(): RenderLib {\n if (!opentuiLib) {\n try {\n opentuiLib = new FFIRenderLib(opentuiLibPath)\n } catch (error) {\n throw new Error(\n `Failed to initialize OpenTUI render library: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n )\n }\n }\n return opentuiLib\n}\n\n// Try eager loading\ntry {\n opentuiLib = new FFIRenderLib(opentuiLibPath)\n} catch (error) {}\n",
24
+ "import type { TextBuffer } from \"./text-buffer\"\nimport { RGBA } from \"./lib\"\nimport { resolveRenderLib, type RenderLib } from \"./zig\"\nimport { type Pointer } from \"bun:ffi\"\nimport { type BorderStyle, type BorderSides, type BorderCharacters, BorderCharArrays, borderCharsToArray } from \"./lib\"\nimport { type WidthMethod } from \"./types\"\n\nfunction isRGBAWithAlpha(color: RGBA): boolean {\n return color.a < 1.0\n}\n\n// Pack drawing options into a single u32\n// bits 0-3: borderSides, bit 4: shouldFill, bits 5-6: titleAlignment\nfunction packDrawOptions(\n border: boolean | BorderSides[],\n shouldFill: boolean,\n titleAlignment: \"left\" | \"center\" | \"right\",\n): number {\n let packed = 0\n\n if (border === true) {\n packed |= 0b1111 // All sides\n } else if (Array.isArray(border)) {\n if (border.includes(\"top\")) packed |= 0b1000\n if (border.includes(\"right\")) packed |= 0b0100\n if (border.includes(\"bottom\")) packed |= 0b0010\n if (border.includes(\"left\")) packed |= 0b0001\n }\n\n if (shouldFill) {\n packed |= 1 << 4\n }\n\n const alignmentMap: Record<string, number> = {\n left: 0,\n center: 1,\n right: 2,\n }\n const alignment = alignmentMap[titleAlignment]\n packed |= alignment << 5\n\n return packed\n}\n\nfunction blendColors(overlay: RGBA, text: RGBA): RGBA {\n const [overlayR, overlayG, overlayB, overlayA] = overlay.buffer\n const [textR, textG, textB, textA] = text.buffer\n\n if (overlayA === 1.0) {\n return overlay\n }\n\n const alpha = overlayA\n\n let perceptualAlpha: number\n\n if (alpha > 0.8) {\n const normalizedHighAlpha = (alpha - 0.8) * 5.0\n const curvedHighAlpha = Math.pow(normalizedHighAlpha, 0.2)\n perceptualAlpha = 0.8 + curvedHighAlpha * 0.2\n } else {\n perceptualAlpha = Math.pow(alpha, 0.9)\n }\n\n const r = overlayR * perceptualAlpha + textR * (1 - perceptualAlpha)\n const g = overlayG * perceptualAlpha + textG * (1 - perceptualAlpha)\n const b = overlayB * perceptualAlpha + textB * (1 - perceptualAlpha)\n\n return RGBA.fromValues(r, g, b, textA)\n}\n\nexport class OptimizedBuffer {\n private static fbIdCounter = 0\n public id: string\n public lib: RenderLib\n private bufferPtr: Pointer\n private buffer: {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n }\n private _width: number\n private _height: number\n public respectAlpha: boolean = false\n private useFFI: boolean = true\n\n get ptr(): Pointer {\n return this.bufferPtr\n }\n\n constructor(\n lib: RenderLib,\n ptr: Pointer,\n buffer: {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n },\n width: number,\n height: number,\n options: { respectAlpha?: boolean; id?: string },\n ) {\n this.id = options.id || `fb_${OptimizedBuffer.fbIdCounter++}`\n this.lib = lib\n this.respectAlpha = options.respectAlpha || false\n this._width = width\n this._height = height\n this.bufferPtr = ptr\n this.buffer = buffer\n }\n\n static create(\n width: number,\n height: number,\n widthMethod: WidthMethod,\n options: { respectAlpha?: boolean; id?: string } = {},\n ): OptimizedBuffer {\n const lib = resolveRenderLib()\n const respectAlpha = options.respectAlpha || false\n const id = options.id && options.id.trim() !== \"\" ? options.id : \"unnamed buffer\"\n return lib.createOptimizedBuffer(width, height, widthMethod, respectAlpha, id)\n }\n\n public get buffers(): {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint8Array\n } {\n return this.buffer\n }\n\n private coordsToIndex(x: number, y: number): number {\n return y * this._width + x\n }\n\n public get width(): number {\n return this._width\n }\n\n public get height(): number {\n return this._height\n }\n\n public setRespectAlpha(respectAlpha: boolean): void {\n this.lib.bufferSetRespectAlpha(this.bufferPtr, respectAlpha)\n this.respectAlpha = respectAlpha\n }\n\n public getNativeId(): string {\n return this.lib.bufferGetId(this.bufferPtr)\n }\n\n public clear(bg: RGBA = RGBA.fromValues(0, 0, 0, 1), clearChar: string = \" \"): void {\n if (this.useFFI) {\n this.clearFFI(bg)\n } else {\n this.clearLocal(bg, clearChar)\n }\n }\n\n public clearLocal(bg: RGBA = RGBA.fromValues(0, 0, 0, 1), clearChar: string = \" \"): void {\n this.buffer.char.fill(clearChar.charCodeAt(0))\n this.buffer.attributes.fill(0)\n\n for (let i = 0; i < this._width * this._height; i++) {\n const index = i * 4\n\n this.buffer.fg[index] = 1.0\n this.buffer.fg[index + 1] = 1.0\n this.buffer.fg[index + 2] = 1.0\n this.buffer.fg[index + 3] = 1.0\n\n this.buffer.bg[index] = bg.r\n this.buffer.bg[index + 1] = bg.g\n this.buffer.bg[index + 2] = bg.b\n this.buffer.bg[index + 3] = bg.a\n }\n }\n\n public setCell(x: number, y: number, char: string, fg: RGBA, bg: RGBA, attributes: number = 0): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n\n const index = this.coordsToIndex(x, y)\n const colorIndex = index * 4\n\n // Set character and attributes\n this.buffer.char[index] = char.charCodeAt(0)\n this.buffer.attributes[index] = attributes\n\n // Set foreground color\n this.buffer.fg[colorIndex] = fg.r\n this.buffer.fg[colorIndex + 1] = fg.g\n this.buffer.fg[colorIndex + 2] = fg.b\n this.buffer.fg[colorIndex + 3] = fg.a\n\n // Set background color\n this.buffer.bg[colorIndex] = bg.r\n this.buffer.bg[colorIndex + 1] = bg.g\n this.buffer.bg[colorIndex + 2] = bg.b\n this.buffer.bg[colorIndex + 3] = bg.a\n }\n\n public get(x: number, y: number): { char: number; fg: RGBA; bg: RGBA; attributes: number } | null {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return null\n\n const index = this.coordsToIndex(x, y)\n const colorIndex = index * 4\n\n return {\n char: this.buffer.char[index],\n fg: RGBA.fromArray(this.buffer.fg.slice(colorIndex, colorIndex + 4)),\n bg: RGBA.fromArray(this.buffer.bg.slice(colorIndex, colorIndex + 4)),\n attributes: this.buffer.attributes[index],\n }\n }\n\n public setCellWithAlphaBlending(\n x: number,\n y: number,\n char: string,\n fg: RGBA,\n bg: RGBA,\n attributes: number = 0,\n ): void {\n if (this.useFFI) {\n this.setCellWithAlphaBlendingFFI(x, y, char, fg, bg, attributes)\n } else {\n this.setCellWithAlphaBlendingLocal(x, y, char, fg, bg, attributes)\n }\n }\n\n public setCellWithAlphaBlendingLocal(\n x: number,\n y: number,\n char: string,\n fg: RGBA,\n bg: RGBA,\n attributes: number = 0,\n ): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n\n const hasBgAlpha = isRGBAWithAlpha(bg)\n const hasFgAlpha = isRGBAWithAlpha(fg)\n\n if (hasBgAlpha || hasFgAlpha) {\n const destCell = this.get(x, y)\n if (destCell) {\n const blendedBgRgb = hasBgAlpha ? blendColors(bg, destCell.bg) : bg\n\n const preserveChar = char === \" \" && destCell.char !== 0 && String.fromCharCode(destCell.char) !== \" \"\n const finalChar = preserveChar ? destCell.char : char.charCodeAt(0)\n\n let finalFg: RGBA\n if (preserveChar) {\n finalFg = blendColors(bg, destCell.fg)\n } else {\n finalFg = hasFgAlpha ? blendColors(fg, destCell.bg) : fg\n }\n\n const finalAttributes = preserveChar ? destCell.attributes : attributes\n const finalBg = RGBA.fromValues(blendedBgRgb.r, blendedBgRgb.g, blendedBgRgb.b, bg.a)\n\n this.setCell(x, y, String.fromCharCode(finalChar), finalFg, finalBg, finalAttributes)\n return\n }\n }\n\n this.setCell(x, y, char, fg, bg, attributes)\n }\n\n public drawText(\n text: string,\n x: number,\n y: number,\n fg: RGBA,\n bg?: RGBA,\n attributes: number = 0,\n selection?: { start: number; end: number; bgColor?: RGBA; fgColor?: RGBA } | null,\n ): void {\n if (!selection) {\n this.drawTextFFI.call(this, text, x, y, fg, bg, attributes)\n return\n }\n\n const { start, end } = selection\n\n let selectionBg: RGBA\n let selectionFg: RGBA\n\n if (selection.bgColor) {\n selectionBg = selection.bgColor\n selectionFg = selection.fgColor || fg\n } else {\n const defaultBg = bg || RGBA.fromValues(0, 0, 0, 0)\n selectionFg = defaultBg.a > 0 ? defaultBg : RGBA.fromValues(0, 0, 0, 1)\n selectionBg = fg\n }\n\n if (start > 0) {\n const beforeText = text.slice(0, start)\n this.drawTextFFI.call(this, beforeText, x, y, fg, bg, attributes)\n }\n\n if (end > start) {\n const selectedText = text.slice(start, end)\n this.drawTextFFI.call(this, selectedText, x + start, y, selectionFg, selectionBg, attributes)\n }\n\n if (end < text.length) {\n const afterText = text.slice(end)\n this.drawTextFFI.call(this, afterText, x + end, y, fg, bg, attributes)\n }\n }\n\n public fillRect(x: number, y: number, width: number, height: number, bg: RGBA): void {\n if (this.useFFI) {\n this.fillRectFFI(x, y, width, height, bg)\n } else {\n this.fillRectLocal(x, y, width, height, bg)\n }\n }\n\n public fillRectLocal(x: number, y: number, width: number, height: number, bg: RGBA): void {\n const startX = Math.max(0, x)\n const startY = Math.max(0, y)\n const endX = Math.min(this.width - 1, x + width - 1)\n const endY = Math.min(this.height - 1, y + height - 1)\n\n if (startX > endX || startY > endY) return\n\n const hasAlpha = isRGBAWithAlpha(bg)\n\n if (hasAlpha) {\n const fg = RGBA.fromValues(1.0, 1.0, 1.0, 1.0)\n for (let fillY = startY; fillY <= endY; fillY++) {\n for (let fillX = startX; fillX <= endX; fillX++) {\n this.setCellWithAlphaBlending(fillX, fillY, \" \", fg, bg, 0)\n }\n }\n } else {\n for (let fillY = startY; fillY <= endY; fillY++) {\n for (let fillX = startX; fillX <= endX; fillX++) {\n const index = this.coordsToIndex(fillX, fillY)\n const colorIndex = index * 4\n\n this.buffer.char[index] = \" \".charCodeAt(0)\n this.buffer.attributes[index] = 0\n\n this.buffer.fg[colorIndex] = 1.0\n this.buffer.fg[colorIndex + 1] = 1.0\n this.buffer.fg[colorIndex + 2] = 1.0\n this.buffer.fg[colorIndex + 3] = 1.0\n\n this.buffer.bg[colorIndex] = bg.r\n this.buffer.bg[colorIndex + 1] = bg.g\n this.buffer.bg[colorIndex + 2] = bg.b\n this.buffer.bg[colorIndex + 3] = bg.a\n }\n }\n }\n }\n\n public drawFrameBuffer(\n destX: number,\n destY: number,\n frameBuffer: OptimizedBuffer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ): void {\n // Prefer FFI for framebuffer drawing\n this.drawFrameBufferFFI(destX, destY, frameBuffer, sourceX, sourceY, sourceWidth, sourceHeight)\n }\n\n // TODO: REMOVE -- ffi only\n // @deprecated\n public drawFrameBufferLocal(\n destX: number,\n destY: number,\n frameBuffer: OptimizedBuffer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ): void {\n const srcX = sourceX ?? 0\n const srcY = sourceY ?? 0\n const srcWidth = sourceWidth ?? frameBuffer.width\n const srcHeight = sourceHeight ?? frameBuffer.height\n\n if (srcX >= frameBuffer.width || srcY >= frameBuffer.height) return\n if (srcWidth === 0 || srcHeight === 0) return\n\n const clampedSrcWidth = Math.min(srcWidth, frameBuffer.width - srcX)\n const clampedSrcHeight = Math.min(srcHeight, frameBuffer.height - srcY)\n\n const startDestX = Math.max(0, destX)\n const startDestY = Math.max(0, destY)\n const endDestX = Math.min(this._width - 1, destX + clampedSrcWidth - 1)\n const endDestY = Math.min(this._height - 1, destY + clampedSrcHeight - 1)\n\n if (!frameBuffer.respectAlpha) {\n for (let dY = startDestY; dY <= endDestY; dY++) {\n for (let dX = startDestX; dX <= endDestX; dX++) {\n const relativeDestX = dX - destX\n const relativeDestY = dY - destY\n const sX = srcX + relativeDestX\n const sY = srcY + relativeDestY\n\n if (sX >= frameBuffer.width || sY >= frameBuffer.height) continue\n\n const destIndex = this.coordsToIndex(dX, dY)\n const srcIndex = frameBuffer.coordsToIndex(sX, sY)\n\n const destColorIndex = destIndex * 4\n const srcColorIndex = srcIndex * 4\n\n // Copy character and attributes\n this.buffer.char[destIndex] = frameBuffer.buffer.char[srcIndex]\n this.buffer.attributes[destIndex] = frameBuffer.buffer.attributes[srcIndex]\n\n // Copy foreground color\n this.buffer.fg[destColorIndex] = frameBuffer.buffer.fg[srcColorIndex]\n this.buffer.fg[destColorIndex + 1] = frameBuffer.buffer.fg[srcColorIndex + 1]\n this.buffer.fg[destColorIndex + 2] = frameBuffer.buffer.fg[srcColorIndex + 2]\n this.buffer.fg[destColorIndex + 3] = frameBuffer.buffer.fg[srcColorIndex + 3]\n\n // Copy background color\n this.buffer.bg[destColorIndex] = frameBuffer.buffer.bg[srcColorIndex]\n this.buffer.bg[destColorIndex + 1] = frameBuffer.buffer.bg[srcColorIndex + 1]\n this.buffer.bg[destColorIndex + 2] = frameBuffer.buffer.bg[srcColorIndex + 2]\n this.buffer.bg[destColorIndex + 3] = frameBuffer.buffer.bg[srcColorIndex + 3]\n }\n }\n return\n }\n\n for (let dY = startDestY; dY <= endDestY; dY++) {\n for (let dX = startDestX; dX <= endDestX; dX++) {\n const relativeDestX = dX - destX\n const relativeDestY = dY - destY\n const sX = srcX + relativeDestX\n const sY = srcY + relativeDestY\n\n if (sX >= frameBuffer.width || sY >= frameBuffer.height) continue\n\n const srcIndex = frameBuffer.coordsToIndex(sX, sY)\n const srcColorIndex = srcIndex * 4\n\n if (frameBuffer.buffer.bg[srcColorIndex + 3] === 0 && frameBuffer.buffer.fg[srcColorIndex + 3] === 0) {\n continue\n }\n\n const charCode = frameBuffer.buffer.char[srcIndex]\n const fg: RGBA = RGBA.fromArray(frameBuffer.buffer.fg.slice(srcColorIndex, srcColorIndex + 4))\n const bg: RGBA = RGBA.fromArray(frameBuffer.buffer.bg.slice(srcColorIndex, srcColorIndex + 4))\n const attributes = frameBuffer.buffer.attributes[srcIndex]\n\n this.setCellWithAlphaBlending(dX, dY, String.fromCharCode(charCode), fg, bg, attributes)\n }\n }\n }\n\n public destroy(): void {\n this.lib.destroyOptimizedBuffer(this.bufferPtr)\n }\n\n public drawTextBuffer(\n textBuffer: TextBuffer,\n x: number,\n y: number,\n clipRect?: { x: number; y: number; width: number; height: number },\n ): void {\n // Use native implementation\n this.lib.bufferDrawTextBuffer(this.bufferPtr, textBuffer.ptr, x, y, clipRect)\n }\n\n public drawSuperSampleBuffer(\n x: number,\n y: number,\n pixelDataPtr: Pointer,\n pixelDataLength: number,\n format: \"bgra8unorm\" | \"rgba8unorm\",\n alignedBytesPerRow: number,\n ): void {\n // Prefer FFI for super sample buffer drawing\n this.drawSuperSampleBufferFFI(x, y, pixelDataPtr, pixelDataLength, format, alignedBytesPerRow)\n }\n\n //\n // FFI\n //\n\n public drawSuperSampleBufferFFI(\n x: number,\n y: number,\n pixelDataPtr: Pointer,\n pixelDataLength: number,\n format: \"bgra8unorm\" | \"rgba8unorm\",\n alignedBytesPerRow: number,\n ): void {\n this.lib.bufferDrawSuperSampleBuffer(\n this.bufferPtr,\n x,\n y,\n pixelDataPtr,\n pixelDataLength,\n format,\n alignedBytesPerRow,\n )\n }\n\n public drawPackedBuffer(\n dataPtr: Pointer,\n dataLen: number,\n posX: number,\n posY: number,\n terminalWidthCells: number,\n terminalHeightCells: number,\n ): void {\n this.lib.bufferDrawPackedBuffer(\n this.bufferPtr,\n dataPtr,\n dataLen,\n posX,\n posY,\n terminalWidthCells,\n terminalHeightCells,\n )\n }\n\n public setCellWithAlphaBlendingFFI(\n x: number,\n y: number,\n char: string,\n fg: RGBA,\n bg: RGBA,\n attributes?: number,\n ): void {\n this.lib.bufferSetCellWithAlphaBlending(this.bufferPtr, x, y, char, fg, bg, attributes)\n }\n\n public fillRectFFI(x: number, y: number, width: number, height: number, bg: RGBA): void {\n this.lib.bufferFillRect(this.bufferPtr, x, y, width, height, bg)\n }\n\n public resize(width: number, height: number): void {\n if (this._width === width && this._height === height) return\n\n this._width = width\n this._height = height\n\n this.buffer = this.lib.bufferResize(this.bufferPtr, width, height)\n }\n\n public clearFFI(bg: RGBA = RGBA.fromValues(0, 0, 0, 1)): void {\n this.lib.bufferClear(this.bufferPtr, bg)\n }\n\n public drawTextFFI(\n text: string,\n x: number,\n y: number,\n fg: RGBA = RGBA.fromValues(1.0, 1.0, 1.0, 1.0),\n bg?: RGBA,\n attributes: number = 0,\n ): void {\n this.lib.bufferDrawText(this.bufferPtr, text, x, y, fg, bg, attributes)\n }\n\n public drawFrameBufferFFI(\n destX: number,\n destY: number,\n frameBuffer: OptimizedBuffer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ): void {\n this.lib.drawFrameBuffer(this.bufferPtr, destX, destY, frameBuffer.ptr, sourceX, sourceY, sourceWidth, sourceHeight)\n }\n\n public drawBox(options: {\n x: number\n y: number\n width: number\n height: number\n borderStyle?: BorderStyle\n customBorderChars?: Uint32Array\n border: boolean | BorderSides[]\n borderColor: RGBA\n backgroundColor: RGBA\n shouldFill?: boolean\n title?: string\n titleAlignment?: \"left\" | \"center\" | \"right\"\n }): void {\n const style = options.borderStyle || \"single\"\n const borderChars: Uint32Array = options.customBorderChars ?? BorderCharArrays[style]\n\n const packedOptions = packDrawOptions(options.border, options.shouldFill ?? false, options.titleAlignment || \"left\")\n\n this.lib.bufferDrawBox(\n this.bufferPtr,\n options.x,\n options.y,\n options.width,\n options.height,\n borderChars,\n packedOptions,\n options.borderColor,\n options.backgroundColor,\n options.title ?? null,\n )\n }\n\n public pushScissorRect(x: number, y: number, width: number, height: number): void {\n this.lib.bufferPushScissorRect(this.bufferPtr, x, y, width, height)\n }\n\n public popScissorRect(): void {\n this.lib.bufferPopScissorRect(this.bufferPtr)\n }\n\n public clearScissorRects(): void {\n this.lib.bufferClearScissorRects(this.bufferPtr)\n }\n}\n",
25
25
  "import type { StyledText } from \"./lib/styled-text\"\nimport { RGBA } from \"./lib/RGBA\"\nimport { resolveRenderLib, type RenderLib } from \"./zig\"\nimport { type Pointer } from \"bun:ffi\"\nimport { type WidthMethod } from \"./types\"\n\nexport interface TextChunk {\n __isChunk: true\n text: Uint8Array\n plainText: string\n fg?: RGBA\n bg?: RGBA\n attributes?: number\n}\n\nexport class TextBuffer {\n private lib: RenderLib\n private bufferPtr: Pointer\n private buffer: {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n }\n private _length: number = 0\n private _capacity: number\n private _lineInfo?: { lineStarts: number[]; lineWidths: number[] }\n\n constructor(\n lib: RenderLib,\n ptr: Pointer,\n buffer: {\n char: Uint32Array\n fg: Float32Array\n bg: Float32Array\n attributes: Uint16Array\n },\n capacity: number,\n ) {\n this.lib = lib\n this.bufferPtr = ptr\n this.buffer = buffer\n this._capacity = capacity\n }\n\n static create(capacity: number = 256, widthMethod: WidthMethod): TextBuffer {\n const lib = resolveRenderLib()\n return lib.createTextBuffer(capacity, widthMethod)\n }\n\n private syncBuffersAfterResize(): void {\n const capacity = this.lib.textBufferGetCapacity(this.bufferPtr)\n this.buffer = this.lib.getTextBufferArrays(this.bufferPtr, capacity)\n this._capacity = capacity\n }\n\n public setStyledText(text: StyledText): void {\n this.lib.textBufferReset(this.bufferPtr)\n this._length = 0\n this._lineInfo = undefined\n\n for (const chunk of text.chunks) {\n const result = this.lib.textBufferWriteChunk(\n this.bufferPtr,\n chunk.text,\n chunk.fg || null,\n chunk.bg || null,\n chunk.attributes ?? null,\n )\n\n if (result & 1) {\n this.syncBuffersAfterResize()\n }\n }\n\n this.lib.textBufferFinalizeLineInfo(this.bufferPtr)\n this._length = this.lib.textBufferGetLength(this.bufferPtr)\n }\n\n public setDefaultFg(fg: RGBA | null): void {\n this.lib.textBufferSetDefaultFg(this.bufferPtr, fg)\n }\n\n public setDefaultBg(bg: RGBA | null): void {\n this.lib.textBufferSetDefaultBg(this.bufferPtr, bg)\n }\n\n public setDefaultAttributes(attributes: number | null): void {\n this.lib.textBufferSetDefaultAttributes(this.bufferPtr, attributes)\n }\n\n public resetDefaults(): void {\n this.lib.textBufferResetDefaults(this.bufferPtr)\n }\n\n public get length(): number {\n return this._length\n }\n\n public get capacity(): number {\n return this._capacity\n }\n\n public get ptr(): Pointer {\n return this.bufferPtr\n }\n\n public get lineInfo(): { lineStarts: number[]; lineWidths: number[] } {\n if (!this._lineInfo) {\n this._lineInfo = this.lib.textBufferGetLineInfo(this.bufferPtr)\n }\n return this._lineInfo\n }\n\n public toString(): string {\n const chars: string[] = []\n for (let i = 0; i < this._length; i++) {\n chars.push(String.fromCharCode(this.buffer.char[i]))\n }\n return chars.join(\"\")\n }\n\n public concat(other: TextBuffer): TextBuffer {\n return this.lib.textBufferConcat(this.bufferPtr, other.bufferPtr)\n }\n\n public setSelection(start: number, end: number, bgColor?: RGBA, fgColor?: RGBA): void {\n this.lib.textBufferSetSelection(this.bufferPtr, start, end, bgColor || null, fgColor || null)\n }\n\n public resetSelection(): void {\n this.lib.textBufferResetSelection(this.bufferPtr)\n }\n\n public destroy(): void {\n this.lib.destroyTextBuffer(this.bufferPtr)\n }\n}\n",
26
- "import { EventEmitter } from \"events\"\nimport Yoga, { Direction, Display, Edge, FlexDirection, type Config } from \"yoga-layout\"\nimport { OptimizedBuffer } from \"./buffer\"\nimport { getKeyHandler, type KeyHandler } from \"./lib/KeyHandler\"\nimport { TrackedNode, createTrackedNode } from \"./lib/TrackedNode\"\nimport type { ParsedKey } from \"./lib/parse.keypress\"\nimport type { MouseEventType } from \"./lib/parse.mouse\"\nimport {\n parseAlign,\n parseFlexDirection,\n parseJustify,\n parsePositionType,\n type AlignString,\n type FlexDirectionString,\n type JustifyString,\n type PositionTypeString,\n} from \"./lib/yoga.options\"\nimport type { MouseEvent } from \"./renderer\"\nimport type { RenderContext, SelectionState } from \"./types\"\nimport { ensureRenderable, type VNode } from \"./renderables/composition/vnode\"\n\nexport enum LayoutEvents {\n LAYOUT_CHANGED = \"layout-changed\",\n ADDED = \"added\",\n REMOVED = \"removed\",\n RESIZED = \"resized\",\n}\n\nexport enum RenderableEvents {\n FOCUSED = \"focused\",\n BLURRED = \"blurred\",\n}\n\nexport interface Position {\n top?: number | \"auto\" | `${number}%`\n right?: number | \"auto\" | `${number}%`\n bottom?: number | \"auto\" | `${number}%`\n left?: number | \"auto\" | `${number}%`\n}\n\nexport interface LayoutOptions {\n flexGrow?: number\n flexShrink?: number\n flexDirection?: FlexDirectionString\n alignItems?: AlignString\n justifyContent?: JustifyString\n flexBasis?: number | \"auto\" | undefined\n position?: PositionTypeString\n top?: number | \"auto\" | `${number}%`\n right?: number | \"auto\" | `${number}%`\n bottom?: number | \"auto\" | `${number}%`\n left?: number | \"auto\" | `${number}%`\n minWidth?: number\n minHeight?: number\n maxWidth?: number\n maxHeight?: number\n margin?: number | \"auto\" | `${number}%`\n marginTop?: number | \"auto\" | `${number}%`\n marginRight?: number | \"auto\" | `${number}%`\n marginBottom?: number | \"auto\" | `${number}%`\n marginLeft?: number | \"auto\" | `${number}%`\n padding?: number | `${number}%`\n paddingTop?: number | `${number}%`\n paddingRight?: number | `${number}%`\n paddingBottom?: number | `${number}%`\n paddingLeft?: number | `${number}%`\n enableLayout?: boolean\n}\n\nexport interface RenderableOptions<T extends Renderable = Renderable> extends Partial<LayoutOptions> {\n id?: string\n width?: number | \"auto\" | `${number}%`\n height?: number | \"auto\" | `${number}%`\n zIndex?: number\n visible?: boolean\n buffered?: boolean\n live?: boolean\n\n // hooks for custom render logic\n renderBefore?: (this: T, buffer: OptimizedBuffer, deltaTime: number) => void\n renderAfter?: (this: T, buffer: OptimizedBuffer, deltaTime: number) => void\n\n // catch all\n onMouse?: (this: T, event: MouseEvent) => void\n\n onMouseDown?: (this: T, event: MouseEvent) => void\n onMouseUp?: (this: T, event: MouseEvent) => void\n onMouseMove?: (this: T, event: MouseEvent) => void\n onMouseDrag?: (this: T, event: MouseEvent) => void\n onMouseDragEnd?: (this: T, event: MouseEvent) => void\n onMouseDrop?: (this: T, event: MouseEvent) => void\n onMouseOver?: (this: T, event: MouseEvent) => void\n onMouseOut?: (this: T, event: MouseEvent) => void\n onMouseScroll?: (this: T, event: MouseEvent) => void\n\n onKeyDown?: (key: ParsedKey) => void\n}\n\nfunction validateOptions(id: string, options: RenderableOptions<Renderable>): void {\n if (typeof options.width === \"number\") {\n if (options.width < 0) {\n throw new TypeError(`Invalid width for Renderable ${id}: ${options.width}`)\n }\n }\n if (typeof options.height === \"number\") {\n if (options.height < 0) {\n throw new TypeError(`Invalid height for Renderable ${id}: ${options.height}`)\n }\n }\n}\n\nexport function isValidPercentage(value: any): value is `${number}%` {\n if (typeof value === \"string\" && value.endsWith(\"%\")) {\n const numPart = value.slice(0, -1)\n const num = parseFloat(numPart)\n return !Number.isNaN(num)\n }\n return false\n}\n\nexport function isMarginType(value: any): value is number | \"auto\" | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n if (value === \"auto\") {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPaddingType(value: any): value is number | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPositionType(value: any): value is number | \"auto\" | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n if (value === \"auto\") {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPostionTypeType(value: any): value is PositionTypeString {\n return value === \"relative\" || value === \"absolute\"\n}\n\nexport function isDimensionType(value: any): value is number | \"auto\" | `${number}%` {\n return isPositionType(value)\n}\n\nexport function isFlexBasisType(value: any): value is number | \"auto\" | undefined {\n if (value === undefined || value === \"auto\") {\n return true\n }\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return false\n}\n\nexport function isSizeType(value: any): value is number | `${number}%` | undefined {\n if (value === undefined) {\n return true\n }\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport abstract class Renderable extends EventEmitter {\n private static renderableNumber = 1\n static renderablesByNumber: Map<number, Renderable> = new Map()\n\n public readonly id: string\n public readonly num: number\n protected _ctx: RenderContext\n private _x: number = 0\n private _y: number = 0\n protected _width: number | \"auto\" | `${number}%`\n protected _height: number | \"auto\" | `${number}%`\n protected _widthValue: number = 0\n protected _heightValue: number = 0\n private _zIndex: number\n protected _visible: boolean\n public selectable: boolean = false\n protected buffered: boolean\n protected frameBuffer: OptimizedBuffer | null = null\n private _dirty: boolean = false\n\n protected focusable: boolean = false\n protected _focused: boolean = false\n protected keyHandler: KeyHandler = getKeyHandler()\n protected keypressHandler: ((key: ParsedKey) => void) | null = null\n private _live: boolean = false\n protected _liveCount: number = 0\n\n private _mouseListener: ((event: MouseEvent) => void) | null = null\n private _mouseListeners: Partial<Record<MouseEventType, (event: MouseEvent) => void>> = {}\n private _keyListeners: Partial<Record<\"down\", (key: ParsedKey) => void>> = {}\n\n protected layoutNode: TrackedNode\n protected _positionType: PositionTypeString = \"relative\"\n protected _position: Position = {}\n\n private _childHostOverride: Renderable | null = null\n\n private renderableMap: Map<string, Renderable> = new Map()\n private renderableArray: Renderable[] = []\n private needsZIndexSort: boolean = false\n public parent: Renderable | null = null\n\n public renderBefore?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void\n public renderAfter?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void\n\n constructor(ctx: RenderContext, options: RenderableOptions<any>) {\n super()\n this.num = Renderable.renderableNumber++\n this.id = options.id ?? `renderable-${this.num}`\n this._ctx = ctx\n Renderable.renderablesByNumber.set(this.num, this)\n\n validateOptions(this.id, options)\n\n this.renderBefore = options.renderBefore\n this.renderAfter = options.renderAfter\n\n this._width = options.width ?? \"auto\"\n this._height = options.height ?? \"auto\"\n\n if (typeof this._width === \"number\") {\n this._widthValue = this._width\n }\n if (typeof this._height === \"number\") {\n this._heightValue = this._height\n }\n\n this._zIndex = options.zIndex ?? 0\n this._visible = options.visible !== false\n this.buffered = options.buffered ?? false\n this._live = options.live ?? false\n this._liveCount = this._live && this._visible ? 1 : 0\n\n this.layoutNode = createTrackedNode({ renderable: this } as any)\n this.layoutNode.yogaNode.setDisplay(this._visible ? Display.Flex : Display.None)\n this.setupYogaProperties(options)\n\n this.applyEventOptions(options)\n\n if (this.buffered) {\n this.createFrameBuffer()\n }\n }\n\n public get ctx(): RenderContext {\n return this._ctx\n }\n\n public get visible(): boolean {\n return this._visible\n }\n\n public set visible(value: boolean) {\n if (this._visible === value) return\n\n const wasVisible = this._visible\n this._visible = value\n this.layoutNode.yogaNode.setDisplay(value ? Display.Flex : Display.None)\n\n if (this._live) {\n if (!wasVisible && value) {\n this.propagateLiveCount(1)\n } else if (wasVisible && !value) {\n this.propagateLiveCount(-1)\n }\n }\n\n if (this._focused) {\n this.blur()\n }\n this.needsUpdate()\n }\n\n public hasSelection(): boolean {\n return false\n }\n\n public onSelectionChanged(selection: SelectionState | null): boolean {\n // Default implementation: do nothing\n // Override this method to provide custom selection handling\n return false\n }\n\n public getSelectedText(): string {\n return \"\"\n }\n\n public shouldStartSelection(x: number, y: number): boolean {\n return false\n }\n\n public focus(): void {\n if (this.childHost !== this) {\n this.childHost.focus()\n return\n }\n\n if (this._focused || !this.focusable) return\n\n this._focused = true\n this.needsUpdate()\n\n this.keypressHandler = (key: ParsedKey) => {\n this._keyListeners[\"down\"]?.(key)\n if (this.handleKeyPress) {\n this.handleKeyPress(key)\n }\n }\n\n this.keyHandler.on(\"keypress\", this.keypressHandler)\n this.emit(RenderableEvents.FOCUSED)\n }\n\n public blur(): void {\n if (this.childHost !== this) {\n this.childHost.blur()\n return\n }\n\n if (!this._focused || !this.focusable) return\n\n this._focused = false\n this.needsUpdate()\n\n if (this.keypressHandler) {\n this.keyHandler.off(\"keypress\", this.keypressHandler)\n this.keypressHandler = null\n }\n\n this.emit(RenderableEvents.BLURRED)\n }\n\n public get focused(): boolean {\n return this._focused\n }\n\n public get live(): boolean {\n return this._live\n }\n\n public get liveCount(): number {\n return this._liveCount\n }\n\n public set live(value: boolean) {\n if (this._live === value) return\n\n this._live = value\n\n if (this._visible) {\n const delta = value ? 1 : -1\n this.propagateLiveCount(delta)\n }\n }\n\n protected propagateLiveCount(delta: number): void {\n this._liveCount += delta\n this.parent?.propagateLiveCount(delta)\n }\n\n public handleKeyPress?(key: ParsedKey | string): boolean\n\n protected get isDirty(): boolean {\n return this._dirty\n }\n\n public get childHost(): Renderable {\n return this._childHostOverride || this\n }\n\n public set childHost(host: Renderable | null) {\n this._childHostOverride = host\n }\n\n public findDescendantById(id: string): Renderable | undefined {\n for (const child of this.renderableArray) {\n if (child.id === id) return child\n const found = child.findDescendantById(id)\n if (found) return found\n }\n return undefined\n }\n\n public setChildHostById(id: string): boolean {\n const found = this.findDescendantById(id)\n if (found) {\n this._childHostOverride = found\n return true\n }\n return false\n }\n\n private markClean(): void {\n this._dirty = false\n }\n\n public needsUpdate() {\n this._dirty = true\n this._ctx.needsUpdate()\n }\n\n public get x(): number {\n if (this.parent && this._positionType === \"relative\") {\n return this.parent.x + this._x\n }\n return this._x\n }\n\n public set x(value: number) {\n this.left = value\n }\n\n public get top(): number | \"auto\" | `${number}%` | undefined {\n return this._position.top\n }\n\n public set top(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ top: value })\n }\n }\n\n public get right(): number | \"auto\" | `${number}%` | undefined {\n return this._position.right\n }\n\n public set right(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ right: value })\n }\n }\n\n public get bottom(): number | \"auto\" | `${number}%` | undefined {\n return this._position.bottom\n }\n\n public set bottom(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ bottom: value })\n }\n }\n\n public get left(): number | \"auto\" | `${number}%` | undefined {\n return this._position.left\n }\n\n public set left(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ left: value })\n }\n }\n\n public get y(): number {\n if (this.parent && this._positionType === \"relative\") {\n return this.parent.y + this._y\n }\n return this._y\n }\n\n public set y(value: number) {\n this.top = value\n }\n\n public get width(): number {\n return this._widthValue\n }\n\n public set width(value: number | \"auto\" | `${number}%`) {\n if (isDimensionType(value)) {\n this._width = value\n this.layoutNode.setWidth(value)\n this.needsUpdate()\n }\n }\n\n public get height(): number {\n return this._heightValue\n }\n\n public set height(value: number | \"auto\" | `${number}%`) {\n if (isDimensionType(value)) {\n this._height = value\n this.layoutNode.setHeight(value)\n this.needsUpdate()\n }\n }\n\n public get zIndex(): number {\n return this._zIndex\n }\n\n public set zIndex(value: number) {\n if (this._zIndex !== value) {\n this._zIndex = value\n this.parent?.requestZIndexSort()\n }\n }\n\n private requestZIndexSort(): void {\n this.needsZIndexSort = true\n }\n\n private ensureZIndexSorted(): void {\n if (this.needsZIndexSort) {\n this.renderableArray.sort((a, b) => (a.zIndex > b.zIndex ? 1 : a.zIndex < b.zIndex ? -1 : 0))\n this.needsZIndexSort = false\n }\n }\n\n private setupYogaProperties(options: RenderableOptions<Renderable>): void {\n const node = this.layoutNode.yogaNode\n\n if (isFlexBasisType(options.flexBasis)) {\n node.setFlexBasis(options.flexBasis)\n }\n\n if (isSizeType(options.minWidth)) {\n node.setMinWidth(options.minWidth)\n }\n if (isSizeType(options.minHeight)) {\n node.setMinHeight(options.minHeight)\n }\n\n if (options.flexGrow !== undefined) {\n node.setFlexGrow(options.flexGrow)\n } else {\n node.setFlexGrow(0)\n }\n\n if (options.flexShrink !== undefined) {\n node.setFlexShrink(options.flexShrink)\n } else {\n const shrinkValue = options.flexGrow && options.flexGrow > 0 ? 1 : 0\n node.setFlexShrink(shrinkValue)\n }\n\n if (options.flexDirection !== undefined) {\n node.setFlexDirection(parseFlexDirection(options.flexDirection))\n }\n if (options.alignItems !== undefined) {\n node.setAlignItems(parseAlign(options.alignItems))\n }\n if (options.justifyContent !== undefined) {\n node.setJustifyContent(parseJustify(options.justifyContent))\n }\n\n if (isDimensionType(options.width)) {\n this._width = options.width\n this.layoutNode.setWidth(options.width)\n }\n if (isDimensionType(options.height)) {\n this._height = options.height\n this.layoutNode.setHeight(options.height)\n }\n\n this._positionType = options.position === \"absolute\" ? \"absolute\" : \"relative\"\n if (this._positionType !== \"relative\") {\n node.setPositionType(parsePositionType(this._positionType))\n }\n\n // TODO: flatten position properties internally as well\n const hasPositionProps =\n options.top !== undefined ||\n options.right !== undefined ||\n options.bottom !== undefined ||\n options.left !== undefined\n if (hasPositionProps) {\n this._position = {\n top: options.top,\n right: options.right,\n bottom: options.bottom,\n left: options.left,\n }\n this.updateYogaPosition(this._position)\n }\n\n if (isSizeType(options.maxWidth)) {\n node.setMaxWidth(options.maxWidth)\n }\n if (isSizeType(options.maxHeight)) {\n node.setMaxHeight(options.maxHeight)\n }\n\n this.setupMarginAndPadding(options)\n }\n\n private setupMarginAndPadding(options: RenderableOptions<Renderable>): void {\n const node = this.layoutNode.yogaNode\n\n if (isMarginType(options.margin)) {\n node.setMargin(Edge.Top, options.margin)\n node.setMargin(Edge.Right, options.margin)\n node.setMargin(Edge.Bottom, options.margin)\n node.setMargin(Edge.Left, options.margin)\n }\n\n if (isMarginType(options.marginTop)) {\n node.setMargin(Edge.Top, options.marginTop)\n }\n if (isMarginType(options.marginRight)) {\n node.setMargin(Edge.Right, options.marginRight)\n }\n if (isMarginType(options.marginBottom)) {\n node.setMargin(Edge.Bottom, options.marginBottom)\n }\n if (isMarginType(options.marginLeft)) {\n node.setMargin(Edge.Left, options.marginLeft)\n }\n\n if (isPaddingType(options.padding)) {\n node.setPadding(Edge.Top, options.padding)\n node.setPadding(Edge.Right, options.padding)\n node.setPadding(Edge.Bottom, options.padding)\n node.setPadding(Edge.Left, options.padding)\n }\n\n if (isPaddingType(options.paddingTop)) {\n node.setPadding(Edge.Top, options.paddingTop)\n }\n if (isPaddingType(options.paddingRight)) {\n node.setPadding(Edge.Right, options.paddingRight)\n }\n if (isPaddingType(options.paddingBottom)) {\n node.setPadding(Edge.Bottom, options.paddingBottom)\n }\n if (isPaddingType(options.paddingLeft)) {\n node.setPadding(Edge.Left, options.paddingLeft)\n }\n }\n\n set position(positionType: PositionTypeString) {\n if (!isPostionTypeType(positionType) || this._positionType === positionType) return\n\n this._positionType = positionType\n this.layoutNode.yogaNode.setPositionType(parsePositionType(positionType))\n this.needsUpdate()\n }\n\n public setPosition(position: Position): void {\n this._position = { ...this._position, ...position }\n this.updateYogaPosition(position)\n }\n\n private updateYogaPosition(position: Position): void {\n const node = this.layoutNode.yogaNode\n const { top, right, bottom, left } = position\n\n if (isPositionType(top)) {\n if (top === \"auto\") {\n node.setPositionAuto(Edge.Top)\n } else {\n node.setPosition(Edge.Top, top)\n }\n }\n if (isPositionType(right)) {\n if (right === \"auto\") {\n node.setPositionAuto(Edge.Right)\n } else {\n node.setPosition(Edge.Right, right)\n }\n }\n if (isPositionType(bottom)) {\n if (bottom === \"auto\") {\n node.setPositionAuto(Edge.Bottom)\n } else {\n node.setPosition(Edge.Bottom, bottom)\n }\n }\n if (isPositionType(left)) {\n if (left === \"auto\") {\n node.setPositionAuto(Edge.Left)\n } else {\n node.setPosition(Edge.Left, left)\n }\n }\n this.needsUpdate()\n }\n\n public set flexGrow(grow: number) {\n this.layoutNode.yogaNode.setFlexGrow(grow)\n this.needsUpdate()\n }\n\n public set flexShrink(shrink: number) {\n this.layoutNode.yogaNode.setFlexShrink(shrink)\n this.needsUpdate()\n }\n\n public set flexDirection(direction: FlexDirectionString) {\n this.layoutNode.yogaNode.setFlexDirection(parseFlexDirection(direction))\n this.needsUpdate()\n }\n\n public set alignItems(alignItems: AlignString) {\n this.layoutNode.yogaNode.setAlignItems(parseAlign(alignItems))\n this.needsUpdate()\n }\n\n public set justifyContent(justifyContent: JustifyString) {\n this.layoutNode.yogaNode.setJustifyContent(parseJustify(justifyContent))\n this.needsUpdate()\n }\n\n public set flexBasis(basis: number | \"auto\" | undefined) {\n if (isFlexBasisType(basis)) {\n this.layoutNode.yogaNode.setFlexBasis(basis)\n this.needsUpdate()\n }\n }\n\n public set minWidth(minWidth: number | `${number}%` | undefined) {\n if (isSizeType(minWidth)) {\n this.layoutNode.yogaNode.setMinWidth(minWidth)\n this.needsUpdate()\n }\n }\n\n public set maxWidth(maxWidth: number | `${number}%` | undefined) {\n if (isSizeType(maxWidth)) {\n this.layoutNode.yogaNode.setMaxWidth(maxWidth)\n this.needsUpdate()\n }\n }\n\n public set minHeight(minHeight: number | `${number}%` | undefined) {\n if (isSizeType(minHeight)) {\n this.layoutNode.yogaNode.setMinHeight(minHeight)\n this.needsUpdate()\n }\n }\n\n public set maxHeight(maxHeight: number | `${number}%` | undefined) {\n if (isSizeType(maxHeight)) {\n this.layoutNode.yogaNode.setMaxHeight(maxHeight)\n this.needsUpdate()\n }\n }\n\n public set margin(margin: number | \"auto\" | `${number}%` | undefined) {\n if (isMarginType(margin)) {\n const node = this.layoutNode.yogaNode\n node.setMargin(Edge.Top, margin)\n node.setMargin(Edge.Right, margin)\n node.setMargin(Edge.Bottom, margin)\n node.setMargin(Edge.Left, margin)\n this.needsUpdate()\n }\n }\n\n public set marginTop(margin: number | \"auto\" | `${number}%` | undefined) {\n if (isMarginType(margin)) {\n this.layoutNode.yogaNode.setMargin(Edge.Top, margin)\n this.needsUpdate()\n }\n }\n\n public set marginRight(margin: number | \"auto\" | `${number}%` | undefined) {\n if (isMarginType(margin)) {\n this.layoutNode.yogaNode.setMargin(Edge.Right, margin)\n this.needsUpdate()\n }\n }\n\n public set marginBottom(margin: number | \"auto\" | `${number}%` | undefined) {\n if (isMarginType(margin)) {\n this.layoutNode.yogaNode.setMargin(Edge.Bottom, margin)\n this.needsUpdate()\n }\n }\n\n public set marginLeft(margin: number | \"auto\" | `${number}%` | undefined) {\n if (isMarginType(margin)) {\n this.layoutNode.yogaNode.setMargin(Edge.Left, margin)\n this.needsUpdate()\n }\n }\n\n public set padding(padding: number | `${number}%` | undefined) {\n if (isPaddingType(padding)) {\n const node = this.layoutNode.yogaNode\n node.setPadding(Edge.Top, padding)\n node.setPadding(Edge.Right, padding)\n node.setPadding(Edge.Bottom, padding)\n node.setPadding(Edge.Left, padding)\n this.needsUpdate()\n }\n }\n\n public set paddingTop(padding: number | `${number}%` | undefined) {\n if (isPaddingType(padding)) {\n this.layoutNode.yogaNode.setPadding(Edge.Top, padding)\n this.needsUpdate()\n }\n }\n\n public set paddingRight(padding: number | `${number}%` | undefined) {\n if (isPaddingType(padding)) {\n this.layoutNode.yogaNode.setPadding(Edge.Right, padding)\n this.needsUpdate()\n }\n }\n\n public set paddingBottom(padding: number | `${number}%` | undefined) {\n if (isPaddingType(padding)) {\n this.layoutNode.yogaNode.setPadding(Edge.Bottom, padding)\n this.needsUpdate()\n }\n }\n\n public set paddingLeft(padding: number | `${number}%` | undefined) {\n if (isPaddingType(padding)) {\n this.layoutNode.yogaNode.setPadding(Edge.Left, padding)\n this.needsUpdate()\n }\n }\n\n public getLayoutNode(): TrackedNode {\n return this.layoutNode\n }\n\n public updateFromLayout(): void {\n const layout = this.layoutNode.yogaNode.getComputedLayout()\n\n this._x = layout.left\n this._y = layout.top\n\n const newWidth = Math.max(layout.width, 1)\n const newHeight = Math.max(layout.height, 1)\n const sizeChanged = this.width !== newWidth || this.height !== newHeight\n\n this._widthValue = newWidth\n this._heightValue = newHeight\n\n if (sizeChanged) {\n this.onLayoutResize(newWidth, newHeight)\n }\n }\n\n protected onLayoutResize(width: number, height: number): void {\n if (this._visible) {\n this.handleFrameBufferResize(width, height)\n this.onResize(width, height)\n this.needsUpdate()\n }\n }\n\n protected handleFrameBufferResize(width: number, height: number): void {\n if (!this.buffered) return\n\n if (width <= 0 || height <= 0) {\n return\n }\n\n if (this.frameBuffer) {\n this.frameBuffer.resize(width, height)\n } else {\n this.createFrameBuffer()\n }\n }\n\n protected createFrameBuffer(): void {\n const w = this.width\n const h = this.height\n\n if (w <= 0 || h <= 0) {\n return\n }\n\n try {\n const widthMethod = this._ctx.widthMethod\n this.frameBuffer = OptimizedBuffer.create(w, h, widthMethod, { respectAlpha: true })\n } catch (error) {\n console.error(`Failed to create frame buffer for ${this.id}:`, error)\n this.frameBuffer = null\n }\n }\n\n protected onResize(width: number, height: number): void {\n // Override in subclasses for additional resize logic\n }\n\n private replaceParent(obj: Renderable) {\n if (obj.parent) {\n obj.parent.remove(obj.id)\n }\n obj.parent = this\n }\n\n public add(obj: Renderable | VNode<any, any[]>, index?: number): number {\n if (this.childHost !== this) {\n return this.childHost.add(obj, index)\n }\n\n obj = ensureRenderable(this._ctx, obj)\n\n if (this.renderableMap.has(obj.id)) {\n console.warn(`A renderable with id ${obj.id} already exists in ${this.id}, removing it`)\n this.remove(obj.id)\n }\n\n this.replaceParent(obj)\n\n const childLayoutNode = obj.getLayoutNode()\n let insertedIndex: number\n if (index !== undefined) {\n this.renderableArray.splice(index, 0, obj)\n insertedIndex = this.layoutNode.insertChild(childLayoutNode, index)\n } else {\n this.renderableArray.push(obj)\n insertedIndex = this.layoutNode.addChild(childLayoutNode)\n }\n this.needsZIndexSort = true\n this.renderableMap.set(obj.id, obj)\n\n if (obj._liveCount > 0) {\n this.propagateLiveCount(obj._liveCount)\n }\n\n this.needsUpdate()\n\n return insertedIndex\n }\n\n insertBefore(obj: Renderable | VNode<any, any[]>, anchor?: Renderable): number {\n if (this.childHost !== this) {\n const idx = this.childHost.insertBefore(obj, anchor)\n return idx\n }\n\n obj = ensureRenderable(this._ctx, obj)\n\n if (!anchor) {\n return this.add(obj)\n }\n\n if (!this.renderableMap.has(anchor.id)) {\n throw new Error(\"Anchor does not exist\")\n }\n\n const anchorIndex = this.renderableArray.indexOf(anchor)\n if (anchorIndex === -1) {\n throw new Error(\"Anchor does not exist\")\n }\n\n return this.add(obj, anchorIndex)\n }\n\n // TODO: that naming is meh\n public getRenderable(id: string): Renderable | undefined {\n if (this.childHost !== this) return this.childHost.getRenderable(id)\n return this.renderableMap.get(id)\n }\n\n public remove(id: string): void {\n if (this.childHost !== this) {\n this.childHost.remove(id)\n return\n }\n if (!id) {\n return\n }\n if (this.renderableMap.has(id)) {\n const obj = this.renderableMap.get(id)\n if (obj) {\n if (obj._liveCount > 0) {\n this.propagateLiveCount(-obj._liveCount)\n }\n\n const childLayoutNode = obj.getLayoutNode()\n this.layoutNode.removeChild(childLayoutNode)\n this.needsUpdate()\n\n obj.onRemove()\n obj.parent = null\n }\n this.renderableMap.delete(id)\n\n const index = this.renderableArray.findIndex((obj) => obj.id === id)\n if (index !== -1) {\n this.renderableArray.splice(index, 1)\n }\n }\n }\n\n protected onRemove(): void {\n // Default implementation: do nothing\n // Override this method to provide custom removal logic\n }\n\n public getChildren(): Renderable[] {\n if (this.childHost !== this) return this.childHost.getChildren()\n return [...this.renderableArray]\n }\n\n public render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n\n this.beforeRender()\n this.updateFromLayout()\n\n let renderBuffer = buffer\n if (this.buffered && this.frameBuffer) {\n renderBuffer = this.frameBuffer\n }\n\n if (this.renderBefore) {\n this.renderBefore.call(this, renderBuffer, deltaTime)\n }\n\n this.renderSelf(renderBuffer, deltaTime)\n\n if (this.renderAfter) {\n this.renderAfter.call(this, renderBuffer, deltaTime)\n }\n\n this.markClean()\n this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num)\n this.ensureZIndexSorted()\n\n for (const child of this.renderableArray) {\n child.render(renderBuffer, deltaTime)\n }\n\n if (this.buffered && this.frameBuffer) {\n buffer.drawFrameBuffer(this.x, this.y, this.frameBuffer)\n }\n }\n\n protected beforeRender(): void {\n // Default implementation: do nothing\n // Override this method to provide custom rendering\n }\n\n protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void {\n // Default implementation: do nothing\n // Override this method to provide custom rendering\n }\n\n public destroy(): void {\n if (this.parent) {\n this.parent.remove(this.id)\n }\n\n if (this.frameBuffer) {\n this.frameBuffer.destroy()\n this.frameBuffer = null\n }\n\n for (const child of this.renderableArray) {\n child.parent = null\n child.destroy()\n }\n\n this.renderableArray = []\n this.renderableMap.clear()\n Renderable.renderablesByNumber.delete(this.num)\n\n this.layoutNode.destroy()\n this.blur()\n this.removeAllListeners()\n\n this.destroySelf()\n }\n\n public destroyRecursively(): void {\n this.destroy()\n for (const child of this.renderableArray) {\n child.destroyRecursively()\n }\n }\n\n protected destroySelf(): void {\n // Default implementation: do nothing else\n // Override this method to provide custom cleanup\n }\n\n public processMouseEvent(event: MouseEvent): void {\n this._mouseListener?.call(this, event)\n this._mouseListeners[event.type]?.call(this, event)\n this.onMouseEvent(event)\n\n if (this.parent && !event.defaultPrevented) {\n this.parent.processMouseEvent(event)\n }\n }\n\n protected onMouseEvent(event: MouseEvent): void {\n // Default implementation: do nothing\n // Override this method to provide custom event handling\n }\n\n public set onMouse(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListener = handler\n else this._mouseListener = null\n }\n\n public set onMouseDown(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"down\"] = handler\n else delete this._mouseListeners[\"down\"]\n }\n\n public set onMouseUp(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"up\"] = handler\n else delete this._mouseListeners[\"up\"]\n }\n\n public set onMouseMove(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"move\"] = handler\n else delete this._mouseListeners[\"move\"]\n }\n\n public set onMouseDrag(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drag\"] = handler\n else delete this._mouseListeners[\"drag\"]\n }\n\n public set onMouseDragEnd(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drag-end\"] = handler\n else delete this._mouseListeners[\"drag-end\"]\n }\n\n public set onMouseDrop(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drop\"] = handler\n else delete this._mouseListeners[\"drop\"]\n }\n\n public set onMouseOver(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"over\"] = handler\n else delete this._mouseListeners[\"over\"]\n }\n\n public set onMouseOut(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"out\"] = handler\n else delete this._mouseListeners[\"out\"]\n }\n\n public set onMouseScroll(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"scroll\"] = handler\n else delete this._mouseListeners[\"scroll\"]\n }\n\n public set onKeyDown(handler: ((key: ParsedKey) => void) | undefined) {\n if (handler) this._keyListeners[\"down\"] = handler\n else delete this._keyListeners[\"down\"]\n }\n public get onKeyDown(): ((key: ParsedKey) => void) | undefined {\n return this._keyListeners[\"down\"]\n }\n\n private applyEventOptions(options: RenderableOptions<Renderable>): void {\n this.onMouse = options.onMouse\n this.onMouseDown = options.onMouseDown\n this.onMouseUp = options.onMouseUp\n this.onMouseMove = options.onMouseMove\n this.onMouseDrag = options.onMouseDrag\n this.onMouseDragEnd = options.onMouseDragEnd\n this.onMouseDrop = options.onMouseDrop\n this.onMouseOver = options.onMouseOver\n this.onMouseOut = options.onMouseOut\n this.onMouseScroll = options.onMouseScroll\n this.onKeyDown = options.onKeyDown\n }\n}\n\nexport class RootRenderable extends Renderable {\n private yogaConfig: Config\n\n constructor(ctx: RenderContext) {\n super(ctx, { id: \"__root__\", zIndex: 0, visible: true, width: ctx.width, height: ctx.height, enableLayout: true })\n\n this.yogaConfig = Yoga.Config.create()\n this.yogaConfig.setUseWebDefaults(false)\n this.yogaConfig.setPointScaleFactor(1)\n\n if (this.layoutNode) {\n this.layoutNode.destroy()\n }\n\n this.layoutNode = createTrackedNode({}, this.yogaConfig)\n this.layoutNode.setWidth(ctx.width)\n this.layoutNode.setHeight(ctx.height)\n this.layoutNode.yogaNode.setFlexDirection(FlexDirection.Column)\n\n this.calculateLayout()\n }\n\n protected propagateLiveCount(delta: number): void {\n const oldCount = this._liveCount\n this._liveCount += delta\n\n if (oldCount === 0 && this._liveCount > 0) {\n this._ctx.requestLive()\n } else if (oldCount > 0 && this._liveCount === 0) {\n this._ctx.dropLive()\n }\n }\n\n public calculateLayout(): void {\n this.layoutNode.yogaNode.calculateLayout(this.width, this.height, Direction.LTR)\n this.emit(LayoutEvents.LAYOUT_CHANGED)\n }\n\n public resize(width: number, height: number): void {\n this.width = width\n this.height = height\n\n this.emit(LayoutEvents.RESIZED, { width, height })\n }\n\n protected beforeRender(): void {\n if (this.layoutNode.yogaNode.isDirty()) {\n this.calculateLayout()\n }\n }\n\n protected destroySelf(): void {\n if (this.layoutNode) {\n this.layoutNode.destroy()\n }\n\n try {\n this.yogaConfig.free()\n } catch (error) {\n // Config might already be freed\n }\n\n super.destroySelf()\n }\n}\n",
27
- "import { Renderable, type RenderableOptions } from \"../../Renderable\"\nimport type { RenderContext } from \"../../types\"\n\nexport type VChild = VNode | Renderable | VChild[] | null | undefined | false\n\nexport interface PendingCall {\n method: string\n args: any[]\n isProperty?: boolean\n}\n\nexport interface VNode<P = any, C = VChild[]> {\n __isVNode: true\n type: Construct<P>\n props?: P\n children?: C\n __delegateMap?: Record<string, string>\n __pendingCalls?: PendingCall[]\n}\n\n// Type that represents a VNode with Renderable methods available for chaining\nexport type ProxiedVNode<TCtor extends RenderableConstructor<any>> = VNode<\n TCtor extends RenderableConstructor<infer P> ? P : any\n> & {\n [K in keyof InstanceType<TCtor>]: InstanceType<TCtor>[K] extends (...args: infer Args) => any\n ? (...args: Args) => ProxiedVNode<TCtor>\n : InstanceType<TCtor>[K]\n}\n\nexport interface RenderableConstructor<P extends RenderableOptions<any> = RenderableOptions<any>> {\n new (ctx: RenderContext, options: P): Renderable\n}\n\nexport type FunctionalConstruct<P = any> = (props: P, children?: VChild[]) => VNode\n\nexport type Construct<P = any> =\n | RenderableConstructor<P extends RenderableOptions<any> ? P : never>\n | FunctionalConstruct<P>\n\nfunction isRenderableConstructor<P extends RenderableOptions<any> = RenderableOptions<any>>(\n value: any,\n): value is RenderableConstructor<P> {\n return typeof value === \"function\" && value.prototype && Renderable.prototype.isPrototypeOf(value.prototype)\n}\n\nfunction flattenChildren(children: VChild[]): VChild[] {\n const result: VChild[] = []\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...flattenChildren(child))\n } else if (child !== null && child !== undefined && child !== false) {\n result.push(child)\n }\n }\n return result\n}\n\n// Overloads for proper typing\nexport function h<TCtor extends RenderableConstructor<any>>(\n type: TCtor,\n props?: TCtor extends RenderableConstructor<infer P> ? P : never,\n ...children: VChild[]\n): ProxiedVNode<TCtor>\nexport function h<P>(type: FunctionalConstruct<P>, props?: P, ...children: VChild[]): VNode<P>\nexport function h<P>(type: Construct<P>, props?: P, ...children: VChild[]): VNode<P> | ProxiedVNode<any>\nexport function h<P>(type: Construct<P>, props?: P, ...children: VChild[]): any {\n if (typeof type !== \"function\") {\n throw new TypeError(\"h() received an invalid vnode type\")\n }\n\n const vnode: VNode<P> = {\n __isVNode: true,\n type,\n props,\n children: flattenChildren(children),\n __pendingCalls: [],\n }\n\n if (isRenderableConstructor(type)) {\n return new Proxy(vnode, {\n get(target, prop, receiver) {\n // Return VNode properties directly\n if (prop in target) {\n return Reflect.get(target, prop, receiver)\n }\n\n if (typeof prop === \"string\") {\n const prototype = type.prototype\n const hasMethod =\n prototype &&\n (typeof prototype[prop] === \"function\" ||\n Object.getOwnPropertyDescriptor(prototype, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(prototype), prop))\n\n if (hasMethod) {\n return (...args: any[]) => {\n target.__pendingCalls = target.__pendingCalls || []\n target.__pendingCalls.push({ method: prop, args })\n return target\n }\n }\n }\n\n return Reflect.get(target, prop, receiver)\n },\n\n set(target, prop, value, receiver) {\n if (typeof prop === \"string\" && isRenderableConstructor(type)) {\n const prototype = type.prototype\n const descriptor =\n Object.getOwnPropertyDescriptor(prototype, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(prototype), prop)\n\n if (descriptor && descriptor.set) {\n target.__pendingCalls = target.__pendingCalls || []\n target.__pendingCalls.push({ method: prop, args: [value], isProperty: true })\n return true\n }\n }\n\n return Reflect.set(target, prop, value, receiver)\n },\n })\n }\n\n return vnode\n}\n\nexport function isVNode(node: any): node is VNode {\n return node && node.__isVNode\n}\n\nexport function ensureRenderable(ctx: RenderContext, node: Renderable | VNode<any, any[]>): Renderable {\n if (node instanceof Renderable) return node\n return instantiate(ctx, node)\n}\n\nexport function wrapWithDelegates<T extends InstanceType<RenderableConstructor>>(\n instance: T,\n delegateMap: Record<string, string> | undefined,\n): T {\n if (!delegateMap || Object.keys(delegateMap).length === 0) return instance\n\n const descendantCache = new Map<string, Renderable | undefined>()\n\n const getDescendant = (id: string): Renderable | undefined => {\n if (descendantCache.has(id)) {\n const cached = descendantCache.get(id)\n if (cached !== undefined) {\n return cached\n }\n }\n const descendant = (instance as Renderable).findDescendantById(id)\n if (descendant) {\n descendantCache.set(id, descendant)\n }\n return descendant\n }\n\n const proxy = new Proxy(instance as any, {\n get(target, prop, receiver) {\n if (typeof prop === \"string\" && delegateMap[prop]) {\n const host = getDescendant(delegateMap[prop])\n if (host) {\n const value = (host as any)[prop]\n if (typeof value === \"function\") {\n return value.bind(host)\n }\n return value\n }\n }\n return Reflect.get(target, prop, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === \"string\" && delegateMap[prop]) {\n const host = getDescendant(delegateMap[prop])\n if (host) {\n return Reflect.set(host as any, prop, value)\n }\n }\n return Reflect.set(target, prop, value, receiver)\n },\n })\n return proxy\n}\n\nexport function instantiate(ctx: RenderContext, node: VChild): Renderable {\n if (node instanceof Renderable) return node\n\n if (!node || typeof node !== \"object\") {\n throw new TypeError(\"mount() received an invalid vnode\")\n }\n\n const vnode = node as VNode\n const { type, props } = vnode\n const children = flattenChildren(vnode.children || [])\n const delegateMap = (vnode as any).__delegateMap as Record<string, string> | undefined\n\n if (isRenderableConstructor(type)) {\n const instance = new type(ctx, (props || {}) as any)\n\n for (const child of children) {\n if (child instanceof Renderable) {\n instance.add(child)\n } else {\n const mounted = instantiate(ctx, child)\n instance.add(mounted)\n }\n }\n\n const delegatedInstance = wrapWithDelegates(instance, delegateMap)\n\n const pendingCalls = (vnode as any).__pendingCalls as PendingCall[] | undefined\n if (pendingCalls) {\n for (const call of pendingCalls) {\n if (call.isProperty) {\n ;(delegatedInstance as any)[call.method] = call.args[0]\n } else {\n ;(delegatedInstance as any)[call.method].apply(delegatedInstance, call.args)\n }\n }\n }\n\n return delegatedInstance\n }\n\n // Functional construct: resolve to a concrete vnode and mount it\n const resolved = (type as FunctionalConstruct)(props || ({} as any), children)\n const inst = instantiate(ctx, resolved)\n\n return wrapWithDelegates(inst, delegateMap)\n}\n\n// Controlled delegation that routes selected properties/methods\n// to a descendant renderable identified by id.\nexport type DelegateMap<T> = Partial<Record<keyof T, string>>\n\nexport function delegate<TCtor extends RenderableConstructor<any>, K extends keyof InstanceType<TCtor>>(\n mapping: Partial<Record<K, string>>,\n vnode: ProxiedVNode<TCtor>,\n): ProxiedVNode<TCtor>\nexport function delegate<TCtor extends RenderableConstructor<any>, K extends keyof InstanceType<TCtor>>(\n mapping: Partial<Record<K, string>>,\n vnode: VNode<any> & { type: TCtor },\n): VNode\nexport function delegate(mapping: Record<string, string>, vnode: VNode<any>): VNode\nexport function delegate(mapping: Record<string, string>, renderable: Renderable): Renderable\nexport function delegate(mapping: any, vnode: VNode<any> | Renderable): VNode | Renderable {\n if (vnode instanceof Renderable) {\n return wrapWithDelegates(vnode, mapping)\n }\n if (!vnode || typeof vnode !== \"object\") return vnode\n vnode.__delegateMap = { ...(vnode.__delegateMap || {}), ...mapping }\n return vnode\n}\n",
28
- "import type { CliRenderer, ColorInput } from \".\"\nimport { EventEmitter } from \"events\"\nimport { OptimizedBuffer } from \"./buffer\"\nimport { parseColor, RGBA } from \"./lib/RGBA\"\nimport { Console } from \"node:console\"\nimport util from \"node:util\"\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { Capture, CapturedWritableStream } from \"./lib/output.capture\"\nimport { singleton } from \"./singleton\"\n\ninterface CallerInfo {\n functionName: string\n fullPath: string\n fileName: string\n lineNumber: number\n columnNumber: number\n}\n\nfunction getCallerInfo(): CallerInfo | null {\n const err = new Error()\n const stackLines = err.stack?.split(\"\\n\").slice(5) || []\n if (!stackLines.length) return null\n\n const callerLine = stackLines[0].trim()\n\n const regex = /at\\s+(?:([\\w$.<>]+)\\s+\\()?((?:\\/|[A-Za-z]:\\\\)[^:]+):(\\d+):(\\d+)\\)?/\n const match = callerLine.match(regex)\n\n if (!match) return null\n\n // Extract details from the match.\n const functionName = match[1] || \"<anonymous>\"\n const fullPath = match[2]\n const fileName = fullPath.split(/[\\\\/]/).pop() || \"<unknown>\"\n const lineNumber = parseInt(match[3], 10) || 0\n const columnNumber = parseInt(match[4], 10) || 0\n\n return { functionName, fullPath, fileName, lineNumber, columnNumber }\n}\n\nenum LogLevel {\n LOG = \"LOG\",\n INFO = \"INFO\",\n WARN = \"WARN\",\n ERROR = \"ERROR\",\n DEBUG = \"DEBUG\",\n}\n\nexport const { capture } = singleton(\"ConsoleCapture\", () => {\n const capture = new Capture()\n const mockStdout = new CapturedWritableStream(\"stdout\", capture)\n const mockStderr = new CapturedWritableStream(\"stderr\", capture)\n\n if (process.env.SKIP_CONSOLE_CACHE !== \"true\") {\n global.console = new Console({\n stdout: mockStdout,\n stderr: mockStderr,\n colorMode: true,\n inspectOptions: {\n compact: false,\n breakLength: 80,\n depth: 2,\n },\n })\n }\n\n return { capture }\n})\n\nclass TerminalConsoleCache extends EventEmitter {\n private originalConsole: {\n log: typeof console.log\n info: typeof console.info\n warn: typeof console.warn\n error: typeof console.error\n debug: typeof console.debug\n }\n private _cachedLogs: [Date, LogLevel, any[], CallerInfo | null][] = []\n private readonly MAX_CACHE_SIZE = 1000\n private _collectCallerInfo: boolean = false\n private _cachingEnabled: boolean = true\n\n get cachedLogs(): [Date, LogLevel, any[], CallerInfo | null][] {\n return this._cachedLogs\n }\n\n constructor() {\n super()\n\n this.originalConsole = {\n log: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error,\n debug: console.debug,\n }\n\n if (process.env.SKIP_CONSOLE_CACHE !== \"true\") {\n this.activate()\n }\n }\n\n public activate(): void {\n this.overrideConsoleMethods()\n }\n\n public setCollectCallerInfo(enabled: boolean): void {\n this._collectCallerInfo = enabled\n }\n\n public clearConsole(): void {\n this._cachedLogs = []\n }\n\n public setCachingEnabled(enabled: boolean): void {\n this._cachingEnabled = enabled\n }\n\n public deactivate(): void {\n console.log = this.originalConsole.log\n console.info = this.originalConsole.info\n console.warn = this.originalConsole.warn\n console.error = this.originalConsole.error\n console.debug = this.originalConsole.debug\n }\n\n private overrideConsoleMethods(): void {\n console.log = (...args: any[]) => {\n this.appendToConsole(LogLevel.LOG, ...args)\n }\n\n console.info = (...args: any[]) => {\n this.appendToConsole(LogLevel.INFO, ...args)\n }\n\n console.warn = (...args: any[]) => {\n this.appendToConsole(LogLevel.WARN, ...args)\n }\n\n console.error = (...args: any[]) => {\n this.appendToConsole(LogLevel.ERROR, ...args)\n }\n\n console.debug = (...args: any[]) => {\n this.appendToConsole(LogLevel.DEBUG, ...args)\n }\n }\n\n public addLogEntry(level: LogLevel, ...args: any[]) {\n const callerInfo = this._collectCallerInfo ? getCallerInfo() : null\n const logEntry: [Date, LogLevel, any[], CallerInfo | null] = [new Date(), level, args, callerInfo]\n\n if (this._cachingEnabled) {\n if (this._cachedLogs.length >= this.MAX_CACHE_SIZE) {\n this._cachedLogs.shift()\n }\n this._cachedLogs.push(logEntry)\n }\n\n return logEntry\n }\n\n private appendToConsole(level: LogLevel, ...args: any[]): void {\n if (this._cachedLogs.length >= this.MAX_CACHE_SIZE) {\n this._cachedLogs.shift()\n }\n const entry = this.addLogEntry(level, ...args)\n this.emit(\"entry\", entry)\n }\n\n public destroy(): void {\n this.deactivate()\n }\n}\n\nconst terminalConsoleCache = singleton(\"TerminalConsoleCache\", () => {\n const terminalConsoleCache = new TerminalConsoleCache()\n process.on(\"exit\", () => {\n terminalConsoleCache.destroy()\n })\n return terminalConsoleCache\n})\n\nexport enum ConsolePosition {\n TOP = \"top\",\n BOTTOM = \"bottom\",\n LEFT = \"left\",\n RIGHT = \"right\",\n}\n\nexport interface ConsoleOptions {\n position?: ConsolePosition\n sizePercent?: number\n zIndex?: number\n colorInfo?: ColorInput\n colorWarn?: ColorInput\n colorError?: ColorInput\n colorDebug?: ColorInput\n colorDefault?: ColorInput\n backgroundColor?: ColorInput\n startInDebugMode?: boolean\n title?: string\n titleBarColor?: ColorInput\n titleBarTextColor?: ColorInput\n cursorColor?: ColorInput\n maxStoredLogs?: number\n maxDisplayLines?: number\n}\n\nconst DEFAULT_CONSOLE_OPTIONS: Required<ConsoleOptions> = {\n position: ConsolePosition.BOTTOM,\n sizePercent: 30,\n zIndex: Infinity,\n colorInfo: \"#00FFFF\", // Cyan\n colorWarn: \"#FFFF00\", // Yellow\n colorError: \"#FF0000\", // Red\n colorDebug: \"#808080\", // Gray\n colorDefault: \"#FFFFFF\", // White\n backgroundColor: RGBA.fromValues(0.1, 0.1, 0.1, 0.7),\n startInDebugMode: false,\n title: \"Console\",\n titleBarColor: RGBA.fromValues(0.05, 0.05, 0.05, 0.7),\n titleBarTextColor: \"#FFFFFF\",\n cursorColor: \"#00A0FF\",\n maxStoredLogs: 2000,\n maxDisplayLines: 3000,\n}\n\nconst INDENT_WIDTH = 2\n\ninterface DisplayLine {\n text: string\n level: LogLevel\n indent: boolean\n}\n\nexport class TerminalConsole extends EventEmitter {\n private isVisible: boolean = false\n private isFocused: boolean = false\n private renderer: CliRenderer\n private stdinHandler: (...args: any[]) => void\n private options: Required<ConsoleOptions>\n private _debugModeEnabled: boolean = false\n\n private frameBuffer: OptimizedBuffer | null = null\n private consoleX: number = 0\n private consoleY: number = 0\n private consoleWidth: number = 0\n private consoleHeight: number = 0\n private scrollTopIndex: number = 0\n private isScrolledToBottom: boolean = true\n private currentLineIndex: number = 0\n private _displayLines: DisplayLine[] = []\n private _allLogEntries: [Date, LogLevel, any[], CallerInfo | null][] = []\n private _needsFrameBufferUpdate: boolean = false\n\n private markNeedsUpdate(): void {\n this._needsFrameBufferUpdate = true\n this.renderer.needsUpdate()\n }\n\n private _rgbaInfo: RGBA\n private _rgbaWarn: RGBA\n private _rgbaError: RGBA\n private _rgbaDebug: RGBA\n private _rgbaDefault: RGBA\n private backgroundColor: RGBA\n private _rgbaTitleBar: RGBA\n private _rgbaTitleBarText: RGBA\n private _title: string\n private _rgbaCursor: RGBA\n\n private _positions: ConsolePosition[] = [\n ConsolePosition.TOP,\n ConsolePosition.RIGHT,\n ConsolePosition.BOTTOM,\n ConsolePosition.LEFT,\n ]\n\n constructor(renderer: CliRenderer, options: ConsoleOptions = {}) {\n super()\n this.renderer = renderer\n this.options = { ...DEFAULT_CONSOLE_OPTIONS, ...options }\n this.stdinHandler = this.handleStdin.bind(this)\n this._debugModeEnabled = this.options.startInDebugMode\n terminalConsoleCache.setCollectCallerInfo(this._debugModeEnabled)\n\n this._rgbaInfo = parseColor(this.options.colorInfo)\n this._rgbaWarn = parseColor(this.options.colorWarn)\n this._rgbaError = parseColor(this.options.colorError)\n this._rgbaDebug = parseColor(this.options.colorDebug)\n this._rgbaDefault = parseColor(this.options.colorDefault)\n this.backgroundColor = parseColor(this.options.backgroundColor)\n this._rgbaTitleBar = parseColor(this.options.titleBarColor)\n this._rgbaTitleBarText = parseColor(this.options.titleBarTextColor || this.options.colorDefault)\n this._title = this.options.title\n this._rgbaCursor = parseColor(this.options.cursorColor)\n\n this._updateConsoleDimensions()\n this._scrollToBottom(true)\n\n terminalConsoleCache.on(\"entry\", (logEntry: [Date, LogLevel, any[], CallerInfo | null]) => {\n this._handleNewLog(logEntry)\n })\n\n if (process.env.SHOW_CONSOLE === \"true\") {\n this.show()\n }\n }\n\n public activate(): void {\n terminalConsoleCache.activate()\n }\n\n public deactivate(): void {\n terminalConsoleCache.deactivate()\n }\n\n // Handles a single new log entry *while the console is visible*\n private _handleNewLog(logEntry: [Date, LogLevel, any[], CallerInfo | null]): void {\n if (!this.isVisible) return\n\n this._allLogEntries.push(logEntry)\n\n if (this._allLogEntries.length > this.options.maxStoredLogs) {\n this._allLogEntries.splice(0, this._allLogEntries.length - this.options.maxStoredLogs)\n }\n\n const newDisplayLines = this._processLogEntry(logEntry)\n this._displayLines.push(...newDisplayLines)\n\n if (this._displayLines.length > this.options.maxDisplayLines) {\n this._displayLines.splice(0, this._displayLines.length - this.options.maxDisplayLines)\n const linesRemoved = this._displayLines.length - this.options.maxDisplayLines\n this.scrollTopIndex = Math.max(0, this.scrollTopIndex - linesRemoved)\n }\n\n if (this.isScrolledToBottom) {\n this._scrollToBottom()\n }\n this.markNeedsUpdate()\n }\n\n private _updateConsoleDimensions(): void {\n const termWidth = this.renderer.terminalWidth\n const termHeight = this.renderer.terminalHeight\n const sizePercent = this.options.sizePercent / 100\n\n switch (this.options.position) {\n case ConsolePosition.TOP:\n this.consoleX = 0\n this.consoleY = 0\n this.consoleWidth = termWidth\n this.consoleHeight = Math.max(1, Math.floor(termHeight * sizePercent))\n break\n case ConsolePosition.BOTTOM:\n this.consoleHeight = Math.max(1, Math.floor(termHeight * sizePercent))\n this.consoleWidth = termWidth\n this.consoleX = 0\n this.consoleY = termHeight - this.consoleHeight\n break\n case ConsolePosition.LEFT:\n this.consoleWidth = Math.max(1, Math.floor(termWidth * sizePercent))\n this.consoleHeight = termHeight\n this.consoleX = 0\n this.consoleY = 0\n break\n case ConsolePosition.RIGHT:\n this.consoleWidth = Math.max(1, Math.floor(termWidth * sizePercent))\n this.consoleHeight = termHeight\n this.consoleY = 0\n this.consoleX = termWidth - this.consoleWidth\n break\n }\n this.currentLineIndex = Math.max(0, Math.min(this.currentLineIndex, this.consoleHeight - 1))\n }\n\n private handleStdin(data: Buffer): void {\n const key = data.toString()\n\n let needsRedraw = false\n const displayLineCount = this._displayLines.length\n const logAreaHeight = Math.max(1, this.consoleHeight - 1)\n const maxScrollTop = Math.max(0, displayLineCount - logAreaHeight)\n const currentPositionIndex = this._positions.indexOf(this.options.position)\n\n switch (key) {\n case \"\\u001b\": // ESC key\n this.blur()\n break\n case \"\\u001b[1;2A\": // Shift+UpArrow - Scroll to top\n if (this.scrollTopIndex > 0 || this.currentLineIndex > 0) {\n this.scrollTopIndex = 0\n this.currentLineIndex = 0\n this.isScrolledToBottom = this._displayLines.length <= Math.max(1, this.consoleHeight - 1)\n needsRedraw = true\n }\n break\n case \"\\u001b[1;2B\": // Shift+DownArrow - Scroll to bottom\n const logAreaHeightForScroll = Math.max(1, this.consoleHeight - 1)\n const maxScrollPossible = Math.max(0, this._displayLines.length - logAreaHeightForScroll)\n if (this.scrollTopIndex < maxScrollPossible || !this.isScrolledToBottom) {\n this._scrollToBottom(true)\n needsRedraw = true\n }\n break\n case \"\\u001b[A\": // Up arrow\n if (this.currentLineIndex > 0) {\n this.currentLineIndex--\n needsRedraw = true\n } else if (this.scrollTopIndex > 0) {\n this.scrollTopIndex--\n this.isScrolledToBottom = false\n needsRedraw = true\n }\n break\n case \"\\u001b[B\": // Down arrow\n const canCursorMoveDown =\n this.currentLineIndex < logAreaHeight - 1 &&\n this.scrollTopIndex + this.currentLineIndex < displayLineCount - 1\n\n if (canCursorMoveDown) {\n this.currentLineIndex++\n needsRedraw = true\n } else if (this.scrollTopIndex < maxScrollTop) {\n this.scrollTopIndex++\n this.isScrolledToBottom = this.scrollTopIndex === maxScrollTop\n needsRedraw = true\n }\n break\n case \"\\u0010\": // Ctrl+p (Previous position)\n const prevIndex = (currentPositionIndex - 1 + this._positions.length) % this._positions.length\n this.options.position = this._positions[prevIndex]\n this.resize(this.renderer.terminalWidth, this.renderer.terminalHeight)\n break\n case \"\\u000f\": // Ctrl+o (Next/Other position)\n const nextIndex = (currentPositionIndex + 1) % this._positions.length\n this.options.position = this._positions[nextIndex]\n this.resize(this.renderer.terminalWidth, this.renderer.terminalHeight)\n break\n case \"+\":\n this.options.sizePercent = Math.min(100, this.options.sizePercent + 5)\n this.resize(this.renderer.terminalWidth, this.renderer.terminalHeight)\n break\n case \"-\":\n this.options.sizePercent = Math.max(10, this.options.sizePercent - 5)\n this.resize(this.renderer.terminalWidth, this.renderer.terminalHeight)\n break\n case \"\\u0013\": // Ctrl+s (Save logs)\n this.saveLogsToFile()\n break\n }\n\n if (needsRedraw) {\n this.markNeedsUpdate()\n }\n }\n\n private attachStdin(): void {\n if (this.isFocused) return\n process.stdin.on(\"data\", this.stdinHandler)\n this.isFocused = true\n }\n\n private detachStdin(): void {\n if (!this.isFocused) return\n process.stdin.off(\"data\", this.stdinHandler)\n this.isFocused = false\n }\n\n private formatTimestamp(date: Date): string {\n return new Intl.DateTimeFormat(\"en-US\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n }).format(date)\n }\n\n private formatArguments(args: any[]): string {\n return args\n .map((arg) => {\n if (arg instanceof Error) {\n const errorProps = arg\n return `Error: ${errorProps.message}\\n` + (errorProps.stack ? `${errorProps.stack}\\n` : \"\")\n }\n if (typeof arg === \"object\" && arg !== null) {\n try {\n return util.inspect(arg, { depth: 2 })\n } catch (e) {\n return String(arg)\n }\n }\n try {\n return util.inspect(arg, { depth: 2 })\n } catch (e) {\n return String(arg)\n }\n })\n .join(\" \")\n }\n\n public resize(width: number, height: number): void {\n this._updateConsoleDimensions()\n\n if (this.frameBuffer) {\n this.frameBuffer.resize(this.consoleWidth, this.consoleHeight)\n\n const displayLineCount = this._displayLines.length\n const logAreaHeight = Math.max(1, this.consoleHeight - 1)\n const maxScrollTop = Math.max(0, displayLineCount - logAreaHeight)\n this.scrollTopIndex = Math.min(this.scrollTopIndex, maxScrollTop)\n this.isScrolledToBottom = this.scrollTopIndex === maxScrollTop\n const visibleLineCount = Math.min(logAreaHeight, displayLineCount - this.scrollTopIndex)\n this.currentLineIndex = Math.max(0, Math.min(this.currentLineIndex, visibleLineCount - 1))\n\n if (this.isVisible) {\n this.markNeedsUpdate()\n }\n }\n }\n\n public clear(): void {\n terminalConsoleCache.clearConsole()\n this._allLogEntries = []\n this._displayLines = []\n this.markNeedsUpdate()\n }\n\n public toggle(): void {\n if (this.isVisible) {\n if (this.isFocused) {\n this.hide()\n } else {\n this.focus()\n }\n } else {\n this.show()\n }\n if (!this.renderer.isRunning) {\n this.renderer.needsUpdate()\n }\n }\n\n public focus(): void {\n this.attachStdin()\n this._scrollToBottom(true)\n this.markNeedsUpdate()\n }\n\n public blur(): void {\n this.detachStdin()\n this.markNeedsUpdate()\n }\n\n public show(): void {\n if (!this.isVisible) {\n this.isVisible = true\n this._processCachedLogs()\n terminalConsoleCache.setCachingEnabled(false)\n\n if (!this.frameBuffer) {\n this.frameBuffer = OptimizedBuffer.create(this.consoleWidth, this.consoleHeight, this.renderer.widthMethod, {\n respectAlpha: this.backgroundColor.a < 1,\n })\n }\n const logCount = terminalConsoleCache.cachedLogs.length\n const visibleLogLines = Math.min(this.consoleHeight, logCount)\n this.currentLineIndex = Math.max(0, visibleLogLines - 1)\n this.scrollTopIndex = 0\n this._scrollToBottom(true)\n\n this.focus()\n this.markNeedsUpdate()\n }\n }\n\n public hide(): void {\n if (this.isVisible) {\n this.isVisible = false\n this.blur()\n terminalConsoleCache.setCachingEnabled(true)\n }\n }\n\n public getCachedLogs(): string {\n return terminalConsoleCache.cachedLogs\n .map((logEntry) => logEntry[0].toISOString() + \" \" + logEntry.slice(1).join(\" \"))\n .join(\"\\n\")\n }\n\n private updateFrameBuffer(): void {\n if (!this.frameBuffer) return\n\n this.frameBuffer.clear(this.backgroundColor)\n\n const displayLines = this._displayLines\n const displayLineCount = displayLines.length\n const logAreaHeight = Math.max(1, this.consoleHeight - 1)\n\n // --- Draw Title Bar ---\n this.frameBuffer.fillRect(0, 0, this.consoleWidth, 1, this._rgbaTitleBar)\n const dynamicTitle = `${this._title}${this.isFocused ? \" (Focused)\" : \"\"}`\n const titleX = Math.max(0, Math.floor((this.consoleWidth - dynamicTitle.length) / 2))\n this.frameBuffer.drawText(dynamicTitle, titleX, 0, this._rgbaTitleBarText, this._rgbaTitleBar)\n\n const startIndex = this.scrollTopIndex\n const endIndex = Math.min(startIndex + logAreaHeight, displayLineCount)\n const visibleDisplayLines = displayLines.slice(startIndex, endIndex)\n\n let lineY = 1\n for (const displayLine of visibleDisplayLines) {\n if (lineY >= this.consoleHeight) break\n\n let levelColor = this._rgbaDefault\n switch (displayLine.level) {\n case LogLevel.INFO:\n levelColor = this._rgbaInfo\n break\n case LogLevel.WARN:\n levelColor = this._rgbaWarn\n break\n case LogLevel.ERROR:\n levelColor = this._rgbaError\n break\n case LogLevel.DEBUG:\n levelColor = this._rgbaDebug\n break\n }\n\n const linePrefix = displayLine.indent ? \" \".repeat(INDENT_WIDTH) : \"\"\n const textToDraw = displayLine.text\n const textAvailableWidth = this.consoleWidth - 1 - (displayLine.indent ? INDENT_WIDTH : 0)\n const showCursor = this.isFocused && lineY - 1 === this.currentLineIndex\n\n if (showCursor) {\n this.frameBuffer.drawText(\">\", 0, lineY, this._rgbaCursor, this.backgroundColor)\n } else {\n this.frameBuffer.drawText(\" \", 0, lineY, this._rgbaDefault, this.backgroundColor)\n }\n\n this.frameBuffer.drawText(`${linePrefix}${textToDraw.substring(0, textAvailableWidth)}`, 1, lineY, levelColor)\n\n lineY++\n }\n }\n\n public renderToBuffer(buffer: OptimizedBuffer): void {\n if (!this.isVisible || !this.frameBuffer) return\n\n if (this._needsFrameBufferUpdate) {\n this.updateFrameBuffer()\n this._needsFrameBufferUpdate = false\n }\n\n buffer.drawFrameBuffer(this.consoleX, this.consoleY, this.frameBuffer)\n }\n\n public setDebugMode(enabled: boolean): void {\n this._debugModeEnabled = enabled\n terminalConsoleCache.setCollectCallerInfo(enabled)\n if (this.isVisible) {\n this.markNeedsUpdate()\n }\n }\n\n public toggleDebugMode(): void {\n this.setDebugMode(!this._debugModeEnabled)\n }\n\n private _scrollToBottom(forceCursorToLastLine: boolean = false): void {\n const displayLineCount = this._displayLines.length\n const logAreaHeight = Math.max(1, this.consoleHeight - 1)\n const maxScrollTop = Math.max(0, displayLineCount - logAreaHeight)\n this.scrollTopIndex = maxScrollTop\n this.isScrolledToBottom = true\n\n const visibleLineCount = Math.min(logAreaHeight, displayLineCount - this.scrollTopIndex)\n if (forceCursorToLastLine || this.currentLineIndex >= visibleLineCount) {\n this.currentLineIndex = Math.max(0, visibleLineCount - 1)\n }\n }\n\n private _processLogEntry(logEntry: [Date, LogLevel, any[], CallerInfo | null]): DisplayLine[] {\n const [date, level, args, callerInfo] = logEntry\n const displayLines: DisplayLine[] = []\n\n const timestamp = this.formatTimestamp(date)\n const callerSource = callerInfo ? `${callerInfo.fileName}:${callerInfo.lineNumber}` : \"unknown\"\n const prefix = `[${timestamp}] [${level}]` + (this._debugModeEnabled ? ` [${callerSource}]` : \"\") + \" \"\n\n const formattedArgs = this.formatArguments(args)\n const initialLines = formattedArgs.split(\"\\n\")\n\n for (let i = 0; i < initialLines.length; i++) {\n const lineText = initialLines[i]\n const isFirstLineOfEntry = i === 0\n const availableWidth = this.consoleWidth - 1 - (isFirstLineOfEntry ? 0 : INDENT_WIDTH)\n const linePrefix = isFirstLineOfEntry ? prefix : \" \".repeat(INDENT_WIDTH)\n const textToWrap = isFirstLineOfEntry ? linePrefix + lineText : lineText\n\n let currentPos = 0\n while (currentPos < textToWrap.length || (isFirstLineOfEntry && currentPos === 0 && textToWrap.length === 0)) {\n const segment = textToWrap.substring(currentPos, currentPos + availableWidth)\n const isFirstSegmentOfLine = currentPos === 0\n\n displayLines.push({\n text: isFirstSegmentOfLine && !isFirstLineOfEntry ? linePrefix + segment : segment,\n level: level,\n indent: !isFirstLineOfEntry || !isFirstSegmentOfLine,\n })\n\n currentPos += availableWidth\n if (isFirstLineOfEntry && currentPos === 0 && textToWrap.length === 0) break\n }\n }\n\n return displayLines\n }\n\n private _processCachedLogs(): void {\n const logsToProcess = [...terminalConsoleCache.cachedLogs]\n terminalConsoleCache.clearConsole()\n\n this._allLogEntries.push(...logsToProcess)\n\n if (this._allLogEntries.length > this.options.maxStoredLogs) {\n this._allLogEntries.splice(0, this._allLogEntries.length - this.options.maxStoredLogs)\n }\n\n for (const logEntry of logsToProcess) {\n const processed = this._processLogEntry(logEntry)\n this._displayLines.push(...processed)\n }\n\n if (this._displayLines.length > this.options.maxDisplayLines) {\n this._displayLines.splice(0, this._displayLines.length - this.options.maxDisplayLines)\n }\n }\n\n private saveLogsToFile(): void {\n try {\n const timestamp = Date.now()\n const filename = `_console_${timestamp}.log`\n const filepath = path.join(process.cwd(), filename)\n\n const allLogEntries = [...this._allLogEntries, ...terminalConsoleCache.cachedLogs]\n\n const logLines: string[] = []\n\n for (const [date, level, args, callerInfo] of allLogEntries) {\n const timestampStr = this.formatTimestamp(date)\n const callerSource = callerInfo ? `${callerInfo.fileName}:${callerInfo.lineNumber}` : \"unknown\"\n const prefix = `[${timestampStr}] [${level}]` + (this._debugModeEnabled ? ` [${callerSource}]` : \"\") + \" \"\n const formattedArgs = this.formatArguments(args)\n logLines.push(prefix + formattedArgs)\n }\n\n const content = logLines.join(\"\\n\")\n fs.writeFileSync(filepath, content, \"utf8\")\n\n console.info(`Console logs saved to: ${filename}`)\n } catch (error) {\n console.error(`Failed to save console logs:`, error)\n }\n }\n}\n",
26
+ "import { EventEmitter } from \"events\"\nimport Yoga, { Direction, Display, Edge, FlexDirection, type Config } from \"yoga-layout\"\nimport { OptimizedBuffer } from \"./buffer\"\nimport { getKeyHandler, type KeyHandler } from \"./lib/KeyHandler\"\nimport { TrackedNode, createTrackedNode } from \"./lib/TrackedNode\"\nimport type { ParsedKey } from \"./lib/parse.keypress\"\nimport type { MouseEventType } from \"./lib/parse.mouse\"\nimport {\n parseAlign,\n parseFlexDirection,\n parseJustify,\n parseOverflow,\n parsePositionType,\n parseWrap,\n type AlignString,\n type FlexDirectionString,\n type JustifyString,\n type OverflowString,\n type PositionTypeString,\n type WrapString,\n} from \"./lib/yoga.options\"\nimport type { MouseEvent } from \"./renderer\"\nimport type { RenderContext, SelectionState } from \"./types\"\nimport { ensureRenderable, type VNode } from \"./renderables/composition/vnode\"\n\nexport enum LayoutEvents {\n LAYOUT_CHANGED = \"layout-changed\",\n ADDED = \"added\",\n REMOVED = \"removed\",\n RESIZED = \"resized\",\n}\n\nexport enum RenderableEvents {\n FOCUSED = \"focused\",\n BLURRED = \"blurred\",\n}\n\nexport interface Position {\n top?: number | \"auto\" | `${number}%`\n right?: number | \"auto\" | `${number}%`\n bottom?: number | \"auto\" | `${number}%`\n left?: number | \"auto\" | `${number}%`\n}\n\nexport interface LayoutOptions {\n flexGrow?: number\n flexShrink?: number\n flexDirection?: FlexDirectionString\n flexWrap?: WrapString\n alignItems?: AlignString\n justifyContent?: JustifyString\n alignSelf?: AlignString\n flexBasis?: number | \"auto\" | undefined\n position?: PositionTypeString\n overflow?: OverflowString\n top?: number | \"auto\" | `${number}%`\n right?: number | \"auto\" | `${number}%`\n bottom?: number | \"auto\" | `${number}%`\n left?: number | \"auto\" | `${number}%`\n minWidth?: number | \"auto\" | `${number}%`\n minHeight?: number | \"auto\" | `${number}%`\n maxWidth?: number | \"auto\" | `${number}%`\n maxHeight?: number | \"auto\" | `${number}%`\n margin?: number | \"auto\" | `${number}%`\n marginTop?: number | \"auto\" | `${number}%`\n marginRight?: number | \"auto\" | `${number}%`\n marginBottom?: number | \"auto\" | `${number}%`\n marginLeft?: number | \"auto\" | `${number}%`\n padding?: number | `${number}%`\n paddingTop?: number | `${number}%`\n paddingRight?: number | `${number}%`\n paddingBottom?: number | `${number}%`\n paddingLeft?: number | `${number}%`\n enableLayout?: boolean\n}\n\nexport interface RenderableOptions<T extends Renderable = Renderable> extends Partial<LayoutOptions> {\n id?: string\n width?: number | \"auto\" | `${number}%`\n height?: number | \"auto\" | `${number}%`\n zIndex?: number\n visible?: boolean\n buffered?: boolean\n live?: boolean\n\n // hooks for custom render logic\n renderBefore?: (this: T, buffer: OptimizedBuffer, deltaTime: number) => void\n renderAfter?: (this: T, buffer: OptimizedBuffer, deltaTime: number) => void\n\n // catch all\n onMouse?: (this: T, event: MouseEvent) => void\n\n onMouseDown?: (this: T, event: MouseEvent) => void\n onMouseUp?: (this: T, event: MouseEvent) => void\n onMouseMove?: (this: T, event: MouseEvent) => void\n onMouseDrag?: (this: T, event: MouseEvent) => void\n onMouseDragEnd?: (this: T, event: MouseEvent) => void\n onMouseDrop?: (this: T, event: MouseEvent) => void\n onMouseOver?: (this: T, event: MouseEvent) => void\n onMouseOut?: (this: T, event: MouseEvent) => void\n onMouseScroll?: (this: T, event: MouseEvent) => void\n\n onKeyDown?: (key: ParsedKey) => void\n}\n\nfunction validateOptions(id: string, options: RenderableOptions<Renderable>): void {\n if (typeof options.width === \"number\") {\n if (options.width < 0) {\n throw new TypeError(`Invalid width for Renderable ${id}: ${options.width}`)\n }\n }\n if (typeof options.height === \"number\") {\n if (options.height < 0) {\n throw new TypeError(`Invalid height for Renderable ${id}: ${options.height}`)\n }\n }\n}\n\nexport function isValidPercentage(value: any): value is `${number}%` {\n if (typeof value === \"string\" && value.endsWith(\"%\")) {\n const numPart = value.slice(0, -1)\n const num = parseFloat(numPart)\n return !Number.isNaN(num)\n }\n return false\n}\n\nexport function isMarginType(value: any): value is number | \"auto\" | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n if (value === \"auto\") {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPaddingType(value: any): value is number | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPositionType(value: any): value is number | \"auto\" | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n if (value === \"auto\") {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPositionTypeType(value: any): value is PositionTypeString {\n return value === \"relative\" || value === \"absolute\"\n}\n\nexport function isOverflowType(value: any): value is OverflowString {\n return value === \"visible\" || value === \"hidden\" || value === \"scroll\"\n}\n\nexport function isDimensionType(value: any): value is number | \"auto\" | `${number}%` {\n return isPositionType(value)\n}\n\nexport function isFlexBasisType(value: any): value is number | \"auto\" | undefined {\n if (value === undefined || value === \"auto\") {\n return true\n }\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return false\n}\n\nexport function isSizeType(value: any): value is number | `${number}%` | undefined {\n if (value === undefined) {\n return true\n }\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport abstract class Renderable extends EventEmitter {\n private static renderableNumber = 1\n static renderablesByNumber: Map<number, Renderable> = new Map()\n\n public readonly id: string\n public readonly num: number\n protected _ctx: RenderContext\n protected _translateX: number = 0\n protected _translateY: number = 0\n protected _x: number = 0\n protected _y: number = 0\n protected _width: number | \"auto\" | `${number}%`\n protected _height: number | \"auto\" | `${number}%`\n protected _widthValue: number = 0\n protected _heightValue: number = 0\n private _zIndex: number\n protected _visible: boolean\n public selectable: boolean = false\n protected buffered: boolean\n protected frameBuffer: OptimizedBuffer | null = null\n private _dirty: boolean = false\n\n protected focusable: boolean = false\n protected _focused: boolean = false\n protected keyHandler: KeyHandler = getKeyHandler()\n protected keypressHandler: ((key: ParsedKey) => void) | null = null\n private _live: boolean = false\n protected _liveCount: number = 0\n\n private _mouseListener: ((event: MouseEvent) => void) | null = null\n private _mouseListeners: Partial<Record<MouseEventType, (event: MouseEvent) => void>> = {}\n private _keyListeners: Partial<Record<\"down\", (key: ParsedKey) => void>> = {}\n\n protected layoutNode: TrackedNode\n protected _positionType: PositionTypeString = \"relative\"\n protected _overflow: OverflowString = \"visible\"\n protected _position: Position = {}\n\n private _childHostOverride: Renderable | null = null\n\n private renderableMap: Map<string, Renderable> = new Map()\n private renderableArray: Renderable[] = []\n private needsZIndexSort: boolean = false\n public parent: Renderable | null = null\n\n public renderBefore?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void\n public renderAfter?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void\n\n constructor(ctx: RenderContext, options: RenderableOptions<any>) {\n super()\n this.num = Renderable.renderableNumber++\n this.id = options.id ?? `renderable-${this.num}`\n this._ctx = ctx\n Renderable.renderablesByNumber.set(this.num, this)\n\n validateOptions(this.id, options)\n\n this.renderBefore = options.renderBefore\n this.renderAfter = options.renderAfter\n\n this._width = options.width ?? \"auto\"\n this._height = options.height ?? \"auto\"\n\n if (typeof this._width === \"number\") {\n this._widthValue = this._width\n }\n if (typeof this._height === \"number\") {\n this._heightValue = this._height\n }\n\n this._zIndex = options.zIndex ?? 0\n this._visible = options.visible !== false\n this.buffered = options.buffered ?? false\n this._live = options.live ?? false\n this._liveCount = this._live && this._visible ? 1 : 0\n\n this.layoutNode = createTrackedNode({ renderable: this } as any)\n this.layoutNode.yogaNode.setDisplay(this._visible ? Display.Flex : Display.None)\n this.setupYogaProperties(options)\n\n this.applyEventOptions(options)\n\n if (this.buffered) {\n this.createFrameBuffer()\n }\n }\n\n public get ctx(): RenderContext {\n return this._ctx\n }\n\n public get visible(): boolean {\n return this._visible\n }\n\n public set visible(value: boolean) {\n if (this._visible === value) return\n\n const wasVisible = this._visible\n this._visible = value\n this.layoutNode.yogaNode.setDisplay(value ? Display.Flex : Display.None)\n\n if (this._live) {\n if (!wasVisible && value) {\n this.propagateLiveCount(1)\n } else if (wasVisible && !value) {\n this.propagateLiveCount(-1)\n }\n }\n\n if (this._focused) {\n this.blur()\n }\n this.requestRender()\n }\n\n public hasSelection(): boolean {\n return false\n }\n\n public onSelectionChanged(selection: SelectionState | null): boolean {\n // Default implementation: do nothing\n // Override this method to provide custom selection handling\n return false\n }\n\n public getSelectedText(): string {\n return \"\"\n }\n\n public shouldStartSelection(x: number, y: number): boolean {\n return false\n }\n\n public focus(): void {\n if (this.childHost !== this) {\n this.childHost.focus()\n return\n }\n\n if (this._focused || !this.focusable) return\n\n this._focused = true\n this.requestRender()\n\n this.keypressHandler = (key: ParsedKey) => {\n this._keyListeners[\"down\"]?.(key)\n if (this.handleKeyPress) {\n this.handleKeyPress(key)\n }\n }\n\n this.keyHandler.on(\"keypress\", this.keypressHandler)\n this.emit(RenderableEvents.FOCUSED)\n }\n\n public blur(): void {\n if (this.childHost !== this) {\n this.childHost.blur()\n return\n }\n\n if (!this._focused || !this.focusable) return\n\n this._focused = false\n this.requestRender()\n\n if (this.keypressHandler) {\n this.keyHandler.off(\"keypress\", this.keypressHandler)\n this.keypressHandler = null\n }\n\n this.emit(RenderableEvents.BLURRED)\n }\n\n public get focused(): boolean {\n return this._focused\n }\n\n public get live(): boolean {\n return this._live\n }\n\n public get liveCount(): number {\n return this._liveCount\n }\n\n public set live(value: boolean) {\n if (this._live === value) return\n\n this._live = value\n\n if (this._visible) {\n const delta = value ? 1 : -1\n this.propagateLiveCount(delta)\n }\n }\n\n protected propagateLiveCount(delta: number): void {\n this._liveCount += delta\n this.parent?.propagateLiveCount(delta)\n }\n\n public handleKeyPress?(key: ParsedKey | string): boolean\n\n protected get isDirty(): boolean {\n return this._dirty\n }\n\n public get childHost(): Renderable {\n return this._childHostOverride || this\n }\n\n public set childHost(host: Renderable | null) {\n this._childHostOverride = host\n }\n\n public findDescendantById(id: string): Renderable | undefined {\n for (const child of this.renderableArray) {\n if (child.id === id) return child\n const found = child.findDescendantById(id)\n if (found) return found\n }\n return undefined\n }\n\n public setChildHostById(id: string): boolean {\n const found = this.findDescendantById(id)\n if (found) {\n this._childHostOverride = found\n return true\n }\n return false\n }\n\n private markClean(): void {\n this._dirty = false\n }\n\n public requestRender() {\n this._dirty = true\n this._ctx.requestRender()\n }\n\n public get translateX(): number {\n return this._translateX\n }\n\n public set translateX(value: number) {\n if (this._translateX === value) return\n this._translateX = value\n this.requestRender()\n }\n\n public get translateY(): number {\n return this._translateY\n }\n\n public set translateY(value: number) {\n if (this._translateY === value) return\n this._translateY = value\n this.requestRender()\n }\n\n public get x(): number {\n if (this.parent && this._positionType === \"relative\") {\n return this.parent.x + this._x + this._translateX\n }\n return this._x + this._translateX\n }\n\n public set x(value: number) {\n this.left = value\n }\n\n public get top(): number | \"auto\" | `${number}%` | undefined {\n return this._position.top\n }\n\n public set top(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ top: value })\n }\n }\n\n public get right(): number | \"auto\" | `${number}%` | undefined {\n return this._position.right\n }\n\n public set right(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ right: value })\n }\n }\n\n public get bottom(): number | \"auto\" | `${number}%` | undefined {\n return this._position.bottom\n }\n\n public set bottom(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ bottom: value })\n }\n }\n\n public get left(): number | \"auto\" | `${number}%` | undefined {\n return this._position.left\n }\n\n public set left(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ left: value })\n }\n }\n\n public get y(): number {\n if (this.parent && this._positionType === \"relative\") {\n return this.parent.y + this._y + this._translateY\n }\n return this._y + this._translateY\n }\n\n public set y(value: number) {\n this.top = value\n }\n\n public get width(): number {\n return this._widthValue\n }\n\n public set width(value: number | \"auto\" | `${number}%`) {\n if (isDimensionType(value)) {\n this._width = value\n this.layoutNode.setWidth(value)\n this.requestRender()\n }\n }\n\n public get height(): number {\n return this._heightValue\n }\n\n public set height(value: number | \"auto\" | `${number}%`) {\n if (isDimensionType(value)) {\n this._height = value\n this.layoutNode.setHeight(value)\n this.requestRender()\n }\n }\n\n public get zIndex(): number {\n return this._zIndex\n }\n\n public set zIndex(value: number) {\n if (this._zIndex !== value) {\n this._zIndex = value\n this.parent?.requestZIndexSort()\n }\n }\n\n private requestZIndexSort(): void {\n this.needsZIndexSort = true\n }\n\n private ensureZIndexSorted(): void {\n if (this.needsZIndexSort) {\n this.renderableArray.sort((a, b) => (a.zIndex > b.zIndex ? 1 : a.zIndex < b.zIndex ? -1 : 0))\n this.needsZIndexSort = false\n }\n }\n\n private setupYogaProperties(options: RenderableOptions<Renderable>): void {\n const node = this.layoutNode.yogaNode\n\n if (isFlexBasisType(options.flexBasis)) {\n node.setFlexBasis(options.flexBasis)\n }\n\n if (isSizeType(options.minWidth)) {\n node.setMinWidth(options.minWidth)\n }\n if (isSizeType(options.minHeight)) {\n node.setMinHeight(options.minHeight)\n }\n\n if (options.flexGrow !== undefined) {\n node.setFlexGrow(options.flexGrow)\n } else {\n node.setFlexGrow(0)\n }\n\n if (options.flexShrink !== undefined) {\n node.setFlexShrink(options.flexShrink)\n } else {\n const shrinkValue = options.flexGrow && options.flexGrow > 0 ? 1 : 0\n node.setFlexShrink(shrinkValue)\n }\n\n if (options.flexDirection !== undefined) {\n node.setFlexDirection(parseFlexDirection(options.flexDirection))\n }\n if (options.flexWrap !== undefined) {\n node.setFlexWrap(parseWrap(options.flexWrap))\n }\n if (options.alignItems !== undefined) {\n node.setAlignItems(parseAlign(options.alignItems))\n }\n if (options.justifyContent !== undefined) {\n node.setJustifyContent(parseJustify(options.justifyContent))\n }\n if (options.alignSelf !== undefined) {\n node.setAlignSelf(parseAlign(options.alignSelf))\n }\n\n if (isDimensionType(options.width)) {\n this._width = options.width\n this.layoutNode.setWidth(options.width)\n }\n if (isDimensionType(options.height)) {\n this._height = options.height\n this.layoutNode.setHeight(options.height)\n }\n\n this._positionType = options.position === \"absolute\" ? \"absolute\" : \"relative\"\n if (this._positionType !== \"relative\") {\n node.setPositionType(parsePositionType(this._positionType))\n }\n\n this._overflow = options.overflow === \"hidden\" ? \"hidden\" : options.overflow === \"scroll\" ? \"scroll\" : \"visible\"\n if (this._overflow !== \"visible\") {\n node.setOverflow(parseOverflow(this._overflow))\n }\n\n // TODO: flatten position properties internally as well\n const hasPositionProps =\n options.top !== undefined ||\n options.right !== undefined ||\n options.bottom !== undefined ||\n options.left !== undefined\n if (hasPositionProps) {\n this._position = {\n top: options.top,\n right: options.right,\n bottom: options.bottom,\n left: options.left,\n }\n this.updateYogaPosition(this._position)\n }\n\n if (isSizeType(options.maxWidth)) {\n node.setMaxWidth(options.maxWidth)\n }\n if (isSizeType(options.maxHeight)) {\n node.setMaxHeight(options.maxHeight)\n }\n\n this.setupMarginAndPadding(options)\n }\n\n private setupMarginAndPadding(options: RenderableOptions<Renderable>): void {\n const node = this.layoutNode.yogaNode\n\n if (isMarginType(options.margin)) {\n node.setMargin(Edge.Top, options.margin)\n node.setMargin(Edge.Right, options.margin)\n node.setMargin(Edge.Bottom, options.margin)\n node.setMargin(Edge.Left, options.margin)\n }\n\n if (isMarginType(options.marginTop)) {\n node.setMargin(Edge.Top, options.marginTop)\n }\n if (isMarginType(options.marginRight)) {\n node.setMargin(Edge.Right, options.marginRight)\n }\n if (isMarginType(options.marginBottom)) {\n node.setMargin(Edge.Bottom, options.marginBottom)\n }\n if (isMarginType(options.marginLeft)) {\n node.setMargin(Edge.Left, options.marginLeft)\n }\n\n if (isPaddingType(options.padding)) {\n node.setPadding(Edge.Top, options.padding)\n node.setPadding(Edge.Right, options.padding)\n node.setPadding(Edge.Bottom, options.padding)\n node.setPadding(Edge.Left, options.padding)\n }\n\n if (isPaddingType(options.paddingTop)) {\n node.setPadding(Edge.Top, options.paddingTop)\n }\n if (isPaddingType(options.paddingRight)) {\n node.setPadding(Edge.Right, options.paddingRight)\n }\n if (isPaddingType(options.paddingBottom)) {\n node.setPadding(Edge.Bottom, options.paddingBottom)\n }\n if (isPaddingType(options.paddingLeft)) {\n node.setPadding(Edge.Left, options.paddingLeft)\n }\n }\n\n set position(positionType: PositionTypeString) {\n if (!isPositionTypeType(positionType) || this._positionType === positionType) return\n\n this._positionType = positionType\n this.layoutNode.yogaNode.setPositionType(parsePositionType(positionType))\n this.requestRender()\n }\n\n get overflow(): OverflowString {\n return this._overflow\n }\n\n set overflow(overflow: OverflowString) {\n if (!isOverflowType(overflow) || this._overflow === overflow) return\n\n this._overflow = overflow\n this.layoutNode.yogaNode.setOverflow(parseOverflow(overflow))\n this.requestRender()\n }\n\n public setPosition(position: Position): void {\n this._position = { ...this._position, ...position }\n this.updateYogaPosition(position)\n }\n\n private updateYogaPosition(position: Position): void {\n const node = this.layoutNode.yogaNode\n const { top, right, bottom, left } = position\n\n if (isPositionType(top)) {\n if (top === \"auto\") {\n node.setPositionAuto(Edge.Top)\n } else {\n node.setPosition(Edge.Top, top)\n }\n }\n if (isPositionType(right)) {\n if (right === \"auto\") {\n node.setPositionAuto(Edge.Right)\n } else {\n node.setPosition(Edge.Right, right)\n }\n }\n if (isPositionType(bottom)) {\n if (bottom === \"auto\") {\n node.setPositionAuto(Edge.Bottom)\n } else {\n node.setPosition(Edge.Bottom, bottom)\n }\n }\n if (isPositionType(left)) {\n if (left === \"auto\") {\n node.setPositionAuto(Edge.Left)\n } else {\n node.setPosition(Edge.Left, left)\n }\n }\n this.requestRender()\n }\n\n public set flexGrow(grow: number) {\n this.layoutNode.yogaNode.setFlexGrow(grow)\n this.requestRender()\n }\n\n public set flexShrink(shrink: number) {\n this.layoutNode.yogaNode.setFlexShrink(shrink)\n this.requestRender()\n }\n\n public set flexDirection(direction: FlexDirectionString) {\n this.layoutNode.yogaNode.setFlexDirection(parseFlexDirection(direction))\n this.requestRender()\n }\n\n public set flexWrap(wrap: WrapString) {\n this.layoutNode.yogaNode.setFlexWrap(parseWrap(wrap))\n this.requestRender()\n }\n\n public set alignItems(alignItems: AlignString) {\n this.layoutNode.yogaNode.setAlignItems(parseAlign(alignItems))\n this.requestRender()\n }\n\n public set justifyContent(justifyContent: JustifyString) {\n this.layoutNode.yogaNode.setJustifyContent(parseJustify(justifyContent))\n this.requestRender()\n }\n\n public set alignSelf(alignSelf: AlignString) {\n this.layoutNode.yogaNode.setAlignSelf(parseAlign(alignSelf))\n this.requestRender()\n }\n\n public set flexBasis(basis: number | \"auto\" | undefined) {\n if (isFlexBasisType(basis)) {\n this.layoutNode.yogaNode.setFlexBasis(basis)\n this.requestRender()\n }\n }\n\n public set minWidth(minWidth: number | `${number}%` | undefined) {\n if (isSizeType(minWidth)) {\n this.layoutNode.yogaNode.setMinWidth(minWidth)\n this.requestRender()\n }\n }\n\n public set maxWidth(maxWidth: number | `${number}%` | undefined) {\n if (isSizeType(maxWidth)) {\n this.layoutNode.yogaNode.setMaxWidth(maxWidth)\n this.requestRender()\n }\n }\n\n public set minHeight(minHeight: number | `${number}%` | undefined) {\n if (isSizeType(minHeight)) {\n this.layoutNode.yogaNode.setMinHeight(minHeight)\n this.requestRender()\n }\n }\n\n public set maxHeight(maxHeight: number | `${number}%` | undefined) {\n if (isSizeType(maxHeight)) {\n this.layoutNode.yogaNode.setMaxHeight(maxHeight)\n this.requestRender()\n }\n }\n\n public set margin(margin: number | \"auto\" | `${number}%` | undefined) {\n if (isMarginType(margin)) {\n const node = this.layoutNode.yogaNode\n node.setMargin(Edge.Top, margin)\n node.setMargin(Edge.Right, margin)\n node.setMargin(Edge.Bottom, margin)\n node.setMargin(Edge.Left, margin)\n this.requestRender()\n }\n }\n\n public set marginTop(margin: number | \"auto\" | `${number}%` | undefined) {\n if (isMarginType(margin)) {\n this.layoutNode.yogaNode.setMargin(Edge.Top, margin)\n this.requestRender()\n }\n }\n\n public set marginRight(margin: number | \"auto\" | `${number}%` | undefined) {\n if (isMarginType(margin)) {\n this.layoutNode.yogaNode.setMargin(Edge.Right, margin)\n this.requestRender()\n }\n }\n\n public set marginBottom(margin: number | \"auto\" | `${number}%` | undefined) {\n if (isMarginType(margin)) {\n this.layoutNode.yogaNode.setMargin(Edge.Bottom, margin)\n this.requestRender()\n }\n }\n\n public set marginLeft(margin: number | \"auto\" | `${number}%` | undefined) {\n if (isMarginType(margin)) {\n this.layoutNode.yogaNode.setMargin(Edge.Left, margin)\n this.requestRender()\n }\n }\n\n public set padding(padding: number | `${number}%` | undefined) {\n if (isPaddingType(padding)) {\n const node = this.layoutNode.yogaNode\n node.setPadding(Edge.Top, padding)\n node.setPadding(Edge.Right, padding)\n node.setPadding(Edge.Bottom, padding)\n node.setPadding(Edge.Left, padding)\n this.requestRender()\n }\n }\n\n public set paddingTop(padding: number | `${number}%` | undefined) {\n if (isPaddingType(padding)) {\n this.layoutNode.yogaNode.setPadding(Edge.Top, padding)\n this.requestRender()\n }\n }\n\n public set paddingRight(padding: number | `${number}%` | undefined) {\n if (isPaddingType(padding)) {\n this.layoutNode.yogaNode.setPadding(Edge.Right, padding)\n this.requestRender()\n }\n }\n\n public set paddingBottom(padding: number | `${number}%` | undefined) {\n if (isPaddingType(padding)) {\n this.layoutNode.yogaNode.setPadding(Edge.Bottom, padding)\n this.requestRender()\n }\n }\n\n public set paddingLeft(padding: number | `${number}%` | undefined) {\n if (isPaddingType(padding)) {\n this.layoutNode.yogaNode.setPadding(Edge.Left, padding)\n this.requestRender()\n }\n }\n\n public getLayoutNode(): TrackedNode {\n return this.layoutNode\n }\n\n public updateFromLayout(): void {\n const layout = this.layoutNode.yogaNode.getComputedLayout()\n\n this._x = layout.left\n this._y = layout.top\n\n const newWidth = Math.max(layout.width, 1)\n const newHeight = Math.max(layout.height, 1)\n const sizeChanged = this.width !== newWidth || this.height !== newHeight\n\n this._widthValue = newWidth\n this._heightValue = newHeight\n\n if (sizeChanged) {\n this.onLayoutResize(newWidth, newHeight)\n }\n }\n\n protected onLayoutResize(width: number, height: number): void {\n if (this._visible) {\n this.handleFrameBufferResize(width, height)\n this.onResize(width, height)\n this.requestRender()\n }\n }\n\n protected handleFrameBufferResize(width: number, height: number): void {\n if (!this.buffered) return\n\n if (width <= 0 || height <= 0) {\n return\n }\n\n if (this.frameBuffer) {\n this.frameBuffer.resize(width, height)\n } else {\n this.createFrameBuffer()\n }\n }\n\n protected createFrameBuffer(): void {\n const w = this.width\n const h = this.height\n\n if (w <= 0 || h <= 0) {\n return\n }\n\n try {\n const widthMethod = this._ctx.widthMethod\n this.frameBuffer = OptimizedBuffer.create(w, h, widthMethod, { respectAlpha: true })\n } catch (error) {\n console.error(`Failed to create frame buffer for ${this.id}:`, error)\n this.frameBuffer = null\n }\n }\n\n protected onResize(width: number, height: number): void {\n this.emit(\"resize\")\n // Override in subclasses for additional resize logic\n }\n\n private replaceParent(obj: Renderable) {\n if (obj.parent) {\n obj.parent.remove(obj.id)\n }\n obj.parent = this\n }\n\n public add(obj: Renderable | VNode<any, any[]>, index?: number): number {\n if (this.childHost !== this) {\n return this.childHost.add(obj, index)\n }\n\n obj = ensureRenderable(this._ctx, obj)\n\n if (this.renderableMap.has(obj.id)) {\n console.warn(`A renderable with id ${obj.id} already exists in ${this.id}, removing it`)\n this.remove(obj.id)\n }\n\n this.replaceParent(obj)\n\n const childLayoutNode = obj.getLayoutNode()\n let insertedIndex: number\n if (index !== undefined) {\n this.renderableArray.splice(index, 0, obj)\n insertedIndex = this.layoutNode.insertChild(childLayoutNode, index)\n } else {\n this.renderableArray.push(obj)\n insertedIndex = this.layoutNode.addChild(childLayoutNode)\n }\n this.needsZIndexSort = true\n this.renderableMap.set(obj.id, obj)\n\n if (obj._liveCount > 0) {\n this.propagateLiveCount(obj._liveCount)\n }\n\n this.requestRender()\n\n return insertedIndex\n }\n\n insertBefore(obj: Renderable | VNode<any, any[]>, anchor?: Renderable): number {\n if (this.childHost !== this) {\n const idx = this.childHost.insertBefore(obj, anchor)\n return idx\n }\n\n obj = ensureRenderable(this._ctx, obj)\n\n if (!anchor) {\n return this.add(obj)\n }\n\n if (!this.renderableMap.has(anchor.id)) {\n throw new Error(\"Anchor does not exist\")\n }\n\n const anchorIndex = this.renderableArray.indexOf(anchor)\n if (anchorIndex === -1) {\n throw new Error(\"Anchor does not exist\")\n }\n\n return this.add(obj, anchorIndex)\n }\n\n // TODO: that naming is meh\n public getRenderable(id: string): Renderable | undefined {\n if (this.childHost !== this) return this.childHost.getRenderable(id)\n return this.renderableMap.get(id)\n }\n\n public remove(id: string): void {\n if (this.childHost !== this) {\n this.childHost.remove(id)\n return\n }\n if (!id) {\n return\n }\n if (this.renderableMap.has(id)) {\n const obj = this.renderableMap.get(id)\n if (obj) {\n if (obj._liveCount > 0) {\n this.propagateLiveCount(-obj._liveCount)\n }\n\n const childLayoutNode = obj.getLayoutNode()\n this.layoutNode.removeChild(childLayoutNode)\n this.requestRender()\n\n obj.onRemove()\n obj.parent = null\n }\n this.renderableMap.delete(id)\n\n const index = this.renderableArray.findIndex((obj) => obj.id === id)\n if (index !== -1) {\n this.renderableArray.splice(index, 1)\n }\n }\n }\n\n protected onRemove(): void {\n // Default implementation: do nothing\n // Override this method to provide custom removal logic\n }\n\n public getChildren(): Renderable[] {\n if (this.childHost !== this) return this.childHost.getChildren()\n return [...this.renderableArray]\n }\n\n public render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n\n this.beforeRender()\n this.updateFromLayout()\n\n let renderBuffer = buffer\n if (this.buffered && this.frameBuffer) {\n renderBuffer = this.frameBuffer\n }\n\n if (this.renderBefore) {\n this.renderBefore.call(this, renderBuffer, deltaTime)\n }\n\n this.renderSelf(renderBuffer, deltaTime)\n\n if (this.renderAfter) {\n this.renderAfter.call(this, renderBuffer, deltaTime)\n }\n\n this.markClean()\n this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num)\n this.ensureZIndexSorted()\n\n const shouldPushScissor = this._overflow !== \"visible\" && this.width > 0 && this.height > 0\n if (shouldPushScissor) {\n const scissorRect = this.getScissorRect()\n renderBuffer.pushScissorRect(scissorRect.x, scissorRect.y, scissorRect.width, scissorRect.height)\n }\n\n for (const child of this.renderableArray) {\n child.render(renderBuffer, deltaTime)\n }\n\n if (shouldPushScissor) {\n renderBuffer.popScissorRect()\n }\n\n if (this.buffered && this.frameBuffer) {\n buffer.drawFrameBuffer(this.x, this.y, this.frameBuffer)\n }\n }\n\n protected beforeRender(): void {\n // Default implementation: do nothing\n // Override this method to provide custom rendering\n }\n\n protected getScissorRect(): { x: number; y: number; width: number; height: number } {\n return {\n x: this.buffered ? 0 : this.x,\n y: this.buffered ? 0 : this.y,\n width: this.width,\n height: this.height,\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void {\n // Default implementation: do nothing\n // Override this method to provide custom rendering\n }\n\n public destroy(): void {\n if (this.parent) {\n this.parent.remove(this.id)\n }\n\n if (this.frameBuffer) {\n this.frameBuffer.destroy()\n this.frameBuffer = null\n }\n\n for (const child of this.renderableArray) {\n child.parent = null\n child.destroy()\n }\n\n this.renderableArray = []\n this.renderableMap.clear()\n Renderable.renderablesByNumber.delete(this.num)\n\n this.layoutNode.destroy()\n this.blur()\n this.removeAllListeners()\n\n this.destroySelf()\n }\n\n public destroyRecursively(): void {\n this.destroy()\n for (const child of this.renderableArray) {\n child.destroyRecursively()\n }\n }\n\n protected destroySelf(): void {\n // Default implementation: do nothing else\n // Override this method to provide custom cleanup\n }\n\n public processMouseEvent(event: MouseEvent): void {\n this._mouseListener?.call(this, event)\n this._mouseListeners[event.type]?.call(this, event)\n this.onMouseEvent(event)\n\n if (this.parent && !event.defaultPrevented) {\n this.parent.processMouseEvent(event)\n }\n }\n\n protected onMouseEvent(event: MouseEvent): void {\n // Default implementation: do nothing\n // Override this method to provide custom event handling\n }\n\n public set onMouse(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListener = handler\n else this._mouseListener = null\n }\n\n public set onMouseDown(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"down\"] = handler\n else delete this._mouseListeners[\"down\"]\n }\n\n public set onMouseUp(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"up\"] = handler\n else delete this._mouseListeners[\"up\"]\n }\n\n public set onMouseMove(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"move\"] = handler\n else delete this._mouseListeners[\"move\"]\n }\n\n public set onMouseDrag(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drag\"] = handler\n else delete this._mouseListeners[\"drag\"]\n }\n\n public set onMouseDragEnd(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drag-end\"] = handler\n else delete this._mouseListeners[\"drag-end\"]\n }\n\n public set onMouseDrop(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drop\"] = handler\n else delete this._mouseListeners[\"drop\"]\n }\n\n public set onMouseOver(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"over\"] = handler\n else delete this._mouseListeners[\"over\"]\n }\n\n public set onMouseOut(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"out\"] = handler\n else delete this._mouseListeners[\"out\"]\n }\n\n public set onMouseScroll(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"scroll\"] = handler\n else delete this._mouseListeners[\"scroll\"]\n }\n\n public set onKeyDown(handler: ((key: ParsedKey) => void) | undefined) {\n if (handler) this._keyListeners[\"down\"] = handler\n else delete this._keyListeners[\"down\"]\n }\n public get onKeyDown(): ((key: ParsedKey) => void) | undefined {\n return this._keyListeners[\"down\"]\n }\n\n private applyEventOptions(options: RenderableOptions<Renderable>): void {\n this.onMouse = options.onMouse\n this.onMouseDown = options.onMouseDown\n this.onMouseUp = options.onMouseUp\n this.onMouseMove = options.onMouseMove\n this.onMouseDrag = options.onMouseDrag\n this.onMouseDragEnd = options.onMouseDragEnd\n this.onMouseDrop = options.onMouseDrop\n this.onMouseOver = options.onMouseOver\n this.onMouseOut = options.onMouseOut\n this.onMouseScroll = options.onMouseScroll\n this.onKeyDown = options.onKeyDown\n }\n}\n\nexport class RootRenderable extends Renderable {\n private yogaConfig: Config\n\n constructor(ctx: RenderContext) {\n super(ctx, { id: \"__root__\", zIndex: 0, visible: true, width: ctx.width, height: ctx.height, enableLayout: true })\n\n this.yogaConfig = Yoga.Config.create()\n this.yogaConfig.setUseWebDefaults(false)\n this.yogaConfig.setPointScaleFactor(1)\n\n if (this.layoutNode) {\n this.layoutNode.destroy()\n }\n\n this.layoutNode = createTrackedNode({}, this.yogaConfig)\n this.layoutNode.setWidth(ctx.width)\n this.layoutNode.setHeight(ctx.height)\n this.layoutNode.yogaNode.setFlexDirection(FlexDirection.Column)\n\n this.calculateLayout()\n }\n\n protected propagateLiveCount(delta: number): void {\n const oldCount = this._liveCount\n this._liveCount += delta\n\n if (oldCount === 0 && this._liveCount > 0) {\n this._ctx.requestLive()\n } else if (oldCount > 0 && this._liveCount === 0) {\n this._ctx.dropLive()\n }\n }\n\n public calculateLayout(): void {\n this.layoutNode.yogaNode.calculateLayout(this.width, this.height, Direction.LTR)\n this.emit(LayoutEvents.LAYOUT_CHANGED)\n }\n\n public resize(width: number, height: number): void {\n this.width = width\n this.height = height\n\n this.emit(LayoutEvents.RESIZED, { width, height })\n }\n\n protected beforeRender(): void {\n if (this.layoutNode.yogaNode.isDirty()) {\n this.calculateLayout()\n }\n }\n\n protected destroySelf(): void {\n if (this.layoutNode) {\n this.layoutNode.destroy()\n }\n\n try {\n this.yogaConfig.free()\n } catch (error) {\n // Config might already be freed\n }\n\n super.destroySelf()\n }\n}\n",
27
+ "import { Renderable, type RenderableOptions } from \"../../Renderable\"\nimport type { RenderContext } from \"../../types\"\n\nexport type VChild = VNode | Renderable | VChild[] | null | undefined | false\n\nexport interface PendingCall {\n method: string\n args: any[]\n isProperty?: boolean\n}\n\nexport interface VNode<P = any, C = VChild[]> {\n __isVNode: true\n type: Construct<P>\n props?: P\n children?: C\n __delegateMap?: Record<string, string>\n __pendingCalls?: PendingCall[]\n}\n\n// Type that represents a VNode with Renderable methods available for chaining\nexport type ProxiedVNode<TCtor extends RenderableConstructor<any>> = VNode<\n TCtor extends RenderableConstructor<infer P> ? P : any\n> & {\n [K in keyof InstanceType<TCtor>]: InstanceType<TCtor>[K] extends (...args: infer Args) => any\n ? (...args: Args) => ProxiedVNode<TCtor>\n : InstanceType<TCtor>[K]\n}\n\nexport interface RenderableConstructor<P extends RenderableOptions<any> = RenderableOptions<any>> {\n new (ctx: RenderContext, options: P): Renderable\n}\n\nexport type FunctionalConstruct<P = any> = (props: P, children?: VChild[]) => VNode\n\nexport type Construct<P = any> =\n | RenderableConstructor<P extends RenderableOptions<any> ? P : never>\n | FunctionalConstruct<P>\n\nfunction isRenderableConstructor<P extends RenderableOptions<any> = RenderableOptions<any>>(\n value: any,\n): value is RenderableConstructor<P> {\n return typeof value === \"function\" && value.prototype && Renderable.prototype.isPrototypeOf(value.prototype)\n}\n\nfunction flattenChildren(children: VChild[]): VChild[] {\n const result: VChild[] = []\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...flattenChildren(child))\n } else if (child !== null && child !== undefined && child !== false) {\n result.push(child)\n }\n }\n return result\n}\n\n// Overloads for proper typing\nexport function h<TCtor extends RenderableConstructor<any>>(\n type: TCtor,\n props?: TCtor extends RenderableConstructor<infer P> ? P : never,\n ...children: VChild[]\n): ProxiedVNode<TCtor>\nexport function h<P>(type: FunctionalConstruct<P>, props?: P, ...children: VChild[]): VNode<P>\nexport function h<P>(type: Construct<P>, props?: P, ...children: VChild[]): VNode<P> | ProxiedVNode<any>\nexport function h<P>(type: Construct<P>, props?: P, ...children: VChild[]): any {\n if (typeof type !== \"function\") {\n throw new TypeError(\"h() received an invalid vnode type\")\n }\n\n const vnode: VNode<P> = {\n __isVNode: true,\n type,\n props,\n children: flattenChildren(children),\n __pendingCalls: [],\n }\n\n if (isRenderableConstructor(type)) {\n return new Proxy(vnode, {\n get(target, prop, receiver) {\n // Return VNode properties directly\n if (prop in target) {\n return Reflect.get(target, prop, receiver)\n }\n\n if (typeof prop === \"string\") {\n const prototype = type.prototype\n const hasMethod =\n prototype &&\n (typeof prototype[prop] === \"function\" ||\n Object.getOwnPropertyDescriptor(prototype, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(prototype), prop))\n\n if (hasMethod) {\n return (...args: any[]) => {\n target.__pendingCalls = target.__pendingCalls || []\n target.__pendingCalls.push({ method: prop, args })\n return target\n }\n }\n }\n\n return Reflect.get(target, prop, receiver)\n },\n\n set(target, prop, value, receiver) {\n if (typeof prop === \"string\" && isRenderableConstructor(type)) {\n const prototype = type.prototype\n const descriptor =\n Object.getOwnPropertyDescriptor(prototype, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(prototype), prop)\n\n if (descriptor && descriptor.set) {\n target.__pendingCalls = target.__pendingCalls || []\n target.__pendingCalls.push({ method: prop, args: [value], isProperty: true })\n return true\n }\n }\n\n return Reflect.set(target, prop, value, receiver)\n },\n })\n }\n\n return vnode\n}\n\nexport function isVNode(node: any): node is VNode {\n return node && node.__isVNode\n}\n\nexport function ensureRenderable(ctx: RenderContext, node: Renderable | VNode<any, any[]>): Renderable {\n if (node instanceof Renderable) return node\n return instantiate(ctx, node)\n}\n\nexport function wrapWithDelegates<T extends InstanceType<RenderableConstructor>>(\n instance: T,\n delegateMap: Record<string, string> | undefined,\n): T {\n if (!delegateMap || Object.keys(delegateMap).length === 0) return instance\n\n const descendantCache = new Map<string, Renderable | undefined>()\n\n const getDescendant = (id: string): Renderable | undefined => {\n if (descendantCache.has(id)) {\n const cached = descendantCache.get(id)\n if (cached !== undefined) {\n return cached\n }\n }\n const descendant = (instance as Renderable).findDescendantById(id)\n if (descendant) {\n descendantCache.set(id, descendant)\n }\n return descendant\n }\n\n const proxy = new Proxy(instance as any, {\n get(target, prop, receiver) {\n if (typeof prop === \"string\" && delegateMap[prop]) {\n const host = getDescendant(delegateMap[prop])\n if (host) {\n const value = (host as any)[prop]\n if (typeof value === \"function\") {\n return value.bind(host)\n }\n return value\n }\n }\n return Reflect.get(target, prop, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === \"string\" && delegateMap[prop]) {\n const host = getDescendant(delegateMap[prop])\n if (host) {\n return Reflect.set(host as any, prop, value)\n }\n }\n return Reflect.set(target, prop, value, receiver)\n },\n })\n return proxy\n}\n\nexport type InstantiateFn<NodeType extends VNode | Renderable> = Renderable & { __node?: NodeType }\n\nexport function instantiate<NodeType extends VNode | Renderable>(\n ctx: RenderContext,\n node: NodeType,\n): InstantiateFn<NodeType> {\n if (node instanceof Renderable) return node\n\n if (!node || typeof node !== \"object\") {\n throw new TypeError(\"mount() received an invalid vnode\")\n }\n\n const vnode = node as VNode\n const { type, props } = vnode\n const children = flattenChildren(vnode.children || [])\n const delegateMap = (vnode as any).__delegateMap as Record<string, string> | undefined\n\n if (isRenderableConstructor(type)) {\n const instance = new type(ctx, (props || {}) as any)\n\n for (const child of children) {\n if (child instanceof Renderable) {\n instance.add(child)\n } else {\n const mounted = instantiate(ctx, child as NodeType)\n instance.add(mounted)\n }\n }\n\n const delegatedInstance = wrapWithDelegates(instance, delegateMap)\n\n const pendingCalls = (vnode as any).__pendingCalls as PendingCall[] | undefined\n if (pendingCalls) {\n for (const call of pendingCalls) {\n if (call.isProperty) {\n ;(delegatedInstance as any)[call.method] = call.args[0]\n } else {\n ;(delegatedInstance as any)[call.method].apply(delegatedInstance, call.args)\n }\n }\n }\n\n return delegatedInstance\n }\n\n // Functional construct: resolve to a concrete vnode and mount it\n const resolved = (type as FunctionalConstruct)(props || ({} as any), children)\n const inst = instantiate(ctx, resolved)\n\n return wrapWithDelegates(inst, delegateMap) as InstantiateFn<NodeType>\n}\n\nexport type DelegateMap<T> = Partial<Record<keyof T, string>>\n\nexport type ValidateShape<Given, AllowedKeys> = {\n [K in keyof Given]: K extends keyof AllowedKeys ? NonNullable<Given[K]> : never\n}\n\ntype InferNode<T> = T extends InstantiateFn<infer U> ? U : never\n\nexport function delegate<\n Factory extends InstantiateFn<any>,\n InnerNode extends InferNode<Factory>,\n TargetMap extends Record<keyof InnerNode, string>,\n const Mapping extends Partial<TargetMap>,\n>(mapping: ValidateShape<Mapping, TargetMap>, vnode: Factory): Renderable\n\nexport function delegate<\n ConstructorType extends RenderableConstructor<any>,\n TargetMap extends Record<keyof InstanceType<ConstructorType>, string>,\n const Mapping extends Partial<TargetMap>,\n>(mapping: ValidateShape<Mapping, TargetMap>, vnode: ProxiedVNode<ConstructorType>): ProxiedVNode<ConstructorType>\n\nexport function delegate<\n ConstructorType extends RenderableConstructor<any>,\n const Mapping extends DelegateMap<InstanceType<ConstructorType>>,\n>(mapping: ValidateShape<Mapping, string>, vnode: VNode & { type: ConstructorType }): VNode\n\n/**\n * Controlled delegation that routes selected properties/methods\n * to a descendant renderable identified by ID.\n */\nexport function delegate<NodeType extends VNode | Renderable | InstantiateFn<any>>(\n mapping: Record<string, string>,\n vnode: NodeType,\n): VNode | Renderable {\n if (vnode instanceof Renderable) {\n return wrapWithDelegates(vnode, mapping)\n }\n if (!vnode || typeof vnode !== \"object\") return vnode\n vnode.__delegateMap = { ...(vnode.__delegateMap || {}), ...mapping }\n return vnode\n}\n",
28
+ "import type { CliRenderer, ColorInput } from \".\"\nimport { EventEmitter } from \"events\"\nimport { OptimizedBuffer } from \"./buffer\"\nimport { parseColor, RGBA } from \"./lib/RGBA\"\nimport { Console } from \"node:console\"\nimport util from \"node:util\"\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { Capture, CapturedWritableStream } from \"./lib/output.capture\"\nimport { singleton } from \"./singleton\"\n\ninterface CallerInfo {\n functionName: string\n fullPath: string\n fileName: string\n lineNumber: number\n columnNumber: number\n}\n\nfunction getCallerInfo(): CallerInfo | null {\n const err = new Error()\n const stackLines = err.stack?.split(\"\\n\").slice(5) || []\n if (!stackLines.length) return null\n\n const callerLine = stackLines[0].trim()\n\n const regex = /at\\s+(?:([\\w$.<>]+)\\s+\\()?((?:\\/|[A-Za-z]:\\\\)[^:]+):(\\d+):(\\d+)\\)?/\n const match = callerLine.match(regex)\n\n if (!match) return null\n\n // Extract details from the match.\n const functionName = match[1] || \"<anonymous>\"\n const fullPath = match[2]\n const fileName = fullPath.split(/[\\\\/]/).pop() || \"<unknown>\"\n const lineNumber = parseInt(match[3], 10) || 0\n const columnNumber = parseInt(match[4], 10) || 0\n\n return { functionName, fullPath, fileName, lineNumber, columnNumber }\n}\n\nenum LogLevel {\n LOG = \"LOG\",\n INFO = \"INFO\",\n WARN = \"WARN\",\n ERROR = \"ERROR\",\n DEBUG = \"DEBUG\",\n}\n\nexport const { capture } = singleton(\"ConsoleCapture\", () => {\n const capture = new Capture()\n const mockStdout = new CapturedWritableStream(\"stdout\", capture)\n const mockStderr = new CapturedWritableStream(\"stderr\", capture)\n\n if (process.env.SKIP_CONSOLE_CACHE !== \"true\") {\n global.console = new Console({\n stdout: mockStdout,\n stderr: mockStderr,\n colorMode: true,\n inspectOptions: {\n compact: false,\n breakLength: 80,\n depth: 2,\n },\n })\n }\n\n return { capture }\n})\n\nclass TerminalConsoleCache extends EventEmitter {\n private originalConsole: {\n log: typeof console.log\n info: typeof console.info\n warn: typeof console.warn\n error: typeof console.error\n debug: typeof console.debug\n }\n private _cachedLogs: [Date, LogLevel, any[], CallerInfo | null][] = []\n private readonly MAX_CACHE_SIZE = 1000\n private _collectCallerInfo: boolean = false\n private _cachingEnabled: boolean = true\n\n get cachedLogs(): [Date, LogLevel, any[], CallerInfo | null][] {\n return this._cachedLogs\n }\n\n constructor() {\n super()\n\n this.originalConsole = {\n log: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error,\n debug: console.debug,\n }\n\n if (process.env.SKIP_CONSOLE_CACHE !== \"true\") {\n this.activate()\n }\n }\n\n public activate(): void {\n this.overrideConsoleMethods()\n }\n\n public setCollectCallerInfo(enabled: boolean): void {\n this._collectCallerInfo = enabled\n }\n\n public clearConsole(): void {\n this._cachedLogs = []\n }\n\n public setCachingEnabled(enabled: boolean): void {\n this._cachingEnabled = enabled\n }\n\n public deactivate(): void {\n console.log = this.originalConsole.log\n console.info = this.originalConsole.info\n console.warn = this.originalConsole.warn\n console.error = this.originalConsole.error\n console.debug = this.originalConsole.debug\n }\n\n private overrideConsoleMethods(): void {\n console.log = (...args: any[]) => {\n this.appendToConsole(LogLevel.LOG, ...args)\n }\n\n console.info = (...args: any[]) => {\n this.appendToConsole(LogLevel.INFO, ...args)\n }\n\n console.warn = (...args: any[]) => {\n this.appendToConsole(LogLevel.WARN, ...args)\n }\n\n console.error = (...args: any[]) => {\n this.appendToConsole(LogLevel.ERROR, ...args)\n }\n\n console.debug = (...args: any[]) => {\n this.appendToConsole(LogLevel.DEBUG, ...args)\n }\n }\n\n public addLogEntry(level: LogLevel, ...args: any[]) {\n const callerInfo = this._collectCallerInfo ? getCallerInfo() : null\n const logEntry: [Date, LogLevel, any[], CallerInfo | null] = [new Date(), level, args, callerInfo]\n\n if (this._cachingEnabled) {\n if (this._cachedLogs.length >= this.MAX_CACHE_SIZE) {\n this._cachedLogs.shift()\n }\n this._cachedLogs.push(logEntry)\n }\n\n return logEntry\n }\n\n private appendToConsole(level: LogLevel, ...args: any[]): void {\n if (this._cachedLogs.length >= this.MAX_CACHE_SIZE) {\n this._cachedLogs.shift()\n }\n const entry = this.addLogEntry(level, ...args)\n this.emit(\"entry\", entry)\n }\n\n public destroy(): void {\n this.deactivate()\n }\n}\n\nconst terminalConsoleCache = singleton(\"TerminalConsoleCache\", () => {\n const terminalConsoleCache = new TerminalConsoleCache()\n process.on(\"exit\", () => {\n terminalConsoleCache.destroy()\n })\n return terminalConsoleCache\n})\n\nexport enum ConsolePosition {\n TOP = \"top\",\n BOTTOM = \"bottom\",\n LEFT = \"left\",\n RIGHT = \"right\",\n}\n\nexport interface ConsoleOptions {\n position?: ConsolePosition\n sizePercent?: number\n zIndex?: number\n colorInfo?: ColorInput\n colorWarn?: ColorInput\n colorError?: ColorInput\n colorDebug?: ColorInput\n colorDefault?: ColorInput\n backgroundColor?: ColorInput\n startInDebugMode?: boolean\n title?: string\n titleBarColor?: ColorInput\n titleBarTextColor?: ColorInput\n cursorColor?: ColorInput\n maxStoredLogs?: number\n maxDisplayLines?: number\n}\n\nconst DEFAULT_CONSOLE_OPTIONS: Required<ConsoleOptions> = {\n position: ConsolePosition.BOTTOM,\n sizePercent: 30,\n zIndex: Infinity,\n colorInfo: \"#00FFFF\", // Cyan\n colorWarn: \"#FFFF00\", // Yellow\n colorError: \"#FF0000\", // Red\n colorDebug: \"#808080\", // Gray\n colorDefault: \"#FFFFFF\", // White\n backgroundColor: RGBA.fromValues(0.1, 0.1, 0.1, 0.7),\n startInDebugMode: false,\n title: \"Console\",\n titleBarColor: RGBA.fromValues(0.05, 0.05, 0.05, 0.7),\n titleBarTextColor: \"#FFFFFF\",\n cursorColor: \"#00A0FF\",\n maxStoredLogs: 2000,\n maxDisplayLines: 3000,\n}\n\nconst INDENT_WIDTH = 2\n\ninterface DisplayLine {\n text: string\n level: LogLevel\n indent: boolean\n}\n\nexport class TerminalConsole extends EventEmitter {\n private isVisible: boolean = false\n private isFocused: boolean = false\n private renderer: CliRenderer\n private stdinHandler: (...args: any[]) => void\n private options: Required<ConsoleOptions>\n private _debugModeEnabled: boolean = false\n\n private frameBuffer: OptimizedBuffer | null = null\n private consoleX: number = 0\n private consoleY: number = 0\n private consoleWidth: number = 0\n private consoleHeight: number = 0\n private scrollTopIndex: number = 0\n private isScrolledToBottom: boolean = true\n private currentLineIndex: number = 0\n private _displayLines: DisplayLine[] = []\n private _allLogEntries: [Date, LogLevel, any[], CallerInfo | null][] = []\n private _needsFrameBufferUpdate: boolean = false\n\n private markNeedsRerender(): void {\n this._needsFrameBufferUpdate = true\n this.renderer.requestRender()\n }\n\n private _rgbaInfo: RGBA\n private _rgbaWarn: RGBA\n private _rgbaError: RGBA\n private _rgbaDebug: RGBA\n private _rgbaDefault: RGBA\n private backgroundColor: RGBA\n private _rgbaTitleBar: RGBA\n private _rgbaTitleBarText: RGBA\n private _title: string\n private _rgbaCursor: RGBA\n\n private _positions: ConsolePosition[] = [\n ConsolePosition.TOP,\n ConsolePosition.RIGHT,\n ConsolePosition.BOTTOM,\n ConsolePosition.LEFT,\n ]\n\n constructor(renderer: CliRenderer, options: ConsoleOptions = {}) {\n super()\n this.renderer = renderer\n this.options = { ...DEFAULT_CONSOLE_OPTIONS, ...options }\n this.stdinHandler = this.handleStdin.bind(this)\n this._debugModeEnabled = this.options.startInDebugMode\n terminalConsoleCache.setCollectCallerInfo(this._debugModeEnabled)\n\n this._rgbaInfo = parseColor(this.options.colorInfo)\n this._rgbaWarn = parseColor(this.options.colorWarn)\n this._rgbaError = parseColor(this.options.colorError)\n this._rgbaDebug = parseColor(this.options.colorDebug)\n this._rgbaDefault = parseColor(this.options.colorDefault)\n this.backgroundColor = parseColor(this.options.backgroundColor)\n this._rgbaTitleBar = parseColor(this.options.titleBarColor)\n this._rgbaTitleBarText = parseColor(this.options.titleBarTextColor || this.options.colorDefault)\n this._title = this.options.title\n this._rgbaCursor = parseColor(this.options.cursorColor)\n\n this._updateConsoleDimensions()\n this._scrollToBottom(true)\n\n terminalConsoleCache.on(\"entry\", (logEntry: [Date, LogLevel, any[], CallerInfo | null]) => {\n this._handleNewLog(logEntry)\n })\n\n if (process.env.SHOW_CONSOLE === \"true\") {\n this.show()\n }\n }\n\n public activate(): void {\n terminalConsoleCache.activate()\n }\n\n public deactivate(): void {\n terminalConsoleCache.deactivate()\n }\n\n // Handles a single new log entry *while the console is visible*\n private _handleNewLog(logEntry: [Date, LogLevel, any[], CallerInfo | null]): void {\n if (!this.isVisible) return\n\n this._allLogEntries.push(logEntry)\n\n if (this._allLogEntries.length > this.options.maxStoredLogs) {\n this._allLogEntries.splice(0, this._allLogEntries.length - this.options.maxStoredLogs)\n }\n\n const newDisplayLines = this._processLogEntry(logEntry)\n this._displayLines.push(...newDisplayLines)\n\n if (this._displayLines.length > this.options.maxDisplayLines) {\n this._displayLines.splice(0, this._displayLines.length - this.options.maxDisplayLines)\n const linesRemoved = this._displayLines.length - this.options.maxDisplayLines\n this.scrollTopIndex = Math.max(0, this.scrollTopIndex - linesRemoved)\n }\n\n if (this.isScrolledToBottom) {\n this._scrollToBottom()\n }\n this.markNeedsRerender()\n }\n\n private _updateConsoleDimensions(): void {\n const termWidth = this.renderer.terminalWidth\n const termHeight = this.renderer.terminalHeight\n const sizePercent = this.options.sizePercent / 100\n\n switch (this.options.position) {\n case ConsolePosition.TOP:\n this.consoleX = 0\n this.consoleY = 0\n this.consoleWidth = termWidth\n this.consoleHeight = Math.max(1, Math.floor(termHeight * sizePercent))\n break\n case ConsolePosition.BOTTOM:\n this.consoleHeight = Math.max(1, Math.floor(termHeight * sizePercent))\n this.consoleWidth = termWidth\n this.consoleX = 0\n this.consoleY = termHeight - this.consoleHeight\n break\n case ConsolePosition.LEFT:\n this.consoleWidth = Math.max(1, Math.floor(termWidth * sizePercent))\n this.consoleHeight = termHeight\n this.consoleX = 0\n this.consoleY = 0\n break\n case ConsolePosition.RIGHT:\n this.consoleWidth = Math.max(1, Math.floor(termWidth * sizePercent))\n this.consoleHeight = termHeight\n this.consoleY = 0\n this.consoleX = termWidth - this.consoleWidth\n break\n }\n this.currentLineIndex = Math.max(0, Math.min(this.currentLineIndex, this.consoleHeight - 1))\n }\n\n private handleStdin(data: Buffer): void {\n const key = data.toString()\n\n let needsRedraw = false\n const displayLineCount = this._displayLines.length\n const logAreaHeight = Math.max(1, this.consoleHeight - 1)\n const maxScrollTop = Math.max(0, displayLineCount - logAreaHeight)\n const currentPositionIndex = this._positions.indexOf(this.options.position)\n\n switch (key) {\n case \"\\u001b\": // ESC key\n this.blur()\n break\n case \"\\u001b[1;2A\": // Shift+UpArrow - Scroll to top\n if (this.scrollTopIndex > 0 || this.currentLineIndex > 0) {\n this.scrollTopIndex = 0\n this.currentLineIndex = 0\n this.isScrolledToBottom = this._displayLines.length <= Math.max(1, this.consoleHeight - 1)\n needsRedraw = true\n }\n break\n case \"\\u001b[1;2B\": // Shift+DownArrow - Scroll to bottom\n const logAreaHeightForScroll = Math.max(1, this.consoleHeight - 1)\n const maxScrollPossible = Math.max(0, this._displayLines.length - logAreaHeightForScroll)\n if (this.scrollTopIndex < maxScrollPossible || !this.isScrolledToBottom) {\n this._scrollToBottom(true)\n needsRedraw = true\n }\n break\n case \"\\u001b[A\": // Up arrow\n if (this.currentLineIndex > 0) {\n this.currentLineIndex--\n needsRedraw = true\n } else if (this.scrollTopIndex > 0) {\n this.scrollTopIndex--\n this.isScrolledToBottom = false\n needsRedraw = true\n }\n break\n case \"\\u001b[B\": // Down arrow\n const canCursorMoveDown =\n this.currentLineIndex < logAreaHeight - 1 &&\n this.scrollTopIndex + this.currentLineIndex < displayLineCount - 1\n\n if (canCursorMoveDown) {\n this.currentLineIndex++\n needsRedraw = true\n } else if (this.scrollTopIndex < maxScrollTop) {\n this.scrollTopIndex++\n this.isScrolledToBottom = this.scrollTopIndex === maxScrollTop\n needsRedraw = true\n }\n break\n case \"\\u0010\": // Ctrl+p (Previous position)\n const prevIndex = (currentPositionIndex - 1 + this._positions.length) % this._positions.length\n this.options.position = this._positions[prevIndex]\n this.resize(this.renderer.terminalWidth, this.renderer.terminalHeight)\n break\n case \"\\u000f\": // Ctrl+o (Next/Other position)\n const nextIndex = (currentPositionIndex + 1) % this._positions.length\n this.options.position = this._positions[nextIndex]\n this.resize(this.renderer.terminalWidth, this.renderer.terminalHeight)\n break\n case \"+\":\n this.options.sizePercent = Math.min(100, this.options.sizePercent + 5)\n this.resize(this.renderer.terminalWidth, this.renderer.terminalHeight)\n break\n case \"-\":\n this.options.sizePercent = Math.max(10, this.options.sizePercent - 5)\n this.resize(this.renderer.terminalWidth, this.renderer.terminalHeight)\n break\n case \"\\u0013\": // Ctrl+s (Save logs)\n this.saveLogsToFile()\n break\n }\n\n if (needsRedraw) {\n this.markNeedsRerender()\n }\n }\n\n private attachStdin(): void {\n if (this.isFocused) return\n process.stdin.on(\"data\", this.stdinHandler)\n this.isFocused = true\n }\n\n private detachStdin(): void {\n if (!this.isFocused) return\n process.stdin.off(\"data\", this.stdinHandler)\n this.isFocused = false\n }\n\n private formatTimestamp(date: Date): string {\n return new Intl.DateTimeFormat(\"en-US\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n }).format(date)\n }\n\n private formatArguments(args: any[]): string {\n return args\n .map((arg) => {\n if (arg instanceof Error) {\n const errorProps = arg\n return `Error: ${errorProps.message}\\n` + (errorProps.stack ? `${errorProps.stack}\\n` : \"\")\n }\n if (typeof arg === \"object\" && arg !== null) {\n try {\n return util.inspect(arg, { depth: 2 })\n } catch (e) {\n return String(arg)\n }\n }\n try {\n return util.inspect(arg, { depth: 2 })\n } catch (e) {\n return String(arg)\n }\n })\n .join(\" \")\n }\n\n public resize(width: number, height: number): void {\n this._updateConsoleDimensions()\n\n if (this.frameBuffer) {\n this.frameBuffer.resize(this.consoleWidth, this.consoleHeight)\n\n const displayLineCount = this._displayLines.length\n const logAreaHeight = Math.max(1, this.consoleHeight - 1)\n const maxScrollTop = Math.max(0, displayLineCount - logAreaHeight)\n this.scrollTopIndex = Math.min(this.scrollTopIndex, maxScrollTop)\n this.isScrolledToBottom = this.scrollTopIndex === maxScrollTop\n const visibleLineCount = Math.min(logAreaHeight, displayLineCount - this.scrollTopIndex)\n this.currentLineIndex = Math.max(0, Math.min(this.currentLineIndex, visibleLineCount - 1))\n\n if (this.isVisible) {\n this.markNeedsRerender()\n }\n }\n }\n\n public clear(): void {\n terminalConsoleCache.clearConsole()\n this._allLogEntries = []\n this._displayLines = []\n this.markNeedsRerender()\n }\n\n public toggle(): void {\n if (this.isVisible) {\n if (this.isFocused) {\n this.hide()\n } else {\n this.focus()\n }\n } else {\n this.show()\n }\n if (!this.renderer.isRunning) {\n this.renderer.requestRender()\n }\n }\n\n public focus(): void {\n this.attachStdin()\n this._scrollToBottom(true)\n this.markNeedsRerender()\n }\n\n public blur(): void {\n this.detachStdin()\n this.markNeedsRerender()\n }\n\n public show(): void {\n if (!this.isVisible) {\n this.isVisible = true\n this._processCachedLogs()\n terminalConsoleCache.setCachingEnabled(false)\n\n if (!this.frameBuffer) {\n this.frameBuffer = OptimizedBuffer.create(this.consoleWidth, this.consoleHeight, this.renderer.widthMethod, {\n respectAlpha: this.backgroundColor.a < 1,\n id: \"console framebuffer\",\n })\n }\n const logCount = terminalConsoleCache.cachedLogs.length\n const visibleLogLines = Math.min(this.consoleHeight, logCount)\n this.currentLineIndex = Math.max(0, visibleLogLines - 1)\n this.scrollTopIndex = 0\n this._scrollToBottom(true)\n\n this.focus()\n this.markNeedsRerender()\n }\n }\n\n public hide(): void {\n if (this.isVisible) {\n this.isVisible = false\n this.blur()\n terminalConsoleCache.setCachingEnabled(true)\n }\n }\n\n public getCachedLogs(): string {\n return terminalConsoleCache.cachedLogs\n .map((logEntry) => logEntry[0].toISOString() + \" \" + logEntry.slice(1).join(\" \"))\n .join(\"\\n\")\n }\n\n private updateFrameBuffer(): void {\n if (!this.frameBuffer) return\n\n this.frameBuffer.clear(this.backgroundColor)\n\n const displayLines = this._displayLines\n const displayLineCount = displayLines.length\n const logAreaHeight = Math.max(1, this.consoleHeight - 1)\n\n // --- Draw Title Bar ---\n this.frameBuffer.fillRect(0, 0, this.consoleWidth, 1, this._rgbaTitleBar)\n const dynamicTitle = `${this._title}${this.isFocused ? \" (Focused)\" : \"\"}`\n const titleX = Math.max(0, Math.floor((this.consoleWidth - dynamicTitle.length) / 2))\n this.frameBuffer.drawText(dynamicTitle, titleX, 0, this._rgbaTitleBarText, this._rgbaTitleBar)\n\n const startIndex = this.scrollTopIndex\n const endIndex = Math.min(startIndex + logAreaHeight, displayLineCount)\n const visibleDisplayLines = displayLines.slice(startIndex, endIndex)\n\n let lineY = 1\n for (const displayLine of visibleDisplayLines) {\n if (lineY >= this.consoleHeight) break\n\n let levelColor = this._rgbaDefault\n switch (displayLine.level) {\n case LogLevel.INFO:\n levelColor = this._rgbaInfo\n break\n case LogLevel.WARN:\n levelColor = this._rgbaWarn\n break\n case LogLevel.ERROR:\n levelColor = this._rgbaError\n break\n case LogLevel.DEBUG:\n levelColor = this._rgbaDebug\n break\n }\n\n const linePrefix = displayLine.indent ? \" \".repeat(INDENT_WIDTH) : \"\"\n const textToDraw = displayLine.text\n const textAvailableWidth = this.consoleWidth - 1 - (displayLine.indent ? INDENT_WIDTH : 0)\n const showCursor = this.isFocused && lineY - 1 === this.currentLineIndex\n\n if (showCursor) {\n this.frameBuffer.drawText(\">\", 0, lineY, this._rgbaCursor, this.backgroundColor)\n } else {\n this.frameBuffer.drawText(\" \", 0, lineY, this._rgbaDefault, this.backgroundColor)\n }\n\n this.frameBuffer.drawText(`${linePrefix}${textToDraw.substring(0, textAvailableWidth)}`, 1, lineY, levelColor)\n\n lineY++\n }\n }\n\n public renderToBuffer(buffer: OptimizedBuffer): void {\n if (!this.isVisible || !this.frameBuffer) return\n\n if (this._needsFrameBufferUpdate) {\n this.updateFrameBuffer()\n this._needsFrameBufferUpdate = false\n }\n\n buffer.drawFrameBuffer(this.consoleX, this.consoleY, this.frameBuffer)\n }\n\n public setDebugMode(enabled: boolean): void {\n this._debugModeEnabled = enabled\n terminalConsoleCache.setCollectCallerInfo(enabled)\n if (this.isVisible) {\n this.markNeedsRerender()\n }\n }\n\n public toggleDebugMode(): void {\n this.setDebugMode(!this._debugModeEnabled)\n }\n\n private _scrollToBottom(forceCursorToLastLine: boolean = false): void {\n const displayLineCount = this._displayLines.length\n const logAreaHeight = Math.max(1, this.consoleHeight - 1)\n const maxScrollTop = Math.max(0, displayLineCount - logAreaHeight)\n this.scrollTopIndex = maxScrollTop\n this.isScrolledToBottom = true\n\n const visibleLineCount = Math.min(logAreaHeight, displayLineCount - this.scrollTopIndex)\n if (forceCursorToLastLine || this.currentLineIndex >= visibleLineCount) {\n this.currentLineIndex = Math.max(0, visibleLineCount - 1)\n }\n }\n\n private _processLogEntry(logEntry: [Date, LogLevel, any[], CallerInfo | null]): DisplayLine[] {\n const [date, level, args, callerInfo] = logEntry\n const displayLines: DisplayLine[] = []\n\n const timestamp = this.formatTimestamp(date)\n const callerSource = callerInfo ? `${callerInfo.fileName}:${callerInfo.lineNumber}` : \"unknown\"\n const prefix = `[${timestamp}] [${level}]` + (this._debugModeEnabled ? ` [${callerSource}]` : \"\") + \" \"\n\n const formattedArgs = this.formatArguments(args)\n const initialLines = formattedArgs.split(\"\\n\")\n\n for (let i = 0; i < initialLines.length; i++) {\n const lineText = initialLines[i]\n const isFirstLineOfEntry = i === 0\n const availableWidth = this.consoleWidth - 1 - (isFirstLineOfEntry ? 0 : INDENT_WIDTH)\n const linePrefix = isFirstLineOfEntry ? prefix : \" \".repeat(INDENT_WIDTH)\n const textToWrap = isFirstLineOfEntry ? linePrefix + lineText : lineText\n\n let currentPos = 0\n while (currentPos < textToWrap.length || (isFirstLineOfEntry && currentPos === 0 && textToWrap.length === 0)) {\n const segment = textToWrap.substring(currentPos, currentPos + availableWidth)\n const isFirstSegmentOfLine = currentPos === 0\n\n displayLines.push({\n text: isFirstSegmentOfLine && !isFirstLineOfEntry ? linePrefix + segment : segment,\n level: level,\n indent: !isFirstLineOfEntry || !isFirstSegmentOfLine,\n })\n\n currentPos += availableWidth\n if (isFirstLineOfEntry && currentPos === 0 && textToWrap.length === 0) break\n }\n }\n\n return displayLines\n }\n\n private _processCachedLogs(): void {\n const logsToProcess = [...terminalConsoleCache.cachedLogs]\n terminalConsoleCache.clearConsole()\n\n this._allLogEntries.push(...logsToProcess)\n\n if (this._allLogEntries.length > this.options.maxStoredLogs) {\n this._allLogEntries.splice(0, this._allLogEntries.length - this.options.maxStoredLogs)\n }\n\n for (const logEntry of logsToProcess) {\n const processed = this._processLogEntry(logEntry)\n this._displayLines.push(...processed)\n }\n\n if (this._displayLines.length > this.options.maxDisplayLines) {\n this._displayLines.splice(0, this._displayLines.length - this.options.maxDisplayLines)\n }\n }\n\n private saveLogsToFile(): void {\n try {\n const timestamp = Date.now()\n const filename = `_console_${timestamp}.log`\n const filepath = path.join(process.cwd(), filename)\n\n const allLogEntries = [...this._allLogEntries, ...terminalConsoleCache.cachedLogs]\n\n const logLines: string[] = []\n\n for (const [date, level, args, callerInfo] of allLogEntries) {\n const timestampStr = this.formatTimestamp(date)\n const callerSource = callerInfo ? `${callerInfo.fileName}:${callerInfo.lineNumber}` : \"unknown\"\n const prefix = `[${timestampStr}] [${level}]` + (this._debugModeEnabled ? ` [${callerSource}]` : \"\") + \" \"\n const formattedArgs = this.formatArguments(args)\n logLines.push(prefix + formattedArgs)\n }\n\n const content = logLines.join(\"\\n\")\n fs.writeFileSync(filepath, content, \"utf8\")\n\n console.info(`Console logs saved to: ${filename}`)\n } catch (error) {\n console.error(`Failed to save console logs:`, error)\n }\n }\n}\n",
29
29
  "import { Writable } from \"stream\"\nimport { EventEmitter } from \"events\"\n\nexport type CapturedOutput = {\n stream: \"stdout\" | \"stderr\"\n output: string\n}\n\nexport class Capture extends EventEmitter {\n // TODO: Cache could rather be a buffer to avoid join()?\n private output: CapturedOutput[] = []\n\n constructor() {\n super()\n }\n\n get size(): number {\n return this.output.length\n }\n\n write(stream: \"stdout\" | \"stderr\", data: string): void {\n this.output.push({ stream, output: data })\n this.emit(\"write\", stream, data)\n }\n\n claimOutput() {\n const output = this.output.map((o) => o.output).join(\"\")\n this.clear()\n return output\n }\n\n private clear(): void {\n this.output = []\n }\n}\n\nexport class CapturedWritableStream extends Writable {\n public isTTY: boolean = true\n public columns: number = process.stdout.columns || 80\n public rows: number = process.stdout.rows || 24\n\n constructor(\n private stream: \"stdout\" | \"stderr\",\n private capture: Capture,\n ) {\n super()\n }\n\n _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n const data = chunk.toString()\n this.capture.write(this.stream, data)\n callback()\n }\n\n getColorDepth(): number {\n return process.stdout.getColorDepth?.() || 8\n }\n}\n",
30
30
  "export const ANSI = {\n switchToAlternateScreen: \"\\x1b[?1049h\",\n switchToMainScreen: \"\\x1b[?1049l\",\n reset: \"\\x1b[0m\",\n hideCursor: \"\\x1b[?25l\",\n showCursor: \"\\x1b[?25h\",\n\n resetCursorColor: \"\\x1b]12;default\\x07\",\n saveCursorState: \"\\x1b[s\",\n restoreCursorState: \"\\x1b[u\",\n\n queryPixelSize: \"\\u001b[14t\",\n\n scrollDown: (lines: number) => `\\x1b[${lines}T`,\n scrollUp: (lines: number) => `\\x1b[${lines}S`,\n\n moveCursor: (row: number, col: number) => `\\x1b[${row};${col}H`,\n moveCursorAndClear: (row: number, col: number) => `\\x1b[${row};${col}H\\x1b[J`,\n clearFromCursor: \"\\x1b[J\",\n\n setRgbBackground: (r: number, g: number, b: number) => `\\x1b[48;2;${r};${g};${b}m`,\n resetBackground: \"\\x1b[49m\",\n\n enableMouseTracking: \"\\x1b[?1000h\",\n disableMouseTracking: \"\\x1b[?1000l\",\n enableButtonEventTracking: \"\\x1b[?1002h\",\n disableButtonEventTracking: \"\\x1b[?1002l\",\n enableAnyEventTracking: \"\\x1b[?1003h\",\n disableAnyEventTracking: \"\\x1b[?1003l\",\n enableSGRMouseMode: \"\\x1b[?1006h\",\n disableSGRMouseMode: \"\\x1b[?1006l\",\n\n makeRoomForRenderer: (height: number) => \"\\n\".repeat(height) + `\\x1b[${height}A`,\n clearRendererSpace: (height: number) => `\\x1b[${height}A\\x1b[1G\\x1b[J`,\n}\n",
31
- "import { ANSI } from \"./ansi\"\nimport { Renderable, RootRenderable } from \"./Renderable\"\nimport {\n type CursorStyle,\n DebugOverlayCorner,\n type RenderContext,\n type SelectionState,\n type WidthMethod,\n} from \"./types\"\nimport { RGBA, parseColor, type ColorInput } from \"./lib/RGBA\"\nimport type { Pointer } from \"bun:ffi\"\nimport { OptimizedBuffer } from \"./buffer\"\nimport { resolveRenderLib, type RenderLib } from \"./zig\"\nimport { TerminalConsole, type ConsoleOptions, capture } from \"./console\"\nimport { MouseParser, type MouseEventType, type RawMouseEvent, type ScrollInfo } from \"./lib/parse.mouse\"\nimport { Selection } from \"./lib/selection\"\nimport { EventEmitter } from \"events\"\nimport { singleton } from \"./singleton\"\n\nexport interface CliRendererConfig {\n stdin?: NodeJS.ReadStream\n stdout?: NodeJS.WriteStream\n exitOnCtrlC?: boolean\n debounceDelay?: number\n targetFps?: number\n memorySnapshotInterval?: number\n useThread?: boolean\n gatherStats?: boolean\n maxStatSamples?: number\n consoleOptions?: ConsoleOptions\n postProcessFns?: ((buffer: OptimizedBuffer, deltaTime: number) => void)[]\n enableMouseMovement?: boolean\n useMouse?: boolean\n useAlternateScreen?: boolean\n useConsole?: boolean\n experimental_splitHeight?: number\n}\n\nexport type PixelResolution = {\n width: number\n height: number\n}\n\nexport class MouseEvent {\n public readonly type: MouseEventType\n public readonly button: number\n public readonly x: number\n public readonly y: number\n public readonly source?: Renderable\n public readonly modifiers: {\n shift: boolean\n alt: boolean\n ctrl: boolean\n }\n public readonly scroll?: ScrollInfo\n public readonly target: Renderable | null\n private _defaultPrevented: boolean = false\n\n public get defaultPrevented(): boolean {\n return this._defaultPrevented\n }\n\n constructor(target: Renderable | null, attributes: RawMouseEvent & { source?: Renderable }) {\n this.target = target\n this.type = attributes.type\n this.button = attributes.button\n this.x = attributes.x\n this.y = attributes.y\n this.modifiers = attributes.modifiers\n this.scroll = attributes.scroll\n this.source = attributes.source\n }\n\n public preventDefault(): void {\n this._defaultPrevented = true\n }\n}\n\nexport enum MouseButton {\n LEFT = 0,\n MIDDLE = 1,\n RIGHT = 2,\n WHEEL_UP = 4,\n WHEEL_DOWN = 5,\n}\n\nsingleton(\"ProcessExitSignals\", () => {\n ;[\"SIGINT\", \"SIGTERM\", \"SIGQUIT\", \"SIGABRT\"].forEach((signal) => {\n process.on(signal, () => {\n process.exit()\n })\n })\n})\n\nexport async function createCliRenderer(config: CliRendererConfig = {}): Promise<CliRenderer> {\n if (process.argv.includes(\"--delay-start\")) {\n await new Promise((resolve) => setTimeout(resolve, 5000))\n }\n const stdin = config.stdin || process.stdin\n const stdout = config.stdout || process.stdout\n\n const width = stdout.columns || 80\n const height = stdout.rows || 24\n const renderHeight =\n config.experimental_splitHeight && config.experimental_splitHeight > 0 ? config.experimental_splitHeight : height\n\n const ziglib = resolveRenderLib()\n const rendererPtr = ziglib.createRenderer(width, renderHeight)\n if (!rendererPtr) {\n throw new Error(\"Failed to create renderer\")\n }\n if (config.useThread === undefined) {\n config.useThread = true\n }\n\n // Disable threading on linux because there currently is currently an issue\n // might be just a missing dependency for the build or something, but threads crash on linux\n if (process.platform === \"linux\") {\n config.useThread = false\n }\n ziglib.setUseThread(rendererPtr, config.useThread)\n\n const renderer = new CliRenderer(ziglib, rendererPtr, stdin, stdout, width, height, config)\n await renderer.setupTerminal()\n return renderer\n}\n\nexport enum CliRenderEvents {\n DEBUG_OVERLAY_TOGGLE = \"debugOverlay:toggle\",\n}\n\nenum RendererControlState {\n IDLE = \"idle\",\n AUTO_STARTED = \"auto_started\",\n EXPLICIT_STARTED = \"explicit_started\",\n EXPLICIT_PAUSED = \"explicit_paused\",\n EXPLICIT_STOPPED = \"explicit_stopped\",\n}\n\nexport class CliRenderer extends EventEmitter implements RenderContext {\n private static animationFrameId = 0\n private lib: RenderLib\n public rendererPtr: Pointer\n private stdin: NodeJS.ReadStream\n private stdout: NodeJS.WriteStream\n private exitOnCtrlC: boolean\n private isDestroyed: boolean = false\n public nextRenderBuffer: OptimizedBuffer\n public currentRenderBuffer: OptimizedBuffer\n private _isRunning: boolean = false\n private targetFps: number = 30\n private memorySnapshotInterval: number\n private memorySnapshotTimer: Timer | null = null\n private lastMemorySnapshot: { heapUsed: number; heapTotal: number; arrayBuffers: number } = {\n heapUsed: 0,\n heapTotal: 0,\n arrayBuffers: 0,\n }\n public readonly root: RootRenderable\n public width: number\n public height: number\n private _useThread: boolean = false\n private gatherStats: boolean = false\n private frameTimes: number[] = []\n private maxStatSamples: number = 300\n private postProcessFns: ((buffer: OptimizedBuffer, deltaTime: number) => void)[] = []\n private backgroundColor: RGBA = RGBA.fromHex(\"#000000\")\n private waitingForPixelResolution: boolean = false\n\n private rendering: boolean = false\n private renderingNative: boolean = false\n private renderTimeout: Timer | null = null\n private lastTime: number = 0\n private frameCount: number = 0\n private lastFpsTime: number = 0\n private currentFps: number = 0\n private targetFrameTime: number = 0\n private immediateRerenderRequested: boolean = false\n private updateScheduled: boolean = false\n\n private liveRequestCounter: number = 0\n private controlState: RendererControlState = RendererControlState.IDLE\n\n private frameCallbacks: ((deltaTime: number) => Promise<void>)[] = []\n private renderStats: {\n frameCount: number\n fps: number\n renderTime?: number\n frameCallbackTime: number\n } = {\n frameCount: 0,\n fps: 0,\n renderTime: 0,\n frameCallbackTime: 0,\n }\n public debugOverlay = {\n enabled: false,\n corner: DebugOverlayCorner.bottomRight,\n }\n\n private _console: TerminalConsole\n private _resolution: PixelResolution | null = null\n\n private animationRequest: Map<number, FrameRequestCallback> = new Map()\n\n private resizeTimeoutId: ReturnType<typeof setTimeout> | null = null\n private resizeDebounceDelay: number = 100\n\n private enableMouseMovement: boolean = false\n private _useMouse: boolean = true\n private _useAlternateScreen: boolean = true\n private capturedRenderable?: Renderable\n private lastOverRenderableNum: number = 0\n private lastOverRenderable?: Renderable\n\n private currentSelection: Selection | null = null\n private selectionState: SelectionState | null = null\n private selectionContainers: Renderable[] = []\n\n private _splitHeight: number = 0\n private renderOffset: number = 0\n\n private _terminalWidth: number = 0\n private _terminalHeight: number = 0\n private _terminalIsSetup: boolean = false\n\n private realStdoutWrite: (chunk: any, encoding?: any, callback?: any) => boolean\n private captureCallback: () => void = () => {\n if (this._splitHeight > 0) {\n this.needsUpdate()\n }\n }\n\n private _useConsole: boolean = true\n private mouseParser: MouseParser = new MouseParser()\n private sigwinchHandler: (() => void) | null = null\n private _capabilities: any | null = null\n\n constructor(\n lib: RenderLib,\n rendererPtr: Pointer,\n stdin: NodeJS.ReadStream,\n stdout: NodeJS.WriteStream,\n width: number,\n height: number,\n config: CliRendererConfig = {},\n ) {\n super()\n\n this.stdin = stdin\n this.stdout = stdout\n this.realStdoutWrite = stdout.write\n this.lib = lib\n this._terminalWidth = stdout.columns\n this._terminalHeight = stdout.rows\n this.width = width\n this.height = height\n this._useThread = config.useThread === undefined ? false : config.useThread\n this._splitHeight = config.experimental_splitHeight || 0\n\n if (this._splitHeight > 0) {\n capture.on(\"write\", this.captureCallback)\n this.renderOffset = height - this._splitHeight\n this.height = this._splitHeight\n lib.setRenderOffset(rendererPtr, this.renderOffset)\n }\n\n this.rendererPtr = rendererPtr\n this.exitOnCtrlC = config.exitOnCtrlC === undefined ? true : config.exitOnCtrlC\n this.resizeDebounceDelay = config.debounceDelay || 100\n this.targetFps = config.targetFps || 30\n this.memorySnapshotInterval = config.memorySnapshotInterval || 5000\n this.gatherStats = config.gatherStats || false\n this.maxStatSamples = config.maxStatSamples || 300\n this.enableMouseMovement = config.enableMouseMovement || true\n this._useMouse = config.useMouse ?? true\n this._useAlternateScreen = config.useAlternateScreen ?? true\n this.nextRenderBuffer = this.lib.getNextBuffer(this.rendererPtr)\n this.currentRenderBuffer = this.lib.getCurrentBuffer(this.rendererPtr)\n this.postProcessFns = config.postProcessFns || []\n\n this.root = new RootRenderable(this)\n\n this.takeMemorySnapshot()\n\n if (this.memorySnapshotInterval > 0) {\n this.startMemorySnapshotTimer()\n }\n\n this.stdout.write = this.interceptStdoutWrite.bind(this)\n\n // Handle terminal resize\n this.sigwinchHandler = () => {\n const width = this.stdout.columns || 80\n const height = this.stdout.rows || 24\n this.handleResize(width, height)\n }\n process.on(\"SIGWINCH\", this.sigwinchHandler)\n\n const handleError = (error: Error) => {\n this.stop()\n this.destroy()\n\n new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, 100)\n }).then(() => {\n this.realStdoutWrite.call(this.stdout, \"\\n=== FATAL ERROR OCCURRED ===\\n\")\n this.realStdoutWrite.call(this.stdout, \"Console cache:\\n\")\n this.realStdoutWrite.call(this.stdout, this.console.getCachedLogs())\n this.realStdoutWrite.call(this.stdout, \"\\nCaptured output:\\n\")\n const capturedOutput = capture.claimOutput()\n if (capturedOutput) {\n this.realStdoutWrite.call(this.stdout, capturedOutput + \"\\n\")\n }\n this.realStdoutWrite.call(this.stdout, \"\\nError details:\\n\")\n this.realStdoutWrite.call(this.stdout, error.message || \"unknown error\")\n this.realStdoutWrite.call(this.stdout, \"\\n\")\n this.realStdoutWrite.call(this.stdout, error.stack || error.toString())\n this.realStdoutWrite.call(this.stdout, \"\\n\")\n\n process.exit(1)\n })\n }\n\n process.on(\"uncaughtException\", handleError)\n process.on(\"unhandledRejection\", handleError)\n process.on(\"exit\", () => {\n this.destroy()\n })\n\n this._console = new TerminalConsole(this, config.consoleOptions)\n this.useConsole = config.useConsole ?? true\n\n global.requestAnimationFrame = (callback: FrameRequestCallback) => {\n const id = CliRenderer.animationFrameId++\n this.animationRequest.set(id, callback)\n return id\n }\n global.cancelAnimationFrame = (handle: number) => {\n this.animationRequest.delete(handle)\n }\n\n const window = global.window\n if (!window) {\n global.window = {} as Window & typeof globalThis\n }\n global.window.requestAnimationFrame = requestAnimationFrame\n\n // Prevents output from being written to the terminal, useful for debugging\n if (process.env.OTUI_NO_NATIVE_RENDER === \"true\") {\n this.renderNative = () => {\n if (this._splitHeight > 0) {\n this.flushStdoutCache(this._splitHeight)\n }\n }\n }\n }\n\n public addToHitGrid(x: number, y: number, width: number, height: number, id: number) {\n if (id !== this.capturedRenderable?.num) {\n this.lib.addToHitGrid(this.rendererPtr, x, y, width, height, id)\n }\n }\n\n public get widthMethod(): WidthMethod {\n const caps = this.capabilities\n return caps?.unicode === \"unicode\" ? \"unicode\" : \"wcwidth\"\n }\n\n private writeOut(chunk: any, encoding?: any, callback?: any): boolean {\n return this.realStdoutWrite.call(this.stdout, chunk, encoding, callback)\n }\n\n public needsUpdate() {\n if (!this.updateScheduled && !this._isRunning) {\n this.updateScheduled = true\n process.nextTick(() => {\n this.loop()\n this.updateScheduled = false\n })\n }\n }\n\n public get useConsole(): boolean {\n return this._useConsole\n }\n\n public set useConsole(value: boolean) {\n this._useConsole = value\n if (value) {\n this.console.activate()\n } else {\n this.console.deactivate()\n }\n }\n\n public get isRunning(): boolean {\n return this._isRunning\n }\n\n public get resolution(): PixelResolution | null {\n return this._resolution\n }\n\n public get console(): TerminalConsole {\n return this._console\n }\n\n public get terminalWidth(): number {\n return this._terminalWidth\n }\n\n public get terminalHeight(): number {\n return this._terminalHeight\n }\n\n public get useThread(): boolean {\n return this._useThread\n }\n\n public get useMouse(): boolean {\n return this._useMouse\n }\n\n public set useMouse(useMouse: boolean) {\n if (this._useMouse === useMouse) return // No change needed\n\n this._useMouse = useMouse\n\n if (useMouse) {\n this.enableMouse()\n } else {\n this.disableMouse()\n }\n }\n\n public get experimental_splitHeight(): number {\n return this._splitHeight\n }\n\n public get liveRequestCount(): number {\n return this.liveRequestCounter\n }\n\n public get currentControlState(): string {\n return this.controlState\n }\n\n public get capabilities(): any | null {\n return this._capabilities\n }\n\n public set experimental_splitHeight(splitHeight: number) {\n if (splitHeight < 0) splitHeight = 0\n\n const prevSplitHeight = this._splitHeight\n\n if (splitHeight > 0) {\n this._splitHeight = splitHeight\n this.renderOffset = this._terminalHeight - this._splitHeight\n this.height = this._splitHeight\n\n if (prevSplitHeight === 0) {\n this.useConsole = false\n capture.on(\"write\", this.captureCallback)\n const freedLines = this._terminalHeight - this._splitHeight\n const scrollDown = ANSI.scrollDown(freedLines)\n this.writeOut(scrollDown)\n } else if (prevSplitHeight > this._splitHeight) {\n const freedLines = prevSplitHeight - this._splitHeight\n const scrollDown = ANSI.scrollDown(freedLines)\n this.writeOut(scrollDown)\n } else if (prevSplitHeight < this._splitHeight) {\n const additionalLines = this._splitHeight - prevSplitHeight\n const scrollUp = ANSI.scrollUp(additionalLines)\n this.writeOut(scrollUp)\n }\n } else {\n if (prevSplitHeight > 0) {\n this.flushStdoutCache(this._terminalHeight, true)\n\n capture.off(\"write\", this.captureCallback)\n this.useConsole = true\n }\n\n this._splitHeight = 0\n this.renderOffset = 0\n this.height = this._terminalHeight\n }\n\n this.width = this._terminalWidth\n this.lib.setRenderOffset(this.rendererPtr, this.renderOffset)\n this.lib.resizeRenderer(this.rendererPtr, this.width, this.height)\n this.nextRenderBuffer = this.lib.getNextBuffer(this.rendererPtr)\n\n this._console.resize(this.width, this.height)\n this.root.resize(this.width, this.height)\n this.emit(\"resize\", this.width, this.height)\n this.needsUpdate()\n }\n\n private interceptStdoutWrite = (chunk: any, encoding?: any, callback?: any): boolean => {\n const text = chunk.toString()\n\n capture.write(\"stdout\", text)\n if (this._splitHeight > 0) {\n this.needsUpdate()\n }\n\n if (typeof callback === \"function\") {\n process.nextTick(callback)\n }\n\n return true\n }\n\n private disableStdoutInterception(): void {\n this.flushStdoutCache(this._splitHeight)\n this.stdout.write = this.realStdoutWrite\n }\n\n // TODO: Move this to native\n private flushStdoutCache(space: number, force: boolean = false): boolean {\n if (capture.size === 0 && !force) return false\n\n const output = capture.claimOutput()\n\n const rendererStartLine = this._terminalHeight - this._splitHeight\n const flush = ANSI.moveCursorAndClear(rendererStartLine, 1)\n\n const outputLine = this._terminalHeight - this._splitHeight\n const move = ANSI.moveCursor(outputLine, 1)\n\n const backgroundColor = this.backgroundColor.toInts()\n const newlines = \" \".repeat(this.width) + \"\\n\".repeat(space)\n const clear =\n ANSI.setRgbBackground(backgroundColor[0], backgroundColor[1], backgroundColor[2]) +\n newlines +\n ANSI.resetBackground\n\n this.writeOut(flush + move + output + clear)\n\n return true\n }\n\n private enableMouse(): void {\n this.lib.enableMouse(this.rendererPtr, this.enableMouseMovement)\n }\n\n private disableMouse(): void {\n this.capturedRenderable = undefined\n this.mouseParser.reset()\n this.lib.disableMouse(this.rendererPtr)\n }\n\n public enableKittyKeyboard(flags: number = 0b00001): void {\n this.lib.enableKittyKeyboard(this.rendererPtr, flags)\n }\n\n public disableKittyKeyboard(): void {\n this.lib.disableKittyKeyboard(this.rendererPtr)\n }\n\n public set useThread(useThread: boolean) {\n this._useThread = useThread\n this.lib.setUseThread(this.rendererPtr, useThread)\n }\n\n // TODO:All input management may move to native when zig finally has async io support again,\n // without rolling a full event loop\n public async setupTerminal(): Promise<void> {\n if (this._terminalIsSetup) return\n this._terminalIsSetup = true\n\n if (this.stdin.setRawMode) {\n this.stdin.setRawMode(true)\n }\n this.stdin.resume()\n this.stdin.setEncoding(\"utf8\")\n\n await new Promise((resolve) => {\n const timeout = setTimeout(() => {\n this.stdin.off(\"data\", capListener)\n resolve(true)\n }, 100)\n const capListener = (str: string) => {\n clearTimeout(timeout)\n this.lib.processCapabilityResponse(this.rendererPtr, str)\n this.stdin.off(\"data\", capListener)\n resolve(true)\n }\n this.stdin.on(\"data\", capListener)\n this.lib.setupTerminal(this.rendererPtr, this._useAlternateScreen)\n })\n\n this._capabilities = this.lib.getTerminalCapabilities(this.rendererPtr)\n\n if (this._useMouse) {\n this.enableMouse()\n }\n\n this.stdin.on(\"data\", (data: Buffer) => {\n const str = data.toString()\n\n if (this.waitingForPixelResolution && /\\x1b\\[4;\\d+;\\d+t/.test(str)) {\n const match = str.match(/\\x1b\\[4;(\\d+);(\\d+)t/)\n if (match) {\n const resolution: PixelResolution = {\n width: parseInt(match[2]),\n height: parseInt(match[1]),\n }\n\n this._resolution = resolution\n this.waitingForPixelResolution = false\n return\n }\n }\n\n if (this.exitOnCtrlC && str === \"\\u0003\") {\n process.nextTick(() => {\n process.exit()\n })\n return\n }\n\n if (this._useMouse && this.handleMouseData(data)) {\n return\n }\n\n this.emit(\"key\", data)\n })\n\n this.queryPixelResolution()\n }\n\n private handleMouseData(data: Buffer): boolean {\n const mouseEvent = this.mouseParser.parseMouseEvent(data)\n\n if (mouseEvent) {\n if (this._splitHeight > 0) {\n if (mouseEvent.y < this.renderOffset) {\n return false\n }\n mouseEvent.y -= this.renderOffset\n }\n\n if (mouseEvent.type === \"scroll\") {\n const maybeRenderableId = this.lib.checkHit(this.rendererPtr, mouseEvent.x, mouseEvent.y)\n const maybeRenderable = Renderable.renderablesByNumber.get(maybeRenderableId)\n\n if (maybeRenderable) {\n const event = new MouseEvent(maybeRenderable, mouseEvent)\n maybeRenderable.processMouseEvent(event)\n }\n return true\n }\n\n const maybeRenderableId = this.lib.checkHit(this.rendererPtr, mouseEvent.x, mouseEvent.y)\n const sameElement = maybeRenderableId === this.lastOverRenderableNum\n this.lastOverRenderableNum = maybeRenderableId\n const maybeRenderable = Renderable.renderablesByNumber.get(maybeRenderableId)\n\n if (mouseEvent.type === \"down\" && mouseEvent.button === MouseButton.LEFT) {\n if (\n maybeRenderable &&\n maybeRenderable.selectable &&\n maybeRenderable.shouldStartSelection(mouseEvent.x, mouseEvent.y)\n ) {\n this.startSelection(maybeRenderable, mouseEvent.x, mouseEvent.y)\n return true\n }\n }\n\n if (mouseEvent.type === \"drag\" && this.selectionState?.isSelecting) {\n this.updateSelection(maybeRenderable, mouseEvent.x, mouseEvent.y)\n return true\n }\n\n if (mouseEvent.type === \"up\" && this.selectionState?.isSelecting) {\n this.finishSelection()\n return true\n }\n\n if (mouseEvent.type === \"down\" && mouseEvent.button === MouseButton.LEFT && this.selectionState) {\n this.clearSelection()\n }\n\n if (!sameElement && (mouseEvent.type === \"drag\" || mouseEvent.type === \"move\")) {\n if (this.lastOverRenderable && this.lastOverRenderable !== this.capturedRenderable) {\n const event = new MouseEvent(this.lastOverRenderable, { ...mouseEvent, type: \"out\" })\n this.lastOverRenderable.processMouseEvent(event)\n }\n this.lastOverRenderable = maybeRenderable\n if (maybeRenderable) {\n const event = new MouseEvent(maybeRenderable, {\n ...mouseEvent,\n type: \"over\",\n source: this.capturedRenderable,\n })\n maybeRenderable.processMouseEvent(event)\n }\n }\n\n if (this.capturedRenderable && mouseEvent.type !== \"up\") {\n const event = new MouseEvent(this.capturedRenderable, mouseEvent)\n this.capturedRenderable.processMouseEvent(event)\n return true\n }\n\n if (this.capturedRenderable && mouseEvent.type === \"up\") {\n const event = new MouseEvent(this.capturedRenderable, { ...mouseEvent, type: \"drag-end\" })\n this.capturedRenderable.processMouseEvent(event)\n this.capturedRenderable.processMouseEvent(new MouseEvent(this.capturedRenderable, mouseEvent))\n if (maybeRenderable) {\n const event = new MouseEvent(maybeRenderable, {\n ...mouseEvent,\n type: \"drop\",\n source: this.capturedRenderable,\n })\n maybeRenderable.processMouseEvent(event)\n }\n this.lastOverRenderable = this.capturedRenderable\n this.lastOverRenderableNum = this.capturedRenderable.num\n this.capturedRenderable = undefined\n // Dropping the renderable needs to push another frame when the renderer is not live\n // to update the hit grid, otherwise capturedRenderable won't be in the hit grid and will not receive mouse events\n this.needsUpdate()\n }\n\n if (maybeRenderable) {\n if (mouseEvent.type === \"drag\" && mouseEvent.button === MouseButton.LEFT) {\n this.capturedRenderable = maybeRenderable\n } else {\n this.capturedRenderable = undefined\n }\n const event = new MouseEvent(maybeRenderable, mouseEvent)\n maybeRenderable.processMouseEvent(event)\n return true\n }\n\n this.capturedRenderable = undefined\n this.lastOverRenderable = undefined\n return true\n }\n\n return false\n }\n\n private takeMemorySnapshot(): void {\n const memoryUsage = process.memoryUsage()\n this.lastMemorySnapshot = {\n heapUsed: memoryUsage.heapUsed,\n heapTotal: memoryUsage.heapTotal,\n arrayBuffers: memoryUsage.arrayBuffers,\n }\n\n this.lib.updateMemoryStats(\n this.rendererPtr,\n this.lastMemorySnapshot.heapUsed,\n this.lastMemorySnapshot.heapTotal,\n this.lastMemorySnapshot.arrayBuffers,\n )\n\n this.emit(\"memory:snapshot\", this.lastMemorySnapshot)\n }\n\n private startMemorySnapshotTimer(): void {\n if (this.memorySnapshotTimer) {\n clearInterval(this.memorySnapshotTimer)\n }\n\n this.memorySnapshotTimer = setInterval(() => {\n this.takeMemorySnapshot()\n }, this.memorySnapshotInterval)\n }\n\n public setMemorySnapshotInterval(interval: number): void {\n this.memorySnapshotInterval = interval\n\n if (this._isRunning && interval > 0) {\n this.startMemorySnapshotTimer()\n } else if (interval <= 0 && this.memorySnapshotTimer) {\n clearInterval(this.memorySnapshotTimer)\n this.memorySnapshotTimer = null\n }\n }\n\n private handleResize(width: number, height: number): void {\n if (this.isDestroyed) return\n if (this._splitHeight > 0) {\n this.processResize(width, height)\n return\n }\n\n if (this.resizeTimeoutId !== null) {\n clearTimeout(this.resizeTimeoutId)\n this.resizeTimeoutId = null\n }\n\n this.resizeTimeoutId = setTimeout(() => {\n this.resizeTimeoutId = null\n this.processResize(width, height)\n }, this.resizeDebounceDelay)\n }\n\n private queryPixelResolution() {\n this.waitingForPixelResolution = true\n // TODO: should move to native, injecting the request in the next frame if running\n this.writeOut(ANSI.queryPixelSize)\n }\n\n private processResize(width: number, height: number): void {\n if (width === this._terminalWidth && height === this._terminalHeight) return\n\n const prevWidth = this._terminalWidth\n\n this._terminalWidth = width\n this._terminalHeight = height\n this.queryPixelResolution()\n\n this.capturedRenderable = undefined\n this.mouseParser.reset()\n\n if (this._splitHeight > 0) {\n // TODO: Handle resizing split mode properly\n if (width < prevWidth) {\n const start = this._terminalHeight - this._splitHeight * 2\n const flush = ANSI.moveCursorAndClear(start, 1)\n this.writeOut(flush)\n }\n this.renderOffset = height - this._splitHeight\n this.width = width\n this.height = this._splitHeight\n this.currentRenderBuffer.clearLocal(RGBA.fromHex(\"#000000\"), \"\\u0a00\")\n this.lib.setRenderOffset(this.rendererPtr, this.renderOffset)\n } else {\n this.width = width\n this.height = height\n }\n\n this.lib.resizeRenderer(this.rendererPtr, this.width, this.height)\n this.nextRenderBuffer = this.lib.getNextBuffer(this.rendererPtr)\n this.currentRenderBuffer = this.lib.getCurrentBuffer(this.rendererPtr)\n this._console.resize(this.width, this.height)\n this.root.resize(this.width, this.height)\n this.emit(\"resize\", this.width, this.height)\n this.needsUpdate()\n }\n\n public setBackgroundColor(color: ColorInput): void {\n const parsedColor = parseColor(color)\n this.lib.setBackgroundColor(this.rendererPtr, parsedColor as RGBA)\n this.backgroundColor = parsedColor as RGBA\n this.nextRenderBuffer.clear(parsedColor as RGBA)\n this.needsUpdate()\n }\n\n public toggleDebugOverlay(): void {\n this.debugOverlay.enabled = !this.debugOverlay.enabled\n this.lib.setDebugOverlay(this.rendererPtr, this.debugOverlay.enabled, this.debugOverlay.corner)\n this.emit(CliRenderEvents.DEBUG_OVERLAY_TOGGLE, this.debugOverlay.enabled)\n this.needsUpdate()\n }\n\n public configureDebugOverlay(options: { enabled?: boolean; corner?: DebugOverlayCorner }): void {\n this.debugOverlay.enabled = options.enabled ?? this.debugOverlay.enabled\n this.debugOverlay.corner = options.corner ?? this.debugOverlay.corner\n this.lib.setDebugOverlay(this.rendererPtr, this.debugOverlay.enabled, this.debugOverlay.corner)\n this.needsUpdate()\n }\n\n public clearTerminal(): void {\n this.lib.clearTerminal(this.rendererPtr)\n }\n\n public dumpHitGrid(): void {\n this.lib.dumpHitGrid(this.rendererPtr)\n }\n\n public dumpBuffers(timestamp?: number): void {\n this.lib.dumpBuffers(this.rendererPtr, timestamp)\n }\n\n public dumpStdoutBuffer(timestamp?: number): void {\n this.lib.dumpStdoutBuffer(this.rendererPtr, timestamp)\n }\n\n public static setCursorPosition(renderer: CliRenderer, x: number, y: number, visible: boolean = true): void {\n const lib = resolveRenderLib()\n lib.setCursorPosition(renderer.rendererPtr, x, y, visible)\n }\n\n public static setCursorStyle(\n renderer: CliRenderer,\n style: CursorStyle,\n blinking: boolean = false,\n color?: RGBA,\n ): void {\n const lib = resolveRenderLib()\n lib.setCursorStyle(renderer.rendererPtr, style, blinking)\n if (color) {\n lib.setCursorColor(renderer.rendererPtr, color)\n }\n }\n\n public static setCursorColor(renderer: CliRenderer, color: RGBA): void {\n const lib = resolveRenderLib()\n lib.setCursorColor(renderer.rendererPtr, color)\n }\n\n public setCursorPosition(x: number, y: number, visible: boolean = true): void {\n this.lib.setCursorPosition(this.rendererPtr, x, y, visible)\n }\n\n public setCursorStyle(style: CursorStyle, blinking: boolean = false, color?: RGBA): void {\n this.lib.setCursorStyle(this.rendererPtr, style, blinking)\n if (color) {\n this.lib.setCursorColor(this.rendererPtr, color)\n }\n }\n\n public setCursorColor(color: RGBA): void {\n this.lib.setCursorColor(this.rendererPtr, color)\n }\n\n public addPostProcessFn(processFn: (buffer: OptimizedBuffer, deltaTime: number) => void): void {\n this.postProcessFns.push(processFn)\n }\n\n public removePostProcessFn(processFn: (buffer: OptimizedBuffer, deltaTime: number) => void): void {\n this.postProcessFns = this.postProcessFns.filter((fn) => fn !== processFn)\n }\n\n public clearPostProcessFns(): void {\n this.postProcessFns = []\n }\n\n public setFrameCallback(callback: (deltaTime: number) => Promise<void>): void {\n this.frameCallbacks.push(callback)\n }\n\n public removeFrameCallback(callback: (deltaTime: number) => Promise<void>): void {\n this.frameCallbacks = this.frameCallbacks.filter((cb) => cb !== callback)\n }\n\n public clearFrameCallbacks(): void {\n this.frameCallbacks = []\n }\n\n public requestLive(): void {\n this.liveRequestCounter++\n\n if (this.controlState === RendererControlState.IDLE && this.liveRequestCounter > 0) {\n this.controlState = RendererControlState.AUTO_STARTED\n this.internalStart()\n }\n }\n\n public dropLive(): void {\n this.liveRequestCounter = Math.max(0, this.liveRequestCounter - 1)\n\n if (this.controlState === RendererControlState.AUTO_STARTED && this.liveRequestCounter === 0) {\n this.controlState = RendererControlState.IDLE\n this.internalPause()\n }\n }\n\n public start(): void {\n this.controlState = RendererControlState.EXPLICIT_STARTED\n this.internalStart()\n }\n\n private internalStart(): void {\n if (!this._isRunning && !this.isDestroyed) {\n this._isRunning = true\n\n if (this.memorySnapshotInterval > 0) {\n this.startMemorySnapshotTimer()\n }\n\n this.startRenderLoop()\n }\n }\n\n public pause(): void {\n this.controlState = RendererControlState.EXPLICIT_PAUSED\n this.internalPause()\n }\n\n private internalPause(): void {\n this._isRunning = false\n }\n\n public stop(): void {\n this.controlState = RendererControlState.EXPLICIT_STOPPED\n this.internalStop()\n }\n\n private internalStop(): void {\n if (this.isRunning && !this.isDestroyed) {\n this._isRunning = false\n\n if (this.memorySnapshotTimer) {\n clearInterval(this.memorySnapshotTimer)\n this.memorySnapshotTimer = null\n }\n\n if (this.renderTimeout) {\n clearTimeout(this.renderTimeout)\n this.renderTimeout = null\n }\n }\n }\n\n public destroy(): void {\n this.stdin.setRawMode(false)\n\n if (this.isDestroyed) return\n this.isDestroyed = true\n\n this.waitingForPixelResolution = false\n this.capturedRenderable = undefined\n\n if (this.sigwinchHandler) {\n process.removeListener(\"SIGWINCH\", this.sigwinchHandler)\n this.sigwinchHandler = null\n }\n\n this._console.deactivate()\n this.disableStdoutInterception()\n this.lib.destroyRenderer(this.rendererPtr, this._useAlternateScreen, this._splitHeight)\n }\n\n private startRenderLoop(): void {\n if (!this._isRunning) return\n\n this.lastTime = Date.now()\n this.frameCount = 0\n this.lastFpsTime = this.lastTime\n this.currentFps = 0\n this.targetFrameTime = 1000 / this.targetFps\n\n this.loop()\n }\n\n private async loop(): Promise<void> {\n if (this.rendering || this.isDestroyed) return\n this.rendering = true\n if (this.renderTimeout) {\n clearTimeout(this.renderTimeout)\n this.renderTimeout = null\n }\n\n const now = Date.now()\n const elapsed = now - this.lastTime\n\n const deltaTime = elapsed\n this.lastTime = now\n\n this.frameCount++\n if (now - this.lastFpsTime >= 1000) {\n this.currentFps = this.frameCount\n this.frameCount = 0\n this.lastFpsTime = now\n }\n\n this.renderStats.frameCount++\n this.renderStats.fps = this.currentFps\n const overallStart = performance.now()\n\n const frameRequests = Array.from(this.animationRequest.values())\n this.animationRequest.clear()\n const animationRequestStart = performance.now()\n frameRequests.forEach((callback) => callback(deltaTime))\n const animationRequestEnd = performance.now()\n const animationRequestTime = animationRequestEnd - animationRequestStart\n\n const start = performance.now()\n for (const frameCallback of this.frameCallbacks) {\n try {\n await frameCallback(deltaTime)\n } catch (error) {\n console.error(\"Error in frame callback:\", error)\n }\n }\n const end = performance.now()\n this.renderStats.frameCallbackTime = end - start\n\n // Render the renderable tree\n this.root.render(this.nextRenderBuffer, deltaTime)\n\n for (const postProcessFn of this.postProcessFns) {\n postProcessFn(this.nextRenderBuffer, deltaTime)\n }\n\n this._console.renderToBuffer(this.nextRenderBuffer)\n\n this.renderNative()\n\n const overallFrameTime = performance.now() - overallStart\n // TODO: Add animationRequestTime to stats\n this.lib.updateStats(this.rendererPtr, overallFrameTime, this.renderStats.fps, this.renderStats.frameCallbackTime)\n\n if (this.gatherStats) {\n this.collectStatSample(overallFrameTime)\n }\n\n if (this._isRunning) {\n const delay = Math.max(1, this.targetFrameTime - Math.floor(overallFrameTime))\n this.renderTimeout = setTimeout(() => this.loop(), delay)\n }\n this.rendering = false\n if (this.immediateRerenderRequested) {\n this.immediateRerenderRequested = false\n this.loop()\n }\n }\n\n public intermediateRender(): void {\n this.immediateRerenderRequested = true\n this.loop()\n }\n\n private renderNative(): void {\n if (this.renderingNative) {\n console.error(\"Rendering called concurrently\")\n throw new Error(\"Rendering called concurrently\")\n }\n\n let force = false\n if (this._splitHeight > 0) {\n // TODO: Flickering could maybe be even more reduced by moving the flush to the native layer,\n // to output the flush with the buffered writer, after the render is done.\n force = this.flushStdoutCache(this._splitHeight)\n }\n\n this.renderingNative = true\n this.lib.render(this.rendererPtr, force)\n // this.dumpStdoutBuffer(Date.now())\n this.renderingNative = false\n }\n\n private collectStatSample(frameTime: number): void {\n this.frameTimes.push(frameTime)\n if (this.frameTimes.length > this.maxStatSamples) {\n this.frameTimes.shift()\n }\n }\n\n public getStats(): {\n fps: number\n frameCount: number\n frameTimes: number[]\n averageFrameTime: number\n minFrameTime: number\n maxFrameTime: number\n } {\n const frameTimes = [...this.frameTimes]\n const sum = frameTimes.reduce((acc, time) => acc + time, 0)\n const avg = frameTimes.length ? sum / frameTimes.length : 0\n const min = frameTimes.length ? Math.min(...frameTimes) : 0\n const max = frameTimes.length ? Math.max(...frameTimes) : 0\n\n return {\n fps: this.renderStats.fps,\n frameCount: this.renderStats.frameCount,\n frameTimes,\n averageFrameTime: avg,\n minFrameTime: min,\n maxFrameTime: max,\n }\n }\n\n public resetStats(): void {\n this.frameTimes = []\n this.renderStats.frameCount = 0\n }\n\n public setGatherStats(enabled: boolean): void {\n this.gatherStats = enabled\n if (!enabled) {\n this.frameTimes = []\n }\n }\n\n public getSelection(): Selection | null {\n return this.currentSelection\n }\n\n public getSelectionContainer(): Renderable | null {\n return this.selectionContainers.length > 0 ? this.selectionContainers[this.selectionContainers.length - 1] : null\n }\n\n public hasSelection(): boolean {\n return this.currentSelection !== null\n }\n\n public clearSelection(): void {\n if (this.selectionState) {\n this.selectionState = null\n this.notifySelectablesOfSelectionChange()\n }\n this.currentSelection = null\n this.selectionContainers = []\n }\n\n private startSelection(startRenderable: Renderable, x: number, y: number): void {\n this.clearSelection()\n this.selectionContainers.push(startRenderable.parent || this.root)\n\n this.selectionState = {\n anchor: { x, y },\n focus: { x, y },\n isActive: true,\n isSelecting: true,\n }\n\n this.currentSelection = new Selection({ x, y }, { x, y })\n this.notifySelectablesOfSelectionChange()\n }\n\n private updateSelection(currentRenderable: Renderable | undefined, x: number, y: number): void {\n if (this.selectionState) {\n this.selectionState.focus = { x, y }\n\n if (this.selectionContainers.length > 0) {\n const currentContainer = this.selectionContainers[this.selectionContainers.length - 1]\n\n if (!currentRenderable || !this.isWithinContainer(currentRenderable, currentContainer)) {\n const parentContainer = currentContainer.parent || this.root\n this.selectionContainers.push(parentContainer)\n } else if (currentRenderable && this.selectionContainers.length > 1) {\n let containerIndex = this.selectionContainers.indexOf(currentRenderable)\n\n if (containerIndex === -1) {\n const immediateParent = currentRenderable.parent || this.root\n containerIndex = this.selectionContainers.indexOf(immediateParent)\n }\n\n if (containerIndex !== -1 && containerIndex < this.selectionContainers.length - 1) {\n this.selectionContainers = this.selectionContainers.slice(0, containerIndex + 1)\n }\n }\n }\n\n if (this.currentSelection) {\n this.currentSelection = new Selection(this.selectionState.anchor, this.selectionState.focus)\n }\n\n this.notifySelectablesOfSelectionChange()\n }\n }\n\n private isWithinContainer(renderable: Renderable, container: Renderable): boolean {\n let current: Renderable | null = renderable\n while (current) {\n if (current === container) return true\n current = current.parent\n }\n return false\n }\n\n private finishSelection(): void {\n if (this.selectionState) {\n this.selectionState.isSelecting = false\n this.emit(\"selection\", this.currentSelection)\n }\n }\n\n private notifySelectablesOfSelectionChange(): void {\n let normalizedSelection: SelectionState | null = null\n if (this.selectionState) {\n normalizedSelection = { ...this.selectionState }\n\n if (\n normalizedSelection.anchor.y > normalizedSelection.focus.y ||\n (normalizedSelection.anchor.y === normalizedSelection.focus.y &&\n normalizedSelection.anchor.x > normalizedSelection.focus.x)\n ) {\n const temp = normalizedSelection.anchor\n normalizedSelection.anchor = normalizedSelection.focus\n normalizedSelection.focus = {\n x: temp.x + 1,\n y: temp.y,\n }\n }\n }\n\n const selectedRenderables: Renderable[] = []\n\n for (const [, renderable] of Renderable.renderablesByNumber) {\n if (renderable.visible && renderable.selectable) {\n const currentContainer =\n this.selectionContainers.length > 0 ? this.selectionContainers[this.selectionContainers.length - 1] : null\n let hasSelection = false\n if (!currentContainer || this.isWithinContainer(renderable, currentContainer)) {\n hasSelection = renderable.onSelectionChanged(normalizedSelection)\n } else {\n hasSelection = renderable.onSelectionChanged(\n normalizedSelection ? { ...normalizedSelection, isActive: false } : null,\n )\n }\n\n if (hasSelection) {\n selectedRenderables.push(renderable)\n }\n }\n }\n\n if (this.currentSelection) {\n this.currentSelection.updateSelectedRenderables(selectedRenderables)\n }\n }\n}\n"
31
+ "import { ANSI } from \"./ansi\"\nimport { Renderable, RootRenderable } from \"./Renderable\"\nimport {\n type CursorStyle,\n DebugOverlayCorner,\n type RenderContext,\n type SelectionState,\n type WidthMethod,\n} from \"./types\"\nimport { RGBA, parseColor, type ColorInput } from \"./lib/RGBA\"\nimport type { Pointer } from \"bun:ffi\"\nimport { OptimizedBuffer } from \"./buffer\"\nimport { resolveRenderLib, type RenderLib } from \"./zig\"\nimport { TerminalConsole, type ConsoleOptions, capture } from \"./console\"\nimport { MouseParser, type MouseEventType, type RawMouseEvent, type ScrollInfo } from \"./lib/parse.mouse\"\nimport { Selection } from \"./lib/selection\"\nimport { EventEmitter } from \"events\"\nimport { singleton } from \"./singleton\"\n\nexport interface CliRendererConfig {\n stdin?: NodeJS.ReadStream\n stdout?: NodeJS.WriteStream\n exitOnCtrlC?: boolean\n debounceDelay?: number\n targetFps?: number\n memorySnapshotInterval?: number\n useThread?: boolean\n gatherStats?: boolean\n maxStatSamples?: number\n consoleOptions?: ConsoleOptions\n postProcessFns?: ((buffer: OptimizedBuffer, deltaTime: number) => void)[]\n enableMouseMovement?: boolean\n useMouse?: boolean\n useAlternateScreen?: boolean\n useConsole?: boolean\n experimental_splitHeight?: number\n}\n\nexport type PixelResolution = {\n width: number\n height: number\n}\n\nexport class MouseEvent {\n public readonly type: MouseEventType\n public readonly button: number\n public readonly x: number\n public readonly y: number\n public readonly source?: Renderable\n public readonly modifiers: {\n shift: boolean\n alt: boolean\n ctrl: boolean\n }\n public readonly scroll?: ScrollInfo\n public readonly target: Renderable | null\n private _defaultPrevented: boolean = false\n\n public get defaultPrevented(): boolean {\n return this._defaultPrevented\n }\n\n constructor(target: Renderable | null, attributes: RawMouseEvent & { source?: Renderable }) {\n this.target = target\n this.type = attributes.type\n this.button = attributes.button\n this.x = attributes.x\n this.y = attributes.y\n this.modifiers = attributes.modifiers\n this.scroll = attributes.scroll\n this.source = attributes.source\n }\n\n public preventDefault(): void {\n this._defaultPrevented = true\n }\n}\n\nexport enum MouseButton {\n LEFT = 0,\n MIDDLE = 1,\n RIGHT = 2,\n WHEEL_UP = 4,\n WHEEL_DOWN = 5,\n}\n\nsingleton(\"ProcessExitSignals\", () => {\n ;[\"SIGINT\", \"SIGTERM\", \"SIGQUIT\", \"SIGABRT\"].forEach((signal) => {\n process.on(signal, () => {\n process.exit()\n })\n })\n})\n\nexport async function createCliRenderer(config: CliRendererConfig = {}): Promise<CliRenderer> {\n if (process.argv.includes(\"--delay-start\")) {\n await new Promise((resolve) => setTimeout(resolve, 5000))\n }\n const stdin = config.stdin || process.stdin\n const stdout = config.stdout || process.stdout\n\n const width = stdout.columns || 80\n const height = stdout.rows || 24\n const renderHeight =\n config.experimental_splitHeight && config.experimental_splitHeight > 0 ? config.experimental_splitHeight : height\n\n const ziglib = resolveRenderLib()\n const rendererPtr = ziglib.createRenderer(width, renderHeight)\n if (!rendererPtr) {\n throw new Error(\"Failed to create renderer\")\n }\n if (config.useThread === undefined) {\n config.useThread = true\n }\n\n // Disable threading on linux because there currently is currently an issue\n // might be just a missing dependency for the build or something, but threads crash on linux\n if (process.platform === \"linux\") {\n config.useThread = false\n }\n ziglib.setUseThread(rendererPtr, config.useThread)\n\n const renderer = new CliRenderer(ziglib, rendererPtr, stdin, stdout, width, height, config)\n await renderer.setupTerminal()\n return renderer\n}\n\nexport enum CliRenderEvents {\n DEBUG_OVERLAY_TOGGLE = \"debugOverlay:toggle\",\n}\n\nenum RendererControlState {\n IDLE = \"idle\",\n AUTO_STARTED = \"auto_started\",\n EXPLICIT_STARTED = \"explicit_started\",\n EXPLICIT_PAUSED = \"explicit_paused\",\n EXPLICIT_STOPPED = \"explicit_stopped\",\n}\n\nexport class CliRenderer extends EventEmitter implements RenderContext {\n private static animationFrameId = 0\n private lib: RenderLib\n public rendererPtr: Pointer\n private stdin: NodeJS.ReadStream\n private stdout: NodeJS.WriteStream\n private exitOnCtrlC: boolean\n private isDestroyed: boolean = false\n public nextRenderBuffer: OptimizedBuffer\n public currentRenderBuffer: OptimizedBuffer\n private _isRunning: boolean = false\n private targetFps: number = 30\n private memorySnapshotInterval: number\n private memorySnapshotTimer: Timer | null = null\n private lastMemorySnapshot: { heapUsed: number; heapTotal: number; arrayBuffers: number } = {\n heapUsed: 0,\n heapTotal: 0,\n arrayBuffers: 0,\n }\n public readonly root: RootRenderable\n public width: number\n public height: number\n private _useThread: boolean = false\n private gatherStats: boolean = false\n private frameTimes: number[] = []\n private maxStatSamples: number = 300\n private postProcessFns: ((buffer: OptimizedBuffer, deltaTime: number) => void)[] = []\n private backgroundColor: RGBA = RGBA.fromHex(\"#000000\")\n private waitingForPixelResolution: boolean = false\n\n private rendering: boolean = false\n private renderingNative: boolean = false\n private renderTimeout: Timer | null = null\n private lastTime: number = 0\n private frameCount: number = 0\n private lastFpsTime: number = 0\n private currentFps: number = 0\n private targetFrameTime: number = 0\n private immediateRerenderRequested: boolean = false\n private updateScheduled: boolean = false\n\n private liveRequestCounter: number = 0\n private controlState: RendererControlState = RendererControlState.IDLE\n\n private frameCallbacks: ((deltaTime: number) => Promise<void>)[] = []\n private renderStats: {\n frameCount: number\n fps: number\n renderTime?: number\n frameCallbackTime: number\n } = {\n frameCount: 0,\n fps: 0,\n renderTime: 0,\n frameCallbackTime: 0,\n }\n public debugOverlay = {\n enabled: false,\n corner: DebugOverlayCorner.bottomRight,\n }\n\n private _console: TerminalConsole\n private _resolution: PixelResolution | null = null\n\n private animationRequest: Map<number, FrameRequestCallback> = new Map()\n\n private resizeTimeoutId: ReturnType<typeof setTimeout> | null = null\n private resizeDebounceDelay: number = 100\n\n private enableMouseMovement: boolean = false\n private _useMouse: boolean = true\n private _useAlternateScreen: boolean = true\n private capturedRenderable?: Renderable\n private lastOverRenderableNum: number = 0\n private lastOverRenderable?: Renderable\n\n private currentSelection: Selection | null = null\n private selectionState: SelectionState | null = null\n private selectionContainers: Renderable[] = []\n\n private _splitHeight: number = 0\n private renderOffset: number = 0\n\n private _terminalWidth: number = 0\n private _terminalHeight: number = 0\n private _terminalIsSetup: boolean = false\n\n private realStdoutWrite: (chunk: any, encoding?: any, callback?: any) => boolean\n private captureCallback: () => void = () => {\n if (this._splitHeight > 0) {\n this.requestRender()\n }\n }\n\n private _useConsole: boolean = true\n private mouseParser: MouseParser = new MouseParser()\n private sigwinchHandler: (() => void) | null = null\n private _capabilities: any | null = null\n\n constructor(\n lib: RenderLib,\n rendererPtr: Pointer,\n stdin: NodeJS.ReadStream,\n stdout: NodeJS.WriteStream,\n width: number,\n height: number,\n config: CliRendererConfig = {},\n ) {\n super()\n\n this.stdin = stdin\n this.stdout = stdout\n this.realStdoutWrite = stdout.write\n this.lib = lib\n this._terminalWidth = stdout.columns\n this._terminalHeight = stdout.rows\n this.width = width\n this.height = height\n this._useThread = config.useThread === undefined ? false : config.useThread\n this._splitHeight = config.experimental_splitHeight || 0\n\n if (this._splitHeight > 0) {\n capture.on(\"write\", this.captureCallback)\n this.renderOffset = height - this._splitHeight\n this.height = this._splitHeight\n lib.setRenderOffset(rendererPtr, this.renderOffset)\n }\n\n this.rendererPtr = rendererPtr\n this.exitOnCtrlC = config.exitOnCtrlC === undefined ? true : config.exitOnCtrlC\n this.resizeDebounceDelay = config.debounceDelay || 100\n this.targetFps = config.targetFps || 30\n this.memorySnapshotInterval = config.memorySnapshotInterval || 5000\n this.gatherStats = config.gatherStats || false\n this.maxStatSamples = config.maxStatSamples || 300\n this.enableMouseMovement = config.enableMouseMovement || true\n this._useMouse = config.useMouse ?? true\n this._useAlternateScreen = config.useAlternateScreen ?? true\n this.nextRenderBuffer = this.lib.getNextBuffer(this.rendererPtr)\n this.currentRenderBuffer = this.lib.getCurrentBuffer(this.rendererPtr)\n this.postProcessFns = config.postProcessFns || []\n\n this.root = new RootRenderable(this)\n\n this.takeMemorySnapshot()\n\n if (this.memorySnapshotInterval > 0) {\n this.startMemorySnapshotTimer()\n }\n\n this.stdout.write = this.interceptStdoutWrite.bind(this)\n\n // Handle terminal resize\n this.sigwinchHandler = () => {\n const width = this.stdout.columns || 80\n const height = this.stdout.rows || 24\n this.handleResize(width, height)\n }\n process.on(\"SIGWINCH\", this.sigwinchHandler)\n\n const handleError = (error: Error) => {\n this.stop()\n this.destroy()\n\n new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, 100)\n }).then(() => {\n this.realStdoutWrite.call(this.stdout, \"\\n=== FATAL ERROR OCCURRED ===\\n\")\n this.realStdoutWrite.call(this.stdout, \"Console cache:\\n\")\n this.realStdoutWrite.call(this.stdout, this.console.getCachedLogs())\n this.realStdoutWrite.call(this.stdout, \"\\nCaptured output:\\n\")\n const capturedOutput = capture.claimOutput()\n if (capturedOutput) {\n this.realStdoutWrite.call(this.stdout, capturedOutput + \"\\n\")\n }\n this.realStdoutWrite.call(this.stdout, \"\\nError details:\\n\")\n this.realStdoutWrite.call(this.stdout, error.message || \"unknown error\")\n this.realStdoutWrite.call(this.stdout, \"\\n\")\n this.realStdoutWrite.call(this.stdout, error.stack || error.toString())\n this.realStdoutWrite.call(this.stdout, \"\\n\")\n\n process.exit(1)\n })\n }\n\n process.on(\"uncaughtException\", handleError)\n process.on(\"unhandledRejection\", handleError)\n process.on(\"exit\", () => {\n this.destroy()\n })\n\n this._console = new TerminalConsole(this, config.consoleOptions)\n this.useConsole = config.useConsole ?? true\n\n global.requestAnimationFrame = (callback: FrameRequestCallback) => {\n const id = CliRenderer.animationFrameId++\n this.animationRequest.set(id, callback)\n return id\n }\n global.cancelAnimationFrame = (handle: number) => {\n this.animationRequest.delete(handle)\n }\n\n const window = global.window\n if (!window) {\n global.window = {} as Window & typeof globalThis\n }\n global.window.requestAnimationFrame = requestAnimationFrame\n\n // Prevents output from being written to the terminal, useful for debugging\n if (process.env.OTUI_NO_NATIVE_RENDER === \"true\") {\n this.renderNative = () => {\n if (this._splitHeight > 0) {\n this.flushStdoutCache(this._splitHeight)\n }\n }\n }\n }\n\n public addToHitGrid(x: number, y: number, width: number, height: number, id: number) {\n if (id !== this.capturedRenderable?.num) {\n this.lib.addToHitGrid(this.rendererPtr, x, y, width, height, id)\n }\n }\n\n public get widthMethod(): WidthMethod {\n const caps = this.capabilities\n return caps?.unicode === \"unicode\" ? \"unicode\" : \"wcwidth\"\n }\n\n private writeOut(chunk: any, encoding?: any, callback?: any): boolean {\n return this.realStdoutWrite.call(this.stdout, chunk, encoding, callback)\n }\n\n public requestRender() {\n if (!this.rendering && !this.updateScheduled && !this._isRunning) {\n this.updateScheduled = true\n process.nextTick(() => {\n this.loop()\n this.updateScheduled = false\n })\n }\n }\n\n public get useConsole(): boolean {\n return this._useConsole\n }\n\n public set useConsole(value: boolean) {\n this._useConsole = value\n if (value) {\n this.console.activate()\n } else {\n this.console.deactivate()\n }\n }\n\n public get isRunning(): boolean {\n return this._isRunning\n }\n\n public get resolution(): PixelResolution | null {\n return this._resolution\n }\n\n public get console(): TerminalConsole {\n return this._console\n }\n\n public get terminalWidth(): number {\n return this._terminalWidth\n }\n\n public get terminalHeight(): number {\n return this._terminalHeight\n }\n\n public get useThread(): boolean {\n return this._useThread\n }\n\n public get useMouse(): boolean {\n return this._useMouse\n }\n\n public set useMouse(useMouse: boolean) {\n if (this._useMouse === useMouse) return // No change needed\n\n this._useMouse = useMouse\n\n if (useMouse) {\n this.enableMouse()\n } else {\n this.disableMouse()\n }\n }\n\n public get experimental_splitHeight(): number {\n return this._splitHeight\n }\n\n public get liveRequestCount(): number {\n return this.liveRequestCounter\n }\n\n public get currentControlState(): string {\n return this.controlState\n }\n\n public get capabilities(): any | null {\n return this._capabilities\n }\n\n public set experimental_splitHeight(splitHeight: number) {\n if (splitHeight < 0) splitHeight = 0\n\n const prevSplitHeight = this._splitHeight\n\n if (splitHeight > 0) {\n this._splitHeight = splitHeight\n this.renderOffset = this._terminalHeight - this._splitHeight\n this.height = this._splitHeight\n\n if (prevSplitHeight === 0) {\n this.useConsole = false\n capture.on(\"write\", this.captureCallback)\n const freedLines = this._terminalHeight - this._splitHeight\n const scrollDown = ANSI.scrollDown(freedLines)\n this.writeOut(scrollDown)\n } else if (prevSplitHeight > this._splitHeight) {\n const freedLines = prevSplitHeight - this._splitHeight\n const scrollDown = ANSI.scrollDown(freedLines)\n this.writeOut(scrollDown)\n } else if (prevSplitHeight < this._splitHeight) {\n const additionalLines = this._splitHeight - prevSplitHeight\n const scrollUp = ANSI.scrollUp(additionalLines)\n this.writeOut(scrollUp)\n }\n } else {\n if (prevSplitHeight > 0) {\n this.flushStdoutCache(this._terminalHeight, true)\n\n capture.off(\"write\", this.captureCallback)\n this.useConsole = true\n }\n\n this._splitHeight = 0\n this.renderOffset = 0\n this.height = this._terminalHeight\n }\n\n this.width = this._terminalWidth\n this.lib.setRenderOffset(this.rendererPtr, this.renderOffset)\n this.lib.resizeRenderer(this.rendererPtr, this.width, this.height)\n this.nextRenderBuffer = this.lib.getNextBuffer(this.rendererPtr)\n\n this._console.resize(this.width, this.height)\n this.root.resize(this.width, this.height)\n this.emit(\"resize\", this.width, this.height)\n this.requestRender()\n }\n\n private interceptStdoutWrite = (chunk: any, encoding?: any, callback?: any): boolean => {\n const text = chunk.toString()\n\n capture.write(\"stdout\", text)\n if (this._splitHeight > 0) {\n this.requestRender()\n }\n\n if (typeof callback === \"function\") {\n process.nextTick(callback)\n }\n\n return true\n }\n\n private disableStdoutInterception(): void {\n this.flushStdoutCache(this._splitHeight)\n this.stdout.write = this.realStdoutWrite\n }\n\n // TODO: Move this to native\n private flushStdoutCache(space: number, force: boolean = false): boolean {\n if (capture.size === 0 && !force) return false\n\n const output = capture.claimOutput()\n\n const rendererStartLine = this._terminalHeight - this._splitHeight\n const flush = ANSI.moveCursorAndClear(rendererStartLine, 1)\n\n const outputLine = this._terminalHeight - this._splitHeight\n const move = ANSI.moveCursor(outputLine, 1)\n\n const backgroundColor = this.backgroundColor.toInts()\n const newlines = \" \".repeat(this.width) + \"\\n\".repeat(space)\n const clear =\n ANSI.setRgbBackground(backgroundColor[0], backgroundColor[1], backgroundColor[2]) +\n newlines +\n ANSI.resetBackground\n\n this.writeOut(flush + move + output + clear)\n\n return true\n }\n\n private enableMouse(): void {\n this.lib.enableMouse(this.rendererPtr, this.enableMouseMovement)\n }\n\n private disableMouse(): void {\n this.capturedRenderable = undefined\n this.mouseParser.reset()\n this.lib.disableMouse(this.rendererPtr)\n }\n\n public enableKittyKeyboard(flags: number = 0b00001): void {\n this.lib.enableKittyKeyboard(this.rendererPtr, flags)\n }\n\n public disableKittyKeyboard(): void {\n this.lib.disableKittyKeyboard(this.rendererPtr)\n }\n\n public set useThread(useThread: boolean) {\n this._useThread = useThread\n this.lib.setUseThread(this.rendererPtr, useThread)\n }\n\n // TODO:All input management may move to native when zig finally has async io support again,\n // without rolling a full event loop\n public async setupTerminal(): Promise<void> {\n if (this._terminalIsSetup) return\n this._terminalIsSetup = true\n\n if (this.stdin.setRawMode) {\n this.stdin.setRawMode(true)\n }\n this.stdin.resume()\n this.stdin.setEncoding(\"utf8\")\n\n await new Promise((resolve) => {\n const timeout = setTimeout(() => {\n this.stdin.off(\"data\", capListener)\n resolve(true)\n }, 100)\n const capListener = (str: string) => {\n clearTimeout(timeout)\n this.lib.processCapabilityResponse(this.rendererPtr, str)\n this.stdin.off(\"data\", capListener)\n resolve(true)\n }\n this.stdin.on(\"data\", capListener)\n this.lib.setupTerminal(this.rendererPtr, this._useAlternateScreen)\n })\n\n this._capabilities = this.lib.getTerminalCapabilities(this.rendererPtr)\n\n if (this._useMouse) {\n this.enableMouse()\n }\n\n this.stdin.on(\"data\", (data: Buffer) => {\n const str = data.toString()\n\n if (this.waitingForPixelResolution && /\\x1b\\[4;\\d+;\\d+t/.test(str)) {\n const match = str.match(/\\x1b\\[4;(\\d+);(\\d+)t/)\n if (match) {\n const resolution: PixelResolution = {\n width: parseInt(match[2]),\n height: parseInt(match[1]),\n }\n\n this._resolution = resolution\n this.waitingForPixelResolution = false\n return\n }\n }\n\n if (this.exitOnCtrlC && str === \"\\u0003\") {\n process.nextTick(() => {\n process.exit()\n })\n return\n }\n\n if (this._useMouse && this.handleMouseData(data)) {\n return\n }\n\n this.emit(\"key\", data)\n })\n\n this.queryPixelResolution()\n }\n\n private handleMouseData(data: Buffer): boolean {\n const mouseEvent = this.mouseParser.parseMouseEvent(data)\n\n if (mouseEvent) {\n if (this._splitHeight > 0) {\n if (mouseEvent.y < this.renderOffset) {\n return false\n }\n mouseEvent.y -= this.renderOffset\n }\n\n if (mouseEvent.type === \"scroll\") {\n const maybeRenderableId = this.lib.checkHit(this.rendererPtr, mouseEvent.x, mouseEvent.y)\n const maybeRenderable = Renderable.renderablesByNumber.get(maybeRenderableId)\n\n if (maybeRenderable) {\n const event = new MouseEvent(maybeRenderable, mouseEvent)\n maybeRenderable.processMouseEvent(event)\n }\n return true\n }\n\n const maybeRenderableId = this.lib.checkHit(this.rendererPtr, mouseEvent.x, mouseEvent.y)\n const sameElement = maybeRenderableId === this.lastOverRenderableNum\n this.lastOverRenderableNum = maybeRenderableId\n const maybeRenderable = Renderable.renderablesByNumber.get(maybeRenderableId)\n\n if (mouseEvent.type === \"down\" && mouseEvent.button === MouseButton.LEFT) {\n if (\n maybeRenderable &&\n maybeRenderable.selectable &&\n maybeRenderable.shouldStartSelection(mouseEvent.x, mouseEvent.y)\n ) {\n this.startSelection(maybeRenderable, mouseEvent.x, mouseEvent.y)\n return true\n }\n }\n\n if (mouseEvent.type === \"drag\" && this.selectionState?.isSelecting) {\n this.updateSelection(maybeRenderable, mouseEvent.x, mouseEvent.y)\n return true\n }\n\n if (mouseEvent.type === \"up\" && this.selectionState?.isSelecting) {\n this.finishSelection()\n return true\n }\n\n if (mouseEvent.type === \"down\" && mouseEvent.button === MouseButton.LEFT && this.selectionState) {\n this.clearSelection()\n }\n\n if (!sameElement && (mouseEvent.type === \"drag\" || mouseEvent.type === \"move\")) {\n if (this.lastOverRenderable && this.lastOverRenderable !== this.capturedRenderable) {\n const event = new MouseEvent(this.lastOverRenderable, { ...mouseEvent, type: \"out\" })\n this.lastOverRenderable.processMouseEvent(event)\n }\n this.lastOverRenderable = maybeRenderable\n if (maybeRenderable) {\n const event = new MouseEvent(maybeRenderable, {\n ...mouseEvent,\n type: \"over\",\n source: this.capturedRenderable,\n })\n maybeRenderable.processMouseEvent(event)\n }\n }\n\n if (this.capturedRenderable && mouseEvent.type !== \"up\") {\n const event = new MouseEvent(this.capturedRenderable, mouseEvent)\n this.capturedRenderable.processMouseEvent(event)\n return true\n }\n\n if (this.capturedRenderable && mouseEvent.type === \"up\") {\n const event = new MouseEvent(this.capturedRenderable, { ...mouseEvent, type: \"drag-end\" })\n this.capturedRenderable.processMouseEvent(event)\n this.capturedRenderable.processMouseEvent(new MouseEvent(this.capturedRenderable, mouseEvent))\n if (maybeRenderable) {\n const event = new MouseEvent(maybeRenderable, {\n ...mouseEvent,\n type: \"drop\",\n source: this.capturedRenderable,\n })\n maybeRenderable.processMouseEvent(event)\n }\n this.lastOverRenderable = this.capturedRenderable\n this.lastOverRenderableNum = this.capturedRenderable.num\n this.capturedRenderable = undefined\n // Dropping the renderable needs to push another frame when the renderer is not live\n // to update the hit grid, otherwise capturedRenderable won't be in the hit grid and will not receive mouse events\n this.requestRender()\n }\n\n if (maybeRenderable) {\n if (mouseEvent.type === \"drag\" && mouseEvent.button === MouseButton.LEFT) {\n this.capturedRenderable = maybeRenderable\n } else {\n this.capturedRenderable = undefined\n }\n const event = new MouseEvent(maybeRenderable, mouseEvent)\n maybeRenderable.processMouseEvent(event)\n return true\n }\n\n this.capturedRenderable = undefined\n this.lastOverRenderable = undefined\n return true\n }\n\n return false\n }\n\n private takeMemorySnapshot(): void {\n const memoryUsage = process.memoryUsage()\n this.lastMemorySnapshot = {\n heapUsed: memoryUsage.heapUsed,\n heapTotal: memoryUsage.heapTotal,\n arrayBuffers: memoryUsage.arrayBuffers,\n }\n\n this.lib.updateMemoryStats(\n this.rendererPtr,\n this.lastMemorySnapshot.heapUsed,\n this.lastMemorySnapshot.heapTotal,\n this.lastMemorySnapshot.arrayBuffers,\n )\n\n this.emit(\"memory:snapshot\", this.lastMemorySnapshot)\n }\n\n private startMemorySnapshotTimer(): void {\n if (this.memorySnapshotTimer) {\n clearInterval(this.memorySnapshotTimer)\n }\n\n this.memorySnapshotTimer = setInterval(() => {\n this.takeMemorySnapshot()\n }, this.memorySnapshotInterval)\n }\n\n public setMemorySnapshotInterval(interval: number): void {\n this.memorySnapshotInterval = interval\n\n if (this._isRunning && interval > 0) {\n this.startMemorySnapshotTimer()\n } else if (interval <= 0 && this.memorySnapshotTimer) {\n clearInterval(this.memorySnapshotTimer)\n this.memorySnapshotTimer = null\n }\n }\n\n private handleResize(width: number, height: number): void {\n if (this.isDestroyed) return\n if (this._splitHeight > 0) {\n this.processResize(width, height)\n return\n }\n\n if (this.resizeTimeoutId !== null) {\n clearTimeout(this.resizeTimeoutId)\n this.resizeTimeoutId = null\n }\n\n this.resizeTimeoutId = setTimeout(() => {\n this.resizeTimeoutId = null\n this.processResize(width, height)\n }, this.resizeDebounceDelay)\n }\n\n private queryPixelResolution() {\n this.waitingForPixelResolution = true\n // TODO: should move to native, injecting the request in the next frame if running\n this.writeOut(ANSI.queryPixelSize)\n }\n\n private processResize(width: number, height: number): void {\n if (width === this._terminalWidth && height === this._terminalHeight) return\n\n const prevWidth = this._terminalWidth\n\n this._terminalWidth = width\n this._terminalHeight = height\n this.queryPixelResolution()\n\n this.capturedRenderable = undefined\n this.mouseParser.reset()\n\n if (this._splitHeight > 0) {\n // TODO: Handle resizing split mode properly\n if (width < prevWidth) {\n const start = this._terminalHeight - this._splitHeight * 2\n const flush = ANSI.moveCursorAndClear(start, 1)\n this.writeOut(flush)\n }\n this.renderOffset = height - this._splitHeight\n this.width = width\n this.height = this._splitHeight\n this.currentRenderBuffer.clearLocal(RGBA.fromHex(\"#000000\"), \"\\u0a00\")\n this.lib.setRenderOffset(this.rendererPtr, this.renderOffset)\n } else {\n this.width = width\n this.height = height\n }\n\n this.lib.resizeRenderer(this.rendererPtr, this.width, this.height)\n this.nextRenderBuffer = this.lib.getNextBuffer(this.rendererPtr)\n this.currentRenderBuffer = this.lib.getCurrentBuffer(this.rendererPtr)\n this._console.resize(this.width, this.height)\n this.root.resize(this.width, this.height)\n this.emit(\"resize\", this.width, this.height)\n this.requestRender()\n }\n\n public setBackgroundColor(color: ColorInput): void {\n const parsedColor = parseColor(color)\n this.lib.setBackgroundColor(this.rendererPtr, parsedColor as RGBA)\n this.backgroundColor = parsedColor as RGBA\n this.nextRenderBuffer.clear(parsedColor as RGBA)\n this.requestRender()\n }\n\n public toggleDebugOverlay(): void {\n this.debugOverlay.enabled = !this.debugOverlay.enabled\n this.lib.setDebugOverlay(this.rendererPtr, this.debugOverlay.enabled, this.debugOverlay.corner)\n this.emit(CliRenderEvents.DEBUG_OVERLAY_TOGGLE, this.debugOverlay.enabled)\n this.requestRender()\n }\n\n public configureDebugOverlay(options: { enabled?: boolean; corner?: DebugOverlayCorner }): void {\n this.debugOverlay.enabled = options.enabled ?? this.debugOverlay.enabled\n this.debugOverlay.corner = options.corner ?? this.debugOverlay.corner\n this.lib.setDebugOverlay(this.rendererPtr, this.debugOverlay.enabled, this.debugOverlay.corner)\n this.requestRender()\n }\n\n public clearTerminal(): void {\n this.lib.clearTerminal(this.rendererPtr)\n }\n\n public setTerminalTitle(title: string): void {\n this.lib.setTerminalTitle(this.rendererPtr, title)\n }\n\n public dumpHitGrid(): void {\n this.lib.dumpHitGrid(this.rendererPtr)\n }\n\n public dumpBuffers(timestamp?: number): void {\n this.lib.dumpBuffers(this.rendererPtr, timestamp)\n }\n\n public dumpStdoutBuffer(timestamp?: number): void {\n this.lib.dumpStdoutBuffer(this.rendererPtr, timestamp)\n }\n\n public static setCursorPosition(renderer: CliRenderer, x: number, y: number, visible: boolean = true): void {\n const lib = resolveRenderLib()\n lib.setCursorPosition(renderer.rendererPtr, x, y, visible)\n }\n\n public static setCursorStyle(\n renderer: CliRenderer,\n style: CursorStyle,\n blinking: boolean = false,\n color?: RGBA,\n ): void {\n const lib = resolveRenderLib()\n lib.setCursorStyle(renderer.rendererPtr, style, blinking)\n if (color) {\n lib.setCursorColor(renderer.rendererPtr, color)\n }\n }\n\n public static setCursorColor(renderer: CliRenderer, color: RGBA): void {\n const lib = resolveRenderLib()\n lib.setCursorColor(renderer.rendererPtr, color)\n }\n\n public setCursorPosition(x: number, y: number, visible: boolean = true): void {\n this.lib.setCursorPosition(this.rendererPtr, x, y, visible)\n }\n\n public setCursorStyle(style: CursorStyle, blinking: boolean = false, color?: RGBA): void {\n this.lib.setCursorStyle(this.rendererPtr, style, blinking)\n if (color) {\n this.lib.setCursorColor(this.rendererPtr, color)\n }\n }\n\n public setCursorColor(color: RGBA): void {\n this.lib.setCursorColor(this.rendererPtr, color)\n }\n\n public addPostProcessFn(processFn: (buffer: OptimizedBuffer, deltaTime: number) => void): void {\n this.postProcessFns.push(processFn)\n }\n\n public removePostProcessFn(processFn: (buffer: OptimizedBuffer, deltaTime: number) => void): void {\n this.postProcessFns = this.postProcessFns.filter((fn) => fn !== processFn)\n }\n\n public clearPostProcessFns(): void {\n this.postProcessFns = []\n }\n\n public setFrameCallback(callback: (deltaTime: number) => Promise<void>): void {\n this.frameCallbacks.push(callback)\n }\n\n public removeFrameCallback(callback: (deltaTime: number) => Promise<void>): void {\n this.frameCallbacks = this.frameCallbacks.filter((cb) => cb !== callback)\n }\n\n public clearFrameCallbacks(): void {\n this.frameCallbacks = []\n }\n\n public requestLive(): void {\n this.liveRequestCounter++\n\n if (this.controlState === RendererControlState.IDLE && this.liveRequestCounter > 0) {\n this.controlState = RendererControlState.AUTO_STARTED\n this.internalStart()\n }\n }\n\n public dropLive(): void {\n this.liveRequestCounter = Math.max(0, this.liveRequestCounter - 1)\n\n if (this.controlState === RendererControlState.AUTO_STARTED && this.liveRequestCounter === 0) {\n this.controlState = RendererControlState.IDLE\n this.internalPause()\n }\n }\n\n public start(): void {\n this.controlState = RendererControlState.EXPLICIT_STARTED\n this.internalStart()\n }\n\n public auto(): void {\n this.controlState = this._isRunning ? RendererControlState.AUTO_STARTED : RendererControlState.IDLE\n }\n\n private internalStart(): void {\n if (!this._isRunning && !this.isDestroyed) {\n this._isRunning = true\n\n if (this.memorySnapshotInterval > 0) {\n this.startMemorySnapshotTimer()\n }\n\n this.startRenderLoop()\n }\n }\n\n public pause(): void {\n this.controlState = RendererControlState.EXPLICIT_PAUSED\n this.internalPause()\n }\n\n private internalPause(): void {\n this._isRunning = false\n }\n\n public stop(): void {\n this.controlState = RendererControlState.EXPLICIT_STOPPED\n this.internalStop()\n }\n\n private internalStop(): void {\n if (this.isRunning && !this.isDestroyed) {\n this._isRunning = false\n\n if (this.memorySnapshotTimer) {\n clearInterval(this.memorySnapshotTimer)\n this.memorySnapshotTimer = null\n }\n\n if (this.renderTimeout) {\n clearTimeout(this.renderTimeout)\n this.renderTimeout = null\n }\n }\n }\n\n public destroy(): void {\n this.stdin.setRawMode(false)\n\n if (this.isDestroyed) return\n this.isDestroyed = true\n\n this.waitingForPixelResolution = false\n this.capturedRenderable = undefined\n\n if (this.sigwinchHandler) {\n process.removeListener(\"SIGWINCH\", this.sigwinchHandler)\n this.sigwinchHandler = null\n }\n\n this._console.deactivate()\n this.disableStdoutInterception()\n this.lib.destroyRenderer(this.rendererPtr, this._useAlternateScreen, this._splitHeight)\n }\n\n private startRenderLoop(): void {\n if (!this._isRunning) return\n\n this.lastTime = Date.now()\n this.frameCount = 0\n this.lastFpsTime = this.lastTime\n this.currentFps = 0\n this.targetFrameTime = 1000 / this.targetFps\n\n this.loop()\n }\n\n private async loop(): Promise<void> {\n if (this.rendering || this.isDestroyed) return\n this.rendering = true\n if (this.renderTimeout) {\n clearTimeout(this.renderTimeout)\n this.renderTimeout = null\n }\n\n const now = Date.now()\n const elapsed = now - this.lastTime\n\n const deltaTime = elapsed\n this.lastTime = now\n\n this.frameCount++\n if (now - this.lastFpsTime >= 1000) {\n this.currentFps = this.frameCount\n this.frameCount = 0\n this.lastFpsTime = now\n }\n\n this.renderStats.frameCount++\n this.renderStats.fps = this.currentFps\n const overallStart = performance.now()\n\n const frameRequests = Array.from(this.animationRequest.values())\n this.animationRequest.clear()\n const animationRequestStart = performance.now()\n frameRequests.forEach((callback) => callback(deltaTime))\n const animationRequestEnd = performance.now()\n const animationRequestTime = animationRequestEnd - animationRequestStart\n\n const start = performance.now()\n for (const frameCallback of this.frameCallbacks) {\n try {\n await frameCallback(deltaTime)\n } catch (error) {\n console.error(\"Error in frame callback:\", error)\n }\n }\n const end = performance.now()\n this.renderStats.frameCallbackTime = end - start\n\n // Render the renderable tree\n this.root.render(this.nextRenderBuffer, deltaTime)\n\n for (const postProcessFn of this.postProcessFns) {\n postProcessFn(this.nextRenderBuffer, deltaTime)\n }\n\n this._console.renderToBuffer(this.nextRenderBuffer)\n\n this.renderNative()\n\n const overallFrameTime = performance.now() - overallStart\n // TODO: Add animationRequestTime to stats\n this.lib.updateStats(this.rendererPtr, overallFrameTime, this.renderStats.fps, this.renderStats.frameCallbackTime)\n\n if (this.gatherStats) {\n this.collectStatSample(overallFrameTime)\n }\n\n if (this._isRunning) {\n const delay = Math.max(1, this.targetFrameTime - Math.floor(overallFrameTime))\n this.renderTimeout = setTimeout(() => this.loop(), delay)\n }\n this.rendering = false\n if (this.immediateRerenderRequested) {\n this.immediateRerenderRequested = false\n this.loop()\n }\n }\n\n public intermediateRender(): void {\n this.immediateRerenderRequested = true\n this.loop()\n }\n\n private renderNative(): void {\n if (this.renderingNative) {\n console.error(\"Rendering called concurrently\")\n throw new Error(\"Rendering called concurrently\")\n }\n\n let force = false\n if (this._splitHeight > 0) {\n // TODO: Flickering could maybe be even more reduced by moving the flush to the native layer,\n // to output the flush with the buffered writer, after the render is done.\n force = this.flushStdoutCache(this._splitHeight)\n }\n\n this.renderingNative = true\n this.lib.render(this.rendererPtr, force)\n // this.dumpStdoutBuffer(Date.now())\n this.renderingNative = false\n }\n\n private collectStatSample(frameTime: number): void {\n this.frameTimes.push(frameTime)\n if (this.frameTimes.length > this.maxStatSamples) {\n this.frameTimes.shift()\n }\n }\n\n public getStats(): {\n fps: number\n frameCount: number\n frameTimes: number[]\n averageFrameTime: number\n minFrameTime: number\n maxFrameTime: number\n } {\n const frameTimes = [...this.frameTimes]\n const sum = frameTimes.reduce((acc, time) => acc + time, 0)\n const avg = frameTimes.length ? sum / frameTimes.length : 0\n const min = frameTimes.length ? Math.min(...frameTimes) : 0\n const max = frameTimes.length ? Math.max(...frameTimes) : 0\n\n return {\n fps: this.renderStats.fps,\n frameCount: this.renderStats.frameCount,\n frameTimes,\n averageFrameTime: avg,\n minFrameTime: min,\n maxFrameTime: max,\n }\n }\n\n public resetStats(): void {\n this.frameTimes = []\n this.renderStats.frameCount = 0\n }\n\n public setGatherStats(enabled: boolean): void {\n this.gatherStats = enabled\n if (!enabled) {\n this.frameTimes = []\n }\n }\n\n public getSelection(): Selection | null {\n return this.currentSelection\n }\n\n public getSelectionContainer(): Renderable | null {\n return this.selectionContainers.length > 0 ? this.selectionContainers[this.selectionContainers.length - 1] : null\n }\n\n public hasSelection(): boolean {\n return this.currentSelection !== null\n }\n\n public clearSelection(): void {\n if (this.selectionState) {\n this.selectionState = null\n this.notifySelectablesOfSelectionChange()\n }\n this.currentSelection = null\n this.selectionContainers = []\n }\n\n private startSelection(startRenderable: Renderable, x: number, y: number): void {\n this.clearSelection()\n this.selectionContainers.push(startRenderable.parent || this.root)\n\n this.selectionState = {\n anchor: { x, y },\n focus: { x, y },\n isActive: true,\n isSelecting: true,\n }\n\n this.currentSelection = new Selection({ x, y }, { x, y })\n this.notifySelectablesOfSelectionChange()\n }\n\n private updateSelection(currentRenderable: Renderable | undefined, x: number, y: number): void {\n if (this.selectionState) {\n this.selectionState.focus = { x, y }\n\n if (this.selectionContainers.length > 0) {\n const currentContainer = this.selectionContainers[this.selectionContainers.length - 1]\n\n if (!currentRenderable || !this.isWithinContainer(currentRenderable, currentContainer)) {\n const parentContainer = currentContainer.parent || this.root\n this.selectionContainers.push(parentContainer)\n } else if (currentRenderable && this.selectionContainers.length > 1) {\n let containerIndex = this.selectionContainers.indexOf(currentRenderable)\n\n if (containerIndex === -1) {\n const immediateParent = currentRenderable.parent || this.root\n containerIndex = this.selectionContainers.indexOf(immediateParent)\n }\n\n if (containerIndex !== -1 && containerIndex < this.selectionContainers.length - 1) {\n this.selectionContainers = this.selectionContainers.slice(0, containerIndex + 1)\n }\n }\n }\n\n if (this.currentSelection) {\n this.currentSelection = new Selection(this.selectionState.anchor, this.selectionState.focus)\n }\n\n this.notifySelectablesOfSelectionChange()\n }\n }\n\n private isWithinContainer(renderable: Renderable, container: Renderable): boolean {\n let current: Renderable | null = renderable\n while (current) {\n if (current === container) return true\n current = current.parent\n }\n return false\n }\n\n private finishSelection(): void {\n if (this.selectionState) {\n this.selectionState.isSelecting = false\n this.emit(\"selection\", this.currentSelection)\n }\n }\n\n private notifySelectablesOfSelectionChange(): void {\n let normalizedSelection: SelectionState | null = null\n if (this.selectionState) {\n normalizedSelection = { ...this.selectionState }\n\n if (\n normalizedSelection.anchor.y > normalizedSelection.focus.y ||\n (normalizedSelection.anchor.y === normalizedSelection.focus.y &&\n normalizedSelection.anchor.x > normalizedSelection.focus.x)\n ) {\n const temp = normalizedSelection.anchor\n normalizedSelection.anchor = normalizedSelection.focus\n normalizedSelection.focus = {\n x: temp.x + 1,\n y: temp.y,\n }\n }\n }\n\n const selectedRenderables: Renderable[] = []\n\n for (const [, renderable] of Renderable.renderablesByNumber) {\n if (renderable.visible && renderable.selectable) {\n const currentContainer =\n this.selectionContainers.length > 0 ? this.selectionContainers[this.selectionContainers.length - 1] : null\n let hasSelection = false\n if (!currentContainer || this.isWithinContainer(renderable, currentContainer)) {\n hasSelection = renderable.onSelectionChanged(normalizedSelection)\n } else {\n hasSelection = renderable.onSelectionChanged(\n normalizedSelection ? { ...normalizedSelection, isActive: false } : null,\n )\n }\n\n if (hasSelection) {\n selectedRenderables.push(renderable)\n }\n }\n }\n\n if (this.currentSelection) {\n this.currentSelection.updateSelectedRenderables(selectedRenderables)\n }\n }\n}\n"
32
32
  ],
33
- "mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnLF,IAAM,QAAQ;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAyBA,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",
34
- "debugId": "8EF563BA9A3E575E64756E2164756E21",
33
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBO,IAAM,cAAqD;AAAA,EAChE,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AACF;AA+BO,SAAS,kBAAkB,CAAC,OAAmD;AAAA,EACpF,MAAM,SAAwB,CAAC;AAAA,EAC/B,IAAI,MAAM;AAAA,IAAK,OAAO,KAAK,KAAK;AAAA,EAChC,IAAI,MAAM;AAAA,IAAO,OAAO,KAAK,OAAO;AAAA,EACpC,IAAI,MAAM;AAAA,IAAQ,OAAO,KAAK,QAAQ;AAAA,EACtC,IAAI,MAAM;AAAA,IAAM,OAAO,KAAK,MAAM;AAAA,EAClC,OAAO,OAAO,SAAS,IAAI,SAAS;AAAA;AAG/B,SAAS,cAAc,CAAC,QAAoD;AAAA,EACjF,OAAO,WAAW,OACd,EAAE,KAAK,MAAM,OAAO,MAAM,QAAQ,MAAM,MAAM,KAAK,IACnD,MAAM,QAAQ,MAAM,IAClB;AAAA,IACE,KAAK,OAAO,SAAS,KAAK;AAAA,IAC1B,OAAO,OAAO,SAAS,OAAO;AAAA,IAC9B,QAAQ,OAAO,SAAS,QAAQ;AAAA,IAChC,MAAM,OAAO,SAAS,MAAM;AAAA,EAC9B,IACA,EAAE,KAAK,OAAO,OAAO,OAAO,QAAQ,OAAO,MAAM,MAAM;AAAA;AAIxD,SAAS,kBAAkB,CAAC,OAAsC;AAAA,EACvE,MAAM,QAAQ,IAAI,YAAY,EAAE;AAAA,EAChC,MAAM,KAAK,MAAM,QAAQ,YAAY,CAAC;AAAA,EACtC,MAAM,KAAK,MAAM,SAAS,YAAY,CAAC;AAAA,EACvC,MAAM,KAAK,MAAM,WAAW,YAAY,CAAC;AAAA,EACzC,MAAM,KAAK,MAAM,YAAY,YAAY,CAAC;AAAA,EAC1C,MAAM,KAAK,MAAM,WAAW,YAAY,CAAC;AAAA,EACzC,MAAM,KAAK,MAAM,SAAS,YAAY,CAAC;AAAA,EACvC,MAAM,KAAK,MAAM,KAAK,YAAY,CAAC;AAAA,EACnC,MAAM,KAAK,MAAM,QAAQ,YAAY,CAAC;AAAA,EACtC,MAAM,KAAK,MAAM,MAAM,YAAY,CAAC;AAAA,EACpC,MAAM,KAAK,MAAM,OAAO,YAAY,CAAC;AAAA,EACrC,MAAM,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,EACrC,OAAO;AAAA;AAIF,IAAM,mBAAqD;AAAA,EAChE,QAAQ,mBAAmB,YAAY,MAAM;AAAA,EAC7C,QAAQ,mBAAmB,YAAY,MAAM;AAAA,EAC7C,SAAS,mBAAmB,YAAY,OAAO;AAAA,EAC/C,OAAO,mBAAmB,YAAY,KAAK;AAC7C;;;ACnJA,IAAI,YAAY,MAAM;AAAA,EACpB,IAAI,aAAa,YAAY;AAAA,EAE7B,OACF,QAAQ,CAAC,WAAU;AAAA,IACjB,YAAW,aAAY,CAAC;AAAA,IAG1B,IAAI;AAAA,IAAE,MAAI,IAAE,OAAO,cAAa,cAAc,YAAW,CAAC;AAAA,IAAG,IAAI,IAAG;AAAA,IAAG,EAAE,QAAM,IAAI,QAAQ,QAAQ,CAAC,GAAE,GAAE;AAAA,MAAC,KAAG;AAAA,MAAE,KAAG;AAAA,KAAE;AAAA,IAAE,IAAI,KAAG,OAAO,OAAO,CAAC,GAAE,CAAC,GAAE,IAAE;AAAA,IAAgB,OAAO,YAApB,eAA8B,SAAS,kBAAgB,IAAE,SAAS,cAAc;AAAA,IAAK,eAAa,IAAE;AAAA,IAAgB,EAAE,QAAQ,OAAO,MAArB,IAAuB,IAAE,EAAE,OAAO,GAAE,EAAE,QAAQ,UAAS,EAAE,EAAE,YAAY,GAAG,IAAE,CAAC,IAAE,IAAE;AAAA,IAAG,IAAI,KAAG,EAAE,SAAO,QAAQ,IAAI,KAAK,OAAO,GAAE,IAAE,EAAE,YAAU,QAAQ,KAAK,KAAK,OAAO;AAAA,IAAE,OAAO,OAAO,GAAE,EAAE;AAAA,IAAE,KAAG;AAAA,IAAK,IAAI;AAAA,IAAE,EAAE,eAAa,IAAE,EAAE;AAAA,IACje,IAAI,gBAAc,EAAE,iBAAe;AAAA,IAAa,OAAO,eAAjB,YAA8B,EAAE,iCAAiC;AAAA,IAAE,IAAI,IAAG,KAAG;AAAA,IAAG,SAAS,CAAC,CAAC,GAAE,GAAE,GAAE;AAAA,MAAC,IAAE,IAAE;AAAA,MAAE,SAAQ,IAAE,KAAK,KAAG,MAAI;AAAA,QAAC,IAAI,IAAE,EAAE;AAAA,QAAK,KAAI;AAAA,UAAE;AAAA,QAAM,IAAG,IAAE,KAAI;AAAA,UAAC,IAAI,IAAE,EAAE,OAAK;AAAA,UAAG,KAAS,IAAE,QAAR;AAAA,YAAa,KAAG,OAAO,cAAc,IAAE,OAAK,IAAE,CAAC;AAAA,UAAM;AAAA,YAAC,IAAI,IAAE,EAAE,OAAK;AAAA,YAAG,KAAQ,IAAE,QAAR,OAAc,IAAE,OAAK,KAAG,KAAG,IAAE,KAAG,IAAE,MAAI,KAAG,KAAG,KAAG,KAAG,IAAE,EAAE,OAAK;AAAA,YAAG,QAAM,IAAE,KAAG,OAAO,aAAa,CAAC,KAAG,KAAG,OAAM,KAAG,OAAO,aAAa,QAAM,KAAG,IAAG,QAAM,IAAE,IAAI;AAAA;AAAA,QAAG,EAAM;AAAA,eAAG,OAAO,aAAa,CAAC;AAAA,MAAC;AAAA,MAAC,OAAO;AAAA;AAAA,IACte,IAAI,IAAG,IAAG,GAAE,GAAE,IAAG,GAAE,GAAE,IAAG;AAAA,IAAG,SAAS,EAAE,GAAE;AAAA,MAAC,IAAI,IAAE,GAAG;AAAA,MAAO,KAAG;AAAA,MAAE,EAAE,QAAM,KAAG,IAAI,UAAU,CAAC;AAAA,MAAE,EAAE,SAAO,IAAE,IAAI,WAAW,CAAC;AAAA,MAAE,EAAE,SAAO,IAAE,IAAI,WAAW,CAAC;AAAA,MAAE,EAAE,SAAO,IAAE,IAAI,WAAW,CAAC;AAAA,MAAE,EAAE,UAAQ,KAAG,IAAI,YAAY,CAAC;AAAA,MAAE,EAAE,UAAQ,IAAE,IAAI,YAAY,CAAC;AAAA,MAAE,EAAE,UAAQ,KAAG,IAAI,aAAa,CAAC;AAAA,MAAE,EAAE,UAAQ,KAAG,IAAI,aAAa,CAAC;AAAA;AAAA,IAAE,IAAI,IAAG,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC;AAAA,IAAE,SAAS,EAAE,GAAE;AAAA,MAAC,IAAI,IAAE,EAAE,OAAO,MAAM;AAAA,MAAE,GAAG,QAAQ,CAAC;AAAA;AAAA,IAAE,IAAI,IAAE,GAAE,KAAG,MAAK,IAAE;AAAA,IAChZ,SAAS,CAAC,CAAC,GAAE;AAAA,MAAC,IAAG,EAAE;AAAA,QAAQ,EAAE,QAAQ,CAAC;AAAA,MAAE,IAAE,aAAW,IAAE;AAAA,MAAI,EAAE,CAAC;AAAA,MAAE,KAAG;AAAA,MAAG,IAAE,IAAI,YAAY,aAAa,IAAE,0CAA0C;AAAA,MAAE,GAAG,CAAC;AAAA,MAAE,MAAM;AAAA;AAAA,IAAG,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,OAAO,EAAE,WAAW,uCAAuC;AAAA;AAAA,IAAE,IAAI;AAAA,IAAE,IAAE;AAAA,IAAw86F,KAAI,GAAG,CAAC,GAAE;AAAA,MAAC,IAAI,KAAG;AAAA,MAAE,IAAE,EAAE,aAAW,EAAE,WAAW,IAAG,CAAC,IAAE,IAAE;AAAA,IAAE;AAAA,IACxv7F,SAAS,EAAE,GAAE;AAAA,MAAC,IAAI,IAAE;AAAA,MAAE,IAAG;AAAA,QAAC,IAAG,KAAG,KAAG;AAAA,UAAE,OAAO,IAAI,WAAW,CAAC;AAAA,QAAE,IAAG,GAAG,CAAC;AAAA,UAAE,IAAG;AAAA,YAAC,IAAI,IAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAE,IAAE,IAAI,WAAW,EAAE,MAAM;AAAA,YAAE,KAAI,IAAE,EAAE,IAAE,EAAE,UAAS;AAAA,cAAE,EAAE,KAAG,EAAE,WAAW,CAAC;AAAA,YAAE,IAAI,IAAE;AAAA,YAAE,OAAM,GAAE;AAAA,YAAC,MAAM,MAAM,2CAA2C;AAAA;AAAA,QAAQ;AAAA,cAAO;AAAA,QAAE,IAAI,IAAE;AAAA,QAAE,IAAG;AAAA,UAAE,OAAO;AAAA,QAAE,MAAK;AAAA,QAAmD,OAAM,GAAE;AAAA,QAAC,EAAE,CAAC;AAAA;AAAA;AAAA,IAC3V,SAAS,EAAE,GAAE;AAAA,MAAC,OAAO,KAAe,OAAO,SAAnB,aAAyB,QAAQ,QAAQ,EAAE,KAAK,QAAQ,GAAE;AAAA,QAAC,OAAO,GAAG;AAAA,OAAE,IAAE,MAAM,GAAE,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,QAAQ,CAAC,GAAE;AAAA,QAAC,KAAI,EAAE;AAAA,UAAG,MAAK,yCAAuC,IAAE;AAAA,QAAI,OAAO,EAAE,YAAY;AAAA,OAAE,EAAE,MAAM,QAAQ,GAAE;AAAA,QAAC,OAAO,GAAG;AAAA,OAAE;AAAA;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,MAAK,IAAE,EAAE;AAAA,QAAQ,EAAE,MAAM,EAAE,CAAC;AAAA;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,IAAY,MAAJ;AAAA,QAAM,OAAM;AAAA,MAAW,IAAE,EAAE,QAAQ,kBAAiB,GAAG;AAAA,MAAE,IAAI,IAAE,EAAE,WAAW,CAAC;AAAA,MAAE,OAAO,MAAI,KAAG,MAAI,IAAE,MAAI,IAAE;AAAA;AAAA,IACvb,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,IAAE,GAAG,CAAC;AAAA,MAAE,OAAO,QAAQ,GAAE;AAAA,QAAC,OAAO,EAAE,MAAM,MAAK,SAAS;AAAA;AAAA;AAAA,IAAG,IAAI,IAAE,CAAC,CAAC,GAAE,EAAC,OAAW,UAAC,GAAE,EAAC,OAAM,KAAI,GAAE,EAAC,OAAM,KAAE,GAAE,EAAC,OAAM,MAAE,CAAC,GAAE,KAAG,CAAC;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,IAAI,IAAE,OAAM,IAAE,GAAG,GAAE,QAAQ,CAAC,GAAE;AAAA,QAAC,KAAK,OAAK;AAAA,QAAE,KAAK,UAAQ;AAAA,QAAE,IAAE,MAAM,CAAC,EAAE;AAAA,QAAe,MAAJ,cAAQ,KAAK,QAAM,KAAK,SAAS,IAAE;AAAA,IAAK,EAAE,QAAQ,sBAAqB,EAAE;AAAA,OAAG;AAAA,MAAE,EAAE,YAAU,OAAO,OAAO,EAAE,SAAS;AAAA,MAAE,EAAE,UAAU,cAAY;AAAA,MAAE,EAAE,UAAU,WAAS,QAAQ,GAAE;AAAA,QAAC,OAAgB,KAAK,YAAT,YAAiB,KAAK,OAAK,KAAK,OAAK,OAAK,KAAK;AAAA;AAAA,MAAS,OAAO;AAAA;AAAA,IAAE,IAAI,IAAO;AAAA,IACpf,SAAS,CAAC,CAAC,GAAE;AAAA,MAAC,MAAM,IAAI,EAAE,CAAC;AAAA;AAAA,IAAG,IAAI,IAAE,OAAG;AAAA,MAAC,KAAG,EAAE,sCAAoC,CAAC;AAAA,MAAE,OAAO,EAAE,GAAG;AAAA,OAAO,KAAG,OAAG;AAAA,MAAC,QAAO;AAAA,aAAa;AAAA,UAAE,OAAO;AAAA,aAAO;AAAA,UAAK,OAAO;AAAA,aAAO;AAAA,UAAG,OAAO;AAAA,aAAO;AAAA,UAAG,OAAO;AAAA;AAAA,UAAU,IAAI,IAAE,GAAG,SAAO,GAAG,IAAI,IAAE,EAAE;AAAA,UAAO,EAAE,KAAG,EAAC,IAAG,GAAE,OAAM,EAAC;AAAA,UAAE,OAAO;AAAA;AAAA,OAAI,KAAQ,WAAE,KAAQ;AAAA,IAAE,SAAS,CAAC,CAAC,GAAE;AAAA,MAAC,SAAQ,IAAE,GAAG,EAAE;AAAA,QAAI,KAAG,GAAG,EAAE;AAAA,MAAM,OAAO;AAAA;AAAA,IAAE,IAAI,IAAE,CAAC;AAAA,IAAE,SAAS,EAAE,GAAE;AAAA,MAAC,MAAK,EAAE,UAAQ;AAAA,QAAC,IAAI,IAAE,EAAE,IAAI;AAAA,QAAE,EAAE,EAAE,IAAE;AAAA,QAAG,EAAE,UAAU;AAAA,MAAC;AAAA;AAAA,IAAE,IAAI,IAAO,WAAE,IAAE,CAAC;AAAA,IACpb,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,KAAa,MAAJ,aAAO,EAAE,6BAA6B,EAAE,EAAE;AAAA,QAAG,IAAE,EAAE,GAAG,CAAC,GAAE,IAAE,EAAE;AAAA,MAAE,OAAO;AAAA;AAAA,IAAE,IAAI,IAAE,CAAC;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,IAAE,GAAG,CAAC;AAAA,MAAE,IAAI,IAAE,EAAE,CAAC;AAAA,MAAE,EAAE,CAAC;AAAA,MAAE,OAAO;AAAA;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,IAAI,IAAE,EAAE;AAAA,MAAY,MAAJ,aAAO,EAAE,IAAE,uBAAqB,GAAG,CAAC,CAAC;AAAA,MAAE,OAAO;AAAA;AAAA,IAAE,SAAS,EAAE,GAAE;AAAA,IAAE,IAAI,KAAG;AAAA,IAAG,SAAS,EAAE,CAAC,GAAE;AAAA,QAAG,EAAE,MAAM;AAAA,MAAU,EAAE,MAAM,UAAZ,MAAoB,EAAE,IAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAA;AAAA,IAAG,SAAS,EAAE,CAAC,GAAE,GAAE,GAAE;AAAA,MAAC,IAAG,MAAI;AAAA,QAAE,OAAO;AAAA,MAAE,IAAY,EAAE,MAAN;AAAA,QAAQ,OAAO;AAAA,MAAK,IAAE,GAAG,GAAE,GAAE,EAAE,CAAC;AAAA,MAAE,OAAc,MAAP,OAAS,OAAK,EAAE,GAAG,CAAC;AAAA;AAAA,IAAE,IAAI,KAAG,CAAC;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,IAAE,GAAG,GAAE,CAAC;AAAA,MAAE,OAAO,EAAE;AAAA;AAAA,IAC7e,IAAI,KAAQ;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,MAAM,IAAI,GAAG,CAAC;AAAA;AAAA,IAAG,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,EAAE,KAAG,EAAE,KAAG,GAAG,0CAA0C;AAAA,QAAI,EAAE,QAAM,EAAE,KAAG,GAAG,kDAAkD;AAAA,MAAE,EAAE,QAAM,EAAC,OAAM,EAAC;AAAA,MAAE,OAAO,EAAE,OAAO,OAAO,GAAE,EAAC,GAAE,EAAC,OAAM,EAAC,EAAC,CAAC,CAAC;AAAA;AAAA,IAAE,SAAS,CAAC,CAAC,GAAE;AAAA,MAAC,IAAiB,OAAO,yBAArB;AAAA,QAA0C,OAAO,IAAE,OAAG,GAAE;AAAA,MAAE,KAAG,IAAI,qBAAqB,OAAG;AAAA,QAAC,GAAG,EAAE,CAAC;AAAA,OAAE;AAAA,MAAE,IAAE,OAAG;AAAA,QAAC,IAAI,IAAE,EAAE;AAAA,QAAE,EAAE,KAAG,GAAG,SAAS,GAAE,EAAC,GAAE,EAAC,GAAE,CAAC;AAAA,QAAE,OAAO;AAAA;AAAA,MAAG,KAAG,OAAG;AAAA,QAAC,GAAG,WAAW,CAAC;AAAA;AAAA,MAAG,OAAO,EAAE,CAAC;AAAA;AAAA,IAAE,IAAI,KAAG,CAAC;AAAA,IACjd,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,MAAK,EAAE,UAAQ;AAAA,QAAC,IAAI,IAAE,EAAE,IAAI;AAAA,QAAE,EAAE,IAAI,EAAE,CAAC;AAAA,MAAC;AAAA;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,OAAO,KAAK,aAAa,EAAE,KAAG,EAAE;AAAA;AAAA,IAAE,IAAI,IAAE,CAAC,GAAE,KAAG,CAAC;AAAA,IAAE,SAAS,CAAC,CAAC,GAAE,GAAE,GAAE;AAAA,MAAC,SAAS,CAAC,CAAC,GAAE;AAAA,QAAC,IAAE,EAAE,CAAC;AAAA,QAAE,EAAE,WAAS,EAAE,UAAQ,GAAG,iCAAiC;AAAA,QAAE,SAAQ,IAAE,EAAE,IAAE,EAAE,UAAS;AAAA,UAAE,EAAE,EAAE,IAAG,EAAE,EAAE;AAAA;AAAA,MAAE,EAAE,QAAQ,QAAQ,CAAC,GAAE;AAAA,QAAC,GAAG,KAAG;AAAA,OAAE;AAAA,MAAE,IAAI,IAAE,MAAM,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,IAAE;AAAA,MAAE,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAA,QAAC,EAAE,eAAe,CAAC,IAAE,EAAE,KAAG,EAAE,MAAI,EAAE,KAAK,CAAC,GAAE,EAAE,eAAe,CAAC,MAAI,EAAE,KAAG,CAAC,IAAG,EAAE,GAAG,KAAK,MAAI;AAAA,UAAC,EAAE,KAAG,EAAE;AAAA,YAAK;AAAA,UAAE,MAAI,EAAE,UAAQ,EAAE,CAAC;AAAA,SAAE;AAAA,OAAG;AAAA,MAAM,EAAE,WAAN,KAAc,EAAE,CAAC;AAAA;AAAA,IACle,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,QAAO;AAAA,aAAQ;AAAA,UAAE,OAAO;AAAA,aAAO;AAAA,UAAE,OAAO;AAAA,aAAO;AAAA,UAAE,OAAO;AAAA,aAAO;AAAA,UAAE,OAAO;AAAA;AAAA,UAAU,MAAM,IAAI,UAAU,wBAAsB,CAAC;AAAA;AAAA;AAAA,IAC5I,SAAS,CAAC,CAAC,GAAE,GAAE,IAAE,CAAC,GAAE;AAAA,MAAC,MAAK,oBAAmB;AAAA,QAAG,MAAM,IAAI,UAAU,yDAAyD;AAAA,MAAE,IAAI,IAAE,EAAE;AAAA,MAAK,KAAG,EAAE,WAAS,IAAE,+CAA+C;AAAA,MAAE,IAAG,EAAE,eAAe,CAAC,GAAE;AAAA,QAAC,IAAG,EAAE;AAAA,UAAG;AAAA,QAAO,EAAE,2BAAyB,IAAE,SAAS;AAAA,MAAC;AAAA,MAAC,EAAE,KAAG;AAAA,MAAE,OAAO,GAAG;AAAA,MAAG,EAAE,eAAe,CAAC,MAAI,IAAE,EAAE,IAAG,OAAO,EAAE,IAAG,EAAE,QAAQ,OAAG,EAAE,CAAC;AAAA;AAAA,IAAG,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAK,2BAA2B;AAAA;AAAA,IAAE,SAAS,CAAC,GAAE;AAAA,IACnb,SAAS,EAAE,CAAC,GAAE,GAAE,GAAE;AAAA,MAAC,IAAY,EAAE,GAAG,MAAT,WAAW;AAAA,QAAC,IAAI,IAAE,EAAE;AAAA,QAAG,EAAE,KAAG,QAAQ,GAAE;AAAA,UAAC,EAAE,GAAG,EAAE,eAAe,UAAU,MAAM,KAAG,EAAE,eAAa,IAAE,mDAAiD,UAAU,SAAO,yBAAuB,EAAE,GAAG,IAAE,IAAI;AAAA,UAAE,OAAO,EAAE,GAAG,EAAE,UAAU,QAAQ,MAAM,MAAK,SAAS;AAAA;AAAA,QAAG,EAAE,GAAG,IAAE,CAAC;AAAA,QAAE,EAAE,GAAG,EAAE,EAAE,KAAG;AAAA,MAAC;AAAA;AAAA,IAChT,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,EAAE,eAAe,CAAC,KAAG,EAAE,kCAAgC,IAAE,SAAS,GAAE,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,eAAoB,SAAC,KAAG,EAAE,iGAAiG,GAAE,EAAE,GAAG,EAAO,aAAG,KAAG,EAAE,KAAG;AAAA;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAA,MAAC,KAAK,OAAK;AAAA,MAAE,KAAK,cAAY;AAAA,MAAE,KAAK,IAAE;AAAA,MAAE,KAAK,IAAE;AAAA,MAAE,KAAK,IAAE;AAAA,MAAE,KAAK,KAAG;AAAA,MAAE,KAAK,KAAG;AAAA,MAAE,KAAK,KAAG;AAAA,MAAE,KAAK,KAAG,CAAC;AAAA;AAAA,IACrX,SAAS,EAAE,CAAC,GAAE,GAAE,GAAE;AAAA,MAAC,MAAK,MAAI;AAAA,QAAG,EAAE,MAAI,EAAE,kCAAgC,EAAE,OAAK,0BAAwB,EAAE,IAAI,GAAE,IAAE,EAAE,GAAG,CAAC,GAAE,IAAE,EAAE;AAAA,MAAE,OAAO;AAAA;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,IAAU,MAAP;AAAA,QAAS,OAAO,KAAK,MAAI,EAAE,yBAAuB,KAAK,IAAI,GAAE;AAAA,MAAE,EAAE,KAAG,EAAE,kBAAgB,GAAG,CAAC,IAAE,YAAU,KAAK,IAAI;AAAA,MAAE,EAAE,EAAE,KAAG,EAAE,qDAAmD,KAAK,IAAI;AAAA,MAAE,OAAO,GAAG,EAAE,EAAE,GAAE,EAAE,EAAE,EAAE,GAAE,KAAK,CAAC;AAAA;AAAA,IACjX,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,IAAU,MAAP,MAAS;AAAA,QAAC,KAAK,MAAI,EAAE,yBAAuB,KAAK,IAAI;AAAA,QAAE,IAAG,KAAK,IAAG;AAAA,UAAC,IAAI,IAAE,KAAK,GAAG;AAAA,UAAS,MAAP,QAAU,EAAE,KAAK,KAAK,GAAE,CAAC;AAAA,UAAE,OAAO;AAAA,QAAC;AAAA,QAAC,OAAO;AAAA,MAAC;AAAA,MAAC,EAAE,KAAG,EAAE,kBAAgB,GAAG,CAAC,IAAE,YAAU,KAAK,IAAI;AAAA,MAAE,EAAE,EAAE,KAAG,EAAE,qDAAmD,KAAK,IAAI;AAAA,OAAG,KAAK,MAAI,EAAE,EAAE,EAAE,MAAI,EAAE,sCAAoC,EAAE,EAAE,IAAE,EAAE,EAAE,EAAE,OAAK,EAAE,EAAE,EAAE,QAAM,wBAAsB,KAAK,IAAI;AAAA,MAAE,IAAE,GAAG,EAAE,EAAE,GAAE,EAAE,EAAE,EAAE,GAAE,KAAK,CAAC;AAAA,MAAE,IAAG,KAAK;AAAA,QAAG,QAAgB,EAAE,EAAE,MAAR,aAAW,EAAE,iDAAiD,GACrf,KAAK;AAAA,eAAS;AAAA,YAAE,EAAE,EAAE,MAAI,OAAK,IAAE,EAAE,EAAE,IAAE,EAAE,sCAAoC,EAAE,EAAE,IAAE,EAAE,EAAE,EAAE,OAAK,EAAE,EAAE,EAAE,QAAM,wBAAsB,KAAK,IAAI;AAAA,YAAE;AAAA,eAAW;AAAA,YAAE,IAAE,EAAE,EAAE;AAAA,YAAE;AAAA,eAAW;AAAA,YAAE,IAAG,EAAE,EAAE,MAAI;AAAA,cAAK,IAAE,EAAE,EAAE;AAAA,YAAM;AAAA,cAAC,IAAI,IAAE,EAAE,MAAM;AAAA,cAAE,IAAE,KAAK,GAAG,GAAE,GAAG,QAAQ,GAAE;AAAA,gBAAC,EAAE,UAAU;AAAA,eAAE,CAAC;AAAA,cAAS,MAAP,QAAU,EAAE,KAAK,KAAK,GAAE,CAAC;AAAA;AAAA,YAAE;AAAA;AAAA,YAAc,EAAE,6BAA6B;AAAA;AAAA,MAAE,OAAO;AAAA;AAAA,IACpV,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,IAAU,MAAP;AAAA,QAAS,OAAO,KAAK,MAAI,EAAE,yBAAuB,KAAK,IAAI,GAAE;AAAA,MAAE,EAAE,KAAG,EAAE,kBAAgB,GAAG,CAAC,IAAE,YAAU,KAAK,IAAI;AAAA,MAAE,EAAE,EAAE,KAAG,EAAE,qDAAmD,KAAK,IAAI;AAAA,MAAE,EAAE,EAAE,EAAE,MAAI,EAAE,qCAAmC,EAAE,EAAE,EAAE,OAAK,wBAAsB,KAAK,IAAI;AAAA,MAAE,OAAO,GAAG,EAAE,EAAE,GAAE,EAAE,EAAE,EAAE,GAAE,KAAK,CAAC;AAAA;AAAA,IACrU,SAAS,CAAC,CAAC,GAAE,GAAE,GAAE,GAAE;AAAA,MAAC,KAAK,OAAK;AAAA,MAAE,KAAK,IAAE;AAAA,MAAE,KAAK,KAAG;AAAA,MAAE,KAAK,KAAG;AAAA,MAAE,KAAK,KAAG;AAAA,MAAG,KAAK,IAAE,KAAK,KAAG,KAAK,KAAG,KAAK,KAAG,KAAK,KAAG,KAAK,KAAQ;AAAA,MAAW,EAAE,MAAN,YAAQ,KAAK,aAAW,MAAI,KAAK,aAAW,IAAE,KAAG,IAAG,KAAK,IAAE;AAAA;AAAA,IAAM,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,EAAE,eAAe,CAAC,KAAG,GAAG,qCAAqC;AAAA,MAAE,EAAE,KAAG;AAAA,MAAE,EAAE,GAAG,IAAO;AAAA;AAAA,IACvS,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,IAAI,IAAE,CAAC;AAAA,MAAE,OAAO,QAAQ,GAAE;AAAA,QAAC,EAAE,SAAO;AAAA,QAAE,OAAO,OAAO,GAAE,SAAS;AAAA,QAAE,IAAG,EAAE,SAAS,GAAG,GAAE;AAAA,UAAC,IAAI,IAAE,EAAE,aAAW;AAAA,UAAG,IAAE,KAAG,EAAE,SAAO,EAAE,MAAM,MAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAE,EAAE,KAAK,MAAK,CAAC;AAAA,QAAC,EAAM;AAAA,cAAE,GAAG,IAAI,CAAC,EAAE,MAAM,MAAK,CAAC;AAAA,QAAE,OAAO;AAAA;AAAA;AAAA,IAAG,SAAS,CAAC,CAAC,GAAE,GAAE;AAAA,MAAC,IAAE,EAAE,CAAC;AAAA,MAAE,IAAI,IAAE,EAAE,SAAS,GAAG,IAAE,GAAG,GAAE,CAAC,IAAE,GAAG,IAAI,CAAC;AAAA,MAAc,OAAO,KAAnB,cAAsB,EAAE,6CAA2C,IAAE,OAAK,CAAC;AAAA,MAAE,OAAO;AAAA;AAAA,IAAE,IAAI,KAAQ;AAAA,IAC/X,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,SAAS,CAAC,CAAC,GAAE;AAAA,QAAC,EAAE,MAAI,EAAE,OAAK,GAAG,KAAG,GAAG,GAAG,QAAQ,CAAC,KAAG,EAAE,KAAK,CAAC,GAAE,EAAE,KAAG;AAAA;AAAA,MAAK,IAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAA,MAAE,EAAE,QAAQ,CAAC;AAAA,MAAE,MAAM,IAAI,GAAG,IAAE,OAAK,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAAA;AAAA,IAC7J,SAAS,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE;AAAA,MAAC,IAAI,IAAE,EAAE;AAAA,MAAO,IAAE,KAAG,EAAE,gFAAgF;AAAA,MAAE,IAAI,IAAS,EAAE,OAAT,QAAoB,MAAP,MAAS,IAAE;AAAA,MAAG,KAAI,IAAE,EAAE,IAAE,EAAE,UAAS;AAAA,QAAE,IAAU,EAAE,OAAT,QAAsB,EAAE,GAAG,MAAT,WAAW;AAAA,UAAC,IAAE;AAAA,UAAG;AAAA,QAAK;AAAA,MAAC,IAAI,IAAW,EAAE,GAAG,SAAd,QAAmB,IAAE,IAAE,GAAE,IAAE,MAAM,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAA,MAAE,OAAO,QAAQ,GAAE;AAAA,QAAC,UAAU,WAAS,KAAG,EAAE,cAAY,IAAE,kBAAgB,UAAU,SAAO,0BAAwB,IAAE,QAAQ;AAAA,QAAE,EAAE,SAAO;AAAA,QAAE,EAAE,SAAO,IAAE,IAAE;AAAA,QAAE,EAAE,KAAG;AAAA,QAAE,IAAG,GAAE;AAAA,UAAC,IAAI,IAAE,EAAE,GAAG,WAAW,GAAE,IAAI;AAAA,UAAE,EAAE,KAAG;AAAA,QAAC;AAAA,QAAC,SAAQ,IAAE,EAAE,IAAE,KAAI;AAAA,UAAE,EAAE,KACtf,EAAE,IAAE,GAAG,WAAW,GAAE,UAAU,EAAE,GAAE,EAAE,KAAK,EAAE,EAAE;AAAA,QAAE,IAAE,EAAE,MAAM,MAAK,CAAC;AAAA,QAAE,IAAG;AAAA,UAAE,GAAG,CAAC;AAAA,QAAO;AAAA,mBAAQ,IAAE,IAAE,IAAE,EAAE,IAAE,EAAE,QAAO,KAAI;AAAA,YAAC,IAAI,IAAM,MAAJ,IAAM,IAAE,EAAE,IAAE;AAAA,YAAU,EAAE,GAAG,MAAZ,QAAe,EAAE,GAAG,EAAE,CAAC;AAAA,UAAC;AAAA,QAAC,IAAE,IAAE,EAAE,GAAG,aAAa,CAAC,IAAO;AAAA,QAAE,OAAO;AAAA;AAAA;AAAA,IAAG,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,SAAQ,IAAE,CAAC,GAAE,IAAE,EAAE,IAAE,GAAE;AAAA,QAAI,EAAE,KAAK,EAAE,IAAE,IAAE,KAAG,EAAE;AAAA,MAAE,OAAO;AAAA;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,IAAE,OAAS,EAAE,GAAG,OAAX,MAAgB,EAAE,KAAQ,WAAE,GAAG,KAAK,CAAC;AAAA;AAAA,IAAG,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,IAAU,MAAP;AAAA,QAAS,OAAM;AAAA,MAAO,IAAI,IAAE,OAAO;AAAA,MAAE,OAAiB,MAAX,YAAwB,MAAV,WAA0B,MAAb,aAAe,EAAE,SAAS,IAAE,KAAG;AAAA;AAAA,IACnc,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,QAAO;AAAA,aAAQ;AAAA,UAAE,OAAO,QAAQ,CAAC,GAAE;AAAA,YAAC,OAAO,KAAK,aAAa,GAAG,KAAG,EAAE;AAAA;AAAA,aAAQ;AAAA,UAAE,OAAO,QAAQ,CAAC,GAAE;AAAA,YAAC,OAAO,KAAK,aAAa,GAAG,KAAG,EAAE;AAAA;AAAA;AAAA,UAAW,MAAM,IAAI,UAAU,yBAAuB,CAAC;AAAA;AAAA;AAAA,IAC3M,SAAS,EAAE,CAAC,GAAE,GAAE,GAAE;AAAA,MAAC,QAAO;AAAA,aAAQ;AAAA,UAAE,OAAO,IAAE,QAAQ,CAAC,GAAE;AAAA,YAAC,OAAO,GAAG;AAAA,cAAI,QAAQ,CAAC,GAAE;AAAA,YAAC,OAAO,EAAE;AAAA;AAAA,aAAS;AAAA,UAAE,OAAO,IAAE,QAAQ,CAAC,GAAE;AAAA,YAAC,OAAO,EAAE,KAAG;AAAA,cAAI,QAAQ,CAAC,GAAE;AAAA,YAAC,OAAO,GAAG,KAAG;AAAA;AAAA,aAAS;AAAA,UAAE,OAAO,IAAE,QAAQ,CAAC,GAAE;AAAA,YAAC,OAAO,EAAE,KAAG;AAAA,cAAI,QAAQ,CAAC,GAAE;AAAA,YAAC,OAAO,EAAE,KAAG;AAAA;AAAA;AAAA,UAAY,MAAM,IAAI,UAAU,2BAAyB,CAAC;AAAA;AAAA;AAAA,IAAI,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,SAAQ,IAAE,IAAG,IAAE,IAAI,KAAG,IAAE,MAAK,GAAE;AAAA,QAAC,IAAI,IAAE,EAAE,IAAE,IAAE,KAAG;AAAA,QAAG,IAAM,KAAH;AAAA,UAAK;AAAA,QAAM,KAAG,OAAO,aAAa,CAAC;AAAA,MAAC;AAAA,MAAC,OAAO;AAAA;AAAA,IAC7Z,SAAS,EAAE,CAAC,GAAE,GAAE,GAAE;AAAA,MAAU,MAAJ,cAAQ,IAAE;AAAA,MAAY,IAAG,IAAE;AAAA,QAAE,OAAO;AAAA,MAAE,KAAG;AAAA,MAAE,IAAI,IAAE;AAAA,MAAE,IAAE,IAAE,IAAE,EAAE,SAAO,IAAE,IAAE,EAAE;AAAA,MAAO,SAAQ,IAAE,EAAE,IAAE,KAAI;AAAA,QAAE,EAAE,KAAG,KAAG,EAAE,WAAW,CAAC,GAAE,KAAG;AAAA,MAAE,EAAE,KAAG,KAAG;AAAA,MAAE,OAAO,IAAE;AAAA;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,OAAO,IAAE,EAAE;AAAA;AAAA,IAAO,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,SAAQ,IAAE,GAAE,IAAE,KAAK,KAAG,IAAE,MAAI;AAAA,QAAC,IAAI,IAAE,EAAE,IAAE,IAAE,KAAG;AAAA,QAAG,IAAM,KAAH;AAAA,UAAK;AAAA,UAAQ;AAAA,QAAE,SAAO,KAAG,KAAG,OAAM,KAAG,OAAO,aAAa,QAAM,KAAG,IAAG,QAAM,IAAE,IAAI,KAAG,KAAG,OAAO,aAAa,CAAC;AAAA,MAAC;AAAA,MAAC,OAAO;AAAA;AAAA,IACtY,SAAS,EAAE,CAAC,GAAE,GAAE,GAAE;AAAA,MAAU,MAAJ,cAAQ,IAAE;AAAA,MAAY,IAAG,IAAE;AAAA,QAAE,OAAO;AAAA,MAAE,IAAI,IAAE;AAAA,MAAE,IAAE,IAAE,IAAE;AAAA,MAAE,SAAQ,IAAE,EAAE,IAAE,EAAE,UAAS,GAAE;AAAA,QAAC,IAAI,IAAE,EAAE,WAAW,CAAC;AAAA,QAAE,IAAG,SAAO,KAAG,SAAO,GAAE;AAAA,UAAC,IAAI,IAAE,EAAE,aAAa,CAAC;AAAA,UAAE,IAAE,UAAQ,IAAE,SAAO,MAAI,IAAE;AAAA,QAAI;AAAA,QAAC,EAAE,KAAG,KAAG;AAAA,QAAE,KAAG;AAAA,QAAE,IAAG,IAAE,IAAE;AAAA,UAAE;AAAA,MAAK;AAAA,MAAC,EAAE,KAAG,KAAG;AAAA,MAAE,OAAO,IAAE;AAAA;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,SAAQ,IAAE,GAAE,IAAE,EAAE,IAAE,EAAE,UAAS,GAAE;AAAA,QAAC,IAAI,IAAE,EAAE,WAAW,CAAC;AAAA,QAAE,SAAO,KAAG,SAAO,OAAK;AAAA,QAAE,KAAG;AAAA,MAAC;AAAA,MAAC,OAAO;AAAA;AAAA,IAAE,IAAI,KAAG,CAAC;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,IAAI,IAAE,GAAG;AAAA,MAAG,OAAgB,MAAJ,YAAM,EAAE,CAAC,IAAE;AAAA;AAAA,IAAE,IAAI,KAAG,CAAC;AAAA,IAAE,SAAS,EAAE,CAAC,GAAE;AAAA,MAAC,IAAI,IAAE,GAAG;AAAA,MAAO,GAAG,KAAK,CAAC;AAAA,MAAE,OAAO;AAAA;AAAA,IACpe,SAAS,EAAE,CAAC,GAAE,GAAE;AAAA,MAAC,SAAQ,IAAE,MAAM,CAAC,GAAE,IAAE,EAAE,IAAE,KAAI;AAAA,QAAE,EAAE,KAAG,GAAG,EAAE,IAAE,IAAE,KAAG,IAAG,eAAa,CAAC;AAAA,MAAE,OAAO;AAAA;AAAA,IAAE,IAAI,KAAG,CAAC,GAAE,KAAG,CAAC,MAAK,CAAC,GAAE,CAAC,CAAC;AAAA,IAAE,IAAE,EAAE,eAAa,GAAG,cAAc;AAAA,IAAE,EAAE,sBAAoB,QAAQ,GAAE;AAAA,MAAC,SAAQ,IAAE,GAAE,IAAE,EAAE,IAAE,EAAE,UAAS;AAAA,QAAW,EAAE,OAAN,eAAY;AAAA,MAAE,OAAO;AAAA;AAAA,IAAG,EAAE,kBAAgB,QAAQ,GAAE;AAAA,MAAC,SAAQ,IAAE,EAAE,IAAE,EAAE,UAAS;AAAA,QAAE,IAAY,EAAE,OAAN;AAAA,UAAS,OAAO,EAAE;AAAA,MAAG,OAAO;AAAA;AAAA,IAAM,KAAG,EAAE,mBAAiB,GAAG,kBAAkB;AAAA,IAAE,SAAQ,KAAG,MAAM,GAAG,GAAE,KAAG,EAAE,MAAI,MAAK;AAAA,MAAG,GAAG,MAAI,OAAO,aAAa,EAAE;AAAA,IAAE,KAAG;AAAA,IAAG,EAAE,4BAA0B,QAAQ,GAAE;AAAA,MAAC,OAAO,OAAO,KAAK,CAAC,EAAE;AAAA;AAAA,IAChhB,EAAE,4BAA0B,QAAQ,GAAE;AAAA,MAAC,IAAI,IAAE,CAAC,GAAE;AAAA,MAAE,KAAI,KAAK;AAAA,QAAE,EAAE,eAAe,CAAC,KAAG,EAAE,KAAK,EAAE,EAAE;AAAA,MAAE,OAAO;AAAA;AAAA,IAAG,EAAE,sBAAoB;AAAA,IAAG,EAAE,mBAAiB,QAAQ,CAAC,GAAE;AAAA,MAAC,IAAE;AAAA,MAAE,EAAE,UAAQ,KAAG,EAAE,EAAE;AAAA;AAAA,IAAG,KAAG,EAAE,gBAAc,GAAG,eAAe;AAAA,IAAE,EAAE,UAAU,YAAU,QAAQ,CAAC,GAAE;AAAA,MAAC,MAAK,gBAAgB,KAAG,aAAa;AAAA,QAAG,OAAM;AAAA,MAAG,IAAI,IAAE,KAAK,EAAE,EAAE,GAAE,IAAE,KAAK,EAAE,GAAE,IAAE,EAAE,EAAE,EAAE;AAAA,MAAE,KAAI,IAAE,EAAE,EAAE,EAAE,EAAE;AAAA,QAAG,IAAE,EAAE,GAAG,CAAC,GAAE,IAAE,EAAE;AAAA,MAAE,MAAK,EAAE;AAAA,QAAG,IAAE,EAAE,GAAG,CAAC,GAAE,IAAE,EAAE;AAAA,MAAE,OAAO,MAAI,KAAG,MAAI;AAAA;AAAA,IACta,EAAE,UAAU,QAAM,QAAQ,GAAE;AAAA,MAAC,KAAK,EAAE,KAAG,GAAG,IAAI;AAAA,MAAE,IAAG,KAAK,EAAE;AAAA,QAAG,OAAO,KAAK,EAAE,MAAM,SAAO,GAAE;AAAA,MAAK,IAAI,IAAE,GAAE,IAAE,QAAO,IAAE,EAAE,QAAO,IAAE,OAAO,eAAe,IAAI,GAAE,IAAE,KAAK;AAAA,MAAE,IAAE,EAAE,EAAE,KAAK,GAAE,GAAE,EAAC,GAAE,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,GAAE,EAAE,GAAE,IAAG,EAAE,IAAG,GAAE,EAAE,GAAE,GAAE,EAAE,GAAE,GAAE,EAAE,GAAE,GAAE,EAAE,EAAC,EAAC,EAAC,CAAC,CAAC;AAAA,MAAE,EAAE,EAAE,MAAM,SAAO;AAAA,MAAE,EAAE,EAAE,IAAE;AAAA,MAAG,OAAO;AAAA;AAAA,IAAG,EAAE,UAAU,YAAU,QAAQ,GAAE;AAAA,MAAC,KAAK,EAAE,KAAG,GAAG,IAAI;AAAA,MAAE,KAAK,EAAE,MAAI,KAAK,EAAE,MAAI,EAAE,uCAAuC;AAAA,MAAE,GAAG,IAAI;AAAA,MAAE,GAAG,KAAK,CAAC;AAAA,MAAE,KAAK,EAAE,OAAK,KAAK,EAAE,IAAO,WAAE,KAAK,EAAE,IAAO;AAAA;AAAA,IAAI,EAAE,UAAU,YAAU,QAAQ,GAAE;AAAA,MAAC,QAAO,KAAK,EAAE;AAAA;AAAA,IACjgB,EAAE,UAAU,cAAY,QAAQ,GAAE;AAAA,MAAC,KAAK,EAAE,KAAG,GAAG,IAAI;AAAA,MAAE,KAAK,EAAE,MAAI,KAAK,EAAE,MAAI,EAAE,uCAAuC;AAAA,MAAE,EAAE,KAAK,IAAI;AAAA,MAAM,EAAE,WAAN,KAAc,KAAG,EAAE,EAAE;AAAA,MAAE,KAAK,EAAE,IAAE;AAAA,MAAG,OAAO;AAAA;AAAA,IAAM,EAAE,UAAU,KAAG,QAAQ,CAAC,GAAE;AAAA,MAAC,KAAK,OAAK,IAAE,KAAK,GAAG,CAAC;AAAA,MAAG,OAAO;AAAA;AAAA,IAAG,EAAE,UAAU,KAAG,QAAQ,CAAC,GAAE;AAAA,MAAC,KAAK,KAAG,KAAK,EAAE,CAAC;AAAA;AAAA,IAAG,EAAE,UAAU,iBAAe;AAAA,IAAE,EAAE,UAAU,uBAAqB;AAAA,IAAG,EAAE,UAAU,eAAa,QAAQ,CAAC,GAAE;AAAA,MAAC,IAAU,MAAP;AAAA,QAAS,EAAE,UAAU;AAAA;AAAA,IAC7Z,EAAE,UAAU,eAAa,QAAQ,CAAC,GAAE;AAAA,MAAC,SAAS,CAAC,GAAE;AAAA,QAAC,OAAO,KAAK,KAAG,GAAG,KAAK,EAAE,GAAE,EAAC,GAAE,KAAK,IAAG,GAAE,GAAE,GAAE,MAAK,GAAE,EAAC,CAAC,IAAE,GAAG,KAAK,EAAE,GAAE,EAAC,GAAE,MAAK,GAAE,EAAC,CAAC;AAAA;AAAA,MAAE,IAAI,IAAE,KAAK,GAAG,CAAC;AAAA,MAAE,KAAI;AAAA,QAAE,OAAO,KAAK,GAAG,CAAC,GAAE;AAAA,MAAK,IAAI,IAAE,GAAG,KAAK,GAAE,CAAC;AAAA,MAAE,IAAY,MAAJ,WAAM;AAAA,QAAC,IAAO,EAAE,EAAE,MAAM,UAAd;AAAA,UAAoB,OAAO,EAAE,EAAE,IAAE,GAAE,EAAE,EAAE,IAAE,GAAE,EAAE,MAAM;AAAA,QAAE,IAAE,EAAE,MAAM;AAAA,QAAE,KAAK,GAAG,CAAC;AAAA,QAAE,OAAO;AAAA,MAAC;AAAA,MAAC,IAAE,KAAK,EAAE,GAAG,CAAC;AAAA,MAAE,IAAE,GAAG;AAAA,MAAG,KAAI;AAAA,QAAE,OAAO,EAAE,KAAK,IAAI;AAAA,MAAE,IAAE,KAAK,KAAG,EAAE,KAAG,EAAE;AAAA,MAAY,IAAI,IAAE,GAAG,GAAE,KAAK,GAAE,EAAE,CAAC;AAAA,MAAE,OAAc,MAAP,OAAS,EAAE,KAAK,IAAI,IAAE,KAAK,KAAG,GAAG,EAAE,EAAE,GAAE,EAAC,GAAE,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,EAAC,CAAC,IAAE,GAAG,EAAE,EAAE,GAAE,EAAC,GAAE,GAAE,GAAE,EAAC,CAAC;AAAA;AAAA,IACte,KAAG,EAAE,mBAAiB,GAAG,kBAAkB;AAAA,IAC3C,IAAI,KAAe,OAAO,QAAnB,aAAwB,OAAK,QAAQ,CAAC,GAAE;AAAA,MAAC,IAAI,IAAE,IAAG,IAAE;AAAA,MAAE,IAAE,EAAE,QAAQ,sBAAqB,EAAE;AAAA,MAAE,GAAE;AAAA,QAAC,IAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAA,QAAE,IAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAA,QAAE,IAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAA,QAAE,IAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAA,QAAE,IAAE,KAAG,IAAE,KAAG;AAAA,QACnf,KAAG,IAAE,OAAK,IAAE,KAAG;AAAA,QAAE,IAAI,KAAG,IAAE,MAAI,IAAE;AAAA,QAAE,KAAG,OAAO,aAAa,CAAC;AAAA,QAAO,MAAL,OAAS,KAAG,OAAO,aAAa,CAAC;AAAA,QAAQ,MAAL,OAAS,KAAG,OAAO,aAAa,CAAC;AAAA,MAAE,SAAO,IAAE,EAAE;AAAA,MAAQ,OAAO;AAAA,OAAG,KAAG;AAAA,MAAC,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,EAAE,wBAAsB,IAAE,EAAE,GAAE,CAAC,IAAE,MAAI,WAAS,CAAC,IAAE,IAAE,EAAE,GAAE,CAAC,IAAE,KAAG,oBAAmB,GAAE,IAAE,IAAE,EAAE,GAAE,CAAC,IAAE,KAAG,kBAAkB,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE;AAAA,QAAC,IAAE,EAAE,CAAC;AAAA,QAAE,IAAE,GAAG,GAAE,SAAS;AAAA,QAAE,IAAE,EAAE,CAAC;AAAA,QAAE,IAAI,IAAE,CAAC,EAAE,OAAM,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE,EAAE,GAAE,IAAE,EAAE,EAAE;AAAA,QAAY,IAAE,GAAG,GAAE,QAAQ,GAAE;AAAA,UAAC,EAAE,EAAE,GAAG,QAAQ,QAAQ,CAAC,GAAE;AAAA,YAAC,IAAG,KAAK,OAAK,EAAE;AAAA,cAAG,MAAM,IAAI,GAAG,2BACje,IAAE,oCAAoC;AAAA,YAAI,KAAK,IAAI,CAAC;AAAA,UAAE,OAAO,eAAe,MAAK,YAAW,EAAC,OAAM,EAAC,CAAC;AAAA,UAAE,KAAK,YAAY,MAAM,MAAK,EAAE,KAAK,SAAS,CAAC;AAAA,SAAE;AAAA,QAAE,EAAE,cAAY,QAAQ,GAAE;AAAA,UAAC,SAAO,KAAG,EAAE,oCAAoC;AAAA,UAAE,IAAI,IAAE,EAAE,UAAU,MAAW,WAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC;AAAA,UAAE,GAAG,CAAC;AAAA,UAAE,IAAI,IAAE,EAAE;AAAA,UAAE,EAAE,oBAAoB;AAAA,UAAE,EAAE,KAAG;AAAA,UAAG,OAAO,iBAAiB,MAAK,EAAC,GAAE,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,UAAE,EAAE,IAAI;AAAA,UAAE,IAAE,EAAE;AAAA,UAAE,IAAE,GAAG,GAAE,CAAC;AAAA,UAAE,EAAE,eAAe,CAAC,IAAE,EAAE,4CAA0C,CAAC,IAAE,EAAE,KAAG;AAAA;AAAA,QAAM,EAAE,aAAW,QAAQ,GAAE;AAAA,UAAC,SAC9f,KAAG,EAAE,mCAAmC;AAAA,UAAE,GAAG,IAAI;AAAA,UAAE,IAAI,IAAE,KAAK,EAAE;AAAA,UAAE,IAAE,GAAG,GAAE,CAAC;AAAA,UAAE,EAAE,eAAe,CAAC,IAAE,OAAO,EAAE,KAAG,EAAE,gDAA8C,CAAC;AAAA;AAAA,QAAG,EAAE,YAAU,OAAO,OAAO,CAAC;AAAA,QAAE,SAAQ,KAAK;AAAA,UAAE,EAAE,UAAU,KAAG,EAAE;AAAA,QAAG,OAAO,GAAG,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE;AAAA,QAAC,IAAI,IAAE,GAAG;AAAA,QAAG,OAAO,GAAG;AAAA,QAAG,MAAQ,IAAJ,GAAW,GAAJ,GAAU,IAAJ,MAAJ,GAAW,IAAE,EAAE,IAAI,OAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,OAAG,EAAE,EAAE,CAAC;AAAA,QAAE,EAAE,CAAC,CAAC,GAAE,GAAE,OAAG;AAAA,UAAC,IAAI,IAAE,CAAC;AAAA,UAAE,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAA,YAAC,IAAI,IAAE,EAAE,IAAG,IAAE,EAAE,IAAG,IAAE,EAAE,IAAG,IAAE,EAAE,IAAE,EAAE,SAAQ,IAAE,EAAE,IAAG,IAAE,EAAE;AAAA,YAAG,EAAE,EAAE,MAAI,EAAC,MAAK,OAAG,EAAE,aAAa,EAAE,GAAE,CAAC,CAAC,GAAE,OAAM,CAAC,GAAE,OAAK;AAAA,cAAC,IAAI,IAAE,CAAC;AAAA,cAAE,EAAE,GACrf,GAAE,EAAE,WAAW,GAAE,EAAE,CAAC;AAAA,cAAE,GAAG,CAAC;AAAA,cAAE;AAAA,WAAE;AAAA,UAAE,OAAM,CAAC,EAAC,MAAK,EAAE,MAAK,cAAa,QAAQ,CAAC,GAAE;AAAA,YAAC,IAAI,IAAE,CAAC,GAAE;AAAA,YAAE,KAAI,KAAK;AAAA,cAAE,EAAE,KAAG,EAAE,GAAG,KAAK,CAAC;AAAA,YAAE,EAAE,CAAC;AAAA,YAAE,OAAO;AAAA,aAAG,YAAW,QAAQ,CAAC,GAAE,GAAE;AAAA,YAAC,SAAQ,KAAK;AAAA,cAAE,MAAK,KAAK;AAAA,gBAAG,MAAM,IAAI,UAAU,sBAAoB,IAAE,GAAG;AAAA,YAAE,IAAI,IAAE,EAAE;AAAA,YAAE,KAAI,KAAK;AAAA,cAAE,EAAE,GAAG,MAAM,GAAE,EAAE,EAAE;AAAA,YAAS,MAAP,QAAU,EAAE,KAAK,GAAE,CAAC;AAAA,YAAE,OAAO;AAAA,aAAG,gBAAe,GAAE,sBAAqB,IAAG,GAAE,EAAC,CAAC;AAAA,SAAE;AAAA;AAAA,MAAG,GAAE,QAAQ,GAAE;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,IAAI,IAAE,GAAG,CAAC;AAAA,QAAE,IAAE,EAAE,CAAC;AAAA,QAAE,EAAE,GAAE;AAAA,UAAC,MAAK;AAAA,UAAE,cAAa,QAAQ,CAAC,GAAE;AAAA,YAAC,SAAQ;AAAA;AAAA,UAAG,YAAW,QAAQ,CAAC,GAAE,GAAE;AAAA,YAAC,OAAO,IAAE,IAAE;AAAA;AAAA,UAAG,gBAAe;AAAA,UAChgB,sBAAqB,QAAQ,CAAC,GAAE;AAAA,YAAC,IAAO,MAAJ;AAAA,cAAM,IAAI,IAAE;AAAA,YAAQ,SAAO,MAAJ;AAAA,cAAM,IAAE;AAAA,YAAO,SAAO,MAAJ;AAAA,cAAM,IAAE;AAAA,YAAO;AAAA,oBAAM,IAAI,UAAU,gCAA8B,CAAC;AAAA,YAAE,OAAO,KAAK,aAAa,EAAE,KAAG,EAAE;AAAA;AAAA,UAAG,GAAE;AAAA,QAAI,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,IAAE,EAAE,CAAC;AAAA,QAAE,IAAE,EAAE,GAAE,CAAC;AAAA,QAAE,MAAI,IAAE,EAAE,GAAE,CAAC;AAAA,QAAG,MAAI,IAAE,EAAE,GAAE,CAAC;AAAA,QAAG,IAAE,EAAE,GAAE,CAAC;AAAA,QAAE,IAAI,IAAE,GAAG,CAAC;AAAA,QAAE,GAAG,GAAE,QAAQ,GAAE;AAAA,UAAC,GAAG,sBAAoB,IAAE,yBAAwB,CAAC,CAAC,CAAC;AAAA,SAAE;AAAA,QAAE,EAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,IAAE,CAAC,GAAE,QAAQ,CAAC,GAAE;AAAA,UAAC,IAAE,EAAE;AAAA,UAAG,IAAG,GAAE;AAAA,YAAC,IAAI,IAAE,EAAE;AAAA,YAAE,IAAI,IAAE,EAAE;AAAA,UAAC,EAAM;AAAA,gBAAE,EAAE;AAAA,UAAU,IAAE,GAAG,GAAE,QAAQ,GAAE;AAAA,YAAC,IAAG,OAAO,eAAe,IAAI,MAAI;AAAA,cAAG,MAAM,IAAI,EAAE,4BAClgB,CAAC;AAAA,YAAE,IAAY,EAAE,MAAN;AAAA,cAAQ,MAAM,IAAI,EAAE,IAAE,gCAAgC;AAAA,YAAE,IAAI,KAAG,EAAE,EAAE,UAAU;AAAA,YAAQ,IAAY,OAAJ;AAAA,cAAO,MAAM,IAAI,EAAE,6BAA2B,IAAE,yCAAuC,UAAU,SAAO,mBAAiB,OAAO,KAAK,EAAE,CAAC,EAAE,SAAS,IAAE,uBAAuB;AAAA,YAAE,OAAO,GAAG,MAAM,MAAK,SAAS;AAAA,WAAE;AAAA,UAAE,IAAI,KAAG,OAAO,OAAO,GAAE,EAAC,aAAY,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,UAAE,EAAE,YAAU;AAAA,UAAG,IAAI,IAAE,IAAI,GAAG,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,UAAE,IAAE,IAAI,EAAE,GAAE,GAAE,MAAG,KAAE;AAAA,UAAE,IAAE,IAAI,EAAE,IAAE,KAAI,GAAE,OAAG,KAAE;AAAA,UAAE,IAAI,KAAG,IAAI,EAAE,IAAE,WAAU,GAAE,OAAG,IAAE;AAAA,UAAE,GAAG,KAAG;AAAA,YAAC,aAAY;AAAA,YACrf,IAAG;AAAA,UAAE;AAAA,UAAE,GAAG,GAAE,CAAC;AAAA,UAAE,OAAM,CAAC,GAAE,GAAE,EAAE;AAAA,SAAE;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,IAAI,IAAE,GAAG,GAAE,CAAC;AAAA,QAAE,IAAE,EAAE,CAAC;AAAA,QAAE,IAAE,EAAE,GAAE,CAAC;AAAA,QAAE,EAAE,CAAC,GAAE,CAAC,CAAC,GAAE,QAAQ,CAAC,GAAE;AAAA,UAAC,SAAS,CAAC,GAAE;AAAA,YAAC,GAAG,iBAAe,IAAE,yBAAwB,CAAC;AAAA;AAAA,UAAE,IAAE,EAAE;AAAA,UAAG,IAAI,IAAE,EAAE,OAAK,MAAI;AAAA,UAAE,EAAE,WAAW,IAAI,MAAI,IAAE,OAAO,EAAE,UAAU,CAAC;AAAA,UAAI,IAAI,IAAE,EAAE,EAAE;AAAA,UAAqB,EAAE,OAAN,aAAU,EAAE,IAAE,IAAE,GAAE,EAAE,KAAG,MAAI,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,GAAG,EAAE,IAAE,KAAG;AAAA,UAAG,EAAE,CAAC,GAAE,GAAE,QAAQ,CAAC,GAAE;AAAA,YAAC,IAAE,GAAG,GAAE,CAAC,EAAE,IAAG,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,GAAE,MAAK,GAAE,CAAC;AAAA,YAAW,EAAE,GAAG,MAAT,aAAY,EAAE,IAAE,IAAE,GAAE,EAAE,KAAG,KAAG,EAAE,GAAG,EAAE,IAAE,KAAG;AAAA,YAAE,OAAM,CAAC;AAAA,WAAE;AAAA,UAAE,OAAM,CAAC;AAAA,SAAE;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,IAAE,KAAG,EAAE;AAAA,QAAE,IAAI,IAAE,GAAG,GACrf,CAAC;AAAA,QAAE,IAAE,EAAE,GAAE,CAAC;AAAA,QAAE,EAAE,CAAC,GAAE,CAAC,CAAC,GAAE,QAAQ,CAAC,GAAE;AAAA,UAAC,IAAE,EAAE;AAAA,UAAG,IAAI,IAAE,iBAAe,EAAE;AAAA,UAAc,EAAE,EAAE,MAAR,cAAY,EAAE,EAAE,IAAE,CAAC;AAAA,UAAG,IAAY,EAAE,EAAE,EAAE,IAAE,OAAZ;AAAA,YAAe,MAAM,IAAI,EAAE,iFAA+E,IAAE,KAAG,kBAAgB,EAAE,OAAK,qGAAqG;AAAA,UAAE,EAAE,EAAE,EAAE,IAAE,KAAG,MAAI;AAAA,YAAC,GAAG,sBAAoB,EAAE,OAAK,yBAAwB,CAAC;AAAA;AAAA,UAAG,EAAE,CAAC,GAAE,GAAE,QAAQ,CAAC,GAAE;AAAA,YAAC,EAAE,OAAO,GAAE,GAAE,IAAI;AAAA,YAAE,EAAE,EAAE,EAAE,IAAE,KAAG,GAAG,GAAE,GAAE,MAAK,GAAE,CAAC;AAAA,YAAE,OAAM,CAAC;AAAA,WAAE;AAAA,UAAE,OAAM,CAAC;AAAA,SAAE;AAAA;AAAA,MACpf,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,IAAI,IAAE,GAAG,GAAE,CAAC;AAAA,QAAE,IAAE,EAAE,CAAC;AAAA,QAAE,IAAE,EAAE,GAAE,CAAC;AAAA,QAAE,EAAE,CAAC,GAAE,CAAC,CAAC,GAAE,QAAQ,CAAC,GAAE;AAAA,UAAC,SAAS,CAAC,GAAE;AAAA,YAAC,GAAG,iBAAe,IAAE,yBAAwB,CAAC;AAAA;AAAA,UAAE,IAAE,EAAE;AAAA,UAAG,IAAI,IAAE,EAAE,OAAK,MAAI;AAAA,UAAE,EAAE,WAAW,IAAI,MAAI,IAAE,OAAO,EAAE,UAAU,CAAC;AAAA,UAAI,KAAG,EAAE,EAAE,GAAG,KAAK,CAAC;AAAA,UAAE,IAAI,IAAE,EAAE,EAAE,GAAE,IAAE,EAAE;AAAA,UAAY,MAAJ,aAAgB,EAAE,MAAN,aAAS,EAAE,cAAY,EAAE,QAAM,EAAE,MAAI,IAAE,KAAG,EAAE,IAAE,IAAE,GAAE,EAAE,YAAU,EAAE,MAAK,EAAE,KAAG,MAAI,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,GAAG,EAAE,IAAE,KAAG;AAAA,UAAG,EAAE,CAAC,GAAE,GAAE,QAAQ,CAAC,GAAE;AAAA,YAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,YAAW,EAAE,GAAG,MAAT,aAAY,EAAE,IAAE,IAAE,GAAE,EAAE,KAAG,KAAG,EAAE,GAAG,EAAE,IAAE,KAAG;AAAA,YAAE,OAAM,CAAC;AAAA,WAAE;AAAA,UAAE,OAAM,CAAC;AAAA,SAAE;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE;AAAA,QAAC,IAAE,EAAE,CAAC;AAAA,QAAE,EAAE,GACnf,EAAC,MAAK,GAAE,cAAa,QAAQ,CAAC,GAAE;AAAA,UAAC,IAAI,IAAE,EAAE,CAAC;AAAA,UAAE,GAAG,CAAC;AAAA,UAAE,OAAO;AAAA,WAAG,YAAW,QAAQ,CAAC,GAAE,GAAE;AAAA,UAAC,OAAO,GAAG,CAAC;AAAA,WAAG,gBAAe,GAAE,sBAAqB,IAAG,GAAE,KAAI,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE;AAAA,QAAC,IAAE,GAAG,CAAC;AAAA,QAAE,IAAE,EAAE,CAAC;AAAA,QAAE,EAAE,GAAE,EAAC,MAAK,GAAE,cAAa,QAAQ,CAAC,GAAE;AAAA,UAAC,OAAO;AAAA,WAAG,YAAW,QAAQ,CAAC,GAAE,GAAE;AAAA,UAAC,OAAO;AAAA,WAAG,gBAAe,GAAE,sBAAqB,GAAG,GAAE,CAAC,GAAE,GAAE,KAAI,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,IAAE,EAAE,CAAC;AAAA,QAAO,MAAL,OAAS,IAAE;AAAA,QAAY,IAAE,GAAG,CAAC;AAAA,QAAE,IAAI,IAAE,OAAG;AAAA,QAAE,IAAO,MAAJ,GAAM;AAAA,UAAC,IAAI,IAAE,KAAG,IAAE;AAAA,UAAE,IAAE,OAAG,KAAG,MAAI;AAAA,QAAC;AAAA,QAAC,IAAE,EAAE,SAAS,UAAU,IAAE,QAAQ,CAAC,GAAE,GAAE;AAAA,UAAC,OAAO,MAAI;AAAA,YAAG,QAAQ,CAAC,GAAE,GAAE;AAAA,UAAC,OAAO;AAAA;AAAA,QACvf,EAAE,GAAE,EAAC,MAAK,GAAE,cAAa,GAAE,YAAW,GAAE,gBAAe,GAAE,sBAAqB,GAAG,GAAE,GAAM,MAAJ,CAAK,GAAE,GAAE,KAAI,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE;AAAA,QAAC,SAAS,CAAC,CAAC,GAAE;AAAA,UAAC,MAAI;AAAA,UAAE,IAAI,IAAE;AAAA,UAAE,OAAO,IAAI,EAAE,IAAG,EAAE,IAAE,IAAG,EAAE,EAAE;AAAA;AAAA,QAAE,IAAI,IAAE,CAAC,WAAU,YAAW,YAAW,aAAY,YAAW,aAAY,cAAa,YAAY,EAAE;AAAA,QAAG,IAAE,EAAE,CAAC;AAAA,QAAE,EAAE,GAAE,EAAC,MAAK,GAAE,cAAa,GAAE,gBAAe,GAAE,sBAAqB,EAAC,GAAE,EAAC,IAAG,KAAE,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE;AAAA,QAAC,IAAE,EAAE,CAAC;AAAA,QAAE,IAAI,IAAkB,MAAhB;AAAA,QAAkB,EAAE,GAAE,EAAC,MAAK,GAAE,cAAa,QAAQ,CAAC,GAAE;AAAA,UAAC,IAAI,IAAE,EAAE,KAAG,IAAG,IAAE,IAAE;AAAA,UAAE,IAAG;AAAA,YAAE,SAAQ,IAAE,GAAE,IAAE,EAAE,KAAG,KAAI,GAAE;AAAA,cAAC,IAAI,IACzf,IAAE;AAAA,cAAE,IAAG,KAAG,KAAM,EAAE,MAAL,GAAQ;AAAA,gBAAC,IAAE,IAAE,EAAE,GAAE,GAAE,IAAE,CAAC,IAAE;AAAA,gBAAG,IAAY,MAAJ;AAAA,kBAAM,IAAI,IAAE;AAAA,gBAAO;AAAA,uBAAG,OAAO,aAAa,CAAC,GAAE,KAAG;AAAA,gBAAE,IAAE,IAAE;AAAA,cAAC;AAAA,YAAC;AAAA,UAAK;AAAA,YAAC,IAAE,MAAM,CAAC;AAAA,YAAE,KAAI,IAAE,EAAE,IAAE,KAAI;AAAA,cAAE,EAAE,KAAG,OAAO,aAAa,EAAE,IAAE,EAAE;AAAA,YAAE,IAAE,EAAE,KAAK,EAAE;AAAA;AAAA,UAAE,EAAE,CAAC;AAAA,UAAE,OAAO;AAAA,WAAG,YAAW,QAAQ,CAAC,GAAE,GAAE;AAAA,UAAC,aAAa,gBAAc,IAAE,IAAI,WAAW,CAAC;AAAA,UAAG,IAAI,GAAE,IAAY,OAAO,KAAjB;AAAA,UAAmB,KAAG,aAAa,cAAY,aAAa,qBAAmB,aAAa,aAAW,EAAE,uCAAuC;AAAA,UAAE,IAAG,KAAG,GAAE;AAAA,YAAC,IAAI,IAAE;AAAA,YAAE,KAAI,IAAE,EAAE,IAAE,EAAE,UAAS,GAAE;AAAA,cAAC,IAAI,IAAE,EAAE,WAAW,CAAC;AAAA,cAAE,OAAK,IAAE,MAAI,QACnf,IAAE,KAAG,IAAE,SAAO,KAAG,SAAO,KAAG,KAAG,KAAI,KAAG,KAAG;AAAA,YAAC;AAAA,YAAC,IAAE;AAAA,UAAC,EAAM;AAAA,gBAAE,EAAE;AAAA,UAAO,IAAE,GAAG,IAAE,IAAE,CAAC;AAAA,UAAE,IAAE,IAAE;AAAA,UAAE,EAAE,KAAG,KAAG;AAAA,UAAE,IAAG,KAAG,GAAE;AAAA,YAAC,IAAG,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE;AAAA,cAAC,IAAE,IAAE,IAAE;AAAA,cAAE,SAAQ,IAAE,EAAE,IAAE,EAAE,UAAS,GAAE;AAAA,gBAAC,IAAI,IAAE,EAAE,WAAW,CAAC;AAAA,gBAAE,IAAG,SAAO,KAAG,SAAO,GAAE;AAAA,kBAAC,IAAI,IAAE,EAAE,aAAa,CAAC;AAAA,kBAAE,IAAE,UAAQ,IAAE,SAAO,MAAI,IAAE;AAAA,gBAAI;AAAA,gBAAC,IAAG,OAAK,GAAE;AAAA,kBAAC,IAAG,KAAG;AAAA,oBAAE;AAAA,kBAAM,EAAE,OAAK;AAAA,gBAAC,EAAK;AAAA,kBAAC,IAAG,QAAM,GAAE;AAAA,oBAAC,IAAG,IAAE,KAAG;AAAA,sBAAE;AAAA,oBAAM,EAAE,OAAK,MAAI,KAAG;AAAA,kBAAC,EAAK;AAAA,oBAAC,IAAG,SAAO,GAAE;AAAA,sBAAC,IAAG,IAAE,KAAG;AAAA,wBAAE;AAAA,sBAAM,EAAE,OAAK,MAAI,KAAG;AAAA,oBAAE,EAAK;AAAA,sBAAC,IAAG,IAAE,KAAG;AAAA,wBAAE;AAAA,sBAAM,EAAE,OAAK,MAAI,KAAG;AAAA,sBAAG,EAAE,OAAK,MAAI,KAAG,KAAG;AAAA;AAAA,oBAAG,EAAE,OAAK,MAAI,KAAG,IAAE;AAAA;AAAA,kBAAG,EAAE,OAAK,MAAI,IAAE;AAAA;AAAA,cAAG;AAAA,cAAC,EAAE,KAAG;AAAA,YAAC;AAAA,UAAC,EAAM,SAAG;AAAA,YAAE,KAAI,IAC1f,EAAE,IAAE,KAAI;AAAA,cAAE,IAAE,EAAE,WAAW,CAAC,GAAE,MAAI,MAAI,EAAE,CAAC,GAAE,EAAE,wDAAwD,IAAG,EAAE,IAAE,KAAG;AAAA,UAAO;AAAA,iBAAI,IAAE,EAAE,IAAE,KAAI;AAAA,cAAE,EAAE,IAAE,KAAG,EAAE;AAAA,UAAU,MAAP,QAAU,EAAE,KAAK,GAAE,CAAC;AAAA,UAAE,OAAO;AAAA,WAAG,gBAAe,GAAE,sBAAqB,IAAG,GAAE,QAAQ,CAAC,GAAE;AAAA,UAAC,EAAE,CAAC;AAAA,UAAE,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE;AAAA,QAAC,IAAE,EAAE,CAAC;AAAA,QAAE,IAAO,MAAJ,GAAM;AAAA,UAAC,IAAI,IAAE;AAAA,UAAG,IAAI,IAAE;AAAA,UAAG,IAAI,IAAE;AAAA,UAAG,IAAI,IAAE,MAAI;AAAA,UAAG,IAAI,IAAE;AAAA,QAAC,EAAM;AAAA,UAAI,MAAJ,MAAQ,IAAE,IAAG,IAAE,IAAG,IAAE,IAAG,IAAE,MAAI,GAAE,IAAE;AAAA,QAAG,EAAE,GAAE,EAAC,MAAK,GAAE,cAAa,QAAQ,CAAC,GAAE;AAAA,UAAC,SAAQ,IAAE,EAAE,KAAG,IAAG,IAAE,EAAE,GAAE,GAAE,IAAE,IAAE,GAAE,IAAE,EAAE,KAAG,KAAI,GAAE;AAAA,YAAC,IAAI,IAAE,IAAE,IAAE,IAAE;AAAA,YAAE,IAAG,KAAG,KAAM,EAAE,KAAG,MAAR;AAAA,cAAW,IAAE,EAAE,GAAE,IAAE,CAAC,GAC1e,MADif,YAC/e,IAAE,KAAG,KAAG,OAAO,aAAa,CAAC,GAAE,KAAG,IAAG,IAAE,IAAE;AAAA,UAAC;AAAA,UAAC,EAAE,CAAC;AAAA,UAAE,OAAO;AAAA,WAAG,YAAW,QAAQ,CAAC,GAAE,GAAE;AAAA,UAAW,OAAO,KAAjB,YAAoB,EAAE,+CAA6C,CAAC;AAAA,UAAE,IAAI,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,IAAE,IAAE,CAAC;AAAA,UAAE,EAAE,KAAG,KAAG,KAAG;AAAA,UAAE,EAAE,GAAE,IAAE,GAAE,IAAE,CAAC;AAAA,UAAS,MAAP,QAAU,EAAE,KAAK,GAAE,CAAC;AAAA,UAAE,OAAO;AAAA,WAAG,gBAAe,GAAE,sBAAqB,IAAG,GAAE,QAAQ,CAAC,GAAE;AAAA,UAAC,EAAE,CAAC;AAAA,UAAE,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,GAAG,KAAG,EAAC,MAAK,EAAE,CAAC,GAAE,IAAG,EAAE,GAAE,CAAC,GAAE,GAAE,EAAE,GAAE,CAAC,GAAE,IAAG,CAAC,EAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,GAAG,GAAG,GAAG,KAAK,EAAC,IAAG,EAAE,CAAC,GAAE,IAAG,GAAE,IAAG,EAAE,GAAE,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,EAAE,GAAE,CAAC,GAAE,IAAG,EAAC,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE;AAAA,QAAC,IAAE,EAAE,CAAC;AAAA,QAAE,EAAE,GAAE;AAAA,UAAC,IAAG;AAAA,UAAG,MAAK;AAAA,UACzf,gBAAe;AAAA,UAAE,cAAa,QAAQ,GAAE;AAAA,UAAG,YAAW,QAAQ,GAAE;AAAA,QAAE,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,IAAE,GAAG;AAAA,QAAG,IAAE,EAAE,CAAC;AAAA,QAAE,IAAE,GAAG,CAAC;AAAA,QAAE,IAAI,IAAE,CAAC;AAAA,QAAE,EAAE,KAAG,KAAG,GAAG,CAAC;AAAA,QAAE,OAAO,EAAE,GAAE,GAAE,GAAE,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,IAAE,GAAG;AAAA,QAAG,IAAE,EAAE,CAAC;AAAA,QAAE,IAAE,GAAG,CAAC;AAAA,QAAE,EAAE,GAAE,GAAE,MAAK,CAAC;AAAA;AAAA,MAAG,GAAE;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE;AAAA,QAAC,IAAI,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,EAAE;AAAA,QAAG,IAAE,EAAE,OAAK,OAAK,EAAE,MAAM,CAAC,EAAE,IAAI,QAAQ,CAAC,GAAE;AAAA,UAAC,OAAO,EAAE;AAAA,SAAK,EAAE,KAAK,GAAG,IAAE;AAAA,QAAI,IAAI,IAAE,GAAG;AAAA,QAAG,IAAY,MAAJ;AAAA,UAAM,OAAO;AAAA,QAAE,IAAI,IAAE,MAAM,IAAE,CAAC;AAAA,QAAE,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,MAAI;AAAA,UAAC,SAAQ,IAAE,GAAE,IAAE,EAAE,IAAE,IAAE,KAAI;AAAA,YAAE,EAAE,KAAG,EAAE,IAAE,GAAG,qBAAqB,IAAE,CAAC,GAAE,KAAG,EAAE,IAAE,GAAG;AAAA,UAAe,IAAE,EAAE,GAAG,MAAM,GACnf,CAAC;AAAA,UAAE,KAAI,IAAE,EAAE,IAAE,IAAE,KAAI;AAAA,YAAE,EAAE,IAAE,GAAG,MAAI,EAAE,IAAE,GAAG,GAAG,EAAE,EAAE;AAAA,UAAE,KAAI,EAAE;AAAA,YAAG,OAAO,EAAE,WAAW,GAAE,CAAC;AAAA,SAAE;AAAA,QAAE,OAAO,GAAG,KAAG;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE;AAAA,QAAC,IAAE,MAAI,EAAE,GAAG,MAAI;AAAA;AAAA,MAAI,GAAE,QAAQ,CAAC,GAAE;AAAA,QAAC,IAAI,IAAE,EAAE,CAAC;AAAA,QAAE,GAAG,CAAC;AAAA,QAAE,GAAG,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,GAAE;AAAA,QAAC,EAAE,EAAE;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE;AAAA,QAAC,EAAE,WAAW,GAAE,GAAE,IAAE,CAAC;AAAA;AAAA,MAAG,GAAE,QAAQ,CAAC,GAAE;AAAA,QAAC,IAAI,IAAE,EAAE;AAAA,QAAO,OAAK;AAAA,QAAE,IAAG,aAAW;AAAA,UAAE,OAAM;AAAA,QAAG,SAAQ,IAAE,EAAE,KAAG,GAAE,KAAG,GAAE;AAAA,UAAC,IAAI,IAAE,KAAG,IAAE,MAAG;AAAA,UAAG,IAAE,KAAK,IAAI,GAAE,IAAE,SAAS;AAAA,UAAE,IAAI,IAAE;AAAA,UAAK,IAAE,KAAK,IAAI,GAAE,CAAC;AAAA,UAAE,IAAE,EAAE,IAAI,KAAK,GAAE,YAAW,KAAG,QAAM,IAAE,SAAO,KAAK;AAAA,UAAE,GAAE;AAAA,YAAC,IAAG;AAAA,cAAC,GAAG,KAAK,IAAE,GAAG,aAAW,UAAQ,EAAE;AAAA,cAAE,GAAG;AAAA,cAAE,IAAI,IAAE;AAAA,cAAE;AAAA,cAAQ,OAAM,GAAE;AAAA,YAAE,IAC1f;AAAA,UAAC;AAAA,UAAC,IAAG;AAAA,YAAE,OAAM;AAAA,QAAE;AAAA,QAAC,OAAM;AAAA;AAAA,MAAI,GAAE,QAAQ,GAAE;AAAA,QAAC,OAAO;AAAA;AAAA,MAAI,GAAE,QAAQ,GAAE;AAAA,QAAC,OAAO;AAAA;AAAA,MAAI,GAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,GAAE;AAAA,QAAC,SAAQ,IAAE,GAAE,IAAE,EAAE,IAAE,GAAE,KAAI;AAAA,UAAC,IAAI,IAAE,EAAE,KAAG,IAAG,IAAE,EAAE,IAAE,KAAG;AAAA,UAAG,KAAG;AAAA,UAAE,SAAQ,IAAE,EAAE,IAAE,GAAE,KAAI;AAAA,YAAC,IAAI,IAAE,EAAE,IAAE,IAAG,IAAE,GAAG;AAAA,YAAO,MAAJ,KAAY,MAAL,OAAa,MAAJ,IAAM,KAAG,GAAG,EAAE,GAAE,CAAC,CAAC,GAAE,EAAE,SAAO,KAAG,EAAE,KAAK,CAAC;AAAA,UAAC;AAAA,UAAC,KAAG;AAAA,QAAC;AAAA,QAAC,EAAE,KAAG,KAAG;AAAA,QAAE,OAAO;AAAA;AAAA,IAAE;AAAA,KACtR,QAAQ,GAAE;AAAA,MAAC,SAAS,CAAC,CAAC,GAAE;AAAA,QAAC,EAAE,MAAI,EAAE;AAAA,QAAQ,KAAG,EAAE,IAAI;AAAA,QAAE,GAAG;AAAA,QAAE,KAAG,EAAE,IAAI;AAAA,QAAE,GAAG,QAAQ,EAAE,IAAI,CAAC;AAAA,QAAE;AAAA,QAAI,EAAE,0BAAwB,EAAE,uBAAuB,CAAC;AAAA,QAAK,KAAH,MAAc,OAAP,SAAY,cAAc,EAAE,GAAE,KAAG,OAAM,MAAI,IAAE,GAAE,IAAE,MAAK,EAAE;AAAA;AAAA,MAAI,SAAS,CAAC,CAAC,GAAE;AAAA,QAAC,EAAE,EAAE,QAAQ;AAAA;AAAA,MAAE,SAAS,CAAC,CAAC,GAAE;AAAA,QAAC,OAAO,GAAG,EAAE,KAAK,QAAQ,CAAC,GAAE;AAAA,UAAC,OAAO,YAAY,YAAY,GAAE,CAAC;AAAA,SAAE,EAAE,KAAK,QAAQ,CAAC,GAAE;AAAA,UAAC,OAAO;AAAA,SAAE,EAAE,KAAK,GAAE,QAAQ,CAAC,GAAE;AAAA,UAAC,EAAE,4CAA0C,CAAC;AAAA,UAAE,EAAE,CAAC;AAAA,SAAE;AAAA;AAAA,MAAE,IAAI,IAAE,EAAC,GAAE,GAAE;AAAA,MAAE;AAAA,MAAI,EAAE,0BAAwB,EAAE,uBAAuB,CAAC;AAAA,MAAE,IAAG,EAAE;AAAA,QAAgB,IAAG;AAAA,UAAC,OAAO,EAAE,gBAAgB,GACjiB,CAAC;AAAA,UAAE,OAAM,GAAE;AAAA,UAAC,EAAE,wDAAsD,CAAC,GAAE,GAAG,CAAC;AAAA;AAAA,OAAG,QAAQ,GAAE;AAAA,QAAC,OAAO,KAAe,OAAO,YAAY,wBAA/B,cAAqD,GAAG,CAAC,KAAe,OAAO,SAAnB,aAAyB,EAAE,CAAC,IAAE,MAAM,GAAE,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,QAAQ,CAAC,GAAE;AAAA,UAAC,OAAO,YAAY,qBAAqB,GAAE,CAAC,EAAE,KAAK,GAAE,QAAQ,CAAC,GAAE;AAAA,YAAC,EAAE,oCAAkC,CAAC;AAAA,YAAE,EAAE,2CAA2C;AAAA,YAAE,OAAO,EAAE,CAAC;AAAA,WAAE;AAAA,SAAE;AAAA,SAAI,EAAE,MAAM,EAAE;AAAA,MAAE,OAAM,CAAC;AAAA,OAAI;AAAA,IAClb,EAAE,qBAAmB,QAAQ,GAAE;AAAA,MAAC,QAAO,EAAE,qBAAmB,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA;AAAA,IAAG,IAAI,KAAG,EAAE,iBAAe,QAAQ,GAAE;AAAA,MAAC,QAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA;AAAA,IAAG,EAAE,+BAA6B,QAAQ,GAAE;AAAA,MAAC,QAAO,EAAE,+BAA6B,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA;AAAA,IAAG,IAAI,KAAG,EAAE,UAAQ,QAAQ,GAAE;AAAA,MAAC,QAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,OAAG,IAAE,EAAE,QAAM,QAAQ,GAAE;AAAA,MAAC,QAAO,IAAE,EAAE,QAAM,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA;AAAA,IAC7b,EAAE,eAAa,QAAQ,GAAE;AAAA,MAAC,QAAO,EAAE,eAAa,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA;AAAA,IAAG,IAAI;AAAA,IAAG,IAAE,SAAS,EAAE,GAAE;AAAA,MAAC,MAAI,GAAG;AAAA,MAAE,OAAK,IAAE;AAAA;AAAA,IACvH,SAAS,EAAE,GAAE;AAAA,MAAC,SAAS,CAAC,GAAE;AAAA,QAAC,KAAI,OAAK,KAAG,MAAG,EAAE,YAAU,OAAI,KAAI;AAAA,UAAC,GAAG,EAAE;AAAA,UAAE,GAAG,CAAC;AAAA,UAAE,IAAG,EAAE;AAAA,YAAqB,EAAE,qBAAqB;AAAA,UAAE,IAAG,EAAE;AAAA,YAAQ,KAAgB,OAAO,EAAE,WAArB,eAA+B,EAAE,UAAQ,CAAC,EAAE,OAAO,GAAG,EAAE,QAAQ,UAAQ;AAAA,cAAC,IAAI,IAAE,EAAE,QAAQ,MAAM;AAAA,cAAE,GAAG,QAAQ,CAAC;AAAA,YAAC;AAAA,UAAC,GAAG,EAAE;AAAA,QAAC;AAAA;AAAA,MAAE,MAAK,IAAE,IAAG;AAAA,QAAC,IAAG,EAAE;AAAA,UAAO,KAAgB,OAAO,EAAE,UAArB,eAA8B,EAAE,SAAO,CAAC,EAAE,MAAM,GAAG,EAAE,OAAO;AAAA,YAAQ,GAAG;AAAA,QAAE,GAAG,EAAE;AAAA,QAAE,IAAE,MAAI,EAAE,aAAW,EAAE,UAAU,YAAY,GAAE,WAAW,QAAQ,GAAE;AAAA,UAAC,WAAW,QAAQ,GAAE;AAAA,YAAC,EAAE,UAAU,EAAE;AAAA,aAAG,CAAC;AAAA,UAAE,EAAE;AAAA,WAAG,CAAC,KAAG,EAAE;AAAA,MAAE;AAAA;AAAA,IAC5e,IAAG,EAAE;AAAA,MAAQ,KAAgB,OAAO,EAAE,WAArB,eAA+B,EAAE,UAAQ,CAAC,EAAE,OAAO,GAAG,IAAE,EAAE,QAAQ;AAAA,QAAQ,EAAE,QAAQ,IAAI,EAAE;AAAA,IAAE,GAAG;AAAA,IAG9G,OAAO,UAAS;AAAA;AAAA,GAGf;AACH,IAAe;;;ACjER,IAAI,wBAAqB,QAAS,CAAC,QAAO;AAAA,EAC/C,OAAM,OAAM,UAAU,KAAK;AAAA,EAC3B,OAAM,OAAM,eAAe,KAAK;AAAA,EAChC,OAAM,OAAM,YAAY,KAAK;AAAA,EAC7B,OAAM,OAAM,aAAa,KAAK;AAAA,EAC9B,OAAM,OAAM,aAAa,KAAK;AAAA,EAC9B,OAAM,OAAM,cAAc,KAAK;AAAA,EAC/B,OAAM,OAAM,kBAAkB,KAAK;AAAA,EACnC,OAAM,OAAM,iBAAiB,KAAK;AAAA,EAClC,OAAM,OAAM,iBAAiB,KAAK;AAAA,EAClC,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,4BAAyB,QAAS,CAAC,YAAW;AAAA,EACvD,WAAU,WAAU,eAAe,KAAK;AAAA,EACxC,WAAU,WAAU,gBAAgB,KAAK;AAAA,EACzC,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,4BAAyB,QAAS,CAAC,YAAW;AAAA,EACvD,WAAU,WAAU,WAAW,KAAK;AAAA,EACpC,WAAU,WAAU,YAAY,KAAK;AAAA,EACrC,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,4BAAyB,QAAS,CAAC,YAAW;AAAA,EACvD,WAAU,WAAU,aAAa,KAAK;AAAA,EACtC,WAAU,WAAU,SAAS,KAAK;AAAA,EAClC,WAAU,WAAU,SAAS,KAAK;AAAA,EAClC,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,0BAAuB,QAAS,CAAC,UAAS;AAAA,EACnD,SAAQ,SAAQ,UAAU,KAAK;AAAA,EAC/B,SAAQ,SAAQ,UAAU,KAAK;AAAA,EAC/B,SAAQ,SAAQ,cAAc,KAAK;AAAA,EACnC,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,uBAAoB,QAAS,CAAC,OAAM;AAAA,EAC7C,MAAK,MAAK,UAAU,KAAK;AAAA,EACzB,MAAK,MAAK,SAAS,KAAK;AAAA,EACxB,MAAK,MAAK,WAAW,KAAK;AAAA,EAC1B,MAAK,MAAK,YAAY,KAAK;AAAA,EAC3B,MAAK,MAAK,WAAW,KAAK;AAAA,EAC1B,MAAK,MAAK,SAAS,KAAK;AAAA,EACxB,MAAK,MAAK,gBAAgB,KAAK;AAAA,EAC/B,MAAK,MAAK,cAAc,KAAK;AAAA,EAC7B,MAAK,MAAK,SAAS,KAAK;AAAA,EACxB,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,yBAAsB,QAAS,CAAC,SAAQ;AAAA,EACjD,QAAO,QAAO,UAAU,KAAK;AAAA,EAC7B,QAAO,QAAO,sBAAsB,KAAK;AAAA,EACzC,QAAO,QAAO,kDAAkD,KAAK;AAAA,EACrE,QAAO,QAAO,qCAAqC,KAAK;AAAA,EACxD,QAAO,QAAO,SAAS,cAAc;AAAA,EACrC,QAAO,QAAO,aAAa,cAAc;AAAA,EACzC,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,sCAAmC,QAAS,CAAC,sBAAqB;AAAA,EAC3E,qBAAoB,qBAAoB,kBAAkB,KAAK;AAAA,EAC/D,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,gCAA6B,QAAS,CAAC,gBAAe;AAAA,EAC/D,eAAc,eAAc,YAAY,KAAK;AAAA,EAC7C,eAAc,eAAc,mBAAmB,KAAK;AAAA,EACpD,eAAc,eAAc,SAAS,KAAK;AAAA,EAC1C,eAAc,eAAc,gBAAgB,KAAK;AAAA,EACjD,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,yBAAsB,QAAS,CAAC,SAAQ;AAAA,EACjD,QAAO,QAAO,YAAY,KAAK;AAAA,EAC/B,QAAO,QAAO,SAAS,KAAK;AAAA,EAC5B,QAAO,QAAO,SAAS,KAAK;AAAA,EAC5B,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,0BAAuB,QAAS,CAAC,UAAS;AAAA,EACnD,SAAQ,SAAQ,eAAe,KAAK;AAAA,EACpC,SAAQ,SAAQ,YAAY,KAAK;AAAA,EACjC,SAAQ,SAAQ,aAAa,KAAK;AAAA,EAClC,SAAQ,SAAQ,kBAAkB,KAAK;AAAA,EACvC,SAAQ,SAAQ,iBAAiB,KAAK;AAAA,EACtC,SAAQ,SAAQ,iBAAiB,KAAK;AAAA,EACtC,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,2BAAwB,QAAS,CAAC,WAAU;AAAA,EACrD,UAAS,UAAS,WAAW,KAAK;AAAA,EAClC,UAAS,UAAS,UAAU,KAAK;AAAA,EACjC,UAAS,UAAS,UAAU,KAAK;AAAA,EACjC,UAAS,UAAS,WAAW,KAAK;AAAA,EAClC,UAAS,UAAS,aAAa,KAAK;AAAA,EACpC,UAAS,UAAS,WAAW,KAAK;AAAA,EAClC,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,8BAA2B,QAAS,CAAC,cAAa;AAAA,EAC3D,aAAY,aAAY,eAAe,KAAK;AAAA,EAC5C,aAAY,aAAY,aAAa,KAAK;AAAA,EAC1C,aAAY,aAAY,YAAY,KAAK;AAAA,EACzC,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,2BAAwB,QAAS,CAAC,WAAU;AAAA,EACrD,UAAS,UAAS,aAAa,KAAK;AAAA,EACpC,UAAS,UAAS,UAAU,KAAK;AAAA,EACjC,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,2BAAwB,QAAS,CAAC,WAAU;AAAA,EACrD,UAAS,UAAS,aAAa,KAAK;AAAA,EACpC,UAAS,UAAS,YAAY,KAAK;AAAA,EACnC,UAAS,UAAS,YAAY,KAAK;AAAA,EACnC,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,+BAA4B,QAAS,CAAC,eAAc;AAAA,EAC7D,cAAa,cAAa,YAAY,KAAK;AAAA,EAC3C,cAAa,cAAa,cAAc,KAAK;AAAA,EAC7C,cAAa,cAAa,cAAc,KAAK;AAAA,EAC7C,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,uBAAoB,QAAS,CAAC,OAAM;AAAA,EAC7C,MAAK,MAAK,eAAe,KAAK;AAAA,EAC9B,MAAK,MAAK,WAAW,KAAK;AAAA,EAC1B,MAAK,MAAK,aAAa,KAAK;AAAA,EAC5B,MAAK,MAAK,UAAU,KAAK;AAAA,EACzB,OAAO;AAAA,EACP,CAAC,CAAC;AACG,IAAI,uBAAoB,QAAS,CAAC,OAAM;AAAA,EAC7C,MAAK,MAAK,YAAY,KAAK;AAAA,EAC3B,MAAK,MAAK,UAAU,KAAK;AAAA,EACzB,MAAK,MAAK,iBAAiB,KAAK;AAAA,EAChC,OAAO;AAAA,EACP,CAAC,CAAC;AACJ,IAAM,YAAY;AAAA,EAChB,YAAY,MAAM;AAAA,EAClB,kBAAkB,MAAM;AAAA,EACxB,cAAc,MAAM;AAAA,EACpB,gBAAgB,MAAM;AAAA,EACtB,eAAe,MAAM;AAAA,EACrB,gBAAgB,MAAM;AAAA,EACtB,qBAAqB,MAAM;AAAA,EAC3B,oBAAoB,MAAM;AAAA,EAC1B,oBAAoB,MAAM;AAAA,EAC1B,uBAAuB,UAAU;AAAA,EACjC,wBAAwB,UAAU;AAAA,EAClC,iBAAiB,UAAU;AAAA,EAC3B,kBAAkB,UAAU;AAAA,EAC5B,mBAAmB,UAAU;AAAA,EAC7B,eAAe,UAAU;AAAA,EACzB,eAAe,UAAU;AAAA,EACzB,cAAc,QAAQ;AAAA,EACtB,cAAc,QAAQ;AAAA,EACtB,kBAAkB,QAAQ;AAAA,EAC1B,WAAW,KAAK;AAAA,EAChB,UAAU,KAAK;AAAA,EACf,YAAY,KAAK;AAAA,EACjB,aAAa,KAAK;AAAA,EAClB,YAAY,KAAK;AAAA,EACjB,UAAU,KAAK;AAAA,EACf,iBAAiB,KAAK;AAAA,EACtB,eAAe,KAAK;AAAA,EACpB,UAAU,KAAK;AAAA,EACf,aAAa,OAAO;AAAA,EACpB,2BAA2B,OAAO;AAAA,EAClC,0DAA0D,OAAO;AAAA,EACjE,4CAA4C,OAAO;AAAA,EACnD,YAAY,OAAO;AAAA,EACnB,gBAAgB,OAAO;AAAA,EACvB,qCAAqC,oBAAoB;AAAA,EACzD,uBAAuB,cAAc;AAAA,EACrC,+BAA+B,cAAc;AAAA,EAC7C,oBAAoB,cAAc;AAAA,EAClC,4BAA4B,cAAc;AAAA,EAC1C,eAAe,OAAO;AAAA,EACtB,YAAY,OAAO;AAAA,EACnB,YAAY,OAAO;AAAA,EACnB,oBAAoB,QAAQ;AAAA,EAC5B,gBAAgB,QAAQ;AAAA,EACxB,kBAAkB,QAAQ;AAAA,EAC1B,uBAAuB,QAAQ;AAAA,EAC/B,sBAAsB,QAAQ;AAAA,EAC9B,sBAAsB,QAAQ;AAAA,EAC9B,iBAAiB,SAAS;AAAA,EAC1B,gBAAgB,SAAS;AAAA,EACzB,gBAAgB,SAAS;AAAA,EACzB,iBAAiB,SAAS;AAAA,EAC1B,mBAAmB,SAAS;AAAA,EAC5B,iBAAiB,SAAS;AAAA,EAC1B,wBAAwB,YAAY;AAAA,EACpC,sBAAsB,YAAY;AAAA,EAClC,sBAAsB,YAAY;AAAA,EAClC,mBAAmB,SAAS;AAAA,EAC5B,gBAAgB,SAAS;AAAA,EACzB,kBAAkB,SAAS;AAAA,EAC3B,iBAAiB,SAAS;AAAA,EAC1B,iBAAiB,SAAS;AAAA,EAC1B,sBAAsB,aAAa;AAAA,EACnC,wBAAwB,aAAa;AAAA,EACrC,wBAAwB,aAAa;AAAA,EACrC,gBAAgB,KAAK;AAAA,EACrB,YAAY,KAAK;AAAA,EACjB,cAAc,KAAK;AAAA,EACnB,WAAW,KAAK;AAAA,EAChB,cAAc,KAAK;AAAA,EACnB,WAAW,KAAK;AAAA,EAChB,mBAAmB,KAAK;AAC1B;AACA,IAAe;;;ACnMf,SAAwB,YAAY,CAAC,KAAK;AAAA,EACxC,SAAS,KAAK,CAAC,WAAW,MAAM,IAAI;AAAA,IAClC,MAAM,WAAW,UAAU;AAAA,IAC3B,UAAU,QAAQ,QAAS,GAAG;AAAA,MAC5B,SAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,EAAG,OAAO,MAAM,QAAQ;AAAA,QACvF,KAAK,QAAQ,UAAU;AAAA,MACzB;AAAA,MACA,OAAO,GAAG,KAAK,MAAM,UAAU,GAAG,IAAI;AAAA;AAAA;AAAA,EAG1C,WAAW,UAAU,CAAC,eAAe,aAAa,gBAAgB,YAAY,aAAa,eAAe,gBAAgB,eAAe,gBAAgB,cAAc,QAAQ,GAAG;AAAA,IAChL,MAAM,UAAU;AAAA,OACb,KAAK,QAAQ,IAAI,KAAK,UAAU;AAAA,OAChC,KAAK,UAAU,IAAI,KAAK,UAAU,GAAG;AAAA,OACrC,KAAK,OAAO,IAAI,KAAK,UAAU,GAAG;AAAA,IACrC;AAAA,IACA,MAAM,IAAI,KAAK,WAAW,QAAQ,QAAS,CAAC,UAAU;AAAA,MACpD,SAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,GAAG,QAAQ,EAAG,QAAQ,OAAO,SAAS;AAAA,QACjH,KAAK,QAAQ,KAAK,UAAU;AAAA,MAC9B;AAAA,MAIA,MAAM,QAAQ,KAAK,IAAI;AAAA,MACvB,IAAI,MAAM;AAAA,MACV,IAAI,UAAU,QAAQ;AAAA,QACpB,OAAO,KAAK;AAAA,QACZ,WAAW;AAAA,MACb,EAAO,SAAI,OAAO,UAAU,UAAU;AAAA,QACpC,OAAO,MAAM;AAAA,QACb,WAAW,MAAM,QAAQ;AAAA,MAC3B,EAAO;AAAA,QACL,OAAO,OAAO,UAAU,YAAY,MAAM,SAAS,GAAG,IAAI,KAAK,UAAU,KAAK;AAAA,QAC9E,WAAW,WAAW,KAAK;AAAA,QAC3B,IAAI,UAAU,cAAc,OAAO,MAAM,KAAK,KAAK,OAAO,MAAM,QAAQ,GAAG;AAAA,UACzE,MAAM,IAAI,MAAM,iBAAiB,aAAa,QAAQ;AAAA,QACxD;AAAA;AAAA,MAEF,KAAK,QAAQ;AAAA,QAAO,MAAM,IAAI,MAAM,sBAAsB,8BAA8B,QAAQ;AAAA,MAChG,IAAI,aAAa,WAAW;AAAA,QAC1B,OAAO,QAAQ,MAAM,KAAK,MAAM,GAAG,MAAM,QAAQ;AAAA,MACnD,EAAO;AAAA,QACL,OAAO,QAAQ,MAAM,KAAK,MAAM,GAAG,IAAI;AAAA;AAAA,KAE1C;AAAA,EACH;AAAA,EACA,SAAS,mBAAmB,CAAC,iBAAiB;AAAA,IAC5C,OAAO,IAAI,gBAAgB,UAAU;AAAA,MACnC,SAAS,QAAS,GAAG;AAAA,QACnB;AAAA,UACE;AAAA,UACA;AAAA,YACE,gBAAgB,GAAG,SAAS;AAAA,QAChC,OAAO;AAAA,UACL,OAAO,SAAS;AAAA,UAChB,QAAQ,UAAU;AAAA,QACpB;AAAA;AAAA,IAEJ,CAAC;AAAA;AAAA,EAEH,MAAM,IAAI,KAAK,WAAW,kBAAkB,QAAS,CAAC,UAAU,aAAa;AAAA,IAG3E,IAAI,aAAa;AAAA,MACf,OAAO,SAAS,KAAK,MAAM,oBAAoB,WAAW,CAAC;AAAA,IAC7D,EAAO;AAAA,MACL,OAAO,KAAK,iBAAiB;AAAA;AAAA,GAEhC;AAAA,EACD,SAAS,eAAe,CAAC,iBAAiB;AAAA,IACxC,OAAO,IAAI,gBAAgB,UAAU;AAAA,MACnC,SAAS;AAAA,IACX,CAAC;AAAA;AAAA,EAEH,MAAM,IAAI,KAAK,WAAW,kBAAkB,QAAS,CAAC,UAAU,aAAa;AAAA,IAC3E,SAAS,KAAK,MAAM,gBAAgB,WAAW,CAAC;AAAA,GACjD;AAAA,EACD,MAAM,IAAI,OAAO,WAAW,QAAQ,QAAS,GAAG;AAAA,IAG9C,IAAI,OAAO,QAAQ,IAAI;AAAA,GACxB;AAAA,EACD,MAAM,IAAI,MAAM,UAAU,CAAC,GAAG,WAAW;AAAA,IAEvC,OAAO,SAAS,IAAI,KAAK,iBAAiB,MAAM,IAAI,IAAI,KAAK,cAAc;AAAA,GAC5E;AAAA,EACD,MAAM,IAAI,KAAK,WAAW,QAAQ,QAAS,GAAG;AAAA,IAG5C,IAAI,KAAK,QAAQ,IAAI;AAAA,GACtB;AAAA,EACD,MAAM,IAAI,KAAK,WAAW,iBAAiB,QAAS,GAAG;AAAA,IACrD,SAAS,IAAI,GAAG,IAAI,KAAK,cAAc,EAAG,IAAI,KAAK,GAAG;AAAA,MACpD,KAAK,SAAS,CAAC,EAAE,cAAc;AAAA,IACjC;AAAA,IACA,KAAK,KAAK;AAAA,GACX;AAAA,EACD,MAAM,IAAI,KAAK,WAAW,mBAAmB,QAAS,CAAC,UAAU;AAAA,IAC/D,IAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,YAAY,UAAU,KAAK;AAAA,IAChF,IAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,YAAY,UAAU,KAAK;AAAA,IACjF,IAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,YAAY,UAAU,KAAK,UAAU;AAAA,IAE9F,OAAO,SAAS,KAAK,MAAM,OAAO,QAAQ,SAAS;AAAA,GACpD;AAAA,EACD,OAAO;AAAA,IACL,QAAQ,IAAI;AAAA,IACZ,MAAM,IAAI;AAAA,OACP;AAAA,EACL;AAAA;;;AC9GF,IAAM,OAAO,aAAa,MAAM,6BAAS,CAAC;AAC1C,IAAe;;;ACZf;AAAA;AASA,MAAM,oBAA2D,aAAa;AAAA,SAC7D,YAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACU,aAAsB;AAAA,EAItB,SAAyC;AAAA,EACzC,UAA0C;AAAA,EAEpD,WAAW,CAAC,UAAoB,WAAc,CAAC,GAAQ;AAAA,IACrD,MAAM;AAAA,IACN,KAAK,KAAK,YAAY;AAAA,IACtB,KAAK,WAAW;AAAA,IAChB,KAAK,WAAW;AAAA,IAChB,KAAK,SAAS;AAAA,IACd,KAAK,WAAW,CAAC;AAAA;AAAA,EAGnB,UAAU,CAAC,OAAwD;AAAA,IACjE,IAAI,KAAK,YAAY;AAAA,MAEnB,MAAM,IAAI,MAAM,mBAAmB;AAAA,IACrC;AAAA,IACA,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ;AAAA,MACjD,OAAO;AAAA,IACT;AAAA,IACA,KAAK,KAAK,QAAQ;AAAA,MAChB,OAAO,KAAK,SAAS,iBAAiB;AAAA,IACxC;AAAA,IACA,IAAI,KAAK,OAAO,YAAY;AAAA,MAE1B,MAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AAAA,IACA,OAAO,KAAK,MAAO,KAAK,OAAO,SAAS,iBAAiB,IAAI,SAAS,KAAK,IAAK,GAAG;AAAA;AAAA,EAGrF,WAAW,CAAC,QAAyD;AAAA,IACnE,IAAI,KAAK,YAAY;AAAA,MAEnB,MAAM,IAAI,MAAM,mBAAmB;AAAA,IACrC;AAAA,IACA,IAAI,OAAO,WAAW,YAAY,WAAW,QAAQ;AAAA,MACnD,OAAO;AAAA,IACT;AAAA,IACA,KAAK,KAAK,QAAQ;AAAA,MAChB,OAAO,KAAK,SAAS,kBAAkB;AAAA,IACzC;AAAA,IACA,IAAI,KAAK,OAAO,YAAY;AAAA,MAE1B,MAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AAAA,IACA,OAAO,KAAK,MAAO,KAAK,OAAO,SAAS,kBAAkB,IAAI,SAAS,MAAM,IAAK,GAAG;AAAA;AAAA,EAGvF,QAAQ,CAAC,OAA6C;AAAA,IACpD,KAAK,SAAS;AAAA,IACd,MAAM,cAAc,KAAK,WAAW,KAAK;AAAA,IACzC,IAAI,gBAAgB,QAAQ;AAAA,MAC1B,KAAK,SAAS,aAAa;AAAA,IAC7B,EAAO;AAAA,MACL,KAAK,SAAS,SAAS,WAAW;AAAA;AAAA;AAAA,EAItC,SAAS,CAAC,QAA8C;AAAA,IACtD,KAAK,UAAU;AAAA,IACf,MAAM,eAAe,KAAK,YAAY,MAAM;AAAA,IAC5C,IAAI,iBAAiB,QAAQ;AAAA,MAC3B,KAAK,SAAS,cAAc;AAAA,IAC9B,EAAO;AAAA,MACL,KAAK,SAAS,UAAU,YAAY;AAAA;AAAA;AAAA,EAIxC,QAAgC,CAAC,WAAmC;AAAA,IAClE,IAAI,UAAU,QAAQ;AAAA,MACpB,UAAU,OAAO,YAAY,SAAS;AAAA,IACxC;AAAA,IAEA,UAAU,SAAS;AAAA,IAEnB,MAAM,QAAQ,KAAK,SAAS;AAAA,IAC5B,KAAK,SAAS,KAAK,SAAS;AAAA,IAC5B,KAAK,SAAS,YAAY,UAAU,UAAU,KAAK;AAAA,IAEnD,IAAI;AAAA,MACF,UAAU,SAAS,SAAS,UAAU,WAAW,UAAU,MAAM,CAAC;AAAA,MAClE,UAAU,SAAS,UAAU,UAAU,YAAY,UAAU,OAAO,CAAC;AAAA,MACrE,OAAO,GAAG;AAAA,MACV,QAAQ,MAAM,kCAAkC,CAAC;AAAA;AAAA,IAGnD,OAAO;AAAA;AAAA,EAGT,aAAqC,CAAC,WAAmC;AAAA,IACvE,OAAO,KAAK,SAAS,QAAQ,SAAS;AAAA;AAAA,EAGxC,WAAmC,CAAC,WAAoC;AAAA,IACtE,MAAM,QAAQ,KAAK,SAAS,QAAQ,SAAS;AAAA,IAC7C,IAAI,UAAU,IAAI;AAAA,MAChB,OAAO;AAAA,IACT;AAAA,IAEA,KAAK,SAAS,OAAO,OAAO,CAAC;AAAA,IAC7B,KAAK,SAAS,YAAY,UAAU,QAAQ;AAAA,IAE5C,UAAU,SAAS;AAAA,IAEnB,OAAO;AAAA;AAAA,EAGT,kBAAkB,CAAC,OAAwC;AAAA,IACzD,IAAI,QAAQ,KAAK,SAAS,KAAK,SAAS,QAAQ;AAAA,MAC9C,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,YAAY,KAAK,SAAS;AAAA,IAEhC,KAAK,SAAS,OAAO,OAAO,CAAC;AAAA,IAC7B,KAAK,SAAS,YAAY,UAAU,QAAQ;AAAA,IAE5C,UAAU,SAAS;AAAA,IAEnB,OAAO;AAAA;AAAA,EAGT,SAAiC,CAAC,WAA2B,UAA0B;AAAA,IACrF,MAAM,eAAe,KAAK,SAAS,QAAQ,SAAS;AAAA,IACpD,IAAI,iBAAiB,IAAI;AAAA,MACvB,MAAM,IAAI,MAAM,oCAAoC;AAAA,IACtD;AAAA,IAEA,MAAM,kBAAkB,KAAK,IAAI,GAAG,KAAK,IAAI,UAAU,KAAK,SAAS,SAAS,CAAC,CAAC;AAAA,IAEhF,IAAI,iBAAiB,iBAAiB;AAAA,MACpC,OAAO;AAAA,IACT;AAAA,IAEA,KAAK,SAAS,OAAO,cAAc,CAAC;AAAA,IACpC,KAAK,SAAS,OAAO,iBAAiB,GAAG,SAAS;AAAA,IAElD,KAAK,SAAS,YAAY,UAAU,QAAQ;AAAA,IAC5C,KAAK,SAAS,YAAY,UAAU,UAAU,eAAe;AAAA,IAE7D,OAAO;AAAA;AAAA,EAGT,WAAmC,CAAC,WAA2B,OAAuB;AAAA,IACpF,IAAI,UAAU,QAAQ;AAAA,MACpB,UAAU,OAAO,YAAY,SAAS;AAAA,IACxC;AAAA,IAEA,UAAU,SAAS;AAAA,IACnB,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,KAAK,SAAS,MAAM,CAAC;AAAA,IAEtE,KAAK,SAAS,OAAO,cAAc,GAAG,SAAS;AAAA,IAC/C,KAAK,SAAS,YAAY,UAAU,UAAU,YAAY;AAAA,IAE1D,IAAI;AAAA,MACF,UAAU,SAAS,SAAS,UAAU,WAAW,UAAU,MAAM,CAAC;AAAA,MAClE,UAAU,SAAS,UAAU,UAAU,YAAY,UAAU,OAAO,CAAC;AAAA,MACrE,OAAO,GAAG;AAAA,MACV,QAAQ,MAAM,kCAAkC,CAAC;AAAA;AAAA,IAGnD,OAAO;AAAA;AAAA,EAGT,aAAa,GAAW;AAAA,IACtB,OAAO,KAAK,SAAS;AAAA;AAAA,EAGvB,eAAe,CAAC,OAAwC;AAAA,IACtD,IAAI,QAAQ,KAAK,SAAS,KAAK,SAAS,QAAQ;AAAA,MAC9C,OAAO;AAAA,IACT;AAAA,IACA,OAAO,KAAK,SAAS;AAAA;AAAA,EAGvB,WAAW,CAAC,KAAc,OAAyB;AAAA,IACjD,KAAK,SAAS,OAAO;AAAA;AAAA,EAGvB,WAA8B,CAAC,KAAc;AAAA,IAC3C,OAAO,KAAK,SAAS;AAAA;AAAA,EAGvB,cAAiC,CAAC,KAAc;AAAA,IAC9C,OAAO,KAAK,SAAS;AAAA;AAAA,EAGvB,QAAgC,CAAC,WAAoC;AAAA,IACnE,OAAO,KAAK,SAAS,SAAS,SAAS;AAAA;AAAA,EAGzC,OAAO,GAAS;AAAA,IACd,IAAI,KAAK,YAAY;AAAA,MACnB;AAAA,IACF;AAAA,IACA,IAAI,KAAK,QAAQ;AAAA,MACf,KAAK,OAAO,YAAY,IAAI;AAAA,IAC9B;AAAA,IACA,IAAI;AAAA,MACF,KAAK,SAAS,KAAK;AAAA,MACnB,OAAO,GAAG;AAAA,IAGZ,KAAK,aAAa;AAAA;AAEtB;AAEA,SAAS,iBAAyC,CAAC,WAAc,CAAC,GAAQ,YAAqC;AAAA,EAC7G,MAAM,WAAW,YAAK,KAAK,OAAO,UAAU;AAAA,EAC5C,OAAO,IAAI,YAAe,UAAU,QAAQ;AAAA;;;ACrO9C;AAEA,IAAM,gBAAgB;AAEtB,IAAM,UAAU;AAEhB,IAAM,UAAkC;AAAA,EAEtC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EAEJ,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EAEN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EAEJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EAEN,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EAEH,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EAEJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,MAAM;AACR;AAEO,IAAM,sBAAsB,CAAC,GAAG,OAAO,OAAO,OAAO,GAAG,WAAW;AAE1E,IAAM,aAAa,CAAC,SAAiB;AAAA,EACnC,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,IAAI,EAAE,SAAS,IAAI;AAAA;AAGrG,IAAM,YAAY,CAAC,SAAiB;AAAA,EAClC,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,SAAS,IAAI;AAAA;AAexF,IAAM,gBAAgB,CAAC,IAAqB,OAAkB;AAAA,EACnE,IAAI;AAAA,EAEJ,IAAI,OAAO,SAAS,CAAC,GAAG;AAAA,IACtB,IAAI,EAAE,KAAM,OAAO,EAAE,OAAO,WAAW;AAAA,MACnC,EAAE,MAA4B;AAAA,MAChC,IAAI,SAAS,OAAO,CAAC;AAAA,IACvB,EAAO;AAAA,MACL,IAAI,OAAO,CAAC;AAAA;AAAA,EAEhB,EAAO,SAAI,MAAM,aAAa,OAAO,MAAM,UAAU;AAAA,IACnD,IAAI,OAAO,CAAC;AAAA,EACd,EAAO,UAAK,GAAG;AAAA,IACb,IAAI;AAAA,EACN;AAAA,EAEA,MAAM,MAAiB;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,KAAK;AAAA,EACP;AAAA,EAEA,IAAI,WAAW,IAAI,YAAY,KAAK,IAAI;AAAA,EAExC,IAAI,MAAM,MAAM;AAAA,IAEd,IAAI,OAAO;AAAA,EACb,EAAO,SAAI,MAAM;AAAA,GAAM;AAAA,IAErB,IAAI,OAAO;AAAA,EACb,EAAO,SAAI,MAAM,MAAM;AAAA,IAErB,IAAI,OAAO;AAAA,EACb,EAAO,SAAI,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU,MAAM,YAAY;AAAA,IAG3E,IAAI,OAAO;AAAA,IACX,IAAI,OAAO,EAAE,OAAO,CAAC,MAAM;AAAA,EAC7B,EAAO,SAAI,MAAM,UAAU,MAAM,YAAY;AAAA,IAE3C,IAAI,OAAO;AAAA,IACX,IAAI,OAAO,EAAE,WAAW;AAAA,EAC1B,EAAO,SAAI,MAAM,OAAO,MAAM,SAAS;AAAA,IACrC,IAAI,OAAO;AAAA,IACX,IAAI,OAAO,EAAE,WAAW;AAAA,EAC1B,EAAO,SAAI,EAAE,WAAW,KAAK,KAAK,QAAQ;AAAA,IAExC,IAAI,OAAO,OAAO,aAAa,EAAE,WAAW,CAAC,IAAI,KAAoB,CAAC;AAAA,IACtE,IAAI,OAAO;AAAA,EACb,EAAO,SAAI,EAAE,WAAW,KAAK,KAAK,OAAO,KAAK,KAAK;AAAA,IAEjD,IAAI,OAAO;AAAA,IACX,IAAI,SAAS;AAAA,EACf,EAAO,SAAI,EAAE,WAAW,KAAK,KAAK,OAAO,KAAK,KAAK;AAAA,IAEjD,IAAI,OAAO;AAAA,EACb,EAAO,SAAI,EAAE,WAAW,KAAK,KAAK,OAAO,KAAK,KAAK;AAAA,IAEjD,IAAI,OAAO,EAAE,YAAY;AAAA,IACzB,IAAI,QAAQ;AAAA,EACd,EAAO,SAAI,EAAE,WAAW,GAAG;AAAA,IAEzB,IAAI,OAAO;AAAA,EACb,EAAO,SAAK,QAAQ,cAAc,KAAK,CAAC,GAAI;AAAA,IAE1C,IAAI,OAAO;AAAA,IACX,IAAI,QAAQ,UAAU,KAAK,MAAM,EAAG;AAAA,IACpC,IAAI,OAAO,MAAM;AAAA,EACnB,EAAO,SAAK,QAAQ,QAAQ,KAAK,CAAC,GAAI;AAAA,IACpC,MAAM,OAAO,CAAC,GAAG,CAAC;AAAA,IAElB,IAAI,KAAK,OAAO,UAAY,KAAK,OAAO,QAAU;AAAA,MAChD,IAAI,SAAS;AAAA,IACf;AAAA,IAKA,MAAM,OAAO,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,EAAE,OAAO,OAAO,EAAE,KAAK,EAAE;AAAA,IAE7E,MAAM,YAAa,MAAM,MAAM,MAAM,MAAM,KAAgB;AAAA,IAG3D,IAAI,UAAU,WAAW;AAAA,IACzB,IAAI,UAAU,WAAW;AAAA,IACzB,IAAI,WAAW,WAAW;AAAA,IAC1B,IAAI,YAAY,WAAW;AAAA,IAC3B,IAAI,OAAO;AAAA,IAEX,IAAI,OAAO,QAAQ;AAAA,IACnB,IAAI,QAAQ,WAAW,IAAI,KAAK,IAAI;AAAA,IACpC,IAAI,OAAO,UAAU,IAAI,KAAK,IAAI;AAAA,EACpC,EAAO,SAAI,MAAM,WAAW;AAAA,IAE1B,IAAI,OAAO;AAAA,IACX,IAAI,OAAO;AAAA,IACX,IAAI,OAAO;AAAA,EACb;AAAA,EAEA,OAAO;AAAA;;;AC/NT,yBAAS;;;ACAT,IAAM,uBAAuB,OAAO,IAAI,yBAAyB;AAM1D,SAAS,SAAY,CAAC,KAAa,SAAqB;AAAA,EAE7D,MAAM,MAAO,WAAW,0BAA0B,CAAC;AAAA,EACnD,MAAM,OAAO,MAAM;AAAA,IACjB,IAAI,OAAO,QAAQ;AAAA,EACrB;AAAA,EACA,OAAO,IAAI;AAAA;;;ADJN,MAAM,mBAAmB,cAAiC;AAAA,EAC/D,WAAW,GAAG;AAAA,IACZ,MAAM;AAAA,IAEN,IAAI,QAAQ,MAAM,YAAY;AAAA,MAC5B,QAAQ,MAAM,WAAW,IAAI;AAAA,IAC/B;AAAA,IACA,QAAQ,MAAM,OAAO;AAAA,IACrB,QAAQ,MAAM,YAAY,MAAM;AAAA,IAEhC,QAAQ,MAAM,GAAG,QAAQ,CAAC,QAAgB;AAAA,MACxC,MAAM,YAAY,cAAc,GAAG;AAAA,MACnC,KAAK,KAAK,YAAY,SAAS;AAAA,KAChC;AAAA;AAAA,EAGI,OAAO,GAAS;AAAA,IACrB,QAAQ,MAAM,mBAAmB,MAAM;AAAA;AAE3C;AAEA,IAAI,aAAgC;AAE7B,SAAS,aAAa,GAAe;AAAA,EAC1C,KAAK,YAAY;AAAA,IACf,aAAa,UAAU,cAAc,MAAM,IAAI,UAAY;AAAA,EAC7D;AAAA,EACA,OAAO;AAAA;;;AEnCF,MAAM,KAAK;AAAA,EAChB;AAAA,EAEA,WAAW,CAAC,QAAsB;AAAA,IAChC,KAAK,SAAS;AAAA;AAAA,SAGT,SAAS,CAAC,OAAqB;AAAA,IACpC,OAAO,IAAI,KAAK,KAAK;AAAA;AAAA,SAGhB,UAAU,CAAC,GAAW,GAAW,GAAW,IAAY,GAAK;AAAA,IAClE,OAAO,IAAI,KAAK,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AAAA;AAAA,SAGzC,QAAQ,CAAC,GAAW,GAAW,GAAW,IAAY,KAAK;AAAA,IAChE,OAAO,IAAI,KAAK,IAAI,aAAa,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC;AAAA;AAAA,SAGjE,OAAO,CAAC,KAAmB;AAAA,IAChC,OAAO,SAAS,GAAG;AAAA;AAAA,EAGrB,MAAM,GAAqC;AAAA,IACzC,OAAO,CAAC,KAAK,MAAM,KAAK,IAAI,GAAG,GAAG,KAAK,MAAM,KAAK,IAAI,GAAG,GAAG,KAAK,MAAM,KAAK,IAAI,GAAG,GAAG,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC;AAAA;AAAA,MAG5G,CAAC,GAAW;AAAA,IACd,OAAO,KAAK,OAAO;AAAA;AAAA,MAGjB,CAAC,CAAC,OAAe;AAAA,IACnB,KAAK,OAAO,KAAK;AAAA;AAAA,MAGf,CAAC,GAAW;AAAA,IACd,OAAO,KAAK,OAAO;AAAA;AAAA,MAGjB,CAAC,CAAC,OAAe;AAAA,IACnB,KAAK,OAAO,KAAK;AAAA;AAAA,MAGf,CAAC,GAAW;AAAA,IACd,OAAO,KAAK,OAAO;AAAA;AAAA,MAGjB,CAAC,CAAC,OAAe;AAAA,IACnB,KAAK,OAAO,KAAK;AAAA;AAAA,MAGf,CAAC,GAAW;AAAA,IACd,OAAO,KAAK,OAAO;AAAA;AAAA,MAGjB,CAAC,CAAC,OAAe;AAAA,IACnB,KAAK,OAAO,KAAK;AAAA;AAAA,EAGnB,GAAM,CAAC,IAA0B;AAAA,IAC/B,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;AAAA;AAAA,EAGxD,QAAQ,GAAG;AAAA,IACT,OAAO,QAAQ,KAAK,EAAE,QAAQ,CAAC,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,KAAK,EAAE,QAAQ,CAAC;AAAA;AAErG;AAIO,SAAS,QAAQ,CAAC,KAAmB;AAAA,EAC1C,MAAM,IAAI,QAAQ,MAAM,EAAE;AAAA,EAE1B,IAAI,IAAI,WAAW,GAAG;AAAA,IACpB,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI;AAAA,EACzD;AAAA,EAEA,KAAK,mBAAmB,KAAK,GAAG,GAAG;AAAA,IACjC,QAAQ,KAAK,sBAAsB,4BAA4B;AAAA,IAC/D,OAAO,KAAK,WAAW,GAAG,GAAG,GAAG,CAAC;AAAA,EACnC;AAAA,EAEA,MAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE,IAAI;AAAA,EAC9C,MAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE,IAAI;AAAA,EAC9C,MAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE,IAAI;AAAA,EAE9C,OAAO,KAAK,WAAW,GAAG,GAAG,GAAG,CAAC;AAAA;AAG5B,SAAS,QAAQ,CAAC,KAAmB;AAAA,EAC1C,OACE,MACA,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,EACjB,IAAI,CAAC,MAAM;AAAA,IACV,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE;AAAA,IACrE,OAAO,IAAI,WAAW,IAAI,MAAM,MAAM;AAAA,GACvC,EACA,KAAK,EAAE;AAAA;AAIP,SAAS,QAAQ,CAAC,GAAW,GAAW,GAAiB;AAAA,EAC9D,IAAI,IAAI,GACN,IAAI,GACJ,IAAI;AAAA,EAEN,MAAM,IAAI,KAAK,MAAM,IAAI,EAAE,IAAI;AAAA,EAC/B,MAAM,IAAI,IAAI,KAAK,KAAK,MAAM,IAAI,EAAE;AAAA,EACpC,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,IAAI,IAAI;AAAA,EACvB,MAAM,IAAI,KAAK,KAAK,IAAI,KAAK;AAAA,EAE7B,QAAQ;AAAA,SACD;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,SACG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,SACG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,SACG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,SACG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,SACG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA;AAAA,EAGJ,OAAO,KAAK,WAAW,GAAG,GAAG,GAAG,CAAC;AAAA;AAGnC,IAAM,kBAA0C;AAAA,EAC9C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,aAAa;AACf;AAEO,SAAS,UAAU,CAAC,OAAyB;AAAA,EAClD,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,MAAM,aAAa,MAAM,YAAY;AAAA,IAErC,IAAI,eAAe,eAAe;AAAA,MAChC,OAAO,KAAK,WAAW,GAAG,GAAG,GAAG,CAAC;AAAA,IACnC;AAAA,IAEA,IAAI,gBAAgB,aAAa;AAAA,MAC/B,OAAO,SAAS,gBAAgB,WAAW;AAAA,IAC7C;AAAA,IAEA,OAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EACA,OAAO;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnLF,IAAM,QAAQ;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAyBA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",
34
+ "debugId": "ADDBBC6DB7FFCF1064756E2164756E21",
35
35
  "names": []
36
36
  }