@simon_he/vue-tui 0.0.8 → 1.0.0

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 (249) hide show
  1. package/README.md +142 -30
  2. package/dist/TSelect-BwJJbuTt.js +6089 -0
  3. package/dist/TTree-DK_DQBYm.js +6480 -0
  4. package/dist/agent.cjs +39416 -0
  5. package/dist/agent.d.cts +44 -0
  6. package/dist/agent.d.ts +44 -0
  7. package/dist/agent.js +828 -0
  8. package/dist/ansi-palette-CNXqFciC.js +57 -0
  9. package/dist/ansi-styles.d.ts +200 -0
  10. package/dist/block-source-CKUOnkgT.js +1663 -0
  11. package/dist/cli/headless-renderer.d.ts +29 -0
  12. package/dist/cli/input.d.ts +49 -0
  13. package/dist/cli/node-file-writers.d.ts +13 -0
  14. package/dist/cli/node-module.d.ts +2 -0
  15. package/dist/cli/parse-kitty.d.ts +2 -0
  16. package/dist/cli/parse-mouse.d.ts +2 -0
  17. package/dist/cli/parse-utils.d.ts +14 -0
  18. package/dist/cli/parse-xterm.d.ts +2 -0
  19. package/dist/cli/path-provider-types.d.ts +1 -0
  20. package/dist/cli/path-provider.d.ts +4 -0
  21. package/dist/cli/path-suggest-core.d.ts +1 -0
  22. package/dist/cli/path-suggest.d.ts +15 -0
  23. package/dist/cli/recording.d.ts +4 -0
  24. package/dist/cli/stdin-buffer.d.ts +33 -0
  25. package/dist/cli.cjs +11061 -0
  26. package/dist/cli.d.cts +23 -0
  27. package/dist/cli.d.ts +23 -0
  28. package/dist/cli.js +9875 -0
  29. package/dist/core/ansi/capability.d.ts +20 -0
  30. package/dist/core/ansi/colors.d.ts +41 -0
  31. package/dist/core/ansi/sgr.d.ts +7 -0
  32. package/dist/core/ansi/theme.d.ts +6 -0
  33. package/dist/core/ansi-palette.d.ts +14 -0
  34. package/dist/core/buffer/buffer.d.ts +54 -0
  35. package/dist/core/buffer/width.d.ts +4 -0
  36. package/dist/core/debug-logger.d.ts +18 -0
  37. package/dist/core/hyperlink.d.ts +9 -0
  38. package/dist/core/index.d.ts +4 -0
  39. package/dist/core/path-provider-types.d.ts +24 -0
  40. package/dist/core/path-suggest.d.ts +35 -0
  41. package/dist/core/render-plane.d.ts +3 -0
  42. package/dist/core/terminal/create-terminal.d.ts +8 -0
  43. package/dist/core/terminal/emitter.d.ts +7 -0
  44. package/dist/core/types.d.ts +107 -0
  45. package/dist/core.cjs +3153 -0
  46. package/dist/core.d.cts +14 -0
  47. package/dist/core.d.ts +14 -0
  48. package/dist/core.js +424 -0
  49. package/dist/create-terminal-C2oiWFJU.js +1434 -0
  50. package/dist/create-terminal-app.d.ts +36 -0
  51. package/dist/dom-renderer-BqGijQID.js +1173 -0
  52. package/dist/env-Cl8qmNFN.js +19 -0
  53. package/dist/events/index.d.ts +6 -0
  54. package/dist/events/manager/cli-event-manager.d.ts +22 -0
  55. package/dist/events/manager/event-manager.d.ts +30 -0
  56. package/dist/events/manager/selection-suppression.d.ts +3 -0
  57. package/dist/events/manager/types.d.ts +108 -0
  58. package/dist/events/recording.d.ts +44 -0
  59. package/dist/experimental.cjs +4412 -1641
  60. package/dist/experimental.d.cts +42 -0
  61. package/dist/experimental.d.ts +42 -825
  62. package/dist/experimental.js +31 -7392
  63. package/dist/frame-perf-C6Xfg85O.js +24 -0
  64. package/dist/hyperlink-Bn02UXJb.js +419 -0
  65. package/dist/index.cjs +14765 -17582
  66. package/dist/index.d.cts +35 -0
  67. package/dist/index.d.ts +35 -1528
  68. package/dist/index.js +17 -20026
  69. package/dist/linkify-D_gzn9Xq.js +562 -0
  70. package/dist/markdown.cjs +9321 -7623
  71. package/dist/markdown.d.cts +11 -0
  72. package/dist/markdown.d.ts +11 -112
  73. package/dist/markdown.js +36 -1427
  74. package/dist/observability/cli-latency-node.d.ts +3 -0
  75. package/dist/observability/cli-latency-types.d.ts +41 -0
  76. package/dist/observability/cli-latency.d.ts +3 -0
  77. package/dist/observability/frame-perf-store.d.ts +18 -0
  78. package/dist/observability/frame-perf.d.ts +40 -0
  79. package/dist/observability/perf-sink.d.ts +56 -0
  80. package/dist/observability/trace.d.ts +40 -0
  81. package/dist/observability/tui-profiler.d.ts +33 -0
  82. package/dist/observability.cjs +221 -0
  83. package/dist/observability.d.cts +8 -0
  84. package/dist/observability.d.ts +8 -0
  85. package/dist/observability.js +4 -0
  86. package/dist/path-mnSgEpCm.js +81 -0
  87. package/dist/path-suggest-BNqcuE3-.js +274 -0
  88. package/dist/path-suggest-Dk9TRLh5.js +3 -0
  89. package/dist/{path-suggest-DmrmeueH.js → path-suggest-bvR9SY6Q.js} +86 -18
  90. package/dist/renderer/capabilities.d.ts +13 -0
  91. package/dist/renderer/cli/index.d.ts +2 -0
  92. package/dist/renderer/cli/stdout-metrics.d.ts +18 -0
  93. package/dist/renderer/cli/stdout-renderer.d.ts +48 -0
  94. package/dist/renderer/dom/dom-renderer.d.ts +157 -0
  95. package/dist/renderer/dom/index.d.ts +2 -0
  96. package/dist/renderer/index.d.ts +2 -0
  97. package/dist/renderer-dom.cjs +1505 -0
  98. package/dist/renderer-dom.d.cts +4 -0
  99. package/dist/renderer-dom.d.ts +4 -0
  100. package/dist/renderer-dom.js +7 -0
  101. package/dist/runtime/index.d.ts +36 -0
  102. package/dist/runtime/osc52.d.ts +9 -0
  103. package/dist/runtime-rfcZCyJq.js +1197 -0
  104. package/dist/runtime.cjs +1698 -0
  105. package/dist/runtime.d.cts +9 -0
  106. package/dist/runtime.d.ts +9 -0
  107. package/dist/runtime.js +4 -0
  108. package/dist/selection/terminal-selection.d.ts +123 -0
  109. package/dist/sgr-BmzxEjAO.js +304 -0
  110. package/dist/terminal-selection-DBinO6p5.js +330 -0
  111. package/dist/tlog-theme-qPBt5rge.js +9254 -0
  112. package/dist/trace-CjzYeIxN.js +182 -0
  113. package/dist/utils/env.d.ts +3 -0
  114. package/dist/utils/grapheme.d.ts +5 -0
  115. package/dist/utils/newlines.d.ts +1 -0
  116. package/dist/utils/path.d.ts +7 -0
  117. package/dist/utils/url-safety.d.ts +2 -0
  118. package/dist/vue/agent/view-models.d.ts +98 -0
  119. package/dist/vue/components/TAnchor.d.ts +108 -0
  120. package/dist/vue/components/TBox.d.ts +144 -0
  121. package/dist/vue/components/TCommandPalette.d.ts +587 -0
  122. package/dist/vue/components/TDataTable.d.ts +367 -0
  123. package/dist/vue/components/TDebugOverlay.d.ts +43 -0
  124. package/dist/vue/components/TDialog.d.ts +255 -0
  125. package/dist/vue/components/TFeedback.d.ts +635 -0
  126. package/dist/vue/components/TFlow.d.ts +85 -0
  127. package/dist/vue/components/TForm.d.ts +1230 -0
  128. package/dist/vue/components/TInput.d.ts +545 -0
  129. package/dist/vue/components/TInputBox.d.ts +158 -0
  130. package/dist/vue/components/TJsonEditor.d.ts +165 -0
  131. package/dist/vue/components/TLink.d.ts +239 -0
  132. package/dist/vue/components/TLinkifyText.d.ts +141 -0
  133. package/dist/vue/components/TList.d.ts +119 -0
  134. package/dist/vue/components/TLogLinksPanel.d.ts +238 -0
  135. package/dist/vue/components/TLogMinimap.d.ts +263 -0
  136. package/dist/vue/components/TLogScrollbar.d.ts +236 -0
  137. package/dist/vue/components/TLogSearchBar.d.ts +267 -0
  138. package/dist/vue/components/TLogSearchPager.d.ts +162 -0
  139. package/dist/vue/components/TLogSearchResults.d.ts +200 -0
  140. package/dist/vue/components/TLogView.d.ts +536 -0
  141. package/dist/vue/components/TLogVirtualLinksPanel.d.ts +141 -0
  142. package/dist/vue/components/TLogVirtualSearchResults.d.ts +146 -0
  143. package/dist/vue/components/TMarkdownText.d.ts +134 -0
  144. package/dist/vue/components/TMultilineModal.d.ts +62 -0
  145. package/dist/vue/components/TNavigation.d.ts +324 -0
  146. package/dist/vue/components/TOverlay.d.ts +366 -0
  147. package/dist/vue/components/TPanels.d.ts +244 -0
  148. package/dist/vue/components/TPathPicker.d.ts +213 -0
  149. package/dist/vue/components/TRenderLayer.d.ts +16 -0
  150. package/dist/vue/components/TRenderPlane.d.ts +17 -0
  151. package/dist/vue/components/TSelect.d.ts +335 -0
  152. package/dist/vue/components/TTable.d.ts +317 -0
  153. package/dist/vue/components/TText.d.ts +116 -0
  154. package/dist/vue/components/TThinkingView.d.ts +233 -0
  155. package/dist/vue/components/TToolCallView.d.ts +384 -0
  156. package/dist/vue/components/TTranscriptView.d.ts +221 -0
  157. package/dist/vue/components/TTransition.d.ts +83 -0
  158. package/dist/vue/components/TTree.d.ts +200 -0
  159. package/dist/vue/components/TUserMessageView.d.ts +344 -0
  160. package/dist/vue/components/TView.d.ts +127 -0
  161. package/dist/vue/components/TVirtualList.d.ts +182 -0
  162. package/dist/vue/components/TVirtualMarkdown.d.ts +168 -0
  163. package/dist/vue/components/TVirtualRows.d.ts +247 -0
  164. package/dist/vue/components/TerminalProvider.d.ts +218 -0
  165. package/dist/vue/components/input/host.d.ts +17 -0
  166. package/dist/vue/components/input/plugins/hostPlugin.d.ts +7 -0
  167. package/dist/vue/components/input/plugins/hostPlugin.node.d.ts +15 -0
  168. package/dist/vue/components/input/plugins/mentionUtils.d.ts +17 -0
  169. package/dist/vue/components/input/plugins/nodeMentionPathProvider.d.ts +2 -0
  170. package/dist/vue/components/input/plugins/promptMentionPlugin.d.ts +8 -0
  171. package/dist/vue/components/input/plugins/promptMentionState.d.ts +98 -0
  172. package/dist/vue/components/input/plugins/restrictText.d.ts +27 -0
  173. package/dist/vue/components/input/plugins/types.d.ts +90 -0
  174. package/dist/vue/components/input/utils/inlineText.d.ts +57 -0
  175. package/dist/vue/components/input/utils/inlineTextTokens.d.ts +34 -0
  176. package/dist/vue/components/input/utils/primitives.d.ts +3 -0
  177. package/dist/vue/components/input/utils/wordNavigation.d.ts +6 -0
  178. package/dist/vue/components/link/host.d.ts +15 -0
  179. package/dist/vue/components/list/list-geometry.d.ts +16 -0
  180. package/dist/vue/components/list/list-paint.d.ts +1 -0
  181. package/dist/vue/components/list/scroll-state.d.ts +25 -0
  182. package/dist/vue/components/list/selection-state.d.ts +6 -0
  183. package/dist/vue/components/simple-utils.d.ts +5 -0
  184. package/dist/vue/components/terminal-provider/copy-toast.d.ts +6 -0
  185. package/dist/vue/components/terminal-provider/portals.d.ts +17 -0
  186. package/dist/vue/components/terminal-provider/scheduler.d.ts +29 -0
  187. package/dist/vue/components/terminal-provider/selection-config.d.ts +15 -0
  188. package/dist/vue/components/terminal-provider/utils.d.ts +5 -0
  189. package/dist/vue/composables/use-layout.d.ts +2 -0
  190. package/dist/vue/composables/use-render-node.d.ts +19 -0
  191. package/dist/vue/composables/use-render-stack.d.ts +3 -0
  192. package/dist/vue/composables/use-runtime.d.ts +5 -0
  193. package/dist/vue/composables/use-terminal-node.d.ts +14 -0
  194. package/dist/vue/composables/use-terminal.d.ts +2 -0
  195. package/dist/vue/composables/use-visibility.d.ts +12 -0
  196. package/dist/vue/context.d.ts +153 -0
  197. package/dist/vue/index.d.ts +69 -0
  198. package/dist/vue/injection-key.d.ts +2 -0
  199. package/dist/vue/linkify.d.ts +11 -0
  200. package/dist/vue/log/append-only-log-store.d.ts +2 -0
  201. package/dist/vue/log/tlog-keymap.d.ts +28 -0
  202. package/dist/vue/log/tlog-plugins.d.ts +144 -0
  203. package/dist/vue/log/tlog-session.d.ts +81 -0
  204. package/dist/vue/log/tlog-theme.d.ts +68 -0
  205. package/dist/vue/log/types.d.ts +43 -0
  206. package/dist/vue/log/use-tlog-link-controller.d.ts +31 -0
  207. package/dist/vue/log/use-tlog-retained-index.d.ts +26 -0
  208. package/dist/vue/log/use-tlog-search-controller.d.ts +51 -0
  209. package/dist/vue/log/use-tlog-search-results-page.d.ts +31 -0
  210. package/dist/vue/log/use-tlog-virtual-search-results.d.ts +22 -0
  211. package/dist/vue/markdown/ast.d.ts +3 -0
  212. package/dist/vue/markdown/block-source.d.ts +22 -0
  213. package/dist/vue/markdown/document.d.ts +20 -0
  214. package/dist/vue/markdown/layout.d.ts +21 -0
  215. package/dist/vue/markdown/parser.d.ts +11 -0
  216. package/dist/vue/markdown/render.d.ts +10 -0
  217. package/dist/vue/markdown/theme.d.ts +186 -0
  218. package/dist/vue/markdown/types.d.ts +59 -0
  219. package/dist/vue/overlay.d.ts +27 -0
  220. package/dist/vue/render/context.d.ts +3 -0
  221. package/dist/vue/render/render-manager.d.ts +94 -0
  222. package/dist/vue/router/RouterView.d.ts +25 -0
  223. package/dist/vue/router/composables.d.ts +4 -0
  224. package/dist/vue/router/context.d.ts +4 -0
  225. package/dist/vue/router/router.d.ts +7 -0
  226. package/dist/vue/router/types.d.ts +29 -0
  227. package/dist/vue/scheduler/frame-mailbox.d.ts +55 -0
  228. package/dist/vue/scheduler/frame-scheduler.d.ts +51 -0
  229. package/dist/vue/theme.d.ts +48 -0
  230. package/dist/vue/transcript/hit-regions.d.ts +2 -0
  231. package/dist/vue/transcript/layout.d.ts +20 -0
  232. package/dist/vue/transcript/plain-text.d.ts +2 -0
  233. package/dist/vue/transcript/types.d.ts +122 -0
  234. package/dist/vue/utils/frame-task.d.ts +6 -0
  235. package/dist/vue/utils/rect.d.ts +4 -0
  236. package/dist/vue/utils/row-scroll.d.ts +25 -0
  237. package/dist/vue/utils/style-cache.d.ts +3 -0
  238. package/dist/vue/utils/text.d.ts +27 -0
  239. package/dist/vue/utils/wheel-scroll.d.ts +18 -0
  240. package/dist/vue.cjs +23668 -0
  241. package/dist/vue.d.cts +1 -0
  242. package/dist/vue.d.ts +1 -0
  243. package/dist/vue.js +3957 -0
  244. package/dist/{wheel-scroll-CiNsasLf.js → wheel-scroll-vBRaQ7p-.js} +404 -405
  245. package/package.json +185 -35
  246. package/dist/path-suggest-BeV6n7m-.js +0 -3
  247. package/dist/sgr-Tko2EQ0U.js +0 -484
  248. package/dist/theme-Bsm65g8k.d.ts +0 -32
  249. package/dist/types-ClIV2h1o.d.ts +0 -103
@@ -0,0 +1,59 @@
1
+ import type { Style } from "../../core/types.js";
2
+ export type TuiMarkdownNode = Readonly<{
3
+ type: string;
4
+ raw?: string;
5
+ children?: readonly TuiMarkdownNode[];
6
+ [key: string]: unknown;
7
+ }>;
8
+ export type TuiMarkdownInlineSegment = Readonly<{
9
+ text: string;
10
+ style?: Style;
11
+ hardBreak?: boolean;
12
+ }>;
13
+ export type TuiMarkdownTableCellAlign = "left" | "center" | "right";
14
+ export type TuiMarkdownTableCell = Readonly<{
15
+ segments: readonly TuiMarkdownInlineSegment[];
16
+ align?: TuiMarkdownTableCellAlign;
17
+ }>;
18
+ export type TuiMarkdownBlock = Readonly<{
19
+ type: "inline";
20
+ key: string;
21
+ segments: readonly TuiMarkdownInlineSegment[];
22
+ prefixSegments?: readonly TuiMarkdownInlineSegment[];
23
+ continuationPrefixSegments?: readonly TuiMarkdownInlineSegment[];
24
+ }> | Readonly<{
25
+ type: "code_block";
26
+ key: string;
27
+ lines: readonly string[];
28
+ style?: Style;
29
+ prefixSegments?: readonly TuiMarkdownInlineSegment[];
30
+ continuationPrefixSegments?: readonly TuiMarkdownInlineSegment[];
31
+ }> | Readonly<{
32
+ type: "thematic_break";
33
+ key: string;
34
+ char?: string;
35
+ style?: Style;
36
+ prefixSegments?: readonly TuiMarkdownInlineSegment[];
37
+ }> | Readonly<{
38
+ type: "table";
39
+ key: string;
40
+ header: readonly TuiMarkdownTableCell[];
41
+ rows: readonly (readonly TuiMarkdownTableCell[])[];
42
+ borderStyle?: Style;
43
+ prefixSegments?: readonly TuiMarkdownInlineSegment[];
44
+ }> | Readonly<{
45
+ type: "blank";
46
+ key: string;
47
+ }>;
48
+ export type TuiMarkdownVisualSegment = Readonly<{
49
+ text: string;
50
+ style?: Style;
51
+ cells: number;
52
+ }>;
53
+ export type TuiMarkdownVisualRow = Readonly<{
54
+ key: string;
55
+ blockKey: string;
56
+ rowInBlock: number;
57
+ plainText: string;
58
+ segments: readonly TuiMarkdownVisualSegment[];
59
+ }>;
@@ -0,0 +1,27 @@
1
+ export type TOverlayPlacement = "center" | "top" | "bottom" | "left" | "right" | "top-left" | "top-right" | "bottom-left" | "bottom-right";
2
+ export type TOverlayRect = Readonly<{
3
+ x: number;
4
+ y: number;
5
+ w: number;
6
+ h: number;
7
+ }>;
8
+ export type TOverlayPlacementOptions = Readonly<{
9
+ viewport: Pick<TOverlayRect, "w" | "h">;
10
+ size: Pick<TOverlayRect, "w" | "h">;
11
+ placement?: TOverlayPlacement;
12
+ offsetX?: number;
13
+ offsetY?: number;
14
+ anchor?: TOverlayRect;
15
+ shift?: boolean;
16
+ }>;
17
+ export declare function resolveOverlayPlacement(opts: TOverlayPlacementOptions): {
18
+ x: number;
19
+ y: number;
20
+ };
21
+ export type TOverlayFocusStack = {
22
+ push: (id: string | null) => void;
23
+ pop: () => string | null;
24
+ peek: () => string | null;
25
+ clear: () => void;
26
+ };
27
+ export declare function createOverlayFocusStack(): TOverlayFocusStack;
@@ -0,0 +1,3 @@
1
+ import type { InjectionKey, Ref } from "vue";
2
+ import type { RenderStack } from "./render-manager.js";
3
+ export declare const RenderStackKey: InjectionKey<Ref<RenderStack>>;
@@ -0,0 +1,94 @@
1
+ import type { TerminalRenderPlane, TerminalRenderPlanes } from "../../core/render-plane.js";
2
+ import type { Terminal } from "../../core/types.js";
3
+ import type { WidthProvider } from "../../core/buffer/width.js";
4
+ import { type CreateTuiProfilerOptions } from "../../observability/tui-profiler.js";
5
+ export type RenderRect = Readonly<{
6
+ x: number;
7
+ y: number;
8
+ w: number;
9
+ h: number;
10
+ }>;
11
+ export type RenderStack = Readonly<{
12
+ id: string;
13
+ parent: RenderStack | null;
14
+ zIndex: number;
15
+ order: number;
16
+ }>;
17
+ export type RenderNode = Readonly<{
18
+ id: string;
19
+ stack: RenderStack;
20
+ plane: TerminalRenderPlane;
21
+ zIndex: number;
22
+ order: number;
23
+ rect: RenderRect | null;
24
+ rectY0: number;
25
+ rectY1: number;
26
+ /**
27
+ * dirtyRows are absolute terminal rows for this node's plane.
28
+ * Components must ignore rows outside their rect.
29
+ */
30
+ paint: (dirtyRows?: readonly number[]) => void;
31
+ }>;
32
+ export type RenderManager = Readonly<{
33
+ rootStack: RenderStack;
34
+ createStack: (parent: RenderStack, zIndex: number) => RenderStack;
35
+ invalidatePlane: (plane: TerminalRenderPlane) => void;
36
+ /**
37
+ * Dangerous escape hatch: shifts whole terminal rows for the target plane, not a
38
+ * component-local region. Only call when the active renderer consumes terminal
39
+ * scrollOperations or when the caller repaints the whole affected viewport.
40
+ */
41
+ unsafeScrollPlaneRows: (plane: TerminalRenderPlane, startY: number, endY: number, delta: number) => void;
42
+ register: (node: {
43
+ stack: RenderStack;
44
+ plane?: TerminalRenderPlane;
45
+ zIndex?: number;
46
+ rect?: RenderRect | null;
47
+ paint: (dirtyRows?: readonly number[]) => void;
48
+ }) => RenderNode;
49
+ update: (id: string, next: Partial<{
50
+ stack: RenderStack;
51
+ plane: TerminalRenderPlane;
52
+ zIndex: number;
53
+ rect: RenderRect | null;
54
+ /**
55
+ * Consumed synchronously during update() and must not be retained.
56
+ * Callers may pass scratch arrays for hot-path invalidation.
57
+ * Rows are absolute terminal Y coordinates for the node's plane.
58
+ */
59
+ dirtyRowsHint: readonly number[];
60
+ paint: (dirtyRows?: readonly number[]) => void;
61
+ }>) => void;
62
+ /**
63
+ * Hot-path dirty row marker for stable nodes. Consumed synchronously and does
64
+ * not replace the RenderNode object.
65
+ *
66
+ * rows are absolute terminal Y coordinates, not local component row offsets.
67
+ * For rect-bound nodes, rows outside the node rect are ignored.
68
+ */
69
+ markDirtyRows: (id: string, rows: readonly number[]) => boolean;
70
+ unregister: (id: string) => void;
71
+ render: (options?: {
72
+ activePlanes?: TerminalRenderPlanes | null;
73
+ }) => RenderStats | null;
74
+ dispose: () => void;
75
+ }>;
76
+ export type CreateRenderManagerOptions = Readonly<{
77
+ profiler?: CreateTuiProfilerOptions;
78
+ widthProvider?: WidthProvider;
79
+ }>;
80
+ export type RowBucketFallback = Readonly<{
81
+ plane: TerminalRenderPlane;
82
+ reason: "dirty-ratio" | "candidate-ratio";
83
+ dirtyRows: number;
84
+ planeNodes: number;
85
+ candidates?: number;
86
+ }>;
87
+ export type RenderStats = Readonly<{
88
+ rows: number;
89
+ scannedNodes: number;
90
+ paintedNodes: number;
91
+ candidatePlanes: readonly TerminalRenderPlane[];
92
+ rowBucketFallbacks?: readonly RowBucketFallback[];
93
+ }>;
94
+ export declare function createRenderManager(terminal: Terminal, options?: CreateRenderManagerOptions): RenderManager;
@@ -0,0 +1,25 @@
1
+ import type { PropType } from "vue";
2
+ import type { TerminalRouteRecord } from "./types.js";
3
+ export declare const TRouterView: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ routes: {
5
+ type: PropType<TerminalRouteRecord[]>;
6
+ required: true;
7
+ };
8
+ forceRemount: {
9
+ type: BooleanConstructor;
10
+ default: boolean;
11
+ };
12
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
13
+ [key: string]: any;
14
+ }> | null, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps), Readonly<import("vue").ExtractPropTypes<{
15
+ routes: {
16
+ type: PropType<TerminalRouteRecord[]>;
17
+ required: true;
18
+ };
19
+ forceRemount: {
20
+ type: BooleanConstructor;
21
+ default: boolean;
22
+ };
23
+ }>> & Readonly<{}>, {
24
+ forceRemount: boolean;
25
+ }, {}>;
@@ -0,0 +1,4 @@
1
+ import type { ComputedRef } from "vue";
2
+ import type { TerminalRoute, TerminalRouter } from "./types.js";
3
+ export declare function useRouter(): TerminalRouter;
4
+ export declare function useRoute(): ComputedRef<TerminalRoute>;
@@ -0,0 +1,4 @@
1
+ import type { InjectionKey, Ref } from "vue";
2
+ import type { TerminalRoute, TerminalRouter } from "./types.js";
3
+ export declare const TerminalRouterKey: InjectionKey<TerminalRouter>;
4
+ export declare const TerminalRouteKey: InjectionKey<Ref<TerminalRoute>>;
@@ -0,0 +1,7 @@
1
+ import type { Component } from "vue";
2
+ import type { TerminalRouteLocationRaw, TerminalRouter, TerminalRouteRecord } from "./types.js";
3
+ export declare function createTerminalRouter(options: Readonly<{
4
+ routes: readonly TerminalRouteRecord[];
5
+ initialRoute: TerminalRouteLocationRaw;
6
+ }>): TerminalRouter;
7
+ export declare function resolveTerminalRouteComponent(router: TerminalRouter, routes: readonly TerminalRouteRecord[]): Component | null;
@@ -0,0 +1,29 @@
1
+ import type { Component } from "vue";
2
+ export type TerminalRoute = Readonly<{
3
+ name: string;
4
+ params?: Readonly<Record<string, string>>;
5
+ meta?: unknown;
6
+ }>;
7
+ export type TerminalRouteRecord = Readonly<{
8
+ name: string;
9
+ component: Component;
10
+ meta?: unknown;
11
+ onEnter?: (to: TerminalRoute, from: TerminalRoute | null) => void | Promise<void>;
12
+ onLeave?: (to: TerminalRoute, from: TerminalRoute | null) => void | Promise<void>;
13
+ }>;
14
+ export type TerminalRouteLocationRaw = string | Readonly<{
15
+ name: string;
16
+ params?: Record<string, string>;
17
+ }>;
18
+ export type NavigationGuardReturn = void | boolean | TerminalRouteLocationRaw;
19
+ export type NavigationGuard = (to: TerminalRoute, from: TerminalRoute | null) => NavigationGuardReturn | Promise<NavigationGuardReturn>;
20
+ export type TerminalRouter = Readonly<{
21
+ currentRoute: import("vue").Ref<TerminalRoute>;
22
+ push: (to: TerminalRouteLocationRaw) => Promise<void>;
23
+ replace: (to: TerminalRouteLocationRaw) => Promise<void>;
24
+ back: () => Promise<void>;
25
+ beforeEach: (guard: NavigationGuard) => () => void;
26
+ beforeResolve: (guard: NavigationGuard) => () => void;
27
+ afterEach: (guard: (to: TerminalRoute, from: TerminalRoute | null) => void) => () => void;
28
+ install: (app: import("vue").App) => void;
29
+ }>;
@@ -0,0 +1,55 @@
1
+ import type { TerminalFrameContext, TerminalFrameTaskPriority, TerminalScheduler } from "../context.js";
2
+ import type { FramePerfReason } from "../../observability/frame-perf.js";
3
+ export type FrameMailboxApply<T> = (value: T, ctx: TerminalFrameContext, meta: {
4
+ queued: number;
5
+ dropped: number;
6
+ }) => void;
7
+ export type FrameMailboxOptions<T> = Readonly<{
8
+ scheduler: TerminalScheduler;
9
+ id: string | (() => string);
10
+ reason?: FramePerfReason;
11
+ priority?: TerminalFrameTaskPriority;
12
+ sync?: boolean;
13
+ merge?: (prev: T, next: T) => T;
14
+ apply: FrameMailboxApply<T>;
15
+ }>;
16
+ /**
17
+ * Coalesces many producer updates into a single scheduler frame task.
18
+ *
19
+ * This helper is currently internal to vue-tui. It is used by library
20
+ * components and internal tests, but it is not exported from the package root.
21
+ *
22
+ * Default behavior keeps only the latest queued value. If `merge` is provided,
23
+ * the pending value is updated with `merge(prev, next)`.
24
+ *
25
+ * Only the first queue() call in a pending cycle schedules a frame task.
26
+ * Later queue() calls update the pending payload and are reported as dropped
27
+ * producer updates when the frame task runs.
28
+ *
29
+ * droppedUpdates are reported after apply() succeeds. They only appear in
30
+ * framePerf when apply() also invalidates and produces a rendered frame sample.
31
+ * If apply() throws, scheduler error stats include mailbox queued/dropped
32
+ * metadata for the failed delivery attempt. The pending payload has already
33
+ * been cleared; mailbox delivery is fail-fast and does not retry stale payloads
34
+ * on later frames.
35
+ *
36
+ * cancel() is best-effort at scheduler level. The run callback still guards
37
+ * `disposed || !hasPending`, because a scheduler may already have taken a
38
+ * snapshot of tasks for the current frame.
39
+ *
40
+ * queue() returns false only when the scheduler explicitly rejects the task.
41
+ * Legacy void-returning schedulers are treated as accepted for compatibility.
42
+ * Owners should call dispose() before the component/scope that owns the
43
+ * mailbox is destroyed.
44
+ *
45
+ * id is scheduler-global. Components should include instance id and producer
46
+ * name, for example `TList:${uid}:wheel`.
47
+ */
48
+ export declare function createFrameMailbox<T>(options: FrameMailboxOptions<T>): {
49
+ readonly queue: (value: T) => boolean;
50
+ readonly replacePending: (value: T) => boolean;
51
+ readonly cancel: () => void;
52
+ readonly dispose: () => void;
53
+ readonly hasPending: () => boolean;
54
+ readonly peek: () => T | undefined;
55
+ };
@@ -0,0 +1,51 @@
1
+ import type { FramePerfReason } from "../../observability/frame-perf.js";
2
+ import type { TerminalFrameTask, TerminalSchedulerConfig, TerminalSchedulerInvalidateOptions } from "../context.js";
3
+ export type SchedulerFrameMailboxDeliveryAttempt = Readonly<{
4
+ id: string;
5
+ queued: number;
6
+ dropped: number;
7
+ }>;
8
+ export type SchedulerFrameTaskRunStats = Readonly<{
9
+ frameTaskCount: number;
10
+ /**
11
+ * Number of scheduler-level tasks merged by task id before execution.
12
+ */
13
+ coalescedFrameTasks: number;
14
+ frameTaskQueueDepthBeforeRun: number;
15
+ frameTaskQueueDepthAfterRun: number;
16
+ remainingFrameTasks: number;
17
+ /**
18
+ * Number of producer-level values that were not applied individually.
19
+ * For latest-only mailboxes these are dropped intermediate states.
20
+ * For merge mailboxes they may be folded into the applied payload.
21
+ */
22
+ droppedUpdates: number;
23
+ reason: FramePerfReason;
24
+ sync: boolean;
25
+ requestMore: boolean;
26
+ error?: unknown;
27
+ mailboxFailure?: SchedulerFrameMailboxDeliveryAttempt;
28
+ }>;
29
+ export declare const EMPTY_FRAME_TASK_RUN_STATS: SchedulerFrameTaskRunStats;
30
+ type SchedulerFrameTasksOptions = Readonly<{
31
+ isActive: () => boolean;
32
+ invalidate: (options?: TerminalSchedulerInvalidateOptions) => void;
33
+ flushFrame: (stats: SchedulerFrameTaskRunStats) => void;
34
+ }>;
35
+ export declare function createSchedulerFrameTasks(options: SchedulerFrameTasksOptions): {
36
+ readonly configure: (config: TerminalSchedulerConfig) => void;
37
+ readonly queueFrameTask: (task: TerminalFrameTask) => boolean;
38
+ readonly cancelFrameTask: (id: string) => boolean;
39
+ readonly requestLive: (reason: string) => () => void;
40
+ readonly dropLive: (reason: string) => void;
41
+ readonly isInsideFrame: () => boolean;
42
+ readonly cancelScheduledFrame: () => void;
43
+ readonly runPendingFrameTasks: (optionsForRun?: Readonly<{
44
+ force?: boolean;
45
+ }>) => SchedulerFrameTaskRunStats;
46
+ readonly scheduleIfNeeded: (requestMore?: boolean) => void;
47
+ readonly remainingFrameTasks: () => number;
48
+ readonly liveReasonList: () => string[];
49
+ readonly queueDepth: () => 1 | 0;
50
+ };
51
+ export {};
@@ -0,0 +1,48 @@
1
+ import type { Ref } from "vue";
2
+ import type { Style } from "../core/types.js";
3
+ export type TuiThemeColorTokens = Readonly<{
4
+ link?: string;
5
+ linkVisited?: string;
6
+ danger?: string;
7
+ success?: string;
8
+ warning?: string;
9
+ info?: string;
10
+ muted?: string;
11
+ accent?: string;
12
+ }>;
13
+ export type TuiThemeComponentTokens = Readonly<{
14
+ TLink?: Readonly<{
15
+ style?: Style;
16
+ hoverStyle?: Style;
17
+ focusStyle?: Style;
18
+ visitedStyle?: Style;
19
+ underline?: boolean;
20
+ hoverUnderline?: boolean;
21
+ }>;
22
+ TTable?: Readonly<{
23
+ headerStyle?: Style;
24
+ borderStyle?: Style;
25
+ rowStyle?: Style;
26
+ selectedStyle?: Style;
27
+ activeStyle?: Style;
28
+ }>;
29
+ TFormField?: Readonly<{
30
+ labelStyle?: Style;
31
+ helpStyle?: Style;
32
+ errorStyle?: Style;
33
+ }>;
34
+ }>;
35
+ export type TuiTheme = Readonly<{
36
+ colors: TuiThemeColorTokens;
37
+ components: TuiThemeComponentTokens;
38
+ }>;
39
+ export type TuiThemeOverrides = Readonly<{
40
+ colors?: TuiThemeColorTokens;
41
+ components?: TuiThemeComponentTokens;
42
+ }>;
43
+ export declare const tuiDefaultTheme: TuiTheme;
44
+ export declare function createTheme(overrides?: TuiThemeOverrides): TuiTheme;
45
+ export declare const TuiThemeContextKey: import("vue").InjectionKey<Readonly<Ref<Readonly<{
46
+ colors: TuiThemeColorTokens;
47
+ components: TuiThemeComponentTokens;
48
+ }>>>>;
@@ -0,0 +1,2 @@
1
+ import type { TTranscriptHitRegion, TTranscriptVisualRow } from "./types.js";
2
+ export declare function findTranscriptHitRegion(visualRow: TTranscriptVisualRow | undefined, x: number): TTranscriptHitRegion | null;
@@ -0,0 +1,20 @@
1
+ import type { TTranscriptRow, TTranscriptVisualRow } from "./types.js";
2
+ import type { Style } from "../../core/types.js";
3
+ export type TTranscriptRowLayoutOptions = Readonly<{
4
+ row: TTranscriptRow;
5
+ rowIndex: number;
6
+ rowKey: string | number;
7
+ width: number;
8
+ baseStyle: Style;
9
+ hoverRegionId?: string | null;
10
+ focusedRegionId?: string | null;
11
+ hoverStyle?: Style;
12
+ focusStyle?: Style;
13
+ wrap?: boolean;
14
+ }>;
15
+ export declare function transcriptActionRegionId(rowKey: string | number, actionId: string): string;
16
+ export declare function transcriptLinkRegionId(rowKey: string | number, sourceSegmentIndex: number, tokenId?: string): string;
17
+ export declare function transcriptFoldToggleRegionId(rowKey: string | number): string;
18
+ export declare function transcriptToolCallRegionId(rowKey: string | number): string;
19
+ export declare function layoutTranscriptRow(options: TTranscriptRowLayoutOptions): TTranscriptVisualRow[];
20
+ export declare function layoutTranscriptRows(rows: readonly TTranscriptRow[], options: Omit<TTranscriptRowLayoutOptions, "row" | "rowIndex" | "rowKey">): TTranscriptVisualRow[];
@@ -0,0 +1,2 @@
1
+ import type { TTranscriptRow } from "./types.js";
2
+ export declare function plainTextForTranscriptRow(row: TTranscriptRow): string;
@@ -0,0 +1,122 @@
1
+ import type { Style } from "../../core/types.js";
2
+ export type TTranscriptSegment = Readonly<{
3
+ text: string;
4
+ style?: Style;
5
+ href?: string;
6
+ selectable?: boolean;
7
+ tokenId?: string;
8
+ meta?: unknown;
9
+ }>;
10
+ export type TTranscriptAction = Readonly<{
11
+ id: string;
12
+ label: string;
13
+ disabled?: boolean;
14
+ kind?: "primary" | "secondary" | "danger";
15
+ style?: Style;
16
+ hoverStyle?: Style;
17
+ focusStyle?: Style;
18
+ payload?: unknown;
19
+ }>;
20
+ export type TTranscriptRow = {
21
+ kind: "message";
22
+ key: string | number;
23
+ role?: "user" | "assistant" | "system" | "tool";
24
+ segments: readonly TTranscriptSegment[];
25
+ selectableText?: string;
26
+ actions?: readonly TTranscriptAction[];
27
+ meta?: unknown;
28
+ } | {
29
+ kind: "action";
30
+ key: string | number;
31
+ label: string;
32
+ actions: readonly TTranscriptAction[];
33
+ selectableText?: string;
34
+ meta?: unknown;
35
+ } | {
36
+ kind: "tool-call";
37
+ key: string | number;
38
+ title: string;
39
+ collapsed: boolean;
40
+ summary?: readonly TTranscriptSegment[];
41
+ body?: readonly TTranscriptSegment[];
42
+ actions?: readonly TTranscriptAction[];
43
+ selectableText?: string;
44
+ meta?: unknown;
45
+ } | {
46
+ kind: "approval";
47
+ key: string | number;
48
+ title: string;
49
+ description?: readonly TTranscriptSegment[];
50
+ actions: readonly TTranscriptAction[];
51
+ selectableText?: string;
52
+ meta?: unknown;
53
+ };
54
+ export type TTranscriptDataSource = Readonly<{
55
+ rowCount(): number;
56
+ getRow(index: number): TTranscriptRow;
57
+ getRowKey?: (index: number) => string | number;
58
+ getRowVersion?: (index: number) => string | number;
59
+ firstRowIndex?: () => number;
60
+ }>;
61
+ export type TTranscriptVisualSegment = Readonly<{
62
+ text: string;
63
+ cells: number;
64
+ style: Style;
65
+ selectable?: boolean;
66
+ sourceSegmentIndex?: number;
67
+ }>;
68
+ export type TTranscriptSelectionSegment = Readonly<{
69
+ x0: number;
70
+ x1: number;
71
+ text: string;
72
+ selectable: boolean;
73
+ }>;
74
+ export type TTranscriptHitRegion = Readonly<{
75
+ id: string;
76
+ kind: "link" | "action" | "fold-toggle" | "tool-call";
77
+ rowIndex: number;
78
+ visualRow: number;
79
+ x0: number;
80
+ x1: number;
81
+ payload?: unknown;
82
+ hoverStyle?: Style;
83
+ focusStyle?: Style;
84
+ }>;
85
+ export type TTranscriptVisualRow = Readonly<{
86
+ rowIndex: number;
87
+ rowKey: string | number;
88
+ partIndex: number;
89
+ startCell: number;
90
+ segments: readonly TTranscriptVisualSegment[];
91
+ selectionSegments: readonly TTranscriptSelectionSegment[];
92
+ hitRegions: readonly TTranscriptHitRegion[];
93
+ selectableText?: string;
94
+ text: string;
95
+ }>;
96
+ export type TTranscriptRegionEvent = Readonly<{
97
+ region: TTranscriptHitRegion;
98
+ row: TTranscriptRow;
99
+ rowIndex: number;
100
+ absoluteRowIndex: number;
101
+ event?: unknown;
102
+ }>;
103
+ export type TTranscriptRowEvent = Readonly<{
104
+ row: TTranscriptRow;
105
+ rowIndex: number;
106
+ absoluteRowIndex: number;
107
+ event?: unknown;
108
+ }>;
109
+ export type TTranscriptViewHandle = Readonly<{
110
+ scrollToBottom(): void;
111
+ scrollToTop(): void;
112
+ scrollToRow(index: number, options?: {
113
+ align?: "start" | "center" | "end";
114
+ }): void;
115
+ invalidateRow(index: number): void;
116
+ invalidateRange(start: number, end: number): void;
117
+ refreshViewport(): void;
118
+ focusNextRegion(): boolean;
119
+ focusPreviousRegion(): boolean;
120
+ activateFocusedRegion(): boolean;
121
+ getHoveredRegion(): TTranscriptHitRegion | null;
122
+ }>;
@@ -0,0 +1,6 @@
1
+ export interface FrameCoalescer<T> {
2
+ request(value: T): void;
3
+ cancel(): void;
4
+ latest(): T | undefined;
5
+ }
6
+ export declare function createFrameCoalescer<T>(apply: (latest: T) => void): FrameCoalescer<T>;
@@ -0,0 +1,4 @@
1
+ import type { Rect } from "../../events/manager/types.js";
2
+ export declare function intersectRect(a: Rect, b: Rect): Rect | null;
3
+ export declare function translateRect(rect: Rect, dx: number, dy: number): Rect;
4
+ export declare function normalizeCellRect(rect: Rect): Rect;
@@ -0,0 +1,25 @@
1
+ import type { TerminalRenderPlane } from "../../core/render-plane.js";
2
+ import type { Rect } from "../../events/manager/types.js";
3
+ import type { RendererCapabilities } from "../../renderer/capabilities.js";
4
+ import type { RenderManager } from "../render/render-manager.js";
5
+ export type UnsafeFullRowScrollMode = "off" | "unsafe-full-row";
6
+ export type UnsafeFullRowScrollPlan = Readonly<{
7
+ exposedRows: readonly number[];
8
+ apply: () => void;
9
+ }>;
10
+ export declare function exposedRowsForDelta(y0: number, h: number, delta: number): number[];
11
+ export declare function prepareUnsafeFullRowScroll(options: Readonly<{
12
+ render: Pick<RenderManager, "unsafeScrollPlaneRows">;
13
+ plane: TerminalRenderPlane;
14
+ rect: Rect;
15
+ terminalSize: Readonly<{
16
+ cols: number;
17
+ rows: number;
18
+ }>;
19
+ delta: number;
20
+ rowScrollMode: UnsafeFullRowScrollMode;
21
+ rendererCapabilities: Pick<RendererCapabilities, "scrollOperations">;
22
+ isClipped: boolean;
23
+ hasPendingDirtyRows: boolean;
24
+ strategy?: "auto" | "viewport-repaint";
25
+ }>): UnsafeFullRowScrollPlan | null;
@@ -0,0 +1,3 @@
1
+ import type { Style } from "../../core/types.js";
2
+ export declare function defaultActiveStyle(base: Style): Style;
3
+ export declare function defaultDimStyle(base: Style): Style;
@@ -0,0 +1,27 @@
1
+ import { type WidthProvider } from "../../core/buffer/width.js";
2
+ export interface TextCellSegment {
3
+ text: string;
4
+ cells: number;
5
+ start: number;
6
+ end: number;
7
+ }
8
+ export declare function currentTextWidthProvider(): WidthProvider;
9
+ export declare function hasTextWidthAsciiFastPath(): boolean;
10
+ export declare function withTextWidthProvider<T>(provider: WidthProvider | undefined, fn: () => T): T;
11
+ export declare function withTextRenderPass<T>(fn: () => T, provider?: WidthProvider): T;
12
+ export declare function forEachTextCellSegment(text: string, cb: (segment: TextCellSegment) => void | false, provider?: WidthProvider): void;
13
+ export declare function graphemeRangeAt(text: string, index: number): {
14
+ start: number;
15
+ end: number;
16
+ } | null;
17
+ export declare function sanitizeInlineText(text: string): string;
18
+ export declare function sanitizeTextBlock(text: string): string;
19
+ export declare function textCellWidth(text: string, provider?: WidthProvider): number;
20
+ export declare function spaces(count: number): string;
21
+ export declare function repeatChar(ch: string, count: number): string;
22
+ export declare function sliceByCells(text: string, maxCells: number, provider?: WidthProvider): string;
23
+ export declare function sliceByCellsRange(text: string, startCells: number, endCells: number, provider?: WidthProvider): string;
24
+ export declare function padEndByCells(text: string, width: number, provider?: WidthProvider): string;
25
+ export declare function formatInlineCellLine(text: string, width: number, provider?: WidthProvider): string;
26
+ export declare function clearTextCaches(): void;
27
+ export declare function wrapByCells(text: string, width: number, provider?: WidthProvider): readonly string[];
@@ -0,0 +1,18 @@
1
+ export interface WheelScrollState {
2
+ accumulator: number;
3
+ lastAt: number;
4
+ lastEdgeDir: number;
5
+ lastEdgeAt: number;
6
+ }
7
+ export interface WheelScrollResult {
8
+ nextTop: number;
9
+ dir: -1 | 0 | 1;
10
+ lines: number;
11
+ }
12
+ export type WheelDeltaMode = "auto" | "line" | "pixel";
13
+ export interface WheelScrollOptions {
14
+ disableAcceleration?: boolean;
15
+ }
16
+ export declare function createWheelScrollState(): WheelScrollState;
17
+ export declare function resetWheelScrollState(state: WheelScrollState): void;
18
+ export declare function applyWheelScroll(state: WheelScrollState, deltaY: number, scrollTop: number, maxTop: number, now?: number, deltaMode?: WheelDeltaMode, options?: WheelScrollOptions): WheelScrollResult;