@opentui/core 0.1.99 → 0.1.101

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-8978gvk3.js";
9
+ } from "./index-xsfpee0k.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
@@ -158,6 +158,7 @@ export declare abstract class Renderable extends BaseRenderable {
158
158
  private childrenPrimarySortDirty;
159
159
  private childrenSortedByPrimaryAxis;
160
160
  private _shouldUpdateBefore;
161
+ private _lastLayoutFrame;
161
162
  onLifecyclePass: (() => void) | null;
162
163
  renderBefore?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void;
163
164
  renderAfter?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void;
@@ -1,10 +1,10 @@
1
1
  // @bun
2
2
  import {
3
3
  exports_src
4
- } from "./index-fedv7szb.js";
4
+ } from "./index-ekbq0zm9.js";
5
5
  import {
6
6
  __require
7
- } from "./index-8978gvk3.js";
7
+ } from "./index-xsfpee0k.js";
8
8
 
9
9
  // src/runtime-plugin.ts
10
10
  import { existsSync, readFileSync, realpathSync } from "fs";
@@ -408,4 +408,4 @@ function createRuntimePlugin(input = {}) {
408
408
  export { isCoreRuntimeModuleSpecifier, runtimeModuleIdForSpecifier, createRuntimePlugin };
409
409
 
410
410
  //# debugId=5D58E30F1E057B9664756E2164756E21
411
- //# sourceMappingURL=index-gb4b75s8.js.map
411
+ //# sourceMappingURL=index-9qfn9g6r.js.map
@@ -167,7 +167,7 @@ import {
167
167
  white,
168
168
  wrapWithDelegates,
169
169
  yellow
170
- } from "./index-8978gvk3.js";
170
+ } from "./index-xsfpee0k.js";
171
171
 
172
172
  // src/index.ts
173
173
  var exports_src2 = {};
@@ -12064,4 +12064,4 @@ class TimeToFirstDrawRenderable extends Renderable {
12064
12064
  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 };
12065
12065
 
12066
12066
  //# debugId=B00F19B858C15EFD64756E2164756E21
12067
- //# sourceMappingURL=index-fedv7szb.js.map
12067
+ //# sourceMappingURL=index-ekbq0zm9.js.map
@@ -7088,6 +7088,8 @@ function canCompleteDeferredPrivateReplyCsi(state, byte, context) {
7088
7088
  return state.hasDigit && byte === 121;
7089
7089
  if (byte === 99)
7090
7090
  return state.hasDigit || state.semicolons > 0;
7091
+ if (byte === 110)
7092
+ return state.hasDigit;
7091
7093
  return state.hasDigit && byte === 117;
7092
7094
  }
7093
7095
  function concatBytes(left, right) {
@@ -7789,7 +7791,7 @@ class StdinParser {
7789
7791
  }
7790
7792
  if (byte >= 64 && byte <= 126) {
7791
7793
  const end = this.cursor + 1;
7792
- this.emitKeyOrResponse("csi", decodeUtf8(bytes.subarray(this.unitStart, end)));
7794
+ this.emitOpaqueResponse("csi", bytes.subarray(this.unitStart, end));
7793
7795
  this.state = { tag: "ground" };
7794
7796
  this.consumePrefix(end);
7795
7797
  continue;
@@ -14685,6 +14687,7 @@ class Renderable extends BaseRenderable {
14685
14687
  childrenPrimarySortDirty = true;
14686
14688
  childrenSortedByPrimaryAxis = [];
14687
14689
  _shouldUpdateBefore = new Set;
14690
+ _lastLayoutFrame = -1;
14688
14691
  onLifecyclePass = null;
14689
14692
  renderBefore;
14690
14693
  renderAfter;
@@ -15347,6 +15350,10 @@ class Renderable extends BaseRenderable {
15347
15350
  return this.yogaNode;
15348
15351
  }
15349
15352
  updateFromLayout() {
15353
+ const frameId = this._ctx.frameId;
15354
+ if (this._lastLayoutFrame === frameId)
15355
+ return;
15356
+ this._lastLayoutFrame = frameId;
15350
15357
  const layout = this.yogaNode.getComputedLayout();
15351
15358
  const oldX = this._x;
15352
15359
  const oldY = this._y;
@@ -15602,13 +15609,16 @@ class Renderable extends BaseRenderable {
15602
15609
  child.updateLayout(deltaTime, renderList);
15603
15610
  }
15604
15611
  } else {
15612
+ for (const child of this._childrenInZIndexOrder) {
15613
+ if (child.isDestroyed)
15614
+ continue;
15615
+ child.updateFromLayout();
15616
+ }
15605
15617
  const visibleChildren = this._getVisibleChildren();
15606
15618
  const visibleChildSet = new Set(visibleChildren);
15607
15619
  for (const child of this._childrenInZIndexOrder) {
15608
- if (!visibleChildSet.has(child.num)) {
15609
- child.updateFromLayout();
15620
+ if (!visibleChildSet.has(child.num))
15610
15621
  continue;
15611
- }
15612
15622
  child.updateLayout(deltaTime, renderList);
15613
15623
  }
15614
15624
  }
@@ -18761,6 +18771,26 @@ function parsePixelResolution(sequence) {
18761
18771
  }
18762
18772
 
18763
18773
  // src/renderer.ts
18774
+ var OSC_THEME_RESPONSE = /\x1b](10|11);(?:(?:rgb:)([0-9a-fA-F]+)\/([0-9a-fA-F]+)\/([0-9a-fA-F]+)|#([0-9a-fA-F]{6}))(?:\x07|\x1b\\)/g;
18775
+ function scaleOscThemeComponent(component) {
18776
+ const value = parseInt(component, 16);
18777
+ const maxValue = (1 << 4 * component.length) - 1;
18778
+ return Math.round(value / maxValue * 255).toString(16).padStart(2, "0");
18779
+ }
18780
+ function oscThemeColorToHex(r, g, b, hex6) {
18781
+ if (hex6) {
18782
+ return `#${hex6.toLowerCase()}`;
18783
+ }
18784
+ if (r && g && b) {
18785
+ return `#${scaleOscThemeComponent(r)}${scaleOscThemeComponent(g)}${scaleOscThemeComponent(b)}`;
18786
+ }
18787
+ return "#000000";
18788
+ }
18789
+ function inferThemeModeFromBackgroundColor(color) {
18790
+ const [r, g, b] = parseColor(color).toInts();
18791
+ const brightness = (r * 299 + g * 587 + b * 114) / 1000;
18792
+ return brightness > 128 ? "light" : "dark";
18793
+ }
18764
18794
  registerEnvVar({
18765
18795
  name: "OTUI_DUMP_CAPTURES",
18766
18796
  description: "Dump captured stdout and console caches when the renderer exit handler runs.",
@@ -19040,6 +19070,7 @@ class CliRenderer extends EventEmitter9 {
19040
19070
  renderTimeout = null;
19041
19071
  lastTime = 0;
19042
19072
  frameCount = 0;
19073
+ _frameId = 0;
19043
19074
  lastFpsTime = 0;
19044
19075
  currentFps = 0;
19045
19076
  targetFrameTime = 1000 / this._targetFps;
@@ -19117,6 +19148,10 @@ class CliRenderer extends EventEmitter9 {
19117
19148
  _paletteDetectionPromise = null;
19118
19149
  _onDestroy;
19119
19150
  _themeMode = null;
19151
+ _themeModeSource = "none";
19152
+ _themeFallbackPending = true;
19153
+ _themeOscForeground = null;
19154
+ _themeOscBackground = null;
19120
19155
  _terminalFocusState = null;
19121
19156
  sequenceHandlers = [];
19122
19157
  prependedInputHandlers = [];
@@ -19374,6 +19409,9 @@ Captured output:
19374
19409
  const caps = this.capabilities;
19375
19410
  return caps?.unicode === "wcwidth" ? "wcwidth" : "unicode";
19376
19411
  }
19412
+ get frameId() {
19413
+ return this._frameId;
19414
+ }
19377
19415
  writeOut(chunk, encoding, callback) {
19378
19416
  if (this.rendererPtr && this._useThread) {
19379
19417
  const data = typeof chunk === "string" ? chunk : chunk?.toString() ?? "";
@@ -19546,6 +19584,38 @@ Captured output:
19546
19584
  get themeMode() {
19547
19585
  return this._themeMode;
19548
19586
  }
19587
+ waitForThemeMode(timeoutMs = 1000) {
19588
+ if (!Number.isFinite(timeoutMs) || timeoutMs < 0) {
19589
+ throw new Error("timeoutMs must be a non-negative finite number");
19590
+ }
19591
+ if (this._themeMode !== null || this._isDestroyed || timeoutMs === 0) {
19592
+ return Promise.resolve(this._themeMode);
19593
+ }
19594
+ return new Promise((resolve4) => {
19595
+ let timeoutHandle = null;
19596
+ const cleanup = () => {
19597
+ if (timeoutHandle !== null) {
19598
+ this.clock.clearTimeout(timeoutHandle);
19599
+ timeoutHandle = null;
19600
+ }
19601
+ this.off("theme_mode" /* THEME_MODE */, handleThemeMode);
19602
+ this.off("destroy" /* DESTROY */, handleDestroy);
19603
+ };
19604
+ const finish = () => {
19605
+ cleanup();
19606
+ resolve4(this._themeMode);
19607
+ };
19608
+ const handleThemeMode = () => {
19609
+ finish();
19610
+ };
19611
+ const handleDestroy = () => {
19612
+ finish();
19613
+ };
19614
+ this.on("theme_mode" /* THEME_MODE */, handleThemeMode);
19615
+ this.on("destroy" /* DESTROY */, handleDestroy);
19616
+ timeoutHandle = this.clock.setTimeout(finish, timeoutMs);
19617
+ });
19618
+ }
19549
19619
  getDebugInputs() {
19550
19620
  return [...this._debugInputs];
19551
19621
  }
@@ -19767,21 +19837,50 @@ Captured output:
19767
19837
  }).bind(this);
19768
19838
  themeModeHandler = ((sequence) => {
19769
19839
  if (sequence === "\x1B[?997;1n") {
19770
- if (this._themeMode !== "dark") {
19771
- this._themeMode = "dark";
19772
- this.emit("theme_mode" /* THEME_MODE */, "dark");
19773
- }
19840
+ this.applyThemeMode("dark", "csi");
19841
+ this._themeFallbackPending = false;
19774
19842
  return true;
19775
19843
  }
19776
19844
  if (sequence === "\x1B[?997;2n") {
19777
- if (this._themeMode !== "light") {
19778
- this._themeMode = "light";
19779
- this.emit("theme_mode" /* THEME_MODE */, "light");
19845
+ this.applyThemeMode("light", "csi");
19846
+ this._themeFallbackPending = false;
19847
+ return true;
19848
+ }
19849
+ let handledOscThemeResponse = false;
19850
+ let match;
19851
+ OSC_THEME_RESPONSE.lastIndex = 0;
19852
+ while (match = OSC_THEME_RESPONSE.exec(sequence)) {
19853
+ handledOscThemeResponse = true;
19854
+ const color = oscThemeColorToHex(match[2], match[3], match[4], match[5]);
19855
+ if (match[1] === "10") {
19856
+ this._themeOscForeground = color;
19857
+ } else {
19858
+ this._themeOscBackground = color;
19780
19859
  }
19860
+ }
19861
+ if (!handledOscThemeResponse) {
19862
+ return false;
19863
+ }
19864
+ if (!this._themeFallbackPending) {
19781
19865
  return true;
19782
19866
  }
19783
- return false;
19867
+ if (this._themeOscForeground && this._themeOscBackground) {
19868
+ this.applyThemeMode(inferThemeModeFromBackgroundColor(this._themeOscBackground), "osc");
19869
+ this._themeFallbackPending = false;
19870
+ }
19871
+ return true;
19784
19872
  }).bind(this);
19873
+ applyThemeMode(mode, source) {
19874
+ if (source === "osc" && this._themeModeSource === "csi") {
19875
+ return;
19876
+ }
19877
+ const changed = this._themeMode !== mode;
19878
+ this._themeMode = mode;
19879
+ this._themeModeSource = source;
19880
+ if (changed) {
19881
+ this.emit("theme_mode" /* THEME_MODE */, mode);
19882
+ }
19883
+ }
19785
19884
  dispatchSequenceHandlers(sequence) {
19786
19885
  if (this._debugModeEnabled) {
19787
19886
  this._debugInputs.push({
@@ -20173,6 +20272,9 @@ Captured output:
20173
20272
  setTerminalTitle(title) {
20174
20273
  this.lib.setTerminalTitle(this.rendererPtr, title);
20175
20274
  }
20275
+ resetTerminalBgColor() {
20276
+ process.stdout.write("\x1B]111\x07");
20277
+ }
20176
20278
  copyToClipboardOSC52(text, target) {
20177
20279
  return this.clipboard.copyToClipboardOSC52(text, target);
20178
20280
  }
@@ -20457,6 +20559,7 @@ Captured output:
20457
20559
  this.renderTimeout = null;
20458
20560
  }
20459
20561
  try {
20562
+ this._frameId++;
20460
20563
  const now = this.normalizeClockTime(this.clock.now(), this.lastTime);
20461
20564
  const elapsed = this.getElapsedMs(now, this.lastTime);
20462
20565
  const deltaTime = elapsed;
@@ -20723,5 +20826,5 @@ Captured output:
20723
20826
 
20724
20827
  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 };
20725
20828
 
20726
- //# debugId=2193DA33CB3F5D3964756E2164756E21
20727
- //# sourceMappingURL=index-8978gvk3.js.map
20829
+ //# debugId=9682C54D228A139264756E2164756E21
20830
+ //# sourceMappingURL=index-xsfpee0k.js.map