@visulima/tui 0.0.1 → 1.0.0-alpha.2

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 (338) hide show
  1. package/CHANGELOG.md +200 -0
  2. package/LICENSE.md +303 -0
  3. package/README.md +173 -29
  4. package/dist/core/app.d.ts +50 -0
  5. package/dist/core/cell.d.ts +33 -0
  6. package/dist/core/index.d.ts +5 -0
  7. package/dist/core/index.js +5 -0
  8. package/dist/core/inline.d.ts +22 -0
  9. package/dist/core/input.d.ts +18 -0
  10. package/dist/core/native-binding.d.ts +22 -0
  11. package/dist/ink/ansi-to-cell.d.ts +5 -0
  12. package/dist/ink/ansi-tokenizer.d.ts +38 -0
  13. package/dist/ink/clipboard.d.ts +29 -0
  14. package/dist/ink/color-matrix.d.ts +49 -0
  15. package/dist/ink/color-utils.d.ts +30 -0
  16. package/dist/ink/colorize.d.ts +4 -0
  17. package/dist/ink/components/AccessibilityContext.d.ts +4 -0
  18. package/dist/ink/components/Alert.d.ts +30 -0
  19. package/dist/ink/components/AnimationContext.d.ts +10 -0
  20. package/dist/ink/components/App.d.ts +19 -0
  21. package/dist/ink/components/AppContext.d.ts +38 -0
  22. package/dist/ink/components/BackgroundContext.d.ts +5 -0
  23. package/dist/ink/components/Badge.d.ts +27 -0
  24. package/dist/ink/components/BigText.d.ts +71 -0
  25. package/dist/ink/components/Box.d.ts +58 -0
  26. package/dist/ink/components/Code.d.ts +46 -0
  27. package/dist/ink/components/ConfirmInput.d.ts +40 -0
  28. package/dist/ink/components/ConsoleOverlay.d.ts +52 -0
  29. package/dist/ink/components/Cursor.d.ts +43 -0
  30. package/dist/ink/components/CursorContext.d.ts +12 -0
  31. package/dist/ink/components/Dialog.d.ts +93 -0
  32. package/dist/ink/components/DiffView.d.ts +71 -0
  33. package/dist/ink/components/ErrorBoundary.d.ts +17 -0
  34. package/dist/ink/components/ErrorOverview.d.ts +6 -0
  35. package/dist/ink/components/FocusContext.d.ts +17 -0
  36. package/dist/ink/components/Gradient.d.ts +38 -0
  37. package/dist/ink/components/Help.d.ts +49 -0
  38. package/dist/ink/components/Link.d.ts +34 -0
  39. package/dist/ink/components/Markdown.d.ts +34 -0
  40. package/dist/ink/components/MultiSelect.d.ts +63 -0
  41. package/dist/ink/components/Newline.d.ts +12 -0
  42. package/dist/ink/components/OrderedList.d.ts +30 -0
  43. package/dist/ink/components/Paginator.d.ts +75 -0
  44. package/dist/ink/components/ProgressBar.d.ts +51 -0
  45. package/dist/ink/components/SelectInput.d.ts +96 -0
  46. package/dist/ink/components/SelectInputIndicator.d.ts +36 -0
  47. package/dist/ink/components/SelectInputItem.d.ts +43 -0
  48. package/dist/ink/components/Slider.d.ts +92 -0
  49. package/dist/ink/components/Spacer.d.ts +7 -0
  50. package/dist/ink/components/Spinner.d.ts +42 -0
  51. package/dist/ink/components/Static.d.ts +24 -0
  52. package/dist/ink/components/StaticRender.d.ts +28 -0
  53. package/dist/ink/components/StatusMessage.d.ts +26 -0
  54. package/dist/ink/components/StderrContext.d.ts +16 -0
  55. package/dist/ink/components/StdinContext.d.ts +29 -0
  56. package/dist/ink/components/StdoutContext.d.ts +16 -0
  57. package/dist/ink/components/Stopwatch.d.ts +44 -0
  58. package/dist/ink/components/Tab.d.ts +25 -0
  59. package/dist/ink/components/Table.d.ts +80 -0
  60. package/dist/ink/components/Tabs.d.ts +104 -0
  61. package/dist/ink/components/Text.d.ts +63 -0
  62. package/dist/ink/components/TextInput.d.ts +48 -0
  63. package/dist/ink/components/Textarea.d.ts +62 -0
  64. package/dist/ink/components/Timer.d.ts +52 -0
  65. package/dist/ink/components/Transform.d.ts +16 -0
  66. package/dist/ink/components/UnorderedList.d.ts +35 -0
  67. package/dist/ink/components/file-picker/FilePicker.d.ts +75 -0
  68. package/dist/ink/components/file-picker/index.d.ts +3 -0
  69. package/dist/ink/components/file-picker/types.d.ts +38 -0
  70. package/dist/ink/components/file-picker/use-file-system.d.ts +16 -0
  71. package/dist/ink/components/scroll/ControlledScrollView.d.ts +43 -0
  72. package/dist/ink/components/scroll/ScrollBar.d.ts +20 -0
  73. package/dist/ink/components/scroll/ScrollBarBox.d.ts +15 -0
  74. package/dist/ink/components/scroll/ScrollList.d.ts +12 -0
  75. package/dist/ink/components/scroll/ScrollView.d.ts +98 -0
  76. package/dist/ink/components/scroll/index.d.ts +10 -0
  77. package/dist/ink/components/scroll/use-state-ref.d.ts +8 -0
  78. package/dist/ink/components/tree-view/TreeView.d.ts +89 -0
  79. package/dist/ink/components/tree-view/TreeViewNode.d.ts +29 -0
  80. package/dist/ink/components/tree-view/index.d.ts +11 -0
  81. package/dist/ink/components/tree-view/theme.d.ts +24 -0
  82. package/dist/ink/components/tree-view/tree-node-map.d.ts +72 -0
  83. package/dist/ink/components/tree-view/types.d.ts +55 -0
  84. package/dist/ink/components/tree-view/use-tree-view-state.d.ts +135 -0
  85. package/dist/ink/components/tree-view/use-tree-view.d.ts +26 -0
  86. package/dist/ink/components/variant-config.d.ts +10 -0
  87. package/dist/ink/cursor-helpers.d.ts +38 -0
  88. package/dist/ink/data-limited-lru-map.d.ts +21 -0
  89. package/dist/ink/devtools-window-polyfill.d.ts +1 -0
  90. package/dist/ink/devtools.d.ts +1 -0
  91. package/dist/ink/dom.d.ts +213 -0
  92. package/dist/ink/get-max-width.d.ts +3 -0
  93. package/dist/ink/highlighter.d.ts +28 -0
  94. package/dist/ink/hooks/use-animation.d.ts +43 -0
  95. package/dist/ink/hooks/use-app.d.ts +6 -0
  96. package/dist/ink/hooks/use-box-metrics.d.ts +58 -0
  97. package/dist/ink/hooks/use-clipboard.d.ts +29 -0
  98. package/dist/ink/hooks/use-color-blindness.d.ts +33 -0
  99. package/dist/ink/hooks/use-console-capture.d.ts +43 -0
  100. package/dist/ink/hooks/use-cursor.d.ts +12 -0
  101. package/dist/ink/hooks/use-focus-manager.d.ts +42 -0
  102. package/dist/ink/hooks/use-focus.d.ts +30 -0
  103. package/dist/ink/hooks/use-input.d.ts +149 -0
  104. package/dist/ink/hooks/use-is-screen-reader-enabled.d.ts +6 -0
  105. package/dist/ink/hooks/use-key-bindings.d.ts +61 -0
  106. package/dist/ink/hooks/use-linked-scroll.d.ts +41 -0
  107. package/dist/ink/hooks/use-paste.d.ts +44 -0
  108. package/dist/ink/hooks/use-scroll-acceleration.d.ts +47 -0
  109. package/dist/ink/hooks/use-scroll-input.d.ts +34 -0
  110. package/dist/ink/hooks/use-stderr.d.ts +6 -0
  111. package/dist/ink/hooks/use-stdin.d.ts +7 -0
  112. package/dist/ink/hooks/use-stdout.d.ts +6 -0
  113. package/dist/ink/hooks/use-stopwatch.d.ts +40 -0
  114. package/dist/ink/hooks/use-terminal-palette.d.ts +19 -0
  115. package/dist/ink/hooks/use-text-buffer.d.ts +42 -0
  116. package/dist/ink/hooks/use-text-selection.d.ts +45 -0
  117. package/dist/ink/hooks/use-timer.d.ts +49 -0
  118. package/dist/ink/hooks/use-window-size.d.ts +18 -0
  119. package/dist/ink/ime-utils.d.ts +25 -0
  120. package/dist/ink/index.d.ts +159 -0
  121. package/dist/ink/index.js +100 -0
  122. package/dist/ink/ink.d.ts +189 -0
  123. package/dist/ink/input-parser.d.ts +10 -0
  124. package/dist/ink/input-utils.d.ts +16 -0
  125. package/dist/ink/instances.d.ts +3 -0
  126. package/dist/ink/kitty-keyboard.d.ts +23 -0
  127. package/dist/ink/layout.d.ts +26 -0
  128. package/dist/ink/log-update-native.d.ts +14 -0
  129. package/dist/ink/log-update.d.ts +21 -0
  130. package/dist/ink/measure-element.d.ts +147 -0
  131. package/dist/ink/measure-text.d.ts +56 -0
  132. package/dist/ink/mouse/Fullscreen.d.ts +8 -0
  133. package/dist/ink/mouse/MouseProvider.d.ts +11 -0
  134. package/dist/ink/mouse/ansi-parser.d.ts +37 -0
  135. package/dist/ink/mouse/constants.d.ts +59 -0
  136. package/dist/ink/mouse/index.d.ts +20 -0
  137. package/dist/ink/mouse/is-intersecting.d.ts +18 -0
  138. package/dist/ink/mouse/mouse-context.d.ts +36 -0
  139. package/dist/ink/mouse/use-element-position.d.ts +29 -0
  140. package/dist/ink/mouse/use-mouse-action.d.ts +7 -0
  141. package/dist/ink/mouse/use-mouse-position.d.ts +7 -0
  142. package/dist/ink/mouse/use-mouse.d.ts +7 -0
  143. package/dist/ink/mouse/use-on-mouse-click.d.ts +14 -0
  144. package/dist/ink/mouse/use-on-mouse-hover.d.ts +8 -0
  145. package/dist/ink/mouse/use-on-mouse-state.d.ts +11 -0
  146. package/dist/ink/output.d.ts +74 -0
  147. package/dist/ink/parse-keypress.d.ts +22 -0
  148. package/dist/ink/reconciler.d.ts +3 -0
  149. package/dist/ink/region.d.ts +99 -0
  150. package/dist/ink/render-background.d.ts +4 -0
  151. package/dist/ink/render-border.d.ts +4 -0
  152. package/dist/ink/render-node-to-output.d.ts +38 -0
  153. package/dist/ink/render-scrollbar.d.ts +9 -0
  154. package/dist/ink/render-sticky.d.ts +44 -0
  155. package/dist/ink/render-to-string.d.ts +37 -0
  156. package/dist/ink/render.d.ts +191 -0
  157. package/dist/ink/renderer.d.ts +17 -0
  158. package/dist/ink/resize-observer.d.ts +44 -0
  159. package/dist/ink/sanitize-ansi.d.ts +2 -0
  160. package/dist/ink/scroll.d.ts +23 -0
  161. package/dist/ink/selection.d.ts +70 -0
  162. package/dist/ink/squash-text-nodes.d.ts +18 -0
  163. package/dist/ink/style-flags.d.ts +17 -0
  164. package/dist/ink/styled-line-factory.d.ts +25 -0
  165. package/dist/ink/styled-line-serializer.d.ts +18 -0
  166. package/dist/ink/styled-line.d.ts +109 -0
  167. package/dist/ink/styles.d.ts +369 -0
  168. package/dist/ink/terminal-palette.d.ts +25 -0
  169. package/dist/ink/text-wrap.d.ts +10 -0
  170. package/dist/ink/token-to-elements.d.ts +22 -0
  171. package/dist/ink/utils/format-time.d.ts +4 -0
  172. package/dist/ink/utils.d.ts +9 -0
  173. package/dist/ink/wrap-text.d.ts +3 -0
  174. package/dist/ink/write-synchronized.d.ts +4 -0
  175. package/dist/packem_chunks/devtools.js +27 -0
  176. package/dist/packem_shared/AccessibilityContext-BLelHhNU.js +7 -0
  177. package/dist/packem_shared/Alert-Dr3s_LD9.js +17 -0
  178. package/dist/packem_shared/AnimationContext-BcJg8Jr6.js +15 -0
  179. package/dist/packem_shared/AppContext-CP0U6H7O.js +11 -0
  180. package/dist/packem_shared/BackgroundContext-BAUaxfOb.js +5 -0
  181. package/dist/packem_shared/Badge-Dk7EGGM6.js +13 -0
  182. package/dist/packem_shared/BigText-CjMdY63X.js +24 -0
  183. package/dist/packem_shared/Box-D_pSJ9Jp.js +73 -0
  184. package/dist/packem_shared/COLOR_BLINDNESS_SIMULATION-BsMy5Ewl.js +81 -0
  185. package/dist/packem_shared/Cell-DCg1kJY-.js +48 -0
  186. package/dist/packem_shared/Code-DjQvPBD9.js +53 -0
  187. package/dist/packem_shared/ConfirmInput-85Y4kRQW.js +44 -0
  188. package/dist/packem_shared/ConsoleOverlay-DBNa4vtj.js +57 -0
  189. package/dist/packem_shared/ControlledScrollView-BlOaxcsN.js +286 -0
  190. package/dist/packem_shared/ControlledScrollView-DfAhcufF.js +5 -0
  191. package/dist/packem_shared/Cursor-DiW7YoSK.js +18 -0
  192. package/dist/packem_shared/CursorContext-JxRzlqAx.js +9 -0
  193. package/dist/packem_shared/DevTools-aMPIsaHx.js +61 -0
  194. package/dist/packem_shared/Dialog-DsSNAVgC.js +71 -0
  195. package/dist/packem_shared/DiffView-hqaw-2S6.js +329 -0
  196. package/dist/packem_shared/FilePicker-DNwFxRhq.js +254 -0
  197. package/dist/packem_shared/FocusContext-CWkYtgcm.js +26 -0
  198. package/dist/packem_shared/FocusContext-D5wFxSRz.js +153 -0
  199. package/dist/packem_shared/Fullscreen-DrElAE1o.js +11 -0
  200. package/dist/packem_shared/Gradient-Ql5P0GUd.js +136 -0
  201. package/dist/packem_shared/Help-6wanGG38.js +112 -0
  202. package/dist/packem_shared/IMECompositionBuffer-Dl3S0KnF.js +55 -0
  203. package/dist/packem_shared/InputParser-BKHpWfvN.js +156 -0
  204. package/dist/packem_shared/LayoutNode-Cjnsodiy.js +131 -0
  205. package/dist/packem_shared/Link-COcKYfGT.js +66 -0
  206. package/dist/packem_shared/Markdown-y1ISztof.js +212 -0
  207. package/dist/packem_shared/MouseProvider-Y9TSSEGl.js +136 -0
  208. package/dist/packem_shared/MultiSelect-ChoLUcDI.js +129 -0
  209. package/dist/packem_shared/NAMED_COLORS-a4QBvb5r.js +262 -0
  210. package/dist/packem_shared/Newline-DBtYEg8x.js +7 -0
  211. package/dist/packem_shared/OrderedList-Cp7pXr6m.js +26 -0
  212. package/dist/packem_shared/Paginator-D1AuD-kj.js +104 -0
  213. package/dist/packem_shared/ProgressBar-DOfpVagn.js +22 -0
  214. package/dist/packem_shared/Renderer-zZ5O3vxc.js +31 -0
  215. package/dist/packem_shared/ResizeObserverEntry-Br4seLeQ.js +102 -0
  216. package/dist/packem_shared/ScrollBar-EWAs2Uc7.js +106 -0
  217. package/dist/packem_shared/ScrollBarBox-DTNNlh7R.js +72 -0
  218. package/dist/packem_shared/ScrollList-DCeIFL8M.js +227 -0
  219. package/dist/packem_shared/ScrollView-v3MCNIyX.js +196 -0
  220. package/dist/packem_shared/SelectInput-BN2TMyxp.js +260 -0
  221. package/dist/packem_shared/SelectInputIndicator-DkRMoH_b.js +9 -0
  222. package/dist/packem_shared/SelectInputItem-BF9LQgKu.js +8 -0
  223. package/dist/packem_shared/Slider-BWD7xZX6.js +116 -0
  224. package/dist/packem_shared/Spacer-Bs4ER-HK.js +8 -0
  225. package/dist/packem_shared/Spinner-BuI-kN4p.js +1799 -0
  226. package/dist/packem_shared/Static-DpTd6Eed.js +22 -0
  227. package/dist/packem_shared/Static-xmD9giJj.js +18 -0
  228. package/dist/packem_shared/StaticRender-tYwH6QXl.js +33 -0
  229. package/dist/packem_shared/StatusMessage-BtSYxzwb.js +14 -0
  230. package/dist/packem_shared/StderrContext-Bj4Mf7v7.js +17 -0
  231. package/dist/packem_shared/StdinContext-Bq_GNJ3z.js +38 -0
  232. package/dist/packem_shared/StdoutContext-CgjWeCdO.js +17 -0
  233. package/dist/packem_shared/Stopwatch-DjtTCyHn.js +23 -0
  234. package/dist/packem_shared/Tab-C6r5q4hR.js +7 -0
  235. package/dist/packem_shared/Table-D-rSVlzb.js +82 -0
  236. package/dist/packem_shared/Tabs-hki-KRnx.js +153 -0
  237. package/dist/packem_shared/Text-DvAUdZcK.js +65 -0
  238. package/dist/packem_shared/TextInput-C79WEQ5U.js +137 -0
  239. package/dist/packem_shared/Textarea-Dj06R6Zd.js +272 -0
  240. package/dist/packem_shared/Timer-wi9zuh4n.js +22 -0
  241. package/dist/packem_shared/Transform-BHxY_dAM.js +14 -0
  242. package/dist/packem_shared/TreeNodeMap-CtJUvBnd.js +155 -0
  243. package/dist/packem_shared/TreeView-C2062dtj.js +148 -0
  244. package/dist/packem_shared/TuiApp-DfxOnXqi.js +120 -0
  245. package/dist/packem_shared/TuiContext-CqEjMyXd.js +415 -0
  246. package/dist/packem_shared/UnorderedList-DhnadWjX.js +33 -0
  247. package/dist/packem_shared/ansi-parser-0BdVTKho.js +41 -0
  248. package/dist/packem_shared/ansi-tokenizer-LHq2LUWA.js +307 -0
  249. package/dist/packem_shared/boxes-oi3WUbyR.js +92 -0
  250. package/dist/packem_shared/colorize-88_Vk8cn.js +48 -0
  251. package/dist/packem_shared/comparePoints-CGMDnd3_.js +287 -0
  252. package/dist/packem_shared/createInlineLoop-BxMmcq9D.js +93 -0
  253. package/dist/packem_shared/createLinkedScrollGroup-Djw4Ceo0.js +44 -0
  254. package/dist/packem_shared/dom-DvzhsAez.js +225 -0
  255. package/dist/packem_shared/format-time-BGmnDukX.js +12 -0
  256. package/dist/packem_shared/getPathToRoot-a1wbwxfL.js +4 -0
  257. package/dist/packem_shared/getScrollHeight-BubfU_df.js +63 -0
  258. package/dist/packem_shared/input-utils-ViAEXa0Z.js +19 -0
  259. package/dist/packem_shared/isIntersecting-fEXHJN5R.js +10 -0
  260. package/dist/packem_shared/isOsc52Supported-G0k4sXJx.js +36 -0
  261. package/dist/packem_shared/isTerminalPaletteQuerySupported-EeiwMKbr.js +93 -0
  262. package/dist/packem_shared/kittyFlags-bNNf_9kX.js +26 -0
  263. package/dist/packem_shared/measure-element-Reza_yfC.js +396 -0
  264. package/dist/packem_shared/measure-text-DItZYotK.js +1189 -0
  265. package/dist/packem_shared/measureElement-CTgFCmKd.js +4 -0
  266. package/dist/packem_shared/mouse-context-BUHWKEIe.js +6 -0
  267. package/dist/packem_shared/parseSgrMouse-BHVBPP9G.js +1 -0
  268. package/dist/packem_shared/processLayout-BQ9kXfd3.js +2 -0
  269. package/dist/packem_shared/reconciler-BXf6miSS.js +211 -0
  270. package/dist/packem_shared/reconciler-gfmqURLy.js +680 -0
  271. package/dist/packem_shared/render-BAwdjfki.js +2806 -0
  272. package/dist/packem_shared/render-Bpjhf0lD.js +195 -0
  273. package/dist/packem_shared/renderToString-Cfg55DRD.js +62 -0
  274. package/dist/packem_shared/renderToString-ClIaXgrC.js +86 -0
  275. package/dist/packem_shared/renderTreeToBuffer-D3mo7M7m.js +308 -0
  276. package/dist/packem_shared/renderer-B3wROkeg.js +1431 -0
  277. package/dist/packem_shared/setEnableStyledLineCache-BpskngSJ.js +2 -0
  278. package/dist/packem_shared/squashTextNodesWithMap-iqm6OMMT.js +100 -0
  279. package/dist/packem_shared/text-width-DhuarWcB.js +42 -0
  280. package/dist/packem_shared/token-to-elements-BRFl_rzw.js +249 -0
  281. package/dist/packem_shared/treeViewTheme-BpSw9TMf.js +52 -0
  282. package/dist/packem_shared/useAnimation-kj31sA-T.js +62 -0
  283. package/dist/packem_shared/useApp-DPQlRzi5.js +6 -0
  284. package/dist/packem_shared/useBoxMetrics-rBjKc-g4.js +54 -0
  285. package/dist/packem_shared/useClipboard-B_9-adw1.js +23 -0
  286. package/dist/packem_shared/useColorBlindness-D_sTIhcb.js +30 -0
  287. package/dist/packem_shared/useConsoleCapture-Dvt7G1W1.js +61 -0
  288. package/dist/packem_shared/useCursor-BIJzc8k9.js +19 -0
  289. package/dist/packem_shared/useElementDimensions-CAoKitVD.js +67 -0
  290. package/dist/packem_shared/useFocus-CNl5QHHf.js +37 -0
  291. package/dist/packem_shared/useFocusManager-BPYaUuKQ.js +16 -0
  292. package/dist/packem_shared/useInput-Cfp5zB2s.js +594 -0
  293. package/dist/packem_shared/useIsScreenReaderEnabled-CnGKCe0f.js +9 -0
  294. package/dist/packem_shared/useKeyBindings-B78l1E1n.js +66 -0
  295. package/dist/packem_shared/useMouseAction-C5gZ2nj7.js +29 -0
  296. package/dist/packem_shared/useMouseContext-D-rFy60Q.js +12 -0
  297. package/dist/packem_shared/useMousePosition-BHBJ-kBk.js +25 -0
  298. package/dist/packem_shared/useOnMouseClick--ZIyBOBO.js +35 -0
  299. package/dist/packem_shared/useOnMouseHover-26diuXUC.js +32 -0
  300. package/dist/packem_shared/useOnMouseState-NO_Kda_C.js +13 -0
  301. package/dist/packem_shared/usePaste-Ct8J4AGR.js +35 -0
  302. package/dist/packem_shared/useScrollAcceleration-R9LfrPVG.js +73 -0
  303. package/dist/packem_shared/useScrollInput-D3CpBq_a.js +72 -0
  304. package/dist/packem_shared/useStderr-CAOVUh4E.js +6 -0
  305. package/dist/packem_shared/useStdin-X-O0kd-n.js +7 -0
  306. package/dist/packem_shared/useStdout-DyF6DSH0.js +6 -0
  307. package/dist/packem_shared/useStopwatch-qC4Beai4.js +33 -0
  308. package/dist/packem_shared/useTerminalPalette-BaWO2c4Q.js +38 -0
  309. package/dist/packem_shared/useTextBuffer-C8fEe9Ly.js +398 -0
  310. package/dist/packem_shared/useTextSelection-mXtxgsPK.js +50 -0
  311. package/dist/packem_shared/useTimer-CPQ7j827.js +46 -0
  312. package/dist/packem_shared/useTreeView-BT57P3Kx.js +101 -0
  313. package/dist/packem_shared/useTreeViewState-BpS_KZ-K.js +502 -0
  314. package/dist/packem_shared/useWindowSize-ugEmGZJm.js +20 -0
  315. package/dist/packem_shared/utils-BgdlrbOH.js +140 -0
  316. package/dist/packem_shared/variant-config-DSZoX5TM.js +8 -0
  317. package/dist/packem_shared/wrapOrTruncateStyledLine-DN3Nogoc.js +147 -0
  318. package/dist/react/devtools.d.ts +27 -0
  319. package/dist/react/focus.d.ts +39 -0
  320. package/dist/react/hooks.d.ts +238 -0
  321. package/dist/react/index.d.ts +8 -0
  322. package/dist/react/index.js +9 -0
  323. package/dist/react/layout.d.ts +35 -0
  324. package/dist/react/react.d.ts +57 -0
  325. package/dist/react/reconciler.d.ts +4 -0
  326. package/dist/react/render-to-string.d.ts +21 -0
  327. package/dist/react/renderer.d.ts +2 -0
  328. package/dist/react/scene.d.ts +3 -0
  329. package/dist/react/static.d.ts +39 -0
  330. package/dist/react/styles.d.ts +83 -0
  331. package/dist/react/text-width.d.ts +20 -0
  332. package/dist/testing/index.d.ts +144 -0
  333. package/dist/testing/index.js +260 -0
  334. package/dist/testing/keys.d.ts +89 -0
  335. package/dist/testing/screen.d.ts +35 -0
  336. package/dist/testing/wait-for.d.ts +21 -0
  337. package/index.js +585 -0
  338. package/package.json +117 -7
@@ -0,0 +1,120 @@
1
+ import EventEmitter from 'eventemitter3';
2
+ import { Renderer, TerminalGuard } from './Renderer-zZ5O3vxc.js';
3
+
4
+ const DEC_2026_ON = "\x1B[?2026h";
5
+ const DEC_2026_OFF = "\x1B[?2026l";
6
+ class TuiApp extends EventEmitter {
7
+ renderer;
8
+ terminal = null;
9
+ backBuffer;
10
+ width;
11
+ height;
12
+ isRunning = false;
13
+ stdoutBuffer = [];
14
+ stderrBuffer = [];
15
+ constructor() {
16
+ super();
17
+ this.width = process.stdout.columns || 80;
18
+ this.height = process.stdout.rows || 24;
19
+ this.renderer = new Renderer(this.width, this.height);
20
+ this.backBuffer = new Uint32Array(this.width * this.height * 2);
21
+ }
22
+ /** Enters raw mode + alternate screen. Does NOT start any render loop. */
23
+ start() {
24
+ if (this.isRunning) {
25
+ return;
26
+ }
27
+ this.terminal = new TerminalGuard(true);
28
+ this.isRunning = true;
29
+ }
30
+ /** Request a clean exit — restores terminal, stops input, exits the process. */
31
+ quit() {
32
+ this.emit("quit");
33
+ }
34
+ /** Exits raw mode + alternate screen, then flushes any buffered stdout/stderr. */
35
+ stop() {
36
+ this.isRunning = false;
37
+ this.terminal?.leave();
38
+ this.terminal = null;
39
+ if (this.stdoutBuffer.length > 0) {
40
+ process.stdout.write(this.stdoutBuffer.join(""));
41
+ this.stdoutBuffer = [];
42
+ }
43
+ if (this.stderrBuffer.length > 0) {
44
+ process.stderr.write(this.stderrBuffer.join(""));
45
+ this.stderrBuffer = [];
46
+ }
47
+ }
48
+ /**
49
+ * Buffer a write to stdout. While the alternate screen is active, writing
50
+ * directly would corrupt the TUI. Buffered output is flushed on stop().
51
+ */
52
+ writeStdout(text) {
53
+ if (this.isRunning) {
54
+ this.stdoutBuffer.push(text);
55
+ } else {
56
+ process.stdout.write(text);
57
+ }
58
+ }
59
+ /**
60
+ * Buffer a write to stderr. While the alternate screen is active, writing
61
+ * directly would corrupt the TUI. Buffered output is flushed on stop().
62
+ */
63
+ writeStderr(text) {
64
+ if (this.isRunning) {
65
+ this.stderrBuffer.push(text);
66
+ } else {
67
+ process.stderr.write(text);
68
+ }
69
+ }
70
+ /** Returns the shared Uint32Array back-buffer (width * height * 2 u32 cells). */
71
+ getBuffer() {
72
+ return this.backBuffer;
73
+ }
74
+ /** Returns current terminal dimensions. */
75
+ getSize() {
76
+ return { height: this.height, width: this.width };
77
+ }
78
+ /** Update terminal dimensions (called on SIGWINCH). */
79
+ resize(width, height) {
80
+ this.width = width;
81
+ this.height = height;
82
+ this.renderer = new Renderer(width, height);
83
+ this.backBuffer = new Uint32Array(width * height * 2);
84
+ }
85
+ /**
86
+ * Callbacks fired on every frame after React paints the buffer but before
87
+ * the Rust diff engine flushes to stdout. Use for direct buffer painting
88
+ * that needs to overlay React output (animated graphs, overlays, FPS counters).
89
+ * Multiple listeners are supported — they fire in registration order.
90
+ */
91
+ beforeFlushListeners = [];
92
+ onBeforeFlush(function_) {
93
+ this.beforeFlushListeners.push(function_);
94
+ return () => {
95
+ this.beforeFlushListeners = this.beforeFlushListeners.filter((f) => f !== function_);
96
+ };
97
+ }
98
+ /**
99
+ * Layout + paint synchronously. Called from the render loop on every dirty frame,
100
+ * and directly on resize for immediate response.
101
+ */
102
+ paintNow(calculateLayout, renderToBuffer) {
103
+ if (!this.isRunning) {
104
+ return;
105
+ }
106
+ calculateLayout(this.width, this.height);
107
+ renderToBuffer(this.backBuffer, this.width, this.height);
108
+ for (const function_ of this.beforeFlushListeners) {
109
+ function_(this.backBuffer, this.width, this.height);
110
+ }
111
+ this.renderer.writeRaw(DEC_2026_ON);
112
+ try {
113
+ this.renderer.render(this.backBuffer);
114
+ } finally {
115
+ this.renderer.writeRaw(DEC_2026_OFF);
116
+ }
117
+ }
118
+ }
119
+
120
+ export { TuiApp };
@@ -0,0 +1,415 @@
1
+ import { createContext, useContext, useState, useCallback, useEffect, useMemo, useRef } from 'react';
2
+
3
+ const TuiContext = createContext(null);
4
+ const useInput = (handler) => {
5
+ const context = useContext(TuiContext);
6
+ if (!context) {
7
+ throw new Error("useInput must be used within a TUI App environment");
8
+ }
9
+ const handlerRef = useRef(handler);
10
+ useEffect(() => {
11
+ handlerRef.current = handler;
12
+ });
13
+ useEffect(() => {
14
+ const key = (overrides) => {
15
+ return {
16
+ backspace: false,
17
+ ctrl: false,
18
+ delete: false,
19
+ downArrow: false,
20
+ end: false,
21
+ escape: false,
22
+ home: false,
23
+ leftArrow: false,
24
+ meta: false,
25
+ pageDown: false,
26
+ pageUp: false,
27
+ return: false,
28
+ rightArrow: false,
29
+ shift: false,
30
+ tab: false,
31
+ upArrow: false,
32
+ ...overrides
33
+ };
34
+ };
35
+ const handleKeydown = (keyName) => {
36
+ switch (keyName) {
37
+ case "backspace": {
38
+ return handlerRef.current("", key({ backspace: true }));
39
+ }
40
+ case "delete": {
41
+ return handlerRef.current("", key({ delete: true }));
42
+ }
43
+ case "down": {
44
+ return handlerRef.current("", key({ downArrow: true }));
45
+ }
46
+ case "end": {
47
+ return handlerRef.current("", key({ end: true }));
48
+ }
49
+ case "enter": {
50
+ return handlerRef.current("", key({ return: true }));
51
+ }
52
+ case "escape": {
53
+ return handlerRef.current("", key({ escape: true }));
54
+ }
55
+ case "home": {
56
+ return handlerRef.current("", key({ home: true }));
57
+ }
58
+ case "left": {
59
+ return handlerRef.current("", key({ leftArrow: true }));
60
+ }
61
+ case "pageDown": {
62
+ return handlerRef.current("", key({ pageDown: true }));
63
+ }
64
+ case "pageUp": {
65
+ return handlerRef.current("", key({ pageUp: true }));
66
+ }
67
+ case "right": {
68
+ return handlerRef.current("", key({ rightArrow: true }));
69
+ }
70
+ case "shift-tab": {
71
+ return handlerRef.current("", key({ shift: true, tab: true }));
72
+ }
73
+ case "tab": {
74
+ return handlerRef.current("", key({ tab: true }));
75
+ }
76
+ case "up": {
77
+ return handlerRef.current("", key({ upArrow: true }));
78
+ }
79
+ }
80
+ };
81
+ const handleCtrl = (letter) => {
82
+ handlerRef.current(letter, key({ ctrl: true }));
83
+ };
84
+ const handleMeta = (letter) => {
85
+ handlerRef.current(letter, key({ meta: true }));
86
+ };
87
+ const handleData = (data, flags) => {
88
+ if (data.startsWith("\x1B")) {
89
+ return;
90
+ }
91
+ if (data === "\r" || data === "\n") {
92
+ return;
93
+ }
94
+ handlerRef.current(
95
+ data,
96
+ key({
97
+ ctrl: flags?.ctrl ?? false,
98
+ meta: flags?.meta ?? false
99
+ })
100
+ );
101
+ };
102
+ context.input.on("keydown", handleKeydown);
103
+ context.input.on("ctrl", handleCtrl);
104
+ context.input.on("meta", handleMeta);
105
+ context.input.on("data", handleData);
106
+ return () => {
107
+ context.input.off("keydown", handleKeydown);
108
+ context.input.off("ctrl", handleCtrl);
109
+ context.input.off("meta", handleMeta);
110
+ context.input.off("data", handleData);
111
+ };
112
+ }, [context]);
113
+ };
114
+ const usePaste = (handler, options = {}) => {
115
+ const context = useContext(TuiContext);
116
+ if (!context) {
117
+ throw new Error("usePaste must be used within a TUI App environment");
118
+ }
119
+ const { isActive = true } = options;
120
+ const handlerRef = useRef(handler);
121
+ useEffect(() => {
122
+ handlerRef.current = handler;
123
+ });
124
+ useEffect(() => {
125
+ if (!isActive) {
126
+ return;
127
+ }
128
+ const onPaste = (text) => {
129
+ handlerRef.current(text);
130
+ };
131
+ context.input.on("paste", onPaste);
132
+ return () => {
133
+ context.input.off("paste", onPaste);
134
+ };
135
+ }, [context, isActive]);
136
+ };
137
+ const useTuiContext = () => {
138
+ const context = useContext(TuiContext);
139
+ if (!context)
140
+ throw new Error("useTuiContext must be used within a TUI App environment");
141
+ return context;
142
+ };
143
+ const useApp = () => {
144
+ const context = useContext(TuiContext);
145
+ if (!context) {
146
+ throw new Error("useApp must be used within a TUI App environment");
147
+ }
148
+ return {
149
+ // Ink-compatible: const { exit } = useApp()
150
+ exit: () => context.app.quit(),
151
+ // internal: direct app access
152
+ quit: () => context.app.quit()
153
+ };
154
+ };
155
+ const useWindowSize = () => {
156
+ const context = useContext(TuiContext);
157
+ if (!context) {
158
+ throw new Error("useWindowSize must be used within a TUI App environment");
159
+ }
160
+ const [size, setSize] = useState(() => context.app.getSize());
161
+ useEffect(() => {
162
+ const onResize = () => setSize(context.app.getSize());
163
+ context.app.on("resize", onResize);
164
+ return () => {
165
+ context.app.off("resize", onResize);
166
+ };
167
+ }, [context]);
168
+ return { columns: size.width, rows: size.height };
169
+ };
170
+ const toRawNewlines = (text) => text.replaceAll(/\r?\n/g, "\r\n");
171
+ const useStdout = () => {
172
+ const context = useContext(TuiContext);
173
+ return {
174
+ stdout: process.stdout,
175
+ write: (text) => {
176
+ context ? context.writeStdout(text) : process.stdout.write(toRawNewlines(text));
177
+ }
178
+ };
179
+ };
180
+ const useStderr = () => {
181
+ const context = useContext(TuiContext);
182
+ return {
183
+ stderr: process.stderr,
184
+ write: (text) => {
185
+ context ? context.writeStderr(text) : process.stderr.write(toRawNewlines(text));
186
+ }
187
+ };
188
+ };
189
+ const useStdin = () => {
190
+ const isRawModeSupported = !!process.stdin.setRawMode;
191
+ return {
192
+ isRawModeSupported,
193
+ setRawMode: (value) => {
194
+ if (isRawModeSupported) {
195
+ process.stdin.setRawMode(value);
196
+ }
197
+ },
198
+ stdin: process.stdin
199
+ };
200
+ };
201
+ const measureElement = (node) => {
202
+ if (!node || !node.yogaNode)
203
+ return { height: 0, width: 0 };
204
+ return {
205
+ height: node.yogaNode.getComputedHeight() ?? 0,
206
+ width: node.yogaNode.getComputedWidth() ?? 0
207
+ };
208
+ };
209
+ const emptyMetrics = { height: 0, left: 0, top: 0, width: 0 };
210
+ const useBoxMetrics = (ref) => {
211
+ const context = useContext(TuiContext);
212
+ const [metrics, setMetrics] = useState(emptyMetrics);
213
+ const [hasMeasured, setHasMeasured] = useState(false);
214
+ const updateMetrics = useCallback(() => {
215
+ if (!ref.current?.yogaNode) {
216
+ setHasMeasured(false);
217
+ return;
218
+ }
219
+ const layout = ref.current.getLayout();
220
+ setMetrics((previous) => {
221
+ if (previous.width === layout.width && previous.height === layout.height && previous.left === layout.left && previous.top === layout.top) {
222
+ return previous;
223
+ }
224
+ return { height: layout.height, left: layout.left, top: layout.top, width: layout.width };
225
+ });
226
+ setHasMeasured(true);
227
+ }, [ref]);
228
+ useEffect(updateMetrics);
229
+ useEffect(() => {
230
+ if (!context?.app) {
231
+ return;
232
+ }
233
+ context.app.on("resize", updateMetrics);
234
+ return () => {
235
+ context.app.off("resize", updateMetrics);
236
+ };
237
+ }, [context, updateMetrics]);
238
+ return useMemo(() => {
239
+ return { ...metrics, hasMeasured };
240
+ }, [metrics, hasMeasured]);
241
+ };
242
+ const useIsScreenReaderEnabled = () => false;
243
+ const useCursor = () => {
244
+ return {
245
+ setCursorPosition: (_position) => {
246
+ }
247
+ };
248
+ };
249
+ const useScrollable = ({ contentHeight, viewportHeight }) => {
250
+ const [offset, setOffset] = useState(0);
251
+ const max = Math.max(0, contentHeight - viewportHeight);
252
+ const clamp = useCallback((n) => Math.max(0, Math.min(n, max)), [max]);
253
+ useEffect(() => {
254
+ setOffset((o) => clamp(o));
255
+ }, [max, clamp]);
256
+ return useMemo(() => {
257
+ return {
258
+ atBottom: clamp(offset) >= max,
259
+ atTop: clamp(offset) <= 0,
260
+ offset: clamp(offset),
261
+ scrollBy: (n) => setOffset((o) => clamp(o + n)),
262
+ scrollDown: () => setOffset((o) => clamp(o + 1)),
263
+ scrollToBottom: () => setOffset(max),
264
+ scrollToTop: () => setOffset(0),
265
+ scrollUp: () => setOffset((o) => clamp(o - 1))
266
+ };
267
+ }, [offset, max, clamp]);
268
+ };
269
+ const useMouse = (handler) => {
270
+ const context = useContext(TuiContext);
271
+ if (!context)
272
+ throw new Error("useMouse must be used within a TUI App environment");
273
+ const handlerRef = useRef(handler);
274
+ useEffect(() => {
275
+ handlerRef.current = handler;
276
+ });
277
+ useEffect(() => {
278
+ const onMouse = (event) => handlerRef.current(event);
279
+ context.input.on("mouse", onMouse);
280
+ return () => {
281
+ context.input.off("mouse", onMouse);
282
+ };
283
+ }, [context]);
284
+ };
285
+ const useTextInput = ({ initialValue = "", isActive = true, onChange, onSubmit } = {}) => {
286
+ const [value, setValueRaw] = useState(initialValue);
287
+ const [cursor, setCursor] = useState(initialValue.length);
288
+ const valueRef = useRef(value);
289
+ const cursorRef = useRef(cursor);
290
+ useEffect(() => {
291
+ valueRef.current = value;
292
+ });
293
+ useEffect(() => {
294
+ cursorRef.current = cursor;
295
+ });
296
+ const onChangeRef = useRef(onChange);
297
+ useEffect(() => {
298
+ onChangeRef.current = onChange;
299
+ });
300
+ const onSubmitRef = useRef(onSubmit);
301
+ useEffect(() => {
302
+ onSubmitRef.current = onSubmit;
303
+ });
304
+ const setValue = useCallback((newValue) => {
305
+ setValueRaw(newValue);
306
+ setCursor(newValue.length);
307
+ }, []);
308
+ const clear = useCallback(() => {
309
+ setValueRaw("");
310
+ setCursor(0);
311
+ onChangeRef.current?.("");
312
+ }, []);
313
+ useInput((input, key) => {
314
+ if (!isActive) {
315
+ return;
316
+ }
317
+ const { current } = cursorRef;
318
+ const value_ = valueRef.current;
319
+ if (key.return) {
320
+ onSubmitRef.current?.(value_);
321
+ return;
322
+ }
323
+ if (key.escape) {
324
+ return;
325
+ }
326
+ if (key.leftArrow) {
327
+ setCursor(Math.max(0, current - 1));
328
+ return;
329
+ }
330
+ if (key.rightArrow) {
331
+ setCursor(Math.min(value_.length, current + 1));
332
+ return;
333
+ }
334
+ if (key.home || key.ctrl && input === "a") {
335
+ setCursor(0);
336
+ return;
337
+ }
338
+ if (key.end || key.ctrl && input === "e") {
339
+ setCursor(value_.length);
340
+ return;
341
+ }
342
+ if (key.backspace) {
343
+ if (current === 0) {
344
+ return;
345
+ }
346
+ const next = value_.slice(0, current - 1) + value_.slice(current);
347
+ setValueRaw(next);
348
+ setCursor(current - 1);
349
+ onChangeRef.current?.(next);
350
+ return;
351
+ }
352
+ if (key.delete) {
353
+ if (current >= value_.length) {
354
+ return;
355
+ }
356
+ const next = value_.slice(0, current) + value_.slice(current + 1);
357
+ setValueRaw(next);
358
+ onChangeRef.current?.(next);
359
+ return;
360
+ }
361
+ if (key.ctrl && input === "u") {
362
+ const next = value_.slice(current);
363
+ setValueRaw(next);
364
+ setCursor(0);
365
+ onChangeRef.current?.(next);
366
+ return;
367
+ }
368
+ if (key.ctrl && input === "k") {
369
+ const next = value_.slice(0, current);
370
+ setValueRaw(next);
371
+ onChangeRef.current?.(next);
372
+ return;
373
+ }
374
+ if (key.ctrl && input === "w") {
375
+ const before = value_.slice(0, current);
376
+ const trimmed = before.replace(/\S+\s*$/, "");
377
+ const next = trimmed + value_.slice(current);
378
+ setValueRaw(next);
379
+ setCursor(trimmed.length);
380
+ onChangeRef.current?.(next);
381
+ return;
382
+ }
383
+ if (key.ctrl || key.meta) {
384
+ return;
385
+ }
386
+ if (input && input.length > 0) {
387
+ const next = value_.slice(0, current) + input + value_.slice(current);
388
+ setValueRaw(next);
389
+ setCursor(current + input.length);
390
+ onChangeRef.current?.(next);
391
+ }
392
+ });
393
+ const context = useContext(TuiContext);
394
+ useEffect(() => {
395
+ if (!context || !isActive) {
396
+ return;
397
+ }
398
+ const onPaste = (text) => {
399
+ const safe = text.replaceAll(/[\u0000-\u0008\u000B-\u001F\u007F]/g, "").replaceAll(/\r\n?/g, " ");
400
+ const { current } = cursorRef;
401
+ const value_ = valueRef.current;
402
+ const next = value_.slice(0, current) + safe + value_.slice(current);
403
+ setValueRaw(next);
404
+ setCursor(current + safe.length);
405
+ onChangeRef.current?.(next);
406
+ };
407
+ context.input.on("paste", onPaste);
408
+ return () => {
409
+ context.input.off("paste", onPaste);
410
+ };
411
+ }, [context, isActive]);
412
+ return { clear, cursor, setValue, value };
413
+ };
414
+
415
+ export { TuiContext, measureElement, useApp, useBoxMetrics, useCursor, useInput, useIsScreenReaderEnabled, useMouse, usePaste, useScrollable, useStderr, useStdin, useStdout, useTextInput, useTuiContext, useWindowSize };
@@ -0,0 +1,33 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import Box from './Box-D_pSJ9Jp.js';
3
+ import Text from './Text-DvAUdZcK.js';
4
+
5
+ const DEFAULT_MARKERS = ["─", "◦", "▪"];
6
+ const resolveMarkers = (marker) => {
7
+ if (typeof marker === "string") {
8
+ return [marker];
9
+ }
10
+ if (Array.isArray(marker)) {
11
+ return marker;
12
+ }
13
+ return DEFAULT_MARKERS;
14
+ };
15
+ const renderList = (items, markers, depth) => {
16
+ const resolvedMarker = markers[depth % markers.length] ?? "─";
17
+ return jsx(Box, { flexDirection: "column", children: items.map((item, index) => (
18
+ // eslint-disable-next-line react-x/no-array-index-key -- list entries have no unique key
19
+ jsxs(Box, { gap: 1, children: [
20
+ jsx(Text, { dimColor: true, children: resolvedMarker }),
21
+ jsxs(Box, { flexDirection: "column", children: [
22
+ jsx(Text, { children: item.label }),
23
+ item.children ? renderList(item.children, markers, depth + 1) : void 0
24
+ ] })
25
+ ] }, index)
26
+ )) });
27
+ };
28
+ function UnorderedList({ items, marker }) {
29
+ const markers = resolveMarkers(marker);
30
+ return renderList(items, markers, 0);
31
+ }
32
+
33
+ export { UnorderedList as default };
@@ -0,0 +1,41 @@
1
+ const ANSI_CODES = {
2
+ // SET_VT200_MOUSE - Terminal will send event on button pressed with mouse position
3
+ mouseButton: { off: "\x1B[?1000l", on: "\x1B[?1000h" },
4
+ // SET_ANY_EVENT_MOUSE - Terminal will send event on button pressed and motion
5
+ mouseMotion: { off: "\x1B[?1003l", on: "\x1B[?1003h" },
6
+ // SET_URXVT_EXT_MODE_MOUSE
7
+ mouseMotionOthers: { off: "\x1B[?1015l", on: "\x1B[?1015h" },
8
+ // SET_SGR_EXT_MODE_MOUSE - Another mouse protocol that extends coordinate mapping (without it, supports only 223 rows and columns)
9
+ mouseSGR: { off: "\x1B[?1006l", on: "\x1B[?1006h" }};
10
+ const SGR_MOUSE_PATTERN = /\[<(\d+);(\d+);(\d+)(M)$/i;
11
+
12
+ const CLICK_BUTTONS = { 0: "left", 1: "middle", 2: "right" };
13
+ const DRAG_BUTTONS = { 32: "left", 33: "middle", 34: "right" };
14
+ const parseSgrMouse = (input) => {
15
+ const match = SGR_MOUSE_PATTERN.exec(input);
16
+ if (!match) {
17
+ return void 0;
18
+ }
19
+ const rawButton = Number(match[1]);
20
+ const x = Number(match[2]);
21
+ const y = Number(match[3]);
22
+ const isRelease = match[4] === "m";
23
+ const base = rawButton & -29;
24
+ if (base === 64 || base === 65) {
25
+ return { direction: base === 64 ? "scrollup" : "scrolldown", type: "scroll", x, y };
26
+ }
27
+ if (base === 35) {
28
+ return { type: "move", x, y };
29
+ }
30
+ const dragButton = DRAG_BUTTONS[base];
31
+ if (dragButton) {
32
+ return { action: isRelease ? "release" : "press", button: dragButton, type: "drag", x, y };
33
+ }
34
+ const clickButton = CLICK_BUTTONS[base];
35
+ if (clickButton) {
36
+ return { action: isRelease ? "release" : "press", button: clickButton, type: "click", x, y };
37
+ }
38
+ return void 0;
39
+ };
40
+
41
+ export { ANSI_CODES as A, parseSgrMouse as p };