@simon_he/vue-tui 1.1.5 → 1.1.7

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.
Files changed (42) hide show
  1. package/README.md +1 -0
  2. package/dist/TAgentTerminalGraphic-B8-YZfuP.js +1198 -0
  3. package/dist/{TSelect-CMBOOFwK.js → TSelect-CCsjjCOr.js} +41 -12
  4. package/dist/{TTree-kk8ntrpg.js → TTree-3W5A2_EH.js} +4 -3
  5. package/dist/TVideo-D9AOiyq2.js +948 -0
  6. package/dist/agent.cjs +5204 -4312
  7. package/dist/agent.js +11 -9
  8. package/dist/{block-source-DhzajB9H.js → block-source-BhvdZomx.js} +246 -53
  9. package/dist/cli.cjs +41 -26
  10. package/dist/cli.js +68 -18
  11. package/dist/core.js +2 -2
  12. package/dist/experimental/browser.cjs +3705 -0
  13. package/dist/experimental/browser.d.cts +3 -0
  14. package/dist/experimental/browser.d.ts +3 -0
  15. package/dist/experimental/browser.js +413 -0
  16. package/dist/experimental.cjs +2 -1
  17. package/dist/experimental.js +9 -947
  18. package/dist/{linkify-CL9wwnZN.js → frame-mailbox-DaTrfyaF.js} +2 -297
  19. package/dist/index.cjs +25 -8
  20. package/dist/index.js +6 -5
  21. package/dist/linkify-CklfA1vp.js +298 -0
  22. package/dist/markdown.cjs +5196 -4322
  23. package/dist/markdown.js +4 -4
  24. package/dist/{mermaid-N3kGTHFy.js → mermaid-D0ov4_A1.js} +93 -9
  25. package/dist/mermaid.cjs +78 -7
  26. package/dist/mermaid.js +4 -4
  27. package/dist/{path-suggest-Dndu4dTi.js → path-suggest-fPzRsgPv.js} +1 -1
  28. package/dist/renderer/terminal-graphics.d.ts +1 -1
  29. package/dist/{terminal-graphics-2FTRg9x3.js → terminal-graphics-DpSL29OQ.js} +3 -3
  30. package/dist/{tlog-theme-B91Wv7Zj.js → tlog-theme-BnILsD3n.js} +10 -1203
  31. package/dist/vue/browser/types.d.ts +52 -0
  32. package/dist/vue/components/TAgentTerminalGraphic.d.ts +3 -0
  33. package/dist/vue/components/TBrowser.d.ts +231 -0
  34. package/dist/vue/components/TVirtualMarkdown.d.ts +10 -0
  35. package/dist/vue/markdown/render.d.ts +18 -1
  36. package/dist/vue.cjs +25 -8
  37. package/dist/vue.js +8 -7
  38. package/package.json +27 -2
  39. /package/dist/{TMermaidText-wLnMMvVS.js → TMermaidText-C1akgJPU.js} +0 -0
  40. /package/dist/{math-image-BZhmfUeu.js → math-image-CcUpBnW0.js} +0 -0
  41. /package/dist/{path-mnSgEpCm.js → path-BI9W15Zt.js} +0 -0
  42. /package/dist/{wheel-scroll-DASkEZr-.js → wheel-scroll-CQ22Hcyj.js} +0 -0
@@ -0,0 +1,52 @@
1
+ import type { TVideoFrame, TVideoFrameFormat } from "../video/types.js";
2
+ export type TBrowserModifiers = Readonly<{
3
+ ctrl: boolean;
4
+ shift: boolean;
5
+ alt: boolean;
6
+ meta: boolean;
7
+ }>;
8
+ export type TBrowserInputEvent = Readonly<{
9
+ type: "pointermove" | "pointerdown" | "pointerup";
10
+ x: number;
11
+ y: number;
12
+ button?: number;
13
+ buttons?: number;
14
+ modifiers: TBrowserModifiers;
15
+ }> | Readonly<{
16
+ type: "wheel";
17
+ x: number;
18
+ y: number;
19
+ deltaY: number;
20
+ modifiers: TBrowserModifiers;
21
+ }> | Readonly<{
22
+ type: "keydown" | "keyup";
23
+ key: string;
24
+ code: string;
25
+ repeat: boolean;
26
+ modifiers: TBrowserModifiers;
27
+ }> | Readonly<{
28
+ type: "text" | "paste";
29
+ text: string;
30
+ }>;
31
+ export type TBrowserSessionContext = Readonly<{
32
+ url: string;
33
+ signal: AbortSignal;
34
+ maxFps: number;
35
+ pixelWidth: number;
36
+ pixelHeight: number;
37
+ preferredFormat: TVideoFrameFormat;
38
+ onNavigate: (url: string) => void;
39
+ onTitleChange: (title: string) => void;
40
+ }>;
41
+ export type TBrowserSession = Readonly<{
42
+ frames: AsyncIterable<TVideoFrame>;
43
+ dispatch: (event: TBrowserInputEvent) => void | Promise<void>;
44
+ navigate?: (url: string) => void | Promise<void>;
45
+ back?: () => void | Promise<void>;
46
+ forward?: () => void | Promise<void>;
47
+ reload?: () => void | Promise<void>;
48
+ newPage?: () => void | Promise<void>;
49
+ closePage?: () => boolean | void | Promise<boolean | void>;
50
+ close: () => void | Promise<void>;
51
+ }>;
52
+ export type TBrowserSessionFactory = (context: TBrowserSessionContext) => TBrowserSession | Promise<TBrowserSession>;
@@ -155,6 +155,7 @@ export declare const tAgentTerminalGraphicProps: {
155
155
  readonly type: NumberConstructor;
156
156
  readonly default: 0;
157
157
  };
158
+ /** Advanced Kitty-only opt-in for moving an unchanged image via a reusable placement sequence. */
158
159
  readonly placementMoveWithoutClear: {
159
160
  readonly type: BooleanConstructor;
160
161
  readonly default: false;
@@ -278,6 +279,7 @@ export declare const TAgentTerminalGraphic: import("vue").DefineComponent<import
278
279
  readonly type: NumberConstructor;
279
280
  readonly default: 0;
280
281
  };
282
+ /** Advanced Kitty-only opt-in for moving an unchanged image via a reusable placement sequence. */
281
283
  readonly placementMoveWithoutClear: {
282
284
  readonly type: BooleanConstructor;
283
285
  readonly default: false;
@@ -401,6 +403,7 @@ export declare const TAgentTerminalGraphic: import("vue").DefineComponent<import
401
403
  readonly type: NumberConstructor;
402
404
  readonly default: 0;
403
405
  };
406
+ /** Advanced Kitty-only opt-in for moving an unchanged image via a reusable placement sequence. */
404
407
  readonly placementMoveWithoutClear: {
405
408
  readonly type: BooleanConstructor;
406
409
  readonly default: false;
@@ -0,0 +1,231 @@
1
+ import type { ExtractPublicPropTypes, PropType } from "vue";
2
+ import type { Style } from "../../core/types.js";
3
+ import type { TBrowserInputEvent, TBrowserSession, TBrowserSessionFactory } from "../browser/types.js";
4
+ import type { TVideoFrameEvent } from "../video/types.js";
5
+ export declare const tBrowserProps: {
6
+ readonly x: {
7
+ readonly type: NumberConstructor;
8
+ readonly required: true;
9
+ };
10
+ readonly y: {
11
+ readonly type: NumberConstructor;
12
+ readonly required: true;
13
+ };
14
+ readonly w: {
15
+ readonly type: NumberConstructor;
16
+ readonly required: true;
17
+ };
18
+ readonly h: {
19
+ readonly type: NumberConstructor;
20
+ readonly required: true;
21
+ };
22
+ readonly zIndex: {
23
+ readonly type: NumberConstructor;
24
+ readonly default: 0;
25
+ };
26
+ readonly url: {
27
+ readonly type: StringConstructor;
28
+ readonly required: true;
29
+ };
30
+ readonly sessionFactory: {
31
+ readonly type: PropType<TBrowserSessionFactory>;
32
+ readonly required: true;
33
+ };
34
+ readonly autoFocus: {
35
+ readonly type: BooleanConstructor;
36
+ readonly default: false;
37
+ };
38
+ readonly maxFps: {
39
+ readonly type: NumberConstructor;
40
+ readonly default: 60;
41
+ };
42
+ readonly pixelWidth: {
43
+ readonly type: NumberConstructor;
44
+ readonly default: undefined;
45
+ };
46
+ readonly pixelHeight: {
47
+ readonly type: NumberConstructor;
48
+ readonly default: undefined;
49
+ };
50
+ readonly fallback: {
51
+ readonly type: StringConstructor;
52
+ readonly default: "[browser requires terminal graphics]";
53
+ };
54
+ readonly style: {
55
+ readonly type: PropType<Style>;
56
+ readonly default: undefined;
57
+ };
58
+ readonly clear: {
59
+ readonly type: BooleanConstructor;
60
+ readonly default: true;
61
+ };
62
+ };
63
+ export type TBrowserProps = ExtractPublicPropTypes<typeof tBrowserProps>;
64
+ export declare const TBrowser: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
65
+ readonly x: {
66
+ readonly type: NumberConstructor;
67
+ readonly required: true;
68
+ };
69
+ readonly y: {
70
+ readonly type: NumberConstructor;
71
+ readonly required: true;
72
+ };
73
+ readonly w: {
74
+ readonly type: NumberConstructor;
75
+ readonly required: true;
76
+ };
77
+ readonly h: {
78
+ readonly type: NumberConstructor;
79
+ readonly required: true;
80
+ };
81
+ readonly zIndex: {
82
+ readonly type: NumberConstructor;
83
+ readonly default: 0;
84
+ };
85
+ readonly url: {
86
+ readonly type: StringConstructor;
87
+ readonly required: true;
88
+ };
89
+ readonly sessionFactory: {
90
+ readonly type: PropType<TBrowserSessionFactory>;
91
+ readonly required: true;
92
+ };
93
+ readonly autoFocus: {
94
+ readonly type: BooleanConstructor;
95
+ readonly default: false;
96
+ };
97
+ readonly maxFps: {
98
+ readonly type: NumberConstructor;
99
+ readonly default: 60;
100
+ };
101
+ readonly pixelWidth: {
102
+ readonly type: NumberConstructor;
103
+ readonly default: undefined;
104
+ };
105
+ readonly pixelHeight: {
106
+ readonly type: NumberConstructor;
107
+ readonly default: undefined;
108
+ };
109
+ readonly fallback: {
110
+ readonly type: StringConstructor;
111
+ readonly default: "[browser requires terminal graphics]";
112
+ };
113
+ readonly style: {
114
+ readonly type: PropType<Style>;
115
+ readonly default: undefined;
116
+ };
117
+ readonly clear: {
118
+ readonly type: BooleanConstructor;
119
+ readonly default: true;
120
+ };
121
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
122
+ [key: string]: any;
123
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
124
+ ready: (_session: TBrowserSession) => true;
125
+ frame: (_event: TVideoFrameEvent) => true;
126
+ navigate: (_url: string) => true;
127
+ titleChange: (_title: string) => true;
128
+ requestAddress: () => true;
129
+ close: () => true;
130
+ error: (_error: unknown) => true;
131
+ }, string, (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps), Readonly<import("vue").ExtractPropTypes<{
132
+ readonly x: {
133
+ readonly type: NumberConstructor;
134
+ readonly required: true;
135
+ };
136
+ readonly y: {
137
+ readonly type: NumberConstructor;
138
+ readonly required: true;
139
+ };
140
+ readonly w: {
141
+ readonly type: NumberConstructor;
142
+ readonly required: true;
143
+ };
144
+ readonly h: {
145
+ readonly type: NumberConstructor;
146
+ readonly required: true;
147
+ };
148
+ readonly zIndex: {
149
+ readonly type: NumberConstructor;
150
+ readonly default: 0;
151
+ };
152
+ readonly url: {
153
+ readonly type: StringConstructor;
154
+ readonly required: true;
155
+ };
156
+ readonly sessionFactory: {
157
+ readonly type: PropType<TBrowserSessionFactory>;
158
+ readonly required: true;
159
+ };
160
+ readonly autoFocus: {
161
+ readonly type: BooleanConstructor;
162
+ readonly default: false;
163
+ };
164
+ readonly maxFps: {
165
+ readonly type: NumberConstructor;
166
+ readonly default: 60;
167
+ };
168
+ readonly pixelWidth: {
169
+ readonly type: NumberConstructor;
170
+ readonly default: undefined;
171
+ };
172
+ readonly pixelHeight: {
173
+ readonly type: NumberConstructor;
174
+ readonly default: undefined;
175
+ };
176
+ readonly fallback: {
177
+ readonly type: StringConstructor;
178
+ readonly default: "[browser requires terminal graphics]";
179
+ };
180
+ readonly style: {
181
+ readonly type: PropType<Style>;
182
+ readonly default: undefined;
183
+ };
184
+ readonly clear: {
185
+ readonly type: BooleanConstructor;
186
+ readonly default: true;
187
+ };
188
+ }>> & Readonly<{
189
+ onClose?: (() => any) | undefined;
190
+ onError?: ((_error: unknown) => any) | undefined;
191
+ onFrame?: ((_event: Readonly<{
192
+ timestampMs: number;
193
+ pixelWidth: number;
194
+ pixelHeight: number;
195
+ droppedFrames: number;
196
+ durationMs?: number;
197
+ playbackRate?: import("../video/types.js").TVideoPlaybackRate;
198
+ }>) => any) | undefined;
199
+ onReady?: ((_session: Readonly<{
200
+ frames: AsyncIterable<import("../video/types.js").TVideoFrame>;
201
+ dispatch: (event: TBrowserInputEvent) => void | Promise<void>;
202
+ navigate?: (url: string) => void | Promise<void>;
203
+ back?: () => void | Promise<void>;
204
+ forward?: () => void | Promise<void>;
205
+ reload?: () => void | Promise<void>;
206
+ newPage?: () => void | Promise<void>;
207
+ closePage?: () => boolean | void | Promise<boolean | void>;
208
+ close: () => void | Promise<void>;
209
+ }>) => any) | undefined;
210
+ onNavigate?: ((_url: string) => any) | undefined;
211
+ onTitleChange?: ((_title: string) => any) | undefined;
212
+ onRequestAddress?: (() => any) | undefined;
213
+ }>, {
214
+ readonly style: Readonly<{
215
+ fg?: string;
216
+ bg?: string;
217
+ bold?: boolean;
218
+ dim?: boolean;
219
+ italic?: boolean;
220
+ underline?: boolean;
221
+ inverse?: boolean;
222
+ href?: string;
223
+ }>;
224
+ readonly zIndex: number;
225
+ readonly clear: boolean;
226
+ readonly fallback: string;
227
+ readonly autoFocus: boolean;
228
+ readonly maxFps: number;
229
+ readonly pixelWidth: number;
230
+ readonly pixelHeight: number;
231
+ }, {}>;
@@ -3,6 +3,7 @@ import type { Style } from "../../core/types.js";
3
3
  import type { Rect, TerminalKeyboardEvent } from "../../events/manager/types.js";
4
4
  import { type TuiMarkdownThemeOverrides } from "../markdown/theme.js";
5
5
  import type { TuiMarkdownBlock, TuiMarkdownImageActionPayload, TuiMarkdownImageResolver, TuiMarkdownLinkActionPayload, TuiMarkdownMathActionPayload } from "../markdown/types.js";
6
+ import type { TVirtualRowsRowScrollMode } from "./TVirtualRows.js";
6
7
  export declare const TVirtualMarkdown: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
7
8
  x: {
8
9
  type: NumberConstructor;
@@ -132,6 +133,10 @@ export declare const TVirtualMarkdown: import("vue").DefineComponent<import("vue
132
133
  type: PropType<readonly Rect[]>;
133
134
  default: undefined;
134
135
  };
136
+ rowScrollMode: {
137
+ type: PropType<TVirtualRowsRowScrollMode>;
138
+ default: string;
139
+ };
135
140
  }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
136
141
  [key: string]: any;
137
142
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
@@ -272,6 +277,10 @@ export declare const TVirtualMarkdown: import("vue").DefineComponent<import("vue
272
277
  type: PropType<readonly Rect[]>;
273
278
  default: undefined;
274
279
  };
280
+ rowScrollMode: {
281
+ type: PropType<TVirtualRowsRowScrollMode>;
282
+ default: string;
283
+ };
275
284
  }>> & Readonly<{
276
285
  onKeydown?: ((_event: TerminalKeyboardEvent) => any) | undefined;
277
286
  onFocus?: (() => any) | undefined;
@@ -355,6 +364,7 @@ export declare const TVirtualMarkdown: import("vue").DefineComponent<import("vue
355
364
  content: string;
356
365
  final: boolean;
357
366
  streaming: boolean;
367
+ rowScrollMode: TVirtualRowsRowScrollMode;
358
368
  scrollTop: number;
359
369
  customHtmlTags: readonly string[];
360
370
  theme: Readonly<Partial<{
@@ -1,6 +1,7 @@
1
1
  import type { Style, Terminal } from "../../core/types.js";
2
2
  import type { TuiMarkdownVisualRow } from "./types.js";
3
- export declare function markdownImageGraphicId(segment: NonNullable<TuiMarkdownVisualRow["segments"][number]["graphic"]>, identity: string): string;
3
+ type MarkdownImageGraphic = NonNullable<TuiMarkdownVisualRow["segments"][number]["graphic"]>;
4
+ export declare function markdownImageGraphicId(segment: MarkdownImageGraphic, identity: string): string;
4
5
  export declare function clearMarkdownImageGraphics(terminal: Terminal, rect?: Readonly<{
5
6
  x: number;
6
7
  y: number;
@@ -21,6 +22,20 @@ export declare function collectVisibleMarkdownImageGraphicIds(rows: readonly Tui
21
22
  h: number;
22
23
  }>) => boolean;
23
24
  }>): ReadonlySet<string>;
25
+ export declare function queueClippedVisibleMarkdownImageGraphics(terminal: Terminal, rows: readonly TuiMarkdownVisualRow[], options: Readonly<{
26
+ x: number;
27
+ y: number;
28
+ w: number;
29
+ h: number;
30
+ rowOffset: number;
31
+ clipStart: number;
32
+ isGraphicCovered?: (rect: Readonly<{
33
+ x: number;
34
+ y: number;
35
+ w: number;
36
+ h: number;
37
+ }>) => boolean;
38
+ }>): ReadonlySet<string>;
24
39
  export declare function paintMarkdownVisualRow(terminal: Terminal, row: TuiMarkdownVisualRow | undefined, options: Readonly<{
25
40
  x: number;
26
41
  y: number;
@@ -29,6 +44,7 @@ export declare function paintMarkdownVisualRow(terminal: Terminal, row: TuiMarkd
29
44
  baseStyle: Style;
30
45
  clear?: boolean;
31
46
  keepGraphicIds?: ReadonlySet<string>;
47
+ prequeuedGraphicIds?: ReadonlySet<string>;
32
48
  isGraphicCovered?: (rect: Readonly<{
33
49
  x: number;
34
50
  y: number;
@@ -36,3 +52,4 @@ export declare function paintMarkdownVisualRow(terminal: Terminal, row: TuiMarkd
36
52
  h: number;
37
53
  }>) => boolean;
38
54
  }>): void;
55
+ export {};
package/dist/vue.cjs CHANGED
@@ -4481,21 +4481,32 @@ var nextImeOwnerId = 0, nextPasteImageId = 0, TInput = (0, import_vue15.defineCo
4481
4481
  let hasValue = getValue().length > 0, hasMentions = (props.mentions?.length ?? 0) > 0, hasMultiline = (props.multilineTexts?.length ?? 0) > 0;
4482
4482
  !hasValue && !hasMentions && !hasMultiline || (anchor.value = null, hasMentions && emitMentions([]), hasMultiline && emit("update:multilineTexts", []), hasValue || cursor.value !== 0 ? (pushUndoSnapshot(""), applyEdit("", 0)) : (ensureCursorVisible(), syncImeAnchorNow(), scheduler.invalidate()));
4483
4483
  }
4484
- function deleteSelectionIfAny(value) {
4485
- let sel = selection.value;
4486
- if (!sel)
4484
+ function deleteRangeIfAny(value, start, end) {
4485
+ let from = clamp2(Math.min(start, end), 0, value.length), to = clamp2(Math.max(start, end), 0, value.length);
4486
+ if (to <= from)
4487
4487
  return { value, cursor: cursor.value, deleted: !1 };
4488
- let tokenStart = countMultilineTokens2(value, sel.start), tokenEnd = countMultilineTokens2(value, sel.end);
4488
+ let tokenStart = countMultilineTokens2(value, from), tokenEnd = countMultilineTokens2(value, to);
4489
4489
  if (tokenEnd > tokenStart) {
4490
4490
  let current = props.multilineTexts ?? [], nextMultiline = [...current.slice(0, tokenStart), ...current.slice(tokenEnd)];
4491
4491
  emit("update:multilineTexts", nextMultiline);
4492
4492
  }
4493
- let mentionStart = countMentionTokens3(value, sel.start), mentionEnd = countMentionTokens3(value, sel.end);
4493
+ let mentionStart = countMentionTokens3(value, from), mentionEnd = countMentionTokens3(value, to);
4494
4494
  if (mentionEnd > mentionStart) {
4495
4495
  let current = pendingMentions.value ?? props.mentions ?? [], nextMentions = [...current.slice(0, mentionStart), ...current.slice(mentionEnd)];
4496
4496
  emitMentions(nextMentions);
4497
4497
  }
4498
- return { value: value.slice(0, sel.start) + value.slice(sel.end), cursor: sel.start, deleted: !0 };
4498
+ return { value: value.slice(0, from) + value.slice(to), cursor: from, deleted: !0 };
4499
+ }
4500
+ function deleteSelectionIfAny(value) {
4501
+ let sel = selection.value;
4502
+ return sel ? deleteRangeIfAny(value, sel.start, sel.end) : { value, cursor: cursor.value, deleted: !1 };
4503
+ }
4504
+ function deleteToLineBoundary(value, direction) {
4505
+ let sel = selection.value;
4506
+ if (sel)
4507
+ return deleteRangeIfAny(value, sel.start, sel.end);
4508
+ let { line, lines } = indexToLineCellCol(value, cursor.value), target = direction === "start" ? lines[line].start : lines[line].end;
4509
+ return deleteRangeIfAny(value, cursor.value, target);
4499
4510
  }
4500
4511
  function insertText(rawText) {
4501
4512
  let text = rawText || "";
@@ -5051,7 +5062,13 @@ var nextImeOwnerId = 0, nextPasteImageId = 0, TInput = (0, import_vue15.defineCo
5051
5062
  }
5052
5063
  return;
5053
5064
  }
5054
- let clearWithDeleteOrBackspace = !!(!e.altKey && (e.ctrlKey && !e.metaKey || e.metaKey && !e.ctrlKey));
5065
+ let clearWithDeleteOrBackspace = !!(!e.altKey && e.ctrlKey && !e.metaKey);
5066
+ if (e.metaKey && !e.ctrlKey && !e.altKey && (e.key === "Backspace" || e.key === "Delete")) {
5067
+ e.preventDefault(), e.stopPropagation();
5068
+ let next = deleteToLineBoundary(value, e.key === "Backspace" ? "start" : "end");
5069
+ next.deleted && (pushUndoSnapshot(next.value), applyEdit(next.value, next.cursor));
5070
+ return;
5071
+ }
5055
5072
  if (e.key === "Delete" && clearWithDeleteOrBackspace) {
5056
5073
  e.preventDefault(), e.stopPropagation(), clearAll();
5057
5074
  return;
@@ -5509,7 +5526,7 @@ var nextImeOwnerId = 0, nextPasteImageId = 0, TInput = (0, import_vue15.defineCo
5509
5526
  }
5510
5527
  }
5511
5528
  })), (0, import_vue15.onBeforeUnmount)(() => {
5512
- stopBlink();
5529
+ stopBlink(), imeAnchor?.value?.ownerId === imeOwnerId && (imeAnchor.value = null);
5513
5530
  }), () => (0, import_vue15.h)("span", rootProps);
5514
5531
  }
5515
5532
  });
package/dist/vue.js CHANGED
@@ -3,19 +3,20 @@ import "./ansi-palette-BHF1rN7R.js";
3
3
  import "./hyperlink-clbb_ha_.js";
4
4
  import "./dom-renderer-BfwAEQMf.js";
5
5
  import { EventZIndexContextKey, LayoutContextKey, RenderStackKey, TInputPluginsContextKey, TPathPickerProviderContextKey, VisibilityContextKey, injectionKey, intersectRect, padEndByCells$1 as padEndByCells, repeatChar, sanitizeInlineText, sanitizeTextBlock, sliceByCells, sliceByCellsRange, spaces, textCellWidth$1 as textCellWidth, translateRect, useLayout, useRenderNode, useRenderStack, useTerminal, useTerminalNode, useVisibility, wrapByCells } from "./rect-JzWMJxxc.js";
6
- import { TText, TView, clamp, createTheme, fitCellText, linkifyTextSegments, mergeStyle, tuiDefaultTheme } from "./linkify-CL9wwnZN.js";
6
+ import { clamp, createTheme, fitCellText, linkifyTextSegments, mergeStyle, tuiDefaultTheme } from "./linkify-CklfA1vp.js";
7
7
  import "./runtime-Byf8XXOT.js";
8
8
  import "./frame-perf-CHpWhbC4.js";
9
9
  import "./trace-Bh8WnoMo.js";
10
10
  import "./env-Cl8qmNFN.js";
11
- import { TAutocompleteInput, TBadge, TCheckbox, TCode, TDataTable, TDivider, TForm, TFormContextKey, TFormField, TLink, TLinkifyText, TList, TPasswordInput, TProgress, TRadioGroup, TSlider, TSpinner, TSwitch, TTable, TTag, TToastViewport, TTree, TerminalProvider, createTInputHostPlugin, useTForm } from "./TTree-kk8ntrpg.js";
11
+ import { TAutocompleteInput, TBadge, TCheckbox, TCode, TDataTable, TDivider, TForm, TFormContextKey, TFormField, TLink, TLinkifyText, TList, TPasswordInput, TProgress, TRadioGroup, TSlider, TSpinner, TSwitch, TTable, TTag, TToastViewport, TTree, TerminalProvider, createTInputHostPlugin, useTForm } from "./TTree-3W5A2_EH.js";
12
12
  import "./terminal-selection-4W1SJj4c.js";
13
13
  import "./debug-logger-CmsGI4of.js";
14
- import { TBox, TCommandPalette, TDialog, TInput, TRenderPlane, TSelect, clamp$1, computeCommandPaletteMatchRanges, createOverlayFocusStack, isCommitMention, isWhitespace, mentionChipStyle, padEndByCells as padEndByCells$1, resolveOverlayPlacement, sliceByCellsWindow, textCellWidth as textCellWidth$1 } from "./TSelect-CMBOOFwK.js";
15
- import { normalizePath, stripTrailingSlash } from "./path-mnSgEpCm.js";
16
- import { applyWheelScroll, createWheelScrollState } from "./wheel-scroll-DASkEZr-.js";
17
- import { parsePathQuery, resolveUserPath, suggestPaths } from "./path-suggest-Dndu4dTi.js";
18
- import { TMermaid$1 as TMermaid, TMermaidText$1 as TMermaidText, isSimpleMermaidFlowchartSource, markMermaidRenderErrorFatal } from "./TMermaidText-wLnMMvVS.js";
14
+ import { TBox, TCommandPalette, TDialog, TInput, TRenderPlane, TSelect, clamp$1, computeCommandPaletteMatchRanges, createOverlayFocusStack, isCommitMention, isWhitespace, mentionChipStyle, padEndByCells as padEndByCells$1, resolveOverlayPlacement, sliceByCellsWindow, textCellWidth as textCellWidth$1 } from "./TSelect-CCsjjCOr.js";
15
+ import { TText, TView } from "./frame-mailbox-DaTrfyaF.js";
16
+ import { normalizePath, stripTrailingSlash } from "./path-BI9W15Zt.js";
17
+ import { applyWheelScroll, createWheelScrollState } from "./wheel-scroll-CQ22Hcyj.js";
18
+ import { parsePathQuery, resolveUserPath, suggestPaths } from "./path-suggest-fPzRsgPv.js";
19
+ import { TMermaid$1 as TMermaid, TMermaidText$1 as TMermaidText, isSimpleMermaidFlowchartSource, markMermaidRenderErrorFatal } from "./TMermaidText-C1akgJPU.js";
19
20
  import { Comment, Fragment, computed, defineComponent, h, inject, onBeforeUnmount, onMounted, onUnmounted, provide, reactive, ref, shallowReactive, shallowRef, watch, watchEffect } from "vue";
20
21
 
21
22
  //#region src/observability/cli-latency.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simon_he/vue-tui",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "description": "Vue 3 terminal UI components and renderers for browser DOM, CLI stdout, logs, markdown transcripts, and agent consoles",
5
5
  "keywords": [
6
6
  "agent-console",
@@ -85,6 +85,9 @@
85
85
  "experimental": [
86
86
  "./dist/experimental.d.ts"
87
87
  ],
88
+ "experimental/browser": [
89
+ "./dist/experimental/browser.d.ts"
90
+ ],
88
91
  "experimental/video/node": [
89
92
  "./dist/experimental/video/node.d.ts"
90
93
  ],
@@ -190,6 +193,16 @@
190
193
  "default": "./dist/experimental.cjs"
191
194
  }
192
195
  },
196
+ "./experimental/browser": {
197
+ "import": {
198
+ "types": "./dist/experimental/browser.d.ts",
199
+ "default": "./dist/experimental/browser.js"
200
+ },
201
+ "require": {
202
+ "types": "./dist/experimental/browser.d.cts",
203
+ "default": "./dist/experimental/browser.cjs"
204
+ }
205
+ },
193
206
  "./experimental/video/node": {
194
207
  "import": {
195
208
  "types": "./dist/experimental/video/node.d.ts",
@@ -246,7 +259,7 @@
246
259
  "access": "public"
247
260
  },
248
261
  "dependencies": {
249
- "stream-markdown-parser": "1.2.3"
262
+ "stream-markdown-parser": "1.2.12"
250
263
  },
251
264
  "devDependencies": {
252
265
  "@arethetypeswrong/core": "^0.18.5",
@@ -346,6 +359,17 @@
346
359
  "example:3d:smoke": "VT_SMOKE=1 bun examples/t3d-terminal-badge.ts",
347
360
  "run:flappy:terminal": "tsx examples/flappy-bird-terminal.ts",
348
361
  "example:flappy:smoke": "VT_SMOKE=1 tsx examples/flappy-bird-terminal.ts",
362
+ "run:contra:terminal": "tsx examples/contra-graphics-terminal.ts",
363
+ "example:contra:smoke": "VT_SMOKE=1 tsx examples/contra-graphics-terminal.ts",
364
+ "run:contra-text:terminal": "tsx examples/contra-terminal.ts",
365
+ "example:contra-text:smoke": "VT_SMOKE=1 tsx examples/contra-terminal.ts",
366
+ "run:nes:terminal": "tsx examples/nes-terminal.ts",
367
+ "run:browser:terminal": "tsx examples/browser-component-demo.ts",
368
+ "example:nes:smoke": "VT_SMOKE=1 tsx examples/nes-terminal.ts",
369
+ "check:nes:rom": "tsx examples/nes/check-rom.ts",
370
+ "check:nes:input": "tsx examples/nes/input-flip-check.ts",
371
+ "check:nes:share": "tsx examples/nes/share-check.ts",
372
+ "check:nes:share-browser": "tsx examples/nes/share-browser-check.ts",
349
373
  "test:3d:bun": "bun scripts/smoke-bun-3d.ts",
350
374
  "run:image-showcase:terminal": "tsx examples/image-showcase.ts",
351
375
  "run:katex-showcase:terminal": "tsx examples/katex-showcase.ts",
@@ -413,6 +437,7 @@
413
437
  "bench:baseline:timing": "BENCH_TIMING=1 tsx scripts/check-bench-baselines.ts",
414
438
  "bench:phase2": "tsx scripts/bench-phase2.ts",
415
439
  "bench:scroll-mailbox": "tsx scripts/bench-scroll-mailbox.ts",
440
+ "bench:markdown-graphics": "tsx scripts/bench-markdown-graphics.ts",
416
441
  "bench:stdout-column-diff": "tsx scripts/bench-stdout-column-diff.ts",
417
442
  "unicode:eaw:generate": "tsx scripts/generate-eaw-ranges.ts",
418
443
  "unicode:eaw:check": "tsx scripts/generate-eaw-ranges.ts && git diff --exit-code -- src/core/buffer/eaw-ranges-unicode-17.ts",
File without changes