@fairyhunter13/opentui-core 0.1.119 → 0.1.121

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-p0v1qbn9.js";
9
+ } from "./index-7xsz0ndw.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);
@@ -5788,6 +5788,18 @@ var isShiftKey = (code) => {
5788
5788
  var isCtrlKey = (code) => {
5789
5789
  return ["Oa", "Ob", "Oc", "Od", "Oe", "[2^", "[3^", "[5^", "[6^", "[7^", "[8^"].includes(code);
5790
5790
  };
5791
+ var getCtrlKeyName = (charCode) => {
5792
+ if (charCode === 0) {
5793
+ return "space";
5794
+ }
5795
+ if (charCode >= 1 && charCode <= 26) {
5796
+ return String.fromCharCode(charCode + 97 - 1);
5797
+ }
5798
+ if (charCode >= 28 && charCode <= 31) {
5799
+ return String.fromCharCode(charCode + 64);
5800
+ }
5801
+ return;
5802
+ };
5791
5803
  var modifyOtherKeysRe = /^\x1b\[27;(\d+);(\d+)~$/;
5792
5804
  var parseKeypress = (s = "", options = {}) => {
5793
5805
  let parts;
@@ -5852,6 +5864,8 @@ var parseKeypress = (s = "", options = {}) => {
5852
5864
  source: "raw"
5853
5865
  };
5854
5866
  key.sequence = key.sequence || s || key.name;
5867
+ const ctrlKeyName = s.length === 1 ? getCtrlKeyName(s.charCodeAt(0)) : undefined;
5868
+ const metaCtrlKeyName = s.length === 2 && s[0] === "\x1B" ? getCtrlKeyName(s.charCodeAt(1)) : undefined;
5855
5869
  if (options.useKittyKeyboard) {
5856
5870
  const kittyResult = parseKittyKeyboard(s);
5857
5871
  if (kittyResult) {
@@ -5907,11 +5921,8 @@ var parseKeypress = (s = "", options = {}) => {
5907
5921
  } else if (s === " " || s === "\x1B ") {
5908
5922
  key.name = "space";
5909
5923
  key.meta = s.length === 2;
5910
- } else if (s === "\x00") {
5911
- key.name = "space";
5912
- key.ctrl = true;
5913
- } else if (s.length === 1 && s <= "\x1A") {
5914
- key.name = String.fromCharCode(s.charCodeAt(0) + 97 - 1);
5924
+ } else if (ctrlKeyName) {
5925
+ key.name = ctrlKeyName;
5915
5926
  key.ctrl = true;
5916
5927
  } else if (s.length === 1 && s >= "0" && s <= "9") {
5917
5928
  key.name = s;
@@ -5937,10 +5948,10 @@ var parseKeypress = (s = "", options = {}) => {
5937
5948
  } else {
5938
5949
  key.name = char;
5939
5950
  }
5940
- } else if (s.length === 2 && s[0] === "\x1B" && s[1] <= "\x1A") {
5951
+ } else if (metaCtrlKeyName) {
5941
5952
  key.meta = true;
5942
5953
  key.ctrl = true;
5943
- key.name = String.fromCharCode(s.charCodeAt(1) + 97 - 1);
5954
+ key.name = metaCtrlKeyName;
5944
5955
  } else if (parts = fnKeyRe.exec(s)) {
5945
5956
  const segs = [...s];
5946
5957
  if (segs[0] === "\x1B" && segs[1] === "\x1B") {
@@ -14620,6 +14631,7 @@ class Renderable extends BaseRenderable {
14620
14631
  frameBuffer = null;
14621
14632
  _focusable = false;
14622
14633
  _focused = false;
14634
+ _hasFocusedDescendant = false;
14623
14635
  keypressHandler = null;
14624
14636
  pasteHandler = null;
14625
14637
  _live = false;
@@ -14769,11 +14781,24 @@ class Renderable extends BaseRenderable {
14769
14781
  };
14770
14782
  this.ctx._internalKeyInput.onInternal("keypress", this.keypressHandler);
14771
14783
  this.ctx._internalKeyInput.onInternal("paste", this.pasteHandler);
14784
+ this.propagateFocusChange(true);
14772
14785
  this.emit("focused" /* FOCUSED */);
14773
14786
  }
14787
+ propagateFocusChange(hasFocus) {
14788
+ let parent = this.parent;
14789
+ while (parent) {
14790
+ if (parent._hasFocusedDescendant !== hasFocus) {
14791
+ parent._hasFocusedDescendant = hasFocus;
14792
+ parent.markDirty();
14793
+ }
14794
+ parent = parent.parent;
14795
+ }
14796
+ this.requestRender();
14797
+ }
14774
14798
  blur() {
14775
14799
  if (!this._focused || !this._focusable)
14776
14800
  return;
14801
+ this._ctx.blurRenderable(this);
14777
14802
  this._focused = false;
14778
14803
  this.requestRender();
14779
14804
  if (this.keypressHandler) {
@@ -14784,11 +14809,15 @@ class Renderable extends BaseRenderable {
14784
14809
  this.ctx._internalKeyInput.offInternal("paste", this.pasteHandler);
14785
14810
  this.pasteHandler = null;
14786
14811
  }
14812
+ this.propagateFocusChange(false);
14787
14813
  this.emit("blurred" /* BLURRED */);
14788
14814
  }
14789
14815
  get focused() {
14790
14816
  return this._focused;
14791
14817
  }
14818
+ get hasFocusedDescendant() {
14819
+ return this._hasFocusedDescendant;
14820
+ }
14792
14821
  get live() {
14793
14822
  return this._live;
14794
14823
  }
@@ -15324,7 +15353,10 @@ class Renderable extends BaseRenderable {
15324
15353
  }
15325
15354
  try {
15326
15355
  const widthMethod = this._ctx.widthMethod;
15327
- this.frameBuffer = OptimizedBuffer.create(w, h, widthMethod, { respectAlpha: true, id: `framebuffer-${this.id}` });
15356
+ this.frameBuffer = OptimizedBuffer.create(w, h, widthMethod, {
15357
+ respectAlpha: true,
15358
+ id: `framebuffer-${this.id}`
15359
+ });
15328
15360
  } catch (error) {
15329
15361
  console.error(`Failed to create frame buffer for ${this.id}:`, error);
15330
15362
  this.frameBuffer = null;
@@ -15720,7 +15752,14 @@ class Renderable extends BaseRenderable {
15720
15752
  class RootRenderable extends Renderable {
15721
15753
  renderList = [];
15722
15754
  constructor(ctx) {
15723
- super(ctx, { id: "__root__", zIndex: 0, visible: true, width: ctx.width, height: ctx.height, enableLayout: true });
15755
+ super(ctx, {
15756
+ id: "__root__",
15757
+ zIndex: 0,
15758
+ visible: true,
15759
+ width: ctx.width,
15760
+ height: ctx.height,
15761
+ enableLayout: true
15762
+ });
15724
15763
  if (this.yogaNode) {
15725
15764
  this.yogaNode.free();
15726
15765
  }
@@ -16562,6 +16601,41 @@ function mergeKeyBindings(defaults, custom) {
16562
16601
  function getKeyBindingKey(binding) {
16563
16602
  return `${binding.name}:${binding.ctrl ? 1 : 0}:${binding.shift ? 1 : 0}:${binding.meta ? 1 : 0}:${binding.super ? 1 : 0}`;
16564
16603
  }
16604
+ function getBaseCodeKeyName(baseCode) {
16605
+ if (baseCode === undefined || baseCode < 32 || baseCode === 127) {
16606
+ return;
16607
+ }
16608
+ try {
16609
+ const name = String.fromCodePoint(baseCode);
16610
+ if (name.length === 1 && name >= "A" && name <= "Z") {
16611
+ return name.toLowerCase();
16612
+ }
16613
+ return name;
16614
+ } catch {
16615
+ return;
16616
+ }
16617
+ }
16618
+ function getKeyBindingKeys(binding) {
16619
+ const names = new Set([binding.name]);
16620
+ const baseCodeName = getBaseCodeKeyName(binding.baseCode);
16621
+ if (baseCodeName) {
16622
+ names.add(baseCodeName);
16623
+ }
16624
+ return [...names].map((name) => getKeyBindingKey({ ...binding, name }));
16625
+ }
16626
+ function getKeyBindingAction(map, binding) {
16627
+ for (const key of getKeyBindingKeys(binding)) {
16628
+ const action = map.get(key);
16629
+ if (action !== undefined) {
16630
+ return action;
16631
+ }
16632
+ }
16633
+ return;
16634
+ }
16635
+ function matchesKeyBinding(binding, match) {
16636
+ const matchKey = getKeyBindingKey(match);
16637
+ return getKeyBindingKeys(binding).includes(matchKey);
16638
+ }
16565
16639
  function buildKeyBindingsMap(bindings, aliasMap) {
16566
16640
  const map = new Map;
16567
16641
  const aliases = aliasMap || {};
@@ -16945,15 +17019,7 @@ class TerminalConsole extends EventEmitter8 {
16945
17019
  this.blur();
16946
17020
  return;
16947
17021
  }
16948
- const bindingKey = getKeyBindingKey({
16949
- name: event.name,
16950
- ctrl: event.ctrl,
16951
- shift: event.shift,
16952
- meta: event.meta,
16953
- super: event.super,
16954
- action: "scroll-up"
16955
- });
16956
- const action = this._keyBindingsMap.get(bindingKey);
17022
+ const action = getKeyBindingAction(this._keyBindingsMap, event);
16957
17023
  if (action) {
16958
17024
  const handler = this._actionHandlers.get(action);
16959
17025
  if (handler) {
@@ -18984,7 +19050,11 @@ class CliRenderer extends EventEmitter9 {
18984
19050
  _capabilities = null;
18985
19051
  _latestPointer = { x: 0, y: 0 };
18986
19052
  _hasPointer = false;
18987
- _lastPointerModifiers = { shift: false, alt: false, ctrl: false };
19053
+ _lastPointerModifiers = {
19054
+ shift: false,
19055
+ alt: false,
19056
+ ctrl: false
19057
+ };
18988
19058
  _currentMousePointerStyle = undefined;
18989
19059
  _currentFocusedRenderable = null;
18990
19060
  lifecyclePasses = new Set;
@@ -19104,7 +19174,7 @@ Captured output:
19104
19174
  const useKittyForParsing = kittyConfig !== null;
19105
19175
  this._keyHandler = new InternalKeyHandler;
19106
19176
  this._keyHandler.on("keypress", (event) => {
19107
- if (this.exitOnCtrlC && event.name === "c" && event.ctrl) {
19177
+ if (this.exitOnCtrlC && matchesKeyBinding(event, { name: "c", ctrl: true })) {
19108
19178
  process.nextTick(() => {
19109
19179
  this.destroy();
19110
19180
  });
@@ -19215,15 +19285,18 @@ Captured output:
19215
19285
  if (this._currentFocusedRenderable === renderable)
19216
19286
  return;
19217
19287
  const prev = this.currentFocusedEditor;
19218
- if (this._currentFocusedRenderable) {
19219
- this._currentFocusedRenderable.blur();
19220
- }
19288
+ this._currentFocusedRenderable?.blur();
19221
19289
  this._currentFocusedRenderable = renderable;
19222
19290
  const next = this.currentFocusedEditor;
19223
19291
  if (prev !== next) {
19224
19292
  this.emit("focused_editor" /* FOCUSED_EDITOR */, next, prev);
19225
19293
  }
19226
19294
  }
19295
+ blurRenderable(renderable) {
19296
+ if (this._currentFocusedRenderable === renderable) {
19297
+ this._currentFocusedRenderable = null;
19298
+ }
19299
+ }
19227
19300
  setCapturedRenderable(renderable) {
19228
19301
  if (this.capturedRenderable === renderable) {
19229
19302
  return;
@@ -19803,14 +19876,20 @@ Captured output:
19803
19876
  if (mouseEvent.type === "drag" && this.currentSelection?.isDragging) {
19804
19877
  this.updateSelection(maybeRenderable, mouseEvent.x, mouseEvent.y);
19805
19878
  if (maybeRenderable) {
19806
- const event2 = new MouseEvent(maybeRenderable, { ...mouseEvent, isDragging: true });
19879
+ const event2 = new MouseEvent(maybeRenderable, {
19880
+ ...mouseEvent,
19881
+ isDragging: true
19882
+ });
19807
19883
  maybeRenderable.processMouseEvent(event2);
19808
19884
  }
19809
19885
  return true;
19810
19886
  }
19811
19887
  if (mouseEvent.type === "up" && this.currentSelection?.isDragging) {
19812
19888
  if (maybeRenderable) {
19813
- const event2 = new MouseEvent(maybeRenderable, { ...mouseEvent, isDragging: true });
19889
+ const event2 = new MouseEvent(maybeRenderable, {
19890
+ ...mouseEvent,
19891
+ isDragging: true
19892
+ });
19814
19893
  maybeRenderable.processMouseEvent(event2);
19815
19894
  }
19816
19895
  this.finishSelection();
@@ -19825,7 +19904,10 @@ Captured output:
19825
19904
  }
19826
19905
  if (!sameElement && (mouseEvent.type === "drag" || mouseEvent.type === "move")) {
19827
19906
  if (this.lastOverRenderable && this.lastOverRenderable !== this.capturedRenderable && !this.lastOverRenderable.isDestroyed) {
19828
- const event2 = new MouseEvent(this.lastOverRenderable, { ...mouseEvent, type: "out" });
19907
+ const event2 = new MouseEvent(this.lastOverRenderable, {
19908
+ ...mouseEvent,
19909
+ type: "out"
19910
+ });
19829
19911
  this.lastOverRenderable.processMouseEvent(event2);
19830
19912
  }
19831
19913
  this.lastOverRenderable = maybeRenderable;
@@ -19844,7 +19926,10 @@ Captured output:
19844
19926
  return true;
19845
19927
  }
19846
19928
  if (this.capturedRenderable && mouseEvent.type === "up") {
19847
- const event2 = new MouseEvent(this.capturedRenderable, { ...mouseEvent, type: "drag-end" });
19929
+ const event2 = new MouseEvent(this.capturedRenderable, {
19930
+ ...mouseEvent,
19931
+ type: "drag-end"
19932
+ });
19848
19933
  this.capturedRenderable.processMouseEvent(event2);
19849
19934
  this.capturedRenderable.processMouseEvent(new MouseEvent(this.capturedRenderable, mouseEvent));
19850
19935
  if (maybeRenderable) {
@@ -20583,7 +20668,7 @@ Captured output:
20583
20668
  }
20584
20669
  }
20585
20670
 
20586
- 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 };
20671
+ 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, getKeyBindingAction, buildKeyBindingsMap, capture, ConsolePosition, TerminalConsole, getObjectsInViewport, EditBufferRenderableEvents, isEditBufferRenderable, EditBufferRenderable, buildKittyKeyboardFlags, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, RendererControlState, CliRenderer };
20587
20672
 
20588
- //# debugId=67F59C2409FF014364756E2164756E21
20589
- //# sourceMappingURL=index-p0v1qbn9.js.map
20673
+ //# debugId=4A1F7F558505C98564756E2164756E21
20674
+ //# sourceMappingURL=index-7xsz0ndw.js.map