@opentui/core 0.2.14 → 0.2.16

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.
@@ -1,10 +1,10 @@
1
1
  // @bun
2
2
  import {
3
3
  exports_src
4
- } from "./index-nhyfhtvf.js";
4
+ } from "./index-hzcw4q21.js";
5
5
  import {
6
6
  __require
7
- } from "./index-3fq5hq97.js";
7
+ } from "./index-qfwqv8y3.js";
8
8
 
9
9
  // src/runtime-plugin.ts
10
10
  import { existsSync, readFileSync, realpathSync } from "fs";
@@ -418,4 +418,4 @@ function createRuntimePlugin(input = {}) {
418
418
  export { isCoreRuntimeModuleSpecifier, runtimeModuleIdForSpecifier, createRuntimePlugin };
419
419
 
420
420
  //# debugId=4F4ECA92927B118964756E2164756E21
421
- //# sourceMappingURL=index-5v692kqx.js.map
421
+ //# sourceMappingURL=index-qe67qr6s.js.map
@@ -5844,6 +5844,24 @@ var keyName = {
5844
5844
  OE: "clear",
5845
5845
  OF: "end",
5846
5846
  OH: "home",
5847
+ OM: "return",
5848
+ Oj: "*",
5849
+ Ok: "+",
5850
+ Ol: ",",
5851
+ Om: "-",
5852
+ On: ".",
5853
+ Oo: "/",
5854
+ Op: "0",
5855
+ Oq: "1",
5856
+ Or: "2",
5857
+ Os: "3",
5858
+ Ot: "4",
5859
+ Ou: "5",
5860
+ Ov: "6",
5861
+ Ow: "7",
5862
+ Ox: "8",
5863
+ Oy: "9",
5864
+ OX: "=",
5847
5865
  "[1~": "home",
5848
5866
  "[2~": "insert",
5849
5867
  "[3~": "delete",
@@ -5904,6 +5922,25 @@ var getCtrlKeyName = (charCode) => {
5904
5922
  }
5905
5923
  return;
5906
5924
  };
5925
+ var ss3NumpadPrintable = {
5926
+ Op: "0",
5927
+ Oq: "1",
5928
+ Or: "2",
5929
+ Os: "3",
5930
+ Ot: "4",
5931
+ Ou: "5",
5932
+ Ov: "6",
5933
+ Ow: "7",
5934
+ Ox: "8",
5935
+ Oy: "9",
5936
+ Oj: "*",
5937
+ Ok: "+",
5938
+ Ol: ",",
5939
+ Om: "-",
5940
+ On: ".",
5941
+ Oo: "/",
5942
+ OX: "="
5943
+ };
5907
5944
  var modifyOtherKeysRe = /^\x1b\[27;(\d+);(\d+)~$/;
5908
5945
  var parseKeypress = (s = "", options = {}) => {
5909
5946
  let parts;
@@ -6076,6 +6113,13 @@ var parseKeypress = (s = "", options = {}) => {
6076
6113
  key.name = keyNameResult;
6077
6114
  key.shift = isShiftKey(code) || key.shift;
6078
6115
  key.ctrl = isCtrlKey(code) || key.ctrl;
6116
+ const ss3Char = ss3NumpadPrintable[code];
6117
+ if (ss3Char !== undefined) {
6118
+ key.sequence = ss3Char;
6119
+ if (key.name >= "0" && key.name <= "9") {
6120
+ key.number = true;
6121
+ }
6122
+ }
6079
6123
  } else {
6080
6124
  key.name = "";
6081
6125
  key.code = undefined;
@@ -7238,6 +7282,12 @@ function concatBytes(left, right) {
7238
7282
  combined.set(right, left.length);
7239
7283
  return combined;
7240
7284
  }
7285
+ function withEscPrefix(bytes) {
7286
+ const prefixed = new Uint8Array(bytes.length + 1);
7287
+ prefixed[0] = ESC;
7288
+ prefixed.set(bytes, 1);
7289
+ return prefixed;
7290
+ }
7241
7291
  function indexOfBytes(haystack, needle) {
7242
7292
  if (needle.length === 0) {
7243
7293
  return 0;
@@ -8194,7 +8244,13 @@ class StdinParser {
8194
8244
  }
8195
8245
  if (byte === 77 || byte === 109) {
8196
8246
  const end = this.cursor + 1;
8197
- this.emitOpaqueResponse("unknown", bytes.subarray(this.unitStart, end));
8247
+ const rawBytes = bytes.subarray(this.unitStart, end);
8248
+ const prefixed = withEscPrefix(rawBytes);
8249
+ if (isMouseSgrSequence(prefixed)) {
8250
+ this.emitMouse(prefixed, "sgr");
8251
+ } else {
8252
+ this.emitOpaqueResponse("unknown", rawBytes);
8253
+ }
8198
8254
  this.state = { tag: "ground" };
8199
8255
  this.consumePrefix(end);
8200
8256
  continue;
@@ -8216,7 +8272,8 @@ class StdinParser {
8216
8272
  this.consumePrefix(bytes.length);
8217
8273
  continue;
8218
8274
  }
8219
- this.emitOpaqueResponse("unknown", bytes.subarray(this.unitStart, end));
8275
+ const rawBytes = bytes.subarray(this.unitStart, end);
8276
+ this.emitMouse(withEscPrefix(rawBytes), "x10");
8220
8277
  this.state = { tag: "ground" };
8221
8278
  this.consumePrefix(end);
8222
8279
  continue;
@@ -10012,16 +10069,20 @@ class ExtmarksController {
10012
10069
  if (virtualExtmark && currentOffset === virtualExtmark.end) {
10013
10070
  const startCursor = this.offsetToPosition(virtualExtmark.start);
10014
10071
  const endCursor = this.offsetToPosition(virtualExtmark.end);
10015
- const deleteOffset = virtualExtmark.start;
10016
- const deleteLength = virtualExtmark.end - virtualExtmark.start;
10072
+ const deleteOffset2 = virtualExtmark.start;
10073
+ const deleteLength2 = virtualExtmark.end - virtualExtmark.start;
10017
10074
  this.deleteExtmarkById(virtualExtmark.id);
10018
10075
  this.originalDeleteRange(startCursor.row, startCursor.col, endCursor.row, endCursor.col);
10019
- this.adjustExtmarksAfterDeletion(deleteOffset, deleteLength);
10076
+ this.adjustExtmarksAfterDeletion(deleteOffset2, deleteLength2);
10020
10077
  this.updateHighlights();
10021
10078
  return;
10022
10079
  }
10023
10080
  this.originalDeleteCharBackward();
10024
- this.adjustExtmarksAfterDeletion(targetOffset, 1);
10081
+ const deleteOffset = this.editorView.getVisualCursor().offset;
10082
+ const deleteLength = currentOffset - deleteOffset;
10083
+ if (deleteLength > 0) {
10084
+ this.adjustExtmarksAfterDeletion(deleteOffset, deleteLength);
10085
+ }
10025
10086
  };
10026
10087
  this.editBuffer.deleteChar = () => {
10027
10088
  if (this.destroyed) {
@@ -10030,12 +10091,7 @@ class ExtmarksController {
10030
10091
  }
10031
10092
  this.saveSnapshot();
10032
10093
  const currentOffset = this.editorView.getVisualCursor().offset;
10033
- const textLength = this.editBuffer.getText().length;
10034
10094
  const hadSelection = this.editorView.hasSelection();
10035
- if (currentOffset >= textLength) {
10036
- this.originalDeleteChar();
10037
- return;
10038
- }
10039
10095
  if (hadSelection) {
10040
10096
  this.originalDeleteChar();
10041
10097
  return;
@@ -10046,15 +10102,19 @@ class ExtmarksController {
10046
10102
  const startCursor = this.offsetToPosition(virtualExtmark.start);
10047
10103
  const endCursor = this.offsetToPosition(virtualExtmark.end);
10048
10104
  const deleteOffset = virtualExtmark.start;
10049
- const deleteLength = virtualExtmark.end - virtualExtmark.start;
10105
+ const deleteLength2 = virtualExtmark.end - virtualExtmark.start;
10050
10106
  this.deleteExtmarkById(virtualExtmark.id);
10051
10107
  this.originalDeleteRange(startCursor.row, startCursor.col, endCursor.row, endCursor.col);
10052
- this.adjustExtmarksAfterDeletion(deleteOffset, deleteLength);
10108
+ this.adjustExtmarksAfterDeletion(deleteOffset, deleteLength2);
10053
10109
  this.updateHighlights();
10054
10110
  return;
10055
10111
  }
10112
+ const deleteEndOffset = this.getNextCursorOffset(currentOffset);
10113
+ const deleteLength = deleteEndOffset - currentOffset;
10056
10114
  this.originalDeleteChar();
10057
- this.adjustExtmarksAfterDeletion(targetOffset, 1);
10115
+ if (deleteLength > 0) {
10116
+ this.adjustExtmarksAfterDeletion(currentOffset, deleteLength);
10117
+ }
10058
10118
  };
10059
10119
  this.editBuffer.deleteRange = (startLine, startCol, endLine, endCol) => {
10060
10120
  if (this.destroyed) {
@@ -10106,7 +10166,10 @@ class ExtmarksController {
10106
10166
  this.saveSnapshot();
10107
10167
  const currentOffset = this.editorView.getVisualCursor().offset;
10108
10168
  this.originalInsertText(text);
10109
- this.adjustExtmarksAfterInsertion(currentOffset, text.length);
10169
+ const insertLength = this.editorView.getVisualCursor().offset - currentOffset;
10170
+ if (insertLength > 0) {
10171
+ this.adjustExtmarksAfterInsertion(currentOffset, insertLength);
10172
+ }
10110
10173
  };
10111
10174
  this.editBuffer.insertChar = (char) => {
10112
10175
  if (this.destroyed) {
@@ -10116,7 +10179,10 @@ class ExtmarksController {
10116
10179
  this.saveSnapshot();
10117
10180
  const currentOffset = this.editorView.getVisualCursor().offset;
10118
10181
  this.originalInsertChar(char);
10119
- this.adjustExtmarksAfterInsertion(currentOffset, 1);
10182
+ const insertLength = this.editorView.getVisualCursor().offset - currentOffset;
10183
+ if (insertLength > 0) {
10184
+ this.adjustExtmarksAfterInsertion(currentOffset, insertLength);
10185
+ }
10120
10186
  };
10121
10187
  this.editBuffer.setText = (text) => {
10122
10188
  if (this.destroyed) {
@@ -10245,6 +10311,12 @@ class ExtmarksController {
10245
10311
  positionToOffset(row, col) {
10246
10312
  return this.editBuffer.positionToOffset(row, col);
10247
10313
  }
10314
+ getNextCursorOffset(currentOffset) {
10315
+ this.originalMoveCursorRight();
10316
+ const nextOffset = this.editorView.getVisualCursor().offset;
10317
+ this.originalSetCursorByOffset(currentOffset);
10318
+ return nextOffset;
10319
+ }
10248
10320
  updateHighlights() {
10249
10321
  this.editBuffer.clearAllHighlights();
10250
10322
  for (const extmark of this.extmarks.values()) {
@@ -12364,6 +12436,17 @@ var AllocatorStatsStruct = defineStruct([
12364
12436
  ["largeAllocations", "u64"],
12365
12437
  ["requestedBytesValid", "bool_u8"]
12366
12438
  ]);
12439
+ var NativeRenderStatsStruct = defineStruct([
12440
+ ["lastFrameTime", "f64"],
12441
+ ["averageFrameTime", "f64"],
12442
+ ["renderTime", "f64"],
12443
+ ["stdoutWriteTime", "f64"],
12444
+ ["frameCount", "u64"],
12445
+ ["cellsUpdated", "u32"],
12446
+ ["averageCellsUpdated", "u32"],
12447
+ ["renderTimeValid", "bool_u8"],
12448
+ ["stdoutWriteTimeValid", "bool_u8"]
12449
+ ]);
12367
12450
  var GrowthPolicyEnum = defineEnum({ grow: 0, block: 1 }, "u8");
12368
12451
  var NativeSpanFeedOptionsStruct = defineStruct([
12369
12452
  ["chunkSize", "u32", { default: 64 * 1024 }],
@@ -12570,6 +12653,10 @@ function getOpenTUILib(libPath) {
12570
12653
  args: ["ptr", "u32", "u32", "u32"],
12571
12654
  returns: "void"
12572
12655
  },
12656
+ getRenderStats: {
12657
+ args: ["ptr", "ptr"],
12658
+ returns: "void"
12659
+ },
12573
12660
  render: {
12574
12661
  args: ["ptr", "bool"],
12575
12662
  returns: "void"
@@ -13928,6 +14015,20 @@ class FFIRenderLib {
13928
14015
  updateMemoryStats(renderer, heapUsed, heapTotal, arrayBuffers) {
13929
14016
  this.opentui.symbols.updateMemoryStats(renderer, heapUsed, heapTotal, arrayBuffers);
13930
14017
  }
14018
+ getRenderStats(renderer) {
14019
+ const statsBuffer = new ArrayBuffer(NativeRenderStatsStruct.size);
14020
+ this.opentui.symbols.getRenderStats(renderer, ptr(statsBuffer));
14021
+ const stats = NativeRenderStatsStruct.unpack(statsBuffer);
14022
+ return {
14023
+ nativeLastFrameTime: stats.lastFrameTime,
14024
+ nativeAverageFrameTime: stats.averageFrameTime,
14025
+ nativeFrameCount: toNumber(stats.frameCount),
14026
+ cellsUpdated: stats.cellsUpdated,
14027
+ averageCellsUpdated: stats.averageCellsUpdated,
14028
+ nativeRenderTime: stats.renderTimeValid ? stats.renderTime : undefined,
14029
+ nativeStdoutWriteTime: stats.stdoutWriteTimeValid ? stats.stdoutWriteTime : undefined
14030
+ };
14031
+ }
13931
14032
  getNextBuffer(renderer) {
13932
14033
  const bufferPtr = this.opentui.symbols.getNextBuffer(renderer);
13933
14034
  if (!bufferPtr) {
@@ -21799,6 +21900,8 @@ async function createCliRenderer(config = {}) {
21799
21900
  var CliRenderEvents;
21800
21901
  ((CliRenderEvents2) => {
21801
21902
  CliRenderEvents2["RESIZE"] = "resize";
21903
+ CliRenderEvents2["FRAME"] = "frame";
21904
+ CliRenderEvents2["EXTERNAL_OUTPUT"] = "external_output";
21802
21905
  CliRenderEvents2["FOCUS"] = "focus";
21803
21906
  CliRenderEvents2["BLUR"] = "blur";
21804
21907
  CliRenderEvents2["FOCUSED_RENDERABLE"] = "focused_renderable";
@@ -22339,6 +22442,13 @@ Captured external output:
22339
22442
  this.idleResolvers.push(resolve3);
22340
22443
  });
22341
22444
  }
22445
+ getSchedulerState() {
22446
+ return {
22447
+ isRunning: this._isRunning,
22448
+ isRendering: this.rendering,
22449
+ hasScheduledRender: Boolean(this.renderTimeout || this.updateScheduled || this.immediateRerenderRequested)
22450
+ };
22451
+ }
22342
22452
  get resolution() {
22343
22453
  return this._resolution;
22344
22454
  }
@@ -22941,6 +23051,9 @@ Captured external output:
22941
23051
  }
22942
23052
  enqueueSplitCommit(commit) {
22943
23053
  this.externalOutputQueue.writeSnapshot(commit);
23054
+ if (this.listenerCount("external_output" /* EXTERNAL_OUTPUT */) > 0) {
23055
+ this.emit("external_output" /* EXTERNAL_OUTPUT */, commit);
23056
+ }
22944
23057
  }
22945
23058
  createStdoutSnapshotCommit(line, trailingNewline) {
22946
23059
  const snapshotContext = new ScrollbackSnapshotRenderContext(this.width, 1, this.widthMethod);
@@ -24266,6 +24379,11 @@ Captured external output:
24266
24379
  }
24267
24380
  const overallFrameTime = performance.now() - overallStart;
24268
24381
  this.lib.updateStats(this.rendererPtr, overallFrameTime, this.renderStats.fps, this.renderStats.frameCallbackTime);
24382
+ if (this.listenerCount("frame" /* FRAME */) > 0) {
24383
+ this.emit("frame" /* FRAME */, {
24384
+ frameId: this.frameId
24385
+ });
24386
+ }
24269
24387
  if (this.gatherStats) {
24270
24388
  this.collectStatSample(overallFrameTime);
24271
24389
  }
@@ -24323,19 +24441,25 @@ Captured external output:
24323
24441
  this.frameTimes.shift();
24324
24442
  }
24325
24443
  }
24444
+ getNativeStats() {
24445
+ return this.lib.getRenderStats(this.rendererPtr);
24446
+ }
24326
24447
  getStats() {
24448
+ const nativeStats = this.getNativeStats();
24327
24449
  const frameTimes = [...this.frameTimes];
24328
24450
  const sum = frameTimes.reduce((acc, time) => acc + time, 0);
24329
24451
  const avg = frameTimes.length ? sum / frameTimes.length : 0;
24330
24452
  const min = frameTimes.length ? Math.min(...frameTimes) : 0;
24331
24453
  const max = frameTimes.length ? Math.max(...frameTimes) : 0;
24332
24454
  return {
24455
+ ...nativeStats,
24333
24456
  fps: this.renderStats.fps,
24334
24457
  frameCount: this.renderStats.frameCount,
24335
24458
  frameTimes,
24336
24459
  averageFrameTime: avg,
24337
24460
  minFrameTime: min,
24338
- maxFrameTime: max
24461
+ maxFrameTime: max,
24462
+ frameCallbackTime: this.renderStats.frameCallbackTime
24339
24463
  };
24340
24464
  }
24341
24465
  resetStats() {
@@ -24622,5 +24746,5 @@ Captured external output:
24622
24746
 
24623
24747
  export { __export, __require, MeasureMode, exports_src, isValidBorderStyle, parseBorderStyle, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, KeyEvent, PasteEvent, KeyHandler, InternalKeyHandler, DEFAULT_FOREGROUND_RGB, DEFAULT_BACKGROUND_RGB, normalizeIndexedColorIndex, ansi256IndexToRgb, RGBA, normalizeColorValue, 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, terminalNamedSingleStrokeKeys, 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, stringWidth2 as stringWidth, addDefaultParsers, TreeSitterClient, DataPathsManager, getDataPaths, extensionToFiletype, basenameToFiletype, extToFiletype, pathToFiletype, infoStringToFiletype, getTreeSitterClient, ExtmarksController, createExtmarksController, TerminalPalette, createTerminalPalette, normalizeTerminalPalette, buildTerminalPaletteSignature, decodePasteBytes, stripAnsiSequences, detectLinks, toArrayBuffer, TextBuffer, SpanInfoStruct, LogLevel2 as LogLevel, setRenderLibPath, resolveRenderLib, OptimizedBuffer, h, isVNode, maybeMakeRenderable, wrapWithDelegates, instantiate, delegate, LayoutEvents, RenderableEvents, isRenderable, BaseRenderable, Renderable, RootRenderable, TextBufferView, EditBuffer, EditorView, convertThemeToStyles, SyntaxStyle, ANSI, BoxRenderable, TextBufferRenderable, CodeRenderable, isTextNodeRenderable, TextNodeRenderable, RootTextNodeRenderable, TextRenderable, defaultKeyAliases, mergeKeyAliases, mergeKeyBindings, getKeyBindingAction, buildKeyBindingsMap, capture, ConsolePosition, TerminalConsole, getObjectsInViewport, EditBufferRenderableEvents, isEditBufferRenderable, EditBufferRenderable, calculateRenderGeometry, buildKittyKeyboardFlags, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, RendererControlState, CliRenderer };
24624
24748
 
24625
- //# debugId=4B41C39B0C423CD964756E2164756E21
24626
- //# sourceMappingURL=index-3fq5hq97.js.map
24749
+ //# debugId=E84D4FE4C755B03764756E2164756E21
24750
+ //# sourceMappingURL=index-qfwqv8y3.js.map