@gridland/web 0.2.32 → 0.2.34
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.
- package/dist/index.d.ts +3 -2
- package/dist/index.js +1750 -8254
- package/dist/index.js.map +4 -4
- package/dist/{next-Cwun29WQ.d.ts → next-Cdtr1evW.d.ts} +4 -90
- package/dist/next-plugin.cjs +19 -35
- package/dist/next-plugin.cjs.map +1 -1
- package/dist/next-plugin.d.cts +2 -7
- package/dist/next-plugin.d.ts +2 -7
- package/dist/next-plugin.js +19 -35
- package/dist/next-plugin.js.map +1 -1
- package/dist/next.d.ts +2 -1
- package/dist/next.js +654 -7623
- package/dist/next.js.map +4 -4
- package/dist/vite-plugin.d.ts +4 -9
- package/dist/vite-plugin.js +20 -74
- package/dist/vite-plugin.js.map +1 -1
- package/package.json +3 -5
- package/src/shims/native-stub.ts +6 -0
- package/src/shims/slider-deps.ts +2 -2
- package/dist/core-shims.js +0 -46163
- package/dist/core-shims.js.map +0 -7
- package/src/browser-buffer.ts +0 -715
- package/src/core-shims/index.ts +0 -269
- package/src/core-shims/renderable-types.ts +0 -4
- package/src/core-shims/rgba.ts +0 -195
- package/src/core-shims/types.ts +0 -132
- package/src/shims/console-stub.ts +0 -13
- package/src/shims/console.ts +0 -3
- package/src/shims/filters-stub.ts +0 -4
- package/src/shims/native-span-feed-stub.ts +0 -7
- package/src/shims/node-buffer.ts +0 -39
- package/src/shims/node-fs.ts +0 -20
- package/src/shims/node-os.ts +0 -6
- package/src/shims/node-path.ts +0 -35
- package/src/shims/node-stream.ts +0 -10
- package/src/shims/node-url.ts +0 -8
- package/src/shims/node-util.ts +0 -33
- package/src/shims/renderer-stub.ts +0 -21
- package/src/shims/timeline-stub.ts +0 -43
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["
|
|
4
|
-
"sourcesContent": ["import React, {\n useRef,\n useEffect,\n useState,\n type ReactNode,\n type CSSProperties,\n} from \"react\"\nimport { BrowserRenderer, setRootRenderableClass } from \"./browser-renderer\"\nimport { createBrowserRoot, type BrowserRoot } from \"./create-browser-root\"\nimport { CanvasPainter } from \"./canvas-painter\"\nimport { RootRenderable } from \"@gridland/core\"\nimport { HeadlessRenderer, setHeadlessRootRenderableClass } from \"./headless-renderer\"\nimport { createHeadlessRoot } from \"./create-headless-root\"\n\nexport interface TUIProps {\n children: ReactNode\n /** CSS styles for the outer container div */\n style?: CSSProperties\n /** CSS class for the outer container div */\n className?: string\n /** Font size in pixels (default: 14) */\n fontSize?: number\n /** Font family (default: monospace stack) */\n fontFamily?: string\n /** Auto-focus the canvas for keyboard input (default: true) */\n autoFocus?: boolean\n /** Background color for the canvas (default: transparent) */\n backgroundColor?: string\n /** Called when the renderer is ready */\n onReady?: (renderer: BrowserRenderer) => void\n /** Columns to use for SSR headless render (default: 80) */\n fallbackCols?: number\n /** Rows to use for SSR headless render (default: 24) */\n fallbackRows?: number\n}\n\n/**\n * A single React component that renders TUI content to an HTML5 Canvas.\n * Gridland is built on the opentui engine.\n *\n * Usage:\n * ```tsx\n * <TUI style={{ width: \"100%\", height: 400 }}>\n * <box border borderStyle=\"rounded\">\n * <text>Hello from Gridland!</text>\n * </box>\n * </TUI>\n * ```\n *\n * No dynamic imports, no wrapper chains. Just a component.\n */\nexport function TUI({\n children,\n style,\n className,\n fontSize = 14,\n fontFamily = \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\",\n autoFocus = true,\n backgroundColor,\n onReady,\n fallbackCols = 80,\n fallbackRows = 24,\n}: TUIProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const rendererRef = useRef<BrowserRenderer | null>(null)\n const rootRef = useRef<BrowserRoot | null>(null)\n const [isClient, setIsClient] = useState(false)\n\n // SSR safety: only render canvas on the client\n useEffect(() => {\n setIsClient(true)\n }, [])\n\n // Initialize renderer when canvas is available\n useEffect(() => {\n if (!isClient) return\n\n const canvas = canvasRef.current\n const container = containerRef.current\n if (!canvas || !container) return\n\n setRootRenderableClass(RootRenderable)\n\n // Measure cell size to calculate grid dimensions\n const painter = new CanvasPainter({ fontSize, fontFamily })\n const tempCtx = canvas.getContext(\"2d\")!\n const cellSize = painter.measureCell(tempCtx)\n\n const containerRect = container.getBoundingClientRect()\n const cols = Math.max(1, Math.floor(containerRect.width / cellSize.width))\n const rows = Math.max(1, Math.floor(containerRect.height / cellSize.height))\n\n const renderer = new BrowserRenderer(canvas, cols, rows, { backgroundColor })\n rendererRef.current = renderer\n\n const root = createBrowserRoot(renderer)\n rootRef.current = root\n\n root.render(children)\n renderer.start()\n\n canvas.tabIndex = 0\n if (autoFocus) {\n canvas.focus()\n }\n\n onReady?.(renderer)\n\n // Handle keyboard events\n const onKeyDown = (e: KeyboardEvent) => {\n renderer.handleKeyDown(e)\n }\n canvas.addEventListener(\"keydown\", onKeyDown)\n\n // Handle resize with ResizeObserver\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect\n const newCols = Math.max(1, Math.floor(width / cellSize.width))\n const newRows = Math.max(1, Math.floor(height / cellSize.height))\n renderer.resize(newCols, newRows)\n }\n })\n resizeObserver.observe(container)\n\n return () => {\n canvas.removeEventListener(\"keydown\", onKeyDown)\n resizeObserver.disconnect()\n renderer.stop()\n root.unmount()\n rendererRef.current = null\n rootRef.current = null\n }\n }, [isClient, fontSize, fontFamily, backgroundColor]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Re-render when children change\n useEffect(() => {\n if (rootRef.current) {\n rootRef.current.render(children)\n }\n }, [children])\n\n if (!isClient) {\n // Only run the headless render on the actual server.\n // On the client's initial render (before useEffect sets isClient=true),\n // we render an empty <pre> and let suppressHydrationWarning preserve\n // the server-rendered DOM until the canvas takes over.\n const isServer = typeof window === \"undefined\"\n let text = \"\"\n if (isServer) {\n setHeadlessRootRenderableClass(RootRenderable)\n const renderer = new HeadlessRenderer({ cols: fallbackCols, rows: fallbackRows })\n const root = createHeadlessRoot(renderer)\n text = root.renderToText(children)\n root.unmount()\n }\n return (\n <div style={style} className={className}>\n <pre\n suppressHydrationWarning\n aria-hidden\n style={{\n fontFamily,\n fontSize,\n margin: 0,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"pre\",\n }}\n >\n {text}\n </pre>\n </div>\n )\n }\n\n return (\n <div\n ref={containerRef}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n ...style,\n }}\n className={className}\n >\n <canvas\n ref={canvasRef}\n style={{\n display: \"block\",\n width: \"100%\",\n height: \"100%\",\n outline: \"none\",\n }}\n />\n </div>\n )\n}\n", "// Types matching opentui core types.ts\nimport type { RGBA } from \"./rgba\"\nimport type { Renderable } from \"./renderable-types\"\n\nexport const TextAttributes = {\n NONE: 0,\n BOLD: 1 << 0,\n DIM: 1 << 1,\n ITALIC: 1 << 2,\n UNDERLINE: 1 << 3,\n BLINK: 1 << 4,\n INVERSE: 1 << 5,\n HIDDEN: 1 << 6,\n STRIKETHROUGH: 1 << 7,\n}\n\nexport const ATTRIBUTE_BASE_BITS = 8\nexport const ATTRIBUTE_BASE_MASK = 0xff\n\nexport function getBaseAttributes(attr: number): number {\n return attr & 0xff\n}\n\nexport type ThemeMode = \"dark\" | \"light\"\nexport type CursorStyle = \"block\" | \"line\" | \"underline\"\nexport type MousePointerStyle = \"default\" | \"pointer\" | \"text\" | \"crosshair\" | \"move\" | \"not-allowed\"\nexport type WidthMethod = \"wcwidth\" | \"unicode\"\nexport type Timeout = ReturnType<typeof setTimeout> | undefined\n\nexport interface CursorStyleOptions {\n style?: CursorStyle\n blinking?: boolean\n color?: RGBA\n cursor?: MousePointerStyle\n}\n\nexport enum DebugOverlayCorner {\n topLeft = 0,\n topRight = 1,\n bottomLeft = 2,\n bottomRight = 3,\n}\n\nexport interface RenderContext {\n addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void\n pushHitGridScissorRect: (x: number, y: number, width: number, height: number) => void\n popHitGridScissorRect: () => void\n clearHitGridScissorRects: () => void\n width: number\n height: number\n requestRender: () => void\n setCursorPosition: (x: number, y: number, visible: boolean) => void\n setCursorStyle: (options: CursorStyleOptions) => void\n setCursorColor: (color: RGBA) => void\n setMousePointer: (shape: MousePointerStyle) => void\n widthMethod: WidthMethod\n capabilities: any | null\n requestLive: () => void\n dropLive: () => void\n hasSelection: boolean\n getSelection: () => any | null\n requestSelectionUpdate: () => void\n currentFocusedRenderable: any | null\n focusRenderable: (renderable: any) => void\n registerLifecyclePass: (renderable: any) => void\n unregisterLifecyclePass: (renderable: any) => void\n getLifecyclePasses: () => Set<any>\n keyInput: any\n _internalKeyInput: any\n clearSelection: () => void\n startSelection: (renderable: any, x: number, y: number) => void\n updateSelection: (\n currentRenderable: any | undefined,\n x: number,\n y: number,\n options?: { finishDragging?: boolean },\n ) => void\n // EventEmitter methods\n on: (event: string, listener: (...args: any[]) => void) => any\n off: (event: string, listener: (...args: any[]) => void) => any\n emit: (event: string, ...args: any[]) => boolean\n removeAllListeners: (event?: string) => any\n}\n\nexport interface ViewportBounds {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport interface Highlight {\n start: number\n end: number\n styleId: number\n priority?: number | null\n hlRef?: number | null\n}\n\nexport interface LineInfo {\n lineStarts: number[]\n lineWidths: number[]\n maxLineWidth: number\n lineSources: number[]\n lineWraps: number[]\n}\n\nexport interface LineInfoProvider {\n get lineInfo(): LineInfo\n get lineCount(): number\n get virtualLineCount(): number\n get scrollY(): number\n}\n\nexport interface CapturedSpan {\n text: string\n fg: RGBA\n bg: RGBA\n attributes: number\n width: number\n}\n\nexport interface CapturedLine {\n spans: CapturedSpan[]\n}\n\nexport interface CapturedFrame {\n cols: number\n rows: number\n cursor: [number, number]\n lines: CapturedLine[]\n}\n", "// Browser-compatible EventEmitter shim.\n// Replaces the 'events' npm package to avoid CJS/ESM issues in Vite.\n\ntype Listener = (...args: any[]) => void\n\nexport class EventEmitter {\n private _listeners = new Map<string | symbol, Listener[]>()\n\n on(event: string | symbol, listener: Listener): this {\n const list = this._listeners.get(event) ?? []\n list.push(listener)\n this._listeners.set(event, list)\n return this\n }\n\n addListener(event: string | symbol, listener: Listener): this {\n return this.on(event, listener)\n }\n\n off(event: string | symbol, listener: Listener): this {\n return this.removeListener(event, listener)\n }\n\n removeListener(event: string | symbol, listener: Listener): this {\n const list = this._listeners.get(event)\n if (list) {\n const idx = list.indexOf(listener)\n if (idx !== -1) list.splice(idx, 1)\n if (list.length === 0) this._listeners.delete(event)\n }\n return this\n }\n\n removeAllListeners(event?: string | symbol): this {\n if (event) {\n this._listeners.delete(event)\n } else {\n this._listeners.clear()\n }\n return this\n }\n\n emit(event: string | symbol, ...args: any[]): boolean {\n const list = this._listeners.get(event)\n if (!list || list.length === 0) return false\n for (const listener of [...list]) {\n listener(...args)\n }\n return true\n }\n\n once(event: string | symbol, listener: Listener): this {\n const wrapper = (...args: any[]) => {\n this.removeListener(event, wrapper)\n listener(...args)\n }\n return this.on(event, wrapper)\n }\n\n listenerCount(event: string | symbol): number {\n return this._listeners.get(event)?.length ?? 0\n }\n\n listeners(event: string | symbol): Listener[] {\n return [...(this._listeners.get(event) ?? [])]\n }\n\n eventNames(): (string | symbol)[] {\n return [...this._listeners.keys()]\n }\n\n setMaxListeners(_n: number): this {\n return this // no-op in browser\n }\n\n getMaxListeners(): number {\n return Infinity\n }\n}\n\nexport default EventEmitter\n", "\nvar loadYoga = (() => {\n var _scriptDir = import.meta.url;\n \n return (\nfunction(loadYoga) {\n loadYoga = loadYoga || {};\n\n\nvar h;h||(h=typeof loadYoga !== 'undefined' ? loadYoga : {});var aa,ca;h.ready=new Promise(function(a,b){aa=a;ca=b});var da=Object.assign({},h),q=\"\";\"undefined\"!=typeof document&&document.currentScript&&(q=document.currentScript.src);_scriptDir&&(q=_scriptDir);0!==q.indexOf(\"blob:\")?q=q.substr(0,q.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):q=\"\";var ea=h.print||console.log.bind(console),v=h.printErr||console.warn.bind(console);Object.assign(h,da);da=null;var w;h.wasmBinary&&(w=h.wasmBinary);\nvar noExitRuntime=h.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&x(\"no native wasm support detected\");var fa,ha=!1;function z(a,b,c){c=b+c;for(var d=\"\";!(b>=c);){var e=a[b++];if(!e)break;if(e&128){var f=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var g=a[b++]&63;e=224==(e&240)?(e&15)<<12|f<<6|g:(e&7)<<18|f<<12|g<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}\nvar ia,ja,A,C,ka,D,E,la,ma;function na(){var a=fa.buffer;ia=a;h.HEAP8=ja=new Int8Array(a);h.HEAP16=C=new Int16Array(a);h.HEAP32=D=new Int32Array(a);h.HEAPU8=A=new Uint8Array(a);h.HEAPU16=ka=new Uint16Array(a);h.HEAPU32=E=new Uint32Array(a);h.HEAPF32=la=new Float32Array(a);h.HEAPF64=ma=new Float64Array(a)}var oa,pa=[],qa=[],ra=[];function sa(){var a=h.preRun.shift();pa.unshift(a)}var F=0,ta=null,G=null;\nfunction x(a){if(h.onAbort)h.onAbort(a);a=\"Aborted(\"+a+\")\";v(a);ha=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ca(a);throw a;}function ua(a){return a.startsWith(\"data:application/octet-stream;base64,\")}var H;H=\"data:application/octet-stream;base64,AGFzbQEAAAABugM3YAF/AGACf38AYAF/AX9gA39/fwBgAn98AGACf38Bf2ADf39/AX9gBH9/f30BfWADf398AGAAAGAEf39/fwBgAX8BfGACf38BfGAFf39/f38Bf2AAAX9gA39/fwF9YAZ/f31/fX8AYAV/f39/fwBgAn9/AX1gBX9/f319AX1gAX8BfWADf35/AX5gB39/f39/f38AYAZ/f39/f38AYAR/f39/AX9gBn9/f319fQF9YAR/f31/AGADf399AX1gBn98f39/fwF/YAR/fHx/AGACf30AYAh/f39/f39/fwBgDX9/f39/f39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38BfGAEfHx/fwF9YA1/fX1/f399fX9/f39/AX9gB39/f319f38AYAJ+fwF/YAN/fX0BfWABfAF8YAN/fHwAYAR/f319AGAHf39/fX19fQF9YA1/fX99f31/fX19fX1/AX9gC39/f39/f399fX19AX9gCH9/f39/f319AGAEf39+fgBgB39/f39/f38Bf2ACfH8BfGAFf398fH8AYAN/f38BfGAEf39/fABgA39/fQBgBn9/fX99fwF/ArUBHgFhAWEAHwFhAWIAAwFhAWMACQFhAWQAFgFhAWUAEQFhAWYAIAFhAWcAAAFhAWgAIQFhAWkAAwFhAWoAAAFhAWsAFwFhAWwACgFhAW0ABQFhAW4AAwFhAW8AAQFhAXAAFwFhAXEABgFhAXIAAAFhAXMAIgFhAXQACgFhAXUADQFhAXYAFgFhAXcAAgFhAXgAAwFhAXkAGAFhAXoAAgFhAUEAAQFhAUIAEQFhAUMAAQFhAUQAAAOiAqACAgMSBwcACRkDAAoRBgYKEwAPDxMBBiMTCgcHGgMUASQFJRQHAwMKCgMmAQYYDxobFAAKBw8KBwMDAgkCAAAFGwACBwIHBgIDAQMIDAABKAkHBQURACkZASoAAAIrLAIALQcHBy4HLwkFCgMCMA0xAgMJAgACAQYKAQIBBQEACQIFAQEABQAODQ0GFQIBHBUGAgkCEAAAAAUyDzMMBQYINAUCAwUODg41AgMCAgIDBgICNgIBDAwMAQsLCwsLCx0CAAIAAAABABABBQICAQMCEgMMCwEBAQEBAQsLAQICAwICAgICAgIDAgIICAEICAgEBAQEBAQEBAQABAQABAQEBAAE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GiABQQA2AvADIAFCADcC6AMgAigC7AMiAyACKALoAyIERwRAIAMgBGsiBEEASA0FIAEgBBAeIgM2AuwDIAEgAzYC6AMgASADIARqNgLwAyACKALoAyIEIAIoAuwDIghHBEADQCADIAQoAgA2AgAgA0EEaiEDIARBBGoiBCAIRw0ACwsgASADNgLsAwsgASACKQL0AzcC9AMgASACKAKEBDYChAQgASACKQL8AzcC/AMgAUEANgLkAwsgBSABNgIAIAEgADYC5AMLIAZBAWohBiAFQQRqIgUgB0cNAAsLDwsQAgALUAACQAJAAkACQAJAIAIOBAQAAQIDCyAAIAEgAUEwahBDDwsgACABIAFBMGogAxBEDwsgACABIAFBMGoQQg8LECQACyAAIAEgAUEwaiADEEULcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QdwlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt5AgF/AX0jAEEQayIDJAAgA0EIaiAAIAFBAnRB7CVqKAIAIAIQU0MAAMB/IQQCQAJAAkAgAy0ADEEBaw4CAAECCyADKgIIIQQMAQsgAyoCCEMAAAAAlEMK1yM8lCEECyADQRBqJAAgBEMAAAAAl0MAAAAAIAQgBFsbC1QAAkACQAJAAkACQCACDgQEAAECAwsgACABIAFBwgBqEEMPCyAAIAEgAUHCAGogAxBEDwsgACABIAFBwgBqEEIPCxAkAAsgACABIAFBwgBqIAMQRQsvACAAIAJFQQF0IgIgASADEGAgACACIAEQS5IgACACIAEgAxB/IAAgAiABEFKSkgvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akH2AGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALzgECA38CfSMAQRBrIgMk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AWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAVCwUAEFgACzkAIABFBEBBAA8LAn8gAUGAf3FBgL8DRiABQf8ATXJFBEBB/DtBGTYCAEF/DAELIAAgAToAAEEBCwvEAgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAQALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQegAaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQOQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIANBEGokAAtdAQR/IAAoAgAhAgNAIAIsAAAiAxBXBEBBfyEEIAAgAkEBaiICNgIAIAFBzJmz5gBNBH9BfyADQTBrIgMgAUEKbCIEaiADIARB/////wdzShsFIAQLIQEMAQsLIAELrhQCEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRQCQAJAAkACQANAIAEhDSAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCANIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAH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IQEgAEIANwIEIAAgATYCACABIAA2AgQgAkEQaiQAIAALGwEBfyAABEAgACgCACIBBEAgARAjCyAAECMLC0kBAn9BBBAeIQFBIBAeIgBBADYCHCAAQoCAgICAgIDAPzcCFCAAQgA3AgwgAEEAOgAIIABBAzYCBCAAQQA2AgAgASAANgIAIAELIAAgAkEFR0EAIAIbRQRAQbgwIAMgBBBJDwsgAyAEEHALIgEBfiABIAKtIAOtQiCGhCAEIAARFQAiBUIgiKckASAFpwuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECsaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECsaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACCwQAQgALBABBAAuKBQIGfgJ/IAEgASgCAEEHakF4cSIBQRBqNgIAIAAhCSABKQMAIQMgASkDCCEGIwBBIGsiCCQAAkAgBkL///////////8AgyIEQoCAgICAgMCAPH0gBEKAgICAgIDA/8MAfVQEQCAGQgSGIANCPIiEIQQgA0L//////////w+DIgNCgYCAgICAgIAIWgRAIARCgYCAgICAgIDAAHwhAgwCCyAEQoCAgICAgICAQH0hAiADQoCAgICAgICACFINASACIARCAYN8IQIMAQsgA1AgBEKAgICAgIDA//8AVCAEQoCAgICAgMD//wBRG0UEQCAGQgSGIANCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiAEQv///////7//wwBWDQBCACECIARCMIinIgBBkfcASQ0AIAMhAiAGQv///////z+DQoCAgICAgMAAhCIFIQcCQCAAQYH3AGsiAUHAAHEEQCACIAFBQGqthiEHQgAhAgwBCyABRQ0AIAcgAa0iBIYgAkHAACABa62IhCEHIAIgBIYhAgsgCCACNwMQIAggBzcDGAJAQYH4ACAAayIAQcAAcQRAIAUgAEFAaq2IIQNCACEFDAELIABFDQAgBUHAACAAa62GIAMgAK0iAoiEIQMgBSACiCEFCyAIIAM3AwAgCCAF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ASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRCwALYQECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBAEEQEB4iACACKQMINwMIIAAgAikDADcDACACQRBqJAAgAAtjAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwBBEBAeIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiQAIAALNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEEAAs5AQF/IAEgACgCBCIEQQF1aiEBIAAoAgAhACABIAIgAyAEQQFxBH8gASgCACAAaigCAAUgAAsRCAALCQAgASAAEQIACwUAQcM7Cw8AIAEgACgCAGogAjYCAAsNACABIAAoAgBqKAIACxgBAX9BEBAeIgBCADcDCCAAQQA2AgAgAAsYAQF/QRAQHiIAQgA3AwAgAEIANwMIIAALDABBMBAeQQBBMBAqCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRHgALBQBBvjsLIQAgACABKAIAIAEgASwAC0EASBtBuzsgAigCABAQNgIACyoBAX9BDBAeIgFBADoABCABIAAoAgA2AgggAEEANgIAIAFB2Cc2AgAgAQsFAEG7OwsFAEG4OwshACAAIAEoAgAgASABLAALQQBIG0GkOyACKAIAEBA2AgAL2AEBBH8jAEEgayIDJAAgASgCACIEQfD///8HSQRAAkACQCAEQQtPBEAgBEEPckEBaiIFEB4hBiADIAVBgICAgHhyNgIQIAMgBjYCCCADIAQ2AgwgBCAGaiEFDAELIAMgBDoAEyADQQhqIgYgBGohBSAERQ0BCyAGIAFBBGogBBArGgsgBUEAOgAAIAMgAjYCACADQRhqIANBCGogAyAAEQMAIAMoAhgQHSADKAIYIgAQBiADKAIAEAYgAywAE0EASARAIAMoAggQIwsgA0EgaiQAIAAPCxACAAsqAQF/QQwQHiIBQQA6AAQgASAAKAIANgIIIABBADYCACABQeAmNgIA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AkEIaiAIIAYQHyACIAcgAC8AABAfQQEhAyACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSADC0UNAiACLQAMIAItAARHDQILIABBAmohAEEBIQMgBCEGQQEhBCAGRQ0ACyABLwB6IgBBB3FFBEAgBS0AekEHcUUNAgsgCCAAECAiCiAHIAUvAHoQICILWw0BIAogClsNACALIAtcDQELIAFBFGogBUEUakHoABArGiABQfwAaiAFQfwAahCgAQNAIAEtAAAiAEEEcQ0BIAEgAEEEcjoAACABKAIQIgAEQCABIAARAAALIAFBgICA/gc2ApwBIAEoAuQDIgENAAsLIAJBEGokAAvGAwEEfyMAQaAEayICJAAgACgCBCEBIABBADYCBCABBEAgASABKAIAKAIEEQAACyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALAkAgACgCACIAKALoAyAAKALsA0YEQCAAKALkAw0BIAAgAkEYaiAAKAL0AxBcIgEpAgA3AgAgACABKAIQNgIQIAAgASkCCDcCCCAAQRRqIAFBFGpB6AAQKxogACABKQKMATcCjAEgACABKQKEATcChAEgACABKQJ8NwJ8IAEoApQBIQQgAUEANgKUASAAKAKUASEDIAAgBDYClAEgAwRAIAMQWwsgAEGYAWogAUGYAWpB0AIQKxogACgC6AMiAwRAIAAgAzYC7AMgAxAjCyAAIAEoAugDNgLoAyAAIAEoAuwDNgLsAyAAIAEoAvADNgLwAyABQQA2AvADIAFCADcC6AMgACABKQL8AzcC/AMgACABKQL0AzcC9AMgACABKAKEBDYChAQgASgClAEhACABQQA2ApQBIAAEQCAAEFsLIAJBoARqJAAPCyACQfAcNgIQIABBBUHYJSACQRBqECwQJAALIAJB5hE2AgAgAEEFQdglIAIQLBAkAAsLAEEMEB4gABCiAQsLAEEMEB5BABCiAQsNACAAKAIALQAIQQFxCwoAIAAoAgAoAhQLGQAgAUH/AXEEQBACAAsgACgCACgCEEEBcQsYACAAKAIAIgAgAC0ACEH+AXEgAXI6AAgLJgAgASAAKAIAIgAoAhRHBEAgACABNgIUIAAgACgCDEEBajYCDAsLkgEBAn8jAEEQayICJAAgACgCACEAIAFDAAAAAGAEQCABIAAqAhhcBEAgACABOAIYIAAgACgCDEEBajYCDAsgAkEQaiQADwsgAkGIFDYCACMAQRBrIgMkACADIAI2AgwCQCAARQRAQbgwQdglIAIQSRoMAQsgAEEAQQVB2CUgAiAAKAIEEQ0AGgsgA0EQaiQAECQACz8AIAFB/wFxRQRAIAIgACgCACIAKAIQIgFBAXFHBEAgACABQX5xIAJyNgIQIAAgACgCDEEBajYCDAsPCxACAAsL4CYjAEGACAuBHk9ubHkgbGVhZiBub2RlcyB3aXRoIGN1c3RvbSBtZWFzdXJlIGZ1bmN0aW9ucyBzaG91bGQgbWFudWFsbHkgbWFyayB0aGVtc2VsdmVzIGFzIGRpcnR5AGlzRGlydHkAbWFya0RpcnR5AGRlc3Ryb3kAc2V0RGlzcGxheQBnZXREaXNwbGF5AHNldEZsZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABzZXRGbGV4R3JvdwBnZXRGbGV4R3JvdwBzZXRPdmVyZmxvdwBnZXRPdmVyZmxvdwBoYXNOZXdMYXlvdXQAY2FsY3VsYXRlTGF5b3V0AGdldENvbXB1dGVkTGF5b3V0AHVuc2lnbmVkIHNob3J0AGdldENoaWxkQ291bnQAdW5zaWduZWQgaW50AHNldEp1c3RpZnlDb250ZW50AGdldEp1c3RpZnlDb250ZW50AGF2YWlsYWJsZUhlaWdodCBpcyBpbmRlZmluaXRlIHNvIGhlaWdodFNpemluZ01vZGUgbXVzdCBiZSBTaXppbmdNb2RlOjpNYXhDb250ZW50AGF2YWlsYWJsZVdpZHRoIGlzIGluZGVmaW5pdGUgc28gd2lkdGhTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABzZXRBbGlnbkNvbnRlbnQAZ2V0QWxpZ25Db250ZW50AGdldFBhcmVudABpbXBsZW1lbnQAc2V0TWF4SGVpZ2h0UGVyY2VudABzZXRIZWlnaHRQZXJjZW50AHNldE1pbkhlaWdodFBlcmNlbnQAc2V0RmxleEJhc2lzUGVyY2VudABzZXRHYXBQZXJjZW50AHNldFBvc2l0aW9uUGVyY2VudABzZXRNYXJnaW5QZXJjZW50AHNldE1heFdpZHRoUGVyY2VudABzZXRXaWR0aFBlcmNlbnQAc2V0TWluV2lkdGhQZXJjZW50AHNldFBhZGRpbmdQZXJjZW50AGhhbmRsZS50eXBlKCkgPT0gU3R5bGVWYWx1ZUhhbmRsZTo6VHlwZTo6UG9pbnQgfHwgaGFuZGxlLnR5cGUoKSA9PSBTdHlsZVZhbHVlSGFuZGxlOjpUeXBlOjpQZXJjZW50AGNyZWF0ZURlZmF1bHQAdW5pdAByaWdodABoZWlnaHQAc2V0TWF4SGVpZ2h0AGdldE1heEhlaWdodABzZXRIZWlnaHQAZ2V0SGVpZ2h0AHNldE1pbkhlaWdodABnZXRNaW5IZWlnaHQAZ2V0Q29tcHV0ZWRIZWlnaHQAZ2V0Q29tcHV0ZWRSaWdodABsZWZ0AGdldENvbXB1dGVkTGVmdAByZXNldABfX2Rlc3RydWN0AGZsb2F0AHVpbnQ2NF90AHVzZVdlYkRlZmF1bHRzAHNldFVzZVdlYkRlZmF1bHRzAHNldEFsaWduSXRlbXMAZ2V0QWxpZ25JdGVtcwBzZXRGbGV4QmFzaXMAZ2V0RmxleEJhc2lzAENhbm5vdCBnZXQgbGF5b3V0IHByb3BlcnRpZXMgb2YgbXVsdGktZWRnZSBzaG9ydGhhbmRzAHNldFBvaW50U2NhbGVGYWN0b3IATWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBEaXJ0aWVkQ2FsbGJhY2tXcmFwcGVyAENhbm5vdCByZXNldCBhIG5vZGUgc3RpbGwgYXR0YWNoZWQgdG8gYSBvd25lcgBzZXRCb3JkZXIAZ2V0Qm9yZGVyAGdldENvbXB1dGVkQm9yZGVyAGdldE51bWJlcgBoYW5kbGUudHlwZSgpID09IFN0eWxlVmFsdWVIYW5kbGU6OlR5cGU6Ok51bWJlcgB1bnNpZ25lZCBjaGFyAHRvcABnZXRDb21wdXRlZFRvcABzZXRGbGV4V3JhcABnZXRGbGV4V3JhcABzZXRHYXAAZ2V0R2FwACVwAHNldEhlaWdodEF1dG8Ac2V0RmxleEJhc2lzQXV0bwBzZXRQb3NpdGlvbkF1dG8Ac2V0TWFyZ2luQXV0bwBzZXRXaWR0aEF1dG8AU2NhbGUgZmFjdG9yIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHplcm8Ac2V0QXNwZWN0UmF0aW8AZ2V0QXNwZWN0UmF0aW8Ac2V0UG9zaXRpb24AZ2V0UG9zaXRpb24Abm90aWZ5T25EZXN0cnVjdGlvbgBzZXRGbGV4RGlyZWN0aW9uAGdldEZsZXhEaXJlY3Rpb24Ac2V0RGlyZWN0aW9uAGdldERpcmVjdGlvbgBzZXRNYXJnaW4AZ2V0TWFyZ2luAGdldENvbXB1dGVkTWFyZ2luAG1hcmtMYXlvdXRTZWVuAG5hbgBib3R0b20AZ2V0Q29tcHV0ZWRCb3R0b20AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0RmxleFNocmluawBnZXRGbGV4U2hyaW5rAHNldEFsd2F5c0Zvcm1zQ29udGFpbmluZ0Jsb2NrAE1lYXN1cmVDYWxsYmFjawBEaXJ0aWVkQ2FsbGJhY2sAZ2V0TGVuZ3RoAHdpZHRoAHNldE1heFdpZHRoAGdldE1heFdpZHRoAHNldFdpZHRoAGdldFdpZHRoAHNldE1pbldpZHRoAGdldE1pbldpZHRoAGdldENvbXB1dGVkV2lkdGgAcHVzaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1NtYWxsVmFsdWVCdWZmZXIuaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1N0eWxlVmFsdWVQb29sLmgAdW5zaWduZWQgbG9uZwBzZXRCb3hTaXppbmcAZ2V0Qm94U2l6aW5nAHN0ZDo6d3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBzZXRQYWRkaW5nAGdldFBhZGRpbmcAZ2V0Q29tcHV0ZWRQYWRkaW5nAFRyaWVkIHRvIGNvbnN0cnVjdCBZR05vZGUgd2l0aCBudWxsIGNvbmZpZwBBdHRlbXB0aW5nIHRvIGNvbnN0cnVjdCBOb2RlIHdpdGggbnVsbCBjb25maWcAY3JlYXRlV2l0aENvbmZpZwBpbmYAc2V0QWxpZ25TZWxmAGdldEFsaWduU2VsZgBTaXplAHZhbHVlAFZhbHVlAGNyZWF0ZQBtZWFzdXJlAHNldFBvc2l0aW9uVHlwZQBnZXRQb3NpdGlvblR5cGUAaXNSZWZlcmVuY2VCYXNlbGluZQBzZXRJc1JlZmVyZW5jZUJhc2VsaW5lAGNvcHlTdHlsZQBkb3VibGUATm9kZQBleHRlbmQAaW5zZXJ0Q2hpbGQAZ2V0Q2hpbGQAcmVtb3ZlQ2hpbGQAdm9pZABzZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZABpc0V4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGRpcnRpZWQAQ2Fubm90IHJlc2V0IGEgbm9kZSB3aGljaCBzdGlsbCBoYXMgY2hpbGRyZW4gYXR0YWNoZWQAdW5zZXRNZWFzdXJlRnVuYwB1bnNldERpcnRpZWRGdW5jAHNldEVycmF0YQBnZXRFcnJhdGEATWVhc3VyZSBmdW5jdGlvbiByZXR1cm5lZCBhbiBpbnZhbGlkIGRpbWVuc2lvbiB0byBZb2dhOiBbd2lkdGg9JWYsIGhlaWdodD0lZl0ARXhwZWN0IGN1c3RvbSBiYXNlbGluZSBmdW5jdGlvbiB0byBub3QgcmV0dXJuIE5hTgBOQU4ASU5GAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVk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\";if(!ua(H)){var va=H;H=h.locateFile?h.locateFile(va,q):q+va}\nfunction wa(){var a=H;try{if(a==H&&w)return new Uint8Array(w);if(ua(a))try{var b=xa(a.slice(37)),c=new Uint8Array(b.length);for(a=0;a<b.length;++a)c[a]=b.charCodeAt(a);var d=c}catch(f){throw Error(\"Converting base64 string to bytes failed.\");}else d=void 0;var e=d;if(e)return e;throw\"both async and sync fetching of the wasm failed\";}catch(f){x(f)}}\nfunction ya(){return w||\"function\"!=typeof fetch?Promise.resolve().then(function(){return wa()}):fetch(H,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+H+\"'\";return a.arrayBuffer()}).catch(function(){return wa()})}function za(a){for(;0<a.length;)a.shift()(h)}function Aa(a){if(void 0===a)return\"_unknown\";a=a.replace(/[^a-zA-Z0-9_]/g,\"$\");var b=a.charCodeAt(0);return 48<=b&&57>=b?\"_\"+a:a}\nfunction Ba(a,b){a=Aa(a);return function(){return b.apply(this,arguments)}}var J=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Ca=[];function Da(a){var b=Error,c=Ba(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+\"\\n\"+d.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+\": \"+this.message};return c}var K=void 0;\nfunction L(a){throw new K(a);}var M=a=>{a||L(\"Cannot use deleted val. handle = \"+a);return J[a].value},Ea=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ca.length?Ca.pop():J.length;J[b]={ga:1,value:a};return b}},Fa=void 0,Ga=void 0;function N(a){for(var b=\"\";A[a];)b+=Ga[A[a++]];return b}var O=[];function Ha(){for(;O.length;){var a=O.pop();a.M.$=!1;a[\"delete\"]()}}var P=void 0,Q={};\nfunction Ia(a,b){for(void 0===b&&L(\"ptr should not be undefined\");a.R;)b=a.ba(b),a=a.R;return b}var R={};function Ja(a){a=Ka(a);var b=N(a);S(a);return b}function La(a,b){var c=R[a];void 0===c&&L(b+\" has unknown type \"+Ja(a));return c}function Ma(){}var Na=!1;function Oa(a){--a.count.value;0===a.count.value&&(a.T?a.U.W(a.T):a.P.N.W(a.O))}function Pa(a,b,c){if(b===c)return a;if(void 0===c.R)return null;a=Pa(a,b,c.R);return null===a?null:c.na(a)}var Qa={};function Ra(a,b){b=Ia(a,b);return Q[b]}\nvar Sa=void 0;function Ta(a){throw new Sa(a);}function Ua(a,b){b.P&&b.O||Ta(\"makeClassHandle requires ptr and ptrType\");!!b.U!==!!b.T&&Ta(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return T(Object.create(a,{M:{value:b}}))}function T(a){if(\"undefined\"===typeof FinalizationRegistry)return T=b=>b,a;Na=new FinalizationRegistry(b=>{Oa(b.M)});T=b=>{var c=b.M;c.T&&Na.register(b,{M:c},b);return b};Ma=b=>{Na.unregister(b)};return T(a)}var Va={};\nfunction Wa(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Xa(a){return this.fromWireType(D[a>>2])}var U={},Ya={};function V(a,b,c){function d(k){k=c(k);k.length!==a.length&&Ta(\"Mismatched type converter count\");for(var m=0;m<a.length;++m)W(a[m],k[m])}a.forEach(function(k){Ya[k]=b});var e=Array(b.length),f=[],g=0;b.forEach((k,m)=>{R.hasOwnProperty(k)?e[m]=R[k]:(f.push(k),U.hasOwnProperty(k)||(U[k]=[]),U[k].push(()=>{e[m]=R[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)}\nfunction Za(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+a);}}\nfunction W(a,b,c={}){if(!(\"argPackAdvance\"in b))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");var d=b.name;a||L('type \"'+d+'\" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.ua)return;L(\"Cannot register type '\"+d+\"' twice\")}R[a]=b;delete Ya[a];U.hasOwnProperty(a)&&(b=U[a],delete U[a],b.forEach(e=>e()))}function $a(a){L(a.M.P.N.name+\" instance already deleted\")}function X(){}\nfunction ab(a,b,c){if(void 0===a[b].S){var d=a[b];a[b]=function(){a[b].S.hasOwnProperty(arguments.length)||L(\"Function '\"+c+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+a[b].S+\")!\");return a[b].S[arguments.length].apply(this,arguments)};a[b].S=[];a[b].S[d.Z]=d}}\nfunction bb(a,b){h.hasOwnProperty(a)?(L(\"Cannot register public name '\"+a+\"' twice\"),ab(h,a,a),h.hasOwnProperty(void 0)&&L(\"Cannot register multiple overloads of a function with the same number of arguments (undefined)!\"),h[a].S[void 0]=b):h[a]=b}function cb(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.X=c;this.W=d;this.R=e;this.pa=f;this.ba=g;this.na=k;this.ja=[]}\nfunction db(a,b,c){for(;b!==c;)b.ba||L(\"Expected null or instance of \"+c.name+\", got an instance of \"+b.name),a=b.ba(a),b=b.R;return a}function eb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction gb(a,b){if(null===b){this.ea&&L(\"null is not a valid \"+this.name);if(this.da){var c=this.fa();null!==a&&a.push(this.W,c);return c}return 0}b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);!this.ca&&b.M.P.ca&&L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);c=db(b.M.O,b.M.P.N,this.N);if(this.da)switch(void 0===b.M.T&&L(\"Passing raw pointer to smart pointer is illegal\"),\nthis.Ba){case 0:b.M.U===this?c=b.M.T:L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);break;case 1:c=b.M.T;break;case 2:if(b.M.U===this)c=b.M.T;else{var d=b.clone();c=this.xa(c,Ea(function(){d[\"delete\"]()}));null!==a&&a.push(this.W,c)}break;default:L(\"Unsupporting sharing policy\")}return c}\nfunction hb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);b.M.P.ca&&L(\"Cannot convert argument of type \"+b.M.P.name+\" to parameter type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction Y(a,b,c,d){this.name=a;this.N=b;this.ea=c;this.ca=d;this.da=!1;this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0;void 0!==b.R?this.toWireType=gb:(this.toWireType=d?eb:hb,this.V=null)}function ib(a,b){h.hasOwnProperty(a)||Ta(\"Replacing nonexistant public symbol\");h[a]=b;h[a].Z=void 0}\nfunction jb(a,b){var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes(\"j\")){var d=h[\"dynCall_\"+a];d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)}else d=oa.get(b).apply(null,c);return d}}function Z(a,b){a=N(a);var c=a.includes(\"j\")?jb(a,b):oa.get(b);\"function\"!=typeof c&&L(\"unknown function pointer with signature \"+a+\": \"+b);return c}var mb=void 0;\nfunction nb(a,b){function c(f){e[f]||R[f]||(Ya[f]?Ya[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new mb(a+\": \"+d.map(Ja).join([\", \"]));}\nfunction ob(a,b,c,d,e){var f=b.length;2>f&&L(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var g=null!==b[1]&&null!==c,k=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].V){k=!0;break}var m=\"void\"!==b[0].name,l=f-2,n=Array(l),p=[],r=[];return function(){arguments.length!==l&&L(\"function \"+a+\" called with \"+arguments.length+\" arguments, expected \"+l+\" args!\");r.length=0;p.length=g?2:1;p[0]=e;if(g){var u=b[1].toWireType(r,this);p[1]=u}for(var t=0;t<l;++t)n[t]=\nb[t+2].toWireType(r,arguments[t]),p.push(n[t]);t=d.apply(null,p);if(k)Wa(r);else for(var y=g?1:2;y<b.length;y++){var B=1===y?u:n[y-2];null!==b[y].V&&b[y].V(B)}u=m?b[0].fromWireType(t):void 0;return u}}function pb(a,b){for(var c=[],d=0;d<a;d++)c.push(E[b+4*d>>2]);return c}function qb(a){4<a&&0===--J[a].ga&&(J[a]=void 0,Ca.push(a))}function fb(a){if(null===a)return\"null\";var b=typeof a;return\"object\"===b||\"array\"===b||\"function\"===b?a.toString():\"\"+a}\nfunction rb(a,b){switch(b){case 2:return function(c){return this.fromWireType(la[c>>2])};case 3:return function(c){return this.fromWireType(ma[c>>3])};default:throw new TypeError(\"Unknown float type: \"+a);}}\nfunction sb(a,b,c){switch(b){case 0:return c?function(d){return ja[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ka[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw new TypeError(\"Unknown integer type: \"+a);}}function tb(a,b){for(var c=\"\",d=0;!(d>=b/2);++d){var e=C[a+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}\nfunction ub(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b>>1]=a.charCodeAt(e),b+=2;C[b>>1]=0;return b-d}function vb(a){return 2*a.length}function wb(a,b){for(var c=0,d=\"\";!(c>=b/4);){var e=D[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}\nfunction xb(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}D[b>>2]=f;b+=4;if(b+4>c)break}D[b>>2]=0;return b-d}function yb(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var zb={};function Ab(a){var b=zb[a];return void 0===b?N(a):b}var Bb=[];function Cb(a){var b=Bb.length;Bb.push(a);return b}\nfunction Db(a,b){for(var c=Array(a),d=0;d<a;++d)c[d]=La(E[b+4*d>>2],\"parameter \"+d);return c}var Eb=[],Fb=[null,[],[]];K=h.BindingError=Da(\"BindingError\");h.count_emval_handles=function(){for(var a=0,b=5;b<J.length;++b)void 0!==J[b]&&++a;return a};h.get_first_emval=function(){for(var a=5;a<J.length;++a)if(void 0!==J[a])return J[a];return null};Fa=h.PureVirtualError=Da(\"PureVirtualError\");for(var Gb=Array(256),Hb=0;256>Hb;++Hb)Gb[Hb]=String.fromCharCode(Hb);Ga=Gb;h.getInheritedInstanceCount=function(){return Object.keys(Q).length};\nh.getLiveInheritedInstances=function(){var a=[],b;for(b in Q)Q.hasOwnProperty(b)&&a.push(Q[b]);return a};h.flushPendingDeletes=Ha;h.setDelayFunction=function(a){P=a;O.length&&P&&P(Ha)};Sa=h.InternalError=Da(\"InternalError\");X.prototype.isAliasOf=function(a){if(!(this instanceof X&&a instanceof X))return!1;var b=this.M.P.N,c=this.M.O,d=a.M.P.N;for(a=a.M.O;b.R;)c=b.ba(c),b=b.R;for(;d.R;)a=d.ba(a),d=d.R;return b===d&&c===a};\nX.prototype.clone=function(){this.M.O||$a(this);if(this.M.aa)return this.M.count.value+=1,this;var a=T,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.M;a=a(c.call(b,d,{M:{value:{count:e.count,$:e.$,aa:e.aa,O:e.O,P:e.P,T:e.T,U:e.U}}}));a.M.count.value+=1;a.M.$=!1;return a};X.prototype[\"delete\"]=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");Ma(this);Oa(this.M);this.M.aa||(this.M.T=void 0,this.M.O=void 0)};X.prototype.isDeleted=function(){return!this.M.O};\nX.prototype.deleteLater=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");O.push(this);1===O.length&&P&&P(Ha);this.M.$=!0;return this};Y.prototype.qa=function(a){this.ka&&(a=this.ka(a));return a};Y.prototype.ha=function(a){this.W&&this.W(a)};Y.prototype.argPackAdvance=8;Y.prototype.readValueFromPointer=Xa;Y.prototype.deleteObject=function(a){if(null!==a)a[\"delete\"]()};\nY.prototype.fromWireType=function(a){function b(){return this.da?Ua(this.N.X,{P:this.wa,O:c,U:this,T:a}):Ua(this.N.X,{P:this,O:a})}var c=this.qa(a);if(!c)return this.ha(a),null;var d=Ra(this.N,c);if(void 0!==d){if(0===d.M.count.value)return d.M.O=c,d.M.T=a,d.clone();d=d.clone();this.ha(a);return d}d=this.N.pa(c);d=Qa[d];if(!d)return b.call(this);d=this.ca?d.la:d.pointerType;var e=Pa(c,this.N,d.N);return null===e?b.call(this):this.da?Ua(d.N.X,{P:d,O:e,U:this,T:a}):Ua(d.N.X,{P:d,O:e})};\nmb=h.UnboundTypeError=Da(\"UnboundTypeError\");\nvar xa=\"function\"==typeof atob?atob:function(a){var b=\"\",c=0;a=a.replace(/[^A-Za-z0-9\\+\\/=]/g,\"\");do{var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var f=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));d=d<<2|e>>4;\ne=(e&15)<<4|f>>2;var k=(f&3)<<6|g;b+=String.fromCharCode(d);64!==f&&(b+=String.fromCharCode(e));64!==g&&(b+=String.fromCharCode(k))}while(c<a.length);return b},Jb={l:function(a,b,c,d){x(\"Assertion failed: \"+(a?z(A,a):\"\")+\", at: \"+[b?b?z(A,b):\"\":\"unknown filename\",c,d?d?z(A,d):\"\":\"unknown function\"])},q:function(a,b,c){a=N(a);b=La(b,\"wrapper\");c=M(c);var d=[].slice,e=b.N,f=e.X,g=e.R.X,k=e.R.constructor;a=Ba(a,function(){e.R.ja.forEach(function(l){if(this[l]===g[l])throw new Fa(\"Pure virtual function \"+\nl+\" must be implemented in JavaScript\");}.bind(this));Object.defineProperty(this,\"__parent\",{value:f});this.__construct.apply(this,d.call(arguments))});f.__construct=function(){this===f&&L(\"Pass correct 'this' to __construct\");var l=k.implement.apply(void 0,[this].concat(d.call(arguments)));Ma(l);var n=l.M;l.notifyOnDestruction();n.aa=!0;Object.defineProperties(this,{M:{value:n}});T(this);l=n.O;l=Ia(e,l);Q.hasOwnProperty(l)?L(\"Tried to register registered instance: \"+l):Q[l]=this};f.__destruct=function(){this===\nf&&L(\"Pass correct 'this' to __destruct\");Ma(this);var l=this.M.O;l=Ia(e,l);Q.hasOwnProperty(l)?delete Q[l]:L(\"Tried to unregister unregistered instance: \"+l)};a.prototype=Object.create(f);for(var m in c)a.prototype[m]=c[m];return Ea(a)},j:function(a){var b=Va[a];delete Va[a];var c=b.fa,d=b.W,e=b.ia,f=e.map(g=>g.ta).concat(e.map(g=>g.za));V([a],f,g=>{var k={};e.forEach((m,l)=>{var n=g[l],p=m.ra,r=m.sa,u=g[l+e.length],t=m.ya,y=m.Aa;k[m.oa]={read:B=>n.fromWireType(p(r,B)),write:(B,ba)=>{var I=[];t(y,\nB,u.toWireType(I,ba));Wa(I)}}});return[{name:b.name,fromWireType:function(m){var l={},n;for(n in k)l[n]=k[n].read(m);d(m);return l},toWireType:function(m,l){for(var n in k)if(!(n in l))throw new TypeError('Missing field: \"'+n+'\"');var p=c();for(n in k)k[n].write(p,l[n]);null!==m&&m.push(d,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:d}]})},v:function(){},B:function(a,b,c,d,e){var f=Za(c);b=N(b);W(a,{name:b,fromWireType:function(g){return!!g},toWireType:function(g,k){return k?d:e},argPackAdvance:8,\nreadValueFromPointer:function(g){if(1===c)var k=ja;else if(2===c)k=C;else if(4===c)k=D;else throw new TypeError(\"Unknown boolean type size: \"+b);return this.fromWireType(k[g>>f])},V:null})},f:function(a,b,c,d,e,f,g,k,m,l,n,p,r){n=N(n);f=Z(e,f);k&&(k=Z(g,k));l&&(l=Z(m,l));r=Z(p,r);var u=Aa(n);bb(u,function(){nb(\"Cannot construct \"+n+\" due to unbound types\",[d])});V([a,b,c],d?[d]:[],function(t){t=t[0];if(d){var y=t.N;var B=y.X}else B=X.prototype;t=Ba(u,function(){if(Object.getPrototypeOf(this)!==ba)throw new K(\"Use 'new' to construct \"+\nn);if(void 0===I.Y)throw new K(n+\" has no accessible constructor\");var kb=I.Y[arguments.length];if(void 0===kb)throw new K(\"Tried to invoke ctor of \"+n+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(I.Y).toString()+\") parameters instead!\");return kb.apply(this,arguments)});var ba=Object.create(B,{constructor:{value:t}});t.prototype=ba;var I=new cb(n,t,ba,r,y,f,k,l);y=new Y(n,I,!0,!1);B=new Y(n+\"*\",I,!1,!1);var lb=new Y(n+\" const*\",I,!1,!0);Qa[a]={pointerType:B,\nla:lb};ib(u,t);return[y,B,lb]})},d:function(a,b,c,d,e,f,g){var k=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(m){function l(){nb(\"Cannot call \"+n+\" due to unbound types\",k)}m=m[0];var n=m.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);var p=m.N.constructor;void 0===p[b]?(l.Z=c-1,p[b]=l):(ab(p,b,n),p[b].S[c-1]=l);V([],k,function(r){r=ob(n,[r[0],null].concat(r.slice(1)),null,f,g);void 0===p[b].S?(r.Z=c-1,p[b]=r):p[b].S[c-1]=r;return[]});return[]})},p:function(a,b,c,d,e,f){0<b||x();var g=pb(b,\nc);e=Z(d,e);V([],[a],function(k){k=k[0];var m=\"constructor \"+k.name;void 0===k.N.Y&&(k.N.Y=[]);if(void 0!==k.N.Y[b-1])throw new K(\"Cannot register multiple constructors with identical number of parameters (\"+(b-1)+\") for class '\"+k.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");k.N.Y[b-1]=()=>{nb(\"Cannot construct \"+k.name+\" due to unbound types\",g)};V([],g,function(l){l.splice(1,0,null);k.N.Y[b-1]=ob(m,l,null,e,f);return[]});return[]})},\na:function(a,b,c,d,e,f,g,k){var m=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(l){function n(){nb(\"Cannot call \"+p+\" due to unbound types\",m)}l=l[0];var p=l.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);k&&l.N.ja.push(b);var r=l.N.X,u=r[b];void 0===u||void 0===u.S&&u.className!==l.name&&u.Z===c-2?(n.Z=c-2,n.className=l.name,r[b]=n):(ab(r,b,p),r[b].S[c-2]=n);V([],m,function(t){t=ob(p,t,l,f,g);void 0===r[b].S?(t.Z=c-2,r[b]=t):r[b].S[c-2]=t;return[]});return[]})},A:function(a,b){b=N(b);W(a,\n{name:b,fromWireType:function(c){var d=M(c);qb(c);return d},toWireType:function(c,d){return Ea(d)},argPackAdvance:8,readValueFromPointer:Xa,V:null})},n:function(a,b,c){c=Za(c);b=N(b);W(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:rb(b,c),V:null})},e:function(a,b,c,d,e){b=N(b);-1===e&&(e=4294967295);e=Za(c);var f=k=>k;if(0===d){var g=32-8*c;f=k=>k<<g>>>g}c=b.includes(\"unsigned\")?function(k,m){return m>>>0}:function(k,m){return m};\nW(a,{name:b,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:sb(b,e,0!==d),V:null})},b:function(a,b,c){function d(f){f>>=2;var g=E;return new e(ia,g[f+1],g[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=N(c);W(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0})},o:function(a,b){b=N(b);var c=\"std::string\"===b;W(a,{name:b,fromWireType:function(d){var e=E[d>>2],f=d+4;if(c)for(var g=f,k=0;k<=e;++k){var m=\nf+k;if(k==e||0==A[m]){g=g?z(A,g,m-g):\"\";if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=m+1}}else{l=Array(e);for(k=0;k<e;++k)l[k]=String.fromCharCode(A[f+k]);l=l.join(\"\")}S(d);return l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f,g=\"string\"==typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||L(\"Cannot pass non-string to std::string\");if(c&&g){var k=0;for(f=0;f<e.length;++f){var m=e.charCodeAt(f);127>=m?k++:2047>=\nm?k+=2:55296<=m&&57343>=m?(k+=4,++f):k+=3}f=k}else f=e.length;k=Ib(4+f+1);m=k+4;E[k>>2]=f;if(c&&g){if(g=m,m=f+1,f=A,0<m){m=g+m-1;for(var l=0;l<e.length;++l){var n=e.charCodeAt(l);if(55296<=n&&57343>=n){var p=e.charCodeAt(++l);n=65536+((n&1023)<<10)|p&1023}if(127>=n){if(g>=m)break;f[g++]=n}else{if(2047>=n){if(g+1>=m)break;f[g++]=192|n>>6}else{if(65535>=n){if(g+2>=m)break;f[g++]=224|n>>12}else{if(g+3>=m)break;f[g++]=240|n>>18;f[g++]=128|n>>12&63}f[g++]=128|n>>6&63}f[g++]=128|n&63}}f[g]=0}}else if(g)for(g=\n0;g<f;++g)l=e.charCodeAt(g),255<l&&(S(m),L(\"String has UTF-16 code units that do not fit in 8 bits\")),A[m+g]=l;else for(g=0;g<f;++g)A[m+g]=e[g];null!==d&&d.push(S,k);return k},argPackAdvance:8,readValueFromPointer:Xa,V:function(d){S(d)}})},i:function(a,b,c){c=N(c);if(2===b){var d=tb;var e=ub;var f=vb;var g=()=>ka;var k=1}else 4===b&&(d=wb,e=xb,f=yb,g=()=>E,k=2);W(a,{name:c,fromWireType:function(m){for(var l=E[m>>2],n=g(),p,r=m+4,u=0;u<=l;++u){var t=m+4+u*b;if(u==l||0==n[t>>k])r=d(r,t-r),void 0===\np?p=r:(p+=String.fromCharCode(0),p+=r),r=t+b}S(m);return p},toWireType:function(m,l){\"string\"!=typeof l&&L(\"Cannot pass non-string to C++ string type \"+c);var n=f(l),p=Ib(4+n+b);E[p>>2]=n>>k;e(l,p+4,n+b);null!==m&&m.push(S,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:function(m){S(m)}})},k:function(a,b,c,d,e,f){Va[a]={name:N(b),fa:Z(c,d),W:Z(e,f),ia:[]}},h:function(a,b,c,d,e,f,g,k,m,l){Va[a].ia.push({oa:N(b),ta:c,ra:Z(d,e),sa:f,za:g,ya:Z(k,m),Aa:l})},C:function(a,b){b=N(b);W(a,{va:!0,name:b,\nargPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},s:function(a,b,c,d,e){a=Bb[a];b=M(b);c=Ab(c);var f=[];E[d>>2]=Ea(f);return a(b,c,f,e)},t:function(a,b,c,d){a=Bb[a];b=M(b);c=Ab(c);a(b,c,null,d)},g:qb,m:function(a,b){var c=Db(a,b),d=c[0];b=d.name+\"_$\"+c.slice(1).map(function(g){return g.name}).join(\"_\")+\"$\";var e=Eb[b];if(void 0!==e)return e;var f=Array(a-1);e=Cb((g,k,m,l)=>{for(var n=0,p=0;p<a-1;++p)f[p]=c[p+1].readValueFromPointer(l+n),n+=c[p+1].argPackAdvance;g=g[k].apply(g,\nf);for(p=0;p<a-1;++p)c[p+1].ma&&c[p+1].ma(f[p]);if(!d.va)return d.toWireType(m,g)});return Eb[b]=e},D:function(a){4<a&&(J[a].ga+=1)},r:function(a){var b=M(a);Wa(b);qb(a)},c:function(){x(\"\")},x:function(a,b,c){A.copyWithin(a,b,b+c)},w:function(a){var b=A.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var e=Math;d=Math.max(a,d);e=e.min.call(e,2147483648,d+(65536-d%65536)%65536);a:{try{fa.grow(e-ia.byteLength+65535>>>16);na();var f=1;break a}catch(g){}f=\nvoid 0}if(f)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=E[b>>2],k=E[b+4>>2];b+=8;for(var m=0;m<k;m++){var l=A[g+m],n=Fb[a];0===l||10===l?((1===a?ea:v)(z(n,0)),n.length=0):n.push(l)}e+=k}E[d>>2]=e;return 0}};\n(function(){function a(e){h.asm=e.exports;fa=h.asm.E;na();oa=h.asm.J;qa.unshift(h.asm.F);F--;h.monitorRunDependencies&&h.monitorRunDependencies(F);0==F&&(null!==ta&&(clearInterval(ta),ta=null),G&&(e=G,G=null,e()))}function b(e){a(e.instance)}function c(e){return ya().then(function(f){return WebAssembly.instantiate(f,d)}).then(function(f){return f}).then(e,function(f){v(\"failed to asynchronously prepare wasm: \"+f);x(f)})}var d={a:Jb};F++;h.monitorRunDependencies&&h.monitorRunDependencies(F);if(h.instantiateWasm)try{return h.instantiateWasm(d,\na)}catch(e){v(\"Module.instantiateWasm callback failed with error: \"+e),ca(e)}(function(){return w||\"function\"!=typeof WebAssembly.instantiateStreaming||ua(H)||\"function\"!=typeof fetch?c(b):fetch(H,{credentials:\"same-origin\"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v(\"wasm streaming compile failed: \"+f);v(\"falling back to ArrayBuffer instantiation\");return c(b)})})})().catch(ca);return{}})();\nh.___wasm_call_ctors=function(){return(h.___wasm_call_ctors=h.asm.F).apply(null,arguments)};var Ka=h.___getTypeName=function(){return(Ka=h.___getTypeName=h.asm.G).apply(null,arguments)};h.__embind_initialize_bindings=function(){return(h.__embind_initialize_bindings=h.asm.H).apply(null,arguments)};var Ib=h._malloc=function(){return(Ib=h._malloc=h.asm.I).apply(null,arguments)},S=h._free=function(){return(S=h._free=h.asm.K).apply(null,arguments)};\nh.dynCall_jiji=function(){return(h.dynCall_jiji=h.asm.L).apply(null,arguments)};var Kb;G=function Lb(){Kb||Mb();Kb||(G=Lb)};\nfunction Mb(){function a(){if(!Kb&&(Kb=!0,h.calledRun=!0,!ha)){za(qa);aa(h);if(h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for(\"function\"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();ra.unshift(b)}za(ra)}}if(!(0<F)){if(h.preRun)for(\"function\"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)sa();za(pa);0<F||(h.setStatus?(h.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){h.setStatus(\"\")},1);a()},1)):a())}}\nif(h.preInit)for(\"function\"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();Mb();\n\n\n return loadYoga.ready\n}\n);\n})();\nexport default loadYoga;", "/**\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\n// @generated by enums.py\n\nexport enum Align {\n Auto = 0,\n FlexStart = 1,\n Center = 2,\n FlexEnd = 3,\n Stretch = 4,\n Baseline = 5,\n SpaceBetween = 6,\n SpaceAround = 7,\n SpaceEvenly = 8,\n}\n\nexport enum BoxSizing {\n BorderBox = 0,\n ContentBox = 1,\n}\n\nexport enum Dimension {\n Width = 0,\n Height = 1,\n}\n\nexport enum Direction {\n Inherit = 0,\n LTR = 1,\n RTL = 2,\n}\n\nexport enum Display {\n Flex = 0,\n None = 1,\n Contents = 2,\n}\n\nexport enum Edge {\n Left = 0,\n Top = 1,\n Right = 2,\n Bottom = 3,\n Start = 4,\n End = 5,\n Horizontal = 6,\n Vertical = 7,\n All = 8,\n}\n\nexport enum Errata {\n None = 0,\n StretchFlexBasis = 1,\n AbsolutePositionWithoutInsetsExcludesPadding = 2,\n AbsolutePercentAgainstInnerSize = 4,\n All = 2147483647,\n Classic = 2147483646,\n}\n\nexport enum ExperimentalFeature {\n WebFlexBasis = 0,\n}\n\nexport enum FlexDirection {\n Column = 0,\n ColumnReverse = 1,\n Row = 2,\n RowReverse = 3,\n}\n\nexport enum Gutter {\n Column = 0,\n Row = 1,\n All = 2,\n}\n\nexport enum Justify {\n FlexStart = 0,\n Center = 1,\n FlexEnd = 2,\n SpaceBetween = 3,\n SpaceAround = 4,\n SpaceEvenly = 5,\n}\n\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n Verbose = 4,\n Fatal = 5,\n}\n\nexport enum MeasureMode {\n Undefined = 0,\n Exactly = 1,\n AtMost = 2,\n}\n\nexport enum NodeType {\n Default = 0,\n Text = 1,\n}\n\nexport enum Overflow {\n Visible = 0,\n Hidden = 1,\n Scroll = 2,\n}\n\nexport enum PositionType {\n Static = 0,\n Relative = 1,\n Absolute = 2,\n}\n\nexport enum Unit {\n Undefined = 0,\n Point = 1,\n Percent = 2,\n Auto = 3,\n}\n\nexport enum Wrap {\n NoWrap = 0,\n Wrap = 1,\n WrapReverse = 2,\n}\n\nconst constants = {\n ALIGN_AUTO: Align.Auto,\n ALIGN_FLEX_START: Align.FlexStart,\n ALIGN_CENTER: Align.Center,\n ALIGN_FLEX_END: Align.FlexEnd,\n ALIGN_STRETCH: Align.Stretch,\n ALIGN_BASELINE: Align.Baseline,\n ALIGN_SPACE_BETWEEN: Align.SpaceBetween,\n ALIGN_SPACE_AROUND: Align.SpaceAround,\n ALIGN_SPACE_EVENLY: Align.SpaceEvenly,\n BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,\n BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,\n DIMENSION_WIDTH: Dimension.Width,\n DIMENSION_HEIGHT: Dimension.Height,\n DIRECTION_INHERIT: Direction.Inherit,\n DIRECTION_LTR: Direction.LTR,\n DIRECTION_RTL: Direction.RTL,\n DISPLAY_FLEX: Display.Flex,\n DISPLAY_NONE: Display.None,\n DISPLAY_CONTENTS: Display.Contents,\n EDGE_LEFT: Edge.Left,\n EDGE_TOP: Edge.Top,\n EDGE_RIGHT: Edge.Right,\n EDGE_BOTTOM: Edge.Bottom,\n EDGE_START: Edge.Start,\n EDGE_END: Edge.End,\n EDGE_HORIZONTAL: Edge.Horizontal,\n EDGE_VERTICAL: Edge.Vertical,\n EDGE_ALL: Edge.All,\n ERRATA_NONE: Errata.None,\n ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,\n ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING: Errata.AbsolutePositionWithoutInsetsExcludesPadding,\n ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE: Errata.AbsolutePercentAgainstInnerSize,\n ERRATA_ALL: Errata.All,\n ERRATA_CLASSIC: Errata.Classic,\n EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,\n FLEX_DIRECTION_COLUMN: FlexDirection.Column,\n FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,\n FLEX_DIRECTION_ROW: FlexDirection.Row,\n FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,\n GUTTER_COLUMN: Gutter.Column,\n GUTTER_ROW: Gutter.Row,\n GUTTER_ALL: Gutter.All,\n JUSTIFY_FLEX_START: Justify.FlexStart,\n JUSTIFY_CENTER: Justify.Center,\n JUSTIFY_FLEX_END: Justify.FlexEnd,\n JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,\n JUSTIFY_SPACE_AROUND: Justify.SpaceAround,\n JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,\n LOG_LEVEL_ERROR: LogLevel.Error,\n LOG_LEVEL_WARN: LogLevel.Warn,\n LOG_LEVEL_INFO: LogLevel.Info,\n LOG_LEVEL_DEBUG: LogLevel.Debug,\n LOG_LEVEL_VERBOSE: LogLevel.Verbose,\n LOG_LEVEL_FATAL: LogLevel.Fatal,\n MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,\n MEASURE_MODE_EXACTLY: MeasureMode.Exactly,\n MEASURE_MODE_AT_MOST: MeasureMode.AtMost,\n NODE_TYPE_DEFAULT: NodeType.Default,\n NODE_TYPE_TEXT: NodeType.Text,\n OVERFLOW_VISIBLE: Overflow.Visible,\n OVERFLOW_HIDDEN: Overflow.Hidden,\n OVERFLOW_SCROLL: Overflow.Scroll,\n POSITION_TYPE_STATIC: PositionType.Static,\n POSITION_TYPE_RELATIVE: PositionType.Relative,\n POSITION_TYPE_ABSOLUTE: PositionType.Absolute,\n UNIT_UNDEFINED: Unit.Undefined,\n UNIT_POINT: Unit.Point,\n UNIT_PERCENT: Unit.Percent,\n UNIT_AUTO: Unit.Auto,\n WRAP_NO_WRAP: Wrap.NoWrap,\n WRAP_WRAP: Wrap.Wrap,\n WRAP_WRAP_REVERSE: Wrap.WrapReverse,\n}\nexport default constants", "/**\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-nocheck\n\nimport {Unit, Direction} from './generated/YGEnums.ts';\nimport YGEnums from './generated/YGEnums.ts';\n\nimport type {\n Align,\n BoxSizing,\n Display,\n Edge,\n Errata,\n ExperimentalFeature,\n FlexDirection,\n Gutter,\n Justify,\n MeasureMode,\n Overflow,\n PositionType,\n Wrap,\n} from './generated/YGEnums.ts';\n\ntype Layout = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\n\ntype Size = {\n width: number;\n height: number;\n};\n\ntype Value = {\n unit: Unit;\n value: number;\n};\n\nexport type Config = {\n free(): void;\n isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean;\n setExperimentalFeatureEnabled(\n feature: ExperimentalFeature,\n enabled: boolean,\n ): void;\n setPointScaleFactor(factor: number): void;\n getErrata(): Errata;\n setErrata(errata: Errata): void;\n useWebDefaults(): boolean;\n setUseWebDefaults(useWebDefaults: boolean): void;\n};\n\nexport type DirtiedFunction = (node: Node) => void;\n\nexport type MeasureFunction = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n) => Size;\n\nexport type Node = {\n calculateLayout(\n width: number | 'auto' | undefined,\n height: number | 'auto' | undefined,\n direction?: Direction,\n ): void;\n copyStyle(node: Node): void;\n free(): void;\n freeRecursive(): void;\n getAlignContent(): Align;\n getAlignItems(): Align;\n getAlignSelf(): Align;\n getAspectRatio(): number;\n getBorder(edge: Edge): number;\n getChild(index: number): Node;\n getChildCount(): number;\n getComputedBorder(edge: Edge): number;\n getComputedBottom(): number;\n getComputedHeight(): number;\n getComputedLayout(): Layout;\n getComputedLeft(): number;\n getComputedMargin(edge: Edge): number;\n getComputedPadding(edge: Edge): number;\n getComputedRight(): number;\n getComputedTop(): number;\n getComputedWidth(): number;\n getDirection(): Direction;\n getDisplay(): Display;\n getFlexBasis(): Value;\n getFlexDirection(): FlexDirection;\n getFlexGrow(): number;\n getFlexShrink(): number;\n getFlexWrap(): Wrap;\n getHeight(): Value;\n getJustifyContent(): Justify;\n getGap(gutter: Gutter): Value;\n getMargin(edge: Edge): Value;\n getMaxHeight(): Value;\n getMaxWidth(): Value;\n getMinHeight(): Value;\n getMinWidth(): Value;\n getOverflow(): Overflow;\n getPadding(edge: Edge): Value;\n getParent(): Node | null;\n getPosition(edge: Edge): Value;\n getPositionType(): PositionType;\n getBoxSizing(): BoxSizing;\n getWidth(): Value;\n insertChild(child: Node, index: number): void;\n isDirty(): boolean;\n isReferenceBaseline(): boolean;\n markDirty(): void;\n hasNewLayout(): boolean;\n markLayoutSeen(): void;\n removeChild(child: Node): void;\n reset(): void;\n setAlignContent(alignContent: Align): void;\n setAlignItems(alignItems: Align): void;\n setAlignSelf(alignSelf: Align): void;\n setAspectRatio(aspectRatio: number | undefined): void;\n setBorder(edge: Edge, borderWidth: number | undefined): void;\n setDirection(direction: Direction): void;\n setDisplay(display: Display): void;\n setFlex(flex: number | undefined): void;\n setFlexBasis(flexBasis: number | 'auto' | `${number}%` | undefined): void;\n setFlexBasisPercent(flexBasis: number | undefined): void;\n setFlexBasisAuto(): void;\n setFlexDirection(flexDirection: FlexDirection): void;\n setFlexGrow(flexGrow: number | undefined): void;\n setFlexShrink(flexShrink: number | undefined): void;\n setFlexWrap(flexWrap: Wrap): void;\n setHeight(height: number | 'auto' | `${number}%` | undefined): void;\n setIsReferenceBaseline(isReferenceBaseline: boolean): void;\n setHeightAuto(): void;\n setHeightPercent(height: number | undefined): void;\n setJustifyContent(justifyContent: Justify): void;\n setGap(gutter: Gutter, gapLength: number | `${number}%` | undefined): Value;\n setGapPercent(gutter: Gutter, gapLength: number | undefined): Value;\n setMargin(\n edge: Edge,\n margin: number | 'auto' | `${number}%` | undefined,\n ): void;\n setMarginAuto(edge: Edge): void;\n setMarginPercent(edge: Edge, margin: number | undefined): void;\n setMaxHeight(maxHeight: number | `${number}%` | undefined): void;\n setMaxHeightPercent(maxHeight: number | undefined): void;\n setMaxWidth(maxWidth: number | `${number}%` | undefined): void;\n setMaxWidthPercent(maxWidth: number | undefined): void;\n setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;\n setMeasureFunc(measureFunc: MeasureFunction | null): void;\n setMinHeight(minHeight: number | `${number}%` | undefined): void;\n setMinHeightPercent(minHeight: number | undefined): void;\n setMinWidth(minWidth: number | `${number}%` | undefined): void;\n setMinWidthPercent(minWidth: number | undefined): void;\n setOverflow(overflow: Overflow): void;\n setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;\n setPaddingPercent(edge: Edge, padding: number | undefined): void;\n setPosition(edge: Edge, position: number | `${number}%` | undefined): void;\n setPositionPercent(edge: Edge, position: number | undefined): void;\n setPositionType(positionType: PositionType): void;\n setPositionAuto(edge: Edge): void;\n setBoxSizing(boxSizing: BoxSizing): void;\n setWidth(width: number | 'auto' | `${number}%` | undefined): void;\n setWidthAuto(): void;\n setWidthPercent(width: number | undefined): void;\n unsetDirtiedFunc(): void;\n unsetMeasureFunc(): void;\n setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void;\n};\n\nexport type Yoga = {\n Config: {\n create(): Config;\n destroy(config: Config): void;\n };\n Node: {\n create(config?: Config): Node;\n createDefault(): Node;\n createWithConfig(config: Config): Node;\n destroy(node: Node): void;\n };\n} & typeof YGEnums;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function wrapAssembly(lib: any): Yoga {\n function patch(prototype, name, fn) {\n const original = prototype[name];\n\n prototype[name] = function (...args) {\n return fn.call(this, original, ...args);\n };\n }\n\n for (const fnName of [\n 'setPosition',\n 'setMargin',\n 'setFlexBasis',\n 'setWidth',\n 'setHeight',\n 'setMinWidth',\n 'setMinHeight',\n 'setMaxWidth',\n 'setMaxHeight',\n 'setPadding',\n 'setGap',\n ]) {\n const methods = {\n [Unit.Point]: lib.Node.prototype[fnName],\n [Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],\n [Unit.Auto]: lib.Node.prototype[`${fnName}Auto`],\n };\n\n patch(lib.Node.prototype, fnName, function (original, ...args) {\n // We patch all these functions to add support for the following calls:\n // .setWidth(100) / .setWidth(\"100%\") / .setWidth(.getWidth()) / .setWidth(\"auto\")\n\n const value = args.pop();\n let unit, asNumber;\n\n if (value === 'auto') {\n unit = Unit.Auto;\n asNumber = undefined;\n } else if (typeof value === 'object') {\n unit = value.unit;\n asNumber = value.valueOf();\n } else {\n unit =\n typeof value === 'string' && value.endsWith('%')\n ? Unit.Percent\n : Unit.Point;\n asNumber = parseFloat(value);\n if (\n value !== undefined &&\n !Number.isNaN(value) &&\n Number.isNaN(asNumber)\n ) {\n throw new Error(`Invalid value ${value} for ${fnName}`);\n }\n }\n\n if (!methods[unit])\n throw new Error(\n `Failed to execute \"${fnName}\": Unsupported unit '${value}'`,\n );\n\n if (asNumber !== undefined) {\n return methods[unit].call(this, ...args, asNumber);\n } else {\n return methods[unit].call(this, ...args);\n }\n });\n }\n\n function wrapMeasureFunction(measureFunction) {\n return lib.MeasureCallback.implement({\n measure: (...args) => {\n const {width, height} = measureFunction(...args);\n return {\n width: width ?? NaN,\n height: height ?? NaN,\n };\n },\n });\n }\n\n patch(lib.Node.prototype, 'setMeasureFunc', function (original, measureFunc) {\n // This patch is just a convenience patch, since it helps write more\n // idiomatic source code (such as .setMeasureFunc(null))\n if (measureFunc) {\n return original.call(this, wrapMeasureFunction(measureFunc));\n } else {\n return this.unsetMeasureFunc();\n }\n });\n\n function wrapDirtiedFunc(dirtiedFunction) {\n return lib.DirtiedCallback.implement({dirtied: dirtiedFunction});\n }\n\n patch(lib.Node.prototype, 'setDirtiedFunc', function (original, dirtiedFunc) {\n original.call(this, wrapDirtiedFunc(dirtiedFunc));\n });\n\n patch(lib.Config.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Config.create),\n // we also need to handle the deallocation\n lib.Config.destroy(this);\n });\n\n patch(lib.Node, 'create', (_, config) => {\n // We decide the constructor we want to call depending on the parameters\n return config\n ? lib.Node.createWithConfig(config)\n : lib.Node.createDefault();\n });\n\n patch(lib.Node.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Node.create),\n // we also need to handle the deallocation\n lib.Node.destroy(this);\n });\n\n patch(lib.Node.prototype, 'freeRecursive', function () {\n for (let t = 0, T = this.getChildCount(); t < T; ++t) {\n this.getChild(0).freeRecursive();\n }\n this.free();\n });\n\n patch(\n lib.Node.prototype,\n 'calculateLayout',\n function (original, width = NaN, height = NaN, direction = Direction.LTR) {\n // Just a small patch to add support for the function default parameters\n return original.call(this, width, height, direction);\n },\n );\n\n return {\n Config: lib.Config,\n Node: lib.Node,\n ...YGEnums,\n };\n}\n", "/**\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.ts';\n\nexport type {\n Config,\n DirtiedFunction,\n MeasureFunction,\n Node,\n} from './wrapAssembly.ts';\n\nconst Yoga = wrapAssembly(await loadYoga());\nexport default Yoga;\nexport * from './generated/YGEnums.ts';\n", "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 | null | undefined): Align {\n if (value == null) {\n return Align.Auto\n }\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 parseAlignItems(value: string | null | undefined): Align {\n if (value == null) {\n return Align.Stretch\n }\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.Stretch\n }\n}\n\nexport function parseBoxSizing(value: string): BoxSizing {\n if (value == null) {\n return BoxSizing.BorderBox\n }\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 if (value == null) {\n return Dimension.Width\n }\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 if (value == null) {\n return Direction.LTR\n }\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 if (value == null) {\n return Display.Flex\n }\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 if (value == null) {\n return Edge.All\n }\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 | null | undefined): FlexDirection {\n if (value == null) {\n return FlexDirection.Column\n }\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 if (value == null) {\n return Gutter.All\n }\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 | null | undefined): Justify {\n if (value == null) {\n return Justify.FlexStart\n }\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 if (value == null) {\n return LogLevel.Info\n }\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 if (value == null) {\n return MeasureMode.Undefined\n }\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 | null | undefined): Overflow {\n if (value == null) {\n return Overflow.Visible\n }\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 | null | undefined): PositionType {\n if (value == null) {\n return PositionType.Relative\n }\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 if (value == null) {\n return Unit.Point\n }\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 | null | undefined): Wrap {\n if (value == null) {\n return Wrap.NoWrap\n }\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", "// Browser stub for node:util\nexport function inspect(obj: any, _options?: any): string {\n try {\n return JSON.stringify(obj, null, 2)\n } catch {\n return String(obj)\n }\n}\n\nexport function format(fmt: string, ...args: any[]): string {\n let i = 0\n return fmt.replace(/%[sdjifoO%]/g, (match) => {\n if (match === \"%%\") return \"%\"\n if (i >= args.length) return match\n return String(args[i++])\n })\n}\n\nexport function promisify(fn: Function): Function {\n return (...args: any[]) =>\n new Promise((resolve, reject) => {\n fn(...args, (err: any, result: any) => {\n if (err) reject(err)\n else resolve(result)\n })\n })\n}\n\nexport function isDeepStrictEqual(a: any, b: any): boolean {\n return JSON.stringify(a) === JSON.stringify(b)\n}\n\nexport default { inspect, format, promisify, isDeepStrictEqual }\n", "import { isRenderable, Renderable, type RenderableOptions } from \"../../Renderable\"\nimport type { RenderContext } from \"../../types\"\nimport util from \"node:util\"\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\nconst BrandedVNode: unique symbol = Symbol.for(\"@opentui/core/VNode\")\n\nexport interface VNode<P = any, C = VChild[]> {\n [BrandedVNode]: 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 [BrandedVNode]: 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[BrandedVNode]\n}\n\nexport function maybeMakeRenderable(\n ctx: RenderContext,\n node: Renderable | VNode<any, any[]> | unknown,\n): Renderable | null {\n if (isRenderable(node)) return node\n if (isVNode(node)) return instantiate(ctx, node)\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"maybeMakeRenderable received an invalid node\", util.inspect(node, { depth: 2 }))\n }\n return null\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 (isRenderable(node)) 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 (isRenderable(child)) {\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 (isRenderable(vnode)) {\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", "import type { RenderableOptions, Renderable } from \"../Renderable\"\nimport type { PositionTypeString, OverflowString } from \"./yoga.options\"\n\nexport function 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", "import { EventEmitter } from \"events\"\nimport Yoga, { Direction, Display, Edge, FlexDirection, type Config, type Node as YogaNode } from \"yoga-layout\"\nimport { OptimizedBuffer } from \"./buffer\"\nimport type { KeyEvent, PasteEvent } from \"./lib/KeyHandler\"\nimport type { MouseEventType } from \"./lib/parse.mouse\"\nimport type { Selection } from \"./lib/selection\"\nimport {\n parseAlign,\n parseAlignItems,\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 { maybeMakeRenderable, type VNode } from \"./renderables/composition/vnode\"\nimport type { MouseEvent } from \"./renderer\"\nimport type { RenderContext } from \"./types\"\nimport {\n validateOptions,\n isPositionType,\n isDimensionType,\n isFlexBasisType,\n isSizeType,\n isMarginType,\n isPaddingType,\n isPositionTypeType,\n isOverflowType,\n} from \"./lib/renderable.validations\"\n\nconst BrandedRenderable: unique symbol = Symbol.for(\"@opentui/core/Renderable\")\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 BaseRenderableOptions {\n id?: string\n}\n\nexport interface LayoutOptions extends BaseRenderableOptions {\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 marginX?: number | \"auto\" | `${number}%`\n marginY?: 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 paddingX?: number | `${number}%`\n paddingY?: 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 BaseRenderable = BaseRenderable> extends Partial<LayoutOptions> {\n width?: number | \"auto\" | `${number}%`\n height?: number | \"auto\" | `${number}%`\n zIndex?: number\n visible?: boolean\n buffered?: boolean\n live?: boolean\n opacity?: number\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 onPaste?: (this: T, event: PasteEvent) => void\n\n onKeyDown?: (key: KeyEvent) => void\n\n onSizeChange?: (this: T) => void\n}\n\nexport function isRenderable(obj: any): obj is Renderable {\n return !!obj?.[BrandedRenderable]\n}\n\nexport abstract class BaseRenderable extends EventEmitter {\n [BrandedRenderable] = true\n\n private static renderableNumber = 1\n protected _id: string\n public readonly num: number\n protected _dirty: boolean = false\n public parent: BaseRenderable | null = null\n protected _visible: boolean = true\n\n constructor(options: BaseRenderableOptions) {\n super()\n this.num = BaseRenderable.renderableNumber++\n this._id = options.id ?? `renderable-${this.num}`\n }\n\n public abstract add(obj: BaseRenderable | unknown, index?: number): number\n public abstract remove(id: string): void\n public abstract insertBefore(obj: BaseRenderable | unknown, anchor: BaseRenderable | unknown): void\n public abstract getChildren(): BaseRenderable[]\n public abstract getChildrenCount(): number\n public abstract getRenderable(id: string): BaseRenderable | undefined\n public abstract requestRender(): void\n public abstract findDescendantById(id: string): BaseRenderable | undefined\n\n public get id(): string {\n return this._id\n }\n\n public set id(value: string) {\n this._id = value\n }\n\n public get isDirty(): boolean {\n return this._dirty\n }\n\n protected markClean(): void {\n this._dirty = false\n }\n\n protected markDirty(): void {\n this._dirty = true\n }\n\n public destroy(): void {\n // Default implementation: do nothing\n // Override this method to provide custom removal logic\n }\n\n public destroyRecursively(): void {\n // Default implementation: do nothing\n // Override this method to provide custom destruction logic\n }\n\n public get visible(): boolean {\n return this._visible\n }\n\n public set visible(value: boolean) {\n this._visible = value\n }\n}\n\nconst yogaConfig: Config = Yoga.Config.create()\nyogaConfig.setUseWebDefaults(false)\nyogaConfig.setPointScaleFactor(1)\n\nexport abstract class Renderable extends BaseRenderable {\n static renderablesByNumber: Map<number, Renderable> = new Map()\n\n protected _isDestroyed: boolean = false\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 public selectable: boolean = false\n protected buffered: boolean\n protected frameBuffer: OptimizedBuffer | null = null\n\n protected _focusable: boolean = false\n protected _focused: boolean = false\n protected keypressHandler: ((key: KeyEvent) => void) | null = null\n protected pasteHandler: ((event: PasteEvent) => void) | null = null\n\n private _live: boolean = false\n protected _liveCount: number = 0\n\n private _sizeChangeListener: (() => void) | undefined = undefined\n private _mouseListener: ((event: MouseEvent) => void) | null = null\n private _mouseListeners: Partial<Record<MouseEventType, (event: MouseEvent) => void>> = {}\n private _pasteListener: ((event: PasteEvent) => void) | undefined = undefined\n private _keyListeners: Partial<Record<\"down\", (key: KeyEvent) => void>> = {}\n\n protected yogaNode: YogaNode\n protected _positionType: PositionTypeString = \"relative\"\n protected _overflow: OverflowString = \"visible\"\n protected _position: Position = {}\n protected _opacity: number = 1.0\n private _flexShrink: number = 1\n\n private renderableMapById: Map<string, Renderable> = new Map()\n protected _childrenInLayoutOrder: Renderable[] = []\n protected _childrenInZIndexOrder: Renderable[] = []\n private needsZIndexSort: boolean = false\n public parent: Renderable | null = null\n\n private childrenPrimarySortDirty: boolean = true\n private childrenSortedByPrimaryAxis: Renderable[] = []\n private _shouldUpdateBefore: Set<Renderable> = new Set()\n\n public onLifecyclePass: (() => void) | 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(options)\n\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 this._opacity = options.opacity !== undefined ? Math.max(0, Math.min(1, options.opacity)) : 1.0\n\n // TODO: use a global yoga config\n this.yogaNode = Yoga.Node.create(yogaConfig)\n this.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 override get id() {\n return this._id\n }\n\n public override set id(value: string) {\n if (this.parent) {\n this.parent.renderableMapById.delete(this.id)\n this.parent.renderableMapById.set(value, this)\n }\n super.id = value\n }\n\n public get focusable(): boolean {\n return this._focusable\n }\n\n public set focusable(value: boolean) {\n this._focusable = value\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 get primaryAxis(): \"row\" | \"column\" {\n const dir = this.yogaNode.getFlexDirection()\n return dir === 2 || dir === 3 ? \"row\" : \"column\"\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.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 get opacity(): number {\n return this._opacity\n }\n\n public set opacity(value: number) {\n const clamped = Math.max(0, Math.min(1, value))\n if (this._opacity !== clamped) {\n this._opacity = clamped\n this.requestRender()\n }\n }\n\n public hasSelection(): boolean {\n return false\n }\n\n public onSelectionChanged(selection: Selection | 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._isDestroyed || this._focused || !this._focusable) return\n\n this._ctx.focusRenderable(this)\n this._focused = true\n this.requestRender()\n\n this.keypressHandler = (key: KeyEvent) => {\n if (this._isDestroyed) return\n this._keyListeners[\"down\"]?.(key)\n // Check again after user listener - it might have destroyed the renderable\n if (this._isDestroyed) return\n if (!key.defaultPrevented && this.handleKeyPress) {\n this.handleKeyPress(key)\n }\n }\n\n this.pasteHandler = (event: PasteEvent) => {\n if (this._isDestroyed) return\n this._pasteListener?.call(this, event)\n // Check again after user listener - it might have destroyed the renderable\n if (this._isDestroyed) return\n if (!event.defaultPrevented && this.handlePaste) {\n this.handlePaste(event)\n }\n }\n\n this.ctx._internalKeyInput.onInternal(\"keypress\", this.keypressHandler)\n this.ctx._internalKeyInput.onInternal(\"paste\", this.pasteHandler)\n this.emit(RenderableEvents.FOCUSED)\n }\n\n public blur(): void {\n if (!this._focused || !this._focusable) return\n\n this._focused = false\n this.requestRender()\n\n if (this.keypressHandler) {\n this.ctx._internalKeyInput.offInternal(\"keypress\", this.keypressHandler)\n this.keypressHandler = null\n }\n\n if (this.pasteHandler) {\n this.ctx._internalKeyInput.offInternal(\"paste\", this.pasteHandler)\n this.pasteHandler = 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: KeyEvent): boolean\n public handlePaste?(event: PasteEvent): void\n\n public findDescendantById(id: string): Renderable | undefined {\n for (const child of this._childrenInLayoutOrder) {\n if (child.id === id) return child\n if (isRenderable(child)) {\n const found = child.findDescendantById(id)\n if (found) return found\n }\n }\n return undefined\n }\n\n public requestRender() {\n this.markDirty()\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 if (this.parent) this.parent.childrenPrimarySortDirty = true\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 if (this.parent) this.parent.childrenPrimarySortDirty = true\n this.requestRender()\n }\n\n public get x(): number {\n if (this.parent) {\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) {\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.yogaNode.setWidth(value)\n\n if (typeof value === \"number\" && this._flexShrink === 1) {\n this._flexShrink = 0\n this.yogaNode.setFlexShrink(0)\n }\n\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.yogaNode.setHeight(value)\n\n if (typeof value === \"number\" && this._flexShrink === 1) {\n this._flexShrink = 0\n this.yogaNode.setFlexShrink(0)\n }\n\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 this.requestRender()\n }\n }\n\n private requestZIndexSort(): void {\n this.needsZIndexSort = true\n }\n\n private ensureZIndexSorted(): void {\n if (this.needsZIndexSort) {\n this._childrenInZIndexOrder.sort((a, b) => (a.zIndex > b.zIndex ? 1 : a.zIndex < b.zIndex ? -1 : 0))\n this.needsZIndexSort = false\n }\n }\n\n public getChildrenSortedByPrimaryAxis(): Renderable[] {\n if (\n !this.childrenPrimarySortDirty &&\n this.childrenSortedByPrimaryAxis.length === this._childrenInLayoutOrder.length\n ) {\n return this.childrenSortedByPrimaryAxis\n }\n\n const dir = this.yogaNode.getFlexDirection()\n const axis: \"x\" | \"y\" = dir === 2 || dir === 3 ? \"x\" : \"y\"\n\n const sorted = [...this._childrenInLayoutOrder]\n sorted.sort((a, b) => {\n const va = axis === \"y\" ? a.y : a.x\n const vb = axis === \"y\" ? b.y : b.x\n return va - vb\n })\n\n this.childrenSortedByPrimaryAxis = sorted\n this.childrenPrimarySortDirty = false\n return this.childrenSortedByPrimaryAxis\n }\n\n private setupYogaProperties(options: RenderableOptions<Renderable>): void {\n const node = this.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 this._flexShrink = options.flexShrink\n node.setFlexShrink(options.flexShrink)\n } else {\n // If explicit numeric width is set, don't shrink by default\n // Otherwise follow web default of 1\n const hasExplicitWidth = typeof options.width === \"number\"\n const hasExplicitHeight = typeof options.height === \"number\"\n this._flexShrink = hasExplicitWidth || hasExplicitHeight ? 0 : 1\n node.setFlexShrink(this._flexShrink)\n }\n\n node.setFlexDirection(parseFlexDirection(options.flexDirection))\n node.setFlexWrap(parseWrap(options.flexWrap))\n node.setAlignItems(parseAlignItems(options.alignItems))\n node.setJustifyContent(parseJustify(options.justifyContent))\n node.setAlignSelf(parseAlign(options.alignSelf))\n\n if (isDimensionType(options.width)) {\n this._width = options.width\n this.yogaNode.setWidth(options.width)\n }\n if (isDimensionType(options.height)) {\n this._height = options.height\n this.yogaNode.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.yogaNode\n\n if (isMarginType(options.margin)) {\n node.setMargin(Edge.All, options.margin)\n }\n\n if (isMarginType(options.marginX)) {\n node.setMargin(Edge.Horizontal, options.marginX)\n }\n if (isMarginType(options.marginY)) {\n node.setMargin(Edge.Vertical, options.marginY)\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.All, options.padding)\n }\n\n if (isPaddingType(options.paddingX)) {\n node.setPadding(Edge.Horizontal, options.paddingX)\n }\n if (isPaddingType(options.paddingY)) {\n node.setPadding(Edge.Vertical, options.paddingY)\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 | null | undefined) {\n if (!isPositionTypeType(positionType) || this._positionType === positionType) return\n\n this._positionType = positionType\n this.yogaNode.setPositionType(parsePositionType(positionType))\n this.requestRender()\n }\n\n get overflow(): OverflowString {\n return this._overflow\n }\n\n set overflow(overflow: OverflowString | null | undefined) {\n if (!isOverflowType(overflow) || this._overflow === overflow) return\n\n this._overflow = overflow\n this.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.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 | null | undefined) {\n if (grow == null) {\n this.yogaNode.setFlexGrow(0)\n } else {\n this.yogaNode.setFlexGrow(grow)\n }\n this.requestRender()\n }\n\n public set flexShrink(shrink: number | null | undefined) {\n const value = shrink == null ? 1 : shrink\n this._flexShrink = value\n this.yogaNode.setFlexShrink(value)\n this.requestRender()\n }\n\n public set flexDirection(direction: FlexDirectionString | null | undefined) {\n this.yogaNode.setFlexDirection(parseFlexDirection(direction))\n this.requestRender()\n }\n\n public set flexWrap(wrap: WrapString | null | undefined) {\n this.yogaNode.setFlexWrap(parseWrap(wrap))\n this.requestRender()\n }\n\n public set alignItems(alignItems: AlignString | null | undefined) {\n this.yogaNode.setAlignItems(parseAlignItems(alignItems))\n this.requestRender()\n }\n\n public set justifyContent(justifyContent: JustifyString | null | undefined) {\n this.yogaNode.setJustifyContent(parseJustify(justifyContent))\n this.requestRender()\n }\n\n public set alignSelf(alignSelf: AlignString | null | undefined) {\n this.yogaNode.setAlignSelf(parseAlign(alignSelf))\n this.requestRender()\n }\n\n public set flexBasis(basis: number | \"auto\" | null | undefined) {\n if (isFlexBasisType(basis)) {\n this.yogaNode.setFlexBasis(basis)\n this.requestRender()\n }\n }\n\n public set minWidth(minWidth: number | `${number}%` | null | undefined) {\n if (isSizeType(minWidth)) {\n this.yogaNode.setMinWidth(minWidth)\n this.requestRender()\n }\n }\n\n public set maxWidth(maxWidth: number | `${number}%` | null | undefined) {\n if (isSizeType(maxWidth)) {\n this.yogaNode.setMaxWidth(maxWidth)\n this.requestRender()\n }\n }\n\n public set minHeight(minHeight: number | `${number}%` | null | undefined) {\n if (isSizeType(minHeight)) {\n this.yogaNode.setMinHeight(minHeight)\n this.requestRender()\n }\n }\n\n public set maxHeight(maxHeight: number | `${number}%` | null | undefined) {\n if (isSizeType(maxHeight)) {\n this.yogaNode.setMaxHeight(maxHeight)\n this.requestRender()\n }\n }\n\n public set margin(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.All, margin)\n this.requestRender()\n }\n }\n\n public set marginX(marginX: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(marginX)) {\n this.yogaNode.setMargin(Edge.Horizontal, marginX)\n this.requestRender()\n }\n }\n\n public set marginY(marginY: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(marginY)) {\n this.yogaNode.setMargin(Edge.Vertical, marginY)\n this.requestRender()\n }\n }\n\n public set marginTop(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Top, margin)\n this.requestRender()\n }\n }\n\n public set marginRight(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Right, margin)\n this.requestRender()\n }\n }\n\n public set marginBottom(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Bottom, margin)\n this.requestRender()\n }\n }\n\n public set marginLeft(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Left, margin)\n this.requestRender()\n }\n }\n\n public set padding(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.All, padding)\n this.requestRender()\n }\n }\n\n public set paddingX(paddingX: number | `${number}%` | null | undefined) {\n if (isPaddingType(paddingX)) {\n this.yogaNode.setPadding(Edge.Horizontal, paddingX)\n this.requestRender()\n }\n }\n\n public set paddingY(paddingY: number | `${number}%` | null | undefined) {\n if (isPaddingType(paddingY)) {\n this.yogaNode.setPadding(Edge.Vertical, paddingY)\n this.requestRender()\n }\n }\n\n public set paddingTop(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Top, padding)\n this.requestRender()\n }\n }\n\n public set paddingRight(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Right, padding)\n this.requestRender()\n }\n }\n\n public set paddingBottom(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Bottom, padding)\n this.requestRender()\n }\n }\n\n public set paddingLeft(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Left, padding)\n this.requestRender()\n }\n }\n\n public getLayoutNode(): YogaNode {\n return this.yogaNode\n }\n\n public updateFromLayout(): void {\n const layout = this.yogaNode.getComputedLayout()\n\n const oldX = this._x\n const oldY = this._y\n const oldWidth = this._widthValue\n const oldHeight = this._heightValue\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 = oldWidth !== newWidth || oldHeight !== newHeight\n\n this._widthValue = newWidth\n this._heightValue = newHeight\n\n if (sizeChanged) {\n this.onLayoutResize(newWidth, newHeight)\n }\n\n const positionChanged = oldX !== this._x || oldY !== this._y\n if (positionChanged) {\n if (this.parent) this.parent.childrenPrimarySortDirty = true\n }\n }\n\n protected onLayoutResize(width: number, height: number): void {\n if (this._visible) {\n // TODO: Should probably .markDirty()\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, id: `framebuffer-${this.id}` })\n } catch (error) {\n console.error(`Failed to create frame buffer for ${this.id}:`, error)\n this.frameBuffer = null\n }\n }\n\n /**\n * This will be called during a render pass.\n * Requesting a render during a render pass will drop the requested render.\n * If you need to request a render during a render pass, use process.nextTick.\n */\n protected onResize(width: number, height: number): void {\n this.onSizeChange?.()\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[]> | unknown, index?: number): number {\n if (!obj) {\n return -1\n }\n\n const renderable = maybeMakeRenderable(this._ctx, obj)\n if (!renderable) {\n return -1\n }\n\n if (renderable.isDestroyed) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Renderable with id ${renderable.id} was already destroyed, skipping add`)\n }\n return -1\n }\n\n const anchorRenderable = index !== undefined ? this._childrenInLayoutOrder[index] : undefined\n\n if (anchorRenderable) {\n return this.insertBefore(renderable, anchorRenderable)\n }\n\n if (renderable.parent === this) {\n this.yogaNode.removeChild(renderable.getLayoutNode())\n this._childrenInLayoutOrder.splice(this._childrenInLayoutOrder.indexOf(renderable), 1)\n } else {\n this.replaceParent(renderable)\n this.needsZIndexSort = true\n this.renderableMapById.set(renderable.id, renderable)\n this._childrenInZIndexOrder.push(renderable)\n\n if (typeof renderable.onLifecyclePass === \"function\") {\n this._ctx.registerLifecyclePass(renderable)\n }\n\n if (renderable._liveCount > 0) {\n this.propagateLiveCount(renderable._liveCount)\n }\n }\n\n const childLayoutNode = renderable.getLayoutNode()\n const insertedIndex = this._childrenInLayoutOrder.length\n this._childrenInLayoutOrder.push(renderable)\n this.yogaNode.insertChild(childLayoutNode, insertedIndex)\n\n this.childrenPrimarySortDirty = true\n this._shouldUpdateBefore.add(renderable)\n\n this.requestRender()\n\n return insertedIndex\n }\n\n insertBefore(obj: Renderable | VNode<any, any[]> | unknown, anchor?: Renderable | unknown): number {\n if (!anchor) {\n return this.add(obj)\n }\n\n if (!obj) {\n return -1\n }\n\n const renderable = maybeMakeRenderable(this._ctx, obj)\n if (!renderable) {\n return -1\n }\n\n if (renderable.isDestroyed) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Renderable with id ${renderable.id} was already destroyed, skipping insertBefore`)\n }\n return -1\n }\n\n if (!isRenderable(anchor)) {\n throw new Error(\"Anchor must be a Renderable\")\n }\n\n if (anchor.isDestroyed) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Anchor with id ${anchor.id} was already destroyed, skipping insertBefore`)\n }\n return -1\n }\n\n if (!this.renderableMapById.has(anchor.id)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Anchor with id ${anchor.id} does not exist within the parent ${this.id}, skipping insertBefore`)\n }\n return -1\n }\n\n if (renderable === anchor || renderable.id === anchor.id) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Anchor is the same as the node ${renderable.id} being inserted, skipping insertBefore`)\n }\n return -1\n }\n\n if (renderable.parent === this) {\n this.yogaNode.removeChild(renderable.getLayoutNode())\n this._childrenInLayoutOrder.splice(this._childrenInLayoutOrder.indexOf(renderable), 1)\n } else {\n this.replaceParent(renderable)\n this.needsZIndexSort = true\n this.renderableMapById.set(renderable.id, renderable)\n this._childrenInZIndexOrder.push(renderable)\n\n if (typeof renderable.onLifecyclePass === \"function\") {\n this._ctx.registerLifecyclePass(renderable)\n }\n\n if (renderable._liveCount > 0) {\n this.propagateLiveCount(renderable._liveCount)\n }\n }\n\n this.childrenPrimarySortDirty = true\n\n const anchorIndex = this._childrenInLayoutOrder.indexOf(anchor)\n const insertedIndex = Math.max(0, Math.min(anchorIndex, this._childrenInLayoutOrder.length))\n\n this._childrenInLayoutOrder.splice(insertedIndex, 0, renderable)\n this.yogaNode.insertChild(renderable.getLayoutNode(), insertedIndex)\n\n this._shouldUpdateBefore.add(renderable)\n\n this.requestRender()\n\n return insertedIndex\n }\n\n // TODO: that naming is meh\n public getRenderable(id: string): Renderable | undefined {\n return this.renderableMapById.get(id)\n }\n\n public remove(id: string): void {\n if (!id) {\n return\n }\n\n if (this.renderableMapById.has(id)) {\n const obj = this.renderableMapById.get(id)\n if (obj) {\n if (obj._liveCount > 0) {\n this.propagateLiveCount(-obj._liveCount)\n }\n\n const childLayoutNode = obj.getLayoutNode()\n this.yogaNode.removeChild(childLayoutNode)\n this.requestRender()\n\n obj.onRemove()\n obj.parent = null\n this._ctx.unregisterLifecyclePass(obj)\n this.renderableMapById.delete(id)\n\n const index = this._childrenInLayoutOrder.findIndex((obj) => obj.id === id)\n if (index !== -1) {\n this._childrenInLayoutOrder.splice(index, 1)\n }\n\n const zIndexIndex = this._childrenInZIndexOrder.findIndex((obj) => obj.id === id)\n if (zIndexIndex !== -1) {\n this._childrenInZIndexOrder.splice(zIndexIndex, 1)\n }\n\n this.childrenPrimarySortDirty = true\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 return [...this._childrenInLayoutOrder]\n }\n\n public getChildrenCount(): number {\n return this._childrenInLayoutOrder.length\n }\n\n public updateLayout(deltaTime: number, renderList: RenderCommand[] = []): void {\n if (!this.visible) return\n\n this.onUpdate(deltaTime)\n\n // If destroyed during onUpdate, don't add to render list\n if (this._isDestroyed) return\n\n // NOTE: worst case updateFromLayout is called throughout the whole tree,\n // which currently still has yoga performance issues.\n // This can be mitigated at some point when the layout tree moved to native,\n // as in the native yoga tree we can use events during the calculateLayout phase,\n // and anctually know if a child has changed or not.\n // That would allow us to to generate optimised render commands,\n // including the layout updates, in one pass.\n this.updateFromLayout()\n\n // Update newly added children before getting visible children\n // This ensures their positions are current when culling happens\n if (this._shouldUpdateBefore.size > 0) {\n for (const child of this._shouldUpdateBefore) {\n if (!child.isDestroyed) {\n child.updateFromLayout()\n }\n }\n this._shouldUpdateBefore.clear()\n }\n\n // Check again after updateFromLayout, which calls onResize/onSizeChange\n if (this._isDestroyed) return\n\n // Push opacity BEFORE rendering this element so it affects this element and all children\n const shouldPushOpacity = this._opacity < 1.0\n if (shouldPushOpacity) {\n renderList.push({ action: \"pushOpacity\", opacity: this._opacity })\n }\n\n renderList.push({ action: \"render\", renderable: this })\n\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 renderList.push({\n action: \"pushScissorRect\",\n x: scissorRect.x,\n y: scissorRect.y,\n width: scissorRect.width,\n height: scissorRect.height,\n screenX: this.x,\n screenY: this.y,\n })\n }\n const visibleChildren = this._getVisibleChildren()\n for (const child of this._childrenInZIndexOrder) {\n if (!visibleChildren.includes(child.num)) {\n child.updateFromLayout()\n continue\n }\n child.updateLayout(deltaTime, renderList)\n }\n\n if (shouldPushScissor) {\n renderList.push({ action: \"popScissorRect\" })\n }\n if (shouldPushOpacity) {\n renderList.push({ action: \"popOpacity\" })\n }\n }\n\n public render(buffer: OptimizedBuffer, deltaTime: number): void {\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\n if (this.buffered && this.frameBuffer) {\n buffer.drawFrameBuffer(this.x, this.y, this.frameBuffer)\n }\n }\n\n protected _getVisibleChildren(): number[] {\n return this._childrenInZIndexOrder.map((child) => child.num)\n }\n\n protected onUpdate(deltaTime: number): 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 get isDestroyed(): boolean {\n return this._isDestroyed\n }\n\n public destroy(): void {\n if (this._isDestroyed) {\n return\n }\n\n this._isDestroyed = true\n\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._childrenInLayoutOrder) {\n this.remove(child.id)\n }\n\n this._childrenInLayoutOrder = []\n this.renderableMapById.clear()\n Renderable.renderablesByNumber.delete(this.num)\n\n this.blur()\n this.removeAllListeners()\n\n this.destroySelf()\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 }\n\n public destroyRecursively(): void {\n // Destroy children first to ensure removal as destroy clears child array\n // Make a copy of the children array to avoid iteration issues when children are destroyed\n const children = [...this._childrenInLayoutOrder]\n for (const child of children) {\n child.destroyRecursively()\n }\n this.destroy()\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.propagationStopped) {\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 onPaste(handler: ((event: PasteEvent) => void) | undefined) {\n this._pasteListener = handler\n }\n public get onPaste(): ((event: PasteEvent) => void) | undefined {\n return this._pasteListener\n }\n\n public set onKeyDown(handler: ((key: KeyEvent) => void) | undefined) {\n if (handler) this._keyListeners[\"down\"] = handler\n else delete this._keyListeners[\"down\"]\n }\n public get onKeyDown(): ((key: KeyEvent) => void) | undefined {\n return this._keyListeners[\"down\"]\n }\n\n public set onSizeChange(handler: (() => void) | undefined) {\n this._sizeChangeListener = handler\n }\n public get onSizeChange(): (() => void) | undefined {\n return this._sizeChangeListener\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.onPaste = options.onPaste\n this.onKeyDown = options.onKeyDown\n this.onSizeChange = options.onSizeChange\n }\n}\n\ninterface RenderCommandBase {\n action: \"render\" | \"pushScissorRect\" | \"popScissorRect\" | \"pushOpacity\" | \"popOpacity\"\n}\n\ninterface RenderCommandPushScissorRect extends RenderCommandBase {\n action: \"pushScissorRect\"\n x: number\n y: number\n width: number\n height: number\n screenX: number\n screenY: number\n}\n\ninterface RenderCommandPopScissorRect extends RenderCommandBase {\n action: \"popScissorRect\"\n}\n\ninterface RenderCommandRender extends RenderCommandBase {\n action: \"render\"\n renderable: Renderable\n}\n\ninterface RenderCommandPushOpacity extends RenderCommandBase {\n action: \"pushOpacity\"\n opacity: number\n}\n\ninterface RenderCommandPopOpacity extends RenderCommandBase {\n action: \"popOpacity\"\n}\n\nexport type RenderCommand =\n | RenderCommandPushScissorRect\n | RenderCommandPopScissorRect\n | RenderCommandRender\n | RenderCommandPushOpacity\n | RenderCommandPopOpacity\n\nexport class RootRenderable extends Renderable {\n private renderList: RenderCommand[] = []\n\n constructor(ctx: RenderContext) {\n super(ctx, { id: \"__root__\", zIndex: 0, visible: true, width: ctx.width, height: ctx.height, enableLayout: true })\n\n if (this.yogaNode) {\n this.yogaNode.free()\n }\n\n this.yogaNode = Yoga.Node.create(yogaConfig)\n this.yogaNode.setWidth(ctx.width)\n this.yogaNode.setHeight(ctx.height)\n this.yogaNode.setFlexDirection(FlexDirection.Column)\n\n this.calculateLayout()\n }\n\n public render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n\n // 0. Run lifecycle pass\n for (const renderable of this._ctx.getLifecyclePasses()) {\n renderable.onLifecyclePass?.call(renderable)\n }\n\n // NOTE: Strictly speaking, this is a 3-pass rendering process:\n // 1. Calculate layout from root\n // 2. Update layout throughout the tree and collect render list\n // 3. Render all collected renderables\n // Should be 2-pass by hooking into the calculateLayout phase,\n // but that's only possible if we move the layout tree to native.\n\n // 1. Calculate layout from root\n if (this.yogaNode.isDirty()) {\n this.calculateLayout()\n }\n\n // 2. Update layout throughout the tree and collect render list\n this.renderList.length = 0\n this.updateLayout(deltaTime, this.renderList)\n\n // 3. Render all collected renderables\n this._ctx.clearHitGridScissorRects()\n for (let i = 1; i < this.renderList.length; i++) {\n const command = this.renderList[i]\n switch (command.action) {\n case \"render\":\n // Skip if renderable was destroyed during a previous render callback\n if (!command.renderable.isDestroyed) {\n command.renderable.render(buffer, deltaTime)\n }\n break\n case \"pushScissorRect\":\n buffer.pushScissorRect(command.x, command.y, command.width, command.height)\n this._ctx.pushHitGridScissorRect(command.screenX, command.screenY, command.width, command.height)\n break\n case \"popScissorRect\":\n buffer.popScissorRect()\n this._ctx.popHitGridScissorRect()\n break\n case \"pushOpacity\":\n buffer.pushOpacity(command.opacity)\n break\n case \"popOpacity\":\n buffer.popOpacity()\n break\n }\n }\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.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", "import type { ColorInput } from \"./RGBA\"\n\nexport interface BorderCharacters {\n topLeft: string\n topRight: string\n bottomLeft: string\n bottomRight: string\n horizontal: string\n vertical: string\n topT: string\n bottomT: string\n leftT: string\n rightT: string\n cross: string\n}\n\nexport type BorderStyle = \"single\" | \"double\" | \"rounded\" | \"heavy\"\nexport type BorderSides = \"top\" | \"right\" | \"bottom\" | \"left\"\n\nconst VALID_BORDER_STYLES: readonly BorderStyle[] = [\"single\", \"double\", \"rounded\", \"heavy\"] as const\n\nexport function isValidBorderStyle(value: unknown): value is BorderStyle {\n return typeof value === \"string\" && VALID_BORDER_STYLES.includes(value as BorderStyle)\n}\n\nexport function parseBorderStyle(value: unknown, fallback: BorderStyle = \"single\"): BorderStyle {\n if (isValidBorderStyle(value)) {\n return value\n }\n\n if (value !== undefined && value !== null) {\n console.warn(\n `Invalid borderStyle \"${value}\", falling back to \"${fallback}\". Valid values are: ${VALID_BORDER_STYLES.join(\", \")}`,\n )\n }\n return fallback\n}\n\nexport const BorderChars: Record<BorderStyle, BorderCharacters> = {\n single: {\n topLeft: \"\u250C\",\n topRight: \"\u2510\",\n bottomLeft: \"\u2514\",\n bottomRight: \"\u2518\",\n horizontal: \"\u2500\",\n vertical: \"\u2502\",\n topT: \"\u252C\",\n bottomT: \"\u2534\",\n leftT: \"\u251C\",\n rightT: \"\u2524\",\n cross: \"\u253C\",\n },\n double: {\n topLeft: \"\u2554\",\n topRight: \"\u2557\",\n bottomLeft: \"\u255A\",\n bottomRight: \"\u255D\",\n horizontal: \"\u2550\",\n vertical: \"\u2551\",\n topT: \"\u2566\",\n bottomT: \"\u2569\",\n leftT: \"\u2560\",\n rightT: \"\u2563\",\n cross: \"\u256C\",\n },\n rounded: {\n topLeft: \"\u256D\",\n topRight: \"\u256E\",\n bottomLeft: \"\u2570\",\n bottomRight: \"\u256F\",\n horizontal: \"\u2500\",\n vertical: \"\u2502\",\n topT: \"\u252C\",\n bottomT: \"\u2534\",\n leftT: \"\u251C\",\n rightT: \"\u2524\",\n cross: \"\u253C\",\n },\n heavy: {\n topLeft: \"\u250F\",\n topRight: \"\u2513\",\n bottomLeft: \"\u2517\",\n bottomRight: \"\u251B\",\n horizontal: \"\u2501\",\n vertical: \"\u2503\",\n topT: \"\u2533\",\n bottomT: \"\u253B\",\n leftT: \"\u2523\",\n rightT: \"\u252B\",\n cross: \"\u254B\",\n },\n}\n\nexport interface BorderConfig {\n borderStyle: BorderStyle\n border: boolean | BorderSides[]\n borderColor?: ColorInput\n customBorderChars?: BorderCharacters\n}\n\nexport interface BoxDrawOptions {\n x: number\n y: number\n width: number\n height: number\n borderStyle: BorderStyle\n border: boolean | BorderSides[]\n borderColor: ColorInput\n customBorderChars?: BorderCharacters\n backgroundColor: ColorInput\n shouldFill?: boolean\n title?: string\n titleAlignment?: \"left\" | \"center\" | \"right\"\n}\n\nexport interface BorderSidesConfig {\n top: boolean\n right: boolean\n bottom: boolean\n left: boolean\n}\n\nexport function getBorderFromSides(sides: BorderSidesConfig): boolean | BorderSides[] {\n const result: BorderSides[] = []\n if (sides.top) result.push(\"top\")\n if (sides.right) result.push(\"right\")\n if (sides.bottom) result.push(\"bottom\")\n if (sides.left) result.push(\"left\")\n return result.length > 0 ? result : false\n}\n\nexport function getBorderSides(border: boolean | BorderSides[]): BorderSidesConfig {\n return border === true\n ? { top: true, right: true, bottom: true, left: true }\n : Array.isArray(border)\n ? {\n top: border.includes(\"top\"),\n right: border.includes(\"right\"),\n bottom: border.includes(\"bottom\"),\n left: border.includes(\"left\"),\n }\n : { top: false, right: false, bottom: false, left: false }\n}\n\n// Convert BorderCharacters to Uint32Array for passing to Zig\nexport function borderCharsToArray(chars: BorderCharacters): Uint32Array {\n const array = new Uint32Array(11)\n array[0] = chars.topLeft.codePointAt(0)!\n array[1] = chars.topRight.codePointAt(0)!\n array[2] = chars.bottomLeft.codePointAt(0)!\n array[3] = chars.bottomRight.codePointAt(0)!\n array[4] = chars.horizontal.codePointAt(0)!\n array[5] = chars.vertical.codePointAt(0)!\n array[6] = chars.topT.codePointAt(0)!\n array[7] = chars.bottomT.codePointAt(0)!\n array[8] = chars.leftT.codePointAt(0)!\n array[9] = chars.rightT.codePointAt(0)!\n array[10] = chars.cross.codePointAt(0)!\n return array\n}\n\n// Pre-converted border character arrays for performance\nexport const BorderCharArrays: Record<BorderStyle, Uint32Array> = {\n single: borderCharsToArray(BorderChars.single),\n double: borderCharsToArray(BorderChars.double),\n rounded: borderCharsToArray(BorderChars.rounded),\n heavy: borderCharsToArray(BorderChars.heavy),\n}\n", "import type { RGBA } from \"./lib/RGBA\"\nimport type { EventEmitter } from \"events\"\nimport type { Selection } from \"./lib/selection\"\nimport type { Renderable } from \"./Renderable\"\nimport type { InternalKeyHandler, KeyHandler } from \"./lib/KeyHandler\"\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\n// Constants for attribute bit packing\nexport const ATTRIBUTE_BASE_BITS = 8\nexport const ATTRIBUTE_BASE_MASK = 0xff\n\n/**\n * Extract the base 8 bits of attributes from a u32 attribute value.\n * Currently we only use the first 8 bits for standard text attributes.\n */\nexport function getBaseAttributes(attr: number): number {\n return attr & ATTRIBUTE_BASE_MASK\n}\n\nexport type ThemeMode = \"dark\" | \"light\"\n\nexport type CursorStyle = \"block\" | \"line\" | \"underline\"\n\nexport type MousePointerStyle = \"default\" | \"pointer\" | \"text\" | \"crosshair\" | \"move\" | \"not-allowed\"\n\nexport interface CursorStyleOptions {\n style?: CursorStyle\n blinking?: boolean\n color?: RGBA\n cursor?: MousePointerStyle\n}\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 RendererEvents {\n resize: (width: number, height: number) => void\n key: (data: Buffer) => void\n \"memory:snapshot\": (snapshot: { heapUsed: number; heapTotal: number; arrayBuffers: number }) => void\n selection: (selection: Selection) => void\n \"debugOverlay:toggle\": (enabled: boolean) => void\n theme_mode: (mode: ThemeMode) => void\n}\n\nexport interface RenderContext extends EventEmitter {\n addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void\n pushHitGridScissorRect: (x: number, y: number, width: number, height: number) => void\n popHitGridScissorRect: () => void\n clearHitGridScissorRects: () => void\n width: number\n height: number\n requestRender: () => void\n setCursorPosition: (x: number, y: number, visible: boolean) => void\n setCursorStyle: (options: CursorStyleOptions) => void\n setCursorColor: (color: RGBA) => void\n setMousePointer: (shape: MousePointerStyle) => void\n widthMethod: WidthMethod\n capabilities: any | null\n requestLive: () => void\n dropLive: () => void\n hasSelection: boolean\n getSelection: () => Selection | null\n requestSelectionUpdate: () => void\n currentFocusedRenderable: Renderable | null\n focusRenderable: (renderable: Renderable) => void\n registerLifecyclePass: (renderable: Renderable) => void\n unregisterLifecyclePass: (renderable: Renderable) => void\n getLifecyclePasses: () => Set<Renderable>\n keyInput: KeyHandler\n _internalKeyInput: InternalKeyHandler\n clearSelection: () => void\n startSelection: (renderable: Renderable, x: number, y: number) => void\n updateSelection: (\n currentRenderable: Renderable | undefined,\n x: number,\n y: number,\n options?: { finishDragging?: boolean },\n ) => void\n}\n\nexport type Timeout = ReturnType<typeof setTimeout> | undefined\n\nexport interface ViewportBounds {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport interface Highlight {\n start: number\n end: number\n styleId: number\n priority?: number | null\n hlRef?: number | null\n}\n\nexport interface LineInfo {\n lineStarts: number[]\n lineWidths: number[]\n maxLineWidth: number\n lineSources: number[]\n lineWraps: number[]\n}\n\nexport interface LineInfoProvider {\n get lineInfo(): LineInfo\n get lineCount(): number\n get virtualLineCount(): number\n get scrollY(): number\n}\n\nexport interface CapturedSpan {\n text: string\n fg: RGBA\n bg: RGBA\n attributes: number\n width: number\n}\n\nexport interface CapturedLine {\n spans: CapturedSpan[]\n}\n\nexport interface CapturedFrame {\n cols: number\n rows: number\n cursor: [number, number]\n lines: CapturedLine[]\n}\n", "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 equals(other?: RGBA): boolean {\n if (!other) return false\n return this.r === other.r && this.g === other.g && this.b === other.b && this.a === other.a\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 } else if (hex.length === 4) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3]\n }\n\n if (!/^[0-9A-Fa-f]{6}$/.test(hex) && !/^[0-9A-Fa-f]{8}$/.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 const a = hex.length === 8 ? parseInt(hex.substring(6, 8), 16) / 255 : 1\n\n return RGBA.fromValues(r, g, b, a)\n}\n\nexport function rgbToHex(rgb: RGBA): string {\n const components = rgb.a === 1 ? [rgb.r, rgb.g, rgb.b] : [rgb.r, rgb.g, rgb.b, rgb.a]\n return (\n \"#\" +\n components\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", "import type { TextRenderable } from \"../renderables/Text\"\nimport type { TextBuffer, TextChunk } from \"../text-buffer\"\nimport { createTextAttributes } from \"../utils\"\nimport { parseColor, type ColorInput } from \"./RGBA\"\n\nconst BrandedStyledText: unique symbol = Symbol.for(\"@opentui/core/StyledText\")\n\nexport type Color = ColorInput\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 function isStyledText(obj: any): obj is StyledText {\n return obj && obj[BrandedStyledText]\n}\n\nexport class StyledText {\n [BrandedStyledText] = true\n\n public chunks: TextChunk[]\n\n constructor(chunks: TextChunk[]) {\n this.chunks = chunks\n }\n}\n\nexport function stringToStyledText(content: string): StyledText {\n const chunk = {\n __isChunk: true as const,\n text: content,\n }\n return new StyledText([chunk])\n}\n\nexport type StylableInput = string | number | boolean | TextChunk\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 fg,\n bg,\n attributes: mergedAttrs,\n link: existingChunk.link,\n }\n } else {\n const plainTextStr = String(input)\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: 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\nexport const link =\n (url: string) =>\n (input: StylableInput): TextChunk => {\n const chunk =\n typeof input === \"object\" && \"__isChunk\" in input\n ? (input as TextChunk)\n : {\n __isChunk: true as const,\n text: String(input),\n }\n\n return {\n ...chunk,\n link: { url },\n }\n }\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 t(strings: TemplateStringsArray, ...values: StylableInput[]): StyledText {\n const chunks: TextChunk[] = []\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: raw,\n attributes: 0,\n })\n }\n\n const val = values[i]\n if (typeof val === \"object\" && \"__isChunk\" in val) {\n chunks.push(val as TextChunk)\n } else if (val !== undefined) {\n const plainTextStr = String(val)\n chunks.push({\n __isChunk: true,\n text: plainTextStr,\n attributes: 0,\n })\n }\n }\n\n return new StyledText(chunks)\n}\n", "import type { RGBA } from \"./core-shims/rgba\"\nimport type { WidthMethod } from \"./browser-buffer\"\n\nexport interface TextChunk {\n __isChunk: true\n text: string\n fg?: RGBA\n bg?: RGBA\n attributes?: number\n link?: { url: string }\n}\n\nexport interface StyledTextInput {\n chunks: TextChunk[]\n}\n\nexport class BrowserTextBuffer {\n private _text: string = \"\"\n private _chunks: TextChunk[] = []\n private _defaultFg: RGBA | null = null\n private _defaultBg: RGBA | null = null\n private _defaultAttributes: number = 0\n private _syntaxStyle: any = null\n private _tabWidth: number = 4\n private _widthMethod: WidthMethod\n\n constructor(widthMethod: WidthMethod) {\n this._widthMethod = widthMethod\n }\n\n static create(widthMethod: WidthMethod): BrowserTextBuffer {\n return new BrowserTextBuffer(widthMethod)\n }\n\n // Compat property\n get ptr(): number {\n return 1 // Non-zero so TextBufferRenderable.renderSelf proceeds\n }\n\n get length(): number {\n return this._text.length\n }\n\n get byteSize(): number {\n return new TextEncoder().encode(this._text).length\n }\n\n setText(text: string): void {\n this._text = text\n this._chunks = [\n {\n __isChunk: true,\n text,\n fg: this._defaultFg ?? undefined,\n bg: this._defaultBg ?? undefined,\n attributes: this._defaultAttributes,\n },\n ]\n }\n\n append(text: string): void {\n this._text += text\n this._chunks.push({\n __isChunk: true,\n text,\n fg: this._defaultFg ?? undefined,\n bg: this._defaultBg ?? undefined,\n attributes: this._defaultAttributes,\n })\n }\n\n setStyledText(styledText: StyledTextInput): void {\n this._chunks = styledText.chunks.map((chunk) => ({\n __isChunk: true,\n text: chunk.text,\n fg: chunk.fg ?? this._defaultFg ?? undefined,\n bg: chunk.bg ?? this._defaultBg ?? undefined,\n attributes: chunk.attributes ?? this._defaultAttributes,\n link: chunk.link,\n }))\n this._text = this._chunks.map((c) => c.text).join(\"\")\n }\n\n getPlainText(): string {\n return this._text\n }\n\n getTextRange(startOffset: number, endOffset: number): string {\n return this._text.slice(startOffset, endOffset)\n }\n\n getLineCount(): number {\n if (this._text.length === 0) return 0\n return this._text.split(\"\\n\").length\n }\n\n getChunks(): TextChunk[] {\n return this._chunks\n }\n\n setDefaultFg(fg: RGBA | null): void {\n this._defaultFg = fg\n }\n\n setDefaultBg(bg: RGBA | null): void {\n this._defaultBg = bg\n }\n\n setDefaultAttributes(attributes: number | null): void {\n this._defaultAttributes = attributes ?? 0\n }\n\n resetDefaults(): void {\n this._defaultFg = null\n this._defaultBg = null\n this._defaultAttributes = 0\n }\n\n get defaultFg(): RGBA | null {\n return this._defaultFg\n }\n\n get defaultBg(): RGBA | null {\n return this._defaultBg\n }\n\n get defaultAttributes(): number {\n return this._defaultAttributes\n }\n\n setSyntaxStyle(style: any): void {\n this._syntaxStyle = style\n }\n\n getSyntaxStyle(): any {\n return this._syntaxStyle\n }\n\n setTabWidth(width: number): void {\n this._tabWidth = width\n }\n\n getTabWidth(): number {\n return this._tabWidth\n }\n\n addHighlightByCharRange(_highlight: any): void {}\n addHighlight(_lineIdx: number, _highlight: any): void {}\n removeHighlightsByRef(_hlRef: number): void {}\n clearLineHighlights(_lineIdx: number): void {}\n clearAllHighlights(): void {}\n getLineHighlights(_lineIdx: number): any[] {\n return []\n }\n getHighlightCount(): number {\n return 0\n }\n loadFile(_path: string): void {}\n\n clear(): void {\n this._text = \"\"\n this._chunks = []\n }\n\n reset(): void {\n this.clear()\n this.resetDefaults()\n }\n\n destroy(): void {\n this._text = \"\"\n this._chunks = []\n }\n}\n", "import type { RGBA } from \"./core-shims/rgba\"\nimport type { BrowserTextBuffer, TextChunk } from \"./browser-text-buffer\"\n\nexport interface VisibleLineChunk {\n text: string\n fg: RGBA\n bg: RGBA\n attributes: number\n link?: { url: string }\n}\n\nexport interface VisibleLine {\n chunks: VisibleLineChunk[]\n}\n\nconst defaultFg: RGBA = {\n r: 1, g: 1, b: 1, a: 1,\n buffer: new Float32Array([1, 1, 1, 1]),\n} as RGBA\n\nconst defaultBg: RGBA = {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n} as RGBA\n\nexport class BrowserTextBufferView {\n private textBuffer: BrowserTextBuffer\n private _wrapWidth: number | null = null\n private _wrapMode: \"none\" | \"char\" | \"word\" = \"word\"\n private _viewportX: number = 0\n private _viewportY: number = 0\n private _viewportWidth: number = 0\n private _viewportHeight: number = 0\n private _truncate: boolean = false\n public textAlign: \"left\" | \"center\" | \"right\" = \"left\"\n private _selection: { start: number; end: number } | null = null\n private _selectionBg: RGBA | undefined\n private _selectionFg: RGBA | undefined\n\n constructor(textBuffer: BrowserTextBuffer) {\n this.textBuffer = textBuffer\n }\n\n static create(textBuffer: BrowserTextBuffer): BrowserTextBufferView {\n return new BrowserTextBufferView(textBuffer)\n }\n\n // Compat\n get ptr(): number {\n return 1\n }\n\n get lineInfo() {\n const lines = this.getAllWrappedLines()\n const lineStarts: number[] = []\n const lineWidths: number[] = []\n const lineSources: number[] = []\n const lineWraps: number[] = []\n let maxWidth = 0\n let offset = 0\n\n for (let i = 0; i < lines.length; i++) {\n lineStarts.push(offset)\n const lineText = lines[i].map((c) => c.text).join(\"\")\n const w = lineText.length\n lineWidths.push(w)\n lineSources.push(0)\n lineWraps.push(0)\n if (w > maxWidth) maxWidth = w\n offset += lineText.length + 1\n }\n\n return { lineStarts, lineWidths, maxLineWidth: maxWidth, lineSources, lineWraps }\n }\n\n get logicalLineInfo() {\n return this.lineInfo\n }\n\n setSelection(start: number, end: number, bgColor?: RGBA, fgColor?: RGBA): void {\n this._selection = { start, end }\n this._selectionBg = bgColor\n this._selectionFg = fgColor\n }\n\n updateSelection(end: number, bgColor?: RGBA, fgColor?: RGBA): void {\n if (this._selection) {\n this._selection.end = end\n }\n if (bgColor) this._selectionBg = bgColor\n if (fgColor) this._selectionFg = fgColor\n }\n\n resetSelection(): void {\n this._selection = null\n }\n\n getSelection(): { start: number; end: number } | null {\n return this._selection\n }\n\n hasSelection(): boolean {\n return this._selection !== null\n }\n\n setLocalSelection(\n _anchorX: number,\n _anchorY: number,\n _focusX: number,\n _focusY: number,\n _bgColor?: RGBA,\n _fgColor?: RGBA,\n ): boolean {\n return false\n }\n\n updateLocalSelection(\n _anchorX: number,\n _anchorY: number,\n _focusX: number,\n _focusY: number,\n _bgColor?: RGBA,\n _fgColor?: RGBA,\n ): boolean {\n return false\n }\n\n resetLocalSelection(): void {}\n\n getSelectedText(): string {\n if (!this._selection) return \"\"\n const text = this.textBuffer.getPlainText()\n const start = Math.min(this._selection.start, this._selection.end)\n const end = Math.max(this._selection.start, this._selection.end)\n return text.slice(start, end)\n }\n\n getPlainText(): string {\n return this.textBuffer.getPlainText()\n }\n\n setWrapWidth(width: number | null): void {\n this._wrapWidth = width\n }\n\n setWrapMode(mode: \"none\" | \"char\" | \"word\"): void {\n this._wrapMode = mode\n }\n\n setViewportSize(width: number, height: number): void {\n this._viewportWidth = width\n this._viewportHeight = height\n\n if (this._wrapMode !== \"none\" && width > 0 && this._wrapWidth !== width) {\n this._wrapWidth = width\n }\n }\n\n setViewport(x: number, y: number, width: number, height: number): void {\n this._viewportX = x\n this._viewportY = y\n this._viewportWidth = width\n this._viewportHeight = height\n\n // Sync wrap width with viewport width (matches Zig TextBufferView.setViewport behavior)\n if (this._wrapMode !== \"none\" && width > 0 && this._wrapWidth !== width) {\n this._wrapWidth = width\n }\n }\n\n setTabIndicator(_indicator: string | number): void {}\n\n setTabIndicatorColor(_color: RGBA): void {}\n\n setTruncate(truncate: boolean): void {\n this._truncate = truncate\n }\n\n private getAllWrappedLines(): VisibleLineChunk[][] {\n const chunks = this.textBuffer.getChunks()\n if (chunks.length === 0) return []\n\n const dfg = this.textBuffer.defaultFg ?? defaultFg\n const dbg = this.textBuffer.defaultBg ?? defaultBg\n\n // First, build logical lines from chunks\n const logicalLines: VisibleLineChunk[][] = [[]]\n\n for (const chunk of chunks) {\n const parts = chunk.text.split(\"\\n\")\n for (let i = 0; i < parts.length; i++) {\n if (i > 0) {\n logicalLines.push([])\n }\n if (parts[i].length > 0) {\n const vlc: VisibleLineChunk = {\n text: parts[i],\n fg: chunk.fg ?? dfg,\n bg: chunk.bg ?? dbg,\n attributes: chunk.attributes ?? 0,\n }\n if (chunk.link) vlc.link = chunk.link\n logicalLines[logicalLines.length - 1].push(vlc)\n }\n }\n }\n\n // Apply wrapping\n if (this._wrapMode === \"none\" || !this._wrapWidth || this._wrapWidth <= 0) {\n return logicalLines\n }\n\n const wrappedLines: VisibleLineChunk[][] = []\n const wrapWidth = this._wrapWidth\n\n for (const logicalLine of logicalLines) {\n // Flatten line text to handle wrapping\n const lineText = logicalLine.map((c) => c.text).join(\"\")\n\n if (lineText.length <= wrapWidth) {\n wrappedLines.push(logicalLine)\n continue\n }\n\n if (this._wrapMode === \"char\") {\n // Character wrapping\n let pos = 0\n while (pos < lineText.length) {\n const end = Math.min(pos + wrapWidth, lineText.length)\n const sliceChunks = this.sliceChunks(logicalLine, pos, end)\n wrappedLines.push(sliceChunks)\n pos = end\n }\n } else {\n // Word wrapping\n let pos = 0\n while (pos < lineText.length) {\n let end = Math.min(pos + wrapWidth, lineText.length)\n if (end < lineText.length) {\n // Look for a space to break at\n let breakPos = end\n while (breakPos > pos && lineText[breakPos] !== \" \") {\n breakPos--\n }\n if (breakPos > pos) {\n end = breakPos + 1 // Include the space\n }\n }\n const sliceChunks = this.sliceChunks(logicalLine, pos, end)\n wrappedLines.push(sliceChunks)\n pos = end\n }\n }\n }\n\n return wrappedLines\n }\n\n private sliceChunks(chunks: VisibleLineChunk[], start: number, end: number): VisibleLineChunk[] {\n const result: VisibleLineChunk[] = []\n let offset = 0\n\n for (const chunk of chunks) {\n const chunkStart = offset\n const chunkEnd = offset + chunk.text.length\n\n if (chunkEnd <= start || chunkStart >= end) {\n offset = chunkEnd\n continue\n }\n\n const sliceStart = Math.max(0, start - chunkStart)\n const sliceEnd = Math.min(chunk.text.length, end - chunkStart)\n const slicedText = chunk.text.slice(sliceStart, sliceEnd)\n\n if (slicedText.length > 0) {\n const sliced: VisibleLineChunk = {\n text: slicedText,\n fg: chunk.fg,\n bg: chunk.bg,\n attributes: chunk.attributes,\n }\n if (chunk.link) sliced.link = chunk.link\n result.push(sliced)\n }\n\n offset = chunkEnd\n }\n\n return result\n }\n\n measureForDimensions(width: number, height: number): { lineCount: number; maxWidth: number } | null {\n // Temporarily set wrap width for measurement\n const oldWrapWidth = this._wrapWidth\n if (width > 0 && this._wrapMode !== \"none\") {\n this._wrapWidth = width\n } else if (width === 0) {\n // width=0 means measure without wrapping\n this._wrapWidth = null\n }\n\n const lines = this.getAllWrappedLines()\n this._wrapWidth = oldWrapWidth\n\n let maxWidth = 0\n for (const line of lines) {\n const lineWidth = line.reduce((sum, c) => sum + c.text.length, 0)\n if (lineWidth > maxWidth) maxWidth = lineWidth\n }\n\n return {\n lineCount: lines.length,\n maxWidth,\n }\n }\n\n getVirtualLineCount(): number {\n return this.getAllWrappedLines().length\n }\n\n getVisibleLines(): VisibleLine[] | null {\n const allLines = this.getAllWrappedLines()\n if (allLines.length === 0) return null\n\n const startLine = this._viewportY\n const endLine =\n this._viewportHeight > 0 ? Math.min(startLine + this._viewportHeight, allLines.length) : allLines.length\n\n const visibleLines: VisibleLine[] = []\n for (let i = startLine; i < endLine; i++) {\n if (i >= 0 && i < allLines.length) {\n visibleLines.push({ chunks: allLines[i] })\n }\n }\n\n return visibleLines\n }\n\n destroy(): void {}\n}\n", "// Stub SyntaxStyle for browser - no native Zig backing needed\nexport class BrowserSyntaxStyle {\n private _destroyed = false\n\n static create(): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n static fromTheme(_theme: any): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n static fromStyles(_styles: any): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n get ptr(): number {\n return 0\n }\n\n registerStyle(_name: string, _style: any): number {\n return 0\n }\n\n resolveStyleId(_name: string): number | null {\n return null\n }\n\n getStyleId(_name: string): number | null {\n return null\n }\n\n getStyleCount(): number {\n return 0\n }\n\n clearNameCache(): void {}\n\n getStyle(_name: string): any {\n return undefined\n }\n\n mergeStyles(..._styleNames: string[]): { attributes: number } {\n return { attributes: 0 }\n }\n\n clearCache(): void {}\n getCacheSize(): number {\n return 0\n }\n getAllStyles(): Map<string, any> {\n return new Map()\n }\n getRegisteredNames(): string[] {\n return []\n }\n\n destroy(): void {\n this._destroyed = true\n }\n}\n", "// Stub for opentui/packages/core/src/animation/Timeline.ts\nexport class Timeline {\n public isPlaying: boolean = false\n public isComplete: boolean = false\n public duration: number = 1000\n public loop: boolean = false\n public synced: boolean = false\n public currentTime: number = 0\n public items: any[] = []\n public subTimelines: any[] = []\n\n constructor(_options: any = {}) {}\n addStateChangeListener(_listener: any): void {}\n removeStateChangeListener(_listener: any): void {}\n add(_target: any, _options: any): this { return this }\n call(_callback: () => void): this { return this }\n play(): this {\n this.isPlaying = true\n return this\n }\n pause(): this {\n this.isPlaying = false\n return this\n }\n restart(): void {}\n update(_deltaTime: number): void {}\n}\n\nclass TimelineEngine {\n defaults = { frameRate: 60 }\n attach(_renderer: any): void {}\n detach(): void {}\n register(_timeline: Timeline): void {}\n unregister(_timeline: Timeline): void {}\n clear(): void {}\n update(_deltaTime: number): void {}\n}\n\nexport const engine = new TimelineEngine()\n\nexport function createTimeline(options: any = {}): Timeline {\n return new Timeline(options)\n}\n", "// Copied from https://github.com/enquirer/enquirer/blob/36785f3399a41cd61e9d28d1eb9c2fcd73d69b4c/lib/keypress.js\nimport { Buffer } from \"node:buffer\"\nimport { parseKittyKeyboard } from \"./parse.keypress-kitty\"\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 KeyEventType = \"press\" | \"repeat\" | \"release\"\n\nexport interface 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 eventType: KeyEventType\n source: \"raw\" | \"kitty\"\n code?: string\n super?: boolean\n hyper?: boolean\n capsLock?: boolean\n numLock?: boolean\n baseCode?: number\n repeated?: boolean\n}\n\nexport type ParseKeypressOptions = {\n useKittyKeyboard?: boolean\n}\n\nconst modifyOtherKeysRe = /^\\x1b\\[27;(\\d+);(\\d+)~$/\n\nexport const parseKeypress = (s: Buffer | string = \"\", options: ParseKeypressOptions = {}): ParsedKey | null => {\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 // Filter out mouse events (SGR and basic)\n if (/^\\x1b\\[<\\d+;\\d+;\\d+[Mm]$/.test(s)) {\n return null\n }\n if (s.startsWith(\"\\x1b[M\") && s.length >= 6) {\n return null\n }\n\n // Filter out terminal response sequences (not keyboard events)\n // These are responses to terminal queries and should not be treated as key presses\n\n // Window/cell size reports: ESC[4;height;width t or ESC[8;rows;cols t\n if (/^\\x1b\\[\\d+;\\d+;\\d+t$/.test(s)) {\n return null\n }\n\n // Cursor position reports (DSR): ESC[row;col R\n if (/^\\x1b\\[\\d+;\\d+R$/.test(s)) {\n return null\n }\n\n // Device Attributes (DA) responses: ESC[?...c\n if (/^\\x1b\\[\\?[\\d;]+c$/.test(s)) {\n return null\n }\n\n // Mode reports: ESC[?...;...$y\n if (/^\\x1b\\[\\?[\\d;]+\\$y$/.test(s)) {\n return null\n }\n\n // Focus events: ESC[I (focus in), ESC[O (focus out)\n // Note: ESC[O is also used for SS3 sequences (like arrow keys), but those have a character after O\n if (s === \"\\x1b[I\" || s === \"\\x1b[O\") {\n return null\n }\n\n // OSC (Operating System Command) responses: ESC]...ESC\\ or ESC]...BEL\n if (/^\\x1b\\][\\d;].*(\\x1b\\\\|\\x07)$/.test(s)) {\n return null\n }\n\n // Bracketed paste mode markers: ESC[200~ (start), ESC[201~ (end)\n if (s === \"\\x1b[200~\" || s === \"\\x1b[201~\") {\n return null\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 eventType: \"press\",\n source: \"raw\",\n }\n\n key.sequence = key.sequence || s || key.name\n\n // Check for Kitty keyboard protocol if enabled\n if (options.useKittyKeyboard) {\n const kittyResult = parseKittyKeyboard(s)\n if (kittyResult) {\n return kittyResult\n }\n }\n\n // Check for modifyOtherKeys sequences (CSI u protocol variant)\n // Format: CSI 27 ; modifier ; code ~\n // This is sent by terminals (xterm, iTerm2, Ghostty, etc.) with modifyOtherKeys mode enabled\n // to encode modified versions of keys that don't normally have modifier variants\n // Examples: CSI 27;2;13~ (shift+enter), CSI 27;5;13~ (ctrl+enter), CSI 27;5;27~ (ctrl+escape)\n const modifyOtherKeysMatch = modifyOtherKeysRe.exec(s)\n if (modifyOtherKeysMatch) {\n const modifier = parseInt(modifyOtherKeysMatch[1]!, 10) - 1\n const charCode = parseInt(modifyOtherKeysMatch[2]!, 10)\n\n key.ctrl = !!(modifier & 4)\n key.meta = !!(modifier & 2) // Alt/Option sets meta\n key.shift = !!(modifier & 1)\n key.option = !!(modifier & 2)\n key.super = !!(modifier & 8)\n key.hyper = !!(modifier & 16)\n\n // Handle common keys by their ASCII codes\n if (charCode === 13) {\n key.name = \"return\"\n } else if (charCode === 27) {\n key.name = \"escape\"\n } else if (charCode === 9) {\n key.name = \"tab\"\n } else if (charCode === 32) {\n key.name = \"space\"\n } else if (charCode === 127 || charCode === 8) {\n key.name = \"backspace\"\n } else {\n // For other character codes, use the character itself\n const char = String.fromCharCode(charCode)\n key.name = char\n key.sequence = char\n if (charCode >= 48 && charCode <= 57) {\n key.number = true\n }\n }\n\n return key\n }\n\n if (s === \"\\r\" || s === \"\\x1b\\r\") {\n // carriage return\n key.name = \"return\"\n key.meta = s.length === 2\n } else if (s === \"\\n\" || s === \"\\x1b\\n\") {\n // linefeed\n key.name = \"linefeed\"\n key.meta = s.length === 2\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 === \"\\x00\") {\n // ctrl+space\n key.name = \"space\"\n key.ctrl = true\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 const char = parts[1]!\n const isUpperCase = /^[A-Z]$/.test(char)\n\n // Check if uppercase F or B map to arrow keys (old terminal style)\n if (char === \"F\") {\n key.name = \"right\"\n } else if (char === \"B\") {\n key.name = \"left\"\n } else if (isUpperCase) {\n key.shift = true\n key.name = char\n } else {\n key.name = char\n }\n } else if (s.length === 2 && s[0] === \"\\x1b\" && s[1]! <= \"\\x1a\") {\n // meta+ctrl+letter (ESC + control character)\n key.meta = true\n key.ctrl = true\n key.name = String.fromCharCode(s.charCodeAt(1) + \"a\".charCodeAt(0) - 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 key.meta = 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 = parseInt(parts[3] || parts[5] || \"1\", 10) - 1\n\n // Parse the key modifier\n // Terminal modifier bits: 1=Shift, 2=Alt/Option, 4=Ctrl, 8=Super, 16=Hyper\n // Note: meta flag is set for Alt/Option (bit 2)\n key.ctrl = !!(modifier & 4)\n key.meta = !!(modifier & 2) // Alt/Option sets meta\n key.shift = !!(modifier & 1)\n key.option = !!(modifier & 2) // Alt/Option modifier specifically\n key.super = !!(modifier & 8)\n key.hyper = !!(modifier & 16)\n key.code = code\n\n const keyNameResult = keyName[code]\n if (keyNameResult) {\n key.name = keyNameResult\n key.shift = isShiftKey(code) || key.shift\n key.ctrl = isCtrlKey(code) || key.ctrl\n } else {\n // If we matched the regex but didn't find a valid key name,\n // reset the key to default state (unknown sequence)\n key.name = \"\"\n key.code = undefined\n }\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", "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\nexport function destroySingleton(key: string): void {\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 (bag && key in bag) {\n delete bag[key]\n }\n}\n\nexport function hasSingleton(key: string): boolean {\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 return bag && key in bag\n}\n", "import { singleton } from \"./singleton.ts\"\n\n/**\n * Environment variable registry\n *\n * Usage:\n * ```ts\n * import { registerEnvVar, env } from \"./lib/env.ts\";\n *\n * // Register environment variables\n * registerEnvVar({\n * name: \"DEBUG\",\n * description: \"Enable debug logging\",\n * type: \"boolean\",\n * default: false\n * });\n *\n * registerEnvVar({\n * name: \"PORT\",\n * description: \"Server port number\",\n * type: \"number\",\n * default: 3000\n * });\n *\n * // Access environment variables\n * if (env.DEBUG) {\n * console.log(\"Debug mode enabled\");\n * }\n *\n * const port = env.PORT; // number\n * ```\n */\n\nexport interface EnvVarConfig {\n name: string\n description: string\n default?: string | boolean | number\n type?: \"string\" | \"boolean\" | \"number\"\n}\n\nexport const envRegistry: Record<string, EnvVarConfig> = singleton(\"env-registry\", () => ({}))\n\nexport function registerEnvVar(config: EnvVarConfig): void {\n const existing = envRegistry[config.name]\n if (existing) {\n if (\n existing.description !== config.description ||\n existing.type !== config.type ||\n existing.default !== config.default\n ) {\n throw new Error(\n `Environment variable \"${config.name}\" is already registered with different configuration. ` +\n `Existing: ${JSON.stringify(existing)}, New: ${JSON.stringify(config)}`,\n )\n }\n return\n }\n envRegistry[config.name] = config\n}\n\nfunction normalizeBoolean(value: string): boolean {\n const lowerValue = value.toLowerCase()\n return [\"true\", \"1\", \"on\", \"yes\"].includes(lowerValue)\n}\n\nfunction parseEnvValue(config: EnvVarConfig): string | boolean | number {\n const envValue = process.env[config.name]\n\n if (envValue === undefined && config.default !== undefined) {\n return config.default\n }\n\n if (envValue === undefined) {\n throw new Error(`Required environment variable ${config.name} is not set. ${config.description}`)\n }\n\n switch (config.type) {\n case \"boolean\":\n return typeof envValue === \"boolean\" ? envValue : normalizeBoolean(envValue)\n case \"number\":\n const numValue = Number(envValue)\n if (isNaN(numValue)) {\n throw new Error(`Environment variable ${config.name} must be a valid number, got: ${envValue}`)\n }\n return numValue\n case \"string\":\n default:\n return envValue\n }\n}\n\nclass EnvStore {\n private parsedValues: Map<string, string | boolean | number> = new Map()\n\n get(key: string): any {\n if (this.parsedValues.has(key)) {\n return this.parsedValues.get(key)!\n }\n\n if (!(key in envRegistry)) {\n throw new Error(`Environment variable ${key} is not registered.`)\n }\n\n try {\n const value = parseEnvValue(envRegistry[key])\n this.parsedValues.set(key, value)\n return value\n } catch (error) {\n throw new Error(`Failed to parse env var ${key}: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n\n has(key: string): boolean {\n return key in envRegistry\n }\n\n clearCache(): void {\n this.parsedValues.clear()\n }\n}\n\nconst envStore = singleton(\"env-store\", () => new EnvStore())\n\nexport function clearEnvCache(): void {\n envStore.clearCache()\n}\n\nexport function generateEnvMarkdown(): string {\n const configs = Object.values(envRegistry)\n\n if (configs.length === 0) {\n return \"# Environment Variables\\n\\nNo environment variables registered.\\n\"\n }\n\n let markdown = \"# Environment Variables\\n\\n\"\n\n for (const config of configs) {\n markdown += `## ${config.name}\\n\\n`\n markdown += `${config.description}\\n\\n`\n\n markdown += `**Type:** \\`${config.type || \"string\"}\\` \\n`\n\n if (config.default !== undefined) {\n const defaultValue = typeof config.default === \"string\" ? `\"${config.default}\"` : String(config.default)\n markdown += `**Default:** \\`${defaultValue}\\`\\n`\n } else {\n markdown += \"**Default:** *Required*\\n\"\n }\n\n markdown += \"\\n\"\n }\n\n return markdown\n}\n\nexport function generateEnvColored(): string {\n const configs = Object.values(envRegistry)\n\n if (configs.length === 0) {\n return \"\\x1b[1;36mEnvironment Variables\\x1b[0m\\n\\nNo environment variables registered.\\n\"\n }\n\n let output = \"\\x1b[1;36mEnvironment Variables\\x1b[0m\\n\\n\"\n\n for (const config of configs) {\n output += `\\x1b[1;33m${config.name}\\x1b[0m\\n`\n output += `${config.description}\\n`\n output += `\\x1b[32mType:\\x1b[0m \\x1b[36m${config.type || \"string\"}\\x1b[0m\\n`\n\n if (config.default !== undefined) {\n const defaultValue = typeof config.default === \"string\" ? `\"${config.default}\"` : String(config.default)\n output += `\\x1b[32mDefault:\\x1b[0m \\x1b[35m${defaultValue}\\x1b[0m\\n`\n } else {\n output += `\\x1b[32mDefault:\\x1b[0m \\x1b[31mRequired\\x1b[0m\\n`\n }\n\n output += \"\\n\"\n }\n\n return output\n}\n\nexport const env = new Proxy({} as Record<string, any>, {\n get(target, prop: string) {\n if (typeof prop !== \"string\") {\n return undefined\n }\n return envStore.get(prop)\n },\n\n has(target, prop: string) {\n return envStore.has(prop)\n },\n\n ownKeys() {\n return Object.keys(envRegistry)\n },\n\n getOwnPropertyDescriptor(target, prop: string) {\n if (envStore.has(prop)) {\n return {\n enumerable: true,\n configurable: true,\n get: () => envStore.get(prop),\n }\n }\n return undefined\n },\n})\n", "import os from \"os\"\nimport path from \"path\"\nimport { EventEmitter } from \"events\"\nimport { singleton } from \"./singleton\"\nimport { env, registerEnvVar } from \"./env\"\nimport { isValidDirectoryName } from \"./validate-dir-name\"\n\n// Register environment variables for XDG directories\nregisterEnvVar({\n name: \"XDG_CONFIG_HOME\",\n description: \"Base directory for user-specific configuration files\",\n type: \"string\",\n default: \"\",\n})\n\nregisterEnvVar({\n name: \"XDG_DATA_HOME\",\n description: \"Base directory for user-specific data files\",\n type: \"string\",\n default: \"\",\n})\n\nexport interface DataPaths {\n globalConfigPath: string\n globalConfigFile: string\n localConfigFile: string\n globalDataPath: string\n}\n\nexport interface DataPathsEvents {\n \"paths:changed\": [paths: DataPaths]\n}\n\nexport class DataPathsManager extends EventEmitter<DataPathsEvents> {\n private _appName: string\n private _globalConfigPath?: string\n private _globalConfigFile?: string\n private _localConfigFile?: string\n private _globalDataPath?: string\n constructor() {\n super()\n this._appName = \"opentui\"\n }\n\n get appName(): string {\n return this._appName\n }\n\n set appName(value: string) {\n if (!isValidDirectoryName(value)) {\n throw new Error(`Invalid app name \"${value}\": must be a valid directory name`)\n }\n if (this._appName !== value) {\n this._appName = value\n this._globalConfigPath = undefined\n this._globalConfigFile = undefined\n this._localConfigFile = undefined\n this._globalDataPath = undefined\n this.emit(\"paths:changed\", this.toObject())\n }\n }\n\n get globalConfigPath(): string {\n if (this._globalConfigPath === undefined) {\n const homeDir = os.homedir()\n const xdgConfigHome = env.XDG_CONFIG_HOME\n const baseConfigDir = xdgConfigHome || path.join(homeDir, \".config\")\n this._globalConfigPath = path.join(baseConfigDir, this._appName)\n }\n return this._globalConfigPath\n }\n\n get globalConfigFile(): string {\n if (this._globalConfigFile === undefined) {\n this._globalConfigFile = path.join(this.globalConfigPath, \"init.ts\")\n }\n return this._globalConfigFile\n }\n\n get localConfigFile(): string {\n if (this._localConfigFile === undefined) {\n this._localConfigFile = path.join(process.cwd(), `.${this._appName}.ts`)\n }\n return this._localConfigFile\n }\n\n get globalDataPath(): string {\n if (this._globalDataPath === undefined) {\n const homeDir = os.homedir()\n const xdgDataHome = env.XDG_DATA_HOME\n const baseDataDir = xdgDataHome || path.join(homeDir, \".local/share\")\n this._globalDataPath = path.join(baseDataDir, this._appName)\n }\n return this._globalDataPath\n }\n\n toObject(): DataPaths {\n return {\n globalConfigPath: this.globalConfigPath,\n globalConfigFile: this.globalConfigFile,\n localConfigFile: this.localConfigFile,\n globalDataPath: this.globalDataPath,\n }\n }\n}\n\nexport function getDataPaths(): DataPathsManager {\n return singleton(\"data-paths-opentui\", () => new DataPathsManager())\n}\n", "import { Renderable, type RenderableOptions } from \"../Renderable\"\nimport { convertGlobalToLocalSelection, Selection, type LocalSelectionBounds } from \"../lib/selection\"\nimport { TextBuffer, type TextChunk } from \"../text-buffer\"\nimport { TextBufferView } from \"../text-buffer-view\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { type RenderContext, type LineInfoProvider } from \"../types\"\nimport type { OptimizedBuffer } from \"../buffer\"\nimport { MeasureMode } from \"yoga-layout\"\nimport type { LineInfo } from \"../zig\"\nimport { SyntaxStyle } from \"../syntax-style\"\n\nexport interface TextBufferOptions extends RenderableOptions<TextBufferRenderable> {\n fg?: string | RGBA\n bg?: string | RGBA\n selectionBg?: string | RGBA\n selectionFg?: string | RGBA\n selectable?: boolean\n attributes?: number\n wrapMode?: \"none\" | \"char\" | \"word\"\n tabIndicator?: string | number\n tabIndicatorColor?: string | RGBA\n truncate?: boolean\n}\n\nexport abstract class TextBufferRenderable extends Renderable implements LineInfoProvider {\n public selectable: boolean = true\n\n protected _defaultFg: RGBA\n protected _defaultBg: RGBA\n protected _defaultAttributes: number\n protected _selectionBg: RGBA | undefined\n protected _selectionFg: RGBA | undefined\n protected _wrapMode: \"none\" | \"char\" | \"word\" = \"word\"\n protected lastLocalSelection: LocalSelectionBounds | null = null\n protected _tabIndicator?: string | number\n protected _tabIndicatorColor?: RGBA\n protected _scrollX: number = 0\n protected _scrollY: number = 0\n protected _truncate: boolean = false\n\n protected textBuffer: TextBuffer\n protected textBufferView: TextBufferView\n protected _textBufferSyntaxStyle: SyntaxStyle\n\n protected _defaultOptions = {\n fg: RGBA.fromValues(1, 1, 1, 1),\n bg: RGBA.fromValues(0, 0, 0, 0),\n selectionBg: undefined,\n selectionFg: undefined,\n selectable: true,\n attributes: 0,\n wrapMode: \"word\" as \"none\" | \"char\" | \"word\",\n tabIndicator: undefined,\n tabIndicatorColor: undefined,\n truncate: false,\n } satisfies Partial<TextBufferOptions>\n\n constructor(ctx: RenderContext, options: TextBufferOptions) {\n super(ctx, options)\n\n this._defaultFg = parseColor(options.fg ?? this._defaultOptions.fg)\n this._defaultBg = parseColor(options.bg ?? this._defaultOptions.bg)\n this._defaultAttributes = options.attributes ?? this._defaultOptions.attributes\n this._selectionBg = options.selectionBg ? parseColor(options.selectionBg) : this._defaultOptions.selectionBg\n this._selectionFg = options.selectionFg ? parseColor(options.selectionFg) : this._defaultOptions.selectionFg\n this.selectable = options.selectable ?? this._defaultOptions.selectable\n this._wrapMode = options.wrapMode ?? this._defaultOptions.wrapMode\n this._tabIndicator = options.tabIndicator ?? this._defaultOptions.tabIndicator\n this._tabIndicatorColor = options.tabIndicatorColor\n ? parseColor(options.tabIndicatorColor)\n : this._defaultOptions.tabIndicatorColor\n this._truncate = options.truncate ?? this._defaultOptions.truncate\n\n this.textBuffer = TextBuffer.create(this._ctx.widthMethod)\n this.textBufferView = TextBufferView.create(this.textBuffer)\n\n this._textBufferSyntaxStyle = SyntaxStyle.create()\n this.textBuffer.setSyntaxStyle(this._textBufferSyntaxStyle)\n\n this.textBufferView.setWrapMode(this._wrapMode)\n this.setupMeasureFunc()\n\n this.textBuffer.setDefaultFg(this._defaultFg)\n this.textBuffer.setDefaultBg(this._defaultBg)\n this.textBuffer.setDefaultAttributes(this._defaultAttributes)\n\n if (this._tabIndicator !== undefined) {\n this.textBufferView.setTabIndicator(this._tabIndicator)\n }\n if (this._tabIndicatorColor !== undefined) {\n this.textBufferView.setTabIndicatorColor(this._tabIndicatorColor)\n }\n\n if (this._wrapMode !== \"none\" && this.width > 0) {\n this.textBufferView.setWrapWidth(this.width)\n }\n\n if (this.width > 0 && this.height > 0) {\n this.textBufferView.setViewport(this._scrollX, this._scrollY, this.width, this.height)\n }\n\n this.textBufferView.setTruncate(this._truncate)\n\n this.updateTextInfo()\n }\n\n protected onMouseEvent(event: any): void {\n if (event.type === \"scroll\") {\n this.handleScroll(event)\n }\n }\n\n protected handleScroll(event: any): void {\n if (!event.scroll) return\n\n const { direction, delta } = event.scroll\n\n if (direction === \"up\") {\n this.scrollY -= delta\n } else if (direction === \"down\") {\n this.scrollY += delta\n }\n\n if (this._wrapMode === \"none\") {\n if (direction === \"left\") {\n this.scrollX -= delta\n } else if (direction === \"right\") {\n this.scrollX += delta\n }\n }\n }\n\n public get lineInfo(): LineInfo {\n return this.textBufferView.logicalLineInfo\n }\n\n public get lineCount(): number {\n return this.textBuffer.getLineCount()\n }\n\n public get virtualLineCount(): number {\n return this.textBufferView.getVirtualLineCount()\n }\n\n public get scrollY(): number {\n return this._scrollY\n }\n\n public set scrollY(value: number) {\n const maxScrollY = Math.max(0, this.scrollHeight - this.height)\n const clamped = Math.max(0, Math.min(value, maxScrollY))\n if (this._scrollY !== clamped) {\n this._scrollY = clamped\n this.updateViewportOffset()\n this.requestRender()\n }\n }\n\n public get scrollX(): number {\n return this._scrollX\n }\n\n public set scrollX(value: number) {\n const maxScrollX = Math.max(0, this.scrollWidth - this.width)\n const clamped = Math.max(0, Math.min(value, maxScrollX))\n if (this._scrollX !== clamped) {\n this._scrollX = clamped\n this.updateViewportOffset()\n this.requestRender()\n }\n }\n\n public get scrollWidth(): number {\n return this.lineInfo.maxLineWidth\n }\n\n public get scrollHeight(): number {\n return this.lineInfo.lineStarts.length\n }\n\n public get maxScrollY(): number {\n return Math.max(0, this.scrollHeight - this.height)\n }\n\n public get maxScrollX(): number {\n return Math.max(0, this.scrollWidth - this.width)\n }\n\n protected updateViewportOffset(): void {\n // Update the viewport with the new scroll position\n if (this.width > 0 && this.height > 0) {\n this.textBufferView.setViewport(this._scrollX, this._scrollY, this.width, this.height)\n }\n }\n\n get plainText(): string {\n return this.textBuffer.getPlainText()\n }\n\n get textLength(): number {\n return this.textBuffer.length\n }\n\n get fg(): RGBA {\n return this._defaultFg\n }\n\n set fg(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.fg)\n if (this._defaultFg !== newColor) {\n this._defaultFg = newColor\n this.textBuffer.setDefaultFg(this._defaultFg)\n this.onFgChanged(newColor)\n this.requestRender()\n }\n }\n\n get selectionBg(): RGBA | undefined {\n return this._selectionBg\n }\n\n set selectionBg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionBg\n if (this._selectionBg !== newColor) {\n this._selectionBg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get selectionFg(): RGBA | undefined {\n return this._selectionFg\n }\n\n set selectionFg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionFg\n if (this._selectionFg !== newColor) {\n this._selectionFg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get bg(): RGBA {\n return this._defaultBg\n }\n\n set bg(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.bg)\n if (this._defaultBg !== newColor) {\n this._defaultBg = newColor\n this.textBuffer.setDefaultBg(this._defaultBg)\n this.onBgChanged(newColor)\n this.requestRender()\n }\n }\n\n get attributes(): number {\n return this._defaultAttributes\n }\n\n set attributes(value: number) {\n if (this._defaultAttributes !== value) {\n this._defaultAttributes = value\n this.textBuffer.setDefaultAttributes(this._defaultAttributes)\n this.onAttributesChanged(value)\n this.requestRender()\n }\n }\n\n get wrapMode(): \"none\" | \"char\" | \"word\" {\n return this._wrapMode\n }\n\n set wrapMode(value: \"none\" | \"char\" | \"word\") {\n if (this._wrapMode !== value) {\n this._wrapMode = value\n this.textBufferView.setWrapMode(this._wrapMode)\n if (value !== \"none\" && this.width > 0) {\n this.textBufferView.setWrapWidth(this.width)\n }\n // Changing wrap mode can change dimensions, so mark yoga node dirty to trigger re-measurement\n this.yogaNode.markDirty()\n this.requestRender()\n }\n }\n\n get tabIndicator(): string | number | undefined {\n return this._tabIndicator\n }\n\n set tabIndicator(value: string | number | undefined) {\n if (this._tabIndicator !== value) {\n this._tabIndicator = value\n if (value !== undefined) {\n this.textBufferView.setTabIndicator(value)\n }\n this.requestRender()\n }\n }\n\n get tabIndicatorColor(): RGBA | undefined {\n return this._tabIndicatorColor\n }\n\n set tabIndicatorColor(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : undefined\n if (this._tabIndicatorColor !== newColor) {\n this._tabIndicatorColor = newColor\n if (newColor !== undefined) {\n this.textBufferView.setTabIndicatorColor(newColor)\n }\n this.requestRender()\n }\n }\n\n get truncate(): boolean {\n return this._truncate\n }\n\n set truncate(value: boolean) {\n if (this._truncate !== value) {\n this._truncate = value\n this.textBufferView.setTruncate(value)\n this.requestRender()\n }\n }\n\n protected onResize(width: number, height: number): void {\n this.textBufferView.setViewport(this._scrollX, this._scrollY, width, height)\n this.yogaNode.markDirty()\n this.requestRender()\n this.emit(\"line-info-change\")\n }\n\n protected refreshLocalSelection(): boolean {\n if (this.lastLocalSelection) {\n return this.updateLocalSelection(this.lastLocalSelection)\n }\n return false\n }\n\n private updateLocalSelection(localSelection: LocalSelectionBounds | null): boolean {\n if (!localSelection?.isActive) {\n this.textBufferView.resetLocalSelection()\n return true\n }\n\n return this.textBufferView.setLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n }\n\n protected updateTextInfo(): void {\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n\n this.yogaNode.markDirty()\n this.requestRender()\n this.emit(\"line-info-change\")\n }\n\n // Undefined = 0,\n // Exactly = 1,\n // AtMost = 2\n private setupMeasureFunc(): void {\n const measureFunc = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n ): { width: number; height: number } => {\n // When widthMode is Undefined, Yoga is asking for the intrinsic/natural width\n // Pass width=0 to measureForDimensions to signal we want max-content (no wrapping)\n // The Zig code treats width=0 with wrap_mode != none as null wrap_width,\n // which triggers no-wrap mode and returns iter_mod.getMaxLineWidth()\n let effectiveWidth: number\n if (widthMode === MeasureMode.Undefined || isNaN(width)) {\n effectiveWidth = 0\n } else {\n effectiveWidth = width\n }\n\n const effectiveHeight = isNaN(height) ? 1 : height\n\n const measureResult = this.textBufferView.measureForDimensions(\n Math.floor(effectiveWidth),\n Math.floor(effectiveHeight),\n )\n\n const measuredWidth = measureResult ? Math.max(1, measureResult.maxWidth) : 1\n const measuredHeight = measureResult ? Math.max(1, measureResult.lineCount) : 1\n\n if (widthMode === MeasureMode.AtMost && this._positionType !== \"absolute\") {\n return {\n width: Math.min(effectiveWidth, measuredWidth),\n height: Math.min(effectiveHeight, measuredHeight),\n }\n }\n\n // NOTE: Yoga may use these measurements or not.\n // If the yoga node settings and the parent allow this node to grow, it will.\n return {\n width: measuredWidth,\n height: measuredHeight,\n }\n }\n\n this.yogaNode.setMeasureFunc(measureFunc)\n }\n\n shouldStartSelection(x: number, y: number): boolean {\n if (!this.selectable) return false\n\n const localX = x - this.x\n const localY = y - this.y\n\n return localX >= 0 && localX < this.width && localY >= 0 && localY < this.height\n }\n\n onSelectionChanged(selection: Selection | null): boolean {\n const localSelection = convertGlobalToLocalSelection(selection, this.x, this.y)\n this.lastLocalSelection = localSelection\n\n let changed: boolean\n if (!localSelection?.isActive) {\n this.textBufferView.resetLocalSelection()\n changed = true\n } else if (selection?.isStart) {\n changed = this.textBufferView.setLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n } else {\n changed = this.textBufferView.updateLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n }\n\n if (changed) {\n this.requestRender()\n }\n\n return this.hasSelection()\n }\n\n getSelectedText(): string {\n return this.textBufferView.getSelectedText()\n }\n\n hasSelection(): boolean {\n return this.textBufferView.hasSelection()\n }\n\n getSelection(): { start: number; end: number } | null {\n return this.textBufferView.getSelection()\n }\n\n render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n\n this.markClean()\n this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num)\n\n this.renderSelf(buffer)\n\n if (this.buffered && this.frameBuffer) {\n buffer.drawFrameBuffer(this.x, this.y, this.frameBuffer)\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n if (this.textBuffer.ptr) {\n buffer.drawTextBuffer(this.textBufferView, this.x, this.y)\n }\n }\n\n destroy(): void {\n if (this.isDestroyed) return\n\n this.textBuffer.setSyntaxStyle(null)\n this._textBufferSyntaxStyle.destroy()\n this.textBufferView.destroy()\n this.textBuffer.destroy()\n super.destroy()\n }\n\n protected onFgChanged(newColor: RGBA): void {\n // Override in subclasses if needed\n }\n\n protected onBgChanged(newColor: RGBA): void {\n // Override in subclasses if needed\n }\n\n protected onAttributesChanged(newAttributes: number): void {\n // Override in subclasses if needed\n }\n}\n", "import type { TextRenderable } from \".\"\nimport { BaseRenderable, type BaseRenderableOptions } from \"../Renderable\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { isStyledText, StyledText } from \"../lib/styled-text\"\nimport { type TextChunk } from \"../text-buffer\"\nimport type { RenderContext } from \"../types\"\n\nexport interface TextNodeOptions extends BaseRenderableOptions {\n fg?: string | RGBA\n bg?: string | RGBA\n attributes?: number\n link?: { url: string }\n}\n\nconst BrandedTextNodeRenderable: unique symbol = Symbol.for(\"@opentui/core/TextNodeRenderable\")\n\nexport function isTextNodeRenderable(obj: any): obj is TextNodeRenderable {\n return !!obj?.[BrandedTextNodeRenderable]\n}\n\nfunction styledTextToTextNodes(styledText: StyledText): TextNodeRenderable[] {\n return styledText.chunks.map((chunk) => {\n const node = new TextNodeRenderable({\n fg: chunk.fg,\n bg: chunk.bg,\n attributes: chunk.attributes,\n link: chunk.link,\n })\n node.add(chunk.text)\n return node\n })\n}\n\nexport class TextNodeRenderable extends BaseRenderable {\n [BrandedTextNodeRenderable] = true\n\n private _fg?: RGBA\n private _bg?: RGBA\n private _attributes: number\n private _link?: { url: string }\n private _children: (string | TextNodeRenderable)[] = []\n public parent: TextNodeRenderable | null = null\n\n constructor(options: TextNodeOptions) {\n super(options)\n\n this._fg = options.fg ? parseColor(options.fg) : undefined\n this._bg = options.bg ? parseColor(options.bg) : undefined\n this._attributes = options.attributes ?? 0\n this._link = options.link\n }\n\n public get children(): (string | TextNodeRenderable)[] {\n return this._children\n }\n\n public set children(children: (string | TextNodeRenderable)[]) {\n this._children = children\n this.requestRender()\n }\n\n public requestRender(): void {\n this.markDirty()\n this.parent?.requestRender()\n }\n\n public add(obj: TextNodeRenderable | StyledText | string, index?: number): number {\n if (typeof obj === \"string\") {\n if (index !== undefined) {\n this._children.splice(index, 0, obj)\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(obj)\n this.requestRender()\n return insertIndex\n }\n\n if (isTextNodeRenderable(obj)) {\n if (index !== undefined) {\n this._children.splice(index, 0, obj)\n obj.parent = this\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(obj)\n obj.parent = this\n this.requestRender()\n return insertIndex\n }\n\n if (isStyledText(obj)) {\n const textNodes = styledTextToTextNodes(obj)\n if (index !== undefined) {\n this._children.splice(index, 0, ...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n this.requestRender()\n return insertIndex\n }\n\n throw new Error(\"TextNodeRenderable only accepts strings, TextNodeRenderable instances, or StyledText instances\")\n }\n\n public replace(obj: TextNodeRenderable | string, index: number) {\n this._children[index] = obj\n if (typeof obj !== \"string\") {\n obj.parent = this\n }\n this.requestRender()\n }\n\n public insertBefore(\n child: string | TextNodeRenderable | StyledText,\n anchorNode: TextNodeRenderable | string | unknown,\n ): this {\n if (!anchorNode || !isTextNodeRenderable(anchorNode)) {\n throw new Error(\"Anchor must be a TextNodeRenderable\")\n }\n\n const anchorIndex = this._children.indexOf(anchorNode)\n if (anchorIndex === -1) {\n throw new Error(\"Anchor node not found in children\")\n }\n\n if (typeof child === \"string\") {\n this._children.splice(anchorIndex, 0, child)\n } else if (isTextNodeRenderable(child)) {\n this._children.splice(anchorIndex, 0, child)\n child.parent = this\n } else if (child instanceof StyledText) {\n const textNodes = styledTextToTextNodes(child)\n this._children.splice(anchorIndex, 0, ...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n } else {\n throw new Error(\"Child must be a string, TextNodeRenderable, or StyledText instance\")\n }\n\n this.requestRender()\n return this\n }\n\n public remove(id: string): this {\n const childIndex = this.getRenderableIndex(id)\n if (childIndex === -1) {\n throw new Error(\"Child not found in children\")\n }\n\n const child = this._children[childIndex] as TextNodeRenderable\n\n this._children.splice(childIndex, 1)\n child.parent = null\n this.requestRender()\n return this\n }\n\n public clear(): void {\n this._children = []\n this.requestRender()\n }\n\n public mergeStyles(parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number; link?: { url: string } }): {\n fg?: RGBA\n bg?: RGBA\n attributes: number\n link?: { url: string }\n } {\n return {\n fg: this._fg ?? parentStyle.fg,\n bg: this._bg ?? parentStyle.bg,\n attributes: this._attributes | parentStyle.attributes,\n link: this._link ?? parentStyle.link,\n }\n }\n\n public gatherWithInheritedStyle(\n parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number; link?: { url: string } } = {\n fg: undefined,\n bg: undefined,\n attributes: 0,\n },\n ): TextChunk[] {\n const currentStyle = this.mergeStyles(parentStyle)\n\n const chunks: TextChunk[] = []\n\n for (const child of this._children) {\n if (typeof child === \"string\") {\n chunks.push({\n __isChunk: true,\n text: child,\n fg: currentStyle.fg,\n bg: currentStyle.bg,\n attributes: currentStyle.attributes,\n link: currentStyle.link,\n })\n } else {\n const childChunks = child.gatherWithInheritedStyle(currentStyle)\n chunks.push(...childChunks)\n }\n }\n\n this.markClean()\n\n return chunks\n }\n\n public static fromString(text: string, options: Partial<TextNodeOptions> = {}): TextNodeRenderable {\n const node = new TextNodeRenderable(options)\n node.add(text)\n return node\n }\n\n public static fromNodes(nodes: TextNodeRenderable[], options: Partial<TextNodeOptions> = {}): TextNodeRenderable {\n const node = new TextNodeRenderable(options)\n for (const childNode of nodes) {\n node.add(childNode)\n }\n return node\n }\n\n public toChunks(\n parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number; link?: { url: string } } = {\n fg: undefined,\n bg: undefined,\n attributes: 0,\n },\n ): TextChunk[] {\n return this.gatherWithInheritedStyle(parentStyle)\n }\n\n public getChildren(): BaseRenderable[] {\n return this._children.filter((child): child is TextNodeRenderable => typeof child !== \"string\")\n }\n\n public getChildrenCount(): number {\n return this._children.length\n }\n\n public getRenderable(id: string): BaseRenderable | undefined {\n return this._children.find((child): child is TextNodeRenderable => typeof child !== \"string\" && child.id === id)\n }\n\n public getRenderableIndex(id: string): number {\n return this._children.findIndex((child) => isTextNodeRenderable(child) && child.id === id)\n }\n\n public get fg(): RGBA | undefined {\n return this._fg\n }\n\n public set fg(fg: RGBA | string | undefined) {\n if (!fg) {\n this._fg = undefined\n this.requestRender()\n return\n }\n this._fg = parseColor(fg)\n this.requestRender()\n }\n\n public set bg(bg: RGBA | string | undefined) {\n if (!bg) {\n this._bg = undefined\n this.requestRender()\n return\n }\n this._bg = parseColor(bg)\n this.requestRender()\n }\n\n public get bg(): RGBA | undefined {\n return this._bg\n }\n\n public set attributes(attributes: number) {\n this._attributes = attributes\n this.requestRender()\n }\n\n public get attributes(): number {\n return this._attributes\n }\n\n public set link(link: { url: string } | undefined) {\n this._link = link\n this.requestRender()\n }\n\n public get link(): { url: string } | undefined {\n return this._link\n }\n\n public findDescendantById(id: string): BaseRenderable | undefined {\n return undefined\n }\n}\n\nexport class RootTextNodeRenderable extends TextNodeRenderable {\n textParent: TextRenderable\n\n constructor(\n private readonly ctx: RenderContext,\n options: TextNodeOptions,\n textParent: TextRenderable,\n ) {\n super(options)\n this.textParent = textParent\n }\n\n public requestRender(): void {\n this.markDirty()\n this.ctx.requestRender()\n }\n}\n", "import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n _defaults = newDefaults;\n}\n", "const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\nconst supportsLookbehind = (() => {\ntry {\n // eslint-disable-next-line prefer-regex-literals\n return !!new RegExp('(?<=1)(?<!1)');\n} catch {\n // See browser support here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n return false;\n}\n})();\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] +\\S/,\n listReplaceTask: /^\\[[ xX]\\] +/,\n listTaskCheckbox: /\\[[ xX]\\]/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n .replace('html', /<(?! )[^<>]*?>/)\n .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('protocol', _caseInsensitiveProtocol)\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: edit(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/)\n .replace('protocol', _caseInsensitiveProtocol)\n .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n", "import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escape(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function unescape(html: string) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(other.unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = cap[2].split('\\n', 1)[0].replace(this.rules.other.listReplaceTabs, (t: string) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!this.options.gfm && this.rules.other.listIsTask.test(itemContents),\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (const item of list.items) {\n this.lexer.state.top = false;\n item.tokens = this.lexer.blockTokens(item.text, []);\n if (item.task) {\n // Remove checkbox markdown from item tokens\n item.text = item.text.replace(this.rules.other.listReplaceTask, '');\n if (item.tokens[0]?.type === 'text' || item.tokens[0]?.type === 'paragraph') {\n item.tokens[0].raw = item.tokens[0].raw.replace(this.rules.other.listReplaceTask, '');\n item.tokens[0].text = item.tokens[0].text.replace(this.rules.other.listReplaceTask, '');\n for (let i = this.lexer.inlineQueue.length - 1; i >= 0; i--) {\n if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[i].src)) {\n this.lexer.inlineQueue[i].src = this.lexer.inlineQueue[i].src.replace(this.rules.other.listReplaceTask, '');\n break;\n }\n }\n }\n\n const taskRaw = this.rules.other.listTaskCheckbox.exec(item.raw);\n if (taskRaw) {\n const checkboxToken: Tokens.Checkbox = {\n type: 'checkbox',\n raw: taskRaw[0] + ' ',\n checked: taskRaw[0] !== '[ ]',\n };\n item.checked = checkboxToken.checked;\n if (list.loose) {\n if (item.tokens[0] && ['paragraph', 'text'].includes(item.tokens[0].type) && 'tokens' in item.tokens[0] && item.tokens[0].tokens) {\n item.tokens[0].raw = checkboxToken.raw + item.tokens[0].raw;\n item.tokens[0].text = checkboxToken.raw + item.tokens[0].text;\n item.tokens[0].tokens.unshift(checkboxToken);\n } else {\n item.tokens.unshift({\n type: 'paragraph',\n raw: checkboxToken.raw,\n text: checkboxToken.raw,\n tokens: [checkboxToken],\n });\n }\n } else {\n item.tokens.unshift(checkboxToken);\n }\n }\n }\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = item.tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (const item of list.items) {\n item.loose = true;\n for (const token of item.tokens) {\n if (token.type === 'text') {\n token.type = 'paragraph';\n }\n }\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string): Tokens.Del | undefined {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2]),\n };\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n", "import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n tokens: TokensList;\n options: MarkedOptions<ParserOutput, RendererOutput>;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n public inlineQueue: { src: string, tokens: Token[] }[];\n\n private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n while (src) {\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n tokens.push(token);\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n let offset;\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n offset = match[2] ? match[2].length : 0;\n maskedSrc = maskedSrc.slice(0, match.index + offset) + '[' + 'a'.repeat(match[0].length - offset - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out blocks from extensions\n maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n let keepPrevChar = false;\n let prevChar = '';\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escape,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): RendererOutput {\n return '' as RendererOutput;\n }\n\n code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n return '<pre><code class=\"language-'\n + escape(langString)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n def(token: Tokens.Def): RendererOutput {\n return '' as RendererOutput;\n }\n\n heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n }\n\n hr(token: Tokens.Hr): RendererOutput {\n return '<hr>\\n' as RendererOutput;\n }\n\n list(token: Tokens.List): RendererOutput {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n }\n\n listitem(item: Tokens.ListItem): RendererOutput {\n return `<li>${this.parser.parse(item.tokens)}</li>\\n` as RendererOutput;\n }\n\n checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"> ' as RendererOutput;\n }\n\n paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n }\n\n table(token: Tokens.Table): RendererOutput {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell as ParserOutput });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell as ParserOutput });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n' as RendererOutput;\n }\n\n tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n }\n\n tablecell(token: Tokens.TableCell): RendererOutput {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n` as RendererOutput;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): RendererOutput {\n return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n }\n\n em({ tokens }: Tokens.Em): RendererOutput {\n return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return `<code>${escape(text, true)}</code>` as RendererOutput;\n }\n\n br(token: Tokens.Br): RendererOutput {\n return '<br>' as RendererOutput;\n }\n\n del({ tokens }: Tokens.Del): RendererOutput {\n return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n }\n\n link({ href, title, tokens }: Tokens.Link): RendererOutput {\n const text = this.parser.parseInline(tokens) as string;\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text as RendererOutput;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escape(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out as RendererOutput;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape(text) as RendererOutput;\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${escape(title)}\"`;\n }\n out += '>';\n return out as RendererOutput;\n }\n\n text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n : ('escaped' in token && token.escaped ? token.text as RendererOutput : escape(token.text) as RendererOutput);\n }\n}\n", "import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n // no need for block level renderers\n strong({ text }: Tokens.Strong): RendererOutput {\n return text as RendererOutput;\n }\n\n em({ text }: Tokens.Em): RendererOutput {\n return text as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return text as RendererOutput;\n }\n\n del({ text }: Tokens.Del): RendererOutput {\n return text as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n link({ text }: Tokens.Link): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n image({ text }: Tokens.Image): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n br(): RendererOutput {\n return '' as RendererOutput;\n }\n\n checkbox({ raw }: Tokens.Checkbox): RendererOutput {\n return raw as RendererOutput;\n }\n}\n", "import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n renderer: _Renderer<ParserOutput, RendererOutput>;\n textRenderer: _TextRenderer<RendererOutput>;\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer<RendererOutput>();\n }\n\n /**\n * Static Parse Method\n */\n static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[]): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n break;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n break;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n break;\n }\n case 'code': {\n out += this.renderer.code(token);\n break;\n }\n case 'table': {\n out += this.renderer.table(token);\n break;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n break;\n }\n case 'list': {\n out += this.renderer.list(token);\n break;\n }\n case 'checkbox': {\n out += this.renderer.checkbox(token);\n break;\n }\n case 'html': {\n out += this.renderer.html(token);\n break;\n }\n case 'def': {\n out += this.renderer.def(token);\n break;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n break;\n }\n case 'text': {\n out += this.renderer.text(token);\n break;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out as ParserOutput;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'checkbox': {\n out += renderer.checkbox(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out as ParserOutput;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n block?: boolean;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n 'emStrongMask',\n ]);\n\n static passThroughHooksRespectAsync = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: ParserOutput) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Mask contents that should not be interpreted as em/strong delimiters\n */\n emStrongMask(src: string) {\n return src;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n }\n}\n", "import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n defaults = _getDefaults<ParserOutput, RendererOutput>();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser<ParserOutput, RendererOutput>;\n Renderer = _Renderer<ParserOutput, RendererOutput>;\n TextRenderer = _TextRenderer<RendererOutput>;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return (ret || '') as RendererOutput;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n return (async() => {\n const ret = await hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n })();\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n if (this.defaults.async) {\n return (async() => {\n let ret = await hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = await prevHook.apply(hooks, args);\n }\n return ret;\n })();\n }\n\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n if (opt.async) {\n return (async() => {\n const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n const lexer = opt.hooks ? await opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const tokens = await lexer(processedSrc, opt);\n const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n if (opt.walkTokens) {\n await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n }\n const parser = opt.hooks ? await opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n const html = await parser(processedTokens, opt);\n return opt.hooks ? await opt.hooks.postprocess(html) : html;\n })().catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch(e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n", "import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n", "import {\n type ColorInput,\n OptimizedBuffer,\n parseColor,\n Renderable,\n type RenderableOptions,\n type RenderContext,\n RGBA,\n} from \"../index\"\n\nconst defaultThumbBackgroundColor = RGBA.fromHex(\"#9a9ea3\")\nconst defaultTrackBackgroundColor = RGBA.fromHex(\"#252527\")\n\nexport interface SliderOptions extends RenderableOptions<SliderRenderable> {\n orientation: \"vertical\" | \"horizontal\"\n value?: number\n min?: number\n max?: number\n viewPortSize?: number\n backgroundColor?: ColorInput\n foregroundColor?: ColorInput\n onChange?: (value: number) => void\n}\n\nexport class SliderRenderable extends Renderable {\n public readonly orientation: \"vertical\" | \"horizontal\"\n private _value: number\n private _min: number\n private _max: number\n private _viewPortSize: number\n private _backgroundColor: RGBA\n private _foregroundColor: RGBA\n private _onChange?: (value: number) => void\n\n constructor(ctx: RenderContext, options: SliderOptions) {\n super(ctx, { flexShrink: 0, ...options })\n this.orientation = options.orientation\n this._min = options.min ?? 0\n this._max = options.max ?? 100\n this._value = options.value ?? this._min\n this._viewPortSize = options.viewPortSize ?? Math.max(1, (this._max - this._min) * 0.1)\n this._onChange = options.onChange\n this._backgroundColor = options.backgroundColor ? parseColor(options.backgroundColor) : defaultTrackBackgroundColor\n this._foregroundColor = options.foregroundColor ? parseColor(options.foregroundColor) : defaultThumbBackgroundColor\n\n this.setupMouseHandling()\n }\n\n get value(): number {\n return this._value\n }\n\n set value(newValue: number) {\n const clamped = Math.max(this._min, Math.min(this._max, newValue))\n if (clamped !== this._value) {\n this._value = clamped\n this._onChange?.(clamped)\n this.emit(\"change\", { value: clamped })\n this.requestRender()\n }\n }\n\n get min(): number {\n return this._min\n }\n\n set min(newMin: number) {\n if (newMin !== this._min) {\n this._min = newMin\n if (this._value < newMin) {\n this.value = newMin\n }\n this.requestRender()\n }\n }\n\n get max(): number {\n return this._max\n }\n\n set max(newMax: number) {\n if (newMax !== this._max) {\n this._max = newMax\n if (this._value > newMax) {\n this.value = newMax\n }\n this.requestRender()\n }\n }\n\n set viewPortSize(size: number) {\n const clampedSize = Math.max(0.01, Math.min(size, this._max - this._min))\n if (clampedSize !== this._viewPortSize) {\n this._viewPortSize = clampedSize\n this.requestRender()\n }\n }\n\n get viewPortSize(): number {\n return this._viewPortSize\n }\n\n get backgroundColor(): RGBA {\n return this._backgroundColor\n }\n\n set backgroundColor(value: ColorInput) {\n this._backgroundColor = parseColor(value)\n this.requestRender()\n }\n\n get foregroundColor(): RGBA {\n return this._foregroundColor\n }\n\n set foregroundColor(value: ColorInput) {\n this._foregroundColor = parseColor(value)\n this.requestRender()\n }\n\n private calculateDragOffsetVirtual(event: any): number {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const mousePos = (this.orientation === \"vertical\" ? event.y : event.x) - trackStart\n const virtualMousePos = Math.max(\n 0,\n Math.min((this.orientation === \"vertical\" ? this.height : this.width) * 2, mousePos * 2),\n )\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbSize = this.getVirtualThumbSize()\n\n return Math.max(0, Math.min(virtualThumbSize, virtualMousePos - virtualThumbStart))\n }\n\n private setupMouseHandling(): void {\n let isDragging = false\n let dragOffsetVirtual = 0\n\n this.onMouseDown = (event) => {\n event.stopPropagation()\n event.preventDefault()\n\n const thumb = this.getThumbRect()\n const inThumb =\n event.x >= thumb.x && event.x < thumb.x + thumb.width && event.y >= thumb.y && event.y < thumb.y + thumb.height\n\n if (inThumb) {\n isDragging = true\n\n dragOffsetVirtual = this.calculateDragOffsetVirtual(event)\n } else {\n this.updateValueFromMouseDirect(event)\n isDragging = true\n\n dragOffsetVirtual = this.calculateDragOffsetVirtual(event)\n }\n }\n\n this.onMouseDrag = (event) => {\n if (!isDragging) return\n event.stopPropagation()\n this.updateValueFromMouseWithOffset(event, dragOffsetVirtual)\n }\n\n this.onMouseUp = (event) => {\n if (isDragging) {\n this.updateValueFromMouseWithOffset(event, dragOffsetVirtual)\n }\n isDragging = false\n }\n }\n\n private updateValueFromMouseDirect(event: any): void {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const trackSize = this.orientation === \"vertical\" ? this.height : this.width\n const mousePos = this.orientation === \"vertical\" ? event.y : event.x\n\n const relativeMousePos = mousePos - trackStart\n const clampedMousePos = Math.max(0, Math.min(trackSize, relativeMousePos))\n const ratio = trackSize === 0 ? 0 : clampedMousePos / trackSize\n const range = this._max - this._min\n const newValue = this._min + ratio * range\n\n this.value = newValue\n }\n\n private updateValueFromMouseWithOffset(event: any, offsetVirtual: number): void {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const trackSize = this.orientation === \"vertical\" ? this.height : this.width\n const mousePos = this.orientation === \"vertical\" ? event.y : event.x\n\n const virtualTrackSize = trackSize * 2\n const relativeMousePos = mousePos - trackStart\n const clampedMousePos = Math.max(0, Math.min(trackSize, relativeMousePos))\n const virtualMousePos = clampedMousePos * 2\n\n const virtualThumbSize = this.getVirtualThumbSize()\n const maxThumbStart = Math.max(0, virtualTrackSize - virtualThumbSize)\n\n let desiredThumbStart = virtualMousePos - offsetVirtual\n desiredThumbStart = Math.max(0, Math.min(maxThumbStart, desiredThumbStart))\n\n const ratio = maxThumbStart === 0 ? 0 : desiredThumbStart / maxThumbStart\n const range = this._max - this._min\n const newValue = this._min + ratio * range\n\n this.value = newValue\n }\n\n private getThumbRect(): { x: number; y: number; width: number; height: number } {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n\n const realThumbStart = Math.floor(virtualThumbStart / 2)\n const realThumbSize = Math.ceil((virtualThumbStart + virtualThumbSize) / 2) - realThumbStart\n\n if (this.orientation === \"vertical\") {\n return {\n x: this.x,\n y: this.y + realThumbStart,\n width: this.width,\n height: Math.max(1, realThumbSize),\n }\n } else {\n return {\n x: this.x + realThumbStart,\n y: this.y,\n width: Math.max(1, realThumbSize),\n height: this.height,\n }\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n if (this.orientation === \"horizontal\") {\n this.renderHorizontal(buffer)\n } else {\n this.renderVertical(buffer)\n }\n }\n\n private renderHorizontal(buffer: OptimizedBuffer): void {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbEnd = virtualThumbStart + virtualThumbSize\n\n buffer.fillRect(this.x, this.y, this.width, this.height, this._backgroundColor)\n\n const realStartCell = Math.floor(virtualThumbStart / 2)\n const realEndCell = Math.ceil(virtualThumbEnd / 2) - 1\n const startX = Math.max(0, realStartCell)\n const endX = Math.min(this.width - 1, realEndCell)\n\n for (let realX = startX; realX <= endX; realX++) {\n const virtualCellStart = realX * 2\n const virtualCellEnd = virtualCellStart + 2\n\n const thumbStartInCell = Math.max(virtualThumbStart, virtualCellStart)\n const thumbEndInCell = Math.min(virtualThumbEnd, virtualCellEnd)\n const coverage = thumbEndInCell - thumbStartInCell\n\n let char = \" \"\n\n if (coverage >= 2) {\n char = \"\u2588\"\n } else {\n const isLeftHalf = thumbStartInCell === virtualCellStart\n if (isLeftHalf) {\n char = \"\u258C\"\n } else {\n char = \"\u2590\"\n }\n }\n\n for (let y = 0; y < this.height; y++) {\n buffer.setCellWithAlphaBlending(this.x + realX, this.y + y, char, this._foregroundColor, this._backgroundColor)\n }\n }\n }\n\n private renderVertical(buffer: OptimizedBuffer): void {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbEnd = virtualThumbStart + virtualThumbSize\n\n buffer.fillRect(this.x, this.y, this.width, this.height, this._backgroundColor)\n\n const realStartCell = Math.floor(virtualThumbStart / 2)\n const realEndCell = Math.ceil(virtualThumbEnd / 2) - 1\n const startY = Math.max(0, realStartCell)\n const endY = Math.min(this.height - 1, realEndCell)\n\n for (let realY = startY; realY <= endY; realY++) {\n const virtualCellStart = realY * 2\n const virtualCellEnd = virtualCellStart + 2\n\n const thumbStartInCell = Math.max(virtualThumbStart, virtualCellStart)\n const thumbEndInCell = Math.min(virtualThumbEnd, virtualCellEnd)\n const coverage = thumbEndInCell - thumbStartInCell\n\n let char = \" \"\n\n if (coverage >= 2) {\n char = \"\u2588\"\n } else if (coverage > 0) {\n const virtualPositionInCell = thumbStartInCell - virtualCellStart\n if (virtualPositionInCell === 0) {\n char = \"\u2580\"\n } else {\n char = \"\u2584\"\n }\n }\n\n for (let x = 0; x < this.width; x++) {\n buffer.setCellWithAlphaBlending(this.x + x, this.y + realY, char, this._foregroundColor, this._backgroundColor)\n }\n }\n }\n\n private getVirtualThumbSize(): number {\n const virtualTrackSize = this.orientation === \"vertical\" ? this.height * 2 : this.width * 2\n const range = this._max - this._min\n\n if (range === 0) return virtualTrackSize\n\n const viewportSize = Math.max(1, this._viewPortSize)\n const contentSize = range + viewportSize\n\n if (contentSize <= viewportSize) return virtualTrackSize\n\n const thumbRatio = viewportSize / contentSize\n const calculatedSize = Math.floor(virtualTrackSize * thumbRatio)\n\n return Math.max(1, Math.min(calculatedSize, virtualTrackSize))\n }\n\n private getVirtualThumbStart(): number {\n const virtualTrackSize = this.orientation === \"vertical\" ? this.height * 2 : this.width * 2\n const range = this._max - this._min\n\n if (range === 0) return 0\n\n const valueRatio = (this._value - this._min) / range\n const virtualThumbSize = this.getVirtualThumbSize()\n\n return Math.round(valueRatio * (virtualTrackSize - virtualThumbSize))\n }\n}\n", "// zig-registry.ts \u2014 Browser-safe types and render-lib registry.\n// Zero native imports. Can be imported by both native and browser code.\n\nimport type {\n CursorStyle,\n CursorStyleOptions,\n DebugOverlayCorner,\n Highlight,\n LineInfo,\n MousePointerStyle,\n WidthMethod,\n} from \"./types\"\nimport type {\n AllocatorStats,\n BuildOptions,\n NativeSpanFeedOptions,\n NativeSpanFeedStats,\n ReserveInfo,\n} from \"./zig-structs\"\nimport type { RGBA } from \"./lib/RGBA\"\nimport type { OptimizedBuffer } from \"./buffer\"\nimport type { TextBuffer } from \"./text-buffer\"\n\n// \u2500\u2500\u2500 Portable types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type Pointer = number\n\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n}\n\n/**\n * VisualCursor represents a cursor position with both visual and logical coordinates.\n * Visual coordinates (visualRow, visualCol) are VIEWPORT-RELATIVE.\n * This means visualRow=0 is the first visible line in the viewport, not the first line in the document.\n * Logical coordinates (logicalRow, logicalCol) are document-absolute.\n */\nexport interface VisualCursor {\n visualRow: number // Viewport-relative row (0 = top of viewport)\n visualCol: number // Viewport-relative column (0 = left edge of viewport when not wrapping)\n logicalRow: number // Document-absolute row\n logicalCol: number // Document-absolute column\n offset: number // Global display-width offset from buffer start\n}\n\nexport interface LogicalCursor {\n row: number\n col: number\n offset: number\n}\n\nexport interface CursorState {\n x: number\n y: number\n visible: boolean\n style: CursorStyle\n blinking: boolean\n color: RGBA\n}\n\nexport type NativeSpanFeedEventHandler = (eventId: number, arg0: Pointer, arg1: number | bigint) => void\n\n// Re-export types that consumers need\nexport type { LineInfo, AllocatorStats, BuildOptions, ReserveInfo }\n\n// \u2500\u2500\u2500 RenderLib interface \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface RenderLib {\n createRenderer: (width: number, height: number, options?: { testing?: boolean; remote?: boolean }) => Pointer | null\n setTerminalEnvVar: (renderer: Pointer, key: string, value: string) => boolean\n destroyRenderer: (renderer: Pointer) => 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 bufferGetRealCharSize: (buffer: Pointer) => number\n bufferWriteResolvedChars: (buffer: Pointer, outputBuffer: Uint8Array, addLineBreaks: boolean) => number\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 bufferSetCell: (\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 bufferDrawGrayscaleBuffer: (\n buffer: Pointer,\n posX: number,\n posY: number,\n intensitiesPtr: Pointer,\n srcWidth: number,\n srcHeight: number,\n fg: RGBA | null,\n bg: RGBA | null,\n ) => void\n bufferDrawGrayscaleBufferSupersampled: (\n buffer: Pointer,\n posX: number,\n posY: number,\n intensitiesPtr: Pointer,\n srcWidth: number,\n srcHeight: number,\n fg: RGBA | null,\n bg: RGBA | null,\n ) => void\n bufferDrawGrid: (\n buffer: Pointer,\n borderChars: Uint32Array,\n borderFg: RGBA,\n borderBg: RGBA,\n columnOffsets: Int32Array,\n columnCount: number,\n rowOffsets: Int32Array,\n rowCount: number,\n options: { drawInner: boolean; drawOuter: boolean },\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: (buffer: Pointer, width: number, height: number) => void\n resizeRenderer: (renderer: Pointer, width: number, height: number) => void\n setCursorPosition: (renderer: Pointer, x: number, y: number, visible: boolean) => void\n setCursorColor: (renderer: Pointer, color: RGBA) => void\n getCursorState: (renderer: Pointer) => CursorState\n setCursorStyleOptions: (renderer: Pointer, options: CursorStyleOptions) => void\n setDebugOverlay: (renderer: Pointer, enabled: boolean, corner: DebugOverlayCorner) => void\n clearTerminal: (renderer: Pointer) => void\n setTerminalTitle: (renderer: Pointer, title: string) => void\n copyToClipboardOSC52: (renderer: Pointer, target: number, payload: Uint8Array) => boolean\n clearClipboardOSC52: (renderer: Pointer, target: number) => boolean\n addToHitGrid: (renderer: Pointer, x: number, y: number, width: number, height: number, id: number) => void\n clearCurrentHitGrid: (renderer: Pointer) => void\n hitGridPushScissorRect: (renderer: Pointer, x: number, y: number, width: number, height: number) => void\n hitGridPopScissorRect: (renderer: Pointer) => void\n hitGridClearScissorRects: (renderer: Pointer) => void\n addToCurrentHitGridClipped: (\n renderer: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n id: number,\n ) => void\n checkHit: (renderer: Pointer, x: number, y: number) => number\n getHitGridDirty: (renderer: Pointer) => boolean\n dumpHitGrid: (renderer: Pointer) => void\n dumpBuffers: (renderer: Pointer, timestamp?: number) => void\n dumpStdoutBuffer: (renderer: Pointer, timestamp?: number) => void\n restoreTerminalModes: (renderer: Pointer) => 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 setKittyKeyboardFlags: (renderer: Pointer, flags: number) => void\n getKittyKeyboardFlags: (renderer: Pointer) => number\n setupTerminal: (renderer: Pointer, useAlternateScreen: boolean) => void\n suspendRenderer: (renderer: Pointer) => void\n resumeRenderer: (renderer: Pointer) => void\n queryPixelResolution: (renderer: Pointer) => void\n writeOut: (renderer: Pointer, data: string | Uint8Array) => void\n\n // TextBuffer methods\n createTextBuffer: (widthMethod: WidthMethod) => TextBuffer\n destroyTextBuffer: (buffer: Pointer) => void\n textBufferGetLength: (buffer: Pointer) => number\n textBufferGetByteSize: (buffer: Pointer) => number\n\n textBufferReset: (buffer: Pointer) => void\n textBufferClear: (buffer: Pointer) => void\n textBufferRegisterMemBuffer: (buffer: Pointer, bytes: Uint8Array, owned?: boolean) => number\n textBufferReplaceMemBuffer: (buffer: Pointer, memId: number, bytes: Uint8Array, owned?: boolean) => boolean\n textBufferClearMemRegistry: (buffer: Pointer) => void\n textBufferSetTextFromMem: (buffer: Pointer, memId: number) => void\n textBufferAppend: (buffer: Pointer, bytes: Uint8Array) => void\n textBufferAppendFromMemId: (buffer: Pointer, memId: number) => void\n textBufferLoadFile: (buffer: Pointer, path: string) => boolean\n textBufferSetStyledText: (\n buffer: Pointer,\n chunks: Array<{ text: string; fg?: RGBA | null; bg?: RGBA | null; attributes?: number; link?: { url: string } }>,\n ) => 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 textBufferGetTabWidth: (buffer: Pointer) => number\n textBufferSetTabWidth: (buffer: Pointer, width: number) => void\n textBufferGetLineCount: (buffer: Pointer) => number\n getPlainTextBytes: (buffer: Pointer, maxLength: number) => Uint8Array | null\n textBufferGetTextRange: (\n buffer: Pointer,\n startOffset: number,\n endOffset: number,\n maxLength: number,\n ) => Uint8Array | null\n textBufferGetTextRangeByCoords: (\n buffer: Pointer,\n startRow: number,\n startCol: number,\n endRow: number,\n endCol: number,\n maxLength: number,\n ) => Uint8Array | null\n\n // TextBufferView methods\n createTextBufferView: (textBuffer: Pointer) => Pointer\n destroyTextBufferView: (view: Pointer) => void\n textBufferViewSetSelection: (\n view: Pointer,\n start: number,\n end: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => void\n textBufferViewResetSelection: (view: Pointer) => void\n textBufferViewGetSelection: (view: Pointer) => { start: number; end: number } | null\n textBufferViewSetLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => boolean\n textBufferViewUpdateSelection: (view: Pointer, end: number, bgColor: RGBA | null, fgColor: RGBA | null) => void\n textBufferViewUpdateLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => boolean\n textBufferViewResetLocalSelection: (view: Pointer) => void\n textBufferViewSetWrapWidth: (view: Pointer, width: number) => void\n textBufferViewSetWrapMode: (view: Pointer, mode: \"none\" | \"char\" | \"word\") => void\n textBufferViewSetViewportSize: (view: Pointer, width: number, height: number) => void\n textBufferViewSetViewport: (view: Pointer, x: number, y: number, width: number, height: number) => void\n textBufferViewGetLineInfo: (view: Pointer) => LineInfo\n textBufferViewGetLogicalLineInfo: (view: Pointer) => LineInfo\n textBufferViewGetSelectedTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null\n textBufferViewGetPlainTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null\n textBufferViewSetTabIndicator: (view: Pointer, indicator: number) => void\n textBufferViewSetTabIndicatorColor: (view: Pointer, color: RGBA) => void\n textBufferViewSetTruncate: (view: Pointer, truncate: boolean) => void\n textBufferViewMeasureForDimensions: (\n view: Pointer,\n width: number,\n height: number,\n ) => { lineCount: number; maxWidth: number } | null\n textBufferViewGetVirtualLineCount: (view: Pointer) => number\n\n readonly encoder: TextEncoder\n readonly decoder: TextDecoder\n bufferDrawTextBufferView: (buffer: Pointer, view: Pointer, x: number, y: number) => void\n bufferDrawEditorView: (buffer: Pointer, view: Pointer, x: number, y: number) => void\n\n // EditBuffer methods\n createEditBuffer: (widthMethod: WidthMethod) => Pointer\n destroyEditBuffer: (buffer: Pointer) => void\n editBufferSetText: (buffer: Pointer, textBytes: Uint8Array) => void\n editBufferSetTextFromMem: (buffer: Pointer, memId: number) => void\n editBufferReplaceText: (buffer: Pointer, textBytes: Uint8Array) => void\n editBufferReplaceTextFromMem: (buffer: Pointer, memId: number) => void\n editBufferGetText: (buffer: Pointer, maxLength: number) => Uint8Array | null\n editBufferInsertChar: (buffer: Pointer, char: string) => void\n editBufferInsertText: (buffer: Pointer, text: string) => void\n editBufferDeleteChar: (buffer: Pointer) => void\n editBufferDeleteCharBackward: (buffer: Pointer) => void\n editBufferDeleteRange: (buffer: Pointer, startLine: number, startCol: number, endLine: number, endCol: number) => void\n editBufferNewLine: (buffer: Pointer) => void\n editBufferDeleteLine: (buffer: Pointer) => void\n editBufferMoveCursorLeft: (buffer: Pointer) => void\n editBufferMoveCursorRight: (buffer: Pointer) => void\n editBufferMoveCursorUp: (buffer: Pointer) => void\n editBufferMoveCursorDown: (buffer: Pointer) => void\n editBufferGotoLine: (buffer: Pointer, line: number) => void\n editBufferSetCursor: (buffer: Pointer, line: number, col: number) => void\n editBufferSetCursorToLineCol: (buffer: Pointer, line: number, col: number) => void\n editBufferSetCursorByOffset: (buffer: Pointer, offset: number) => void\n editBufferGetCursorPosition: (buffer: Pointer) => LogicalCursor\n editBufferGetId: (buffer: Pointer) => number\n editBufferGetTextBuffer: (buffer: Pointer) => Pointer\n editBufferDebugLogRope: (buffer: Pointer) => void\n editBufferUndo: (buffer: Pointer, maxLength: number) => Uint8Array | null\n editBufferRedo: (buffer: Pointer, maxLength: number) => Uint8Array | null\n editBufferCanUndo: (buffer: Pointer) => boolean\n editBufferCanRedo: (buffer: Pointer) => boolean\n editBufferClearHistory: (buffer: Pointer) => void\n editBufferClear: (buffer: Pointer) => void\n editBufferGetNextWordBoundary: (buffer: Pointer) => { row: number; col: number; offset: number }\n editBufferGetPrevWordBoundary: (buffer: Pointer) => { row: number; col: number; offset: number }\n editBufferGetEOL: (buffer: Pointer) => { row: number; col: number; offset: number }\n editBufferOffsetToPosition: (buffer: Pointer, offset: number) => { row: number; col: number; offset: number } | null\n editBufferPositionToOffset: (buffer: Pointer, row: number, col: number) => number\n editBufferGetLineStartOffset: (buffer: Pointer, row: number) => number\n editBufferGetTextRange: (\n buffer: Pointer,\n startOffset: number,\n endOffset: number,\n maxLength: number,\n ) => Uint8Array | null\n editBufferGetTextRangeByCoords: (\n buffer: Pointer,\n startRow: number,\n startCol: number,\n endRow: number,\n endCol: number,\n maxLength: number,\n ) => Uint8Array | null\n\n // EditorView methods\n createEditorView: (editBufferPtr: Pointer, viewportWidth: number, viewportHeight: number) => Pointer\n destroyEditorView: (view: Pointer) => void\n editorViewSetViewportSize: (view: Pointer, width: number, height: number) => void\n editorViewSetViewport: (\n view: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n moveCursor: boolean,\n ) => void\n editorViewGetViewport: (view: Pointer) => { offsetY: number; offsetX: number; height: number; width: number }\n editorViewSetScrollMargin: (view: Pointer, margin: number) => void\n editorViewSetWrapMode: (view: Pointer, mode: \"none\" | \"char\" | \"word\") => void\n editorViewGetVirtualLineCount: (view: Pointer) => number\n editorViewGetTotalVirtualLineCount: (view: Pointer) => number\n editorViewGetTextBufferView: (view: Pointer) => Pointer\n editorViewSetSelection: (\n view: Pointer,\n start: number,\n end: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => void\n editorViewResetSelection: (view: Pointer) => void\n editorViewGetSelection: (view: Pointer) => { start: number; end: number } | null\n editorViewSetLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n updateCursor: boolean,\n followCursor: boolean,\n ) => boolean\n\n editorViewUpdateSelection: (view: Pointer, end: number, bgColor: RGBA | null, fgColor: RGBA | null) => void\n editorViewUpdateLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n updateCursor: boolean,\n followCursor: boolean,\n ) => boolean\n\n editorViewResetLocalSelection: (view: Pointer) => void\n editorViewGetSelectedTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null\n editorViewGetCursor: (view: Pointer) => { row: number; col: number }\n editorViewGetText: (view: Pointer, maxLength: number) => Uint8Array | null\n editorViewGetVisualCursor: (view: Pointer) => VisualCursor\n editorViewMoveUpVisual: (view: Pointer) => void\n editorViewMoveDownVisual: (view: Pointer) => void\n editorViewDeleteSelectedText: (view: Pointer) => void\n editorViewSetCursorByOffset: (view: Pointer, offset: number) => void\n editorViewGetNextWordBoundary: (view: Pointer) => VisualCursor\n editorViewGetPrevWordBoundary: (view: Pointer) => VisualCursor\n editorViewGetEOL: (view: Pointer) => VisualCursor\n editorViewGetVisualSOL: (view: Pointer) => VisualCursor\n editorViewGetVisualEOL: (view: Pointer) => VisualCursor\n editorViewGetLineInfo: (view: Pointer) => LineInfo\n editorViewGetLogicalLineInfo: (view: Pointer) => LineInfo\n editorViewSetPlaceholderStyledText: (\n view: Pointer,\n chunks: Array<{ text: string; fg?: RGBA | null; bg?: RGBA | null; attributes?: number }>,\n ) => void\n editorViewSetTabIndicator: (view: Pointer, indicator: number) => void\n editorViewSetTabIndicatorColor: (view: Pointer, color: RGBA) => void\n\n bufferPushScissorRect: (buffer: Pointer, x: number, y: number, width: number, height: number) => void\n bufferPopScissorRect: (buffer: Pointer) => void\n bufferClearScissorRects: (buffer: Pointer) => void\n bufferPushOpacity: (buffer: Pointer, opacity: number) => void\n bufferPopOpacity: (buffer: Pointer) => void\n bufferGetCurrentOpacity: (buffer: Pointer) => number\n bufferClearOpacity: (buffer: Pointer) => void\n textBufferAddHighlightByCharRange: (buffer: Pointer, highlight: Highlight) => void\n textBufferAddHighlight: (buffer: Pointer, lineIdx: number, highlight: Highlight) => void\n textBufferRemoveHighlightsByRef: (buffer: Pointer, hlRef: number) => void\n textBufferClearLineHighlights: (buffer: Pointer, lineIdx: number) => void\n textBufferClearAllHighlights: (buffer: Pointer) => void\n textBufferSetSyntaxStyle: (buffer: Pointer, style: Pointer | null) => void\n textBufferGetLineHighlights: (buffer: Pointer, lineIdx: number) => Array<Highlight>\n textBufferGetHighlightCount: (buffer: Pointer) => number\n\n getArenaAllocatedBytes: () => number\n getBuildOptions: () => BuildOptions\n getAllocatorStats: () => AllocatorStats\n\n createSyntaxStyle: () => Pointer\n destroySyntaxStyle: (style: Pointer) => void\n syntaxStyleRegister: (style: Pointer, name: string, fg: RGBA | null, bg: RGBA | null, attributes: number) => number\n syntaxStyleResolveByName: (style: Pointer, name: string) => number | null\n syntaxStyleGetStyleCount: (style: Pointer) => number\n\n getTerminalCapabilities: (renderer: Pointer) => any\n processCapabilityResponse: (renderer: Pointer, response: string) => void\n\n encodeUnicode: (\n text: string,\n widthMethod: WidthMethod,\n ) => { ptr: Pointer; data: Array<{ width: number; char: number }> } | null\n freeUnicode: (encoded: { ptr: Pointer; data: Array<{ width: number; char: number }> }) => void\n bufferDrawChar: (buffer: Pointer, char: number, x: number, y: number, fg: RGBA, bg: RGBA, attributes?: number) => void\n\n registerNativeSpanFeedStream: (stream: Pointer, handler: NativeSpanFeedEventHandler) => void\n unregisterNativeSpanFeedStream: (stream: Pointer) => void\n createNativeSpanFeed: (options?: NativeSpanFeedOptions | null) => Pointer\n attachNativeSpanFeed: (stream: Pointer) => number\n destroyNativeSpanFeed: (stream: Pointer) => void\n streamWrite: (stream: Pointer, data: Uint8Array | string) => number\n streamCommit: (stream: Pointer) => number\n streamDrainSpans: (stream: Pointer, outBuffer: Uint8Array, maxSpans: number) => number\n streamClose: (stream: Pointer) => number\n streamSetOptions: (stream: Pointer, options: NativeSpanFeedOptions) => number\n streamGetStats: (stream: Pointer) => NativeSpanFeedStats | null\n streamReserve: (stream: Pointer, minLen: number) => { status: number; info: ReserveInfo | null }\n streamCommitReserved: (stream: Pointer, length: number) => number\n\n onNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void\n onceNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void\n offNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void\n onAnyNativeEvent: (handler: (name: string, data: ArrayBuffer) => void) => void\n}\n\n// \u2500\u2500\u2500 Registry \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nlet _renderLib: RenderLib | undefined\n\nexport function registerRenderLib(lib: RenderLib): void {\n _renderLib = lib\n}\n\nexport function resolveRenderLib(): RenderLib {\n if (!_renderLib) {\n throw new Error(\"No RenderLib registered. In Bun, import '@opentui/core' or '@opentui/core/native' (which loads zig.ts). In browsers, call registerRenderLib() with a browser implementation.\")\n }\n return _renderLib\n}\n\nexport function hasRenderLib(): boolean {\n return _renderLib !== undefined\n}\n\n// In Bun, auto-load the native FFI render lib by importing zig.ts.\n// The variable path prevents bundlers (esbuild, Vite) from statically\n// resolving and including zig.ts in browser bundles.\n// In browsers, typeof Bun is undefined so this block is skipped entirely.\nif (typeof globalThis.Bun !== \"undefined\") {\n const zigPath = \"./zig\"\n try {\n await import(zigPath)\n } catch {\n // Native module not available (e.g. not built yet).\n // resolveRenderLib() will throw a clear error if called.\n }\n}\n\n", "import { Renderable, type ViewportBounds } from \"..\"\nimport { coordinateToCharacterIndex, fonts } from \"./ascii.font\"\n\nclass SelectionAnchor {\n private relativeX: number\n private relativeY: number\n\n constructor(\n private renderable: Renderable,\n absoluteX: number,\n absoluteY: number,\n ) {\n this.relativeX = absoluteX - this.renderable.x\n this.relativeY = absoluteY - this.renderable.y\n }\n\n get x(): number {\n return this.renderable.x + this.relativeX\n }\n\n get y(): number {\n return this.renderable.y + this.relativeY\n }\n}\n\nexport class Selection {\n private _anchor: SelectionAnchor\n private _focus: { x: number; y: number }\n private _selectedRenderables: Renderable[] = []\n private _touchedRenderables: Renderable[] = []\n private _isActive: boolean = true\n private _isDragging: boolean = true\n private _isStart: boolean = false\n\n constructor(anchorRenderable: Renderable, anchor: { x: number; y: number }, focus: { x: number; y: number }) {\n this._anchor = new SelectionAnchor(anchorRenderable, anchor.x, anchor.y)\n this._focus = { ...focus }\n }\n\n get isStart(): boolean {\n return this._isStart\n }\n\n set isStart(value: boolean) {\n this._isStart = value\n }\n\n get anchor(): { x: number; y: number } {\n return { x: this._anchor.x, y: this._anchor.y }\n }\n\n get focus(): { x: number; y: number } {\n return { ...this._focus }\n }\n\n set focus(value: { x: number; y: number }) {\n this._focus = { ...value }\n }\n\n get isActive(): boolean {\n return this._isActive\n }\n\n set isActive(value: boolean) {\n this._isActive = value\n }\n\n get isDragging(): boolean {\n return this._isDragging\n }\n\n set isDragging(value: boolean) {\n this._isDragging = value\n }\n\n get bounds(): ViewportBounds {\n const minX = Math.min(this._anchor.x, this._focus.x)\n const maxX = Math.max(this._anchor.x, this._focus.x)\n const minY = Math.min(this._anchor.y, this._focus.y)\n const maxY = Math.max(this._anchor.y, this._focus.y)\n\n // Selection bounds are inclusive of both anchor and focus\n // A selection from (0,0) to (0,0) covers 1 cell\n // A selection from (0,0) to (5,3) covers cells from (0,0) to (5,3) inclusive\n const width = maxX - minX + 1\n const height = maxY - minY + 1\n\n return {\n x: minX,\n y: minY,\n width,\n height,\n }\n }\n\n updateSelectedRenderables(selectedRenderables: Renderable[]): void {\n this._selectedRenderables = selectedRenderables\n }\n\n get selectedRenderables(): Renderable[] {\n return this._selectedRenderables\n }\n\n updateTouchedRenderables(touchedRenderables: Renderable[]): void {\n this._touchedRenderables = touchedRenderables\n }\n\n get touchedRenderables(): Renderable[] {\n return this._touchedRenderables\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 .filter((renderable) => !renderable.isDestroyed)\n .map((renderable) => renderable.getSelectedText())\n .filter((text) => text)\n return selectedTexts.join(\"\\n\")\n }\n}\n\nexport interface LocalSelectionBounds {\n anchorX: number\n anchorY: number\n focusX: number\n focusY: number\n isActive: boolean\n}\n\nexport function convertGlobalToLocalSelection(\n globalSelection: Selection | null,\n localX: number,\n localY: number,\n): LocalSelectionBounds | null {\n if (!globalSelection?.isActive) {\n return null\n }\n\n return {\n anchorX: globalSelection.anchor.x - localX,\n anchorY: globalSelection.anchor.y - localY,\n focusX: globalSelection.focus.x - localX,\n focusY: globalSelection.focus.y - localY,\n isActive: true,\n }\n}\n\nexport class ASCIIFontSelectionHelper {\n private localSelection: { start: number; end: number } | null = null\n\n constructor(\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(localX: number, localY: number, width: number, height: number): boolean {\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 onLocalSelectionChanged(localSelection: LocalSelectionBounds | null, width: number, height: number): boolean {\n const previousSelection = this.localSelection\n\n if (!localSelection?.isActive) {\n this.localSelection = null\n return previousSelection !== null\n }\n\n const text = this.getText()\n const font = this.getFont()\n\n const selStart = { x: localSelection.anchorX, y: localSelection.anchorY }\n const selEnd = { x: localSelection.focusX, y: localSelection.focusY }\n\n if (height - 1 < selStart.y || 0 > 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 > height - 1) {\n // Selection starts below us - we're not selected\n this.localSelection = null\n return previousSelection !== null\n } else if (selStart.y >= 0 && selStart.y <= height - 1) {\n // Selection starts within our Y range - use the actual start X coordinate\n if (selStart.x > 0) {\n startCharIndex = coordinateToCharacterIndex(selStart.x, text, font)\n }\n }\n\n if (selEnd.y < 0) {\n // Selection ends above us - we're not selected\n this.localSelection = null\n return previousSelection !== null\n } else if (selEnd.y >= 0 && selEnd.y <= height - 1) {\n // Selection ends within our Y range - use the actual end X coordinate\n if (selEnd.x >= 0) {\n endCharIndex = coordinateToCharacterIndex(selEnd.x, 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 previousSelection?.start !== this.localSelection?.start || previousSelection?.end !== this.localSelection?.end\n )\n }\n}\n", "import { EventEmitter } from \"events\"\nimport type { RenderContext, CursorStyle, CursorStyleOptions, MousePointerStyle, WidthMethod } from \"./core-shims/types\"\nimport type { RGBA } from \"./core-shims/rgba\"\n\nexport class BrowserKeyHandler extends EventEmitter {\n constructor() {\n super()\n }\n\n processInput(_data: string): boolean {\n return false\n }\n}\n\nexport class BrowserInternalKeyHandler extends BrowserKeyHandler {\n private renderableHandlers: Map<string, Set<Function>> = new Map()\n\n onInternal(event: string, handler: Function): void {\n if (!this.renderableHandlers.has(event)) {\n this.renderableHandlers.set(event, new Set())\n }\n this.renderableHandlers.get(event)!.add(handler)\n }\n\n offInternal(event: string, handler: Function): void {\n const handlers = this.renderableHandlers.get(event)\n if (handlers) {\n handlers.delete(handler)\n }\n }\n\n override emit(event: string, ...args: any[]): boolean {\n // Emit to global listeners first\n const hasGlobal = super.emit(event, ...args)\n\n // Then emit to renderable handlers\n const renderableSet = this.renderableHandlers.get(event)\n if (renderableSet && renderableSet.size > 0) {\n for (const handler of [...renderableSet]) {\n try {\n handler(...args)\n } catch (e) {\n console.error(`[BrowserInternalKeyHandler] Error in ${event} handler:`, e)\n }\n // Check propagation\n if (args[0] && args[0].propagationStopped) break\n }\n return true\n }\n\n return hasGlobal\n }\n}\n\nexport class BrowserRenderContext extends EventEmitter implements RenderContext {\n private _width: number\n private _height: number\n private _widthMethod: WidthMethod\n private _renderRequested = false\n private _onRenderRequest: (() => void) | null = null\n private _lifecyclePasses: Set<any> = new Set()\n private _focusedRenderable: any | null = null\n public cursorColor: RGBA | null = null\n public cursorStyleType: CursorStyle = \"block\"\n public cursorBlinking: boolean = false\n\n public keyInput: BrowserKeyHandler\n public _internalKeyInput: BrowserInternalKeyHandler\n\n constructor(width: number, height: number, widthMethod: WidthMethod = \"wcwidth\") {\n super()\n this._width = width\n this._height = height\n this._widthMethod = widthMethod\n this.keyInput = new BrowserKeyHandler()\n this._internalKeyInput = new BrowserInternalKeyHandler()\n }\n\n get width(): number {\n return this._width\n }\n\n get height(): number {\n return this._height\n }\n\n get widthMethod(): WidthMethod {\n return this._widthMethod\n }\n\n get capabilities(): any {\n return null\n }\n\n get hasSelection(): boolean {\n return false\n }\n\n get currentFocusedRenderable(): any | null {\n return this._focusedRenderable\n }\n\n setOnRenderRequest(callback: () => void): void {\n this._onRenderRequest = callback\n }\n\n resize(width: number, height: number): void {\n this._width = width\n this._height = height\n this.emit(\"resize\", width, height)\n }\n\n // RenderContext interface methods\n addToHitGrid(_x: number, _y: number, _width: number, _height: number, _id: number): void {}\n\n pushHitGridScissorRect(_x: number, _y: number, _width: number, _height: number): void {}\n\n popHitGridScissorRect(): void {}\n\n clearHitGridScissorRects(): void {}\n\n requestRender(): void {\n if (this._renderRequested) return\n this._renderRequested = true\n this._onRenderRequest?.()\n this._renderRequested = false\n }\n\n setCursorPosition(_x: number, _y: number, _visible: boolean): void {}\n\n setCursorStyle(options: CursorStyleOptions): void {\n if (options.color) {\n this.cursorColor = options.color\n }\n if (options.style) {\n this.cursorStyleType = options.style\n }\n if (options.blinking !== undefined) {\n this.cursorBlinking = options.blinking\n }\n }\n\n setCursorColor(color: RGBA): void {\n this.cursorColor = color\n }\n\n setMousePointer(_shape: MousePointerStyle): void {}\n\n requestLive(): void {}\n\n dropLive(): void {}\n\n getSelection(): any | null {\n return null\n }\n\n requestSelectionUpdate(): void {}\n\n focusRenderable(renderable: any): void {\n if (this._focusedRenderable && this._focusedRenderable !== renderable) {\n this._focusedRenderable.blur?.()\n }\n this._focusedRenderable = renderable\n }\n\n registerLifecyclePass(renderable: any): void {\n this._lifecyclePasses.add(renderable)\n }\n\n unregisterLifecyclePass(renderable: any): void {\n this._lifecyclePasses.delete(renderable)\n }\n\n getLifecyclePasses(): Set<any> {\n return this._lifecyclePasses\n }\n\n clearSelection(): void {}\n\n startSelection(_renderable: any, _x: number, _y: number): void {}\n\n updateSelection(\n _currentRenderable: any | undefined,\n _x: number,\n _y: number,\n _options?: { finishDragging?: boolean },\n ): void {}\n}\n", "\nvar loadYoga = (() => {\n var _scriptDir = import.meta.url;\n \n return (\nfunction(loadYoga) {\n loadYoga = loadYoga || {};\n\n\nvar h;h||(h=typeof loadYoga !== 'undefined' ? loadYoga : {});var aa,ca;h.ready=new Promise(function(a,b){aa=a;ca=b});var da=Object.assign({},h),q=\"\";\"undefined\"!=typeof document&&document.currentScript&&(q=document.currentScript.src);_scriptDir&&(q=_scriptDir);0!==q.indexOf(\"blob:\")?q=q.substr(0,q.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):q=\"\";var ea=h.print||console.log.bind(console),v=h.printErr||console.warn.bind(console);Object.assign(h,da);da=null;var w;h.wasmBinary&&(w=h.wasmBinary);\nvar noExitRuntime=h.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&x(\"no native wasm support detected\");var fa,ha=!1;function z(a,b,c){c=b+c;for(var d=\"\";!(b>=c);){var e=a[b++];if(!e)break;if(e&128){var f=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var g=a[b++]&63;e=224==(e&240)?(e&15)<<12|f<<6|g:(e&7)<<18|f<<12|g<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}\nvar ia,ja,A,C,ka,D,E,la,ma;function na(){var a=fa.buffer;ia=a;h.HEAP8=ja=new Int8Array(a);h.HEAP16=C=new Int16Array(a);h.HEAP32=D=new Int32Array(a);h.HEAPU8=A=new Uint8Array(a);h.HEAPU16=ka=new Uint16Array(a);h.HEAPU32=E=new Uint32Array(a);h.HEAPF32=la=new Float32Array(a);h.HEAPF64=ma=new Float64Array(a)}var oa,pa=[],qa=[],ra=[];function sa(){var a=h.preRun.shift();pa.unshift(a)}var F=0,ta=null,G=null;\nfunction x(a){if(h.onAbort)h.onAbort(a);a=\"Aborted(\"+a+\")\";v(a);ha=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ca(a);throw a;}function ua(a){return a.startsWith(\"data:application/octet-stream;base64,\")}var H;H=\"data:application/octet-stream;base64,AGFzbQEAAAABugM3YAF/AGACf38AYAF/AX9gA39/fwBgAn98AGACf38Bf2ADf39/AX9gBH9/f30BfWADf398AGAAAGAEf39/fwBgAX8BfGACf38BfGAFf39/f38Bf2AAAX9gA39/fwF9YAZ/f31/fX8AYAV/f39/fwBgAn9/AX1gBX9/f319AX1gAX8BfWADf35/AX5gB39/f39/f38AYAZ/f39/f38AYAR/f39/AX9gBn9/f319fQF9YAR/f31/AGADf399AX1gBn98f39/fwF/YAR/fHx/AGACf30AYAh/f39/f39/fwBgDX9/f39/f39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38BfGAEfHx/fwF9YA1/fX1/f399fX9/f39/AX9gB39/f319f38AYAJ+fwF/YAN/fX0BfWABfAF8YAN/fHwAYAR/f319AGAHf39/fX19fQF9YA1/fX99f31/fX19fX1/AX9gC39/f39/f399fX19AX9gCH9/f39/f319AGAEf39+fgBgB39/f39/f38Bf2ACfH8BfGAFf398fH8AYAN/f38BfGAEf39/fABgA39/fQBgBn9/fX99fwF/ArUBHgFhAWEAHwFhAWIAAwFhAWMACQFhAWQAFgFhAWUAEQFhAWYAIAFhAWcAAAFhAWgAIQFhAWkAAwFhAWoAAAFhAWsAFwFhAWwACgFhAW0ABQFhAW4AAwFhAW8AAQFhAXAAFwFhAXEABgFhAXIAAAFhAXMAIgFhAXQACgFhAXUADQFhAXYAFgFhAXcAAgFhAXgAAwFhAXkAGAFhAXoAAgFhAUEAAQFhAUIAEQFhAUMAAQFhAUQAAAOiAqACAgMSBwcACRkDAAoRBgYKEwAPDxMBBiMTCgcHGgMUASQFJRQHAwMKCgMmAQYYDxobFAAKBw8KBwMDAgkCAAAFGwACBwIHBgIDAQMIDAABKAkHBQURACkZASoAAAIrLAIALQcHBy4HLwkFCgMCMA0xAgMJAgACAQYKAQIBBQEACQIFAQEABQAODQ0GFQIBHBUGAgkCEAAAAAUyDzMMBQYINAUCAwUODg41AgMCAgIDBgICNgIBDAwMAQsLCwsLCx0CAAIAAAABABABBQICAQMCEgMMCwEBAQEBAQsLAQICAwICAgICAgIDAgIICAEICAgEBAQEBAQEBAQABAQABAQEBAAE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GiABQQA2AvADIAFCADcC6AMgAigC7AMiAyACKALoAyIERwRAIAMgBGsiBEEASA0FIAEgBBAeIgM2AuwDIAEgAzYC6AMgASADIARqNgLwAyACKALoAyIEIAIoAuwDIghHBEADQCADIAQoAgA2AgAgA0EEaiEDIARBBGoiBCAIRw0ACwsgASADNgLsAwsgASACKQL0AzcC9AMgASACKAKEBDYChAQgASACKQL8AzcC/AMgAUEANgLkAwsgBSABNgIAIAEgADYC5AMLIAZBAWohBiAFQQRqIgUgB0cNAAsLDwsQAgALUAACQAJAAkACQAJAIAIOBAQAAQIDCyAAIAEgAUEwahBDDwsgACABIAFBMGogAxBEDwsgACABIAFBMGoQQg8LECQACyAAIAEgAUEwaiADEEULcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QdwlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt5AgF/AX0jAEEQayIDJAAgA0EIaiAAIAFBAnRB7CVqKAIAIAIQU0MAAMB/IQQCQAJAAkAgAy0ADEEBaw4CAAECCyADKgIIIQQMAQsgAyoCCEMAAAAAlEMK1yM8lCEECyADQRBqJAAgBEMAAAAAl0MAAAAAIAQgBFsbC1QAAkACQAJAAkACQCACDgQEAAECAwsgACABIAFBwgBqEEMPCyAAIAEgAUHCAGogAxBEDwsgACABIAFBwgBqEEIPCxAkAAsgACABIAFBwgBqIAMQRQsvACAAIAJFQQF0IgIgASADEGAgACACIAEQS5IgACACIAEgAxB/IAAgAiABEFKSkgvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akH2AGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALzgECA38CfSMAQRBrIgMkAEEBIQQgA0EIaiAAQfwAaiIFIAAgAUEBdGpB8gBqIgEvAQAQHwJAAkAgAyoCCCIHIAIqAgAiBlwEQCAHIAdbBEAgAi0ABCECDAILIAYgBlwhBAsgAi0ABCECIARFDQAgAy0ADCACQf8BcUYNAQsgBSABIAYgAhA5A0AgAC0AACIBQQRxDQEgACABQQRyOgAAIAAoAhAiAQRAIAAgAREAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsgA0EQaiQACwoAIABBMGtBCkkLBQAQAgALBAAgAAsUACAABEAgACAAKAIAKAIEEQAACwsrAQF/IAAoAgwiAQRAIAEQIwsgACgCACIBBEAgACABNgIEIAEQIwsgABAjC4EEAQN/IwBBEGsiAyQAIABCADcCBCAAQcEgOwAVIABCADcCDCAAQoCAgICAgIACNwIYIAAgAC0AF0HgAXE6ABcgACAALQAAQeABcUEFcjoAACAAIAAtABRBgAFxOgAUIABBIGpBAEHOABAqGiAAQgA3AXIgAEGEgBA2AW4gAEEANgF6IABCADcCgAEgAEIANwKIASAAQgA3ApABIABCADcCoAEgAEKAgICAgICA4P8ANwKYASAAQQA6AKgBIABBrAFqQQBBxAEQKhogAEHwAmohBCAAQbABaiECA0AgAkKAgID8i4CAwL9/NwIQIAJCgYCAgBA3AgggAkKAgID8i4CAwL9/NwIAIAJBGGoiAiAERw0ACyAAQoCAgPyLgIDAv383AvACIABCgICA/IuAgMC/fzcCgAMgAEKBgICAEDcC+AIgAEKAgID+h4CA4P8ANwKUAyAAQoCAgP6HgIDg/wA3AowDIABBiANqIgIgAi0AAEH4AXE6AAAgAEGcA2pBAEHYABAqGiAAQQA6AIQEIABBgICA/gc2AoAEIABBADoA/AMgAEGAgID+BzYC+AMgACABNgL0AyABBEAgAS0ACEEBcQRAIAAgAC0AFEHzAXFBCHI6ABQgACAALwAVQfD/A3FBBHI7ABULIANBEGokACAADwsgA0GiGjYCACADEHIQJAALMwAgACABQQJ0QfwlaigCAEECdGoqApQDIABBFGoiACABQQEgAhAiIAAgAUEBIAIQIZKSC44DAQp/IwBB0AJrIgEkACAAKALoAyIDIAAoAuwDIgVHBEAgAUGMAmohBiABQeABaiEHIAFBIGohCCABQRxqIQkgAUEQaiEEA0AgAygCACICLQAXQRB0QYCAMHFBgIAgRgRAIAFBCGpBAEHEAhAqGiABQYCAgP4HNgIMIARBADoACCAEQgA3AgAgCUEAQcQBECoaIAghAANAIABCgICA/IuAgMC/fzcCECAAQoGAgIAQNwIIIABCgICA/IuAgMC/fzcCACAAQRhqIgAgB0cNAAsgAUKAgID8i4CAwL9/NwPwASABQoGAgIAQNwPoASABQoCAgPyLgIDAv383A+ABIAFCgICA/oeAgOD/ADcChAIgAUKAgID+h4CA4P8ANwL8ASABIAEtAPgBQfgBcToA+AEgBkEAQcAAECoaIAJBmAFqIAFBCGpBxAIQKxogAkIANwKMAyACIAItAAAiAEEBciIKQfsBcSAKIABBBHEbOgAAIAIQTyACEF4LIANBBGoiAyAFRw0ACwsgAUHQAmokAAtMAQF/QQEhAQJAIAAtAB5BB3ENACAALQAiQQdxDQAgAC0ALkEHcQ0AIAAtACpBB3ENACAALQAmQQdxDQAgAC0AKEEHcUEARyEBCyABC3YCAX8BfSMAQRBrIgQkACAEQQhqIAAgAUECdEHcJWooAgAgAhBQQwAAwH8hBQJAAkACQCAELQAMQQFrDgIAAQILIAQqAgghBQwBCyAEKgIIIAOUQwrXIzyUIQULIARBEGokACAFQwAAAACXQwAAAAAgBSAFWxsLogQCBn8CfgJ/QQghBAJAAkAgAEFHSw0AA0BBCCAEIARBCE0bIQRB6DopAwAiBwJ/QQggAEEDakF8cSAAQQhNGyIAQf8ATQRAIABBA3ZBAWsMAQsgAEEdIABnIgFrdkEEcyABQQJ0a0HuAGogAEH/H00NABpBPyAAQR4gAWt2QQJzIAFBAXRrQccAaiIBIAFBP08bCyIDrYgiCFBFBEADQCAIIAh6IgiIIQcCfiADIAinaiIDQQR0IgJB6DJqKAIAIgEgAkHgMmoiBkcEQCABIAQgABBjIgUNBSABKAIEIgUgASgCCDYCCCABKAIIIAU2AgQgASAGNgIIIAEgAkHkMmoiAigCADYCBCACIAE2AgAgASgCBCABNgIIIANBAWohAyAHQgGIDAELQeg6Qeg6KQMAQn4gA62JgzcDACAHQgGFCyIIQgBSDQALQeg6KQMAIQcLAkAgB1BFBEBBPyAHeadrIgZBBHQiAkHoMmooAgAhAQJAIAdCgICAgARUDQBB4wAhAyABIAJB4DJqIgJGDQADQCADRQ0BIAEgBCAAEGMiBQ0FIANBAWshAyABKAIIIgEgAkcNAAsgAiEBCyAAQTBqEGQNASABRQ0EIAEgBkEEdEHgMmoiAkYNBANAIAEgBCAAEGMiBQ0EIAEoAggiASACRw0ACwwECyAAQTBqEGRFDQMLQQAhBSAEIARBAWtxDQEgAEFHTQ0ACwsgBQwBC0EACwtwAgF/AX0jAEEQayIEJAAgBEEIaiAAIAFBAnRB7CVqKAIAIAIQKEMAAMB/IQUCQAJAAkAgBC0ADEEBaw4CAAECCyAEKgIIIQUMAQsgBCoCCCADlEMK1yM8lCEFCyAEQRBqJAAgBUMAAAAAIAUgBVsbC6ADAQN/IAEgAEEEaiIEakEBa0EAIAFrcSIFIAJqIAAgACgCACIBakEEa00EfyAAKAIEIgMgACgCCDYCCCAAKAIIIAM2AgQgBCAFRwRAIAAgAEEEaygCAEF+cWsiAyAFIARrIgQgAygCAGoiBTYCACAFQXxxIANqQQRrIAU2AgAgACAEaiIAIAEgBGsiATYCAAsCQCABIAJBGGpPBEAgACACakEIaiIDIAEgAmtBCGsiATYCACABQXxxIANqQQRrIAFBAXI2AgAgAwJ/IAMoAgBBCGsiAUH/AE0EQCABQQN2QQFrDAELIAFnIQQgAUEdIARrdkEEcyAEQQJ0a0HuAGogAUH/H00NABpBPyABQR4gBGt2QQJzIARBAXRrQccAaiIBIAFBP08bCyIBQQR0IgRB4DJqNgIEIAMgBEHoMmoiBCgCADYCCCAEIAM2AgAgAygCCCADNgIEQeg6Qeg6KQMAQgEgAa2GhDcDACAAIAJBCGoiATYCACABQXxxIABqQQRrIAE2AgAMAQsgACABakEEayABNgIACyAAQQRqBSADCwvmAwEFfwJ/QbAwKAIAIgEgAEEHakF4cSIDaiECAkAgA0EAIAEgAk8bDQAgAj8AQRB0SwRAIAIQFkUNAQtBsDAgAjYCACABDAELQfw7QTA2AgBBfwsiAkF/RwRAIAAgAmoiA0EQayIBQRA2AgwgAUEQNgIAAkACf0HgOigCACIABH8gACgCCAVBAAsgAkYEQCACIAJBBGsoAgBBfnFrIgRBBGsoAgAhBSAAIAM2AghBcCAEIAVBfnFrIgAgACgCAGpBBGstAABBAXFFDQEaIAAoAgQiAyAAKAIINgIIIAAoAgggAzYCBCAAIAEgAGsiATYCAAwCCyACQRA2AgwgAkEQNgIAIAIgAzYCCCACIAA2AgRB4DogAjYCAEEQCyACaiIAIAEgAGsiATYCAAsgAUF8cSAAakEEayABQQFyNgIAIAACfyAAKAIAQQhrIgFB/wBNBEAgAUEDdkEBawwBCyABQR0gAWciA2t2QQRzIANBAnRrQe4AaiABQf8fTQ0AGkE/IAFBHiADa3ZBAnMgA0EBdGtBxwBqIgEgAUE/TxsLIgFBBHQiA0HgMmo2AgQgACADQegyaiIDKAIANgIIIAMgADYCACAAKAIIIAA2AgRB6DpB6DopAwBCASABrYaENwMACyACQX9HC80BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQSBqIgEvAQAQHwJAAkAgAyoCCCIHIAIqAgAiBlwEQCAHIAdbBEAgAi0ABCECDAILIAYgBlwhBAsgAi0ABCECIARFDQAgAy0ADCACQf8BcUYNAQsgBSABIAYgAhA5A0AgAC0AACIBQQRxDQEgACABQQRyOgAAIAAoAhAiAQRAIAAgAREAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsgA0EQaiQAC0ABAX8CQEGsOy0AAEEBcQRAQag7KAIAIQIMAQtBAUGAJxAMIQJBrDtBAToAAEGoOyACNgIACyACIAAgAUEAEBMLzQECA38CfSMAQRBrIgMkAEEBIQQgA0EIaiAAQfwAaiIFIAAgAUEBdGpBMmoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALDwAgASAAKAIAaiACOQMACw0AIAEgACgCAGorAwALCwAgAARAIAAQIwsLxwECBH8CfSMAQRBrIgIkACACQQhqIABB/ABqIgQgAEEeaiIFLwEAEB9BASEDAkACQCACKgIIIgcgASoCACIGXARAIAcgB1sEQCABLQAEIQEMAgsgBiAGXCEDCyABLQAEIQEgA0UNACACLQAMIAFB/wFxRg0BCyAEIAUgBiABEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyACQRBqJAALlgMCA34CfyAAvSICQjSIp0H/D3EiBEH/D0YEQCAARAAAAAAAAPA/oiIAIACjDwsgAkIBhiIBQoCAgICAgIDw/wBYBEAgAEQAAAAAAAAAAKIgACABQoCAgICAgIDw/wBRGw8LAn4gBEUEQEEAIQQgAkIMhiIBQgBZBEADQCAEQQFrIQQgAUIBhiIBQgBZDQALCyACQQEgBGuthgwBCyACQv////////8Hg0KAgICAgICACIQLIQEgBEH/B0oEQANAAkAgAUKAgICAgICACH0iA0IAUw0AIAMiAUIAUg0AIABEAAAAAAAAAACiDwsgAUIBhiEBIARBAWsiBEH/B0oNAAtB/wchBAsCQCABQoCAgICAgIAIfSIDQgBTDQAgAyIBQgBSDQAgAEQAAAAAAAAAAKIPCyABQv////////8HWARAA0AgBEEBayEEIAFCgICAgICAgARUIQUgAUIBhiEBIAUNAAsLIAJCgICAgICAgICAf4MgAUKAgICAgICACH0gBK1CNIaEIAFBASAEa62IIARBAEobhL8LiwEBA38DQCAAQQR0IgFB5DJqIAFB4DJqIgI2AgAgAUHoMmogAjYCACAAQQFqIgBBwABHDQALQTAQZBpBmDtBBjYCAEGcO0EANgIAEJwBQZw7Qcg7KAIANgIAQcg7QZg7NgIAQcw7QcMBNgIAQdA7QQA2AgAQjwFB0DtByDsoAgA2AgBByDtBzDs2AgALjwEBAn8jAEEQayIEJAACfUMAAAAAIAAvABVBgOAAcUUNABogBEEIaiAAQRRqIgBBASACQQJGQQF0IAFB/gFxQQJHGyIFIAIQNgJAIAQtAAxFDQAgBEEIaiAAIAUgAhA2IAQtAAxBA0YNACAAIAEgAiADEIEBDAELIAAgASACIAMQgAGMCyEDIARBEGokACADC4QBAQJ/AkACQCAAKALoAyICIAAoAuwDIgNGDQADQCACKAIAIAFGDQEgAkEEaiICIANHDQALDAELIAIgA0YNACABLQAXQRB0QYCAMHFBgIAgRgRAIAAgACgC4ANBAWs2AuADCyACIAJBBGoiASADIAFrEDMaIAAgA0EEazYC7ANBAQ8LQQALCwBByDEgACABEEkLPAAgAEUEQCACQQVHQQAgAhtFBEBBuDAgAyAEEEkaDwsgAyAEEHAaDwsgACABIAIgAyAEIAAoAgQRDQAaCyYBAX8jAEEQayIBJAAgASAANgIMQbgwQdglIAAQSRogAUEQaiQAC4cDAwN/BXwCfSAAKgKgA7siBiACoCECIAAqApwDuyIHIAGgIQggACgC9AMqAhgiC0MAAAAAXARAIAAqApADuyEJIAAqAowDIQwgACAHIAu7IgFBACAALQAAQRBxIgNBBHYiBBA0OAKcAyAAIAYgAUEAIAQQNDgCoAMgASAMuyIHohBsIgYgBmIiBEUgBplELUMc6+I2Gj9jcUUEQCAEIAZEAAAAAAAA8L+gmUQtQxzr4jYaP2NFciEFCyACIAmgIQogCCAHoCEHAn8gASAJohBsIgYgBmIiBEUEQEEAIAaZRC1DHOviNho/Yw0BGgsgBCAGRAAAAAAAAPC/oJlELUMc6+I2Gj9jRXILIQQgACAHIAEgA0EARyIDIAVxIAMgBUEBc3EQNCAIIAFBACADEDSTOAKMAyAAIAogASADIARxIAMgBEEBc3EQNCACIAFBACADEDSTOAKQAwsgACgC6AMiAyAAKALsAyIARwRAA0AgAygCACAIIAIQcyADQQRqIgMgAEcNAAsLC1UBAX0gAEEUaiIAIAEgAkECSSICIAQgBRA1IQYgACABIAIgBCAFEC0iBUMAAAAAYCADIAVecQR9IAUFIAZDAAAAAGBFBEAgAw8LIAYgAyADIAZdGwsLeAEBfwJAIAAoAgAiAgRAA0AgAUUNAiACIAEoAgQ2AgQgAiABKAIINgIIIAEoAgAhASAAKAIAIQAgAigCACICDQALCyAAIAEQPA8LAkAgAEUNACAAKAIAIgFFDQAgAEEANgIAA0AgASgCACEAIAEQIyAAIgENAAsLC5kCAgZ/AX0gAEEUaiEHQQMhBCAALQAUQQJ2QQNxIQUCQAJ/AkAgAUEBIAAoAuQDGyIIQQJGBEACQCAFQQJrDgIEAAILQQIhBAwDC0ECIQRBACAFQQFLDQEaCyAECyEGIAUhBAsgACAEIAggAyACIARBAkkiBRsQbiEKIAAgBiAIIAIgAyAFGxBuIQMgAEGcA2oiAEEBIAFBAkZBAXQiCCAFG0ECdGogCiAHIAQgASACECKSOAIAIABBAyABQQJHQQF0IgkgBRtBAnRqIAogByAEIAEgAhAhkjgCACAAIAhBASAGQQF2IgQbQQJ0aiADIAcgBiABIAIQIpI4AgAgACAJQQMgBBtBAnRqIAMgByAGIAEgAhAhkjgCAAvUAgEDfyMAQdACayIBJAAgAUEIakEAQcQCECoaIAFBADoAGCABQgA3AxAgAUGAgID+BzYCDCABQRxqQQBBxAEQKhogAUHgAWohAyABQSBqIQIDQCACQoCAgPyLgIDAv383AhAgAkKBgICAEDcCCCACQoCAgPyLgIDAv383AgAgAkEYaiICIANHDQALIAFCgICA/IuAgMC/fzcD8AEgAUKBgICAEDcD6AEgAUKAgID8i4CAwL9/NwPgASABQoCAgP6HgIDg/wA3AoQCIAFCgICA/oeAgOD/ADcC/AEgASABLQD4AUH4AXE6APgBIAFBjAJqQQBBwAAQKhogAEGYAWogAUEIakHEAhArGiAAQgA3AowDIAAgAC0AAEEBcjoAACAAEE8gACgC6AMiAiAAKALsAyIARwRAA0AgAigCABB3IAJBBGoiAiAARw0ACwsgAUHQAmokAAuuAgIKfwJ9IwBBIGsiASQAIAFBgAI7AB4gAEHuAGohByAAQfgDaiEFIABB8gBqIQggAEH2AGohCSAAQfwAaiEDQQAhAANAIAFBEGogAyAJIAFBHmogBGotAAAiAkEBdCIEaiIGLwEAEB8CQAJAIAEtABRFDQAgAUEIaiADIAYvAQAQHyABIAMgBCAIai8BABAfIAEtAAwgAS0ABEcNAAJAIAEqAggiDCAMXCIKIAEqAgAiCyALXHJFBEAgDCALk4tDF7fROF0NAQwCCyAKRSALIAtbcg0BCyABQRBqIAMgBi8BABAfDAELIAFBEGogAyAEIAdqLwEAEB8LIAUgAkEDdGoiAiABLQAUOgAEIAIgASgCEDYCAEEBIQQgACECQQEhACACRQ0ACyABQSBqJAALMgACf0EAIAAvABVBgOAAcUGAwABGDQAaQQEgABA7QwAAAABcDQAaIAAQQEMAAAAAXAsLewEBfSADIASTIgMgA1sEfUMAAAAAIABBFGoiACABIAIgBSAGEDUiByAEkyAHIAdcGyIHQ///f38gACABIAIgBSAGEC0iBSAEkyAFIAVcGyIEIAMgAyAEXhsiAyADIAddGyAHIAMgAyADXBsgAyADWyAHIAdbcRsFIAMLC98FAwR/BX0BfCAJQwAAAABdIAhDAAAAAF1yBH8gDQUgBSESIAEhEyADIRQgByERIAwqAhgiFUMAAAAAXARAIAG7IBW7IhZBAEEAEDQhEyADuyAWQQBBABA0IRQgBbsgFkEAQQAQNCESIAe7IBZBAEEAEDQhEQsCf0EAIAAgBEcNABogEiATk4tDF7fROF0gEyATXCINIBIgElxyRQ0AGkEAIBIgElsNABogDQshDAJAIAIgBkcNACAUIBRcIg0gESARXHJFBEAgESAUk4tDF7fROF0hDwwBCyARIBFbDQAgDSEPC0EBIQ5BASENAkAgDA0AIAEgCpMhAQJAIABFBEAgASABXCIAIAggCFxyRQRAQQAhDCABIAiTi0MXt9E4XUUNAgwDC0EAIQwgCCAIWw0BIAANAgwBCyAAQQJGIQwgAEECRw0AIARBAUcNACABIAhgDQECQCAIIAhcIgAgASABXHJFBEAgASAIk4tDF7fROF1FDQEMAwtBACENIAEgAVsNAkEBIQ0gAA0CC0EAIQ0MAQtBACENIAggCFwiACABIAVdRXINACAMRSABIAFcIhAgBSAFXHIgBEECR3JyDQBBASENIAEgCGANAEEAIQ0gACAQcg0AIAEgCJOLQxe30ThdIQ0LAkAgDw0AIAMgC5MhAQJAAkAgAkUEQCABIAFcIgIgCSAJXHJFBEBBACEAIAEgCZOLQxe30ThdRQ0CDAQLQQAhACAJIAlbDQEgAg0DDAELIAJBAkYhACACQQJHIAZBAUdyDQAgASAJYARADAMLIAkgCVwiACABIAFcckUEQCABIAmTi0MXt9E4XUUNAgwDC0EAIQ4gASABWw0CQQEhDiAADQIMAQsgCSAJXCICIAEgB11Fcg0AIABFIAEgAVwiBCAHIAdcciAGQQJHcnINACABIAlgDQFBACEOIAIgBHINASABIAmTi0MXt9E4XSEODAELQQAhDgsgDSAOcQsL4wEBA38jAEEQayIBJAACQAJAIAAtABRBCHFFDQBBASEDIAAvABVB8AFxQdAARg0AIAEgABAyIAEoAgQhAAJAIAEoAgAiAkUEQEEAIQMgAEUNAQsDQCACKALsAyACKALoAyICa0ECdSAATQ0DIAIgAEECdGooAgAiAC8AFSAALQAXQRB0ciIAQYDgAHFBgMAARyAAQYAecUGACkZxIgMNASABEC4gASgCBCIAIAEoAgAiAnINAAsLIAEoAggiAEUNAANAIAAoAgAhAiAAECMgAiIADQALCyABQRBqJAAgAw8LEAIAC7IBAQR/AkACQCAAKAIEIgMgACgCACIEKALsAyAEKALoAyIBa0ECdUkEQCABIANBAnRqIQIDQCACKAIAIgEtABdBEHRBgIAwcUGAgCBHDQMgASgC7AMgASgC6ANGDQJBDBAeIgIgBDYCBCACIAM2AgggAiAAKAIINgIAQQAhAyAAQQA2AgQgACABNgIAIAAgAjYCCCABIQQgASgC6AMiAiABKALsA0cNAAsLEAIACyAAEC4LC4wQAgx/B30jAEEgayINJAAgDUEIaiABEDIgDSgCCCIOIA0oAgwiDHIEQCADQQEgAxshFSAAQRRqIRQgBUEBaiEWA0ACQAJAAn8CQAJAAkACQAJAIAwgDigC7AMgDigC6AMiDmtBAnVJBEAgDiAMQQJ0aigCACILLwAVIAstABdBEHRyIgxBgIAwcUGAgBBGDQgCQAJAIAxBDHZBA3EOAwEKAAoLIAkhFyAKIRogASgC9AMtABRBBHFFBEAgACoClAMgFEECQQEQMCAUQQJBARAvkpMhFyAAKgKYAyAUQQBBARAwIBRBAEEBEC+SkyEaCyALQRRqIQ8gAS0AFEECdkEDcSEQAkACfwJAIANBAkciE0UEQEEAIQ5BAyEMAkAgEEECaw4CBAACC0ECIQwMAwtBAiEMQQAgEEEBSw0BGgsgDAshDiAQIQwLIA9BAkEBIBcQIiAPQQJBASAXECGSIR0gD0EAQQEgFxAiIRwgD0EAQQEgFxAhIRsgCyoC+AMhGAJAAkACQAJAIAstAPwDQQFrDgIBAAILIBggF5RDCtcjPJQhGAsgGEMAAAAAYEUNACAdIAsgA0EAIBcgFxAxkiEYDAELIA1BGGogDyALQTJqIhAgAxBFQwAAwH8hGCANLQAcRQ0AIA1BGGogDyAQIAMQRCANLQAcRQ0AIA1BGGogDyAQIAMQRSANLQAcQQNGDQAgDUEYaiAPIBAgAxBEIA0tABxBA0YNACALQQIgAyAAKgKUAyAUQQIgAxBLIBRBAiADEFKSkyAPQQIgAyAXEFEgD0ECIAMgFxCDAZKTIBcgFxAlIRgLIBwgG5IhHCALKgKABCEZAkACQAJAIAstAIQEQQFrDgIBAAILIBkgGpRDCtcjPJQhGQsgGUMAAAAAYEUNACAcIAsgA0EBIBogFxAxkiEZDAMLIA1BGGogDyALQTJqIhAQQwJAIA0tABxFDQAgDUEYaiAPIBAQQiANLQAcRQ0AIA1BGGogDyAQEEMgDS0AHEEDRg0AIA1BGGogDyAQEEIgDS0AHEEDRg0AIAtBACADIAAqApgDIBRBACADEEsgFEEAIAMQUpKTIA9BACADIBoQUSAPQQAgAyAaEIMBkpMgGiAXECUhGQwDC0MAAMB/IRkgGCAYXA0GIAtB/ABqIhAgC0H6AGoiEi8BABAgIhsgG1sNAwwFCyALLQAAQQhxDQggCxBPIAAgCyACIAstABRBA3EiDCAVIAwbIAQgFiAGIAsqApwDIAeSIAsqAqADIAiSIAkgChB+IBFyIQxBACERIAxBAXFFDQhBASERIAsgCy0AAEEBcjoAAAwICxACAAsgGCAYXCAZIBlcRg0BIAtB/ABqIhAgC0H6AGoiEi8BABAgIhsgG1wNASAYIBhcBEAgGSAckyAQIAsvAXoQIJQgHZIhGAwCCyAZIBlbDQELIBwgGCAdkyAQIBIvAQAQIJWSIRkLIBggGFwNASAZIBlbDQMLQQAMAQtBAQshEiALIBcgGCACQQFHIAxBAklxIBdDAAAAAF5xIBJxIhAbIBkgA0ECIBIgEBsgGSAZXCAXIBpBAEEGIAQgBSAGED0aIAsqApQDIA9BAkEBIBcQIiAPQQJBASAXECGSkiEYIAsqApgDIA9BAEEBIBcQIiAPQQBBASAXECGSkiEZC0EBIRAgCyAYIBkgA0EAQQAgFyAaQQFBASAEIAUgBhA9GiAAIAEgCyADIAxBASAXIBoQggEgACABIAsgAyAOQQAgFyAaEIIBIBFBAXFFBEAgCy0AAEEBcSEQCyABLQAUIhJBAnZBA3EhDAJAAn8CQAJAAkACQAJAAkACQAJAAkACfwJAIBNFBEBBACERQQMhDiAMQQJrDgIDDQELQQIhDkEAIAxBAUsNARoLIA4LIREgEkEEcUUNBCASQQhxRQ0BIAwhDgsgASEMIA8QXw0BDAILAkAgCy0ANEEHcQ0AIAstADhBB3ENACALLQBCQQdxDQAgDCEOIAEhDCALQUBrLwEAQQdxRQ0CDAELIAwhDgsgACEMCwJ/AkACQAJAIA5BAWsOAwABAgULIAtBmANqIQ4gC0GoA2ohE0EBIRIgDEGYA2oMAgsgC0GUA2ohDiALQZwDaiETQQIhEiAMQZQDagwBCyALQZQDaiEOIAtBpANqIRNBACESIAxBlANqCyEMIAsgEkECdGogDCoCACAOKgIAkyATKgIAkzgCnAMLIBFBAXFFDQUCQAJAIBFBAnEEQCABIQwgDxBfDQEMAgsgCy0ANEEHcQ0AIAstADhBB3ENACALLQBCQQdxDQAgASEMIAtBQGsvAQBBB3FFDQELIAAhDAsgEUEBaw4DAQIDAAsQJAALIAtBmANqIREgC0GoA2ohDkEBIRMgDEGYA2oMAgsgC0GUA2ohESALQZwDaiEOQQIhEyAMQZQDagwBCyALQZQDaiERIAtBpANqIQ5BACETIAxBlANqCyEMIAsgE0ECdGogDCoCACARKgIAkyAOKgIAkzgCnAMLIAsqAqADIRsgCyoCnAMgB0MAAAAAIA8QXxuTIRcCfQJAIAstADRBB3ENACALLQA4QQdxDQAgCy0AQkEHcQ0AIAtBQGsvAQBBB3ENAEMAAAAADAELIAgLIRogCyAXOAKcAyALIBsgGpM4AqADIBAhEQsgDUEIahAuIA0oAgwiDCANKAIIIg5yDQALCyANKAIQIgwEQANAIAwoAgAhACAMECMgACIMDQALCyANQSBqJAAgEUEBcQt2AgF/AX0jAEEQayIEJAAgBEEIaiAAIAFBAnRB7CVqKAIAIAIQUEMAAMB/IQUCQAJAAkAgBC0ADEEBaw4CAAECCyAEKgIIIQUMAQsgBCoCCCADlEMK1yM8lCEFCyAEQRBqJAAgBUMAAAAAl0MAAAAAIAUgBVsbC3gCAX8BfSMAQRBrIgQkACAEQQhqIABBAyACQQJHQQF0IAFB/gFxQQJHGyACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt4AgF/AX0jAEEQayIEJAAgBEEIaiAAQQEgAkECRkEBdCABQf4BcUECRxsgAhA2QwAAwH8hBQJAAkACQCAELQAMQQFrDgIAAQILIAQqAgghBQwBCyAEKgIIIAOUQwrXIzyUIQULIARBEGokACAFQwAAAAAgBSAFWxsLoA0BBH8jAEEQayIJJAAgCUEIaiACQRRqIgggA0ECRkEBdEEBIARB/gFxQQJGIgobIgsgAxA2IAYgByAKGyEHAkACQAJAAkACQAJAIAktAAxFDQAgCUEIaiAIIAsgAxA2IAktAAxBA0YNACAIIAQgAyAHEIEBIABBFGogBCADEDCSIAggBCADIAcQIpIhBkEBIQMCQAJ/AkACQAJAAkAgBA4EAgMBAAcLQQIhAwwBC0EAIQMLIAMgC0YNAgJAAkAgBA4EAgIAAQYLIABBlANqIQNBAAwCCyAAQZQDaiEDQQAMAQsgAEGYA2ohA0EBCyEAIAMqAgAgAiAAQQJ0aioClAOTIAaTIQYLIAIgBEECdEHcJWooAgBBAnRqIAY4ApwDDAULIAlBCGogCCADQQJHQQF0QQMgChsiCiADEDYCQCAJLQAMRQ0AIAlBCGogCCAKIAMQNiAJLQAMQQNGDQACfwJAAkACQCAEDgQCAgABBQsgAEGUA2ohBUEADAILIABBlANqIQVBAAwBCyAAQZgDaiEFQQELIQEgBSoCACACQZQDaiIFIAFBAnRqKgIAkyAAQRRqIAQgAxAvkyAIIAQgAyAHECGTIAggBCADIAcQgAGTIQZBASEDAkACfwJAAkACQAJAIAQOBAIDAQAHC0ECIQMMAQtBACEDCyADIAtGDQICQAJAIAQOBAICAAEGCyAAQZQDaiEDQQAMAgsgAEGUA2ohA0EADAELIABBmANqIQNBAQshACADKgIAIAUgAEECdGoqAgCTIAaTIQYLIAIgBEECdEHcJWooAgBBAnRqIAY4ApwDDAULAkACQAJAIAUEQCABLQAUQQR2QQdxIgBBBUsNCEEBIAB0IgBBMnENASAAQQlxBEAgBEECdEHcJWooAgAhACAIIAQgAyAGEEEgASAAQQJ0IgBqIgEqArwDkiEGIAAgAmogAigC9AMtABRBAnEEfSAGBSAGIAEqAswDkgs4ApwDDAkLIAEgBEECdEHsJWooAgBBAnRqIgAqArwDIAggBCADIAYQYpIhBiACKAL0Ay0AFEECcUUEQCAGIAAqAswDkiEGCwJAAkACQAJAIAQOBAEBAgAICyABKgKUAyACKgKUA5MhB0ECIQMMAgsgASoCmAMgAioCmAOTIQdBASEDAkAgBA4CAgAHC0EDIQMMAQsgASoClAMgAioClAOTIQdBACEDCyACIANBAnRqIAcgBpM4ApwDDAgLIAIvABZBD3EiBUUEQCABLQAVQQR2IQULIAVBBUYEQCABLQAUQQhxRQ0CCyABLwAVQYCAA3FBgIACRgRAIAVBAmsOAgEHAwsgBUEISw0HQQEgBXRB8wNxDQYgBUECRw0CC0EAIQACfQJ/AkACQAJAAkACfwJAAkACQCAEDgQCAgABBAsgASoClAMhB0ECIQAgAUG8A2oMAgsgASoClAMhByABQcQDagwBCyABKgKYAyEHAkACQCAEDgIAAQMLQQMhACABQcADagwBC0EBIQAgAUHIA2oLIQUgByAFKgIAkyABQbwDaiIIIABBAnRqKgIAkyIHIAIoAvQDLQAUQQJxDQUaAkAgBA4EAAIDBAELQQMhACABQdADagwECxAkAAtBASEAIAFB2ANqDAILQQIhACABQcwDagwBC0EAIQAgAUHUA2oLIQUgByAFKgIAkyABIABBAnRqKgLMA5MLIAIgBEECdCIFQfwlaigCAEECdGoqApQDIAJBFGoiACAEQQEgBhAiIAAgBEEBIAYQIZKSk0MAAAA/lCAIIAVB3CVqKAIAIgVBAnRqKgIAkiAAIAQgAyAGEEGSIQYgAiAFQQJ0aiACKAL0Ay0AFEECcQR9IAYFIAYgASAFQQJ0aioCzAOSCzgCnAMMBgsgAS8AFUGAgANxQYCAAkcNBAsgASAEQQJ0QewlaigCAEECdGoiACoCvAMgCCAEIAMgBhBikiEGIAIoAvQDLQAUQQJxRQRAIAYgACoCzAOSIQYLAkACQCAEDgQBAQMAAgsgASoClAMgAioClAOTIQdBAiEDDAMLIAEqApgDIAIqApgDkyEHQQEhAwJAIAQOAgMAAQtBAyEDDAILECQACyABKgKUAyACKgKUA5MhB0EAIQMLIAIgA0ECdGogByAGkzgCnAMMAQsgBEECdEHcJWooAgAhACAIIAQgAyAGEEEgASAAQQJ0IgBqIgEqArwDkiEGIAAgAmogAigC9AMtABRBAnEEfSAGBSAGIAEqAswDkgs4ApwDCyAJQRBqJAALcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QewlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAVCwUAEFgACzkAIABFBEBBAA8LAn8gAUGAf3FBgL8DRiABQf8ATXJFBEBB/DtBGTYCAEF/DAELIAAgAToAAEEBCwvEAgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAQALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQegAaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQOQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIANBEGokAAtdAQR/IAAoAgAhAgNAIAIsAAAiAxBXBEBBfyEEIAAgAkEBaiICNgIAIAFBzJmz5gBNBH9BfyADQTBrIgMgAUEKbCIEaiADIARB/////wdzShsFIAQLIQEMAQsLIAELrhQCEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRQCQAJAAkACQANAIAEhDSAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCANIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAH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IQEgAEIANwIEIAAgATYCACABIAA2AgQgAkEQaiQAIAALGwEBfyAABEAgACgCACIBBEAgARAjCyAAECMLC0kBAn9BBBAeIQFBIBAeIgBBADYCHCAAQoCAgICAgIDAPzcCFCAAQgA3AgwgAEEAOgAIIABBAzYCBCAAQQA2AgAgASAANgIAIAELIAAgAkEFR0EAIAIbRQRAQbgwIAMgBBBJDwsgAyAEEHALIgEBfiABIAKtIAOtQiCGhCAEIAARFQAiBUIgiKckASAFpwuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECsaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECsaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACCwQAQgALBABBAAuKBQIGfgJ/IAEgASgCAEEHakF4cSIBQRBqNgIAIAAhCSABKQMAIQMgASkDCCEGIwBBIGsiCCQAAkAgBkL///////////8AgyIEQoCAgICAgMCAPH0gBEKAgICAgIDA/8MAfVQEQCAGQgSGIANCPIiEIQQgA0L//////////w+DIgNCgYCAgICAgIAIWgRAIARCgYCAgICAgIDAAHwhAgwCCyAEQoCAgICAgICAQH0hAiADQoCAgICAgICACFINASACIARCAYN8IQIMAQsgA1AgBEKAgICAgIDA//8AVCAEQoCAgICAgMD//wBRG0UEQCAGQgSGIANCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiAEQv///////7//wwBWDQBCACECIARCMIinIgBBkfcASQ0AIAMhAiAGQv///////z+DQoCAgICAgMAAhCIFIQcCQCAAQYH3AGsiAUHAAHEEQCACIAFBQGqthiEHQgAhAgwBCyABRQ0AIAcgAa0iBIYgAkHAACABa62IhCEHIAIgBIYhAgsgCCACNwMQIAggBzcDGAJAQYH4ACAAayIAQcAAcQRAIAUgAEFAaq2IIQNCACEFDAELIABFDQAgBUHAACAAa62GIAMgAK0iAoiEIQMgBSACiCEFCyAIIAM3AwAgCCAF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ASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRCwALYQECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBAEEQEB4iACACKQMINwMIIAAgAikDADcDACACQRBqJAAgAAtjAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwBBEBAeIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiQAIAALNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEEAAs5AQF/IAEgACgCBCIEQQF1aiEBIAAoAgAhACABIAIgAyAEQQFxBH8gASgCACAAaigCAAUgAAsRCAALCQAgASAAEQIACwUAQcM7Cw8AIAEgACgCAGogAjYCAAsNACABIAAoAgBqKAIACxgBAX9BEBAeIgBCADcDCCAAQQA2AgAgAAsYAQF/QRAQHiIAQgA3AwAgAEIANwMIIAALDABBMBAeQQBBMBAqCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRHgALBQBBvjsLIQAgACABKAIAIAEgASwAC0EASBtBuzsgAigCABAQNgIACyoBAX9BDBAeIgFBADoABCABIAAoAgA2AgggAEEANgIAIAFB2Cc2AgAgAQsFAEG7OwsFAEG4OwshACAAIAEoAgAgASABLAALQQBIG0GkOyACKAIAEBA2AgAL2AEBBH8jAEEgayIDJAAgASgCACIEQfD///8HSQRAAkACQCAEQQtPBEAgBEEPckEBaiIFEB4hBiADIAVBgICAgHhyNgIQIAMgBjYCCCADIAQ2AgwgBCAGaiEFDAELIAMgBDoAEyADQQhqIgYgBGohBSAERQ0BCyAGIAFBBGogBBArGgsgBUEAOgAAIAMgAjYCACADQRhqIANBCGogAyAAEQMAIAMoAhgQHSADKAIYIgAQBiADKAIAEAYgAywAE0EASARAIAMoAggQIwsgA0EgaiQAIAAPCxACAAsqAQF/QQwQHiIBQQA6AAQgASAAKAIANgIIIABBADYCACABQeAmNgIAIAELBQBBpDsLaQECfyMAQRBrIgYkACABIAAoAgQiB0EBdWohASAAKAIAIQAgBiABIAIgAyAEIAUgB0EBcQR/IAEoAgAgAGooAgAFIAALERAAQRAQHiIAIAYpAwg3AwggACAGKQMANwMAIAZBEGokACAACwUAQaA7Cx0AIAAoAgAiACAALQAAQfcBcUEIQQAgARtyOgAAC6oBAgJ/AX0jAEEQayICJAAgACgCACEAIAFB/wFxIgNBBkkEQAJ/AkACQAJAIANBBGsOAgABAgsgAEHUA2ogAC0AiANBA3FBAkYNAhogAEHMA2oMAgsgAEHMA2ogAC0AiANBA3FBAkYNARogAEHUA2oMAQsgACABQf8BcUECdGpBzANqCyoCACEEIAJBEGokACAEuw8LIAJB7hA2AgAgAEEFQdglIAIQLBAkAAuqAQICfwF9IwBBEGsiAiQAIAAoAgAhACABQf8BcSIDQQZJBEACfwJAAkACQCADQQRrDgIAAQILIABBxANqIAAtAIgDQQNxQQJGDQIaIABBvANqDAILIABBvANqIAAtAIgDQQNxQQJGDQEaIABBxANqDAELIAAgAUH/AXFBAnRqQbwDagsqAgAhBCACQRBqJAAgBLsPCyACQe4QNgIAIABBBUHYJSACECwQJAALqgECAn8BfSMAQRBrIgIkACAAKAIAIQAgAUH/AXEiA0EGSQRAAn8CQAJAAkAgA0EEaw4CAAECCyAAQbQDaiAALQCIA0EDcUECRg0CGiAAQawDagwCCyAAQawDaiAALQCIA0EDcUECRg0BGiAAQbQDagwBCyAAIAFB/wFxQQJ0akGsA2oLKgIAIQQgAkEQaiQAIAS7DwsgAkHuEDYCACAAQQVB2CUgAhAsECQAC08AIAAgASgCACIBKgKcA7s5AwAgACABKgKkA7s5AwggACABKgKgA7s5AxAgACABKgKoA7s5AxggACABKgKMA7s5AyAgACABKgKQA7s5AygLDAAgACgCACoCkAO7CwwAIAAoAgAqAowDuwsMACAAKAIAKgKoA7sLDAAgACgCACoCoAO7CwwAIAAoAgAqAqQDuwsMACAAKAIAKgKcA7sL6AMCBH0FfyMAQUBqIgokACAAKAIAIQAgCkEIakEAQTgQKhpB8DpB8DooAgBBAWo2AgAgABB4IAAtABRBA3EiCCADQQEgA0H/AXEbIAgbIQkgAEEUaiEIIAG2IQQgACoC+AMhBQJ9AkACQAJAIAAtAPwDQQFrDgIBAAILIAUgBJRDCtcjPJQhBQsgBUMAAAAAYEUNACAAIAlB/wFxQQAgBCAEEDEgCEECQQEgBBAiIAhBAkEBIAQQIZKSDAELIAggCUH/AXFBACAEIAQQLSIFIAVbBEBBAiELIAggCUH/AXFBACAEIAQQLQwBCyAEIARcIQsgBAshByACtiEFIAAqAoAEIQYgACAHAn0CQAJAAkAgAC0AhARBAWsOAgEAAgsgBiAFlEMK1yM8lCEGCyAGQwAAAABgRQ0AIAAgCUH/AXFBASAFIAQQMSAIQQBBASAEECIgCEEAQQEgBBAhkpIMAQsgCCAJQf8BcSIJQQEgBSAEEC0iBiAGWwRAQQIhDCAIIAlBASAFIAQQLQwBCyAFIAVcIQwgBQsgA0H/AXEgCyAMIAQgBUEBQQAgCkEIakEAQfA6KAIAED0EQCAAIAAtAIgDQQNxIAQgBRB2IABEAAAAAAAAAABEAAAAAAAAAAAQcwsgCkFAayQACw0AIAAoAgAtAABBAXELFQAgACgCACIAIAAtAABB/gFxOgAACxAAIAAoAgAtAABBBHFBAnYLegECfyMAQRBrIgEkACAAKAIAIgAoAggEQANAIAAtAAAiAkEEcUUEQCAAIAJBBHI6AAAgACgCECICBEAgACACEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQELCyABQRBqJAAPCyABQYAINgIAIABBBUHYJSABECwQJAALLgEBfyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALIAAoAgBBADYCEAsXACAAKAIEKAIIIgAgACgCACgCCBEAAAsuAQF/IAAoAgghAiAAIAE2AgggAgRAIAIgAigCACgCBBEAAAsgACgCAEEFNgIQCz4BAX8gACgCBCEBIABBADYCBCABBEAgASABKAIAKAIEEQAACyAAKAIAIgBBADYCCCAAIAAtAABB7wFxOgAAC0kBAX8jAEEQayIGJAAgBiABKAIEKAIEIgEgAiADIAQgBSABKAIAKAIIERAAIAAgBisDALY4AgAgACAGKwMItjgCBCAGQRBqJAALcwECfyMAQRBrIgIkACAAKAIEIQMgACABNgIEIAMEQCADIAMoAgAoAgQRAAALIAAoAgAiACgC6AMgACgC7ANHBEAgAkH5IzYCACAAQQVB2CUgAhAsECQACyAAQQQ2AgggACAALQAAQRByOgAAIAJBEGokAAs8AQF/AkAgACgCACIAKALsAyAAKALoAyIAa0ECdSABTQ0AIAAgAUECdGooAgAiAEUNACAAKAIEIQILIAILGQAgACgCACgC5AMiAEUEQEEADwsgACgCBAsXACAAKAIAIgAoAuwDIAAoAugDa0ECdQuOAwEDfyMAQdACayICJAACQCAAKAIAIgAoAuwDIAAoAugDRg0AIAEoAgAiAygC5AMhASAAIAMQb0UNACAAIAFGBEAgAkEIakEAQcQCECoaIAJBADoAGCACQgA3AxAgAkGAgID+BzYCDCACQRxqQQBBxAEQKhogAkHgAWohBCACQSBqIQEDQCABQoCAgPyLgIDAv383AhAgAUKBgICAEDcCCCABQoCAgPyLgIDAv383AgAgAUEYaiIBIARHDQALIAJCgICA/IuAgMC/fzcD8AEgAkKBgICAEDcD6AEgAkKAgID8i4CAwL9/NwPgASACQoCAgP6HgIDg/wA3AoQCIAJCgICA/oeAgOD/ADcC/AEgAiACLQD4AUH4AXE6APgBIAJBjAJqQQBBwAAQKhogA0GYAWogAkEIakHEAhArGiADQQA2AuQDCwNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIAJB0AJqJAAL4AcBCH8jAEHQAGsiByQAIAAoAgAhAAJAAkAgASgCACIIKALkA0UEQCAAKAIIDQEgCC0AF0EQdEGAgDBxQYCAIEYEQCAAIAAoAuADQQFqNgLgAwsgACgC6AMiASACQQJ0aiEGAkAgACgC7AMiBCAAQfADaiIDKAIAIgVJBEAgBCAGRgRAIAYgCDYCACAAIAZBBGo2AuwDDAILIAQgBCICQQRrIgFLBEADQCACIAEoAgA2AgAgAkEEaiECIAFBBGoiASAESQ0ACwsgACACNgLsAyAGQQRqIgEgBEcEQCAEIAQgAWsiAUF8cWsgBiABEDMaCyAGIAg2AgAMAQsgBCABa0ECdUEBaiIEQYCAgIAETw0DAkAgB0EgakH/////AyAFIAFrIgFBAXUiBSAEIAQgBUkbIAFB/P///wdPGyACIAMQSiIDKAIIIgIgAygCDEcNACADKAIEIgEgAygCACIESwRAIAMgASABIARrQQJ1QQFqQX5tQQJ0IgRqIAEgAiABayIBEDMgAWoiAjYCCCADIAMoAgQgBGo2AgQMAQsgB0E4akEBIAIgBGtBAXUgAiAERhsiASABQQJ2IAMoAhAQSiIFKAIIIQQCfyADKAIIIgIgAygCBCIBRgRAIAQhAiABDAELIAQgAiABa2ohAgNAIAQgASgCADYCACABQQRqIQEgBEEEaiIEIAJHDQALIAMoAgghASADKAIECyEEIAMoAgAhCSADIAUoAgA2AgAgBSAJNgIAIAMgBSgCBDYCBCAFIAQ2AgQgAyACNgIIIAUgATYCCCADKAIMIQogAyAFKAIMNgIMIAUgCjYCDCABIARHBEAgBSABIAQgAWtBA2pBfHFqNgIICyAJRQ0AIAkQIyADKAIIIQILIAIgCDYCACADIAMoAghBBGo2AgggAyADKAIEIAYgACgC6AMiAWsiAmsgASACEDM2AgQgAygCCCAGIAAoAuwDIAZrIgQQMyEGIAAoAugDIQEgACADKAIENgLoAyADIAE2AgQgACgC7AMhAiAAIAQgBmo2AuwDIAMgAjYCCCAAKALwAyEEIAAgAygCDDYC8AMgAyABNgIAIAMgBDYCDCABIAJHBEAgAyACIAEgAmtBA2pBfHFqNgIICyABRQ0AIAEQIwsgCCAANgLkAwNAIAAtAAAiAUEEcUUEQCAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQELCyAHQdAAaiQADwsgB0HEIzYCECAAQQVB2CUgB0EQahAsECQACyAHQckkNgIAIABBBUHYJSAHECwQJAALEAIACxAAIAAoAgAtAABBAnFBAXYLWQIBfwF9IwBBEGsiAiQAIAJBCGogACgCACIAQfwAaiAAIAFB/wFxQQF0ai8BaBAfQwAAwH8hAwJAAkAgAi0ADA4EAQAAAQALIAIqAgghAwsgAkEQaiQAIAMLTgEBfyMAQRBrIgMkACADQQhqIAEoAgAiAUH8AGogASACQf8BcUEBdGovAUQQHyADLQAMIQEgACADKgIIuzkDCCAAIAE2AgAgA0EQaiQAC14CAX8BfCMAQRBrIgIkACACQQhqIAAoAgAiAEH8AGogACABQf8BcUEBdGovAVYQH0QAAAAAAAD4fyEDAkACQCACLQAMDgQBAAABAAsgAioCCLshAwsgAkEQaiQAIAMLJAEBfUMAAMB/IAAoAgAiAEH8AGogAC8BehAgIgEgASABXBu7C0QBAX8jAEEQayICJAAgAkEIaiABKAIAIgFB/ABqIAEvAXgQHyACLQAMIQEgACACKgIIuzkDCCAAIAE2AgAgAkEQaiQAC0QBAX8jAEEQayICJAAgAkEIaiABKAIAIgFB/ABqIAEvAXYQHyACLQAMIQEgACACKgIIuzkDCCAAIAE2AgAgAkEQaiQAC0QBAX8jAEEQayICJAAgAkEIaiABKAIAIgFB/ABqIAEvAXQQHyACLQAMIQEgACACKgIIuzkDCCAAIAE2AgAgAkEQaiQAC0QBAX8jAEEQayICJAAgAkEIaiABKAIAIgFB/ABqIAEvAXIQHyACLQAMIQEgACACKgIIuzkDCCAAIAE2AgAgAkEQaiQAC0QBAX8jAEEQayICJAAgAkEIaiABKAIAIgFB/ABqIAEvAXAQHyACLQAMIQEgACACKgIIuzkDCCAAIAE2AgAgAkEQaiQAC0QBAX8jAEEQayICJAAgAkEIaiABKAIAIgFB/ABqIAEvAW4QHyACLQAMIQEgACACKgIIuzkDCCAAIAE2AgAgAkEQaiQAC0gCAX8BfQJ9IAAoAgAiAEH8AGoiASAALwEcECAiAiACXARAQwAAgD9DAAAAACAAKAL0Ay0ACEEBcRsMAQsgASAALwEcECALuws2AgF/AX0gACgCACIAQfwAaiIBIAAvARoQICICIAJcBEBEAAAAAAAAAAAPCyABIAAvARoQILsLRAEBfyMAQRBrIgIkACACQQhqIAEoAgAiAUH8AGogAS8BHhAfIAItAAwhASAAIAIqAgi7OQMIIAAgATYCACACQRBqJAALEAAgACgCAC0AF0ECdkEDcQsNACAAKAIALQAXQQNxC04BAX8jAEEQayIDJAAgA0EIaiABKAIAIgFB/ABqIAEgAkH/AXFBAXRqLwEgEB8gAy0ADCEBIAAgAyoCCLs5AwggACABNgIAIANBEGokAAsQACAAKAIALQAUQQR2QQdxCw0AIAAoAgAvABVBDnYLDQAgACgCAC0AFEEDcQsQACAAKAIALQAUQQJ2QQNxCw0AIAAoAgAvABZBD3ELEAAgACgCAC8AFUEEdkEPcQsNACAAKAIALwAVQQ9xC04BAX8jAEEQayIDJAAgA0EIaiABKAIAIgFB/ABqIAEgAkH/AXFBAXRqLwEyEB8gAy0ADCEBIAAgAyoCCLs5AwggACABNgIAIANBEGokAAsQACAAKAIALwAVQQx2QQNxCxAAIAAoAgAtABdBBHZBAXELgQECA38BfSMAQRBrIgMkACAAKAIAIQQCfSACtiIGIAZcBEBBACEAQwAAwH8MAQtBAEECIAZDAACAf1sgBkMAAID/W3IiBRshAEMAAMB/IAYgBRsLIQYgAyAAOgAMIAMgBjgCCCADIAMpAwg3AwAgBCABQf8BcSADEIgBIANBEGokAAt5AgF9An8jAEEQayIEJAAgACgCACEFIAQCfyACtiIDIANcBEBDAADAfyEDQQAMAQtDAADAfyADIANDAACAf1sgA0MAAID/W3IiABshAyAARQs6AAwgBCADOAIIIAQgBCkDCDcDACAFIAFB/wFxIAQQiAEgBEEQaiQAC3EBAX8CQCAAKAIAIgAtAAAiAkECcUEBdiABRg0AIAAgAkH9AXFBAkEAIAEbcjoAAANAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLC4EBAgN/AX0jAEEQayIDJAAgACgCACEEAn0gArYiBiAGXARAQQAhAEMAAMB/DAELQQBBAiAGQwAAgH9bIAZDAACA/1tyIgUbIQBDAADAfyAGIAUbCyEGIAMgADoADCADIAY4AgggAyADKQMINwMAIAQgAUH/AXEgAxCOASADQRBqJAALeQIBfQJ/IwBBEGsiBCQAIAAoAgAhBSAEAn8gArYiAyADXARAQwAAwH8hA0EADAELQwAAwH8gAyADQwAAgH9bIANDAACA/1tyIgAbIQMgAEULOgAMIAQgAzgCCCAEIAQpAwg3AwAgBSABQf8BcSAEEI4BIARBEGokAAv5AQICfQR/IwBBEGsiBSQAIAAoAgAhAAJ/IAK2IgMgA1wEQEMAAMB/IQNBAAwBC0MAAMB/IAMgA0MAAIB/WyADQwAAgP9bciIGGyEDIAZFCyEGQQEhByAFQQhqIABB/ABqIgggACABQf8BcUEBdGpB1gBqIgEvAQAQHwJAAkAgAyAFKgIIIgRcBH8gBCAEWw0BIAMgA1wFIAcLRQ0AIAUtAAwgBkYNAQsgCCABIAMgBhA5A0AgAC0AACIBQQRxDQEgACABQQRyOgAAIAAoAhAiAQRAIAAgAREAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsgBUEQaiQAC7UBAgN/An0CQCAAKAIAIgBB/ABqIgMgAEH6AGoiAi8BABAgIgYgAbYiBVsNACAFIAVbIgRFIAYgBlxxDQACQCAEIAVDAAAAAFsgBYtDAACAf1tyRXFFBEAgAiACLwEAQfj/A3E7AQAMAQsgAyACIAVBAxBMCwNAIAAtAAAiAkEEcQ0BIAAgAkEEcjoAACAAKAIQIgIEQCAAIAIRAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLC3wCA38BfSMAQRBrIgIkACAAKAIAIQMCfSABtiIFIAVcBEBBACEAQwAAwH8MAQtBAEECIAVDAACAf1sgBUMAAID/W3IiBBshAEMAAMB/IAUgBBsLIQUgAiAAOgAMIAIgBTgCCCACIAIpAwg3AwAgA0EBIAIQVSACQRBqJAALdAIBfQJ/IwBBEGsiAyQAIAAoAgAhBCADAn8gAbYiAiACXARAQwAAwH8hAkEADAELQwAAwH8gAiACQwAAgH9bIAJDAACA/1tyIgAbIQIgAEULOgAMIAMgAjgCCCADIAMpAwg3AwAgBEEBIAMQVSADQRBqJAALfAIDfwF9IwBBEGsiAiQAIAAoAgAhAwJ9IAG2IgUgBVwEQEEAIQBDAADAfwwBC0EAQQIgBUMAAIB/WyAFQwAAgP9bciIEGyEAQwAAwH8gBSAEGwshBSACIAA6AAwgAiAFOAIIIAIgAikDCDcDACADQQAgAhBVIAJBEGokAAt0AgF9An8jAEEQayIDJAAgACgCACEEIAMCfyABtiICIAJcBEBDAADAfyECQQAMAQtDAADAfyACIAJDAACAf1sgAkMAAID/W3IiABshAiAARQs6AAwgAyACOAIIIAMgAykDCDcDACAEQQAgAxBVIANBEGokAAt8AgN/AX0jAEEQayICJAAgACgCACEDAn0gAbYiBSAFXARAQQAhAEMAAMB/DAELQQBBAiAFQwAAgH9bIAVDAACA/1tyIgQbIQBDAADAfyAFIAQbCyEFIAIgADoADCACIAU4AgggAiACKQMINwMAIANBASACEFYgAkEQaiQAC3QCAX0CfyMAQRBrIgMkACAAKAIAIQQgAwJ/IAG2IgIgAlwEQEMAAMB/IQJBAAwBC0MAAMB/IAIgAkMAAIB/WyACQwAAgP9bciIAGyECIABFCzoADCADIAI4AgggAyADKQMINwMAIARBASADEFYgA0EQaiQAC3wCA38BfSMAQRBrIgIkACAAKAIAIQMCfSABtiIFIAVcBEBBACEAQwAAwH8MAQtBAEECIAVDAACAf1sgBUMAAID/W3IiBBshAEMAAMB/IAUgBBsLIQUgAiAAOgAMIAIgBTgCCCACIAIpAwg3AwAgA0EAIAIQViACQRBqJAALdAIBfQJ/IwBBEGsiAyQAIAAoAgAhBCADAn8gAbYiAiACXARAQwAAwH8hAkEADAELQwAAwH8gAiACQwAAgH9bIAJDAACA/1tyIgAbIQIgAEULOgAMIAMgAjgCCCADIAMpAwg3AwAgBEEAIAMQViADQRBqJAALPwEBfyMAQRBrIgEkACAAKAIAIQAgAUEDOgAMIAFBgICA/gc2AgggASABKQMINwMAIABBASABEEYgAUEQaiQAC3wCA38BfSMAQRBrIgIkACAAKAIAIQMCfSABtiIFIAVcBEBBACEAQwAAwH8MAQtBAEECIAVDAACAf1sgBUMAAID/W3IiBBshAEMAAMB/IAUgBBsLIQUgAiAAOgAMIAIgBTgCCCACIAIpAwg3AwAgA0EBIAIQRiACQRBqJAALdAIBfQJ/IwBBEGsiAyQAIAAoAgAhBCADAn8gAbYiAiACXARAQwAAwH8hAkEADAELQwAAwH8gAiACQwAAgH9bIAJDAACA/1tyIgAbIQIgAEULOgAMIAMgAjgCCCADIAMpAwg3AwAgBEEBIAMQRiADQRBqJAALPwEBfyMAQRBrIgEkACAAKAIAIQAgAUEDOgAMIAFBgICA/gc2AgggASABKQMINwMAIABBACABEEYgAUEQaiQAC3wCA38BfSMAQRBrIgIkACAAKAIAIQMCfSABtiIFIAVcBEBBACEAQwAAwH8MAQtBAEECIAVDAACAf1sgBUMAAID/W3IiBBshAEMAAMB/IAUgBBsLIQUgAiAAOgAMIAIgBTgCCCACIAIpAwg3AwAgA0EAIAIQRiACQRBqJAALdAIBfQJ/IwBBEGsiAyQAIAAoAgAhBCADAn8gAbYiAiACXARAQwAAwH8hAkEADAELQwAAwH8gAiACQwAAgH9bIAJDAACA/1tyIgAbIQIgAEULOgAMIAMgAjgCCCADIAMpAwg3AwAgBEEAIAMQRiADQRBqJAALoAECA38CfQJAIAAoAgAiAEH8AGoiAyAAQRxqIgIvAQAQICIGIAG2IgVbDQAgBSAFWyIERSAGIAZccQ0AAkAgBEUEQCACIAIvAQBB+P8DcTsBAAwBCyADIAIgBUEDEEwLA0AgAC0AACICQQRxDQEgACACQQRyOgAAIAAoAhAiAgRAIAAgAhEAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsLoAECA38CfQJAIAAoAgAiAEH8AGoiAyAAQRpqIgIvAQAQICIGIAG2IgVbDQAgBSAFWyIERSAGIAZccQ0AAkAgBEUEQCACIAIvAQBB+P8DcTsBAAwBCyADIAIgBUEDEEwLA0AgAC0AACICQQRxDQEgACACQQRyOgAAIAAoAhAiAgRAIAAgAhEAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsLPQEBfyMAQRBrIgEkACAAKAIAIQAgAUEDOgAMIAFBgICA/gc2AgggASABKQMINwMAIAAgARBrIAFBEGokAAt6AgN/AX0jAEEQayICJAAgACgCACEDAn0gAbYiBSAFXARAQQAhAEMAAMB/DAELQQBBAiAFQwAAgH9bIAVDAACA/1tyIgQbIQBDAADAfyAFIAQbCyEFIAIgADoADCACIAU4AgggAiACKQMINwMAIAMgAhBrIAJBEGokAAtyAgF9An8jAEEQayIDJAAgACgCACEEIAMCfyABtiICIAJcBEBDAADAfyECQQAMAQtDAADAfyACIAJDAACAf1sgAkMAAID/W3IiABshAiAARQs6AAwgAyACOAIIIAMgAykDCDcDACAEIAMQayADQRBqJAALoAECA38CfQJAIAAoAgAiAEH8AGoiAyAAQRhqIgIvAQAQICIGIAG2IgVbDQAgBSAFWyIERSAGIAZccQ0AAkAgBEUEQCACIAIvAQBB+P8DcTsBAAwBCyADIAIgBUEDEEwLA0AgAC0AACICQQRxDQEgACACQQRyOgAAIAAoAhAiAgRAIAAgAhEAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsLkAEBAX8CQCAAKAIAIgBBF2otAAAiAkECdkEDcSABQf8BcUYNACAAIAAvABUgAkEQdHIiAjsAFSAAIAJB///PB3EgAUEDcUESdHJBEHY6ABcDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCwuNAQEBfwJAIAAoAgAiAEEXai0AACICQQNxIAFB/wFxRg0AIAAgAC8AFSACQRB0ciICOwAVIAAgAkH///MHcSABQQNxQRB0ckEQdjoAFwNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLC0MBAX8jAEEQayICJAAgACgCACEAIAJBAzoADCACQYCAgP4HNgIIIAIgAikDCDcDACAAIAFB/wFxIAIQZSACQRBqJAALgAECA38BfSMAQRBrIgMkACAAKAIAIQQCfSACtiIGIAZcBEBBACEAQwAAwH8MAQtBAEECIAZDAACAf1sgBkMAAID/W3IiBRshAEMAAMB/IAYgBRsLIQYgAyAAOgAMIAMgBjgCCCADIAMpAwg3AwAgBCABQf8BcSADEGUgA0EQaiQAC3gCAX0CfyMAQRBrIgQkACAAKAIAIQUgBAJ/IAK2IgMgA1wEQEMAAMB/IQNBAAwBC0MAAMB/IAMgA0MAAIB/WyADQwAAgP9bciIAGyEDIABFCzoADCAEIAM4AgggBCAEKQMINwMAIAUgAUH/AXEgBBBlIARBEGokAAt3AQF/AkAgACgCACIALQAUIgJBBHZBB3EgAUH/AXFGDQAgACACQY8BcSABQQR0QfAAcXI6ABQDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCwuJAQEBfwJAIAFB/wFxIAAoAgAiAC8AFSICQQ52Rg0AIABBF2ogAiAALQAXQRB0ciICQRB2OgAAIAAgAkH//wBxIAFBDnRyOwAVA0AgAC0AACIBQQRxDQEgACABQQRyOgAAIAAoAhAiAQRAIAAgAREAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsLcAEBfwJAIAAoAgAiAC0AFCICQQNxIAFB/wFxRg0AIAAgAkH8AXEgAUEDcXI6ABQDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCwt2AQF/AkAgACgCACIALQAUIgJBAnZBA3EgAUH/AXFGDQAgACACQfMBcSABQQJ0QQxxcjoAFANAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLC48BAQF/AkAgACgCACIALwAVIgJBCHZBD3EgAUH/AXFGDQAgAEEXaiACIAAtABdBEHRyIgJBEHY6AAAgACACQf/hA3EgAUEPcUEIdHI7ABUDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCwuPAQEBfwJAIAFB/wFxIAAoAgAiAC8AFSAAQRdqLQAAQRB0ciICQfABcUEEdkYNACAAIAJBEHY6ABcgACACQY/+A3EgAUEEdEHwAXFyOwAVA0AgAC0AACIBQQRxDQEgACABQQRyOgAAIAAoAhAiAQRAIAAgAREAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsLhwEBAX8CQCAAKAIAIgAvABUgAEEXai0AAEEQdHIiAkEPcSABQf8BcUYNACAAIAJBEHY6ABcgACACQfD/A3EgAUEPcXI7ABUDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCwtDAQF/IwBBEGsiAiQAIAAoAgAhACACQQM6AAwgAkGAgID+BzYCCCACIAIpAwg3AwAgACABQf8BcSACEGcgAkEQaiQAC4ABAgN/AX0jAEEQayIDJAAgACgCACEEAn0gArYiBiAGXARAQQAhAEMAAMB/DAELQQBBAiAGQwAAgH9bIAZDAACA/1tyIgUbIQBDAADAfyAGIAUbCyEGIAMgADoADCADIAY4AgggAyADKQMINwMAIAQgAUH/AXEgAxBnIANBEGokAAt4AgF9An8jAEEQayIEJAAgACgCACEFIAQCfyACtiIDIANcBEBDAADAfyEDQQAMAQtDAADAfyADIANDAACAf1sgA0MAAID/W3IiABshAyAARQs6AAwgBCADOAIIIAQgBCkDCDcDACAFIAFB/wFxIAQQZyAEQRBqJAALjwEBAX8CQCAAKAIAIgAvABUiAkEMdkEDcSABQf8BcUYNACAAQRdqIAIgAC0AF0EQdHIiAkEQdjoAACAAIAJB/58DcSABQQNxQQx0cjsAFQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLC5ABAQF/AkAgACgCACIAQRdqLQAAIgJBBHZBAXEgAUH/AXFGDQAgACAALwAVIAJBEHRyIgI7ABUgACACQf//vwdxIAFBAXFBFHRyQRB2OgAXA0AgAC0AACIBQQRxDQEgACABQQRyOgAAIAAoAhAiAQRAIAAgAREAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsL9g0CCH8CfSMAQRBrIgIkAAJAAkAgASgCACIFLQAUIAAoAgAiAS0AFHNB/wBxDQAgBS8AFSAFLQAXQRB0ciABLwAVIAEtABdBEHRyc0H//z9xDQAgBUH8AGohByABQfwAaiEIAkAgAS8AGCIAQQdxRQRAIAUtABhBB3FFDQELIAggABAgIgogByAFLwAYECAiC1sNACAKIApbIAsgC1tyDQELAkAgAS8AGiIAQQdxRQRAIAUtABpBB3FFDQELIAggABAgIgogByAFLwAaECAiC1sNACAKIApbIAsgC1tyDQELAkAgAS8AHCIAQQdxRQRAIAUtABxBB3FFDQELIAggABAgIgogByAFLwAcECAiC1sNACAKIApbIAsgC1tyDQELAkAgAS8AHiIAQQdxRQRAIAUtAB5BB3FFDQELIAJBCGogCCAAEB8gAiAHIAUvAB4QH0EBIQAgAioCCCIKIAIqAgAiC1wEfyAKIApbDQIgCyALXAUgAAtFDQEgAi0ADCACLQAERw0BCyAFQSBqIQAgAUEgaiEGA0ACQCAGIANBAXRqLwAAIgRBB3FFBEAgAC0AAEEHcUUNAQsgAkEIaiAIIAQQHyACIAcgAC8AABAfQQEhBCACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSAEC0UNAiACLQAMIAItAARHDQILIABBAmohACADQQFqIgNBCUcNAAsgBUEyaiEAIAFBMmohBkEAIQMDQAJAIAYgA0EBdGovAAAiBEEHcUUEQCAALQAAQQdxRQ0BCyACQQhqIAggBBAfIAIgByAALwAAEB9BASEEIAIqAggiCiACKgIAIgtcBH8gCiAKWw0DIAsgC1wFIAQLRQ0CIAItAAwgAi0ABEcNAgsgAEECaiEAIANBAWoiA0EJRw0ACyAFQcQAaiEAIAFBxABqIQZBACEDA0ACQCAGIANBAXRqLwAAIgRBB3FFBEAgAC0AAEEHcUUNAQsgAkEIaiAIIAQQHyACIAcgAC8AABAfQQEhBCACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSAEC0UNAiACLQAMIAItAARHDQILIABBAmohACADQQFqIgNBCUcNAAsgBUHWAGohACABQdYAaiEGQQAhAwNAAkAgBiADQQF0ai8AACIEQQdxRQRAIAAtAABBB3FFDQELIAJBCGogCCAEEB8gAiAHIAAvAAAQH0EBIQQgAioCCCIKIAIqAgAiC1wEfyAKIApbDQMgCyALXAUgBAtFDQIgAi0ADCACLQAERw0CCyAAQQJqIQAgA0EBaiIDQQlHDQALIAVB6ABqIQAgAUHoAGohBkEAIQMDQAJAIAYgA0EBdGovAAAiBEEHcUUEQCAALQAAQQdxRQ0BCyACQQhqIAggBBAfIAIgByAALwAAEB9BASEEIAIqAggiCiACKgIAIgtcBH8gCiAKWw0DIAsgC1wFIAQLRQ0CIAItAAwgAi0ABEcNAgsgAEECaiEAIANBAWoiA0EDRw0ACyAFQe4AaiEAIAFB7gBqIQlBACEEQQAhAwNAAkAgCSADQQF0ai8AACIGQQdxRQRAIAAtAABBB3FFDQELIAJBCGogCCAGEB8gAiAHIAAvAAAQH0EBIQMgAioCCCIKIAIqAgAiC1wEfyAKIApbDQMgCyALXAUgAwtFDQIgAi0ADCACLQAERw0CCyAAQQJqIQBBASEDIAQhBkEBIQQgBkUNAAsgBUHyAGohACABQfIAaiEJQQAhBEEAIQMDQAJAIAkgA0EBdGovAAAiBkEHcUUEQCAALQAAQQdxRQ0BCyACQQhqIAggBhAfIAIgByAALwAAEB9BASEDIAIqAggiCiACKgIAIgtcBH8gCiAKWw0DIAsgC1wFIAMLRQ0CIAItAAwgAi0ABEcNAgsgAEECaiEAQQEhAyAEIQZBASEEIAZFDQALIAVB9gBqIQAgAUH2AGohCUEAIQRBACEDA0ACQCAJIANBAXRqLwAAIgZBB3FFBEAgAC0AAEEHcUUNAQsgAkEIaiAIIAYQHyACIAcgAC8AABAfQQEhAyACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSADC0UNAiACLQAMIAItAARHDQILIABBAmohAEEBIQMgBCEGQQEhBCAGRQ0ACyABLwB6IgBBB3FFBEAgBS0AekEHcUUNAgsgCCAAECAiCiAHIAUvAHoQICILWw0BIAogClsNACALIAtcDQELIAFBFGogBUEUakHoABArGiABQfwAaiAFQfwAahCgAQNAIAEtAAAiAEEEcQ0BIAEgAEEEcjoAACABKAIQIgAEQCABIAARAAALIAFBgICA/gc2ApwBIAEoAuQDIgENAAsLIAJBEGokAAvGAwEEfyMAQaAEayICJAAgACgCBCEBIABBADYCBCABBEAgASABKAIAKAIEEQAACyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALAkAgACgCACIAKALoAyAAKALsA0YEQCAAKALkAw0BIAAgAkEYaiAAKAL0AxBcIgEpAgA3AgAgACABKAIQNgIQIAAgASkCCDcCCCAAQRRqIAFBFGpB6AAQKxogACABKQKMATcCjAEgACABKQKEATcChAEgACABKQJ8NwJ8IAEoApQBIQQgAUEANgKUASAAKAKUASEDIAAgBDYClAEgAwRAIAMQWwsgAEGYAWogAUGYAWpB0AIQKxogACgC6AMiAwRAIAAgAzYC7AMgAxAjCyAAIAEoAugDNgLoAyAAIAEoAuwDNgLsAyAAIAEoAvADNgLwAyABQQA2AvADIAFCADcC6AMgACABKQL8AzcC/AMgACABKQL0AzcC9AMgACABKAKEBDYChAQgASgClAEhACABQQA2ApQBIAAEQCAAEFsLIAJBoARqJAAPCyACQfAcNgIQIABBBUHYJSACQRBqECwQJAALIAJB5hE2AgAgAEEFQdglIAIQLBAkAAsLAEEMEB4gABCiAQsLAEEMEB5BABCiAQsNACAAKAIALQAIQQFxCwoAIAAoAgAoAhQLGQAgAUH/AXEEQBACAAsgACgCACgCEEEBcQsYACAAKAIAIgAgAC0ACEH+AXEgAXI6AAgLJgAgASAAKAIAIgAoAhRHBEAgACABNgIUIAAgACgCDEEBajYCDAsLkgEBAn8jAEEQayICJAAgACgCACEAIAFDAAAAAGAEQCABIAAqAhhcBEAgACABOAIYIAAgACgCDEEBajYCDAsgAkEQaiQADwsgAkGIFDYCACMAQRBrIgMkACADIAI2AgwCQCAARQRAQbgwQdglIAIQSRoMAQsgAEEAQQVB2CUgAiAAKAIEEQ0AGgsgA0EQaiQAECQACz8AIAFB/wFxRQRAIAIgACgCACIAKAIQIgFBAXFHBEAgACABQX5xIAJyNgIQIAAgACgCDEEBajYCDAsPCxACAAsL4CYjAEGACAuBHk9ubHkgbGVhZiBub2RlcyB3aXRoIGN1c3RvbSBtZWFzdXJlIGZ1bmN0aW9ucyBzaG91bGQgbWFudWFsbHkgbWFyayB0aGVtc2VsdmVzIGFzIGRpcnR5AGlzRGlydHkAbWFya0RpcnR5AGRlc3Ryb3kAc2V0RGlzcGxheQBnZXREaXNwbGF5AHNldEZsZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABzZXRGbGV4R3JvdwBnZXRGbGV4R3JvdwBzZXRPdmVyZmxvdwBnZXRPdmVyZmxvdwBoYXNOZXdMYXlvdXQAY2FsY3VsYXRlTGF5b3V0AGdldENvbXB1dGVkTGF5b3V0AHVuc2lnbmVkIHNob3J0AGdldENoaWxkQ291bnQAdW5zaWduZWQgaW50AHNldEp1c3RpZnlDb250ZW50AGdldEp1c3RpZnlDb250ZW50AGF2YWlsYWJsZUhlaWdodCBpcyBpbmRlZmluaXRlIHNvIGhlaWdodFNpemluZ01vZGUgbXVzdCBiZSBTaXppbmdNb2RlOjpNYXhDb250ZW50AGF2YWlsYWJsZVdpZHRoIGlzIGluZGVmaW5pdGUgc28gd2lkdGhTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABzZXRBbGlnbkNvbnRlbnQAZ2V0QWxpZ25Db250ZW50AGdldFBhcmVudABpbXBsZW1lbnQAc2V0TWF4SGVpZ2h0UGVyY2VudABzZXRIZWlnaHRQZXJjZW50AHNldE1pbkhlaWdodFBlcmNlbnQAc2V0RmxleEJhc2lzUGVyY2VudABzZXRHYXBQZXJjZW50AHNldFBvc2l0aW9uUGVyY2VudABzZXRNYXJnaW5QZXJjZW50AHNldE1heFdpZHRoUGVyY2VudABzZXRXaWR0aFBlcmNlbnQAc2V0TWluV2lkdGhQZXJjZW50AHNldFBhZGRpbmdQZXJjZW50AGhhbmRsZS50eXBlKCkgPT0gU3R5bGVWYWx1ZUhhbmRsZTo6VHlwZTo6UG9pbnQgfHwgaGFuZGxlLnR5cGUoKSA9PSBTdHlsZVZhbHVlSGFuZGxlOjpUeXBlOjpQZXJjZW50AGNyZWF0ZURlZmF1bHQAdW5pdAByaWdodABoZWlnaHQAc2V0TWF4SGVpZ2h0AGdldE1heEhlaWdodABzZXRIZWlnaHQAZ2V0SGVpZ2h0AHNldE1pbkhlaWdodABnZXRNaW5IZWlnaHQAZ2V0Q29tcHV0ZWRIZWlnaHQAZ2V0Q29tcHV0ZWRSaWdodABsZWZ0AGdldENvbXB1dGVkTGVmdAByZXNldABfX2Rlc3RydWN0AGZsb2F0AHVpbnQ2NF90AHVzZVdlYkRlZmF1bHRzAHNldFVzZVdlYkRlZmF1bHRzAHNldEFsaWduSXRlbXMAZ2V0QWxpZ25JdGVtcwBzZXRGbGV4QmFzaXMAZ2V0RmxleEJhc2lzAENhbm5vdCBnZXQgbGF5b3V0IHByb3BlcnRpZXMgb2YgbXVsdGktZWRnZSBzaG9ydGhhbmRzAHNldFBvaW50U2NhbGVGYWN0b3IATWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBEaXJ0aWVkQ2FsbGJhY2tXcmFwcGVyAENhbm5vdCByZXNldCBhIG5vZGUgc3RpbGwgYXR0YWNoZWQgdG8gYSBvd25lcgBzZXRCb3JkZXIAZ2V0Qm9yZGVyAGdldENvbXB1dGVkQm9yZGVyAGdldE51bWJlcgBoYW5kbGUudHlwZSgpID09IFN0eWxlVmFsdWVIYW5kbGU6OlR5cGU6Ok51bWJlcgB1bnNpZ25lZCBjaGFyAHRvcABnZXRDb21wdXRlZFRvcABzZXRGbGV4V3JhcABnZXRGbGV4V3JhcABzZXRHYXAAZ2V0R2FwACVwAHNldEhlaWdodEF1dG8Ac2V0RmxleEJhc2lzQXV0bwBzZXRQb3NpdGlvbkF1dG8Ac2V0TWFyZ2luQXV0bwBzZXRXaWR0aEF1dG8AU2NhbGUgZmFjdG9yIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHplcm8Ac2V0QXNwZWN0UmF0aW8AZ2V0QXNwZWN0UmF0aW8Ac2V0UG9zaXRpb24AZ2V0UG9zaXRpb24Abm90aWZ5T25EZXN0cnVjdGlvbgBzZXRGbGV4RGlyZWN0aW9uAGdldEZsZXhEaXJlY3Rpb24Ac2V0RGlyZWN0aW9uAGdldERpcmVjdGlvbgBzZXRNYXJnaW4AZ2V0TWFyZ2luAGdldENvbXB1dGVkTWFyZ2luAG1hcmtMYXlvdXRTZWVuAG5hbgBib3R0b20AZ2V0Q29tcHV0ZWRCb3R0b20AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0RmxleFNocmluawBnZXRGbGV4U2hyaW5rAHNldEFsd2F5c0Zvcm1zQ29udGFpbmluZ0Jsb2NrAE1lYXN1cmVDYWxsYmFjawBEaXJ0aWVkQ2FsbGJhY2sAZ2V0TGVuZ3RoAHdpZHRoAHNldE1heFdpZHRoAGdldE1heFdpZHRoAHNldFdpZHRoAGdldFdpZHRoAHNldE1pbldpZHRoAGdldE1pbldpZHRoAGdldENvbXB1dGVkV2lkdGgAcHVzaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1NtYWxsVmFsdWVCdWZmZXIuaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1N0eWxlVmFsdWVQb29sLmgAdW5zaWduZWQgbG9uZwBzZXRCb3hTaXppbmcAZ2V0Qm94U2l6aW5nAHN0ZDo6d3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBzZXRQYWRkaW5nAGdldFBhZGRpbmcAZ2V0Q29tcHV0ZWRQYWRkaW5nAFRyaWVkIHRvIGNvbnN0cnVjdCBZR05vZGUgd2l0aCBudWxsIGNvbmZpZwBBdHRlbXB0aW5nIHRvIGNvbnN0cnVjdCBOb2RlIHdpdGggbnVsbCBjb25maWcAY3JlYXRlV2l0aENvbmZpZwBpbmYAc2V0QWxpZ25TZWxmAGdldEFsaWduU2VsZgBTaXplAHZhbHVlAFZhbHVlAGNyZWF0ZQBtZWFzdXJlAHNldFBvc2l0aW9uVHlwZQBnZXRQb3NpdGlvblR5cGUAaXNSZWZlcmVuY2VCYXNlbGluZQBzZXRJc1JlZmVyZW5jZUJhc2VsaW5lAGNvcHlTdHlsZQBkb3VibGUATm9kZQBleHRlbmQAaW5zZXJ0Q2hpbGQAZ2V0Q2hpbGQAcmVtb3ZlQ2hpbGQAdm9pZABzZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZABpc0V4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGRpcnRpZWQAQ2Fubm90IHJlc2V0IGEgbm9kZSB3aGljaCBzdGlsbCBoYXMgY2hpbGRyZW4gYXR0YWNoZWQAdW5zZXRNZWFzdXJlRnVuYwB1bnNldERpcnRpZWRGdW5jAHNldEVycmF0YQBnZXRFcnJhdGEATWVhc3VyZSBmdW5jdGlvbiByZXR1cm5lZCBhbiBpbnZhbGlkIGRpbWVuc2lvbiB0byBZb2dhOiBbd2lkdGg9JWYsIGhlaWdodD0lZl0ARXhwZWN0IGN1c3RvbSBiYXNlbGluZSBmdW5jdGlvbiB0byBub3QgcmV0dXJuIE5hTgBOQU4ASU5GAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVk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\";if(!ua(H)){var va=H;H=h.locateFile?h.locateFile(va,q):q+va}\nfunction wa(){var a=H;try{if(a==H&&w)return new Uint8Array(w);if(ua(a))try{var b=xa(a.slice(37)),c=new Uint8Array(b.length);for(a=0;a<b.length;++a)c[a]=b.charCodeAt(a);var d=c}catch(f){throw Error(\"Converting base64 string to bytes failed.\");}else d=void 0;var e=d;if(e)return e;throw\"both async and sync fetching of the wasm failed\";}catch(f){x(f)}}\nfunction ya(){return w||\"function\"!=typeof fetch?Promise.resolve().then(function(){return wa()}):fetch(H,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+H+\"'\";return a.arrayBuffer()}).catch(function(){return wa()})}function za(a){for(;0<a.length;)a.shift()(h)}function Aa(a){if(void 0===a)return\"_unknown\";a=a.replace(/[^a-zA-Z0-9_]/g,\"$\");var b=a.charCodeAt(0);return 48<=b&&57>=b?\"_\"+a:a}\nfunction Ba(a,b){a=Aa(a);return function(){return b.apply(this,arguments)}}var J=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Ca=[];function Da(a){var b=Error,c=Ba(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+\"\\n\"+d.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+\": \"+this.message};return c}var K=void 0;\nfunction L(a){throw new K(a);}var M=a=>{a||L(\"Cannot use deleted val. handle = \"+a);return J[a].value},Ea=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ca.length?Ca.pop():J.length;J[b]={ga:1,value:a};return b}},Fa=void 0,Ga=void 0;function N(a){for(var b=\"\";A[a];)b+=Ga[A[a++]];return b}var O=[];function Ha(){for(;O.length;){var a=O.pop();a.M.$=!1;a[\"delete\"]()}}var P=void 0,Q={};\nfunction Ia(a,b){for(void 0===b&&L(\"ptr should not be undefined\");a.R;)b=a.ba(b),a=a.R;return b}var R={};function Ja(a){a=Ka(a);var b=N(a);S(a);return b}function La(a,b){var c=R[a];void 0===c&&L(b+\" has unknown type \"+Ja(a));return c}function Ma(){}var Na=!1;function Oa(a){--a.count.value;0===a.count.value&&(a.T?a.U.W(a.T):a.P.N.W(a.O))}function Pa(a,b,c){if(b===c)return a;if(void 0===c.R)return null;a=Pa(a,b,c.R);return null===a?null:c.na(a)}var Qa={};function Ra(a,b){b=Ia(a,b);return Q[b]}\nvar Sa=void 0;function Ta(a){throw new Sa(a);}function Ua(a,b){b.P&&b.O||Ta(\"makeClassHandle requires ptr and ptrType\");!!b.U!==!!b.T&&Ta(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return T(Object.create(a,{M:{value:b}}))}function T(a){if(\"undefined\"===typeof FinalizationRegistry)return T=b=>b,a;Na=new FinalizationRegistry(b=>{Oa(b.M)});T=b=>{var c=b.M;c.T&&Na.register(b,{M:c},b);return b};Ma=b=>{Na.unregister(b)};return T(a)}var Va={};\nfunction Wa(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Xa(a){return this.fromWireType(D[a>>2])}var U={},Ya={};function V(a,b,c){function d(k){k=c(k);k.length!==a.length&&Ta(\"Mismatched type converter count\");for(var m=0;m<a.length;++m)W(a[m],k[m])}a.forEach(function(k){Ya[k]=b});var e=Array(b.length),f=[],g=0;b.forEach((k,m)=>{R.hasOwnProperty(k)?e[m]=R[k]:(f.push(k),U.hasOwnProperty(k)||(U[k]=[]),U[k].push(()=>{e[m]=R[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)}\nfunction Za(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+a);}}\nfunction W(a,b,c={}){if(!(\"argPackAdvance\"in b))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");var d=b.name;a||L('type \"'+d+'\" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.ua)return;L(\"Cannot register type '\"+d+\"' twice\")}R[a]=b;delete Ya[a];U.hasOwnProperty(a)&&(b=U[a],delete U[a],b.forEach(e=>e()))}function $a(a){L(a.M.P.N.name+\" instance already deleted\")}function X(){}\nfunction ab(a,b,c){if(void 0===a[b].S){var d=a[b];a[b]=function(){a[b].S.hasOwnProperty(arguments.length)||L(\"Function '\"+c+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+a[b].S+\")!\");return a[b].S[arguments.length].apply(this,arguments)};a[b].S=[];a[b].S[d.Z]=d}}\nfunction bb(a,b){h.hasOwnProperty(a)?(L(\"Cannot register public name '\"+a+\"' twice\"),ab(h,a,a),h.hasOwnProperty(void 0)&&L(\"Cannot register multiple overloads of a function with the same number of arguments (undefined)!\"),h[a].S[void 0]=b):h[a]=b}function cb(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.X=c;this.W=d;this.R=e;this.pa=f;this.ba=g;this.na=k;this.ja=[]}\nfunction db(a,b,c){for(;b!==c;)b.ba||L(\"Expected null or instance of \"+c.name+\", got an instance of \"+b.name),a=b.ba(a),b=b.R;return a}function eb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction gb(a,b){if(null===b){this.ea&&L(\"null is not a valid \"+this.name);if(this.da){var c=this.fa();null!==a&&a.push(this.W,c);return c}return 0}b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);!this.ca&&b.M.P.ca&&L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);c=db(b.M.O,b.M.P.N,this.N);if(this.da)switch(void 0===b.M.T&&L(\"Passing raw pointer to smart pointer is illegal\"),\nthis.Ba){case 0:b.M.U===this?c=b.M.T:L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);break;case 1:c=b.M.T;break;case 2:if(b.M.U===this)c=b.M.T;else{var d=b.clone();c=this.xa(c,Ea(function(){d[\"delete\"]()}));null!==a&&a.push(this.W,c)}break;default:L(\"Unsupporting sharing policy\")}return c}\nfunction hb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);b.M.P.ca&&L(\"Cannot convert argument of type \"+b.M.P.name+\" to parameter type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction Y(a,b,c,d){this.name=a;this.N=b;this.ea=c;this.ca=d;this.da=!1;this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0;void 0!==b.R?this.toWireType=gb:(this.toWireType=d?eb:hb,this.V=null)}function ib(a,b){h.hasOwnProperty(a)||Ta(\"Replacing nonexistant public symbol\");h[a]=b;h[a].Z=void 0}\nfunction jb(a,b){var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes(\"j\")){var d=h[\"dynCall_\"+a];d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)}else d=oa.get(b).apply(null,c);return d}}function Z(a,b){a=N(a);var c=a.includes(\"j\")?jb(a,b):oa.get(b);\"function\"!=typeof c&&L(\"unknown function pointer with signature \"+a+\": \"+b);return c}var mb=void 0;\nfunction nb(a,b){function c(f){e[f]||R[f]||(Ya[f]?Ya[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new mb(a+\": \"+d.map(Ja).join([\", \"]));}\nfunction ob(a,b,c,d,e){var f=b.length;2>f&&L(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var g=null!==b[1]&&null!==c,k=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].V){k=!0;break}var m=\"void\"!==b[0].name,l=f-2,n=Array(l),p=[],r=[];return function(){arguments.length!==l&&L(\"function \"+a+\" called with \"+arguments.length+\" arguments, expected \"+l+\" args!\");r.length=0;p.length=g?2:1;p[0]=e;if(g){var u=b[1].toWireType(r,this);p[1]=u}for(var t=0;t<l;++t)n[t]=\nb[t+2].toWireType(r,arguments[t]),p.push(n[t]);t=d.apply(null,p);if(k)Wa(r);else for(var y=g?1:2;y<b.length;y++){var B=1===y?u:n[y-2];null!==b[y].V&&b[y].V(B)}u=m?b[0].fromWireType(t):void 0;return u}}function pb(a,b){for(var c=[],d=0;d<a;d++)c.push(E[b+4*d>>2]);return c}function qb(a){4<a&&0===--J[a].ga&&(J[a]=void 0,Ca.push(a))}function fb(a){if(null===a)return\"null\";var b=typeof a;return\"object\"===b||\"array\"===b||\"function\"===b?a.toString():\"\"+a}\nfunction rb(a,b){switch(b){case 2:return function(c){return this.fromWireType(la[c>>2])};case 3:return function(c){return this.fromWireType(ma[c>>3])};default:throw new TypeError(\"Unknown float type: \"+a);}}\nfunction sb(a,b,c){switch(b){case 0:return c?function(d){return ja[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ka[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw new TypeError(\"Unknown integer type: \"+a);}}function tb(a,b){for(var c=\"\",d=0;!(d>=b/2);++d){var e=C[a+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}\nfunction ub(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b>>1]=a.charCodeAt(e),b+=2;C[b>>1]=0;return b-d}function vb(a){return 2*a.length}function wb(a,b){for(var c=0,d=\"\";!(c>=b/4);){var e=D[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}\nfunction xb(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}D[b>>2]=f;b+=4;if(b+4>c)break}D[b>>2]=0;return b-d}function yb(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var zb={};function Ab(a){var b=zb[a];return void 0===b?N(a):b}var Bb=[];function Cb(a){var b=Bb.length;Bb.push(a);return b}\nfunction Db(a,b){for(var c=Array(a),d=0;d<a;++d)c[d]=La(E[b+4*d>>2],\"parameter \"+d);return c}var Eb=[],Fb=[null,[],[]];K=h.BindingError=Da(\"BindingError\");h.count_emval_handles=function(){for(var a=0,b=5;b<J.length;++b)void 0!==J[b]&&++a;return a};h.get_first_emval=function(){for(var a=5;a<J.length;++a)if(void 0!==J[a])return J[a];return null};Fa=h.PureVirtualError=Da(\"PureVirtualError\");for(var Gb=Array(256),Hb=0;256>Hb;++Hb)Gb[Hb]=String.fromCharCode(Hb);Ga=Gb;h.getInheritedInstanceCount=function(){return Object.keys(Q).length};\nh.getLiveInheritedInstances=function(){var a=[],b;for(b in Q)Q.hasOwnProperty(b)&&a.push(Q[b]);return a};h.flushPendingDeletes=Ha;h.setDelayFunction=function(a){P=a;O.length&&P&&P(Ha)};Sa=h.InternalError=Da(\"InternalError\");X.prototype.isAliasOf=function(a){if(!(this instanceof X&&a instanceof X))return!1;var b=this.M.P.N,c=this.M.O,d=a.M.P.N;for(a=a.M.O;b.R;)c=b.ba(c),b=b.R;for(;d.R;)a=d.ba(a),d=d.R;return b===d&&c===a};\nX.prototype.clone=function(){this.M.O||$a(this);if(this.M.aa)return this.M.count.value+=1,this;var a=T,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.M;a=a(c.call(b,d,{M:{value:{count:e.count,$:e.$,aa:e.aa,O:e.O,P:e.P,T:e.T,U:e.U}}}));a.M.count.value+=1;a.M.$=!1;return a};X.prototype[\"delete\"]=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");Ma(this);Oa(this.M);this.M.aa||(this.M.T=void 0,this.M.O=void 0)};X.prototype.isDeleted=function(){return!this.M.O};\nX.prototype.deleteLater=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");O.push(this);1===O.length&&P&&P(Ha);this.M.$=!0;return this};Y.prototype.qa=function(a){this.ka&&(a=this.ka(a));return a};Y.prototype.ha=function(a){this.W&&this.W(a)};Y.prototype.argPackAdvance=8;Y.prototype.readValueFromPointer=Xa;Y.prototype.deleteObject=function(a){if(null!==a)a[\"delete\"]()};\nY.prototype.fromWireType=function(a){function b(){return this.da?Ua(this.N.X,{P:this.wa,O:c,U:this,T:a}):Ua(this.N.X,{P:this,O:a})}var c=this.qa(a);if(!c)return this.ha(a),null;var d=Ra(this.N,c);if(void 0!==d){if(0===d.M.count.value)return d.M.O=c,d.M.T=a,d.clone();d=d.clone();this.ha(a);return d}d=this.N.pa(c);d=Qa[d];if(!d)return b.call(this);d=this.ca?d.la:d.pointerType;var e=Pa(c,this.N,d.N);return null===e?b.call(this):this.da?Ua(d.N.X,{P:d,O:e,U:this,T:a}):Ua(d.N.X,{P:d,O:e})};\nmb=h.UnboundTypeError=Da(\"UnboundTypeError\");\nvar xa=\"function\"==typeof atob?atob:function(a){var b=\"\",c=0;a=a.replace(/[^A-Za-z0-9\\+\\/=]/g,\"\");do{var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var f=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));d=d<<2|e>>4;\ne=(e&15)<<4|f>>2;var k=(f&3)<<6|g;b+=String.fromCharCode(d);64!==f&&(b+=String.fromCharCode(e));64!==g&&(b+=String.fromCharCode(k))}while(c<a.length);return b},Jb={l:function(a,b,c,d){x(\"Assertion failed: \"+(a?z(A,a):\"\")+\", at: \"+[b?b?z(A,b):\"\":\"unknown filename\",c,d?d?z(A,d):\"\":\"unknown function\"])},q:function(a,b,c){a=N(a);b=La(b,\"wrapper\");c=M(c);var d=[].slice,e=b.N,f=e.X,g=e.R.X,k=e.R.constructor;a=Ba(a,function(){e.R.ja.forEach(function(l){if(this[l]===g[l])throw new Fa(\"Pure virtual function \"+\nl+\" must be implemented in JavaScript\");}.bind(this));Object.defineProperty(this,\"__parent\",{value:f});this.__construct.apply(this,d.call(arguments))});f.__construct=function(){this===f&&L(\"Pass correct 'this' to __construct\");var l=k.implement.apply(void 0,[this].concat(d.call(arguments)));Ma(l);var n=l.M;l.notifyOnDestruction();n.aa=!0;Object.defineProperties(this,{M:{value:n}});T(this);l=n.O;l=Ia(e,l);Q.hasOwnProperty(l)?L(\"Tried to register registered instance: \"+l):Q[l]=this};f.__destruct=function(){this===\nf&&L(\"Pass correct 'this' to __destruct\");Ma(this);var l=this.M.O;l=Ia(e,l);Q.hasOwnProperty(l)?delete Q[l]:L(\"Tried to unregister unregistered instance: \"+l)};a.prototype=Object.create(f);for(var m in c)a.prototype[m]=c[m];return Ea(a)},j:function(a){var b=Va[a];delete Va[a];var c=b.fa,d=b.W,e=b.ia,f=e.map(g=>g.ta).concat(e.map(g=>g.za));V([a],f,g=>{var k={};e.forEach((m,l)=>{var n=g[l],p=m.ra,r=m.sa,u=g[l+e.length],t=m.ya,y=m.Aa;k[m.oa]={read:B=>n.fromWireType(p(r,B)),write:(B,ba)=>{var I=[];t(y,\nB,u.toWireType(I,ba));Wa(I)}}});return[{name:b.name,fromWireType:function(m){var l={},n;for(n in k)l[n]=k[n].read(m);d(m);return l},toWireType:function(m,l){for(var n in k)if(!(n in l))throw new TypeError('Missing field: \"'+n+'\"');var p=c();for(n in k)k[n].write(p,l[n]);null!==m&&m.push(d,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:d}]})},v:function(){},B:function(a,b,c,d,e){var f=Za(c);b=N(b);W(a,{name:b,fromWireType:function(g){return!!g},toWireType:function(g,k){return k?d:e},argPackAdvance:8,\nreadValueFromPointer:function(g){if(1===c)var k=ja;else if(2===c)k=C;else if(4===c)k=D;else throw new TypeError(\"Unknown boolean type size: \"+b);return this.fromWireType(k[g>>f])},V:null})},f:function(a,b,c,d,e,f,g,k,m,l,n,p,r){n=N(n);f=Z(e,f);k&&(k=Z(g,k));l&&(l=Z(m,l));r=Z(p,r);var u=Aa(n);bb(u,function(){nb(\"Cannot construct \"+n+\" due to unbound types\",[d])});V([a,b,c],d?[d]:[],function(t){t=t[0];if(d){var y=t.N;var B=y.X}else B=X.prototype;t=Ba(u,function(){if(Object.getPrototypeOf(this)!==ba)throw new K(\"Use 'new' to construct \"+\nn);if(void 0===I.Y)throw new K(n+\" has no accessible constructor\");var kb=I.Y[arguments.length];if(void 0===kb)throw new K(\"Tried to invoke ctor of \"+n+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(I.Y).toString()+\") parameters instead!\");return kb.apply(this,arguments)});var ba=Object.create(B,{constructor:{value:t}});t.prototype=ba;var I=new cb(n,t,ba,r,y,f,k,l);y=new Y(n,I,!0,!1);B=new Y(n+\"*\",I,!1,!1);var lb=new Y(n+\" const*\",I,!1,!0);Qa[a]={pointerType:B,\nla:lb};ib(u,t);return[y,B,lb]})},d:function(a,b,c,d,e,f,g){var k=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(m){function l(){nb(\"Cannot call \"+n+\" due to unbound types\",k)}m=m[0];var n=m.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);var p=m.N.constructor;void 0===p[b]?(l.Z=c-1,p[b]=l):(ab(p,b,n),p[b].S[c-1]=l);V([],k,function(r){r=ob(n,[r[0],null].concat(r.slice(1)),null,f,g);void 0===p[b].S?(r.Z=c-1,p[b]=r):p[b].S[c-1]=r;return[]});return[]})},p:function(a,b,c,d,e,f){0<b||x();var g=pb(b,\nc);e=Z(d,e);V([],[a],function(k){k=k[0];var m=\"constructor \"+k.name;void 0===k.N.Y&&(k.N.Y=[]);if(void 0!==k.N.Y[b-1])throw new K(\"Cannot register multiple constructors with identical number of parameters (\"+(b-1)+\") for class '\"+k.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");k.N.Y[b-1]=()=>{nb(\"Cannot construct \"+k.name+\" due to unbound types\",g)};V([],g,function(l){l.splice(1,0,null);k.N.Y[b-1]=ob(m,l,null,e,f);return[]});return[]})},\na:function(a,b,c,d,e,f,g,k){var m=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(l){function n(){nb(\"Cannot call \"+p+\" due to unbound types\",m)}l=l[0];var p=l.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);k&&l.N.ja.push(b);var r=l.N.X,u=r[b];void 0===u||void 0===u.S&&u.className!==l.name&&u.Z===c-2?(n.Z=c-2,n.className=l.name,r[b]=n):(ab(r,b,p),r[b].S[c-2]=n);V([],m,function(t){t=ob(p,t,l,f,g);void 0===r[b].S?(t.Z=c-2,r[b]=t):r[b].S[c-2]=t;return[]});return[]})},A:function(a,b){b=N(b);W(a,\n{name:b,fromWireType:function(c){var d=M(c);qb(c);return d},toWireType:function(c,d){return Ea(d)},argPackAdvance:8,readValueFromPointer:Xa,V:null})},n:function(a,b,c){c=Za(c);b=N(b);W(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:rb(b,c),V:null})},e:function(a,b,c,d,e){b=N(b);-1===e&&(e=4294967295);e=Za(c);var f=k=>k;if(0===d){var g=32-8*c;f=k=>k<<g>>>g}c=b.includes(\"unsigned\")?function(k,m){return m>>>0}:function(k,m){return m};\nW(a,{name:b,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:sb(b,e,0!==d),V:null})},b:function(a,b,c){function d(f){f>>=2;var g=E;return new e(ia,g[f+1],g[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=N(c);W(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0})},o:function(a,b){b=N(b);var c=\"std::string\"===b;W(a,{name:b,fromWireType:function(d){var e=E[d>>2],f=d+4;if(c)for(var g=f,k=0;k<=e;++k){var m=\nf+k;if(k==e||0==A[m]){g=g?z(A,g,m-g):\"\";if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=m+1}}else{l=Array(e);for(k=0;k<e;++k)l[k]=String.fromCharCode(A[f+k]);l=l.join(\"\")}S(d);return l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f,g=\"string\"==typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||L(\"Cannot pass non-string to std::string\");if(c&&g){var k=0;for(f=0;f<e.length;++f){var m=e.charCodeAt(f);127>=m?k++:2047>=\nm?k+=2:55296<=m&&57343>=m?(k+=4,++f):k+=3}f=k}else f=e.length;k=Ib(4+f+1);m=k+4;E[k>>2]=f;if(c&&g){if(g=m,m=f+1,f=A,0<m){m=g+m-1;for(var l=0;l<e.length;++l){var n=e.charCodeAt(l);if(55296<=n&&57343>=n){var p=e.charCodeAt(++l);n=65536+((n&1023)<<10)|p&1023}if(127>=n){if(g>=m)break;f[g++]=n}else{if(2047>=n){if(g+1>=m)break;f[g++]=192|n>>6}else{if(65535>=n){if(g+2>=m)break;f[g++]=224|n>>12}else{if(g+3>=m)break;f[g++]=240|n>>18;f[g++]=128|n>>12&63}f[g++]=128|n>>6&63}f[g++]=128|n&63}}f[g]=0}}else if(g)for(g=\n0;g<f;++g)l=e.charCodeAt(g),255<l&&(S(m),L(\"String has UTF-16 code units that do not fit in 8 bits\")),A[m+g]=l;else for(g=0;g<f;++g)A[m+g]=e[g];null!==d&&d.push(S,k);return k},argPackAdvance:8,readValueFromPointer:Xa,V:function(d){S(d)}})},i:function(a,b,c){c=N(c);if(2===b){var d=tb;var e=ub;var f=vb;var g=()=>ka;var k=1}else 4===b&&(d=wb,e=xb,f=yb,g=()=>E,k=2);W(a,{name:c,fromWireType:function(m){for(var l=E[m>>2],n=g(),p,r=m+4,u=0;u<=l;++u){var t=m+4+u*b;if(u==l||0==n[t>>k])r=d(r,t-r),void 0===\np?p=r:(p+=String.fromCharCode(0),p+=r),r=t+b}S(m);return p},toWireType:function(m,l){\"string\"!=typeof l&&L(\"Cannot pass non-string to C++ string type \"+c);var n=f(l),p=Ib(4+n+b);E[p>>2]=n>>k;e(l,p+4,n+b);null!==m&&m.push(S,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:function(m){S(m)}})},k:function(a,b,c,d,e,f){Va[a]={name:N(b),fa:Z(c,d),W:Z(e,f),ia:[]}},h:function(a,b,c,d,e,f,g,k,m,l){Va[a].ia.push({oa:N(b),ta:c,ra:Z(d,e),sa:f,za:g,ya:Z(k,m),Aa:l})},C:function(a,b){b=N(b);W(a,{va:!0,name:b,\nargPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},s:function(a,b,c,d,e){a=Bb[a];b=M(b);c=Ab(c);var f=[];E[d>>2]=Ea(f);return a(b,c,f,e)},t:function(a,b,c,d){a=Bb[a];b=M(b);c=Ab(c);a(b,c,null,d)},g:qb,m:function(a,b){var c=Db(a,b),d=c[0];b=d.name+\"_$\"+c.slice(1).map(function(g){return g.name}).join(\"_\")+\"$\";var e=Eb[b];if(void 0!==e)return e;var f=Array(a-1);e=Cb((g,k,m,l)=>{for(var n=0,p=0;p<a-1;++p)f[p]=c[p+1].readValueFromPointer(l+n),n+=c[p+1].argPackAdvance;g=g[k].apply(g,\nf);for(p=0;p<a-1;++p)c[p+1].ma&&c[p+1].ma(f[p]);if(!d.va)return d.toWireType(m,g)});return Eb[b]=e},D:function(a){4<a&&(J[a].ga+=1)},r:function(a){var b=M(a);Wa(b);qb(a)},c:function(){x(\"\")},x:function(a,b,c){A.copyWithin(a,b,b+c)},w:function(a){var b=A.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var e=Math;d=Math.max(a,d);e=e.min.call(e,2147483648,d+(65536-d%65536)%65536);a:{try{fa.grow(e-ia.byteLength+65535>>>16);na();var f=1;break a}catch(g){}f=\nvoid 0}if(f)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=E[b>>2],k=E[b+4>>2];b+=8;for(var m=0;m<k;m++){var l=A[g+m],n=Fb[a];0===l||10===l?((1===a?ea:v)(z(n,0)),n.length=0):n.push(l)}e+=k}E[d>>2]=e;return 0}};\n(function(){function a(e){h.asm=e.exports;fa=h.asm.E;na();oa=h.asm.J;qa.unshift(h.asm.F);F--;h.monitorRunDependencies&&h.monitorRunDependencies(F);0==F&&(null!==ta&&(clearInterval(ta),ta=null),G&&(e=G,G=null,e()))}function b(e){a(e.instance)}function c(e){return ya().then(function(f){return WebAssembly.instantiate(f,d)}).then(function(f){return f}).then(e,function(f){v(\"failed to asynchronously prepare wasm: \"+f);x(f)})}var d={a:Jb};F++;h.monitorRunDependencies&&h.monitorRunDependencies(F);if(h.instantiateWasm)try{return h.instantiateWasm(d,\na)}catch(e){v(\"Module.instantiateWasm callback failed with error: \"+e),ca(e)}(function(){return w||\"function\"!=typeof WebAssembly.instantiateStreaming||ua(H)||\"function\"!=typeof fetch?c(b):fetch(H,{credentials:\"same-origin\"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v(\"wasm streaming compile failed: \"+f);v(\"falling back to ArrayBuffer instantiation\");return c(b)})})})().catch(ca);return{}})();\nh.___wasm_call_ctors=function(){return(h.___wasm_call_ctors=h.asm.F).apply(null,arguments)};var Ka=h.___getTypeName=function(){return(Ka=h.___getTypeName=h.asm.G).apply(null,arguments)};h.__embind_initialize_bindings=function(){return(h.__embind_initialize_bindings=h.asm.H).apply(null,arguments)};var Ib=h._malloc=function(){return(Ib=h._malloc=h.asm.I).apply(null,arguments)},S=h._free=function(){return(S=h._free=h.asm.K).apply(null,arguments)};\nh.dynCall_jiji=function(){return(h.dynCall_jiji=h.asm.L).apply(null,arguments)};var Kb;G=function Lb(){Kb||Mb();Kb||(G=Lb)};\nfunction Mb(){function a(){if(!Kb&&(Kb=!0,h.calledRun=!0,!ha)){za(qa);aa(h);if(h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for(\"function\"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();ra.unshift(b)}za(ra)}}if(!(0<F)){if(h.preRun)for(\"function\"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)sa();za(pa);0<F||(h.setStatus?(h.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){h.setStatus(\"\")},1);a()},1)):a())}}\nif(h.preInit)for(\"function\"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();Mb();\n\n\n return loadYoga.ready\n}\n);\n})();\nexport default loadYoga;", "/**\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\n// @generated by enums.py\n\nexport enum Align {\n Auto = 0,\n FlexStart = 1,\n Center = 2,\n FlexEnd = 3,\n Stretch = 4,\n Baseline = 5,\n SpaceBetween = 6,\n SpaceAround = 7,\n SpaceEvenly = 8,\n}\n\nexport enum BoxSizing {\n BorderBox = 0,\n ContentBox = 1,\n}\n\nexport enum Dimension {\n Width = 0,\n Height = 1,\n}\n\nexport enum Direction {\n Inherit = 0,\n LTR = 1,\n RTL = 2,\n}\n\nexport enum Display {\n Flex = 0,\n None = 1,\n Contents = 2,\n}\n\nexport enum Edge {\n Left = 0,\n Top = 1,\n Right = 2,\n Bottom = 3,\n Start = 4,\n End = 5,\n Horizontal = 6,\n Vertical = 7,\n All = 8,\n}\n\nexport enum Errata {\n None = 0,\n StretchFlexBasis = 1,\n AbsolutePositionWithoutInsetsExcludesPadding = 2,\n AbsolutePercentAgainstInnerSize = 4,\n All = 2147483647,\n Classic = 2147483646,\n}\n\nexport enum ExperimentalFeature {\n WebFlexBasis = 0,\n}\n\nexport enum FlexDirection {\n Column = 0,\n ColumnReverse = 1,\n Row = 2,\n RowReverse = 3,\n}\n\nexport enum Gutter {\n Column = 0,\n Row = 1,\n All = 2,\n}\n\nexport enum Justify {\n FlexStart = 0,\n Center = 1,\n FlexEnd = 2,\n SpaceBetween = 3,\n SpaceAround = 4,\n SpaceEvenly = 5,\n}\n\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n Verbose = 4,\n Fatal = 5,\n}\n\nexport enum MeasureMode {\n Undefined = 0,\n Exactly = 1,\n AtMost = 2,\n}\n\nexport enum NodeType {\n Default = 0,\n Text = 1,\n}\n\nexport enum Overflow {\n Visible = 0,\n Hidden = 1,\n Scroll = 2,\n}\n\nexport enum PositionType {\n Static = 0,\n Relative = 1,\n Absolute = 2,\n}\n\nexport enum Unit {\n Undefined = 0,\n Point = 1,\n Percent = 2,\n Auto = 3,\n}\n\nexport enum Wrap {\n NoWrap = 0,\n Wrap = 1,\n WrapReverse = 2,\n}\n\nconst constants = {\n ALIGN_AUTO: Align.Auto,\n ALIGN_FLEX_START: Align.FlexStart,\n ALIGN_CENTER: Align.Center,\n ALIGN_FLEX_END: Align.FlexEnd,\n ALIGN_STRETCH: Align.Stretch,\n ALIGN_BASELINE: Align.Baseline,\n ALIGN_SPACE_BETWEEN: Align.SpaceBetween,\n ALIGN_SPACE_AROUND: Align.SpaceAround,\n ALIGN_SPACE_EVENLY: Align.SpaceEvenly,\n BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,\n BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,\n DIMENSION_WIDTH: Dimension.Width,\n DIMENSION_HEIGHT: Dimension.Height,\n DIRECTION_INHERIT: Direction.Inherit,\n DIRECTION_LTR: Direction.LTR,\n DIRECTION_RTL: Direction.RTL,\n DISPLAY_FLEX: Display.Flex,\n DISPLAY_NONE: Display.None,\n DISPLAY_CONTENTS: Display.Contents,\n EDGE_LEFT: Edge.Left,\n EDGE_TOP: Edge.Top,\n EDGE_RIGHT: Edge.Right,\n EDGE_BOTTOM: Edge.Bottom,\n EDGE_START: Edge.Start,\n EDGE_END: Edge.End,\n EDGE_HORIZONTAL: Edge.Horizontal,\n EDGE_VERTICAL: Edge.Vertical,\n EDGE_ALL: Edge.All,\n ERRATA_NONE: Errata.None,\n ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,\n ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING: Errata.AbsolutePositionWithoutInsetsExcludesPadding,\n ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE: Errata.AbsolutePercentAgainstInnerSize,\n ERRATA_ALL: Errata.All,\n ERRATA_CLASSIC: Errata.Classic,\n EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,\n FLEX_DIRECTION_COLUMN: FlexDirection.Column,\n FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,\n FLEX_DIRECTION_ROW: FlexDirection.Row,\n FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,\n GUTTER_COLUMN: Gutter.Column,\n GUTTER_ROW: Gutter.Row,\n GUTTER_ALL: Gutter.All,\n JUSTIFY_FLEX_START: Justify.FlexStart,\n JUSTIFY_CENTER: Justify.Center,\n JUSTIFY_FLEX_END: Justify.FlexEnd,\n JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,\n JUSTIFY_SPACE_AROUND: Justify.SpaceAround,\n JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,\n LOG_LEVEL_ERROR: LogLevel.Error,\n LOG_LEVEL_WARN: LogLevel.Warn,\n LOG_LEVEL_INFO: LogLevel.Info,\n LOG_LEVEL_DEBUG: LogLevel.Debug,\n LOG_LEVEL_VERBOSE: LogLevel.Verbose,\n LOG_LEVEL_FATAL: LogLevel.Fatal,\n MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,\n MEASURE_MODE_EXACTLY: MeasureMode.Exactly,\n MEASURE_MODE_AT_MOST: MeasureMode.AtMost,\n NODE_TYPE_DEFAULT: NodeType.Default,\n NODE_TYPE_TEXT: NodeType.Text,\n OVERFLOW_VISIBLE: Overflow.Visible,\n OVERFLOW_HIDDEN: Overflow.Hidden,\n OVERFLOW_SCROLL: Overflow.Scroll,\n POSITION_TYPE_STATIC: PositionType.Static,\n POSITION_TYPE_RELATIVE: PositionType.Relative,\n POSITION_TYPE_ABSOLUTE: PositionType.Absolute,\n UNIT_UNDEFINED: Unit.Undefined,\n UNIT_POINT: Unit.Point,\n UNIT_PERCENT: Unit.Percent,\n UNIT_AUTO: Unit.Auto,\n WRAP_NO_WRAP: Wrap.NoWrap,\n WRAP_WRAP: Wrap.Wrap,\n WRAP_WRAP_REVERSE: Wrap.WrapReverse,\n}\nexport default constants", "/**\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-nocheck\n\nimport {Unit, Direction} from './generated/YGEnums.ts';\nimport YGEnums from './generated/YGEnums.ts';\n\nimport type {\n Align,\n BoxSizing,\n Display,\n Edge,\n Errata,\n ExperimentalFeature,\n FlexDirection,\n Gutter,\n Justify,\n MeasureMode,\n Overflow,\n PositionType,\n Wrap,\n} from './generated/YGEnums.ts';\n\ntype Layout = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\n\ntype Size = {\n width: number;\n height: number;\n};\n\ntype Value = {\n unit: Unit;\n value: number;\n};\n\nexport type Config = {\n free(): void;\n isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean;\n setExperimentalFeatureEnabled(\n feature: ExperimentalFeature,\n enabled: boolean,\n ): void;\n setPointScaleFactor(factor: number): void;\n getErrata(): Errata;\n setErrata(errata: Errata): void;\n useWebDefaults(): boolean;\n setUseWebDefaults(useWebDefaults: boolean): void;\n};\n\nexport type DirtiedFunction = (node: Node) => void;\n\nexport type MeasureFunction = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n) => Size;\n\nexport type Node = {\n calculateLayout(\n width: number | 'auto' | undefined,\n height: number | 'auto' | undefined,\n direction?: Direction,\n ): void;\n copyStyle(node: Node): void;\n free(): void;\n freeRecursive(): void;\n getAlignContent(): Align;\n getAlignItems(): Align;\n getAlignSelf(): Align;\n getAspectRatio(): number;\n getBorder(edge: Edge): number;\n getChild(index: number): Node;\n getChildCount(): number;\n getComputedBorder(edge: Edge): number;\n getComputedBottom(): number;\n getComputedHeight(): number;\n getComputedLayout(): Layout;\n getComputedLeft(): number;\n getComputedMargin(edge: Edge): number;\n getComputedPadding(edge: Edge): number;\n getComputedRight(): number;\n getComputedTop(): number;\n getComputedWidth(): number;\n getDirection(): Direction;\n getDisplay(): Display;\n getFlexBasis(): Value;\n getFlexDirection(): FlexDirection;\n getFlexGrow(): number;\n getFlexShrink(): number;\n getFlexWrap(): Wrap;\n getHeight(): Value;\n getJustifyContent(): Justify;\n getGap(gutter: Gutter): Value;\n getMargin(edge: Edge): Value;\n getMaxHeight(): Value;\n getMaxWidth(): Value;\n getMinHeight(): Value;\n getMinWidth(): Value;\n getOverflow(): Overflow;\n getPadding(edge: Edge): Value;\n getParent(): Node | null;\n getPosition(edge: Edge): Value;\n getPositionType(): PositionType;\n getBoxSizing(): BoxSizing;\n getWidth(): Value;\n insertChild(child: Node, index: number): void;\n isDirty(): boolean;\n isReferenceBaseline(): boolean;\n markDirty(): void;\n hasNewLayout(): boolean;\n markLayoutSeen(): void;\n removeChild(child: Node): void;\n reset(): void;\n setAlignContent(alignContent: Align): void;\n setAlignItems(alignItems: Align): void;\n setAlignSelf(alignSelf: Align): void;\n setAspectRatio(aspectRatio: number | undefined): void;\n setBorder(edge: Edge, borderWidth: number | undefined): void;\n setDirection(direction: Direction): void;\n setDisplay(display: Display): void;\n setFlex(flex: number | undefined): void;\n setFlexBasis(flexBasis: number | 'auto' | `${number}%` | undefined): void;\n setFlexBasisPercent(flexBasis: number | undefined): void;\n setFlexBasisAuto(): void;\n setFlexDirection(flexDirection: FlexDirection): void;\n setFlexGrow(flexGrow: number | undefined): void;\n setFlexShrink(flexShrink: number | undefined): void;\n setFlexWrap(flexWrap: Wrap): void;\n setHeight(height: number | 'auto' | `${number}%` | undefined): void;\n setIsReferenceBaseline(isReferenceBaseline: boolean): void;\n setHeightAuto(): void;\n setHeightPercent(height: number | undefined): void;\n setJustifyContent(justifyContent: Justify): void;\n setGap(gutter: Gutter, gapLength: number | `${number}%` | undefined): Value;\n setGapPercent(gutter: Gutter, gapLength: number | undefined): Value;\n setMargin(\n edge: Edge,\n margin: number | 'auto' | `${number}%` | undefined,\n ): void;\n setMarginAuto(edge: Edge): void;\n setMarginPercent(edge: Edge, margin: number | undefined): void;\n setMaxHeight(maxHeight: number | `${number}%` | undefined): void;\n setMaxHeightPercent(maxHeight: number | undefined): void;\n setMaxWidth(maxWidth: number | `${number}%` | undefined): void;\n setMaxWidthPercent(maxWidth: number | undefined): void;\n setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;\n setMeasureFunc(measureFunc: MeasureFunction | null): void;\n setMinHeight(minHeight: number | `${number}%` | undefined): void;\n setMinHeightPercent(minHeight: number | undefined): void;\n setMinWidth(minWidth: number | `${number}%` | undefined): void;\n setMinWidthPercent(minWidth: number | undefined): void;\n setOverflow(overflow: Overflow): void;\n setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;\n setPaddingPercent(edge: Edge, padding: number | undefined): void;\n setPosition(edge: Edge, position: number | `${number}%` | undefined): void;\n setPositionPercent(edge: Edge, position: number | undefined): void;\n setPositionType(positionType: PositionType): void;\n setPositionAuto(edge: Edge): void;\n setBoxSizing(boxSizing: BoxSizing): void;\n setWidth(width: number | 'auto' | `${number}%` | undefined): void;\n setWidthAuto(): void;\n setWidthPercent(width: number | undefined): void;\n unsetDirtiedFunc(): void;\n unsetMeasureFunc(): void;\n setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void;\n};\n\nexport type Yoga = {\n Config: {\n create(): Config;\n destroy(config: Config): void;\n };\n Node: {\n create(config?: Config): Node;\n createDefault(): Node;\n createWithConfig(config: Config): Node;\n destroy(node: Node): void;\n };\n} & typeof YGEnums;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function wrapAssembly(lib: any): Yoga {\n function patch(prototype, name, fn) {\n const original = prototype[name];\n\n prototype[name] = function (...args) {\n return fn.call(this, original, ...args);\n };\n }\n\n for (const fnName of [\n 'setPosition',\n 'setMargin',\n 'setFlexBasis',\n 'setWidth',\n 'setHeight',\n 'setMinWidth',\n 'setMinHeight',\n 'setMaxWidth',\n 'setMaxHeight',\n 'setPadding',\n 'setGap',\n ]) {\n const methods = {\n [Unit.Point]: lib.Node.prototype[fnName],\n [Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],\n [Unit.Auto]: lib.Node.prototype[`${fnName}Auto`],\n };\n\n patch(lib.Node.prototype, fnName, function (original, ...args) {\n // We patch all these functions to add support for the following calls:\n // .setWidth(100) / .setWidth(\"100%\") / .setWidth(.getWidth()) / .setWidth(\"auto\")\n\n const value = args.pop();\n let unit, asNumber;\n\n if (value === 'auto') {\n unit = Unit.Auto;\n asNumber = undefined;\n } else if (typeof value === 'object') {\n unit = value.unit;\n asNumber = value.valueOf();\n } else {\n unit =\n typeof value === 'string' && value.endsWith('%')\n ? Unit.Percent\n : Unit.Point;\n asNumber = parseFloat(value);\n if (\n value !== undefined &&\n !Number.isNaN(value) &&\n Number.isNaN(asNumber)\n ) {\n throw new Error(`Invalid value ${value} for ${fnName}`);\n }\n }\n\n if (!methods[unit])\n throw new Error(\n `Failed to execute \"${fnName}\": Unsupported unit '${value}'`,\n );\n\n if (asNumber !== undefined) {\n return methods[unit].call(this, ...args, asNumber);\n } else {\n return methods[unit].call(this, ...args);\n }\n });\n }\n\n function wrapMeasureFunction(measureFunction) {\n return lib.MeasureCallback.implement({\n measure: (...args) => {\n const {width, height} = measureFunction(...args);\n return {\n width: width ?? NaN,\n height: height ?? NaN,\n };\n },\n });\n }\n\n patch(lib.Node.prototype, 'setMeasureFunc', function (original, measureFunc) {\n // This patch is just a convenience patch, since it helps write more\n // idiomatic source code (such as .setMeasureFunc(null))\n if (measureFunc) {\n return original.call(this, wrapMeasureFunction(measureFunc));\n } else {\n return this.unsetMeasureFunc();\n }\n });\n\n function wrapDirtiedFunc(dirtiedFunction) {\n return lib.DirtiedCallback.implement({dirtied: dirtiedFunction});\n }\n\n patch(lib.Node.prototype, 'setDirtiedFunc', function (original, dirtiedFunc) {\n original.call(this, wrapDirtiedFunc(dirtiedFunc));\n });\n\n patch(lib.Config.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Config.create),\n // we also need to handle the deallocation\n lib.Config.destroy(this);\n });\n\n patch(lib.Node, 'create', (_, config) => {\n // We decide the constructor we want to call depending on the parameters\n return config\n ? lib.Node.createWithConfig(config)\n : lib.Node.createDefault();\n });\n\n patch(lib.Node.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Node.create),\n // we also need to handle the deallocation\n lib.Node.destroy(this);\n });\n\n patch(lib.Node.prototype, 'freeRecursive', function () {\n for (let t = 0, T = this.getChildCount(); t < T; ++t) {\n this.getChild(0).freeRecursive();\n }\n this.free();\n });\n\n patch(\n lib.Node.prototype,\n 'calculateLayout',\n function (original, width = NaN, height = NaN, direction = Direction.LTR) {\n // Just a small patch to add support for the function default parameters\n return original.call(this, width, height, direction);\n },\n );\n\n return {\n Config: lib.Config,\n Node: lib.Node,\n ...YGEnums,\n };\n}\n", "/**\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.ts';\n\nexport type {\n Config,\n DirtiedFunction,\n MeasureFunction,\n Node,\n} from './wrapAssembly.ts';\n\nconst Yoga = wrapAssembly(await loadYoga());\nexport default Yoga;\nexport * from './generated/YGEnums.ts';\n", "// Core shims barrel \u2014 aliased as @opentui/core by Vite\n// Re-exports portable code from opentui and swaps in browser replacements.\n// Vite aliases intercept zig, buffer, text-buffer, text-buffer-view,\n// syntax-style, renderer, console, etc. before they reach the filesystem.\n\n// \u2500\u2500\u2500 Pure TS re-exports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// RGBA and color utilities (our own copy to avoid pulling in opentui's lib/index)\nexport { RGBA, parseColor, hexToRgb, rgbToHex, hsvToRgb } from \"./rgba\"\nexport type { ColorInput } from \"./rgba\"\n\n// Types\nexport {\n TextAttributes,\n ATTRIBUTE_BASE_BITS,\n ATTRIBUTE_BASE_MASK,\n getBaseAttributes,\n DebugOverlayCorner,\n} from \"./types\"\nexport type {\n RenderContext,\n ThemeMode,\n CursorStyle,\n CursorStyleOptions,\n MousePointerStyle,\n WidthMethod,\n Timeout,\n ViewportBounds,\n Highlight,\n LineInfo,\n LineInfoProvider,\n CapturedSpan,\n CapturedLine,\n CapturedFrame,\n} from \"./types\"\n\n// \u2500\u2500\u2500 Re-exports from opentui source (Vite intercepts Zig deps) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// Renderable base classes (needed by our own code \u2014 main.tsx uses RootRenderable)\n// NOTE: The opentui react package imports from the real opentui barrel instead\n// (redirected by the Vite plugin) to avoid cross-barrel circular dependency issues.\nexport {\n Renderable,\n BaseRenderable,\n RootRenderable,\n LayoutEvents,\n RenderableEvents,\n isRenderable,\n} from \"../../../../opentui/packages/core/src/Renderable\"\nexport type {\n RenderableOptions,\n LayoutOptions,\n BaseRenderableOptions,\n Position,\n RenderCommand,\n} from \"../../../../opentui/packages/core/src/Renderable\"\n\n// Border (pure TS)\nexport {\n BorderChars,\n BorderCharArrays,\n isValidBorderStyle,\n parseBorderStyle,\n getBorderFromSides,\n getBorderSides,\n borderCharsToArray,\n} from \"../../../../opentui/packages/core/src/lib/border\"\nexport type {\n BorderCharacters,\n BorderStyle,\n BorderSides,\n BorderConfig,\n BoxDrawOptions,\n BorderSidesConfig,\n} from \"../../../../opentui/packages/core/src/lib/border\"\n\n// Styled text (pure TS)\nexport {\n StyledText,\n isStyledText,\n stringToStyledText,\n t,\n bold,\n italic,\n underline,\n strikethrough,\n dim,\n reverse,\n blink,\n fg,\n bg,\n black,\n red,\n green,\n yellow,\n blue,\n magenta,\n cyan,\n white,\n} from \"../../../../opentui/packages/core/src/lib/styled-text\"\n\n// Yoga options (pure TS)\nexport {\n parseAlign,\n parseAlignItems,\n parseFlexDirection,\n parseJustify,\n parseOverflow,\n parsePositionType,\n parseWrap,\n} from \"../../../../opentui/packages/core/src/lib/yoga.options\"\nexport type {\n AlignString,\n FlexDirectionString,\n JustifyString,\n OverflowString,\n PositionTypeString,\n WrapString,\n} from \"../../../../opentui/packages/core/src/lib/yoga.options\"\n\n// Renderable validations (pure TS)\nexport {\n validateOptions,\n isPositionType,\n isDimensionType,\n isFlexBasisType,\n isSizeType,\n isMarginType,\n isPaddingType,\n isPositionTypeType,\n isOverflowType,\n} from \"../../../../opentui/packages/core/src/lib/renderable.validations\"\n\n// Selection (pure TS)\nexport {\n Selection,\n convertGlobalToLocalSelection,\n} from \"../../../../opentui/packages/core/src/lib/selection\"\n\n// VNode composition (pure TS)\nexport { maybeMakeRenderable } from \"../../../../opentui/packages/core/src/renderables/composition/vnode\"\nexport type { VNode } from \"../../../../opentui/packages/core/src/renderables/composition/vnode\"\n\n// \u2500\u2500\u2500 Renderable subclasses (re-exported from individual files, not barrel) \u2500\n\n// These are needed by @opentui/react for the component catalogue and host-config.\n// File-level shims (zig, buffer, renderer, etc.) handle their internal imports.\nexport * from \"../../../../opentui/packages/core/src/renderables/Box\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Text\"\nexport * from \"../../../../opentui/packages/core/src/renderables/TextNode\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Code\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Diff\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Input\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Select\"\nexport * from \"../../../../opentui/packages/core/src/renderables/TabSelect\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Textarea\"\nexport * from \"../../../../opentui/packages/core/src/renderables/ScrollBox\"\nexport * from \"../../../../opentui/packages/core/src/renderables/ScrollBar\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Slider\"\nexport * from \"../../../../opentui/packages/core/src/renderables/ASCIIFont\"\nexport * from \"../../../../opentui/packages/core/src/renderables/LineNumberRenderable\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Markdown\"\nexport * from \"../../../../opentui/packages/core/src/renderables/FrameBuffer\"\nexport * from \"../../../../opentui/packages/core/src/renderables/TextBufferRenderable\"\nimport { TextBufferRenderable } from \"../../../../opentui/packages/core/src/renderables/TextBufferRenderable\"\n\n// Gridland extension: textAlign property on TextBufferRenderable\n// Proxies to the BrowserTextBufferView's textAlign property for centered text rendering.\nObject.defineProperty(TextBufferRenderable.prototype, \"textAlign\", {\n get(this: any) {\n return this.textBufferView?.textAlign ?? \"left\"\n },\n set(this: any, value: \"left\" | \"center\" | \"right\") {\n if (this.textBufferView) {\n this.textBufferView.textAlign = value\n this.requestRender()\n }\n },\n enumerable: true,\n configurable: true,\n})\n\n// \u2500\u2500\u2500 Browser replacements \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// Buffer \u2014 browser replacement\nexport { BrowserBuffer as OptimizedBuffer } from \"../browser-buffer\"\n\n// TextBuffer \u2014 browser replacement\nexport { BrowserTextBuffer as TextBuffer } from \"../browser-text-buffer\"\nexport type { TextChunk } from \"../browser-text-buffer\"\n\n// TextBufferView \u2014 browser replacement\nexport { BrowserTextBufferView as TextBufferView } from \"../browser-text-buffer-view\"\n\n// SyntaxStyle \u2014 browser stub\nexport { BrowserSyntaxStyle as SyntaxStyle } from \"../browser-syntax-style\"\n\n// \u2500\u2500\u2500 Stubs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function resolveRenderLib(): any {\n return null\n}\n\nexport type RenderLib = any\nexport type Pointer = number\n\n// KeyHandler (re-implemented for browser)\nexport {\n BrowserKeyHandler as KeyHandler,\n BrowserInternalKeyHandler as InternalKeyHandler,\n} from \"../browser-render-context\"\n\n// Renderer \u2014 re-exported from shimmed source path (resolved to renderer-stub.ts)\nexport {\n CliRenderer,\n CliRenderEvents,\n createCliRenderer,\n} from \"../../../../opentui/packages/core/src/renderer\"\nexport type { MouseEvent } from \"../../../../opentui/packages/core/src/renderer\"\n\n// Timeline & engine \u2014 re-exported from shimmed source path (resolved to timeline-stub.ts)\nexport {\n Timeline,\n engine,\n createTimeline,\n} from \"../../../../opentui/packages/core/src/animation/Timeline\"\n\n// Yoga re-export\nexport * as Yoga from \"yoga-layout\"\n\n// Stub types for mouse\nexport type MouseEventType = any\n\n// Utils\nexport function createTextAttributes(opts: {\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 const TA = {\n NONE: 0, BOLD: 1, DIM: 2, ITALIC: 4, UNDERLINE: 8,\n BLINK: 16, INVERSE: 32, HIDDEN: 64, STRIKETHROUGH: 128,\n }\n let attr = TA.NONE\n if (opts.bold) attr |= TA.BOLD\n if (opts.italic) attr |= TA.ITALIC\n if (opts.underline) attr |= TA.UNDERLINE\n if (opts.dim) attr |= TA.DIM\n if (opts.blink) attr |= TA.BLINK\n if (opts.inverse) attr |= TA.INVERSE\n if (opts.hidden) attr |= TA.HIDDEN\n if (opts.strikethrough) attr |= TA.STRIKETHROUGH\n return attr\n}\n\nexport function attributesWithLink(baseAttributes: number, linkId: number): number {\n return (baseAttributes & 0xff) | ((linkId & 0xffffff) << 8)\n}\n\nexport function getLinkId(attributes: number): number {\n return (attributes >>> 8) & 0xffffff\n}\n\nexport function visualizeRenderableTree(..._args: any[]): void {}\n", "import type { RGBA } from \"./core-shims/rgba\"\nimport type { CapturedLine, CapturedSpan, CursorStyle } from \"./core-shims/types\"\nimport { attributesWithLink } from \"./core-shims/index\"\n\n// Attribute flags matching TextAttributes from opentui core\nconst CONTINUATION = 0xc0000000\n\ninterface ScissorRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport type WidthMethod = \"wcwidth\" | \"unicode\"\n\nexport interface BorderDrawOptions {\n x: number\n y: number\n width: number\n height: number\n borderStyle?: string\n customBorderChars?: Uint32Array\n border: boolean | string[]\n borderColor: RGBA\n backgroundColor: RGBA\n shouldFill?: boolean\n title?: string\n titleAlignment?: \"left\" | \"center\" | \"right\"\n}\n\nexport class BrowserBuffer {\n public id: string\n public respectAlpha: boolean\n\n private _width: number\n private _height: number\n private _widthMethod: WidthMethod\n\n // Cell data - same layout as native OptimizedBuffer\n public char: Uint32Array\n public fg: Float32Array\n public bg: Float32Array\n public attributes: Uint32Array\n\n private scissorStack: ScissorRect[] = []\n private opacityStack: number[] = []\n\n // Link registry for clickable links\n public linkRegistry: Map<number, string> = new Map()\n private nextLinkId: number = 1\n /** Cursor rendering config -- set by renderer before pipeline, read by drawEditorView */\n public cursorColor: RGBA | null = null\n public cursorStyleType: CursorStyle = \"block\"\n /** Line cursor position -- set by drawEditorView during pipeline, read by renderer after */\n public lineCursorPosition: { x: number; y: number } | null = null\n\n constructor(\n width: number,\n height: number,\n options: { respectAlpha?: boolean; id?: string; widthMethod?: WidthMethod } = {},\n ) {\n this._width = width\n this._height = height\n this._widthMethod = options.widthMethod ?? \"wcwidth\"\n this.respectAlpha = options.respectAlpha ?? false\n this.id = options.id ?? `browser-buffer-${Math.random().toString(36).slice(2, 8)}`\n\n const size = width * height\n this.char = new Uint32Array(size)\n this.fg = new Float32Array(size * 4)\n this.bg = new Float32Array(size * 4)\n this.attributes = new Uint32Array(size)\n\n // Fill with spaces\n this.char.fill(0x20) // space\n }\n\n static create(\n width: number,\n height: number,\n widthMethod: WidthMethod,\n options?: { respectAlpha?: boolean; id?: string },\n ): BrowserBuffer {\n return new BrowserBuffer(width, height, { ...options, widthMethod })\n }\n\n get width(): number {\n return this._width\n }\n\n get height(): number {\n return this._height\n }\n\n get widthMethod(): WidthMethod {\n return this._widthMethod\n }\n\n get ptr(): number {\n return 0\n }\n\n get buffers() {\n return {\n char: this.char,\n fg: this.fg,\n bg: this.bg,\n attributes: this.attributes,\n }\n }\n\n setRespectAlpha(respectAlpha: boolean): void {\n this.respectAlpha = respectAlpha\n }\n\n getNativeId(): string {\n return this.id\n }\n\n registerLink(url: string): number {\n const id = this.nextLinkId++\n this.linkRegistry.set(id, url)\n return id\n }\n\n getLinkUrl(linkId: number): string | undefined {\n return this.linkRegistry.get(linkId)\n }\n\n private isInScissor(x: number, y: number): boolean {\n if (this.scissorStack.length === 0) return true\n const rect = this.scissorStack[this.scissorStack.length - 1]\n return x >= rect.x && x < rect.x + rect.width && y >= rect.y && y < rect.y + rect.height\n }\n\n private getCurrentOpacityMultiplier(): number {\n if (this.opacityStack.length === 0) return 1\n return this.opacityStack[this.opacityStack.length - 1]\n }\n\n private applyOpacity(color: RGBA): RGBA {\n const multiplier = this.getCurrentOpacityMultiplier()\n if (multiplier >= 1) return color\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a * multiplier,\n buffer: new Float32Array([color.r, color.g, color.b, color.a * multiplier]),\n toInts: color.toInts,\n equals: color.equals,\n map: color.map,\n toString: color.toString,\n } as RGBA\n }\n\n clear(bg?: RGBA): void {\n const size = this._width * this._height\n this.char.fill(0x20) // space\n this.attributes.fill(0)\n this.linkRegistry.clear()\n this.nextLinkId = 1\n\n if (bg) {\n for (let i = 0; i < size; i++) {\n const offset = i * 4\n this.bg[offset] = bg.r\n this.bg[offset + 1] = bg.g\n this.bg[offset + 2] = bg.b\n this.bg[offset + 3] = bg.a\n // Clear fg\n this.fg[offset] = 0\n this.fg[offset + 1] = 0\n this.fg[offset + 2] = 0\n this.fg[offset + 3] = 0\n }\n } else {\n this.fg.fill(0)\n this.bg.fill(0)\n }\n }\n\n setCell(x: number, y: number, char: string, fgColor: RGBA, bgColor: RGBA, attr: number = 0): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n if (!this.isInScissor(x, y)) return\n\n const idx = y * this._width + x\n const offset = idx * 4\n\n const effectiveBg = this.applyOpacity(bgColor)\n const effectiveFg = this.applyOpacity(fgColor)\n\n this.char[idx] = char.codePointAt(0) ?? 0x20\n this.attributes[idx] = attr\n\n this.fg[offset] = effectiveFg.r\n this.fg[offset + 1] = effectiveFg.g\n this.fg[offset + 2] = effectiveFg.b\n this.fg[offset + 3] = effectiveFg.a\n\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n\n setCellWithAlphaBlending(\n x: number,\n y: number,\n char: string,\n fgColor: RGBA,\n bgColor: RGBA,\n attr: number = 0,\n ): void {\n // For the PoC, same as setCell\n this.setCell(x, y, char, fgColor, bgColor, attr)\n }\n\n drawChar(charCode: number, x: number, y: number, fgColor: RGBA, bgColor: RGBA, attr: number = 0): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n if (!this.isInScissor(x, y)) return\n\n const idx = y * this._width + x\n const offset = idx * 4\n\n const effectiveBg = this.applyOpacity(bgColor)\n const effectiveFg = this.applyOpacity(fgColor)\n\n this.char[idx] = charCode\n this.attributes[idx] = attr\n\n this.fg[offset] = effectiveFg.r\n this.fg[offset + 1] = effectiveFg.g\n this.fg[offset + 2] = effectiveFg.b\n this.fg[offset + 3] = effectiveFg.a\n\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n\n drawText(\n text: string,\n x: number,\n y: number,\n fgColor: RGBA,\n bgColor?: RGBA,\n attr: number = 0,\n _selection?: { start: number; end: number; bgColor?: RGBA; fgColor?: RGBA } | null,\n ): void {\n const transparentBg: RGBA = {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n } as RGBA\n const bg = bgColor ?? transparentBg\n\n let curX = x\n for (const ch of text) {\n if (curX >= this._width) break\n if (curX >= 0) {\n this.setCell(curX, y, ch, fgColor, bg, attr)\n }\n curX++\n }\n }\n\n fillRect(x: number, y: number, width: number, height: number, bgColor: RGBA): void {\n for (let row = y; row < y + height && row < this._height; row++) {\n for (let col = x; col < x + width && col < this._width; col++) {\n if (col < 0 || row < 0) continue\n if (!this.isInScissor(col, row)) continue\n\n const idx = row * this._width + col\n const offset = idx * 4\n const effectiveBg = this.applyOpacity(bgColor)\n\n this.char[idx] = 0x20\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n }\n }\n\n drawBox(options: BorderDrawOptions): void {\n const {\n x,\n y,\n width,\n height,\n border,\n borderColor,\n backgroundColor,\n shouldFill = true,\n title,\n titleAlignment = \"left\",\n } = options\n\n if (width <= 0 || height <= 0) return\n\n // Parse border sides\n const sides = {\n top: border === true || (Array.isArray(border) && border.includes(\"top\")),\n right: border === true || (Array.isArray(border) && border.includes(\"right\")),\n bottom: border === true || (Array.isArray(border) && border.includes(\"bottom\")),\n left: border === true || (Array.isArray(border) && border.includes(\"left\")),\n }\n\n // Get border chars (use customBorderChars or default rounded)\n const borderChars = options.customBorderChars ?? this.getDefaultBorderChars(options.borderStyle)\n\n // Fill background\n if (shouldFill) {\n const fillStartX = x + (sides.left ? 1 : 0)\n const fillStartY = y + (sides.top ? 1 : 0)\n const fillWidth = width - (sides.left ? 1 : 0) - (sides.right ? 1 : 0)\n const fillHeight = height - (sides.top ? 1 : 0) - (sides.bottom ? 1 : 0)\n if (fillWidth > 0 && fillHeight > 0) {\n this.fillRect(fillStartX, fillStartY, fillWidth, fillHeight, backgroundColor)\n }\n }\n\n if (!border) return\n\n const transparent: RGBA = { r: 0, g: 0, b: 0, a: 0, buffer: new Float32Array([0, 0, 0, 0]) } as RGBA\n\n // Draw borders\n // borderChars layout: [topLeft, topRight, bottomLeft, bottomRight, horizontal, vertical, topT, bottomT, leftT, rightT, cross]\n const topLeft = borderChars[0]\n const topRight = borderChars[1]\n const bottomLeft = borderChars[2]\n const bottomRight = borderChars[3]\n const horizontal = borderChars[4]\n const vertical = borderChars[5]\n\n // Top border\n if (sides.top) {\n if (sides.left) this.drawChar(topLeft, x, y, borderColor, transparent)\n for (let col = 1; col < width - 1; col++) {\n this.drawChar(horizontal, x + col, y, borderColor, transparent)\n }\n if (sides.right && width > 1) this.drawChar(topRight, x + width - 1, y, borderColor, transparent)\n }\n\n // Bottom border\n if (sides.bottom && height > 1) {\n if (sides.left) this.drawChar(bottomLeft, x, y + height - 1, borderColor, transparent)\n for (let col = 1; col < width - 1; col++) {\n this.drawChar(horizontal, x + col, y + height - 1, borderColor, transparent)\n }\n if (sides.right && width > 1)\n this.drawChar(bottomRight, x + width - 1, y + height - 1, borderColor, transparent)\n }\n\n // Left border\n if (sides.left) {\n for (let row = 1; row < height - 1; row++) {\n this.drawChar(vertical, x, y + row, borderColor, transparent)\n }\n }\n\n // Right border\n if (sides.right && width > 1) {\n for (let row = 1; row < height - 1; row++) {\n this.drawChar(vertical, x + width - 1, y + row, borderColor, transparent)\n }\n }\n\n // Draw title on top border\n if (title && sides.top && width > 4) {\n const maxTitleLen = width - 4\n const truncatedTitle = title.length > maxTitleLen ? title.slice(0, maxTitleLen) : title\n let titleX: number\n if (titleAlignment === \"center\") {\n titleX = x + Math.floor((width - truncatedTitle.length) / 2)\n } else if (titleAlignment === \"right\") {\n titleX = x + width - truncatedTitle.length - 2\n } else {\n titleX = x + 2\n }\n this.drawText(truncatedTitle, titleX, y, borderColor, transparent)\n }\n }\n\n private getDefaultBorderChars(borderStyle?: string): Uint32Array {\n // Rounded border chars by default\n const styles: Record<string, number[]> = {\n rounded: [0x256d, 0x256e, 0x2570, 0x256f, 0x2500, 0x2502, 0x252c, 0x2534, 0x251c, 0x2524, 0x253c],\n single: [0x250c, 0x2510, 0x2514, 0x2518, 0x2500, 0x2502, 0x252c, 0x2534, 0x251c, 0x2524, 0x253c],\n double: [0x2554, 0x2557, 0x255a, 0x255d, 0x2550, 0x2551, 0x2566, 0x2569, 0x2560, 0x2563, 0x256c],\n heavy: [0x250f, 0x2513, 0x2517, 0x251b, 0x2501, 0x2503, 0x2533, 0x253b, 0x2523, 0x252b, 0x254b],\n }\n const chars = styles[borderStyle ?? \"rounded\"] ?? styles.rounded\n return new Uint32Array(chars)\n }\n\n pushScissorRect(x: number, y: number, width: number, height: number): void {\n if (this.scissorStack.length > 0) {\n // Intersect with current scissor\n const current = this.scissorStack[this.scissorStack.length - 1]\n const nx = Math.max(x, current.x)\n const ny = Math.max(y, current.y)\n const nw = Math.min(x + width, current.x + current.width) - nx\n const nh = Math.min(y + height, current.y + current.height) - ny\n this.scissorStack.push({ x: nx, y: ny, width: Math.max(0, nw), height: Math.max(0, nh) })\n } else {\n this.scissorStack.push({ x, y, width, height })\n }\n }\n\n popScissorRect(): void {\n this.scissorStack.pop()\n }\n\n clearScissorRects(): void {\n this.scissorStack = []\n }\n\n pushOpacity(opacity: number): void {\n const current = this.getCurrentOpacityMultiplier()\n this.opacityStack.push(current * opacity)\n }\n\n popOpacity(): void {\n this.opacityStack.pop()\n }\n\n getCurrentOpacity(): number {\n return this.getCurrentOpacityMultiplier()\n }\n\n clearOpacity(): void {\n this.opacityStack = []\n }\n\n resize(width: number, height: number): void {\n this._width = width\n this._height = height\n const size = width * height\n this.char = new Uint32Array(size)\n this.fg = new Float32Array(size * 4)\n this.bg = new Float32Array(size * 4)\n this.attributes = new Uint32Array(size)\n this.char.fill(0x20)\n }\n\n // Read buffer into CapturedLine[] for testing\n getSpanLines(): CapturedLine[] {\n const lines: CapturedLine[] = []\n\n for (let row = 0; row < this._height; row++) {\n const spans: CapturedSpan[] = []\n let currentSpan: CapturedSpan | null = null\n\n for (let col = 0; col < this._width; col++) {\n const idx = row * this._width + col\n const offset = idx * 4\n\n // Skip continuation chars\n if (this.attributes[idx] & CONTINUATION) continue\n\n const charCode = this.char[idx]\n const ch = charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n const fgR = this.fg[offset]\n const fgG = this.fg[offset + 1]\n const fgB = this.fg[offset + 2]\n const fgA = this.fg[offset + 3]\n const bgR = this.bg[offset]\n const bgG = this.bg[offset + 1]\n const bgB = this.bg[offset + 2]\n const bgA = this.bg[offset + 3]\n const attr = this.attributes[idx] & 0xff\n\n const fg: RGBA = {\n r: fgR, g: fgG, b: fgB, a: fgA,\n buffer: new Float32Array([fgR, fgG, fgB, fgA]),\n } as RGBA\n const bg: RGBA = {\n r: bgR, g: bgG, b: bgB, a: bgA,\n buffer: new Float32Array([bgR, bgG, bgB, bgA]),\n } as RGBA\n\n if (\n currentSpan &&\n currentSpan.fg.r === fgR &&\n currentSpan.fg.g === fgG &&\n currentSpan.fg.b === fgB &&\n currentSpan.fg.a === fgA &&\n currentSpan.bg.r === bgR &&\n currentSpan.bg.g === bgG &&\n currentSpan.bg.b === bgB &&\n currentSpan.bg.a === bgA &&\n currentSpan.attributes === attr\n ) {\n currentSpan.text += ch\n currentSpan.width += 1\n } else {\n if (currentSpan) spans.push(currentSpan)\n currentSpan = { text: ch, fg, bg, attributes: attr, width: 1 }\n }\n }\n\n if (currentSpan) spans.push(currentSpan)\n lines.push({ spans })\n }\n\n return lines\n }\n\n // Draw a text buffer view into the buffer\n drawTextBufferView(view: any, x: number, y: number): void {\n if (!view || !view.getVisibleLines) return\n\n const lines = view.getVisibleLines()\n if (!lines) return\n\n const textAlign = view.textAlign as string | undefined\n const viewWidth = view._viewportWidth as number | undefined\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n const line = lines[lineIdx]\n if (!line) continue\n\n let curX = x\n if (textAlign && textAlign !== \"left\" && viewWidth) {\n const lineWidth = line.chunks.reduce((sum: number, c: any) => sum + c.text.length, 0)\n if (textAlign === \"center\") {\n curX = x + Math.floor((viewWidth - lineWidth) / 2)\n } else if (textAlign === \"right\") {\n curX = x + viewWidth - lineWidth\n }\n }\n for (const chunk of line.chunks) {\n const text = chunk.text\n const fgColor = chunk.fg\n const bgColor = chunk.bg\n let attr = chunk.attributes ?? 0\n\n // Encode link ID into attributes if chunk has a link\n if (chunk.link && chunk.link.url) {\n const linkId = this.registerLink(chunk.link.url)\n attr = attributesWithLink(attr, linkId)\n }\n\n for (const ch of text) {\n if (curX >= this._width) break\n if (curX >= 0 && y + lineIdx >= 0 && y + lineIdx < this._height) {\n this.setCell(curX, y + lineIdx, ch, fgColor, bgColor, attr)\n }\n curX++\n }\n }\n }\n }\n\n drawTextBuffer(textBufferView: any, x: number, y: number): void {\n this.drawTextBufferView(textBufferView, x, y)\n }\n\n drawFrameBuffer(\n destX: number,\n destY: number,\n frameBuffer: BrowserBuffer,\n sourceX: number = 0,\n sourceY: number = 0,\n sourceWidth?: number,\n sourceHeight?: number,\n ): void {\n const sw = sourceWidth ?? frameBuffer.width\n const sh = sourceHeight ?? frameBuffer.height\n const srcChar = frameBuffer.char\n const srcFg = frameBuffer.fg\n const srcBg = frameBuffer.bg\n const srcAttr = frameBuffer.attributes\n const srcCols = frameBuffer.width\n\n for (let row = 0; row < sh; row++) {\n const srcRow = sourceY + row\n const dstRow = destY + row\n if (srcRow < 0 || srcRow >= frameBuffer.height) continue\n if (dstRow < 0 || dstRow >= this._height) continue\n\n for (let col = 0; col < sw; col++) {\n const srcCol = sourceX + col\n const dstCol = destX + col\n if (srcCol < 0 || srcCol >= frameBuffer.width) continue\n if (dstCol < 0 || dstCol >= this._width) continue\n if (!this.isInScissor(dstCol, dstRow)) continue\n\n const srcIdx = srcRow * srcCols + srcCol\n const dstIdx = dstRow * this._width + dstCol\n const srcOffset = srcIdx * 4\n const dstOffset = dstIdx * 4\n\n this.char[dstIdx] = srcChar[srcIdx]\n this.attributes[dstIdx] = srcAttr[srcIdx]\n\n // Apply opacity to fg\n const fgA = srcFg[srcOffset + 3]\n const opacityMul = this.getCurrentOpacityMultiplier()\n this.fg[dstOffset] = srcFg[srcOffset]\n this.fg[dstOffset + 1] = srcFg[srcOffset + 1]\n this.fg[dstOffset + 2] = srcFg[srcOffset + 2]\n this.fg[dstOffset + 3] = fgA * opacityMul\n\n // Apply opacity to bg\n const bgA = srcBg[srcOffset + 3]\n this.bg[dstOffset] = srcBg[srcOffset]\n this.bg[dstOffset + 1] = srcBg[srcOffset + 1]\n this.bg[dstOffset + 2] = srcBg[srcOffset + 2]\n this.bg[dstOffset + 3] = bgA * opacityMul\n }\n }\n }\n drawEditorView(editorView: any, x: number, y: number): void {\n if (!editorView) return\n\n const viewport = editorView.getViewport()\n const text = editorView.getText()\n const lines = text.split(\"\\n\")\n\n // Default colors\n const dfg = editorView.editBuffer?._defaultFg ?? {\n r: 1, g: 1, b: 1, a: 1,\n buffer: new Float32Array([1, 1, 1, 1]),\n } as RGBA\n const dbg = editorView.editBuffer?._defaultBg ?? {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n } as RGBA\n\n const visibleRows = viewport.height > 0 ? viewport.height : this._height - y\n\n if (text === \"\" && editorView._placeholderChunks && editorView._placeholderChunks.length > 0) {\n // Draw placeholder text; offset by 1 cell for line cursor so it doesn't overlap\n let curX = this.cursorStyleType === \"line\" ? x + 1 : x\n for (const chunk of editorView._placeholderChunks) {\n const chunkFg = chunk.fg ?? dfg\n const chunkBg = chunk.bg ?? dbg\n const attr = (chunk.attributes ?? 0) | 2 // DIM attribute = 1 << 1\n for (const ch of chunk.text) {\n if (curX >= this._width) break\n if (curX >= 0 && y >= 0 && y < this._height) {\n this.setCell(curX, y, ch, chunkFg, chunkBg, attr)\n }\n curX++\n }\n }\n } else {\n // Draw text lines\n for (let row = 0; row < visibleRows; row++) {\n const lineIdx = viewport.offsetY + row\n if (lineIdx < 0 || lineIdx >= lines.length) continue\n const dstRow = y + row\n if (dstRow < 0 || dstRow >= this._height) continue\n\n const line = lines[lineIdx]\n for (let col = 0; col < line.length; col++) {\n const srcCol = viewport.offsetX + col\n if (srcCol < 0 || srcCol >= line.length) continue\n const dstCol = x + col\n if (dstCol < 0 || dstCol >= this._width) break\n\n this.setCell(dstCol, dstRow, line[srcCol], dfg, dbg, 0)\n }\n }\n }\n\n // Draw cursor\n const cursor = editorView.getVisualCursor()\n if (cursor) {\n const cursorX = x + cursor.visualCol\n const cursorY = y + cursor.visualRow\n if (cursorX >= 0 && cursorX < this._width && cursorY >= 0 && cursorY < this._height) {\n const cursorFg = this.cursorColor ?? dfg\n if (this.cursorStyleType === \"line\") {\n // Line cursor: store position for renderer to build cursor overlay\n this.lineCursorPosition = { x: cursorX, y: cursorY }\n } else {\n // Block cursor: overwrite cell with INVERSE\n const idx = cursorY * this._width + cursorX\n const charCode = this.char[idx]\n const ch = charCode === 0 || charCode === 0x20 ? \" \" : String.fromCodePoint(charCode)\n const offset = idx * 4\n const cellBg = {\n r: this.bg[offset],\n g: this.bg[offset + 1],\n b: this.bg[offset + 2],\n a: this.bg[offset + 3] || 1,\n } as RGBA\n this.setCell(cursorX, cursorY, ch, cursorFg, cellBg, 32) // INVERSE = 1 << 5 = 32\n }\n }\n }\n }\n drawSuperSampleBuffer(): void {}\n drawPackedBuffer(): void {}\n drawGrayscaleBuffer(): void {}\n drawGrayscaleBufferSupersampled(): void {}\n drawGrid(): void {}\n encodeUnicode(_text: string): null {\n return null\n }\n freeUnicode(): void {}\n getRealCharBytes(): Uint8Array {\n return new Uint8Array(0)\n }\n destroy(): void {}\n}\n\n// Export as OptimizedBuffer so opentui source code imports work directly\nexport { BrowserBuffer as OptimizedBuffer }\n", "import type { BrowserBuffer } from \"./browser-buffer\"\nimport type { RGBA } from \"./core-shims/rgba\"\nimport type { SelectionManager } from \"./selection-manager\"\n\n/** Cursor overlay info produced by the render pipeline, consumed by the painter */\nexport interface CursorOverlay {\n x: number\n y: number\n color: RGBA\n blinking: boolean\n}\n\nconst TextAttributes = {\n BOLD: 1 << 0,\n DIM: 1 << 1,\n ITALIC: 1 << 2,\n UNDERLINE: 1 << 3,\n UNDERLINE_DASHED: 1 << 4,\n INVERSE: 1 << 5,\n UNDERLINE_DOTTED: 1 << 6,\n}\n\nconst CONTINUATION = 0xc0000000\nconst LINE_CURSOR_WIDTH = 8\nconst CURSOR_BLINK_INTERVAL_MS = 530\n\n// Box-drawing character definitions (U+2500\u2013U+257F)\n// Each entry defines which directions extend from cell center and the line weight.\ninterface BoxDrawDef {\n left?: boolean\n right?: boolean\n up?: boolean\n down?: boolean\n type: \"light\" | \"heavy\" | \"double\"\n arc?: \"tl\" | \"tr\" | \"bl\" | \"br\" // rounded corner arc direction\n}\n\nconst BOX_DRAWING_MAP: Record<number, BoxDrawDef> = {\n // Light lines\n 0x2500: { left: true, right: true, type: \"light\" }, // \u2500\n 0x2502: { up: true, down: true, type: \"light\" }, // \u2502\n 0x250c: { right: true, down: true, type: \"light\" }, // \u250C\n 0x2510: { left: true, down: true, type: \"light\" }, // \u2510\n 0x2514: { right: true, up: true, type: \"light\" }, // \u2514\n 0x2518: { left: true, up: true, type: \"light\" }, // \u2518\n 0x251c: { up: true, down: true, right: true, type: \"light\" }, // \u251C\n 0x2524: { up: true, down: true, left: true, type: \"light\" }, // \u2524\n 0x252c: { left: true, right: true, down: true, type: \"light\" }, // \u252C\n 0x2534: { left: true, right: true, up: true, type: \"light\" }, // \u2534\n 0x253c: { left: true, right: true, up: true, down: true, type: \"light\" }, // \u253C\n\n // Heavy lines\n 0x2501: { left: true, right: true, type: \"heavy\" }, // \u2501\n 0x2503: { up: true, down: true, type: \"heavy\" }, // \u2503\n 0x250f: { right: true, down: true, type: \"heavy\" }, // \u250F\n 0x2513: { left: true, down: true, type: \"heavy\" }, // \u2513\n 0x2517: { right: true, up: true, type: \"heavy\" }, // \u2517\n 0x251b: { left: true, up: true, type: \"heavy\" }, // \u251B\n 0x2523: { up: true, down: true, right: true, type: \"heavy\" }, // \u2523\n 0x252b: { up: true, down: true, left: true, type: \"heavy\" }, // \u252B\n 0x2533: { left: true, right: true, down: true, type: \"heavy\" }, // \u2533\n 0x253b: { left: true, right: true, up: true, type: \"heavy\" }, // \u253B\n 0x254b: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u254B\n\n // Light/heavy mixed (treat as light for simplicity of joins)\n 0x250d: { right: true, down: true, type: \"heavy\" }, // \u250D\n 0x250e: { right: true, down: true, type: \"heavy\" }, // \u250E\n 0x2511: { left: true, down: true, type: \"heavy\" }, // \u2511\n 0x2512: { left: true, down: true, type: \"heavy\" }, // \u2512\n 0x2515: { right: true, up: true, type: \"heavy\" }, // \u2515\n 0x2516: { right: true, up: true, type: \"heavy\" }, // \u2516\n 0x2519: { left: true, up: true, type: \"heavy\" }, // \u2519\n 0x251a: { left: true, up: true, type: \"heavy\" }, // \u251A\n 0x251d: { up: true, down: true, right: true, type: \"heavy\" }, // \u251D\n 0x251e: { up: true, down: true, right: true, type: \"light\" }, // \u251E\n 0x251f: { up: true, down: true, right: true, type: \"light\" }, // \u251F\n 0x2520: { up: true, down: true, right: true, type: \"heavy\" }, // \u2520\n 0x2521: { up: true, down: true, right: true, type: \"heavy\" }, // \u2521\n 0x2522: { up: true, down: true, right: true, type: \"heavy\" }, // \u2522\n 0x2525: { up: true, down: true, left: true, type: \"heavy\" }, // \u2525\n 0x2526: { up: true, down: true, left: true, type: \"light\" }, // \u2526\n 0x2527: { up: true, down: true, left: true, type: \"light\" }, // \u2527\n 0x2528: { up: true, down: true, left: true, type: \"heavy\" }, // \u2528\n 0x2529: { up: true, down: true, left: true, type: \"heavy\" }, // \u2529\n 0x252a: { up: true, down: true, left: true, type: \"heavy\" }, // \u252A\n 0x252d: { left: true, right: true, down: true, type: \"heavy\" }, // \u252D\n 0x252e: { left: true, right: true, down: true, type: \"heavy\" }, // \u252E\n 0x252f: { left: true, right: true, down: true, type: \"heavy\" }, // \u252F\n 0x2530: { left: true, right: true, down: true, type: \"heavy\" }, // \u2530\n 0x2531: { left: true, right: true, down: true, type: \"heavy\" }, // \u2531\n 0x2532: { left: true, right: true, down: true, type: \"heavy\" }, // \u2532\n 0x2535: { left: true, right: true, up: true, type: \"heavy\" }, // \u2535\n 0x2536: { left: true, right: true, up: true, type: \"heavy\" }, // \u2536\n 0x2537: { left: true, right: true, up: true, type: \"heavy\" }, // \u2537\n 0x2538: { left: true, right: true, up: true, type: \"heavy\" }, // \u2538\n 0x2539: { left: true, right: true, up: true, type: \"heavy\" }, // \u2539\n 0x253a: { left: true, right: true, up: true, type: \"heavy\" }, // \u253A\n 0x253d: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253D\n 0x253e: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253E\n 0x253f: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253F\n 0x2540: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2540\n 0x2541: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2541\n 0x2542: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2542\n 0x2543: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2543\n 0x2544: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2544\n 0x2545: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2545\n 0x2546: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2546\n 0x2547: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2547\n 0x2548: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2548\n 0x2549: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2549\n 0x254a: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u254A\n\n // Dashed lines (render as solid light/heavy)\n 0x2504: { left: true, right: true, type: \"light\" }, // \u2504\n 0x2505: { left: true, right: true, type: \"heavy\" }, // \u2505\n 0x2506: { up: true, down: true, type: \"light\" }, // \u2506\n 0x2507: { up: true, down: true, type: \"heavy\" }, // \u2507\n 0x2508: { left: true, right: true, type: \"light\" }, // \u2508\n 0x2509: { left: true, right: true, type: \"heavy\" }, // \u2509\n 0x250a: { up: true, down: true, type: \"light\" }, // \u250A\n 0x250b: { up: true, down: true, type: \"heavy\" }, // \u250B\n\n // Double lines\n 0x2550: { left: true, right: true, type: \"double\" }, // \u2550\n 0x2551: { up: true, down: true, type: \"double\" }, // \u2551\n 0x2552: { right: true, down: true, type: \"double\" }, // \u2552\n 0x2553: { right: true, down: true, type: \"double\" }, // \u2553\n 0x2554: { right: true, down: true, type: \"double\" }, // \u2554\n 0x2555: { left: true, down: true, type: \"double\" }, // \u2555\n 0x2556: { left: true, down: true, type: \"double\" }, // \u2556\n 0x2557: { left: true, down: true, type: \"double\" }, // \u2557\n 0x2558: { right: true, up: true, type: \"double\" }, // \u2558\n 0x2559: { right: true, up: true, type: \"double\" }, // \u2559\n 0x255a: { right: true, up: true, type: \"double\" }, // \u255A\n 0x255b: { left: true, up: true, type: \"double\" }, // \u255B\n 0x255c: { left: true, up: true, type: \"double\" }, // \u255C\n 0x255d: { left: true, up: true, type: \"double\" }, // \u255D\n 0x255e: { up: true, down: true, right: true, type: \"double\" }, // \u255E\n 0x255f: { up: true, down: true, right: true, type: \"double\" }, // \u255F\n 0x2560: { up: true, down: true, right: true, type: \"double\" }, // \u2560\n 0x2561: { up: true, down: true, left: true, type: \"double\" }, // \u2561\n 0x2562: { up: true, down: true, left: true, type: \"double\" }, // \u2562\n 0x2563: { up: true, down: true, left: true, type: \"double\" }, // \u2563\n 0x2564: { left: true, right: true, down: true, type: \"double\" }, // \u2564\n 0x2565: { left: true, right: true, down: true, type: \"double\" }, // \u2565\n 0x2566: { left: true, right: true, down: true, type: \"double\" }, // \u2566\n 0x2567: { left: true, right: true, up: true, type: \"double\" }, // \u2567\n 0x2568: { left: true, right: true, up: true, type: \"double\" }, // \u2568\n 0x2569: { left: true, right: true, up: true, type: \"double\" }, // \u2569\n 0x256a: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256A\n 0x256b: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256B\n 0x256c: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256C\n\n // Rounded corners\n 0x256d: { right: true, down: true, type: \"light\", arc: \"tl\" }, // \u256D\n 0x256e: { left: true, down: true, type: \"light\", arc: \"tr\" }, // \u256E\n 0x256f: { left: true, up: true, type: \"light\", arc: \"br\" }, // \u256F\n 0x2570: { right: true, up: true, type: \"light\", arc: \"bl\" }, // \u2570\n\n // Diagonal lines (render as simple connecting lines)\n 0x2571: { type: \"light\" }, // \u2571 (forward slash)\n 0x2572: { type: \"light\" }, // \u2572 (backslash)\n 0x2573: { type: \"light\" }, // \u2573 (cross)\n\n // Half lines\n 0x2574: { left: true, type: \"light\" }, // \u2574\n 0x2575: { up: true, type: \"light\" }, // \u2575\n 0x2576: { right: true, type: \"light\" }, // \u2576\n 0x2577: { down: true, type: \"light\" }, // \u2577\n 0x2578: { left: true, type: \"heavy\" }, // \u2578\n 0x2579: { up: true, type: \"heavy\" }, // \u2579\n 0x257a: { right: true, type: \"heavy\" }, // \u257A\n 0x257b: { down: true, type: \"heavy\" }, // \u257B\n 0x257c: { left: true, right: true, type: \"light\" }, // \u257C (light left, heavy right)\n 0x257d: { up: true, down: true, type: \"light\" }, // \u257D (light up, heavy down)\n 0x257e: { left: true, right: true, type: \"heavy\" }, // \u257E (heavy left, light right)\n 0x257f: { up: true, down: true, type: \"heavy\" }, // \u257F (heavy up, light down)\n}\n\nexport interface CanvasPainterOptions {\n fontFamily?: string\n fontSize?: number\n}\n\nexport class CanvasPainter {\n private cellWidth: number = 0\n private cellHeight: number = 0\n private fontFamily: string\n private fontSize: number\n private baselineOffset: number = 0\n\n constructor(options: CanvasPainterOptions = {}) {\n this.fontFamily = options.fontFamily ?? \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\"\n this.fontSize = options.fontSize ?? 14\n }\n\n measureCell(ctx: CanvasRenderingContext2D): { width: number; height: number } {\n ctx.font = `${this.fontSize}px ${this.fontFamily}`\n const metrics = ctx.measureText(\"M\")\n this.cellWidth = metrics.width\n this.cellHeight = Math.ceil(this.fontSize * 1.4)\n this.baselineOffset = Math.ceil(this.fontSize * 1.1)\n return { width: this.cellWidth, height: this.cellHeight }\n }\n\n getCellSize(): { width: number; height: number } {\n return { width: this.cellWidth, height: this.cellHeight }\n }\n\n paint(ctx: CanvasRenderingContext2D, buffer: BrowserBuffer, selection?: SelectionManager, cursor?: CursorOverlay | null): void {\n const { char, fg, bg, attributes } = buffer\n const cols = buffer.width\n const rows = buffer.height\n const cw = this.cellWidth\n const ch = this.cellHeight\n\n // Pass 1: Background rects \u2014 batch adjacent same-color cells per row\n for (let row = 0; row < rows; row++) {\n let runStartCol = 0\n let runR = -1,\n runG = -1,\n runB = -1,\n runA = -1\n\n for (let col = 0; col <= cols; col++) {\n let r = 0,\n g = 0,\n b = 0,\n a = 0\n if (col < cols) {\n const idx = row * cols + col\n const offset = idx * 4\n const attr = attributes[idx] & 0xff\n const isInverse = !!(attr & TextAttributes.INVERSE)\n if (isInverse) {\n // INVERSE: use fg color as background\n r = fg[offset]\n g = fg[offset + 1]\n b = fg[offset + 2]\n a = fg[offset + 3]\n } else {\n r = bg[offset]\n g = bg[offset + 1]\n b = bg[offset + 2]\n a = bg[offset + 3]\n }\n }\n\n if (col < cols && r === runR && g === runG && b === runB && a === runA) {\n continue\n }\n\n // Flush previous run\n if (runA > 0 && col > runStartCol) {\n ctx.fillStyle = rgbaToCSS(runR, runG, runB, runA)\n ctx.fillRect(runStartCol * cw, row * ch, (col - runStartCol) * cw, ch)\n }\n\n runStartCol = col\n runR = r\n runG = g\n runB = b\n runA = a\n }\n }\n\n // Pass 2: Foreground characters\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n const idx = row * cols + col\n\n // Skip continuation cells (wide char placeholders)\n if (attributes[idx] & CONTINUATION) continue\n\n const charCode = char[idx]\n if (charCode === 0 || charCode === 0x20) continue // skip spaces\n\n const offset = idx * 4\n const attr = attributes[idx] & 0xff\n const isInverse = !!(attr & TextAttributes.INVERSE)\n\n let fgR: number, fgG: number, fgB: number, fgA: number\n if (isInverse) {\n // INVERSE: use bg color as text color\n fgR = bg[offset]\n fgG = bg[offset + 1]\n fgB = bg[offset + 2]\n fgA = bg[offset + 3]\n // If bg is transparent, use black (default terminal bg) as text color\n if (fgA === 0) {\n fgR = 0; fgG = 0; fgB = 0; fgA = 1\n }\n } else {\n fgR = fg[offset]\n fgG = fg[offset + 1]\n fgB = fg[offset + 2]\n fgA = fg[offset + 3]\n }\n\n if (fgA === 0) continue\n\n const isBold = !!(attr & TextAttributes.BOLD)\n const isItalic = !!(attr & TextAttributes.ITALIC)\n const isDim = !!(attr & TextAttributes.DIM)\n const isUnderline = !!(attr & TextAttributes.UNDERLINE)\n\n const effectiveA = isDim ? fgA * 0.5 : fgA\n\n // Box-drawing character rendering\n if (charCode >= 0x2500 && charCode <= 0x257f) {\n const def = BOX_DRAWING_MAP[charCode]\n if (def) {\n const cellX = col * cw\n const cellY = row * ch\n const cx = cellX + cw / 2\n const cy = cellY + ch / 2\n ctx.strokeStyle = rgbaToCSS(fgR, fgG, fgB, effectiveA)\n ctx.lineCap = \"square\"\n\n if (def.type === \"double\") {\n // Draw two parallel lines for each direction\n const gap = Math.max(2, Math.round(cw / 5))\n ctx.lineWidth = 1\n ctx.beginPath()\n if (def.left) {\n ctx.moveTo(cellX, cy - gap / 2); ctx.lineTo(cx, cy - gap / 2)\n ctx.moveTo(cellX, cy + gap / 2); ctx.lineTo(cx, cy + gap / 2)\n }\n if (def.right) {\n ctx.moveTo(cx, cy - gap / 2); ctx.lineTo(cellX + cw, cy - gap / 2)\n ctx.moveTo(cx, cy + gap / 2); ctx.lineTo(cellX + cw, cy + gap / 2)\n }\n if (def.up) {\n ctx.moveTo(cx - gap / 2, cellY); ctx.lineTo(cx - gap / 2, cy)\n ctx.moveTo(cx + gap / 2, cellY); ctx.lineTo(cx + gap / 2, cy)\n }\n if (def.down) {\n ctx.moveTo(cx - gap / 2, cy); ctx.lineTo(cx - gap / 2, cellY + ch)\n ctx.moveTo(cx + gap / 2, cy); ctx.lineTo(cx + gap / 2, cellY + ch)\n }\n ctx.stroke()\n } else if (def.arc) {\n // Rounded corners: use ellipse to handle rectangular cells (ch \u2260 cw)\n const rx = cw / 2\n const ry = ch / 2\n ctx.lineWidth = 1\n ctx.beginPath()\n if (def.arc === \"tl\") {\n // \u256D: arc from right edge to bottom edge\n ctx.ellipse(cellX + cw, cellY + ch, rx, ry, 0, Math.PI, Math.PI * 1.5)\n } else if (def.arc === \"tr\") {\n // \u256E: arc from left edge to bottom edge\n ctx.ellipse(cellX, cellY + ch, rx, ry, 0, Math.PI * 1.5, Math.PI * 2)\n } else if (def.arc === \"bl\") {\n // \u2570: arc from right edge to top edge\n ctx.ellipse(cellX + cw, cellY, rx, ry, 0, Math.PI * 0.5, Math.PI)\n } else if (def.arc === \"br\") {\n // \u256F: arc from left edge to top edge\n ctx.ellipse(cellX, cellY, rx, ry, 0, 0, Math.PI * 0.5)\n }\n ctx.stroke()\n } else if (charCode === 0x2571 || charCode === 0x2572 || charCode === 0x2573) {\n // Diagonal lines\n ctx.lineWidth = 1\n ctx.beginPath()\n if (charCode === 0x2571 || charCode === 0x2573) {\n // \u2571 forward slash\n ctx.moveTo(cellX + cw, cellY)\n ctx.lineTo(cellX, cellY + ch)\n }\n if (charCode === 0x2572 || charCode === 0x2573) {\n // \u2572 backslash\n ctx.moveTo(cellX, cellY)\n ctx.lineTo(cellX + cw, cellY + ch)\n }\n ctx.stroke()\n } else {\n ctx.lineWidth = def.type === \"heavy\" ? 2 : 1\n ctx.beginPath()\n if (def.left) { ctx.moveTo(cellX, cy); ctx.lineTo(cx, cy) }\n if (def.right) { ctx.moveTo(cx, cy); ctx.lineTo(cellX + cw, cy) }\n if (def.up) { ctx.moveTo(cx, cellY); ctx.lineTo(cx, cy) }\n if (def.down) { ctx.moveTo(cx, cy); ctx.lineTo(cx, cellY + ch) }\n ctx.stroke()\n }\n continue\n }\n }\n\n // Normal text rendering\n ctx.fillStyle = rgbaToCSS(fgR, fgG, fgB, effectiveA)\n\n // Build font string\n let fontStyle = \"\"\n if (isItalic) fontStyle += \"italic \"\n if (isBold) fontStyle += \"bold \"\n fontStyle += `${this.fontSize}px ${this.fontFamily}`\n ctx.font = fontStyle\n\n const character = String.fromCodePoint(charCode)\n const x = col * cw\n const y = row * this.cellHeight + this.baselineOffset\n\n ctx.fillText(character, x, y)\n\n // Draw underline\n if (isUnderline) {\n const isDashed = !!(attr & TextAttributes.UNDERLINE_DASHED)\n const isDotted = !!(attr & TextAttributes.UNDERLINE_DOTTED)\n ctx.strokeStyle = ctx.fillStyle\n ctx.lineWidth = 1\n const underlineY = row * this.cellHeight + this.baselineOffset + 2\n if (isDotted) {\n ctx.lineCap = \"round\"\n ctx.setLineDash([0.5, 2.5])\n } else if (isDashed) {\n ctx.setLineDash([2, 2])\n }\n ctx.beginPath()\n ctx.moveTo(x, underlineY)\n ctx.lineTo(x + cw, underlineY)\n ctx.stroke()\n if (isDotted || isDashed) {\n ctx.setLineDash([])\n ctx.lineCap = \"butt\"\n }\n }\n }\n }\n\n // Pass 3: Line cursor overlay\n if (cursor) {\n const visible = !cursor.blinking || Math.floor(performance.now() / CURSOR_BLINK_INTERVAL_MS) % 2 === 0\n if (visible) {\n ctx.fillStyle = rgbaToCSS(cursor.color.r, cursor.color.g, cursor.color.b, cursor.color.a ?? 1)\n ctx.fillRect(cursor.x * cw, cursor.y * ch, LINE_CURSOR_WIDTH, ch)\n }\n }\n\n // Pass 4: Selection overlay\n if (selection?.active) {\n ctx.fillStyle = \"rgba(51, 153, 255, 0.3)\"\n for (let row = 0; row < rows; row++) {\n let runStart = -1\n for (let col = 0; col <= cols; col++) {\n const selected = col < cols && selection.isSelected(col, row)\n if (selected && runStart === -1) {\n runStart = col\n } else if (!selected && runStart !== -1) {\n ctx.fillRect(runStart * cw, row * ch, (col - runStart) * cw, ch)\n runStart = -1\n }\n }\n }\n }\n }\n}\n\nfunction rgbaToCSS(r: number, g: number, b: number, a: number): string {\n const ri = Math.round(r * 255)\n const gi = Math.round(g * 255)\n const bi = Math.round(b * 255)\n return `rgba(${ri},${gi},${bi},${a})`\n}\n", "import type { BrowserBuffer } from \"./browser-buffer\"\n\ninterface SelectionRange {\n startCol: number\n startRow: number\n endCol: number\n endRow: number\n}\n\nexport class SelectionManager {\n private _startCol: number = 0\n private _startRow: number = 0\n private _endCol: number = 0\n private _endRow: number = 0\n private _active: boolean = false\n private _selecting: boolean = false\n\n startSelection(col: number, row: number): void {\n this._startCol = col\n this._startRow = row\n this._endCol = col\n this._endRow = row\n this._selecting = true\n this._active = true\n }\n\n updateSelection(col: number, row: number): void {\n if (!this._selecting) return\n this._endCol = col\n this._endRow = row\n }\n\n endSelection(): void {\n this._selecting = false\n // If start and end are the same cell, clear the selection\n if (this._startCol === this._endCol && this._startRow === this._endRow) {\n this._active = false\n }\n }\n\n clearSelection(): void {\n this._active = false\n this._selecting = false\n }\n\n get active(): boolean {\n return this._active\n }\n\n get selecting(): boolean {\n return this._selecting\n }\n\n /** Returns the selection range normalized to reading order (top-left to bottom-right) */\n getSelectedRange(): SelectionRange | null {\n if (!this._active) return null\n\n let startCol = this._startCol\n let startRow = this._startRow\n let endCol = this._endCol\n let endRow = this._endRow\n\n // Normalize to reading order\n if (startRow > endRow || (startRow === endRow && startCol > endCol)) {\n const tmpCol = startCol\n const tmpRow = startRow\n startCol = endCol\n startRow = endRow\n endCol = tmpCol\n endRow = tmpRow\n }\n\n return { startCol, startRow, endCol, endRow }\n }\n\n isSelected(col: number, row: number): boolean {\n const range = this.getSelectedRange()\n if (!range) return false\n\n const { startCol, startRow, endCol, endRow } = range\n\n if (row < startRow || row > endRow) return false\n if (startRow === endRow) {\n return col >= startCol && col < endCol\n }\n if (row === startRow) return col >= startCol\n if (row === endRow) return col < endCol\n return true\n }\n\n getSelectedText(buffer: BrowserBuffer): string {\n const range = this.getSelectedRange()\n if (!range) return \"\"\n\n const { startCol, startRow, endCol, endRow } = range\n const lines: string[] = []\n\n for (let row = startRow; row <= endRow; row++) {\n let lineStart = row === startRow ? startCol : 0\n let lineEnd = row === endRow ? endCol : buffer.width\n\n // Build the line text\n let line = \"\"\n for (let col = lineStart; col < lineEnd && col < buffer.width; col++) {\n const idx = row * buffer.width + col\n const charCode = buffer.char[idx]\n line += charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n }\n\n // Trim trailing spaces\n lines.push(line.trimEnd())\n }\n\n return lines.join(\"\\n\")\n }\n}\n", "import type { BrowserBuffer } from \"./browser-buffer\"\nimport type { BrowserRenderContext } from \"./browser-render-context\"\n\n/**\n * Shared render pipeline used by both BrowserRenderer and HeadlessRenderer.\n * Runs lifecycle passes, calculates layout, collects and executes render commands.\n */\nexport function executeRenderPipeline(\n buffer: BrowserBuffer,\n renderContext: BrowserRenderContext,\n root: any,\n deltaTime: number,\n): void {\n // Clear buffer\n buffer.clear()\n\n // Run lifecycle passes\n const lifecyclePasses = renderContext.getLifecyclePasses()\n for (const renderable of lifecyclePasses) {\n if (renderable.onLifecyclePass) {\n renderable.onLifecyclePass()\n }\n }\n\n // Calculate layout\n root.calculateLayout()\n\n // Collect render commands\n const renderList: any[] = []\n root.updateLayout(deltaTime, renderList)\n\n // Execute render commands\n for (const cmd of renderList) {\n switch (cmd.action) {\n case \"pushScissorRect\":\n buffer.pushScissorRect(cmd.x, cmd.y, cmd.width, cmd.height)\n break\n case \"popScissorRect\":\n buffer.popScissorRect()\n break\n case \"pushOpacity\":\n buffer.pushOpacity(cmd.opacity)\n break\n case \"popOpacity\":\n buffer.popOpacity()\n break\n case \"render\":\n cmd.renderable.render(buffer, deltaTime)\n break\n }\n }\n\n // Clear scissor/opacity stacks\n buffer.clearScissorRects()\n buffer.clearOpacity()\n}\n", "import { BrowserBuffer } from \"./browser-buffer\"\nimport { BrowserRenderContext } from \"./browser-render-context\"\nimport { CanvasPainter, type CursorOverlay } from \"./canvas-painter\"\nimport { SelectionManager } from \"./selection-manager\"\nimport { getLinkId } from \"./core-shims/index\"\nimport { executeRenderPipeline } from \"./render-pipeline\"\n\n// We import these via the core-shims alias in the Vite build\n// but for the renderer we import directly to avoid circular deps\nlet RootRenderableClass: any = null\n\nexport function setRootRenderableClass(cls: any): void {\n RootRenderableClass = cls\n}\n\nexport class BrowserRenderer {\n public canvas: HTMLCanvasElement\n public ctx2d: CanvasRenderingContext2D\n public buffer: BrowserBuffer\n public renderContext: BrowserRenderContext\n public root: any // RootRenderable\n public painter: CanvasPainter\n public selection: SelectionManager\n\n private cols: number\n private rows: number\n private cellWidth: number = 0\n private cellHeight: number = 0\n private rafId: number | null = null\n private lastTime: number = 0\n private needsRender: boolean = true\n private isDragOver: boolean = false\n private cleanupListeners: (() => void)[] = []\n private mouseDownCell: { col: number; row: number } | null = null\n private backgroundColor: string | null = null\n\n constructor(canvas: HTMLCanvasElement, cols: number, rows: number, options?: { backgroundColor?: string }) {\n this.canvas = canvas\n this.cols = cols\n this.rows = rows\n\n const ctx2d = canvas.getContext(\"2d\")\n if (!ctx2d) throw new Error(\"Could not get 2d context\")\n this.ctx2d = ctx2d\n\n // Measure cell size\n this.painter = new CanvasPainter()\n const cellSize = this.painter.measureCell(this.ctx2d)\n this.cellWidth = cellSize.width\n this.cellHeight = cellSize.height\n\n // Size canvas\n const dpr = window.devicePixelRatio || 1\n canvas.width = Math.ceil(cols * this.cellWidth * dpr)\n canvas.height = Math.ceil(rows * this.cellHeight * dpr)\n canvas.style.width = `${cols * this.cellWidth}px`\n canvas.style.height = `${rows * this.cellHeight}px`\n this.ctx2d.scale(dpr, dpr)\n\n this.backgroundColor = options?.backgroundColor ?? null\n\n // Text cursor for the canvas\n canvas.style.cursor = \"text\"\n\n // Create buffer\n this.buffer = BrowserBuffer.create(cols, rows, \"wcwidth\")\n\n // Create render context\n this.renderContext = new BrowserRenderContext(cols, rows)\n this.renderContext.setOnRenderRequest(() => {\n this.needsRender = true\n })\n\n // Create selection manager\n this.selection = new SelectionManager()\n\n // Create root renderable\n if (!RootRenderableClass) {\n throw new Error(\"RootRenderableClass not set. Call setRootRenderableClass before creating BrowserRenderer.\")\n }\n this.root = new RootRenderableClass(this.renderContext)\n\n // Set up DOM event listeners\n this.setupDomListeners()\n }\n\n private pixelToCell(clientX: number, clientY: number): { col: number; row: number } {\n const rect = this.canvas.getBoundingClientRect()\n const x = clientX - rect.left\n const y = clientY - rect.top\n const col = Math.floor(x / this.cellWidth)\n const row = Math.floor(y / this.cellHeight)\n return {\n col: Math.max(0, Math.min(col, this.cols - 1)),\n row: Math.max(0, Math.min(row, this.rows - 1)),\n }\n }\n\n private setupDomListeners(): void {\n // --- Drag-and-drop ---\n const onDragOver = (e: DragEvent) => {\n e.preventDefault()\n }\n this.canvas.addEventListener(\"dragover\", onDragOver)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragover\", onDragOver))\n\n const onDrop = (e: DragEvent) => {\n e.preventDefault()\n const files = e.dataTransfer?.files\n if (!files || files.length === 0) return\n const file = files[0]\n this.isDragOver = false\n this.renderContext.emit(\"drag-leave\", undefined)\n file.text().then((content) => {\n this.renderContext.emit(\"file-drop\", {\n name: file.name,\n content,\n type: file.type,\n size: file.size,\n })\n })\n }\n this.canvas.addEventListener(\"drop\", onDrop)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"drop\", onDrop))\n\n // --- Mouse selection ---\n const onMouseDown = (e: MouseEvent) => {\n // Only left button\n if (e.button !== 0) return\n this.canvas.focus()\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n this.mouseDownCell = { col, row }\n this.selection.startSelection(col, row)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"mousedown\", onMouseDown)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"mousedown\", onMouseDown))\n\n const onMouseMove = (e: MouseEvent) => {\n // Update cursor style based on whether we're hovering a link\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n const idx = row * this.buffer.width + col\n if (idx >= 0 && idx < this.buffer.attributes.length) {\n const linkId = getLinkId(this.buffer.attributes[idx])\n this.canvas.style.cursor = linkId > 0 ? \"pointer\" : \"text\"\n }\n\n if (!this.selection.selecting) return\n this.selection.updateSelection(col, row)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"mousemove\", onMouseMove)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"mousemove\", onMouseMove))\n\n const onMouseUp = (e: MouseEvent) => {\n const wasSelecting = this.selection.selecting\n if (wasSelecting) {\n this.selection.endSelection()\n this.needsRender = true\n }\n\n // Check for link click: same cell as mousedown (no drag)\n if (e.button === 0 && this.mouseDownCell) {\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n if (col === this.mouseDownCell.col && row === this.mouseDownCell.row) {\n const idx = row * this.buffer.width + col\n if (idx >= 0 && idx < this.buffer.attributes.length) {\n const attr = this.buffer.attributes[idx]\n const linkId = getLinkId(attr)\n if (linkId > 0) {\n const url = this.buffer.getLinkUrl(linkId)\n if (url) {\n window.open(url, \"_blank\")\n }\n }\n }\n }\n this.mouseDownCell = null\n }\n }\n window.addEventListener(\"mouseup\", onMouseUp)\n this.cleanupListeners.push(() => window.removeEventListener(\"mouseup\", onMouseUp))\n\n // --- Drag enter/leave for visual feedback ---\n const onDragEnter = (e: DragEvent) => {\n e.preventDefault()\n if (this.isDragOver) return\n this.isDragOver = true\n this.renderContext.emit(\"drag-enter\", undefined)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"dragenter\", onDragEnter)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragenter\", onDragEnter))\n\n const onDragLeave = (e: DragEvent) => {\n // Only emit when truly leaving the canvas (not entering a child)\n if (e.relatedTarget && this.canvas.contains(e.relatedTarget as Node)) return\n this.isDragOver = false\n this.renderContext.emit(\"drag-leave\", undefined)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"dragleave\", onDragLeave)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragleave\", onDragLeave))\n\n // --- Paste ---\n const onPaste = (e: ClipboardEvent) => {\n if (document.activeElement !== this.canvas) return\n const text = e.clipboardData?.getData(\"text/plain\")\n if (text) {\n e.preventDefault()\n this.renderContext.emit(\"paste\", text)\n }\n }\n document.addEventListener(\"paste\", onPaste)\n this.cleanupListeners.push(() => document.removeEventListener(\"paste\", onPaste))\n }\n\n start(): void {\n this.lastTime = performance.now()\n this.loop()\n }\n\n stop(): void {\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n for (const cleanup of this.cleanupListeners) {\n cleanup()\n }\n this.cleanupListeners = []\n }\n\n private loop = (): void => {\n this.rafId = requestAnimationFrame(this.loop)\n\n const now = performance.now()\n const deltaTime = now - this.lastTime\n this.lastTime = now\n\n let didRender = false\n if (this.needsRender) {\n this.needsRender = false\n didRender = true\n\n // Pass cursor config from render context to buffer before rendering\n this.buffer.cursorColor = this.renderContext.cursorColor\n this.buffer.cursorStyleType = this.renderContext.cursorStyleType\n this.buffer.lineCursorPosition = null\n\n executeRenderPipeline(this.buffer, this.renderContext, this.root, deltaTime)\n }\n\n // Build cursor overlay from buffer position + render context config\n const cursorOverlay = this.buildCursorOverlay()\n\n // Repaint when render pipeline ran, or every frame when blinking cursor is active\n if (!didRender && !cursorOverlay?.blinking) return\n\n // Paint to canvas\n const dpr = window.devicePixelRatio || 1\n this.ctx2d.setTransform(dpr, 0, 0, dpr, 0, 0)\n if (this.backgroundColor) {\n this.ctx2d.fillStyle = this.backgroundColor\n this.ctx2d.fillRect(0, 0, this.canvas.width, this.canvas.height)\n } else {\n this.ctx2d.clearRect(0, 0, this.canvas.width, this.canvas.height)\n }\n this.painter.paint(this.ctx2d, this.buffer, this.selection, cursorOverlay)\n }\n\n private buildCursorOverlay(): CursorOverlay | null {\n const pos = this.buffer.lineCursorPosition\n if (!pos || !this.renderContext.cursorColor) return null\n return {\n x: pos.x,\n y: pos.y,\n color: this.renderContext.cursorColor,\n blinking: this.renderContext.cursorBlinking,\n }\n }\n\n resize(cols: number, rows: number): void {\n this.cols = cols\n this.rows = rows\n\n const dpr = window.devicePixelRatio || 1\n this.canvas.width = Math.ceil(cols * this.cellWidth * dpr)\n this.canvas.height = Math.ceil(rows * this.cellHeight * dpr)\n this.canvas.style.width = `${cols * this.cellWidth}px`\n this.canvas.style.height = `${rows * this.cellHeight}px`\n this.ctx2d.scale(dpr, dpr)\n\n this.buffer.resize(cols, rows)\n this.renderContext.resize(cols, rows)\n this.root.resize(cols, rows)\n this.needsRender = true\n }\n\n private static PREVENT_DEFAULT_KEYS = new Set([\n \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\",\n \" \", \"PageUp\", \"PageDown\", \"Tab\", \"Home\", \"End\",\n ])\n\n private static MODIFIER_KEYS = new Set([\"Alt\", \"Control\", \"Meta\", \"Shift\"])\n\n private static KEY_MAP: Record<string, string> = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\",\n Enter: \"return\",\n Backspace: \"backspace\",\n Delete: \"delete\",\n Tab: \"tab\",\n Escape: \"escape\",\n Home: \"home\",\n End: \"end\",\n \" \": \"space\",\n PageUp: \"pageup\",\n PageDown: \"pagedown\",\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n // Prevent browser default for navigation keys (scrolling) and printable\n // characters (e.g. \"/\" triggers Quick Find in Firefox). Cmd/Ctrl shortcuts\n // like Cmd+C, Cmd+V are preserved.\n if (BrowserRenderer.PREVENT_DEFAULT_KEYS.has(event.key) ||\n (event.key.length === 1 && !event.metaKey && !event.ctrlKey)) {\n event.preventDefault()\n }\n\n // Copy selected text to clipboard (Cmd+C, Ctrl+C, or Option+C on Mac where key is \"\u00E7\")\n if (this.selection.active && (event.key === \"c\" || event.key === \"\u00E7\") && (event.metaKey || event.ctrlKey || event.altKey)) {\n const text = this.selection.getSelectedText(this.buffer)\n if (text) {\n navigator.clipboard.writeText(text).catch(() => {\n // Fallback: temporary textarea + execCommand\n const ta = document.createElement(\"textarea\")\n ta.value = text\n ta.style.position = \"fixed\"\n ta.style.left = \"-9999px\"\n document.body.appendChild(ta)\n ta.select()\n document.execCommand(\"copy\")\n document.body.removeChild(ta)\n })\n }\n event.preventDefault()\n return\n }\n\n // Any other keypress clears the selection (standard terminal behavior)\n // But ignore modifier-only keys so the user can press Option/Ctrl/Cmd before C\n const modifierOnly = BrowserRenderer.MODIFIER_KEYS.has(event.key)\n if (this.selection.active && !modifierOnly) {\n this.selection.clearSelection()\n this.needsRender = true\n }\n\n // Translate browser KeyboardEvent to OpenTUI KeyEvent format\n const keyEvent = {\n name: BrowserRenderer.KEY_MAP[event.key] ?? (event.key.length === 1 ? event.key : event.key.toLowerCase()),\n ctrl: event.ctrlKey,\n meta: event.metaKey,\n shift: event.shiftKey,\n option: event.altKey,\n sequence: event.key,\n number: false,\n raw: event.key,\n eventType: \"press\" as const,\n source: \"raw\" as const,\n _defaultPrevented: false,\n _propagationStopped: false,\n get defaultPrevented() {\n return this._defaultPrevented\n },\n get propagationStopped() {\n return this._propagationStopped\n },\n preventDefault() {\n this._defaultPrevented = true\n },\n stopPropagation() {\n this._propagationStopped = true\n },\n }\n\n this.renderContext._internalKeyInput.emit(\"keypress\", keyEvent)\n this.renderContext.keyInput.emit(\"keypress\", keyEvent)\n }\n}\n", "import { createContext, useContext } from \"react\"\nimport type { BrowserRenderContext } from \"./browser-render-context\"\n\nexport interface BrowserContextValue {\n renderContext: BrowserRenderContext\n}\n\nexport const BrowserContext = createContext<BrowserContextValue | null>(null)\n\nexport function useBrowserContext(): BrowserContextValue {\n const ctx = useContext(BrowserContext)\n if (!ctx) {\n throw new Error(\"useBrowserContext must be used within a BrowserContext.Provider\")\n }\n return ctx\n}\n", "import React, { type ReactNode } from \"react\"\nimport type { BrowserRenderer } from \"./browser-renderer\"\nimport { BrowserContext } from \"./browser-context\"\n\nimport { _render, AppContext, ErrorBoundary as _ErrorBoundary } from \"@gridland/core\"\n\n// Cast needed: ErrorBoundary uses opentui's JSX intrinsics internally,\n// which causes a type conflict with React's JSX types during DTS builds.\nconst ErrorBoundary = _ErrorBoundary as unknown as React.ComponentType<{ children: React.ReactNode }>\n\nexport interface BrowserRoot {\n render(node: ReactNode): void\n unmount(): void\n}\n\nexport function createBrowserRoot(renderer: BrowserRenderer): BrowserRoot {\n let unmountFn: (() => void) | null = null\n\n return {\n render(node: ReactNode) {\n const element = (\n <BrowserContext.Provider value={{ renderContext: renderer.renderContext }}>\n <AppContext.Provider value={{ keyHandler: renderer.renderContext.keyInput as any, renderer: renderer.renderContext as any }}>\n <ErrorBoundary>{node}</ErrorBoundary>\n </AppContext.Provider>\n </BrowserContext.Provider>\n )\n unmountFn = _render(element, renderer.root)\n },\n unmount() {\n if (unmountFn) {\n // Reconciler cleanup would happen here\n }\n },\n }\n}\n", "export interface ReadableCharBuffer {\n width: number\n height: number\n char: Uint32Array\n}\n\nexport function bufferToText(buffer: ReadableCharBuffer): string {\n const lines: string[] = []\n for (let row = 0; row < buffer.height; row++) {\n let line = \"\"\n for (let col = 0; col < buffer.width; col++) {\n const idx = row * buffer.width + col\n const charCode = buffer.char[idx]\n line += charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n }\n lines.push(line.trimEnd())\n }\n // Trim trailing empty lines\n while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop()\n }\n return lines.join(\"\\n\")\n}\n", "import { BrowserBuffer } from \"./browser-buffer\"\nimport { BrowserRenderContext } from \"./browser-render-context\"\nimport { bufferToText } from \"./buffer-to-text\"\nimport { executeRenderPipeline } from \"./render-pipeline\"\n\nlet RootRenderableClass: any = null\n\nexport function setHeadlessRootRenderableClass(cls: any): void {\n RootRenderableClass = cls\n}\n\nexport interface HeadlessRendererOptions {\n cols: number\n rows: number\n}\n\nexport class HeadlessRenderer {\n public buffer: BrowserBuffer\n public renderContext: BrowserRenderContext\n public root: any // RootRenderable\n\n constructor(options: HeadlessRendererOptions) {\n const { cols, rows } = options\n\n this.buffer = BrowserBuffer.create(cols, rows, \"wcwidth\")\n this.renderContext = new BrowserRenderContext(cols, rows)\n this.renderContext.setOnRenderRequest(() => {\n // No-op for headless \u2014 we render on demand\n })\n\n if (!RootRenderableClass) {\n throw new Error(\n \"RootRenderableClass not set. Call setHeadlessRootRenderableClass before creating HeadlessRenderer.\",\n )\n }\n this.root = new RootRenderableClass(this.renderContext)\n }\n\n renderOnce(): void {\n executeRenderPipeline(this.buffer, this.renderContext, this.root, 0)\n }\n\n toText(): string {\n return bufferToText(this.buffer)\n }\n\n resize(cols: number, rows: number): void {\n this.buffer.resize(cols, rows)\n this.renderContext.resize(cols, rows)\n this.root.resize(cols, rows)\n }\n}\n", "import React, { type ReactNode } from \"react\"\nimport type { HeadlessRenderer } from \"./headless-renderer\"\nimport { BrowserContext } from \"./browser-context\"\n\nimport { _render, reconciler, AppContext, ErrorBoundary as _ErrorBoundary } from \"@gridland/core\"\n\nconst ErrorBoundary = _ErrorBoundary as unknown as React.ComponentType<{ children: React.ReactNode }>\n\n// flushSync was renamed to flushSyncFromReconciler in react-reconciler 0.32.0\nconst _r = reconciler as typeof reconciler & { flushSyncFromReconciler?: typeof reconciler.flushSync }\nconst flushSync = _r.flushSyncFromReconciler ?? _r.flushSync\n\nexport interface HeadlessRoot {\n render(node: ReactNode): void\n renderToText(node: ReactNode): string\n unmount(): void\n}\n\nexport function createHeadlessRoot(renderer: HeadlessRenderer): HeadlessRoot {\n let container: any = null\n\n return {\n render(node: ReactNode) {\n const element = (\n <BrowserContext.Provider value={{ renderContext: renderer.renderContext }}>\n <AppContext.Provider\n value={{\n keyHandler: renderer.renderContext.keyInput as any,\n renderer: renderer.renderContext as any,\n }}\n >\n <ErrorBoundary>{node}</ErrorBoundary>\n </AppContext.Provider>\n </BrowserContext.Provider>\n )\n container = _render(element, renderer.root)\n },\n renderToText(node: ReactNode): string {\n flushSync(() => {\n this.render(node)\n })\n renderer.renderOnce()\n return renderer.toText()\n },\n unmount() {\n if (container) {\n reconciler.updateContainer(null, container, null, () => {})\n // @ts-expect-error the types for `react-reconciler` are not up to date with the library.\n reconciler.flushSyncWork()\n container = null\n }\n },\n }\n}\n", "import type { ReactNode } from \"react\"\nimport { BrowserRenderer, setRootRenderableClass } from \"./browser-renderer\"\nimport { createBrowserRoot } from \"./create-browser-root\"\nimport { CanvasPainter } from \"./canvas-painter\"\nimport { RootRenderable } from \"@gridland/core\"\n\nexport interface MountOptions {\n /** Number of columns (auto-calculated from canvas size if omitted) */\n cols?: number\n /** Number of rows (auto-calculated from canvas size if omitted) */\n rows?: number\n /** Font size in pixels (default: 14) */\n fontSize?: number\n /** Font family (default: monospace stack) */\n fontFamily?: string\n /** Listen for keyboard events on the canvas (default: true) */\n keyboard?: boolean\n /** Auto-resize when canvas size changes (default: true) */\n autoResize?: boolean\n}\n\nexport interface MountResult {\n renderer: BrowserRenderer\n unmount: () => void\n resize: (cols: number, rows: number) => void\n}\n\n/**\n * Imperative API to mount Gridland content into a canvas element.\n *\n * ```ts\n * const canvas = document.getElementById(\"my-canvas\") as HTMLCanvasElement\n * const { unmount } = mountGridland(canvas, <App />)\n * ```\n */\nexport function mountGridland(\n canvas: HTMLCanvasElement,\n element: ReactNode,\n options: MountOptions = {},\n): MountResult {\n const {\n fontSize = 14,\n fontFamily = \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\",\n keyboard = true,\n autoResize = true,\n } = options\n\n // Set up RootRenderable\n setRootRenderableClass(RootRenderable)\n\n // Calculate grid dimensions\n const painter = new CanvasPainter({ fontSize, fontFamily })\n const tempCtx = canvas.getContext(\"2d\")!\n const cellSize = painter.measureCell(tempCtx)\n\n let cols = options.cols ?? Math.max(1, Math.floor(canvas.clientWidth / cellSize.width))\n let rows = options.rows ?? Math.max(1, Math.floor(canvas.clientHeight / cellSize.height))\n\n const renderer = new BrowserRenderer(canvas, cols, rows)\n const root = createBrowserRoot(renderer)\n\n root.render(element)\n renderer.start()\n\n // Always make canvas focusable via click\n canvas.tabIndex = 0\n\n // Keyboard\n let keydownHandler: ((e: KeyboardEvent) => void) | null = null\n if (keyboard) {\n keydownHandler = (e: KeyboardEvent) => renderer.handleKeyDown(e)\n canvas.addEventListener(\"keydown\", keydownHandler)\n }\n\n // Auto-resize\n let resizeObserver: ResizeObserver | null = null\n if (autoResize) {\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect\n const newCols = Math.max(1, Math.floor(width / cellSize.width))\n const newRows = Math.max(1, Math.floor(height / cellSize.height))\n if (newCols !== cols || newRows !== rows) {\n cols = newCols\n rows = newRows\n renderer.resize(newCols, newRows)\n }\n }\n })\n resizeObserver.observe(canvas)\n }\n\n return {\n renderer,\n unmount() {\n if (keydownHandler) {\n canvas.removeEventListener(\"keydown\", keydownHandler)\n }\n resizeObserver?.disconnect()\n renderer.stop()\n root.unmount()\n },\n resize(newCols: number, newRows: number) {\n cols = newCols\n rows = newRows\n renderer.resize(newCols, newRows)\n },\n }\n}\n", "/**\n * SSR-safe utilities for @gridland/web.\n * These can be imported in any environment (Node.js, browser, edge).\n */\n\n/** Check if running in a browser environment */\nexport function isBrowser(): boolean {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\"\n}\n\n/** Check if canvas is supported */\nexport function isCanvasSupported(): boolean {\n if (!isBrowser()) return false\n const canvas = document.createElement(\"canvas\")\n return !!canvas.getContext(\"2d\")\n}\n\n/** Calculate grid dimensions from pixel dimensions and font size */\nexport function calculateGridSize(\n widthPx: number,\n heightPx: number,\n cellWidth: number,\n cellHeight: number,\n): { cols: number; rows: number } {\n return {\n cols: Math.max(1, Math.floor(widthPx / cellWidth)),\n rows: Math.max(1, Math.floor(heightPx / cellHeight)),\n }\n}\n", "import { useEffect, useState } from \"react\"\nimport { useBrowserContext } from \"./browser-context\"\n\nexport interface DroppedFile {\n name: string\n content: string\n type: string\n size: number\n}\n\nexport function useFileDrop(callback: (file: DroppedFile) => void): { isDragOver: boolean } {\n const { renderContext } = useBrowserContext()\n const [isDragOver, setIsDragOver] = useState(false)\n\n useEffect(() => {\n const handler = (file: DroppedFile) => {\n callback(file)\n }\n const onDragEnter = () => setIsDragOver(true)\n const onDragLeave = () => setIsDragOver(false)\n\n renderContext.on(\"file-drop\", handler)\n renderContext.on(\"drag-enter\", onDragEnter)\n renderContext.on(\"drag-leave\", onDragLeave)\n return () => {\n renderContext.off(\"file-drop\", handler)\n renderContext.off(\"drag-enter\", onDragEnter)\n renderContext.off(\"drag-leave\", onDragLeave)\n }\n }, [renderContext, callback])\n\n return { isDragOver }\n}\n", "import { useEffect } from \"react\"\nimport { useBrowserContext } from \"./browser-context\"\n\nexport function usePaste(callback: (text: string) => void): void {\n const { renderContext } = useBrowserContext()\n\n useEffect(() => {\n const handler = (text: string) => {\n callback(text)\n }\n renderContext.on(\"paste\", handler)\n return () => {\n renderContext.off(\"paste\", handler)\n }\n }, [renderContext, callback])\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["loadYoga", "h", "b", "q", "v", "w", "x", "z", "d", "C", "D", "E", "F", "G", "J", "K", "L", "M", "N", "P", "Q", "S", "T", "U", "k", "m", "W", "X", "Z", "u", "t", "y", "B", "I", "Align", "BoxSizing", "Dimension", "Direction", "Display", "Edge", "Errata", "ExperimentalFeature", "FlexDirection", "Gutter", "Justify", "LogLevel", "MeasureMode", "NodeType", "Overflow", "PositionType", "Unit", "Wrap", "constants", "ALIGN_AUTO", "Auto", "ALIGN_FLEX_START", "FlexStart", "ALIGN_CENTER", "Center", "ALIGN_FLEX_END", "FlexEnd", "ALIGN_STRETCH", "Stretch", "ALIGN_BASELINE", "Baseline", "ALIGN_SPACE_BETWEEN", "SpaceBetween", "ALIGN_SPACE_AROUND", "SpaceAround", "ALIGN_SPACE_EVENLY", "SpaceEvenly", "BOX_SIZING_BORDER_BOX", "BorderBox", "BOX_SIZING_CONTENT_BOX", "ContentBox", "DIMENSION_WIDTH", "Width", "DIMENSION_HEIGHT", "Height", "DIRECTION_INHERIT", "Inherit", "DIRECTION_LTR", "LTR", "DIRECTION_RTL", "RTL", "DISPLAY_FLEX", "Flex", "DISPLAY_NONE", "None", "DISPLAY_CONTENTS", "Contents", "EDGE_LEFT", "Left", "EDGE_TOP", "Top", "EDGE_RIGHT", "Right", "EDGE_BOTTOM", "Bottom", "EDGE_START", "Start", "EDGE_END", "End", "EDGE_HORIZONTAL", "Horizontal", "EDGE_VERTICAL", "Vertical", "EDGE_ALL", "All", "ERRATA_NONE", "ERRATA_STRETCH_FLEX_BASIS", "StretchFlexBasis", "ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING", "AbsolutePositionWithoutInsetsExcludesPadding", "ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE", "AbsolutePercentAgainstInnerSize", "ERRATA_ALL", "ERRATA_CLASSIC", "Classic", "EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS", "WebFlexBasis", "FLEX_DIRECTION_COLUMN", "Column", "FLEX_DIRECTION_COLUMN_REVERSE", "ColumnReverse", "FLEX_DIRECTION_ROW", "Row", "FLEX_DIRECTION_ROW_REVERSE", "RowReverse", "GUTTER_COLUMN", "GUTTER_ROW", "GUTTER_ALL", "JUSTIFY_FLEX_START", "JUSTIFY_CENTER", "JUSTIFY_FLEX_END", "JUSTIFY_SPACE_BETWEEN", "JUSTIFY_SPACE_AROUND", "JUSTIFY_SPACE_EVENLY", "LOG_LEVEL_ERROR", "Error", "LOG_LEVEL_WARN", "Warn", "LOG_LEVEL_INFO", "Info", "LOG_LEVEL_DEBUG", "Debug", "LOG_LEVEL_VERBOSE", "Verbose", "LOG_LEVEL_FATAL", "Fatal", "MEASURE_MODE_UNDEFINED", "Undefined", "MEASURE_MODE_EXACTLY", "Exactly", "MEASURE_MODE_AT_MOST", "AtMost", "NODE_TYPE_DEFAULT", "Default", "NODE_TYPE_TEXT", "Text", "OVERFLOW_VISIBLE", "Visible", "OVERFLOW_HIDDEN", "Hidden", "OVERFLOW_SCROLL", "Scroll", "POSITION_TYPE_STATIC", "Static", "POSITION_TYPE_RELATIVE", "Relative", "POSITION_TYPE_ABSOLUTE", "Absolute", "UNIT_UNDEFINED", "UNIT_POINT", "Point", "UNIT_PERCENT", "Percent", "UNIT_AUTO", "WRAP_NO_WRAP", "NoWrap", "WRAP_WRAP", "WRAP_WRAP_REVERSE", "WrapReverse", "lib", "patch", "prototype", "name", "fn", "original", "_len", "arguments", "length", "args", "Array", "_key", "call", "fnName", "methods", "Unit", "Point", "Node", "Percent", "Auto", "_len2", "_key2", "value", "pop", "unit", "asNumber", "undefined", "valueOf", "endsWith", "parseFloat", "Number", "isNaN", "Error", "wrapMeasureFunction", "measureFunction", "MeasureCallback", "implement", "measure", "width", "height", "NaN", "measureFunc", "unsetMeasureFunc", "wrapDirtiedFunc", "dirtiedFunction", "DirtiedCallback", "dirtied", "dirtiedFunc", "Config", "destroy", "_", "config", "createWithConfig", "createDefault", "t", "T", "getChildCount", "getChild", "freeRecursive", "free", "direction", "Direction", "LTR", "YGEnums", "Yoga", "wrapAssembly", "loadYoga", "b", "x", "y", "b", "w", "h", "obj", "TextAttributes", "b", "fg", "bg", "w", "x", "y", "x", "y", "fg", "bg", "_getDefaults", "_defaults", "changeDefaults", "newDefaults", "noopTest", "edit", "regex", "opt", "source", "obj", "name", "val", "valSource", "other", "supportsLookbehind", "bull", "indent", "newline", "blockCode", "fences", "hr", "heading", "bullet", "lheadingCore", "lheading", "lheadingGfm", "_paragraph", "blockText", "_blockLabel", "def", "list", "_tag", "_comment", "html", "paragraph", "blockquote", "blockNormal", "gfmTable", "blockGfm", "blockPedantic", "escape", "inlineCode", "br", "inlineText", "_punctuation", "_punctuationOrSpace", "_notPunctuationOrSpace", "punctuation", "_punctuationGfmStrongEm", "_punctuationOrSpaceGfmStrongEm", "_notPunctuationOrSpaceGfmStrongEm", "blockSkip", "emStrongLDelimCore", "emStrongLDelim", "emStrongLDelimGfm", "emStrongRDelimAstCore", "emStrongRDelimAst", "emStrongRDelimAstGfm", "emStrongRDelimUnd", "anyPunctuation", "autolink", "_inlineComment", "tag", "_inlineLabel", "link", "reflink", "nolink", "reflinkSearch", "_caseInsensitiveProtocol", "inlineNormal", "inlinePedantic", "inlineGfm", "inlineBreaks", "block", "inline", "escapeReplacements", "getEscapeReplacement", "ch", "encode", "cleanUrl", "href", "splitCells", "tableRow", "count", "row", "match", "offset", "str", "escaped", "curr", "cells", "i", "rtrim", "c", "invert", "l", "suffLen", "currChar", "findClosingBracket", "b", "level", "outputLink", "cap", "raw", "lexer", "rules", "title", "text", "token", "indentCodeCompensation", "matchIndentToCode", "indentToCode", "node", "matchIndentInNode", "indentInNode", "_Tokenizer", "options", "src", "trimmed", "lines", "tokens", "inBlockquote", "currentLines", "currentRaw", "currentText", "top", "lastToken", "oldToken", "newText", "newToken", "isordered", "itemRegex", "endsWithBlankLine", "endEarly", "itemContents", "line", "t", "nextLine", "blankLine", "nextBulletRegex", "hrRegex", "fencesBeginRegex", "headingBeginRegex", "htmlBeginRegex", "rawLine", "nextLineWithoutTabs", "lastItem", "item", "taskRaw", "checkboxToken", "spacers", "hasMultipleLineBreaks", "headers", "aligns", "rows", "align", "cell", "trimmedUrl", "rtrimSlash", "lastParenIndex", "linkLen", "links", "linkString", "maskedSrc", "prevChar", "lLength", "rDelim", "rLength", "delimTotal", "midDelimTotal", "endReg", "lastCharLength", "hasNonSpaceChars", "hasSpaceCharsOnBothEnds", "prevCapZero", "_Lexer", "__Lexer", "next", "lastParagraphClipped", "extTokenizer", "cutSrc", "startIndex", "tempSrc", "tempStart", "getStartIndex", "errMsg", "keepPrevChar", "_Renderer", "lang", "langString", "code", "depth", "ordered", "start", "body", "j", "type", "startAttr", "checked", "header", "k", "content", "cleanHref", "out", "_TextRenderer", "_Parser", "__Parser", "anyToken", "genericToken", "ret", "renderer", "_Hooks", "markdown", "Marked", "args", "callback", "values", "tableToken", "listToken", "childTokens", "extensions", "pack", "opts", "ext", "prevRenderer", "extLevel", "prop", "rendererProp", "rendererFunc", "tokenizer", "tokenizerProp", "tokenizerFunc", "prevTokenizer", "hooks", "hooksProp", "hooksFunc", "prevHook", "arg", "walkTokens", "packWalktokens", "blockType", "origOpt", "throwError", "processedSrc", "processedTokens", "e", "silent", "async", "msg", "markedInstance", "marked", "setOptions", "use", "parseInline", "parser", "_Parser", "lexer", "_Lexer", "loadYoga", "h", "b", "q", "v", "w", "x", "z", "d", "C", "D", "E", "F", "G", "J", "K", "L", "M", "N", "P", "Q", "S", "T", "U", "k", "m", "W", "X", "Z", "u", "t", "y", "B", "I", "yoga_wasm_base64_esm_default", "Align", "BoxSizing", "Dimension", "Direction", "Display", "Edge", "Errata", "ExperimentalFeature", "FlexDirection", "Gutter", "Justify", "LogLevel", "MeasureMode", "NodeType", "Overflow", "PositionType", "Unit", "Wrap", "constants", "ALIGN_AUTO", "Auto", "ALIGN_FLEX_START", "FlexStart", "ALIGN_CENTER", "Center", "ALIGN_FLEX_END", "FlexEnd", "ALIGN_STRETCH", "Stretch", "ALIGN_BASELINE", "Baseline", "ALIGN_SPACE_BETWEEN", "SpaceBetween", "ALIGN_SPACE_AROUND", "SpaceAround", "ALIGN_SPACE_EVENLY", "SpaceEvenly", "BOX_SIZING_BORDER_BOX", "BorderBox", "BOX_SIZING_CONTENT_BOX", "ContentBox", "DIMENSION_WIDTH", "Width", "DIMENSION_HEIGHT", "Height", "DIRECTION_INHERIT", "Inherit", "DIRECTION_LTR", "LTR", "DIRECTION_RTL", "RTL", "DISPLAY_FLEX", "Flex", "DISPLAY_NONE", "None", "DISPLAY_CONTENTS", "Contents", "EDGE_LEFT", "Left", "EDGE_TOP", "Top", "EDGE_RIGHT", "Right", "EDGE_BOTTOM", "Bottom", "EDGE_START", "Start", "EDGE_END", "End", "EDGE_HORIZONTAL", "Horizontal", "EDGE_VERTICAL", "Vertical", "EDGE_ALL", "All", "ERRATA_NONE", "ERRATA_STRETCH_FLEX_BASIS", "StretchFlexBasis", "ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING", "AbsolutePositionWithoutInsetsExcludesPadding", "ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE", "AbsolutePercentAgainstInnerSize", "ERRATA_ALL", "ERRATA_CLASSIC", "Classic", "EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS", "WebFlexBasis", "FLEX_DIRECTION_COLUMN", "Column", "FLEX_DIRECTION_COLUMN_REVERSE", "ColumnReverse", "FLEX_DIRECTION_ROW", "Row", "FLEX_DIRECTION_ROW_REVERSE", "RowReverse", "GUTTER_COLUMN", "GUTTER_ROW", "GUTTER_ALL", "JUSTIFY_FLEX_START", "JUSTIFY_CENTER", "JUSTIFY_FLEX_END", "JUSTIFY_SPACE_BETWEEN", "JUSTIFY_SPACE_AROUND", "JUSTIFY_SPACE_EVENLY", "LOG_LEVEL_ERROR", "Error", "LOG_LEVEL_WARN", "Warn", "LOG_LEVEL_INFO", "Info", "LOG_LEVEL_DEBUG", "Debug", "LOG_LEVEL_VERBOSE", "Verbose", "LOG_LEVEL_FATAL", "Fatal", "MEASURE_MODE_UNDEFINED", "Undefined", "MEASURE_MODE_EXACTLY", "Exactly", "MEASURE_MODE_AT_MOST", "AtMost", "NODE_TYPE_DEFAULT", "Default", "NODE_TYPE_TEXT", "Text", "OVERFLOW_VISIBLE", "Visible", "OVERFLOW_HIDDEN", "Hidden", "OVERFLOW_SCROLL", "Scroll", "POSITION_TYPE_STATIC", "Static", "POSITION_TYPE_RELATIVE", "Relative", "POSITION_TYPE_ABSOLUTE", "Absolute", "UNIT_UNDEFINED", "UNIT_POINT", "Point", "UNIT_PERCENT", "Percent", "UNIT_AUTO", "WRAP_NO_WRAP", "NoWrap", "WRAP_WRAP", "WRAP_WRAP_REVERSE", "WrapReverse", "YGEnums_default", "wrapAssembly", "lib", "patch", "prototype", "name", "fn", "original", "_len", "arguments", "length", "args", "Array", "_key", "call", "fnName", "methods", "Unit", "Point", "Node", "Percent", "Auto", "_len2", "_key2", "value", "pop", "unit", "asNumber", "undefined", "valueOf", "endsWith", "parseFloat", "Number", "isNaN", "Error", "wrapMeasureFunction", "measureFunction", "MeasureCallback", "implement", "measure", "width", "height", "NaN", "measureFunc", "unsetMeasureFunc", "wrapDirtiedFunc", "dirtiedFunction", "DirtiedCallback", "dirtied", "dirtiedFunc", "Config", "destroy", "_", "config", "createWithConfig", "createDefault", "t", "T", "getChildCount", "getChild", "freeRecursive", "free", "direction", "Direction", "LTR", "YGEnums", "Yoga", "wrapAssembly", "loadYoga", "x", "y", "bg", "fg", "TextAttributes", "CONTINUATION", "fg", "bg", "b", "x", "y", "x", "y", "RootRenderable", "RootRenderableClass", "_render", "AppContext", "_ErrorBoundary", "jsx", "ErrorBoundary", "jsx", "RootRenderable", "RootRenderable", "useEffect", "useState", "useState", "useEffect", "useEffect", "useEffect"]
|
|
3
|
+
"sources": ["../../../node_modules/.bun/events@3.3.0/node_modules/events/events.js", "../src/TUI.tsx", "../src/browser-buffer.ts", "../src/browser-render-context.ts", "../src/canvas-painter.ts", "../src/selection-manager.ts", "../src/browser-renderer.ts", "../src/render-pipeline.ts", "../src/browser-context.ts", "../src/create-browser-root.tsx", "../src/buffer-to-text.ts", "../src/headless-renderer.ts", "../src/create-headless-root.tsx", "../src/mount.ts", "../src/browser-text-buffer.ts", "../src/browser-text-buffer-view.ts", "../src/browser-syntax-style.ts", "../src/utils.ts", "../src/file-drop.ts", "../src/paste.ts", "../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n", "import React, {\n useRef,\n useEffect,\n useState,\n type ReactNode,\n type CSSProperties,\n} from \"react\"\nimport { BrowserRenderer, setRootRenderableClass } from \"./browser-renderer\"\nimport { createBrowserRoot, type BrowserRoot } from \"./create-browser-root\"\nimport { CanvasPainter } from \"./canvas-painter\"\nimport { RootRenderable } from \"@gridland/utils\"\nimport { HeadlessRenderer, setHeadlessRootRenderableClass } from \"./headless-renderer\"\nimport { createHeadlessRoot } from \"./create-headless-root\"\n\nexport interface TUIProps {\n children: ReactNode\n /** CSS styles for the outer container div */\n style?: CSSProperties\n /** CSS class for the outer container div */\n className?: string\n /** Font size in pixels (default: 14) */\n fontSize?: number\n /** Font family (default: monospace stack) */\n fontFamily?: string\n /** Auto-focus the canvas for keyboard input (default: true) */\n autoFocus?: boolean\n /** Background color for the canvas (default: transparent) */\n backgroundColor?: string\n /** Called when the renderer is ready */\n onReady?: (renderer: BrowserRenderer) => void\n /** Columns to use for SSR headless render (default: 80) */\n fallbackCols?: number\n /** Rows to use for SSR headless render (default: 24) */\n fallbackRows?: number\n}\n\n/**\n * A single React component that renders TUI content to an HTML5 Canvas.\n * Gridland is built on the opentui engine.\n *\n * Usage:\n * ```tsx\n * <TUI style={{ width: \"100%\", height: 400 }}>\n * <box border borderStyle=\"rounded\">\n * <text>Hello from Gridland!</text>\n * </box>\n * </TUI>\n * ```\n *\n * No dynamic imports, no wrapper chains. Just a component.\n */\nexport function TUI({\n children,\n style,\n className,\n fontSize = 14,\n fontFamily = \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\",\n autoFocus = true,\n backgroundColor,\n onReady,\n fallbackCols = 80,\n fallbackRows = 24,\n}: TUIProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const rendererRef = useRef<BrowserRenderer | null>(null)\n const rootRef = useRef<BrowserRoot | null>(null)\n const [isClient, setIsClient] = useState(false)\n\n // SSR safety: only render canvas on the client\n useEffect(() => {\n setIsClient(true)\n }, [])\n\n // Initialize renderer when canvas is available\n useEffect(() => {\n if (!isClient) return\n\n const canvas = canvasRef.current\n const container = containerRef.current\n if (!canvas || !container) return\n\n setRootRenderableClass(RootRenderable)\n\n // Measure cell size to calculate grid dimensions\n const painter = new CanvasPainter({ fontSize, fontFamily })\n const tempCtx = canvas.getContext(\"2d\")!\n const cellSize = painter.measureCell(tempCtx)\n\n const containerRect = container.getBoundingClientRect()\n const cols = Math.max(1, Math.floor(containerRect.width / cellSize.width))\n const rows = Math.max(1, Math.floor(containerRect.height / cellSize.height))\n\n const renderer = new BrowserRenderer(canvas, cols, rows, { backgroundColor })\n rendererRef.current = renderer\n\n const root = createBrowserRoot(renderer)\n rootRef.current = root\n\n root.render(children)\n renderer.start()\n\n canvas.tabIndex = 0\n if (autoFocus) {\n canvas.focus()\n }\n\n onReady?.(renderer)\n\n // Handle keyboard events\n const onKeyDown = (e: KeyboardEvent) => {\n renderer.handleKeyDown(e)\n }\n canvas.addEventListener(\"keydown\", onKeyDown)\n\n // Handle resize with ResizeObserver\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect\n const newCols = Math.max(1, Math.floor(width / cellSize.width))\n const newRows = Math.max(1, Math.floor(height / cellSize.height))\n renderer.resize(newCols, newRows)\n }\n })\n resizeObserver.observe(container)\n\n return () => {\n canvas.removeEventListener(\"keydown\", onKeyDown)\n resizeObserver.disconnect()\n renderer.stop()\n root.unmount()\n rendererRef.current = null\n rootRef.current = null\n }\n }, [isClient, fontSize, fontFamily, backgroundColor]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Re-render when children change\n useEffect(() => {\n if (rootRef.current) {\n rootRef.current.render(children)\n }\n }, [children])\n\n if (!isClient) {\n // Only run the headless render on the actual server.\n // On the client's initial render (before useEffect sets isClient=true),\n // we render an empty <pre> and let suppressHydrationWarning preserve\n // the server-rendered DOM until the canvas takes over.\n const isServer = typeof window === \"undefined\"\n let text = \"\"\n if (isServer) {\n setHeadlessRootRenderableClass(RootRenderable)\n const renderer = new HeadlessRenderer({ cols: fallbackCols, rows: fallbackRows })\n const root = createHeadlessRoot(renderer)\n text = root.renderToText(children)\n root.unmount()\n }\n return (\n <div style={style} className={className}>\n <pre\n suppressHydrationWarning\n aria-hidden\n style={{\n fontFamily,\n fontSize,\n margin: 0,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"pre\",\n }}\n >\n {text}\n </pre>\n </div>\n )\n }\n\n return (\n <div\n ref={containerRef}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n ...style,\n }}\n className={className}\n >\n <canvas\n ref={canvasRef}\n style={{\n display: \"block\",\n width: \"100%\",\n height: \"100%\",\n outline: \"none\",\n }}\n />\n </div>\n )\n}\n", "import type { RGBA } from \"@gridland/utils\"\nimport type { CapturedLine, CapturedSpan, CursorStyle } from \"@gridland/utils\"\nimport { attributesWithLink } from \"@gridland/utils\"\n\n// Attribute flags matching TextAttributes from opentui core\nconst CONTINUATION = 0xc0000000\n\ninterface ScissorRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport type WidthMethod = \"wcwidth\" | \"unicode\"\n\nexport interface BorderDrawOptions {\n x: number\n y: number\n width: number\n height: number\n borderStyle?: string\n customBorderChars?: Uint32Array\n border: boolean | string[]\n borderColor: RGBA\n backgroundColor: RGBA\n shouldFill?: boolean\n title?: string\n titleAlignment?: \"left\" | \"center\" | \"right\"\n}\n\nexport class BrowserBuffer {\n public id: string\n public respectAlpha: boolean\n\n private _width: number\n private _height: number\n private _widthMethod: WidthMethod\n\n // Cell data - same layout as native OptimizedBuffer\n public char: Uint32Array\n public fg: Float32Array\n public bg: Float32Array\n public attributes: Uint32Array\n\n private scissorStack: ScissorRect[] = []\n private opacityStack: number[] = []\n\n // Link registry for clickable links\n public linkRegistry: Map<number, string> = new Map()\n private nextLinkId: number = 1\n /** Cursor rendering config -- set by renderer before pipeline, read by drawEditorView */\n public cursorColor: RGBA | null = null\n public cursorStyleType: CursorStyle = \"block\"\n /** Line cursor position -- set by drawEditorView during pipeline, read by renderer after */\n public lineCursorPosition: { x: number; y: number } | null = null\n\n constructor(\n width: number,\n height: number,\n options: { respectAlpha?: boolean; id?: string; widthMethod?: WidthMethod } = {},\n ) {\n this._width = width\n this._height = height\n this._widthMethod = options.widthMethod ?? \"wcwidth\"\n this.respectAlpha = options.respectAlpha ?? false\n this.id = options.id ?? `browser-buffer-${Math.random().toString(36).slice(2, 8)}`\n\n const size = width * height\n this.char = new Uint32Array(size)\n this.fg = new Float32Array(size * 4)\n this.bg = new Float32Array(size * 4)\n this.attributes = new Uint32Array(size)\n\n // Fill with spaces\n this.char.fill(0x20) // space\n }\n\n static create(\n width: number,\n height: number,\n widthMethod: WidthMethod,\n options?: { respectAlpha?: boolean; id?: string },\n ): BrowserBuffer {\n return new BrowserBuffer(width, height, { ...options, widthMethod })\n }\n\n get width(): number {\n return this._width\n }\n\n get height(): number {\n return this._height\n }\n\n get widthMethod(): WidthMethod {\n return this._widthMethod\n }\n\n get ptr(): number {\n return 0\n }\n\n get buffers() {\n return {\n char: this.char,\n fg: this.fg,\n bg: this.bg,\n attributes: this.attributes,\n }\n }\n\n setRespectAlpha(respectAlpha: boolean): void {\n this.respectAlpha = respectAlpha\n }\n\n getNativeId(): string {\n return this.id\n }\n\n registerLink(url: string): number {\n const id = this.nextLinkId++\n this.linkRegistry.set(id, url)\n return id\n }\n\n getLinkUrl(linkId: number): string | undefined {\n return this.linkRegistry.get(linkId)\n }\n\n private isInScissor(x: number, y: number): boolean {\n if (this.scissorStack.length === 0) return true\n const rect = this.scissorStack[this.scissorStack.length - 1]\n return x >= rect.x && x < rect.x + rect.width && y >= rect.y && y < rect.y + rect.height\n }\n\n private getCurrentOpacityMultiplier(): number {\n if (this.opacityStack.length === 0) return 1\n return this.opacityStack[this.opacityStack.length - 1]\n }\n\n private applyOpacity(color: RGBA): RGBA {\n const multiplier = this.getCurrentOpacityMultiplier()\n if (multiplier >= 1) return color\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a * multiplier,\n buffer: new Float32Array([color.r, color.g, color.b, color.a * multiplier]),\n toInts: color.toInts,\n equals: color.equals,\n map: color.map,\n toString: color.toString,\n } as RGBA\n }\n\n clear(bg?: RGBA): void {\n const size = this._width * this._height\n this.char.fill(0x20) // space\n this.attributes.fill(0)\n this.linkRegistry.clear()\n this.nextLinkId = 1\n\n if (bg) {\n for (let i = 0; i < size; i++) {\n const offset = i * 4\n this.bg[offset] = bg.r\n this.bg[offset + 1] = bg.g\n this.bg[offset + 2] = bg.b\n this.bg[offset + 3] = bg.a\n // Clear fg\n this.fg[offset] = 0\n this.fg[offset + 1] = 0\n this.fg[offset + 2] = 0\n this.fg[offset + 3] = 0\n }\n } else {\n this.fg.fill(0)\n this.bg.fill(0)\n }\n }\n\n setCell(x: number, y: number, char: string, fgColor: RGBA, bgColor: RGBA, attr: number = 0): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n if (!this.isInScissor(x, y)) return\n\n const idx = y * this._width + x\n const offset = idx * 4\n\n const effectiveBg = this.applyOpacity(bgColor)\n const effectiveFg = this.applyOpacity(fgColor)\n\n this.char[idx] = char.codePointAt(0) ?? 0x20\n this.attributes[idx] = attr\n\n this.fg[offset] = effectiveFg.r\n this.fg[offset + 1] = effectiveFg.g\n this.fg[offset + 2] = effectiveFg.b\n this.fg[offset + 3] = effectiveFg.a\n\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n\n setCellWithAlphaBlending(\n x: number,\n y: number,\n char: string,\n fgColor: RGBA,\n bgColor: RGBA,\n attr: number = 0,\n ): void {\n // For the PoC, same as setCell\n this.setCell(x, y, char, fgColor, bgColor, attr)\n }\n\n drawChar(charCode: number, x: number, y: number, fgColor: RGBA, bgColor: RGBA, attr: number = 0): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n if (!this.isInScissor(x, y)) return\n\n const idx = y * this._width + x\n const offset = idx * 4\n\n const effectiveBg = this.applyOpacity(bgColor)\n const effectiveFg = this.applyOpacity(fgColor)\n\n this.char[idx] = charCode\n this.attributes[idx] = attr\n\n this.fg[offset] = effectiveFg.r\n this.fg[offset + 1] = effectiveFg.g\n this.fg[offset + 2] = effectiveFg.b\n this.fg[offset + 3] = effectiveFg.a\n\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n\n drawText(\n text: string,\n x: number,\n y: number,\n fgColor: RGBA,\n bgColor?: RGBA,\n attr: number = 0,\n _selection?: { start: number; end: number; bgColor?: RGBA; fgColor?: RGBA } | null,\n ): void {\n const transparentBg: RGBA = {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n } as RGBA\n const bg = bgColor ?? transparentBg\n\n let curX = x\n for (const ch of text) {\n if (curX >= this._width) break\n if (curX >= 0) {\n this.setCell(curX, y, ch, fgColor, bg, attr)\n }\n curX++\n }\n }\n\n fillRect(x: number, y: number, width: number, height: number, bgColor: RGBA): void {\n for (let row = y; row < y + height && row < this._height; row++) {\n for (let col = x; col < x + width && col < this._width; col++) {\n if (col < 0 || row < 0) continue\n if (!this.isInScissor(col, row)) continue\n\n const idx = row * this._width + col\n const offset = idx * 4\n const effectiveBg = this.applyOpacity(bgColor)\n\n this.char[idx] = 0x20\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n }\n }\n\n drawBox(options: BorderDrawOptions): void {\n const {\n x,\n y,\n width,\n height,\n border,\n borderColor,\n backgroundColor,\n shouldFill = true,\n title,\n titleAlignment = \"left\",\n } = options\n\n if (width <= 0 || height <= 0) return\n\n // Parse border sides\n const sides = {\n top: border === true || (Array.isArray(border) && border.includes(\"top\")),\n right: border === true || (Array.isArray(border) && border.includes(\"right\")),\n bottom: border === true || (Array.isArray(border) && border.includes(\"bottom\")),\n left: border === true || (Array.isArray(border) && border.includes(\"left\")),\n }\n\n // Get border chars (use customBorderChars or default rounded)\n const borderChars = options.customBorderChars ?? this.getDefaultBorderChars(options.borderStyle)\n\n // Fill background\n if (shouldFill) {\n const fillStartX = x + (sides.left ? 1 : 0)\n const fillStartY = y + (sides.top ? 1 : 0)\n const fillWidth = width - (sides.left ? 1 : 0) - (sides.right ? 1 : 0)\n const fillHeight = height - (sides.top ? 1 : 0) - (sides.bottom ? 1 : 0)\n if (fillWidth > 0 && fillHeight > 0) {\n this.fillRect(fillStartX, fillStartY, fillWidth, fillHeight, backgroundColor)\n }\n }\n\n if (!border) return\n\n const transparent: RGBA = { r: 0, g: 0, b: 0, a: 0, buffer: new Float32Array([0, 0, 0, 0]) } as RGBA\n\n // Draw borders\n // borderChars layout: [topLeft, topRight, bottomLeft, bottomRight, horizontal, vertical, topT, bottomT, leftT, rightT, cross]\n const topLeft = borderChars[0]\n const topRight = borderChars[1]\n const bottomLeft = borderChars[2]\n const bottomRight = borderChars[3]\n const horizontal = borderChars[4]\n const vertical = borderChars[5]\n\n // Top border\n if (sides.top) {\n if (sides.left) this.drawChar(topLeft, x, y, borderColor, transparent)\n for (let col = 1; col < width - 1; col++) {\n this.drawChar(horizontal, x + col, y, borderColor, transparent)\n }\n if (sides.right && width > 1) this.drawChar(topRight, x + width - 1, y, borderColor, transparent)\n }\n\n // Bottom border\n if (sides.bottom && height > 1) {\n if (sides.left) this.drawChar(bottomLeft, x, y + height - 1, borderColor, transparent)\n for (let col = 1; col < width - 1; col++) {\n this.drawChar(horizontal, x + col, y + height - 1, borderColor, transparent)\n }\n if (sides.right && width > 1)\n this.drawChar(bottomRight, x + width - 1, y + height - 1, borderColor, transparent)\n }\n\n // Left border\n if (sides.left) {\n for (let row = 1; row < height - 1; row++) {\n this.drawChar(vertical, x, y + row, borderColor, transparent)\n }\n }\n\n // Right border\n if (sides.right && width > 1) {\n for (let row = 1; row < height - 1; row++) {\n this.drawChar(vertical, x + width - 1, y + row, borderColor, transparent)\n }\n }\n\n // Draw title on top border\n if (title && sides.top && width > 4) {\n const maxTitleLen = width - 4\n const truncatedTitle = title.length > maxTitleLen ? title.slice(0, maxTitleLen) : title\n let titleX: number\n if (titleAlignment === \"center\") {\n titleX = x + Math.floor((width - truncatedTitle.length) / 2)\n } else if (titleAlignment === \"right\") {\n titleX = x + width - truncatedTitle.length - 2\n } else {\n titleX = x + 2\n }\n this.drawText(truncatedTitle, titleX, y, borderColor, transparent)\n }\n }\n\n private getDefaultBorderChars(borderStyle?: string): Uint32Array {\n // Rounded border chars by default\n const styles: Record<string, number[]> = {\n rounded: [0x256d, 0x256e, 0x2570, 0x256f, 0x2500, 0x2502, 0x252c, 0x2534, 0x251c, 0x2524, 0x253c],\n single: [0x250c, 0x2510, 0x2514, 0x2518, 0x2500, 0x2502, 0x252c, 0x2534, 0x251c, 0x2524, 0x253c],\n double: [0x2554, 0x2557, 0x255a, 0x255d, 0x2550, 0x2551, 0x2566, 0x2569, 0x2560, 0x2563, 0x256c],\n heavy: [0x250f, 0x2513, 0x2517, 0x251b, 0x2501, 0x2503, 0x2533, 0x253b, 0x2523, 0x252b, 0x254b],\n }\n const chars = styles[borderStyle ?? \"rounded\"] ?? styles.rounded\n return new Uint32Array(chars)\n }\n\n pushScissorRect(x: number, y: number, width: number, height: number): void {\n if (this.scissorStack.length > 0) {\n // Intersect with current scissor\n const current = this.scissorStack[this.scissorStack.length - 1]\n const nx = Math.max(x, current.x)\n const ny = Math.max(y, current.y)\n const nw = Math.min(x + width, current.x + current.width) - nx\n const nh = Math.min(y + height, current.y + current.height) - ny\n this.scissorStack.push({ x: nx, y: ny, width: Math.max(0, nw), height: Math.max(0, nh) })\n } else {\n this.scissorStack.push({ x, y, width, height })\n }\n }\n\n popScissorRect(): void {\n this.scissorStack.pop()\n }\n\n clearScissorRects(): void {\n this.scissorStack = []\n }\n\n pushOpacity(opacity: number): void {\n const current = this.getCurrentOpacityMultiplier()\n this.opacityStack.push(current * opacity)\n }\n\n popOpacity(): void {\n this.opacityStack.pop()\n }\n\n getCurrentOpacity(): number {\n return this.getCurrentOpacityMultiplier()\n }\n\n clearOpacity(): void {\n this.opacityStack = []\n }\n\n resize(width: number, height: number): void {\n this._width = width\n this._height = height\n const size = width * height\n this.char = new Uint32Array(size)\n this.fg = new Float32Array(size * 4)\n this.bg = new Float32Array(size * 4)\n this.attributes = new Uint32Array(size)\n this.char.fill(0x20)\n }\n\n // Read buffer into CapturedLine[] for testing\n getSpanLines(): CapturedLine[] {\n const lines: CapturedLine[] = []\n\n for (let row = 0; row < this._height; row++) {\n const spans: CapturedSpan[] = []\n let currentSpan: CapturedSpan | null = null\n\n for (let col = 0; col < this._width; col++) {\n const idx = row * this._width + col\n const offset = idx * 4\n\n // Skip continuation chars\n if (this.attributes[idx] & CONTINUATION) continue\n\n const charCode = this.char[idx]\n const ch = charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n const fgR = this.fg[offset]\n const fgG = this.fg[offset + 1]\n const fgB = this.fg[offset + 2]\n const fgA = this.fg[offset + 3]\n const bgR = this.bg[offset]\n const bgG = this.bg[offset + 1]\n const bgB = this.bg[offset + 2]\n const bgA = this.bg[offset + 3]\n const attr = this.attributes[idx] & 0xff\n\n const fg: RGBA = {\n r: fgR, g: fgG, b: fgB, a: fgA,\n buffer: new Float32Array([fgR, fgG, fgB, fgA]),\n } as RGBA\n const bg: RGBA = {\n r: bgR, g: bgG, b: bgB, a: bgA,\n buffer: new Float32Array([bgR, bgG, bgB, bgA]),\n } as RGBA\n\n if (\n currentSpan &&\n currentSpan.fg.r === fgR &&\n currentSpan.fg.g === fgG &&\n currentSpan.fg.b === fgB &&\n currentSpan.fg.a === fgA &&\n currentSpan.bg.r === bgR &&\n currentSpan.bg.g === bgG &&\n currentSpan.bg.b === bgB &&\n currentSpan.bg.a === bgA &&\n currentSpan.attributes === attr\n ) {\n currentSpan.text += ch\n currentSpan.width += 1\n } else {\n if (currentSpan) spans.push(currentSpan)\n currentSpan = { text: ch, fg, bg, attributes: attr, width: 1 }\n }\n }\n\n if (currentSpan) spans.push(currentSpan)\n lines.push({ spans })\n }\n\n return lines\n }\n\n // Draw a text buffer view into the buffer\n drawTextBufferView(view: any, x: number, y: number): void {\n if (!view || !view.getVisibleLines) return\n\n const lines = view.getVisibleLines()\n if (!lines) return\n\n const textAlign = view.textAlign as string | undefined\n const viewWidth = view._viewportWidth as number | undefined\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n const line = lines[lineIdx]\n if (!line) continue\n\n let curX = x\n if (textAlign && textAlign !== \"left\" && viewWidth) {\n const lineWidth = line.chunks.reduce((sum: number, c: any) => sum + c.text.length, 0)\n if (textAlign === \"center\") {\n curX = x + Math.floor((viewWidth - lineWidth) / 2)\n } else if (textAlign === \"right\") {\n curX = x + viewWidth - lineWidth\n }\n }\n for (const chunk of line.chunks) {\n const text = chunk.text\n const fgColor = chunk.fg\n const bgColor = chunk.bg\n let attr = chunk.attributes ?? 0\n\n // Encode link ID into attributes if chunk has a link\n if (chunk.link && chunk.link.url) {\n const linkId = this.registerLink(chunk.link.url)\n attr = attributesWithLink(attr, linkId)\n }\n\n for (const ch of text) {\n if (curX >= this._width) break\n if (curX >= 0 && y + lineIdx >= 0 && y + lineIdx < this._height) {\n this.setCell(curX, y + lineIdx, ch, fgColor, bgColor, attr)\n }\n curX++\n }\n }\n }\n }\n\n drawTextBuffer(textBufferView: any, x: number, y: number): void {\n this.drawTextBufferView(textBufferView, x, y)\n }\n\n drawFrameBuffer(\n destX: number,\n destY: number,\n frameBuffer: BrowserBuffer,\n sourceX: number = 0,\n sourceY: number = 0,\n sourceWidth?: number,\n sourceHeight?: number,\n ): void {\n const sw = sourceWidth ?? frameBuffer.width\n const sh = sourceHeight ?? frameBuffer.height\n const srcChar = frameBuffer.char\n const srcFg = frameBuffer.fg\n const srcBg = frameBuffer.bg\n const srcAttr = frameBuffer.attributes\n const srcCols = frameBuffer.width\n\n for (let row = 0; row < sh; row++) {\n const srcRow = sourceY + row\n const dstRow = destY + row\n if (srcRow < 0 || srcRow >= frameBuffer.height) continue\n if (dstRow < 0 || dstRow >= this._height) continue\n\n for (let col = 0; col < sw; col++) {\n const srcCol = sourceX + col\n const dstCol = destX + col\n if (srcCol < 0 || srcCol >= frameBuffer.width) continue\n if (dstCol < 0 || dstCol >= this._width) continue\n if (!this.isInScissor(dstCol, dstRow)) continue\n\n const srcIdx = srcRow * srcCols + srcCol\n const dstIdx = dstRow * this._width + dstCol\n const srcOffset = srcIdx * 4\n const dstOffset = dstIdx * 4\n\n this.char[dstIdx] = srcChar[srcIdx]\n this.attributes[dstIdx] = srcAttr[srcIdx]\n\n // Apply opacity to fg\n const fgA = srcFg[srcOffset + 3]\n const opacityMul = this.getCurrentOpacityMultiplier()\n this.fg[dstOffset] = srcFg[srcOffset]\n this.fg[dstOffset + 1] = srcFg[srcOffset + 1]\n this.fg[dstOffset + 2] = srcFg[srcOffset + 2]\n this.fg[dstOffset + 3] = fgA * opacityMul\n\n // Apply opacity to bg\n const bgA = srcBg[srcOffset + 3]\n this.bg[dstOffset] = srcBg[srcOffset]\n this.bg[dstOffset + 1] = srcBg[srcOffset + 1]\n this.bg[dstOffset + 2] = srcBg[srcOffset + 2]\n this.bg[dstOffset + 3] = bgA * opacityMul\n }\n }\n }\n drawEditorView(editorView: any, x: number, y: number): void {\n if (!editorView) return\n\n const viewport = editorView.getViewport()\n const text = editorView.getText()\n const lines = text.split(\"\\n\")\n\n // Default colors\n const dfg = editorView.editBuffer?._defaultFg ?? {\n r: 1, g: 1, b: 1, a: 1,\n buffer: new Float32Array([1, 1, 1, 1]),\n } as RGBA\n const dbg = editorView.editBuffer?._defaultBg ?? {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n } as RGBA\n\n const visibleRows = viewport.height > 0 ? viewport.height : this._height - y\n\n if (text === \"\" && editorView._placeholderChunks && editorView._placeholderChunks.length > 0) {\n // Draw placeholder text; offset by 1 cell for line cursor so it doesn't overlap\n let curX = this.cursorStyleType === \"line\" ? x + 1 : x\n for (const chunk of editorView._placeholderChunks) {\n const chunkFg = chunk.fg ?? dfg\n const chunkBg = chunk.bg ?? dbg\n const attr = (chunk.attributes ?? 0) | 2 // DIM attribute = 1 << 1\n for (const ch of chunk.text) {\n if (curX >= this._width) break\n if (curX >= 0 && y >= 0 && y < this._height) {\n this.setCell(curX, y, ch, chunkFg, chunkBg, attr)\n }\n curX++\n }\n }\n } else {\n // Draw text lines\n for (let row = 0; row < visibleRows; row++) {\n const lineIdx = viewport.offsetY + row\n if (lineIdx < 0 || lineIdx >= lines.length) continue\n const dstRow = y + row\n if (dstRow < 0 || dstRow >= this._height) continue\n\n const line = lines[lineIdx]\n for (let col = 0; col < line.length; col++) {\n const srcCol = viewport.offsetX + col\n if (srcCol < 0 || srcCol >= line.length) continue\n const dstCol = x + col\n if (dstCol < 0 || dstCol >= this._width) break\n\n this.setCell(dstCol, dstRow, line[srcCol], dfg, dbg, 0)\n }\n }\n }\n\n // Draw cursor\n const cursor = editorView.getVisualCursor()\n if (cursor) {\n const cursorX = x + cursor.visualCol\n const cursorY = y + cursor.visualRow\n if (cursorX >= 0 && cursorX < this._width && cursorY >= 0 && cursorY < this._height) {\n const cursorFg = this.cursorColor ?? dfg\n if (this.cursorStyleType === \"line\") {\n // Line cursor: store position for renderer to build cursor overlay\n this.lineCursorPosition = { x: cursorX, y: cursorY }\n } else {\n // Block cursor: overwrite cell with INVERSE\n const idx = cursorY * this._width + cursorX\n const charCode = this.char[idx]\n const ch = charCode === 0 || charCode === 0x20 ? \" \" : String.fromCodePoint(charCode)\n const offset = idx * 4\n const cellBg = {\n r: this.bg[offset],\n g: this.bg[offset + 1],\n b: this.bg[offset + 2],\n a: this.bg[offset + 3] || 1,\n } as RGBA\n this.setCell(cursorX, cursorY, ch, cursorFg, cellBg, 32) // INVERSE = 1 << 5 = 32\n }\n }\n }\n }\n drawSuperSampleBuffer(): void {}\n drawPackedBuffer(): void {}\n drawGrayscaleBuffer(): void {}\n drawGrayscaleBufferSupersampled(): void {}\n drawGrid(): void {}\n encodeUnicode(_text: string): null {\n return null\n }\n freeUnicode(): void {}\n getRealCharBytes(): Uint8Array {\n return new Uint8Array(0)\n }\n destroy(): void {}\n}\n\n// Export as OptimizedBuffer so opentui source code imports work directly\nexport { BrowserBuffer as OptimizedBuffer }\n", "import { EventEmitter } from \"events\"\nimport type { RenderContext, CursorStyle, CursorStyleOptions, MousePointerStyle, WidthMethod } from \"@gridland/utils\"\nimport type { RGBA } from \"@gridland/utils\"\n\nexport class BrowserKeyHandler extends EventEmitter {\n constructor() {\n super()\n }\n\n processInput(_data: string): boolean {\n return false\n }\n\n useKittyKeyboard(_enable: boolean): void {}\n\n processPaste(_data: string): void {}\n}\n\nexport class BrowserInternalKeyHandler extends BrowserKeyHandler {\n private renderableHandlers: Map<string, Set<Function>> = new Map()\n\n emitWithPriority(_event: string, ..._args: any[]): void {}\n\n onInternal(event: string, handler: Function): void {\n if (!this.renderableHandlers.has(event)) {\n this.renderableHandlers.set(event, new Set())\n }\n this.renderableHandlers.get(event)!.add(handler)\n }\n\n offInternal(event: string, handler: Function): void {\n const handlers = this.renderableHandlers.get(event)\n if (handlers) {\n handlers.delete(handler)\n }\n }\n\n override emit(event: string, ...args: any[]): boolean {\n // Emit to global listeners first\n const hasGlobal = super.emit(event, ...args)\n\n // Then emit to renderable handlers\n const renderableSet = this.renderableHandlers.get(event)\n if (renderableSet && renderableSet.size > 0) {\n for (const handler of [...renderableSet]) {\n try {\n handler(...args)\n } catch (e) {\n console.error(`[BrowserInternalKeyHandler] Error in ${event} handler:`, e)\n }\n // Check propagation\n if (args[0] && args[0].propagationStopped) break\n }\n return true\n }\n\n return hasGlobal\n }\n}\n\nexport class BrowserRenderContext extends EventEmitter implements RenderContext {\n private _width: number\n private _height: number\n private _widthMethod: WidthMethod\n private _renderRequested = false\n private _onRenderRequest: (() => void) | null = null\n private _lifecyclePasses: Set<any> = new Set()\n private _focusedRenderable: any | null = null\n public cursorColor: RGBA | null = null\n public cursorStyleType: CursorStyle = \"block\"\n public cursorBlinking: boolean = false\n\n // Typed as `any` for DTS compatibility \u2014 BrowserKeyHandler satisfies KeyHandler\n // at runtime but uses a different class hierarchy (EventEmitter vs opentui's KeyHandler).\n public keyInput: any\n public _internalKeyInput: any\n\n constructor(width: number, height: number, widthMethod: WidthMethod = \"wcwidth\") {\n super()\n this._width = width\n this._height = height\n this._widthMethod = widthMethod\n this.keyInput = new BrowserKeyHandler()\n this._internalKeyInput = new BrowserInternalKeyHandler()\n }\n\n get width(): number {\n return this._width\n }\n\n get height(): number {\n return this._height\n }\n\n get widthMethod(): WidthMethod {\n return this._widthMethod\n }\n\n get capabilities(): any {\n return null\n }\n\n get hasSelection(): boolean {\n return false\n }\n\n get currentFocusedRenderable(): any | null {\n return this._focusedRenderable\n }\n\n setOnRenderRequest(callback: () => void): void {\n this._onRenderRequest = callback\n }\n\n resize(width: number, height: number): void {\n this._width = width\n this._height = height\n this.emit(\"resize\", width, height)\n }\n\n // RenderContext interface methods\n addToHitGrid(_x: number, _y: number, _width: number, _height: number, _id: number): void {}\n\n pushHitGridScissorRect(_x: number, _y: number, _width: number, _height: number): void {}\n\n popHitGridScissorRect(): void {}\n\n clearHitGridScissorRects(): void {}\n\n requestRender(): void {\n if (this._renderRequested) return\n this._renderRequested = true\n this._onRenderRequest?.()\n this._renderRequested = false\n }\n\n setCursorPosition(_x: number, _y: number, _visible: boolean): void {}\n\n setCursorStyle(options: CursorStyleOptions): void {\n if (options.color) {\n this.cursorColor = options.color\n }\n if (options.style) {\n this.cursorStyleType = options.style\n }\n if (options.blinking !== undefined) {\n this.cursorBlinking = options.blinking\n }\n }\n\n setCursorColor(color: RGBA): void {\n this.cursorColor = color\n }\n\n setMousePointer(_shape: MousePointerStyle): void {}\n\n requestLive(): void {}\n\n dropLive(): void {}\n\n getSelection(): any | null {\n return null\n }\n\n requestSelectionUpdate(): void {}\n\n focusRenderable(renderable: any): void {\n if (this._focusedRenderable && this._focusedRenderable !== renderable) {\n this._focusedRenderable.blur?.()\n }\n this._focusedRenderable = renderable\n }\n\n registerLifecyclePass(renderable: any): void {\n this._lifecyclePasses.add(renderable)\n }\n\n unregisterLifecyclePass(renderable: any): void {\n this._lifecyclePasses.delete(renderable)\n }\n\n getLifecyclePasses(): Set<any> {\n return this._lifecyclePasses\n }\n\n clearSelection(): void {}\n\n startSelection(_renderable: any, _x: number, _y: number): void {}\n\n updateSelection(\n _currentRenderable: any | undefined,\n _x: number,\n _y: number,\n _options?: { finishDragging?: boolean },\n ): void {}\n}\n", "import type { BrowserBuffer } from \"./browser-buffer\"\nimport type { RGBA } from \"@gridland/utils\"\nimport type { SelectionManager } from \"./selection-manager\"\n\n/** Cursor overlay info produced by the render pipeline, consumed by the painter */\nexport interface CursorOverlay {\n x: number\n y: number\n color: RGBA\n blinking: boolean\n}\n\nconst TextAttributes = {\n BOLD: 1 << 0,\n DIM: 1 << 1,\n ITALIC: 1 << 2,\n UNDERLINE: 1 << 3,\n UNDERLINE_DASHED: 1 << 4,\n INVERSE: 1 << 5,\n UNDERLINE_DOTTED: 1 << 6,\n}\n\nconst CONTINUATION = 0xc0000000\nconst LINE_CURSOR_WIDTH = 8\nconst CURSOR_BLINK_INTERVAL_MS = 530\n\n// Box-drawing character definitions (U+2500\u2013U+257F)\n// Each entry defines which directions extend from cell center and the line weight.\ninterface BoxDrawDef {\n left?: boolean\n right?: boolean\n up?: boolean\n down?: boolean\n type: \"light\" | \"heavy\" | \"double\"\n arc?: \"tl\" | \"tr\" | \"bl\" | \"br\" // rounded corner arc direction\n}\n\nconst BOX_DRAWING_MAP: Record<number, BoxDrawDef> = {\n // Light lines\n 0x2500: { left: true, right: true, type: \"light\" }, // \u2500\n 0x2502: { up: true, down: true, type: \"light\" }, // \u2502\n 0x250c: { right: true, down: true, type: \"light\" }, // \u250C\n 0x2510: { left: true, down: true, type: \"light\" }, // \u2510\n 0x2514: { right: true, up: true, type: \"light\" }, // \u2514\n 0x2518: { left: true, up: true, type: \"light\" }, // \u2518\n 0x251c: { up: true, down: true, right: true, type: \"light\" }, // \u251C\n 0x2524: { up: true, down: true, left: true, type: \"light\" }, // \u2524\n 0x252c: { left: true, right: true, down: true, type: \"light\" }, // \u252C\n 0x2534: { left: true, right: true, up: true, type: \"light\" }, // \u2534\n 0x253c: { left: true, right: true, up: true, down: true, type: \"light\" }, // \u253C\n\n // Heavy lines\n 0x2501: { left: true, right: true, type: \"heavy\" }, // \u2501\n 0x2503: { up: true, down: true, type: \"heavy\" }, // \u2503\n 0x250f: { right: true, down: true, type: \"heavy\" }, // \u250F\n 0x2513: { left: true, down: true, type: \"heavy\" }, // \u2513\n 0x2517: { right: true, up: true, type: \"heavy\" }, // \u2517\n 0x251b: { left: true, up: true, type: \"heavy\" }, // \u251B\n 0x2523: { up: true, down: true, right: true, type: \"heavy\" }, // \u2523\n 0x252b: { up: true, down: true, left: true, type: \"heavy\" }, // \u252B\n 0x2533: { left: true, right: true, down: true, type: \"heavy\" }, // \u2533\n 0x253b: { left: true, right: true, up: true, type: \"heavy\" }, // \u253B\n 0x254b: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u254B\n\n // Light/heavy mixed (treat as light for simplicity of joins)\n 0x250d: { right: true, down: true, type: \"heavy\" }, // \u250D\n 0x250e: { right: true, down: true, type: \"heavy\" }, // \u250E\n 0x2511: { left: true, down: true, type: \"heavy\" }, // \u2511\n 0x2512: { left: true, down: true, type: \"heavy\" }, // \u2512\n 0x2515: { right: true, up: true, type: \"heavy\" }, // \u2515\n 0x2516: { right: true, up: true, type: \"heavy\" }, // \u2516\n 0x2519: { left: true, up: true, type: \"heavy\" }, // \u2519\n 0x251a: { left: true, up: true, type: \"heavy\" }, // \u251A\n 0x251d: { up: true, down: true, right: true, type: \"heavy\" }, // \u251D\n 0x251e: { up: true, down: true, right: true, type: \"light\" }, // \u251E\n 0x251f: { up: true, down: true, right: true, type: \"light\" }, // \u251F\n 0x2520: { up: true, down: true, right: true, type: \"heavy\" }, // \u2520\n 0x2521: { up: true, down: true, right: true, type: \"heavy\" }, // \u2521\n 0x2522: { up: true, down: true, right: true, type: \"heavy\" }, // \u2522\n 0x2525: { up: true, down: true, left: true, type: \"heavy\" }, // \u2525\n 0x2526: { up: true, down: true, left: true, type: \"light\" }, // \u2526\n 0x2527: { up: true, down: true, left: true, type: \"light\" }, // \u2527\n 0x2528: { up: true, down: true, left: true, type: \"heavy\" }, // \u2528\n 0x2529: { up: true, down: true, left: true, type: \"heavy\" }, // \u2529\n 0x252a: { up: true, down: true, left: true, type: \"heavy\" }, // \u252A\n 0x252d: { left: true, right: true, down: true, type: \"heavy\" }, // \u252D\n 0x252e: { left: true, right: true, down: true, type: \"heavy\" }, // \u252E\n 0x252f: { left: true, right: true, down: true, type: \"heavy\" }, // \u252F\n 0x2530: { left: true, right: true, down: true, type: \"heavy\" }, // \u2530\n 0x2531: { left: true, right: true, down: true, type: \"heavy\" }, // \u2531\n 0x2532: { left: true, right: true, down: true, type: \"heavy\" }, // \u2532\n 0x2535: { left: true, right: true, up: true, type: \"heavy\" }, // \u2535\n 0x2536: { left: true, right: true, up: true, type: \"heavy\" }, // \u2536\n 0x2537: { left: true, right: true, up: true, type: \"heavy\" }, // \u2537\n 0x2538: { left: true, right: true, up: true, type: \"heavy\" }, // \u2538\n 0x2539: { left: true, right: true, up: true, type: \"heavy\" }, // \u2539\n 0x253a: { left: true, right: true, up: true, type: \"heavy\" }, // \u253A\n 0x253d: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253D\n 0x253e: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253E\n 0x253f: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253F\n 0x2540: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2540\n 0x2541: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2541\n 0x2542: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2542\n 0x2543: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2543\n 0x2544: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2544\n 0x2545: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2545\n 0x2546: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2546\n 0x2547: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2547\n 0x2548: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2548\n 0x2549: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2549\n 0x254a: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u254A\n\n // Dashed lines (render as solid light/heavy)\n 0x2504: { left: true, right: true, type: \"light\" }, // \u2504\n 0x2505: { left: true, right: true, type: \"heavy\" }, // \u2505\n 0x2506: { up: true, down: true, type: \"light\" }, // \u2506\n 0x2507: { up: true, down: true, type: \"heavy\" }, // \u2507\n 0x2508: { left: true, right: true, type: \"light\" }, // \u2508\n 0x2509: { left: true, right: true, type: \"heavy\" }, // \u2509\n 0x250a: { up: true, down: true, type: \"light\" }, // \u250A\n 0x250b: { up: true, down: true, type: \"heavy\" }, // \u250B\n\n // Double lines\n 0x2550: { left: true, right: true, type: \"double\" }, // \u2550\n 0x2551: { up: true, down: true, type: \"double\" }, // \u2551\n 0x2552: { right: true, down: true, type: \"double\" }, // \u2552\n 0x2553: { right: true, down: true, type: \"double\" }, // \u2553\n 0x2554: { right: true, down: true, type: \"double\" }, // \u2554\n 0x2555: { left: true, down: true, type: \"double\" }, // \u2555\n 0x2556: { left: true, down: true, type: \"double\" }, // \u2556\n 0x2557: { left: true, down: true, type: \"double\" }, // \u2557\n 0x2558: { right: true, up: true, type: \"double\" }, // \u2558\n 0x2559: { right: true, up: true, type: \"double\" }, // \u2559\n 0x255a: { right: true, up: true, type: \"double\" }, // \u255A\n 0x255b: { left: true, up: true, type: \"double\" }, // \u255B\n 0x255c: { left: true, up: true, type: \"double\" }, // \u255C\n 0x255d: { left: true, up: true, type: \"double\" }, // \u255D\n 0x255e: { up: true, down: true, right: true, type: \"double\" }, // \u255E\n 0x255f: { up: true, down: true, right: true, type: \"double\" }, // \u255F\n 0x2560: { up: true, down: true, right: true, type: \"double\" }, // \u2560\n 0x2561: { up: true, down: true, left: true, type: \"double\" }, // \u2561\n 0x2562: { up: true, down: true, left: true, type: \"double\" }, // \u2562\n 0x2563: { up: true, down: true, left: true, type: \"double\" }, // \u2563\n 0x2564: { left: true, right: true, down: true, type: \"double\" }, // \u2564\n 0x2565: { left: true, right: true, down: true, type: \"double\" }, // \u2565\n 0x2566: { left: true, right: true, down: true, type: \"double\" }, // \u2566\n 0x2567: { left: true, right: true, up: true, type: \"double\" }, // \u2567\n 0x2568: { left: true, right: true, up: true, type: \"double\" }, // \u2568\n 0x2569: { left: true, right: true, up: true, type: \"double\" }, // \u2569\n 0x256a: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256A\n 0x256b: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256B\n 0x256c: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256C\n\n // Rounded corners\n 0x256d: { right: true, down: true, type: \"light\", arc: \"tl\" }, // \u256D\n 0x256e: { left: true, down: true, type: \"light\", arc: \"tr\" }, // \u256E\n 0x256f: { left: true, up: true, type: \"light\", arc: \"br\" }, // \u256F\n 0x2570: { right: true, up: true, type: \"light\", arc: \"bl\" }, // \u2570\n\n // Diagonal lines (render as simple connecting lines)\n 0x2571: { type: \"light\" }, // \u2571 (forward slash)\n 0x2572: { type: \"light\" }, // \u2572 (backslash)\n 0x2573: { type: \"light\" }, // \u2573 (cross)\n\n // Half lines\n 0x2574: { left: true, type: \"light\" }, // \u2574\n 0x2575: { up: true, type: \"light\" }, // \u2575\n 0x2576: { right: true, type: \"light\" }, // \u2576\n 0x2577: { down: true, type: \"light\" }, // \u2577\n 0x2578: { left: true, type: \"heavy\" }, // \u2578\n 0x2579: { up: true, type: \"heavy\" }, // \u2579\n 0x257a: { right: true, type: \"heavy\" }, // \u257A\n 0x257b: { down: true, type: \"heavy\" }, // \u257B\n 0x257c: { left: true, right: true, type: \"light\" }, // \u257C (light left, heavy right)\n 0x257d: { up: true, down: true, type: \"light\" }, // \u257D (light up, heavy down)\n 0x257e: { left: true, right: true, type: \"heavy\" }, // \u257E (heavy left, light right)\n 0x257f: { up: true, down: true, type: \"heavy\" }, // \u257F (heavy up, light down)\n}\n\nexport interface CanvasPainterOptions {\n fontFamily?: string\n fontSize?: number\n}\n\nexport class CanvasPainter {\n private cellWidth: number = 0\n private cellHeight: number = 0\n private fontFamily: string\n private fontSize: number\n private baselineOffset: number = 0\n\n constructor(options: CanvasPainterOptions = {}) {\n this.fontFamily = options.fontFamily ?? \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\"\n this.fontSize = options.fontSize ?? 14\n }\n\n measureCell(ctx: CanvasRenderingContext2D): { width: number; height: number } {\n ctx.font = `${this.fontSize}px ${this.fontFamily}`\n const metrics = ctx.measureText(\"M\")\n this.cellWidth = metrics.width\n this.cellHeight = Math.ceil(this.fontSize * 1.4)\n this.baselineOffset = Math.ceil(this.fontSize * 1.1)\n return { width: this.cellWidth, height: this.cellHeight }\n }\n\n getCellSize(): { width: number; height: number } {\n return { width: this.cellWidth, height: this.cellHeight }\n }\n\n paint(ctx: CanvasRenderingContext2D, buffer: BrowserBuffer, selection?: SelectionManager, cursor?: CursorOverlay | null): void {\n const { char, fg, bg, attributes } = buffer\n const cols = buffer.width\n const rows = buffer.height\n const cw = this.cellWidth\n const ch = this.cellHeight\n\n // Pass 1: Background rects \u2014 batch adjacent same-color cells per row\n for (let row = 0; row < rows; row++) {\n let runStartCol = 0\n let runR = -1,\n runG = -1,\n runB = -1,\n runA = -1\n\n for (let col = 0; col <= cols; col++) {\n let r = 0,\n g = 0,\n b = 0,\n a = 0\n if (col < cols) {\n const idx = row * cols + col\n const offset = idx * 4\n const attr = attributes[idx] & 0xff\n const isInverse = !!(attr & TextAttributes.INVERSE)\n if (isInverse) {\n // INVERSE: use fg color as background\n r = fg[offset]\n g = fg[offset + 1]\n b = fg[offset + 2]\n a = fg[offset + 3]\n } else {\n r = bg[offset]\n g = bg[offset + 1]\n b = bg[offset + 2]\n a = bg[offset + 3]\n }\n }\n\n if (col < cols && r === runR && g === runG && b === runB && a === runA) {\n continue\n }\n\n // Flush previous run\n if (runA > 0 && col > runStartCol) {\n ctx.fillStyle = rgbaToCSS(runR, runG, runB, runA)\n ctx.fillRect(runStartCol * cw, row * ch, (col - runStartCol) * cw, ch)\n }\n\n runStartCol = col\n runR = r\n runG = g\n runB = b\n runA = a\n }\n }\n\n // Pass 2: Foreground characters\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n const idx = row * cols + col\n\n // Skip continuation cells (wide char placeholders)\n if (attributes[idx] & CONTINUATION) continue\n\n const charCode = char[idx]\n if (charCode === 0 || charCode === 0x20) continue // skip spaces\n\n const offset = idx * 4\n const attr = attributes[idx] & 0xff\n const isInverse = !!(attr & TextAttributes.INVERSE)\n\n let fgR: number, fgG: number, fgB: number, fgA: number\n if (isInverse) {\n // INVERSE: use bg color as text color\n fgR = bg[offset]\n fgG = bg[offset + 1]\n fgB = bg[offset + 2]\n fgA = bg[offset + 3]\n // If bg is transparent, use black (default terminal bg) as text color\n if (fgA === 0) {\n fgR = 0; fgG = 0; fgB = 0; fgA = 1\n }\n } else {\n fgR = fg[offset]\n fgG = fg[offset + 1]\n fgB = fg[offset + 2]\n fgA = fg[offset + 3]\n }\n\n if (fgA === 0) continue\n\n const isBold = !!(attr & TextAttributes.BOLD)\n const isItalic = !!(attr & TextAttributes.ITALIC)\n const isDim = !!(attr & TextAttributes.DIM)\n const isUnderline = !!(attr & TextAttributes.UNDERLINE)\n\n const effectiveA = isDim ? fgA * 0.5 : fgA\n\n // Box-drawing character rendering\n if (charCode >= 0x2500 && charCode <= 0x257f) {\n const def = BOX_DRAWING_MAP[charCode]\n if (def) {\n const cellX = col * cw\n const cellY = row * ch\n const cx = cellX + cw / 2\n const cy = cellY + ch / 2\n ctx.strokeStyle = rgbaToCSS(fgR, fgG, fgB, effectiveA)\n ctx.lineCap = \"square\"\n\n if (def.type === \"double\") {\n // Draw two parallel lines for each direction\n const gap = Math.max(2, Math.round(cw / 5))\n ctx.lineWidth = 1\n ctx.beginPath()\n if (def.left) {\n ctx.moveTo(cellX, cy - gap / 2); ctx.lineTo(cx, cy - gap / 2)\n ctx.moveTo(cellX, cy + gap / 2); ctx.lineTo(cx, cy + gap / 2)\n }\n if (def.right) {\n ctx.moveTo(cx, cy - gap / 2); ctx.lineTo(cellX + cw, cy - gap / 2)\n ctx.moveTo(cx, cy + gap / 2); ctx.lineTo(cellX + cw, cy + gap / 2)\n }\n if (def.up) {\n ctx.moveTo(cx - gap / 2, cellY); ctx.lineTo(cx - gap / 2, cy)\n ctx.moveTo(cx + gap / 2, cellY); ctx.lineTo(cx + gap / 2, cy)\n }\n if (def.down) {\n ctx.moveTo(cx - gap / 2, cy); ctx.lineTo(cx - gap / 2, cellY + ch)\n ctx.moveTo(cx + gap / 2, cy); ctx.lineTo(cx + gap / 2, cellY + ch)\n }\n ctx.stroke()\n } else if (def.arc) {\n // Rounded corners: use ellipse to handle rectangular cells (ch \u2260 cw)\n const rx = cw / 2\n const ry = ch / 2\n ctx.lineWidth = 1\n ctx.beginPath()\n if (def.arc === \"tl\") {\n // \u256D: arc from right edge to bottom edge\n ctx.ellipse(cellX + cw, cellY + ch, rx, ry, 0, Math.PI, Math.PI * 1.5)\n } else if (def.arc === \"tr\") {\n // \u256E: arc from left edge to bottom edge\n ctx.ellipse(cellX, cellY + ch, rx, ry, 0, Math.PI * 1.5, Math.PI * 2)\n } else if (def.arc === \"bl\") {\n // \u2570: arc from right edge to top edge\n ctx.ellipse(cellX + cw, cellY, rx, ry, 0, Math.PI * 0.5, Math.PI)\n } else if (def.arc === \"br\") {\n // \u256F: arc from left edge to top edge\n ctx.ellipse(cellX, cellY, rx, ry, 0, 0, Math.PI * 0.5)\n }\n ctx.stroke()\n } else if (charCode === 0x2571 || charCode === 0x2572 || charCode === 0x2573) {\n // Diagonal lines\n ctx.lineWidth = 1\n ctx.beginPath()\n if (charCode === 0x2571 || charCode === 0x2573) {\n // \u2571 forward slash\n ctx.moveTo(cellX + cw, cellY)\n ctx.lineTo(cellX, cellY + ch)\n }\n if (charCode === 0x2572 || charCode === 0x2573) {\n // \u2572 backslash\n ctx.moveTo(cellX, cellY)\n ctx.lineTo(cellX + cw, cellY + ch)\n }\n ctx.stroke()\n } else {\n ctx.lineWidth = def.type === \"heavy\" ? 2 : 1\n ctx.beginPath()\n if (def.left) { ctx.moveTo(cellX, cy); ctx.lineTo(cx, cy) }\n if (def.right) { ctx.moveTo(cx, cy); ctx.lineTo(cellX + cw, cy) }\n if (def.up) { ctx.moveTo(cx, cellY); ctx.lineTo(cx, cy) }\n if (def.down) { ctx.moveTo(cx, cy); ctx.lineTo(cx, cellY + ch) }\n ctx.stroke()\n }\n continue\n }\n }\n\n // Normal text rendering\n ctx.fillStyle = rgbaToCSS(fgR, fgG, fgB, effectiveA)\n\n // Build font string\n let fontStyle = \"\"\n if (isItalic) fontStyle += \"italic \"\n if (isBold) fontStyle += \"bold \"\n fontStyle += `${this.fontSize}px ${this.fontFamily}`\n ctx.font = fontStyle\n\n const character = String.fromCodePoint(charCode)\n const x = col * cw\n const y = row * this.cellHeight + this.baselineOffset\n\n ctx.fillText(character, x, y)\n\n // Draw underline\n if (isUnderline) {\n const isDashed = !!(attr & TextAttributes.UNDERLINE_DASHED)\n const isDotted = !!(attr & TextAttributes.UNDERLINE_DOTTED)\n ctx.strokeStyle = ctx.fillStyle\n ctx.lineWidth = 1\n const underlineY = row * this.cellHeight + this.baselineOffset + 2\n if (isDotted) {\n ctx.lineCap = \"round\"\n ctx.setLineDash([0.5, 2.5])\n } else if (isDashed) {\n ctx.setLineDash([2, 2])\n }\n ctx.beginPath()\n ctx.moveTo(x, underlineY)\n ctx.lineTo(x + cw, underlineY)\n ctx.stroke()\n if (isDotted || isDashed) {\n ctx.setLineDash([])\n ctx.lineCap = \"butt\"\n }\n }\n }\n }\n\n // Pass 3: Line cursor overlay\n if (cursor) {\n const visible = !cursor.blinking || Math.floor(performance.now() / CURSOR_BLINK_INTERVAL_MS) % 2 === 0\n if (visible) {\n ctx.fillStyle = rgbaToCSS(cursor.color.r, cursor.color.g, cursor.color.b, cursor.color.a ?? 1)\n ctx.fillRect(cursor.x * cw, cursor.y * ch, LINE_CURSOR_WIDTH, ch)\n }\n }\n\n // Pass 4: Selection overlay\n if (selection?.active) {\n ctx.fillStyle = \"rgba(51, 153, 255, 0.3)\"\n for (let row = 0; row < rows; row++) {\n let runStart = -1\n for (let col = 0; col <= cols; col++) {\n const selected = col < cols && selection.isSelected(col, row)\n if (selected && runStart === -1) {\n runStart = col\n } else if (!selected && runStart !== -1) {\n ctx.fillRect(runStart * cw, row * ch, (col - runStart) * cw, ch)\n runStart = -1\n }\n }\n }\n }\n }\n}\n\nfunction rgbaToCSS(r: number, g: number, b: number, a: number): string {\n const ri = Math.round(r * 255)\n const gi = Math.round(g * 255)\n const bi = Math.round(b * 255)\n return `rgba(${ri},${gi},${bi},${a})`\n}\n", "import type { BrowserBuffer } from \"./browser-buffer\"\n\ninterface SelectionRange {\n startCol: number\n startRow: number\n endCol: number\n endRow: number\n}\n\nexport class SelectionManager {\n private _startCol: number = 0\n private _startRow: number = 0\n private _endCol: number = 0\n private _endRow: number = 0\n private _active: boolean = false\n private _selecting: boolean = false\n\n startSelection(col: number, row: number): void {\n this._startCol = col\n this._startRow = row\n this._endCol = col\n this._endRow = row\n this._selecting = true\n this._active = true\n }\n\n updateSelection(col: number, row: number): void {\n if (!this._selecting) return\n this._endCol = col\n this._endRow = row\n }\n\n endSelection(): void {\n this._selecting = false\n // If start and end are the same cell, clear the selection\n if (this._startCol === this._endCol && this._startRow === this._endRow) {\n this._active = false\n }\n }\n\n clearSelection(): void {\n this._active = false\n this._selecting = false\n }\n\n get active(): boolean {\n return this._active\n }\n\n get selecting(): boolean {\n return this._selecting\n }\n\n /** Returns the selection range normalized to reading order (top-left to bottom-right) */\n getSelectedRange(): SelectionRange | null {\n if (!this._active) return null\n\n let startCol = this._startCol\n let startRow = this._startRow\n let endCol = this._endCol\n let endRow = this._endRow\n\n // Normalize to reading order\n if (startRow > endRow || (startRow === endRow && startCol > endCol)) {\n const tmpCol = startCol\n const tmpRow = startRow\n startCol = endCol\n startRow = endRow\n endCol = tmpCol\n endRow = tmpRow\n }\n\n return { startCol, startRow, endCol, endRow }\n }\n\n isSelected(col: number, row: number): boolean {\n const range = this.getSelectedRange()\n if (!range) return false\n\n const { startCol, startRow, endCol, endRow } = range\n\n if (row < startRow || row > endRow) return false\n if (startRow === endRow) {\n return col >= startCol && col < endCol\n }\n if (row === startRow) return col >= startCol\n if (row === endRow) return col < endCol\n return true\n }\n\n getSelectedText(buffer: BrowserBuffer): string {\n const range = this.getSelectedRange()\n if (!range) return \"\"\n\n const { startCol, startRow, endCol, endRow } = range\n const lines: string[] = []\n\n for (let row = startRow; row <= endRow; row++) {\n let lineStart = row === startRow ? startCol : 0\n let lineEnd = row === endRow ? endCol : buffer.width\n\n // Build the line text\n let line = \"\"\n for (let col = lineStart; col < lineEnd && col < buffer.width; col++) {\n const idx = row * buffer.width + col\n const charCode = buffer.char[idx]\n line += charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n }\n\n // Trim trailing spaces\n lines.push(line.trimEnd())\n }\n\n return lines.join(\"\\n\")\n }\n}\n", "import { BrowserBuffer } from \"./browser-buffer\"\nimport { BrowserRenderContext } from \"./browser-render-context\"\nimport { CanvasPainter, type CursorOverlay } from \"./canvas-painter\"\nimport { SelectionManager } from \"./selection-manager\"\nimport { getLinkId } from \"@gridland/utils\"\nimport { executeRenderPipeline } from \"./render-pipeline\"\n\n// RootRenderable is set externally to avoid circular deps\nlet RootRenderableClass: any = null\n\nexport function setRootRenderableClass(cls: any): void {\n RootRenderableClass = cls\n}\n\nexport class BrowserRenderer {\n public canvas: HTMLCanvasElement\n public ctx2d: CanvasRenderingContext2D\n public buffer: BrowserBuffer\n public renderContext: BrowserRenderContext\n public root: any // RootRenderable\n public painter: CanvasPainter\n public selection: SelectionManager\n\n private cols: number\n private rows: number\n private cellWidth: number = 0\n private cellHeight: number = 0\n private rafId: number | null = null\n private lastTime: number = 0\n private needsRender: boolean = true\n private isDragOver: boolean = false\n private cleanupListeners: (() => void)[] = []\n private mouseDownCell: { col: number; row: number } | null = null\n private backgroundColor: string | null = null\n\n constructor(canvas: HTMLCanvasElement, cols: number, rows: number, options?: { backgroundColor?: string }) {\n this.canvas = canvas\n this.cols = cols\n this.rows = rows\n\n const ctx2d = canvas.getContext(\"2d\")\n if (!ctx2d) throw new Error(\"Could not get 2d context\")\n this.ctx2d = ctx2d\n\n // Measure cell size\n this.painter = new CanvasPainter()\n const cellSize = this.painter.measureCell(this.ctx2d)\n this.cellWidth = cellSize.width\n this.cellHeight = cellSize.height\n\n // Size canvas\n const dpr = window.devicePixelRatio || 1\n canvas.width = Math.ceil(cols * this.cellWidth * dpr)\n canvas.height = Math.ceil(rows * this.cellHeight * dpr)\n canvas.style.width = `${cols * this.cellWidth}px`\n canvas.style.height = `${rows * this.cellHeight}px`\n this.ctx2d.scale(dpr, dpr)\n\n this.backgroundColor = options?.backgroundColor ?? null\n\n // Text cursor for the canvas\n canvas.style.cursor = \"text\"\n\n // Create buffer\n this.buffer = BrowserBuffer.create(cols, rows, \"wcwidth\")\n\n // Create render context\n this.renderContext = new BrowserRenderContext(cols, rows)\n this.renderContext.setOnRenderRequest(() => {\n this.needsRender = true\n })\n\n // Create selection manager\n this.selection = new SelectionManager()\n\n // Create root renderable\n if (!RootRenderableClass) {\n throw new Error(\"RootRenderableClass not set. Call setRootRenderableClass before creating BrowserRenderer.\")\n }\n this.root = new RootRenderableClass(this.renderContext)\n\n // Set up DOM event listeners\n this.setupDomListeners()\n }\n\n private pixelToCell(clientX: number, clientY: number): { col: number; row: number } {\n const rect = this.canvas.getBoundingClientRect()\n const x = clientX - rect.left\n const y = clientY - rect.top\n const col = Math.floor(x / this.cellWidth)\n const row = Math.floor(y / this.cellHeight)\n return {\n col: Math.max(0, Math.min(col, this.cols - 1)),\n row: Math.max(0, Math.min(row, this.rows - 1)),\n }\n }\n\n private setupDomListeners(): void {\n // --- Drag-and-drop ---\n const onDragOver = (e: DragEvent) => {\n e.preventDefault()\n }\n this.canvas.addEventListener(\"dragover\", onDragOver)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragover\", onDragOver))\n\n const onDrop = (e: DragEvent) => {\n e.preventDefault()\n const files = e.dataTransfer?.files\n if (!files || files.length === 0) return\n const file = files[0]\n this.isDragOver = false\n this.renderContext.emit(\"drag-leave\", undefined)\n file.text().then((content) => {\n this.renderContext.emit(\"file-drop\", {\n name: file.name,\n content,\n type: file.type,\n size: file.size,\n })\n })\n }\n this.canvas.addEventListener(\"drop\", onDrop)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"drop\", onDrop))\n\n // --- Mouse selection ---\n const onMouseDown = (e: MouseEvent) => {\n // Only left button\n if (e.button !== 0) return\n this.canvas.focus()\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n this.mouseDownCell = { col, row }\n this.selection.startSelection(col, row)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"mousedown\", onMouseDown)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"mousedown\", onMouseDown))\n\n const onMouseMove = (e: MouseEvent) => {\n // Update cursor style based on whether we're hovering a link\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n const idx = row * this.buffer.width + col\n if (idx >= 0 && idx < this.buffer.attributes.length) {\n const linkId = getLinkId(this.buffer.attributes[idx])\n this.canvas.style.cursor = linkId > 0 ? \"pointer\" : \"text\"\n }\n\n if (!this.selection.selecting) return\n this.selection.updateSelection(col, row)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"mousemove\", onMouseMove)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"mousemove\", onMouseMove))\n\n const onMouseUp = (e: MouseEvent) => {\n const wasSelecting = this.selection.selecting\n if (wasSelecting) {\n this.selection.endSelection()\n this.needsRender = true\n }\n\n // Check for link click: same cell as mousedown (no drag)\n if (e.button === 0 && this.mouseDownCell) {\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n if (col === this.mouseDownCell.col && row === this.mouseDownCell.row) {\n const idx = row * this.buffer.width + col\n if (idx >= 0 && idx < this.buffer.attributes.length) {\n const attr = this.buffer.attributes[idx]\n const linkId = getLinkId(attr)\n if (linkId > 0) {\n const url = this.buffer.getLinkUrl(linkId)\n if (url) {\n window.open(url, \"_blank\")\n }\n }\n }\n }\n this.mouseDownCell = null\n }\n }\n window.addEventListener(\"mouseup\", onMouseUp)\n this.cleanupListeners.push(() => window.removeEventListener(\"mouseup\", onMouseUp))\n\n // --- Drag enter/leave for visual feedback ---\n const onDragEnter = (e: DragEvent) => {\n e.preventDefault()\n if (this.isDragOver) return\n this.isDragOver = true\n this.renderContext.emit(\"drag-enter\", undefined)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"dragenter\", onDragEnter)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragenter\", onDragEnter))\n\n const onDragLeave = (e: DragEvent) => {\n // Only emit when truly leaving the canvas (not entering a child)\n if (e.relatedTarget && this.canvas.contains(e.relatedTarget as Node)) return\n this.isDragOver = false\n this.renderContext.emit(\"drag-leave\", undefined)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"dragleave\", onDragLeave)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragleave\", onDragLeave))\n\n // --- Paste ---\n const onPaste = (e: ClipboardEvent) => {\n if (document.activeElement !== this.canvas) return\n const text = e.clipboardData?.getData(\"text/plain\")\n if (text) {\n e.preventDefault()\n this.renderContext.emit(\"paste\", text)\n }\n }\n document.addEventListener(\"paste\", onPaste)\n this.cleanupListeners.push(() => document.removeEventListener(\"paste\", onPaste))\n }\n\n start(): void {\n this.lastTime = performance.now()\n this.loop()\n }\n\n stop(): void {\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n for (const cleanup of this.cleanupListeners) {\n cleanup()\n }\n this.cleanupListeners = []\n }\n\n private loop = (): void => {\n this.rafId = requestAnimationFrame(this.loop)\n\n const now = performance.now()\n const deltaTime = now - this.lastTime\n this.lastTime = now\n\n let didRender = false\n if (this.needsRender) {\n this.needsRender = false\n didRender = true\n\n // Pass cursor config from render context to buffer before rendering\n this.buffer.cursorColor = this.renderContext.cursorColor\n this.buffer.cursorStyleType = this.renderContext.cursorStyleType\n this.buffer.lineCursorPosition = null\n\n executeRenderPipeline(this.buffer, this.renderContext, this.root, deltaTime)\n }\n\n // Build cursor overlay from buffer position + render context config\n const cursorOverlay = this.buildCursorOverlay()\n\n // Repaint when render pipeline ran, or every frame when blinking cursor is active\n if (!didRender && !cursorOverlay?.blinking) return\n\n // Paint to canvas\n const dpr = window.devicePixelRatio || 1\n this.ctx2d.setTransform(dpr, 0, 0, dpr, 0, 0)\n if (this.backgroundColor) {\n this.ctx2d.fillStyle = this.backgroundColor\n this.ctx2d.fillRect(0, 0, this.canvas.width, this.canvas.height)\n } else {\n this.ctx2d.clearRect(0, 0, this.canvas.width, this.canvas.height)\n }\n this.painter.paint(this.ctx2d, this.buffer, this.selection, cursorOverlay)\n }\n\n private buildCursorOverlay(): CursorOverlay | null {\n const pos = this.buffer.lineCursorPosition\n if (!pos || !this.renderContext.cursorColor) return null\n return {\n x: pos.x,\n y: pos.y,\n color: this.renderContext.cursorColor,\n blinking: this.renderContext.cursorBlinking,\n }\n }\n\n resize(cols: number, rows: number): void {\n this.cols = cols\n this.rows = rows\n\n const dpr = window.devicePixelRatio || 1\n this.canvas.width = Math.ceil(cols * this.cellWidth * dpr)\n this.canvas.height = Math.ceil(rows * this.cellHeight * dpr)\n this.canvas.style.width = `${cols * this.cellWidth}px`\n this.canvas.style.height = `${rows * this.cellHeight}px`\n this.ctx2d.scale(dpr, dpr)\n\n this.buffer.resize(cols, rows)\n this.renderContext.resize(cols, rows)\n this.root.resize(cols, rows)\n this.needsRender = true\n }\n\n private static PREVENT_DEFAULT_KEYS = new Set([\n \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\",\n \" \", \"PageUp\", \"PageDown\", \"Tab\", \"Home\", \"End\",\n ])\n\n private static MODIFIER_KEYS = new Set([\"Alt\", \"Control\", \"Meta\", \"Shift\"])\n\n private static KEY_MAP: Record<string, string> = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\",\n Enter: \"return\",\n Backspace: \"backspace\",\n Delete: \"delete\",\n Tab: \"tab\",\n Escape: \"escape\",\n Home: \"home\",\n End: \"end\",\n \" \": \"space\",\n PageUp: \"pageup\",\n PageDown: \"pagedown\",\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n // Prevent browser default for navigation keys (scrolling) and printable\n // characters (e.g. \"/\" triggers Quick Find in Firefox). Cmd/Ctrl shortcuts\n // like Cmd+C, Cmd+V are preserved.\n if (BrowserRenderer.PREVENT_DEFAULT_KEYS.has(event.key) ||\n (event.key.length === 1 && !event.metaKey && !event.ctrlKey)) {\n event.preventDefault()\n }\n\n // Copy selected text to clipboard (Cmd+C, Ctrl+C, or Option+C on Mac where key is \"\u00E7\")\n if (this.selection.active && (event.key === \"c\" || event.key === \"\u00E7\") && (event.metaKey || event.ctrlKey || event.altKey)) {\n const text = this.selection.getSelectedText(this.buffer)\n if (text) {\n navigator.clipboard.writeText(text).catch(() => {\n // Fallback: temporary textarea + execCommand\n const ta = document.createElement(\"textarea\")\n ta.value = text\n ta.style.position = \"fixed\"\n ta.style.left = \"-9999px\"\n document.body.appendChild(ta)\n ta.select()\n document.execCommand(\"copy\")\n document.body.removeChild(ta)\n })\n }\n event.preventDefault()\n return\n }\n\n // Any other keypress clears the selection (standard terminal behavior)\n // But ignore modifier-only keys so the user can press Option/Ctrl/Cmd before C\n const modifierOnly = BrowserRenderer.MODIFIER_KEYS.has(event.key)\n if (this.selection.active && !modifierOnly) {\n this.selection.clearSelection()\n this.needsRender = true\n }\n\n // Translate browser KeyboardEvent to OpenTUI KeyEvent format\n const keyEvent = {\n name: BrowserRenderer.KEY_MAP[event.key] ?? (event.key.length === 1 ? event.key : event.key.toLowerCase()),\n ctrl: event.ctrlKey,\n meta: event.metaKey,\n shift: event.shiftKey,\n option: event.altKey,\n sequence: event.key,\n number: false,\n raw: event.key,\n eventType: \"press\" as const,\n source: \"raw\" as const,\n _defaultPrevented: false,\n _propagationStopped: false,\n get defaultPrevented() {\n return this._defaultPrevented\n },\n get propagationStopped() {\n return this._propagationStopped\n },\n preventDefault() {\n this._defaultPrevented = true\n },\n stopPropagation() {\n this._propagationStopped = true\n },\n }\n\n this.renderContext._internalKeyInput.emit(\"keypress\", keyEvent)\n this.renderContext.keyInput.emit(\"keypress\", keyEvent)\n }\n}\n", "import type { BrowserBuffer } from \"./browser-buffer\"\nimport type { BrowserRenderContext } from \"./browser-render-context\"\n\n/**\n * Shared render pipeline used by both BrowserRenderer and HeadlessRenderer.\n * Runs lifecycle passes, calculates layout, collects and executes render commands.\n */\nexport function executeRenderPipeline(\n buffer: BrowserBuffer,\n renderContext: BrowserRenderContext,\n root: any,\n deltaTime: number,\n): void {\n // Clear buffer\n buffer.clear()\n\n // Run lifecycle passes\n const lifecyclePasses = renderContext.getLifecyclePasses()\n for (const renderable of lifecyclePasses) {\n if (renderable.onLifecyclePass) {\n renderable.onLifecyclePass()\n }\n }\n\n // Calculate layout\n root.calculateLayout()\n\n // Collect render commands\n const renderList: any[] = []\n root.updateLayout(deltaTime, renderList)\n\n // Execute render commands\n for (const cmd of renderList) {\n switch (cmd.action) {\n case \"pushScissorRect\":\n buffer.pushScissorRect(cmd.x, cmd.y, cmd.width, cmd.height)\n break\n case \"popScissorRect\":\n buffer.popScissorRect()\n break\n case \"pushOpacity\":\n buffer.pushOpacity(cmd.opacity)\n break\n case \"popOpacity\":\n buffer.popOpacity()\n break\n case \"render\":\n cmd.renderable.render(buffer, deltaTime)\n break\n }\n }\n\n // Clear scissor/opacity stacks\n buffer.clearScissorRects()\n buffer.clearOpacity()\n}\n", "import { createContext, useContext } from \"react\"\nimport type { BrowserRenderContext } from \"./browser-render-context\"\n\nexport interface BrowserContextValue {\n renderContext: BrowserRenderContext\n}\n\nexport const BrowserContext = createContext<BrowserContextValue | null>(null)\n\nexport function useBrowserContext(): BrowserContextValue {\n const ctx = useContext(BrowserContext)\n if (!ctx) {\n throw new Error(\"useBrowserContext must be used within a BrowserContext.Provider\")\n }\n return ctx\n}\n", "import React, { type ReactNode } from \"react\"\nimport type { BrowserRenderer } from \"./browser-renderer\"\nimport { BrowserContext } from \"./browser-context\"\n\nimport { _render, AppContext, ErrorBoundary as _ErrorBoundary } from \"@gridland/utils\"\n\n// Cast needed: ErrorBoundary uses opentui's JSX intrinsics internally,\n// which causes a type conflict with React's JSX types during DTS builds.\nconst ErrorBoundary = _ErrorBoundary as unknown as React.ComponentType<{ children: React.ReactNode }>\n\nexport interface BrowserRoot {\n render(node: ReactNode): void\n unmount(): void\n}\n\nexport function createBrowserRoot(renderer: BrowserRenderer): BrowserRoot {\n let unmountFn: (() => void) | null = null\n\n return {\n render(node: ReactNode) {\n const element = (\n <BrowserContext.Provider value={{ renderContext: renderer.renderContext }}>\n <AppContext.Provider value={{ keyHandler: renderer.renderContext.keyInput as any, renderer: renderer.renderContext as any }}>\n <ErrorBoundary>{node}</ErrorBoundary>\n </AppContext.Provider>\n </BrowserContext.Provider>\n )\n unmountFn = _render(element, renderer.root)\n },\n unmount() {\n if (unmountFn) {\n // Reconciler cleanup would happen here\n }\n },\n }\n}\n", "export interface ReadableCharBuffer {\n width: number\n height: number\n char: Uint32Array\n}\n\nexport function bufferToText(buffer: ReadableCharBuffer): string {\n const lines: string[] = []\n for (let row = 0; row < buffer.height; row++) {\n let line = \"\"\n for (let col = 0; col < buffer.width; col++) {\n const idx = row * buffer.width + col\n const charCode = buffer.char[idx]\n line += charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n }\n lines.push(line.trimEnd())\n }\n // Trim trailing empty lines\n while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop()\n }\n return lines.join(\"\\n\")\n}\n", "import { BrowserBuffer } from \"./browser-buffer\"\nimport { BrowserRenderContext } from \"./browser-render-context\"\nimport { bufferToText } from \"./buffer-to-text\"\nimport { executeRenderPipeline } from \"./render-pipeline\"\n\nlet RootRenderableClass: any = null\n\nexport function setHeadlessRootRenderableClass(cls: any): void {\n RootRenderableClass = cls\n}\n\nexport interface HeadlessRendererOptions {\n cols: number\n rows: number\n}\n\nexport class HeadlessRenderer {\n public buffer: BrowserBuffer\n public renderContext: BrowserRenderContext\n public root: any // RootRenderable\n\n constructor(options: HeadlessRendererOptions) {\n const { cols, rows } = options\n\n this.buffer = BrowserBuffer.create(cols, rows, \"wcwidth\")\n this.renderContext = new BrowserRenderContext(cols, rows)\n this.renderContext.setOnRenderRequest(() => {\n // No-op for headless \u2014 we render on demand\n })\n\n if (!RootRenderableClass) {\n throw new Error(\n \"RootRenderableClass not set. Call setHeadlessRootRenderableClass before creating HeadlessRenderer.\",\n )\n }\n this.root = new RootRenderableClass(this.renderContext)\n }\n\n renderOnce(): void {\n executeRenderPipeline(this.buffer, this.renderContext, this.root, 0)\n }\n\n toText(): string {\n return bufferToText(this.buffer)\n }\n\n resize(cols: number, rows: number): void {\n this.buffer.resize(cols, rows)\n this.renderContext.resize(cols, rows)\n this.root.resize(cols, rows)\n }\n}\n", "import React, { type ReactNode } from \"react\"\nimport type { HeadlessRenderer } from \"./headless-renderer\"\nimport { BrowserContext } from \"./browser-context\"\n\nimport { _render, reconciler, AppContext, ErrorBoundary as _ErrorBoundary } from \"@gridland/utils\"\n\nconst ErrorBoundary = _ErrorBoundary as unknown as React.ComponentType<{ children: React.ReactNode }>\n\n// flushSync was renamed to flushSyncFromReconciler in react-reconciler 0.32.0\nconst _r = reconciler as typeof reconciler & { flushSyncFromReconciler?: typeof reconciler.flushSync }\nconst flushSync = _r.flushSyncFromReconciler ?? _r.flushSync\n\nexport interface HeadlessRoot {\n render(node: ReactNode): void\n renderToText(node: ReactNode): string\n unmount(): void\n}\n\nexport function createHeadlessRoot(renderer: HeadlessRenderer): HeadlessRoot {\n let container: any = null\n\n return {\n render(node: ReactNode) {\n const element = (\n <BrowserContext.Provider value={{ renderContext: renderer.renderContext }}>\n <AppContext.Provider\n value={{\n keyHandler: renderer.renderContext.keyInput as any,\n renderer: renderer.renderContext as any,\n }}\n >\n <ErrorBoundary>{node}</ErrorBoundary>\n </AppContext.Provider>\n </BrowserContext.Provider>\n )\n container = _render(element, renderer.root)\n },\n renderToText(node: ReactNode): string {\n flushSync(() => {\n this.render(node)\n })\n renderer.renderOnce()\n return renderer.toText()\n },\n unmount() {\n if (container) {\n reconciler.updateContainer(null, container, null, () => {})\n // @ts-expect-error the types for `react-reconciler` are not up to date with the library.\n reconciler.flushSyncWork()\n container = null\n }\n },\n }\n}\n", "import type { ReactNode } from \"react\"\nimport { BrowserRenderer, setRootRenderableClass } from \"./browser-renderer\"\nimport { createBrowserRoot } from \"./create-browser-root\"\nimport { CanvasPainter } from \"./canvas-painter\"\nimport { RootRenderable } from \"@gridland/utils\"\n\nexport interface MountOptions {\n /** Number of columns (auto-calculated from canvas size if omitted) */\n cols?: number\n /** Number of rows (auto-calculated from canvas size if omitted) */\n rows?: number\n /** Font size in pixels (default: 14) */\n fontSize?: number\n /** Font family (default: monospace stack) */\n fontFamily?: string\n /** Listen for keyboard events on the canvas (default: true) */\n keyboard?: boolean\n /** Auto-resize when canvas size changes (default: true) */\n autoResize?: boolean\n}\n\nexport interface MountResult {\n renderer: BrowserRenderer\n unmount: () => void\n resize: (cols: number, rows: number) => void\n}\n\n/**\n * Imperative API to mount Gridland content into a canvas element.\n *\n * ```ts\n * const canvas = document.getElementById(\"my-canvas\") as HTMLCanvasElement\n * const { unmount } = mountGridland(canvas, <App />)\n * ```\n */\nexport function mountGridland(\n canvas: HTMLCanvasElement,\n element: ReactNode,\n options: MountOptions = {},\n): MountResult {\n const {\n fontSize = 14,\n fontFamily = \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\",\n keyboard = true,\n autoResize = true,\n } = options\n\n // Set up RootRenderable\n setRootRenderableClass(RootRenderable)\n\n // Calculate grid dimensions\n const painter = new CanvasPainter({ fontSize, fontFamily })\n const tempCtx = canvas.getContext(\"2d\")!\n const cellSize = painter.measureCell(tempCtx)\n\n let cols = options.cols ?? Math.max(1, Math.floor(canvas.clientWidth / cellSize.width))\n let rows = options.rows ?? Math.max(1, Math.floor(canvas.clientHeight / cellSize.height))\n\n const renderer = new BrowserRenderer(canvas, cols, rows)\n const root = createBrowserRoot(renderer)\n\n root.render(element)\n renderer.start()\n\n // Always make canvas focusable via click\n canvas.tabIndex = 0\n\n // Keyboard\n let keydownHandler: ((e: KeyboardEvent) => void) | null = null\n if (keyboard) {\n keydownHandler = (e: KeyboardEvent) => renderer.handleKeyDown(e)\n canvas.addEventListener(\"keydown\", keydownHandler)\n }\n\n // Auto-resize\n let resizeObserver: ResizeObserver | null = null\n if (autoResize) {\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect\n const newCols = Math.max(1, Math.floor(width / cellSize.width))\n const newRows = Math.max(1, Math.floor(height / cellSize.height))\n if (newCols !== cols || newRows !== rows) {\n cols = newCols\n rows = newRows\n renderer.resize(newCols, newRows)\n }\n }\n })\n resizeObserver.observe(canvas)\n }\n\n return {\n renderer,\n unmount() {\n if (keydownHandler) {\n canvas.removeEventListener(\"keydown\", keydownHandler)\n }\n resizeObserver?.disconnect()\n renderer.stop()\n root.unmount()\n },\n resize(newCols: number, newRows: number) {\n cols = newCols\n rows = newRows\n renderer.resize(newCols, newRows)\n },\n }\n}\n", "import type { RGBA } from \"@gridland/utils\"\nimport type { WidthMethod } from \"./browser-buffer\"\n\nexport interface TextChunk {\n __isChunk: true\n text: string\n fg?: RGBA\n bg?: RGBA\n attributes?: number\n link?: { url: string }\n}\n\nexport interface StyledTextInput {\n chunks: TextChunk[]\n}\n\nexport class BrowserTextBuffer {\n private _text: string = \"\"\n private _chunks: TextChunk[] = []\n private _defaultFg: RGBA | null = null\n private _defaultBg: RGBA | null = null\n private _defaultAttributes: number = 0\n private _syntaxStyle: any = null\n private _tabWidth: number = 4\n private _widthMethod: WidthMethod\n\n constructor(widthMethod: WidthMethod) {\n this._widthMethod = widthMethod\n }\n\n static create(widthMethod: WidthMethod): BrowserTextBuffer {\n return new BrowserTextBuffer(widthMethod)\n }\n\n // Compat property\n get ptr(): number {\n return 1 // Non-zero so TextBufferRenderable.renderSelf proceeds\n }\n\n get length(): number {\n return this._text.length\n }\n\n get byteSize(): number {\n return new TextEncoder().encode(this._text).length\n }\n\n setText(text: string): void {\n this._text = text\n this._chunks = [\n {\n __isChunk: true,\n text,\n fg: this._defaultFg ?? undefined,\n bg: this._defaultBg ?? undefined,\n attributes: this._defaultAttributes,\n },\n ]\n }\n\n append(text: string): void {\n this._text += text\n this._chunks.push({\n __isChunk: true,\n text,\n fg: this._defaultFg ?? undefined,\n bg: this._defaultBg ?? undefined,\n attributes: this._defaultAttributes,\n })\n }\n\n setStyledText(styledText: StyledTextInput): void {\n this._chunks = styledText.chunks.map((chunk) => ({\n __isChunk: true,\n text: chunk.text,\n fg: chunk.fg ?? this._defaultFg ?? undefined,\n bg: chunk.bg ?? this._defaultBg ?? undefined,\n attributes: chunk.attributes ?? this._defaultAttributes,\n link: chunk.link,\n }))\n this._text = this._chunks.map((c) => c.text).join(\"\")\n }\n\n getPlainText(): string {\n return this._text\n }\n\n getTextRange(startOffset: number, endOffset: number): string {\n return this._text.slice(startOffset, endOffset)\n }\n\n getLineCount(): number {\n if (this._text.length === 0) return 0\n return this._text.split(\"\\n\").length\n }\n\n getChunks(): TextChunk[] {\n return this._chunks\n }\n\n setDefaultFg(fg: RGBA | null): void {\n this._defaultFg = fg\n }\n\n setDefaultBg(bg: RGBA | null): void {\n this._defaultBg = bg\n }\n\n setDefaultAttributes(attributes: number | null): void {\n this._defaultAttributes = attributes ?? 0\n }\n\n resetDefaults(): void {\n this._defaultFg = null\n this._defaultBg = null\n this._defaultAttributes = 0\n }\n\n get defaultFg(): RGBA | null {\n return this._defaultFg\n }\n\n get defaultBg(): RGBA | null {\n return this._defaultBg\n }\n\n get defaultAttributes(): number {\n return this._defaultAttributes\n }\n\n setSyntaxStyle(style: any): void {\n this._syntaxStyle = style\n }\n\n getSyntaxStyle(): any {\n return this._syntaxStyle\n }\n\n setTabWidth(width: number): void {\n this._tabWidth = width\n }\n\n getTabWidth(): number {\n return this._tabWidth\n }\n\n addHighlightByCharRange(_highlight: any): void {}\n addHighlight(_lineIdx: number, _highlight: any): void {}\n removeHighlightsByRef(_hlRef: number): void {}\n clearLineHighlights(_lineIdx: number): void {}\n clearAllHighlights(): void {}\n getLineHighlights(_lineIdx: number): any[] {\n return []\n }\n getHighlightCount(): number {\n return 0\n }\n loadFile(_path: string): void {}\n\n clear(): void {\n this._text = \"\"\n this._chunks = []\n }\n\n reset(): void {\n this.clear()\n this.resetDefaults()\n }\n\n destroy(): void {\n this._text = \"\"\n this._chunks = []\n }\n}\n", "import type { RGBA } from \"@gridland/utils\"\nimport type { BrowserTextBuffer, TextChunk } from \"./browser-text-buffer\"\n\nexport interface VisibleLineChunk {\n text: string\n fg: RGBA\n bg: RGBA\n attributes: number\n link?: { url: string }\n}\n\nexport interface VisibleLine {\n chunks: VisibleLineChunk[]\n}\n\nconst defaultFg: RGBA = {\n r: 1, g: 1, b: 1, a: 1,\n buffer: new Float32Array([1, 1, 1, 1]),\n} as RGBA\n\nconst defaultBg: RGBA = {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n} as RGBA\n\nexport class BrowserTextBufferView {\n private textBuffer: BrowserTextBuffer\n private _wrapWidth: number | null = null\n private _wrapMode: \"none\" | \"char\" | \"word\" = \"word\"\n private _viewportX: number = 0\n private _viewportY: number = 0\n private _viewportWidth: number = 0\n private _viewportHeight: number = 0\n private _truncate: boolean = false\n public textAlign: \"left\" | \"center\" | \"right\" = \"left\"\n private _selection: { start: number; end: number } | null = null\n private _selectionBg: RGBA | undefined\n private _selectionFg: RGBA | undefined\n\n constructor(textBuffer: BrowserTextBuffer) {\n this.textBuffer = textBuffer\n }\n\n static create(textBuffer: BrowserTextBuffer): BrowserTextBufferView {\n return new BrowserTextBufferView(textBuffer)\n }\n\n // Compat\n get ptr(): number {\n return 1\n }\n\n get lineInfo() {\n const lines = this.getAllWrappedLines()\n const lineStarts: number[] = []\n const lineWidths: number[] = []\n const lineSources: number[] = []\n const lineWraps: number[] = []\n let maxWidth = 0\n let offset = 0\n\n for (let i = 0; i < lines.length; i++) {\n lineStarts.push(offset)\n const lineText = lines[i].map((c) => c.text).join(\"\")\n const w = lineText.length\n lineWidths.push(w)\n lineSources.push(0)\n lineWraps.push(0)\n if (w > maxWidth) maxWidth = w\n offset += lineText.length + 1\n }\n\n return { lineStarts, lineWidths, maxLineWidth: maxWidth, lineSources, lineWraps }\n }\n\n get logicalLineInfo() {\n return this.lineInfo\n }\n\n setSelection(start: number, end: number, bgColor?: RGBA, fgColor?: RGBA): void {\n this._selection = { start, end }\n this._selectionBg = bgColor\n this._selectionFg = fgColor\n }\n\n updateSelection(end: number, bgColor?: RGBA, fgColor?: RGBA): void {\n if (this._selection) {\n this._selection.end = end\n }\n if (bgColor) this._selectionBg = bgColor\n if (fgColor) this._selectionFg = fgColor\n }\n\n resetSelection(): void {\n this._selection = null\n }\n\n getSelection(): { start: number; end: number } | null {\n return this._selection\n }\n\n hasSelection(): boolean {\n return this._selection !== null\n }\n\n setLocalSelection(\n _anchorX: number,\n _anchorY: number,\n _focusX: number,\n _focusY: number,\n _bgColor?: RGBA,\n _fgColor?: RGBA,\n ): boolean {\n return false\n }\n\n updateLocalSelection(\n _anchorX: number,\n _anchorY: number,\n _focusX: number,\n _focusY: number,\n _bgColor?: RGBA,\n _fgColor?: RGBA,\n ): boolean {\n return false\n }\n\n resetLocalSelection(): void {}\n\n getSelectedText(): string {\n if (!this._selection) return \"\"\n const text = this.textBuffer.getPlainText()\n const start = Math.min(this._selection.start, this._selection.end)\n const end = Math.max(this._selection.start, this._selection.end)\n return text.slice(start, end)\n }\n\n getPlainText(): string {\n return this.textBuffer.getPlainText()\n }\n\n setWrapWidth(width: number | null): void {\n this._wrapWidth = width\n }\n\n setWrapMode(mode: \"none\" | \"char\" | \"word\"): void {\n this._wrapMode = mode\n }\n\n setViewportSize(width: number, height: number): void {\n this._viewportWidth = width\n this._viewportHeight = height\n\n if (this._wrapMode !== \"none\" && width > 0 && this._wrapWidth !== width) {\n this._wrapWidth = width\n }\n }\n\n setViewport(x: number, y: number, width: number, height: number): void {\n this._viewportX = x\n this._viewportY = y\n this._viewportWidth = width\n this._viewportHeight = height\n\n // Sync wrap width with viewport width (matches Zig TextBufferView.setViewport behavior)\n if (this._wrapMode !== \"none\" && width > 0 && this._wrapWidth !== width) {\n this._wrapWidth = width\n }\n }\n\n setTabIndicator(_indicator: string | number): void {}\n\n setTabIndicatorColor(_color: RGBA): void {}\n\n setTruncate(truncate: boolean): void {\n this._truncate = truncate\n }\n\n private getAllWrappedLines(): VisibleLineChunk[][] {\n const chunks = this.textBuffer.getChunks()\n if (chunks.length === 0) return []\n\n const dfg = this.textBuffer.defaultFg ?? defaultFg\n const dbg = this.textBuffer.defaultBg ?? defaultBg\n\n // First, build logical lines from chunks\n const logicalLines: VisibleLineChunk[][] = [[]]\n\n for (const chunk of chunks) {\n const parts = chunk.text.split(\"\\n\")\n for (let i = 0; i < parts.length; i++) {\n if (i > 0) {\n logicalLines.push([])\n }\n if (parts[i].length > 0) {\n const vlc: VisibleLineChunk = {\n text: parts[i],\n fg: chunk.fg ?? dfg,\n bg: chunk.bg ?? dbg,\n attributes: chunk.attributes ?? 0,\n }\n if (chunk.link) vlc.link = chunk.link\n logicalLines[logicalLines.length - 1].push(vlc)\n }\n }\n }\n\n // Apply wrapping\n if (this._wrapMode === \"none\" || !this._wrapWidth || this._wrapWidth <= 0) {\n return logicalLines\n }\n\n const wrappedLines: VisibleLineChunk[][] = []\n const wrapWidth = this._wrapWidth\n\n for (const logicalLine of logicalLines) {\n // Flatten line text to handle wrapping\n const lineText = logicalLine.map((c) => c.text).join(\"\")\n\n if (lineText.length <= wrapWidth) {\n wrappedLines.push(logicalLine)\n continue\n }\n\n if (this._wrapMode === \"char\") {\n // Character wrapping\n let pos = 0\n while (pos < lineText.length) {\n const end = Math.min(pos + wrapWidth, lineText.length)\n const sliceChunks = this.sliceChunks(logicalLine, pos, end)\n wrappedLines.push(sliceChunks)\n pos = end\n }\n } else {\n // Word wrapping\n let pos = 0\n while (pos < lineText.length) {\n let end = Math.min(pos + wrapWidth, lineText.length)\n if (end < lineText.length) {\n // Look for a space to break at\n let breakPos = end\n while (breakPos > pos && lineText[breakPos] !== \" \") {\n breakPos--\n }\n if (breakPos > pos) {\n end = breakPos + 1 // Include the space\n }\n }\n const sliceChunks = this.sliceChunks(logicalLine, pos, end)\n wrappedLines.push(sliceChunks)\n pos = end\n }\n }\n }\n\n return wrappedLines\n }\n\n private sliceChunks(chunks: VisibleLineChunk[], start: number, end: number): VisibleLineChunk[] {\n const result: VisibleLineChunk[] = []\n let offset = 0\n\n for (const chunk of chunks) {\n const chunkStart = offset\n const chunkEnd = offset + chunk.text.length\n\n if (chunkEnd <= start || chunkStart >= end) {\n offset = chunkEnd\n continue\n }\n\n const sliceStart = Math.max(0, start - chunkStart)\n const sliceEnd = Math.min(chunk.text.length, end - chunkStart)\n const slicedText = chunk.text.slice(sliceStart, sliceEnd)\n\n if (slicedText.length > 0) {\n const sliced: VisibleLineChunk = {\n text: slicedText,\n fg: chunk.fg,\n bg: chunk.bg,\n attributes: chunk.attributes,\n }\n if (chunk.link) sliced.link = chunk.link\n result.push(sliced)\n }\n\n offset = chunkEnd\n }\n\n return result\n }\n\n measureForDimensions(width: number, height: number): { lineCount: number; maxWidth: number } | null {\n // Temporarily set wrap width for measurement\n const oldWrapWidth = this._wrapWidth\n if (width > 0 && this._wrapMode !== \"none\") {\n this._wrapWidth = width\n } else if (width === 0) {\n // width=0 means measure without wrapping\n this._wrapWidth = null\n }\n\n const lines = this.getAllWrappedLines()\n this._wrapWidth = oldWrapWidth\n\n let maxWidth = 0\n for (const line of lines) {\n const lineWidth = line.reduce((sum, c) => sum + c.text.length, 0)\n if (lineWidth > maxWidth) maxWidth = lineWidth\n }\n\n return {\n lineCount: lines.length,\n maxWidth,\n }\n }\n\n getVirtualLineCount(): number {\n return this.getAllWrappedLines().length\n }\n\n getVisibleLines(): VisibleLine[] | null {\n const allLines = this.getAllWrappedLines()\n if (allLines.length === 0) return null\n\n const startLine = this._viewportY\n const endLine =\n this._viewportHeight > 0 ? Math.min(startLine + this._viewportHeight, allLines.length) : allLines.length\n\n const visibleLines: VisibleLine[] = []\n for (let i = startLine; i < endLine; i++) {\n if (i >= 0 && i < allLines.length) {\n visibleLines.push({ chunks: allLines[i] })\n }\n }\n\n return visibleLines\n }\n\n destroy(): void {}\n}\n", "// Stub SyntaxStyle for browser - no native Zig backing needed\nexport class BrowserSyntaxStyle {\n private _destroyed = false\n\n static create(): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n static fromTheme(_theme: any): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n static fromStyles(_styles: any): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n get ptr(): number {\n return 0\n }\n\n registerStyle(_name: string, _style: any): number {\n return 0\n }\n\n resolveStyleId(_name: string): number | null {\n return null\n }\n\n getStyleId(_name: string): number | null {\n return null\n }\n\n getStyleCount(): number {\n return 0\n }\n\n clearNameCache(): void {}\n\n getStyle(_name: string): any {\n return undefined\n }\n\n mergeStyles(..._styleNames: string[]): { attributes: number } {\n return { attributes: 0 }\n }\n\n clearCache(): void {}\n getCacheSize(): number {\n return 0\n }\n getAllStyles(): Map<string, any> {\n return new Map()\n }\n getRegisteredNames(): string[] {\n return []\n }\n\n destroy(): void {\n this._destroyed = true\n }\n}\n", "/**\n * SSR-safe utilities for @gridland/web.\n * These can be imported in any environment (Node.js, browser, edge).\n */\n\n/** Check if running in a browser environment */\nexport function isBrowser(): boolean {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\"\n}\n\n/** Check if canvas is supported */\nexport function isCanvasSupported(): boolean {\n if (!isBrowser()) return false\n const canvas = document.createElement(\"canvas\")\n return !!canvas.getContext(\"2d\")\n}\n\n/** Calculate grid dimensions from pixel dimensions and font size */\nexport function calculateGridSize(\n widthPx: number,\n heightPx: number,\n cellWidth: number,\n cellHeight: number,\n): { cols: number; rows: number } {\n return {\n cols: Math.max(1, Math.floor(widthPx / cellWidth)),\n rows: Math.max(1, Math.floor(heightPx / cellHeight)),\n }\n}\n", "import { useEffect, useState } from \"react\"\nimport { useBrowserContext } from \"./browser-context\"\n\nexport interface DroppedFile {\n name: string\n content: string\n type: string\n size: number\n}\n\nexport function useFileDrop(callback: (file: DroppedFile) => void): { isDragOver: boolean } {\n const { renderContext } = useBrowserContext()\n const [isDragOver, setIsDragOver] = useState(false)\n\n useEffect(() => {\n const handler = (file: DroppedFile) => {\n callback(file)\n }\n const onDragEnter = () => setIsDragOver(true)\n const onDragLeave = () => setIsDragOver(false)\n\n renderContext.on(\"file-drop\", handler)\n renderContext.on(\"drag-enter\", onDragEnter)\n renderContext.on(\"drag-leave\", onDragLeave)\n return () => {\n renderContext.off(\"file-drop\", handler)\n renderContext.off(\"drag-enter\", onDragEnter)\n renderContext.off(\"drag-leave\", onDragLeave)\n }\n }, [renderContext, callback])\n\n return { isDragOver }\n}\n", "import { useEffect } from \"react\"\nimport { useBrowserContext } from \"./browser-context\"\n\nexport function usePaste(callback: (text: string) => void): void {\n const { renderContext } = useBrowserContext()\n\n useEffect(() => {\n const handler = (text: string) => {\n callback(text)\n }\n renderContext.on(\"paste\", handler)\n return () => {\n renderContext.off(\"paste\", handler)\n }\n }, [renderContext, callback])\n}\n", "// Main entry point for @gridland/web\n// Browser-specific runtime. Portable hooks/utilities live in @gridland/utils.\n\n// React component (the primary API)\nexport { TUI } from \"./TUI\"\nexport type { TUIProps } from \"./TUI\"\n\n// Imperative mount API\nexport { mountGridland } from \"./mount\"\nexport type { MountOptions, MountResult } from \"./mount\"\n\n// Core browser runtime\nexport { BrowserRenderer } from \"./browser-renderer\"\nexport { BrowserBuffer } from \"./browser-buffer\"\nexport type { WidthMethod, BorderDrawOptions } from \"./browser-buffer\"\nexport { BrowserTextBuffer } from \"./browser-text-buffer\"\nexport type { TextChunk, StyledTextInput } from \"./browser-text-buffer\"\nexport { BrowserTextBufferView } from \"./browser-text-buffer-view\"\nexport type { VisibleLine, VisibleLineChunk } from \"./browser-text-buffer-view\"\nexport { BrowserRenderContext } from \"./browser-render-context\"\nexport { BrowserSyntaxStyle } from \"./browser-syntax-style\"\nexport { CanvasPainter } from \"./canvas-painter\"\nexport type { CanvasPainterOptions } from \"./canvas-painter\"\nexport { SelectionManager } from \"./selection-manager\"\nexport { createBrowserRoot } from \"./create-browser-root\"\nexport type { BrowserRoot } from \"./create-browser-root\"\n\n// Headless rendering\nexport { bufferToText } from \"./buffer-to-text\"\nexport { HeadlessRenderer, setHeadlessRootRenderableClass } from \"./headless-renderer\"\nexport type { HeadlessRendererOptions } from \"./headless-renderer\"\nexport { createHeadlessRoot } from \"./create-headless-root\"\nexport type { HeadlessRoot } from \"./create-headless-root\"\n\n// Browser context\nexport { BrowserContext } from \"./browser-context\"\nexport type { BrowserContextValue } from \"./browser-context\"\n\n// Utilities\nexport { isBrowser, isCanvasSupported, calculateGridSize } from \"./utils\"\n\n// Browser-only hooks\nexport { useFileDrop } from \"./file-drop\"\nexport type { DroppedFile } from \"./file-drop\"\nexport { usePaste } from \"./paste\"\nexport { useBrowserContext } from \"./browser-context\"\n\n// Gridland extension: textAlign property on TextBufferRenderable.\n// Proxies to the BrowserTextBufferView's textAlign property for centered text rendering.\nimport { TextBufferRenderable } from \"@gridland/utils\"\nObject.defineProperty(TextBufferRenderable.prototype, \"textAlign\", {\n get(this: any) {\n return this.textBufferView?.textAlign ?? \"left\"\n },\n set(this: any, value: \"left\" | \"center\" | \"right\") {\n if (this.textBufferView) {\n this.textBufferView.textAlign = value\n this.requestRender()\n }\n },\n enumerable: true,\n configurable: true,\n})\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAuBA,QAAI,IAAI,OAAO,YAAY,WAAW,UAAU;AAChD,QAAI,eAAe,KAAK,OAAO,EAAE,UAAU,aACvC,EAAE,QACF,SAASA,cAAa,QAAQ,UAAU,MAAM;AAC9C,aAAO,SAAS,UAAU,MAAM,KAAK,QAAQ,UAAU,IAAI;AAAA,IAC7D;AAEF,QAAI;AACJ,QAAI,KAAK,OAAO,EAAE,YAAY,YAAY;AACxC,uBAAiB,EAAE;AAAA,IACrB,WAAW,OAAO,uBAAuB;AACvC,uBAAiB,SAASC,gBAAe,QAAQ;AAC/C,eAAO,OAAO,oBAAoB,MAAM,EACrC,OAAO,OAAO,sBAAsB,MAAM,CAAC;AAAA,MAChD;AAAA,IACF,OAAO;AACL,uBAAiB,SAASA,gBAAe,QAAQ;AAC/C,eAAO,OAAO,oBAAoB,MAAM;AAAA,MAC1C;AAAA,IACF;AAEA,aAAS,mBAAmB,SAAS;AACnC,UAAI,WAAW,QAAQ,KAAM,SAAQ,KAAK,OAAO;AAAA,IACnD;AAEA,QAAI,cAAc,OAAO,SAAS,SAASC,aAAY,OAAO;AAC5D,aAAO,UAAU;AAAA,IACnB;AAEA,aAASC,gBAAe;AACtB,MAAAA,cAAa,KAAK,KAAK,IAAI;AAAA,IAC7B;AACA,WAAO,UAAUA;AACjB,WAAO,QAAQ,OAAO;AAGtB,IAAAA,cAAa,eAAeA;AAE5B,IAAAA,cAAa,UAAU,UAAU;AACjC,IAAAA,cAAa,UAAU,eAAe;AACtC,IAAAA,cAAa,UAAU,gBAAgB;AAIvC,QAAI,sBAAsB;AAE1B,aAAS,cAAc,UAAU;AAC/B,UAAI,OAAO,aAAa,YAAY;AAClC,cAAM,IAAI,UAAU,qEAAqE,OAAO,QAAQ;AAAA,MAC1G;AAAA,IACF;AAEA,WAAO,eAAeA,eAAc,uBAAuB;AAAA,MACzD,YAAY;AAAA,MACZ,KAAK,WAAW;AACd,eAAO;AAAA,MACT;AAAA,MACA,KAAK,SAAS,KAAK;AACjB,YAAI,OAAO,QAAQ,YAAY,MAAM,KAAK,YAAY,GAAG,GAAG;AAC1D,gBAAM,IAAI,WAAW,oGAAoG,MAAM,GAAG;AAAA,QACpI;AACA,8BAAsB;AAAA,MACxB;AAAA,IACF,CAAC;AAED,IAAAA,cAAa,OAAO,WAAW;AAE7B,UAAI,KAAK,YAAY,UACjB,KAAK,YAAY,OAAO,eAAe,IAAI,EAAE,SAAS;AACxD,aAAK,UAAU,uBAAO,OAAO,IAAI;AACjC,aAAK,eAAe;AAAA,MACtB;AAEA,WAAK,gBAAgB,KAAK,iBAAiB;AAAA,IAC7C;AAIA,IAAAA,cAAa,UAAU,kBAAkB,SAAS,gBAAgB,GAAG;AACnE,UAAI,OAAO,MAAM,YAAY,IAAI,KAAK,YAAY,CAAC,GAAG;AACpD,cAAM,IAAI,WAAW,kFAAkF,IAAI,GAAG;AAAA,MAChH;AACA,WAAK,gBAAgB;AACrB,aAAO;AAAA,IACT;AAEA,aAAS,iBAAiB,MAAM;AAC9B,UAAI,KAAK,kBAAkB;AACzB,eAAOA,cAAa;AACtB,aAAO,KAAK;AAAA,IACd;AAEA,IAAAA,cAAa,UAAU,kBAAkB,SAAS,kBAAkB;AAClE,aAAO,iBAAiB,IAAI;AAAA,IAC9B;AAEA,IAAAA,cAAa,UAAU,OAAO,SAAS,KAAK,MAAM;AAChD,UAAI,OAAO,CAAC;AACZ,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAK,MAAK,KAAK,UAAU,CAAC,CAAC;AACjE,UAAI,UAAW,SAAS;AAExB,UAAI,SAAS,KAAK;AAClB,UAAI,WAAW;AACb,kBAAW,WAAW,OAAO,UAAU;AAAA,eAChC,CAAC;AACR,eAAO;AAGT,UAAI,SAAS;AACX,YAAI;AACJ,YAAI,KAAK,SAAS;AAChB,eAAK,KAAK,CAAC;AACb,YAAI,cAAc,OAAO;AAGvB,gBAAM;AAAA,QACR;AAEA,YAAI,MAAM,IAAI,MAAM,sBAAsB,KAAK,OAAO,GAAG,UAAU,MAAM,GAAG;AAC5E,YAAI,UAAU;AACd,cAAM;AAAA,MACR;AAEA,UAAI,UAAU,OAAO,IAAI;AAEzB,UAAI,YAAY;AACd,eAAO;AAET,UAAI,OAAO,YAAY,YAAY;AACjC,qBAAa,SAAS,MAAM,IAAI;AAAA,MAClC,OAAO;AACL,YAAI,MAAM,QAAQ;AAClB,YAAI,YAAY,WAAW,SAAS,GAAG;AACvC,iBAAS,IAAI,GAAG,IAAI,KAAK,EAAE;AACzB,uBAAa,UAAU,CAAC,GAAG,MAAM,IAAI;AAAA,MACzC;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,aAAa,QAAQ,MAAM,UAAU,SAAS;AACrD,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,oBAAc,QAAQ;AAEtB,eAAS,OAAO;AAChB,UAAI,WAAW,QAAW;AACxB,iBAAS,OAAO,UAAU,uBAAO,OAAO,IAAI;AAC5C,eAAO,eAAe;AAAA,MACxB,OAAO;AAGL,YAAI,OAAO,gBAAgB,QAAW;AACpC,iBAAO;AAAA,YAAK;AAAA,YAAe;AAAA,YACf,SAAS,WAAW,SAAS,WAAW;AAAA,UAAQ;AAI5D,mBAAS,OAAO;AAAA,QAClB;AACA,mBAAW,OAAO,IAAI;AAAA,MACxB;AAEA,UAAI,aAAa,QAAW;AAE1B,mBAAW,OAAO,IAAI,IAAI;AAC1B,UAAE,OAAO;AAAA,MACX,OAAO;AACL,YAAI,OAAO,aAAa,YAAY;AAElC,qBAAW,OAAO,IAAI,IACpB,UAAU,CAAC,UAAU,QAAQ,IAAI,CAAC,UAAU,QAAQ;AAAA,QAExD,WAAW,SAAS;AAClB,mBAAS,QAAQ,QAAQ;AAAA,QAC3B,OAAO;AACL,mBAAS,KAAK,QAAQ;AAAA,QACxB;AAGA,YAAI,iBAAiB,MAAM;AAC3B,YAAI,IAAI,KAAK,SAAS,SAAS,KAAK,CAAC,SAAS,QAAQ;AACpD,mBAAS,SAAS;AAGlB,cAAI,IAAI,IAAI,MAAM,iDACE,SAAS,SAAS,MAAM,OAAO,IAAI,IAAI,mEAEvB;AACpC,YAAE,OAAO;AACT,YAAE,UAAU;AACZ,YAAE,OAAO;AACT,YAAE,QAAQ,SAAS;AACnB,6BAAmB,CAAC;AAAA,QACtB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,IAAAA,cAAa,UAAU,cAAc,SAAS,YAAY,MAAM,UAAU;AACxE,aAAO,aAAa,MAAM,MAAM,UAAU,KAAK;AAAA,IACjD;AAEA,IAAAA,cAAa,UAAU,KAAKA,cAAa,UAAU;AAEnD,IAAAA,cAAa,UAAU,kBACnB,SAAS,gBAAgB,MAAM,UAAU;AACvC,aAAO,aAAa,MAAM,MAAM,UAAU,IAAI;AAAA,IAChD;AAEJ,aAAS,cAAc;AACrB,UAAI,CAAC,KAAK,OAAO;AACf,aAAK,OAAO,eAAe,KAAK,MAAM,KAAK,MAAM;AACjD,aAAK,QAAQ;AACb,YAAI,UAAU,WAAW;AACvB,iBAAO,KAAK,SAAS,KAAK,KAAK,MAAM;AACvC,eAAO,KAAK,SAAS,MAAM,KAAK,QAAQ,SAAS;AAAA,MACnD;AAAA,IACF;AAEA,aAAS,UAAU,QAAQ,MAAM,UAAU;AACzC,UAAI,QAAQ,EAAE,OAAO,OAAO,QAAQ,QAAW,QAAgB,MAAY,SAAmB;AAC9F,UAAI,UAAU,YAAY,KAAK,KAAK;AACpC,cAAQ,WAAW;AACnB,YAAM,SAAS;AACf,aAAO;AAAA,IACT;AAEA,IAAAA,cAAa,UAAU,OAAO,SAASC,MAAK,MAAM,UAAU;AAC1D,oBAAc,QAAQ;AACtB,WAAK,GAAG,MAAM,UAAU,MAAM,MAAM,QAAQ,CAAC;AAC7C,aAAO;AAAA,IACT;AAEA,IAAAD,cAAa,UAAU,sBACnB,SAAS,oBAAoB,MAAM,UAAU;AAC3C,oBAAc,QAAQ;AACtB,WAAK,gBAAgB,MAAM,UAAU,MAAM,MAAM,QAAQ,CAAC;AAC1D,aAAO;AAAA,IACT;AAGJ,IAAAA,cAAa,UAAU,iBACnB,SAAS,eAAe,MAAM,UAAU;AACtC,UAAI,MAAM,QAAQ,UAAU,GAAG;AAE/B,oBAAc,QAAQ;AAEtB,eAAS,KAAK;AACd,UAAI,WAAW;AACb,eAAO;AAET,aAAO,OAAO,IAAI;AAClB,UAAI,SAAS;AACX,eAAO;AAET,UAAI,SAAS,YAAY,KAAK,aAAa,UAAU;AACnD,YAAI,EAAE,KAAK,iBAAiB;AAC1B,eAAK,UAAU,uBAAO,OAAO,IAAI;AAAA,aAC9B;AACH,iBAAO,OAAO,IAAI;AAClB,cAAI,OAAO;AACT,iBAAK,KAAK,kBAAkB,MAAM,KAAK,YAAY,QAAQ;AAAA,QAC/D;AAAA,MACF,WAAW,OAAO,SAAS,YAAY;AACrC,mBAAW;AAEX,aAAK,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACrC,cAAI,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,EAAE,aAAa,UAAU;AACzD,+BAAmB,KAAK,CAAC,EAAE;AAC3B,uBAAW;AACX;AAAA,UACF;AAAA,QACF;AAEA,YAAI,WAAW;AACb,iBAAO;AAET,YAAI,aAAa;AACf,eAAK,MAAM;AAAA,aACR;AACH,oBAAU,MAAM,QAAQ;AAAA,QAC1B;AAEA,YAAI,KAAK,WAAW;AAClB,iBAAO,IAAI,IAAI,KAAK,CAAC;AAEvB,YAAI,OAAO,mBAAmB;AAC5B,eAAK,KAAK,kBAAkB,MAAM,oBAAoB,QAAQ;AAAA,MAClE;AAEA,aAAO;AAAA,IACT;AAEJ,IAAAA,cAAa,UAAU,MAAMA,cAAa,UAAU;AAEpD,IAAAA,cAAa,UAAU,qBACnB,SAAS,mBAAmB,MAAM;AAChC,UAAI,WAAW,QAAQ;AAEvB,eAAS,KAAK;AACd,UAAI,WAAW;AACb,eAAO;AAGT,UAAI,OAAO,mBAAmB,QAAW;AACvC,YAAI,UAAU,WAAW,GAAG;AAC1B,eAAK,UAAU,uBAAO,OAAO,IAAI;AACjC,eAAK,eAAe;AAAA,QACtB,WAAW,OAAO,IAAI,MAAM,QAAW;AACrC,cAAI,EAAE,KAAK,iBAAiB;AAC1B,iBAAK,UAAU,uBAAO,OAAO,IAAI;AAAA;AAEjC,mBAAO,OAAO,IAAI;AAAA,QACtB;AACA,eAAO;AAAA,MACT;AAGA,UAAI,UAAU,WAAW,GAAG;AAC1B,YAAI,OAAO,OAAO,KAAK,MAAM;AAC7B,YAAI;AACJ,aAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAChC,gBAAM,KAAK,CAAC;AACZ,cAAI,QAAQ,iBAAkB;AAC9B,eAAK,mBAAmB,GAAG;AAAA,QAC7B;AACA,aAAK,mBAAmB,gBAAgB;AACxC,aAAK,UAAU,uBAAO,OAAO,IAAI;AACjC,aAAK,eAAe;AACpB,eAAO;AAAA,MACT;AAEA,kBAAY,OAAO,IAAI;AAEvB,UAAI,OAAO,cAAc,YAAY;AACnC,aAAK,eAAe,MAAM,SAAS;AAAA,MACrC,WAAW,cAAc,QAAW;AAElC,aAAK,IAAI,UAAU,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,eAAK,eAAe,MAAM,UAAU,CAAC,CAAC;AAAA,QACxC;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEJ,aAAS,WAAW,QAAQ,MAAM,QAAQ;AACxC,UAAI,SAAS,OAAO;AAEpB,UAAI,WAAW;AACb,eAAO,CAAC;AAEV,UAAI,aAAa,OAAO,IAAI;AAC5B,UAAI,eAAe;AACjB,eAAO,CAAC;AAEV,UAAI,OAAO,eAAe;AACxB,eAAO,SAAS,CAAC,WAAW,YAAY,UAAU,IAAI,CAAC,UAAU;AAEnE,aAAO,SACL,gBAAgB,UAAU,IAAI,WAAW,YAAY,WAAW,MAAM;AAAA,IAC1E;AAEA,IAAAA,cAAa,UAAU,YAAY,SAAS,UAAU,MAAM;AAC1D,aAAO,WAAW,MAAM,MAAM,IAAI;AAAA,IACpC;AAEA,IAAAA,cAAa,UAAU,eAAe,SAAS,aAAa,MAAM;AAChE,aAAO,WAAW,MAAM,MAAM,KAAK;AAAA,IACrC;AAEA,IAAAA,cAAa,gBAAgB,SAAS,SAAS,MAAM;AACnD,UAAI,OAAO,QAAQ,kBAAkB,YAAY;AAC/C,eAAO,QAAQ,cAAc,IAAI;AAAA,MACnC,OAAO;AACL,eAAO,cAAc,KAAK,SAAS,IAAI;AAAA,MACzC;AAAA,IACF;AAEA,IAAAA,cAAa,UAAU,gBAAgB;AACvC,aAAS,cAAc,MAAM;AAC3B,UAAI,SAAS,KAAK;AAElB,UAAI,WAAW,QAAW;AACxB,YAAI,aAAa,OAAO,IAAI;AAE5B,YAAI,OAAO,eAAe,YAAY;AACpC,iBAAO;AAAA,QACT,WAAW,eAAe,QAAW;AACnC,iBAAO,WAAW;AAAA,QACpB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,IAAAA,cAAa,UAAU,aAAa,SAAS,aAAa;AACxD,aAAO,KAAK,eAAe,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC;AAAA,IACjE;AAEA,aAAS,WAAW,KAAK,GAAG;AAC1B,UAAI,OAAO,IAAI,MAAM,CAAC;AACtB,eAAS,IAAI,GAAG,IAAI,GAAG,EAAE;AACvB,aAAK,CAAC,IAAI,IAAI,CAAC;AACjB,aAAO;AAAA,IACT;AAEA,aAAS,UAAU,MAAM,OAAO;AAC9B,aAAO,QAAQ,IAAI,KAAK,QAAQ;AAC9B,aAAK,KAAK,IAAI,KAAK,QAAQ,CAAC;AAC9B,WAAK,IAAI;AAAA,IACX;AAEA,aAAS,gBAAgB,KAAK;AAC5B,UAAI,MAAM,IAAI,MAAM,IAAI,MAAM;AAC9B,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AACnC,YAAI,CAAC,IAAI,IAAI,CAAC,EAAE,YAAY,IAAI,CAAC;AAAA,MACnC;AACA,aAAO;AAAA,IACT;AAEA,aAAS,KAAK,SAAS,MAAM;AAC3B,aAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAC5C,iBAAS,cAAc,KAAK;AAC1B,kBAAQ,eAAe,MAAM,QAAQ;AACrC,iBAAO,GAAG;AAAA,QACZ;AAEA,iBAAS,WAAW;AAClB,cAAI,OAAO,QAAQ,mBAAmB,YAAY;AAChD,oBAAQ,eAAe,SAAS,aAAa;AAAA,UAC/C;AACA,kBAAQ,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;AAAA,QAClC;AAAC;AAED,uCAA+B,SAAS,MAAM,UAAU,EAAE,MAAM,KAAK,CAAC;AACtE,YAAI,SAAS,SAAS;AACpB,wCAA8B,SAAS,eAAe,EAAE,MAAM,KAAK,CAAC;AAAA,QACtE;AAAA,MACF,CAAC;AAAA,IACH;AAEA,aAAS,8BAA8B,SAAS,SAAS,OAAO;AAC9D,UAAI,OAAO,QAAQ,OAAO,YAAY;AACpC,uCAA+B,SAAS,SAAS,SAAS,KAAK;AAAA,MACjE;AAAA,IACF;AAEA,aAAS,+BAA+B,SAAS,MAAM,UAAU,OAAO;AACtE,UAAI,OAAO,QAAQ,OAAO,YAAY;AACpC,YAAI,MAAM,MAAM;AACd,kBAAQ,KAAK,MAAM,QAAQ;AAAA,QAC7B,OAAO;AACL,kBAAQ,GAAG,MAAM,QAAQ;AAAA,QAC3B;AAAA,MACF,WAAW,OAAO,QAAQ,qBAAqB,YAAY;AAGzD,gBAAQ,iBAAiB,MAAM,SAAS,aAAa,KAAK;AAGxD,cAAI,MAAM,MAAM;AACd,oBAAQ,oBAAoB,MAAM,YAAY;AAAA,UAChD;AACA,mBAAS,GAAG;AAAA,QACd,CAAC;AAAA,MACH,OAAO;AACL,cAAM,IAAI,UAAU,wEAAwE,OAAO,OAAO;AAAA,MAC5G;AAAA,IACF;AAAA;AAAA;;;AChfA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;;;ACJP,SAAS,0BAA0B;AAGnC,IAAM,eAAe;AA0Bd,IAAM,gBAAN,MAAM,eAAc;AAAA,EAClB;AAAA,EACA;AAAA,EAEC;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEC,eAA8B,CAAC;AAAA,EAC/B,eAAyB,CAAC;AAAA;AAAA,EAG3B,eAAoC,oBAAI,IAAI;AAAA,EAC3C,aAAqB;AAAA;AAAA,EAEtB,cAA2B;AAAA,EAC3B,kBAA+B;AAAA;AAAA,EAE/B,qBAAsD;AAAA,EAE7D,YACE,OACA,QACA,UAA8E,CAAC,GAC/E;AACA,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,eAAe,QAAQ,eAAe;AAC3C,SAAK,eAAe,QAAQ,gBAAgB;AAC5C,SAAK,KAAK,QAAQ,MAAM,kBAAkB,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAEhF,UAAM,OAAO,QAAQ;AACrB,SAAK,OAAO,IAAI,YAAY,IAAI;AAChC,SAAK,KAAK,IAAI,aAAa,OAAO,CAAC;AACnC,SAAK,KAAK,IAAI,aAAa,OAAO,CAAC;AACnC,SAAK,aAAa,IAAI,YAAY,IAAI;AAGtC,SAAK,KAAK,KAAK,EAAI;AAAA,EACrB;AAAA,EAEA,OAAO,OACL,OACA,QACA,aACA,SACe;AACf,WAAO,IAAI,eAAc,OAAO,QAAQ,EAAE,GAAG,SAAS,YAAY,CAAC;AAAA,EACrE;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,cAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAc;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,IAAI,KAAK;AAAA,MACT,IAAI,KAAK;AAAA,MACT,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,gBAAgB,cAA6B;AAC3C,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,cAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa,KAAqB;AAChC,UAAM,KAAK,KAAK;AAChB,SAAK,aAAa,IAAI,IAAI,GAAG;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,QAAoC;AAC7C,WAAO,KAAK,aAAa,IAAI,MAAM;AAAA,EACrC;AAAA,EAEQ,YAAY,GAAW,GAAoB;AACjD,QAAI,KAAK,aAAa,WAAW,EAAG,QAAO;AAC3C,UAAM,OAAO,KAAK,aAAa,KAAK,aAAa,SAAS,CAAC;AAC3D,WAAO,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,SAAS,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK;AAAA,EACpF;AAAA,EAEQ,8BAAsC;AAC5C,QAAI,KAAK,aAAa,WAAW,EAAG,QAAO;AAC3C,WAAO,KAAK,aAAa,KAAK,aAAa,SAAS,CAAC;AAAA,EACvD;AAAA,EAEQ,aAAa,OAAmB;AACtC,UAAM,aAAa,KAAK,4BAA4B;AACpD,QAAI,cAAc,EAAG,QAAO;AAC5B,WAAO;AAAA,MACL,GAAG,MAAM;AAAA,MACT,GAAG,MAAM;AAAA,MACT,GAAG,MAAM;AAAA,MACT,GAAG,MAAM,IAAI;AAAA,MACb,QAAQ,IAAI,aAAa,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;AAAA,MAC1E,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,MACd,KAAK,MAAM;AAAA,MACX,UAAU,MAAM;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,IAAiB;AACrB,UAAM,OAAO,KAAK,SAAS,KAAK;AAChC,SAAK,KAAK,KAAK,EAAI;AACnB,SAAK,WAAW,KAAK,CAAC;AACtB,SAAK,aAAa,MAAM;AACxB,SAAK,aAAa;AAElB,QAAI,IAAI;AACN,eAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,cAAM,SAAS,IAAI;AACnB,aAAK,GAAG,MAAM,IAAI,GAAG;AACrB,aAAK,GAAG,SAAS,CAAC,IAAI,GAAG;AACzB,aAAK,GAAG,SAAS,CAAC,IAAI,GAAG;AACzB,aAAK,GAAG,SAAS,CAAC,IAAI,GAAG;AAEzB,aAAK,GAAG,MAAM,IAAI;AAClB,aAAK,GAAG,SAAS,CAAC,IAAI;AACtB,aAAK,GAAG,SAAS,CAAC,IAAI;AACtB,aAAK,GAAG,SAAS,CAAC,IAAI;AAAA,MACxB;AAAA,IACF,OAAO;AACL,WAAK,GAAG,KAAK,CAAC;AACd,WAAK,GAAG,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,QAAQ,GAAW,GAAW,MAAc,SAAe,SAAe,OAAe,GAAS;AAChG,QAAI,IAAI,KAAK,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,KAAK,QAAS;AAC7D,QAAI,CAAC,KAAK,YAAY,GAAG,CAAC,EAAG;AAE7B,UAAM,MAAM,IAAI,KAAK,SAAS;AAC9B,UAAM,SAAS,MAAM;AAErB,UAAM,cAAc,KAAK,aAAa,OAAO;AAC7C,UAAM,cAAc,KAAK,aAAa,OAAO;AAE7C,SAAK,KAAK,GAAG,IAAI,KAAK,YAAY,CAAC,KAAK;AACxC,SAAK,WAAW,GAAG,IAAI;AAEvB,SAAK,GAAG,MAAM,IAAI,YAAY;AAC9B,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAElC,SAAK,GAAG,MAAM,IAAI,YAAY;AAC9B,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAAA,EACpC;AAAA,EAEA,yBACE,GACA,GACA,MACA,SACA,SACA,OAAe,GACT;AAEN,SAAK,QAAQ,GAAG,GAAG,MAAM,SAAS,SAAS,IAAI;AAAA,EACjD;AAAA,EAEA,SAAS,UAAkB,GAAW,GAAW,SAAe,SAAe,OAAe,GAAS;AACrG,QAAI,IAAI,KAAK,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,KAAK,QAAS;AAC7D,QAAI,CAAC,KAAK,YAAY,GAAG,CAAC,EAAG;AAE7B,UAAM,MAAM,IAAI,KAAK,SAAS;AAC9B,UAAM,SAAS,MAAM;AAErB,UAAM,cAAc,KAAK,aAAa,OAAO;AAC7C,UAAM,cAAc,KAAK,aAAa,OAAO;AAE7C,SAAK,KAAK,GAAG,IAAI;AACjB,SAAK,WAAW,GAAG,IAAI;AAEvB,SAAK,GAAG,MAAM,IAAI,YAAY;AAC9B,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAElC,SAAK,GAAG,MAAM,IAAI,YAAY;AAC9B,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAAA,EACpC;AAAA,EAEA,SACE,MACA,GACA,GACA,SACA,SACA,OAAe,GACf,YACM;AACN,UAAM,gBAAsB;AAAA,MAC1B,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MACrB,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,IACvC;AACA,UAAM,KAAK,WAAW;AAEtB,QAAI,OAAO;AACX,eAAW,MAAM,MAAM;AACrB,UAAI,QAAQ,KAAK,OAAQ;AACzB,UAAI,QAAQ,GAAG;AACb,aAAK,QAAQ,MAAM,GAAG,IAAI,SAAS,IAAI,IAAI;AAAA,MAC7C;AACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS,GAAW,GAAW,OAAe,QAAgB,SAAqB;AACjF,aAAS,MAAM,GAAG,MAAM,IAAI,UAAU,MAAM,KAAK,SAAS,OAAO;AAC/D,eAAS,MAAM,GAAG,MAAM,IAAI,SAAS,MAAM,KAAK,QAAQ,OAAO;AAC7D,YAAI,MAAM,KAAK,MAAM,EAAG;AACxB,YAAI,CAAC,KAAK,YAAY,KAAK,GAAG,EAAG;AAEjC,cAAM,MAAM,MAAM,KAAK,SAAS;AAChC,cAAM,SAAS,MAAM;AACrB,cAAM,cAAc,KAAK,aAAa,OAAO;AAE7C,aAAK,KAAK,GAAG,IAAI;AACjB,aAAK,GAAG,MAAM,IAAI,YAAY;AAC9B,aAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,aAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,aAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAQ,SAAkC;AACxC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,MACA,iBAAiB;AAAA,IACnB,IAAI;AAEJ,QAAI,SAAS,KAAK,UAAU,EAAG;AAG/B,UAAM,QAAQ;AAAA,MACZ,KAAK,WAAW,QAAS,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,KAAK;AAAA,MACvE,OAAO,WAAW,QAAS,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,OAAO;AAAA,MAC3E,QAAQ,WAAW,QAAS,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,QAAQ;AAAA,MAC7E,MAAM,WAAW,QAAS,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,MAAM;AAAA,IAC3E;AAGA,UAAM,cAAc,QAAQ,qBAAqB,KAAK,sBAAsB,QAAQ,WAAW;AAG/F,QAAI,YAAY;AACd,YAAM,aAAa,KAAK,MAAM,OAAO,IAAI;AACzC,YAAM,aAAa,KAAK,MAAM,MAAM,IAAI;AACxC,YAAM,YAAY,SAAS,MAAM,OAAO,IAAI,MAAM,MAAM,QAAQ,IAAI;AACpE,YAAM,aAAa,UAAU,MAAM,MAAM,IAAI,MAAM,MAAM,SAAS,IAAI;AACtE,UAAI,YAAY,KAAK,aAAa,GAAG;AACnC,aAAK,SAAS,YAAY,YAAY,WAAW,YAAY,eAAe;AAAA,MAC9E;AAAA,IACF;AAEA,QAAI,CAAC,OAAQ;AAEb,UAAM,cAAoB,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE;AAI3F,UAAM,UAAU,YAAY,CAAC;AAC7B,UAAM,WAAW,YAAY,CAAC;AAC9B,UAAM,aAAa,YAAY,CAAC;AAChC,UAAM,cAAc,YAAY,CAAC;AACjC,UAAM,aAAa,YAAY,CAAC;AAChC,UAAM,WAAW,YAAY,CAAC;AAG9B,QAAI,MAAM,KAAK;AACb,UAAI,MAAM,KAAM,MAAK,SAAS,SAAS,GAAG,GAAG,aAAa,WAAW;AACrE,eAAS,MAAM,GAAG,MAAM,QAAQ,GAAG,OAAO;AACxC,aAAK,SAAS,YAAY,IAAI,KAAK,GAAG,aAAa,WAAW;AAAA,MAChE;AACA,UAAI,MAAM,SAAS,QAAQ,EAAG,MAAK,SAAS,UAAU,IAAI,QAAQ,GAAG,GAAG,aAAa,WAAW;AAAA,IAClG;AAGA,QAAI,MAAM,UAAU,SAAS,GAAG;AAC9B,UAAI,MAAM,KAAM,MAAK,SAAS,YAAY,GAAG,IAAI,SAAS,GAAG,aAAa,WAAW;AACrF,eAAS,MAAM,GAAG,MAAM,QAAQ,GAAG,OAAO;AACxC,aAAK,SAAS,YAAY,IAAI,KAAK,IAAI,SAAS,GAAG,aAAa,WAAW;AAAA,MAC7E;AACA,UAAI,MAAM,SAAS,QAAQ;AACzB,aAAK,SAAS,aAAa,IAAI,QAAQ,GAAG,IAAI,SAAS,GAAG,aAAa,WAAW;AAAA,IACtF;AAGA,QAAI,MAAM,MAAM;AACd,eAAS,MAAM,GAAG,MAAM,SAAS,GAAG,OAAO;AACzC,aAAK,SAAS,UAAU,GAAG,IAAI,KAAK,aAAa,WAAW;AAAA,MAC9D;AAAA,IACF;AAGA,QAAI,MAAM,SAAS,QAAQ,GAAG;AAC5B,eAAS,MAAM,GAAG,MAAM,SAAS,GAAG,OAAO;AACzC,aAAK,SAAS,UAAU,IAAI,QAAQ,GAAG,IAAI,KAAK,aAAa,WAAW;AAAA,MAC1E;AAAA,IACF;AAGA,QAAI,SAAS,MAAM,OAAO,QAAQ,GAAG;AACnC,YAAM,cAAc,QAAQ;AAC5B,YAAM,iBAAiB,MAAM,SAAS,cAAc,MAAM,MAAM,GAAG,WAAW,IAAI;AAClF,UAAI;AACJ,UAAI,mBAAmB,UAAU;AAC/B,iBAAS,IAAI,KAAK,OAAO,QAAQ,eAAe,UAAU,CAAC;AAAA,MAC7D,WAAW,mBAAmB,SAAS;AACrC,iBAAS,IAAI,QAAQ,eAAe,SAAS;AAAA,MAC/C,OAAO;AACL,iBAAS,IAAI;AAAA,MACf;AACA,WAAK,SAAS,gBAAgB,QAAQ,GAAG,aAAa,WAAW;AAAA,IACnE;AAAA,EACF;AAAA,EAEQ,sBAAsB,aAAmC;AAE/D,UAAM,SAAmC;AAAA,MACvC,SAAS,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAM;AAAA,MAChG,QAAQ,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAM;AAAA,MAC/F,QAAQ,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAM;AAAA,MAC/F,OAAO,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAM;AAAA,IAChG;AACA,UAAM,QAAQ,OAAO,eAAe,SAAS,KAAK,OAAO;AACzD,WAAO,IAAI,YAAY,KAAK;AAAA,EAC9B;AAAA,EAEA,gBAAgB,GAAW,GAAW,OAAe,QAAsB;AACzE,QAAI,KAAK,aAAa,SAAS,GAAG;AAEhC,YAAM,UAAU,KAAK,aAAa,KAAK,aAAa,SAAS,CAAC;AAC9D,YAAM,KAAK,KAAK,IAAI,GAAG,QAAQ,CAAC;AAChC,YAAM,KAAK,KAAK,IAAI,GAAG,QAAQ,CAAC;AAChC,YAAM,KAAK,KAAK,IAAI,IAAI,OAAO,QAAQ,IAAI,QAAQ,KAAK,IAAI;AAC5D,YAAM,KAAK,KAAK,IAAI,IAAI,QAAQ,QAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9D,WAAK,aAAa,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,OAAO,KAAK,IAAI,GAAG,EAAE,GAAG,QAAQ,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC;AAAA,IAC1F,OAAO;AACL,WAAK,aAAa,KAAK,EAAE,GAAG,GAAG,OAAO,OAAO,CAAC;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,iBAAuB;AACrB,SAAK,aAAa,IAAI;AAAA,EACxB;AAAA,EAEA,oBAA0B;AACxB,SAAK,eAAe,CAAC;AAAA,EACvB;AAAA,EAEA,YAAY,SAAuB;AACjC,UAAM,UAAU,KAAK,4BAA4B;AACjD,SAAK,aAAa,KAAK,UAAU,OAAO;AAAA,EAC1C;AAAA,EAEA,aAAmB;AACjB,SAAK,aAAa,IAAI;AAAA,EACxB;AAAA,EAEA,oBAA4B;AAC1B,WAAO,KAAK,4BAA4B;AAAA,EAC1C;AAAA,EAEA,eAAqB;AACnB,SAAK,eAAe,CAAC;AAAA,EACvB;AAAA,EAEA,OAAO,OAAe,QAAsB;AAC1C,SAAK,SAAS;AACd,SAAK,UAAU;AACf,UAAM,OAAO,QAAQ;AACrB,SAAK,OAAO,IAAI,YAAY,IAAI;AAChC,SAAK,KAAK,IAAI,aAAa,OAAO,CAAC;AACnC,SAAK,KAAK,IAAI,aAAa,OAAO,CAAC;AACnC,SAAK,aAAa,IAAI,YAAY,IAAI;AACtC,SAAK,KAAK,KAAK,EAAI;AAAA,EACrB;AAAA;AAAA,EAGA,eAA+B;AAC7B,UAAM,QAAwB,CAAC;AAE/B,aAAS,MAAM,GAAG,MAAM,KAAK,SAAS,OAAO;AAC3C,YAAM,QAAwB,CAAC;AAC/B,UAAI,cAAmC;AAEvC,eAAS,MAAM,GAAG,MAAM,KAAK,QAAQ,OAAO;AAC1C,cAAM,MAAM,MAAM,KAAK,SAAS;AAChC,cAAM,SAAS,MAAM;AAGrB,YAAI,KAAK,WAAW,GAAG,IAAI,aAAc;AAEzC,cAAM,WAAW,KAAK,KAAK,GAAG;AAC9B,cAAM,KAAK,aAAa,IAAI,MAAM,OAAO,cAAc,QAAQ;AAC/D,cAAM,MAAM,KAAK,GAAG,MAAM;AAC1B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,MAAM,KAAK,GAAG,MAAM;AAC1B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,OAAO,KAAK,WAAW,GAAG,IAAI;AAEpC,cAAM,KAAW;AAAA,UACf,GAAG;AAAA,UAAK,GAAG;AAAA,UAAK,GAAG;AAAA,UAAK,GAAG;AAAA,UAC3B,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AAAA,QAC/C;AACA,cAAM,KAAW;AAAA,UACf,GAAG;AAAA,UAAK,GAAG;AAAA,UAAK,GAAG;AAAA,UAAK,GAAG;AAAA,UAC3B,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AAAA,QAC/C;AAEA,YACE,eACA,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,eAAe,MAC3B;AACA,sBAAY,QAAQ;AACpB,sBAAY,SAAS;AAAA,QACvB,OAAO;AACL,cAAI,YAAa,OAAM,KAAK,WAAW;AACvC,wBAAc,EAAE,MAAM,IAAI,IAAI,IAAI,YAAY,MAAM,OAAO,EAAE;AAAA,QAC/D;AAAA,MACF;AAEA,UAAI,YAAa,OAAM,KAAK,WAAW;AACvC,YAAM,KAAK,EAAE,MAAM,CAAC;AAAA,IACtB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,mBAAmB,MAAW,GAAW,GAAiB;AACxD,QAAI,CAAC,QAAQ,CAAC,KAAK,gBAAiB;AAEpC,UAAM,QAAQ,KAAK,gBAAgB;AACnC,QAAI,CAAC,MAAO;AAEZ,UAAM,YAAY,KAAK;AACvB,UAAM,YAAY,KAAK;AAEvB,aAAS,UAAU,GAAG,UAAU,MAAM,QAAQ,WAAW;AACvD,YAAM,OAAO,MAAM,OAAO;AAC1B,UAAI,CAAC,KAAM;AAEX,UAAI,OAAO;AACX,UAAI,aAAa,cAAc,UAAU,WAAW;AAClD,cAAM,YAAY,KAAK,OAAO,OAAO,CAAC,KAAa,MAAW,MAAM,EAAE,KAAK,QAAQ,CAAC;AACpF,YAAI,cAAc,UAAU;AAC1B,iBAAO,IAAI,KAAK,OAAO,YAAY,aAAa,CAAC;AAAA,QACnD,WAAW,cAAc,SAAS;AAChC,iBAAO,IAAI,YAAY;AAAA,QACzB;AAAA,MACF;AACA,iBAAW,SAAS,KAAK,QAAQ;AAC/B,cAAM,OAAO,MAAM;AACnB,cAAM,UAAU,MAAM;AACtB,cAAM,UAAU,MAAM;AACtB,YAAI,OAAO,MAAM,cAAc;AAG/B,YAAI,MAAM,QAAQ,MAAM,KAAK,KAAK;AAChC,gBAAM,SAAS,KAAK,aAAa,MAAM,KAAK,GAAG;AAC/C,iBAAO,mBAAmB,MAAM,MAAM;AAAA,QACxC;AAEA,mBAAW,MAAM,MAAM;AACrB,cAAI,QAAQ,KAAK,OAAQ;AACzB,cAAI,QAAQ,KAAK,IAAI,WAAW,KAAK,IAAI,UAAU,KAAK,SAAS;AAC/D,iBAAK,QAAQ,MAAM,IAAI,SAAS,IAAI,SAAS,SAAS,IAAI;AAAA,UAC5D;AACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eAAe,gBAAqB,GAAW,GAAiB;AAC9D,SAAK,mBAAmB,gBAAgB,GAAG,CAAC;AAAA,EAC9C;AAAA,EAEA,gBACE,OACA,OACA,aACA,UAAkB,GAClB,UAAkB,GAClB,aACA,cACM;AACN,UAAM,KAAK,eAAe,YAAY;AACtC,UAAM,KAAK,gBAAgB,YAAY;AACvC,UAAM,UAAU,YAAY;AAC5B,UAAM,QAAQ,YAAY;AAC1B,UAAM,QAAQ,YAAY;AAC1B,UAAM,UAAU,YAAY;AAC5B,UAAM,UAAU,YAAY;AAE5B,aAAS,MAAM,GAAG,MAAM,IAAI,OAAO;AACjC,YAAM,SAAS,UAAU;AACzB,YAAM,SAAS,QAAQ;AACvB,UAAI,SAAS,KAAK,UAAU,YAAY,OAAQ;AAChD,UAAI,SAAS,KAAK,UAAU,KAAK,QAAS;AAE1C,eAAS,MAAM,GAAG,MAAM,IAAI,OAAO;AACjC,cAAM,SAAS,UAAU;AACzB,cAAM,SAAS,QAAQ;AACvB,YAAI,SAAS,KAAK,UAAU,YAAY,MAAO;AAC/C,YAAI,SAAS,KAAK,UAAU,KAAK,OAAQ;AACzC,YAAI,CAAC,KAAK,YAAY,QAAQ,MAAM,EAAG;AAEvC,cAAM,SAAS,SAAS,UAAU;AAClC,cAAM,SAAS,SAAS,KAAK,SAAS;AACtC,cAAM,YAAY,SAAS;AAC3B,cAAM,YAAY,SAAS;AAE3B,aAAK,KAAK,MAAM,IAAI,QAAQ,MAAM;AAClC,aAAK,WAAW,MAAM,IAAI,QAAQ,MAAM;AAGxC,cAAM,MAAM,MAAM,YAAY,CAAC;AAC/B,cAAM,aAAa,KAAK,4BAA4B;AACpD,aAAK,GAAG,SAAS,IAAI,MAAM,SAAS;AACpC,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM,YAAY,CAAC;AAC5C,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM,YAAY,CAAC;AAC5C,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM;AAG/B,cAAM,MAAM,MAAM,YAAY,CAAC;AAC/B,aAAK,GAAG,SAAS,IAAI,MAAM,SAAS;AACpC,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM,YAAY,CAAC;AAC5C,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM,YAAY,CAAC;AAC5C,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EACA,eAAe,YAAiB,GAAW,GAAiB;AAC1D,QAAI,CAAC,WAAY;AAEjB,UAAM,WAAW,WAAW,YAAY;AACxC,UAAM,OAAO,WAAW,QAAQ;AAChC,UAAM,QAAQ,KAAK,MAAM,IAAI;AAG7B,UAAM,MAAM,WAAW,YAAY,cAAc;AAAA,MAC/C,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MACrB,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,IACvC;AACA,UAAM,MAAM,WAAW,YAAY,cAAc;AAAA,MAC/C,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MACrB,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,IACvC;AAEA,UAAM,cAAc,SAAS,SAAS,IAAI,SAAS,SAAS,KAAK,UAAU;AAE3E,QAAI,SAAS,MAAM,WAAW,sBAAsB,WAAW,mBAAmB,SAAS,GAAG;AAE5F,UAAI,OAAO,KAAK,oBAAoB,SAAS,IAAI,IAAI;AACrD,iBAAW,SAAS,WAAW,oBAAoB;AACjD,cAAM,UAAU,MAAM,MAAM;AAC5B,cAAM,UAAU,MAAM,MAAM;AAC5B,cAAM,QAAQ,MAAM,cAAc,KAAK;AACvC,mBAAW,MAAM,MAAM,MAAM;AAC3B,cAAI,QAAQ,KAAK,OAAQ;AACzB,cAAI,QAAQ,KAAK,KAAK,KAAK,IAAI,KAAK,SAAS;AAC3C,iBAAK,QAAQ,MAAM,GAAG,IAAI,SAAS,SAAS,IAAI;AAAA,UAClD;AACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AAEL,eAAS,MAAM,GAAG,MAAM,aAAa,OAAO;AAC1C,cAAM,UAAU,SAAS,UAAU;AACnC,YAAI,UAAU,KAAK,WAAW,MAAM,OAAQ;AAC5C,cAAM,SAAS,IAAI;AACnB,YAAI,SAAS,KAAK,UAAU,KAAK,QAAS;AAE1C,cAAM,OAAO,MAAM,OAAO;AAC1B,iBAAS,MAAM,GAAG,MAAM,KAAK,QAAQ,OAAO;AAC1C,gBAAM,SAAS,SAAS,UAAU;AAClC,cAAI,SAAS,KAAK,UAAU,KAAK,OAAQ;AACzC,gBAAM,SAAS,IAAI;AACnB,cAAI,SAAS,KAAK,UAAU,KAAK,OAAQ;AAEzC,eAAK,QAAQ,QAAQ,QAAQ,KAAK,MAAM,GAAG,KAAK,KAAK,CAAC;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AAGA,UAAM,SAAS,WAAW,gBAAgB;AAC1C,QAAI,QAAQ;AACV,YAAM,UAAU,IAAI,OAAO;AAC3B,YAAM,UAAU,IAAI,OAAO;AAC3B,UAAI,WAAW,KAAK,UAAU,KAAK,UAAU,WAAW,KAAK,UAAU,KAAK,SAAS;AACnF,cAAM,WAAW,KAAK,eAAe;AACrC,YAAI,KAAK,oBAAoB,QAAQ;AAEnC,eAAK,qBAAqB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,QACrD,OAAO;AAEL,gBAAM,MAAM,UAAU,KAAK,SAAS;AACpC,gBAAM,WAAW,KAAK,KAAK,GAAG;AAC9B,gBAAM,KAAK,aAAa,KAAK,aAAa,KAAO,MAAM,OAAO,cAAc,QAAQ;AACpF,gBAAM,SAAS,MAAM;AACrB,gBAAM,SAAS;AAAA,YACb,GAAG,KAAK,GAAG,MAAM;AAAA,YACjB,GAAG,KAAK,GAAG,SAAS,CAAC;AAAA,YACrB,GAAG,KAAK,GAAG,SAAS,CAAC;AAAA,YACrB,GAAG,KAAK,GAAG,SAAS,CAAC,KAAK;AAAA,UAC5B;AACA,eAAK,QAAQ,SAAS,SAAS,IAAI,UAAU,QAAQ,EAAE;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,wBAA8B;AAAA,EAAC;AAAA,EAC/B,mBAAyB;AAAA,EAAC;AAAA,EAC1B,sBAA4B;AAAA,EAAC;AAAA,EAC7B,kCAAwC;AAAA,EAAC;AAAA,EACzC,WAAiB;AAAA,EAAC;AAAA,EAClB,cAAc,OAAqB;AACjC,WAAO;AAAA,EACT;AAAA,EACA,cAAoB;AAAA,EAAC;AAAA,EACrB,mBAA+B;AAC7B,WAAO,IAAI,WAAW,CAAC;AAAA,EACzB;AAAA,EACA,UAAgB;AAAA,EAAC;AACnB;;;ACvsBA,oBAA6B;AAItB,IAAM,oBAAN,cAAgC,2BAAa;AAAA,EAClD,cAAc;AACZ,UAAM;AAAA,EACR;AAAA,EAEA,aAAa,OAAwB;AACnC,WAAO;AAAA,EACT;AAAA,EAEA,iBAAiB,SAAwB;AAAA,EAAC;AAAA,EAE1C,aAAa,OAAqB;AAAA,EAAC;AACrC;AAEO,IAAM,4BAAN,cAAwC,kBAAkB;AAAA,EACvD,qBAAiD,oBAAI,IAAI;AAAA,EAEjE,iBAAiB,WAAmB,OAAoB;AAAA,EAAC;AAAA,EAEzD,WAAW,OAAe,SAAyB;AACjD,QAAI,CAAC,KAAK,mBAAmB,IAAI,KAAK,GAAG;AACvC,WAAK,mBAAmB,IAAI,OAAO,oBAAI,IAAI,CAAC;AAAA,IAC9C;AACA,SAAK,mBAAmB,IAAI,KAAK,EAAG,IAAI,OAAO;AAAA,EACjD;AAAA,EAEA,YAAY,OAAe,SAAyB;AAClD,UAAM,WAAW,KAAK,mBAAmB,IAAI,KAAK;AAClD,QAAI,UAAU;AACZ,eAAS,OAAO,OAAO;AAAA,IACzB;AAAA,EACF;AAAA,EAES,KAAK,UAAkB,MAAsB;AAEpD,UAAM,YAAY,MAAM,KAAK,OAAO,GAAG,IAAI;AAG3C,UAAM,gBAAgB,KAAK,mBAAmB,IAAI,KAAK;AACvD,QAAI,iBAAiB,cAAc,OAAO,GAAG;AAC3C,iBAAW,WAAW,CAAC,GAAG,aAAa,GAAG;AACxC,YAAI;AACF,kBAAQ,GAAG,IAAI;AAAA,QACjB,SAAS,GAAG;AACV,kBAAQ,MAAM,wCAAwC,KAAK,aAAa,CAAC;AAAA,QAC3E;AAEA,YAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,mBAAoB;AAAA,MAC7C;AACA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,uBAAN,cAAmC,2BAAsC;AAAA,EACtE;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAwC;AAAA,EACxC,mBAA6B,oBAAI,IAAI;AAAA,EACrC,qBAAiC;AAAA,EAClC,cAA2B;AAAA,EAC3B,kBAA+B;AAAA,EAC/B,iBAA0B;AAAA;AAAA;AAAA,EAI1B;AAAA,EACA;AAAA,EAEP,YAAY,OAAe,QAAgB,cAA2B,WAAW;AAC/E,UAAM;AACN,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,eAAe;AACpB,SAAK,WAAW,IAAI,kBAAkB;AACtC,SAAK,oBAAoB,IAAI,0BAA0B;AAAA,EACzD;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,cAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,eAAoB;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,eAAwB;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,2BAAuC;AACzC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,mBAAmB,UAA4B;AAC7C,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,OAAO,OAAe,QAAsB;AAC1C,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,KAAK,UAAU,OAAO,MAAM;AAAA,EACnC;AAAA;AAAA,EAGA,aAAa,IAAY,IAAY,QAAgB,SAAiB,KAAmB;AAAA,EAAC;AAAA,EAE1F,uBAAuB,IAAY,IAAY,QAAgB,SAAuB;AAAA,EAAC;AAAA,EAEvF,wBAA8B;AAAA,EAAC;AAAA,EAE/B,2BAAiC;AAAA,EAAC;AAAA,EAElC,gBAAsB;AACpB,QAAI,KAAK,iBAAkB;AAC3B,SAAK,mBAAmB;AACxB,SAAK,mBAAmB;AACxB,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,kBAAkB,IAAY,IAAY,UAAyB;AAAA,EAAC;AAAA,EAEpE,eAAe,SAAmC;AAChD,QAAI,QAAQ,OAAO;AACjB,WAAK,cAAc,QAAQ;AAAA,IAC7B;AACA,QAAI,QAAQ,OAAO;AACjB,WAAK,kBAAkB,QAAQ;AAAA,IACjC;AACA,QAAI,QAAQ,aAAa,QAAW;AAClC,WAAK,iBAAiB,QAAQ;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,eAAe,OAAmB;AAChC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,gBAAgB,QAAiC;AAAA,EAAC;AAAA,EAElD,cAAoB;AAAA,EAAC;AAAA,EAErB,WAAiB;AAAA,EAAC;AAAA,EAElB,eAA2B;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,yBAA+B;AAAA,EAAC;AAAA,EAEhC,gBAAgB,YAAuB;AACrC,QAAI,KAAK,sBAAsB,KAAK,uBAAuB,YAAY;AACrE,WAAK,mBAAmB,OAAO;AAAA,IACjC;AACA,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,sBAAsB,YAAuB;AAC3C,SAAK,iBAAiB,IAAI,UAAU;AAAA,EACtC;AAAA,EAEA,wBAAwB,YAAuB;AAC7C,SAAK,iBAAiB,OAAO,UAAU;AAAA,EACzC;AAAA,EAEA,qBAA+B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,iBAAuB;AAAA,EAAC;AAAA,EAExB,eAAe,aAAkB,IAAY,IAAkB;AAAA,EAAC;AAAA,EAEhE,gBACE,oBACA,IACA,IACA,UACM;AAAA,EAAC;AACX;;;ACvLA,IAAM,iBAAiB;AAAA,EACrB,MAAM,KAAK;AAAA,EACX,KAAK,KAAK;AAAA,EACV,QAAQ,KAAK;AAAA,EACb,WAAW,KAAK;AAAA,EAChB,kBAAkB,KAAK;AAAA,EACvB,SAAS,KAAK;AAAA,EACd,kBAAkB,KAAK;AACzB;AAEA,IAAME,gBAAe;AACrB,IAAM,oBAAoB;AAC1B,IAAM,2BAA2B;AAajC,IAAM,kBAA8C;AAAA;AAAA,EAElD,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAChD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC/C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,EAGvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAChD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC/C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,EAGvE,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAChD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAChD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC/C,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC/C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,EAGvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,EAG9C,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA;AAAA,EAClD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC/C,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAClD,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAClD,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAClD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EACjD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAChD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAChD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAChD,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC/C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC/C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC/C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC9D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC9D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC9D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EACxE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EACxE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA;AAAA,EAGxE,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA;AAAA,EAC5D,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA;AAAA,EACzD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA;AAAA;AAAA,EAG1D,MAAQ,EAAE,MAAM,QAAQ;AAAA;AAAA,EACxB,MAAQ,EAAE,MAAM,QAAQ;AAAA;AAAA,EACxB,MAAQ,EAAE,MAAM,QAAQ;AAAA;AAAA;AAAA,EAGxB,MAAQ,EAAE,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACpC,MAAQ,EAAE,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAClC,MAAQ,EAAE,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACrC,MAAQ,EAAE,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACpC,MAAQ,EAAE,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACpC,MAAQ,EAAE,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAClC,MAAQ,EAAE,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACrC,MAAQ,EAAE,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACpC,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAChD;AAOO,IAAM,gBAAN,MAAoB;AAAA,EACjB,YAAoB;AAAA,EACpB,aAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA,iBAAyB;AAAA,EAEjC,YAAY,UAAgC,CAAC,GAAG;AAC9C,SAAK,aAAa,QAAQ,cAAc;AACxC,SAAK,WAAW,QAAQ,YAAY;AAAA,EACtC;AAAA,EAEA,YAAY,KAAkE;AAC5E,QAAI,OAAO,GAAG,KAAK,QAAQ,MAAM,KAAK,UAAU;AAChD,UAAM,UAAU,IAAI,YAAY,GAAG;AACnC,SAAK,YAAY,QAAQ;AACzB,SAAK,aAAa,KAAK,KAAK,KAAK,WAAW,GAAG;AAC/C,SAAK,iBAAiB,KAAK,KAAK,KAAK,WAAW,GAAG;AACnD,WAAO,EAAE,OAAO,KAAK,WAAW,QAAQ,KAAK,WAAW;AAAA,EAC1D;AAAA,EAEA,cAAiD;AAC/C,WAAO,EAAE,OAAO,KAAK,WAAW,QAAQ,KAAK,WAAW;AAAA,EAC1D;AAAA,EAEA,MAAM,KAA+B,QAAuB,WAA8B,QAAqC;AAC7H,UAAM,EAAE,MAAM,IAAI,IAAI,WAAW,IAAI;AACrC,UAAM,OAAO,OAAO;AACpB,UAAM,OAAO,OAAO;AACpB,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAGhB,aAAS,MAAM,GAAG,MAAM,MAAM,OAAO;AACnC,UAAI,cAAc;AAClB,UAAI,OAAO,IACT,OAAO,IACP,OAAO,IACP,OAAO;AAET,eAAS,MAAM,GAAG,OAAO,MAAM,OAAO;AACpC,YAAI,IAAI,GACN,IAAI,GACJ,IAAI,GACJ,IAAI;AACN,YAAI,MAAM,MAAM;AACd,gBAAM,MAAM,MAAM,OAAO;AACzB,gBAAM,SAAS,MAAM;AACrB,gBAAM,OAAO,WAAW,GAAG,IAAI;AAC/B,gBAAM,YAAY,CAAC,EAAE,OAAO,eAAe;AAC3C,cAAI,WAAW;AAEb,gBAAI,GAAG,MAAM;AACb,gBAAI,GAAG,SAAS,CAAC;AACjB,gBAAI,GAAG,SAAS,CAAC;AACjB,gBAAI,GAAG,SAAS,CAAC;AAAA,UACnB,OAAO;AACL,gBAAI,GAAG,MAAM;AACb,gBAAI,GAAG,SAAS,CAAC;AACjB,gBAAI,GAAG,SAAS,CAAC;AACjB,gBAAI,GAAG,SAAS,CAAC;AAAA,UACnB;AAAA,QACF;AAEA,YAAI,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,MAAM;AACtE;AAAA,QACF;AAGA,YAAI,OAAO,KAAK,MAAM,aAAa;AACjC,cAAI,YAAY,UAAU,MAAM,MAAM,MAAM,IAAI;AAChD,cAAI,SAAS,cAAc,IAAI,MAAM,KAAK,MAAM,eAAe,IAAI,EAAE;AAAA,QACvE;AAEA,sBAAc;AACd,eAAO;AACP,eAAO;AACP,eAAO;AACP,eAAO;AAAA,MACT;AAAA,IACF;AAGA,aAAS,MAAM,GAAG,MAAM,MAAM,OAAO;AACnC,eAAS,MAAM,GAAG,MAAM,MAAM,OAAO;AACnC,cAAM,MAAM,MAAM,OAAO;AAGzB,YAAI,WAAW,GAAG,IAAIA,cAAc;AAEpC,cAAM,WAAW,KAAK,GAAG;AACzB,YAAI,aAAa,KAAK,aAAa,GAAM;AAEzC,cAAM,SAAS,MAAM;AACrB,cAAM,OAAO,WAAW,GAAG,IAAI;AAC/B,cAAM,YAAY,CAAC,EAAE,OAAO,eAAe;AAE3C,YAAI,KAAa,KAAa,KAAa;AAC3C,YAAI,WAAW;AAEb,gBAAM,GAAG,MAAM;AACf,gBAAM,GAAG,SAAS,CAAC;AACnB,gBAAM,GAAG,SAAS,CAAC;AACnB,gBAAM,GAAG,SAAS,CAAC;AAEnB,cAAI,QAAQ,GAAG;AACb,kBAAM;AAAG,kBAAM;AAAG,kBAAM;AAAG,kBAAM;AAAA,UACnC;AAAA,QACF,OAAO;AACL,gBAAM,GAAG,MAAM;AACf,gBAAM,GAAG,SAAS,CAAC;AACnB,gBAAM,GAAG,SAAS,CAAC;AACnB,gBAAM,GAAG,SAAS,CAAC;AAAA,QACrB;AAEA,YAAI,QAAQ,EAAG;AAEf,cAAM,SAAS,CAAC,EAAE,OAAO,eAAe;AACxC,cAAM,WAAW,CAAC,EAAE,OAAO,eAAe;AAC1C,cAAM,QAAQ,CAAC,EAAE,OAAO,eAAe;AACvC,cAAM,cAAc,CAAC,EAAE,OAAO,eAAe;AAE7C,cAAM,aAAa,QAAQ,MAAM,MAAM;AAGvC,YAAI,YAAY,QAAU,YAAY,MAAQ;AAC5C,gBAAM,MAAM,gBAAgB,QAAQ;AACpC,cAAI,KAAK;AACP,kBAAM,QAAQ,MAAM;AACpB,kBAAM,QAAQ,MAAM;AACpB,kBAAM,KAAK,QAAQ,KAAK;AACxB,kBAAM,KAAK,QAAQ,KAAK;AACxB,gBAAI,cAAc,UAAU,KAAK,KAAK,KAAK,UAAU;AACrD,gBAAI,UAAU;AAEd,gBAAI,IAAI,SAAS,UAAU;AAEzB,oBAAM,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,CAAC;AAC1C,kBAAI,YAAY;AAChB,kBAAI,UAAU;AACd,kBAAI,IAAI,MAAM;AACZ,oBAAI,OAAO,OAAO,KAAK,MAAM,CAAC;AAAG,oBAAI,OAAO,IAAI,KAAK,MAAM,CAAC;AAC5D,oBAAI,OAAO,OAAO,KAAK,MAAM,CAAC;AAAG,oBAAI,OAAO,IAAI,KAAK,MAAM,CAAC;AAAA,cAC9D;AACA,kBAAI,IAAI,OAAO;AACb,oBAAI,OAAO,IAAI,KAAK,MAAM,CAAC;AAAG,oBAAI,OAAO,QAAQ,IAAI,KAAK,MAAM,CAAC;AACjE,oBAAI,OAAO,IAAI,KAAK,MAAM,CAAC;AAAG,oBAAI,OAAO,QAAQ,IAAI,KAAK,MAAM,CAAC;AAAA,cACnE;AACA,kBAAI,IAAI,IAAI;AACV,oBAAI,OAAO,KAAK,MAAM,GAAG,KAAK;AAAG,oBAAI,OAAO,KAAK,MAAM,GAAG,EAAE;AAC5D,oBAAI,OAAO,KAAK,MAAM,GAAG,KAAK;AAAG,oBAAI,OAAO,KAAK,MAAM,GAAG,EAAE;AAAA,cAC9D;AACA,kBAAI,IAAI,MAAM;AACZ,oBAAI,OAAO,KAAK,MAAM,GAAG,EAAE;AAAG,oBAAI,OAAO,KAAK,MAAM,GAAG,QAAQ,EAAE;AACjE,oBAAI,OAAO,KAAK,MAAM,GAAG,EAAE;AAAG,oBAAI,OAAO,KAAK,MAAM,GAAG,QAAQ,EAAE;AAAA,cACnE;AACA,kBAAI,OAAO;AAAA,YACb,WAAW,IAAI,KAAK;AAElB,oBAAM,KAAK,KAAK;AAChB,oBAAM,KAAK,KAAK;AAChB,kBAAI,YAAY;AAChB,kBAAI,UAAU;AACd,kBAAI,IAAI,QAAQ,MAAM;AAEpB,oBAAI,QAAQ,QAAQ,IAAI,QAAQ,IAAI,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,GAAG;AAAA,cACvE,WAAW,IAAI,QAAQ,MAAM;AAE3B,oBAAI,QAAQ,OAAO,QAAQ,IAAI,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,cACtE,WAAW,IAAI,QAAQ,MAAM;AAE3B,oBAAI,QAAQ,QAAQ,IAAI,OAAO,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK,KAAK,EAAE;AAAA,cAClE,WAAW,IAAI,QAAQ,MAAM;AAE3B,oBAAI,QAAQ,OAAO,OAAO,IAAI,IAAI,GAAG,GAAG,KAAK,KAAK,GAAG;AAAA,cACvD;AACA,kBAAI,OAAO;AAAA,YACb,WAAW,aAAa,QAAU,aAAa,QAAU,aAAa,MAAQ;AAE5E,kBAAI,YAAY;AAChB,kBAAI,UAAU;AACd,kBAAI,aAAa,QAAU,aAAa,MAAQ;AAE9C,oBAAI,OAAO,QAAQ,IAAI,KAAK;AAC5B,oBAAI,OAAO,OAAO,QAAQ,EAAE;AAAA,cAC9B;AACA,kBAAI,aAAa,QAAU,aAAa,MAAQ;AAE9C,oBAAI,OAAO,OAAO,KAAK;AACvB,oBAAI,OAAO,QAAQ,IAAI,QAAQ,EAAE;AAAA,cACnC;AACA,kBAAI,OAAO;AAAA,YACb,OAAO;AACL,kBAAI,YAAY,IAAI,SAAS,UAAU,IAAI;AAC3C,kBAAI,UAAU;AACd,kBAAI,IAAI,MAAO;AAAE,oBAAI,OAAO,OAAO,EAAE;AAAG,oBAAI,OAAO,IAAI,EAAE;AAAA,cAAE;AAC3D,kBAAI,IAAI,OAAO;AAAE,oBAAI,OAAO,IAAI,EAAE;AAAG,oBAAI,OAAO,QAAQ,IAAI,EAAE;AAAA,cAAE;AAChE,kBAAI,IAAI,IAAO;AAAE,oBAAI,OAAO,IAAI,KAAK;AAAG,oBAAI,OAAO,IAAI,EAAE;AAAA,cAAE;AAC3D,kBAAI,IAAI,MAAO;AAAE,oBAAI,OAAO,IAAI,EAAE;AAAG,oBAAI,OAAO,IAAI,QAAQ,EAAE;AAAA,cAAE;AAChE,kBAAI,OAAO;AAAA,YACb;AACA;AAAA,UACF;AAAA,QACF;AAGA,YAAI,YAAY,UAAU,KAAK,KAAK,KAAK,UAAU;AAGnD,YAAI,YAAY;AAChB,YAAI,SAAU,cAAa;AAC3B,YAAI,OAAQ,cAAa;AACzB,qBAAa,GAAG,KAAK,QAAQ,MAAM,KAAK,UAAU;AAClD,YAAI,OAAO;AAEX,cAAM,YAAY,OAAO,cAAc,QAAQ;AAC/C,cAAM,IAAI,MAAM;AAChB,cAAM,IAAI,MAAM,KAAK,aAAa,KAAK;AAEvC,YAAI,SAAS,WAAW,GAAG,CAAC;AAG5B,YAAI,aAAa;AACf,gBAAM,WAAW,CAAC,EAAE,OAAO,eAAe;AAC1C,gBAAM,WAAW,CAAC,EAAE,OAAO,eAAe;AAC1C,cAAI,cAAc,IAAI;AACtB,cAAI,YAAY;AAChB,gBAAM,aAAa,MAAM,KAAK,aAAa,KAAK,iBAAiB;AACjE,cAAI,UAAU;AACZ,gBAAI,UAAU;AACd,gBAAI,YAAY,CAAC,KAAK,GAAG,CAAC;AAAA,UAC5B,WAAW,UAAU;AACnB,gBAAI,YAAY,CAAC,GAAG,CAAC,CAAC;AAAA,UACxB;AACA,cAAI,UAAU;AACd,cAAI,OAAO,GAAG,UAAU;AACxB,cAAI,OAAO,IAAI,IAAI,UAAU;AAC7B,cAAI,OAAO;AACX,cAAI,YAAY,UAAU;AACxB,gBAAI,YAAY,CAAC,CAAC;AAClB,gBAAI,UAAU;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,QAAQ;AACV,YAAM,UAAU,CAAC,OAAO,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,wBAAwB,IAAI,MAAM;AACrG,UAAI,SAAS;AACX,YAAI,YAAY,UAAU,OAAO,MAAM,GAAG,OAAO,MAAM,GAAG,OAAO,MAAM,GAAG,OAAO,MAAM,KAAK,CAAC;AAC7F,YAAI,SAAS,OAAO,IAAI,IAAI,OAAO,IAAI,IAAI,mBAAmB,EAAE;AAAA,MAClE;AAAA,IACF;AAGA,QAAI,WAAW,QAAQ;AACrB,UAAI,YAAY;AAChB,eAAS,MAAM,GAAG,MAAM,MAAM,OAAO;AACnC,YAAI,WAAW;AACf,iBAAS,MAAM,GAAG,OAAO,MAAM,OAAO;AACpC,gBAAM,WAAW,MAAM,QAAQ,UAAU,WAAW,KAAK,GAAG;AAC5D,cAAI,YAAY,aAAa,IAAI;AAC/B,uBAAW;AAAA,UACb,WAAW,CAAC,YAAY,aAAa,IAAI;AACvC,gBAAI,SAAS,WAAW,IAAI,MAAM,KAAK,MAAM,YAAY,IAAI,EAAE;AAC/D,uBAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,UAAU,GAAW,GAAW,GAAW,GAAmB;AACrE,QAAM,KAAK,KAAK,MAAM,IAAI,GAAG;AAC7B,QAAM,KAAK,KAAK,MAAM,IAAI,GAAG;AAC7B,QAAM,KAAK,KAAK,MAAM,IAAI,GAAG;AAC7B,SAAO,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACpC;;;ACtcO,IAAM,mBAAN,MAAuB;AAAA,EACpB,YAAoB;AAAA,EACpB,YAAoB;AAAA,EACpB,UAAkB;AAAA,EAClB,UAAkB;AAAA,EAClB,UAAmB;AAAA,EACnB,aAAsB;AAAA,EAE9B,eAAe,KAAa,KAAmB;AAC7C,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,gBAAgB,KAAa,KAAmB;AAC9C,QAAI,CAAC,KAAK,WAAY;AACtB,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,eAAqB;AACnB,SAAK,aAAa;AAElB,QAAI,KAAK,cAAc,KAAK,WAAW,KAAK,cAAc,KAAK,SAAS;AACtE,WAAK,UAAU;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,iBAAuB;AACrB,SAAK,UAAU;AACf,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,SAAkB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,mBAA0C;AACxC,QAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,QAAI,WAAW,KAAK;AACpB,QAAI,WAAW,KAAK;AACpB,QAAI,SAAS,KAAK;AAClB,QAAI,SAAS,KAAK;AAGlB,QAAI,WAAW,UAAW,aAAa,UAAU,WAAW,QAAS;AACnE,YAAM,SAAS;AACf,YAAM,SAAS;AACf,iBAAW;AACX,iBAAW;AACX,eAAS;AACT,eAAS;AAAA,IACX;AAEA,WAAO,EAAE,UAAU,UAAU,QAAQ,OAAO;AAAA,EAC9C;AAAA,EAEA,WAAW,KAAa,KAAsB;AAC5C,UAAM,QAAQ,KAAK,iBAAiB;AACpC,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,EAAE,UAAU,UAAU,QAAQ,OAAO,IAAI;AAE/C,QAAI,MAAM,YAAY,MAAM,OAAQ,QAAO;AAC3C,QAAI,aAAa,QAAQ;AACvB,aAAO,OAAO,YAAY,MAAM;AAAA,IAClC;AACA,QAAI,QAAQ,SAAU,QAAO,OAAO;AACpC,QAAI,QAAQ,OAAQ,QAAO,MAAM;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,QAA+B;AAC7C,UAAM,QAAQ,KAAK,iBAAiB;AACpC,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,EAAE,UAAU,UAAU,QAAQ,OAAO,IAAI;AAC/C,UAAM,QAAkB,CAAC;AAEzB,aAAS,MAAM,UAAU,OAAO,QAAQ,OAAO;AAC7C,UAAI,YAAY,QAAQ,WAAW,WAAW;AAC9C,UAAI,UAAU,QAAQ,SAAS,SAAS,OAAO;AAG/C,UAAI,OAAO;AACX,eAAS,MAAM,WAAW,MAAM,WAAW,MAAM,OAAO,OAAO,OAAO;AACpE,cAAM,MAAM,MAAM,OAAO,QAAQ;AACjC,cAAM,WAAW,OAAO,KAAK,GAAG;AAChC,gBAAQ,aAAa,IAAI,MAAM,OAAO,cAAc,QAAQ;AAAA,MAC9D;AAGA,YAAM,KAAK,KAAK,QAAQ,CAAC;AAAA,IAC3B;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACF;;;AC/GA,SAAS,iBAAiB;;;ACGnB,SAAS,sBACd,QACA,eACA,MACA,WACM;AAEN,SAAO,MAAM;AAGb,QAAM,kBAAkB,cAAc,mBAAmB;AACzD,aAAW,cAAc,iBAAiB;AACxC,QAAI,WAAW,iBAAiB;AAC9B,iBAAW,gBAAgB;AAAA,IAC7B;AAAA,EACF;AAGA,OAAK,gBAAgB;AAGrB,QAAM,aAAoB,CAAC;AAC3B,OAAK,aAAa,WAAW,UAAU;AAGvC,aAAW,OAAO,YAAY;AAC5B,YAAQ,IAAI,QAAQ;AAAA,MAClB,KAAK;AACH,eAAO,gBAAgB,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,IAAI,MAAM;AAC1D;AAAA,MACF,KAAK;AACH,eAAO,eAAe;AACtB;AAAA,MACF,KAAK;AACH,eAAO,YAAY,IAAI,OAAO;AAC9B;AAAA,MACF,KAAK;AACH,eAAO,WAAW;AAClB;AAAA,MACF,KAAK;AACH,YAAI,WAAW,OAAO,QAAQ,SAAS;AACvC;AAAA,IACJ;AAAA,EACF;AAGA,SAAO,kBAAkB;AACzB,SAAO,aAAa;AACtB;;;AD/CA,IAAI,sBAA2B;AAExB,SAAS,uBAAuB,KAAgB;AACrD,wBAAsB;AACxB;AAEO,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EAEC;AAAA,EACA;AAAA,EACA,YAAoB;AAAA,EACpB,aAAqB;AAAA,EACrB,QAAuB;AAAA,EACvB,WAAmB;AAAA,EACnB,cAAuB;AAAA,EACvB,aAAsB;AAAA,EACtB,mBAAmC,CAAC;AAAA,EACpC,gBAAqD;AAAA,EACrD,kBAAiC;AAAA,EAEzC,YAAY,QAA2B,MAAc,MAAc,SAAwC;AACzG,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AAEZ,UAAM,QAAQ,OAAO,WAAW,IAAI;AACpC,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,0BAA0B;AACtD,SAAK,QAAQ;AAGb,SAAK,UAAU,IAAI,cAAc;AACjC,UAAM,WAAW,KAAK,QAAQ,YAAY,KAAK,KAAK;AACpD,SAAK,YAAY,SAAS;AAC1B,SAAK,aAAa,SAAS;AAG3B,UAAM,MAAM,OAAO,oBAAoB;AACvC,WAAO,QAAQ,KAAK,KAAK,OAAO,KAAK,YAAY,GAAG;AACpD,WAAO,SAAS,KAAK,KAAK,OAAO,KAAK,aAAa,GAAG;AACtD,WAAO,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS;AAC7C,WAAO,MAAM,SAAS,GAAG,OAAO,KAAK,UAAU;AAC/C,SAAK,MAAM,MAAM,KAAK,GAAG;AAEzB,SAAK,kBAAkB,SAAS,mBAAmB;AAGnD,WAAO,MAAM,SAAS;AAGtB,SAAK,SAAS,cAAc,OAAO,MAAM,MAAM,SAAS;AAGxD,SAAK,gBAAgB,IAAI,qBAAqB,MAAM,IAAI;AACxD,SAAK,cAAc,mBAAmB,MAAM;AAC1C,WAAK,cAAc;AAAA,IACrB,CAAC;AAGD,SAAK,YAAY,IAAI,iBAAiB;AAGtC,QAAI,CAAC,qBAAqB;AACxB,YAAM,IAAI,MAAM,2FAA2F;AAAA,IAC7G;AACA,SAAK,OAAO,IAAI,oBAAoB,KAAK,aAAa;AAGtD,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEQ,YAAY,SAAiB,SAA+C;AAClF,UAAM,OAAO,KAAK,OAAO,sBAAsB;AAC/C,UAAM,IAAI,UAAU,KAAK;AACzB,UAAM,IAAI,UAAU,KAAK;AACzB,UAAM,MAAM,KAAK,MAAM,IAAI,KAAK,SAAS;AACzC,UAAM,MAAM,KAAK,MAAM,IAAI,KAAK,UAAU;AAC1C,WAAO;AAAA,MACL,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC;AAAA,MAC7C,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC;AAAA,IAC/C;AAAA,EACF;AAAA,EAEQ,oBAA0B;AAEhC,UAAM,aAAa,CAAC,MAAiB;AACnC,QAAE,eAAe;AAAA,IACnB;AACA,SAAK,OAAO,iBAAiB,YAAY,UAAU;AACnD,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,YAAY,UAAU,CAAC;AAExF,UAAM,SAAS,CAAC,MAAiB;AAC/B,QAAE,eAAe;AACjB,YAAM,QAAQ,EAAE,cAAc;AAC9B,UAAI,CAAC,SAAS,MAAM,WAAW,EAAG;AAClC,YAAM,OAAO,MAAM,CAAC;AACpB,WAAK,aAAa;AAClB,WAAK,cAAc,KAAK,cAAc,MAAS;AAC/C,WAAK,KAAK,EAAE,KAAK,CAAC,YAAY;AAC5B,aAAK,cAAc,KAAK,aAAa;AAAA,UACnC,MAAM,KAAK;AAAA,UACX;AAAA,UACA,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,QACb,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AACA,SAAK,OAAO,iBAAiB,QAAQ,MAAM;AAC3C,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,QAAQ,MAAM,CAAC;AAGhF,UAAM,cAAc,CAAC,MAAkB;AAErC,UAAI,EAAE,WAAW,EAAG;AACpB,WAAK,OAAO,MAAM;AAClB,YAAM,EAAE,KAAK,IAAI,IAAI,KAAK,YAAY,EAAE,SAAS,EAAE,OAAO;AAC1D,WAAK,gBAAgB,EAAE,KAAK,IAAI;AAChC,WAAK,UAAU,eAAe,KAAK,GAAG;AACtC,WAAK,cAAc;AAAA,IACrB;AACA,SAAK,OAAO,iBAAiB,aAAa,WAAW;AACrD,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,aAAa,WAAW,CAAC;AAE1F,UAAM,cAAc,CAAC,MAAkB;AAErC,YAAM,EAAE,KAAK,IAAI,IAAI,KAAK,YAAY,EAAE,SAAS,EAAE,OAAO;AAC1D,YAAM,MAAM,MAAM,KAAK,OAAO,QAAQ;AACtC,UAAI,OAAO,KAAK,MAAM,KAAK,OAAO,WAAW,QAAQ;AACnD,cAAM,SAAS,UAAU,KAAK,OAAO,WAAW,GAAG,CAAC;AACpD,aAAK,OAAO,MAAM,SAAS,SAAS,IAAI,YAAY;AAAA,MACtD;AAEA,UAAI,CAAC,KAAK,UAAU,UAAW;AAC/B,WAAK,UAAU,gBAAgB,KAAK,GAAG;AACvC,WAAK,cAAc;AAAA,IACrB;AACA,SAAK,OAAO,iBAAiB,aAAa,WAAW;AACrD,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,aAAa,WAAW,CAAC;AAE1F,UAAM,YAAY,CAAC,MAAkB;AACnC,YAAM,eAAe,KAAK,UAAU;AACpC,UAAI,cAAc;AAChB,aAAK,UAAU,aAAa;AAC5B,aAAK,cAAc;AAAA,MACrB;AAGA,UAAI,EAAE,WAAW,KAAK,KAAK,eAAe;AACxC,cAAM,EAAE,KAAK,IAAI,IAAI,KAAK,YAAY,EAAE,SAAS,EAAE,OAAO;AAC1D,YAAI,QAAQ,KAAK,cAAc,OAAO,QAAQ,KAAK,cAAc,KAAK;AACpE,gBAAM,MAAM,MAAM,KAAK,OAAO,QAAQ;AACtC,cAAI,OAAO,KAAK,MAAM,KAAK,OAAO,WAAW,QAAQ;AACnD,kBAAM,OAAO,KAAK,OAAO,WAAW,GAAG;AACvC,kBAAM,SAAS,UAAU,IAAI;AAC7B,gBAAI,SAAS,GAAG;AACd,oBAAM,MAAM,KAAK,OAAO,WAAW,MAAM;AACzC,kBAAI,KAAK;AACP,uBAAO,KAAK,KAAK,QAAQ;AAAA,cAC3B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AACA,WAAO,iBAAiB,WAAW,SAAS;AAC5C,SAAK,iBAAiB,KAAK,MAAM,OAAO,oBAAoB,WAAW,SAAS,CAAC;AAGjF,UAAM,cAAc,CAAC,MAAiB;AACpC,QAAE,eAAe;AACjB,UAAI,KAAK,WAAY;AACrB,WAAK,aAAa;AAClB,WAAK,cAAc,KAAK,cAAc,MAAS;AAC/C,WAAK,cAAc;AAAA,IACrB;AACA,SAAK,OAAO,iBAAiB,aAAa,WAAW;AACrD,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,aAAa,WAAW,CAAC;AAE1F,UAAM,cAAc,CAAC,MAAiB;AAEpC,UAAI,EAAE,iBAAiB,KAAK,OAAO,SAAS,EAAE,aAAqB,EAAG;AACtE,WAAK,aAAa;AAClB,WAAK,cAAc,KAAK,cAAc,MAAS;AAC/C,WAAK,cAAc;AAAA,IACrB;AACA,SAAK,OAAO,iBAAiB,aAAa,WAAW;AACrD,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,aAAa,WAAW,CAAC;AAG1F,UAAM,UAAU,CAAC,MAAsB;AACrC,UAAI,SAAS,kBAAkB,KAAK,OAAQ;AAC5C,YAAM,OAAO,EAAE,eAAe,QAAQ,YAAY;AAClD,UAAI,MAAM;AACR,UAAE,eAAe;AACjB,aAAK,cAAc,KAAK,SAAS,IAAI;AAAA,MACvC;AAAA,IACF;AACA,aAAS,iBAAiB,SAAS,OAAO;AAC1C,SAAK,iBAAiB,KAAK,MAAM,SAAS,oBAAoB,SAAS,OAAO,CAAC;AAAA,EACjF;AAAA,EAEA,QAAc;AACZ,SAAK,WAAW,YAAY,IAAI;AAChC,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,OAAa;AACX,QAAI,KAAK,UAAU,MAAM;AACvB,2BAAqB,KAAK,KAAK;AAC/B,WAAK,QAAQ;AAAA,IACf;AACA,eAAW,WAAW,KAAK,kBAAkB;AAC3C,cAAQ;AAAA,IACV;AACA,SAAK,mBAAmB,CAAC;AAAA,EAC3B;AAAA,EAEQ,OAAO,MAAY;AACzB,SAAK,QAAQ,sBAAsB,KAAK,IAAI;AAE5C,UAAM,MAAM,YAAY,IAAI;AAC5B,UAAM,YAAY,MAAM,KAAK;AAC7B,SAAK,WAAW;AAEhB,QAAI,YAAY;AAChB,QAAI,KAAK,aAAa;AACpB,WAAK,cAAc;AACnB,kBAAY;AAGZ,WAAK,OAAO,cAAc,KAAK,cAAc;AAC7C,WAAK,OAAO,kBAAkB,KAAK,cAAc;AACjD,WAAK,OAAO,qBAAqB;AAEjC,4BAAsB,KAAK,QAAQ,KAAK,eAAe,KAAK,MAAM,SAAS;AAAA,IAC7E;AAGA,UAAM,gBAAgB,KAAK,mBAAmB;AAG9C,QAAI,CAAC,aAAa,CAAC,eAAe,SAAU;AAG5C,UAAM,MAAM,OAAO,oBAAoB;AACvC,SAAK,MAAM,aAAa,KAAK,GAAG,GAAG,KAAK,GAAG,CAAC;AAC5C,QAAI,KAAK,iBAAiB;AACxB,WAAK,MAAM,YAAY,KAAK;AAC5B,WAAK,MAAM,SAAS,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM;AAAA,IACjE,OAAO;AACL,WAAK,MAAM,UAAU,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM;AAAA,IAClE;AACA,SAAK,QAAQ,MAAM,KAAK,OAAO,KAAK,QAAQ,KAAK,WAAW,aAAa;AAAA,EAC3E;AAAA,EAEQ,qBAA2C;AACjD,UAAM,MAAM,KAAK,OAAO;AACxB,QAAI,CAAC,OAAO,CAAC,KAAK,cAAc,YAAa,QAAO;AACpD,WAAO;AAAA,MACL,GAAG,IAAI;AAAA,MACP,GAAG,IAAI;AAAA,MACP,OAAO,KAAK,cAAc;AAAA,MAC1B,UAAU,KAAK,cAAc;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,OAAO,MAAc,MAAoB;AACvC,SAAK,OAAO;AACZ,SAAK,OAAO;AAEZ,UAAM,MAAM,OAAO,oBAAoB;AACvC,SAAK,OAAO,QAAQ,KAAK,KAAK,OAAO,KAAK,YAAY,GAAG;AACzD,SAAK,OAAO,SAAS,KAAK,KAAK,OAAO,KAAK,aAAa,GAAG;AAC3D,SAAK,OAAO,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS;AAClD,SAAK,OAAO,MAAM,SAAS,GAAG,OAAO,KAAK,UAAU;AACpD,SAAK,MAAM,MAAM,KAAK,GAAG;AAEzB,SAAK,OAAO,OAAO,MAAM,IAAI;AAC7B,SAAK,cAAc,OAAO,MAAM,IAAI;AACpC,SAAK,KAAK,OAAO,MAAM,IAAI;AAC3B,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,OAAe,uBAAuB,oBAAI,IAAI;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAa;AAAA,IAAa;AAAA,IACrC;AAAA,IAAK;AAAA,IAAU;AAAA,IAAY;AAAA,IAAO;AAAA,IAAQ;AAAA,EAC5C,CAAC;AAAA,EAED,OAAe,gBAAgB,oBAAI,IAAI,CAAC,OAAO,WAAW,QAAQ,OAAO,CAAC;AAAA,EAE1E,OAAe,UAAkC;AAAA,IAC/C,SAAS;AAAA,IACT,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EAEA,cAAc,OAA4B;AAIxC,QAAI,iBAAgB,qBAAqB,IAAI,MAAM,GAAG,KACjD,MAAM,IAAI,WAAW,KAAK,CAAC,MAAM,WAAW,CAAC,MAAM,SAAU;AAChE,YAAM,eAAe;AAAA,IACvB;AAGA,QAAI,KAAK,UAAU,WAAW,MAAM,QAAQ,OAAO,MAAM,QAAQ,YAAS,MAAM,WAAW,MAAM,WAAW,MAAM,SAAS;AACzH,YAAM,OAAO,KAAK,UAAU,gBAAgB,KAAK,MAAM;AACvD,UAAI,MAAM;AACR,kBAAU,UAAU,UAAU,IAAI,EAAE,MAAM,MAAM;AAE9C,gBAAM,KAAK,SAAS,cAAc,UAAU;AAC5C,aAAG,QAAQ;AACX,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,OAAO;AAChB,mBAAS,KAAK,YAAY,EAAE;AAC5B,aAAG,OAAO;AACV,mBAAS,YAAY,MAAM;AAC3B,mBAAS,KAAK,YAAY,EAAE;AAAA,QAC9B,CAAC;AAAA,MACH;AACA,YAAM,eAAe;AACrB;AAAA,IACF;AAIA,UAAM,eAAe,iBAAgB,cAAc,IAAI,MAAM,GAAG;AAChE,QAAI,KAAK,UAAU,UAAU,CAAC,cAAc;AAC1C,WAAK,UAAU,eAAe;AAC9B,WAAK,cAAc;AAAA,IACrB;AAGA,UAAM,WAAW;AAAA,MACf,MAAM,iBAAgB,QAAQ,MAAM,GAAG,MAAM,MAAM,IAAI,WAAW,IAAI,MAAM,MAAM,MAAM,IAAI,YAAY;AAAA,MACxG,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,MACd,UAAU,MAAM;AAAA,MAChB,QAAQ;AAAA,MACR,KAAK,MAAM;AAAA,MACX,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,MACrB,IAAI,mBAAmB;AACrB,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,qBAAqB;AACvB,eAAO,KAAK;AAAA,MACd;AAAA,MACA,iBAAiB;AACf,aAAK,oBAAoB;AAAA,MAC3B;AAAA,MACA,kBAAkB;AAChB,aAAK,sBAAsB;AAAA,MAC7B;AAAA,IACF;AAEA,SAAK,cAAc,kBAAkB,KAAK,YAAY,QAAQ;AAC9D,SAAK,cAAc,SAAS,KAAK,YAAY,QAAQ;AAAA,EACvD;AACF;;;AEtYA,SAAS,eAAe,kBAAkB;AAOnC,IAAM,iBAAiB,cAA0C,IAAI;AAErE,SAAS,oBAAyC;AACvD,QAAM,MAAM,WAAW,cAAc;AACrC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,iEAAiE;AAAA,EACnF;AACA,SAAO;AACT;;;ACXA,SAAS,SAAS,YAAY,iBAAiB,sBAAsB;AAmBzD;AAfZ,IAAM,gBAAgB;AAOf,SAAS,kBAAkB,UAAwC;AACxE,MAAI,YAAiC;AAErC,SAAO;AAAA,IACL,OAAO,MAAiB;AACtB,YAAM,UACJ,oBAAC,eAAe,UAAf,EAAwB,OAAO,EAAE,eAAe,SAAS,cAAc,GACtE,8BAAC,WAAW,UAAX,EAAoB,OAAO,EAAE,YAAY,SAAS,cAAc,UAAiB,UAAU,SAAS,cAAqB,GACxH,8BAAC,iBAAe,gBAAK,GACvB,GACF;AAEF,kBAAY,QAAQ,SAAS,SAAS,IAAI;AAAA,IAC5C;AAAA,IACA,UAAU;AACR,UAAI,WAAW;AAAA,MAEf;AAAA,IACF;AAAA,EACF;AACF;;;ARzBA,SAAS,sBAAsB;;;ASJxB,SAAS,aAAa,QAAoC;AAC/D,QAAM,QAAkB,CAAC;AACzB,WAAS,MAAM,GAAG,MAAM,OAAO,QAAQ,OAAO;AAC5C,QAAI,OAAO;AACX,aAAS,MAAM,GAAG,MAAM,OAAO,OAAO,OAAO;AAC3C,YAAM,MAAM,MAAM,OAAO,QAAQ;AACjC,YAAM,WAAW,OAAO,KAAK,GAAG;AAChC,cAAQ,aAAa,IAAI,MAAM,OAAO,cAAc,QAAQ;AAAA,IAC9D;AACA,UAAM,KAAK,KAAK,QAAQ,CAAC;AAAA,EAC3B;AAEA,SAAO,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,CAAC,MAAM,IAAI;AACzD,UAAM,IAAI;AAAA,EACZ;AACA,SAAO,MAAM,KAAK,IAAI;AACxB;;;ACjBA,IAAIC,uBAA2B;AAExB,SAAS,+BAA+B,KAAgB;AAC7D,EAAAA,uBAAsB;AACxB;AAOO,IAAM,mBAAN,MAAuB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEP,YAAY,SAAkC;AAC5C,UAAM,EAAE,MAAM,KAAK,IAAI;AAEvB,SAAK,SAAS,cAAc,OAAO,MAAM,MAAM,SAAS;AACxD,SAAK,gBAAgB,IAAI,qBAAqB,MAAM,IAAI;AACxD,SAAK,cAAc,mBAAmB,MAAM;AAAA,IAE5C,CAAC;AAED,QAAI,CAACA,sBAAqB;AACxB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,SAAK,OAAO,IAAIA,qBAAoB,KAAK,aAAa;AAAA,EACxD;AAAA,EAEA,aAAmB;AACjB,0BAAsB,KAAK,QAAQ,KAAK,eAAe,KAAK,MAAM,CAAC;AAAA,EACrE;AAAA,EAEA,SAAiB;AACf,WAAO,aAAa,KAAK,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,MAAc,MAAoB;AACvC,SAAK,OAAO,OAAO,MAAM,IAAI;AAC7B,SAAK,cAAc,OAAO,MAAM,IAAI;AACpC,SAAK,KAAK,OAAO,MAAM,IAAI;AAAA,EAC7B;AACF;;;AC/CA,SAAS,WAAAC,UAAS,YAAY,cAAAC,aAAY,iBAAiBC,uBAAsB;AA2BrE,gBAAAC,YAAA;AAzBZ,IAAMC,iBAAgBF;AAGtB,IAAM,KAAK;AACX,IAAM,YAAY,GAAG,2BAA2B,GAAG;AAQ5C,SAAS,mBAAmB,UAA0C;AAC3E,MAAI,YAAiB;AAErB,SAAO;AAAA,IACL,OAAO,MAAiB;AACtB,YAAM,UACJ,gBAAAC,KAAC,eAAe,UAAf,EAAwB,OAAO,EAAE,eAAe,SAAS,cAAc,GACtE,0BAAAA;AAAA,QAACF,YAAW;AAAA,QAAX;AAAA,UACC,OAAO;AAAA,YACL,YAAY,SAAS,cAAc;AAAA,YACnC,UAAU,SAAS;AAAA,UACrB;AAAA,UAEA,0BAAAE,KAACC,gBAAA,EAAe,gBAAK;AAAA;AAAA,MACvB,GACF;AAEF,kBAAYJ,SAAQ,SAAS,SAAS,IAAI;AAAA,IAC5C;AAAA,IACA,aAAa,MAAyB;AACpC,gBAAU,MAAM;AACd,aAAK,OAAO,IAAI;AAAA,MAClB,CAAC;AACD,eAAS,WAAW;AACpB,aAAO,SAAS,OAAO;AAAA,IACzB;AAAA,IACA,UAAU;AACR,UAAI,WAAW;AACb,mBAAW,gBAAgB,MAAM,WAAW,MAAM,MAAM;AAAA,QAAC,CAAC;AAE1D,mBAAW,cAAc;AACzB,oBAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;;;AX0GQ,gBAAAK,YAAA;AA5GD,SAAS,IAAI;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,eAAe;AACjB,GAAa;AACX,QAAM,eAAe,OAAuB,IAAI;AAChD,QAAM,YAAY,OAA0B,IAAI;AAChD,QAAM,cAAc,OAA+B,IAAI;AACvD,QAAM,UAAU,OAA2B,IAAI;AAC/C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAG9C,YAAU,MAAM;AACd,gBAAY,IAAI;AAAA,EAClB,GAAG,CAAC,CAAC;AAGL,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AAEf,UAAM,SAAS,UAAU;AACzB,UAAM,YAAY,aAAa;AAC/B,QAAI,CAAC,UAAU,CAAC,UAAW;AAE3B,2BAAuB,cAAc;AAGrC,UAAM,UAAU,IAAI,cAAc,EAAE,UAAU,WAAW,CAAC;AAC1D,UAAM,UAAU,OAAO,WAAW,IAAI;AACtC,UAAM,WAAW,QAAQ,YAAY,OAAO;AAE5C,UAAM,gBAAgB,UAAU,sBAAsB;AACtD,UAAM,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,cAAc,QAAQ,SAAS,KAAK,CAAC;AACzE,UAAM,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,cAAc,SAAS,SAAS,MAAM,CAAC;AAE3E,UAAM,WAAW,IAAI,gBAAgB,QAAQ,MAAM,MAAM,EAAE,gBAAgB,CAAC;AAC5E,gBAAY,UAAU;AAEtB,UAAM,OAAO,kBAAkB,QAAQ;AACvC,YAAQ,UAAU;AAElB,SAAK,OAAO,QAAQ;AACpB,aAAS,MAAM;AAEf,WAAO,WAAW;AAClB,QAAI,WAAW;AACb,aAAO,MAAM;AAAA,IACf;AAEA,cAAU,QAAQ;AAGlB,UAAM,YAAY,CAAC,MAAqB;AACtC,eAAS,cAAc,CAAC;AAAA,IAC1B;AACA,WAAO,iBAAiB,WAAW,SAAS;AAG5C,UAAM,iBAAiB,IAAI,eAAe,CAAC,YAAY;AACrD,iBAAW,SAAS,SAAS;AAC3B,cAAM,EAAE,OAAO,OAAO,IAAI,MAAM;AAChC,cAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,SAAS,KAAK,CAAC;AAC9D,cAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,SAAS,MAAM,CAAC;AAChE,iBAAS,OAAO,SAAS,OAAO;AAAA,MAClC;AAAA,IACF,CAAC;AACD,mBAAe,QAAQ,SAAS;AAEhC,WAAO,MAAM;AACX,aAAO,oBAAoB,WAAW,SAAS;AAC/C,qBAAe,WAAW;AAC1B,eAAS,KAAK;AACd,WAAK,QAAQ;AACb,kBAAY,UAAU;AACtB,cAAQ,UAAU;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,YAAY,eAAe,CAAC;AAGpD,YAAU,MAAM;AACd,QAAI,QAAQ,SAAS;AACnB,cAAQ,QAAQ,OAAO,QAAQ;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,MAAI,CAAC,UAAU;AAKb,UAAM,WAAW,OAAO,WAAW;AACnC,QAAI,OAAO;AACX,QAAI,UAAU;AACZ,qCAA+B,cAAc;AAC7C,YAAM,WAAW,IAAI,iBAAiB,EAAE,MAAM,cAAc,MAAM,aAAa,CAAC;AAChF,YAAM,OAAO,mBAAmB,QAAQ;AACxC,aAAO,KAAK,aAAa,QAAQ;AACjC,WAAK,QAAQ;AAAA,IACf;AACA,WACE,gBAAAA,KAAC,SAAI,OAAc,WACjB,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC,0BAAwB;AAAA,QACxB,eAAW;AAAA,QACX,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,MAAM;AAAA,UACN,YAAY;AAAA,QACd;AAAA,QAEC;AAAA;AAAA,IACH,GACF;AAAA,EAEJ;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,OAAO;AAAA,QACL,UAAU;AAAA,QACV,UAAU;AAAA,QACV,GAAG;AAAA,MACL;AAAA,MACA;AAAA,MAEA,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,OAAO;AAAA,YACL,SAAS;AAAA,YACT,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,UACX;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;AYrMA,SAAS,kBAAAC,uBAAsB;AA+BxB,SAAS,cACd,QACA,SACA,UAAwB,CAAC,GACZ;AACb,QAAM;AAAA,IACJ,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,EACf,IAAI;AAGJ,yBAAuBA,eAAc;AAGrC,QAAM,UAAU,IAAI,cAAc,EAAE,UAAU,WAAW,CAAC;AAC1D,QAAM,UAAU,OAAO,WAAW,IAAI;AACtC,QAAM,WAAW,QAAQ,YAAY,OAAO;AAE5C,MAAI,OAAO,QAAQ,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,cAAc,SAAS,KAAK,CAAC;AACtF,MAAI,OAAO,QAAQ,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,eAAe,SAAS,MAAM,CAAC;AAExF,QAAM,WAAW,IAAI,gBAAgB,QAAQ,MAAM,IAAI;AACvD,QAAM,OAAO,kBAAkB,QAAQ;AAEvC,OAAK,OAAO,OAAO;AACnB,WAAS,MAAM;AAGf,SAAO,WAAW;AAGlB,MAAI,iBAAsD;AAC1D,MAAI,UAAU;AACZ,qBAAiB,CAAC,MAAqB,SAAS,cAAc,CAAC;AAC/D,WAAO,iBAAiB,WAAW,cAAc;AAAA,EACnD;AAGA,MAAI,iBAAwC;AAC5C,MAAI,YAAY;AACd,qBAAiB,IAAI,eAAe,CAAC,YAAY;AAC/C,iBAAW,SAAS,SAAS;AAC3B,cAAM,EAAE,OAAO,OAAO,IAAI,MAAM;AAChC,cAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,SAAS,KAAK,CAAC;AAC9D,cAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,SAAS,MAAM,CAAC;AAChE,YAAI,YAAY,QAAQ,YAAY,MAAM;AACxC,iBAAO;AACP,iBAAO;AACP,mBAAS,OAAO,SAAS,OAAO;AAAA,QAClC;AAAA,MACF;AAAA,IACF,CAAC;AACD,mBAAe,QAAQ,MAAM;AAAA,EAC/B;AAEA,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AACR,UAAI,gBAAgB;AAClB,eAAO,oBAAoB,WAAW,cAAc;AAAA,MACtD;AACA,sBAAgB,WAAW;AAC3B,eAAS,KAAK;AACd,WAAK,QAAQ;AAAA,IACf;AAAA,IACA,OAAO,SAAiB,SAAiB;AACvC,aAAO;AACP,aAAO;AACP,eAAS,OAAO,SAAS,OAAO;AAAA,IAClC;AAAA,EACF;AACF;;;AC5FO,IAAM,oBAAN,MAAM,mBAAkB;AAAA,EACrB,QAAgB;AAAA,EAChB,UAAuB,CAAC;AAAA,EACxB,aAA0B;AAAA,EAC1B,aAA0B;AAAA,EAC1B,qBAA6B;AAAA,EAC7B,eAAoB;AAAA,EACpB,YAAoB;AAAA,EACpB;AAAA,EAER,YAAY,aAA0B;AACpC,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,OAAO,OAAO,aAA6C;AACzD,WAAO,IAAI,mBAAkB,WAAW;AAAA,EAC1C;AAAA;AAAA,EAGA,IAAI,MAAc;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,IAAI,YAAY,EAAE,OAAO,KAAK,KAAK,EAAE;AAAA,EAC9C;AAAA,EAEA,QAAQ,MAAoB;AAC1B,SAAK,QAAQ;AACb,SAAK,UAAU;AAAA,MACb;AAAA,QACE,WAAW;AAAA,QACX;AAAA,QACA,IAAI,KAAK,cAAc;AAAA,QACvB,IAAI,KAAK,cAAc;AAAA,QACvB,YAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,MAAoB;AACzB,SAAK,SAAS;AACd,SAAK,QAAQ,KAAK;AAAA,MAChB,WAAW;AAAA,MACX;AAAA,MACA,IAAI,KAAK,cAAc;AAAA,MACvB,IAAI,KAAK,cAAc;AAAA,MACvB,YAAY,KAAK;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,cAAc,YAAmC;AAC/C,SAAK,UAAU,WAAW,OAAO,IAAI,CAAC,WAAW;AAAA,MAC/C,WAAW;AAAA,MACX,MAAM,MAAM;AAAA,MACZ,IAAI,MAAM,MAAM,KAAK,cAAc;AAAA,MACnC,IAAI,MAAM,MAAM,KAAK,cAAc;AAAA,MACnC,YAAY,MAAM,cAAc,KAAK;AAAA,MACrC,MAAM,MAAM;AAAA,IACd,EAAE;AACF,SAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;AAAA,EACtD;AAAA,EAEA,eAAuB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa,aAAqB,WAA2B;AAC3D,WAAO,KAAK,MAAM,MAAM,aAAa,SAAS;AAAA,EAChD;AAAA,EAEA,eAAuB;AACrB,QAAI,KAAK,MAAM,WAAW,EAAG,QAAO;AACpC,WAAO,KAAK,MAAM,MAAM,IAAI,EAAE;AAAA,EAChC;AAAA,EAEA,YAAyB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa,IAAuB;AAClC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,aAAa,IAAuB;AAClC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,qBAAqB,YAAiC;AACpD,SAAK,qBAAqB,cAAc;AAAA,EAC1C;AAAA,EAEA,gBAAsB;AACpB,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,IAAI,YAAyB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAyB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,oBAA4B;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,eAAe,OAAkB;AAC/B,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,iBAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY,OAAqB;AAC/B,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,cAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,wBAAwB,YAAuB;AAAA,EAAC;AAAA,EAChD,aAAa,UAAkB,YAAuB;AAAA,EAAC;AAAA,EACvD,sBAAsB,QAAsB;AAAA,EAAC;AAAA,EAC7C,oBAAoB,UAAwB;AAAA,EAAC;AAAA,EAC7C,qBAA2B;AAAA,EAAC;AAAA,EAC5B,kBAAkB,UAAyB;AACzC,WAAO,CAAC;AAAA,EACV;AAAA,EACA,oBAA4B;AAC1B,WAAO;AAAA,EACT;AAAA,EACA,SAAS,OAAqB;AAAA,EAAC;AAAA,EAE/B,QAAc;AACZ,SAAK,QAAQ;AACb,SAAK,UAAU,CAAC;AAAA,EAClB;AAAA,EAEA,QAAc;AACZ,SAAK,MAAM;AACX,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,UAAgB;AACd,SAAK,QAAQ;AACb,SAAK,UAAU,CAAC;AAAA,EAClB;AACF;;;AC9JA,IAAM,YAAkB;AAAA,EACtB,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EACrB,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACvC;AAEA,IAAM,YAAkB;AAAA,EACtB,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EACrB,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACvC;AAEO,IAAM,wBAAN,MAAM,uBAAsB;AAAA,EACzB;AAAA,EACA,aAA4B;AAAA,EAC5B,YAAsC;AAAA,EACtC,aAAqB;AAAA,EACrB,aAAqB;AAAA,EACrB,iBAAyB;AAAA,EACzB,kBAA0B;AAAA,EAC1B,YAAqB;AAAA,EACtB,YAAyC;AAAA,EACxC,aAAoD;AAAA,EACpD;AAAA,EACA;AAAA,EAER,YAAY,YAA+B;AACzC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,OAAO,OAAO,YAAsD;AAClE,WAAO,IAAI,uBAAsB,UAAU;AAAA,EAC7C;AAAA;AAAA,EAGA,IAAI,MAAc;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW;AACb,UAAM,QAAQ,KAAK,mBAAmB;AACtC,UAAM,aAAuB,CAAC;AAC9B,UAAM,aAAuB,CAAC;AAC9B,UAAM,cAAwB,CAAC;AAC/B,UAAM,YAAsB,CAAC;AAC7B,QAAI,WAAW;AACf,QAAI,SAAS;AAEb,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,iBAAW,KAAK,MAAM;AACtB,YAAM,WAAW,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;AACpD,YAAM,IAAI,SAAS;AACnB,iBAAW,KAAK,CAAC;AACjB,kBAAY,KAAK,CAAC;AAClB,gBAAU,KAAK,CAAC;AAChB,UAAI,IAAI,SAAU,YAAW;AAC7B,gBAAU,SAAS,SAAS;AAAA,IAC9B;AAEA,WAAO,EAAE,YAAY,YAAY,cAAc,UAAU,aAAa,UAAU;AAAA,EAClF;AAAA,EAEA,IAAI,kBAAkB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa,OAAe,KAAa,SAAgB,SAAsB;AAC7E,SAAK,aAAa,EAAE,OAAO,IAAI;AAC/B,SAAK,eAAe;AACpB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,gBAAgB,KAAa,SAAgB,SAAsB;AACjE,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,MAAM;AAAA,IACxB;AACA,QAAI,QAAS,MAAK,eAAe;AACjC,QAAI,QAAS,MAAK,eAAe;AAAA,EACnC;AAAA,EAEA,iBAAuB;AACrB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,eAAsD;AACpD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,eAAwB;AACtB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,kBACE,UACA,UACA,SACA,SACA,UACA,UACS;AACT,WAAO;AAAA,EACT;AAAA,EAEA,qBACE,UACA,UACA,SACA,SACA,UACA,UACS;AACT,WAAO;AAAA,EACT;AAAA,EAEA,sBAA4B;AAAA,EAAC;AAAA,EAE7B,kBAA0B;AACxB,QAAI,CAAC,KAAK,WAAY,QAAO;AAC7B,UAAM,OAAO,KAAK,WAAW,aAAa;AAC1C,UAAM,QAAQ,KAAK,IAAI,KAAK,WAAW,OAAO,KAAK,WAAW,GAAG;AACjE,UAAM,MAAM,KAAK,IAAI,KAAK,WAAW,OAAO,KAAK,WAAW,GAAG;AAC/D,WAAO,KAAK,MAAM,OAAO,GAAG;AAAA,EAC9B;AAAA,EAEA,eAAuB;AACrB,WAAO,KAAK,WAAW,aAAa;AAAA,EACtC;AAAA,EAEA,aAAa,OAA4B;AACvC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,YAAY,MAAsC;AAChD,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,gBAAgB,OAAe,QAAsB;AACnD,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AAEvB,QAAI,KAAK,cAAc,UAAU,QAAQ,KAAK,KAAK,eAAe,OAAO;AACvE,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,YAAY,GAAW,GAAW,OAAe,QAAsB;AACrE,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AAGvB,QAAI,KAAK,cAAc,UAAU,QAAQ,KAAK,KAAK,eAAe,OAAO;AACvE,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,gBAAgB,YAAmC;AAAA,EAAC;AAAA,EAEpD,qBAAqB,QAAoB;AAAA,EAAC;AAAA,EAE1C,YAAY,UAAyB;AACnC,SAAK,YAAY;AAAA,EACnB;AAAA,EAEQ,qBAA2C;AACjD,UAAM,SAAS,KAAK,WAAW,UAAU;AACzC,QAAI,OAAO,WAAW,EAAG,QAAO,CAAC;AAEjC,UAAM,MAAM,KAAK,WAAW,aAAa;AACzC,UAAM,MAAM,KAAK,WAAW,aAAa;AAGzC,UAAM,eAAqC,CAAC,CAAC,CAAC;AAE9C,eAAW,SAAS,QAAQ;AAC1B,YAAM,QAAQ,MAAM,KAAK,MAAM,IAAI;AACnC,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAI,IAAI,GAAG;AACT,uBAAa,KAAK,CAAC,CAAC;AAAA,QACtB;AACA,YAAI,MAAM,CAAC,EAAE,SAAS,GAAG;AACvB,gBAAM,MAAwB;AAAA,YAC5B,MAAM,MAAM,CAAC;AAAA,YACb,IAAI,MAAM,MAAM;AAAA,YAChB,IAAI,MAAM,MAAM;AAAA,YAChB,YAAY,MAAM,cAAc;AAAA,UAClC;AACA,cAAI,MAAM,KAAM,KAAI,OAAO,MAAM;AACjC,uBAAa,aAAa,SAAS,CAAC,EAAE,KAAK,GAAG;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAGA,QAAI,KAAK,cAAc,UAAU,CAAC,KAAK,cAAc,KAAK,cAAc,GAAG;AACzE,aAAO;AAAA,IACT;AAEA,UAAM,eAAqC,CAAC;AAC5C,UAAM,YAAY,KAAK;AAEvB,eAAW,eAAe,cAAc;AAEtC,YAAM,WAAW,YAAY,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;AAEvD,UAAI,SAAS,UAAU,WAAW;AAChC,qBAAa,KAAK,WAAW;AAC7B;AAAA,MACF;AAEA,UAAI,KAAK,cAAc,QAAQ;AAE7B,YAAI,MAAM;AACV,eAAO,MAAM,SAAS,QAAQ;AAC5B,gBAAM,MAAM,KAAK,IAAI,MAAM,WAAW,SAAS,MAAM;AACrD,gBAAM,cAAc,KAAK,YAAY,aAAa,KAAK,GAAG;AAC1D,uBAAa,KAAK,WAAW;AAC7B,gBAAM;AAAA,QACR;AAAA,MACF,OAAO;AAEL,YAAI,MAAM;AACV,eAAO,MAAM,SAAS,QAAQ;AAC5B,cAAI,MAAM,KAAK,IAAI,MAAM,WAAW,SAAS,MAAM;AACnD,cAAI,MAAM,SAAS,QAAQ;AAEzB,gBAAI,WAAW;AACf,mBAAO,WAAW,OAAO,SAAS,QAAQ,MAAM,KAAK;AACnD;AAAA,YACF;AACA,gBAAI,WAAW,KAAK;AAClB,oBAAM,WAAW;AAAA,YACnB;AAAA,UACF;AACA,gBAAM,cAAc,KAAK,YAAY,aAAa,KAAK,GAAG;AAC1D,uBAAa,KAAK,WAAW;AAC7B,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,YAAY,QAA4B,OAAe,KAAiC;AAC9F,UAAM,SAA6B,CAAC;AACpC,QAAI,SAAS;AAEb,eAAW,SAAS,QAAQ;AAC1B,YAAM,aAAa;AACnB,YAAM,WAAW,SAAS,MAAM,KAAK;AAErC,UAAI,YAAY,SAAS,cAAc,KAAK;AAC1C,iBAAS;AACT;AAAA,MACF;AAEA,YAAM,aAAa,KAAK,IAAI,GAAG,QAAQ,UAAU;AACjD,YAAM,WAAW,KAAK,IAAI,MAAM,KAAK,QAAQ,MAAM,UAAU;AAC7D,YAAM,aAAa,MAAM,KAAK,MAAM,YAAY,QAAQ;AAExD,UAAI,WAAW,SAAS,GAAG;AACzB,cAAM,SAA2B;AAAA,UAC/B,MAAM;AAAA,UACN,IAAI,MAAM;AAAA,UACV,IAAI,MAAM;AAAA,UACV,YAAY,MAAM;AAAA,QACpB;AACA,YAAI,MAAM,KAAM,QAAO,OAAO,MAAM;AACpC,eAAO,KAAK,MAAM;AAAA,MACpB;AAEA,eAAS;AAAA,IACX;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,qBAAqB,OAAe,QAAgE;AAElG,UAAM,eAAe,KAAK;AAC1B,QAAI,QAAQ,KAAK,KAAK,cAAc,QAAQ;AAC1C,WAAK,aAAa;AAAA,IACpB,WAAW,UAAU,GAAG;AAEtB,WAAK,aAAa;AAAA,IACpB;AAEA,UAAM,QAAQ,KAAK,mBAAmB;AACtC,SAAK,aAAa;AAElB,QAAI,WAAW;AACf,eAAW,QAAQ,OAAO;AACxB,YAAM,YAAY,KAAK,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AAChE,UAAI,YAAY,SAAU,YAAW;AAAA,IACvC;AAEA,WAAO;AAAA,MACL,WAAW,MAAM;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,sBAA8B;AAC5B,WAAO,KAAK,mBAAmB,EAAE;AAAA,EACnC;AAAA,EAEA,kBAAwC;AACtC,UAAM,WAAW,KAAK,mBAAmB;AACzC,QAAI,SAAS,WAAW,EAAG,QAAO;AAElC,UAAM,YAAY,KAAK;AACvB,UAAM,UACJ,KAAK,kBAAkB,IAAI,KAAK,IAAI,YAAY,KAAK,iBAAiB,SAAS,MAAM,IAAI,SAAS;AAEpG,UAAM,eAA8B,CAAC;AACrC,aAAS,IAAI,WAAW,IAAI,SAAS,KAAK;AACxC,UAAI,KAAK,KAAK,IAAI,SAAS,QAAQ;AACjC,qBAAa,KAAK,EAAE,QAAQ,SAAS,CAAC,EAAE,CAAC;AAAA,MAC3C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,UAAgB;AAAA,EAAC;AACnB;;;ACnVO,IAAM,qBAAN,MAAM,oBAAmB;AAAA,EACtB,aAAa;AAAA,EAErB,OAAO,SAA6B;AAClC,WAAO,IAAI,oBAAmB;AAAA,EAChC;AAAA,EAEA,OAAO,UAAU,QAAiC;AAChD,WAAO,IAAI,oBAAmB;AAAA,EAChC;AAAA,EAEA,OAAO,WAAW,SAAkC;AAClD,WAAO,IAAI,oBAAmB;AAAA,EAChC;AAAA,EAEA,IAAI,MAAc;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,cAAc,OAAe,QAAqB;AAChD,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,OAA8B;AAC3C,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,OAA8B;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,gBAAwB;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,iBAAuB;AAAA,EAAC;AAAA,EAExB,SAAS,OAAoB;AAC3B,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,aAA+C;AAC5D,WAAO,EAAE,YAAY,EAAE;AAAA,EACzB;AAAA,EAEA,aAAmB;AAAA,EAAC;AAAA,EACpB,eAAuB;AACrB,WAAO;AAAA,EACT;AAAA,EACA,eAAiC;AAC/B,WAAO,oBAAI,IAAI;AAAA,EACjB;AAAA,EACA,qBAA+B;AAC7B,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,UAAgB;AACd,SAAK,aAAa;AAAA,EACpB;AACF;;;ACtDO,SAAS,YAAqB;AACnC,SAAO,OAAO,WAAW,eAAe,OAAO,aAAa;AAC9D;AAGO,SAAS,oBAA6B;AAC3C,MAAI,CAAC,UAAU,EAAG,QAAO;AACzB,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,SAAO,CAAC,CAAC,OAAO,WAAW,IAAI;AACjC;AAGO,SAAS,kBACd,SACA,UACA,WACA,YACgC;AAChC,SAAO;AAAA,IACL,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,UAAU,SAAS,CAAC;AAAA,IACjD,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,WAAW,UAAU,CAAC;AAAA,EACrD;AACF;;;AC5BA,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AAU7B,SAAS,YAAY,UAAgE;AAC1F,QAAM,EAAE,cAAc,IAAI,kBAAkB;AAC5C,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAS,KAAK;AAElD,EAAAC,WAAU,MAAM;AACd,UAAM,UAAU,CAAC,SAAsB;AACrC,eAAS,IAAI;AAAA,IACf;AACA,UAAM,cAAc,MAAM,cAAc,IAAI;AAC5C,UAAM,cAAc,MAAM,cAAc,KAAK;AAE7C,kBAAc,GAAG,aAAa,OAAO;AACrC,kBAAc,GAAG,cAAc,WAAW;AAC1C,kBAAc,GAAG,cAAc,WAAW;AAC1C,WAAO,MAAM;AACX,oBAAc,IAAI,aAAa,OAAO;AACtC,oBAAc,IAAI,cAAc,WAAW;AAC3C,oBAAc,IAAI,cAAc,WAAW;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,eAAe,QAAQ,CAAC;AAE5B,SAAO,EAAE,WAAW;AACtB;;;AChCA,SAAS,aAAAC,kBAAiB;AAGnB,SAAS,SAAS,UAAwC;AAC/D,QAAM,EAAE,cAAc,IAAI,kBAAkB;AAE5C,EAAAC,WAAU,MAAM;AACd,UAAM,UAAU,CAAC,SAAiB;AAChC,eAAS,IAAI;AAAA,IACf;AACA,kBAAc,GAAG,SAAS,OAAO;AACjC,WAAO,MAAM;AACX,oBAAc,IAAI,SAAS,OAAO;AAAA,IACpC;AAAA,EACF,GAAG,CAAC,eAAe,QAAQ,CAAC;AAC9B;;;ACkCA,SAAS,4BAA4B;AACrC,OAAO,eAAe,qBAAqB,WAAW,aAAa;AAAA,EACjE,MAAe;AACb,WAAO,KAAK,gBAAgB,aAAa;AAAA,EAC3C;AAAA,EACA,IAAe,OAAoC;AACjD,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,YAAY;AAChC,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EACA,YAAY;AAAA,EACZ,cAAc;AAChB,CAAC;",
|
|
6
|
+
"names": ["ReflectApply", "ReflectOwnKeys", "NumberIsNaN", "EventEmitter", "once", "CONTINUATION", "RootRenderableClass", "_render", "AppContext", "_ErrorBoundary", "jsx", "ErrorBoundary", "jsx", "RootRenderable", "useEffect", "useState", "useState", "useEffect", "useEffect", "useEffect"]
|
|
7
7
|
}
|