@simon_he/vue-tui 0.0.8 → 1.0.0-rc.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 (210) hide show
  1. package/README.md +130 -27
  2. package/dist/TSelect-BmSkar0D.js +8697 -0
  3. package/dist/ansi-palette-Bv5Vqr4k.js +1499 -0
  4. package/dist/ansi-styles.d.ts +200 -0
  5. package/dist/cli/headless-renderer.d.ts +29 -0
  6. package/dist/cli/input.d.ts +49 -0
  7. package/dist/cli/node-file-writers.d.ts +12 -0
  8. package/dist/cli/node-module.d.ts +2 -0
  9. package/dist/cli/parse-kitty.d.ts +2 -0
  10. package/dist/cli/parse-mouse.d.ts +2 -0
  11. package/dist/cli/parse-utils.d.ts +14 -0
  12. package/dist/cli/parse-xterm.d.ts +2 -0
  13. package/dist/cli/path-provider-types.d.ts +1 -0
  14. package/dist/cli/path-provider.d.ts +4 -0
  15. package/dist/cli/path-suggest-core.d.ts +1 -0
  16. package/dist/cli/path-suggest.d.ts +15 -0
  17. package/dist/cli/recording.d.ts +4 -0
  18. package/dist/cli/stdin-buffer.d.ts +33 -0
  19. package/dist/cli.cjs +10664 -0
  20. package/dist/cli.d.cts +22 -0
  21. package/dist/cli.d.ts +22 -0
  22. package/dist/cli.js +9521 -0
  23. package/dist/core/ansi/capability.d.ts +20 -0
  24. package/dist/core/ansi/colors.d.ts +41 -0
  25. package/dist/core/ansi/sgr.d.ts +7 -0
  26. package/dist/core/ansi/theme.d.ts +6 -0
  27. package/dist/core/ansi-palette.d.ts +14 -0
  28. package/dist/core/buffer/buffer.d.ts +54 -0
  29. package/dist/core/buffer/width.d.ts +4 -0
  30. package/dist/core/debug-logger.d.ts +18 -0
  31. package/dist/core/hyperlink.d.ts +9 -0
  32. package/dist/core/index.d.ts +4 -0
  33. package/dist/core/path-provider-types.d.ts +24 -0
  34. package/dist/core/path-suggest.d.ts +35 -0
  35. package/dist/core/render-plane.d.ts +3 -0
  36. package/dist/core/terminal/create-terminal.d.ts +7 -0
  37. package/dist/core/terminal/emitter.d.ts +7 -0
  38. package/dist/core/types.d.ts +107 -0
  39. package/dist/core.cjs +3072 -0
  40. package/dist/core.d.cts +14 -0
  41. package/dist/core.d.ts +14 -0
  42. package/dist/core.js +422 -0
  43. package/dist/create-terminal-app.d.ts +34 -0
  44. package/dist/dom-renderer-CDVQIcIL.js +1172 -0
  45. package/dist/events/index.d.ts +6 -0
  46. package/dist/events/manager/cli-event-manager.d.ts +22 -0
  47. package/dist/events/manager/event-manager.d.ts +30 -0
  48. package/dist/events/manager/selection-suppression.d.ts +3 -0
  49. package/dist/events/manager/types.d.ts +108 -0
  50. package/dist/events/recording.d.ts +44 -0
  51. package/dist/experimental.cjs +1777 -1244
  52. package/dist/experimental.d.cts +39 -0
  53. package/dist/experimental.d.ts +39 -825
  54. package/dist/experimental.js +492 -343
  55. package/dist/frame-perf-C-w8mjJL.js +98 -0
  56. package/dist/hyperlink-B5PD7a3Q.js +331 -0
  57. package/dist/index.cjs +13133 -19960
  58. package/dist/index.d.cts +13 -0
  59. package/dist/index.d.ts +13 -1528
  60. package/dist/index.js +13 -20026
  61. package/dist/markdown.cjs +8728 -7359
  62. package/dist/markdown.d.cts +10 -0
  63. package/dist/markdown.d.ts +10 -112
  64. package/dist/markdown.js +169 -101
  65. package/dist/observability/cli-latency-node.d.ts +3 -0
  66. package/dist/observability/cli-latency-types.d.ts +41 -0
  67. package/dist/observability/cli-latency.d.ts +3 -0
  68. package/dist/observability/frame-perf-store.d.ts +13 -0
  69. package/dist/observability/frame-perf.d.ts +40 -0
  70. package/dist/observability/trace.d.ts +40 -0
  71. package/dist/observability/tui-profiler.d.ts +33 -0
  72. package/dist/observability.cjs +99 -0
  73. package/dist/observability.d.cts +6 -0
  74. package/dist/observability.d.ts +6 -0
  75. package/dist/observability.js +3 -0
  76. package/dist/path-DDiSCXrQ.js +99 -0
  77. package/dist/path-suggest-0Q2BDsuj.js +274 -0
  78. package/dist/path-suggest-Dk9TRLh5.js +3 -0
  79. package/dist/{path-suggest-DmrmeueH.js → path-suggest-bvR9SY6Q.js} +86 -18
  80. package/dist/renderer/capabilities.d.ts +13 -0
  81. package/dist/renderer/cli/index.d.ts +2 -0
  82. package/dist/renderer/cli/stdout-metrics.d.ts +18 -0
  83. package/dist/renderer/cli/stdout-renderer.d.ts +48 -0
  84. package/dist/renderer/dom/dom-renderer.d.ts +157 -0
  85. package/dist/renderer/dom/index.d.ts +2 -0
  86. package/dist/renderer/index.d.ts +2 -0
  87. package/dist/renderer-dom.cjs +1511 -0
  88. package/dist/renderer-dom.d.cts +4 -0
  89. package/dist/renderer-dom.d.ts +4 -0
  90. package/dist/renderer-dom.js +6 -0
  91. package/dist/runtime/index.d.ts +36 -0
  92. package/dist/runtime/osc52.d.ts +9 -0
  93. package/dist/runtime-DtrcQidD.js +1197 -0
  94. package/dist/runtime.cjs +1697 -0
  95. package/dist/runtime.d.cts +9 -0
  96. package/dist/runtime.d.ts +9 -0
  97. package/dist/runtime.js +4 -0
  98. package/dist/selection/terminal-selection.d.ts +122 -0
  99. package/dist/sgr-DMK2AvuT.js +304 -0
  100. package/dist/style-cache-i0ZABZRq.js +178 -0
  101. package/dist/terminal-selection-BCOh9jsL.js +329 -0
  102. package/dist/utils/env.d.ts +3 -0
  103. package/dist/utils/newlines.d.ts +1 -0
  104. package/dist/utils/path.d.ts +7 -0
  105. package/dist/utils/url-safety.d.ts +2 -0
  106. package/dist/vue/components/TAnchor.d.ts +108 -0
  107. package/dist/vue/components/TBox.d.ts +144 -0
  108. package/dist/vue/components/TDebugOverlay.d.ts +43 -0
  109. package/dist/vue/components/TDialog.d.ts +256 -0
  110. package/dist/vue/components/TFlow.d.ts +85 -0
  111. package/dist/vue/components/TInput.d.ts +554 -0
  112. package/dist/vue/components/TInputBox.d.ts +158 -0
  113. package/dist/vue/components/TJsonEditor.d.ts +165 -0
  114. package/dist/vue/components/TList.d.ts +119 -0
  115. package/dist/vue/components/TLogLinksPanel.d.ts +238 -0
  116. package/dist/vue/components/TLogMinimap.d.ts +263 -0
  117. package/dist/vue/components/TLogScrollbar.d.ts +236 -0
  118. package/dist/vue/components/TLogSearchBar.d.ts +267 -0
  119. package/dist/vue/components/TLogSearchPager.d.ts +162 -0
  120. package/dist/vue/components/TLogSearchResults.d.ts +200 -0
  121. package/dist/vue/components/TLogView.d.ts +502 -0
  122. package/dist/vue/components/TLogVirtualLinksPanel.d.ts +141 -0
  123. package/dist/vue/components/TLogVirtualSearchResults.d.ts +146 -0
  124. package/dist/vue/components/TMarkdownText.d.ts +134 -0
  125. package/dist/vue/components/TMultilineModal.d.ts +62 -0
  126. package/dist/vue/components/TPathPicker.d.ts +213 -0
  127. package/dist/vue/components/TRenderLayer.d.ts +16 -0
  128. package/dist/vue/components/TRenderPlane.d.ts +17 -0
  129. package/dist/vue/components/TSelect.d.ts +215 -0
  130. package/dist/vue/components/TText.d.ts +116 -0
  131. package/dist/vue/components/TTransition.d.ts +83 -0
  132. package/dist/vue/components/TView.d.ts +127 -0
  133. package/dist/vue/components/TVirtualList.d.ts +182 -0
  134. package/dist/vue/components/TVirtualMarkdown.d.ts +168 -0
  135. package/dist/vue/components/TerminalProvider.d.ts +195 -0
  136. package/dist/vue/components/input/host.d.ts +17 -0
  137. package/dist/vue/components/input/plugins/hostPlugin.d.ts +7 -0
  138. package/dist/vue/components/input/plugins/hostPlugin.node.d.ts +15 -0
  139. package/dist/vue/components/input/plugins/mentionUtils.d.ts +17 -0
  140. package/dist/vue/components/input/plugins/nodeMentionPathProvider.d.ts +2 -0
  141. package/dist/vue/components/input/plugins/promptMentionPlugin.d.ts +8 -0
  142. package/dist/vue/components/input/plugins/promptMentionState.d.ts +98 -0
  143. package/dist/vue/components/input/plugins/restrictText.d.ts +27 -0
  144. package/dist/vue/components/input/plugins/types.d.ts +90 -0
  145. package/dist/vue/components/input/utils/inlineText.d.ts +57 -0
  146. package/dist/vue/components/input/utils/inlineTextTokens.d.ts +34 -0
  147. package/dist/vue/components/input/utils/primitives.d.ts +3 -0
  148. package/dist/vue/components/input/utils/wordNavigation.d.ts +6 -0
  149. package/dist/vue/components/list/list-geometry.d.ts +16 -0
  150. package/dist/vue/components/list/list-paint.d.ts +1 -0
  151. package/dist/vue/components/list/scroll-state.d.ts +25 -0
  152. package/dist/vue/components/list/selection-state.d.ts +6 -0
  153. package/dist/vue/components/terminal-provider/copy-toast.d.ts +6 -0
  154. package/dist/vue/components/terminal-provider/portals.d.ts +17 -0
  155. package/dist/vue/components/terminal-provider/scheduler.d.ts +29 -0
  156. package/dist/vue/components/terminal-provider/selection-config.d.ts +15 -0
  157. package/dist/vue/components/terminal-provider/utils.d.ts +5 -0
  158. package/dist/vue/composables/use-layout.d.ts +2 -0
  159. package/dist/vue/composables/use-render-node.d.ts +19 -0
  160. package/dist/vue/composables/use-render-stack.d.ts +3 -0
  161. package/dist/vue/composables/use-runtime.d.ts +5 -0
  162. package/dist/vue/composables/use-terminal-node.d.ts +14 -0
  163. package/dist/vue/composables/use-terminal.d.ts +2 -0
  164. package/dist/vue/composables/use-visibility.d.ts +12 -0
  165. package/dist/vue/context.d.ts +153 -0
  166. package/dist/vue/index.d.ts +39 -0
  167. package/dist/vue/injection-key.d.ts +2 -0
  168. package/dist/vue/log/append-only-log-store.d.ts +2 -0
  169. package/dist/vue/log/tlog-keymap.d.ts +28 -0
  170. package/dist/vue/log/tlog-plugins.d.ts +144 -0
  171. package/dist/vue/log/tlog-session.d.ts +81 -0
  172. package/dist/vue/log/tlog-theme.d.ts +68 -0
  173. package/dist/vue/log/types.d.ts +43 -0
  174. package/dist/vue/log/use-tlog-link-controller.d.ts +31 -0
  175. package/dist/vue/log/use-tlog-retained-index.d.ts +26 -0
  176. package/dist/vue/log/use-tlog-search-controller.d.ts +51 -0
  177. package/dist/vue/log/use-tlog-search-results-page.d.ts +31 -0
  178. package/dist/vue/log/use-tlog-virtual-search-results.d.ts +22 -0
  179. package/dist/vue/markdown/ast.d.ts +3 -0
  180. package/dist/vue/markdown/block-source.d.ts +22 -0
  181. package/dist/vue/markdown/document.d.ts +18 -0
  182. package/dist/vue/markdown/layout.d.ts +16 -0
  183. package/dist/vue/markdown/parser.d.ts +11 -0
  184. package/dist/vue/markdown/render.d.ts +10 -0
  185. package/dist/vue/markdown/theme.d.ts +186 -0
  186. package/dist/vue/markdown/types.d.ts +47 -0
  187. package/dist/vue/render/context.d.ts +3 -0
  188. package/dist/vue/render/render-manager.d.ts +94 -0
  189. package/dist/vue/router/RouterView.d.ts +25 -0
  190. package/dist/vue/router/composables.d.ts +4 -0
  191. package/dist/vue/router/context.d.ts +4 -0
  192. package/dist/vue/router/router.d.ts +7 -0
  193. package/dist/vue/router/types.d.ts +29 -0
  194. package/dist/vue/scheduler/frame-mailbox.d.ts +55 -0
  195. package/dist/vue/scheduler/frame-scheduler.d.ts +51 -0
  196. package/dist/vue/utils/frame-task.d.ts +6 -0
  197. package/dist/vue/utils/rect.d.ts +4 -0
  198. package/dist/vue/utils/style-cache.d.ts +3 -0
  199. package/dist/vue/utils/text.d.ts +26 -0
  200. package/dist/vue/utils/wheel-scroll.d.ts +18 -0
  201. package/dist/vue.cjs +18882 -0
  202. package/dist/vue.d.cts +3 -0
  203. package/dist/vue.d.ts +3 -0
  204. package/dist/vue.js +3066 -0
  205. package/dist/{wheel-scroll-CiNsasLf.js → wheel-scroll-B-WlFuNB.js} +361 -367
  206. package/package.json +165 -35
  207. package/dist/path-suggest-BeV6n7m-.js +0 -3
  208. package/dist/sgr-Tko2EQ0U.js +0 -484
  209. package/dist/theme-Bsm65g8k.d.ts +0 -32
  210. package/dist/types-ClIV2h1o.d.ts +0 -103
package/README.md CHANGED
@@ -12,20 +12,86 @@ Use it when you want:
12
12
  ## Install
13
13
 
14
14
  ```bash
15
- pnpm add @simon_he/vue-tui vue
15
+ pnpm add @simon_he/vue-tui@rc vue
16
16
  ```
17
17
 
18
18
  Vue is a peer dependency. The current package supports Vue `>=3.3.0 <4`.
19
19
 
20
+ ## Runtime Support
21
+
22
+ The published package supports Node.js `>=16.17` for CLI/runtime consumers.
23
+
24
+ Development, release validation, and documentation builds are run on Node.js 20 in CI because the repository toolchain uses modern build/test tooling.
25
+
20
26
  ## Entry Points
21
27
 
22
- | Import | Stability | Use it for |
23
- | -------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------- |
24
- | `@simon_he/vue-tui` | Core | Terminal runtime, root Vue components, DOM/stdout renderers, events, layout, inputs, router, and runtime helpers |
25
- | `@simon_he/vue-tui/markdown` | Focused | `TMarkdownText`, `TVirtualMarkdown`, markdown parser and layout helpers, streaming markdown block sources |
26
- | `@simon_he/vue-tui/experimental` | Experimental | `TVirtualList`, `TLogView`, TLog search/link/minimap companions, append-only log store, and TLog plugins |
28
+ | Import | Stability | Use it for |
29
+ | --------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------- |
30
+ | `@simon_he/vue-tui` | Public | Browser-safe terminal core, DOM renderer, stable Vue components, and input host plugin factory |
31
+ | `@simon_he/vue-tui/core` | Public | Terminal core, buffer-facing types, ANSI/theme/path/hyperlink helpers |
32
+ | `@simon_he/vue-tui/renderer/dom` | Public | DOM renderer factory and renderer capabilities |
33
+ | `@simon_he/vue-tui/vue` | Advanced | Extended Vue components, composables, router helpers, and Vue runtime internals |
34
+ | `@simon_he/vue-tui/runtime` | Advanced | Runtime wiring, selection helpers, and clipboard abstraction |
35
+ | `@simon_he/vue-tui/observability` | Advanced | Frame perf store, profiler hooks, and trace helpers |
36
+ | `@simon_he/vue-tui/cli` | Public | Node-only headless Vue app runtime, stdin driver, stdout renderer, path provider, recording, and terminal clipboard helpers |
37
+ | `@simon_he/vue-tui/markdown` | Public | `TMarkdownText`, `TVirtualMarkdown`, markdown parser and layout helpers, streaming markdown block sources |
38
+ | `@simon_he/vue-tui/experimental` | Experimental | `TVirtualList`, `TLogView`, TLog search/link/minimap companions, append-only log store, and TLog plugins |
39
+
40
+ The stable surface is terminal core, DOM rendering, CLI runtime, basic Vue components, and markdown APIs. High-throughput log and virtualization APIs stay under `/experimental` until their public surface settles; keep those imports isolated in application code.
41
+
42
+ Do not deep import from `@simon_he/vue-tui/dist/...`; only the entry points above are part of the supported package contract.
43
+
44
+ ### Migration: Node Host Adapter Moved To `/cli`
45
+
46
+ Node-specific input host defaults are no longer exported from the browser-safe root entrypoint.
47
+
48
+ Before:
49
+
50
+ ```ts
51
+ import { createDefaultTInputHostAdapter, defaultTInputHostPlugin } from "@simon_he/vue-tui";
52
+ ```
53
+
54
+ After:
55
+
56
+ ```ts
57
+ import { createTInputHostPlugin } from "@simon_he/vue-tui";
58
+ import { createDefaultTInputHostAdapter, defaultTInputHostPlugin } from "@simon_he/vue-tui/cli";
59
+ ```
60
+
61
+ ### Migration: Root Entry Was Narrowed
62
+
63
+ The root entrypoint now keeps only stable browser-safe APIs. Extended Vue components and Vue router/composable helpers move to `@simon_he/vue-tui/vue`.
27
64
 
28
- High-throughput log and virtualization APIs stay under `/experimental` until their public surface settles. Keep those imports isolated in application code.
65
+ | Before root import | New import |
66
+ | ------------------ | ----------------------- |
67
+ | `TAnchor` | `@simon_he/vue-tui/vue` |
68
+ | `TFlow` | `@simon_he/vue-tui/vue` |
69
+ | `TInputBox` | `@simon_he/vue-tui/vue` |
70
+ | `TPathPicker` | `@simon_he/vue-tui/vue` |
71
+ | `TJsonEditor` | `@simon_he/vue-tui/vue` |
72
+ | `TRenderPlane` | `@simon_he/vue-tui/vue` |
73
+ | `TRenderLayer` | `@simon_he/vue-tui/vue` |
74
+ | `TTransition` | `@simon_he/vue-tui/vue` |
75
+ | router/composables | `@simon_he/vue-tui/vue` |
76
+ | Node host defaults | `@simon_he/vue-tui/cli` |
77
+
78
+ Before:
79
+
80
+ ```ts
81
+ import { TAnchor, TFlow } from "@simon_he/vue-tui";
82
+ ```
83
+
84
+ After:
85
+
86
+ ```ts
87
+ import { TAnchor, TFlow } from "@simon_he/vue-tui/vue";
88
+ ```
89
+
90
+ ### Hyperlinks
91
+
92
+ DOM renderer link rendering is opt-in through `domRendererOptions.links`. Once enabled, DOM anchors allow safe absolute and relative targets such as `https:`, `http:`, `mailto:`, `/path`, `./path`, `../path`, `#hash`, and `?q=1`. Link callbacks preserve native browser behavior unless they return `false`.
93
+
94
+ CLI/stdout rendering uses OSC8 hyperlinks and keeps a stricter boundary: only safe absolute `https:`, `http:`, and `mailto:` hrefs are emitted by default. `file:` links stay opt-in for terminal-specific providers.
29
95
 
30
96
  ## Browser Usage
31
97
 
@@ -54,7 +120,13 @@ const input = ref("");
54
120
  For a real terminal, mount a headless Vue app and attach stdout/stdin:
55
121
 
56
122
  ```ts
57
- import { createStdinDriver, createStdoutRenderer, createTerminalApp } from "@simon_he/vue-tui";
123
+ import {
124
+ createStdinDriver,
125
+ createStdoutRenderer,
126
+ createTerminalApp,
127
+ installTerminalCleanup,
128
+ type TerminalCleanupHandle,
129
+ } from "@simon_he/vue-tui/cli";
58
130
  import App from "./App.vue";
59
131
 
60
132
  const app = createTerminalApp({
@@ -70,45 +142,70 @@ const renderer = createStdoutRenderer(app.terminal, {
70
142
  output: process.stdout,
71
143
  hideCursor: true,
72
144
  colorMode: "auto",
145
+ allowFileUrls: true,
73
146
  });
74
147
 
75
148
  app.scheduler.flush();
76
149
 
77
- const driver = createStdinDriver({
150
+ let driver: ReturnType<typeof createStdinDriver> | null = null;
151
+ let terminalCleanup: TerminalCleanupHandle | null = null;
152
+ let disposed = false;
153
+
154
+ const cleanup = () => {
155
+ if (disposed) return;
156
+ disposed = true;
157
+ terminalCleanup?.uninstall();
158
+ driver?.dispose();
159
+ renderer.dispose();
160
+ app.dispose();
161
+ };
162
+
163
+ const exit = () => {
164
+ cleanup();
165
+ process.exit(0);
166
+ };
167
+
168
+ terminalCleanup = installTerminalCleanup(cleanup, {
169
+ signalPolicy: "reraise",
170
+ cleanupOnUnhandledRejection: false,
171
+ });
172
+ driver = createStdinDriver({
78
173
  dispatch(event) {
79
174
  const prevented = app.events.dispatch(event);
80
175
  app.scheduler.flush();
81
176
  return prevented;
82
177
  },
83
178
  enableMouse: true,
84
- onExit() {
85
- driver.dispose();
86
- renderer.dispose();
87
- app.dispose();
88
- process.exit(0);
89
- },
179
+ onExit: exit,
90
180
  });
91
181
  ```
92
182
 
183
+ Signal cleanup restores terminal state first. `installTerminalCleanup()` returns a cleanup handle: call `handle.uninstall()` to remove process listeners without disposing the app, or `handle.cleanup()` to run cleanup manually. By default, signal handling uses `signalPolicy: "reraise"`: the helper cleans up, removes its own listeners, and re-sends the original signal when no other listener owns that signal. If the host process has other listeners for the same signal, those listeners keep ownership of termination. Set `signalPolicy: "cleanup-only"` only when the host explicitly owns termination, or `signalPolicy: "exit"` when vue-tui should exit with the conventional signal exit code after cleanup.
184
+
185
+ Unhandled promise rejections stay host-owned by default. Setting `cleanupOnUnhandledRejection: true` cleans up and rethrows by default. Set `rethrowUnhandledRejection: false` only when the host explicitly wants to suppress the rejection.
186
+
93
187
  ## Core Concepts
94
188
 
95
189
  - `createTerminal({ cols, rows })` owns the cell buffer, cursor, planes, scrollback, and commit events.
96
190
  - `createDomRenderer(terminal, container)` renders terminal cells to DOM with row caching and fast paths for plain and styled rows.
97
- - `createStdoutRenderer(terminal, options)` emits ANSI output for real terminal UIs.
191
+ - `createStdoutRenderer(terminal, options)` emits ANSI output for real terminal UIs from `/cli`.
98
192
  - `TerminalProvider` is the browser-facing Vue runtime provider.
99
193
  - `createTerminalApp()` is the headless runtime for CLI apps and deterministic tests.
100
194
  - `TRenderPlane` separates transcript, chrome, input, and overlay surfaces so small updates do not repaint large panes.
101
195
 
102
196
  ## Components
103
197
 
104
- | Area | Components |
105
- | ------------- | ---------------------------------------------------------------------------------------------- |
106
- | Layout | `TBox`, `TView`, `TAnchor`, `TFlow`, `TRenderPlane`, `TRenderLayer` |
107
- | Text | `TText`, `TTransition`, `TMarkdownText`, `TVirtualMarkdown` |
108
- | Input | `TInput`, `TInputBox`, `TSelect`, `TPathPicker`, `TJsonEditor` |
109
- | Overlay | `TDialog`, `TMultilineModal`, `TDebugOverlay` |
110
- | Experimental | `TVirtualList`, `TLogView`, `TLogSearchBar`, `TLogLinksPanel`, `TLogScrollbar`, `TLogMinimap` |
111
- | Runtime tools | `createTerminal`, `createDomRenderer`, `createStdoutRenderer`, `createTerminalApp`, event APIs |
198
+ | Area | Import | Components / APIs |
199
+ | -------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
200
+ | Stable layout | `@simon_he/vue-tui` | `TBox`, `TView` |
201
+ | Stable text | `@simon_he/vue-tui` | `TText` |
202
+ | Stable input | `@simon_he/vue-tui` | `TInput`, `TList`, `TSelect` |
203
+ | Stable overlay | `@simon_he/vue-tui` | `TDialog` |
204
+ | Vue extended | `@simon_he/vue-tui/vue` | `TAnchor`, `TFlow`, `TRenderPlane`, `TRenderLayer`, `TTransition`, `TInputBox`, `TPathPicker`, `TJsonEditor`, `TMultilineModal`, `TDebugOverlay`, composables, router APIs |
205
+ | Markdown | `@simon_he/vue-tui/markdown` | `TMarkdownText`, `TVirtualMarkdown` |
206
+ | Experimental | `@simon_he/vue-tui/experimental` | `TVirtualList`, `TLogView`, `TLogSearchBar`, `TLogLinksPanel`, `TLogScrollbar`, `TLogMinimap` |
207
+ | Runtime | `@simon_he/vue-tui/runtime` | runtime, event, and selection APIs |
208
+ | CLI | `@simon_he/vue-tui/cli` | `createTerminalApp`, `createStdoutRenderer`, `createStdinDriver`, Node host adapters |
112
209
 
113
210
  See [docs/components.md](./docs/components.md) and [docs/generated/components-api.md](./docs/generated/components-api.md) for props and events.
114
211
 
@@ -121,8 +218,10 @@ See [docs/components.md](./docs/components.md) and [docs/generated/components-ap
121
218
  | [Core API](./docs/api.md) | Terminal, renderer, events, runtime, planes, and scheduler contracts |
122
219
  | [Performance](./docs/performance.md) | Practical performance guidance |
123
220
  | [High-throughput rendering](./docs/high-throughput-rendering.md) | Scheduler, dirty rows, mailbox, log, and renderer architecture |
221
+ | [Component acceptance](./docs/components-acceptance.md) | Release readiness checks for component API and behavior |
124
222
  | [Agent Console](./docs/agent-console.md) | Streaming transcript example stack |
125
- | [Release candidate](./docs/release-candidate.md) | 0.x validation, package export checks, and migration notes |
223
+ | [Release candidate](./docs/release-candidate.md) | 1.0 RC validation, package export checks, and migration notes |
224
+ | [Security policy](./SECURITY.md) | Vulnerability reporting and terminal permission boundaries |
126
225
 
127
226
  Run the docs locally:
128
227
 
@@ -152,7 +251,7 @@ The smoke commands are deterministic and avoid real LLM APIs, real TTY dependenc
152
251
  - Use `TLogView` with `createAppendOnlyLogStore({ maxLines })` for retained streaming logs.
153
252
  - Provide stable line keys for custom `TLogView` sources; mutable rows should change keys or call the explicit invalidation APIs.
154
253
  - Split high-volume content and frequently changing chrome into different `TRenderPlane`s.
155
- - Reuse style objects on hot paths instead of creating new object literals every frame.
254
+ - Style objects are treated as immutable. Reuse stable style objects on hot paths, but pass a new object when a style changes.
156
255
 
157
256
  Useful checks:
158
257
 
@@ -167,12 +266,15 @@ pnpm run bench:phase2
167
266
  - Report bugs: [new bug report](https://github.com/Simon-He95/vue-tui/issues/new?template=bug_report.yml)
168
267
  - Request features: [new feature request](https://github.com/Simon-He95/vue-tui/issues/new?template=feature_request.yml)
169
268
  - Report documentation issues: [new docs issue](https://github.com/Simon-He95/vue-tui/issues/new?template=docs.yml)
269
+ - Report vulnerabilities privately: [Security policy](./SECURITY.md)
170
270
  - Browse existing issues: [GitHub issues](https://github.com/Simon-He95/vue-tui/issues)
171
271
 
172
272
  For renderer, scheduler, or terminal behavior bugs, include the renderer target (`DOM`, `stdout`, or headless), the relevant command, and a minimal reproduction when possible.
173
273
 
174
274
  ## Development
175
275
 
276
+ Use Node.js 20 for repository development, release validation, and documentation builds. This is a toolchain requirement, not the runtime requirement for the published package.
277
+
176
278
  ```bash
177
279
  pnpm install
178
280
  pnpm run format:check
@@ -189,11 +291,12 @@ pnpm run release:dry-run
189
291
  ```
190
292
 
191
293
  `release:dry-run` runs checks, tests, docs build, benchmarks, examples smoke, and packed package install smoke.
294
+ `release:ci` aliases `release:dry-run` for validation-only CI usage. The GitHub Release workflow is preferred because it publishes the already-verified tarball with npm provenance. If workflow token/provenance is unavailable, `release:local:dry-run` and `release:local` publish the locally verified tarball with the `rc` dist-tag. `release` and `release:workflow-only` intentionally fail to avoid accidental direct publishing.
192
295
 
193
296
  ## Package Notes
194
297
 
195
298
  - The published package ships `dist` only.
196
- - Root, markdown, and experimental entrypoints are available as ESM, CJS, and type declarations after build.
299
+ - Root, core, runtime, DOM renderer, observability, Vue, CLI, markdown, and experimental entrypoints are available as ESM, CJS, and type declarations after build.
197
300
  - The root browser/core API does not require a Node runtime, but CLI usage expects a Node-like stdout/stdin environment.
198
301
  - Terminal emoji and East Asian width behavior still depends on the user terminal and font.
199
302