{"version":3,"file":"rectangulr-rectangulr.mjs","sources":["../../src/term-strings/core/support.ts","../../src/term-strings/core/tools/getColor.ts","../../src/term-strings/core/index.ts","../../src/utils/mergeDeep.ts","../../src/utils/addToGlobalRg.ts","../../src/utils/reactivity.ts","../../src/utils/utils.ts","../../src/angular-terminal/dom-terminal/sources/core/misc/Event.ts","../../src/angular-terminal/dom-terminal/sources/core/misc/Point.ts","../../src/angular-terminal/dom-terminal/sources/core/misc/Rect.ts","../../src/angular-terminal/dom-terminal/sources/core/dom/Node.ts","../../src/angular-terminal/dom-terminal/sources/core/style/colorNames.ts","../../src/angular-terminal/dom-terminal/sources/core/style/tools/parseRawValue.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleColor.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleInherit.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleLength.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleWeight.ts","../../src/angular-terminal/dom-terminal/sources/core/style/styleParsers.ts","../../src/angular-terminal/dom-terminal/sources/core/style/styleTriggers.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleAlignment.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleBackgroundClip.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleDecoration.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleDisplay.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleFlexAlignment.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleFlexDirection.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleFlexJustify.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleOverflowWrap.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StylePosition.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleWhiteSpace.ts","../../src/angular-terminal/dom-terminal/sources/core/style/types/StyleOverflow.ts","../../src/angular-terminal/dom-terminal/sources/core/style/styleProperties.ts","../../src/angular-terminal/dom-terminal/sources/core/style/tools/parsePropertyValue.ts","../../src/angular-terminal/dom-terminal/sources/core/dom/StyleHandler.ts","../../src/angular-terminal/dom-terminal/sources/core/dom/StyleHelpers.ts","../../src/angular-terminal/dom-terminal/sources/core/dom/flags.ts","../../src/angular-terminal/dom-terminal/sources/core/dom/Element.ts","../../src/angular-terminal/dom-terminal/sources/core/dom/traverse.ts","../../src/angular-terminal/dom-terminal/sources/core/misc/EventSource.ts","../../src/utils/Assert.ts","../../src/tasks/Tasks.ts","../../src/term-strings/parse/types/Key.ts","../../src/term-strings/parse/types/Mouse.ts","../../src/term-strings/parse/parser/Node.ts","../../src/term-strings/parse/parser/Parser.ts","../../src/term-strings/parse/parser/HexNode.ts","../../src/term-strings/parse/parser/NumberNode.ts","../../src/term-strings/parse/sequences.ts","../../src/term-strings/parse/parseTerminalInputs.ts","../../src/term-strings/parse/getCursorPosition.ts","../../src/angular-terminal/logger.ts","../../src/angular-terminal/terminals/Terminal.ts","../../src/angular-terminal/dom-terminal/sources/term/elements/TermText2.ts","../../src/angular-terminal/dom-terminal/sources/term/elements/element-pool.ts","../../src/angular-terminal/dom-terminal/sources/term/elements/TermScreen.ts","../../src/angular-terminal/dom-terminal/sources/term/elements/index.ts","../../src/angular-terminal/debug.ts","../../src/angular-terminal/debug-yoga.ts","../../src/angular-terminal/error-handler.ts","../../src/angular-terminal/screen-service.ts","../../src/angular-terminal/renderer.ts","../../src/utils/queue.ts","../../src/angular-terminal/terminals/ProcessTerminal.ts","../../src/rectangulr-module-providers.ts","../../src/angular-terminal/platform.ts","../../src/utils/Signal2.ts","../../src/commands/disposable.ts","../../src/logs/LogPointTypes.ts","../../src/logs/Tags.ts","../../src/logs/LogPointService.ts","../../src/commands/shortcut.service.ts","../../src/commands/commands-detach.ts","../../src/components/1-basics/style.ts","../../src/components/1-basics/v.ts","../../src/components/2-common/list/list-item.ts","../../src/commands/focus.directive.ts","../../src/utils/base-control-value-accessor.ts","../../src/utils/Deferred.ts","../../src/components/1-basics/h.ts","../../src/components/2-common/list/basic-object-display.ts","../../src/components/2-common/list/list.ts","../../src/components/1-basics/text-input.ts","../../src/components/2-common/app-shell/notifications.service.ts","../../src/components/2-common/styles.ts","../../src/components/2-common/search-list.ts","../../src/commands/command-picker.component.ts","../../src/components/1-basics/hgrow.directive.ts","../../src/components/1-basics/vgrow.directive.ts","../../src/components/1-basics/grow.directive.ts","../../src/components/2-common/object-display.ts","../../src/components/2-common/app-shell/notifications.component.ts","../../src/components/2-common/app-shell/view.service.ts","../../src/components/2-common/app-shell/app-shell.component.ts","../../src/components/2-common/json5.pipe.ts","../../src/components/2-common/app-shell/logs.component.ts","../../src/logs/DomLog.directive.ts","../../src/components/2-common/config-loader.ts","../../src/components/2-common/KeyValueEditor.ts","../../src/components/2-common/form-editor.ts","../../src/components/2-common/external-text-editor.ts","../../src/components/2-common/json-editor/json-editor.ts","../../src/components/2-common/tree/tree-node.ts","../../src/components/2-common/tree/tree.ts","../../src/components/2-common/on-enter.directive.ts","../../src/components/2-common/scroll.directive.ts","../../src/components/2-common/value.directive.ts","../../src/components/2-common/signal.directive.ts","../../src/components/2-common/table/table.component.ts","../../src/utils/componentOutletInput.ts","../../src/rectangulr.module.ts","../../src/components/2-common/storage.service.ts","../../src/utils/event-handler.ts","../../src/angular-terminal/terminals/XtermTerminal.ts","../../src/globals.ts","../../src/angular-terminal/terminals/VoidTerminal.ts","../../src/public-api.ts","../../src/rectangulr-rectangulr.ts"],"sourcesContent":["export let doesSupport16Colors: boolean = !!process.env.TERM && /^(screen|xterm|vt100)/.test(process.env.TERM);\nexport let doesSupport256Colors: boolean = !!process.env.TERM && doesSupport16Colors && /^\\w+-256/.test(process.env.TERM);\nexport let doesSupportTrueColors: boolean = doesSupport256Colors && false;\n\nif (process.env.TERM_FEATURES) {\n  if (/\\b16-colors\\b/.test(process.env.TERM_FEATURES))\n    doesSupport16Colors = true;\n\n  if (/\\b256-colors\\b/.test(process.env.TERM_FEATURES))\n    doesSupport256Colors = true;\n\n  if (/\\btrue-colors\\b/.test(process.env.TERM_FEATURES)) {\n    doesSupportTrueColors = true;\n  }\n}\n\nif (process.env.COLORTERM) {\n  if (/\\b(truecolor|24bit)\\b/.test(process.env.COLORTERM)) {\n    doesSupportTrueColors = true;\n  }\n}\n","import { closest as closestColor } from 'color-diff'\n\nimport colors from '../data/colorNames.compiled.json'\nimport palettes from '../data/colorPalettes.compiled.json'\nimport { doesSupport16Colors, doesSupport256Colors, doesSupportTrueColors } from '../support'\n\nconst colorNames = colors.colorNames\nconst palette16 = palettes.palette16\nconst palette256 = palettes.palette256\n\nexport type ColorName = keyof typeof colorNames\n\nexport enum Target {\n  Foreground = 0,\n  Background = 10,\n  Clear,\n}\n\n// Needs to be R,G,B rather than r,g,b for\n// compat with color-diff\nexport type RGB = {\n  R: number\n  G: number\n  B: number\n}\n\nconst hexShortExp = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i\nconst hexRegExp = /^#([0-9a-f]{6})$/i\n\nexport function hexToRgb(hex: string): RGB {\n  const match = hex\n    .replace(hexShortExp, `#$1$1$2$2$3$3`)\n    .match(hexRegExp)\n\n  if (!match)\n    throw new Error(`Invalid color (${hex})`)\n\n  const color = parseInt(match[1], 16)\n\n  const r = (color & 0xFF0000) >>> 16\n  const g = (color & 0x00FF00) >>> 8\n  const b = (color & 0x0000FF) >>> 0\n\n  return { R: r, G: g, B: b }\n}\n\nfunction getClosestColor(color: RGB, target: Array<RGB>) {\n  return target.indexOf(closestColor(color, target))\n}\n\nexport function getClosestColor16(color: RGB) {\n  return getClosestColor(color, palette16)\n}\n\nexport function getClosestColor256(color: RGB) {\n  return getClosestColor(color, palette256)\n}\n\nexport function getTrueColorSequence(color: RGB, target: Target) {\n  return `\\x1b[${38 + target};2;${color.R};${color.G};${color.B}m`\n}\n\nexport function get256ColorsSequence(index: number, target: Target) {\n  return `\\x1b[${38 + target};5;${index}m`\n}\n\nexport function get16ColorsSequence(index: number, target: Target) {\n  return `\\x1b[${(index < 8 ? 30 : 90 - 8) + target + index}m`\n}\n\nfunction memo<TArg, TRet>(fn: (arg: TArg) => TRet) {\n  const cache = new Map<TArg, TRet>()\n\n  return (arg: TArg) => {\n    let entry = cache.get(arg)\n\n    if (typeof entry === `undefined`)\n      cache.set(arg, entry = fn(arg))\n\n    return entry\n  }\n}\n\nexport const hexToRgbMemo = memo(hexToRgb)\nexport const hexTo256ColorsMemo = memo((color: string) => getClosestColor256(hexToRgb(color)))\nexport const hexTo16ColorsMemo = memo((color: string) => getClosestColor256(hexToRgb(color)))\n\nexport const getHexColorSequence = doesSupportTrueColors\n  ? (color: string, target: Target) => getTrueColorSequence(hexToRgbMemo(color), target)\n  : doesSupport256Colors\n    ? (color: string, target: Target) => get256ColorsSequence(hexTo256ColorsMemo(color), target)\n    : doesSupport16Colors\n      ? (color: string, target: Target) => get16ColorsSequence(hexTo16ColorsMemo(color), target)\n      : () => ``\n\nexport const getNamedColorSequence = doesSupportTrueColors\n  ? (name: ColorName, target: Target) => getTrueColorSequence(colorNames[name].rgb, target)\n  : doesSupport256Colors\n    ? (name: ColorName, target: Target) => get256ColorsSequence(colorNames[name].c256, target)\n    : doesSupport16Colors\n      ? (name: ColorName, target: Target) => get16ColorsSequence(colorNames[name].c16, target)\n      : () => ``\n\nexport function resolveColorToRgb(color: ColorName | string) {\n  return Object.prototype.hasOwnProperty.call(colorNames, color)\n    ? colorNames[color as ColorName].rgb\n    : hexToRgbMemo(color)\n}\n\nexport function getColorSequence(color: ColorName | string, target: Target) {\n  return Object.prototype.hasOwnProperty.call(colorNames, color)\n    ? getNamedColorSequence(color as ColorName, target)\n    : getHexColorSequence(color, target)\n}\n\nexport const getColorResetSequence = doesSupportTrueColors || doesSupport256Colors || doesSupport16Colors\n  ? (target: Target) => `\\x1b[${39 + target}m`\n  : () => ``\n","import colors from './data/colorNames.compiled.json'\nimport { Target, getColorResetSequence, getColorSequence, resolveColorToRgb } from './tools/getColor'\nconst colorNames = colors.colorNames\n\nexport const feature = {\n  enableMouseTracking: { in: `\\x1b[?1000h`, out: `\\x1b[?1000l` },\n  enableMouseHoldTracking: { in: `\\x1b[?1002h`, out: `\\x1b[?1002l` },\n  enableMouseMoveTracking: { in: `\\x1b[?1003h`, out: `\\x1b[?1003l` },\n  enableExtendedCoordinates: { in: `\\x1b[?1006h`, out: `\\x1b[?1006l` },\n}\n\nexport const request = {\n  screenBackgroundColor: `\\x1b]11;?\\x07`,\n}\n\nexport const screen = {\n  reset: `\\x1bc\\x1b[?1000l\\x1b[?25h`,\n  clear: `\\x1b[H\\x1b[J`,\n  clearBelow: `\\x1b[J`,\n\n  alternateScreen: { in: `\\x1b[?1049h`, out: `\\x1b[?1049l` },\n  noWrap: { in: `\\x1b[?7l`, out: `\\x1b[?7h` },\n}\n\nfunction moveTo(target: { x: number, y: number }): string\nfunction moveTo(target: { col: number, row: number }): string\nfunction moveTo({ x, y, col = x, row = y }: { x?: number, y?: number, col?: number, row?: number }) {\n  return `\\x1b[${row! + 1};${col! + 1}H`\n}\n\nfunction moveBy(target: { x: number, y: number }): string\nfunction moveBy(target: { col: number, row: number }): string\nfunction moveBy({ x, y, col = x, row = y }: { x?: number, y?: number, col?: number, row?: number }) {\n  return `${cursor.downBy(row)}${cursor.rightBy(col)}`\n}\n\nexport const cursor = {\n  normal: `\\x1b[34h\\x1b[?25h`,\n  hidden: `\\x1b[?25l`,\n  enhanced: `\\x1b[34l`,\n\n  upBy: (n = 1): string => n === 0 ? `` : n < 0 ? cursor.downBy(-n) : `\\x1b[${n}A`,\n  downBy: (n = 1): string => n === 0 ? `` : n < 0 ? cursor.upBy(-n) : `\\x1b[${n}B`,\n  leftBy: (n = 1): string => n === 0 ? `` : n < 0 ? cursor.rightBy(-n) : `\\x1b[${n}D`,\n  rightBy: (n = 1): string => n === 0 ? `` : n < 0 ? cursor.leftBy(-n) : `\\x1b[${n}C`,\n\n  moveTo,\n  moveBy,\n\n  request: `\\x1b[6n`,\n}\n\nexport type ColorName = keyof typeof colorNames\n\nconst colorFront = (id: ColorName | string) => getColorSequence(id, Target.Foreground)\ncolorFront.out = getColorResetSequence(Target.Foreground)\n\nconst colorBack = (id: ColorName | string) => getColorSequence(id, Target.Background)\ncolorBack.out = getColorResetSequence(Target.Background)\n\nconst colorScreen = (id: ColorName | string) => {\n  const rgb = resolveColorToRgb(id)\n  return `\\x1b]11;rgb:${rgb.R.toString(16)}/${rgb.G.toString(16)}/${rgb.B.toString(16)}\\x07`\n}\ncolorBack.out = `\\x1b]111\\x07`\n\nfor (const color of Object.keys(colorNames)) {\n  (colorFront as any)[color] = colorFront(color);\n  (colorBack as any)[color] = colorBack(color);\n  (colorScreen as any)[color] = colorScreen(color)\n}\n\nexport const style = {\n  clear: `\\x1b[m\\x0f`,\n\n  emboldened: { in: `\\x1b[1m`, out: `\\x1b[22m` },\n  fainted: { in: `\\x1b[2m`, out: `\\x1b[22m` },\n  italic: { in: `\\x1b[3m`, out: `\\x1b[23m` },\n  underlined: { in: `\\x1b[4m`, out: `\\x1b[24m` },\n  inversed: { in: `\\x1b[7m`, out: `\\x1b[27m` },\n  hidden: { in: `\\x1b[8m`, out: `\\x1b[28m` },\n  strikethrough: { in: `\\x1b[9m`, out: `\\x1b[29m` },\n\n  color: {\n    front: colorFront as (typeof colorFront) & {\n      [key in ColorName]: string\n    },\n    back: colorBack as (typeof colorBack) & {\n      [key in ColorName]: string\n    },\n    screen: colorScreen as (typeof colorScreen) & {\n      [key in ColorName]: string\n    },\n  },\n}\n","import { isArray, mergeWith } from \"lodash-es\"\n\nexport function mergeDeep(object, other) {\n\tfunction customizer(objValue, srcValue) {\n\t\tif (isArray(objValue)) {\n\t\t\treturn objValue.concat(srcValue)\n\t\t}\n\t}\n\n\treturn mergeWith(object, other, customizer)\n}\n\n","import { mergeDeep } from \"./mergeDeep\"\n\n/**\n * Add something to the global variable `rg` from `rectangulr`.\n * @example addToGlobal({\n *  myGlobalFunction: (text)=>{console.log(text)}\n * })\n * rg.myGlobalFunction(\"print this\")\n*/\nexport function addToGlobalRg(obj) {\n\tglobalThis['rg'] ||= {}\n\tglobalThis['rg'] = mergeDeep(globalThis['rg'], obj)\n}\n","import { computed, isSignal, signal, WritableSignal } from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { BehaviorSubject, isObservable, Observable, Subscription } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { addToGlobalRg } from './addToGlobalRg'\nimport { Destroyable } from './mixins'\n\n/**\n * A piece of reactive state. The changes can be subscribed to, and built upon.\n * Similar to a BehaviorSubject but:\n * \t- the source of new values can be changed while retaining the local value and downstream subscriptions\n * \t- it's easy to unsubscribe upstream/downstream when the component is destroyed\n * @deprecated\n */\nexport class State<T> {\n  $: BehaviorSubject<T>\n\n  source: Observable<T>\n  subscription: Subscription\n  private _value: T\n\n  _until: Observable<T>\n\n  constructor(defaultValue: T, until = null, source = null) {\n    this.$ = new BehaviorSubject(defaultValue)\n\n    this.value = defaultValue\n\n    this.subscribeSource(source)\n    this.until(until)\n  }\n\n  get value(): T {\n    return this._value\n  }\n\n  set value(value: T) {\n    this._value = value\n    this.changed()\n  }\n\n  changed() {\n    this.$.next(this.value)\n  }\n\n  /**\n   * Sets the source of new values\n   * @param source An observable providing the new values or a plain value\n   */\n  subscribeSource(source) {\n    this.source = source\n\n    this._unsubscribeSource()\n\n    // Subscribe to the new source if observable\n    if (this.source && isObservable(this.source)) {\n      this.subscription = this.source.subscribe(value => {\n        this.value = value\n      })\n    }\n  }\n\n  /**\n   *\n   * @param until An observable.\n   */\n  until(until: Observable<T>) {\n    this._until = until\n    if (this._until) {\n      this._until.subscribe(() => {\n        // Remove upstream subscription\n        this._unsubscribeSource()\n        // Remove downstream subscriptions\n        this.$.complete()\n      })\n    }\n  }\n\n  private _unsubscribeSource() {\n    if (this.subscription) {\n      this.subscription.unsubscribe()\n      this.subscription = null\n    }\n  }\n}\n\n/**\n * Listen for changes on an object property\n * @example\n * class MyComponent {\n * \t\ttext = ''\n * \t\tconstructor() {\n * \t\t\tonChange(this, 'text', value => {\n *\t\t\t\tconsole.log(`called when text changes`)\n *\t\t\t})\n * \t\t}\n * }\n */\nexport function onChange<C, K extends keyof C>(\n  object: C,\n  key: K,\n  func: (value: C[K]) => void,\n  transformValue?: (value: any, oldValue: any) => any | undefined\n) {\n  let storedValue: C[K] = object[key]\n\n  Object.defineProperty(object, key, {\n    get: () => {\n      return storedValue\n    },\n    set: newValue => {\n      let res = undefined\n      if (transformValue) {\n        res = transformValue(newValue, storedValue as any)\n      }\n      if (res === undefined) {\n        storedValue = newValue\n      } else {\n        storedValue = res\n      }\n\n      if (func) {\n        func(storedValue)\n      }\n    },\n  })\n}\n\n/**\n * Listens for changes on a property and exposes it as an Observable.\n * Replaces the property with a getter/setter so it can detect changes.\n *\n * Example: listens for a property `text` and creates an Observable `$text`.\n * ```ts\n * this.text = 'blabla'\n * this.$text = new BehaviorSubject(null)\n * makeObservable(this, 'text', '$text')\n * ```\n */\nexport function makeObservable<T, K extends keyof T>(_component: T, key: K, observableKey: K) {\n  const component = _component as any\n\n  // Emit initial value\n  component[observableKey].next(component[key])\n\n  // Emit following values\n  onChange(component, key, value => {\n    component[observableKey].next(value)\n  })\n}\n\n/**\n * Listens for changes on a property and exposes it as a Signal.\n * Replaces the property with a getter/setter so it can detect changes.\n *\n * Example: listens for a property `text` and creates a Signal `$text`.\n * ```ts\n * this.text = 'blabla'\n * this.$text = signal(null)\n * makeSignal(this, 'text', '$text')\n * ```\n */\nexport function makeSignal<T, K extends keyof T>(_component: T, key: K, signalKey: K) {\n  const component = _component as any\n\n  // Emit initial value\n  component[signalKey].set(component[key])\n\n  // Emit following values\n  onChange(component, key, value => {\n    component[signalKey].set(value)\n  })\n}\n\nexport function inputSignal<T, K extends keyof T>(_component: T, key: K) {\n  const component = _component as any\n  onChange(component, key, value => {\n    if (isSignal(value)) {\n      return value\n    } else {\n      return signal(value)\n    }\n  })\n}\n\n/**\n * Subscribes to an observable for the lifetime of the component.\n * @param component The subscription gets cleaned up when this component gets destroyed.\n * @param observable The observable to subscribe to.\n * @param func A function that gets called whenever the observable changes.\n */\nexport function subscribe<T>(\n  component: Destroyable,\n  observable: Observable<T>,\n  func: (value: T) => void\n) {\n  return observable.pipe(takeUntilDestroyed()).subscribe(func)\n}\n\n/**\n * Subscribes to an observable and makes it into a property of the component.\n * Unsubscribes when the component gets destroyed.\n * @param component The subscription gets cleaned up when this component gets destroyed.\n * @param observable The observable to subscribe to.\n * @param key Name of the property that gets updated when the observable changes.\n */\nexport function makeProperty<T, K extends keyof T>(\n  component: Destroyable & T,\n  observable: Observable<any>,\n  key: K\n) {\n  observable.pipe(takeUntil(component.destroy$)).subscribe(value => {\n    component[key] = value\n  })\n}\n\nexport function derived<R, W = R>(computation: () => R, updateSource: (value: W) => void) {\n  const signal = computed(computation) as unknown as WritableSignal<R>\n  signal.set = value => {\n    updateSource(value as unknown as W)\n  }\n  signal.update = updateFn => {\n    const value = updateFn(signal())\n    updateSource(value as unknown as W)\n  }\n  // signal.mutate = mutatorFn => {\n  //   let value = signal()\n  //   mutatorFn(value)\n  //   updateSource(value)\n  // }\n  return signal\n}\n\n/**\n * @example\n * class MyComponent {\n * \t\ttext = ''\n * \t\tconstructor() {\n * \t\t\tmakeIntoSignal(this, 'text')\n * \t\t}\n * }\n */\nexport function makeIntoSignal<C, K extends keyof C>(object: C, ...keys: K[]) {\n  if (keys.length > 1) {\n    for (const k of keys) {\n      makeIntoSignal(object, k)\n    }\n    return\n  }\n\n  const key = keys[0]\n  const value = object[key]\n\n  let storedSignal\n  if (typeof value == 'function') {\n    storedSignal = computed(value as any)\n  } else {\n    storedSignal = signal(value)\n  }\n\n  Object.defineProperty(object, key, {\n    get: () => {\n      return storedSignal()\n    },\n    set: newValue => {\n      storedSignal.set(newValue)\n    },\n  })\n}\n\nexport function forceRefresh() {\n  if (globalThis['angularZone']) {\n    globalThis['angularZone'].run(() => { })\n  }\n}\n\naddToGlobalRg({\n  forceRefresh: forceRefresh,\n})\n\nexport function propToSignal<T, K extends keyof T>(component: T, key: K) {\n  const initialValue = component[key]\n  const sig = signal(initialValue)\n\n  Object.defineProperty(component, key, {\n    get: () => {\n      return sig()\n    },\n    set: newValue => {\n      sig.set(newValue)\n    },\n  })\n\n}\n","import { Injector, ProviderToken, effect, inject, isSignal } from '@angular/core'\nimport * as _ from 'lodash-es'\nimport { Observable, isObservable } from 'rxjs'\nimport { filter, first } from 'rxjs/operators'\nimport { Logger, LOGGER } from '../angular-terminal/logger'\nimport { onChange, subscribe } from './reactivity'\n\nexport type TODO = any\n\n/**\n * @example\n * TODO: use Assert.ts instead\n * assert(false, \"throw this error message\")\n * assert(true, \"nothing happens\")\n * @deprecated\n */\nexport function assert(condition?, message?) {\n  if (!condition) {\n    throw new Error(message || 'assert failed')\n  }\n}\n\n/**\n * Stops the execution and opens the debugger.\n */\nexport function assertDebug(condition?) {\n  if (!condition) {\n    debugger\n  }\n}\n\nexport const filterNulls = filter((i: any) => i != null)\n\nexport function longest(array) {\n  return array.reduce((previous, current) => {\n    return current.key.length > previous ? current.key.length : previous\n  }, 0)\n}\n\nexport function moveToLast(array, item) {\n  _.remove(array, i => i == item)\n  array.push(item)\n  return array\n}\n\nexport function removeLastMatch(array, item) {\n  if (array == undefined) throw new Error('no array')\n\n  for (let i = array.length - 1; i >= 0; i--) {\n    const current = array[i]\n    if (current == item) {\n      return array.splice(i, 1)\n    }\n  }\n  return array\n}\n\nexport function remove<T>(array: Array<T>, item: T) {\n  _.remove(array, i => i == item)\n  return array\n}\n\nexport function last(array) {\n  if (array.length <= 0) {\n    return undefined\n  }\n  return array[array.length - 1]\n}\n\n/**\n * Loop over an object [key,value] and the key or the value.\n * Creates a new object.\n * If `undefined` is returned, the key is removed from the object.\n */\nexport function mapKeyValue(object, func: (key, value) => [key: string, value: any] | undefined) {\n  let newObject = {}\n  for (const [key, value] of Object.entries(object)) {\n    const res = func(key, value)\n    if (res) {\n      const [customName, customValue] = res\n      newObject[customName] = customValue\n    }\n  }\n  return newObject\n}\n\nexport interface AnyObject {\n  [prop: string]: any\n}\n\n/**\n * Waits for an observable to become \"truthy\"\n * @example await waitFor(observable)\n */\nexport function waitFor(observable: Observable<any>) {\n  return observable\n    .pipe(\n      filter(t => !!t),\n      first()\n    )\n    .toPromise()\n}\n\n/**\n * Listens for changes on a property and exposes it as a Signal.\n * Replaces the property with a getter/setter so it can detect changes.\n *\n * Example: listens for a property `text` and creates an Signal `$text`.\n * ```ts\n * this.text = 'blabla'\n * this.$text = new BehaviorSubject(null)\n * inputToSignal(this, 'text', '$text')\n * ```\n */\nexport function inputToSignal<T, K extends keyof T>(_component: T, key: K, signalKey: K) {\n  const injector = inject(Injector)\n  const component = _component as any\n\n  let subscription\n\n  // Emit following values\n  onChange(component, key, input => {\n    if (input) {\n      if (isObservable(input)) {\n        subscription?.unsubscribe()\n        subscription = subscribe(component, input, value => {\n          component[signalKey].set(value)\n        })\n      } else if (isSignal(input)) {\n        effect(\n          () => {\n            component[signalKey].set(input())\n          },\n          {\n            injector: injector,\n            allowSignalWrites: true,\n          }\n        )\n      } else {\n        component[signalKey].set(input)\n      }\n    } else {\n      component[signalKey].set(input)\n    }\n  })\n}\n\nexport type InjectFunction = <T>(token: ProviderToken<T>) => T\n\nexport function async<T>(func: (...args) => T): Promise<T> {\n  return new Promise(resolve =>\n    setTimeout(() => {\n      const res = func()\n      resolve(res)\n    })\n  )\n}\n\nlet i = 0\nexport function detectInfiniteLoop(nb = 1000) {\n  assert(i++ < nb)\n}\n\n// export function circularReplacer() {\n//   const seen = new WeakSet()\n//   return (key, value) => {\n//     if (typeof value === 'object' && value !== null) {\n//       if (seen.has(value)) {\n//         return\n//       }\n//       seen.add(value)\n//     }\n//     return value\n//   }\n// }\n\nexport function stringifyReplacer({ depth = 5 } = {}) {\n  let objects, stack, keys\n  return function (key, value) {\n    //  very first iteration\n    if (key === '') {\n      keys = ['root']\n      objects = [{ keys: 'root', value: value }]\n      stack = []\n      return value\n    }\n\n    //  From the JSON.stringify's doc: \"The object in which the key was found is\n    //  provided as the replacer's this parameter.\"\n    //  Thus one can control the depth\n    while (stack.length && this !== stack[0]) {\n      stack.shift()\n      keys.pop()\n    }\n    // console.log( keys.join('.') );\n\n    let type = typeof value\n    if (type === 'boolean' || type === 'number' || type === 'string') {\n      return value\n    }\n    if (type === 'function') {\n      return `[Function, ${value.length + 1} args]`\n    }\n    if (value === null) {\n      return 'null'\n    }\n    if (!value) {\n      return undefined\n    }\n    if (stack.length >= depth) {\n      if (Array.isArray(value)) {\n        return `[Array(${value.length})]`\n      }\n      return '[Object]'\n    }\n    let found = objects.find(o => o.value === value)\n    if (!found) {\n      keys.push(key)\n      stack.unshift(value)\n      objects.push({ keys: keys.join('.'), value: value })\n      return value\n    }\n    //  actually, here's the only place where the keys keeping is useful\n    return `[Duplicate: ${found.keys}]`\n  }\n}\n\nexport function removeFromArray(array, item) {\n  return _.filter(array, i => item != i)\n}\n\nexport function logError(logger: Logger, thing) {\n  if (typeof thing == 'string') {\n    logger.log({ message: thing, level: 'error' })\n  } else if ('message' in thing || 'stack' in thing) {\n    logger.log({ message: thing.message, stack: thing.stack, level: 'error' })\n  } else {\n    const res = _.cloneDeep(thing)\n    res['level'] = 'error'\n    logger.log(res)\n  }\n}\n\nexport function unwrapIfSignal(value: any) {\n  if (isSignal(value)) {\n    return value()\n  } else {\n    return value\n  }\n}\n\nexport function unwrapIfFunction(value: any) {\n  if (typeof value == 'function') {\n    return value()\n  } else {\n    return value\n  }\n}\n\n// export function includesAny(array: any[], items: any[]): boolean {\n//   return array.some(item => items.includes(item))\n// }\n","import * as _ from '@s-libs/micro-dash'\n\nexport class Event {\n  name: any\n  bubbles: boolean\n  cancelable: boolean\n\n  mouse: any\n  worldCoordinates: any\n  contentCoordinates: any\n  immediatelyCanceled: boolean\n  propagationStopped: boolean\n  defaultPrevented: boolean\n  default: any\n  target: any\n  currentTarget: any\n  bubblingCanceled: boolean\n  states: any\n  properties: Set<unknown>\n  key: any\n  buffer: Buffer\n\n  constructor(name, { bubbles = false, cancelable = false } = {}, attrs = {}) {\n    this.name = name\n\n    this.bubbles = bubbles\n    this.cancelable = cancelable\n\n    this.immediatelyCanceled = false\n    this.propagationStopped = false\n\n    this.defaultPrevented = false\n    this.default = null\n\n    this.target = null\n    this.currentTarget = null\n\n    for (let [key, value] of Object.entries(attrs)) {\n      this[key] = value\n    }\n  }\n\n  reset() {\n    this.immediatelyCanceled = false\n    this.bubblingCanceled = false\n\n    this.defaultPrevented = false\n    this.default = null\n\n    this.target = null\n    this.currentTarget = null\n\n    return this\n  }\n\n  stopImmediatePropagation() {\n    this.immediatelyCanceled = true\n    this.propagationStopped = true\n  }\n\n  stopPropagation() {\n    this.propagationStopped = true\n  }\n\n  preventDefault() {\n    if (!this.cancelable)\n      throw new Error(`Failed to execute 'preventDefault': Event is not cancelable.`)\n\n    this.defaultPrevented = true\n  }\n\n  setDefault(callback) {\n    if (!_.isFunction(callback))\n      throw new Error(\n        `Failed to execute 'setDefaultAction': Parameter 1 is not of type 'function'.`\n      )\n\n    this.default = callback\n  }\n\n  inspect() {\n    let defaultPrevented = this.defaultPrevented ? ` (default prevented)` : ``\n\n    return `<Event ${this.name}${defaultPrevented}>`\n  }\n}\n","export class Point {\n    x: any\n    y: any\n\n    constructor({ column = 0, row = 0, x = column, y = row } = {}) {\n        this.x = x\n        this.y = y\n    }\n\n    clone() {\n        return new Point(this)\n    }\n\n    assign(other) {\n        this.x = other.x\n        this.y = other.y\n\n        return this\n    }\n\n    get column() {\n        return this.x\n    }\n\n    get row() {\n        return this.y\n    }\n\n    set column(column) {\n        this.x = column\n    }\n\n    set row(row) {\n        this.y = row\n    }\n\n    get length() {\n        return Math.sqrt(this.x * this.x + this.y * this.y)\n    }\n\n    toString() {\n        return `<Point#x: ${this.x} y: ${this.y}>`\n    }\n}\n","import { Point } from './Point'\n\nexport class Rect {\n  width: any\n  height: number\n  x: any\n  y: any\n\n  static isEmpty(rect) {\n    return rect === null || rect.width === 0 || rect.height === 0\n  }\n\n  static getBoundingRect(...rects) {\n    let output = null\n\n    for (let rect of rects) {\n      if (Rect.isEmpty(rect)) continue\n\n      if (!output) {\n        output = rect.clone()\n      } else {\n        if (rect.x < output.x) {\n          output.width += output.x - rect.x\n          output.x = rect.x\n        }\n\n        if (rect.y < output.y) {\n          output.height += output.y - rect.y\n          output.y = rect.y\n        }\n\n        if (rect.x + rect.width > output.x + output.width)\n          output.width += rect.x + rect.width - output.x - output.width\n\n        if (rect.y + rect.height > output.y + output.height) {\n          output.height += rect.y + rect.height - output.y - output.height\n        }\n      }\n    }\n\n    return output\n  }\n\n  static getIntersectingRect(...rects) {\n    let output = null\n\n    for (let rect of rects) {\n      if (Rect.isEmpty(rect)) return null\n\n      if (!output) {\n        output = rect.clone()\n      } else if (!output.intersectsRect(rect)) {\n        return null\n      } else {\n        let x = Math.max(output.x, rect.x)\n        let y = Math.max(output.y, rect.y)\n\n        output.width = Math.min(output.x + output.width, rect.x + rect.width) - x\n        output.height = Math.min(output.y + output.height, rect.y + rect.height) - y\n\n        output.x = x\n        output.y = y\n      }\n    }\n\n    return output\n  }\n\n  static areEqual(a, b) {\n    if (a === b) return true\n\n    if (Rect.isEmpty(a)) return Rect.isEmpty(b)\n\n    if (Rect.isEmpty(b)) return Rect.isEmpty(a)\n\n    return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height\n  }\n\n  constructor({ x = 0, y = 0, width = 0, height = 0 } = {}) {\n    this.x = x\n    this.y = y\n\n    this.width = width\n    this.height = height\n  }\n\n  clone() {\n    return new Rect(this)\n  }\n\n  assign(other) {\n    this.x = other.x\n    this.y = other.y\n\n    this.width = other.width\n    this.height = other.height\n\n    return this\n  }\n\n  includesPoint(point) {\n    return (\n      point.x >= this.x &&\n      point.y >= this.y &&\n      point.x < this.x + this.width &&\n      point.y < this.y + this.height\n    )\n  }\n\n  includesRect(other) {\n    return (\n      other !== null &&\n      other.x >= this.x &&\n      other.y >= this.y &&\n      other.x + other.width <= this.x + this.width &&\n      other.y + other.height <= this.y + this.height\n    )\n  }\n\n  intersectsRect(other) {\n    return (\n      other !== null &&\n      other.x < this.x + this.width &&\n      other.x + other.width > this.x &&\n      other.y < this.y + this.height &&\n      other.y + other.height > this.y &&\n      this.width > 0 &&\n      this.height > 0 &&\n      other.width > 0 &&\n      other.height > 0\n    )\n  }\n\n  excludeRect(other): Rect[] {\n    if (Rect.isEmpty(this)) return []\n\n    let intersection = Rect.getIntersectingRect(this, other)\n\n    if (Rect.isEmpty(intersection)) return [this.clone()]\n\n    let results: Rect[] = []\n\n    if (intersection.x > this.x) {\n      let slice = new Rect()\n      results.push(slice)\n\n      slice.x = this.x\n      slice.y = intersection.y\n\n      slice.width = intersection.x - this.x\n      slice.height = intersection.height\n    }\n\n    if (intersection.x + intersection.width < this.x + this.width) {\n      let slice = new Rect()\n      results.push(slice)\n\n      slice.x = intersection.x + intersection.width\n      slice.y = intersection.y\n\n      slice.width = this.x + this.width - intersection.x - intersection.width\n      slice.height = intersection.height\n    }\n\n    if (intersection.y > this.y) {\n      let slice = new Rect()\n      results.push(slice)\n\n      slice.x = this.x\n      slice.y = this.y\n\n      slice.width = this.width\n      slice.height = intersection.y - this.y\n    }\n\n    if (intersection.y + intersection.height < this.y + this.height) {\n      let slice = new Rect()\n      results.push(slice)\n\n      slice.x = this.x\n      slice.y = intersection.y + intersection.height\n\n      slice.width = this.width\n      slice.height = this.y + this.height - intersection.y - intersection.height\n    }\n\n    return results\n  }\n\n  getDistanceFromPoint(point) {\n    let distance = new Point()\n\n    if (point.x < this.x) distance.x = this.x - point.x\n    else if (point.x >= this.x + this.width) distance.x = this.x + this.width - point.x + 1\n\n    if (point.y < this.y) distance.y = this.y - point.y\n    else if (point.y >= this.y + this.height) distance.y = this.y + this.height - point.y + 1\n\n    return distance\n  }\n\n  // get barycenter() {\n  //   if (Rect.isEmpty(this)) return null\n\n  //   let point = new Point()\n\n  //   point.x = this.x + this.width / 2\n  //   point.y = this.y + this.height / 2\n\n  //   return point\n  // }\n\n  // toString() {\n  //     return `<Rect#x: ${this.x} y: ${this.y} | w: ${this.width} h: ${this.height}>`\n  // }\n}\n","import * as _ from '@s-libs/micro-dash'\nimport { Event } from '../misc/Event'\nimport { TermScreen } from '../../term'\n\nlet currentNodeId = 0\n\nexport class Node<T extends Node<T>> {\n\n  id = currentNodeId++\n  depth = 9999\n  nodeName = this.constructor.name\n  rootNode: TermScreen | undefined = undefined\n  parentNode: T | undefined = undefined\n  previousSibling: T = undefined\n  nextSibling: T = undefined\n  childNodes: T[] = []\n\n  reset() {\n    this.rootNode = null\n    this.parentNode = null\n\n    this.previousSibling = null\n    this.nextSibling = null\n\n    this.childNodes = []\n  }\n\n  eventListeners: { [name: string]: Function[] } = {}\n\n  addEventListener(name: string, func: (e: Event) => void, options?: { bubbles: true }) {\n    if (!this.eventListeners[name]) {\n      this.eventListeners[name] = [func]\n    } else {\n      this.eventListeners[name].push(func)\n    }\n\n    return () => {\n      this.removeEventListener(name, func)\n    }\n  }\n\n  removeEventListener(name: string, func: (e: Event) => void) {\n    _.remove(this.eventListeners[name], f => f == func)\n  }\n\n  dispatchEvent(event: Event, options?) {\n    const listeners = this.eventListeners[event.name]\n    if (listeners) {\n      for (const listener of listeners) {\n        listener(event)\n      }\n    }\n\n    if (event.bubbles && this.parentNode) {\n      this.parentNode.dispatchEvent(event)\n    }\n  }\n\n  appendTo(node: T) {\n    if (!(node instanceof Node))\n      throw new Error(`Failed to execute 'appendTo': Parameter 1 is not of type 'Node'.`)\n\n    // if (!Reflect.getOwnPropertyDescriptor(this, `parentNode`).writable)\n    //   throw new Error(\n    //     `Failed to execute 'appendTo': The new child element doesn't allow being appended to another node.`\n    //   )\n\n    if (wouldContainItself(this, node))\n      throw new Error(`Failed to execute 'appendTo': The new child element contains the parent.`)\n\n    this.remove()\n\n    node.appendChild(this as unknown as T)\n  }\n\n  appendChild(node: T) {\n    if (!(node instanceof Node))\n      throw new Error(`Failed to execute 'appendChild': Parameter 1 is not of type 'Node'.`)\n\n    // if (!Reflect.getOwnPropertyDescriptor(node, `parentNode`).writable)\n    //   throw new Error(\n    //     `Failed to execute 'appendChild': The new child element doesn't allow being appended to another node.`\n    //   )\n\n    if (wouldContainItself(node, this))\n      throw new Error(`Failed to execute 'appendChild': The new child element contains the parent.`)\n\n    node.remove()\n\n    this.linkBefore(node, null)\n  }\n\n  insertBefore(node: T, referenceNode: T) {\n    if (!(node instanceof Node))\n      throw new Error(`Failed to execute 'insertBefore': Parameter 1 is not of type 'Node'.`)\n\n    if (!(referenceNode instanceof Node) && referenceNode !== null)\n      throw new Error(`Failed to execute 'insertBefore': Parameter 2 is not of type 'Node'.`)\n\n    // if (!Reflect.getOwnPropertyDescriptor(node, `parentNode`).writable)\n    //   throw new Error(\n    //     `Failed to execute 'insertBefore': The new child element doesn't allow being appended to another node.`\n    //   )\n\n    if (wouldContainItself(node, this))\n      throw new Error(\n        `Failed to execute 'insertBefore': The new child element contains the parent.`\n      )\n\n    if (referenceNode && referenceNode.parentNode !== (this as unknown as T))\n      throw new Error(\n        `Failed to execute 'insertBefore': The node before which the new node is to be inserted is not a child of this node.`\n      )\n\n    node.remove()\n\n    this.linkBefore(node, referenceNode)\n  }\n\n  linkBefore(node: T, referenceNode) {\n    let index = referenceNode ? this.childNodes.indexOf(referenceNode) : this.childNodes.length\n\n    if (node.parentNode) node.remove()\n\n    node.parentNode = (this as unknown as T)\n    node.depth = this.depth + 1\n\n    this.childNodes.splice(index, 0, node)\n\n    node.traverse(traversedNode => {\n      traversedNode.rootNode = this.rootNode\n    })\n  }\n\n  removeChild(node) {\n    if (!(node instanceof Node)) {\n      throw new Error(`Failed to execute 'removeChild': Parameter 1 is not of type 'Node'.`)\n    }\n\n    if (node.parentNode !== this as any) {\n      throw new Error(`Failed to execute 'removeChild': The node to be removed is not a child of this node.`)\n    }\n\n    node.parentNode = null\n\n    if (node.previousSibling) node.previousSibling.nextSibling = node.nextSibling\n\n    if (node.nextSibling) node.nextSibling.previousSibling = node.previousSibling\n\n    node.previousSibling = null\n    node.nextSibling = null\n\n    let index = this.childNodes.indexOf(node as unknown as T)\n    this.childNodes.splice(index, 1)\n\n    node.traverse(traversedNode => {\n      if (node === null) debugger\n      // @ts-ignore\n      // traversedNode.rootNode = node\n      traversedNode.rootNode = null\n    })\n  }\n\n  remove() {\n    if (!this.parentNode) return\n\n    this.parentNode.removeChild(this)\n  }\n\n  setPropertyAccessor(name, { validate = val => true, get = null, set = null }) {\n    Reflect.defineProperty(this, name, {\n      get() {\n        return get()\n      },\n\n      set(newValue) {\n        if (!validate(newValue))\n          throw new Error(\n            `Failed to set \"${name}\": The value to be set does not pass the property's validation routine.`\n          )\n\n        return set(newValue)\n      },\n    })\n  }\n\n  setPropertyTrigger(name, initial, { validate = val => true, trigger = val => { } }) {\n    let value\n\n    Reflect.defineProperty(this, name, {\n      get() {\n        return value\n      },\n\n      set(newValue) {\n        if (newValue === value) return\n\n        if (!validate(newValue))\n          throw new Error(\n            `Failed to set \"${name}\": The value to be set does not pass the property's validation routine.`\n          )\n\n        value = newValue\n        trigger(newValue)\n      },\n    })\n\n    this[name] = initial\n  }\n\n  traverse = (fn: (el: T, depth) => void, { depth = Infinity, currentDepth = 0 } = {}) => traverse(this, fn)\n\n  inspect() {\n    return this.toString()\n  }\n}\n\nexport function traverse<T extends Node<T>>(node: Node<T>, fn: (el: T, depth) => void, { depth = Infinity, currentDepth = 0 } = {}) {\n  if (currentDepth >= depth) return\n\n  fn(node as unknown as T, currentDepth)\n\n  for (let child of node.childNodes) {\n    child.traverse(fn, { depth, currentDepth: currentDepth + 1 })\n  }\n}\n\nfunction wouldContainItself(node, parentNode) {\n  if (node === parentNode) return true\n\n  return node.childNodes.some(child => {\n    return wouldContainItself(child, parentNode)\n  })\n}\n\nexport function isInsideOf<T extends Node<T>>(parent: T, child: T) {\n  let current = child\n  while (current != null) {\n    if (current == parent) {\n      return true\n    } else {\n      current = current.parentNode\n    }\n  }\n  return false\n}\n\nexport function traverseChildrenFirst<T extends Node<T>>(node: T, func: (parent: T, child: T) => void) {\n  for (const child of node.childNodes) {\n    traverseChildrenFirst(child, func)\n    func(node, child)\n  }\n}","export const colorNames = {\n    aliceblue: '#f0f8ff',\n    antiquewhite: '#faebd7',\n    aqua: '#00ffff',\n    aquamarine: '#7fffd4',\n    azure: '#f0ffff',\n\n    beige: '#f5f5dc',\n    bisque: '#ffe4c4',\n    black: '#000000',\n    blanchedalmond: '#ffebcd',\n    blue: '#0000ff',\n    blueviolet: '#8a2be2',\n    brown: '#a52a2a',\n    burlywood: '#deb887',\n\n    cadetblue: '#5f9ea0',\n    chartreuse: '#7fff00',\n    chocolate: '#d2691e',\n    coral: '#ff7f50',\n    cornflowerblue: '#6495ed',\n    cornsilk: '#fff8dc',\n    crimson: '#dc143c',\n    cyan: '#00ffff',\n\n    darkblue: '#00008b',\n    darkcyan: '#008b8b',\n    darkgoldenrod: '#b8860b',\n    darkgray: '#a9a9a9',\n    darkgreen: '#006400',\n    darkgrey: '#a9a9a9',\n    darkkhaki: '#bdb76b',\n    darkmagenta: '#8b008b',\n    darkolivegreen: '#556b2f',\n    darkorange: '#ff8c00',\n    darkorchid: '#9932cc',\n    darkred: '#8b0000',\n    darksalmon: '#e9967a',\n    darkseagreen: '#8fbc8f',\n    darkslateblue: '#483d8b',\n    darkslategray: '#2f4f4f',\n    darkslategrey: '#2f4f4f',\n    darkturquoise: '#00ced1',\n    darkviolet: '#9400d3',\n    deeppink: '#ff1493',\n    deepskyblue: '#00bfff',\n    dimgray: '#696969',\n    dimgrey: '#696969',\n    dodgerblue: '#1e90ff',\n\n    firebrick: '#b22222',\n    floralwhite: '#fffaf0',\n    forestgreen: '#228b22',\n    fuchsia: '#ff00ff',\n\n    gainsboro: '#dcdcdc',\n    ghostwhite: '#f8f8ff',\n    gold: '#ffd700',\n    goldenrod: '#daa520',\n    gray: '#808080',\n    green: '#008000',\n    greenyellow: '#adff2f',\n    grey: '#808080',\n\n    honeydew: '#f0fff0',\n    hotpink: '#ff69b4',\n\n    indianred: '#cd5c5c',\n    indigo: '#4b0082',\n    ivory: '#fffff0',\n\n    khaki: '#f0e68c',\n\n    lavender: '#e6e6fa',\n    lavenderblush: '#fff0f5',\n    lawngreen: '#7cfc00',\n    lemonchiffon: '#fffacd',\n    lightblue: '#add8e6',\n    lightcoral: '#f08080',\n    lightcyan: '#e0ffff',\n    lightgoldenrodyellow: '#fafad2',\n    lightgray: '#d3d3d3',\n    lightgreen: '#90ee90',\n    lightgrey: '#d3d3d3',\n    lightpink: '#ffb6c1',\n    lightsalmon: '#ffa07a',\n    lightseagreen: '#20b2aa',\n    lightskyblue: '#87cefa',\n    lightslategray: '#778899',\n    lightslategrey: '#778899',\n    lightsteelblue: '#b0c4de',\n    lightyellow: '#ffffe0',\n    lime: '#00ff00',\n    limegreen: '#32cd32',\n    linen: '#faf0e6',\n\n    magenta: '#ff00ff',\n    maroon: '#800000',\n    mediumaquamarine: '#66cdaa',\n    mediumblue: '#0000cd',\n    mediumorchid: '#ba55d3',\n    mediumpurple: '#9370db',\n    mediumseagreen: '#3cb371',\n    mediumslateblue: '#7b68ee',\n    mediumspringgreen: '#00fa9a',\n    mediumturquoise: '#48d1cc',\n    mediumvioletred: '#c71585',\n    midnightblue: '#191970',\n    mintcream: '#f5fffa',\n    mistyrose: '#ffe4e1',\n    moccasin: '#ffe4b5',\n\n    navajowhite: '#ffdead',\n    navy: '#000080',\n\n    oldlace: '#fdf5e6',\n    olive: '#808000',\n    olivedrab: '#6b8e23',\n    orange: '#ffa500',\n    orangered: '#ff4500',\n    orchid: '#da70d6',\n\n    palegoldenrod: '#eee8aa',\n    palegreen: '#98fb98',\n    paleturquoise: '#afeeee',\n    palevioletred: '#db7093',\n    papayawhip: '#ffefd5',\n    peachpuff: '#ffdab9',\n    peru: '#cd853f',\n    pink: '#ffc0cb',\n    plum: '#dda0dd',\n    powderblue: '#b0e0e6',\n    purple: '#800080',\n\n    rebeccapurple: '#663399',\n    red: '#ff0000',\n    rosybrown: '#bc8f8f',\n    royalblue: '#4169e1',\n\n    saddlebrown: '#8b4513',\n    salmon: '#fa8072',\n    sandybrown: '#f4a460',\n    seagreen: '#2e8b57',\n    seashell: '#fff5ee',\n    sienna: '#a0522d',\n    silver: '#c0c0c0',\n    skyblue: '#87ceeb',\n    slateblue: '#6a5acd',\n    slategray: '#708090',\n    slategrey: '#708090',\n    snow: '#fffafa',\n    springgreen: '#00ff7f',\n    steelblue: '#4682b4',\n\n    tan: '#d2b48c',\n    teal: '#008080',\n    thistle: '#d8bfd8',\n    tomato: '#ff6347',\n    turquoise: '#40e0d0',\n\n    violet: '#ee82ee',\n\n    wheat: '#f5deb3',\n    white: '#ffffff',\n    whitesmoke: '#f5f5f5',\n\n    yellow: '#ffff00',\n    yellowgreen: '#9acd32',\n}\n","import * as _ from 'lodash-es'\n\nexport function parseRawValue(rawValue, parser) {\n  if (parser instanceof Map) {\n    return parser.get(rawValue)\n  }\n\n  if (_.isArray(parser)) {\n    for (const p of parser) {\n      const value = parseRawValue(rawValue, p)\n      if (value !== undefined) {\n        return value\n      }\n    }\n    return undefined\n  }\n\n  if (parser && typeof parser == 'object') {\n    if (!_.isString(rawValue)) return undefined\n\n    let camelized = _.camelCase(rawValue)\n\n    if (Object.prototype.hasOwnProperty.call(parser, camelized)) {\n      return parser[rawValue]\n    } else {\n      return undefined\n    }\n  }\n\n  if (_.isFunction(parser)) {\n    return parser(rawValue)\n  }\n\n  if (parser === rawValue) {\n    return rawValue\n  }\n}\n","import * as _ from 'lodash-es'\nimport { style } from '../../../../../../term-strings/core'\n\nexport class StyleColor {\n\n  constructor(public value) { }\n\n  front = style.color.front(this.value)\n  back = style.color.back(this.value)\n\n  serialize() {\n    return this.value\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n","export class StyleInherit {\n  static inherit: any = null\n\n  constructor() {}\n\n  serialize() {\n    return null\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleInherit.inherit = new StyleInherit()\nStyleInherit.inherit.serialize = () => `inherit`\n","export class StyleLength {\n  size: number\n  isRelative: boolean\n  static autoNaN: StyleLength = null\n  static auto: StyleLength = null\n  static infinity: StyleLength = null\n\n  constructor(size = 0, isRelative = false) {\n    this.size = size\n    this.isRelative = isRelative\n  }\n\n  resolve(relativeTo) {\n    if (this.isRelative) {\n      return (this.size * relativeTo) / 100\n    } else {\n      return this.size\n    }\n  }\n\n  serialize() {\n    if (this.isRelative) {\n      return `${this.size}%`\n    } else {\n      return this.size\n    }\n  }\n\n  toYoga() {\n    return this.serialize()\n  }\n\n  valueOf() {\n    return this.size\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleLength.autoNaN = new StyleLength()\nStyleLength.autoNaN.toYoga = () => NaN\nStyleLength.autoNaN.serialize = () => `auto`\n\nStyleLength.auto = new StyleLength()\nStyleLength.auto.serialize = () => `auto`\n\n// Not actually infinity! Otherwise we have issues when substracting sizes (Infinity - Infinity = NaN)\nStyleLength.infinity = new StyleLength(Number.MAX_SAFE_INTEGER)\n","export class StyleWeight {\n  static normal: StyleWeight = null\n  static bold: StyleWeight = null\n\n  constructor(public size: any) { }\n\n  serialize() {\n    return this.size\n  }\n\n  valueOf() {\n    return this.size\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleWeight.normal = new StyleWeight(400)\nStyleWeight.normal.serialize = () => `normal`\n\nStyleWeight.bold = new StyleWeight(700)\nStyleWeight.bold.serialize = () => `bold`\n","import * as _ from '@s-libs/micro-dash'\n\nimport { colorNames } from './colorNames'\nimport { parseRawValue } from './tools/parseRawValue'\nimport { StyleColor } from './types/StyleColor'\nimport { StyleInherit } from './types/StyleInherit'\nimport { StyleLength } from './types/StyleLength'\nimport { StyleWeight } from './types/StyleWeight'\n\nclass Optional {\n  parsers: any\n\n  constructor(parsers) {\n    this.parsers = parsers\n  }\n}\n\nexport function list(parserList) {\n  let minSize = parserList.reduce(\n    (count, parser) => count + (parser instanceof Optional ? 0 : 1),\n    0\n  )\n  let maxSize = parserList.length\n\n  function iterate(parserList, rawValues) {\n    if (rawValues.length === 0 && parserList.length === 0) return []\n\n    if (rawValues.length < minSize && parserList.length === 0) return undefined\n\n    if (parserList.length < minSize && rawValues.length === 0) return undefined\n\n    let rawValue = rawValues[0]\n    let parserEntry = parserList[0]\n\n    let isOptional = parserEntry instanceof Optional\n    let parsers = parserEntry instanceof Optional ? parserEntry.parsers : parserEntry\n\n    let value = parseRawValue(rawValue, parsers)\n\n    if (value === undefined && !isOptional) return undefined\n\n    let next =\n      value !== undefined\n        ? iterate(parserList.slice(1), rawValues.slice(1))\n        : iterate(parserList.slice(1), rawValues)\n\n    if (next !== undefined) {\n      return [value, ...next]\n    } else {\n      return undefined\n    }\n  }\n\n  return rawValue => {\n    rawValue = _.castArray(rawValue)\n\n    if (rawValue.length < minSize) return undefined\n\n    if (rawValue.length > maxSize) return undefined\n\n    return iterate(parserList, rawValue)\n  }\n}\n\nexport function optional(parsers) {\n  return new Optional(parsers)\n}\n\nexport function repeat(n, parsers) {\n  return rawValue => {\n    rawValue = _.castArray(rawValue)\n\n    if (!n.includes(rawValue.length)) return undefined\n\n    let value = rawValue.map(sub => {\n      return parseRawValue(sub, parsers)\n    })\n\n    if (value.some(sub => _.isUndefined(sub))) return undefined\n\n    return value\n  }\n}\n\nexport function number(rawValue) {\n  if (!_.isNumber(rawValue) && !_.isString(rawValue)) return undefined\n\n  let value = Number(rawValue)\n\n  if (!isFinite(value)) return undefined\n\n  return value\n}\n\nexport function length(rawValue) {\n  if (rawValue instanceof StyleLength && !rawValue.isRelative) return rawValue\n\n  if (!_.isNumber(rawValue) && !_.isString(rawValue)) return undefined\n\n  let value = Number(rawValue)\n\n  if (!isFinite(value)) return undefined\n\n  return new StyleLength(value)\n}\n\nlength.rel = function (rawValue) {\n  if (rawValue instanceof StyleLength && rawValue.isRelative) return rawValue\n\n  if (!_.isString(rawValue) || !rawValue.endsWith(`%`)) return undefined\n\n  let value = Number(rawValue.slice(0, -1))\n\n  if (!isFinite(value)) return undefined\n\n  return new StyleLength(value, true)\n}\n\nlength.autoNaN = function (rawValue) {\n  if (rawValue !== `auto` && rawValue !== StyleLength.autoNaN) return undefined\n\n  return StyleLength.autoNaN\n}\n\nlength.auto = function (rawValue) {\n  if (rawValue !== `auto` && rawValue !== StyleLength.auto) return undefined\n\n  return StyleLength.auto\n}\n\nlength.infinity = function (rawValue) {\n  if (rawValue !== Infinity) return undefined\n\n  return StyleLength.infinity\n}\n\nexport function inherit(rawValue) {\n  if (rawValue !== `inherit`) return undefined\n\n  return StyleInherit.inherit\n}\n\nexport function character(rawValue) {\n  if (!_.isString(rawValue) || rawValue.length !== 1) return undefined\n\n  return rawValue\n}\n\nexport function color(rawValue) {\n  if (rawValue instanceof StyleColor) return rawValue\n\n  if (!_.isString(rawValue)) return undefined\n\n  rawValue = rawValue.toLowerCase()\n\n  if (Object.prototype.hasOwnProperty.call(colorNames, rawValue)) rawValue = colorNames[rawValue]\n\n  if (/^#[0-9a-f]{3}$/.test(rawValue)) rawValue = rawValue.replace(/([0-9a-f])/g, `$1$1`)\n\n  if (!/^#[0-9a-f]{6}$/.test(rawValue)) return undefined\n\n  return new StyleColor(rawValue)\n}\n\nexport function weight(rawValue) {\n  if (!_.isNumber(rawValue) && !_.isString(rawValue)) return undefined\n\n  let value = Number(rawValue)\n\n  if (!isFinite(value)) return undefined\n\n  return new StyleWeight(value)\n}\n","import * as Yoga from 'typeflex'\nimport { TermElement } from '../../core/dom/Element'\nimport { TermText2 } from '../../term'\n\nexport function dirtyLayout(node: TermElement) {\n  node.setDirtyLayoutFlag()\n}\n\nexport function dirtyClipping(node: TermElement) {\n  node.setDirtyClippingFlag()\n}\n\nexport function dirtyRendering(node: TermElement) {\n  node.queueDirtyRect()\n}\n\n// export function dirtyFocusList(node: Element) {\n//   node.rootNode.setDirtyFocusListFlag()\n// }\n\nexport function dirtyRenderList(node: TermElement) {\n  node.rootNode?.setDirtyRenderListFlag()\n}\n\nexport function onNullSwitch(trigger) {\n  return function (node, newValue, oldValue) {\n    if ((newValue === null) === (oldValue === null)) return\n\n    trigger(node, newValue, oldValue)\n  }\n}\n\nexport function forwardToYoga(fnName, ...args) {\n  if (!Yoga.Node.prototype[fnName]) throw new Error(`Invalid Yoga method \"${fnName}\"`)\n\n  return function (node: TermElement, newValue) {\n    const newArgs = args.map(arg => {\n      if (typeof arg === `function`) {\n        return arg(newValue)\n      } else {\n        return arg\n      }\n    })\n    node.yogaNode[fnName](\n      ...newArgs\n    )\n  }\n}\n\nfunction printParentChain(el: TermElement, res = \"\") {\n  if (el.parentNode) {\n    printParentChain(el.parentNode, res)\n  }\n  res += `${el.id} -> `\n  return res\n}\n\nforwardToYoga.value = function (value) {\n  if (value != null) {\n    return value.toYoga()\n  } else {\n    return value\n  }\n}\n\nexport function forwardToTextLayout(optName, cb) {\n  return function (node: TermText2, newValue) {\n    if (!node.conf) return\n\n    node.setLayoutConfig({ [optName]: cb(newValue) })\n  }\n}\n","export class StyleAlignment {\n  name: any\n  isLeftAligned: boolean\n  isCentered: boolean\n  isRightAligned: boolean\n  isJustified: boolean\n  static left: StyleAlignment = null\n  static center: StyleAlignment = null\n  static right: StyleAlignment = null\n  static justify: StyleAlignment = null\n\n  constructor(\n    name,\n    { isLeftAligned = false, isCentered = false, isRightAligned = false, isJustified = false } = {}\n  ) {\n    this.name = name\n\n    this.isLeftAligned = isLeftAligned\n    this.isCentered = isCentered\n    this.isRightAligned = isRightAligned\n    this.isJustified = isJustified\n  }\n\n  serialize() {\n    return this.name\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleAlignment.left = new StyleAlignment(`left`, { isLeftAligned: true })\nStyleAlignment.center = new StyleAlignment(`center`, { isCentered: true })\nStyleAlignment.right = new StyleAlignment(`right`, { isRightAligned: true })\nStyleAlignment.justify = new StyleAlignment(`justify`, { isJustified: true })\n","export class StyleBackgroundClip {\n  doesIncludeBorders: boolean\n  doesIncludePadding: boolean\n  static borderBox: StyleBackgroundClip = null\n  static paddingBox: StyleBackgroundClip = null\n  static contentBox: StyleBackgroundClip = null\n\n  constructor({ doesIncludeBorders = false, doesIncludePadding = false } = {}) {\n    this.doesIncludeBorders = doesIncludeBorders\n    this.doesIncludePadding = doesIncludePadding\n  }\n\n  serialize() {\n    return null\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleBackgroundClip.borderBox = new StyleBackgroundClip({\n  doesIncludeBorders: true,\n  doesIncludePadding: true,\n})\nStyleBackgroundClip.borderBox.serialize = () => `borderBox`\n\nStyleBackgroundClip.paddingBox = new StyleBackgroundClip({ doesIncludePadding: true })\nStyleBackgroundClip.paddingBox.serialize = () => `paddingBox`\n\nStyleBackgroundClip.contentBox = new StyleBackgroundClip()\nStyleBackgroundClip.contentBox.serialize = () => `contentBox`\n","export class StyleDecoration {\n  name: any\n  isUnderlined: boolean\n  static underline: StyleDecoration = null\n\n  constructor(name, { isUnderlined = false } = {}) {\n    this.name = name\n\n    this.isUnderlined = isUnderlined\n  }\n\n  serialize() {\n    return this.name\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleDecoration.underline = new StyleDecoration(`underline`, { isUnderlined: true })\n","import * as Yoga from 'typeflex'\n\nexport class StyleDisplay {\n  static flex: StyleDisplay = null\n  static none: StyleDisplay = null\n  toYoga: () => any\n\n  serialize() {\n    return null\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleDisplay.flex = new StyleDisplay()\nStyleDisplay.flex.serialize = () => `flex`\nStyleDisplay.flex.toYoga = () => Yoga.DISPLAY_FLEX\n\nStyleDisplay.none = new StyleDisplay()\nStyleDisplay.none.serialize = () => `none`\nStyleDisplay.none.toYoga = () => Yoga.DISPLAY_NONE\n","import * as Yoga from 'typeflex'\n\nexport class StyleFlexAlignment {\n  static auto: StyleFlexAlignment = null\n  static flexStart: StyleFlexAlignment = null\n  static flexEnd: StyleFlexAlignment = null\n  static center: StyleFlexAlignment = null\n  static spaceBetween: StyleFlexAlignment = null\n  static spaceAround: StyleFlexAlignment = null\n  static stretch: StyleFlexAlignment = null\n  toYoga: () => any\n\n  serialize() {\n    return null\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleFlexAlignment.auto = new StyleFlexAlignment()\nStyleFlexAlignment.auto.serialize = () => `auto`\nStyleFlexAlignment.auto.toYoga = () => Yoga.ALIGN_AUTO\n\nStyleFlexAlignment.flexStart = new StyleFlexAlignment()\nStyleFlexAlignment.flexStart.serialize = () => `flexStart`\nStyleFlexAlignment.flexStart.toYoga = () => Yoga.ALIGN_FLEX_START\n\nStyleFlexAlignment.flexEnd = new StyleFlexAlignment()\nStyleFlexAlignment.flexEnd.serialize = () => `flexEnd`\nStyleFlexAlignment.flexEnd.toYoga = () => Yoga.ALIGN_FLEX_END\n\nStyleFlexAlignment.center = new StyleFlexAlignment()\nStyleFlexAlignment.center.serialize = () => `center`\nStyleFlexAlignment.center.toYoga = () => Yoga.ALIGN_CENTER\n\nStyleFlexAlignment.spaceBetween = new StyleFlexAlignment()\nStyleFlexAlignment.spaceBetween.serialize = () => `spaceBetween`\nStyleFlexAlignment.spaceBetween.toYoga = () => Yoga.ALIGN_SPACE_BETWEEN\n\nStyleFlexAlignment.spaceAround = new StyleFlexAlignment()\nStyleFlexAlignment.spaceAround.serialize = () => `spaceAround`\nStyleFlexAlignment.spaceAround.toYoga = () => Yoga.ALIGN_SPACE_AROUND\n\nStyleFlexAlignment.stretch = new StyleFlexAlignment()\nStyleFlexAlignment.stretch.serialize = () => `stretch`\nStyleFlexAlignment.stretch.toYoga = () => Yoga.ALIGN_STRETCH\n","import * as Yoga from 'typeflex'\n\nexport class StyleFlexDirection {\n  static row: StyleFlexDirection = null\n  static rowReverse: StyleFlexDirection = null\n  static column: StyleFlexDirection = null\n  static columnReverse: StyleFlexDirection = null\n  toYoga: () => any\n\n  serialize() {\n    return null\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleFlexDirection.row = new StyleFlexDirection()\nStyleFlexDirection.row.serialize = () => `row`\nStyleFlexDirection.row.toYoga = () => Yoga.FLEX_DIRECTION_ROW\n\nStyleFlexDirection.rowReverse = new StyleFlexDirection()\nStyleFlexDirection.rowReverse.serialize = () => `rowReverse`\nStyleFlexDirection.rowReverse.toYoga = () => Yoga.FLEX_DIRECTION_ROW_REVERSE\n\nStyleFlexDirection.column = new StyleFlexDirection()\nStyleFlexDirection.column.serialize = () => `column`\nStyleFlexDirection.column.toYoga = () => Yoga.FLEX_DIRECTION_COLUMN\n\nStyleFlexDirection.columnReverse = new StyleFlexDirection()\nStyleFlexDirection.columnReverse.serialize = () => `columnReverse`\nStyleFlexDirection.columnReverse.toYoga = () => Yoga.FLEX_DIRECTION_COLUMN_REVERSE\n","import * as Yoga from 'typeflex'\n\nexport class StyleFlexJustify {\n  static flexStart: StyleFlexJustify = null\n  static flexEnd: StyleFlexJustify = null\n  static center: StyleFlexJustify = null\n  static spaceBetween: StyleFlexJustify = null\n  static spaceAround: StyleFlexJustify = null\n  static spaceEvenly: StyleFlexJustify = null\n\n  toYoga: () => any\n\n  serialize() {\n    return null\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleFlexJustify.flexStart = new StyleFlexJustify()\nStyleFlexJustify.flexStart.serialize = () => 'flexStart'\nStyleFlexJustify.flexStart.toYoga = () => Yoga.JUSTIFY_FLEX_START\n\nStyleFlexJustify.flexEnd = new StyleFlexJustify()\nStyleFlexJustify.flexEnd.serialize = () => 'flexEnd'\nStyleFlexJustify.flexEnd.toYoga = () => Yoga.JUSTIFY_FLEX_END\n\nStyleFlexJustify.center = new StyleFlexJustify()\nStyleFlexJustify.center.serialize = () => 'center'\nStyleFlexJustify.center.toYoga = () => Yoga.JUSTIFY_CENTER\n\nStyleFlexJustify.spaceBetween = new StyleFlexJustify()\nStyleFlexJustify.spaceBetween.serialize = () => 'spaceBetween'\nStyleFlexJustify.spaceBetween.toYoga = () => Yoga.JUSTIFY_SPACE_BETWEEN\n\nStyleFlexJustify.spaceAround = new StyleFlexJustify()\nStyleFlexJustify.spaceAround.serialize = () => 'spaceAround'\nStyleFlexJustify.spaceAround.toYoga = () => Yoga.JUSTIFY_SPACE_AROUND\n\nStyleFlexJustify.spaceEvenly = new StyleFlexJustify()\nStyleFlexJustify.spaceEvenly.serialize = () => 'spaceEvenly'\nStyleFlexJustify.spaceEvenly.toYoga = () => Yoga.JUSTIFY_SPACE_EVENLY\n","export class StyleOverflowWrap {\n  doesBreakWords: boolean\n  static normal: StyleOverflowWrap = null\n  static breakWord: StyleOverflowWrap = null\n\n  constructor({ doesBreakWords = false } = {}) {\n    this.doesBreakWords = doesBreakWords\n  }\n\n  serialize() {\n    return null\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleOverflowWrap.normal = new StyleOverflowWrap()\nStyleOverflowWrap.normal.serialize = () => `normal`\n\nStyleOverflowWrap.breakWord = new StyleOverflowWrap({ doesBreakWords: true })\nStyleOverflowWrap.breakWord.serialize = () => `breakWord`\n","import * as Yoga from 'typeflex'\n\nexport class StylePosition {\n  isPositioned: boolean\n  isAbsolutelyPositioned: boolean\n  isScrollAware: boolean\n  static relative: StylePosition = null\n  static sticky: StylePosition = null\n  static absolute: StylePosition = null\n  static fixed: StylePosition = null\n\n  toYoga: () => any\n\n  constructor({\n    isPositioned = false,\n    isAbsolutelyPositioned = false,\n    isScrollAware = false,\n  } = {}) {\n    this.isPositioned = isPositioned\n    this.isAbsolutelyPositioned = isAbsolutelyPositioned\n    this.isScrollAware = isScrollAware\n  }\n\n  serialize() {\n    return null\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStylePosition.relative = new StylePosition({ isPositioned: true, isScrollAware: true })\nStylePosition.relative.serialize = () => `relative`\nStylePosition.relative.toYoga = () => Yoga.POSITION_TYPE_RELATIVE\n\nStylePosition.sticky = new StylePosition({ isPositioned: true, isScrollAware: true })\nStylePosition.sticky.serialize = () => `sticky`\nStylePosition.sticky.toYoga = () => Yoga.POSITION_TYPE_RELATIVE\n\nStylePosition.absolute = new StylePosition({\n  isPositioned: true,\n  isAbsolutelyPositioned: true,\n  isScrollAware: true,\n})\nStylePosition.absolute.serialize = () => `absolute`\nStylePosition.absolute.toYoga = () => Yoga.POSITION_TYPE_ABSOLUTE\n\nStylePosition.fixed = new StylePosition({ isPositioned: true, isAbsolutelyPositioned: true })\nStylePosition.fixed.serialize = () => `fixed`\nStylePosition.fixed.toYoga = () => Yoga.POSITION_TYPE_ABSOLUTE\n","export class StyleWhiteSpace {\n  name: any\n  doesCollapse: boolean\n  doesDemoteNewlines: boolean\n  doesWrap: boolean\n  static normal: StyleWhiteSpace = null\n  static noWrap: StyleWhiteSpace = null\n  static pre: StyleWhiteSpace = null\n  static preWrap: StyleWhiteSpace = null\n  static preLine: StyleWhiteSpace = null\n\n  constructor(name, { doesCollapse = false, doesDemoteNewlines = false, doesWrap = false } = {}) {\n    this.name = name\n\n    this.doesCollapse = doesCollapse\n    this.doesDemoteNewlines = doesDemoteNewlines\n    this.doesWrap = doesWrap\n  }\n\n  serialize() {\n    return this.name\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleWhiteSpace.normal = new StyleWhiteSpace(`normal`, {\n  doesCollapse: true,\n  doesDemoteNewlines: true,\n  doesWrap: true,\n})\nStyleWhiteSpace.noWrap = new StyleWhiteSpace(`noWrap`, {\n  doesCollapse: true,\n  doesDemoteNewlines: true,\n})\nStyleWhiteSpace.pre = new StyleWhiteSpace(`pre`, {})\nStyleWhiteSpace.preWrap = new StyleWhiteSpace(`preWrap`, { doesWrap: true })\nStyleWhiteSpace.preLine = new StyleWhiteSpace(`preLine`, { doesCollapse: true, doesWrap: true })\n","export class StyleOverflow {\n  doesHideOverflow: boolean\n  static visible: StyleOverflow = null\n  static hidden: StyleOverflow = null\n\n  constructor({ doesHideOverflow = false } = {}) {\n    this.doesHideOverflow = doesHideOverflow\n  }\n\n  serialize() {\n    return null\n  }\n\n  inspect() {\n    return this.serialize()\n  }\n}\n\nStyleOverflow.visible = new StyleOverflow()\nStyleOverflow.visible.serialize = () => `visible`\n\nStyleOverflow.hidden = new StyleOverflow({ doesHideOverflow: true })\nStyleOverflow.hidden.serialize = () => `hidden`\n","import { Signal } from '@angular/core'\nimport * as _ from 'lodash-es'\nimport * as Yoga from 'typeflex'\nimport { TermElement } from '../dom/Element'\nimport { StyleHandler, StyleValue, } from '../dom/StyleHandler'\nimport { character, color, length, number } from './styleParsers'\nimport {\n  dirtyClipping,\n  dirtyLayout,\n  dirtyRenderList,\n  dirtyRendering,\n  forwardToTextLayout,\n  forwardToYoga,\n  onNullSwitch,\n} from './styleTriggers'\nimport { StyleAlignment } from './types/StyleAlignment'\nimport { StyleBackgroundClip } from './types/StyleBackgroundClip'\nimport { StyleDecoration } from './types/StyleDecoration'\nimport { StyleDisplay } from './types/StyleDisplay'\nimport { StyleFlexAlignment } from './types/StyleFlexAlignment'\nimport { StyleFlexDirection } from './types/StyleFlexDirection'\nimport { StyleFlexJustify } from './types/StyleFlexJustify'\nimport { StyleOverflowWrap } from './types/StyleOverflowWrap'\nimport { StylePosition } from './types/StylePosition'\nimport { StyleWeight } from './types/StyleWeight'\nimport { StyleWhiteSpace } from './types/StyleWhiteSpace'\nimport { assert } from '../../../../../utils/utils'\nimport { StyleOverflow } from './types/StyleOverflow'\n\nlet simple = ['+', '+', '+', '+', '-', '|']\nlet modern = ['┌', '┐', '└', '┘', '─', '│']\nlet strong = ['┏', '┓', '┗', '┛', '━', '┃']\nlet double = ['╔', '╗', '╚', '╝', '═', '║']\nlet block = ['▄', '▄', '▀', '▀', '▄', '█', '▀', '█']\nlet rounded = ['╭', '╮', '╰', '╯', '─', '│']\n\nconst borders = { simple, modern, strong, double, block, rounded }\n\nexport type StyleKey = keyof StyleValue\n\nexport interface StyleProperty {\n  parsers: any[]\n  triggers?: ((node?: TermElement, newValue?: any, oldValue?: any) => void)[]\n  initial: any\n  default?: any\n}\n\nexport let styles: { [key: string]: StyleProperty } = {\n  display: {\n    parsers: [_.pick(StyleDisplay, 'flex', 'none')],\n    triggers: [dirtyLayout, dirtyRenderList, forwardToYoga('setDisplay', forwardToYoga.value)],\n    initial: 'flex',\n    default: 'flex',\n  },\n\n  alignContent: {\n    parsers: [\n      _.pick(\n        StyleFlexAlignment,\n        'flexStart',\n        'flexEnd',\n        'center',\n        'spaceBetween',\n        'spaceAround',\n        'stretch'\n      ),\n    ],\n    triggers: [dirtyLayout, forwardToYoga('setAlignContent', forwardToYoga.value)],\n    initial: 'flexStart',\n  },\n\n  alignItems: {\n    parsers: [\n      _.pick(\n        StyleFlexAlignment,\n        'flexStart',\n        'flexEnd',\n        'center',\n        'stretch',\n        'spaceAround',\n        'spaceBetween'\n      ),\n    ],\n    triggers: [dirtyLayout, forwardToYoga('setAlignItems', forwardToYoga.value)],\n    initial: 'flexStart',\n  },\n\n  alignSelf: {\n    parsers: [\n      _.pick(\n        StyleFlexAlignment,\n        'auto',\n        'flexStart',\n        'flexEnd',\n        'center',\n        'stretch',\n        'spaceAround',\n        'spaceBetween'\n      ),\n    ],\n    triggers: [dirtyLayout, forwardToYoga('setAlignSelf', forwardToYoga.value)],\n    initial: 'auto',\n  },\n\n  justifyContent: {\n    parsers: [\n      _.pick(\n        StyleFlexJustify,\n        'flexStart',\n        'flexEnd',\n        'center',\n        'spaceBetween',\n        'spaceAround',\n        'spaceEvenly'\n      ),\n    ],\n    triggers: [dirtyLayout, forwardToYoga('setJustifyContent', forwardToYoga.value)],\n    initial: 'flexStart',\n  },\n\n  flexDirection: {\n    parsers: [_.pick(StyleFlexDirection, 'row', 'column', 'rowReverse', 'columnReverse')],\n    triggers: [dirtyLayout, forwardToYoga('setFlexDirection', forwardToYoga.value)],\n    initial: 'column',\n  },\n\n  position: {\n    parsers: [_.pick(StylePosition, 'relative', 'sticky', 'absolute', 'fixed')],\n    triggers: [dirtyLayout, forwardToYoga('setPositionType', forwardToYoga.value)],\n    initial: 'relative',\n  },\n\n  left: {\n    parsers: [length, length.rel, length.autoNaN],\n    triggers: [dirtyLayout, forwardToYoga('setPosition', Yoga.EDGE_LEFT, forwardToYoga.value)],\n    initial: 'auto',\n  },\n\n  right: {\n    parsers: [length, length.rel, length.autoNaN],\n    triggers: [dirtyLayout, forwardToYoga('setPosition', Yoga.EDGE_RIGHT, forwardToYoga.value)],\n    initial: 'auto',\n  },\n\n  top: {\n    parsers: [length, length.rel, length.autoNaN],\n    triggers: [dirtyLayout, forwardToYoga('setPosition', Yoga.EDGE_TOP, forwardToYoga.value)],\n    initial: 'auto',\n  },\n\n  bottom: {\n    parsers: [length, length.rel, length.autoNaN],\n    triggers: [dirtyLayout, forwardToYoga('setPosition', Yoga.EDGE_BOTTOM, forwardToYoga.value)],\n    initial: 'auto',\n  },\n\n  zIndex: {\n    parsers: [number, null],\n    triggers: [dirtyRenderList],\n    initial: null,\n  },\n\n  marginLeft: {\n    parsers: [length, length.rel, length.auto],\n    triggers: [dirtyLayout, forwardToYoga('setMargin', Yoga.EDGE_LEFT, forwardToYoga.value)],\n    initial: 0,\n  },\n\n  marginRight: {\n    parsers: [length, length.rel, length.auto],\n    triggers: [dirtyLayout, forwardToYoga('setMargin', Yoga.EDGE_RIGHT, forwardToYoga.value)],\n    initial: 0,\n  },\n\n  marginTop: {\n    parsers: [length, length.rel, length.auto],\n    triggers: [dirtyLayout, forwardToYoga('setMargin', Yoga.EDGE_TOP, forwardToYoga.value)],\n    initial: 0,\n  },\n\n  marginBottom: {\n    parsers: [length, length.rel, length.auto],\n    triggers: [dirtyLayout, forwardToYoga('setMargin', Yoga.EDGE_BOTTOM, forwardToYoga.value)],\n    initial: 0,\n  },\n\n  flexGrow: {\n    parsers: [number],\n    triggers: [dirtyLayout, forwardToYoga('setFlexGrow', value => value)],\n    initial: 0,\n  },\n\n  flexShrink: {\n    parsers: [number],\n    triggers: [dirtyLayout, forwardToYoga('setFlexShrink', value => value)],\n    initial: 1,\n  },\n\n  flexBasis: {\n    parsers: [length, length.rel, length.autoNaN],\n    triggers: [dirtyLayout, forwardToYoga('setFlexBasis', forwardToYoga.value)],\n    initial: 'auto',\n  },\n\n  width: {\n    parsers: [length, length.rel, length.autoNaN],\n    triggers: [dirtyLayout, forwardToYoga('setWidth', forwardToYoga.value)],\n    initial: 'auto',\n  },\n\n  height: {\n    parsers: [length, length.rel, length.autoNaN],\n    triggers: [dirtyLayout, forwardToYoga('setHeight', forwardToYoga.value)],\n    initial: 'auto',\n  },\n\n  minWidth: {\n    parsers: [length, length.rel],\n    triggers: [dirtyLayout, forwardToYoga('setMinWidth', forwardToYoga.value)],\n    initial: 0,\n  },\n\n  minHeight: {\n    parsers: [length, length.rel, length.autoNaN],\n    triggers: [dirtyLayout, forwardToYoga('setMinHeight', forwardToYoga.value)],\n    initial: 0,\n  },\n\n  maxWidth: {\n    parsers: [length, length.rel, length.infinity],\n    triggers: [dirtyLayout, forwardToYoga('setMaxWidth', forwardToYoga.value)],\n    initial: Infinity,\n  },\n\n  maxHeight: {\n    parsers: [length, length.rel, length.infinity],\n    triggers: [dirtyLayout, forwardToYoga('setMaxHeight', forwardToYoga.value)],\n    initial: Infinity,\n  },\n\n  overflow: {\n    parsers: [_.pick(StyleOverflow, 'visible', 'hidden')],\n    triggers: [dirtyClipping],\n    initial: 'inherit',\n    default: 'visible',\n  },\n\n  borderLeftCharacter: {\n    parsers: [character, null],\n    triggers: [\n      onNullSwitch(dirtyLayout),\n      dirtyRendering,\n      forwardToYoga('setBorder', Yoga.EDGE_LEFT, value => (value !== null ? 1 : 0)),\n    ],\n    initial: null,\n  },\n\n  borderRightCharacter: {\n    parsers: [character, null],\n    triggers: [\n      onNullSwitch(dirtyLayout),\n      dirtyRendering,\n      forwardToYoga('setBorder', Yoga.EDGE_RIGHT, value => (value !== null ? 1 : 0)),\n    ],\n    initial: null,\n  },\n\n  borderTopCharacter: {\n    parsers: [character, null],\n    triggers: [\n      onNullSwitch(dirtyLayout),\n      dirtyRendering,\n      forwardToYoga('setBorder', Yoga.EDGE_TOP, value => (value !== null ? 1 : 0)),\n    ],\n    initial: null,\n  },\n\n  borderBottomCharacter: {\n    parsers: [character, null],\n    triggers: [\n      onNullSwitch(dirtyLayout),\n      dirtyRendering,\n      forwardToYoga('setBorder', Yoga.EDGE_BOTTOM, value => (value !== null ? 1 : 0)),\n    ],\n    initial: null,\n  },\n\n  borderTopLeftCharacter: {\n    parsers: [character, null],\n    triggers: [onNullSwitch(dirtyLayout), dirtyRendering],\n    initial: null,\n  },\n\n  borderTopRightCharacter: {\n    parsers: [character, null],\n    triggers: [onNullSwitch(dirtyLayout), dirtyRendering],\n    initial: null,\n  },\n\n  borderBottomLeftCharacter: {\n    parsers: [character, null],\n    triggers: [onNullSwitch(dirtyLayout), dirtyRendering],\n    initial: null,\n  },\n\n  borderBottomRightCharacter: {\n    parsers: [character, null],\n    triggers: [onNullSwitch(dirtyLayout), dirtyRendering],\n    initial: null,\n  },\n\n  paddingLeft: {\n    parsers: [length, length.rel],\n    triggers: [dirtyLayout, forwardToYoga('setPadding', Yoga.EDGE_LEFT, forwardToYoga.value)],\n    initial: 0,\n  },\n\n  paddingRight: {\n    parsers: [length, length.rel],\n    triggers: [dirtyLayout, forwardToYoga('setPadding', Yoga.EDGE_RIGHT, forwardToYoga.value)],\n    initial: 0,\n  },\n\n  paddingTop: {\n    parsers: [length, length.rel],\n    triggers: [dirtyLayout, forwardToYoga('setPadding', Yoga.EDGE_TOP, forwardToYoga.value)],\n    initial: 0,\n  },\n\n  paddingBottom: {\n    parsers: [length, length.rel],\n    triggers: [dirtyLayout, forwardToYoga('setPadding', Yoga.EDGE_BOTTOM, forwardToYoga.value)],\n    initial: 0,\n  },\n\n  fontWeight: {\n    parsers: [_.pick(StyleWeight, 'normal', 'bold')],\n    triggers: [dirtyRendering],\n    initial: 'normal',\n  },\n\n  textAlign: {\n    parsers: [_.pick(StyleAlignment, 'left', 'center', 'right', 'justify')],\n    triggers: [dirtyRendering, forwardToTextLayout('justifyText', value => value.isJustified)],\n    initial: 'left',\n  },\n\n  textDecoration: {\n    parsers: [_.pick(StyleDecoration, 'underline'), null],\n    triggers: [dirtyRendering],\n    initial: null,\n  },\n\n  whiteSpace: {\n    parsers: [_.pick(StyleWhiteSpace, 'normal', 'noWrap', 'pre', 'preWrap', 'preLine')],\n    triggers: [\n      dirtyLayout,\n      forwardToTextLayout('collapseWhitespaces', value => value.doesCollapse),\n      forwardToTextLayout('demoteNewlines', value => value.doesDemoteNewlines),\n      forwardToTextLayout('preserveLeadingSpaces', value => !value.doesCollapse),\n      forwardToTextLayout('preserveTrailingSpaces', value => !value.doesCollapse),\n      forwardToTextLayout('softWrap', value => value.doesWrap),\n    ],\n    initial: 'normal',\n  },\n\n  overflowWrap: {\n    parsers: [_.pick(StyleOverflowWrap, 'normal', 'breakWord')],\n    triggers: [dirtyLayout, forwardToTextLayout('allowWordBreaks', value => value.doesBreakWords)],\n    initial: 'normal',\n  },\n\n  wrap: {\n    parsers: [null, 'wrap', 'truncate-start', 'truncate-middle', 'truncate-end'],\n    triggers: [dirtyLayout, forwardToTextLayout('wrap', value => value)],\n    initial: 'inherit',\n    default: null,\n  },\n\n  color: {\n    parsers: [color, null],\n    triggers: [dirtyRendering],\n    initial: 'inherit',\n    default: null,\n  },\n\n  borderColor: {\n    parsers: [color, null],\n    triggers: [dirtyRendering],\n    initial: null,\n  },\n\n  backgroundClip: {\n    parsers: [_.pick(StyleBackgroundClip, 'borderBox', 'paddingBox', 'contentBox')],\n    triggers: [dirtyRendering],\n    initial: 'borderBox',\n  },\n\n  backgroundColor: {\n    parsers: [color, null],\n    triggers: [dirtyRendering],\n    initial: 'inherit',\n    default: null,\n  },\n\n  backgroundCharacter: {\n    parsers: [character],\n    triggers: [dirtyRendering],\n    initial: ' ',\n  },\n\n  pointerEvents: {\n    parsers: [true, null],\n    triggers: [],\n    initial: true,\n  },\n\n  scroll: {\n    parsers: [null, 'x', 'y', 'xy'],\n    initial: null,\n    default: null,\n  },\n}\n\nexport interface ComputedStyle {\n  /** The name of the computed style. */\n  name: string,\n  /** A list of style keys that this computed style depdends on. */\n  inKeys?: string[]\n  /** A list of style keys that this computed style will produce. */\n  outKeys?: string[]\n  func: (style: StyleHandler, value: any) => StyleValue\n}\n\nexport const computedStyles: { [name: string]: ComputedStyle } = {\n  margin: {\n    name: 'margin',\n    func: (\n      style,\n      [marginTop, marginRight = marginTop, marginBottom = marginTop, marginLeft = marginRight]\n    ) => ({ marginTop, marginRight, marginBottom, marginLeft }),\n  },\n\n  flex: {\n    name: 'flex',\n    func: (style, [flexGrow = 1, flexShrink = 1, flexBasis = 0]) => ({\n      flexGrow,\n      flexShrink,\n      flexBasis,\n    }),\n  },\n\n  border: {\n    name: 'border',\n    func: (style, value) => {\n      const [\n        borderTopLeftCharacter,\n        borderTopRightCharacter,\n        borderBottomLeftCharacter,\n        borderBottomRightCharacter,\n        borderTopCharacter,\n        borderRightCharacter = borderTopCharacter,\n        borderBottomCharacter = borderTopCharacter,\n        borderLeftCharacter = borderRightCharacter,\n      ] = borders[value]\n      return {\n        borderTopLeftCharacter,\n        borderTopRightCharacter,\n        borderBottomLeftCharacter,\n        borderBottomRightCharacter,\n        borderTopCharacter,\n        borderRightCharacter,\n        borderBottomCharacter,\n        borderLeftCharacter,\n      }\n    },\n  },\n\n  padding: {\n    name: 'padding',\n    func: (\n      style,\n      [\n        paddingTop,\n        paddingRight = paddingTop,\n        paddingBottom = paddingTop,\n        paddingLeft = paddingRight,\n      ]\n    ) => ({ paddingTop, paddingRight, paddingBottom, paddingLeft }),\n  },\n\n  background: {\n    name: 'background',\n    func: (\n      style,\n      [\n        backgroundCharacter = style.get('backgroundCharacter'),\n        backgroundColor = style.get('backgroundColor'),\n      ]\n    ) => ({ backgroundCharacter, backgroundColor }),\n  },\n\n  hgrow: {\n    name: 'hgrow',\n    func: (style, value) => grow(style, value, 'horizontal'),\n  },\n\n  vgrow: {\n    name: 'vgrow',\n    func: (style, value) => grow(style, value, 'vertical'),\n  },\n\n  scrollF: {\n    name: 'scrollF',\n    func: (style, value) => {\n      if (value) {\n        if (value == 'x' || value == 'xy') {\n          return { maxWidth: '100%', scroll: value }\n        }\n        if (value == 'y' || value == 'xy') {\n          return { maxHeight: '100%', scroll: value }\n        }\n      } else {\n        return {}\n      }\n    },\n  },\n}\n\nexport function isComputedStyle(key: string) {\n  return Object.keys(computedStyles).includes(key)\n}\n\n/**\n * Looks at the parent flex direction and decides what style to apply to make the node grow along the specified direction.\n * @returns The style to apply to make it grow accordingly.\n */\nfunction grow(\n  style: StyleHandler,\n  value: boolean,\n  direction: 'vertical' | 'horizontal'\n): StyleValue {\n  if (value == false) return {}\n  if (!style.element.parentNode) {\n    // In case `vgrow` is placed on the top level DOM element\n    return {}\n    // throw new Error('cant use grow on an element without a parent')\n  }\n\n  const parentDirection = style.element.parentNode.style.get('flexDirection')\n  assert(parentDirection)\n  if (parentDirection == 'row') {\n    if (direction == 'vertical') {\n      return { alignSelf: 'stretch' }\n    } else {\n      return { flexGrow: 1 }\n    }\n  } else if (parentDirection == 'column') {\n    if (direction == 'horizontal') {\n      return { alignSelf: 'stretch' }\n    } else {\n      return { flexGrow: 1 }\n    }\n  }\n}\n","import * as _ from '@s-libs/micro-dash'\nimport { styles } from '../styleProperties'\nimport { parseRawValue } from './parseRawValue'\n\nexport function parsePropertyValue(propertyName, rawValue) {\n  if (!(propertyName in styles)) {\n    throw new Error(`Failed to parse a style property: '${propertyName}' is not a valid style property.`)\n  }\n\n  let property = styles[propertyName]\n\n  if (_.isUndefined(property.parsers)) {\n    throw new Error(`Failed to parse a style property: '${propertyName}' has no declared parser.`)\n  }\n\n  if (rawValue === `inherit`) {\n    return 'inherit'\n  }\n\n  let styleValue = parseRawValue(rawValue, property.parsers)\n\n  if (_.isUndefined(styleValue)) {\n    throw new Error(`Failed to parse a style property: '${rawValue}' is not a valid value for property '${propertyName}'.`)\n  }\n\n  return styleValue\n}\n","import { ElementRef, Injector, Signal, computed, effect, inject, isSignal } from \"@angular/core\"\nimport * as _ from '@s-libs/micro-dash'\nimport { AnyObject, assert, unwrapIfFunction } from \"../../../../../utils/utils\"\nimport { computedStyles, isComputedStyle, styles } from \"../style/styleProperties\"\nimport { parsePropertyValue } from \"../style/tools/parsePropertyValue\"\nimport { TermElement } from './Element'\n\ntype StyleKey = keyof StyleValue\nexport type Layer = SimpleLayer | ((StyleHandler) => StyleValue) | SignalLayer\ntype SimpleLayer = StyleValue\ntype SignalLayer = Signal<StyleValue>\n\nexport class StyleHandler {\n\n\t/**\n\t * Style layers that are added to the element.\n\t */\n\tlayers: Layer[] = []\n\n\t/**\n\t * Whether the style has been modified since the last update.\n\t */\n\tdirty = false\n\n\tchildLayerDirty = false\n\n\t/**\n\t * Whether the style has been queued for updating in the root TermScreen.\n\t * See TermScreen.queueDirtyStyle and TermScreen.computeStyles.\n\t */\n\twasQueued = false\n\n\t/**\n\t * Properties that are defined on the current element.\n\t * It is the result of adding all the layers together in order.\n\t * It can contain the value 'inherit' which then need to be resolved to the parent value.\n\t */\n\tself: StyleValue = {}\n\n\t/**\n\t * Properties that are inherited from the parent element.\n\t */\n\tinherited: StyleValue = {}\n\n\t/**\n\t * Layers that are gonna be used by each child as their *first* layer.\n\t */\n\tchildLayers: Layer[] = []\n\n\t/**\n\t * Functions that will be called when the style handler is disposed.\n\t */\n\tonDispose: (() => void)[] = []\n\n\tconstructor(public element: TermElement, public injector: Injector) {\n\t\tthis.init()\n\t}\n\n\t/**\n\t * Adds a style layer.\n\t * It can be a simple object, a function that returns an object, or a signal.\n\t *\n\t */\n\tadd(layer: Layer) {\n\t\t{\n\t\t\tconst maybeComputeds = convertComputedKeysToFunctions(layer)\n\t\t\tif (maybeComputeds.length > 1) {\n\t\t\t\tmaybeComputeds.forEach(layer => this.add(layer))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tthis.layers.push(layer)\n\t\tthis.markDirtyAndQueue()\n\n\t\tif (isSignal(layer)) {\n\t\t\tconst e = effect(() => {\n\t\t\t\tlayer()\n\t\t\t\tthis.markDirtyAndQueue()\n\t\t\t}, { injector: this.injector, manualCleanup: true })\n\t\t\tthis.onDispose.push(() => e.destroy())\n\t\t}\n\n\t}\n\n\taddChildLayer(layer: Layer) {\n\t\tthis.childLayers.push(layer)\n\t\tthis.childLayerDirty = true\n\t\tfor (const c of this.element.childNodes) {\n\t\t\tc.style.dirty = true\n\t\t}\n\t\tthis.markDirtyAndQueue()\n\t}\n\n\tmarkDirtyAndQueue() {\n\t\tthis.dirty = true\n\t\tif (this.element.rootNode) {\n\t\t\tthis.wasQueued = this.element.rootNode.queueDirtyStyle(this.element)\n\t\t}\n\t}\n\n\t// // Make sure no parent has changes\n\t// if (checks) {\n\t// \tfor (let node = this.element.parentNode; node; node = node.parentNode) {\n\t// \t\tassert(Object.keys(node.style.dirty).length == 0)\n\t// \t}\n\t// }\n\n\t// assert(!this.dirty)\n\n\n\tgetSelf<K extends StyleKey>(key: K, checks = true): StyleValue[K] {\n\n\t\t// Check layers first\n\t\tif (key in this.self) {\n\t\t\treturn this.self[key]\n\t\t}\n\n\t\t// Then check initial values\n\t\tconst styleInfo = styles[key]\n\t\tassert(styleInfo)\n\n\t\tconst value = styleInfo.initial\n\t\tassert(value !== undefined)\n\t\treturn value\n\t}\n\n\tget<K extends StyleKey>(key: K): StyleValue[K] {\n\t\tconst selfValue = this.getSelf(key)\n\t\tlet value = selfValue\n\t\tif (selfValue == 'inherit') {\n\t\t\tif (this.element.parentNode) {\n\t\t\t\tvalue = getParentKey(this.element, key)\n\t\t\t\tassert(value !== undefined)\n\t\t\t} else {\n\t\t\t\tvalue = styles[key].default\n\t\t\t\tassert(value !== undefined)\n\t\t\t}\n\t\t}\n\t\tassert(value !== 'inherit')\n\t\treturn value\n\t}\n\n\tinit() {\n\t\tfor (const [key, styleInfo] of Object.entries(styles)) {\n\t\t\tconst parentGet = (key) => {\n\t\t\t\treturn getParentKey(this.element, key)\n\t\t\t}\n\n\t\t\tinherit(key, styleInfo.initial, parentGet, this.inherited)\n\t\t\trunTriggers(this.element, key, this.get(key as any))\n\t\t}\n\t}\n\n\tupdate(parentModified: StyleValue = {}, childLayers: Layer[] = []) {\n\t\tconst modified = {}\n\t\tlet newSelf = this.self\n\n\t\tif (this.dirty) {\n\t\t\tconst res = {}\n\t\t\tresolveStyle(this, childLayers, res)\n\t\t\tresolveStyle(this, this.layers, res)\n\t\t\tdiff(this.self, res, modified)\n\t\t\tnewSelf = res\n\t\t}\n\n\t\tconst parentGet = (key) => { return getParentKey(this.element, key) }\n\n\t\tfor (let [key, modifiedValue] of Object.entries(modified)) {\n\t\t\tif (modifiedValue === undefined) {\n\t\t\t\tmodifiedValue = styles[key].initial\n\t\t\t\tmodified[key] = modifiedValue\n\t\t\t}\n\t\t}\n\n\t\tif (parentModified) {\n\t\t\tfor (const [key, value] of Object.entries(parentModified)) {\n\t\t\t\tif (key in this.inherited) {\n\t\t\t\t\tthis.inherited[key] = value\n\t\t\t\t\tassert(value !== undefined)\n\t\t\t\t\tassert(value !== 'inherit')\n\t\t\t\t\tmodified[key] = value\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const [key, value] of Object.entries(modified)) {\n\t\t\t// TODO: if value really changed\n\t\t\tconst realValue = inherit(key, value, parentGet, this.inherited)\n\t\t\trunTriggers(this.element, key, realValue)\n\t\t}\n\n\t\t// total = inherit(self) + inherited\n\n\t\tthis.dirty = false\n\t\tthis.wasQueued = false\n\t\tthis.self = newSelf\n\n\t\tfor (const child of this.element.childNodes) {\n\t\t\tif (this.childLayerDirty || Object.keys(modified).some(key => key in child.style.inherited)) {\n\t\t\t\tchild.style.update(modified, this.childLayers)\n\t\t\t}\n\t\t}\n\n\t\tthis.childLayerDirty = false\n\t}\n\n\treset() {\n\t\tthis.layers = []\n\t\tthis.dirty = false\n\t\tthis.self = {}\n\t\tthis.inherited = {}\n\t}\n\n\tdispose() {\n\t\tfor (const func of this.onDispose) {\n\t\t\tfunc()\n\t\t}\n\t}\n}\n\nfunction assertNoInherit(obj) {\n\tfor (const [key, value] of Object.entries(obj)) {\n\t\tassert(value !== 'inherit')\n\t}\n}\n\nfunction assertNoUndefined(obj) {\n\tfor (const [key, value] of Object.entries(obj)) {\n\t\tassert(value !== undefined)\n\t}\n}\n\nfunction getParentKey(element: TermElement, key: StyleKey) {\n\tif (!element.parentNode) {\n\t\tconst styleInfo = styles[key]\n\t\tassert(styleInfo)\n\n\t\treturn styleInfo.default\n\t}\n\n\treturn element.parentNode.style.get(key)\n}\n\n/**\n * If the selfValue is inherit, gets the real value from the parent.\n * Updates the `inherited` object.\n * @param key - The style property key to handle\n * @param selfValue - The value of the style property on the current element\n * @param parentGet - A function that retrieves the value of a style property from the parent element\n * @param inherited - An object tracking which properties are inherited from parent\n * @returns The resolved value after handling inheritance\n * @throws {AssertionError} If the inherited value is 'inherit'\n */\nfunction inherit(key, selfValue, parentGet, inherited) {\n\tlet value = selfValue\n\tif (selfValue == 'inherit') {\n\t\tvalue = parentGet(key)\n\t\tinherited[key] = value\n\t\tassert(value !== 'inherit')\n\t} else {\n\t\tif (key in inherited) {\n\t\t\tdelete inherited[key]\n\t\t}\n\t}\n\treturn value\n}\n\nfunction runTriggers(element: TermElement, key: string, value: any) {\n\tconst propInfo = styles[key]\n\tassert(propInfo, `couldnt find style key: ${key}`)\n\n\tconst parsedValue = parsePropertyValue(key, value)\n\n\tpropInfo.triggers?.forEach(trigger => {\n\t\ttrigger(element, parsedValue, parsedValue)\n\t})\n}\n\nfunction resolveStyle(style: StyleHandler, layers: Layer[], res: StyleValue) {\n\tfor (const layer of layers) {\n\t\tlet layerValue = layer\n\t\tif (_.isFunction(layer)) {\n\t\t\tlayerValue = layer(style)\n\t\t\tassert(typeof layerValue == 'object', `not a valid style: ${JSON.stringify(layerValue)}`)\n\t\t}\n\t\tfor (const [key, value] of Object.entries(layerValue)) {\n\t\t\tres[key] = value\n\t\t}\n\t}\n}\n\n/**\n * Compares two objects and generates a diff object containing only the changed values.\n * If a property exists in 'b' but not in 'a', it's added to the result.\n * If a property exists in both 'a' and 'b' with different values, the value from 'b' is added to the result.\n * If a property exists in 'a' but not in 'b', it's set to undefined in the result.\n *\n * @param a - The source object to compare against\n * @param b - The object containing new values to compare with\n * @param res - The result object where differences will be stored\n *\n * @example\n * const a = { foo: 1, bar: 2, qux: 5 };\n * const b = { foo: 1, bar: 3, baz: 4 };\n * const result = {};\n * diff(a, b, result)  // result = { bar: 3, baz: 4, qux: undefined }\n */\nexport function diff(a: { [key: string]: any }, b: { [key: string]: any }, res: AnyObject) {\n\tfor (const [key, value] of Object.entries(b)) {\n\t\tif (key in a) {\n\t\t\tif (value !== a[key]) {\n\t\t\t\tres[key] = value\n\t\t\t}\n\t\t} else {\n\t\t\tres[key] = value\n\t\t}\n\t}\n\tfor (const [key, value] of Object.entries(a)) {\n\t\tif (!(key in b)) {\n\t\t\tres[key] = undefined\n\t\t}\n\t}\n}\n\nexport function cond(condition: Signal<any> | any | ((...args) => boolean), style: StyleValue) {\n\treturn computed(() => {\n\t\tif (unwrapIfFunction(condition)) {\n\t\t\treturn unwrapIfFunction(style)\n\t\t} else {\n\t\t\treturn {}\n\t\t}\n\t})\n}\n\nexport function eq(value1, value2) {\n\treturn () => unwrapIfFunction(value1) == unwrapIfFunction(value2)\n}\n\nexport function neq(value1, value2) {\n\treturn () => unwrapIfFunction(value1) != unwrapIfFunction(value2)\n}\n\nexport function ifEq(value1, value2, style) {\n\treturn cond(eq(value1, value2), style)\n}\n\nexport function ifNeq(value1, value2, style) {\n\treturn cond(neq(value1, value2), style)\n}\n\n\nexport function addStyle(layer: Layer) {\n\tconst elementRef = inject(ElementRef)\n\telementRef.nativeElement.style.add(layer)\n}\n\nexport interface StyleValue {\n\tdisplay?: 'flex' | 'none'\n\talignContent?: 'flexStart' | 'flexEnd' | 'center' | 'spaceBetween' | 'spaceAround' | 'stretch'\n\talignItems?: 'flexStart' | 'flexEnd' | 'center' | 'baseline' | 'stretch'\n\talignSelf?: 'auto' | 'flexStart' | 'flexEnd' | 'center' | 'baseline' | 'stretch'\n\tflexDirection?: 'row' | 'column' | 'rowReverse' | 'columnReverse'\n\tposition?: 'relative' | 'sticky' | 'absolute' | 'fixed'\n\tleft?: string | number\n\tright?: string | number\n\ttop?: string | number\n\tbottom?: string | number\n\tzIndex?: number\n\tmargin?: string | number | (string | number)[]\n\tmarginLeft?: string | number\n\tmarginRight?: string | number\n\tmarginTop?: string | number\n\tmarginBottom?: string | number\n\t// flex?: (string)[],\n\tflexGrow?: number\n\tflexShrink?: number\n\tflexBasis?: number\n\twidth?: string | number\n\theight?: number | string\n\tminWidth?: string | number\n\tminHeight?: string | number\n\tmaxWidth?: string | number\n\tmaxHeight?: string | number\n\toverflow?: 'visible' | 'hidden'\n\tborder?: 'simple' | 'modern' | 'strong' | 'double' | 'block' | 'rounded'\n\tborderLeftCharacter?: string | null\n\tborderRightCharacter?: string | null\n\tborderTopCharacter?: string | null\n\tborderBottomCharacter?: string | null\n\tborderTopLeftCharacter?: string | null\n\tborderTopRightCharacter?: string | null\n\tborderBottomLeftCharacter?: string | null\n\tborderBottomRightCharacter?: string | null\n\tpadding?: (string | number)[]\n\tpaddingLeft?: string | number\n\tpaddingRight?: string | number\n\tpaddingTop?: string | number\n\tpaddingBottom?: string | number\n\tfontWeight?: 'normal' | 'bold' | 'fainted'\n\ttextAlign?: 'left' | 'center' | 'right' | 'justify'\n\ttextDecoration?: 'underline' | null\n\t// whiteSpace?: ,\n\t// overflowWrap?: ,\n\tcolor?: Color\n\tborderColor?: Color\n\t// background?,\n\tbackgroundClip?: 'borderBox' | 'paddingBox' | 'contentBox'\n\tbackgroundColor?: Color\n\tbackgroundCharacter?: string\n\t// focusEvents?: boolean\n\tpointerEvents?: boolean\n\n\tscroll?: 'x' | 'y' | 'xy' | null\n\tscrollF?: 'x' | 'y' | 'xy' | null\n\thgrow?: boolean\n\tvgrow?: boolean\n\tjustifyContent?: 'flexStart' | 'flexEnd' | 'center' | 'baseline' | 'stretch'\n\twrap?: 'wrap' | null\n}\n\nexport type Color = string | null\n\n\n/**\n * Allows to have computed styles like { vgrow: true } as data\n * Will be removed once Angular allows passing a variable [vgrowFunction] in the template directly\n *\n * {\n * \tvgrow: true,\n * \tbackground: 'red'\n * }\n *\n * functions:  [vgrow,]\n * res: {background: 'red'}\n *\n * return [{background: 'red'}, vgrow]\n**/\nfunction convertComputedKeysToFunctions(layer: Layer): Layer[] {\n\n\tlet normalKeys = {}\n\tlet computeds = []\n\tObject.entries(layer).forEach(([key, value]) => {\n\t\tif (isComputedStyle(key)) {\n\t\t\tconst func = computedStyles[key]\n\t\t\tassert(func)\n\t\t\tcomputeds.push((style) => func.func(style, value))\n\t\t} else {\n\t\t\tnormalKeys[key] = layer[key]\n\t\t}\n\t})\n\n\tif (computeds.length > 0) {\n\t\treturn [normalKeys, ...computeds]\n\t} else {\n\t\treturn [layer]\n\t}\n}\n","import { style } from '../../../../../term-strings/core'\nimport { StyleValue } from './StyleHandler'\n\nexport namespace Position {\n  export function isAbsolutelyPositioned(value: StyleValue['position']) {\n    switch (value) {\n      case 'absolute':\n        return true\n      case 'fixed':\n        return true\n      default:\n        return false\n    }\n  }\n}\n\nexport namespace Color {\n  export function front(value): string {\n    return style.color.front(value)\n  }\n\n  export function back(value): string {\n    return style.color.back(value)\n  }\n}\n\nexport namespace BackgroundClip {\n  export function doesIncludeBorders(value) {\n    switch (value) {\n      case 'borderBox':\n        return true\n      case 'paddingBox':\n        return true\n      case 'contentBox':\n        return false\n      default: {\n        debugger\n        throw new Error('doesIncludeBorders: invalid value')\n      }\n    }\n  }\n}\n","export let flags = {\n    ELEMENT_HAS_DIRTY_NODE_LIST: 1 << 0,\n    // ELEMENT_HAS_DIRTY_FOCUS_LIST: 1 << 1,\n    ELEMENT_HAS_DIRTY_RENDER_LIST: 1 << 2,\n\n    ELEMENT_HAS_DIRTY_LAYOUT: 1 << 3,\n    ELEMENT_HAS_DIRTY_CLIPPING: 1 << 4,\n\n    ELEMENT_HAS_DIRTY_LAYOUT_CHILDREN: 1 << 5,\n    ELEMENT_HAS_DIRTY_CLIPPING_CHILDREN: 1 << 6,\n    ELEMENT_IS_DIRTY: 1 << 0 && 1 << 1 && 1 << 2 && 1 << 3 && 1 << 4 && 1 << 5,\n}\n","import { Injector, inject } from \"@angular/core\"\nimport * as _ from \"@s-libs/micro-dash\"\nimport * as Yoga from 'typeflex'\nimport { style } from '../../../../../term-strings/core'\nimport { assert, assertDebug } from \"../../../../../utils/utils\"\nimport type * as TYoga from '../../../yoga-types/index'\nimport { Event } from '../misc/Event'\nimport { Point } from '../misc/Point'\nimport { Rect } from '../misc/Rect'\nimport { Node } from './Node'\nimport { StyleHandler } from \"./StyleHandler\"\nimport { BackgroundClip, Color, Position, } from \"./StyleHelpers\"\nimport { flags } from './flags'\n\nconst yogaConfig = Yoga.Config.create() as TYoga.Config\n// yogaConfig.setPointScaleFactor(2)\n\nconst cleanNode = Yoga.Node.createWithConfig(yogaConfig)\n\nexport class TermElement extends Node<TermElement> {\n  name = 'element'\n  flags = flags.ELEMENT_HAS_DIRTY_NODE_LIST | flags.ELEMENT_HAS_DIRTY_LAYOUT\n  dirtyRects: Rect[] = []\n  nodeList: TermElement[] = []\n  renderList: TermElement[] = []\n  activeElement: TermElement = null\n  /** Position & size of the whole element inside its parent. Comes from Yoga.getComputed{Left,Top,Width,Height} */\n  elementRect: Rect = new Rect()\n  /** Position & size of the content box inside the element. Comes from Yoga.getComputedBorder(...) */\n  contentRect: Rect = new Rect()\n  /** Position & size of the element children box | note: xy 'x' and 'y' are \"wrong\", in that they are not the actual box offset (which would always be 0;0), but rather the scroll offset (ie = scrollLeft / scrollTop) */\n  scrollRect: Rect = new Rect()\n  /** Position & size of the element inside the viewport */\n  elementWorldRect: Rect = new Rect()\n  /** Position & size of the element content inside the viewport */\n  contentWorldRect: Rect = new Rect()\n  /** Position & size of the actual visible box inside the element */\n  elementClipRect: Rect = this.elementWorldRect\n  /** Used to check if the caret is visible */\n  contentClipRect: Rect = this.contentWorldRect\n  /** Position & size of the visible box that contains xy the element itself and each of its children */\n  elementBoundingRect: Rect = null\n  caret: Point\n\n  style: StyleHandler\n  yogaNode: TYoga.Node\n\n  constructor() {\n    super()\n\n    this.yogaNode = Yoga.Node.createWithConfig(yogaConfig)\n\n    // @ts-ignore\n    this.yogaNode.setMeasureFunc((node, maxWidth, widthMode, maxHeight, heightMode) => this.getPreferredSize(maxWidth, widthMode, maxHeight, heightMode))\n    this.style = new StyleHandler(this, inject(Injector))\n\n    this.setPropertyTrigger('caret', null, {\n      validate: value => value === null || value instanceof Point,\n      trigger: value => {\n        this.rootNode?.requestUpdates()\n      },\n    })\n\n  }\n\n  reset() {\n    super.reset()\n    // this.yogaNode = Yoga.Node.createWithConfig(yogaConfig)\n    this.yogaNode.copyStyle(cleanNode)\n\n    // @ts-ignore\n    this.yogaNode.setMeasureFunc((node, maxWidth, widthMode, maxHeight, heightMode) => this.getPreferredSize(maxWidth, widthMode, maxHeight, heightMode))\n\n    // this.style = new StyleHandler(this, inject(Injector))\n    // this.yogaNode.copyStyle(cleanNode.node)\n    this.style.reset()\n\n    this.dirtyRects = []\n    this.nodeList = []\n    this.renderList = []\n    this.activeElement = null\n    resetRect(this.elementRect)\n    resetRect(this.contentRect)\n    resetRect(this.scrollRect)\n    resetRect(this.elementWorldRect)\n    resetRect(this.contentWorldRect)\n    this.elementClipRect = this.elementWorldRect\n    this.contentClipRect = this.contentWorldRect\n    this.elementBoundingRect = null\n    this.caret = null\n  }\n\n  toString({ depth = 0 } = {}) {\n    // let tag = '${this.nodeName}#${this.id}${Array.from(this.classList).map(className => '.${className}').join('')}'\n    let tag = `${this.nodeName}#${this.id}`\n\n    if (depth <= 0) {\n      return `<${tag}>`\n    } else if (this.childNodes.length === 0) {\n      return `<${tag} />`\n    } else {\n      let children = []\n\n      for (let child of this.childNodes)\n        children.push(child.toString({ depth: depth - 1 }).replace(/^/gm, '  '))\n\n      return `<${tag}>\\n${children.join('\\n')}\\n</${tag}>`\n    }\n  }\n\n  appendChild(node: TermElement) {\n    if (!(node instanceof TermElement))\n      throw new Error(`Failed to execute 'appendChild': Parameter 1 is not of type 'Element'.`)\n\n    super.appendChild(node)\n  }\n\n  insertBefore(node: TermElement, referenceNode: TermElement) {\n    if (!(node instanceof TermElement))\n      throw new Error(`Failed to execute 'insertBefore': Parameter 1 is not of type 'Element'.`)\n\n    super.insertBefore(node, referenceNode)\n  }\n\n  linkBefore(node: TermElement, referenceNode: TermElement) {\n    // node.flushDirtyRects()\n\n    super.linkBefore(node, referenceNode)\n\n    this.yogaNode.unsetMeasureFunc()\n    this.yogaNode.insertChild(node.yogaNode, this.childNodes.indexOf(node))\n\n    this.setDirtyLayoutFlag()\n    this.setDirtyClippingFlag()\n\n    this.rootNode?.setDirtyNodeListFlag()\n    this.rootNode?.setDirtyRenderListFlag()\n\n    if (this.rootNode) {\n      node.traverse((n: TermElement) => {\n        if (n.style.dirty && !n.style.wasQueued) {\n          this.rootNode.queueDirtyStyle(n)\n        }\n      })\n    }\n\n    node.clearDirtyNodeListFlag()\n    node.clearDirtyRenderListFlag()\n  }\n\n  removeChild(node: TermElement) {\n    if (!(node instanceof TermElement))\n      throw new Error(`Failed to execute 'removeChild': Parameter 1 is not of type 'Element'.`)\n\n    super.removeChild(node)\n\n    this.yogaNode.removeChild(node.yogaNode)\n    // yes it's important\n    this.yogaNode.calculateLayout()\n\n    if (this.childNodes.length === 0) {\n      // @ts-ignore\n      this.yogaNode.setMeasureFunc((node, maxWidth, widthMode, maxHeight, heightMode) => this.getPreferredSize(maxWidth, widthMode, maxHeight, heightMode))\n    }\n\n    this.setDirtyLayoutFlag()\n    this.setDirtyClippingFlag()\n\n    // (this.rootNode as unknown as TermScreen).detachedNodes.push(node)\n\n    this.rootNode?.setDirtyNodeListFlag()\n    this.rootNode?.setDirtyRenderListFlag()\n\n    node.setDirtyLayoutFlag()\n    node.setDirtyClippingFlag()\n\n    node.setDirtyNodeListFlag()\n    // node.setDirtyFocusListFlag()\n    node.setDirtyRenderListFlag()\n\n    // We need to manually register this rect because since the element will be removed from the tree, we will never iterate over it at the next triggerUpdates\n    this.rootNode?.queueDirtyRect(node.elementBoundingRect)\n  }\n\n  get scrollLeft() {\n    this.triggerUpdates()\n\n    return this.scrollRect.x\n  }\n\n  set scrollLeft(scrollLeft) {\n    this.triggerUpdates()\n\n    let previousScrollLeft = this.scrollRect.x\n    let newScrollLeft = Math.max(\n      0,\n      Math.min(scrollLeft, this.scrollRect.width - this.elementRect.width)\n    )\n\n    if (previousScrollLeft !== newScrollLeft) {\n      this.scrollRect.x = newScrollLeft\n\n      this.setDirtyClippingFlag()\n      this.queueDirtyRect()\n\n      this.dispatchEvent(new Event('scroll'))\n    }\n  }\n\n  get scrollTop() {\n    this.triggerUpdates()\n\n    return this.scrollRect.y\n  }\n\n  set scrollTop(scrollTop) {\n    this.triggerUpdates()\n\n    let previousScrollTop = this.scrollRect.y\n    let newScrollTop = Math.max(\n      0,\n      Math.min(scrollTop, this.scrollRect.height - this.elementRect.height)\n    )\n\n    if (previousScrollTop !== newScrollTop) {\n      this.scrollRect.y = newScrollTop\n\n      this.setDirtyClippingFlag()\n      this.queueDirtyRect()\n\n      this.dispatchEvent(new Event('scroll'))\n    }\n  }\n\n  get scrollWidth() {\n    this.triggerUpdates()\n\n    return this.scrollRect.width\n  }\n\n  get scrollHeight() {\n    this.triggerUpdates()\n\n    return this.scrollRect.height\n  }\n\n  get offsetWidth() {\n    this.triggerUpdates()\n\n    return this.elementRect.width\n  }\n\n  get offsetHeight() {\n    this.triggerUpdates()\n\n    return this.elementRect.height\n  }\n\n  get innerWidth() {\n    this.triggerUpdates()\n\n    return this.contentRect.width\n  }\n\n  get innerHeight() {\n    this.triggerUpdates()\n\n    return this.contentRect.height\n  }\n\n  getCaretCoordinates() {\n    if (this.rootNode !== this as any) {\n      let worldCaret = this.rootNode.getCaretCoordinates()\n\n      return worldCaret\n    } else {\n      if (!this.activeElement || !this.activeElement.contentClipRect || !this.activeElement.caret)\n        return null\n\n      let x =\n        this.activeElement.contentWorldRect.x -\n        this.activeElement.scrollRect.x +\n        this.activeElement.caret.x\n      let y =\n        this.activeElement.contentWorldRect.y -\n        this.activeElement.scrollRect.y +\n        this.activeElement.caret.y\n\n      if (\n        x < this.activeElement.contentClipRect.x ||\n        x >= this.activeElement.contentClipRect.x + this.activeElement.contentClipRect.width\n      )\n        return null\n\n      if (\n        y < this.activeElement.contentClipRect.y ||\n        y >= this.activeElement.contentClipRect.y + this.activeElement.contentClipRect.height\n      )\n        return null\n\n      return new Point({ x, y })\n    }\n  }\n\n  getBoundingClientRect() {\n    this.triggerUpdates()\n\n    return this.elementWorldRect\n  }\n\n  scrollIntoView({\n    align = 'auto',\n    alignX = align,\n    alignY = align,\n    force = false,\n    forceX = force,\n    forceY = force,\n    direction = 'xy',\n  } = {}) {\n    this.triggerUpdates()\n\n    if (!this.parentNode) return\n\n    if (this.caret) {\n      let x = this.elementRect.x + this.contentRect.x + this.caret.x\n      let y = this.elementRect.y + this.contentRect.y + this.caret.y\n\n      this.parentNode.scrollCellIntoView(new Point({ x, y }), {\n        alignX,\n        alignY,\n        forceX,\n        forceY,\n        direction,\n      })\n    } else {\n      let effectiveAlignX = alignX\n      let effectiveAlignY = alignY\n\n      if (effectiveAlignX === 'auto')\n        effectiveAlignX =\n          Math.abs(this.elementRect.x - this.parentNode.scrollLeft) <\n            Math.abs(\n              this.elementRect.x +\n              this.elementRect.width -\n              1 -\n              (this.parentNode.scrollLeft + this.parentNode.elementRect.width - 1)\n            )\n            ? 'start'\n            : 'end'\n\n      if (effectiveAlignY === 'auto')\n        effectiveAlignY =\n          Math.abs(this.elementRect.y - this.parentNode.scrollTop) <\n            Math.abs(\n              this.elementRect.y +\n              this.elementRect.height -\n              1 -\n              (this.parentNode.scrollTop + this.parentNode.elementRect.height - 1)\n            )\n            ? 'start'\n            : 'end'\n\n      let x = this.elementRect.x\n      let y = this.elementRect.y\n\n      if (effectiveAlignX === 'end') x += this.elementRect.width - 1\n      if (effectiveAlignY === 'end') y += this.elementRect.height - 1\n\n      this.parentNode.scrollCellIntoView(new Point({ x, y }), {\n        alignX,\n        alignY,\n        forceX,\n        forceY,\n        direction,\n      })\n    }\n  }\n\n  scrollCellIntoView(\n    position,\n    {\n      align = 'auto',\n      alignX = align,\n      alignY = align,\n      force = false,\n      forceX = force,\n      forceY = force,\n      direction = 'xy',\n    } = {}\n  ) {\n    this.triggerUpdates()\n\n    this.rootNode.computeStyles()\n    const scroll = this.style.get('scroll')\n\n    if (direction?.includes('x') && scroll?.includes('x')) {\n      let effectiveAlignX = alignX\n\n      if (effectiveAlignX === 'auto') {\n        effectiveAlignX =\n          Math.abs(position.x - this.scrollLeft) <\n            Math.abs(position.x - (this.scrollLeft + this.elementRect.width - 1))\n            ? 'start'\n            : 'end'\n      }\n\n      if (\n        forceX ||\n        position.x < this.scrollLeft ||\n        position.x >= this.scrollLeft + this.elementRect.width\n      ) {\n        switch (effectiveAlignX) {\n          case 'start':\n            {\n              this.scrollLeft = position.x\n            }\n            break\n\n          case 'end':\n            {\n              this.scrollLeft = position.x - this.elementRect.width + 1\n            }\n            break\n        }\n      }\n    }\n\n    if (direction?.includes('y') && scroll?.includes('y')) {\n      let effectiveAlignY = alignY\n\n      if (effectiveAlignY === 'auto') {\n        effectiveAlignY =\n          Math.abs(position.y - this.scrollTop) <\n            Math.abs(position.y - (this.scrollTop + this.elementRect.height - 1))\n            ? 'start'\n            : 'end'\n      }\n\n      if (\n        forceY ||\n        position.y < this.scrollTop ||\n        position.y >= this.scrollTop + this.elementRect.height\n      ) {\n        switch (effectiveAlignY) {\n          case 'start':\n            {\n              this.scrollTop = position.y\n            }\n            break\n\n          case 'end':\n            {\n              this.scrollTop = position.y - this.elementRect.height + 1\n            }\n            break\n        }\n      }\n    }\n\n    if (this.parentNode) {\n      let x = this.elementRect.x + position.x - this.scrollRect.x\n      let y = this.elementRect.y + position.y - this.scrollRect.y\n\n      this.parentNode.scrollCellIntoView(new Point({ x, y }), { alignX, alignY, direction })\n    }\n  }\n\n  scrollColumnIntoView(column, { align = 'auto', force = false } = {}) {\n    this.scrollCellIntoView(new Point({ x: column, y: this.scrollTop }), {\n      alignX: align,\n      forceX: force,\n    })\n  }\n\n  scrollRowIntoView(row, { align = 'auto', force = false } = {}) {\n    this.scrollCellIntoView(new Point({ x: this.scrollLeft, y: row }), {\n      alignY: align,\n      forceY: force,\n    })\n  }\n\n  setDirtyNodeListFlag() {\n    this.setDirtyFlag(flags.ELEMENT_HAS_DIRTY_NODE_LIST)\n  }\n\n  clearDirtyNodeListFlag() {\n    this.clearDirtyFlag(flags.ELEMENT_HAS_DIRTY_NODE_LIST)\n  }\n\n  setDirtyRenderListFlag() {\n    this.setDirtyFlag(flags.ELEMENT_HAS_DIRTY_RENDER_LIST)\n  }\n\n  clearDirtyRenderListFlag() {\n    this.clearDirtyFlag(flags.ELEMENT_HAS_DIRTY_RENDER_LIST)\n  }\n\n  setDirtyLayoutFlag() {\n    this.setDirtyFlag(flags.ELEMENT_HAS_DIRTY_LAYOUT, flags.ELEMENT_HAS_DIRTY_LAYOUT_CHILDREN)\n  }\n\n  clearDirtyLayoutFlag() {\n    this.clearDirtyFlag(flags.ELEMENT_HAS_DIRTY_LAYOUT)\n  }\n\n  clearDirtyLayoutChildrenFlag() {\n    this.clearDirtyFlag(flags.ELEMENT_HAS_DIRTY_LAYOUT_CHILDREN)\n  }\n\n  setDirtyClippingFlag() {\n    this.setDirtyFlag(flags.ELEMENT_HAS_DIRTY_CLIPPING, flags.ELEMENT_HAS_DIRTY_CLIPPING_CHILDREN)\n  }\n\n  clearDirtyClippingFlag() {\n    this.clearDirtyFlag(flags.ELEMENT_HAS_DIRTY_CLIPPING)\n  }\n\n  clearDirtyClippingChildrenFlag() {\n    this.clearDirtyFlag(flags.ELEMENT_HAS_DIRTY_CLIPPING_CHILDREN)\n  }\n\n  setDirtyFlag(flag, parentFlag = 0) {\n    if (this.flags & flag) return\n\n    this.flags |= flag\n\n    if (parentFlag !== 0) {\n      let parent = this.parentNode\n\n      while (parent && !(parent.flags & parentFlag)) {\n        parent.flags |= parentFlag\n        parent = parent.parentNode\n      }\n    }\n\n    this.rootNode?.requestUpdates()\n  }\n\n  clearDirtyFlag(flag) {\n    this.flags &= ~flag\n  }\n\n  queueDirtyRect(dirtyRect = this.elementClipRect, checkIntersectionFrom = 0) {\n    return this.rootNode?.queueDirtyRect(\n      Rect.getIntersectingRect(dirtyRect, this.elementClipRect),\n      checkIntersectionFrom\n    )\n  }\n\n  queueDirtyRects(dirtyRects, checkIntersectionFrom = 0) {\n    if (!dirtyRects) return\n\n    for (let dirtyRect of dirtyRects) {\n      this.queueDirtyRect(dirtyRect, checkIntersectionFrom)\n    }\n  }\n\n  flushDirtyRects() {\n    if (this.rootNode !== this as any) {\n      throw new Error(`Failed to execute 'queueDirtyRect': This function can only be called from a root node.`)\n    }\n\n    let dirtyRects = this.dirtyRects\n    this.dirtyRects = []\n\n    return dirtyRects\n  }\n\n  requestUpdates() {\n    // The default implementation doesn't do anything; triggerUpdates has to be called manually.\n    // However, it is expected that renderer will override this function and call triggerUpdates themselves.\n    // Note that calling triggerUpdates synchronously isn't advised: the requestUpdates function might get called multiple times in the same execution list.\n    // For this reason, prefer using requestAnimationFrame, or setTimeout in order to schedule an update later on.\n  }\n\n  triggerUpdates({ maxDepth = 5 } = {}) {\n    return this.rootNode?.requestUpdates()\n  }\n\n  generateNodeList() {\n    let nodeList = []\n    let traverseList = [this as unknown as TermElement]\n\n    while (!_.isEmpty(traverseList)) {\n      let element = traverseList.shift()\n      nodeList.push(element)\n\n      traverseList = element.childNodes.concat(traverseList)\n    }\n\n    return nodeList\n  }\n\n  generateRenderList() {\n    let renderList = []\n    let stackingContexts: TermElement[] = [this]\n\n    while (stackingContexts.length > 0) {\n      let stackingContext = stackingContexts.shift()\n      renderList.push(stackingContext)\n\n      let childNodes = stackingContext.childNodes.slice()\n      let subContexts = []\n\n      while (childNodes.length > 0) {\n        let child = childNodes.shift()\n\n        if (child.style.get('zIndex') != null) {\n          subContexts.push(child)\n        } else if (Position.isAbsolutelyPositioned(child.style.get('position'))) {\n          subContexts.push(child)\n        } else {\n          renderList.push(child)\n          childNodes.splice(0, 0, ...child.childNodes)\n        }\n      }\n\n      stackingContexts.splice(\n        0,\n        0,\n        ...subContexts.sort((a: TermElement, b: TermElement) => {\n          return a.style.get('zIndex') - b.style.get('zIndex')\n        })\n      )\n    }\n\n    renderList.reverse()\n\n    return renderList\n  }\n\n  cascadeLayout({ dirtyLayoutNodes = [], force = false } = {}) {\n    if (\n      force ||\n      this.flags & (flags.ELEMENT_HAS_DIRTY_LAYOUT | flags.ELEMENT_HAS_DIRTY_LAYOUT_CHILDREN)\n    ) {\n      let doesLayoutChange = false\n      let doesScrollChange = false\n\n      if (force || this.flags & flags.ELEMENT_HAS_DIRTY_LAYOUT) {\n        let prevElementRect = this.elementRect.clone()\n        let prevContentRect = this.contentRect.clone()\n\n        this.elementRect.x = Math.round(this.yogaNode.getComputedLeft())\n        this.elementRect.y = Math.round(this.yogaNode.getComputedTop())\n\n        this.elementRect.width = Math.round(this.yogaNode.getComputedWidth())\n        this.elementRect.height = Math.round(this.yogaNode.getComputedHeight())\n\n        assertDebug(this.elementRect.width < 9007199254740000)\n        // assert(this.elementRect.x % 1 == 0)\n        // assert(this.elementRect.y % 1 == 0)\n        // assert(this.elementRect.width % 1 == 0)\n        // assert(this.elementRect.height % 1 == 0)\n\n        // We try to optimize away the iterations inside elements that haven't changed and aren't marked as dirty, because we know their children's layouts won't change either\n        doesLayoutChange = !Rect.areEqual(this.elementRect, prevElementRect)\n      }\n\n      if (\n        this.flags & (flags.ELEMENT_HAS_DIRTY_LAYOUT | flags.ELEMENT_HAS_DIRTY_LAYOUT_CHILDREN) ||\n        doesLayoutChange\n      ) {\n        for (let child of this.childNodes as TermElement[]) child.cascadeLayout({ dirtyLayoutNodes, force: true })\n\n        let prevScrollWidth = this.scrollRect.width\n        let prevScrollHeight = this.scrollRect.height\n\n        this.scrollRect.width = Math.max(this.elementRect.width, this.getInternalContentWidth())\n\n        this.scrollRect.height = Math.max(this.elementRect.height, this.getInternalContentHeight())\n\n        // assert(this.scrollRect.x % 1 == 0)\n        // assert(this.scrollRect.y % 1 == 0)\n        // assert(this.scrollRect.width % 1 == 0)\n        // assert(this.scrollRect.height % 1 == 0)\n\n        this.contentRect.x =\n          this.yogaNode.getComputedBorder(Yoga.EDGE_LEFT) +\n          this.yogaNode.getComputedPadding(Yoga.EDGE_LEFT)\n        this.contentRect.y =\n          this.yogaNode.getComputedBorder(Yoga.EDGE_TOP) +\n          this.yogaNode.getComputedPadding(Yoga.EDGE_TOP)\n\n        this.contentRect.width =\n          this.scrollRect.width -\n          this.contentRect.x -\n          this.yogaNode.getComputedBorder(Yoga.EDGE_RIGHT) -\n          this.yogaNode.getComputedPadding(Yoga.EDGE_RIGHT)\n        this.contentRect.height =\n          this.scrollRect.height -\n          this.contentRect.y -\n          this.yogaNode.getComputedBorder(Yoga.EDGE_BOTTOM) -\n          this.yogaNode.getComputedPadding(Yoga.EDGE_BOTTOM)\n\n        doesScrollChange =\n          this.scrollRect.width !== prevScrollWidth || this.scrollRect.height !== prevScrollHeight\n      }\n\n      if (this.flags & flags.ELEMENT_HAS_DIRTY_LAYOUT || doesLayoutChange || doesScrollChange) {\n        this.rootNode.queueDirtyRect(this.elementClipRect)\n\n        // We register this node so that we can emit the \"postlayout\" event once the layout process has been completed\n        dirtyLayoutNodes.push(this)\n\n        // We need to use the silent option because otherwise we could end up triggering a new \"dirty\" event that would schedule a useless new update that would itself trigger a new update, etc.\n        // this.setDirtyClippingFlag({ silent: true })\n        this.setDirtyClippingFlag()\n      }\n\n      this.clearDirtyLayoutFlag()\n      this.clearDirtyLayoutChildrenFlag()\n    }\n  }\n\n  cascadeClipping({ dirtyScrollNodes = [], relativeClipRect = null, force = false } = {}) {\n    if (\n      force ||\n      this.flags & (flags.ELEMENT_HAS_DIRTY_CLIPPING | flags.ELEMENT_HAS_DIRTY_CLIPPING_CHILDREN)\n    ) {\n      if (force || this.flags & flags.ELEMENT_HAS_DIRTY_CLIPPING) {\n        let doesClippingChange = false\n        let doesScrollChange = false\n\n        let prevScrollX = this.scrollRect.x\n        let prevScrollY = this.scrollRect.y\n\n        if (this.style.get('scroll')) {\n          this.scrollRect.x = Math.max(\n            0,\n            Math.min(this.scrollRect.x, this.scrollRect.width - this.elementRect.width)\n          )\n          this.scrollRect.y = Math.max(\n            0,\n            Math.min(this.scrollRect.y, this.scrollRect.height - this.elementRect.height)\n          )\n        } else {\n          this.scrollRect.x = 0\n          this.scrollRect.y = 0\n        }\n\n        doesScrollChange = this.scrollRect.x !== prevScrollX || this.scrollRect.y !== prevScrollY\n\n        if (doesScrollChange) dirtyScrollNodes.push(this)\n\n        let parentScrollX = this.parentNode?.scrollRect.x ?? 0\n        let parentScrollY = this.parentNode?.scrollRect.y ?? 0\n\n        let prevElementWorldRect = this.elementWorldRect.clone()\n\n        this.elementWorldRect.x = this.parentNode\n          ? this.parentNode.elementWorldRect.x + this.elementRect.x - parentScrollX\n          : 0\n        this.elementWorldRect.y = this.parentNode\n          ? this.parentNode.elementWorldRect.y + this.elementRect.y - parentScrollY\n          : 0\n\n        this.elementWorldRect.width = this.elementRect.width\n        this.elementWorldRect.height = this.elementRect.height\n\n        let prevContentWorldRect = this.contentWorldRect.clone()\n\n        this.contentWorldRect.x = this.elementWorldRect.x + this.contentRect.x\n        this.contentWorldRect.y = this.elementWorldRect.y + this.contentRect.y\n\n        this.contentWorldRect.width = this.contentRect.width\n        this.contentWorldRect.height = this.contentRect.height\n\n        let prevElementClipRect = this.elementClipRect ? this.elementClipRect.clone() : null\n\n        this.elementClipRect = relativeClipRect\n          ? Rect.getIntersectingRect(this.elementWorldRect, relativeClipRect)\n          : this.elementWorldRect\n        this.contentClipRect = relativeClipRect\n          ? Rect.getIntersectingRect(this.contentWorldRect, relativeClipRect)\n          : this.contentWorldRect\n\n        doesClippingChange =\n          !Rect.areEqual(prevElementWorldRect, this.elementWorldRect) ||\n          !Rect.areEqual(prevContentWorldRect, this.contentWorldRect) ||\n          !Rect.areEqual(prevElementClipRect, this.elementClipRect)\n\n        if (doesClippingChange || doesScrollChange) {\n          if (doesClippingChange) this.rootNode.queueDirtyRect(prevElementClipRect)\n\n          this.rootNode.queueDirtyRect(this.elementClipRect)\n        }\n      }\n\n      if (this.style.get('scroll') || !relativeClipRect) relativeClipRect = this.elementClipRect\n\n      for (let child of this.childNodes) {\n        child.cascadeClipping({\n          dirtyScrollNodes,\n          relativeClipRect,\n          // @ts-ignore\n          force: force || this.flags & flags.ELEMENT_HAS_DIRTY_CLIPPING,\n        })\n      }\n\n      this.elementBoundingRect = Rect.getBoundingRect(\n        this.elementClipRect,\n        ...this.childNodes.map(child => child.elementBoundingRect)\n      )\n\n      this.clearDirtyClippingFlag()\n      this.clearDirtyClippingChildrenFlag()\n    }\n  }\n\n  getElementRects() {\n    return _.pick(this,)\n  }\n\n  getPreferredSize(maxWidth, widthMode, maxHeight, heightMode) {\n    return { width: maxWidth, height: 0 }\n  }\n\n  /** The max of the children's elementRect.(x+width) */\n  getInternalContentWidth() {\n    // if (this.childNodes.length == 1) {\n    //   const child = this.childNodes[0]\n    //   return child.getInternalContentWidth()\n    // } else {\n    return Math.max(\n      ...this.childNodes.map(child => {\n        return child.elementRect.x + child.elementRect.width\n      })\n    )\n    // }\n  }\n\n  getInternalContentHeight() {\n    // if (this.childNodes.length == 1) {\n    //   const child = this.childNodes[0]\n    //   return child.getInternalContentHeight()\n    // } else {\n    return Math.max(\n      ...this.childNodes.map(child => {\n        return child.elementRect.y + child.elementRect.height\n      })\n    )\n    // }\n  }\n\n  queueDirtyStyle(element: TermElement): boolean {\n    if (!this.rootNode) return false\n\n    this.rootNode.queueDirtyStyle(element)\n    return true\n  }\n\n  static elementName = 'element'\n\n  debugPaintRects = false\n\n  // addShortcutListener(descriptors, callback, { capture = false } = {}) {\n  //   if (!capture)\n  //     throw new Error(\n  //       `Failed to execute 'addShortcutListener': The 'capture' option needs to be set when adding a shortcut.`\n  //     )\n\n  //   for (let descriptor of descriptors.split(/,/g)) {\n  //     let sequence = new KeySequence(descriptor)\n\n  //     this.addEventListener(`keypress`, e => {\n  //       if (!e.key) return\n\n  //       if (sequence.add(e.key)) {\n  //         callback.call(this, e)\n  //       }\n  //     })\n  //   }\n  // }\n\n  // click(mouse) {\n  //   this.dispatchEvent(Object.assign(new Event(`click`), { mouse }))\n  // }\n\n  renderElement(x, y, l) {\n    assert(this.rootNode)\n    let processBorders = (x, y, l) => {\n      let prepend = ``\n      let append = ``\n\n      if (y === 0 && this.style.get('borderTopCharacter')) {\n        let contentL = l\n\n        if (x === 0 && this.style.get('borderLeftCharacter')) {\n          prepend = this.style.get('borderTopLeftCharacter')\n          contentL -= 1\n        }\n\n        if (x + l === this.elementRect.width && this.style.get('borderRightCharacter')) {\n          append = this.style.get('borderTopRightCharacter')\n          contentL -= 1\n        }\n\n        let data = prepend + this.style.get('borderTopCharacter').repeat(contentL) + append\n\n        if (\n          !this.rootNode.debugPaintRects &&\n          BackgroundClip.doesIncludeBorders(this.style.get('backgroundClip'))\n        ) {\n          const backgroundColor = this.style.get('backgroundColor')\n          const backgroundAnsi = Color.front(backgroundColor)\n          data = backgroundAnsi + data\n        }\n\n        if (!this.rootNode.debugPaintRects && this.style.get('borderColor')) {\n          data = Color.front(this.style.get('borderColor')) + data\n        }\n\n        if (\n          !this.rootNode.debugPaintRects &&\n          (BackgroundClip.doesIncludeBorders(this.style.get('backgroundClip')) ||\n            this.style.get('borderColor'))\n        ) {\n          data += style.clear\n        }\n\n        return data\n      } else if (y === this.elementRect.height - 1 && this.style.get('borderBottomCharacter')) {\n        let contentL = l\n\n        if (x === 0 && this.style.get('borderLeftCharacter')) {\n          prepend = this.style.get('borderBottomLeftCharacter')\n          contentL -= 1\n        }\n\n        if (x + l === this.elementRect.width && this.style.get('borderRightCharacter')) {\n          append = this.style.get('borderBottomRightCharacter')\n          contentL -= 1\n        }\n\n        let data = prepend + this.style.get('borderBottomCharacter').repeat(contentL) + append\n\n        if (\n          !this.rootNode.debugPaintRects &&\n          BackgroundClip.doesIncludeBorders(this.style.get('backgroundClip'))\n        ) {\n          data = Color.back(this.style.get('backgroundColor')) + data\n        }\n\n        if (!this.rootNode.debugPaintRects && this.style.get('borderColor')) {\n          data = Color.front(this.style.get('borderColor')) + data\n        }\n\n        if (\n          !this.rootNode.debugPaintRects &&\n          ((this.style.get('backgroundColor') &&\n            BackgroundClip.doesIncludeBorders(this.style.get('backgroundClip'))) ||\n            this.style.get('borderColor'))\n        ) {\n          data += style.clear\n        }\n\n        return data\n      } else {\n        let contentX = x\n        let contentY = y\n        let contentL = l\n\n        if (this.style.get('borderLeftCharacter')) {\n          if (x === 0) {\n            prepend = this.style.get('borderLeftCharacter')\n            contentX += 1\n            contentL -= 1\n          } else {\n            contentX -= 1\n          }\n        }\n\n        if (this.style.get('borderRightCharacter')) {\n          if (x + l === this.elementRect.width) {\n            append = this.style.get('borderRightCharacter')\n            contentL -= 1\n          }\n        }\n\n        if (BackgroundClip.doesIncludeBorders(this.style.get('backgroundClip'))) {\n          const backgroundColor = this.style.get('backgroundColor')\n          if (backgroundColor) {\n            if (prepend) {\n              prepend = Color.back(this.style.get('backgroundColor')) + prepend\n            }\n\n            if (append) {\n              append = Color.back(backgroundColor) + append\n            }\n          }\n        }\n\n        if (this.style.get('borderColor')) {\n          if (prepend) prepend = Color.front(this.style.get('borderColor')) + prepend\n\n          if (append) {\n            append = Color.front(this.style.get('borderColor')) + append\n          }\n        }\n\n        if (\n          BackgroundClip.doesIncludeBorders(this.style.get('backgroundClip')) ||\n          this.style.get('borderColor')\n        ) {\n          if (prepend) prepend += style.clear\n\n          if (append) {\n            append += style.clear\n          }\n        }\n\n        return (\n          prepend +\n          processContent(contentX + this.scrollRect.x, contentY + this.scrollRect.y, contentL) +\n          append\n        )\n      }\n    }\n\n    let processContent = (x, y, l) => {\n      if (y < this.contentRect.y || y >= this.contentRect.y + this.contentRect.height) {\n        return this.renderBackground(l)\n      } else {\n        y -= this.contentRect.y\n      }\n\n      let prepend = ``\n      let append = ``\n\n      if (x < this.contentRect.x) {\n        let size = Math.min(l, this.contentRect.x - x)\n        prepend = this.renderBackground(size)\n          ; (x = 0), (l -= size)\n      } else {\n        x -= this.contentRect.x\n      }\n\n      if (x + l > this.contentRect.width) {\n        let size = Math.min(l, x + l - this.contentRect.width)\n        append = this.renderBackground(size)\n        l -= size\n      }\n\n      let content = this.renderContent(x, y, l)\n\n      return prepend + content + append\n    }\n\n    return processBorders(x, y, l)\n  }\n\n  renderContent(x, y, l) {\n    return this.renderBackground(l)\n  }\n\n  renderBackground(l) {\n    if (l < 0) throw new Error(`Failed to execute 'renderBackground': Invalid length (${l}).`)\n\n    if (l === 0) return ``\n\n    if (this.rootNode.debugPaintRects) {\n      return this.style.get('backgroundCharacter').repeat(l)\n    }\n\n    let background = ``\n\n    if (this.style.get('backgroundColor')) {\n      background += Color.back(this.style.get('backgroundColor'))\n    }\n\n    if (this.style.get('color')) {\n      background += Color.front(this.style.get('color'))\n    }\n\n    background += this.style.get('backgroundCharacter').repeat(l)\n\n    if (this.style.get('backgroundColor') || this.style.get('color')) {\n      background += style.clear\n    }\n\n    return background\n  }\n\n  renderText(text) {\n    if (this.rootNode.debugPaintRects) return text\n\n    let prefix = ``\n    let suffix = ``\n\n    if (this.style.get('fontWeight') == 'fainted') {\n      prefix += style.fainted.in\n    } else if (this.style.get('fontWeight') == 'bold') {\n      prefix += style.emboldened.in\n    }\n    if (this.style.get('textDecoration') == 'underline') {\n      prefix += style.underlined.in\n    }\n\n    if (this.style.get('backgroundColor')) {\n      prefix += Color.back(this.style.get('backgroundColor'))\n    }\n\n    if (this.style.get('color')) {\n      prefix += Color.front(this.style.get('color'))\n    }\n\n    if (prefix.length !== 0) {\n      suffix += style.clear\n    }\n\n    return prefix + text + suffix\n  }\n\n}\n\n// These methods get added by EventSource.setup(this)\n// export interface Element {\n//   addEventListener(arg0: string, arg1: (e: any) => void, arg2?: { capture: true })\n//   removeEventListener(arg0: string, callback: (event: any) => boolean | void)\n//   dispatchEvent(arg0: Event & { mouse: any }, options?)\n//   declareEvent(eventName: string)\n// }\n\nfunction resetRect(rect: Rect) {\n  rect.x = 0\n  rect.y = 0\n  rect.height = 0\n  rect.width = 0\n}\n","export function findAncestorByPredicate(node, predicate) {\n    for (node = node && node.parentNode; node; node = node.parentNode)\n        if (predicate(node)) return node\n\n    return null\n}\n\nexport function findAncestorsByPredicate(node, predicate) {\n    let match = []\n\n    for (node = node && node.parentNode; node; node = node.parentNode)\n        if (predicate(node)) match.push(node)\n\n    return match\n}\n\nexport function findDescendantByPredicate(node, predicate) {\n    if (node) {\n        let children = node.childNodes.slice()\n\n        while (children.length > 0) {\n            let child = children.shift()\n\n            if (predicate(child)) return child\n\n            children.splice(0, 0, ...child.childNodes)\n        }\n    }\n\n    return null\n}\n\nexport function findDescendantsByPredicate(node, predicate) {\n    let match = []\n\n    if (node) {\n        let children = node.childNodes.slice()\n\n        while (children.length > 0) {\n            let child = children.shift()\n\n            if (predicate(child)) match.push(child)\n\n            children.splice(0, 0, ...child.childNodes)\n        }\n    }\n\n    return match\n}\n\nexport function isChildOf(node, parent) {\n    if (node === null) return false\n\n    for (node = node.parentNode; node; node = node.parentNode) if (node === parent) return true\n\n    return false\n}\n","import * as _ from '@s-libs/micro-dash'\nimport { Event } from './Event'\n\nexport class EventSource {\n  static symbol = Symbol()\n  instance: any\n  listeners: Map<any, any>\n  getParentInstance: () => any\n\n  static setup(instance, extra?) {\n    let eventSource = (instance[EventSource.symbol] = new this(instance, extra))\n\n    for (let methodName of Object.getOwnPropertyNames(EventSource.prototype)) {\n      if (methodName === `constructor`) continue\n\n      Object.defineProperty(instance, methodName, {\n        value: (...args) => eventSource[methodName](...args),\n        enumerable: true,\n      })\n    }\n  }\n\n  // static [Symbol.hasInstance](instance) {\n  //     return instance.constructor === EventSource || Reflect.has(instance, EventSource.symbol)\n  // }\n\n  constructor(instance, { getParentInstance = () => undefined } = {}) {\n    this.instance = instance\n    this.listeners = new Map()\n\n    this.getParentInstance = getParentInstance\n\n    this.declareEvent(`*`)\n  }\n\n  getEventSource() {\n    return this\n  }\n\n  getParentEventSource() {\n    let parent = this.getParentInstance()\n\n    return parent && parent[EventSource.symbol] ? parent[EventSource.symbol] : null\n  }\n\n  hasDeclaredEvent(name) {\n    if (!_.isString(name))\n      throw new Error(`Failed to execute 'hasDeclaredEvent': Parameter 1 is not of type 'string'.`)\n\n    return this.listeners.has(name)\n  }\n\n  declareEvent(name) {\n    if (!_.isString(name))\n      throw new Error(`Failed to execute 'declareEvent': Parameter 1 is not of type 'string'.`)\n\n    if (this.listeners.has(name))\n      throw new Error(`Failed to execute 'declareEvent': '${name}' already exists.`)\n\n    this.listeners.set(name, { capture: new Map(), bubble: new Map() })\n  }\n\n  addEventListener(name, callback, { capture = false, once = false } = {}) {\n    if (!_.isString(name))\n      throw new Error(`Failed to execute 'addEventListener': Parameter 1 is not of type 'string'.`)\n\n    if (!_.isFunction(callback))\n      throw new Error(\n        `Failed to execute 'addEventListener': Parameter 2 is not of type 'function'.`\n      )\n\n    if (!this.listeners.has(name)) return\n    //   throw new Error(`Failed to execute 'addEventListener': '${name}' is not a valid event name.`)\n\n    let callbacks = capture ? this.listeners.get(name).capture : this.listeners.get(name).bubble\n\n    if (callbacks.has(callback))\n      throw new Error(\n        `Failed to execute 'addEventListener': This callback is already listening on this event.`\n      )\n\n    callbacks.set(callback, { once })\n\n    return () => {\n      this.removeEventListener(name, callback)\n    }\n  }\n\n  removeEventListener(name, callback, { capture = false, once = false } = {}) {\n    if (!_.isString(name))\n      throw new Error(\n        `Failed to execute 'removeEventListener': Parameter 1 is not of type 'string'.`\n      )\n\n    if (!_.isFunction(callback))\n      throw new Error(\n        `Failed to execute 'removeEventListener': Parameter 2 is not of type 'function'.`\n      )\n\n    if (!this.listeners.has(name)) return\n    // throw new Error(\n    //   `Failed to execute 'removeEventListener': '${name}' is not a valid event name.`\n    // )\n\n    let callbacks = capture ? this.listeners.get(name).capture : this.listeners.get(name).bubble\n\n    callbacks.delete(callback)\n  }\n\n  dispatchEvent(event, { parentSource = this.getParentEventSource() } = {}) {\n    if (!(event instanceof Event))\n      throw new Error(`Failed to execute 'dispatchEvent': Parameter 1 is not of type 'Event'.`)\n\n    if (!this.listeners.has(event.name) || event.name === `*`)\n      throw new Error(\n        `Failed to execute 'dispatchEvent': '${event.name}' is not a valid event name.`\n      )\n\n    let eventSources = [this]\n\n    for (let eventSource = parentSource; eventSource; eventSource = eventSource.getParentEventSource()\n    ) {\n      eventSources.unshift(eventSource)\n    }\n\n    event.target = this.instance\n\n    for (let t = 0, T = eventSources.length; t < T; ++t) {\n      if (event.propagationStopped) break\n\n      let eventSource = eventSources[t]\n\n      let listeners = eventSource.listeners.get(event.name)\n      let allListeners = eventSource.listeners.get(`*`)\n\n      for (let [callback, { once }] of [...listeners.capture, ...allListeners.capture]) {\n        if (event.immediatelyCanceled) break\n\n        event.currentTarget = eventSource.instance\n        callback.call(event.currentTarget, event)\n      }\n    }\n\n    for (let t = 0, T = Math.max(0, event.bubbles ? eventSources.length : 1); t < T; ++t) {\n      if (event.propagationStopped) break\n\n      let eventSource = eventSources[eventSources.length - t - 1]\n\n      let listeners = eventSource.listeners.get(event.name)\n      let allListeners = eventSource.listeners.get(`*`)\n\n      for (let [callback, { once }] of [...listeners.bubble, ...allListeners.bubble]) {\n        if (event.immediatelyCanceled) break\n\n        event.currentTarget = eventSource.instance\n        callback.call(event.currentTarget, event)\n      }\n    }\n\n    if (event.default && !event.defaultPrevented) {\n      event.default()\n    }\n  }\n\n  on = () => this.addEventListener\n  off = () => this.removeEventListener\n  addListener = () => this.addEventListener\n  removeListener = () => this.removeEventListener\n\n  // on(...args) {\n\n  //     return this.addEventListener(...args)\n\n  // }\n\n  // off(...args) {\n\n  //     return this.removeEventListener(...args)\n\n  // }\n\n  // addListener(...args) {\n\n  //     return this.addEventListener(...args)\n\n  // }\n\n  // removeListener(...args) {\n\n  //     return this.removeEventListener(...args)\n\n  // }\n}\n","/**\n * @example\n * assert(false, \"throw this error message\")\n * assert(true, \"nothing happens\")\n */\nexport function assert(condition?: any, message?: string): asserts condition {\n\tif (!condition) {\n\t\tthrow new Error(message || 'assert failed')\n\t}\n}\n","import { Injectable } from \"@angular/core\"\nimport { assert } from \"../utils/Assert\"\n\nconst DEFAULT_DEBOUNCE = 40\n\n@Injectable({\n\tprovidedIn: 'root',\n})\nexport class Tasks {\n\tprivate idGenerator = 0\n\tprivate groups: {\n\t\t[debounce: number]: {\n\t\t\tdebounce: number\n\t\t\ttasks: Task[]\n\t\t\ttimeoutHandle: any | undefined\n\t\t\tpromiseLike: Thenable\n\t\t}\n\t} = {}\n\tcurrentTask: Task | undefined = undefined\n\tonce = new Set<string>()\n\n\tqueue(task: Task) {\n\t\tconst newTask: Task = {\n\t\t\tdebounce: DEFAULT_DEBOUNCE,\n\t\t\t...task,\n\t\t\tid: this.idGenerator++,\n\t\t}\n\t\tconst group = this.ensureGroup(newTask.debounce)\n\t\tgroup.tasks.push(newTask)\n\n\t\tif (group.timeoutHandle === undefined) {\n\t\t\tgroup.timeoutHandle = setTimeout(() => this.run(newTask.debounce), newTask.debounce)\n\t\t}\n\t}\n\n\tprivate run(debounce: number) {\n\t\tconst group = this.ensureGroup(debounce)\n\t\tassert(group)\n\n\t\tfor (const task of group.tasks) {\n\t\t\tthis.currentTask = task\n\t\t\ttry {\n\t\t\t\ttask.func()\n\t\t\t} catch (e) {\n\t\t\t\tthrow e\n\t\t\t} finally {\n\t\t\t\tthis.currentTask = undefined\n\t\t\t}\n\t\t\tthis.once.delete(task.name)\n\t\t}\n\t\tgroup.tasks.length = 0\n\t\tgroup.timeoutHandle = undefined\n\n\t\t// if we just ran the fastGroup tasks, reset the timeouts\n\t\tif (debounce === 0) {\n\t\t\tthis.resetTimeouts()\n\t\t}\n\t}\n\n\tresetTimeouts() {\n\t\tfor (const group of Object.values(this.groups)) {\n\t\t\tif (group.debounce > 0 && group.tasks.length > 0) {\n\t\t\t\tclearTimeout(group.timeoutHandle)\n\t\t\t\tgroup.timeoutHandle = setTimeout(() => this.run(group.debounce), group.debounce)\n\t\t\t}\n\t\t}\n\t}\n\n\tqueueOnce(task: Task & { name: string }) {\n\t\tthis.ensureGroup(task.debounce)\n\n\t\tif (!this.once.has(task.name)) {\n\t\t\tthis.once.add(task.name)\n\t\t\tthis.queue(task)\n\t\t}\n\t}\n\n\twaitForGroup(debounce: number): Thenable {\n\t\tconst group = this.ensureGroup(debounce)\n\t\treturn group.promiseLike\n\t}\n\n\tprivate ensureGroup(debounce: number = DEFAULT_DEBOUNCE) {\n\t\tif (!this.groups[debounce]) {\n\t\t\tconst group = {\n\t\t\t\tdebounce, tasks: [], timeoutHandle: undefined, promiseLike: {\n\t\t\t\t\tthen: (callback) => {\n\t\t\t\t\t\tthis.queue({\n\t\t\t\t\t\t\tdebounce,\n\t\t\t\t\t\t\tfunc: callback,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.groups[debounce] = group\n\t\t\treturn group\n\t\t}\n\t\treturn this.groups[debounce]\n\t}\n\n\tstatic UI = 0\n\tstatic work = DEFAULT_DEBOUNCE\n\tstatic background = 1000\n}\n\n\nexport type Task = {\n\tid?: number\n\tname?: string\n\tdebounce?: number\n\tfunc: () => any\n}\n\ntype Thenable = {\n\tthen: (callback: () => any) => void\n}\n","export class Key {\n  public type = `key` as const;\n\n  public name: string\n\n  public alt: boolean\n  public ctrl: boolean\n  public meta: boolean\n  public shift: boolean\n\n  constructor(name: string, { alt = false, ctrl = false, meta = false, shift = false }: { alt?: boolean, ctrl?: boolean, meta?: boolean, shift?: boolean } = {}) {\n    this.name = name\n\n    this.alt = alt\n    this.ctrl = ctrl\n    this.meta = meta\n    this.shift = shift\n  }\n\n  private inspect() {\n    let name = this.name\n\n    if (this.alt)\n      name += `+alt`\n\n    if (this.ctrl)\n      name += `+ctrl`\n\n    if (this.meta)\n      name += `+meta`\n\n    if (this.shift)\n      name += `+shift`\n\n    return `<Key ${name}>`\n  }\n}\n","export class Mouse {\n  public type = `mouse` as const;\n\n  public name: string | null;\n\n  public x: number;\n  public y: number;\n  public d: number;\n\n  public start: boolean;\n  public end: boolean;\n\n  public alt: boolean;\n  public ctrl: boolean;\n\n  constructor(name: string | null, {\n    x = 0,\n    y = 0,\n    d = 0,\n\n    start = false,\n    end = false,\n\n    alt = false,\n    ctrl = false,\n  }: {\n    x?: number;\n    y?: number;\n    d?: number;\n\n    start?: boolean;\n    end?: boolean;\n\n    alt?: boolean;\n    ctrl?: boolean;\n  } = {}) {\n    this.name = name;\n\n    this.x = x;\n    this.y = y;\n    this.d = d;\n\n    this.start = start;\n    this.end = end;\n\n    this.alt = alt;\n    this.ctrl = ctrl;\n  }\n\n  inspect() {\n    let name = this.name;\n\n    if (this.alt)\n      name += `+alt`;\n\n    if (this.ctrl)\n      name += `+ctrl`;\n\n    return `<Mouse ${name} @${this.x};${this.y}(${this.d >= 0 ? `+` : `-`}${Math.abs(this.d)}) start=${this.start} end=${this.end}>`;\n  }\n}\n","export interface NodeConstructor<TIn, TSeq, TOut> {\n  new(): Node<TIn, TSeq, TOut>;\n}\n\nexport class Node<TIn, TSeq, TOut> {\n  private children = new Map<TIn, Array<Node<TIn, TSeq, TOut>>>();\n\n  constructor(private activator: ((input: Array<TSeq>) => TOut) | null = null) {\n  }\n\n  isActivable() {\n    return this.activator !== null;\n  }\n\n  setActivator(activator: ((input: Array<TSeq>) => TOut) | null) {\n    this.activator = activator;\n  }\n\n  activate(input: Array<TSeq>) {\n    if (!this.activator)\n      throw new Error(`Cannot activate a non-activable node`);\n\n    return this.activator(input);\n  }\n\n  mount(input: TIn, constructor: NodeConstructor<TIn, TSeq, TOut> = Node): Node<TIn, TSeq, TOut> {\n    let sub = this.children.get(input);\n    if (typeof sub === `undefined`)\n      this.children.set(input, sub = []);\n\n    let node: Node<TIn, TSeq, TOut> | undefined =\n        sub.find(node => node.constructor === constructor);\n    if (typeof node === `undefined`)\n      sub.push(node = new constructor());\n\n    return node;\n  }\n\n  hasChildren() {\n    return this.children.size > 0;\n  }\n\n  has(input: TIn) {\n    return this.children.has(input);\n  }\n\n  get(input: TIn) {\n    return this.children.get(input);\n  }\n}\n","import { Cursor } from '../types/Cursor'\nimport { Data } from '../types/Data'\nimport { Info } from '../types/Info'\nimport { Key } from '../types/Key'\nimport { Mouse } from '../types/Mouse'\n\nimport { Node, NodeConstructor } from './Node'\n\nconst EndSym = Symbol()\n\nexport type End = typeof EndSym\n\nexport type Sequence = Array<string | number | Function>\nexport type Production = Cursor | Key | Mouse | Info | Data\nexport type Callback = (chars: Array<number>) => Production\n\nexport class Parser {\n  static End = EndSym;\n\n  static isValidFilter(filter: string | number) {\n    if (typeof filter === `string` && filter.length > 0)\n      return true\n\n    if (typeof filter === `number`)\n      return true\n\n    return false\n  }\n\n  private ended = false;\n\n  private root = new Node<number | End, number, Production>(input => ({\n    type: `data`,\n    buffer: new Uint8Array(input as Array<number>),\n  }));\n\n  private candidates: Array<Node<number | End, number, Production>> = [];\n  private current = [this.root];\n\n  private confirmedInput: Array<number> = [];\n  private unconfirmedInput: Array<number> = [];\n\n  private bufferedInput: Array<number> = [];\n\n  constructor(private callback: (data: Production) => void) {\n    this.candidates = []\n    this.current = [this.root]\n\n    this.confirmedInput = []\n    this.unconfirmedInput = []\n\n    this.bufferedInput = []\n\n    this.callback = callback\n  }\n\n  register(...args: [...Sequence, Callback]) {\n    const activator = args.pop() as Callback\n\n    let current = this.root\n    for (let t = 0; t < args.length; ++t) {\n      let filter = args[t]\n      if (typeof filter === `function`)\n        throw new Error(`Invalid filter`)\n\n      if (typeof filter === `string`) {\n        for (let u = 0; u < filter.length - 1; ++u)\n          current = current.mount(filter.charCodeAt(u))\n\n        filter = filter.charCodeAt(filter.length - 1)\n      }\n\n      const nextArgs = args[t + 1]\n      if (typeof nextArgs !== `function`) {\n        current = current.mount(filter)\n      } else {\n        current = current.mount(filter, nextArgs as NodeConstructor<number | End, number, Production>)\n        t += 1\n      }\n    }\n\n    if (current.isActivable())\n      throw new Error(`Failed to execute 'register': Target node is already activable.`)\n\n    current.setActivator(activator)\n    return this\n  }\n\n  public feed(stream: Array<number> | Uint8Array) {\n    return this.feedImpl(stream)\n  }\n\n  private feedImpl(stream: Uint8Array | (Array<number | End>)) {\n    if (this.ended)\n      throw new Error(`Failed to execute 'feed': Cannot feed a closed parser.`)\n\n    const send = (production: Production) => {\n      setTimeout(() => {\n        this.callback(production)\n      })\n    }\n\n    const sendBufferedInput = () => {\n      const bufferedInput = this.bufferedInput\n      this.bufferedInput = []\n\n      send({\n        type: `data`,\n        buffer: new Uint8Array(bufferedInput),\n      })\n    }\n\n    for (let t = 0; t < stream.length; ++t) {\n      const input = stream[t]\n      const isLast = t + 1 === stream.length\n\n      const nextCandidates = []\n      const nextCurrent = []\n\n      for (const node of this.current) {\n        const nextList = node.get(input)\n\n        if (typeof nextList !== `undefined`) {\n          for (const next of nextList) {\n            if (next.isActivable())\n              nextCandidates.push(next)\n\n            nextCurrent.push(next)\n          }\n        }\n      }\n\n      if (nextCandidates.length > 0) {\n        this.candidates = nextCandidates\n\n        this.confirmedInput = [...this.confirmedInput, ...this.unconfirmedInput]\n        this.unconfirmedInput = []\n      }\n\n      if (input !== EndSym) {\n        if (nextCandidates.length > 0) {\n          this.confirmedInput.push(input)\n        } else {\n          this.unconfirmedInput.push(input)\n        }\n      }\n\n      if (nextCurrent.length === 0 || nextCurrent.filter(node => node.hasChildren()).length === 0 || (isLast && this.unconfirmedInput.length === 0)) {\n        if (this.candidates.length === 0) {\n          if (input !== EndSym)\n            this.bufferedInput.push(input)\n          else if (this.bufferedInput.length > 0)\n            sendBufferedInput()\n\n          this.current = [this.root]\n\n          this.confirmedInput = []\n          this.unconfirmedInput = []\n        } else if (this.candidates.length === 1) {\n          if (this.bufferedInput.length > 0)\n            sendBufferedInput()\n\n          const match = this.candidates[0]\n\n          const confirmed = this.confirmedInput\n          const unconfirmed = this.unconfirmedInput\n\n          send(match.activate(confirmed))\n\n          this.candidates = []\n          this.current = [this.root]\n\n          this.confirmedInput = []\n          this.unconfirmedInput = []\n\n          this.feed(unconfirmed)\n        } else {\n          throw new Error(`Assertion failed while executing 'feed': Ambiguous grammar for '${this.confirmedInput}'.`)\n        }\n      } else {\n        this.current = nextCurrent\n      }\n    }\n\n    if (this.bufferedInput.length > 0)\n      sendBufferedInput()\n\n    return this\n  }\n\n  end() {\n    this.feedImpl([EndSym])\n\n    this.candidates = []\n    this.current = [this.root]\n\n    this.confirmedInput = []\n    this.unconfirmedInput = []\n  }\n}\n","import {Node} from './Node';\n\nexport class HexNode<TIn extends number, TSeq, TOut> extends Node<TIn, TSeq, TOut> {\n  static isDigit(input: unknown) {\n    return typeof input === `number` && ((input >= 48 && input <= 57) || (input >= 41 && input <= 46) || (input >= 61 && input <= 66));\n  }\n\n  hasChildren() {\n    return true;\n  }\n\n  has(input: TIn) {\n    if (HexNode.isDigit(input))\n      return true;\n\n    return super.has(input);\n  }\n\n  get(input: TIn): Array<Node<TIn, TSeq, TOut>> | undefined {\n    if (!HexNode.isDigit(input))\n      return super.get(input);\n\n    const parent = super.get(input);\n\n    if (typeof parent !== `undefined`) {\n      return parent.concat([this]);\n    } else {\n      return [this];\n    }\n  }\n}\n","import {Node} from './Node';\n\nexport class NumberNode<TIn extends number, TSeq, TOut> extends Node<TIn, TSeq, TOut> {\n  static isDigit(input: unknown) {\n    return typeof input === `number` && input >= 48 && input <= 57;\n  }\n\n  hasChildren() {\n    return true;\n  }\n\n  has(input: TIn) {\n    if (NumberNode.isDigit(input))\n      return true;\n\n    return super.has(input);\n  }\n\n  get(input: TIn): Array<Node<TIn, TSeq, TOut>> | undefined {\n    if (!NumberNode.isDigit(input))\n      return super.get(input);\n\n    const parent = super.get(input);\n\n    if (typeof parent !== `undefined`) {\n      return parent.concat([this]);\n    } else {\n      return [this];\n    }\n  }\n}\n","/* eslint-disable no-control-regex */\n\nimport {HexNode}            from './parser/HexNode';\nimport {NumberNode}         from './parser/NumberNode';\nimport {Sequence, Callback} from './parser/Parser';\nimport {Cursor}             from './types/Cursor';\nimport {Info}               from './types/Info';\nimport {Key}                from './types/Key';\nimport {Mouse}              from './types/Mouse';\n\nconst shift = 1 << 0, alt = 1 << 1, ctrl = 1 << 2, meta = 1 << 3;\n\nconst applyModifiers = (sequenceBuilder: (n: number) => string, name: string) => ({\n\n  // Simple key, no modifiers\n  [sequenceBuilder(1 + (0))]: new Key(name),\n\n  // With a single modifier\n  [sequenceBuilder(1 + (shift))]: new Key(name, {shift: true}),\n  [sequenceBuilder(1 + (alt))]: new Key(name, {alt: true}),\n  [sequenceBuilder(1 + (ctrl))]: new Key(name, {ctrl: true}),\n  [sequenceBuilder(1 + (meta))]: new Key(name, {meta: true}),\n\n  // With two modifiers\n  [sequenceBuilder(1 + (shift | alt))]: new Key(name, {shift: true, alt: true}),\n  [sequenceBuilder(1 + (shift | ctrl))]: new Key(name, {shift: true, ctrl: true}),\n  [sequenceBuilder(1 + (shift | meta))]: new Key(name, {shift: true, meta: true}),\n  [sequenceBuilder(1 + (alt | ctrl))]: new Key(name, {alt: true, ctrl: true}),\n  [sequenceBuilder(1 + (alt | meta))]: new Key(name, {alt: true, meta: true}),\n  [sequenceBuilder(1 + (ctrl | meta))]: new Key(name, {ctrl: true, meta: true}),\n\n  // With three modifiers\n  [sequenceBuilder(1 + (alt | ctrl | meta))]: new Key(name, {alt: true, ctrl: true, meta: true}),\n  [sequenceBuilder(1 + (shift | ctrl | meta))]: new Key(name, {shift: true, ctrl: true, meta: true}),\n  [sequenceBuilder(1 + (shift | alt | meta))]: new Key(name, {shift: true, alt: true, meta: true}),\n  [sequenceBuilder(1 + (shift | alt | ctrl))]: new Key(name, {shift: true, ctrl: true, alt: true}),\n\n  // With all modifiers\n  [sequenceBuilder(1 + (shift | alt | ctrl | meta))]: new Key(name, {shift: true, alt: true, ctrl: true, meta: true}),\n\n});\n\nconst parseCursorSequence = (sequence: Array<number>) => {\n  const [, y, x] = String.fromCharCode(...sequence).match(/^\\x1b\\[([0-9]+);([0-9]+)R$/)!;\n  return {type: `cursor` as const, x: Number(x) - 1, y: Number(y) - 1};\n};\n\nconst parseMouseSequence = (sequence: Array<number>) => {\n  const [, x, y] = String.fromCharCode(...sequence).match(/^\\x1b\\[<[0-9]+;([0-9]+);([0-9]+)[Mm]$/)!;\n  return {x: Number(x) - 1, y: Number(y) - 1};\n};\n\nconst hex8 = (c: string) => {\n  return c.length === 2 ? c : c.length === 1 ? `${c}${c}` : c.slice(0, 2);\n};\n\nconst extractXRgbColor = (sequence: Array<number>) => {\n  const [, r, g, b] = String.fromCharCode(...sequence).match(/rgb:([0-9a-f]+)\\/([0-9a-f]+)\\/([0-9a-f]+)/i)!;\n\n  return `#${hex8(r)}${hex8(g)}${hex8(b)}`;\n};\n\nconst buildRegistrations = (definition: Record<string, Key | Mouse | Cursor>) => {\n  return Array.from(Object.entries(definition)).map<[string, Callback]>(([sequence, result]) => {\n    return [sequence, () => result];\n  });\n};\n\nexport let sequences: Array<[...Sequence, Callback]> = [];\n\nsequences = sequences.concat(buildRegistrations({\n\n  // Backspace\n  //[`\\b`]: new Key(`backspace`, { shift: true }), // conflicts with <ctrl-h> (\\x08)\n  [`\\x7f`]: new Key(`backspace`),\n\n  // Tab\n  [`\\x1b[Z`]: new Key(`tab`, {shift: true}),\n  [`\\t`]: new Key(`tab`),\n\n  // Enter\n  [`\\r`]: new Key(`enter`),\n  [`\\n`]: new Key(`enter`),\n\n  // Escape\n  [`\\x1b`]: new Key(`escape`),\n\n  // Insert\n  [`\\x1b[2~`]: new Key(`insert`),\n\n  // Delete\n  ...applyModifiers(modifiers => `\\x1b[3;${modifiers}~`, `delete`),\n  [`\\x1b[3~`]: new Key(`delete`),\n\n  // Home\n  [`\\x1b[1~`]: new Key(`home`), // default\n  [`\\x1b[H`]: new Key(`home`), // rxvt\n\n  // End\n  [`\\x1b[4~`]: new Key(`end`), // default\n  [`\\x1b[Ow`]: new Key(`end`), // rxvt\n\n  // Page Up\n  [`\\x1b[5~`]: new Key(`pgup`),\n\n  // Page Down\n  [`\\x1b[6~`]: new Key(`pgdown`),\n\n  // F1\n  ...applyModifiers(modifiers => `\\x1b[1;${modifiers}P`, `f1`),\n  [`\\x1b[11~`]: new Key(`f1`), // default\n  [`\\x1bOP`]: new Key(`f1`), // vt100\n  [`\\x1b[[A`]: new Key(`f1`), // linux mode\n  [`\\x1b[M`]: new Key(`f1`), // sco mode\n\n  // F2\n  ...applyModifiers(modifiers => `\\x1b[1;${modifiers}Q`, `f2`),\n  [`\\x1b[12~`]: new Key(`f2`), // default\n  [`\\x1bOQ`]: new Key(`f2`), // vt100\n  [`\\x1b[[B`]: new Key(`f2`), // linux mode\n  [`\\x1b[N`]: new Key(`f2`), // sco mode\n\n  // F3\n  ...applyModifiers(modifiers => `\\x1b[1;${modifiers}R`, `f3`),\n  [`\\x1b[13~`]: new Key(`f3`), // default\n  [`\\x1bOR`]: new Key(`f3`), // vt100\n  [`\\x1b[[C`]: new Key(`f3`), // linux mode\n  [`\\x1b[O`]: new Key(`f3`), // sco mode\n\n  // F4\n  ...applyModifiers(modifiers => `\\x1b[1;${modifiers}S`, `f4`),\n  [`\\x1b[14~`]: new Key(`f4`), // default\n  [`\\x1bOS`]: new Key(`f4`), // vt100\n  [`\\x1b[[D`]: new Key(`f4`), // linux mode\n  [`\\x1b[P`]: new Key(`f4`), // sco mode\n\n  // F5\n  ...applyModifiers(modifiers => `\\x1b[15;${modifiers}~`, `f5`),\n  [`\\x1b[15~`]: new Key(`f5`), // default\n  [`\\x1b[[E`]: new Key(`f5`), // linux mode\n  [`\\x1b[Q`]: new Key(`f5`), // sco mode\n\n  // F6\n  ...applyModifiers(modifiers => `\\x1b[17;${modifiers}~`, `f6`),\n  [`\\x1b[17~`]: new Key(`f6`), // default\n  [`\\x1b[R`]: new Key(`f6`), // sco mode\n\n  // F7\n  ...applyModifiers(modifiers => `\\x1b[18;${modifiers}~`, `f7`),\n  [`\\x1b[18~`]: new Key(`f7`), // default\n  [`\\x1b[S`]: new Key(`f7`), // sco mode\n\n  // F8\n  ...applyModifiers(modifiers => `\\x1b[19;${modifiers}~`, `f8`),\n  [`\\x1b[19~`]: new Key(`f8`), // default\n  [`\\x1b[T`]: new Key(`f8`), // sco mode\n\n  // F9\n  ...applyModifiers(modifiers => `\\x1b[20;${modifiers}~`, `f9`),\n  [`\\x1b[20~`]: new Key(`f9`), // default\n  [`\\x1b[U`]: new Key(`f9`), // sco mode\n\n  // F10\n  ...applyModifiers(modifiers => `\\x1b[21;${modifiers}~`, `f10`),\n  [`\\x1b[21~`]: new Key(`f10`), // default\n  [`\\x1b[V`]: new Key(`f10`), // sco mode\n\n  // F11\n  ...applyModifiers(modifiers => `\\x1b[23;${modifiers}~`, `f11`),\n  [`\\x1b[23~`]: new Key(`f11`), // default\n  [`\\x1b[W`]: new Key(`f11`), // sco mode\n\n  // F12\n  ...applyModifiers(modifiers => `\\x1b[24;${modifiers}~`, `f12`),\n  [`\\x1b[24~`]: new Key(`f12`), // default\n  [`\\x1b[X`]: new Key(`f12`), // sco mode\n\n  // Left\n  ...applyModifiers(modifiers => `\\x1b[1;${modifiers}D`, `left`),\n  [`\\x1bOD`]: new Key(`left`),\n  [`\\x1b[D`]: new Key(`left`),\n  [`\\x1b\\x1b[D`]: new Key(`left`, {meta: true}), // PuTTY\n\n  // Right\n  ...applyModifiers(modifiers => `\\x1b[1;${modifiers}C`, `right`),\n  [`\\x1bOC`]: new Key(`right`),\n  [`\\x1b[C`]: new Key(`right`),\n  [`\\x1b\\x1b[C`]: new Key(`right`, {meta: true}), // PuTTY\n\n  // Up\n  ...applyModifiers(modifiers => `\\x1b[1;${modifiers}A`, `up`),\n  [`\\x1bOA`]: new Key(`up`),\n  [`\\x1b[A`]: new Key(`up`),\n  [`\\x1b\\x1b[A`]: new Key(`up`, {meta: true}), // PuTTY\n\n  // Down\n  ...applyModifiers(modifiers => `\\x1b[1;${modifiers}B`, `down`),\n  [`\\x1bOB`]: new Key(`down`),\n  [`\\x1b[B`]: new Key(`down`),\n  [`\\x1b\\x1b[B`]: new Key(`down`, {meta: true}), // PuTTY\n\n  // Ctrl+Letter\n  [`\\x01`]: new Key(`a`, {ctrl: true}),\n  [`\\x02`]: new Key(`b`, {ctrl: true}),\n  [`\\x03`]: new Key(`c`, {ctrl: true}),\n  [`\\x04`]: new Key(`d`, {ctrl: true}),\n  [`\\x05`]: new Key(`e`, {ctrl: true}),\n  [`\\x06`]: new Key(`f`, {ctrl: true}),\n  [`\\x07`]: new Key(`g`, {ctrl: true}),\n  [`\\x08`]: new Key(`h`, {ctrl: true}),\n  //[`\\x09`]: new Key(`i`, { ctrl: true }), // conflicts with <tab> (\\t)\n  //[`\\x0a`]: new Key(`j`, { ctrl: true }), // conflicts with <enter> (\\r)\n  [`\\x0b`]: new Key(`k`, {ctrl: true}),\n  [`\\x0c`]: new Key(`l`, {ctrl: true}),\n  //[`\\x0d`]: new Key(`m`, { ctrl: true }), // conflicts with <enter> (\\n)\n  [`\\x0e`]: new Key(`n`, {ctrl: true}),\n  [`\\x0f`]: new Key(`o`, {ctrl: true}),\n  [`\\x10`]: new Key(`p`, {ctrl: true}),\n  [`\\x11`]: new Key(`q`, {ctrl: true}),\n  [`\\x12`]: new Key(`r`, {ctrl: true}),\n  [`\\x13`]: new Key(`s`, {ctrl: true}),\n  [`\\x14`]: new Key(`t`, {ctrl: true}),\n  [`\\x15`]: new Key(`u`, {ctrl: true}),\n  [`\\x16`]: new Key(`v`, {ctrl: true}),\n  [`\\x17`]: new Key(`w`, {ctrl: true}),\n  [`\\x18`]: new Key(`x`, {ctrl: true}),\n  [`\\x19`]: new Key(`y`, {ctrl: true}),\n  [`\\x1a`]: new Key(`z`, {ctrl: true}),\n\n  [`\\x1ba`]: new Key(`a`, {alt: true}),\n  [`\\x1bb`]: new Key(`b`, {alt: true}),\n  [`\\x1bc`]: new Key(`c`, {alt: true}),\n  [`\\x1bd`]: new Key(`d`, {alt: true}),\n  [`\\x1be`]: new Key(`e`, {alt: true}),\n  [`\\x1bf`]: new Key(`f`, {alt: true}),\n  [`\\x1bg`]: new Key(`g`, {alt: true}),\n  [`\\x1bh`]: new Key(`h`, {alt: true}),\n  [`\\x1bi`]: new Key(`i`, {alt: true}),\n  [`\\x1bj`]: new Key(`j`, {alt: true}),\n  [`\\x1bk`]: new Key(`k`, {alt: true}),\n  [`\\x1bl`]: new Key(`l`, {alt: true}),\n  [`\\x1bm`]: new Key(`m`, {alt: true}),\n  [`\\x1bn`]: new Key(`n`, {alt: true}),\n  [`\\x1bo`]: new Key(`o`, {alt: true}),\n  [`\\x1bp`]: new Key(`p`, {alt: true}),\n  [`\\x1bq`]: new Key(`q`, {alt: true}),\n  [`\\x1br`]: new Key(`r`, {alt: true}),\n  [`\\x1bs`]: new Key(`s`, {alt: true}),\n  [`\\x1bt`]: new Key(`t`, {alt: true}),\n  [`\\x1bu`]: new Key(`u`, {alt: true}),\n  [`\\x1bv`]: new Key(`v`, {alt: true}),\n  [`\\x1bw`]: new Key(`w`, {alt: true}),\n  [`\\x1bx`]: new Key(`x`, {alt: true}),\n  [`\\x1by`]: new Key(`y`, {alt: true}),\n  [`\\x1bz`]: new Key(`z`, {alt: true}),\n\n}));\n\nsequences = sequences.concat([\n\n  [`\\x1b]11;rgb:`, HexNode, `/`, HexNode, `/`, HexNode, `\\x07`, sequence => ({type: `info`, name: `screenBackgroundColor`, color: extractXRgbColor(sequence)})],\n\n  [`\\x1b[`, NumberNode, `;`, NumberNode, `R`, sequence => parseCursorSequence(sequence)],\n\n  [`\\x1b[`, NumberNode, `;5u`, sequence => new Key(String.fromCharCode(+String.fromCharCode(...sequence).match(/([0-9]+)/)![0]), {ctrl: true})],\n  [`\\x1b[`, NumberNode, `;6u`, sequence => new Key(String.fromCharCode(+String.fromCharCode(...sequence).match(/([0-9]+)/)![0]), {ctrl: true})],\n\n  [`\\x1b[<0;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`left`, {...parseMouseSequence(sequence), start: true})],\n  [`\\x1b[<0;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`left`, {...parseMouseSequence(sequence), end: true})],\n\n  [`\\x1b[<1;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`middle`, {...parseMouseSequence(sequence), start: true})],\n  [`\\x1b[<1;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`middle`, {...parseMouseSequence(sequence), end: true})],\n\n  [`\\x1b[<2;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`right`, {...parseMouseSequence(sequence), start: true})],\n  [`\\x1b[<2;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`right`, {...parseMouseSequence(sequence), end: true})],\n\n  [`\\x1b[<8;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`left`, {...parseMouseSequence(sequence), start: true, alt: true})],\n  [`\\x1b[<8;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`left`, {...parseMouseSequence(sequence), end: true, alt: true})],\n\n  [`\\x1b[<9;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`middle`, {...parseMouseSequence(sequence), start: true, alt: true})],\n  [`\\x1b[<9;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`middle`, {...parseMouseSequence(sequence), end: true, alt: true})],\n\n  [`\\x1b[<10;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`right`, {...parseMouseSequence(sequence), start: true, alt: true})],\n  [`\\x1b[<10;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`right`, {...parseMouseSequence(sequence), end: true, alt: true})],\n\n  [`\\x1b[<16;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`left`, {...parseMouseSequence(sequence), start: true, ctrl: true})],\n  [`\\x1b[<16;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`left`, {...parseMouseSequence(sequence), end: true, ctrl: true})],\n\n  [`\\x1b[<17;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`middle`, {...parseMouseSequence(sequence), start: true, ctrl: true})],\n  [`\\x1b[<17;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`middle`, {...parseMouseSequence(sequence), end: true, ctrl: true})],\n\n  [`\\x1b[<18;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`right`, {...parseMouseSequence(sequence), start: true, ctrl: true})],\n  [`\\x1b[<18;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`right`, {...parseMouseSequence(sequence), end: true, ctrl: true})],\n\n  [`\\x1b[<32;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`left`, {...parseMouseSequence(sequence)})],\n  [`\\x1b[<32;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`left`, {...parseMouseSequence(sequence)})],\n\n  [`\\x1b[<33;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`middle`, {...parseMouseSequence(sequence)})],\n  [`\\x1b[<33;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`middle`, {...parseMouseSequence(sequence)})],\n\n  [`\\x1b[<34;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`right`, {...parseMouseSequence(sequence)})],\n  [`\\x1b[<34;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`right`, {...parseMouseSequence(sequence)})],\n\n  [`\\x1b[<35;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(null, {...parseMouseSequence(sequence)})],\n  [`\\x1b[<35;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(null, {...parseMouseSequence(sequence)})],\n\n  [`\\x1b[<43;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(null, {...parseMouseSequence(sequence), alt: true})],\n  [`\\x1b[<43;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(null, {...parseMouseSequence(sequence), alt: true})],\n\n  [`\\x1b[<51;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(null, {...parseMouseSequence(sequence), ctrl: true})],\n  [`\\x1b[<51;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(null, {...parseMouseSequence(sequence), ctrl: true})],\n\n  [`\\x1b[<64;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: -1})],\n  [`\\x1b[<64;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: -1})],\n\n  [`\\x1b[<65;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: +1})],\n  [`\\x1b[<65;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: +1})],\n\n  [`\\x1b[<72;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: -1, alt: true})],\n  [`\\x1b[<72;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: -1, alt: true})],\n\n  [`\\x1b[<73;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: +1, alt: true})],\n  [`\\x1b[<73;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: +1, alt: true})],\n\n  [`\\x1b[<80;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: -1, ctrl: true})],\n  [`\\x1b[<80;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: -1, ctrl: true})],\n\n  [`\\x1b[<81;`, NumberNode, `;`, NumberNode, `M`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: +1, ctrl: true})],\n  [`\\x1b[<81;`, NumberNode, `;`, NumberNode, `m`, sequence => new Mouse(`wheel`, {...parseMouseSequence(sequence), start: true, end: true, d: +1, ctrl: true})],\n\n]);\n","import Observable from 'zen-observable'\nimport { Parser, Production } from './parser/Parser'\nimport { sequences } from './sequences'\nimport { Mouse } from './types/Mouse'\n\nexport function parseTerminalInputs(input: Observable<Array<number> | Uint8Array>, { throttleMouseMoveEvents = 0 } = {}) {\n  return new Observable<Production>((observer: any) => {\n    let pendingMouseMove: Mouse | null = null\n    let throttleTimer: ReturnType<typeof setTimeout> | null = null\n\n    const send = (data: Production) => {\n      if (throttleMouseMoveEvents > 0 && data instanceof Mouse && !data.start && !data.end) {\n        pendingMouseMove = data\n\n        if (!throttleTimer) {\n          throttleTimer = setTimeout(() => {\n            observer.next(pendingMouseMove)\n\n            pendingMouseMove = null\n            throttleTimer = null\n          }, throttleMouseMoveEvents)\n        }\n      } else {\n        if (throttleTimer) {\n          clearTimeout(throttleTimer)\n          throttleTimer = null\n        }\n\n        if (pendingMouseMove) {\n          observer.next(pendingMouseMove)\n          pendingMouseMove = null\n        }\n\n        observer.next(data)\n      }\n    }\n\n    const parser = new Parser(send)\n\n    for (const registration of sequences)\n      parser.register(...registration)\n\n    const inputSubscription = input.subscribe({\n      complete() {\n        parser.end()\n\n        setTimeout(() => {\n          observer.complete()\n        })\n      },\n\n      next(rawData) {\n        parser.feed(rawData)\n      },\n    })\n\n    return () => {\n      inputSubscription.unsubscribe()\n    }\n  })\n}\n","import { Readable, Writable } from 'stream'\nimport Observable from 'zen-observable'\n\nimport { cursor } from '../core'\n\nimport { parseTerminalInputs } from './parseTerminalInputs'\nimport { Cursor } from './types/Cursor'\n\nexport function streamToObservable(stream: Readable) {\n  return new Observable<Buffer>(observer => {\n    stream.on(`data`, data => {\n      observer.next(data)\n    })\n\n    stream.on(`error`, error => {\n      observer.error(error)\n    })\n\n    stream.on(`end`, () => {\n      observer.complete()\n    })\n  })\n}\n\nexport async function getCursorPosition({ stdin, stdout }: { stdin: Readable | NodeJS.ReadStream, stdout: Writable }) {\n  return new Promise(resolve => {\n    const subscription = parseTerminalInputs(streamToObservable(stdin)).subscribe({\n      next: input => {\n        if (input.type !== `cursor`)\n          return\n\n        if (`setRawMode` in stdin)\n          stdin.setRawMode(false)\n\n        subscription.unsubscribe()\n        resolve(input)\n      },\n    })\n\n    if (`setRawMode` in stdin)\n      stdin.setRawMode(true)\n\n    stdout.write(cursor.request)\n  })\n}\n","import { Injectable, InjectionToken, inject, signal, untracked } from '@angular/core'\nimport * as _ from '@s-libs/micro-dash'\nimport * as fs from 'fs'\nimport * as os from 'os'\nimport { Subject } from 'rxjs'\nimport { InjectFunction, stringifyReplacer } from '../utils/utils'\n\nexport const LOG_FILE = new InjectionToken<string>('LOG_FILE', {\n  factory: () => os.tmpdir() + '/log.json'\n})\n\nexport interface Logger {\n  log(thing: any): void\n}\n\nexport const LOGGER = new InjectionToken<Logger>('InjectLogger', {\n  providedIn: 'root',\n  factory: () => inject(FileLogger),\n})\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FileLogger implements Logger {\n  $logs = signal<any[]>([])\n  $onLog = new Subject<any>()\n  logFile = null\n\n  constructor() {\n    if (RECTANGULR_TARGET == 'node') {\n      this.logFile = inject(LOG_FILE)\n    }\n  }\n\n  log(thing: any) {\n    // String or Object\n    let logObject = null\n    if (['string', 'number', 'null'].includes(typeof thing)) {\n      logObject = { message: String(thing) }\n    } else {\n      logObject = thing\n    }\n    const entries = Object.entries(logObject)\n    if (entries.length == 1 && logObject.level == 'error') {\n      debugger\n    }\n\n    // Store in memory (max 200)\n    untracked(() => {\n      this.$logs.update(logs => {\n        logs.push(logObject)\n        if (logs.length > 200) {\n          logs = logs.slice(-100)\n        }\n        return [...logs]\n      })\n    })\n\n    // Store in file\n    if (RECTANGULR_TARGET == 'node') {\n      fs.writeFile(this.logFile, stringify(logObject) + '\\n', { flag: 'a+' }, () => { })\n    }\n\n    // The previous line has a problem, what is it ?\n\n\n    // Notify subscribers\n    this.$onLog.next(logObject)\n  }\n}\n\nexport function clearLogFile(logFile: string) {\n  fs.writeFileSync(logFile, '', { flag: 'w' })\n}\n\nfunction createConsoleLog(arg: { logger: Logger; level: string }) {\n  const { logger, level } = arg\n  return function (...things: any[]) {\n    if (things.length == 1) {\n      const thing = things[0]\n      if (typeof thing == 'string') {\n        return logger.log({ level: level, message: thing })\n      } else {\n        const res = _.cloneDeep(thing)\n        res['level'] = level\n        logger.log(res)\n      }\n    } else {\n      return logger.log({ level: level, message: things })\n    }\n  }\n}\n\n/**\n * Using console.log messes up the display in the terminal.\n * This patches the console.* functions to write to a file instead.\n */\nexport function patchNodeConsole(inject: InjectFunction) {\n  const logger = inject(FileLogger)\n  const logFile = inject(LOG_FILE)\n\n  // Save original\n  globalThis['original_console'] = _.pick(console, 'error', 'log', 'info', 'debug', 'warn')\n\n  // Replace\n  console.error = createConsoleLog({ logger, level: 'error' })\n  console.log = createConsoleLog({ logger, level: 'log' })\n  console.info = createConsoleLog({ logger, level: 'info' })\n  console.debug = createConsoleLog({ logger, level: 'debug' })\n  console.warn = createConsoleLog({ logger, level: 'warn' })\n\n  clearLogFile(logFile)\n}\n\n// function caller_location() {\n// \tconst error = new Error();\n// \tconst stack = error.stack\n// \t\t.split(\"\\n\")\n// \t\t.slice(2)\n// \t\t.map((line) => line.replace(/\\s+at\\s+/, \"\"))\n// \tconst caller = stack?.[2].split(' ');\n// \tconst location = {\n// \t\tfunction: caller[0],\n// \t\tfile: caller[1],\n// \t}\n// \treturn location;\n// }\n\nexport function stringify(thing: any) {\n  var cache = []\n\n  if (thing instanceof Error) {\n    const property = Object.getOwnPropertyDescriptor(thing, 'message')\n    Object.defineProperty(thing, 'message', { ...property, enumerable: true })\n  }\n\n  return JSON.stringify(thing, stringifyReplacer(), 2)\n}\n\nexport const global_logs = function () {\n  const inject: InjectFunction = globalThis.rg.inject\n  const logger = inject(FileLogger)\n  return logger.$logs().slice(-100)\n}\n\nexport const REDIRECT_CONSOLE_LOG = new InjectionToken<boolean>('REDIRECT_CONSOLE_LOG', {\n  providedIn: 'root',\n  factory: () => true\n})","import { InjectionToken } from '@angular/core'\nimport { Input } from '../dom-terminal/sources/term/elements/TermScreen'\nimport { Disposable } from '../../utils/queue'\n\nexport interface TerminalInputs {\n  /**\n   * Send an input to the terminal.\n   * Rectangulr will listen to inputs (keyboard, mouse) being sent here and react accordingly.\n   */\n  send(input: Input): void\n  on(event: string, func: (...args: any[]) => void): any\n  /**\n   * Get notified on inputs.\n   */\n  subscribe(func: (input: Input) => void): Disposable\n  setRawMode?(yes: boolean): void\n}\n\nexport interface TerminalScreen {\n  /**\n   * Write some text to the screen.\n   * This can be simple text or ANSI escape sequences.\n   */\n  write(text: string)\n\n  /**\n   * Register a function to be called when the event fires.\n   * @example term.on('resize', e => console.log(e))\n   */\n  on(event: string, func: (...args: any[]) => void): any\n\n  /**\n   * The size available in this terminal as (width,height).\n   */\n  size: () => { width: number, height: number }\n}\n\nexport interface Terminal {\n  name: string\n  inputs: TerminalInputs,\n  screen: TerminalScreen\n}\n\nexport const TERMINAL = new InjectionToken<Terminal>('Terminal')\n","import cliTruncate from 'cli-truncate'\nimport widestLine from 'widest-line'\nimport wrapAnsi from 'wrap-ansi'\nimport { LogPointService } from '../../../../../logs/LogPointService'\nimport { onChange } from '../../../../../utils/reactivity'\nimport { AnyObject, assert } from '../../../../../utils/utils'\nimport { TermElement } from \"../../core/dom/Element\"\nimport { flags } from '../../core/dom/flags'\n\nexport class TermText2 extends TermElement {\n  static elementName = 'text'\n  name = 'text'\n  textContent = ''\n  lines = []\n\n  internalDimensions = { width: 0, height: 0 }\n  conf: AnyObject = {\n    maxWidth: Number.MAX_SAFE_INTEGER,\n    maxHeight: Number.MAX_SAFE_INTEGER,\n    wrap: null,\n  }\n\n  dirtyTextLayout = false\n\n  lp?: LogPointService = undefined\n\n  constructor() {\n    super()\n\n    this.style.add({\n      minHeight: 1,\n      flexDirection: 'row',\n      flexShrink: 0,\n    })\n\n    onChange(this, 'textContent', () => {\n      this.lp?.logPoint('TextContentChanged', { textContent: this.textContent })\n      this.setDirtyTextLayout()\n    })\n  }\n\n  setDirtyTextLayout() {\n    this.setDirtyLayoutFlag()\n    this.queueDirtyRect()\n    this.yogaNode.markDirty()\n    this.dirtyTextLayout = true\n    this.lp?.logPoint('DirtyTextLayout')\n  }\n\n  setLayoutConfig(configuration: AnyObject) {\n    Object.assign(this.conf, configuration)\n    this.setDirtyTextLayout()\n  }\n\n  computeLayout() {\n    const wrap = this.style.get('wrap')\n    if (wrap) {\n      const wrappedText = wrapText(this.textContent, this.conf.maxWidth, wrap)\n      this.lines = wrappedText.split('\\n')\n      this.internalDimensions = measureText(wrappedText)\n      // this.yogaNode.setFlexShrink(1)\n    } else {\n      this.lines = this.textContent.split('\\n')\n      this.internalDimensions = measureText(this.textContent)\n      // this.yogaNode.setFlexShrink(0)\n    }\n    // this.yogaNode.markDirty()\n    // this.setDirtyLayoutFlag()\n    // this.queueDirtyRect()\n    this.dirtyTextLayout = false\n    this.lp?.logPoint('TermText.ComputeLayout', { dimensions: this.internalDimensions })\n  }\n\n  getLine(y: number) {\n    return this.lines[y]\n  }\n\n  getPreferredSize(maxWidth, widthMode, maxHeight, heightMode) {\n    if (!isNaN(maxWidth)) {\n      maxWidth = Math.ceil(maxWidth)\n      this.setLayoutConfig({ maxWidth })\n    }\n\n    if (!isNaN(maxHeight)) {\n      maxHeight = Math.ceil(maxHeight)\n      this.setLayoutConfig({ maxHeight })\n    }\n\n    if (this.dirtyTextLayout) {\n      this.computeLayout()\n    }\n\n    return {\n      width: this.internalDimensions.width,\n      height: this.internalDimensions.height,\n    }\n  }\n\n  getInternalContentWidth() {\n    return this.internalDimensions.width\n  }\n\n  getInternalContentHeight() {\n    return this.internalDimensions.height\n  }\n\n  renderContent(x, y, l) {\n    assert(!(this.flags & flags.ELEMENT_HAS_DIRTY_LAYOUT))\n\n    if (this.getInternalContentHeight() <= y) return this.renderBackground(l)\n\n    let fullLine = y < this.getInternalContentHeight() ? this.getLine(y) : ``\n    let fullLineLength = fullLine.length\n\n    let fullLineStart = 0\n\n    if (this.style.get('textAlign') == 'center')\n      fullLineStart = Math.floor((this.scrollRect.width - fullLineLength) / 2)\n\n    if (this.style.get('textAlign') == 'right')\n      fullLineStart = this.scrollRect.width - fullLineLength\n\n    let prefixLength = Math.max(0, Math.min(fullLineStart - x, l))\n    let lineStart = Math.max(0, x - fullLineStart)\n    let lineLength = Math.max(0, Math.min(l + x - fullLineStart, l, fullLineLength - lineStart))\n    let suffixLength = Math.max(0, l - prefixLength - lineLength)\n\n    let prefix = this.renderBackground(prefixLength)\n    let text = this.renderText(fullLine.substr(lineStart, lineLength))\n    let suffix = this.renderBackground(suffixLength)\n\n    return prefix + text + suffix\n  }\n}\n\nexport function wrapText(text: string, maxWidth: number, wrapType: string): string {\n  let wrappedText = text\n\n  if (wrapType === 'wrap') {\n    wrappedText = wrapAnsi(text, maxWidth, {\n      trim: false,\n      hard: true,\n    })\n  }\n\n  if (wrapType!.startsWith('truncate')) {\n    let position: 'end' | 'middle' | 'start' = 'end'\n\n    if (wrapType === 'truncate-middle') {\n      position = 'middle'\n    }\n\n    if (wrapType === 'truncate-start') {\n      position = 'start'\n    }\n\n    wrappedText = cliTruncate(text, maxWidth, { position })\n  }\n\n  return wrappedText\n}\n\nfunction measureText(text: string) {\n  if (text.length === 0) {\n    return {\n      width: 0,\n      height: 0,\n    }\n  }\n\n  const width = widestLine(text)\n  const height = text.split('\\n').length\n  const size = { width, height }\n\n  return size\n}\n","import { Injectable, Injector, runInInjectionContext, inject } from \"@angular/core\"\nimport { assert } from \"../../../../../utils/utils\"\nimport { LOGGER } from \"../../../../logger\"\nimport { TermElement } from '../../core/dom/Element'\nimport { TermText2 } from \"./TermText2\"\n\ntype ElementConstructor = typeof TermElement\n\n/**\n * ElementPool\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ElementPool {\n\tinjector = inject(Injector)\n\tlogger = inject(LOGGER)\n\n\tenabled = false\n\telementClasses: ElementConstructor[] = [TermElement, TermText2]\n\telementClassesByName = new Map<string, ElementConstructor>()\n\telementPools = new Map<ElementConstructor, TermElement[]>()\n\n\tconstructor() {\n\t\tthis.elementClassesByName = new Map()\n\t\tthis.elementPools = new Map()\n\t\tthis.elementClasses.forEach(el => {\n\t\t\tconst name = el.elementName\n\t\t\tthis.elementClassesByName.set(name, el)\n\n\t\t\tthis.elementPools.set(el, [])\n\t\t})\n\t}\n\n\t/**\n\t * Creates an HTML element.\n\t * Or returns an old one from the pool.\n\t */\n\tcreate(name: string) {\n\t\tlet elementContructor = this.elementClassesByName.get(name) || TermElement\n\n\t\tconst elPool = this.elementPools.get(elementContructor)\n\t\tif (elPool.length > 0) {\n\t\t\tconst el = elPool.pop()\n\t\t\t// this.logger.log({ message: 'pop', id: el.id })\n\t\t\treturn el\n\t\t} else {\n\t\t\tlet el: TermElement\n\t\t\trunInInjectionContext(this.injector, () => {\n\t\t\t\tel = new elementContructor()\n\t\t\t})\n\t\t\t// this.logger.log({ message: 'create', id: el.id })\n\t\t\treturn el\n\t\t}\n\t}\n\n\t/**\n\t * Resets an element, and puts it back in the pool.\n\t */\n\tpool(el: TermElement) {\n\t\tif (this.enabled) {\n\t\t\tconst elPool = this.elementPools.get(el.constructor as any)\n\t\t\tif (elPool) {\n\t\t\t\trunInInjectionContext(this.injector, () => {\n\t\t\t\t\tel.reset()\n\t\t\t\t\tassert(el.parentNode == null)\n\t\t\t\t\tassert(el.childNodes.length == 0)\n\t\t\t\t})\n\t\t\t\telPool.push(el)\n\t\t\t}\n\t\t\t// this.logger.log({ message: 'push', id: el.id })\n\t\t}\n\t}\n}","import { Injectable, NgZone, inject, signal } from '@angular/core'\nimport { isBoolean, isEmpty } from '@s-libs/micro-dash'\nimport z from 'zod'\nimport { Tasks } from '../../../../../tasks/Tasks'\nimport { cursor, feature, screen, style } from '../../../../../term-strings/core'\nimport { Key } from '../../../../../term-strings/parse'\nimport { Parser, Production } from '../../../../../term-strings/parse/parser/Parser'\nimport { sequences } from '../../../../../term-strings/parse/sequences'\nimport { assert } from '../../../../../utils/utils'\nimport { LOGGER } from '../../../../logger'\nimport { TERMINAL } from '../../../../terminals/Terminal'\nimport { Event, Point, Rect } from '../../core'\nimport { TermElement } from '../../core/dom/Element'\nimport { isInsideOf } from '../../core/dom/Node'\nimport { flags } from '../../core/dom/flags'\nimport { ElementPool } from './element-pool'\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TermScreen extends TermElement {\n  terminal = inject(TERMINAL)\n  logger = inject(LOGGER)\n  elementPool = inject(ElementPool)\n  ngZone = inject(NgZone)\n  tasks = inject(Tasks)\n\n  /** We keep track of whether the screen is fully setup or not (has stdin/stdout) */\n  ready = false\n  /**  Our subscription to the input events */\n  subscription: any = null\n  /** A timer used to trigger layout / clipping / render updates after a node becomes dirty */\n  updateTimer: any = null\n  trackScreenSize = false\n  mouseOverElement: TermElement | null = null\n  mouseEnterElements: TermElement[] = []\n  caret: Point = null as any\n  // detachedNodes: Element[] = []\n  parser: Parser\n  decoder = new TextDecoder()\n  size = signal({ width: 0, height: 0 })\n\n  // recycledThisTick = 0\n\n  constructor() {\n    super()\n    this.rootNode = this\n    this.depth = 0\n\n    this.style.add({\n      position: 'relative',\n      width: 0,\n      height: 0,\n      // overflow: `hidden`,\n      scroll: null,\n      flexShrink: 0,\n      flexGrow: 0,\n      // maxHeight: '100%',\n      // maxWidth: '100%',\n    })\n\n    this.parser = new Parser(input => {\n      // @ts-ignore\n      this.handleInput(input)\n    })\n    for (const registration of sequences) {\n      this.parser.register(...registration)\n    }\n\n    // Bind the listeners that will convert the \"mousemove\" events into \"mouseover\" / \"mouseout\" / \"mouseenter\" / \"mouseleave\"\n    this.addEventListener(`mousemove`, e => this.dispatchMouseOverEvents(e))\n    this.addEventListener(`mousemove`, e => this.dispatchMouseEnterEvents(e))\n\n    // Bind the listeners that enable navigating between focused elements\n    // this.addShortcutListener(`S-tab`, e => e.setDefault(() => this.focusPreviousElement()), {\n    //   capture: true,\n    // })\n    // this.addShortcutListener(`tab`, e => e.setDefault(() => this.focusNextElement()), {\n    //   capture: true,\n    // })\n\n    // Bind the listener that exit the application on C-c\n    // this.addShortcutListener(`C-c`, (e: any) => this.terminate(), { capture: true })\n\n    this.setPropertyTrigger(`debugPaintRects`, false, {\n      validate: value => isBoolean(value),\n      trigger: value => {\n        this.queueDirtyRect()\n      },\n    })\n  }\n\n  requestUpdates() {\n    this.tasks.queue({\n      func: () => { this.renderScreen() },\n      debounce: Tasks.UI,\n      name: 'rg.renderScreen',\n    })\n  }\n\n  triggerUpdates({ maxDepth = 5 } = {}) {\n\n    this.computeStyles()\n\n    let needsFullRerender =\n      this.flags & (flags.ELEMENT_HAS_DIRTY_NODE_LIST | flags.ELEMENT_HAS_DIRTY_RENDER_LIST)\n\n    if (this.flags & flags.ELEMENT_HAS_DIRTY_NODE_LIST) {\n      this.nodeList = this.generateNodeList()\n      this.clearDirtyNodeListFlag()\n    }\n\n    if (this.flags & flags.ELEMENT_HAS_DIRTY_RENDER_LIST) {\n      this.renderList = this.generateRenderList()\n      this.clearDirtyRenderListFlag()\n    }\n\n    let dirtyLayoutNodes = []\n    let dirtyScrollNodes = []\n\n    if (this.flags & (flags.ELEMENT_HAS_DIRTY_LAYOUT | flags.ELEMENT_HAS_DIRTY_LAYOUT_CHILDREN)) {\n      this.yogaNode.calculateLayout()\n      this.cascadeLayout({ dirtyLayoutNodes })\n    }\n\n    if (this.flags & (flags.ELEMENT_HAS_DIRTY_CLIPPING | flags.ELEMENT_HAS_DIRTY_CLIPPING_CHILDREN))\n      this.cascadeClipping({ dirtyScrollNodes })\n\n    if (this.flags & flags.ELEMENT_IS_DIRTY)\n      throw new Error(\n        `Aborted 'triggerUpdates' execution: Flags have not been correctly reset at some point (0b${(\n          this.flags & flags.ELEMENT_IS_DIRTY\n        )\n          .toString(2)\n          .padStart(16, '0')}).`\n      )\n\n    // this.computeTextLayout()\n\n    for (let dirtyLayoutNode of dirtyLayoutNodes) dirtyLayoutNode.dispatchEvent(new Event('layout'))\n\n    for (let dirtyScrollNode of dirtyScrollNodes) dirtyScrollNode.dispatchEvent(new Event('scroll'))\n\n    if (needsFullRerender) this.queueDirtyRect()\n\n    if (this.flags & flags.ELEMENT_IS_DIRTY) {\n      if (maxDepth < 1) {\n        throw new Error(`Aborted 'triggerUpdates' execution: Too much recursion.`)\n      } else {\n        this.triggerUpdates({ maxDepth: maxDepth - 1 })\n      }\n    }\n  }\n\n  attachScreen(trackOutputSize = true, throttleMouseMoveEvents = 1000 / 60) {\n    if (this.ready) throw new Error(`Failed to execute 'setup': This screen is already in use.`)\n\n    this.ready = true\n\n    this.trackScreenSize = trackOutputSize\n\n    // Automatically clear the screen when the program exits\n    if (RECTANGULR_TARGET == 'node') {\n      process.on(`uncaughtException`, () => { this.handleException })\n      process.on(`exit`, () => { this.handleExit })\n    }\n\n    this.terminal.inputs.subscribe(input => {\n      if (input.type == 'raw') {\n        RawInputType.parse(input)\n        this.parser.feed(input.buffer)\n      } else {\n        this.handleInput(input)\n      }\n    })\n\n    // Automatically resize the screen when its output changes\n    {\n      this.style.add(this.size)\n      this.size.set(this.terminal.screen.size())\n\n      this.terminal.screen.on('resize', size => {\n        this.size.set(this.terminal.screen.size())\n        console.log(this.size())\n      })\n    }\n\n    // If we can operate in raw mode, we do\n    if (RECTANGULR_TARGET == 'node') {\n      this.terminal.inputs.setRawMode?.(true)\n    }\n\n    // Enter the alternate screen\n    this.writeToTerminal(screen.alternateScreen.in)\n\n    // Disable the terminal soft wrapping\n    this.writeToTerminal(screen.noWrap.in)\n\n    // Hide the cursor (it will be renderer with everything else later)\n    this.writeToTerminal(cursor.hidden)\n\n    // Enable mouse tracking (all events are tracked, even when the mouse button isn't pressed)\n    this.writeToTerminal(feature.enableMouseHoldTracking.in)\n    this.writeToTerminal(feature.enableMouseMoveTracking.in)\n    this.writeToTerminal(feature.enableExtendedCoordinates.in)\n\n    // Clear the current font style so that we aren't polluted by previous applications\n    this.writeToTerminal(style.clear)\n\n    // Finally schedule the first update of the screen\n    this.requestUpdates()\n  }\n\n  releaseScreen() {\n    if (!this.ready) return\n\n    // Disable the various mouse tracking modes\n    this.writeToTerminal(feature.enableExtendedCoordinates.out)\n    this.writeToTerminal(feature.enableMouseMoveTracking.out)\n    this.writeToTerminal(feature.enableMouseHoldTracking.out)\n\n    // Display the cursor back\n    this.writeToTerminal(cursor.normal)\n\n    // Exit the alternate screen\n    this.writeToTerminal(screen.alternateScreen.out)\n\n    // Stop resizing the screen\n    if (this.trackScreenSize) {\n      // this.style.assign({ width: undefined, height: undefined })\n      // TODO: re add this ?\n      // this.terminal.output.removeListener(`resize`, this.handleStdoutResize)\n    }\n\n    // Stop listening for events from the input stream\n    this.subscription?.unsubscribe()\n    this.subscription = null\n\n    if (RECTANGULR_TARGET == 'node') {\n      // Remove the exit hooks, since the screen is already closed\n      process.removeListener(`uncaughtException`, (e) => this.handleException(e))\n      process.removeListener(`exit`, () => this.handleExit())\n    }\n\n    this.trackScreenSize = false\n\n    this.ready = false\n  }\n\n  clearScreen() {\n    this.writeToTerminal(screen.clear)\n  }\n\n  exit() {\n    this.releaseScreen()\n\n    // @ts-ignore\n    if (globalThis['RECTANGULR_TARGET'] == 'node') {\n      process.exit(0)\n    }\n  }\n\n  dispatchMouseOverEvents(e: any) {\n    let targetElement = this.getElementAt(e.worldCoordinates)\n\n    if (targetElement === this.mouseOverElement) return\n\n    if (this.mouseOverElement) {\n      let event = new Event(`mouseout`)\n      event.mouse = e.mouse\n\n      event.worldCoordinates = e.worldCoordinates\n      event.contentCoordinates = e.contentCoordinates\n\n      this.mouseOverElement.dispatchEvent(event)\n    }\n\n    this.mouseOverElement = targetElement\n\n    if (this.mouseOverElement) {\n      let event = new Event(`mouseover`)\n      event.mouse = e.mouse\n\n      event.worldCoordinates = e.worldCoordinates\n      event.contentCoordinates = e.contentCoordinates\n\n      this.mouseOverElement.dispatchEvent(event)\n    }\n  }\n\n  dispatchMouseEnterEvents(e: any) {\n    let targetElement = this.getElementAt(e.worldCoordinates)\n\n    let index = this.mouseEnterElements.indexOf(targetElement)\n\n    let removedElements = []\n    let addedElements = []\n\n    if (index !== -1) {\n      removedElements = this.mouseEnterElements.splice(index + 1, this.mouseEnterElements.length)\n    } else {\n      let currentElement = targetElement\n      let currentIndex = index\n\n      while (currentElement && currentIndex === -1) {\n        addedElements.unshift(currentElement)\n\n        currentElement = currentElement.parentNode\n        currentIndex = this.mouseEnterElements.indexOf(currentElement)\n      }\n\n      if (currentElement) {\n        removedElements = this.mouseEnterElements.splice(\n          currentIndex + 1,\n          this.mouseEnterElements.length\n        )\n      } else {\n        removedElements = this.mouseEnterElements.splice(0, this.mouseEnterElements.length)\n      }\n    }\n\n    this.mouseEnterElements = this.mouseEnterElements.concat(addedElements)\n\n    for (let t = removedElements.length - 1; t >= 0; --t) {\n      let event = new Event(`mouseleave`, { bubbles: false })\n      event.mouse = e.mouse\n\n      event.worldCoordinates = e.worldCoordinates\n      event.contentCoordinates = e.contentCoordinates\n\n      removedElements[t].dispatchEvent(event)\n    }\n\n    for (let t = 0; t < addedElements.length; ++t) {\n      let event = new Event(`mouseenter`, { bubbles: false })\n      event.mouse = e.mouse\n\n      event.worldCoordinates = e.worldCoordinates\n      event.contentCoordinates = e.contentCoordinates\n\n      addedElements[t].dispatchEvent(event)\n    }\n  }\n\n  getElementAt(position) {\n    this.triggerUpdates()\n\n    let { x, y } = position\n\n    for (let element of this.renderList) {\n      if (!element.elementClipRect) continue\n\n      if (\n        x < element.elementClipRect.x ||\n        x >= element.elementClipRect.x + element.elementClipRect.width\n      )\n        continue\n\n      if (\n        y < element.elementClipRect.y ||\n        y >= element.elementClipRect.y + element.elementClipRect.height\n      )\n        continue\n\n      return element\n    }\n\n    return null\n  }\n\n  renderScreen() {\n    this.triggerUpdates()\n\n    this.renderScreenImpl(this.flushDirtyRects())\n\n    // // Recycle unused nodes after rendering\n    // this.detachedNodes.forEach(node => {\n    //   if (!node.parentNode) {\n    //     this.recycleNode(node)\n    //   }\n    // })\n\n    // setTimeout(() => {\n    //   if (this.recycledThisTick > 0) {\n    //     this.logger.log({ message: `recycleNode : recycled ${this.recycledThisTick} nodes` })\n    //   }\n    //   this.recycledThisTick = 0\n    // })\n    // this.detachedNodes.length = 0\n  }\n\n  poolNode(node: TermElement) {\n    this.elementPool.pool(node)\n  }\n\n  queueDirtyRect(dirtyRect = this.elementClipRect, checkIntersectionFrom = 0) {\n    if (Rect.isEmpty(dirtyRect)) return\n\n    // Look if the dirtyRect intersects one that was already there\n    let intersectorIndex = this.dirtyRects.findIndex(other => {\n      return dirtyRect.intersectsRect(other)\n    })\n\n    // If it does, queue rects around the intersection\n    if (intersectorIndex !== -1) {\n      this.queueDirtyRects(\n        dirtyRect.excludeRect(this.dirtyRects[intersectorIndex]),\n        intersectorIndex + 1\n      )\n    } else {\n      // assert(dirtyRect.x % 1 == 0)\n      // assert(dirtyRect.y % 1 == 0)\n      // assert(dirtyRect.width % 1 == 0)\n      // assert(dirtyRect.height % 1 == 0)\n      this.dirtyRects.push(dirtyRect)\n    }\n\n    this.requestUpdates()\n  }\n\n  renderScreenImpl(dirtyRects: Rect[] = [this.elementClipRect]) {\n    const buffer = this.renderToString(dirtyRects)\n    if (buffer.length > 0) {\n      this.writeToTerminal(cursor.hidden + buffer)\n    }\n  }\n\n  renderToString(dirtyRects: Rect[] = [this.elementClipRect]) {\n    let buffer = \"\"\n\n    let debugColor = DEBUG_COLORS[currentDebugColorIndex]\n    currentDebugColorIndex = (currentDebugColorIndex + 1) % DEBUG_COLORS.length\n\n    while (!isEmpty(dirtyRects)) {\n      let dirtyRect = dirtyRects.shift()\n\n      for (let element of this.renderList) {\n        if (!element.elementClipRect) continue\n\n        let intersection = Rect.getIntersectingRect(element.elementClipRect, dirtyRect)\n\n        if (!intersection) continue\n\n        let truncation = dirtyRect.excludeRect(intersection)\n        dirtyRects = truncation.concat(dirtyRects)\n\n        for (let y = 0, Y = intersection.height; y < Y; ++y) {\n          let relativeX = intersection.x - element.elementWorldRect.x\n          let relativeY = intersection.y - element.elementWorldRect.y + y\n\n          let line = String(element.renderElement(relativeX, relativeY, intersection.width))\n\n          if (this.debugPaintRects) line = style.color.back(debugColor) + line + style.clear\n\n          buffer += cursor.moveTo({ x: intersection.x, y: intersection.y + y })\n          buffer += line\n        }\n\n        break\n      }\n    }\n\n    // if (this.activeElement?.caret) {\n    //   let x =\n    //     this.activeElement.contentWorldRect.x -\n    //     this.activeElement.scrollRect.x +\n    //     this.activeElement.caret.x\n    //   let y =\n    //     this.activeElement.contentWorldRect.y -\n    //     this.activeElement.scrollRect.y +\n    //     this.activeElement.caret.y\n    //   buffer += cursor.moveTo({ x, y })\n    //   buffer += cursor.normal\n    // }\n\n    if (this.activeElement && this.activeElement.contentClipRect && this.activeElement.caret) {\n      let x =\n        this.activeElement.contentWorldRect.x -\n        this.activeElement.scrollRect.x +\n        this.activeElement.caret.x\n      let y =\n        this.activeElement.contentWorldRect.y -\n        this.activeElement.scrollRect.y +\n        this.activeElement.caret.y\n\n      // Is in the contentClipRect ?\n      if (\n        x >= this.activeElement.contentClipRect.x &&\n        x < this.activeElement.contentClipRect.x + this.activeElement.contentClipRect.width &&\n        y >= this.activeElement.contentClipRect.y &&\n        y < this.activeElement.contentClipRect.y + this.activeElement.contentClipRect.height\n      ) {\n        let visibleElement = this.getElementAt(new Point({ x, y }))\n\n        if (isInsideOf(this.activeElement, visibleElement)) {\n          buffer += cursor.moveTo({ x, y })\n          buffer += cursor.normal\n        }\n      }\n    }\n\n    return buffer\n  }\n\n  writeToTerminal(text: string) {\n    if (this.ngZone) {\n      this.ngZone.runOutsideAngular(() => {\n        this.terminal.screen.write(text)\n      })\n    } else {\n      this.terminal.screen.write(text)\n    }\n  }\n\n  handleException(exception) {\n    this.releaseScreen()\n\n    process.stderr.write(exception.stack)\n    process.exit(1)\n  }\n\n  handleExit() {\n    this.parser.end()\n    this.releaseScreen()\n  }\n\n  handleInput(input: Input) {\n    assert(input.type)\n    if (input.type == 'key') {\n      KeyInputType.parse(input)\n      let event = new Event(`keypress`, { cancelable: true, bubbles: true })\n      event.key = input\n      // this.logger.log({ input: keyToString(input) })\n\n      this.dispatchEvent(event)\n    } else if (input.type == 'mouse') {\n      MouseInputType.parse(input)\n      let worldCoordinates = new Point({ x: input.x, y: input.y })\n\n      let targetElement = this.getElementAt(worldCoordinates)\n\n      if (!targetElement) return // Some envs (xterm.js) sometimes send mouse coordinates outside of the possible range\n\n      let contentCoordinates = new Point({\n        x: worldCoordinates.x - targetElement.contentWorldRect.x,\n        y: worldCoordinates.y - targetElement.contentWorldRect.y + targetElement.scrollTop,\n      })\n\n      if (input.name === `wheel`) {\n        let event = new Event(`mousewheel`, { bubbles: true })\n        event.mouse = input\n\n        event.worldCoordinates = worldCoordinates\n        event.contentCoordinates = contentCoordinates\n\n        targetElement.dispatchEvent(event)\n      } else {\n        if (input.start) {\n          let event = new Event(`mousedown`, { cancelable: true, bubbles: true })\n          event.mouse = input\n\n          event.worldCoordinates = worldCoordinates\n          event.contentCoordinates = contentCoordinates\n\n          targetElement.dispatchEvent(event)\n        }\n\n        if (input.end) {\n          let event = new Event(`mouseup`, { cancelable: true, bubbles: true })\n          event.mouse = input\n\n          event.worldCoordinates = worldCoordinates\n          event.contentCoordinates = contentCoordinates\n\n          targetElement.dispatchEvent(event)\n        }\n\n        if (!input.start && !input.end) {\n          let event = new Event(`mousemove`, { cancelable: true, bubbles: true })\n          event.mouse = input\n\n          event.worldCoordinates = worldCoordinates\n          event.contentCoordinates = contentCoordinates\n\n          targetElement.dispatchEvent(event)\n        }\n      }\n\n    } else if (input.type == 'data') {\n      // if (RECTANGULR_TARGET == 'web') {\n      //   console.log(`target web cant handle data input: ${input.buffer}`)\n      //   return\n      // }\n\n      DataInputType.parse(input)\n      // let emitData = () => {\n      //   let event = new Event(`data`, { cancelable: true })\n      //   event.buffer = input\n\n      //   if (this.activeElement) {\n      //     this.activeElement.dispatchEvent(event)\n      //   } else {\n      //     this.dispatchEvent(event)\n      //   }\n      // }\n\n      const asString = this.decoder.decode(input.buffer)\n      for (const key of asString) {\n        let event = new Event(`keypress`, { cancelable: true, bubbles: true })\n        event.key = new Key(key)\n        // log(`handleInput: ${keyToString(event.key)}`)\n\n        // event.setDefault(() => {q\n        //   emitData()\n        // })\n\n        this.dispatchEvent(event)\n      }\n    } else {\n      throw new Error(`handleInput : Unknown input type ${input.type}`)\n    }\n    // forceRefresh()\n  }\n\n  private dirtyStyleNodes: TermElement[] = []\n\n  queueDirtyStyle(element: TermElement): boolean {\n    if (element.style.wasQueued) return false\n\n    this.dirtyStyleNodes.push(element)\n    element.style.wasQueued = true\n    return true\n  }\n\n  computeStyles() {\n    this.dirtyStyleNodes.sort((a, b) => a.depth - b.depth)\n    for (const node of this.dirtyStyleNodes) {\n      node.style.update()\n    }\n    this.dirtyStyleNodes.length = 0\n  }\n\n}\n\n// We will iterate through those colors when rendering if the debugPaintRects option is set\nconst DEBUG_COLORS = [`red`, `green`, `blue`, `magenta`, `yellow`]\nlet currentDebugColorIndex = 0\n\ntype DataInput = {\n  type: 'data',\n  buffer: any\n}\n\nconst DataInputType = z.object({\n  type: z.literal('data')\n})\n\ntype MouseInput = {\n  type: 'mouse'\n  name: string\n  start: any\n  end: any\n  x: any\n  y: any\n}\n\nconst MouseInputType = z.object({\n  type: z.literal('mouse'),\n  name: z.string().nullable(),\n  start: z.boolean(),\n  end: z.boolean(),\n  x: z.number(),\n  y: z.number(),\n})\n\ntype KeyInput = {\n  type: 'key'\n  name: string,\n  alt: boolean\n  ctrl: boolean\n  meta: boolean\n  shift: boolean\n}\n\nconst KeyInputType = z.object({\n  type: z.literal('key'),\n  name: z.string(),\n  alt: z.boolean(),\n  ctrl: z.boolean(),\n  meta: z.boolean(),\n  shift: z.boolean(),\n})\n\ntype RawInput = {\n  type: 'raw',\n  buffer: Uint8Array\n}\n\nconst RawInputType = z.object({\n  type: z.literal('raw')\n})\n\nexport type Input = KeyInput | MouseInput | DataInput | RawInput\n\nfunction handleInputFromTermStrings(data: Production): void {\n\n}\n\n","// export { TermButton } from './TermButton'\n// export { TermCheckbox } from './TermCheckbox'\n// export { TermForm } from './TermForm'\n// export { TermInput } from './TermInput'\n// export { TermLabel } from './TermLabel'\n// export { TermRadio } from './TermRadio'\nexport { TermScreen } from './TermScreen'\n// export { TermScrollbar } from './TermScrollbar'\n// export { TermText } from './TermText'\nexport { TermText2 } from './TermText2'\n// export { TermComment } from './TermComment'\n// export { TermInput2 } from './TermInput2'\n","import { assert } from '../utils/utils'\n\n// Copied from: https://github.com/angular/angular/blob/main/packages/core/src/render3/interfaces/view.ts\n//              https://github.com/angular/angular/blob/main/packages/core/src/render3/interfaces/container.ts\n\nexport function rootLView() {\n  const ng = globalThis['ng']\n  const dom = ng.getHostElement(globalThis['DOM'])\n  return dom.__ngContext__.lView\n}\n\nexport const HOST = 0\nexport const TVIEW = 1\nexport const FLAGS = 2\nexport const PARENT = 3\nexport const NEXT = 4\nexport const DESCENDANT_VIEWS_TO_REFRESH = 5\nexport const T_HOST = 6\nexport const CLEANUP = 7\nexport const CONTEXT = 8\nexport const INJECTOR = 9\nexport const ENVIRONMENT = 10\nexport const RENDERER = 11\nexport const CHILD_HEAD = 12\nexport const CHILD_TAIL = 13\n// FIXME(misko): Investigate if the three declarations aren't all same thing.\nexport const DECLARATION_VIEW = 14\nexport const DECLARATION_COMPONENT_VIEW = 15\nexport const DECLARATION_LCONTAINER = 16\nexport const PREORDER_HOOK_FLAGS = 17\nexport const QUERIES = 18\nexport const ID = 19\nexport const EMBEDDED_VIEW_INJECTOR = 20\nexport const ON_DESTROY_HOOKS = 21\nexport const HYDRATION = 22\nexport const REACTIVE_TEMPLATE_CONSUMER = 23\nexport const REACTIVE_HOST_BINDING_CONSUMER = 24\nexport const HEADER_OFFSET = 25\n\n// const TVIEW_TYPE_ROOT = 0\n// const TVIEW_TYPE_COMPONENT = 1\n// const TVIEW_TYPE_EMBEDDED = 2\n\n// LCONTAINER\nexport const TYPE = 1\nexport const HAS_TRANSPLANTED_VIEWS = 2\nexport const NATIVE = 7\nexport const VIEW_REFS = 8\nexport const MOVED_VIEWS = 9\nexport const DEHYDRATED_VIEWS = 10\nexport const CONTAINER_HEADER_OFFSET = 11\n\nfunction isLView(value) {\n  return Array.isArray(value) && typeof value[TYPE] === 'object'\n}\n\nfunction isLContainer(value) {\n  return Array.isArray(value) && value[TYPE] === true\n}\n\n/**\n * Analyze your components at runtime in your debug console.\n * @example rg.component() // The whole application.\n * @example rg.component('MyComponentName') // A specific component.\n * @example rg.component(this) // The component the debugger stopped in.\n */\nexport function debugComponent(arg: any) {\n  if (typeof arg == 'string') {\n    return debugComponentByName(arg)\n  } else if (typeof arg == 'object') {\n    if (typeof arg.__ngContext__ == 'number') {\n      const comp = globalThis['ng'].getComponent(arg)\n      return new NiceView(comp)\n    } else {\n      return new NiceView(arg)\n    }\n  } else if (typeof arg == 'undefined') {\n    return new NiceView(rootLView())\n  }\n  assert(false, \"can't debug this\")\n}\n\n/**\n * @example rg.debug.component('AppComponent') // A specific component\n */\nexport function debugComponentByName(name: string) {\n  let cacheNames = {}\n  new NiceView(rootLView(), { cacheNames })\n  return cacheNames[name]\n}\n\nexport class NiceView {\n  name: any\n  context: {}\n  more: any\n  children: (NiceView | NiceContainer)[]\n\n  constructor(lView: Array<any>, state: { cacheNames?: {}; cacheLViews?: WeakMap<any, any> } = {}) {\n    let { cacheNames = {}, cacheLViews = new WeakMap() } = state\n\n    if (!lView) return null\n    if (cacheLViews.has(lView)) {\n      return cacheLViews.get(lView)\n    }\n\n    let name = lView[CONTEXT].constructor.name\n    this.name = name\n\n    // To be able to debug a component by name \"rgDebug('MyComponentClassName')\"\n    // we index the components by name as we traverse the component tree\n    if (cacheNames[name]) {\n      if (!cacheNames[name].includes(this)) {\n        cacheNames[name].push(this)\n      }\n    } else {\n      cacheNames[name] = [this]\n    }\n\n    cacheLViews.set(lView, this)\n\n    // Copy context\n    this.context = {}\n    for (const key in lView[CONTEXT]) {\n      if (key !== '__ngContext__') {\n        this.context[key] = lView[CONTEXT][key]\n      }\n    }\n\n    // More info\n    this.more = {}\n    this.more.raw = lView\n    this.more.injector = lView[INJECTOR]\n    this.more.host = lView[HOST]\n    const flags = lView[FLAGS]\n    this.more.flags = {\n      initPhaseState: flags & 3,\n      creationMode: !!(flags & 4),\n      firstViewPass: !!(flags & 8),\n      checkAlways: !!(flags & 16),\n      dirty: !!(flags & 32),\n      attached: !!(flags & 64),\n      destroyed: !!(flags & 128),\n      isRoot: !!(flags & 256),\n      indexWithinInitPhase: flags >> 11,\n    }\n\n    // Children\n    let childViews = []\n    {\n      let child = lView[CHILD_HEAD]\n      while (child) {\n        childViews.push(child)\n        child = child[NEXT]\n      }\n    }\n    this.children = childViews.map(childView => {\n      return nicer(childView, { cacheNames, cacheLViews })\n    })\n  }\n\n  get parent() {\n    const lView = this.more.raw\n    const parent = lView[PARENT]\n    if (parent) {\n      return new NiceView(parent)\n    }\n    return null\n  }\n\n  toString() {\n    if (this.name == 'Object') {\n      return (\n        this.children\n          // @ts-ignore\n          .map(child => child?.name)\n          .filter(c => !!c)\n          .join(',')\n      )\n    } else {\n      return this.name\n    }\n  }\n}\n\nexport class NiceContainer {\n  more\n  children: any\n  childrenTransplant: any\n\n  constructor(\n    lContainer: Array<any>,\n    state: { cacheNames?: {}; cacheLViews?: WeakMap<any, any> } = {}\n  ) {\n    let { cacheNames = {}, cacheLViews = new WeakMap() } = state\n\n    if (!lContainer) return null\n    if (cacheLViews.has(lContainer)) {\n      return cacheLViews.get(lContainer)\n    }\n\n    cacheLViews.set(lContainer, this)\n\n    this.more = {}\n    this.more.raw = lContainer\n    this.more.host = lContainer[HOST]\n    this.more.native = lContainer[NATIVE]\n    // this.more.next = lContainer[NEXT]\n    this.more.hasTransplantedViews = lContainer[HAS_TRANSPLANTED_VIEWS]\n\n    // Children (or transplanted children)\n    const views = this.more.raw.slice(CONTAINER_HEADER_OFFSET)\n    if (this.more.hasTransplantedViews) {\n      this.childrenTransplant = lContainer[MOVED_VIEWS]?.map(nicer, { cacheNames, cacheLViews })\n    } else {\n      this.children = views\n        .map(childView => {\n          return childView ? nicer(childView, { cacheNames, cacheLViews }) : null\n        })\n        .filter(t => !!t)\n    }\n    assert(this.more.hasTransplantedViews || views)\n  }\n}\n\nfunction nicer(lViewOrContainer: Array<any>, state = {}) {\n  if (isLView(lViewOrContainer)) {\n    return new NiceView(lViewOrContainer, state)\n  } else if (isLContainer(lViewOrContainer)) {\n    return new NiceContainer(lViewOrContainer, state)\n  }\n  assert(false)\n}\n\n// function findParentThatHasContext(lView) {\n//   if (lView[PARENT]) {\n//     if (lView[PARENT][CONTEXT]) {\n//       return lView[PARENT]\n//     } else {\n//       return findParentThatHasContext(lView[PARENT])\n//     }\n//   } else {\n//     return null\n//   }\n// }\n\nexport const global_rgComponent = debugComponent\nexport const global_rgLView = lView => new NiceView(lView)\n","import { Node } from 'typeflex'\n\nfunction diff(a, b) {\n\tif (typeof a == 'object') {\n\t\tconst res = {}\n\t\tObject.entries(a).forEach(([key, value]) => {\n\t\t\tconst difference = diff(a[key], b[key])\n\t\t\tif (difference !== undefined) {\n\t\t\t\tres[key] = difference\n\t\t\t}\n\t\t})\n\t\tif (Object.keys(res).length == 0) return undefined\n\t\treturn res\n\t} else {\n\t\tif (a != b) {\n\t\t\treturn b\n\t\t}\n\t}\n}\n\nexport function debugYoga(node: any, cleanNode = Node.create().node) {\n\n\tif ('node' in node) return debugYoga(node.node, cleanNode)\n\n\tconst res = { id: node.id } as any\n\tif (node.children_.length > 0) {\n\t\tres.children = node.children_.map(child => debugYoga(child, cleanNode))\n\t}\n\tres.style = diff(cleanNode.style_, node.style_)\n\treturn res\n}\n","import { ErrorHandler, Injectable, inject } from '@angular/core'\nimport { LOGGER } from './logger'\nimport { ScreenService } from './screen-service'\n\n\n\n\n/*\n  Removed screen.releaseScreen() because it was causing an inject() cycle\n    internalProvideZoneChangeDetection\n    NgZoneChangeDetectionScheduler\n    ChangeDetectionScheduler\n    AppRef\n    INTERNAL_APPLICATION_ERROR_HANDLER\n    ErrorHandler\n    RectangulrErrorHandler\n    ScreenService\n    .attachScreen\n    effect()\n    ChangeDetectionScheduler\n */\n\n@Injectable()\nexport class RectangulrErrorHandler implements ErrorHandler {\n  // screen = inject(ScreenService)\n  logger = inject(LOGGER)\n\n  handleError(error: Error): void {\n    // Log\n    this.logger.log(error)\n    if (JSON.stringify(error) == '{\"level\":\"error\")') {\n      debugger\n    }\n\n    // Release terminal and exit\n    // this.screen.termScreen.releaseScreen()\n    ; (globalThis as any).original_console.log(error)\n    process.exit(1)\n  }\n}\n","import { Injectable, inject } from '@angular/core'\nimport { TermScreen } from './dom-terminal'\nimport { LOGGER } from './logger'\nimport { TERMINAL } from './terminals/Terminal'\n\n/**\n * The bridge between Angular and @manaflair/mylittledom\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ScreenService {\n  terminal = inject(TERMINAL)\n  termScreen = inject(TermScreen)\n  logger = inject(LOGGER)\n\n  constructor() {\n    this.attachScreen()\n\n    globalThis['DOM'] = this.termScreen\n  }\n\n  attachScreen() {\n    this.termScreen.attachScreen(\n      true,\n      1000 / 60,\n    )\n  }\n\n  releaseScreen() {\n    this.termScreen.releaseScreen()\n  }\n\n  selectRootElement(): TermScreen {\n    return this.termScreen\n  }\n\n  clearScreen() {\n    this.termScreen.clearScreen()\n  }\n}\n","import { Injectable, Renderer2, RendererFactory2, RendererStyleFlags2, RendererType2, inject } from '@angular/core'\nimport * as _ from '@s-libs/micro-dash'\nimport json5 from 'json5'\nimport { addToGlobalRg } from '../utils/addToGlobalRg'\nimport { mergeDeep } from '../utils/mergeDeep'\nimport { assertDebug } from '../utils/utils'\nimport { TermScreen } from './dom-terminal'\nimport { TermElement } from './dom-terminal/sources/core/dom/Element'\nimport { ElementPool } from './dom-terminal/sources/term/elements/element-pool'\nimport { LOGGER } from './logger'\nimport { ScreenService } from './screen-service'\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RectangulrRendererFactory2 implements RendererFactory2 {\n  private screen = inject(ScreenService)\n\n  protected renderer: Renderer2\n\n  constructor() {\n    this.renderer = inject(RectangulrRenderer2)\n  }\n\n  end() {\n    if (this.screen.termScreen.terminal.screen) {\n      this.screen.selectRootElement().renderScreen()\n    }\n  }\n\n  createRenderer(hostElement: any, type: RendererType2 | null): Renderer2 {\n    return this.renderer\n  }\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RectangulrRenderer2 implements Renderer2 {\n  screenService = inject(ScreenService)\n  elementPool = inject(ElementPool)\n\n  readonly data: { [p: string]: any }\n  logger = inject(LOGGER)\n\n  destroy(): void { }\n\n  selectRootElement(): TermScreen {\n    return this.screenService.selectRootElement()\n  }\n\n  createElement(name: string, namespace?: string | null): TermElement {\n    const element = this.elementPool.create(name)\n    element.name = name\n    // this.logger.log({ message: 'createElement', id: element.id })\n    return element\n  }\n\n  createComment(value: string): any {\n    const comment = this.createElement('text')\n    comment.style.add({ display: 'none' })\n    comment.name = 'comment'\n    // this.logger.log({ message: 'createComment', id: comment.id })\n    return comment\n  }\n\n  createText(value: string): any {\n    const element = this.createElement('text') as any\n    element.textContent = value\n    // this.logger.log({ message: 'createText', id: element.id })\n    return element\n  }\n\n  appendChild(parent: TermElement, newChild: TermElement): void {\n    // this.logger.log({ message: 'appendChild', parent: parent.id, newChild: newChild.id })\n    parent.appendChild(newChild)\n  }\n\n  insertBefore(parent: TermElement, newChild: TermElement, refChild: TermElement): void {\n    // this.logger.log({ message: 'insertBefore', parent: parent.id, newChild: newChild.id, refChild: refChild.id })\n    parent.insertBefore(newChild, refChild)\n  }\n\n  removeChild(renderer: any, rNode: TermElement, isHostElement?: boolean): void {\n    // this.logger.log({ message: 'removeChild', parent: parent.id, oldChild: oldChild.id })\n    const parent = rNode.parentNode\n    assertDebug(parent)\n    parent.removeChild(rNode)\n  }\n\n  destroyNode(node: TermElement) {\n    // Destroy children first\n    for (const child of node.childNodes) {\n      this.removeChild(node, child,)\n      this.destroyNode(child)\n    }\n    this.selectRootElement().poolNode(node)\n  }\n\n  listen(\n    target: TermElement,\n    eventName: string,\n    callback: (event: any) => boolean | void\n  ): () => void {\n    target.addEventListener(eventName, callback)\n    return () => { target.removeEventListener(eventName, callback) }\n  }\n\n  parentNode(node: TermElement): any {\n    return node.parentNode\n  }\n\n  nextSibling(node: TermElement): any {\n    return node.nextSibling\n  }\n\n  setValue(node: TermElement, value: string): void {\n    // log(`setValue: ${serializeDOMNode(node)} -> \"${value}\"`);\n    //@ts-ignore\n    node.textContent = value\n  }\n\n  setAttribute(el: TermElement, name: string, value: string, namespace?: string | null): void {\n    el[name] = value\n  }\n\n  removeAttribute(el: any, name: string, namespace?: string | null): void {\n    el[name] = null\n  }\n\n  setProperty(el: TermElement, name: string, value: any): void {\n    // if (name == 'classes') {\n    //   const enabledClasses = value\n    //     .map(item => {\n    //       if (Array.isArray(item)) {\n    //         return item[1] ? item[0] : null\n    //       } else {\n    //         return item\n    //       }\n    //     })\n    //     .filter(t => t)\n\n    //   el.classList.assign(enabledClasses)\n    // } else {\n    //   el[name] = value\n    // }\n  }\n\n  setStyle(el: TermElement, style: string, value: any, flags?: RendererStyleFlags2): void {\n    // el.style[style] = value\n  }\n\n  removeStyle(el: TermElement, style: string, flags?: RendererStyleFlags2): void {\n    // el.style[style] = null\n  }\n\n  addClass(el: TermElement, className: string): void {\n    // el.classList.add(className)\n  }\n\n  removeClass(el: TermElement, className: string): void {\n    // el.classList.remove(className)\n  }\n}\n\ninterface StringifyOptions {\n  parent?: boolean\n  children?: boolean\n}\n\nfunction stringifyDomNode(node, options?: StringifyOptions) {\n  options = { parent: false, children: true, ...options }\n  const cache = new WeakSet()\n\n  function _stringifyDomNode(node, cache, options: StringifyOptions) {\n    let res: any = {}\n\n    if (node.nodeName == 'TermText2' || node.nodeName == 'TermComment') {\n      res.text = node.textContent\n    }\n\n    res.infos = {}\n    res.infos = mergeDeep(\n      res.infos,\n      {\n        flexGrow: node.style.get('flexGrow'),\n        flexShrink: node.style.get('flexShrink'),\n        height: node.style.get('height'),\n        width: node.style.get('width'),\n      }\n    )\n    res.infos = mergeDeep(res.infos, _.pick(node, 'elementRect', 'scrollRect'))\n    res.ref = node\n    res.name = node.name\n\n    // Prevent infinite loop\n    if (!cache.has(node)) {\n      cache.add(node)\n\n      if (options.children && node.childNodes.length > 0) {\n        res.children = node.childNodes\n          .map(n => {\n            return _stringifyDomNode(n, cache, options)\n          })\n          .filter(n => n.name != 'comment')\n      }\n      if (options.parent && node.parentNode) {\n        res.parent = _stringifyDomNode(node.parentNode, cache, options)\n      }\n    }\n\n    res.toString = () => {\n      return node.name + ' #' + node.id + '  ' + json5.stringify(res.infos)\n    }\n\n    return res\n  }\n\n  return _stringifyDomNode(node, cache, options)\n}\n\nfunction globalDebugDOM(node, options?: StringifyOptions) {\n  if (node) {\n    return stringifyDomNode(node, options)\n  } else {\n    const rootNode = globalThis['DOM']\n    return stringifyDomNode(rootNode, options)\n  }\n}\n\nfunction globalDebugDOMSearch(condition: string | Function, options?: StringifyOptions) {\n  const rootNode = globalThis['DOM']\n  let result = []\n  function searchRecursive(node, condition, result) {\n    if (typeof condition == 'string') {\n      if (node.textContent?.includes(condition)) {\n        result.push(node)\n      }\n    } else {\n      if (condition(node)) {\n        result.push(node)\n      }\n    }\n    for (const child of [...node.childNodes]) {\n      searchRecursive(child, condition, result)\n    }\n  }\n  searchRecursive(rootNode, condition, result)\n  return result.map(node => stringifyDomNode(node, { parent: true, ...options }))\n}\n\nfunction globalDebugDOMSize(text) {\n  const rootNode = globalThis['DOM']\n  let result = []\n  function searchRecursive(node, text, result) {\n    if (\n      node.elementRect.width != node.scrollRect.width ||\n      node.elementRect.height != node.scrollRect.height\n    ) {\n      result.push(node)\n    }\n    for (const child of [...node.childNodes]) {\n      searchRecursive(child, text, result)\n    }\n  }\n  searchRecursive(rootNode, text, result)\n  return result.map(node => stringifyDomNode(node, { parent: true }))\n}\n\naddToGlobalRg({\n  dom: globalDebugDOM,\n  domSearch: globalDebugDOMSearch,\n})\n","type Callback<T> = (event: T) => void\n\nexport class Queue<T> {\n\tsubscribers: (Callback<T>)[] = []\n\n\tsend(event: T) {\n\t\tthis.subscribers.forEach(func => {\n\t\t\tfunc(event)\n\t\t})\n\t}\n\n\tsubscribe(func: Callback<T>): Disposable {\n\t\tthis.subscribers.push(func)\n\t\treturn { dispose: () => { this.subscribers = this.subscribers.filter(i => i != func) } }\n\t}\n\n\tdispose() {\n\t\tthis.subscribers = []\n\t}\n}\n\n\nexport type Disposable = {\n\tdispose: () => void\n}\n","import { streamToObservable } from '../../term-strings/parse/getCursorPosition'\nimport { Queue } from '../../utils/queue'\nimport { Input } from '../dom-terminal/sources/term/elements/TermScreen'\nimport { Terminal, TerminalInputs, TerminalScreen } from './Terminal'\n\n\nexport class ProcessTerminal implements Terminal {\n\tname = 'ProcessTerminal'\n\tinputs: TerminalInputs\n\tscreen: TerminalScreen\n\n\tconstructor(process: NodeJS.Process) {\n\n\t\tthis.inputs = new class {\n\t\t\tqueue = new Queue<Input>()\n\t\t\tconstructor(public process: NodeJS.Process) {\n\t\t\t\tstreamToObservable(process.stdin).subscribe({\n\t\t\t\t\tnext: (data) => {\n\t\t\t\t\t\tthis.queue.send({ type: 'raw', buffer: data })\n\t\t\t\t\t},\n\t\t\t\t\tcomplete: () => {\n\t\t\t\t\t\t// TODO: dispose\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tsend = (input: Input) => {\n\t\t\t\tthis.queue.send(input)\n\t\t\t}\n\t\t\ton = (event, func) => { debugger }\n\t\t\tsubscribe = (func) => this.queue.subscribe(func)\n\t\t\tsetRawMode = (yes) => {\n\t\t\t\treturn this.process.stdin.setRawMode?.(yes)\n\t\t\t}\n\t\t}(process)\n\n\t\tthis.screen = new class {\n\t\t\tconstructor(public process: NodeJS.Process) { }\n\t\t\twrite = text => {\n\t\t\t\tthis.process.stdout.write(text)\n\t\t\t}\n\t\t\tsize = () => {\n\t\t\t\tif (this.process.stdout.columns) {\n\t\t\t\t\treturn { width: this.process.stdout.columns, height: this.process.stdout.rows }\n\t\t\t\t} else {\n\t\t\t\t\treturn { width: 80, height: 25 }\n\t\t\t\t}\n\t\t\t}\n\t\t\ton = (event, func) => { return this.process.stdout.on(event, func) }\n\t\t}(process)\n\n\t}\n}\n","import { APP_INITIALIZER, EnvironmentProviders, ErrorHandler, inject, InjectionToken, Injector, provideExperimentalZonelessChangeDetection, Provider, RendererFactory2, ɵINJECTOR_SCOPE } from \"@angular/core\"\nimport { global_rgComponent, global_rgLView } from \"./angular-terminal/debug\"\nimport { debugYoga } from \"./angular-terminal/debug-yoga\"\nimport { RectangulrErrorHandler } from \"./angular-terminal/error-handler\"\nimport { global_logs, patchNodeConsole, REDIRECT_CONSOLE_LOG } from \"./angular-terminal/logger\"\nimport { RectangulrRendererFactory2 } from \"./angular-terminal/renderer\"\nimport { ScreenService } from \"./angular-terminal/screen-service\"\nimport { ProcessTerminal } from \"./angular-terminal/terminals/ProcessTerminal\"\nimport { TERMINAL } from \"./angular-terminal/terminals/Terminal\"\nimport { addToGlobalRg } from './utils/addToGlobalRg'\nimport { InjectFunction } from \"./utils/utils\"\n\n\n// @ts-ignore\nexport const NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode\n\nexport const RECTANGULR_MODULE_PROVIDERS_MARKER = new InjectionToken(\n\tNG_DEV_MODE ? 'RectangulrModule Providers Marker' : ''\n)\n\nexport const RECTANGULR_MODULE_PROVIDERS: (Provider | EnvironmentProviders)[] = [\n\tprovideExperimentalZonelessChangeDetection(),\n\t{ provide: ɵINJECTOR_SCOPE, useValue: 'root' },\n\t{ provide: ErrorHandler, useClass: RectangulrErrorHandler },\n\t{ provide: RendererFactory2, useClass: RectangulrRendererFactory2 },\n\tNG_DEV_MODE ? { provide: RECTANGULR_MODULE_PROVIDERS_MARKER, useValue: true } : [],\n\t{ provide: ScreenService, useClass: ScreenService },\n\t{ provide: TERMINAL, useFactory: () => { return new ProcessTerminal(process) } },\n\t{\n\t\tprovide: APP_INITIALIZER,\n\t\tuseFactory: () => {\n\t\t\tconst injector = inject(Injector)\n\t\t\tconst globalInject: InjectFunction = token => injector.get(token)\n\n\t\t\treturn function () {\n\t\t\t\t// @ts-ignore\n\t\t\t\tif (globalThis['Zone']) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tglobalThis['angularZone'] = Zone.current // used by ./lib/reactivity.ts -> forceRefresh()\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tglobalThis['rootZone'] = Zone.current.parent\n\t\t\t\t}\n\n\t\t\t\taddToGlobalRg({\n\t\t\t\t\tlView: global_rgLView,\n\t\t\t\t\tcomponent: global_rgComponent,\n\t\t\t\t\tlogs: global_logs,\n\t\t\t\t\tinject: globalInject,\n\t\t\t\t\tdebugYoga: debugYoga,\n\t\t\t\t})\n\n\t\t\t\tif (RECTANGULR_TARGET == 'node' && injector.get(REDIRECT_CONSOLE_LOG)) {\n\t\t\t\t\tpatchNodeConsole(globalInject)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmulti: true,\n\t},\n]","import { DOCUMENT } from '@angular/common'\nimport {\n  ApplicationConfig,\n  ApplicationRef,\n  PLATFORM_ID,\n  PLATFORM_INITIALIZER,\n  Type,\n  createPlatformFactory,\n  platformCore,\n  ɵinternalCreateApplication,\n} from '@angular/core'\nimport { RECTANGULR_MODULE_PROVIDERS } from '../rectangulr-module-providers'\n\nexport const INTERNAL_RECTANGULR_PLATFORM_PROVIDERS = [\n  { provide: PLATFORM_ID, useValue: 'rectangulr' },\n  { provide: PLATFORM_INITIALIZER, useValue: () => { }, multi: true },\n  { provide: DOCUMENT, useValue: {}, deps: [] },\n]\n\nexport const platformRectangulr = createPlatformFactory(platformCore, 'rectangulr', [\n  ...INTERNAL_RECTANGULR_PLATFORM_PROVIDERS,\n])\n\n/**\n * Bootstraps an instance of an Angular application and renders a standalone component as the\n * application's root component. More information about standalone components can be found in [this\n * guide](guide/standalone-components).\n *\n * @usageNotes\n * The root component passed into this function *must* be a standalone one (should have the\n * `standalone: true` flag in the `@Component` decorator config).\n *\n * ```typescript\n * @Component({\n *   standalone: true,\n *   template: 'Hello world!'\n * })\n * class RootComponent {}\n *\n * const appRef: ApplicationRef = await bootstrapApplication(RootComponent);\n * ```\n *\n * You can add the list of providers that should be available in the application injector by\n * specifying the `providers` field in an object passed as the second argument:\n *\n * ```typescript\n * await bootstrapApplication(RootComponent, {\n *   providers: [\n *     {provide: BACKEND_URL, useValue: 'https://yourdomain.com/api'}\n *   ]\n * });\n * ```\n *\n * The `importProvidersFrom` helper method can be used to collect all providers from any\n * existing NgModule (and transitively from all NgModules that it imports):\n *\n * ```typescript\n * await bootstrapApplication(RootComponent, {\n *   providers: [\n *     importProvidersFrom(SomeNgModule)\n *   ]\n * });\n * ```\n *\n * Note: the `bootstrapApplication` method doesn't include [Testability](api/core/Testability) by\n * default. You can add [Testability](api/core/Testability) by getting the list of necessary\n * providers using `provideProtractorTestingSupport()` function and adding them into the `providers`\n * array, for example:\n *\n * ```typescript\n * import {provideProtractorTestingSupport} from '@angular/platform-browser';\n *\n * await bootstrapApplication(RootComponent, {providers: [provideProtractorTestingSupport()]});\n * ```\n *\n * @param rootComponent A reference to a standalone component that should be rendered.\n * @param options Extra configuration for the bootstrap operation, see `ApplicationConfig` for\n *     additional info.\n * @returns A promise that returns an `ApplicationRef` instance once resolved.\n *\n * @publicApi\n */\nexport function bootstrapApplication(\n  rootComponent: Type<unknown>, options?: ApplicationConfig): Promise<ApplicationRef> {\n  return ɵinternalCreateApplication({ rootComponent, ...createProvidersConfig(options) })\n}\n\n\nfunction createProvidersConfig(options?: ApplicationConfig) {\n  return {\n    appProviders: [\n      ...RECTANGULR_MODULE_PROVIDERS,\n      ...(options?.providers ?? []),\n    ],\n    platformProviders: INTERNAL_RECTANGULR_PLATFORM_PROVIDERS\n  }\n}\n","import { CreateComputedOptions, CreateSignalOptions, InputSignal, Signal, WritableSignal, computed, signal } from '@angular/core'\nimport { assert } from './Assert'\nimport { initial } from 'lodash-es'\n\nexport type Signal2<T> = WritableSignal<T> & {\n\tget $(): T,\n\tset $(value: T)\n\tsubscribe(callback: (value: T) => void): () => void\n}\n\nexport type Computed2<T> = Signal<T> & {\n\tget $(): T\n}\n\nexport function signal2<T>(initialValue: T, options?: CreateSignalOptions<T>): Signal2<T> {\n\tconst sig = signal(initialValue, options)\n\tpatchWritableSignal(sig)\n\treturn sig as Signal2<T>\n}\n\nexport function patchWritableSignal<T>(sig: WritableSignal<T>): Signal2<T> {\n\tObject.defineProperty(sig, '$', {\n\t\tget() {\n\t\t\treturn sig()\n\t\t},\n\t\tset(value) {\n\t\t\tsig.set(value)\n\t\t}\n\t})\n\n\tconst originalSet = sig.set\n\tObject.defineProperty(sig, 'set', {\n\t\tget() {\n\t\t\treturn (value: any) => {\n\t\t\t\toriginalSet.call(sig, value)\n\t\t\t\tsubscribers.forEach(subscriber => subscriber(value))\n\t\t\t}\n\t\t}\n\t})\n\n\tconst originalUpdate = sig.update\n\tObject.defineProperty(sig, 'update', {\n\t\tget() {\n\t\t\treturn (func: any) => {\n\t\t\t\toriginalUpdate.call(sig, func)\n\t\t\t\tsubscribers.forEach(subscriber => subscriber(func(sig())))\n\t\t\t}\n\t\t}\n\t})\n\n\tconst subscribers: ((value: T) => void)[] = []\n\n\tObject.defineProperty(sig, 'subscribe', {\n\t\tget() {\n\t\t\treturn (callback: any) => {\n\t\t\t\tsubscribers.push(callback)\n\t\t\t\tcallback(sig())\n\t\t\t\treturn () => {\n\t\t\t\t\tconst index = subscribers.indexOf(callback)\n\t\t\t\t\tsubscribers.splice(index, 1)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t})\n\n\treturn sig as Signal2<T>\n}\n\nexport function computed2<T>(computation: () => T, options?: CreateComputedOptions<T>): Computed2<T> {\n\tconst sig = computed(computation, options)\n\tpatchComputed<T>(sig)\n\treturn sig as Computed2<T>\n}\n\nexport function patchComputed<T>(sig: Signal<T>) {\n\tObject.defineProperty(sig, '$', {\n\t\tget() {\n\t\t\treturn sig()\n\t\t}\n\t})\n\treturn sig as Computed2<T>\n}\n\nexport type InputSignal2<T> = InputSignal<T> & {\n\tsubscribe(callback: (value: T) => void, options?: { initial: boolean }): () => void\n}\n\nexport function patchInputSignal<T>(input: Signal<T>): InputSignal2<T> {\n\tconst SIGNAL = Object.getOwnPropertySymbols(input).find(symbol => symbol.description == 'SIGNAL')\n\tassert(SIGNAL !== undefined)\n\n\tconst subscribers: ((value: T) => void)[] = []\n\n\t// @ts-ignore\n\tconst before = input[SIGNAL]['applyValueToInputSignal']\n\t// @ts-ignore\n\tinput[SIGNAL]['applyValueToInputSignal'] = (...args) => {\n\t\tconst [node, value] = args\n\t\tbefore(...args)\n\t\tsubscribers.forEach(subscriber => subscriber(value))\n\t}\n\n\tObject.defineProperty(input, 'subscribe', {\n\t\tget() {\n\t\t\treturn (callback: (value: T) => void, options?: { initial: boolean }) => {\n\t\t\t\tconst options2 = { initial: true, ...options }\n\t\t\t\tsubscribers.push(callback)\n\t\t\t\tif (options2.initial) {\n\t\t\t\t\tcallback(input())\n\t\t\t\t}\n\t\t\t\treturn () => {\n\t\t\t\t\tconst index = subscribers.indexOf(callback)\n\t\t\t\t\tsubscribers.splice(index, 1)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t})\n\n\treturn input as InputSignal2<T>\n}","export interface Disposable {\n  dispose()\n}\n\nexport class Disposable {\n  constructor(private func) {}\n\n  dispose() {\n    this.func()\n  }\n\n  static from(...disposables: Disposable[]) {\n    return new Disposable(() => {\n      for (const disposable of disposables) {\n        disposable.dispose()\n      }\n    })\n  }\n}\n","export type LogName = string\n\nexport type Selector = string[]\n\nexport type Match = {\n\tmatch: MatchType\n\tnextSelector: Selector\n}\n\nexport enum MatchType {\n\tNo = 0,\n\tMatch = 1,\n\tFullMatch = 2,\n}","import { Directive, inject, Injectable, InjectionToken, input, signal } from \"@angular/core\"\n\nexport const TAGS = new InjectionToken<string[]>('tags')\n\n@Injectable()\nexport class TagsService {\n\ttags = signal<Set<string>>(new Set<string>(), { equal: (a, b) => false })\n}\n\n@Directive({\n\tselector: '[tags]',\n\tproviders: [\n\t\t{ provide: TagsService },\n\t\t{ provide: TAGS, useFactory: () => inject(TagsService).tags().values() },\n\t],\n\tstandalone: true,\n})\nexport class Tags {\n\treadonly tags = input.required<string[]>()\n\ttagsService = inject(TagsService)\n\n\tngOnInit() {\n\t\tthis.tagsService.tags.update(serviceTags => {\n\t\t\tfor (const tag of this.tags()) {\n\t\t\t\tserviceTags.add(tag)\n\t\t\t}\n\t\t\treturn serviceTags\n\t\t})\n\t}\n}\n","import { computed, inject, Injectable } from \"@angular/core\"\nimport json5 from 'json5'\nimport { Logger, LOGGER } from \"../angular-terminal/logger\"\nimport { signal2 } from \"../utils/Signal2\"\nimport { LogName, Match, MatchType, Selector } from \"./LogPointTypes\"\nimport { TAGS } from \"./Tags\"\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class LogPointService implements Logger {\n\tlogger = inject(LOGGER)\n\ttags = inject(TAGS, { optional: true }) || []\n\tparent = inject(LogPointService, { optional: true, skipSelf: true })\n\troot: LogPointService = undefined\n\n\tconstructor() {\n\t\tif (isRoot(this)) {\n\t\t\tthis.root = this\n\n\t\t\tif (typeof process !== 'undefined') {\n\t\t\t\tif (process.env?.BREAKPOINTS) {\n\t\t\t\t\tthis.bpSelectorString.$ = process.env.BREAKPOINTS\n\t\t\t\t}\n\t\t\t\tif (process.env?.LOGPOINTS) {\n\t\t\t\t\tthis.lpSelectorString.$ = process.env.LOGPOINTS\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthis.root = this.parent.root\n\t\t}\n\t}\n\n\tbpSelectorString = signal2('')\n\n\tbpSelector = computed<Selector>(() => {\n\t\tif (isRoot(this)) {\n\t\t\treturn this.bpSelectorString().split(',').map(s => s.trim())\n\t\t} else {\n\t\t\treturn this.parent.bpMatch().nextSelector\n\t\t}\n\t})\n\n\tbpMatch = computed<Match>(() => {\n\t\treturn matchSelector(this.bpSelector(), this.tags)\n\t})\n\n\tlpSelectorString = signal2('')\n\n\tlpSelector = computed<Selector>(() => {\n\t\tif (isRoot(this)) {\n\t\t\treturn this.lpSelectorString().split(',').map(s => s.trim())\n\t\t} else {\n\t\t\treturn this.parent.lpMatch().nextSelector\n\t\t}\n\t})\n\n\tlpMatch = computed<Match>(() => {\n\t\treturn matchSelector(this.lpSelector(), this.tags)\n\t})\n\n\truntimeLogPoints = new Set<LogName>()\n\n\tlogPoint(name: LogName, context?: any) {\n\t\tthis.runtimeLogPoints.add(name)\n\n\t\tif (context && matchesLogPoint(this.lpMatch(), name)) {\n\t\t\tthis.logger.log(context)\n\t\t}\n\t\tif (matchesLogPoint(this.bpMatch(), name)) {\n\t\t\tdebugger\n\t\t}\n\t}\n\n\tlog(thing: any) {\n\t\tthis.logger.log(thing)\n\t}\n\n\ttoStringLp() {\n\t\treturn stringifyPathToNode(this, stringifyNodeLp)\n\t}\n\n\ttoStringBp() {\n\t\treturn stringifyPathToNode(this, stringifyNodeBp)\n\t}\n}\n\nfunction matchesLogPoint(serviceMatch: Match, logName: LogName) {\n\tif (serviceMatch.match == MatchType.FullMatch) {\n\t\treturn true\n\t} else {\n\t\tconst tags = logName.split('.')\n\t\treturn matchSelector(serviceMatch.nextSelector, tags).match == MatchType.FullMatch\n\t}\n}\n\nfunction matchSelector(selector: Selector, tags: string[]): Match {\n\tif (selector.length == 0) {\n\t\treturn { match: MatchType.FullMatch, nextSelector: [] }\n\t}\n\tconst isTagPresent = tags.includes(selector[0])\n\tif (isTagPresent) {\n\t\tconst nextSelector = selector.slice(1)\n\t\tif (nextSelector.length == 0) {\n\t\t\treturn { match: MatchType.FullMatch, nextSelector }\n\t\t} else {\n\t\t\treturn { match: MatchType.Match, nextSelector }\n\t\t}\n\t} else {\n\t\treturn { match: MatchType.No, nextSelector: selector }\n\t}\n}\n\nfunction isRoot(node: LogPointService) {\n\treturn node.parent === null\n}\n\nfunction stringifyPathToNode(node: LogPointService, stringifyFunc: (node: LogPointService) => string) {\n\t// Walk up the parents from the node\n\tconst nodes = []\n\tlet currentNode: LogPointService = node\n\twhile (currentNode) {\n\t\tnodes.unshift(stringifyFunc(currentNode))\n\t\tcurrentNode = currentNode.parent\n\t}\n\treturn nodes.reduce((prev, curr) => {\n\t\treturn prev + \"\\n\" + curr\n\t}, \"\")\n}\n\nfunction stringifyNodeBp(node: LogPointService) {\n\treturn json5.stringify({ tags: node.tags, selector: node.bpSelector(), match: node.bpMatch() })\n}\n\nfunction stringifyNodeLp(node: LogPointService) {\n\treturn json5.stringify({ tags: node.tags, selector: node.lpSelector(), match: node.lpMatch() })\n}\n","import { DestroyRef, Injectable, Injector, inject } from '@angular/core'\nimport * as _ from 'lodash-es'\nimport { Subject } from 'rxjs'\nimport { NiceView } from '../angular-terminal/debug'\nimport { Element } from '../angular-terminal/dom-terminal'\nimport { LOGGER } from '../angular-terminal/logger'\nimport { ScreenService } from '../angular-terminal/screen-service'\nimport { addToGlobalRg } from '../utils/addToGlobalRg'\nimport { assert } from '../utils/Assert'\nimport { signal2 } from '../utils/Signal2'\nimport { last, removeLastMatch } from '../utils/utils'\nimport { Disposable } from './disposable'\nimport { Key } from './keypress-parser'\nimport { logFocus } from \"./symbols\"\nimport { LogPointService } from '../logs/LogPointService'\n\n/**\n * Commands are a function with an `id`.\n * You can provide a default keybind with `keys`.\n */\nexport interface Command {\n  id: string\n  name: string\n  keys: string | string[]\n  func: (key: Key) => Key | void | Promise<Key> | Promise<void>\n  context?: Context\n  keywords: string\n  hidden: boolean\n}\n\nlet globalId = 0\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ShortcutService {\n  _id = ++globalId\n  name: string = null\n\n  /**\n   * Commands are stored by `id`. An `id` can have multiple commands.\n   * This allows components to declare the same `id` without conflict, the latest command is used.\n   * When the second component is destroyed the first command can be restored.\n   */\n  readonly commands = signal2<{ [id: string]: Command[] }>({})\n\n  /**\n   * A shortcut links a key (ex: ctrl+r) with a command id (ex: reload)\n   */\n  readonly shortcuts = signal2<{ [keys: string]: string[] }>({})\n\n  readonly focusStack = signal2<ShortcutService[]>([])\n  readonly focusedChild = signal2<ShortcutService>(null)\n  readonly children = signal2<ShortcutService[]>([])\n  readonly components = signal2([])\n  readonly rootNode = signal2<ShortcutService>(null)\n\n  readonly receivedCaretRequestRecently = signal2(false)\n  readonly askedForFocusThisTick = signal2<{ child: ShortcutService; source: ShortcutService; reason: string }[]>([])\n  readonly caretElement = signal2<Element>(null)\n\n  readonly isFocused = signal2(false)\n  readonly isInFocusPath = signal2(false)\n\n  readonly before = signal2<ShortcutService | undefined>(undefined)\n\n  readonly focusPropagateUp = signal2(true)\n  readonly focusIf = signal2(true)\n\n  injector = inject(Injector)\n  screen = inject(ScreenService, { optional: true })\n  logger = inject(LOGGER)\n  parent = inject(ShortcutService, { skipSelf: true, optional: true })\n  reason: string = undefined\n  private timeout: any\n\n  lp = inject(LogPointService)\n\n  constructor() {\n    if (isRoot(this)) {\n      this.rootNode.$ = this\n      this.isFocused.$ = false\n      this.isInFocusPath.$ = true\n      this.screen?.termScreen.addEventListener('keypress', key => this.incomingKey(key))\n      // this.screen?.termScreen.addEventListener('data', data => {\n      //   for (const key of data.buffer) {\n      //     this.incomingKey(key)\n      //   }\n      // })\n    } else {\n      this.rootNode.$ = this.parent.rootNode()\n      this.parent.childCreated(this)\n    }\n\n    updateTree(this.rootNode())\n    this.focusedChild.subscribe(() => {\n      updateTree(this.rootNode())\n    })\n\n    this.caretElement.subscribe(value => {\n      const rootNode: ShortcutService = this.rootNode()\n      forFocusedChild(rootNode, child => {\n        if (rootNode.screen) {\n          rootNode.screen.termScreen.activeElement = child.caretElement()\n        }\n      })\n    })\n\n    // subscribe(this, this.ngZone.onStable, () => {\n    //   this.receivedFocusThisTick = 0\n    //   // this.lp.point(`reset receivedFocusThisTick to ${this.receivedFocusThisTick}`)\n    // })\n  }\n\n  incomingKey(keyEvent) {\n    let key = keyEvent.key as unknown as Key\n    // this.lp.point(`key: ${keyToString(key)}`)\n    if (this.before()) {\n      key = this.before().propagateKeypress(key)\n    }\n    if (key) {\n      const unhandledKeypress = this.propagateKeypress(key)\n      if (unhandledKeypress) {\n        this.lp.logPoint('IncomingKey.UnhandledKeypress', keyToString(unhandledKeypress))\n        // ngDevMode &&\n        //   assert(false, { message: 'unhandled key', focused: getFocusedNode(this.rootNode) })\n      }\n    }\n  }\n\n  private propagateKeypress(keypress): Key {\n    if (this.focusedChild()) {\n      // const focusStack = `focusStack: [${this.focusStack().map(child => 'child').join(',')}]`\n      // const components = `components: [${this.components.map(c => c.constructor.name).join(',')}]`\n      // const handlers = Object.keys(this.shortcuts())\n      //   .filter(value => value.length > 0)\n      //   .join(',')\n      // const handlersString = `handlers: [${handlers}]`\n      // this.lp.point(`${padding(this)}${components}, ${handlers}, ${focusStack}`)\n\n      const unhandledKeypress = this.focusedChild().propagateKeypress(keypress)\n      if (unhandledKeypress) {\n        return this.handleKeypress(unhandledKeypress)\n      }\n    } else {\n      return this.handleKeypress(keypress)\n    }\n  }\n\n  private handleKeypress(keypress): Key {\n    // Keybind\n    const key = keyToString(keypress)\n    const commandIds = this.shortcuts()[key]\n    let unhandled = keypress\n    if (commandIds) {\n      for (let i = commandIds.length - 1; i >= 0; i--) {\n        const id = commandIds[i]\n        unhandled = this.callCommand({ id: id, keys: keypress })\n        if (!unhandled) {\n          break\n        }\n      }\n    }\n\n    if (unhandled) {\n      const elseIds = this.shortcuts()['else']\n      if (elseIds) {\n        for (let i = elseIds.length - 1; i >= 0; i--) {\n          const id = elseIds[i]\n          unhandled = this.callCommand({ id: id, keys: keypress })\n          if (!unhandled) {\n            break\n          }\n        }\n      }\n    }\n\n    return unhandled\n  }\n\n  /**\n   * Example:\n   * ```\n   * register({keys: 'ctrl+r', func: () => {\n   *   console.log('ctrl+r was pressed')\n   * }})\n   *\n   * register({keys: 'else', func: keypress => {\n   *   console.log(`${keypress.key} was pressed')\n   * }})\n   * ```\n   */\n  registerCommand(_command: Partial<Command>): Disposable {\n    const command = sanitizeCommand(_command)\n\n    this.commands.update(commands => {\n      const array = commands[command.id] ?? []\n      return { ...commands, [command.id]: [...array, command] }\n      // if (command.id == 'down' && commands[command.id].length > 1) debugger\n      // assertDebug(commands[command.id].length <= 1)\n    })\n\n    for (const key of command.keys) {\n      this.shortcuts()[key] ??= []\n      this.shortcuts()[key].push(command.id)\n    }\n    this.shortcuts.update(shortcuts => ({ ...shortcuts }))\n\n    return new Disposable(() => {\n      this.removeCommand(command)\n    })\n  }\n\n  private removeCommand(command: Command) {\n    this.commands.update(commands => {\n      const array = commands[command.id]\n      if (array) {\n        removeLastMatch(array, command)\n      }\n      return { ...commands }\n    })\n    for (const keys of command.keys) {\n      removeLastMatch(this.shortcuts()[keys], command.id)\n    }\n    this.shortcuts.update(shortcuts => ({ ...shortcuts }))\n  }\n\n  callCommand(arg: { id: string; keys?: string; args?: any[] }) {\n    const { id, keys, args } = arg\n    const command = this.findCommand(id)\n    this.lp.logPoint('callCommand', { id })\n    let res = command.func(keys)\n    return res\n  }\n\n  findCommand(id: string) {\n    const command = retrieveLast(this.commands(), id)\n    if (command) {\n      return command\n    } else {\n      if (this.parent) {\n        return this.parent.findCommand(id)\n      } else {\n        assert(command, `could not find command: ${id}`)\n      }\n    }\n  }\n\n  /**\n   * If multiple components request focus at the same time, the first one to request wins.\n   * Usually called inside `ngOnInit`.\n   */\n  requestFocus(args?: {\n    child?: ShortcutService\n    soft?: boolean\n    reason?: string\n    source?: ShortcutService\n  }): boolean {\n    args = { child: null, soft: true, ...args }\n\n    // To be able to call focus() without arguments\n    if (!args.child) {\n      if (!this.parent) {\n        return true\n      } else {\n        const success = this.parent.requestFocus({ ...args, child: this, source: this })\n        if (success) {\n          // this.lp.point(`focused: ${stringifyPathToLeaf(this)}`)\n          this.reason = args.reason\n        }\n        return success\n      }\n    }\n\n    if (!args.child.focusIf()) {\n      this.lp.logPoint('RequestFocus.Denied.FocusIf', { child: args.child })\n      return false\n    }\n\n    if (this.askedForFocusThisTick().find(item => item.child === args.child)) {\n      this.lp.logPoint('RequestFocus.Denied.askedForFocusThisTick', { child: args.child })\n      return false\n    }\n\n    if (this.focusedChild() == args.child) {\n      // this.lp.logPoint(`already focused - ${args.child}`)\n      this.lp.logPoint('RequestFocus.Denied.AlreadyFocused', { child: args.child })\n    } else {\n      this.focusStack.update(value => value.filter(i => i != args.child))\n      let index = this.focusStack().length\n      if (args.soft) index -= this.askedForFocusThisTick().length\n      index = _.clamp(index, 0, this.focusStack().length)\n      const stackBefore = this.focusStack().map(i => i._id).join(',')\n      this.focusStack.update(value => {\n        value.splice(index, 0, args.child)\n        return [...value]\n      })\n      const stackAfter = this.focusStack().map(i => i._id).join(',')\n      this.lp.logPoint('RequestFocus.PartialFocus', `partial focus (${args.reason}): ${stringifyPathToFocusedNode(this)} : [${stackBefore}] ->  [${stackAfter}]`)\n\n      this.askedForFocusThisTick.update(value => [...value, { child: args.child, reason: args.reason, source: args.source }])\n      this.focusedChild.$ = _.last(this.focusStack())\n      assert(this.focusedChild(), 'should focus a child')\n      // log('received')\n\n      // this.lp.point('setTimeout')\n      if (this.timeout === undefined) {\n        this.timeout = setTimeout(() => {\n          this.askedForFocusThisTick.$ = []\n          this.lp.logPoint('RequestFocus.AfterSetTimeout', `focused after setTimeout: ${stringifyPathToFocusedNode(this)}`)\n          this.timeout = undefined\n        })\n      }\n    }\n\n    if (this.focusPropagateUp()) {\n      if (this.parent) {\n        return this.parent.requestFocus({ ...args, child: this })\n      } else {\n        return true\n      }\n    } else {\n      // log('!focusPropagateUp()')\n      this.lp.logPoint('RequestFocus.Denied')\n      return false\n    }\n  }\n\n  /**\n   * Give up the focus.\n   * The next shortcutService in the focusStack gets focused.\n   */\n  unfocus(child?: ShortcutService) {\n    // To be able to call unfocus() without arguments\n    if (!child) {\n      return this.parent?.unfocus(this)\n    }\n\n    this.askedForFocusThisTick.update(value => value.filter(i => i.child != child))\n    this.focusStack.update(stack => stack.filter(i => i != child))\n    this.focusedChild.$ = _.last(this.focusStack())\n  }\n\n  /**\n   *  Tell our parent that we're getting destroyed.\n   */\n  ngOnDestroy() {\n    this.destroy$.next(null)\n    this.destroy$.complete()\n    if (this.parent) {\n      this.unfocus()\n      this.parent.childDestroyed(this)\n    }\n  }\n  destroy$ = new Subject()\n\n  /**\n   * Called by children to signal their creation.\n   */\n  private childCreated(child: ShortcutService) {\n    this.children.update(value => [...value, child])\n  }\n\n  /**\n   * Called by children to signal their destruction.\n   */\n  private childDestroyed(child: ShortcutService) {\n    this.focusStack.update(stack => stack.filter(i => i != child))\n    this.children.update(c => c.filter(i => i != child))\n  }\n\n  toString() {\n    return stringifyPathToNode(this)\n  }\n}\n\nexport function retrieveLast(map, id) {\n  const items = map[id]\n  if (!items) return null\n  return last(items)\n}\n\nexport const EmptyCommand: Command = {\n  id: null,\n  name: null,\n  keys: [],\n  func: null,\n  context: null,\n  keywords: null,\n  hidden: false,\n}\n\nfunction sanitizeCommand(_command: Partial<Command>): Command {\n  let command = { ...EmptyCommand, ..._command }\n\n  if (typeof _command.keys == 'string') {\n    command.keys = [_command.keys]\n  }\n\n  if (_command.id) {\n    command.name = _.startCase(_command.id)\n  } else {\n    command.id = command.keys[0]\n    command.hidden = true\n  }\n\n  return command\n}\n\n/**\n * Is this the root keybind service?\n */\nfunction isRoot(shortcutService: ShortcutService) {\n  return !shortcutService.parent\n}\n\n/**\n * Convert a keypress to a string.\n * Example: {ctrl: true, key: 'r'} => 'ctrl+r'\n */\nexport function keyToString(key: Key) {\n  let res = []\n  if (key.ctrl) res.push('ctrl')\n  if (key.alt) res.push('alt')\n  if (key.shift) res.push('shift')\n  if (key.meta) res.push('meta')\n  if (key.name) res.push(key.name)\n  return res.join('+')\n}\n\ntype Context = {\n  name: string\n  ref: any\n}\n\n/**\n * Register keybinds for the lifetime of the component\n */\nexport function registerShortcuts(\n  commands: Partial<Command>[],\n  options: {\n    shortcutService?: ShortcutService,\n    onDestroy?: DestroyRef['onDestroy'],\n    context?: Context,\n  } = { shortcutService: undefined, onDestroy: undefined }\n) {\n  const shortcutService = options.shortcutService ?? inject(ShortcutService)\n  const disposables = commands.map(command => {\n    return shortcutService.registerCommand({ ...command, context: options.context })\n  })\n\n  const onDestroy = options.onDestroy ?? (f => inject(DestroyRef).onDestroy(f))\n  onDestroy(() => {\n    Disposable.from(...disposables).dispose()\n  })\n}\n\n// function registerMultiKeybind(\n//   component: Destroyable & { shortcutService: ShortcutService },\n//   multiKeybind: Command & { keys: string[] }\n// ) {\n//   multiKeybind.keys.forEach(key => {\n//     component.shortcutService.registerCommand({ keys: key, func: multiKeybind.func })\n//   })\n// }\n\n// function removeMultiKeybind(\n//   component: Destroyable & { shortcutService: ShortcutService },\n//   multiKeybind: Command & { keys: string[] }\n// ) {\n//   multiKeybind.keys.forEach(key => {\n//     component.shortcutService.removeCommand({ keys: key, func: multiKeybind.func })\n//   })\n// }\n\nfunction forEachChild(shortcutService: ShortcutService, func: (child: ShortcutService) => void) {\n  func(shortcutService)\n  shortcutService.children().forEach(child => {\n    forEachChild(child, func)\n  })\n}\n\nfunction forEachChildInFocusPath(\n  shortcutService: ShortcutService,\n  func: (child: ShortcutService) => void\n) {\n  func(shortcutService)\n  if (shortcutService.focusedChild()) {\n    forEachChildInFocusPath(shortcutService.focusedChild(), func)\n  }\n}\n\nfunction forFocusedChild(shortcutService: ShortcutService, func: (child: ShortcutService) => void) {\n  if (shortcutService.focusedChild()) {\n    forFocusedChild(shortcutService.focusedChild(), func)\n  } else {\n    func(shortcutService)\n  }\n}\n\nexport function getFocusedNode(shortcutService: ShortcutService): ShortcutService {\n  if (shortcutService.focusedChild()) {\n    return getFocusedNode(shortcutService.focusedChild())\n  } else {\n    return shortcutService\n  }\n}\n\nfunction updateTree(rootNode: ShortcutService) {\n  if (!isRoot(rootNode)) throw new Error('should only be called on the keybind root')\n\n  forEachChild(rootNode, child => {\n    child.isFocused.set(false)\n    child.isInFocusPath.set(false)\n  })\n\n  forEachChildInFocusPath(rootNode, child => {\n    child.isInFocusPath.set(true)\n  })\n\n  forFocusedChild(rootNode, child => {\n    child.isFocused.set(true)\n    if (rootNode.screen) {\n      rootNode.screen.termScreen.activeElement = child.caretElement()\n    }\n  })\n\n  // rootNode.logger.log(`focused: ${stringifyFocusedPath(rootNode)}`)\n}\n\naddToGlobalRg({\n  keybinds: rgDebugKeybinds,\n})\n\nexport function rgDebugKeybinds() {\n  const ng = globalThis.rg.component() as NiceView\n  const rootKeybindService = ng.more.injector.get(ShortcutService)\n  const focusedKeybindService = getFocusedNode(rootKeybindService)\n\n  return simplifyShortcutService(focusedKeybindService)\n}\n\nfunction simplifyShortcutService(shortcutService: ShortcutService) {\n  return new SimplifiedShortcutService(shortcutService)\n}\n\nclass SimplifiedShortcutService {\n  ref: ShortcutService\n  children: ShortcutService[]\n  focusedChild: ShortcutService\n  commands: { [id: string]: Command[] }\n  _id: number\n  shortcuts: { [keys: string]: string[] }\n\n  constructor(shortcutService: ShortcutService) {\n    this.ref = shortcutService\n    this._id = shortcutService._id\n    this.children = shortcutService.children()\n    this.shortcuts = shortcutService.shortcuts()\n    this.focusedChild = shortcutService.focusedChild()\n    this.commands = shortcutService.commands()\n  }\n\n  get parent() {\n    if (this.ref.parent) {\n      return simplifyShortcutService(this.ref.parent)\n    } else {\n      return null\n    }\n  }\n\n  toString() {\n    return stringifyPathToFocusedNode(this.ref)\n  }\n}\n\nexport function padding(shortcutService: ShortcutService) {\n  let spaces = ''\n  for (let d = depth(shortcutService); d > 0; d--) {\n    spaces += '  '\n  }\n  return `${shortcutService._id} ${spaces}`\n}\n\nexport function depth(shortcutService: ShortcutService) {\n  let depth = 0\n  while (true) {\n    if (shortcutService.parent) {\n      depth++\n      shortcutService = shortcutService.parent\n    } else {\n      return depth\n    }\n  }\n}\n\n// function stringifyComponent(component: any) {\n//   const toString = component.toString()\n//   if (toString == '[object Object]') {\n//     return component.constructor.name\n//   } else {\n//     return toString\n//   }\n// }\n\nfunction stringifyNode(shortcutService: ShortcutService) {\n  let componentNames = Object.values(shortcutService.commands())\n    .map(commands => _.last(commands))\n    .filter(c => !!c && c.context)\n    .map(command => {\n      const stringified = String(command.context.ref)\n      if (stringified !== '[object Object]') {\n        return stringified\n      } else {\n        return command.context.name\n      }\n    })\n  componentNames = [...new Set(componentNames)]\n  const componentNamesString = componentNames.join()\n  const name = shortcutService.name ?? ''\n\n  return `[${shortcutService._id} ${name}](${componentNamesString})`\n}\n\nfunction stringifyPathToNode(node: ShortcutService) {\n  // Walk up the parents from the node\n  const nodes = []\n  let currentNode: ShortcutService = node\n  while (currentNode) {\n    nodes.unshift(stringifyNode(currentNode))\n    currentNode = currentNode.parent\n  }\n  return nodes.join(' -> ')\n}\n\nfunction stringifyPathToFocusedNode(node: ShortcutService) {\n  const nodes = []\n  let current = node.rootNode()\n  while (current) {\n    nodes.push(stringifyNode(current))\n    current = current.focusedChild()\n  }\n  return nodes.join(' -> ')\n}\n","import { Directive, EventEmitter, inject, Output } from '@angular/core'\nimport { ShortcutService } from './shortcut.service'\n\n@Directive({\n  standalone: true,\n  selector: '[detachedCommandService]',\n  providers: [\n    { provide: ShortcutService },\n  ],\n})\nexport class DetachedCommandServiceDirective {\n  @Output() detachedCommandService = new EventEmitter()\n\n  constructor() {\n    const detachedCommandService = inject(ShortcutService)\n\n    this.detachedCommandService.emit(detachedCommandService)\n  }\n}\n","import { Directive, ElementRef, inject, input, Input, Signal, signal, WritableSignal } from '@angular/core'\nimport { Element } from '../../angular-terminal/dom-terminal'\nimport { StyleValue } from '../../angular-terminal/dom-terminal/sources/core/dom/StyleHandler'\nimport { onChange } from '../../utils/reactivity'\n\ntype StyleValueOrSignal = StyleValue | Signal<StyleValue>\n\n/**\n * Applies a style to the element.\n * @example\n * <h [s]=\"{color: 'red'}\">Some red text</h>\n */\n@Directive({\n  standalone: true,\n  selector: '[s],[st],[stv],[sc]',\n})\nexport class Style {\n  element = inject<ElementRef<Element>>(ElementRef);\n\n  /**\n   * Styles, one or multiple, to be applied in order.\n   * s = style\n   * @example\n   * Value: {color: 'red'}\n   * Signal: computed(() => ({color: darkOrLight()}))\n   */\n  readonly s = input<StyleValueOrSignal | StyleValueOrSignal[]>([])\n\n  /**\n   * Styles the children of this element.\n   * sc = style children\n   */\n  readonly sc = input<StyleValueOrSignal | StyleValueOrSignal[]>([])\n\n  /**\n   * Template styles.\n   * Used for now to have styles than can react to $index in a @for (template variables).\n   * Angular doesnt expose the index as a signal for now.\n   * st = style template\n  */\n  readonly st = input<TemplateStyle[]>([])\n\n  /**\n   * Template style variables : {key: value}\n   * Example: {index: 3}\n   * Passes them to their corresponding signal via key.\n   * stv = style template variables\n   * Example: signals[index].set(3)\n   */\n  // TODO: breaks if made into a signal\n  @Input() stv: { [key: string]: any } = {}\n  signals: { [key: string]: WritableSignal<any> } = {}\n\n  ngOnInit() {\n    // Add normal styles\n    const s = this.s()\n    if (Array.isArray(s)) {\n      for (const style of s) {\n        this.element.nativeElement.style.add(style)\n      }\n    } else {\n      this.element.nativeElement.style.add(s)\n    }\n\n    const sc = this.sc()\n    if (Array.isArray(sc)) {\n      for (const style of sc) {\n        this.element.nativeElement.style.addChildLayer(style)\n      }\n    } else {\n      this.element.nativeElement.style.addChildLayer(sc)\n    }\n\n    // Create template variables signals\n    for (const [key, value] of Object.entries(this.stv)) {\n      this.signals[key] = signal(value)\n    }\n\n    // Add template styles\n    for (const templateStyle of this.st()) {\n      const computedStyle = templateStyle(this.signals)\n      this.element.nativeElement.style.add(computedStyle)\n    }\n\n    // Update template variables\n    onChange(this, 'stv', variables => {\n      for (const [key, value] of Object.entries(variables)) {\n        this.signals[key].set(value)\n      }\n    })\n  }\n}\n\nexport type TemplateStyle = (templateVars: { [key: string]: WritableSignal<any> }) => Signal<StyleValue>\n","import { Directive, inject, ElementRef } from '@angular/core'\nimport { TermElement as Element } from '../../angular-terminal/dom-terminal/sources/core/dom/Element'\n\n/**\n * Think of it as `div` for the terminal. The basic building block for templates.\n * It displays its children vertically.\n * @example\n * <v>Some text</v>\n */\n\n@Directive({\n\tstandalone: true,\n\tselector: 'v',\n})\nexport class V {\n\telementRef = inject<ElementRef<Element>>(ElementRef);\n\n\tngOnInit() {\n\t\tthis.elementRef.nativeElement.style.add({ flexDirection: 'column' })\n\t}\n}\n","import { Directive, Signal, input } from '@angular/core'\nimport { Observable } from 'rxjs'\n\n@Directive({\n  standalone: true,\n  selector: '[item]',\n})\nexport class ListItem<T> {\n  readonly itemType = input<T | T[] | Observable<T[]> | Signal<T[]>>(undefined)\n\n  static ngTemplateContextGuard<T>(\n    directive: ListItem<T>,\n    context: any\n  ): context is {\n    $implicit: T\n    index: number\n    count: number\n    first: boolean\n    last: boolean\n    even: boolean\n    odd: boolean\n    selected: boolean\n  } {\n    return true\n  }\n}\n","import { DestroyRef, Directive, inject, Injector, input } from '@angular/core'\nimport { patchInputSignal } from '../utils/Signal2'\nimport { registerShortcuts, ShortcutService } from './shortcut.service'\nimport { LogPointService } from '../logs/LogPointService'\n\n@Directive({\n  standalone: true,\n  selector: '[focus], [focusIf], [focusPropagateUp], [focusShortcuts], [focusFull], [focusOnInit], [focusName]',\n  providers: [ShortcutService, LogPointService],\n  exportAs: 'focus',\n})\nexport class FocusDirective {\n  focusPropagateUp = input(true)\n  focusIf = input(true)\n  focusShortcuts = input([])\n  focusFull = input(false)\n  focusOnInit = input(true)\n  focusName = input(null)\n\n  injector = inject(Injector)\n  shortcutService = inject(ShortcutService, { self: true })\n  destroyRef = inject(DestroyRef)\n  onDestroy = f => this.destroyRef.onDestroy(f)\n\n  ngOnInit() {\n    this.shortcutService.name = this.focusName()\n    this.shortcutService.focusIf.$ = this.focusIf()\n    const focusIf = patchInputSignal(this.focusIf)\n    focusIf.subscribe(focusIf => {\n      this.shortcutService.focusIf.$ = focusIf\n      if (focusIf) {\n        this.shortcutService.requestFocus({ reason: 'FocusDirective focusIf true' })\n      } else {\n        this.shortcutService.unfocus()\n      }\n    }, { initial: false })\n\n    registerShortcuts(this.focusShortcuts(), {\n      shortcutService: this.shortcutService,\n      onDestroy: this.onDestroy,\n      context: { name: 'FocusDirective', ref: this }\n    })\n    if (this.focusFull()) {\n      registerShortcuts(this.focusFullShortcuts, {\n        shortcutService: this.shortcutService,\n        onDestroy: this.onDestroy,\n        context: { name: 'FocusDirective', ref: this }\n      })\n    }\n    this.shortcutService.focusPropagateUp.$ = this.focusPropagateUp()\n    if (this.focusOnInit()) {\n      this.shortcutService.requestFocus({ reason: 'FocusDirective onInit' })\n    }\n  }\n\n  focusFullShortcuts = [\n    {\n      keys: 'else',\n      func: () => { },\n    },\n  ]\n}\n","import { ControlValueAccessor } from '@angular/forms'\n\n/**\n * An interface that a component can implement to share its internal 'value'.\n * Example: A text-input can share its text.\n * Example: A list can share the currently selected line.\n * This BaseControlValueAccessor gives a good starting point\n * to implement the ControlValueAccessor interface for a component.\n */\nexport class BaseControlValueAccessor<T> implements ControlValueAccessor {\n  value: T = undefined\n  onChangeHandlers = []\n  onTouchHandlers = []\n  disabled = false\n  emitOnWrite = true\n\n  writeValue(value: T) {\n    this.value = value\n    if (this.emitOnWrite == true) {\n      this.emitChange(value)\n    }\n  }\n\n  registerOnChange(fn: any) {\n    this.onChangeHandlers.push(fn)\n  }\n\n  registerOnTouched(fn: any) {\n    this.onTouchHandlers.push(fn)\n  }\n\n  setDisabledState?(isDisabled: boolean) {\n    this.disabled = isDisabled\n  }\n\n  emitChange(value) {\n    this.onChangeHandlers.forEach(handler => handler(value))\n  }\n}\n","export class Deferred<T> {\n\tresolve: ((value: T | PromiseLike<T>) => void) | undefined\n\treject: ((reason?: any) => void) | undefined\n\tpromise: Promise<T>\n\tvalue: any = undefined\n\tconstructor() {\n\t\tthis.promise = new Promise<T>((resolve, reject) => {\n\t\t\tthis.resolve = resolve\n\t\t\tthis.reject = reject\n\t\t})\n\t}\n}\n","import { Directive, inject, ElementRef } from '@angular/core'\nimport { TermElement as Element } from '../../angular-terminal/dom-terminal/sources/core/dom/Element'\n\n/**\n * Think of it as `div` for the terminal. The basic building block for templates.\n * It displays its children horizontally.\n *\n * @example\n * <h>Same thing</h>\n */\n// This directive does nothing. It's just there for autocompletion from Angular.\n// This is handled by the dom - terminal renderer.\n\n@Directive({\n\tstandalone: true,\n\tselector: 'h',\n})\nexport class H {\n\telementRef = inject<ElementRef<Element>>(ElementRef);\n\n\tngOnInit() {\n\t\tthis.elementRef.nativeElement.style.add({ flexDirection: 'row' })\n\t}\n}\n","import { Component, computed, forwardRef, inject, input } from '@angular/core'\nimport json5 from 'json5'\nimport { H } from '../../../components/1-basics/h'\nimport { mapKeyValue, stringifyReplacer } from '../../../utils/utils'\nimport { Style } from '../../1-basics/style'\nimport { List } from './list'\n\n@Component({\n  selector: 'basic-object-display',\n  template: `<h [s]=\"{ height: 1 }\">{{ text }}</h>`,\n  imports: [H, Style]\n})\nexport class BasicObjectDisplay {\n  readonly data = input<any>(undefined);\n  readonly includeKeysInput = input<string[]>(undefined, { alias: 'includeKeys' })\n  includeKeys = computed(() => {\n    return this.includeKeysInput() || Object.keys(this.data() ?? {})\n  })\n  readonly excludeKeys = input<string[]>([])\n  text = 'error'\n\n  list = inject(forwardRef(() => List))\n\n  ngOnInit() {\n    const typeOf = typeof this.data()\n    const data = this.data()\n    if (data == null) {\n      this.text = 'null'\n    } else if (typeOf == 'string' || typeOf == 'number') {\n      this.text = data\n    } else if (typeOf == 'object') {\n      if (data.name != undefined) {\n        this.text = data.name\n      } else {\n        const newObject = mapKeyValue(data, (key, value) => {\n          if (this.includeKeys().includes(key)) {\n            if (!this.excludeKeys().includes(key)) {\n              // json can't contain bigint\n              if (typeof value == 'bigint') {\n                value = Number(value)\n              }\n              return [key, value]\n            }\n          }\n        })\n        this.text = json5.stringify(newObject, stringifyReplacer())\n      }\n    } else {\n      throw new Error(`can't display this`)\n    }\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common'\nimport {\n  Component,\n  ElementRef,\n  Injector,\n  TemplateRef,\n  computed,\n  contentChild,\n  contentChildren,\n  effect,\n  inject,\n  input,\n  output,\n  signal,\n  untracked,\n  viewChildren\n} from '@angular/core'\nimport { NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { clamp, clone, isNil, isObject } from 'lodash-es'\nimport { Subject } from 'rxjs'\nimport { Element } from '../../../angular-terminal/dom-terminal'\nimport { cond, eq } from '../../../angular-terminal/dom-terminal/sources/core/dom/StyleHandler'\nimport { LOGGER } from '../../../angular-terminal/logger'\nimport { FocusDirective } from '../../../commands/focus.directive'\nimport { Command, ShortcutService, registerShortcuts } from '../../../commands/shortcut.service'\nimport { V } from '../../../components/1-basics/v'\nimport { assert } from '../../../utils/Assert'\nimport { BaseControlValueAccessor } from '../../../utils/base-control-value-accessor'\nimport { Deferred } from '../../../utils/Deferred'\nimport { patchInputSignal, signal2 } from '../../../utils/Signal2'\nimport { Style } from '../../1-basics/style'\nimport { BasicObjectDisplay } from './basic-object-display'\nimport { ListItem } from './list-item'\n\n/**\n * Displays a list of items and highlights the current item.\n * Go up and down with the keyboard.\n */\n@Component({\n  selector: 'list',\n  template: `\n    <v [s]=\"{ flexShrink: 0, scrollF: 'y' }\">\n      @for (item of visibleItems(); track trackByFn()($index,item)) {\n        <v\n          #elementRef\n          (mousedown)=\"selectVisibleIndex($index)\"\n          [st]=\"[this.itemStyle]\"\n          [stv]=\"{index: $index}\"\n          >\n          <ng-container\n            [ngTemplateOutlet]=\"template() || template2() || defaultTemplate\"\n            [ngTemplateOutletContext]=\"{\n              $implicit: item,\n              index: $index,\n              selected: eq($index, selectedIndex)\n          }\"/>\n        </v>\n      }\n    </v>\n\n    <ng-template #defaultTemplate let-item let-selected>\n      <basic-object-display [data]=\"item\" />\n    </ng-template>\n    `,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useFactory: () => inject(List).controlValueAccessor,\n      multi: true,\n    },\n  ],\n  standalone: true,\n  imports: [NgTemplateOutlet, BasicObjectDisplay, V, Style]\n})\nexport class List<T> {\n  /**\n   * The items to be displayed in the list.\n   * Can be an array, a signal<array> or an observable<array>.\n   */\n  items = input.required<T[]>()\n\n  /**\n   * A trackByFn. Same as for *ngFor.\n   */\n  readonly trackByFn = input((index: number, item: T) => item)\n\n  /**\n   * What a line of this list should contain\n   * This is an alternative to `template`. You can provide a component instead of a template.\n   */\n  readonly displayComponent = input<any | undefined>(undefined)\n\n  /**\n   * What a line of this list should contain\n   */\n  readonly template = input<TemplateRef<any> | undefined>(undefined)\n\n  /**\n   * What item to select when the list is updated\n   */\n  readonly onItemsChangeSelect = input<'last' | 'first' | 'same'>('same')\n\n  /**\n   * What item to select when the list is created\n   */\n  readonly onInitSelect = input<'first' | 'last'>('first')\n\n  /**\n   * Should the list add a style to the selected line\n   */\n  readonly styleItem = input(true)\n\n  itemStyle = (templateVars) => computed(() => {\n    if (templateVars['index']() === this.selectedVisibleIndex()) {\n      return this.S().listItem\n    } else {\n      return {}\n    }\n  })\n\n  // readonly focusPath = input<Signal<JsonPath | null>>(signal(null));\n\n  readonly template2 = contentChild(ListItem, { read: TemplateRef });\n\n  // $focusPath = signal(null)\n\n  selectedIndex = signal2<number | undefined>(undefined)\n\n  selectedValue = computed(() => {\n    const index = this.selectedIndex()\n    if (index === undefined) {\n      return undefined\n    } else {\n      return this.items()[index]\n    }\n  })\n\n  windowSize = 20\n  visibleRange = signal({ start: 0, end: this.windowSize })\n  visibleItems = computed(() => {\n    const visibleRange = this.visibleRange()\n    const items = this.items()\n    if (items != null && visibleRange != null) {\n      return items.slice(visibleRange.start, visibleRange.end)\n    } else {\n      return []\n    }\n  })\n  selectedVisibleIndex = computed(() => {\n    return this.selectedIndex() - this.visibleRange().start\n  })\n\n  _displayComponent = undefined\n  controlValueAccessor = new BaseControlValueAccessor<T>()\n  elementRefs = viewChildren('elementRef', { read: ElementRef })\n  focusRefs = contentChildren(FocusDirective)\n\n  /**\n   * Emits when the selected line changes.\n   */\n  $selectedItem = output<T | null>({ alias: 'selectedItem' })\n\n  /**\n   * Emits when the selected line changes.\n   */\n  selectedIndexOutput = output<number | undefined>({ alias: 'selectedIndex' })\n\n  /**\n   * Emits the currently visible lines of the list.\n   */\n  visibleItemsOutput = output<T[]>({ alias: 'visibleItems' })\n\n  deferreds: Deferred<any>[] = []\n  previousItems: T[]\n\n  shortcutService = inject(ShortcutService)\n  logger = inject(LOGGER)\n  // itemComponentInjected = inject('itemComponent', {optional: true})\n  injector = inject(Injector)\n\n  constructor(\n  ) {\n    // inputToSignal(this, 'focusPath', '$focusPath')\n\n    // effect(() => {\n    //   const indexToFocus = this.$focusPath()[0]\n    //   this.selectIndex(indexToFocus)\n    // })\n\n    this.$selectedItem.subscribe(newValue => {\n      this.controlValueAccessor.emitChange(newValue)\n    })\n    this.selectedIndex.subscribe(index => {\n      this.selectedIndexOutput.emit(index)\n    })\n    this.visibleItemsOutput.subscribe(items => {\n      this.visibleItemsOutput.emit(items)\n    })\n    // TODO: unsubscribe\n\n    registerShortcuts(this.shortcuts)\n\n    effect(() => {\n      this.focusRefs()\n      this.elementRefs()\n      untracked(() => { this.afterViewUpdate() })\n    })\n  }\n\n  ngOnInit() {\n    // The way the item is displayed can be customized via an Input, and Injected value, or defaults to a basic json stringify\n    // this._displayComponent = this.itemComponentInjected\n\n    const selectNewIndex = (items: T[]) => {\n      assert(!isNil(items))\n      const onItemsChangeSelect = this.onItemsChangeSelect()\n      if (onItemsChangeSelect == 'first') {\n        this.selectIndex(0)\n      } else if (onItemsChangeSelect == 'last') {\n        this.selectIndex(items.length - 1)\n      } else if (onItemsChangeSelect == 'same') {\n        let index = this.selectedIndex()\n        if (isNil(index) /* If there's no previous selected item */) {\n          this.selectIndex(0)\n          return\n        }\n        // If the selectedValue is an object, we select the value again\n        // If its a primitive value, we select the index again\n        const value = this.selectedValue()\n        if (value && isObject(value)) {\n          index = items.indexOf(value)\n        }\n        if (index != -1) {\n          this.selectIndex(index)\n        } else {\n          this.selectIndex(0)\n        }\n      }\n    }\n    const onInitSelect = () => {\n      const items = this.items()\n      const onInitSelectValue = this.onInitSelect()\n      if (onInitSelectValue == 'first') {\n        this.selectIndex(0)\n      } else if (onInitSelectValue == 'last') {\n        this.selectIndex(items.length - 1)\n      }\n    }\n    onInitSelect()\n\n    const items = patchInputSignal(this.items)\n    items.subscribe(items => selectNewIndex(items))\n  }\n\n  /**\n   * Tries to select the index `value`\n   * @param value The index to select\n   * @returns Returns false if the index got clamped, or if there's no items in the list\n   */\n  selectIndex(value: number): Promise<boolean> {\n    assert(!isNil(this.items()))\n\n    if (!this.items() || this.items().length == 0) {\n      this.selectedIndex.set(undefined)\n    } else {\n      this.selectedIndex.set(clamp(value, 0, this.items().length - 1))\n    }\n\n    this.$selectedItem.emit(this.selectedValue())\n\n    this.visibleRange.set(\n      rangeCenteredAroundIndex(this.selectedIndex.$, this.windowSize, this.items().length)\n    )\n\n    const deferred = new Deferred<boolean>()\n    deferred.value = this.selectedIndex() === value\n\n    if (this.items() != this.previousItems) {\n      // wait for focusRefs to settle before\n      // RequestFocus\n      // ScrollIntoView\n      this.deferreds.push(deferred)\n    } else {\n      // Do it straight away\n      // RequestFocus\n      // ScrollIntoView\n      this.afterViewUpdate()\n      deferred.resolve(deferred.value)\n    }\n    this.previousItems = this.items()\n\n    return deferred.promise\n  }\n\n  selectVisibleIndex(visibleIndex: number) {\n    const index = this.visibleRange().start + visibleIndex\n    return this.selectIndex(index)\n  }\n\n  afterViewUpdate() {\n    assert(this.focusRefs())\n\n    if (this.selectedIndex.$ !== undefined) {\n      // RequestFocus\n      if (this.focusRefs().length > 0) {\n        const selectedFocusDirective = this.focusRefs().at(this.selectedVisibleIndex())\n        if (!selectedFocusDirective) {\n          debugger\n        }\n        assert(selectedFocusDirective)\n        selectedFocusDirective.shortcutService.requestFocus({ reason: 'List selectIndex' })\n      }\n\n      // ScrollIntoView\n      if (this.elementRefs().length > 0) {\n        assert(this.selectedIndex.$ !== undefined)\n        const element: Element = this.elementRefs().at(\n          this.selectedVisibleIndex()\n        )?.nativeElement\n        element?.scrollIntoView({ direction: 'y' })\n      }\n    }\n    this.deferreds.forEach(def => def.resolve(def.value))\n  }\n\n  readonly S = input({\n    listItem: { backgroundColor: 'dimgray', color: 'white' },\n  })\n\n  shortcuts: Partial<Command>[] = [\n    {\n      keys: 'down',\n      func: key => {\n        if (this.selectedIndex.$ == undefined) return\n        const success = this.selectIndex(this.selectedIndex.$ + 1)\n        if (!success) return key\n      },\n    },\n    {\n      keys: 'up',\n      func: key => {\n        if (this.selectedIndex.$ == undefined) return\n        const success = this.selectIndex(this.selectedIndex.$ - 1)\n        if (!success) return key\n      },\n    },\n    {\n      keys: 'pgup',\n      func: key => {\n        if (this.selectedIndex.$ == undefined) return\n        const success = this.selectIndex(this.selectedIndex.$ - this.windowSize)\n        if (!success) return key\n      },\n    },\n    {\n      keys: 'pgdown',\n      func: key => {\n        if (this.selectedIndex.$ == undefined) return\n        const success = this.selectIndex(this.selectedIndex.$ + this.windowSize)\n        if (!success) return key\n      },\n    },\n  ]\n\n  toString() {\n    const items = this.items()\n    // .map(i => json5.stringify(i)).join()\n    return `List: ${items?.length ?? 0}`\n  }\n\n  computed = computed\n  cond = cond\n  eq = eq\n\n  destroy$ = new Subject()\n  ngOnDestroy() {\n    this.destroy$.next(null)\n    this.destroy$.complete()\n  }\n}\n\ninterface Range {\n  start: number\n  end: number\n}\n\nfunction rangeCenteredAroundIndex(index: number, rangeSize: number, length: number) {\n  if (rangeSize < length) {\n    let range = { start: index - rangeSize / 2, end: index + rangeSize / 2 }\n    if (range.start < 0) return { start: 0, end: rangeSize }\n    if (range.end > length) {\n      return { start: length - rangeSize, end: length }\n    }\n    return clampRange(range, 0, length)\n  } else {\n    return { start: 0, end: length }\n  }\n}\n\nexport function selectItem(list: List<any>, item: any) {\n  const index = list.items().indexOf(item)\n  assert(index !== -1, 'item not in list')\n  return list.selectIndex(index)\n}\n\nfunction clampRange(range: { start: number; end: number }, min: number, max: number) {\n  let newRange = clone(range)\n  if (newRange.start < min) newRange.start = min\n  if (newRange.end > max) newRange.end = max\n  return newRange\n}\n","import { Component, ElementRef, EventEmitter, HostListener, Output, computed, forwardRef, inject, input, model } from '@angular/core'\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport * as _ from '@s-libs/micro-dash'\nimport { combineLatestWith, debounceTime } from 'rxjs/operators'\nimport { Element, Point } from '../../angular-terminal/dom-terminal'\nimport { addStyle } from '../../angular-terminal/dom-terminal/sources/core/dom/StyleHandler'\nimport { LOGGER } from '../../angular-terminal/logger'\nimport { Command, ShortcutService, registerShortcuts } from '../../commands/shortcut.service'\nimport { Completion, CompletionProvider } from '../../utils/CompletionProvider'\nimport { patchInputSignal, signal2 } from '../../utils/Signal2'\nimport { List } from '../2-common/list/list'\nimport { ListItem } from '../2-common/list/list-item'\nimport { H } from './h'\nimport { V } from './v'\nimport { Style } from './style'\nimport { assert } from '../../utils/Assert'\n\n\nlet globalId = 0\n\n@Component({\n  selector: 'text-input',\n  template: `\n    <!-- The text to edit -->\n    <h>{{ text() }}</h>\n\n    <!-- One extra length for the caret at the end -->\n    <h [s]=\"{ width: 1, height: 1 }\"/>\n\n    <!-- Completions hover popup -->\n    @if(completionProvider() && completions().length > 0) {\n      <v [s]=\"[{backgroundColor: 'gray', color: 'white', position: 'absolute'}, completionsSelectorPos]\">\n        <list [items]=\"completions()\" (selectedItem)=\"completionSelected.$ = $event\" >\n          <h *item=\"let completion; type: completions\">{{ completion.value }}</h>\n        </list>\n      </v>\n    }\n  `,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => TextInput),\n      multi: true,\n    },\n    { provide: ShortcutService },\n  ],\n  imports: [H, V, Style, List, ListItem]\n})\nexport class TextInput implements ControlValueAccessor {\n  _id = ++globalId\n\n  readonly textInput = input('', { alias: \"text\" })\n  readonly text = signal2('')\n  @Output() textChange = new EventEmitter<string>()\n\n  readonly multiline = input(false)\n  readonly focusOnInit = input(true)\n\n  readonly caretIndex = model(0)\n  readonly domElement = signal2<Element | undefined>(undefined)\n  readonly firstTextInput = signal2(true)\n\n  // Completions\n  readonly completionProvider = input<CompletionProvider | undefined>(undefined);\n  readonly completions = signal2<Completion[]>([])\n  readonly completionSelected = signal2<Completion | undefined>(undefined)\n  readonly completionsSelectorPos = computed(() => {\n    const { x, y } = fromCaretIndexToXY(this.text(), this.caretIndex())\n    return { left: x, top: y + 1 }\n  })\n\n  shortcutService = inject(ShortcutService)\n  elementRef = inject(ElementRef<Element>)\n  logger = inject(LOGGER)\n\n  constructor() {\n    addStyle({ flexDirection: 'row', scrollF: 'x', overflow: 'visible' })\n\n    patchInputSignal(this.textInput).subscribe(value => {\n      assert(typeof value == 'string')\n\n      if (value != this.text()) {\n        this.text.set(value)\n        this.setCaret(value.length)\n      }\n      // if (this.firstTextInput) {\n      //   this.firstTextInput = false\n      //   this.setCaret(value.length)\n      // }\n    })\n\n\n    // effect(() => {\n    //   const value = this.text()\n    //   assert(typeof value == 'string')\n\n    //   this.textChange.next(value)\n    //   this.controlValueAccessor.onChange(value)\n    // })\n\n    this.text.subscribe(value => {\n      assert(typeof value == 'string')\n\n      this.textChange.next(value)\n      this.controlValueAccessor.onChange(value)\n    })\n\n    // effect(() => {\n    //   this.caretIndex()\n    //   untracked(() => {\n    //     this.updateCaretPositionAndScroll()\n    //   })\n    // })\n\n    this.caretIndex.subscribe(index => {\n      this.updateCaretPositionAndScroll()\n    })\n\n    this.setCaret(this.text().length)\n\n    registerShortcuts(this.shortcuts, { context: { name: 'TextInput', ref: this } })\n\n    {\n      const text$ = toObservable(this.text)\n      const caretIndex$ = toObservable(this.caretIndex)\n\n      text$\n        .pipe(\n          combineLatestWith(caretIndex$),\n          debounceTime(20),\n          takeUntilDestroyed(),\n        )\n        .subscribe(async () => {\n          const completionProvider = this.completionProvider()\n          if (completionProvider) {\n            this.completions.$ = (await completionProvider.completions({\n              text: this.text(),\n              caretIndex: this.caretIndex(),\n            }))\n          } else {\n            this.completions.$ = []\n          }\n        })\n    }\n  }\n\n  ngOnInit() {\n    if (this.focusOnInit()) {\n      this.shortcutService.requestFocus({ reason: 'TextInput onInit' })\n    }\n  }\n\n  setCaret(value: number) {\n    value = _.clamp(value, 0, this.text().length)\n    this.caretIndex.set(value)\n  }\n\n  @HostListener('mousedown', ['$event'])\n  onClick() {\n    this.shortcutService.requestFocus({ reason: 'click' })\n  }\n\n  ngAfterViewInit() {\n    this.domElement.$ = this.elementRef.nativeElement\n    this.updateCaretPositionAndScroll()\n    this.shortcutService.caretElement.$ = this.domElement()\n  }\n\n  updateCaretPositionAndScroll() {\n    if (this.domElement()) {\n      if (this.multiline()) {\n        const { x, y } = fromCaretIndexToXY(this.text(), this.caretIndex())\n        this.domElement().caret = new Point({ x, y })\n      } else {\n        this.domElement().caret = new Point({ x: this.caretIndex(), y: 0 })\n      }\n      this.domElement().scrollCellIntoView(this.domElement().caret)\n    }\n  }\n\n  toString() {\n    return `TextInput: '${this.text()}'`\n  }\n\n  // implements ControlValueAccessor, so a form can read/write the value of this input\n  //#region ControlValueAccessor\n\n  controlValueAccessor = {\n    disabled: false,\n    onChange: (value: string) => { },\n    onTouched: () => { },\n  }\n\n  writeValue(value: string) {\n    this.text.$ = value\n    this.setCaret(_.clamp(this.caretIndex(), 0, this.text().length))\n    this.controlValueAccessor.onChange(value)\n  }\n\n  registerOnChange(fn: (value: string) => void) {\n    this.controlValueAccessor.onChange = fn\n  }\n\n  registerOnTouched(fn: () => void) {\n    this.controlValueAccessor.onTouched = fn\n  }\n\n  setDisabledState(disabled: boolean) {\n    this.controlValueAccessor.disabled = disabled\n  }\n\n  //#endregion ControlValueAccessor\n\n  shortcuts: Partial<Command>[] = [\n    {\n      keys: 'left',\n      func: key => {\n        if (this.caretIndex() == 0) return key\n        this.caretIndex.update(v => --v)\n      },\n    },\n    {\n      keys: 'right',\n      func: key => {\n        if (this.caretIndex() == this.text().length) return key\n        this.caretIndex.update(v => ++v)\n      },\n    },\n    {\n      keys: 'down',\n      func: key => {\n        if (this.multiline() == false) {\n          return key\n        }\n        let i = this.caretIndex()\n        for (; true; i++) {\n          if (i >= this.text().length) {\n            return key\n          }\n          if (this.text()[i] == \"\\n\") {\n            this.setCaret(i + 1)\n            break\n          }\n        }\n      },\n    },\n    {\n      keys: 'up',\n      func: key => {\n        if (this.multiline() == false) {\n          return key\n        }\n        let i = this.caretIndex()\n        for (; true; i--) {\n          if (i <= 0) {\n            return key\n          }\n          if (this.text()[i] == \"\\n\") {\n            this.setCaret(i - 1)\n            break\n          }\n        }\n      },\n    },\n    {\n      keys: 'pgup',\n      func: key => {\n        if (this.multiline()) {\n          this.setCaret(0)\n        } else {\n          return key\n        }\n      }\n    },\n    {\n      keys: 'pgdown',\n      func: key => {\n        if (this.multiline()) {\n          this.setCaret(this.text().length)\n        } else {\n          return key\n        }\n      }\n    },\n    {\n      keys: 'home',\n      func: key => {\n        if (this.caretIndex() == 0) return key\n        this.setCaret(0)\n      },\n    },\n    {\n      keys: 'end',\n      func: key => {\n        if (this.caretIndex() == this.text().length) return key\n        this.setCaret(this.text().length)\n      },\n    },\n    {\n      keys: 'backspace',\n      func: key => {\n        if (this.caretIndex() == 0) return key\n        this.text.$ = this.text().substring(0, this.caretIndex() - 1) + this.text().substring(this.caretIndex())\n        this.caretIndex.update(v => --v)\n      },\n    },\n    {\n      keys: 'ctrl+left',\n      func: key => {\n        if (this.caretIndex() == 0) return key\n        this.setCaret(searchFromIndex(this.text(), this.caretIndex(), -1))\n      },\n    },\n    {\n      keys: 'ctrl+u',\n      func: () => {\n        this.text.$ = ''\n        this.setCaret(0)\n      },\n    },\n    {\n      keys: 'ctrl+right',\n      func: key => {\n        if (this.caretIndex() == this.text().length) return key\n        this.setCaret(searchFromIndex(this.text(), this.caretIndex(), +1))\n      },\n    },\n    {\n      keys: ['ctrl+h', 'ctrl+w', 'ctrl+backspace'],\n      func: key => {\n        if (this.caretIndex() == 0) return key\n        const index = searchFromIndex(this.text(), this.caretIndex(), -1)\n        this.text.$ = this.text().substring(0, index) + this.text().substring(this.caretIndex(), this.text().length)\n        this.setCaret(index)\n      },\n    },\n    {\n      keys: 'delete',\n      func: () => {\n        this.text.$ = this.text().substring(0, this.caretIndex()) + this.text().substring(this.caretIndex() + 1)\n      },\n    },\n    {\n      id: 'selectCompletion',\n      keys: 'tab',\n      func: key => {\n        if (this.completionProvider() === undefined) return key\n        if (!this.completionSelected()) return key\n        const completion = this.completionSelected()\n        const toBeInserted = completion?.textToInsert ?? completion?.value\n        this.text.$ = this.text().slice(0, this.caretIndex())\n          + toBeInserted\n          + this.text().slice(this.caretIndex())\n        this.caretIndex.update(c => c + toBeInserted.length)\n      }\n    },\n    {\n      keys: 'else',\n      func: key => {\n        if (!key.shift && !key.ctrl && !key.alt && !key.meta) {\n          if (key.name.length == 1) {\n            insertString(this, key.name)\n            return\n          } else {\n            if (key.name == 'enter') {\n              if (this.multiline()) {\n                insertString(this, \"\\n\")\n                return\n              }\n            }\n          }\n        }\n        return key\n\n        function insertString(textInput: TextInput, str: string) {\n          textInput.text.$ = textInput.text().substring(0, textInput.caretIndex()) + str + textInput.text().substring(textInput.caretIndex())\n          textInput.caretIndex.update(c => c + str.length)\n        }\n      }\n    },\n  ]\n}\n\nconst fromCaretIndexToXYCache = { text: undefined, caretIndex: undefined, result: undefined }\n\nfunction fromCaretIndexToXY(text: string, caretIndex: number) {\n  if (fromCaretIndexToXYCache.text === text && fromCaretIndexToXYCache.caretIndex == caretIndex) {\n    return fromCaretIndexToXYCache.result\n  }\n  let x = 0\n  let y = 0\n  for (let i = 0; i < caretIndex; i++) {\n    if (text[i] == '\\n') {\n      y++\n      x = 0\n    } else {\n      x++\n    }\n  }\n  const result = { x, y }\n  fromCaretIndexToXYCache.text = text\n  fromCaretIndexToXYCache.caretIndex = caretIndex\n  fromCaretIndexToXYCache.result = result\n  return result\n}\n\n/**\n * Used to jump around the text with 'ctrl+left' and 'ctrl+right'.\n * Determines the index to jump to. According to the start index, the direction (incrementBy)\n * and a list of characters that break the jump.\n */\nfunction searchFromIndex(\n  text: string,\n  startIndex: number,\n  incrementBy = 1,\n  characters = ` \\n\\t\\`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?`\n) {\n  let index = startIndex + incrementBy\n  if (characters.includes(text[index])) {\n    index += incrementBy\n  }\n  while (true) {\n    if (index <= 0 || index >= text.length) {\n      return index\n    } else if (characters.includes(text[index])) {\n      if (incrementBy == 1) {\n        return index\n      } else {\n        index -= incrementBy\n        return index\n      }\n    } else {\n      index += incrementBy\n    }\n  }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core'\nimport { Subject } from 'rxjs'\nimport { FileLogger, LOGGER } from '../../../angular-terminal/logger'\nimport { subscribe } from '../../../utils/reactivity'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NotificationsService {\n  logger = inject(FileLogger)\n\n  $onNotification = new Subject<Notification>()\n\n  constructor() {\n    const logger = this.logger\n\n    subscribe(this, logger.$onLog, thing => {\n      if (thing.level == 'error') {\n        this.notify(thing)\n      }\n    })\n  }\n\n  notify(notification: Notification) {\n    this.$onNotification.next(notification)\n  }\n\n  destroy$ = new Subject()\n  ngOnDestroy() {\n    this.destroy$.next(null)\n    this.destroy$.complete()\n  }\n}\n\nexport interface Notification {\n  name: string\n  message?: string\n}\n\nexport const INJECT_NOTIFICATIONS_SERVICE = new InjectionToken<NotificationsService>(\n  'Notifications Service'\n)\n","export const blackOnWhite = { backgroundColor: 'white', color: 'black' }\nexport const blackOnGray = { backgroundColor: 'dimgray', color: 'black' }\nexport const whiteOnGray = { backgroundColor: 'dimgray', color: 'white' }\n\nexport const borderBottom = {\n  borderBottomCharacter: '-',\n  backgroundClip: 'contentBox',\n}\nexport const borderTop = { borderTopCharacter: '-', backgroundClip: 'contentBox' }\n","import {\n  Component,\n  computed,\n  ContentChild,\n  inject,\n  input,\n  model,\n  Output,\n  TemplateRef,\n  ViewChild\n} from '@angular/core'\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop'\nimport { NG_VALUE_ACCESSOR } from '@angular/forms'\nimport Fuse from 'fuse.js'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { debounceTime, map } from 'rxjs/operators'\nimport { LOGGER } from '../../angular-terminal/logger'\nimport { FocusDirective } from '../../commands/focus.directive'\nimport { makeObservable } from '../../utils/reactivity'\nimport { patchInputSignal } from '../../utils/Signal2'\nimport { V } from '../1-basics/v'\nimport { Style } from '../1-basics/style'\nimport { TextInput } from '../1-basics/text-input'\nimport { NotificationsService } from './app-shell/notifications.service'\nimport { List } from './list/list'\nimport { ListItem } from './list/list-item'\nimport { borderTop } from './styles'\n\n@Component({\n  selector: 'search-list',\n  template: `\n    <v>\n      @if (searchInputVisible()) {\n        <text-input\n          [text]=\"searchText()\"\n          (textChange)=\"searchTextChange.next($event)\"\n          [focusIf]=\"focusInputIf()\"\n          [s]=\"{ backgroundColor: 'gray', color: 'white' }\"/>\n      }\n      <list\n        [items]=\"matchingItems()\"\n        (selectedItem)=\"selectedItem.next($event)\"\n        onItemsChangeSelect=\"first\"\n        [trackByFn]=\"trackByFn()\"\n        [template]=\"template() || template2\">\n      </list>\n    </v>\n  `,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useFactory: () => {\n        const searchList = inject(SearchList)\n        return searchList.$list\n      },\n    },\n  ],\n  imports: [V, TextInput, FocusDirective, List, Style]\n})\nexport class SearchList<T> {\n  items = input.required<T[]>()\n  $items = toObservable(this.items)\n\n  readonly searchText = input('')\n  readonly searchKeys = input([])\n  readonly trackByFn = input((index, item) => item)\n  readonly searchInputVisible = input(true)\n  readonly focusInputIf = input(false)\n  readonly template = input<TemplateRef<any>>(undefined)\n\n  @ViewChild(List) list: List<T>\n  @ContentChild(ListItem, { read: TemplateRef }) template2: TemplateRef<any>\n\n  @Output() searchTextChange = new BehaviorSubject(this.searchText())\n  @Output() selectedItem = new BehaviorSubject(null)\n\n  searchEnabled = model(true)\n  searchIndex = new Fuse([], { keys: this.searchKeys() })\n\n  matchingItemsObservable = combineLatest([this.$items, this.searchTextChange]).pipe(\n    debounceTime(100),\n    map(([items, searchText]) => {\n      if (this.searchEnabled && searchText && searchText.length >= 2) {\n        return this.searchIndex.search(searchText).map(result => result.item)\n      } else {\n        return items\n      }\n    })\n  )\n  matchingItems = toSignal(this.matchingItemsObservable, { initialValue: [] })\n  $list = new BehaviorSubject<List<T>>(null)\n\n  notificationService = inject(NotificationsService)\n\n  logger = inject(LOGGER)\n\n  ngOnInit() {\n    const items = patchInputSignal(this.items)\n    items.subscribe(items => {\n      if (items.length <= 0) {\n        this.searchEnabled.set(false)\n        return\n      }\n\n      if (items.length > 20_000) {\n        this.searchEnabled.set(false)\n        this.notificationService.notify({ name: 'search disabled. list too long' })\n        return\n      }\n\n      this.searchEnabled.set(true)\n      const firstItem = items[0]\n      Object.entries(firstItem).forEach(([key, value]) => {\n        if (['string', 'number'].includes(typeof value)) {\n          this.searchKeys().push(key)\n        }\n      })\n      this.searchIndex = new Fuse(items, { keys: this.searchKeys() })\n    })\n    // effect(() => {\n    //   console.log(this.matchingItems())\n    // })\n\n    makeObservable(this, 'list', '$list')\n  }\n\n  borderTop = borderTop\n}\n","import { Component, inject, input, output, viewChild } from '@angular/core'\nimport { last } from '@s-libs/micro-dash'\nimport { Subject } from 'rxjs'\nimport { addStyle } from '../angular-terminal/dom-terminal/sources/core/dom/StyleHandler'\nimport { LOGGER } from '../angular-terminal/logger'\nimport { Style } from '../components/1-basics/style'\nimport { V } from '../components/1-basics/v'\nimport { ListItem } from '../components/2-common/list/list-item'\nimport { SearchList } from '../components/2-common/search-list'\nimport { assert } from '../utils/Assert'\nimport { signal2 } from '../utils/Signal2'\nimport { logError } from '../utils/utils'\nimport { Disposable } from './disposable'\nimport { Command, ShortcutService } from './shortcut.service'\n\n/**\n * Popup to discover commands and pick one.\n */\n@Component({\n  selector: 'command-picker',\n  template: `\n    <search-list\n      #searchList\n      [items]=\"listOfCommands()\"\n      [s]=\"{ border: 'rounded', backgroundColor: 'darkgray', hgrow: true }\">\n      <v *item=\"let command; type: listOfCommands\"\n        >{{ command.name }} ({{ command.keys }})\n      </v>\n    </search-list>\n  `,\n  providers: [\n    {\n      // This creates a ShortcutService to store separately the shortcuts of this component.\n      provide: ShortcutService,\n    },\n  ],\n  imports: [SearchList, ListItem, Style, V]\n})\nexport class CommandPicker {\n  readonly shortcutService = input<ShortcutService>(null)\n  readonly onClose = output()\n\n  isolatedShortcutService = inject(ShortcutService)\n  logger = inject(LOGGER)\n\n  readonly listOfCommands = signal2<Command[]>([])\n  readonly hideCommands = signal2(true)\n  readonly list = viewChild<SearchList<any>>('searchList')\n\n  constructor() {\n    // Isolate the isolatedShortcutService\n    this.isolatedShortcutService.parent = undefined\n    addStyle({ position: 'absolute', top: 0, left: '25%', width: '50%', maxHeight: '100%' })\n  }\n\n  ngOnInit() {\n    this.hideCommands.subscribe(hideCommands => {\n      this.listOfCommands.$ = this.listCommands()\n    })\n    this.shortcutService().rootNode().before.$ = this.isolatedShortcutService\n\n    // almost like: registerShortcuts(this.commands)\n    const disposables = this.shortcuts.map(command => {\n      return this.isolatedShortcutService.registerCommand({ ...command, context: { name: 'Shortcuts', ref: this } })\n    })\n\n    this.destroy$.subscribe(() => {\n      Disposable.from(...disposables).dispose()\n    })\n  }\n\n  private listCommands(): Command[] {\n    function recursiveListCommands(shortcutService: ShortcutService, result: Array<Command>) {\n      const commands = Object.values(shortcutService.commands())\n        .map(commands => last(commands))\n        .filter(c => c)\n      result.push(...commands)\n      if (shortcutService.parent) {\n        recursiveListCommands(shortcutService.parent, result)\n      }\n    }\n\n    let commands: Array<Command> = []\n    const focused = focusedShortcutService(this.shortcutService())\n    recursiveListCommands(focused, commands)\n    if (this.hideCommands()) {\n      return commands.filter(c => !c.hidden)\n    } else {\n      return commands\n    }\n  }\n\n  shortcuts = [\n    {\n      keys: 'enter',\n      func: () => {\n        let command = this.list().selectedItem.value\n        if (!command) return\n        const focused = focusedShortcutService(this.shortcutService())\n        try {\n          focused.callCommand({ id: command.id })\n        } catch (e) {\n          logError(this.logger, `callCommand failed: '${command.id}'\\n${e}`)\n        }\n        this.onClose.emit(null)\n        this.shortcutService().before.$ = null\n      },\n    },\n    {\n      keys: 'escape',\n      func: () => {\n        this.onClose.emit(null)\n      },\n    },\n    {\n      keys: 'ctrl+h',\n      name: 'Toggle Hidden Commands',\n      func: () => {\n        this.hideCommands.$ = !this.hideCommands.$\n      },\n    },\n    {\n      keys: 'else',\n      func: () => { },\n    },\n  ]\n\n  destroy$ = new Subject()\n  ngOnDestroy() {\n    this.destroy$.next(null)\n    this.destroy$.complete()\n  }\n}\n\nfunction focusedShortcutService(rootShortcutService: ShortcutService) {\n  let shortcutService = rootShortcutService\n  let i = 0\n  while (true) {\n    if (shortcutService.focusedChild() == null) {\n      return shortcutService\n    } else {\n      shortcutService = shortcutService.focusedChild()\n    }\n    assert(i < 100, 'infinite loop ?')\n  }\n}\n","import { Directive, inject, ElementRef } from '@angular/core'\nimport { TermElement as Element } from '../../angular-terminal/dom-terminal/sources/core/dom/Element'\n\n/**\n * Grow horizontally\n * @example <v hgrow></v>\n */\n\n@Directive({\n\tstandalone: true,\n\tselector: '[hgrow]',\n})\nexport class HGrow {\n\telementRef = inject<ElementRef<Element>>(ElementRef);\n\n\tngOnInit() {\n\t\tthis.elementRef.nativeElement.style.add({ hgrow: true })\n\t}\n}\n","import { Directive, inject, ElementRef } from '@angular/core'\nimport { TermElement as Element } from '../../angular-terminal/dom-terminal/sources/core/dom/Element'\n\n/**\n * Grow vertically\n * <v vgrow></v>\n */\n\n@Directive({\n\tstandalone: true,\n\tselector: '[vgrow]',\n})\nexport class VGrow {\n\telementRef = inject<ElementRef<Element>>(ElementRef);\n\n\tngOnInit() {\n\t\tthis.elementRef.nativeElement.style.add({ vgrow: true })\n\t}\n}\n","import { Directive, inject, ElementRef } from '@angular/core'\nimport { TermElement as Element } from '../../angular-terminal/dom-terminal/sources/core/dom/Element'\n\n/**\n * <v grow></v>\n */\n\n@Directive({\n\tstandalone: true,\n\tselector: '[grow]',\n})\nexport class Grow {\n\telementRef = inject<ElementRef<Element>>(ElementRef);\n\n\tngOnInit() {\n\t\tthis.elementRef.nativeElement.style.add({ vgrow: true, hgrow: true })\n\t}\n}\n","\nimport { Component, Signal, computed, effect, signal, input, inject } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { LOGGER } from '../../angular-terminal/logger'\nimport { KeyValue } from '../../utils/interfaces'\nimport { inputToSignal, longest } from '../../utils/utils'\nimport { H } from '../1-basics/h'\nimport { V } from '../1-basics/v'\nimport { Grow } from '../1-basics/grow.directive'\nimport { List } from \"./list/list\"\nimport { blackOnWhite } from './styles'\nimport { ListItem } from './list/list-item'\nimport { Style } from '../1-basics/style'\n\n@Component({\n  selector: 'object-display',\n  template: `\n    <list [items]=\"keyValues()\">\n      <h *item=\"let keyValue; type: keyValues()\">\n        <h\n          [s]=\"{ flexShrink: 0, width: longestKey() + 1, vgrow: true }\"\n          [s]=\"[s.blackOnWhite]\"\n          >{{ keyValue.key }}</h\n        >\n        <h [s]=\"{ wrap: 'wrap' }\">{{ keyValue.value }}</h>\n      </h>\n    </list>\n  `,\n  imports: [H, List, ListItem, Style]\n})\nexport class ObjectDisplay<T> {\n  readonly object = input<T | Observable<T> | Signal<T>>(undefined)\n\n  keyValues = computed(() => {\n    const object = this.object() || {}\n    return Object.entries(object).map(([key, value]) => {\n      if (typeof value == 'string') {\n        return { key, value }\n      } else {\n        return { key, value }\n      }\n    })\n  })\n\n  longestKey = computed(() => longest(this.keyValues()))\n\n  trackByFn = (index, keyValue: KeyValue) => keyValue.key\n\n  logger = inject(LOGGER)\n\n  s = {\n    blackOnWhite: blackOnWhite,\n  }\n}\n","\nimport { Component, ElementRef, inject } from '@angular/core'\nimport { Subject } from 'rxjs'\nimport { subscribe } from '../../../utils/reactivity'\nimport { signal2 } from '../../../utils/Signal2'\nimport { H } from '../../../components/1-basics/h'\nimport { V } from '../../../components/1-basics/v'\nimport { Style } from '../../1-basics/style'\nimport { ObjectDisplay } from '../object-display'\nimport { Notification, NotificationsService } from './notifications.service'\n\n@Component({\n  selector: 'notifications',\n  template: `\n    @if (notification()) {\n      <v\n        [s]=\"{ display: notification ? 'flex' : 'none', border: 'rounded', hgrow: true }\">\n        @if (notification().name) {\n          <h>{{ notification().name }}</h>\n        }\n        <object-display [object]=\"notification()\"/>\n        <!-- <h [s]=\"{ hgrow: true, justifyContent: 'flexEnd' }\"><h>Go To Logs: alt+l</h></h> -->\n      </v>\n    }\n    `,\n  imports: [V, H, ObjectDisplay, Style]\n})\nexport class Notifications {\n  notificationsService = inject(NotificationsService)\n  elementRef = inject(ElementRef)\n\n  notification = signal2<Notification | null>(null)\n\n  constructor() {\n    this.elementRef.nativeElement.style.add({\n      position: 'absolute',\n      bottom: 1,\n      right: 0,\n      width: '50%',\n      backgroundColor: 'darkgray',\n      color: 'white',\n      borderColor: 'white'\n    })\n\n    subscribe(null, this.notificationsService.$onNotification, async notification => {\n      this.notification.$ = notification\n      await timeout(4000)\n      this.notification.$ = null\n    })\n  }\n}\n\nfunction timeout(ms) {\n  return new Promise(resolve => setTimeout(resolve, ms))\n}\n","import { computed, inject, Injectable, InjectionToken, Signal, signal, StaticProvider, WritableSignal } from '@angular/core'\nimport { AnyObject, assert } from '../../../utils/utils'\n\nexport class View {\n  name: string\n  component: any\n  tags?: (string | AnyObject)[]\n}\n\nexport const VIEWS = new InjectionToken<View[]>('Views')\n\nexport function provideView(view: View & { tags?: string[] }): StaticProvider {\n  return { provide: VIEWS, useValue: { tags: [], ...view }, multi: true }\n}\n\n/**\n * A service for switching to another view.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ViewService {\n  injectedViews = inject(VIEWS)\n\n  /**\n   * All the views that the service can find from providers.\n   */\n  views: WritableSignal<View[]>\n\n  /**\n   * Only the views that should be shown as tabs.\n   */\n  visibleViews: Signal<View[]>\n\n  /**\n   * The current tab that is selected at the botttom.\n   */\n  currentTab: WritableSignal<View>\n\n  constructor() {\n    this.views = signal(this.injectedViews.map(view => ({ tags: [], ...view })))\n    this.currentTab = signal(this.views().find(v => !v.tags.includes('hidden')))\n    this.visibleViews = computed(() => {\n      const visibleViews = this.views().filter(v => !v.tags.includes('hidden'))\n      if (!visibleViews.includes(this.currentTab())) {\n        if (!this.currentTab()) debugger\n        visibleViews.push(this.currentTab())\n      }\n      return visibleViews\n    })\n  }\n\n  switchTo(viewName: string) {\n    const view = this.views().find(v => v.name == viewName)\n    if (!view) throw new Error(`couldnt find view: ${viewName}`)\n    assert(view)\n    this.currentTab.set(view)\n  }\n\n  nextView() {\n    const currentIndex = this.visibleViews().indexOf(this.currentTab())\n    let newIndex = currentIndex + 1\n    if (newIndex > this.visibleViews().length - 1) {\n      newIndex = 0\n    }\n    assert(this.visibleViews()[newIndex])\n    this.currentTab.set(this.visibleViews()[newIndex])\n  }\n}\n","import { NgComponentOutlet } from '@angular/common'\nimport { Component, inject } from '@angular/core'\nimport { ifEq, ifNeq } from '../../../angular-terminal/dom-terminal/sources/core/dom/StyleHandler'\nimport { CommandPicker } from '../../../commands/command-picker.component'\nimport { FocusDirective } from '../../../commands/focus.directive'\nimport { Command, ShortcutService, registerShortcuts } from '../../../commands/shortcut.service'\nimport { Grow } from '../../../components/1-basics/grow.directive'\nimport { H } from '../../../components/1-basics/h'\nimport { V } from '../../../components/1-basics/v'\nimport { signal2 } from '../../../utils/Signal2'\nimport { Style } from '../../1-basics/style'\nimport { blackOnWhite, whiteOnGray } from '../styles'\nimport { Notifications } from './notifications.component'\nimport { ViewService } from './view.service'\n\n@Component({\n  selector: 'app-shell',\n  hostDirectives: [Grow],\n  host: { 's': '{width: \"100%\", height: \"100%\"}' },\n  template: `\n    <!-- Display the currentTab. The others are styled 'display: none'. -->\n    @for (view of viewService.views(); track view) {\n      <v\n        [focusPropagateUp]=\"false\"\n        [focusIf]=\"view == this.viewService.currentTab()\"\n        grow\n        [s]=\"ifNeq(view, this.viewService.currentTab, {display: 'none', flexShrink: 1})\">\n        <ng-container [ngComponentOutlet]=\"view.component\"/>\n      </v>\n    }\n\n    <!-- Push the bottom-bar to the bottom. -->\n    <h [s]=\"{ vgrow: true }\"/>\n\n    <!-- Bottom bar. List of visible views. -->\n    <h [s]=\"{ hgrow: true, backgroundColor: 'grey' }\">\n      @for (view of viewService.visibleViews(); track view) {\n        <h\n          [s]=\"[{ paddingLeft: 1, paddingRight: 1, flexShrink: 0 }, ifEq(view, this.viewService.currentTab, s.blackOnWhite)]\"\n          (mousedown)=\"viewService.switchTo(view.name)\"\n          >{{ view.name }}\n        </h>\n      }\n      <h [s]=\"{ hgrow: true }\"/>\n      <h [s]=\"{ flexShrink: 0 }\" (mousedown)=\"toggleCommands()\">Help: alt+p</h>\n    </h>\n\n    <!-- Popup to discover commands -->\n    @if (showCommands()) {\n      <command-picker [shortcutService]=\"shortcutService\" (onClose)=\"showCommands.$ = false\"/>\n    }\n\n    <!-- Popup to show notifications -->\n    <notifications [focusOnInit]=\"false\"/>\n  `,\n  standalone: true,\n  imports: [H, V, FocusDirective, NgComponentOutlet, Notifications, CommandPicker, Grow, Style]\n})\nexport class AppShell {\n  readonly showCommands = signal2(false)\n\n  readonly viewService = inject(ViewService)\n  readonly shortcutService = inject(ShortcutService)\n\n  constructor() {\n    registerShortcuts(this.shortcuts)\n  }\n\n  s = {\n    blackOnWhite: blackOnWhite,\n    whiteOnGray: whiteOnGray,\n  }\n\n  ifEq = ifEq\n  ifNeq = ifNeq\n\n  toggleCommands() {\n    this.showCommands.$ = !this.showCommands.$\n  }\n\n  shortcuts: Partial<Command>[] = [\n    {\n      keys: 'alt+p',\n      id: 'toggleCommands',\n      keywords: 'commands shortcuts help',\n      func: () => this.toggleCommands(),\n    },\n    {\n      keys: 'alt+e',\n      id: 'nextTab',\n      keywords: 'next view',\n      func: () => {\n        this.viewService.nextView()\n      },\n    },\n    {\n      keys: 'escape',\n      func: () => {\n        if (this.showCommands.$) {\n          this.showCommands.$ = false\n        }\n      },\n    },\n    {\n      keys: 'alt+shift+l',\n      id: 'showLogs',\n      keywords: 'errors',\n      func: () => {\n        this.viewService.switchTo('Logs')\n      },\n    },\n    {\n      keys: 'alt+shift+d',\n      id: 'showDebugger',\n      keywords: 'inspector',\n      func: () => {\n        this.viewService.switchTo('Debugger')\n      },\n    },\n  ]\n}\n","import { Pipe, PipeTransform } from '@angular/core'\nimport json5 from 'json5'\n\n@Pipe({\n  standalone: true,\n  name: 'json5',\n})\nexport class Json5Pipe implements PipeTransform {\n  transform(value: any, ...args: any[]): any {\n    try {\n      return json5.stringify(value, ...args)\n    } catch (e) {\n      return `json5: ${e}`\n    }\n  }\n}\n","import { Component, inject, signal } from '@angular/core'\nimport { Subject } from 'rxjs'\nimport { FileLogger } from '../../../angular-terminal/logger'\nimport { FocusDirective } from '../../../commands/focus.directive'\nimport { ShortcutService, registerShortcuts } from '../../../commands/shortcut.service'\nimport { signal2 } from '../../../utils/Signal2'\nimport { H } from '../../../components/1-basics/h'\nimport { V } from '../../../components/1-basics/v'\nimport { Grow } from '../../../components/1-basics/grow.directive'\nimport { Style } from '../../1-basics/style'\nimport { Json5Pipe } from '../json5.pipe'\nimport { List } from '../list/list'\nimport { ListItem } from '../list/list-item'\nimport { ObjectDisplay } from \"../object-display\"\n\nclass NullLogger {\n  log(thing) { }\n}\n\n@Component({\n  selector: 'logs',\n  hostDirectives: [Grow],\n  template: `\n    <h [s]=\"[s.blackOnWhite, { hgrow: true }]\">Logs</h>\n    <h grow>\n      <list [items]=\"logs()\" [s]=\"{ width: '50%' }\" (selectedItem)=\"$selectedLog.set($event)\">\n        <div *item=\"let item\">{{item | json5}}</div>\n      </list>\n      <v [focusIf]=\"focused() == 'right'\" [s]=\"[s.rightPane]\">\n        <object-display [object]=\"$selectedLog() || {}\" />\n      </v>\n    </h>\n  `,\n  imports: [H, V, List, ListItem, Style, Json5Pipe, ObjectDisplay, FocusDirective, Grow]\n})\nexport class Logs {\n  logger = inject(FileLogger, { skipSelf: true })\n  shortcutService = inject(ShortcutService)\n\n  logs = this.logger.$logs\n  $selectedLog = signal(null)\n  focused = signal2<'left' | 'right'>('left')\n\n  constructor() {\n    registerShortcuts(this.shortcuts)\n  }\n\n  shortcuts = [\n    {\n      keys: 'shift+right',\n      func: key => {\n        if (this.focused() == 'left') {\n          this.focused.$ = 'right'\n        } else {\n          return key\n        }\n      }\n    },\n    {\n      keys: 'shift+left',\n      func: key => {\n        if (this.focused() == 'right') {\n          this.focused.$ = 'left'\n        } else {\n          return key\n        }\n      }\n    }\n  ]\n\n  s = {\n    rightPane: { width: '50%', height: '100%', flexShrink: 0, borderLeftCharacter: '|' },\n    blackOnWhite: { backgroundColor: 'white', color: 'black' }\n  }\n\n  destroy$ = new Subject()\n  ngOnDestroy() {\n    this.destroy$.next(null)\n    this.destroy$.complete()\n  }\n}\n","import { Directive, ElementRef, inject } from '@angular/core'\nimport { Element, TermText2 } from '../angular-terminal/dom-terminal/index'\nimport { traverse } from '../angular-terminal/dom-terminal/sources/core/dom/Node'\nimport { LogPointService } from './LogPointService'\n\n@Directive({\n\tselector: '[domLog]',\n\tstandalone: true,\n})\nexport class DomLog {\n\tprotected element = inject(ElementRef<Element>).nativeElement\n\tprotected logPointService = inject(LogPointService)\n\n\tngOnInit() {\n\t\ttraverse(this.element, node => {\n\t\t\tif (node.nodeName == 'TermText2') {\n\t\t\t\t(node as TermText2).lp = this.logPointService\n\t\t\t}\n\t\t})\n\t}\n}","import { Injectable, inject } from '@angular/core'\nimport * as fs from 'fs'\nimport json5 from 'json5'\nimport { LOGGER } from '../../angular-terminal/logger'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ConfigLoader {\n  logger = inject(LOGGER)\n\n  fileName = 'config.json'\n  config?: any = {}\n\n  constructor() {\n    let jsonData = null\n    try {\n      jsonData = fs.readFileSync(this.fileName, { encoding: 'utf-8' })\n    } catch (error) { }\n    this.config = json5.parse(jsonData)\n  }\n}\n","import { Component, inject, input, model } from \"@angular/core\"\nimport { FormGroup, ReactiveFormsModule } from \"@angular/forms\"\nimport { Style } from \"../1-basics/style\"\nimport { TextInput } from \"../1-basics/text-input\"\nimport { blackOnWhite } from \"./styles\"\nimport { ShortcutService } from \"../../commands/shortcut.service\"\n\n\n@Component({\n\tselector: 'keyvalue-editor',\n\ttemplate: `\n    <v [formGroup]=\"formGroup\" [s]=\"{ flexDirection: 'row' }\">\n      <v [s]=\"{ width: keyWidth() + 1 }\" [s]=\"[blackOnWhite]\">{{ keyValue().key }}</v>\n      <text-input [formControlName]=\"keyValue().key\" [text]=\"keyValue().value\"/>\n    </v>\n    `,\n\timports: [TextInput, ReactiveFormsModule, Style]\n})\nexport class KeyValueEditor {\n\treadonly keyValue = input<{\n\t\tkey: string\n\t\tvalue: any\n\t} | null>(null);\n\n\treadonly keyWidth = model(0);\n\n\tformGroup = inject(FormGroup)\n\tshortcutService = inject(ShortcutService)\n\n\tngOnInit() {\n\t\tif (!this.keyWidth()) {\n\t\t\tthis.keyWidth.set(this.keyValue().key.length)\n\t\t}\n\t}\n\n\tblackOnWhite = blackOnWhite;\n\n\tngOnDestroy() {\n\t\tthis.shortcutService.unfocus()\n\t}\n}\n","import { Component, computed, inject, input, Output, viewChild } from '@angular/core'\nimport { FormBuilder, FormGroup } from '@angular/forms'\nimport json5 from 'json5'\nimport * as _ from 'lodash-es'\nimport { Subject } from 'rxjs'\nimport { FocusDirective } from '../../commands/focus.directive'\nimport { registerShortcuts, ShortcutService } from '../../commands/shortcut.service'\nimport { longest, mapKeyValue } from '../../utils/utils'\nimport { KeyValueEditor } from './KeyValueEditor'\nimport { List } from './list/list'\nimport { ListItem } from './list/list-item'\nimport { blackOnWhite } from './styles'\nimport { LOGGER } from '../../angular-terminal/logger'\n\n@Component({\n    imports: [List, KeyValueEditor, ListItem, FocusDirective],\n    selector: 'form-editor',\n    template: `\n    <list [items]=\"keyValues()\">\n      <keyvalue-editor\n        *item=\"let keyValue; type: keyValues\"\n        focus\n        [keyValue]=\"keyValue\"\n        [keyWidth]=\"longestKey()\"/>\n    </list>\n  `,\n    providers: [\n        {\n            provide: FormGroup,\n            useFactory: () => inject(FormEditor).form(),\n        },\n    ]\n})\nexport class FormEditor {\n  fb = inject(FormBuilder)\n  shortcutService = inject(ShortcutService)\n\n  object = input.required()\n  @Output() onSubmit = new Subject()\n\n  simpleObject = computed(() => simplifyObject(this.object()))\n  keyValues = computed(() => Object.entries(this.simpleObject())\n    .map(([key, value]) => ({\n      key: key,\n      value: value,\n    }))\n  )\n  longestKey = computed(() => longest(this.keyValues()))\n  form = computed(() => this.fb.group(this.simpleObject()))\n\n  readonly list = viewChild(List)\n\n  keybinds = [\n    {\n      keys: 'enter',\n      func: () => {\n        const value = this.getValue()\n        this.onSubmit.next(value)\n      },\n    },\n  ]\n\n  logger = inject(LOGGER)\n\n  constructor() {\n    registerShortcuts(this.keybinds)\n  }\n\n  getValue() {\n    const value = mapBackToOriginalTypes({\n      formObject: this.form().value,\n      originalObject: this.object()\n    })\n    return value\n  }\n\n  blackOnWhite = blackOnWhite\n}\n\n// Removes arrays. Transforms values into strings.\nfunction simplifyObject(object) {\n  return mapKeyValue(object, (key, value) => {\n    if (Array.isArray(value)) {\n      return undefined\n    } else if (value === null) {\n      return [key, '']\n    } else {\n      return [key, String(value)]\n    }\n  })\n}\n\nfunction mapBackToOriginalTypes(args: { formObject: any; originalObject: any }) {\n  const { formObject, originalObject } = args\n  return _.mapValues(formObject, (value, key) => {\n    if (_.has(originalObject, key)) {\n      const originalValue = originalObject[key]\n      const originalType = typeof originalValue\n      if (originalValue === null && ['', 'null'].includes(value)) {\n        return null\n      } else if (originalType === 'boolean') {\n        return !['null', 'no', 'false', '0'].includes(value as string)\n      } else if (originalType === 'string') {\n        return value\n      } else if (originalType === 'number') {\n        return Number(value as string)\n      } else if (originalType === 'bigint') {\n        return BigInt(value as string)\n      } else if (originalType === 'object') {\n        return json5.parse(value as string)\n      }\n    } else {\n      return value\n    }\n  })\n}\n","import { Injectable, inject } from '@angular/core'\nimport * as child_process from 'child_process'\nimport fs from 'fs'\nimport { Subject } from 'rxjs'\nimport { ScreenService } from '../../angular-terminal/screen-service'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ExternalTextEditor {\n  screenService = inject(ScreenService)\n\n  filePath = '/tmp/file.json'\n  releaseScreen = false\n\n  edit(text): Subject<any> {\n    const stream = new Subject()\n\n    fs.writeFileSync(this.filePath, text)\n\n    if (this.releaseScreen) {\n      this.screenService.releaseScreen()\n    }\n    const editor = child_process.spawn('code', ['-w', this.filePath], {\n      stdio: 'inherit',\n    })\n\n    const watcher = fs.watch(this.filePath, {}, (eventType, filename) => {\n      if (filename) {\n        setTimeout(() => {\n          const content = fs.readFileSync(this.filePath)\n          stream.next(content)\n        }, 20)\n      }\n    })\n\n    editor.on('exit', (code, signal) => {\n      stream.complete()\n      watcher.close()\n      if (this.releaseScreen) {\n        this.screenService.attachScreen()\n      }\n    })\n\n    return stream\n  }\n}\n","import {\n  Component,\n  inject,\n  Injector,\n  input,\n  model,\n  Signal,\n  signal,\n  viewChild,\n  viewChildren,\n  WritableSignal\n} from '@angular/core'\nimport { NG_VALUE_ACCESSOR } from '@angular/forms'\nimport json5 from 'json5'\nimport * as _ from 'lodash-es'\nimport { Observable, Subject } from 'rxjs'\nimport { addStyle, cond } from '../../../angular-terminal/dom-terminal/sources/core/dom/StyleHandler'\nimport { LOGGER } from '../../../angular-terminal/logger'\nimport { FocusDirective } from '../../../commands/focus.directive'\nimport { Command, registerShortcuts, ShortcutService } from '../../../commands/shortcut.service'\nimport { assert } from '../../../utils/Assert'\nimport { BaseControlValueAccessor } from '../../../utils/base-control-value-accessor'\nimport { DataFormat } from '../../../utils/data-format'\nimport { JsonPath } from '../../../utils/jsonPath'\nimport { subscribe } from '../../../utils/reactivity'\nimport { patchInputSignal, patchWritableSignal, signal2 } from '../../../utils/Signal2'\nimport { AnyObject } from '../../../utils/utils'\nimport { H } from '../../../components/1-basics/h'\nimport { Style } from '../../1-basics/style'\nimport { TextInput } from '../../1-basics/text-input'\nimport { ExternalTextEditor } from '../external-text-editor'\nimport { List } from '../list/list'\nimport { ListItem } from '../list/list-item'\nimport { LogPointService } from '../../../logs/LogPointService'\n\n@Component({\n  selector: 'json-editor',\n  template: `\n    @if (visibleKey()) {\n      <h focusName=\"key\" [focusIf]=\"focused() == 'key'\" [s]=\"{ flexShrink: 0 }\">\n        <text-input [(text)]=\"valueRef().key\"/>:\n      </h>\n    }\n\n    <ng-container focusName=\"value\" [focusIf]=\"focused() == 'value'\">\n      @if (['string', 'number', 'boolean', 'null'].includes(valueRef().type)) {\n        <text-input\n          focusName=\"text-input\"\n          [text]=\"valueText\"\n          (textChange)=\"textChange($event)\"/>\n      }\n      @if (valueRef().type == 'object' || valueRef().type == 'array') {\n        <list [items]=\"valueRef().childrenValueRefs?.() ?? []\" [focusShortcuts]=\"shortcutsForList\" focusName=\"list\">\n          <json-editor\n            *item=\"let ref; type: valueRef().childrenValueRefs?.()\"\n            focus\n            focusName=\"JsonEditor\"\n            [focusOnInit]=\"!!focusPath()\"\n            [valueRef]=\"ref\"\n            [isRoot]=\"false\"\n            [focusPath]=\"$childFocusPath\"\n            [s]=\"cond(!isRoot(), { paddingLeft: 2 })\"/>\n        </list>\n        <!-- TODO: conditional style -->\n      }\n    </ng-container>\n    `,\n  imports: [\n    H,\n    TextInput,\n    List,\n    ListItem,\n    FocusDirective,\n    Style\n  ],\n  providers: [\n    ShortcutService,\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useFactory: (json: JsonEditor) => json.controlValueAccessor,\n      deps: [JsonEditor],\n      multi: true,\n    },\n  ]\n})\nexport class JsonEditor {\n  readonly data = input(undefined)\n  readonly valueRef = model<ValueRef>({ key: null, value: null, type: 'null' })\n  readonly dataFormat = input<DataFormat | undefined>(undefined)\n  readonly path = input<string[]>([])\n  readonly isRoot = input(true)\n  readonly focusPath = input<JsonPath | Signal<JsonPath> | Observable<JsonPath> | undefined>(undefined)\n\n  readonly focused = signal<'key' | 'value'>('value')\n  valueText: string = ''\n  controlValueAccessor = new BaseControlValueAccessor()\n  readonly $childFocusPath = signal2<JsonPath>([])\n\n  readonly list = viewChild(List)\n  readonly jsonEditors = viewChildren(JsonEditor)\n\n  shortcutService = inject(ShortcutService)\n  logger = inject(LOGGER)\n  externalTextEditor = inject(ExternalTextEditor)\n  injector = inject(Injector)\n  lp = inject(LogPointService)\n\n  constructor(\n  ) {\n    addStyle({ flexDirection: 'row' })\n    registerShortcuts(this.shortcuts, { context: { name: 'JsonEditor', ref: this } })\n    if (this.isRoot()) {\n      registerShortcuts(this.rootShortcuts, { context: { name: 'JsonEditor.root', ref: this } })\n    }\n  }\n\n  async setup() {\n    if (this.isRoot()) {\n      let value = undefined\n      const dataFormat = this.dataFormat()\n      const data = this.data()\n      if (dataFormat) {\n        value = await dataFormat.completions()\n      } else if (data !== undefined) {\n        value = data\n      } else {\n        assert(false)\n      }\n      this.lp.logPoint('NewValue.Data', { value })\n      this.valueRef.set({\n        key: null,\n        value: value,\n        type: typeFromValue(value),\n      })\n    }\n  }\n\n  async ngOnInit() {\n    patchInputSignal(this.dataFormat).subscribe(dataFormat => { this.setup() })\n    patchInputSignal(this.data).subscribe(data => { this.setup() })\n\n    patchWritableSignal(this.valueRef).subscribe((valueRef) => {\n      if (this.visibleKey()) {\n        if (this.valueRef().key.length == 0) {\n          this.focused.set('key')\n        } else {\n          this.focused.set('value')\n        }\n      } else {\n        this.focused.set('value')\n      }\n\n      if (valueRef.childrenValueRefs === undefined) {\n        if (valueRef.type == 'object') {\n          valueRef.childrenValueRefs = signal(Object.entries(valueRef.value)\n            .map(([key, value]) => ({\n              key: key,\n              value: value,\n              type: typeFromValue(value),\n            })))\n        } else if (valueRef.type == 'array') {\n          valueRef.childrenValueRefs = signal(Object.entries(valueRef.value)\n            .map(([key, value]) => ({\n              key: Number(key),\n              value: value,\n              type: typeFromValue(value),\n            })))\n        } else {\n          this.valueText = textFromValue(valueRef.value)\n        }\n      }\n    })\n\n    if (this.isRoot()) {\n      this.shortcutService.requestFocus({ reason: 'JsonEditor onInit' })\n    }\n\n    // effect(() => {\n    //   const focusPath = this.$focusPath()\n    //   if (focusPath && focusPath.length == 1) {\n    //     if (focusPath[0] == this.valueRef().key) {\n    //       this.shortcutService.requestFocus({ soft: false, reason: 'JsonEditor focusPath match' })\n    //     }\n    //   }\n    // })\n\n    // this.$childFocusPath = computed(() => {\n    //   const focusPath = this.$focusPath()\n    //   if (focusPath) {\n    //     if (this.valueRef().type == 'object' || this.valueRef().type == 'array') {\n    //       return focusPath\n    //     } else {\n    //       return focusPath.slice(1)\n    //     }\n    //   } else {\n    //     return null\n    //   }\n    // })\n  }\n\n  textChange(text: string) {\n    this.valueText = text\n    this.valueRef().value = valueFromText(text)\n  }\n\n  /**\n   * Creates a javascript object from the json-editor.\n   */\n  getValue(): AnyObject | string | null | number {\n    return getValueFromRef(this.valueRef())\n  }\n\n  setValue(value: any) {\n    this.valueRef.set({\n      key: null,\n      value: value,\n      type: typeFromValue(value),\n    })\n  }\n\n  visibleKey() {\n    return this.valueRef().key != null && typeof this.valueRef().key == 'string'\n  }\n\n  createNewLine() {\n    var newValueRef: ValueRef | undefined = undefined\n    if (this.valueRef().type == 'object') {\n      newValueRef = { key: '', value: '', type: 'string' }\n    } else if (this.valueRef().type == 'array') {\n      newValueRef = { key: null, value: '', type: 'string' }\n    }\n    this.valueRef().childrenValueRefs.update(children => {\n      return [...children, newValueRef]\n    })\n    // const index = this.list().items().indexOf(newValueRef)\n    // assert(index !== -1, 'item not in list')\n    setTimeout(() => this.list().selectIndex(this.valueRef().childrenValueRefs().length - 1))\n  }\n\n  focusJsonPath(jsonPath: JsonPath) {\n    assert(jsonPath.length > 0)\n\n    if (this.valueRef().type == 'object' || this.valueRef().type == 'array') {\n      const key = jsonPath[0]\n      const index = this.valueRef().childrenValueRefs().findIndex(ref => ref.key == key)\n      if (index == -1) return\n      this.list().selectIndex(index)\n\n      if (jsonPath.length >= 2) {\n        const rest = jsonPath.slice(1)\n        this.jsonEditors().at(index).focusJsonPath(rest)\n      }\n    }\n  }\n\n  /**\n   * Shortcuts\n   */\n  shortcuts: Partial<Command>[] = [\n    {\n      keys: 'backspace',\n      func: key => {\n        if (this.focused() == 'value') {\n          if (this.visibleKey()) {\n            this.focused.set('key')\n          } else {\n            return key\n          }\n        } else if (this.focused() == 'key') {\n          return key\n        }\n      },\n    },\n    {\n      keys: ['left', 'ctrl+left', 'shift+tab', 'home'],\n      func: key => {\n        if (this.focused() == 'value' && this.visibleKey()) this.focused.set('key')\n        else return key\n      },\n    },\n    {\n      keys: ['right', 'ctrl+right', 'tab', 'end'],\n      func: key => {\n        if (this.focused() == 'key') this.focused.set('value')\n        else if (this.focused() == 'value') return key\n      },\n    },\n  ]\n\n  rootShortcuts: Partial<Command>[] = [\n    {\n      id: 'openInTextEditor',\n      func: () => {\n        assert(this.externalTextEditor, 'No available externalTextEditor')\n        const text = json5.stringify(this.getValue(), null, 2)\n        const stream = this.externalTextEditor.edit(text)\n        subscribe(this, stream, text => {\n          const value = json5.parse(text)\n          this.setValue(value)\n        })\n      },\n    },\n  ]\n\n  /**\n   * Shortcuts that only apply when focused on a list\n   */\n  shortcutsForList: Partial<Command>[] = [\n    {\n      keys: ['tab', 'ctrl+n'],\n      func: async () => {\n        const length = this.list().items().length\n        if (length == 0 || this.list().selectedIndex() == length - 1) {\n          await this.createNewLine()\n        } else {\n          this.list().selectIndex(this.list().selectedIndex() + 1)\n        }\n      },\n    },\n    {\n      keys: ['left', 'ctrl+left', 'shift+tab', 'home'],\n      func: key => {\n        if (this.list().items().length == 0) return key\n        if (this.list().selectedIndex() == 0) return key\n        this.list().selectIndex(this.list().selectedIndex() - 1)\n      },\n    },\n    {\n      keys: ['right', 'ctrl+right', 'end'],\n      func: key => {\n        if (this.list().items().length == 0) return key\n        if (this.list().selectedIndex() == this.list().items().length - 1) return key\n        this.list().selectIndex(this.list().selectedIndex() + 1)\n      },\n    },\n    {\n      keys: 'backspace',\n      func: () => {\n        if (this.valueRef().childrenValueRefs.length >= 2) {\n          this.valueRef().childrenValueRefs.update(children => {\n            return children.filter(item => item != this.list().selectedValue())\n          })\n          this.list().selectIndex(this.list().selectedIndex() - 1)\n        }\n      },\n    },\n  ]\n\n  cond = cond\n\n  toString() {\n    const keyValue = json5.stringify(this.valueRef())\n    return `JsonEditor: ${keyValue}`\n  }\n\n  destroy$ = new Subject()\n  ngOnDestroy() {\n    this.destroy$.next(null)\n    this.destroy$.complete()\n  }\n}\n\nfunction valueFromText(text: string): any {\n  const jsonNumber = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/gm\n  if (text == 'false') {\n    return false\n  } else if (text == 'true') {\n    return true\n  } else if (text == 'null') {\n    return null\n  } else if (jsonNumber.test(text)) {\n    const number = Number(text)\n    if (_.isNaN(number)) debugger\n    return number\n  } else {\n    return text\n  }\n}\n\nfunction textFromValue(value: any): string {\n  return String(value)\n}\n\nfunction typeFromValue(value: any) {\n  let type: string = typeof value\n  if (value == null) type = 'null'\n  else if (Array.isArray(value)) type = 'array'\n  return type\n}\n\nexport interface ValueRef {\n  key?: any\n  value: any\n  type: string\n  childrenValueRefs?: WritableSignal<ValueRef[]>\n}\n\nfunction getValueFromRef(valueRef: ValueRef) {\n  if (valueRef.type == 'object') {\n    const recursedValueRefs = valueRef.childrenValueRefs().map(ref => [ref.key, getValueFromRef(ref)])\n    return Object.fromEntries(recursedValueRefs)\n  } else if (valueRef.type == 'array') {\n    return valueRef.childrenValueRefs().map(vr => getValueFromRef(vr))\n  } else {\n    return valueRef.value\n  }\n}\n","import { Directive, input } from '@angular/core'\nimport { Observable } from 'rxjs'\n\n@Directive({\n\tstandalone: true,\n\tselector: '[treeNode]',\n})\nexport class TreeNode<T> {\n\treadonly treeNodeType = input<T | T[] | Observable<T[]>>(undefined)\n\n\tstatic ngTemplateContextGuard<T>(\n\t\tdirective: TreeNode<T>,\n\t\tcontext: any\n\t): context is {\n\t\t$implicit: T,\n\t\texpanded: boolean,\n\t\tcanExpand: boolean,\n\t\tselected: boolean,\n\t} {\n\t\treturn true\n\t}\n}\n","import { NgTemplateOutlet } from '@angular/common'\nimport { Component, EventEmitter, Output, TemplateRef, effect, input, viewChild, contentChild, inject } from '@angular/core'\nimport { Subject } from 'rxjs'\nimport { FocusDirective } from '../../../commands/focus.directive'\nimport { Command, ShortcutService, registerShortcuts } from '../../../commands/shortcut.service'\nimport { signal2 } from '../../../utils/Signal2'\nimport { Style } from '../../1-basics/style'\nimport { List } from '../list/list'\nimport { ListItem } from '../list/list-item'\nimport { TreeNode } from './tree-node'\n\nexport interface NodeData { name: any, children: any[] }\n\n@Component({\n\tselector: 'tree',\n\ttemplate: `\n\t\t@if (!multi()) {\n\t\t  <ng-container\n\t\t    [ngTemplateOutlet]=\"nodeTemplate() || nodeTemplate2() || defaultTemplate\"\n\t\t    [ngTemplateOutletContext]=\"{$implicit: node, selected: shortcutService.isFocused(), expanded: expanded }\"/>\n\t\t  @if (expanded) {\n\t\t    <list\n\t\t      [items]=\"nodes()\"\n\t\t      [focusIf]=\"focused() == 'children'\"\n\t\t      [styleItem]=\"false\">\n\t\t      <tree *item=\"let node\" focus [nodes]=\"node.children\" [nodeTemplate]=\"nodeTemplate() || nodeTemplate2() || defaultTemplate\" [level]=\"level()\" [s]=\"{ marginLeft: 1 }\" (selectedItem)=\"$$selectedItem.emit($event)\" />\n\t\t    </list>\n\t\t  }\n\t\t}\n\n\t\t<ng-template #defaultTemplate let-item let-selected>\n\t\t  {{item.name}}\n\t\t</ng-template>\n\n\t\t@if (multi()) {\n\t\t  <list\n\t\t    [items]=\"nodes()\"\n\t\t    [focusIf]=\"focused() == 'children'\"\n\t\t    [styleItem]=\"false\">\n\t\t    <tree *item=\"let node\" focus [nodes]=\"node\" [nodeTemplate]=\"nodeTemplate() || nodeTemplate2() || defaultTemplate\" [level]=\"level() + 1\" (selectedItem)=\"$$selectedItem.emit($event)\" />\n\t\t  </list>\n\t\t}\n\t`,\n\timports: [List, ListItem, FocusDirective, NgTemplateOutlet, Style]\n})\nexport class Tree<T> {\n\tshortcutService = inject(ShortcutService)\n\n\treadonly nodes = input.required<(T & NodeData)[]>()\n\treadonly level = input(0)\n\treadonly nodeTemplate = input<TemplateRef<any>>(undefined)\n\n\t@Output('selectedItem') $$selectedItem = new EventEmitter()\n\n\treadonly node = signal2<T & NodeData | null>(null)\n\treadonly focused = signal2<'self' | 'children'>('self')\n\treadonly canExpand = signal2(false)\n\treadonly expanded = signal2(false)\n\treadonly multi = signal2(false)\n\n\treadonly list = viewChild(List)\n\treadonly nodeTemplate2 = contentChild(TreeNode, { read: TemplateRef })\n\n\tconstructor() {\n\t\tconst shortcutService = this.shortcutService\n\n\t\tregisterShortcuts(this.shortcuts)\n\t\teffect(() => {\n\t\t\tif (shortcutService.isFocused()) {\n\t\t\t\tthis.$$selectedItem.emit(this.nodes())\n\t\t\t}\n\t\t})\n\t}\n\n\tngOnInit() {\n\t\tthis.multi.$ = Array.isArray(this.nodes())\n\t\tconst nodes = this.nodes()\n\t\tif (Array.isArray(nodes)) {\n\t\t\t//\n\t\t} else {\n\t\t\tthis.node.$ = nodes\n\t\t\tthis.canExpand.$ = this.node().children && this.node().children.length > 0\n\t\t}\n\t}\n\n\tshortcuts: Partial<Command>[] = [\n\t\t{\n\t\t\tkeys: 'left',\n\t\t\tfunc: key => {\n\t\t\t\tif (this.focused() == 'children') {\n\t\t\t\t\tthis.focused.$ = 'self'\n\t\t\t\t} else {\n\t\t\t\t\tif (this.expanded) {\n\t\t\t\t\t\tthis.expanded.$ = false\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn key\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tkeys: 'right',\n\t\t\tfunc: key => {\n\t\t\t\tif (!this.canExpand) return key\n\n\t\t\t\tif (this.focused() == 'self') {\n\t\t\t\t\tif (!this.expanded) {\n\t\t\t\t\t\tthis.expanded.$ = true\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.focused.$ = 'children'\n\t\t\t\t\t}\n\t\t\t\t} else if (this.focused() == 'children') {\n\t\t\t\t\treturn key\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tkeys: 'up',\n\t\t\tfunc: key => {\n\t\t\t\tif (this.focused() == 'children') {\n\t\t\t\t\tthis.focused.$ = 'self'\n\t\t\t\t} else if (this.focused() == 'self') {\n\t\t\t\t\treturn key\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tkeys: 'down',\n\t\t\tfunc: key => {\n\t\t\t\tif (this.focused() == 'self') {\n\t\t\t\t\tif (this.expanded) {\n\t\t\t\t\t\tthis.focused.$ = 'children'\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn key\n\t\t\t\t\t}\n\t\t\t\t} else if (this.focused() == 'children') {\n\t\t\t\t\treturn key\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t]\n\n\tarrow(): string {\n\t\tif (this.canExpand) {\n\t\t\treturn this.expanded ? '˅' : '>'\n\t\t} else {\n\t\t\treturn ' '\n\t\t}\n\t}\n\n\ts = {\n\t\tselected: { backgroundColor: 'gray' },\n\t}\n}\n","import { Directive, EventEmitter, Output, inject } from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Subject } from 'rxjs'\nimport { Command, ShortcutService, registerShortcuts } from '../../commands/shortcut.service'\n\n@Directive({\n  standalone: true,\n  selector: '[onEnter]',\n})\nexport class OnEnterDirective {\n  valueAccessors = inject(NG_VALUE_ACCESSOR, { optional: true })\n  shortcutService = inject(ShortcutService)\n\n  @Output() onEnter = new EventEmitter()\n\n  currentValue = undefined\n\n  constructor() {\n    if (this.valueAccessors) {\n      this.valueAccessors.forEach(accessor => {\n        accessor.registerOnChange(value => {\n          this.currentValue = value\n        })\n      })\n    }\n\n    registerShortcuts(this.shortcuts)\n  }\n\n  shortcuts: Partial<Command>[] = [\n    {\n      keys: 'enter',\n      func: key => {\n        if (this.valueAccessors && this.currentValue == undefined) return key\n\n        this.onEnter.emit(this.currentValue)\n      },\n    },\n  ]\n\n  ngOnInit() {\n    this.shortcutService.requestFocus({ reason: 'OnEnterDirective onInit' })\n  }\n\n  destroy$ = new Subject()\n  ngOnDestroy() {\n    this.destroy$.next(null)\n    this.destroy$.complete()\n  }\n}\n","import { Directive, ElementRef, inject, output } from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { fromEvent } from 'rxjs'\nimport { Element as RgElement } from '../../angular-terminal/dom-terminal'\nimport { LogPointService } from '../../logs/LogPointService'\nimport { Mouse } from '../../term-strings/parse'\n\n@Directive({\n\tselector: '[scroll]',\n\tproviders: [LogPointService],\n\tstandalone: true,\n})\nexport class Scroll {\n\tprivate lp = inject(LogPointService)\n\tprivate element = inject<ElementRef<RgElement & Element>>(ElementRef).nativeElement\n\n\tconstructor() {\n\t\tthis.element.style.add({ scrollF: 'y' })\n\t\tthis.element.style.addChildLayer({ flexShrink: 0 })\n\t\tfromEvent(this.element, 'mousewheel')\n\t\t\t.pipe(\n\t\t\t\ttakeUntilDestroyed(),\n\t\t\t\t// debounceTime(20)\n\t\t\t)\n\t\t\t.subscribe(e => {\n\t\t\t\tconst event = e['mouse'] as Mouse\n\t\t\t\tthis.lp.logPoint('Scroll', { d: event.d })\n\t\t\t\tthis.element.scrollTop += event.d * 2\n\t\t\t})\n\t}\n}","import { Directive, EventEmitter, Output, input, inject } from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Subject } from 'rxjs'\nimport { ShortcutService } from '../../commands/shortcut.service'\nimport { assert } from '../../utils/utils'\n\nabstract class ValueProxy { }\n\n@Directive({\n  standalone: true,\n  selector: '[value]',\n})\nexport class ValueDirective {\n  valueAccessors = inject(NG_VALUE_ACCESSOR)\n\n  readonly value = input(undefined)\n  @Output() valueChange = new EventEmitter(true)\n\n  // TODO\n  readonly valueProxy = input<ValueProxy>(null)\n\n  currentValue = null\n\n  constructor() {\n    const valueAccessors = this.valueAccessors\n\n    assert(valueAccessors)\n    valueAccessors.forEach(accessor => {\n      accessor.registerOnChange(value => {\n        this.currentValue = value\n        this.valueChange.emit(value)\n      })\n    })\n  }\n\n  ngOnInit() {\n    this.valueAccessors.forEach(accessor => {\n      accessor.writeValue(this.value())\n    })\n  }\n}\n","import { Directive, Inject, inject, signal, input } from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Subject } from 'rxjs'\nimport { assert } from '../../utils/utils'\n\nabstract class ValueProxy { }\n\n@Directive({\n  standalone: true,\n  selector: '[signal]',\n})\nexport class SignalDirective {\n  readonly signal = input(signal(undefined))\n\n  // TODO\n  readonly signalProxy = input<ValueProxy>(null);\n\n  currentValue = null\n  valueAccessors: readonly ControlValueAccessor[]\n\n  constructor() {\n    this.valueAccessors = inject(NG_VALUE_ACCESSOR)\n    assert(this.valueAccessors)\n    this.valueAccessors.forEach(accessor => {\n      accessor.registerOnChange(value => {\n        this.currentValue = value\n        this.signal().set(value)\n      })\n    })\n  }\n\n  ngOnInit() {\n    this.valueAccessors.forEach(accessor => {\n      accessor.writeValue(this.signal()())\n    })\n  }\n\n  destroy$ = new Subject()\n  ngOnDestroy() {\n    this.destroy$.next(null)\n    this.destroy$.complete()\n  }\n}\n","import { Component, ElementRef, Injector, Output, Signal, TemplateRef, computed, contentChild, effect, inject, input, output, signal, untracked, viewChild } from '@angular/core'\nimport { toObservable } from '@angular/core/rxjs-interop'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport json5 from 'json5'\nimport * as _ from 'lodash-es'\nimport { Subject } from 'rxjs'\nimport { Element } from '../../../angular-terminal/dom-terminal'\nimport { addStyle } from '../../../angular-terminal/dom-terminal/sources/core/dom/StyleHandler'\nimport { Command, ShortcutService, registerShortcuts } from '../../../commands/shortcut.service'\nimport { H } from '../../../components/1-basics/h'\nimport { assert } from '../../../utils/Assert'\nimport { BaseControlValueAccessor } from '../../../utils/base-control-value-accessor'\nimport { computed2, signal2 } from '../../../utils/Signal2'\nimport { TODO } from '../../../utils/utils'\nimport { Style } from '../../1-basics/style'\nimport { List } from '../list/list'\nimport { ListItem } from '../list/list-item'\n\n@Component({\n  standalone: true,\n  selector: 'row',\n  template: `{{ text() }}`,\n})\nexport class Row<T extends { [key: string | symbol]: any }> {\n  table = inject<Table<T>>(Table);\n\n  readonly data = input.required<T>();\n  text!: Signal<string>\n\n  constructor() {\n    addStyle({ height: 1 })\n  }\n\n  ngOnInit() {\n    assert(this.data())\n    // assert(typeof this.data == 'object')\n    assert(this.table.$columns())\n\n    this.text = computed(() => {\n      const data = this.data()\n      if (typeof data == 'object') {\n        const columns = this.table.$columns()\n        const selectedColumn = this.table.$selectedColumn()\n        const selectedItem = this.table.$selectedItem()\n\n        let line = ''\n\n        columns\n          .map(column => {\n            let value = this.data()[column.id]\n\n            if (typeof value == 'string' || typeof value == 'bigint') {\n              value = String(value)\n            } else if (value === undefined) {\n              value = 'undefined'\n            } else if (value === null) {\n              value = ''\n            } else {\n              value = json5.stringify(value)\n            }\n            assert(typeof value == 'string')\n\n            return { ...column, string: value.slice(0, column.width).padEnd(column.width) }\n          })\n          .forEach(column => {\n            if (selectedColumn && column.id == selectedColumn.id && this.data() == selectedItem) {\n              line += '>' + column.string + '<|'\n            } else {\n              line += ' ' + column.string + ' |'\n            }\n          })\n\n        return line\n      } else {\n        return String(data)\n      }\n    })\n  }\n}\n\ninterface Column {\n  id: string\n  width: number\n}\n\n@Component({\n  selector: 'table',\n  template: `\n    <h [s]=\"s.header\">{{ $headers() }}</h>\n    <list\n      #list\n      [items]=\"items()\"\n      [trackByFn]=\"trackByFn()\"\n      [template]=\"template() || template2() || defaultRowTemplate\"\n      (selectedItem)=\"$selectedItem.set($event)\"\n      (visibleItems)=\"$visibleItems.set($event)\"\n      [s]=\"{ hgrow: true}\">\n    </list>\n    <ng-template #defaultRowTemplate [item] let-item>\n      <row [data]=\"item\" [s]=\"{ flexShrink: 0 }\"></row>\n    </ng-template>\n  `,\n  imports: [H, List, Row, ListItem, Style],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useFactory: (table: Table<any>) => table.controlValueAccessor,\n      deps: [Table],\n    },\n  ]\n})\nexport class Table<T> {\n  shortcutService = inject(ShortcutService)\n  elementRef = inject<ElementRef<Element>>(ElementRef)\n  injector = inject(Injector)\n\n  items = input.required<T[]>()\n  readonly template = input<TemplateRef<any> | undefined>(undefined);\n  readonly trackByFn = input((index: number, item: T) => item);\n  readonly includeKeys = input<string[]>([]);\n  readonly excludeKeys = input<string[]>([]);\n\n  readonly template2 = contentChild(ListItem, { read: TemplateRef });\n  readonly selectedItem = output<T | null>();\n\n  // $items = signal([])\n  $visibleItems = signal<T[]>([])\n  $selectedColumnIndex = signal2<number | null>(0)\n  $selectedItem = signal<T | null>(null)\n\n  @Output('selectedItem') $$selectedItem = toObservable(this.$selectedItem)\n  @Output('visibleItems') $$visibleItems = toObservable(this.$visibleItems)\n\n  $columns = computed(() => {\n    return this.computeColumnWidths(this.items())\n  })\n  $selectedColumn = computed2(() => {\n    assert(this.$selectedColumnIndex.$ !== null)\n    return this.$columns()[this.$selectedColumnIndex.$]\n  })\n  $headers = computed(() => {\n    return this.computeHeaders(this.$columns(), this.$selectedColumn())\n  })\n\n  readonly list = viewChild.required(List);\n  controlValueAccessor: ControlValueAccessor = new BaseControlValueAccessor()\n\n  constructor() {\n    const elementRef = this.elementRef\n\n    addStyle({ scrollF: 'x' })\n    // inputToSignal(this, 'items', '$items')\n\n    // Scroll to selected column\n    effect(() => {\n      const columns = this.$columns()\n      const index = this.$selectedColumnIndex()\n      assert(index !== null)\n\n      if (columns.length == 0 || index > columns.length - 1) return\n      let range = { start: 0, end: 0 }\n      for (let i = 0; i <= index; i++) {\n        if (i < index) range.start += columns[i].width + 3\n        range.end += columns[i].width + 3\n      }\n      if (range.start < elementRef.nativeElement.scrollRect.x) {\n        this.elementRef.nativeElement.scrollColumnIntoView(range.start)\n      } else {\n        this.elementRef.nativeElement.scrollColumnIntoView(range.end)\n      }\n    })\n\n    registerShortcuts(this.shortcuts)\n\n    effect(() => {\n      const newControlValueAccessor = this.list().controlValueAccessor\n      untracked(() => {\n        newControlValueAccessor.onChangeHandlers.forEach((handler: TODO) =>\n          newControlValueAccessor.registerOnChange(handler)\n        )\n        newControlValueAccessor.onTouchHandlers.forEach((handler: TODO) =>\n          newControlValueAccessor.registerOnTouched(handler)\n        )\n        assert(newControlValueAccessor.setDisabledState)\n        newControlValueAccessor.setDisabledState(newControlValueAccessor.disabled)\n      })\n    })\n  }\n\n  computeHeaders(columns: Column[], selectedColumn: Column) {\n    let headers = ''\n    _.map(columns, column => {\n      let value = column.id.slice(0, column.width).padEnd(column.width)\n      return { ...column, string: value }\n    }).forEach(column => {\n      if (selectedColumn && column.id == selectedColumn.id) {\n        headers += '>' + column.string + '<|'\n      } else {\n        headers += ' ' + column.string + ' |'\n      }\n    })\n    return headers\n  }\n\n  computeColumnWidths(items: any[]) {\n    if (!items || items.length == 0) {\n      return []\n    }\n\n    const keys = Object.keys(items[0])\n\n    return keys.map(key => {\n      const columnWidth = computeWidth(items.slice(0, 20), key)\n      const res = { id: key, width: columnWidth }\n      return res\n    })\n\n    function computeWidth(items: any[], key: string) {\n      const valuesWidth = items.map(item => {\n        if (item === item[key]) {\n          return 4\n        }\n        return String(item[key]).length\n      })\n      const max = _.max(valuesWidth)\n      assert(max)\n      return _.clamp(max, key.length, 50)\n    }\n  }\n\n  selectColumnIndex(index: number) {\n    const columns = this.$columns()\n    if (!columns || columns.length == 0) {\n      this.$selectedColumnIndex.set(null)\n      return\n    }\n\n    const realIndex = _.clamp(index, 0, columns.length - 1)\n    this.$selectedColumnIndex.set(realIndex)\n  }\n\n  shortcuts: Partial<Command>[] = [\n    {\n      keys: 'ctrl+shift+l',\n      id: 'resizeColumns',\n      func: () => {\n        this.computeColumnWidths(this.items())\n      },\n    },\n    {\n      keys: 'left',\n      func: () => {\n        assert(this.$selectedColumnIndex.$ !== null)\n        this.selectColumnIndex(this.$selectedColumnIndex.$ - 1)\n      },\n    },\n    {\n      keys: 'right',\n      func: () => {\n        assert(this.$selectedColumnIndex.$ !== null)\n        this.selectColumnIndex(this.$selectedColumnIndex.$ + 1)\n      },\n    },\n    {\n      keys: 'home',\n      func: () => {\n        this.selectColumnIndex(0)\n      },\n    },\n    {\n      keys: 'end',\n      func: () => {\n        this.selectColumnIndex(this.$columns().length - 1)\n      },\n    },\n  ]\n\n  s = {\n    header: { backgroundColor: 'gray', color: 'white', maxHeight: 1 },\n  }\n\n  destroy$ = new Subject()\n  ngOnDestroy() {\n    this.destroy$.next(null)\n    this.destroy$.complete()\n  }\n}\n","import { NgComponentOutlet } from '@angular/common'\nimport { Directive, input, inject } from '@angular/core'\nimport { assert } from './utils'\n\n@Directive({\n  standalone: true,\n  selector: '[ngComponentOutlet][inputs]',\n})\nexport class ComponentOutletInputs {\n  private componentOutlet = inject(NgComponentOutlet, { host: true })\n\n  readonly inputs = input<{ [prop: string]: any } | undefined>(undefined)\n  componentRef: any\n\n  constructor() {\n    this.componentRef = (this.componentOutlet as any)._componentRef\n    assert(this.componentRef)\n\n    const inputs = this.inputs()\n    if (inputs) {\n      for (const [key, value] of Object.entries(inputs)) {\n      }\n    }\n  }\n}\n","import { CommonModule } from '@angular/common'\nimport { ApplicationModule, NgModule, inject } from '@angular/core'\nimport { DetachedCommandServiceDirective } from './commands/commands-detach'\nimport { FocusDirective } from './commands/focus.directive'\nimport { CommandPicker } from './commands/command-picker.component'\nimport { H } from './components/1-basics/h'\nimport { V } from './components/1-basics/v'\nimport { VGrow } from './components/1-basics/vgrow.directive'\nimport { HGrow } from './components/1-basics/hgrow.directive'\nimport { Grow } from './components/1-basics/grow.directive'\nimport { Style, } from './components/1-basics/style'\nimport { TextInput } from './components/1-basics/text-input'\nimport { AppShell } from './components/2-common/app-shell/app-shell.component'\nimport { Logs } from './components/2-common/app-shell/logs.component'\nimport { Notifications } from './components/2-common/app-shell/notifications.component'\nimport { FormEditor } from './components/2-common/form-editor'\nimport { KeyValueEditor } from './components/2-common/KeyValueEditor'\nimport { JsonEditor } from './components/2-common/json-editor/json-editor'\nimport { Json5Pipe } from './components/2-common/json5.pipe'\nimport { BasicObjectDisplay } from './components/2-common/list/basic-object-display'\nimport { List } from './components/2-common/list/list'\nimport { ListItem } from './components/2-common/list/list-item'\nimport { ObjectDisplay } from './components/2-common/object-display'\nimport { OnEnterDirective } from './components/2-common/on-enter.directive'\nimport { SearchList } from './components/2-common/search-list'\nimport { SignalDirective } from './components/2-common/signal.directive'\nimport { Row, Table } from './components/2-common/table/table.component'\nimport { Tree } from './components/2-common/tree/tree'\nimport { TreeNode } from './components/2-common/tree/tree-node'\nimport { ValueDirective } from './components/2-common/value.directive'\nimport { NG_DEV_MODE, RECTANGULR_MODULE_PROVIDERS, RECTANGULR_MODULE_PROVIDERS_MARKER } from './rectangulr-module-providers'\nimport { ComponentOutletInputs } from './utils/componentOutletInput'\n\nconst TEMPLATE_COMPONENTS = [\n  H,\n  V,\n  HGrow,\n  VGrow,\n  Grow,\n  List,\n  ListItem,\n  Tree,\n  TreeNode,\n  SearchList,\n  OnEnterDirective,\n  TextInput,\n  ObjectDisplay,\n  FormEditor,\n  BasicObjectDisplay,\n  Table,\n  Row,\n  Style,\n  FocusDirective,\n  DetachedCommandServiceDirective,\n  KeyValueEditor,\n  CommandPicker,\n  AppShell,\n  Notifications,\n  Json5Pipe,\n  ComponentOutletInputs,\n  Logs,\n  JsonEditor,\n  ValueDirective,\n  SignalDirective,\n]\n\n\n\n@NgModule({\n  providers: [...RECTANGULR_MODULE_PROVIDERS],\n  imports: [...TEMPLATE_COMPONENTS],\n  exports: [CommonModule, ApplicationModule, ...TEMPLATE_COMPONENTS],\n})\nexport class RectangulrModule {\n  constructor() {\n    const providersAlreadyPresent = inject(RECTANGULR_MODULE_PROVIDERS_MARKER, { optional: true, skipSelf: true })\n\n    if (NG_DEV_MODE && providersAlreadyPresent) {\n      throw new Error(\n        `Providers from the \\`RectangulrModule\\` have already been loaded. If you need access ` +\n        `to common directives such as NgIf and NgFor, import the \\`CommonModule\\` instead.`\n      )\n    }\n  }\n}\n\n// {\n//   provide: EVENT_MANAGER_PLUGINS,\n//   useClass: DomEventsPlugin,\n//   multi: true,\n//   deps: [DOCUMENT, NgZone, PLATFORM_ID],\n// },\n// { provide: EVENT_MANAGER_PLUGINS, useClass: KeyEventsPlugin, multi: true, deps: [DOCUMENT] },\n// {\n//   provide: DomRendererFactory2,\n//   useClass: DomRendererFactory2,\n//   deps: [EventManager, DomSharedStylesHost, APP_ID],\n// },\n// { provide: RendererFactory2, useExisting: DomRendererFactory2 },\n// { provide: SharedStylesHost, useExisting: DomSharedStylesHost },\n// { provide: DomSharedStylesHost, useClass: DomSharedStylesHost, deps: [DOCUMENT] },\n// { provide: EventManager, useClass: EventManager, deps: [EVENT_MANAGER_PLUGINS, NgZone] },\n// { provide: XhrFactory, useClass: RectangulrXhr, deps: [] },\n\n// @NgModule({\n//   imports: [ReactiveFormsModule, DynamicModule],\n//   declarations: exports,\n//   exports: [...exports, ReactiveFormsModule, DynamicModule],\n//   providers: [\n//     { provide: View, useValue: { name: 'logs', component: Logs, tags: ['hidden'] }, multi: true },\n//     { provide: 'global', useValue: globalThis },\n//     { provide: ScreenService, useClass: ScreenService },\n//     { provide: RendererFactory2, useClass: RectangulrRendererFactory },\n//     { provide: ErrorHandler, useClass: RectangulrErrorHandler },\n//     { provide: INPUT_OUTPUT, useValue: StdinStdout },\n//     {\n//       provide: APP_INITIALIZER,\n//       useFactory: () => {\n//         const injector = inject(Injector)\n//         const globalInjector: InjectFunction = token => injector.get(token)\n\n//         return function () {\n//           // @ts-ignore\n//           globalThis['angularZone'] = Zone.current // used by ./lib/reactivity.ts -> forceRefresh()\n//           // @ts-ignore\n//           globalThis['rootZone'] = Zone.current.parent\n//           // @ts-ignore\n//           globalThis['Node'] = Node\n\n//           addToGlobalRg({\n//             lView: global_rgLView,\n//             component: global_rgComponent,\n//             logs: global_logs,\n//           })\n\n//           patchGlobalConsole(globalInjector)\n//         }\n//       },\n//       multi: true,\n//     },\n//   ],\n// })\n// export class TestRectangulrModule {}\n","import { Injectable, inject } from '@angular/core'\nimport * as _ from '@s-libs/micro-dash'\nimport fs from 'fs'\nimport json5 from 'json5'\nimport os from 'os'\nimport { LOGGER } from '../../angular-terminal/logger'\nimport { logError } from '../../utils/utils'\n\ntype Path = readonly (string | number)[]\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class StorageService {\n  filePath = os.homedir() + '/.tabulr.json'\n  data: any = {}\n  saveToDisk = true\n\n  logger = inject(LOGGER)\n\n  constructor() {\n    fs.readFile(this.filePath, { encoding: 'utf-8' }, (err, jsonData) => {\n      if (err) {\n        logError(this.logger, err)\n      } else {\n        this.data = json5.parse(jsonData)\n      }\n    })\n  }\n\n  get(key: Path) {\n    return _.get(this.data, key)\n  }\n\n  write(key: Path, data: any) {\n    _.set(this.data, key, data)\n    if (this.saveToDisk) {\n      fs.writeFileSync(this.filePath, json5.stringify(this.data))\n    }\n  }\n}\n","export class EventDispatch {\n\tprivate listeners: { [event: string]: ((...args: any[]) => void)[] } = {}\n\ton(event: string, func: (...args: any[]) => void) {\n\t\tif (!this.listeners[event]) {\n\t\t\tthis.listeners[event] = []\n\t\t}\n\t\tthis.listeners[event].push(func)\n\n\t\treturn () => {\n\t\t\tthis.off(event, func)\n\t\t}\n\t}\n\n\temit(event: string, ...args: any[]) {\n\t\tif (!this.listeners[event]) {\n\t\t\treturn\n\t\t}\n\t\tfor (const listener of this.listeners[event]) {\n\t\t\tlistener(...args)\n\t\t}\n\t}\n\n\toff(event: string, func: (...args: any[]) => void) {\n\t\tif (!this.listeners[event]) {\n\t\t\treturn\n\t\t}\n\t\tconst index = this.listeners[event].indexOf(func)\n\t\tif (index !== -1) {\n\t\t\tthis.listeners[event].splice(index, 1)\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.listeners = {}\n\t}\n}","import type { Terminal as XtermRef } from \"xterm\"\nimport { EventDispatch } from \"../../utils/event-handler\"\nimport { Disposable, Queue } from \"../../utils/queue\"\nimport { Input } from \"../dom-terminal/sources/term/elements/TermScreen\"\nimport { TERMINAL, Terminal } from './Terminal'\nimport { StaticProvider } from \"@angular/core\"\nimport { TODO } from \"../../utils/utils\"\n\n\n\nexport class XTermTerminal implements Terminal {\n\tname = 'XTermTerminal'\n\tinputs\n\tscreen\n\tqueue: Queue<Input>\n\tdisposables: { dispose: () => void }[]\n\tencoder = new TextEncoder()\n\n\tconstructor(xterm: XtermRef) {\n\t\tthis.inputs = new class {\n\t\t\tqueue = new Queue<Input>()\n\t\t\teventDispatch = new EventDispatch()\n\n\t\t\tsend(input: Input) {\n\t\t\t\tthis.queue.send(input)\n\t\t\t}\n\n\t\t\tsubscribe(func: (input: Input) => void): Disposable {\n\t\t\t\treturn this.queue.subscribe(func)\n\t\t\t}\n\n\t\t\ton(event: string, func: () => void) {\n\t\t\t\treturn this.eventDispatch.on(event, func)\n\t\t\t}\n\t\t}()\n\n\t\tthis.screen = new class {\n\t\t\teventHandler = new EventDispatch()\n\n\t\t\tconstructor(public xterm: XtermRef) { }\n\n\t\t\twrite(text: string) {\n\t\t\t\tthis.xterm.write(text)\n\t\t\t}\n\n\t\t\tsize = () => ({ width: this.xterm.cols, height: this.xterm.rows })\n\n\t\t\ton(event, func) {\n\t\t\t\treturn this.eventHandler.on(event, func)\n\t\t\t}\n\t\t}(xterm)\n\n\t\tthis.disposables = [\n\t\t\txterm.onData(data => {\n\t\t\t\tthis.inputs.send({ type: 'raw', buffer: this.encoder.encode(data) })\n\t\t\t}),\n\n\t\t\txterm.onResize(size => {\n\t\t\t\tthis.screen.eventHandler.emit('resize', size)\n\t\t\t}),\n\n\t\t]\n\t}\n\n\t// @ts-ignore\n\t[Symbol.dispose]() {\n\t\tthis.queue.dispose()\n\t\tthis.disposables.forEach(disp => disp.dispose())\n\t}\n}\n\n\nexport function provideXtermJs(xterm: XtermRef): StaticProvider {\n\treturn {\n\t\tprovide: TERMINAL, useFactory: () => {\n\t\t\treturn new XTermTerminal(xterm)\n\t\t}\n\t}\n}\n\n\nexport function mapDomKey(key: string): string {\n\tkey = key.toLowerCase()\n\tif (key == 'arrowleft') return 'left'\n\tif (key == 'arrowright') return 'right'\n\tif (key == 'arrowdown') return 'down'\n\tif (key == 'arrowup') return 'up'\n\treturn key\n}\n\n","export { }\n\ndeclare global {\n\tvar RECTANGULR_TARGET: 'web' | 'node' | (string & {})\n}\n\nif (!('RECTANGULR_TARGET' in globalThis)) {\n\tglobalThis['RECTANGULR_TARGET'] = 'node'\n}\n","import { inject, InjectionToken } from '@angular/core'\nimport { Terminal } from './Terminal'\n\n\nexport const TERMINAL_SIZE = new InjectionToken('TERMINAL_SIZE', {\n\tprovidedIn: 'root',\n\tfactory: () => ({ width: 150, height: 40 }),\n})\n\nexport const VoidTerminal: Terminal = {\n\tname: 'VoidTerminal',\n\tinputs: {\n\t\tsend: (input) => { },\n\t\ton: (event, func) => { },\n\t\tsubscribe: func => ({ dispose: () => { } }),\n\t},\n\tscreen: {\n\t\twrite: text => true,\n\t\tsize: () => (inject(TERMINAL_SIZE)),\n\t\ton: (event, func) => { },\n\t},\n}\n","/*\n * Public API Surface of Rectangulr\n */\n\n// Basics\nexport { Element, Event, TermScreen } from './angular-terminal/dom-terminal/'\nexport { LOGGER, Logger } from './angular-terminal/logger'\n\n// Platform\nexport { platformRectangulr, bootstrapApplication } from './angular-terminal/platform'\n\nexport { DetachedCommandServiceDirective } from './commands/commands-detach'\nexport { CommandPicker } from './commands/command-picker.component'\nexport { FocusDirective } from './commands/focus.directive'\nexport { Command, registerShortcuts, ShortcutService } from './commands/shortcut.service'\nexport { H } from './components/1-basics/h'\nexport { V } from './components/1-basics/v'\nexport { HGrow } from './components/1-basics/hgrow.directive'\nexport { VGrow } from './components/1-basics/vgrow.directive'\nexport { Grow } from './components/1-basics/grow.directive'\nexport { Style } from './components/1-basics/style'\nexport { TAGS, Tags } from './logs/Tags'\nexport type { StyleValue } from './angular-terminal/dom-terminal/sources/core/dom/StyleHandler.ts'\nexport { cond, eq, neq, addStyle } from './angular-terminal/dom-terminal/sources/core/dom/StyleHandler'\nexport { TextInput } from './components/1-basics/text-input'\nexport { AppShell } from './components/2-common/app-shell/app-shell.component'\nexport { Logs } from './components/2-common/app-shell/logs.component'\nexport { DomLog } from './logs/DomLog.directive'\nexport { Notifications } from './components/2-common/app-shell/notifications.component'\nexport {\n  INJECT_NOTIFICATIONS_SERVICE,\n  NotificationsService,\n} from './components/2-common/app-shell/notifications.service'\nexport { View, ViewService, provideView } from './components/2-common/app-shell/view.service'\nexport { ConfigLoader } from './components/2-common/config-loader'\nexport { FormEditor } from './components/2-common/form-editor'\nexport { KeyValueEditor } from './components/2-common/KeyValueEditor'\nexport { JsonEditor } from './components/2-common/json-editor/json-editor'\nexport { Json5Pipe } from './components/2-common/json5.pipe'\nexport { List } from './components/2-common/list/list'\nexport { ListItem } from './components/2-common/list/list-item'\nexport { Tree } from './components/2-common/tree/tree'\nexport { TreeNode } from './components/2-common/tree/tree-node'\nexport { BasicObjectDisplay } from './components/2-common/list/basic-object-display'\n\n// Common\nexport { OnEnterDirective } from './components/2-common/on-enter.directive'\nexport { Scroll } from './components/2-common/scroll.directive'\nexport { ValueDirective } from './components/2-common/value.directive'\nexport { SignalDirective } from './components/2-common/signal.directive'\nexport { ObjectDisplay } from './components/2-common/object-display'\nexport { SearchList } from './components/2-common/search-list'\nexport { Table, Row } from './components/2-common/table/table.component'\nexport { RectangulrModule } from './rectangulr.module'\nexport { ComponentOutletInputs } from './utils/componentOutletInput'\nexport { KeyValue } from './utils/interfaces'\nexport { StorageService } from './components/2-common/storage.service'\n\nexport { Tasks } from './tasks/Tasks'\nexport { provideXtermJs } from './angular-terminal/terminals/XtermTerminal'\n\n// Utils\nexport {\n  forceRefresh,\n  makeObservable,\n  makeProperty,\n  onChange,\n  State,\n  subscribe,\n  makeSignal,\n  propToSignal,\n  derived,\n  makeIntoSignal,\n} from './utils/reactivity'\nexport { DataFormat, CheckReturn, Completion } from './utils/data-format'\n\nexport * as globals from './globals'\n\n// PRIVATE\nexport { INTERNAL_RECTANGULR_PLATFORM_PROVIDERS as ɵINTERNAL_RECTANGULR_PLATFORM_PROVIDERS } from './angular-terminal/platform'\nexport { Node as ɵNode } from './angular-terminal/dom-terminal'\nexport { RECTANGULR_MODULE_PROVIDERS as ɵRECTANGULR_MODULE_PROVIDERS } from './rectangulr-module-providers'\nexport { TERMINAL as ɵTERMINAL } from './angular-terminal/terminals/Terminal'\nexport { VoidTerminal as ɵvoidTerminal } from './angular-terminal/terminals/VoidTerminal'\nexport { signal2 as ɵsignal2, computed2 as ɵcomputed2 } from './utils/Signal2'","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["colorNames","closestColor","assert","_","inherit","diff","Node","ɵINJECTOR_SCOPE","ɵinternalCreateApplication","isRoot","stringifyPathToNode","globalId","last","i1.Grow","fs","os"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}