@fairyhunter13/opentui-core 0.1.118 → 0.1.120

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/3d.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  __export,
7
7
  __require,
8
8
  __toESM
9
- } from "./index-cbt8k699.js";
9
+ } from "./index-g2c8aqza.js";
10
10
 
11
11
  // ../../node_modules/.bun/omggif@1.0.10/node_modules/omggif/omggif.js
12
12
  var require_omggif = __commonJS((exports) => {
package/Renderable.d.ts CHANGED
@@ -132,6 +132,7 @@ export declare abstract class Renderable extends BaseRenderable {
132
132
  protected frameBuffer: OptimizedBuffer | null;
133
133
  protected _focusable: boolean;
134
134
  protected _focused: boolean;
135
+ protected _hasFocusedDescendant: boolean;
135
136
  protected keypressHandler: ((key: KeyEvent) => void) | null;
136
137
  protected pasteHandler: ((event: PasteEvent) => void) | null;
137
138
  private _live;
@@ -174,8 +175,10 @@ export declare abstract class Renderable extends BaseRenderable {
174
175
  getSelectedText(): string;
175
176
  shouldStartSelection(x: number, y: number): boolean;
176
177
  focus(): void;
178
+ protected propagateFocusChange(hasFocus: boolean): void;
177
179
  blur(): void;
178
180
  get focused(): boolean;
181
+ get hasFocusedDescendant(): boolean;
179
182
  get live(): boolean;
180
183
  get liveCount(): number;
181
184
  set live(value: boolean);
@@ -167,7 +167,7 @@ import {
167
167
  white,
168
168
  wrapWithDelegates,
169
169
  yellow
170
- } from "./index-cbt8k699.js";
170
+ } from "./index-g2c8aqza.js";
171
171
 
172
172
  // src/index.ts
173
173
  var exports_src2 = {};
@@ -12296,4 +12296,4 @@ class TimeToFirstDrawRenderable extends Renderable {
12296
12296
  export { TextBufferView, convertThemeToStyles, SyntaxStyle, DistortionEffect, VignetteEffect, CloudsEffect, FlamesEffect, CRTRollingBarEffect, RainbowTextEffect, applyScanlines, applyInvert, applyNoise, applyChromaticAberration, applyAsciiArt, applyBrightness, applyGain, applySaturation, BloomEffect, SEPIA_MATRIX, PROTANOPIA_SIM_MATRIX, DEUTERANOPIA_SIM_MATRIX, TRITANOPIA_SIM_MATRIX, ACHROMATOPSIA_MATRIX, PROTANOPIA_COMP_MATRIX, DEUTERANOPIA_COMP_MATRIX, TRITANOPIA_COMP_MATRIX, TECHNICOLOR_MATRIX, SOLARIZATION_MATRIX, SYNTHWAVE_MATRIX, GREENSCALE_MATRIX, GRAYSCALE_MATRIX, INVERT_MATRIX, Timeline, engine, createTimeline, SlotRegistry, createSlotRegistry, createCoreSlotRegistry, registerCorePlugin, resolveCoreSlot, SlotRenderable, NativeSpanFeed, FrameBufferRenderable, ASCIIFontRenderable, BoxRenderable, TextBufferRenderable, CodeRenderable, isTextNodeRenderable, TextNodeRenderable, RootTextNodeRenderable, Generic, Box, Text, ASCIIFont, Input, Select, TabSelect, FrameBuffer, Code, ScrollBox, vstyles, VRenderable, LineNumberRenderable, TextRenderable, DiffRenderable, TextareaRenderable, InputRenderableEvents, InputRenderable, TextTableRenderable, MarkdownRenderable, SliderRenderable, ScrollBarRenderable, ArrowRenderable, ScrollBoxRenderable, SelectRenderableEvents, SelectRenderable, TabSelectRenderableEvents, TabSelectRenderable, TimeToFirstDrawRenderable, exports_src2 as exports_src };
12297
12297
 
12298
12298
  //# debugId=2DA8089E55F2756B64756E2164756E21
12299
- //# sourceMappingURL=index-v2yvk7z6.js.map
12299
+ //# sourceMappingURL=index-9bd06khd.js.map
@@ -8457,19 +8457,7 @@ class ProcessQueue {
8457
8457
  }
8458
8458
 
8459
8459
  // src/lib/tree-sitter/default-parsers.ts
8460
- import { resolve, dirname } from "path";
8461
8460
  import { fileURLToPath } from "url";
8462
- import javascript_highlights from "./assets/javascript/highlights.scm" with { type: "file" };
8463
- import javascript_language from "./assets/javascript/tree-sitter-javascript.wasm" with { type: "file" };
8464
- import typescript_highlights from "./assets/typescript/highlights.scm" with { type: "file" };
8465
- import typescript_language from "./assets/typescript/tree-sitter-typescript.wasm" with { type: "file" };
8466
- import markdown_highlights from "./assets/markdown/highlights.scm" with { type: "file" };
8467
- import markdown_language from "./assets/markdown/tree-sitter-markdown.wasm" with { type: "file" };
8468
- import markdown_injections from "./assets/markdown/injections.scm" with { type: "file" };
8469
- import markdown_inline_highlights from "./assets/markdown_inline/highlights.scm" with { type: "file" };
8470
- import markdown_inline_language from "./assets/markdown_inline/tree-sitter-markdown_inline.wasm" with { type: "file" };
8471
- import zig_highlights from "./assets/zig/highlights.scm" with { type: "file" };
8472
- import zig_language from "./assets/zig/tree-sitter-zig.wasm" with { type: "file" };
8473
8461
  var _cachedParsers;
8474
8462
  function getParsers() {
8475
8463
  if (!_cachedParsers) {
@@ -8478,25 +8466,25 @@ function getParsers() {
8478
8466
  filetype: "javascript",
8479
8467
  aliases: ["javascriptreact"],
8480
8468
  queries: {
8481
- highlights: [resolve(dirname(fileURLToPath(import.meta.url)), javascript_highlights)]
8469
+ highlights: [fileURLToPath(new URL("./assets/javascript/highlights.scm", import.meta.url))]
8482
8470
  },
8483
- wasm: resolve(dirname(fileURLToPath(import.meta.url)), javascript_language)
8471
+ wasm: fileURLToPath(new URL("./assets/javascript/tree-sitter-javascript.wasm", import.meta.url))
8484
8472
  },
8485
8473
  {
8486
8474
  filetype: "typescript",
8487
8475
  aliases: ["typescriptreact"],
8488
8476
  queries: {
8489
- highlights: [resolve(dirname(fileURLToPath(import.meta.url)), typescript_highlights)]
8477
+ highlights: [fileURLToPath(new URL("./assets/typescript/highlights.scm", import.meta.url))]
8490
8478
  },
8491
- wasm: resolve(dirname(fileURLToPath(import.meta.url)), typescript_language)
8479
+ wasm: fileURLToPath(new URL("./assets/typescript/tree-sitter-typescript.wasm", import.meta.url))
8492
8480
  },
8493
8481
  {
8494
8482
  filetype: "markdown",
8495
8483
  queries: {
8496
- highlights: [resolve(dirname(fileURLToPath(import.meta.url)), markdown_highlights)],
8497
- injections: [resolve(dirname(fileURLToPath(import.meta.url)), markdown_injections)]
8484
+ highlights: [fileURLToPath(new URL("./assets/markdown/highlights.scm", import.meta.url))],
8485
+ injections: [fileURLToPath(new URL("./assets/markdown/injections.scm", import.meta.url))]
8498
8486
  },
8499
- wasm: resolve(dirname(fileURLToPath(import.meta.url)), markdown_language),
8487
+ wasm: fileURLToPath(new URL("./assets/markdown/tree-sitter-markdown.wasm", import.meta.url)),
8500
8488
  injectionMapping: {
8501
8489
  nodeTypes: {
8502
8490
  inline: "markdown_inline",
@@ -8519,16 +8507,16 @@ function getParsers() {
8519
8507
  {
8520
8508
  filetype: "markdown_inline",
8521
8509
  queries: {
8522
- highlights: [resolve(dirname(fileURLToPath(import.meta.url)), markdown_inline_highlights)]
8510
+ highlights: [fileURLToPath(new URL("./assets/markdown_inline/highlights.scm", import.meta.url))]
8523
8511
  },
8524
- wasm: resolve(dirname(fileURLToPath(import.meta.url)), markdown_inline_language)
8512
+ wasm: fileURLToPath(new URL("./assets/markdown_inline/tree-sitter-markdown_inline.wasm", import.meta.url))
8525
8513
  },
8526
8514
  {
8527
8515
  filetype: "zig",
8528
8516
  queries: {
8529
- highlights: [resolve(dirname(fileURLToPath(import.meta.url)), zig_highlights)]
8517
+ highlights: [fileURLToPath(new URL("./assets/zig/highlights.scm", import.meta.url))]
8530
8518
  },
8531
- wasm: resolve(dirname(fileURLToPath(import.meta.url)), zig_language)
8519
+ wasm: fileURLToPath(new URL("./assets/zig/tree-sitter-zig.wasm", import.meta.url))
8532
8520
  }
8533
8521
  ];
8534
8522
  }
@@ -8536,7 +8524,7 @@ function getParsers() {
8536
8524
  }
8537
8525
 
8538
8526
  // src/lib/tree-sitter/client.ts
8539
- import { resolve as resolve2, isAbsolute, parse } from "path";
8527
+ import { resolve, isAbsolute, parse } from "path";
8540
8528
  import { existsSync } from "fs";
8541
8529
 
8542
8530
  // src/lib/bunfs.ts
@@ -8609,7 +8597,7 @@ class TreeSitterClient extends EventEmitter2 {
8609
8597
  worker_path = this.options.workerPath;
8610
8598
  } else {
8611
8599
  worker_path = new URL("./parser.worker.js", import.meta.url).href;
8612
- if (!existsSync(resolve2(import.meta.dirname, "parser.worker.js"))) {
8600
+ if (!existsSync(resolve(import.meta.dirname, "parser.worker.js"))) {
8613
8601
  worker_path = new URL("./parser.worker.ts", import.meta.url).href;
8614
8602
  }
8615
8603
  }
@@ -8644,7 +8632,7 @@ class TreeSitterClient extends EventEmitter2 {
8644
8632
  if (this.initializePromise) {
8645
8633
  return this.initializePromise;
8646
8634
  }
8647
- this.initializePromise = new Promise((resolve3, reject) => {
8635
+ this.initializePromise = new Promise((resolve2, reject) => {
8648
8636
  const timeoutMs = this.options.initTimeout ?? 1e4;
8649
8637
  const timeoutId = setTimeout(() => {
8650
8638
  const error = new Error("Worker initialization timed out");
@@ -8652,7 +8640,7 @@ class TreeSitterClient extends EventEmitter2 {
8652
8640
  this.initializeResolvers = undefined;
8653
8641
  reject(error);
8654
8642
  }, timeoutMs);
8655
- this.initializeResolvers = { resolve: resolve3, reject, timeoutId };
8643
+ this.initializeResolvers = { resolve: resolve2, reject, timeoutId };
8656
8644
  this.worker?.postMessage({
8657
8645
  type: "INIT",
8658
8646
  dataPath: this.options.dataPath
@@ -8675,7 +8663,7 @@ class TreeSitterClient extends EventEmitter2 {
8675
8663
  return normalizeBunfsPath(parse(path).base);
8676
8664
  }
8677
8665
  if (!isAbsolute(path)) {
8678
- return resolve2(path);
8666
+ return resolve(path);
8679
8667
  }
8680
8668
  return path;
8681
8669
  }
@@ -8693,8 +8681,8 @@ class TreeSitterClient extends EventEmitter2 {
8693
8681
  }
8694
8682
  async getPerformance() {
8695
8683
  const messageId = `performance_${this.messageIdCounter++}`;
8696
- return new Promise((resolve3) => {
8697
- this.messageCallbacks.set(messageId, resolve3);
8684
+ return new Promise((resolve2) => {
8685
+ this.messageCallbacks.set(messageId, resolve2);
8698
8686
  this.worker?.postMessage({ type: "GET_PERFORMANCE", messageId });
8699
8687
  });
8700
8688
  }
@@ -8707,8 +8695,8 @@ class TreeSitterClient extends EventEmitter2 {
8707
8695
  }
8708
8696
  }
8709
8697
  const messageId = `oneshot_${this.messageIdCounter++}`;
8710
- return new Promise((resolve3) => {
8711
- this.messageCallbacks.set(messageId, resolve3);
8698
+ return new Promise((resolve2) => {
8699
+ this.messageCallbacks.set(messageId, resolve2);
8712
8700
  this.worker?.postMessage({
8713
8701
  type: "ONESHOT_HIGHLIGHT",
8714
8702
  content,
@@ -8817,8 +8805,8 @@ class TreeSitterClient extends EventEmitter2 {
8817
8805
  }
8818
8806
  async preloadParser(filetype) {
8819
8807
  const messageId = `has_parser_${this.messageIdCounter++}`;
8820
- const response = await new Promise((resolve3) => {
8821
- this.messageCallbacks.set(messageId, resolve3);
8808
+ const response = await new Promise((resolve2) => {
8809
+ this.messageCallbacks.set(messageId, resolve2);
8822
8810
  this.worker?.postMessage({
8823
8811
  type: "PRELOAD_PARSER",
8824
8812
  filetype,
@@ -8845,8 +8833,8 @@ class TreeSitterClient extends EventEmitter2 {
8845
8833
  }
8846
8834
  this.buffers.set(id, { id, content, filetype, version, hasParser: false });
8847
8835
  const messageId = `init_${this.messageIdCounter++}`;
8848
- const response = await new Promise((resolve3) => {
8849
- this.messageCallbacks.set(messageId, resolve3);
8836
+ const response = await new Promise((resolve2) => {
8837
+ this.messageCallbacks.set(messageId, resolve2);
8850
8838
  this.worker?.postMessage({
8851
8839
  type: "INITIALIZE_PARSER",
8852
8840
  bufferId: id,
@@ -8902,9 +8890,9 @@ class TreeSitterClient extends EventEmitter2 {
8902
8890
  this.editQueues.delete(bufferId);
8903
8891
  }
8904
8892
  if (this.worker) {
8905
- await new Promise((resolve3) => {
8893
+ await new Promise((resolve2) => {
8906
8894
  const messageId = `dispose_${bufferId}`;
8907
- this.messageCallbacks.set(messageId, resolve3);
8895
+ this.messageCallbacks.set(messageId, resolve2);
8908
8896
  try {
8909
8897
  this.worker.postMessage({
8910
8898
  type: "DISPOSE_BUFFER",
@@ -8912,13 +8900,13 @@ class TreeSitterClient extends EventEmitter2 {
8912
8900
  });
8913
8901
  } catch (error) {
8914
8902
  console.error("Error disposing buffer", error);
8915
- resolve3(false);
8903
+ resolve2(false);
8916
8904
  }
8917
8905
  setTimeout(() => {
8918
8906
  if (this.messageCallbacks.has(messageId)) {
8919
8907
  this.messageCallbacks.delete(messageId);
8920
8908
  console.warn({ bufferId }, "Timed out waiting for buffer to be disposed");
8921
- resolve3(false);
8909
+ resolve2(false);
8922
8910
  }
8923
8911
  }, 3000);
8924
8912
  });
@@ -8975,12 +8963,12 @@ class TreeSitterClient extends EventEmitter2 {
8975
8963
  this.options.dataPath = dataPath;
8976
8964
  if (this.initialized && this.worker) {
8977
8965
  const messageId = `update_datapath_${this.messageIdCounter++}`;
8978
- return new Promise((resolve3, reject) => {
8966
+ return new Promise((resolve2, reject) => {
8979
8967
  this.messageCallbacks.set(messageId, (response) => {
8980
8968
  if (response.error) {
8981
8969
  reject(new Error(response.error));
8982
8970
  } else {
8983
- resolve3();
8971
+ resolve2();
8984
8972
  }
8985
8973
  });
8986
8974
  this.worker.postMessage({
@@ -8996,12 +8984,12 @@ class TreeSitterClient extends EventEmitter2 {
8996
8984
  throw new Error("Cannot clear cache: client is not initialized");
8997
8985
  }
8998
8986
  const messageId = `clear_cache_${this.messageIdCounter++}`;
8999
- return new Promise((resolve3, reject) => {
8987
+ return new Promise((resolve2, reject) => {
9000
8988
  this.messageCallbacks.set(messageId, (response) => {
9001
8989
  if (response.error) {
9002
8990
  reject(new Error(response.error));
9003
8991
  } else {
9004
- resolve3();
8992
+ resolve2();
9005
8993
  }
9006
8994
  });
9007
8995
  this.worker.postMessage({
@@ -9527,26 +9515,13 @@ ${content}`);
9527
9515
  return "./" + path4.relative(path4.dirname(outputPath), queryPath);
9528
9516
  }
9529
9517
  async function generateDefaultParsersFile(parsers, outputPath) {
9530
- const imports = parsers.map((parser) => {
9531
- const safeFiletype = parser.filetype.replace(/[^a-zA-Z0-9]/g, "_");
9532
- const lines = [
9533
- `import ${safeFiletype}_highlights from "${parser.highlightsPath}" with { type: "file" }`,
9534
- `import ${safeFiletype}_language from "${parser.languagePath}" with { type: "file" }`
9535
- ];
9536
- if (parser.injectionsPath) {
9537
- lines.push(`import ${safeFiletype}_injections from "${parser.injectionsPath}" with { type: "file" }`);
9538
- }
9539
- return lines.join(`
9540
- `);
9541
- }).join(`
9542
- `);
9543
9518
  const parserDefinitions = parsers.map((parser) => {
9544
9519
  const safeFiletype = parser.filetype.replace(/[^a-zA-Z0-9]/g, "_");
9545
9520
  const queriesLines = [
9546
- ` highlights: [resolve(dirname(fileURLToPath(import.meta.url)), ${safeFiletype}_highlights)],`
9521
+ ` highlights: [fileURLToPath(new URL("${parser.highlightsPath}", import.meta.url))],`
9547
9522
  ];
9548
9523
  if (parser.injectionsPath) {
9549
- queriesLines.push(` injections: [resolve(dirname(fileURLToPath(import.meta.url)), ${safeFiletype}_injections)],`);
9524
+ queriesLines.push(` injections: [fileURLToPath(new URL("${parser.injectionsPath}", import.meta.url))],`);
9550
9525
  }
9551
9526
  const injectionMappingLine = parser.injectionMapping ? ` injectionMapping: ${JSON.stringify(parser.injectionMapping, null, 10)},` : "";
9552
9527
  const aliasesLine = parser.aliases?.length ? ` aliases: ${JSON.stringify(parser.aliases)},` : "";
@@ -9557,7 +9532,7 @@ ${aliasesLine ? aliasesLine + `
9557
9532
  ${queriesLines.join(`
9558
9533
  `)}
9559
9534
  },
9560
- wasm: resolve(dirname(fileURLToPath(import.meta.url)), ${safeFiletype}_language),${injectionMappingLine ? `
9535
+ wasm: fileURLToPath(new URL("${parser.languagePath}", import.meta.url)),${injectionMappingLine ? `
9561
9536
  ` + injectionMappingLine : ""}
9562
9537
  }`;
9563
9538
  }).join(`,
@@ -9567,11 +9542,8 @@ ${queriesLines.join(`
9567
9542
  // Last generated: ${new Date().toISOString()}
9568
9543
 
9569
9544
  import type { FiletypeParserOptions } from "./types"
9570
- import { resolve, dirname } from "path"
9571
9545
  import { fileURLToPath } from "url"
9572
9546
 
9573
- ${imports}
9574
-
9575
9547
  // Cached parsers to avoid re-resolving paths on every call
9576
9548
  let _cachedParsers: FiletypeParserOptions[] | undefined
9577
9549
 
@@ -10463,7 +10435,7 @@ class TerminalPalette {
10463
10435
  const out = this.stdout;
10464
10436
  if (!out.isTTY || !this.stdin.isTTY)
10465
10437
  return false;
10466
- return new Promise((resolve4) => {
10438
+ return new Promise((resolve3) => {
10467
10439
  const session = this.createQuerySession();
10468
10440
  let buffer = "";
10469
10441
  let settled = false;
@@ -10472,7 +10444,7 @@ class TerminalPalette {
10472
10444
  return;
10473
10445
  settled = true;
10474
10446
  session.cleanup();
10475
- resolve4(supported);
10447
+ resolve3(supported);
10476
10448
  };
10477
10449
  const onData = (chunk) => {
10478
10450
  buffer += chunk.toString();
@@ -10495,7 +10467,7 @@ class TerminalPalette {
10495
10467
  if (!out.isTTY || !this.stdin.isTTY) {
10496
10468
  return results;
10497
10469
  }
10498
- return new Promise((resolve4) => {
10470
+ return new Promise((resolve3) => {
10499
10471
  const session = this.createQuerySession();
10500
10472
  let buffer = "";
10501
10473
  let idleTimer = null;
@@ -10505,7 +10477,7 @@ class TerminalPalette {
10505
10477
  return;
10506
10478
  settled = true;
10507
10479
  session.cleanup();
10508
- resolve4(results);
10480
+ resolve3(results);
10509
10481
  };
10510
10482
  const onData = (chunk) => {
10511
10483
  buffer += chunk.toString();
@@ -10546,7 +10518,7 @@ class TerminalPalette {
10546
10518
  if (!out.isTTY || !this.stdin.isTTY) {
10547
10519
  return results;
10548
10520
  }
10549
- return new Promise((resolve4) => {
10521
+ return new Promise((resolve3) => {
10550
10522
  const session = this.createQuerySession();
10551
10523
  let buffer = "";
10552
10524
  let idleTimer = null;
@@ -10556,7 +10528,7 @@ class TerminalPalette {
10556
10528
  return;
10557
10529
  settled = true;
10558
10530
  session.cleanup();
10559
- resolve4(results);
10531
+ resolve3(results);
10560
10532
  };
10561
10533
  const onData = (chunk) => {
10562
10534
  buffer += chunk.toString();
@@ -14648,6 +14620,7 @@ class Renderable extends BaseRenderable {
14648
14620
  frameBuffer = null;
14649
14621
  _focusable = false;
14650
14622
  _focused = false;
14623
+ _hasFocusedDescendant = false;
14651
14624
  keypressHandler = null;
14652
14625
  pasteHandler = null;
14653
14626
  _live = false;
@@ -14797,11 +14770,24 @@ class Renderable extends BaseRenderable {
14797
14770
  };
14798
14771
  this.ctx._internalKeyInput.onInternal("keypress", this.keypressHandler);
14799
14772
  this.ctx._internalKeyInput.onInternal("paste", this.pasteHandler);
14773
+ this.propagateFocusChange(true);
14800
14774
  this.emit("focused" /* FOCUSED */);
14801
14775
  }
14776
+ propagateFocusChange(hasFocus) {
14777
+ let parent = this.parent;
14778
+ while (parent) {
14779
+ if (parent._hasFocusedDescendant !== hasFocus) {
14780
+ parent._hasFocusedDescendant = hasFocus;
14781
+ parent.markDirty();
14782
+ }
14783
+ parent = parent.parent;
14784
+ }
14785
+ this.requestRender();
14786
+ }
14802
14787
  blur() {
14803
14788
  if (!this._focused || !this._focusable)
14804
14789
  return;
14790
+ this._ctx.blurRenderable(this);
14805
14791
  this._focused = false;
14806
14792
  this.requestRender();
14807
14793
  if (this.keypressHandler) {
@@ -14812,11 +14798,15 @@ class Renderable extends BaseRenderable {
14812
14798
  this.ctx._internalKeyInput.offInternal("paste", this.pasteHandler);
14813
14799
  this.pasteHandler = null;
14814
14800
  }
14801
+ this.propagateFocusChange(false);
14815
14802
  this.emit("blurred" /* BLURRED */);
14816
14803
  }
14817
14804
  get focused() {
14818
14805
  return this._focused;
14819
14806
  }
14807
+ get hasFocusedDescendant() {
14808
+ return this._hasFocusedDescendant;
14809
+ }
14820
14810
  get live() {
14821
14811
  return this._live;
14822
14812
  }
@@ -15352,7 +15342,10 @@ class Renderable extends BaseRenderable {
15352
15342
  }
15353
15343
  try {
15354
15344
  const widthMethod = this._ctx.widthMethod;
15355
- this.frameBuffer = OptimizedBuffer.create(w, h, widthMethod, { respectAlpha: true, id: `framebuffer-${this.id}` });
15345
+ this.frameBuffer = OptimizedBuffer.create(w, h, widthMethod, {
15346
+ respectAlpha: true,
15347
+ id: `framebuffer-${this.id}`
15348
+ });
15356
15349
  } catch (error) {
15357
15350
  console.error(`Failed to create frame buffer for ${this.id}:`, error);
15358
15351
  this.frameBuffer = null;
@@ -15748,7 +15741,14 @@ class Renderable extends BaseRenderable {
15748
15741
  class RootRenderable extends Renderable {
15749
15742
  renderList = [];
15750
15743
  constructor(ctx) {
15751
- super(ctx, { id: "__root__", zIndex: 0, visible: true, width: ctx.width, height: ctx.height, enableLayout: true });
15744
+ super(ctx, {
15745
+ id: "__root__",
15746
+ zIndex: 0,
15747
+ visible: true,
15748
+ width: ctx.width,
15749
+ height: ctx.height,
15750
+ enableLayout: true
15751
+ });
15752
15752
  if (this.yogaNode) {
15753
15753
  this.yogaNode.free();
15754
15754
  }
@@ -18257,6 +18257,8 @@ class EditBufferRenderable extends Renderable {
18257
18257
  const cursor = this.editorView.getCursor();
18258
18258
  if (cursor.col > 0) {
18259
18259
  this.editBuffer.deleteRange(cursor.row, 0, cursor.row, cursor.col);
18260
+ } else if (cursor.row > 0) {
18261
+ this.editBuffer.deleteCharBackward();
18260
18262
  }
18261
18263
  this.requestRender();
18262
18264
  return true;
@@ -18850,7 +18852,7 @@ var rendererTracker = singleton("RendererTracker", () => {
18850
18852
  });
18851
18853
  async function createCliRenderer(config = {}) {
18852
18854
  if (process.argv.includes("--delay-start")) {
18853
- await new Promise((resolve4) => setTimeout(resolve4, 5000));
18855
+ await new Promise((resolve3) => setTimeout(resolve3, 5000));
18854
18856
  }
18855
18857
  const stdin = config.stdin || process.stdin;
18856
18858
  const stdout = config.stdout || process.stdout;
@@ -19010,7 +19012,11 @@ class CliRenderer extends EventEmitter9 {
19010
19012
  _capabilities = null;
19011
19013
  _latestPointer = { x: 0, y: 0 };
19012
19014
  _hasPointer = false;
19013
- _lastPointerModifiers = { shift: false, alt: false, ctrl: false };
19015
+ _lastPointerModifiers = {
19016
+ shift: false,
19017
+ alt: false,
19018
+ ctrl: false
19019
+ };
19014
19020
  _currentMousePointerStyle = undefined;
19015
19021
  _currentFocusedRenderable = null;
19016
19022
  lifecyclePasses = new Set;
@@ -19241,15 +19247,18 @@ Captured output:
19241
19247
  if (this._currentFocusedRenderable === renderable)
19242
19248
  return;
19243
19249
  const prev = this.currentFocusedEditor;
19244
- if (this._currentFocusedRenderable) {
19245
- this._currentFocusedRenderable.blur();
19246
- }
19250
+ this._currentFocusedRenderable?.blur();
19247
19251
  this._currentFocusedRenderable = renderable;
19248
19252
  const next = this.currentFocusedEditor;
19249
19253
  if (prev !== next) {
19250
19254
  this.emit("focused_editor" /* FOCUSED_EDITOR */, next, prev);
19251
19255
  }
19252
19256
  }
19257
+ blurRenderable(renderable) {
19258
+ if (this._currentFocusedRenderable === renderable) {
19259
+ this._currentFocusedRenderable = null;
19260
+ }
19261
+ }
19253
19262
  setCapturedRenderable(renderable) {
19254
19263
  if (this.capturedRenderable === renderable) {
19255
19264
  return;
@@ -19341,8 +19350,8 @@ Captured output:
19341
19350
  if (!this.isIdleNow())
19342
19351
  return;
19343
19352
  const resolvers = this.idleResolvers.splice(0);
19344
- for (const resolve4 of resolvers) {
19345
- resolve4();
19353
+ for (const resolve3 of resolvers) {
19354
+ resolve3();
19346
19355
  }
19347
19356
  }
19348
19357
  idle() {
@@ -19350,8 +19359,8 @@ Captured output:
19350
19359
  return Promise.resolve();
19351
19360
  if (this.isIdleNow())
19352
19361
  return Promise.resolve();
19353
- return new Promise((resolve4) => {
19354
- this.idleResolvers.push(resolve4);
19362
+ return new Promise((resolve3) => {
19363
+ this.idleResolvers.push(resolve3);
19355
19364
  });
19356
19365
  }
19357
19366
  get resolution() {
@@ -19829,14 +19838,20 @@ Captured output:
19829
19838
  if (mouseEvent.type === "drag" && this.currentSelection?.isDragging) {
19830
19839
  this.updateSelection(maybeRenderable, mouseEvent.x, mouseEvent.y);
19831
19840
  if (maybeRenderable) {
19832
- const event2 = new MouseEvent(maybeRenderable, { ...mouseEvent, isDragging: true });
19841
+ const event2 = new MouseEvent(maybeRenderable, {
19842
+ ...mouseEvent,
19843
+ isDragging: true
19844
+ });
19833
19845
  maybeRenderable.processMouseEvent(event2);
19834
19846
  }
19835
19847
  return true;
19836
19848
  }
19837
19849
  if (mouseEvent.type === "up" && this.currentSelection?.isDragging) {
19838
19850
  if (maybeRenderable) {
19839
- const event2 = new MouseEvent(maybeRenderable, { ...mouseEvent, isDragging: true });
19851
+ const event2 = new MouseEvent(maybeRenderable, {
19852
+ ...mouseEvent,
19853
+ isDragging: true
19854
+ });
19840
19855
  maybeRenderable.processMouseEvent(event2);
19841
19856
  }
19842
19857
  this.finishSelection();
@@ -19851,7 +19866,10 @@ Captured output:
19851
19866
  }
19852
19867
  if (!sameElement && (mouseEvent.type === "drag" || mouseEvent.type === "move")) {
19853
19868
  if (this.lastOverRenderable && this.lastOverRenderable !== this.capturedRenderable && !this.lastOverRenderable.isDestroyed) {
19854
- const event2 = new MouseEvent(this.lastOverRenderable, { ...mouseEvent, type: "out" });
19869
+ const event2 = new MouseEvent(this.lastOverRenderable, {
19870
+ ...mouseEvent,
19871
+ type: "out"
19872
+ });
19855
19873
  this.lastOverRenderable.processMouseEvent(event2);
19856
19874
  }
19857
19875
  this.lastOverRenderable = maybeRenderable;
@@ -19870,7 +19888,10 @@ Captured output:
19870
19888
  return true;
19871
19889
  }
19872
19890
  if (this.capturedRenderable && mouseEvent.type === "up") {
19873
- const event2 = new MouseEvent(this.capturedRenderable, { ...mouseEvent, type: "drag-end" });
19891
+ const event2 = new MouseEvent(this.capturedRenderable, {
19892
+ ...mouseEvent,
19893
+ type: "drag-end"
19894
+ });
19874
19895
  this.capturedRenderable.processMouseEvent(event2);
19875
19896
  this.capturedRenderable.processMouseEvent(new MouseEvent(this.capturedRenderable, mouseEvent));
19876
19897
  if (maybeRenderable) {
@@ -20611,5 +20632,5 @@ Captured output:
20611
20632
 
20612
20633
  export { __toESM, __commonJS, __export, __require, Edge, Gutter, MeasureMode, exports_src, isValidBorderStyle, parseBorderStyle, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, KeyEvent, PasteEvent, KeyHandler, InternalKeyHandler, RGBA, hexToRgb, rgbToHex, hsvToRgb, parseColor, fonts, measureText, getCharacterPositions, coordinateToCharacterIndex, renderFontToFrameBuffer, TextAttributes, ATTRIBUTE_BASE_BITS, ATTRIBUTE_BASE_MASK, getBaseAttributes, DebugOverlayCorner, TargetChannel, createTextAttributes, attributesWithLink, getLinkId, visualizeRenderableTree, isStyledText, StyledText, stringToStyledText, black, red, green, yellow, blue, magenta, cyan, white, brightBlack, brightRed, brightGreen, brightYellow, brightBlue, brightMagenta, brightCyan, brightWhite, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bold, italic, underline, strikethrough, dim, reverse, blink, fg, bg, link, t, hastToStyledText, SystemClock, nonAlphanumericKeys, parseKeypress, LinearScrollAccel, MacOSScrollAccel, parseAlign, parseAlignItems, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, envRegistry, registerEnvVar, clearEnvCache, generateEnvMarkdown, generateEnvColored, env, StdinParser, treeSitterToTextChunks, treeSitterToStyledText, addDefaultParsers, TreeSitterClient, DataPathsManager, getDataPaths, extensionToFiletype, basenameToFiletype, extToFiletype, pathToFiletype, infoStringToFiletype, main, getTreeSitterClient, ExtmarksController, createExtmarksController, TerminalPalette, createTerminalPalette, decodePasteBytes, stripAnsiSequences, detectLinks, TextBuffer, SpanInfoStruct, LogLevel2 as LogLevel, setRenderLibPath, resolveRenderLib, OptimizedBuffer, h, isVNode, maybeMakeRenderable, wrapWithDelegates, instantiate, delegate, isValidPercentage, LayoutEvents, RenderableEvents, isRenderable, BaseRenderable, Renderable, RootRenderable, EditBuffer, EditorView, ANSI, defaultKeyAliases, mergeKeyAliases, mergeKeyBindings, getKeyBindingKey, buildKeyBindingsMap, capture, ConsolePosition, TerminalConsole, getObjectsInViewport, EditBufferRenderableEvents, isEditBufferRenderable, EditBufferRenderable, buildKittyKeyboardFlags, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, RendererControlState, CliRenderer };
20613
20634
 
20614
- //# debugId=D29AE0F0082F966C64756E2164756E21
20615
- //# sourceMappingURL=index-cbt8k699.js.map
20635
+ //# debugId=B248918F8F174E3E64756E2164756E21
20636
+ //# sourceMappingURL=index-g2c8aqza.js.map