@simon_he/vue-tui 1.0.2 → 1.1.1

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 (104) hide show
  1. package/README.md +44 -26
  2. package/dist/TMermaidText-CXm_L969.js +885 -0
  3. package/dist/{TSelect-DR0FomSu.js → TSelect-CiyMvwl-.js} +60 -81
  4. package/dist/{TTree-kzhlB5P0.js → TTree-DKGiuIcM.js} +140 -103
  5. package/dist/agent/mermaid.cjs +2 -0
  6. package/dist/agent/mermaid.d.cts +2 -0
  7. package/dist/agent/mermaid.d.ts +2 -0
  8. package/dist/agent/mermaid.js +1 -0
  9. package/dist/agent.cjs +31184 -24907
  10. package/dist/agent.d.cts +11 -1
  11. package/dist/agent.d.ts +11 -1
  12. package/dist/agent.js +1700 -13
  13. package/dist/block-source-5CQp4tF8.js +3230 -0
  14. package/dist/cli/stdin-buffer.d.ts +1 -1
  15. package/dist/cli.cjs +5037 -6767
  16. package/dist/cli.d.cts +4 -0
  17. package/dist/cli.d.ts +4 -0
  18. package/dist/cli.js +2733 -148
  19. package/dist/core/buffer/eaw-ranges-unicode-17.d.ts +14 -0
  20. package/dist/core/perf/instrumentation-noop.d.ts +48 -0
  21. package/dist/core/perf/instrumentation.d.ts +136 -0
  22. package/dist/core/terminal/create-terminal.d.ts +1 -0
  23. package/dist/core.cjs +843 -1469
  24. package/dist/core.js +6 -6
  25. package/dist/{create-terminal-DBFNYr8f.js → create-terminal-DXuZ2fci.js} +39 -13
  26. package/dist/debug-logger-ChY_PXVk.js +74 -0
  27. package/dist/{dom-renderer-BniJSQyX.js → dom-renderer-DNzmg2As.js} +2 -2
  28. package/dist/experimental.cjs +4115 -5928
  29. package/dist/experimental.d.cts +2 -0
  30. package/dist/experimental.d.ts +2 -0
  31. package/dist/experimental.js +1490 -9
  32. package/dist/frame-perf-BBhE-iuS.js +111 -0
  33. package/dist/{sgr-BmzxEjAO.js → hyperlink-B35-O-cW.js} +100 -1
  34. package/dist/index.cjs +5017 -10339
  35. package/dist/index.js +16 -14
  36. package/dist/{linkify-D_gzn9Xq.js → linkify-CuuquMQT.js} +32 -3
  37. package/dist/markdown.cjs +21295 -12691
  38. package/dist/markdown.d.cts +1 -1
  39. package/dist/markdown.d.ts +1 -1
  40. package/dist/markdown.js +211 -51
  41. package/dist/mermaid-CWto52Wk.js +123 -0
  42. package/dist/mermaid.cjs +1707 -0
  43. package/dist/mermaid.d.cts +3 -0
  44. package/dist/mermaid.d.ts +3 -0
  45. package/dist/mermaid.js +6 -0
  46. package/dist/observability/frame-perf-store.d.ts +2 -1
  47. package/dist/observability/frame-perf.d.ts +33 -0
  48. package/dist/observability.cjs +106 -107
  49. package/dist/observability.d.cts +2 -2
  50. package/dist/observability.d.ts +2 -2
  51. package/dist/observability.js +3 -3
  52. package/dist/{path-suggest-BNqcuE3-.js → path-suggest-fPzRsgPv.js} +1 -1
  53. package/dist/{wheel-scroll-vBRaQ7p-.js → rect-Ng-3eKzF.js} +253 -117
  54. package/dist/renderer/cli/stdout-metrics.d.ts +10 -0
  55. package/dist/renderer/cli/stdout-renderer.d.ts +3 -0
  56. package/dist/renderer/terminal-graphic-render-queue.d.ts +50 -0
  57. package/dist/renderer/terminal-graphics-trace.d.ts +53 -0
  58. package/dist/renderer/terminal-graphics.d.ts +146 -0
  59. package/dist/renderer-dom.cjs +364 -903
  60. package/dist/renderer-dom.js +4 -4
  61. package/dist/runtime/index.d.ts +2 -0
  62. package/dist/{runtime-rfcZCyJq.js → runtime-D77C03RM.js} +28 -15
  63. package/dist/runtime.cjs +427 -889
  64. package/dist/runtime.js +2 -2
  65. package/dist/{terminal-selection-DBinO6p5.js → terminal-selection-CQYr--26.js} +4 -1
  66. package/dist/{tlog-theme-CvLFNMwk.js → tlog-theme-CopRt9SC.js} +37 -6
  67. package/dist/{trace-CjzYeIxN.js → trace-CYHDKM1m.js} +5 -0
  68. package/dist/vue/agent/create-png-terminal-graphic-renderer.d.ts +19 -0
  69. package/dist/vue/components/TAgentTerminalGraphic.d.ts +481 -0
  70. package/dist/vue/components/TCharts.d.ts +1121 -0
  71. package/dist/vue/components/TFeedback.d.ts +1 -1
  72. package/dist/vue/components/TFlex.d.ts +389 -0
  73. package/dist/vue/components/TForm.d.ts +4 -4
  74. package/dist/vue/components/TLogSearchBar.d.ts +3 -3
  75. package/dist/vue/components/TLogSearchPager.d.ts +2 -2
  76. package/dist/vue/components/TMarkdownText.d.ts +162 -4
  77. package/dist/vue/components/TMermaidText.d.ts +900 -0
  78. package/dist/vue/components/TVirtualList.d.ts +9 -0
  79. package/dist/vue/components/TVirtualMarkdown.d.ts +170 -9
  80. package/dist/vue/components/TVirtualRows.d.ts +9 -0
  81. package/dist/vue/components/TerminalProvider.d.ts +2 -0
  82. package/dist/vue/context.d.ts +24 -0
  83. package/dist/vue/index.d.ts +5 -0
  84. package/dist/vue/layout/flex.d.ts +67 -0
  85. package/dist/vue/markdown/ast.d.ts +5 -2
  86. package/dist/vue/markdown/document.d.ts +5 -0
  87. package/dist/vue/markdown/image-actions.d.ts +14 -0
  88. package/dist/vue/markdown/image.d.ts +11 -0
  89. package/dist/vue/markdown/link-actions.d.ts +14 -0
  90. package/dist/vue/markdown/math-actions.d.ts +14 -0
  91. package/dist/vue/markdown/math.d.ts +6 -0
  92. package/dist/vue/markdown/render.d.ts +28 -0
  93. package/dist/vue/markdown/types.d.ts +78 -0
  94. package/dist/vue/mermaid/beautiful-mermaid.d.ts +1436 -0
  95. package/dist/vue/render/render-manager.d.ts +7 -0
  96. package/dist/vue.cjs +7207 -12437
  97. package/dist/vue.js +706 -39
  98. package/dist/wheel-scroll-CQ22Hcyj.js +106 -0
  99. package/dist/{hyperlink-Bn02UXJb.js → width-GqllnV8C.js} +166 -111
  100. package/package.json +85 -14
  101. package/dist/block-source-CKUOnkgT.js +0 -1663
  102. package/dist/frame-perf-C6Xfg85O.js +0 -24
  103. /package/dist/{env-Cl8qmNFN.js → env-DNCzvX8b.js} +0 -0
  104. /package/dist/{path-mnSgEpCm.js → path-BI9W15Zt.js} +0 -0
@@ -70,6 +70,10 @@ export declare const TVirtualList: import("vue").DefineComponent<import("vue").E
70
70
  type: PropType<RowScrollMode>;
71
71
  default: string;
72
72
  };
73
+ terminalGraphicScrollIdleMs: {
74
+ type: NumberConstructor;
75
+ default: number;
76
+ };
73
77
  }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
74
78
  [key: string]: any;
75
79
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("keydown" | "focus" | "blur" | "change" | "scroll" | "update:modelValue" | "update:scrollTop" | "itemClick")[], "keydown" | "focus" | "blur" | "change" | "scroll" | "update:modelValue" | "update:scrollTop" | "itemClick", (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps), Readonly<import("vue").ExtractPropTypes<{
@@ -141,6 +145,10 @@ export declare const TVirtualList: import("vue").DefineComponent<import("vue").E
141
145
  type: PropType<RowScrollMode>;
142
146
  default: string;
143
147
  };
148
+ terminalGraphicScrollIdleMs: {
149
+ type: NumberConstructor;
150
+ default: number;
151
+ };
144
152
  }>> & Readonly<{
145
153
  onKeydown?: ((...args: any[]) => any) | undefined;
146
154
  onFocus?: ((...args: any[]) => any) | undefined;
@@ -179,4 +187,5 @@ export declare const TVirtualList: import("vue").DefineComponent<import("vue").E
179
187
  href?: string;
180
188
  }>;
181
189
  selectionText: (item: unknown, index: number) => string;
190
+ terminalGraphicScrollIdleMs: number;
182
191
  }, {}>;
@@ -1,7 +1,8 @@
1
1
  import type { PropType } from "vue";
2
2
  import type { Style } from "../../core/types.js";
3
+ import type { Rect, TerminalKeyboardEvent } from "../../events/manager/types.js";
3
4
  import { type TuiMarkdownThemeOverrides } from "../markdown/theme.js";
4
- import type { TuiMarkdownBlock } from "../markdown/types.js";
5
+ import type { TuiMarkdownBlock, TuiMarkdownImageActionPayload, TuiMarkdownImageResolver, TuiMarkdownLinkActionPayload, TuiMarkdownMathActionPayload } from "../markdown/types.js";
5
6
  export declare const TVirtualMarkdown: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
6
7
  x: {
7
8
  type: NumberConstructor;
@@ -63,9 +64,58 @@ export declare const TVirtualMarkdown: import("vue").DefineComponent<import("vue
63
64
  type: PropType<TuiMarkdownThemeOverrides>;
64
65
  default: undefined;
65
66
  };
67
+ imageRenderer: {
68
+ type: PropType<TuiMarkdownImageResolver>;
69
+ default: undefined;
70
+ };
71
+ imageMinWidth: {
72
+ type: NumberConstructor;
73
+ default: undefined;
74
+ };
75
+ imageMaxWidth: {
76
+ type: NumberConstructor;
77
+ default: undefined;
78
+ };
79
+ imageMinHeight: {
80
+ type: NumberConstructor;
81
+ default: undefined;
82
+ };
83
+ imageMaxHeight: {
84
+ type: NumberConstructor;
85
+ default: undefined;
86
+ };
87
+ imagePreserveAspectRatio: {
88
+ type: BooleanConstructor;
89
+ default: boolean;
90
+ };
91
+ imageActions: {
92
+ type: BooleanConstructor;
93
+ default: boolean;
94
+ };
95
+ mathActions: {
96
+ type: BooleanConstructor;
97
+ default: boolean;
98
+ };
99
+ linkActions: {
100
+ type: BooleanConstructor;
101
+ default: boolean;
102
+ };
103
+ imageOcclusionRects: {
104
+ type: PropType<readonly Rect[]>;
105
+ default: undefined;
106
+ };
66
107
  }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
67
108
  [key: string]: any;
68
- }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("keydown" | "focus" | "blur" | "scroll" | "update:scrollTop")[], "keydown" | "focus" | "blur" | "scroll" | "update:scrollTop", (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps), Readonly<import("vue").ExtractPropTypes<{
109
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
110
+ "update:scrollTop": (_value: number) => true;
111
+ scroll: (_value: number) => true;
112
+ focus: () => true;
113
+ blur: () => true;
114
+ keydown: (_event: TerminalKeyboardEvent) => true;
115
+ imageAction: (_payload: TuiMarkdownImageActionPayload) => true;
116
+ mathAction: (_payload: TuiMarkdownMathActionPayload) => true;
117
+ linkAction: (_payload: TuiMarkdownLinkActionPayload) => true;
118
+ }, string, (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps), Readonly<import("vue").ExtractPropTypes<{
69
119
  x: {
70
120
  type: NumberConstructor;
71
121
  required: true;
@@ -126,12 +176,108 @@ export declare const TVirtualMarkdown: import("vue").DefineComponent<import("vue
126
176
  type: PropType<TuiMarkdownThemeOverrides>;
127
177
  default: undefined;
128
178
  };
179
+ imageRenderer: {
180
+ type: PropType<TuiMarkdownImageResolver>;
181
+ default: undefined;
182
+ };
183
+ imageMinWidth: {
184
+ type: NumberConstructor;
185
+ default: undefined;
186
+ };
187
+ imageMaxWidth: {
188
+ type: NumberConstructor;
189
+ default: undefined;
190
+ };
191
+ imageMinHeight: {
192
+ type: NumberConstructor;
193
+ default: undefined;
194
+ };
195
+ imageMaxHeight: {
196
+ type: NumberConstructor;
197
+ default: undefined;
198
+ };
199
+ imagePreserveAspectRatio: {
200
+ type: BooleanConstructor;
201
+ default: boolean;
202
+ };
203
+ imageActions: {
204
+ type: BooleanConstructor;
205
+ default: boolean;
206
+ };
207
+ mathActions: {
208
+ type: BooleanConstructor;
209
+ default: boolean;
210
+ };
211
+ linkActions: {
212
+ type: BooleanConstructor;
213
+ default: boolean;
214
+ };
215
+ imageOcclusionRects: {
216
+ type: PropType<readonly Rect[]>;
217
+ default: undefined;
218
+ };
129
219
  }>> & Readonly<{
130
- onKeydown?: ((...args: any[]) => any) | undefined;
131
- onFocus?: ((...args: any[]) => any) | undefined;
132
- onBlur?: ((...args: any[]) => any) | undefined;
133
- onScroll?: ((...args: any[]) => any) | undefined;
134
- "onUpdate:scrollTop"?: ((...args: any[]) => any) | undefined;
220
+ onKeydown?: ((_event: TerminalKeyboardEvent) => any) | undefined;
221
+ onFocus?: (() => any) | undefined;
222
+ onBlur?: (() => any) | undefined;
223
+ onScroll?: ((_value: number) => any) | undefined;
224
+ "onUpdate:scrollTop"?: ((_value: number) => any) | undefined;
225
+ onMathAction?: ((_payload: Readonly<{
226
+ math: Readonly<{
227
+ source: string;
228
+ raw: string;
229
+ rendered: boolean;
230
+ }>;
231
+ rect: Readonly<{
232
+ x: number;
233
+ y: number;
234
+ w: number;
235
+ h: number;
236
+ }>;
237
+ cellX: number;
238
+ cellY: number;
239
+ rowIndex: number;
240
+ segmentIndex: number;
241
+ }>) => any) | undefined;
242
+ onImageAction?: ((_payload: Readonly<{
243
+ image: Readonly<{
244
+ kind: "image";
245
+ src: string;
246
+ alt?: string;
247
+ mime?: string;
248
+ base64?: string;
249
+ originalBase64?: string;
250
+ originalMime?: string;
251
+ naturalWidth?: number;
252
+ naturalHeight?: number;
253
+ displayWidth?: number;
254
+ displayHeight?: number;
255
+ }>;
256
+ rect: Readonly<{
257
+ x: number;
258
+ y: number;
259
+ w: number;
260
+ h: number;
261
+ }>;
262
+ cellX: number;
263
+ cellY: number;
264
+ rowIndex: number;
265
+ segmentIndex: number;
266
+ }>) => any) | undefined;
267
+ onLinkAction?: ((_payload: Readonly<{
268
+ href: string;
269
+ text: string;
270
+ rect: Readonly<{
271
+ x: number;
272
+ y: number;
273
+ w: number;
274
+ h: number;
275
+ }>;
276
+ cellX: number;
277
+ cellY: number;
278
+ rowIndex: number;
279
+ segmentIndex: number;
280
+ }>) => any) | undefined;
135
281
  }>, {
136
282
  style: Readonly<{
137
283
  fg?: string;
@@ -147,9 +293,10 @@ export declare const TVirtualMarkdown: import("vue").DefineComponent<import("vue
147
293
  selectable: boolean;
148
294
  autoFocus: boolean;
149
295
  content: string;
296
+ final: boolean;
297
+ streaming: boolean;
150
298
  scrollTop: number;
151
299
  customHtmlTags: readonly string[];
152
- final: boolean;
153
300
  theme: Readonly<Partial<{
154
301
  heading: readonly Partial<Style>[];
155
302
  strong: Partial<Style>;
@@ -164,5 +311,19 @@ export declare const TVirtualMarkdown: import("vue").DefineComponent<import("vue
164
311
  html: Partial<Style>;
165
312
  }>>;
166
313
  blocks: readonly TuiMarkdownBlock[];
167
- streaming: boolean;
314
+ imageRenderer: TuiMarkdownImageResolver;
315
+ imageMinWidth: number;
316
+ imageMaxWidth: number;
317
+ imageMinHeight: number;
318
+ imageMaxHeight: number;
319
+ imagePreserveAspectRatio: boolean;
320
+ imageActions: boolean;
321
+ mathActions: boolean;
322
+ linkActions: boolean;
323
+ imageOcclusionRects: readonly Readonly<{
324
+ x: number;
325
+ y: number;
326
+ w: number;
327
+ h: number;
328
+ }>[];
168
329
  }, {}>;
@@ -132,6 +132,10 @@ export declare const TVirtualRows: import("vue").DefineComponent<import("vue").E
132
132
  type: PropType<TVirtualRowsRowScrollMode>;
133
133
  default: string;
134
134
  };
135
+ terminalGraphicScrollIdleMs: {
136
+ type: NumberConstructor;
137
+ default: number;
138
+ };
135
139
  }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
136
140
  [key: string]: any;
137
141
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("click" | "contextmenu" | "pointerdown" | "pointerup" | "pointermove" | "pointerleave" | "wheel" | "keydown" | "focus" | "blur" | "scroll" | "clickCapture" | "contextmenuCapture" | "pointerdownCapture" | "pointerupCapture" | "pointermoveCapture" | "update:scrollTop" | "itemClick")[], "click" | "contextmenu" | "pointerdown" | "pointerup" | "pointermove" | "pointerleave" | "wheel" | "keydown" | "focus" | "blur" | "scroll" | "clickCapture" | "contextmenuCapture" | "pointerdownCapture" | "pointerupCapture" | "pointermoveCapture" | "update:scrollTop" | "itemClick", (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps), Readonly<import("vue").ExtractPropTypes<{
@@ -218,6 +222,10 @@ export declare const TVirtualRows: import("vue").DefineComponent<import("vue").E
218
222
  type: PropType<TVirtualRowsRowScrollMode>;
219
223
  default: string;
220
224
  };
225
+ terminalGraphicScrollIdleMs: {
226
+ type: NumberConstructor;
227
+ default: number;
228
+ };
221
229
  }>> & Readonly<{
222
230
  onPointerleave?: ((...args: any[]) => any) | undefined;
223
231
  onClick?: ((...args: any[]) => any) | undefined;
@@ -255,6 +263,7 @@ export declare const TVirtualRows: import("vue").DefineComponent<import("vue").E
255
263
  rowScrollMode: TVirtualRowsRowScrollMode;
256
264
  scrollTop: number;
257
265
  selectionText: (item: unknown, index: number) => string;
266
+ terminalGraphicScrollIdleMs: number;
258
267
  itemChangedRange: () => {
259
268
  start: number;
260
269
  end: number;
@@ -172,6 +172,8 @@ export declare const TerminalProvider: import("vue").DefineComponent<import("vue
172
172
  debugIme: boolean;
173
173
  clipboard: Readonly<{
174
174
  supported: boolean;
175
+ canRead?: boolean;
176
+ canWrite?: boolean;
175
177
  readText: () => Promise<string>;
176
178
  writeText: (text: string) => Promise<void>;
177
179
  }>;
@@ -7,6 +7,7 @@ import type { EventManager } from "../events/manager/event-manager.js";
7
7
  import type { Rect } from "../events/manager/types.js";
8
8
  import type { SelectionTextProvider, TerminalSelectionCopyPayload, TerminalSelectionRefreshOptions } from "../selection/terminal-selection.js";
9
9
  import type { RendererCapabilities, TerminalRendererLike } from "../renderer/capabilities.js";
10
+ import type { ClipboardApi } from "../runtime/index.js";
10
11
  import type { TraceStore } from "../observability/trace.js";
11
12
  import type { FramePerfReason } from "../observability/frame-perf.js";
12
13
  import type { FramePerfStore } from "../observability/frame-perf-store.js";
@@ -99,6 +100,18 @@ export type TerminalSelectionContext = Readonly<{
99
100
  refresh: (options?: TerminalSelectionRefreshOptions) => void;
100
101
  clear: () => void;
101
102
  }>;
103
+ export type TerminalGraphicsActivityOptions = Readonly<{
104
+ scrollIdleMs?: number;
105
+ traceId?: string;
106
+ trace?: boolean;
107
+ }>;
108
+ export type TerminalGraphicsActivity = Readonly<{
109
+ scrolling: Readonly<Ref<boolean>>;
110
+ version: Readonly<Ref<number>>;
111
+ markScroll: () => void;
112
+ setScrollIdleMs: (value: number | undefined) => void;
113
+ dispose: () => void;
114
+ }>;
102
115
  export type ImeAnchor = Readonly<{
103
116
  cellX: number;
104
117
  cellY: number;
@@ -111,6 +124,7 @@ export type TerminalContext = Readonly<{
111
124
  events: Ref<EventManager | null>;
112
125
  scheduler: TerminalScheduler;
113
126
  runtime: TerminalRuntime;
127
+ clipboard?: ClipboardApi;
114
128
  observability: Readonly<{
115
129
  trace: TraceStore;
116
130
  framePerf: FramePerfStore;
@@ -127,6 +141,7 @@ export declare const TerminalContextKey: InjectionKey<Readonly<{
127
141
  events: Ref<EventManager | null>;
128
142
  scheduler: TerminalScheduler;
129
143
  runtime: TerminalRuntime;
144
+ clipboard?: ClipboardApi;
130
145
  observability: Readonly<{
131
146
  trace: TraceStore;
132
147
  framePerf: FramePerfStore;
@@ -150,4 +165,13 @@ export declare const TInputPluginsContextKey: InjectionKey<Readonly<Ref<readonly
150
165
  install: (ctx: import("./index.js").TInputPluginContext) => void;
151
166
  }>[]>>>;
152
167
  export declare const TPathPickerProviderContextKey: InjectionKey<Readonly<Ref<PathPickerProvider | undefined>>>;
168
+ export declare const TerminalGraphicsActivityKey: InjectionKey<Readonly<{
169
+ scrolling: Readonly<Ref<boolean>>;
170
+ version: Readonly<Ref<number>>;
171
+ markScroll: () => void;
172
+ setScrollIdleMs: (value: number | undefined) => void;
173
+ dispose: () => void;
174
+ }>>;
153
175
  export declare const DialogContextKey: InjectionKey<boolean>;
176
+ export declare function createTerminalGraphicsActivity(options?: TerminalGraphicsActivityOptions): TerminalGraphicsActivity;
177
+ export declare function createCombinedTerminalGraphicsActivity(parent: TerminalGraphicsActivity | null | undefined, own: TerminalGraphicsActivity): TerminalGraphicsActivity;
@@ -15,6 +15,8 @@ export { TDialog } from "./components/TDialog.js";
15
15
  export type { DialogButton } from "./components/TDialog.js";
16
16
  export type { TerminalProviderSelectionConfig, TerminalProviderSelectionOptions, } from "./components/TerminalProvider.js";
17
17
  export { TerminalProvider } from "./components/TerminalProvider.js";
18
+ export { TFlex, TFlexItem } from "./components/TFlex.js";
19
+ export type { TFlexAlign, TFlexAlignContent, TFlexDirection, TFlexMeasure, TFlexMeasureConstraints, TFlexMeasureResult, TFlexItemSlotProps, TFlexJustify, TFlexSize, } from "./components/TFlex.js";
18
20
  export { TFlow } from "./components/TFlow.js";
19
21
  export { TAutocompleteInput, TCheckbox, TForm, TFormContextKey, TFormField, TPasswordInput, TRadioGroup, TSlider, TSwitch, useTForm, } from "./components/TForm.js";
20
22
  export type { TAutocompleteLoadErrorPayload, TAutocompleteOption, TAutocompleteSelectPayload, TAutocompleteSuggestionProvider, TFormContext, TFormHandle, TFormModel, TFormRule, TFormSubmitPayload, TRadioOption, } from "./components/TForm.js";
@@ -32,6 +34,8 @@ export type { TLinkActivatePayload, TLinkActivationSource, TLinkInvalidHrefPaylo
32
34
  export type { TerminalLinkOpenContext, TerminalLinkOpener, TerminalLinkOpenerLike, TerminalLinkOpenSource, } from "./components/link/host.js";
33
35
  export { linkifyTextSegments } from "./linkify.js";
34
36
  export type { TLinkifyOptions, TLinkifyProtocol, TLinkifySegment } from "./linkify.js";
37
+ export { isSimpleMermaidFlowchartSource, markMermaidRenderErrorFatal, TMermaid, TMermaidText, } from "./components/TMermaidText.js";
38
+ export type { TMermaidAsciiOptions, TMermaidAsciiTheme, TMermaidCopyPayload, TMermaidRenderer, TMermaidRenderEligibility, TMermaidRenderEligibilityContext, TMermaidResolvedAsciiOptions, TMermaidTextProps, TMermaidTransientErrorClassifier, TMermaidTransientErrorContext, } from "./components/TMermaidText.js";
35
39
  export { TMultilineModal } from "./components/TMultilineModal.js";
36
40
  export { TBreadcrumb, TKeyHint, TStatusBar } from "./components/TNavigation.js";
37
41
  export type { TBreadcrumbItem, TBreadcrumbSelectPayload } from "./components/TNavigation.js";
@@ -56,6 +60,7 @@ export { useTerminalRuntime } from "./composables/use-runtime.js";
56
60
  export { useTerminalNode } from "./composables/use-terminal-node.js";
57
61
  export { useTerminal } from "./composables/use-terminal.js";
58
62
  export { useVisibility } from "./composables/use-visibility.js";
63
+ export type { TuiMarkdownGraphicSegment, TuiMarkdownImageResolver, TuiMarkdownImageResolverResult, } from "./markdown/types.js";
59
64
  export type { TuiMarkdownTheme, TuiMarkdownThemeOverrides } from "./markdown/theme.js";
60
65
  export { createTheme, tuiDefaultTheme } from "./theme.js";
61
66
  export { createOverlayFocusStack, resolveOverlayPlacement } from "./overlay.js";
@@ -0,0 +1,67 @@
1
+ import type { Rect } from "../../events/manager/types.js";
2
+ export type TFlexDirection = "row" | "column";
3
+ export type TFlexAlign = "start" | "center" | "end" | "stretch";
4
+ export type TFlexJustify = "start" | "center" | "end" | "space-between";
5
+ export type TFlexAlignContent = "start" | "center" | "end" | "space-between" | "stretch";
6
+ export type TFlexSize = number | string;
7
+ export type TFlexMeasureConstraints = Readonly<{
8
+ maxWidth: number;
9
+ maxHeight: number;
10
+ direction: TFlexDirection;
11
+ }>;
12
+ export type TFlexMeasureResult = Readonly<{
13
+ width?: number;
14
+ height?: number;
15
+ w?: number;
16
+ h?: number;
17
+ }>;
18
+ export type TFlexMeasure = (constraints: TFlexMeasureConstraints) => TFlexMeasureResult;
19
+ export type TFlexItemSlotProps = Readonly<{
20
+ rect: Rect;
21
+ }>;
22
+ export type BoxEdges = Readonly<{
23
+ top: number;
24
+ right: number;
25
+ bottom: number;
26
+ left: number;
27
+ }>;
28
+ export type FlexLayoutInputItem = Readonly<{
29
+ grow: number;
30
+ shrink: number;
31
+ basis: TFlexSize | undefined;
32
+ width: TFlexSize | undefined;
33
+ height: TFlexSize | undefined;
34
+ minWidth: TFlexSize | undefined;
35
+ minHeight: TFlexSize | undefined;
36
+ maxWidth: TFlexSize | undefined;
37
+ maxHeight: TFlexSize | undefined;
38
+ measure: TFlexMeasure | undefined;
39
+ measureCache: Map<string, {
40
+ main: number | undefined;
41
+ cross: number | undefined;
42
+ }> | undefined;
43
+ marginTop: number;
44
+ marginRight: number;
45
+ marginBottom: number;
46
+ marginLeft: number;
47
+ alignSelf: TFlexAlign | undefined;
48
+ }>;
49
+ export type FlexLayoutItem<TItem extends FlexLayoutInputItem = FlexLayoutInputItem> = Readonly<{
50
+ item: TItem;
51
+ rect: Rect;
52
+ }>;
53
+ export declare function normalizeCellCount(value: unknown, fallback?: number): number;
54
+ export declare function normalizeOptionalCellCount(value: unknown): number | undefined;
55
+ export declare function normalizeRatio(value: unknown, fallback: number): number;
56
+ export declare function layoutFlexItems<TItem extends FlexLayoutInputItem>(items: readonly TItem[], options: Readonly<{
57
+ w: number;
58
+ h: number;
59
+ direction: TFlexDirection;
60
+ mainGap: number;
61
+ crossGap: number;
62
+ padding: BoxEdges;
63
+ alignItems: TFlexAlign;
64
+ justifyContent: TFlexJustify;
65
+ alignContent: TFlexAlignContent;
66
+ wrap: boolean;
67
+ }>): FlexLayoutItem<TItem>[];
@@ -1,3 +1,6 @@
1
1
  import { type TuiMarkdownTheme } from "./theme.js";
2
- import type { TuiMarkdownBlock, TuiMarkdownNode } from "./types.js";
3
- export declare function markdownAstToBlocks(nodes: readonly TuiMarkdownNode[], theme: TuiMarkdownTheme): readonly TuiMarkdownBlock[];
2
+ import type { TuiMarkdownBlock, TuiMarkdownImageResolver, TuiMarkdownImageSize, TuiMarkdownNode } from "./types.js";
3
+ export declare function markdownAstToBlocks(nodes: readonly TuiMarkdownNode[], theme: TuiMarkdownTheme, options?: Readonly<{
4
+ imageResolver?: TuiMarkdownImageResolver;
5
+ imageSize?: TuiMarkdownImageSize;
6
+ }>): readonly TuiMarkdownBlock[];
@@ -1,3 +1,4 @@
1
+ import type { TuiMarkdownImageResolver, TuiMarkdownImageSize } from "./types.js";
1
2
  import { type TuiMarkdownParser } from "./parser.js";
2
3
  import { type TuiMarkdownThemeOverrides } from "./theme.js";
3
4
  import type { TuiMarkdownBlock, TuiMarkdownNode, TuiMarkdownVisualRow } from "./types.js";
@@ -9,6 +10,8 @@ import type { WidthProvider } from "../../core/buffer/width.js";
9
10
  export declare function buildMarkdownBlocks(content: string, parser: TuiMarkdownParser, options?: Readonly<{
10
11
  final?: boolean;
11
12
  theme?: TuiMarkdownThemeOverrides;
13
+ imageResolver?: TuiMarkdownImageResolver;
14
+ imageSize?: TuiMarkdownImageSize;
12
15
  }>): Readonly<{
13
16
  nodes: readonly TuiMarkdownNode[];
14
17
  blocks: readonly TuiMarkdownBlock[];
@@ -17,4 +20,6 @@ export declare function buildMarkdownVisualRows(content: string, width: number,
17
20
  final?: boolean;
18
21
  theme?: TuiMarkdownThemeOverrides;
19
22
  widthProvider?: WidthProvider;
23
+ imageResolver?: TuiMarkdownImageResolver;
24
+ imageSize?: TuiMarkdownImageSize;
20
25
  }>): readonly TuiMarkdownVisualRow[];
@@ -0,0 +1,14 @@
1
+ import type { TuiMarkdownImageActionPayload, TuiMarkdownVisualRow } from "./types.js";
2
+ export declare function findMarkdownImageActionAt(rows: readonly TuiMarkdownVisualRow[], point: Readonly<{
3
+ cellX: number;
4
+ cellY: number;
5
+ }>, options: Readonly<{
6
+ screenRect: Readonly<{
7
+ x: number;
8
+ y: number;
9
+ w: number;
10
+ h: number;
11
+ }>;
12
+ rowOffset: number;
13
+ clipStart: number;
14
+ }>): TuiMarkdownImageActionPayload | null;
@@ -0,0 +1,11 @@
1
+ export type TuiMarkdownImageSource = Readonly<{
2
+ src: string;
3
+ mime?: string;
4
+ base64?: string;
5
+ }>;
6
+ export type TuiMarkdownImageDimensions = Readonly<{
7
+ width: number;
8
+ height: number;
9
+ }>;
10
+ export declare function sanitizeMarkdownImageSource(src: unknown): TuiMarkdownImageSource | null;
11
+ export declare function readMarkdownImageDimensions(base64: string | undefined): TuiMarkdownImageDimensions | null;
@@ -0,0 +1,14 @@
1
+ import type { TuiMarkdownLinkActionPayload, TuiMarkdownVisualRow } from "./types.js";
2
+ export declare function findMarkdownLinkActionAt(rows: readonly TuiMarkdownVisualRow[], point: Readonly<{
3
+ cellX: number;
4
+ cellY: number;
5
+ }>, options: Readonly<{
6
+ screenRect: Readonly<{
7
+ x: number;
8
+ y: number;
9
+ w: number;
10
+ h: number;
11
+ }>;
12
+ rowOffset: number;
13
+ clipStart: number;
14
+ }>): TuiMarkdownLinkActionPayload | null;
@@ -0,0 +1,14 @@
1
+ import type { TuiMarkdownMathActionPayload, TuiMarkdownVisualRow } from "./types.js";
2
+ export declare function findMarkdownMathActionAt(rows: readonly TuiMarkdownVisualRow[], point: Readonly<{
3
+ cellX: number;
4
+ cellY: number;
5
+ }>, options: Readonly<{
6
+ screenRect: Readonly<{
7
+ x: number;
8
+ y: number;
9
+ w: number;
10
+ h: number;
11
+ }>;
12
+ rowOffset: number;
13
+ clipStart: number;
14
+ }>): TuiMarkdownMathActionPayload | null;
@@ -0,0 +1,6 @@
1
+ export type TuiMarkdownInlineMathRender = Readonly<{
2
+ text: string;
3
+ supported: boolean;
4
+ }>;
5
+ export declare function renderMarkdownInlineMathSegment(tex: string): TuiMarkdownInlineMathRender;
6
+ export declare function renderMarkdownInlineMath(tex: string): string;
@@ -1,5 +1,26 @@
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;
4
+ export declare function clearMarkdownImageGraphics(terminal: Terminal, rect?: Readonly<{
5
+ x: number;
6
+ y: number;
7
+ w: number;
8
+ h: number;
9
+ }>): void;
10
+ export declare function collectVisibleMarkdownImageGraphicIds(rows: readonly TuiMarkdownVisualRow[], options: Readonly<{
11
+ x: number;
12
+ y: number;
13
+ w: number;
14
+ h: number;
15
+ rowOffset: number;
16
+ clipStart: number;
17
+ isGraphicCovered?: (rect: Readonly<{
18
+ x: number;
19
+ y: number;
20
+ w: number;
21
+ h: number;
22
+ }>) => boolean;
23
+ }>): ReadonlySet<string>;
3
24
  export declare function paintMarkdownVisualRow(terminal: Terminal, row: TuiMarkdownVisualRow | undefined, options: Readonly<{
4
25
  x: number;
5
26
  y: number;
@@ -7,4 +28,11 @@ export declare function paintMarkdownVisualRow(terminal: Terminal, row: TuiMarkd
7
28
  clipStart?: number;
8
29
  baseStyle: Style;
9
30
  clear?: boolean;
31
+ keepGraphicIds?: ReadonlySet<string>;
32
+ isGraphicCovered?: (rect: Readonly<{
33
+ x: number;
34
+ y: number;
35
+ w: number;
36
+ h: number;
37
+ }>) => boolean;
10
38
  }>): void;
@@ -5,10 +5,84 @@ export type TuiMarkdownNode = Readonly<{
5
5
  children?: readonly TuiMarkdownNode[];
6
6
  [key: string]: unknown;
7
7
  }>;
8
+ export type TuiMarkdownImageSize = Readonly<{
9
+ minWidth?: number;
10
+ maxWidth?: number;
11
+ minHeight?: number;
12
+ maxHeight?: number;
13
+ preserveAspectRatio?: boolean;
14
+ }>;
15
+ export type TuiMarkdownGraphicSegment = Readonly<{
16
+ kind: "image";
17
+ src: string;
18
+ alt?: string;
19
+ mime?: string;
20
+ base64?: string;
21
+ originalBase64?: string;
22
+ originalMime?: string;
23
+ naturalWidth?: number;
24
+ naturalHeight?: number;
25
+ displayWidth?: number;
26
+ displayHeight?: number;
27
+ }>;
28
+ export type TuiMarkdownImageResolverResult = string | null | undefined | Readonly<{
29
+ base64: string;
30
+ originalBase64?: string;
31
+ mime?: string;
32
+ originalMime?: string;
33
+ }>;
34
+ export type TuiMarkdownImageResolver = (image: TuiMarkdownGraphicSegment) => TuiMarkdownImageResolverResult;
35
+ export type TuiMarkdownImageActionPayload = Readonly<{
36
+ image: TuiMarkdownGraphicSegment;
37
+ rect: Readonly<{
38
+ x: number;
39
+ y: number;
40
+ w: number;
41
+ h: number;
42
+ }>;
43
+ cellX: number;
44
+ cellY: number;
45
+ rowIndex: number;
46
+ segmentIndex: number;
47
+ }>;
48
+ export type TuiMarkdownLinkActionPayload = Readonly<{
49
+ href: string;
50
+ text: string;
51
+ rect: Readonly<{
52
+ x: number;
53
+ y: number;
54
+ w: number;
55
+ h: number;
56
+ }>;
57
+ cellX: number;
58
+ cellY: number;
59
+ rowIndex: number;
60
+ segmentIndex: number;
61
+ }>;
62
+ export type TuiMarkdownMathSegment = Readonly<{
63
+ source: string;
64
+ raw: string;
65
+ rendered: boolean;
66
+ }>;
67
+ export type TuiMarkdownMathActionPayload = Readonly<{
68
+ math: TuiMarkdownMathSegment;
69
+ rect: Readonly<{
70
+ x: number;
71
+ y: number;
72
+ w: number;
73
+ h: number;
74
+ }>;
75
+ cellX: number;
76
+ cellY: number;
77
+ rowIndex: number;
78
+ segmentIndex: number;
79
+ }>;
8
80
  export type TuiMarkdownInlineSegment = Readonly<{
9
81
  text: string;
10
82
  style?: Style;
11
83
  hardBreak?: boolean;
84
+ graphic?: TuiMarkdownGraphicSegment;
85
+ mathAction?: TuiMarkdownMathSegment;
12
86
  }>;
13
87
  export type TuiMarkdownTableCellAlign = "left" | "center" | "right";
14
88
  export type TuiMarkdownTableCell = Readonly<{
@@ -25,6 +99,7 @@ export type TuiMarkdownBlock = Readonly<{
25
99
  type: "code_block";
26
100
  key: string;
27
101
  lines: readonly string[];
102
+ language?: string;
28
103
  style?: Style;
29
104
  prefixSegments?: readonly TuiMarkdownInlineSegment[];
30
105
  continuationPrefixSegments?: readonly TuiMarkdownInlineSegment[];
@@ -49,6 +124,9 @@ export type TuiMarkdownVisualSegment = Readonly<{
49
124
  text: string;
50
125
  style?: Style;
51
126
  cells: number;
127
+ graphic?: TuiMarkdownGraphicSegment;
128
+ mathAction?: TuiMarkdownMathSegment;
129
+ fallbackText?: string;
52
130
  }>;
53
131
  export type TuiMarkdownVisualRow = Readonly<{
54
132
  key: string;