@opentui/core 0.1.16 → 0.1.18

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
@@ -5,7 +5,7 @@ import {
5
5
  __export,
6
6
  __require,
7
7
  __toESM
8
- } from "./index-sw194bbj.js";
8
+ } from "./index-grak7z0n.js";
9
9
 
10
10
  // ../../node_modules/omggif/omggif.js
11
11
  var require_omggif = __commonJS((exports) => {
package/Renderable.d.ts CHANGED
@@ -95,6 +95,7 @@ export declare abstract class Renderable extends EventEmitter {
95
95
  static renderablesByNumber: Map<number, Renderable>;
96
96
  readonly id: string;
97
97
  readonly num: number;
98
+ private _isDestroyed;
98
99
  protected _ctx: RenderContext;
99
100
  protected _translateX: number;
100
101
  protected _translateY: number;
@@ -231,6 +232,7 @@ export declare abstract class Renderable extends EventEmitter {
231
232
  height: number;
232
233
  };
233
234
  protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void;
235
+ get isDestroyed(): boolean;
234
236
  destroy(): void;
235
237
  destroyRecursively(): void;
236
238
  protected destroySelf(): void;
@@ -5823,6 +5823,7 @@ class Renderable extends EventEmitter3 {
5823
5823
  static renderablesByNumber = new Map;
5824
5824
  id;
5825
5825
  num;
5826
+ _isDestroyed = false;
5826
5827
  _ctx;
5827
5828
  _translateX = 0;
5828
5829
  _translateY = 0;
@@ -6549,34 +6550,52 @@ class Renderable extends EventEmitter3 {
6549
6550
  obj.parent = this;
6550
6551
  }
6551
6552
  add(obj, index) {
6552
- obj = ensureRenderable(this._ctx, obj);
6553
- if (this.renderableMap.has(obj.id)) {
6554
- console.warn(`A renderable with id ${obj.id} already exists in ${this.id}, removing it`);
6555
- this.remove(obj.id);
6553
+ if (!obj) {
6554
+ return -1;
6556
6555
  }
6557
- this.replaceParent(obj);
6558
- const childLayoutNode = obj.getLayoutNode();
6556
+ const renderable = maybeMakeRenderable(this._ctx, obj);
6557
+ if (!renderable) {
6558
+ return -1;
6559
+ }
6560
+ if (renderable.isDestroyed) {
6561
+ if (true) {
6562
+ console.warn(`Renderable with id ${renderable.id} was already destroyed, skipping add`);
6563
+ }
6564
+ return -1;
6565
+ }
6566
+ if (this.renderableMap.has(renderable.id)) {
6567
+ console.warn(`A renderable with id ${renderable.id} already exists in ${this.id}, removing it`);
6568
+ this.remove(renderable.id);
6569
+ }
6570
+ this.replaceParent(renderable);
6571
+ const childLayoutNode = renderable.getLayoutNode();
6559
6572
  let insertedIndex;
6560
6573
  if (index !== undefined) {
6561
- this.renderableArray.splice(index, 0, obj);
6574
+ this.renderableArray.splice(index, 0, renderable);
6562
6575
  insertedIndex = this.layoutNode.insertChild(childLayoutNode, index);
6563
6576
  } else {
6564
- this.renderableArray.push(obj);
6577
+ this.renderableArray.push(renderable);
6565
6578
  insertedIndex = this.layoutNode.addChild(childLayoutNode);
6566
6579
  }
6567
6580
  this.needsZIndexSort = true;
6568
6581
  this.childrenPrimarySortDirty = true;
6569
- this.renderableMap.set(obj.id, obj);
6570
- if (obj._liveCount > 0) {
6571
- this.propagateLiveCount(obj._liveCount);
6582
+ this.renderableMap.set(renderable.id, renderable);
6583
+ if (renderable._liveCount > 0) {
6584
+ this.propagateLiveCount(renderable._liveCount);
6572
6585
  }
6573
6586
  this.requestRender();
6574
6587
  return insertedIndex;
6575
6588
  }
6576
6589
  insertBefore(obj, anchor) {
6577
- obj = ensureRenderable(this._ctx, obj);
6590
+ if (!obj) {
6591
+ return -1;
6592
+ }
6593
+ const renderable = maybeMakeRenderable(this._ctx, obj);
6594
+ if (!renderable) {
6595
+ return -1;
6596
+ }
6578
6597
  if (!anchor) {
6579
- return this.add(obj);
6598
+ return this.add(renderable);
6580
6599
  }
6581
6600
  if (!this.renderableMap.has(anchor.id)) {
6582
6601
  throw new Error("Anchor does not exist");
@@ -6585,7 +6604,7 @@ class Renderable extends EventEmitter3 {
6585
6604
  if (anchorIndex === -1) {
6586
6605
  throw new Error("Anchor does not exist");
6587
6606
  }
6588
- return this.add(obj, anchorIndex);
6607
+ return this.add(renderable, anchorIndex);
6589
6608
  }
6590
6609
  getRenderable(id) {
6591
6610
  return this.renderableMap.get(id);
@@ -6668,7 +6687,14 @@ class Renderable extends EventEmitter3 {
6668
6687
  };
6669
6688
  }
6670
6689
  renderSelf(buffer, deltaTime) {}
6690
+ get isDestroyed() {
6691
+ return this._isDestroyed;
6692
+ }
6671
6693
  destroy() {
6694
+ if (this._isDestroyed) {
6695
+ return;
6696
+ }
6697
+ this._isDestroyed = true;
6672
6698
  if (this.parent) {
6673
6699
  this.parent.remove(this.id);
6674
6700
  }
@@ -6677,16 +6703,15 @@ class Renderable extends EventEmitter3 {
6677
6703
  this.frameBuffer = null;
6678
6704
  }
6679
6705
  for (const child of this.renderableArray) {
6680
- child.parent = null;
6681
- child.destroy();
6706
+ this.remove(child.id);
6682
6707
  }
6683
6708
  this.renderableArray = [];
6684
6709
  this.renderableMap.clear();
6685
6710
  Renderable.renderablesByNumber.delete(this.num);
6686
- this.layoutNode.destroy();
6687
6711
  this.blur();
6688
6712
  this.removeAllListeners();
6689
6713
  this.destroySelf();
6714
+ this.layoutNode.destroy();
6690
6715
  }
6691
6716
  destroyRecursively() {
6692
6717
  this.destroy();
@@ -6841,11 +6866,12 @@ class RootRenderable extends Renderable {
6841
6866
  try {
6842
6867
  this.yogaConfig.free();
6843
6868
  } catch (error) {}
6844
- super.destroySelf();
6845
6869
  }
6846
6870
  }
6847
6871
 
6848
6872
  // src/renderables/composition/vnode.ts
6873
+ import util from "util";
6874
+ var BrandedVNode = Symbol.for("@opentui/core/VNode");
6849
6875
  function isRenderableConstructor(value) {
6850
6876
  return typeof value === "function" && value.prototype && Renderable.prototype.isPrototypeOf(value.prototype);
6851
6877
  }
@@ -6865,7 +6891,7 @@ function h(type, props, ...children) {
6865
6891
  throw new TypeError("h() received an invalid vnode type");
6866
6892
  }
6867
6893
  const vnode = {
6868
- __isVNode: true,
6894
+ [BrandedVNode]: true,
6869
6895
  type,
6870
6896
  props,
6871
6897
  children: flattenChildren(children),
@@ -6907,12 +6933,17 @@ function h(type, props, ...children) {
6907
6933
  return vnode;
6908
6934
  }
6909
6935
  function isVNode(node) {
6910
- return node && node.__isVNode;
6936
+ return node && node[BrandedVNode];
6911
6937
  }
6912
- function ensureRenderable(ctx, node) {
6938
+ function maybeMakeRenderable(ctx, node) {
6913
6939
  if (isRenderable(node))
6914
6940
  return node;
6915
- return instantiate(ctx, node);
6941
+ if (isVNode(node))
6942
+ return instantiate(ctx, node);
6943
+ if (true) {
6944
+ console.warn("maybeMakeRenderable received an invalid node", util.inspect(node, { depth: 2 }));
6945
+ }
6946
+ return null;
6916
6947
  }
6917
6948
  function wrapWithDelegates(instance, delegateMap) {
6918
6949
  if (!delegateMap || Object.keys(delegateMap).length === 0)
@@ -7009,7 +7040,7 @@ import { EventEmitter as EventEmitter5 } from "events";
7009
7040
  import { Console } from "console";
7010
7041
  import fs from "fs";
7011
7042
  import path from "path";
7012
- import util from "util";
7043
+ import util2 from "util";
7013
7044
 
7014
7045
  // src/lib/output.capture.ts
7015
7046
  import { Writable } from "stream";
@@ -7425,13 +7456,13 @@ class TerminalConsole extends EventEmitter5 {
7425
7456
  }
7426
7457
  if (typeof arg === "object" && arg !== null) {
7427
7458
  try {
7428
- return util.inspect(arg, { depth: 2 });
7459
+ return util2.inspect(arg, { depth: 2 });
7429
7460
  } catch (e) {
7430
7461
  return String(arg);
7431
7462
  }
7432
7463
  }
7433
7464
  try {
7434
- return util.inspect(arg, { depth: 2 });
7465
+ return util2.inspect(arg, { depth: 2 });
7435
7466
  } catch (e) {
7436
7467
  return String(arg);
7437
7468
  }
@@ -7703,9 +7734,13 @@ class MouseEvent {
7703
7734
  target;
7704
7735
  isSelecting;
7705
7736
  _propagationStopped = false;
7737
+ _defaultPrevented = false;
7706
7738
  get propagationStopped() {
7707
7739
  return this._propagationStopped;
7708
7740
  }
7741
+ get defaultPrevented() {
7742
+ return this._defaultPrevented;
7743
+ }
7709
7744
  constructor(target, attributes) {
7710
7745
  this.target = target;
7711
7746
  this.type = attributes.type;
@@ -7720,6 +7755,9 @@ class MouseEvent {
7720
7755
  stopPropagation() {
7721
7756
  this._propagationStopped = true;
7722
7757
  }
7758
+ preventDefault() {
7759
+ this._defaultPrevented = true;
7760
+ }
7723
7761
  }
7724
7762
  var MouseButton;
7725
7763
  ((MouseButton2) => {
@@ -7845,6 +7883,7 @@ class CliRenderer extends EventEmitter6 {
7845
7883
  mouseParser = new MouseParser;
7846
7884
  sigwinchHandler = null;
7847
7885
  _capabilities = null;
7886
+ _latestPointer = { x: 0, y: 0 };
7848
7887
  constructor(lib, rendererPtr, stdin, stdout, width, height, config = {}) {
7849
7888
  super();
7850
7889
  this.stdin = stdin;
@@ -7897,6 +7936,8 @@ class CliRenderer extends EventEmitter6 {
7897
7936
  }, 100);
7898
7937
  }).then(() => {
7899
7938
  this.realStdoutWrite.call(this.stdout, `
7939
+ `.repeat(this._terminalHeight));
7940
+ this.realStdoutWrite.call(this.stdout, `
7900
7941
  === FATAL ERROR OCCURRED ===
7901
7942
  `);
7902
7943
  this.realStdoutWrite.call(this.stdout, `Console cache:
@@ -8181,12 +8222,14 @@ Error details:
8181
8222
  }
8182
8223
  mouseEvent.y -= this.renderOffset;
8183
8224
  }
8225
+ this._latestPointer.x = mouseEvent.x;
8226
+ this._latestPointer.y = mouseEvent.y;
8184
8227
  if (mouseEvent.type === "scroll") {
8185
8228
  const maybeRenderableId2 = this.lib.checkHit(this.rendererPtr, mouseEvent.x, mouseEvent.y);
8186
8229
  const maybeRenderable2 = Renderable.renderablesByNumber.get(maybeRenderableId2);
8187
8230
  if (maybeRenderable2) {
8188
- const event = new MouseEvent(maybeRenderable2, mouseEvent);
8189
- maybeRenderable2.processMouseEvent(event);
8231
+ const event2 = new MouseEvent(maybeRenderable2, mouseEvent);
8232
+ maybeRenderable2.processMouseEvent(event2);
8190
8233
  }
8191
8234
  return true;
8192
8235
  }
@@ -8197,23 +8240,23 @@ Error details:
8197
8240
  if (mouseEvent.type === "down" && mouseEvent.button === 0 /* LEFT */ && !this.currentSelection?.isSelecting && !mouseEvent.modifiers.ctrl) {
8198
8241
  if (maybeRenderable && maybeRenderable.selectable && maybeRenderable.shouldStartSelection(mouseEvent.x, mouseEvent.y)) {
8199
8242
  this.startSelection(maybeRenderable, mouseEvent.x, mouseEvent.y);
8200
- const event = new MouseEvent(maybeRenderable, mouseEvent);
8201
- maybeRenderable.processMouseEvent(event);
8243
+ const event2 = new MouseEvent(maybeRenderable, mouseEvent);
8244
+ maybeRenderable.processMouseEvent(event2);
8202
8245
  return true;
8203
8246
  }
8204
8247
  }
8205
8248
  if (mouseEvent.type === "drag" && this.currentSelection?.isSelecting) {
8206
8249
  this.updateSelection(maybeRenderable, mouseEvent.x, mouseEvent.y);
8207
8250
  if (maybeRenderable) {
8208
- const event = new MouseEvent(maybeRenderable, { ...mouseEvent, isSelecting: true });
8209
- maybeRenderable.processMouseEvent(event);
8251
+ const event2 = new MouseEvent(maybeRenderable, { ...mouseEvent, isSelecting: true });
8252
+ maybeRenderable.processMouseEvent(event2);
8210
8253
  }
8211
8254
  return true;
8212
8255
  }
8213
8256
  if (mouseEvent.type === "up" && this.currentSelection?.isSelecting) {
8214
8257
  if (maybeRenderable) {
8215
- const event = new MouseEvent(maybeRenderable, { ...mouseEvent, isSelecting: true });
8216
- maybeRenderable.processMouseEvent(event);
8258
+ const event2 = new MouseEvent(maybeRenderable, { ...mouseEvent, isSelecting: true });
8259
+ maybeRenderable.processMouseEvent(event2);
8217
8260
  }
8218
8261
  this.finishSelection();
8219
8262
  return true;
@@ -8223,59 +8266,61 @@ Error details:
8223
8266
  this.currentSelection.isSelecting = true;
8224
8267
  this.updateSelection(maybeRenderable, mouseEvent.x, mouseEvent.y);
8225
8268
  return true;
8226
- } else {
8227
- this.clearSelection();
8228
8269
  }
8229
8270
  }
8230
8271
  if (!sameElement && (mouseEvent.type === "drag" || mouseEvent.type === "move")) {
8231
8272
  if (this.lastOverRenderable && this.lastOverRenderable !== this.capturedRenderable) {
8232
- const event = new MouseEvent(this.lastOverRenderable, { ...mouseEvent, type: "out" });
8233
- this.lastOverRenderable.processMouseEvent(event);
8273
+ const event2 = new MouseEvent(this.lastOverRenderable, { ...mouseEvent, type: "out" });
8274
+ this.lastOverRenderable.processMouseEvent(event2);
8234
8275
  }
8235
8276
  this.lastOverRenderable = maybeRenderable;
8236
8277
  if (maybeRenderable) {
8237
- const event = new MouseEvent(maybeRenderable, {
8278
+ const event2 = new MouseEvent(maybeRenderable, {
8238
8279
  ...mouseEvent,
8239
8280
  type: "over",
8240
8281
  source: this.capturedRenderable
8241
8282
  });
8242
- maybeRenderable.processMouseEvent(event);
8283
+ maybeRenderable.processMouseEvent(event2);
8243
8284
  }
8244
8285
  }
8245
8286
  if (this.capturedRenderable && mouseEvent.type !== "up") {
8246
- const event = new MouseEvent(this.capturedRenderable, mouseEvent);
8247
- this.capturedRenderable.processMouseEvent(event);
8287
+ const event2 = new MouseEvent(this.capturedRenderable, mouseEvent);
8288
+ this.capturedRenderable.processMouseEvent(event2);
8248
8289
  return true;
8249
8290
  }
8250
8291
  if (this.capturedRenderable && mouseEvent.type === "up") {
8251
- const event = new MouseEvent(this.capturedRenderable, { ...mouseEvent, type: "drag-end" });
8252
- this.capturedRenderable.processMouseEvent(event);
8292
+ const event2 = new MouseEvent(this.capturedRenderable, { ...mouseEvent, type: "drag-end" });
8293
+ this.capturedRenderable.processMouseEvent(event2);
8253
8294
  this.capturedRenderable.processMouseEvent(new MouseEvent(this.capturedRenderable, mouseEvent));
8254
8295
  if (maybeRenderable) {
8255
- const event2 = new MouseEvent(maybeRenderable, {
8296
+ const event3 = new MouseEvent(maybeRenderable, {
8256
8297
  ...mouseEvent,
8257
8298
  type: "drop",
8258
8299
  source: this.capturedRenderable
8259
8300
  });
8260
- maybeRenderable.processMouseEvent(event2);
8301
+ maybeRenderable.processMouseEvent(event3);
8261
8302
  }
8262
8303
  this.lastOverRenderable = this.capturedRenderable;
8263
8304
  this.lastOverRenderableNum = this.capturedRenderable.num;
8264
8305
  this.capturedRenderable = undefined;
8265
8306
  this.requestRender();
8266
8307
  }
8308
+ let event = undefined;
8267
8309
  if (maybeRenderable) {
8268
8310
  if (mouseEvent.type === "drag" && mouseEvent.button === 0 /* LEFT */) {
8269
8311
  this.capturedRenderable = maybeRenderable;
8270
8312
  } else {
8271
8313
  this.capturedRenderable = undefined;
8272
8314
  }
8273
- const event = new MouseEvent(maybeRenderable, mouseEvent);
8315
+ event = new MouseEvent(maybeRenderable, mouseEvent);
8274
8316
  maybeRenderable.processMouseEvent(event);
8275
- return true;
8317
+ } else {
8318
+ this.capturedRenderable = undefined;
8319
+ this.lastOverRenderable = undefined;
8320
+ }
8321
+ if (!event?.defaultPrevented && mouseEvent.type === "down" && this.currentSelection) {
8322
+ this.clearSelection();
8276
8323
  }
8277
- this.capturedRenderable = undefined;
8278
- this.lastOverRenderable = undefined;
8279
8324
  return true;
8280
8325
  }
8281
8326
  return false;
@@ -8673,11 +8718,10 @@ Error details:
8673
8718
  }
8674
8719
  requestSelectionUpdate() {
8675
8720
  if (this.currentSelection?.isSelecting) {
8676
- const lastMouseX = this.currentSelection.focus.x;
8677
- const lastMouseY = this.currentSelection.focus.y;
8678
- const maybeRenderableId = this.lib.checkHit(this.rendererPtr, lastMouseX, lastMouseY);
8721
+ const pointer = this._latestPointer;
8722
+ const maybeRenderableId = this.lib.checkHit(this.rendererPtr, pointer.x, pointer.y);
8679
8723
  const maybeRenderable = Renderable.renderablesByNumber.get(maybeRenderableId);
8680
- this.updateSelection(maybeRenderable, lastMouseX, lastMouseY);
8724
+ this.updateSelection(maybeRenderable, pointer.x, pointer.y);
8681
8725
  }
8682
8726
  }
8683
8727
  isWithinContainer(renderable, container) {
@@ -8727,7 +8771,7 @@ Error details:
8727
8771
  }
8728
8772
  }
8729
8773
 
8730
- export { __toESM, __commonJS, __export, __require, Edge, Gutter, MeasureMode, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, TrackedNode, createTrackedNode, nonAlphanumericKeys, parseKeypress, KeyHandler, getKeyHandler, RGBA, hexToRgb, rgbToHex, hsvToRgb, parseColor, fonts, measureText, getCharacterPositions, coordinateToCharacterIndex, renderFontToFrameBuffer, TextAttributes, DebugOverlayCorner, createTextAttributes, 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, tn, t, SyntaxStyle, hastToStyledText, parseAlign, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, TextBuffer, LogLevel2 as LogLevel, setRenderLibPath, resolveRenderLib, OptimizedBuffer, h, isVNode, ensureRenderable, wrapWithDelegates, instantiate, delegate, LayoutEvents, RenderableEvents, isValidPercentage, isMarginType, isPaddingType, isPositionType, isPositionTypeType, isOverflowType, isDimensionType, isFlexBasisType, isSizeType, isRenderable, Renderable, RootRenderable, capture, ConsolePosition, TerminalConsole, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, CliRenderer };
8774
+ export { __toESM, __commonJS, __export, __require, Edge, Gutter, MeasureMode, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, TrackedNode, createTrackedNode, nonAlphanumericKeys, parseKeypress, KeyHandler, getKeyHandler, RGBA, hexToRgb, rgbToHex, hsvToRgb, parseColor, fonts, measureText, getCharacterPositions, coordinateToCharacterIndex, renderFontToFrameBuffer, TextAttributes, DebugOverlayCorner, createTextAttributes, 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, tn, t, SyntaxStyle, hastToStyledText, parseAlign, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, TextBuffer, LogLevel2 as LogLevel, setRenderLibPath, resolveRenderLib, OptimizedBuffer, h, isVNode, maybeMakeRenderable, wrapWithDelegates, instantiate, delegate, LayoutEvents, RenderableEvents, isValidPercentage, isMarginType, isPaddingType, isPositionType, isPositionTypeType, isOverflowType, isDimensionType, isFlexBasisType, isSizeType, isRenderable, Renderable, RootRenderable, capture, ConsolePosition, TerminalConsole, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, CliRenderer };
8731
8775
 
8732
- //# debugId=4847DC8F7CFD610964756E2164756E21
8733
- //# sourceMappingURL=index-sw194bbj.js.map
8776
+ //# debugId=5CD4CD088CC2988464756E2164756E21
8777
+ //# sourceMappingURL=index-grak7z0n.js.map