@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,83 @@
1
+ import Yoga from "yoga-layout";
2
+ type YogaNode = ReturnType<typeof Yoga.Node.create>;
3
+ export declare const NAMED_COLORS: Record<string, number>;
4
+ /**
5
+ * Resolve a color value to an ANSI 256-color index.
6
+ * Accepts: number (pass-through), string name ("green"), hex ("#FF8800"),
7
+ * rgb() ("rgb(255,136,0)"), ansi256() ("ansi256(42)"), or undefined (→ 255 = terminal default).
8
+ */
9
+ export declare function resolveColor(color: number | string | undefined): number;
10
+ export type Styles = {
11
+ alignContent?: "flex-start" | "flex-end" | "center" | "stretch" | "space-between" | "space-around";
12
+ alignItems?: "flex-start" | "center" | "flex-end" | "stretch" | "baseline";
13
+ alignSelf?: "flex-start" | "center" | "flex-end" | "auto" | "stretch" | "baseline";
14
+ aspectRatio?: number;
15
+ backgroundColor?: number | string;
16
+ bg?: number | string;
17
+ bold?: boolean;
18
+ borderBottom?: boolean;
19
+ borderBottomColor?: number | string;
20
+ borderColor?: number | string;
21
+ borderLeft?: boolean;
22
+ borderLeftColor?: number | string;
23
+ borderRight?: boolean;
24
+ borderRightColor?: number | string;
25
+ borderStyle?: "single" | "double" | "round" | "bold" | "singleDouble" | "doubleSingle" | "classic";
26
+ borderTop?: boolean;
27
+ borderTopColor?: number | string;
28
+ bottom?: number | string;
29
+ color?: number | string;
30
+ columnGap?: number;
31
+ dim?: boolean;
32
+ display?: "flex" | "none";
33
+ fg?: number | string;
34
+ flexBasis?: number | string;
35
+ flexDirection?: "row" | "column" | "row-reverse" | "column-reverse";
36
+ flexGrow?: number;
37
+ flexShrink?: number;
38
+ flexWrap?: "nowrap" | "wrap" | "wrap-reverse";
39
+ gap?: number;
40
+ height?: number | string;
41
+ /** Internal flag for sticky header alternate nodes */
42
+ internalStickyAlternate?: boolean;
43
+ inverse?: boolean;
44
+ italic?: boolean;
45
+ justifyContent?: "flex-start" | "flex-end" | "space-between" | "space-around" | "space-evenly" | "center";
46
+ left?: number | string;
47
+ margin?: number;
48
+ marginBottom?: number;
49
+ marginLeft?: number;
50
+ marginRight?: number;
51
+ marginTop?: number;
52
+ marginX?: number;
53
+ marginY?: number;
54
+ maxHeight?: number | string;
55
+ maxWidth?: number | string;
56
+ minHeight?: number | string;
57
+ minWidth?: number | string;
58
+ overflow?: "hidden" | "scroll" | "visible";
59
+ overflowX?: "hidden" | "scroll" | "visible";
60
+ overflowY?: "hidden" | "scroll" | "visible";
61
+ padding?: number;
62
+ paddingBottom?: number;
63
+ paddingLeft?: number;
64
+ paddingRight?: number;
65
+ paddingTop?: number;
66
+ paddingX?: number;
67
+ paddingY?: number;
68
+ position?: "absolute" | "relative" | "static";
69
+ right?: number | string;
70
+ rowGap?: number;
71
+ scrollbar?: boolean;
72
+ scrollbarThumbColor?: string;
73
+ scrollLeft?: number;
74
+ scrollTop?: number;
75
+ sticky?: boolean;
76
+ strikethrough?: boolean;
77
+ styles?: number;
78
+ top?: number | string;
79
+ underline?: boolean;
80
+ width?: number | string;
81
+ };
82
+ export declare const applyStyles: (node: YogaNode, style?: Styles, currentStyle?: Styles) => void;
83
+ export {};
@@ -0,0 +1,20 @@
1
+ /** Display width of a single Unicode code point (at least 1 cell). */
2
+ export declare function getCodePointWidth(char: string): number;
3
+ /** Display width of a full string (sums grapheme widths). */
4
+ export declare function getStringWidth(text: string): number;
5
+ /**
6
+ * Count wrapped visual rows for a single hard line (no '\n') at a fixed width.
7
+ *
8
+ * - Widths are measured in terminal cells, not UTF-16 code units.
9
+ * - Wide chars (CJK/emoji) consume 2 cells.
10
+ * - Empty lines still occupy one visual row.
11
+ */
12
+ export declare function countWrappedRowsForLine(line: string, width: number): number;
13
+ /**
14
+ * Measure the max visual line width and wrapped height of a text block.
15
+ * Returns widths/heights in terminal cells/rows.
16
+ */
17
+ export declare function measureTextBlock(text: string, wrapWidth: number): {
18
+ maxLineWidth: number;
19
+ wrappedRows: number;
20
+ };
@@ -0,0 +1,144 @@
1
+ import type { ReactElement } from "react";
2
+ import type { RenderOptions } from "../ink/render.d.ts";
3
+ import type { KeySender } from "./keys.d.ts";
4
+ import { createKeySender, KEY } from "./keys.d.ts";
5
+ import type { Screen } from "./screen.d.ts";
6
+ import { createScreen } from "./screen.d.ts";
7
+ import type { WaitForOptions } from "./wait-for.d.ts";
8
+ import { waitFor } from "./wait-for.d.ts";
9
+ export type TestInstanceStdout = {
10
+ /**
11
+ * All rendered frames captured from stdout.
12
+ */
13
+ readonly frames: ReadonlyArray<string>;
14
+ /**
15
+ * Returns the most recently rendered frame, or `undefined` if no frames have been written.
16
+ */
17
+ lastFrame: () => string | undefined;
18
+ /**
19
+ * Write data to the mock stdout stream (used internally by the renderer).
20
+ */
21
+ write: (frame: string) => boolean;
22
+ };
23
+ export type TestInstanceStderr = {
24
+ /**
25
+ * All rendered frames captured from stderr.
26
+ */
27
+ readonly frames: ReadonlyArray<string>;
28
+ /**
29
+ * Returns the most recently rendered frame, or `undefined` if no frames have been written.
30
+ */
31
+ lastFrame: () => string | undefined;
32
+ /**
33
+ * Write data to the mock stderr stream (used internally by the renderer).
34
+ */
35
+ write: (frame: string) => boolean;
36
+ };
37
+ export type TestInstanceStdin = {
38
+ /**
39
+ * Whether the stdin is a TTY.
40
+ */
41
+ readonly isTTY: boolean;
42
+ /**
43
+ * Simulate user input by writing data to stdin.
44
+ */
45
+ write: (data: string) => boolean;
46
+ };
47
+ export type TestInstance = {
48
+ /**
49
+ * Unmount the app and clean up resources.
50
+ */
51
+ cleanup: () => void;
52
+ /**
53
+ * Wait for pending React renders to flush (two microtick delay).
54
+ */
55
+ flush: () => Promise<void>;
56
+ /**
57
+ * All rendered frames captured from stdout (shorthand for `stdout.frames`).
58
+ */
59
+ readonly frames: ReadonlyArray<string>;
60
+ /**
61
+ * Keyboard input helpers for simulating key presses.
62
+ */
63
+ keys: KeySender;
64
+ /**
65
+ * Returns the most recently rendered frame from stdout (shorthand for `stdout.lastFrame()`).
66
+ */
67
+ lastFrame: () => string | undefined;
68
+ /**
69
+ * Replace the previous root node with a new one or update props.
70
+ */
71
+ rerender: (node: ReactElement) => void;
72
+ /**
73
+ * Screen query helpers for inspecting rendered output with ANSI stripping.
74
+ */
75
+ screen: Screen;
76
+ /**
77
+ * Mock stderr stream with frame capture.
78
+ */
79
+ stderr: TestInstanceStderr;
80
+ /**
81
+ * Mock stdin stream for simulating user input.
82
+ */
83
+ stdin: TestInstanceStdin;
84
+ /**
85
+ * Mock stdout stream with frame capture.
86
+ */
87
+ stdout: TestInstanceStdout;
88
+ /**
89
+ * Manually unmount the whole app.
90
+ */
91
+ unmount: () => void;
92
+ /**
93
+ * Wait for a condition to be met by polling.
94
+ *
95
+ * If `condition` is a string, waits until the screen contains it.
96
+ * If `condition` is a function, waits until it stops throwing.
97
+ */
98
+ waitFor: (condition: (() => void) | string, options?: WaitForOptions) => Promise<void>;
99
+ };
100
+ export type TestRenderOptions = {
101
+ /**
102
+ * Terminal column width for the mock stdout/stderr streams.
103
+ * @default 100
104
+ */
105
+ columns?: number;
106
+ /**
107
+ * Additional render options passed through to the underlying render function.
108
+ */
109
+ options?: Omit<RenderOptions, "debug" | "exitOnCtrlC" | "patchConsole" | "stderr" | "stdin" | "stdout">;
110
+ };
111
+ /**
112
+ * Render a React element for testing, capturing output in mock streams.
113
+ *
114
+ * Returns an object with methods to inspect rendered output, simulate input,
115
+ * and control the component lifecycle.
116
+ * @example
117
+ * ```tsx
118
+ * import { render } from "@visulima/tui/test";
119
+ * import { Text } from "@visulima/tui";
120
+ *
121
+ * const { lastFrame } = render(<Text>Hello</Text>);
122
+ * console.log(lastFrame()); // "Hello"
123
+ * ```
124
+ */
125
+ declare const testRender: (node: ReactElement, testOptions?: TestRenderOptions) => TestInstance;
126
+ /**
127
+ * Unmount and clean up all rendered test instances.
128
+ *
129
+ * Call this in your test teardown (e.g., `afterEach`) to ensure
130
+ * no test instances leak between tests.
131
+ * @example
132
+ * ```ts
133
+ * import { cleanup } from "@visulima/tui/test";
134
+ *
135
+ * afterEach(() => {
136
+ * cleanup();
137
+ * });
138
+ * ```
139
+ */
140
+ declare const cleanup: () => void;
141
+ export { cleanup, createKeySender, createScreen, KEY, testRender as render, waitFor };
142
+ export type { KeyName, KeySender } from "./keys.d.ts";
143
+ export type { Screen } from "./screen.d.ts";
144
+ export type { WaitForOptions } from "./wait-for.d.ts";
@@ -0,0 +1,260 @@
1
+ import { createRequire as __cjs_createRequire } from "node:module";
2
+
3
+ const __cjs_require = __cjs_createRequire(import.meta.url);
4
+
5
+ const __cjs_getProcess = typeof globalThis !== "undefined" && typeof globalThis.process !== "undefined" ? globalThis.process : process;
6
+
7
+ const __cjs_getBuiltinModule = (module) => {
8
+ // Check if we're in Node.js and version supports getBuiltinModule
9
+ if (typeof __cjs_getProcess !== "undefined" && __cjs_getProcess.versions && __cjs_getProcess.versions.node) {
10
+ const [major, minor] = __cjs_getProcess.versions.node.split(".").map(Number);
11
+ // Node.js 20.16.0+ and 22.3.0+
12
+ if (major > 22 || (major === 22 && minor >= 3) || (major === 20 && minor >= 16)) {
13
+ return __cjs_getProcess.getBuiltinModule(module);
14
+ }
15
+ }
16
+ // Fallback to createRequire
17
+ return __cjs_require(module);
18
+ };
19
+
20
+ const EventEmitter = __cjs_getBuiltinModule("node:events");
21
+ import render from '../packem_shared/render-BAwdjfki.js';
22
+ import { strip } from '@visulima/ansi';
23
+
24
+ const KEY = {
25
+ backspace: "",
26
+ ctrlC: "",
27
+ delete: "\x1B[3~",
28
+ down: "\x1B[B",
29
+ end: "\x1B[F",
30
+ escape: "\x1B",
31
+ home: "\x1B[H",
32
+ left: "\x1B[D",
33
+ pageDown: "\x1B[6~",
34
+ pageUp: "\x1B[5~",
35
+ return: "\r",
36
+ right: "\x1B[C",
37
+ space: " ",
38
+ tab: " ",
39
+ up: "\x1B[A"
40
+ };
41
+ const createKeySender = (write) => ({
42
+ backspace: () => write(KEY.backspace),
43
+ delete: () => write(KEY.delete),
44
+ down: () => write(KEY.down),
45
+ end: () => write(KEY.end),
46
+ enter: () => write(KEY.return),
47
+ escape: () => write(KEY.escape),
48
+ home: () => write(KEY.home),
49
+ left: () => write(KEY.left),
50
+ pageDown: () => write(KEY.pageDown),
51
+ pageUp: () => write(KEY.pageUp),
52
+ press(char) {
53
+ write(char);
54
+ },
55
+ raw: write,
56
+ right: () => write(KEY.right),
57
+ space: () => write(KEY.space),
58
+ tab: () => write(KEY.tab),
59
+ type(text) {
60
+ for (const char of text) {
61
+ write(char);
62
+ }
63
+ },
64
+ up: () => write(KEY.up)
65
+ });
66
+
67
+ const createScreen = (lastFrame, allFrames) => {
68
+ const clean = (s) => s ? strip(s) : "";
69
+ return {
70
+ contains(text) {
71
+ return this.text().includes(text);
72
+ },
73
+ frames() {
74
+ return allFrames.map((f) => strip(f));
75
+ },
76
+ line(n) {
77
+ return this.text().split("\n")[n] ?? "";
78
+ },
79
+ lines() {
80
+ return this.text().split("\n").filter((l) => l.trim() !== "");
81
+ },
82
+ matches(pattern) {
83
+ return pattern.test(this.text());
84
+ },
85
+ rawFrames() {
86
+ return [...allFrames];
87
+ },
88
+ rawText() {
89
+ return lastFrame() ?? "";
90
+ },
91
+ text() {
92
+ return clean(lastFrame());
93
+ }
94
+ };
95
+ };
96
+
97
+ const waitFor = async (condition, screenText, options = {}) => {
98
+ const timeout = options.timeout ?? 3e3;
99
+ const interval = options.interval ?? 50;
100
+ const start = Date.now();
101
+ let lastError;
102
+ const check = () => {
103
+ if (typeof condition === "string") {
104
+ const current = screenText();
105
+ if (!current.includes(condition)) {
106
+ throw new Error(`Timed out waiting for text: "${condition}"
107
+
108
+ Screen content:
109
+ ${current}`);
110
+ }
111
+ } else {
112
+ condition();
113
+ }
114
+ };
115
+ while (Date.now() - start < timeout) {
116
+ try {
117
+ check();
118
+ return;
119
+ } catch (error) {
120
+ lastError = error;
121
+ }
122
+ await new Promise((resolve) => {
123
+ setTimeout(resolve, interval);
124
+ });
125
+ }
126
+ try {
127
+ check();
128
+ return;
129
+ } catch (error) {
130
+ lastError = error;
131
+ }
132
+ throw lastError ?? new Error("waitFor timed out");
133
+ };
134
+
135
+ class Stdout extends EventEmitter {
136
+ columns;
137
+ _lastFrame;
138
+ _frames = [];
139
+ constructor(columns = 100) {
140
+ super();
141
+ this.columns = columns;
142
+ }
143
+ get frames() {
144
+ return this._frames;
145
+ }
146
+ lastFrame() {
147
+ return this._lastFrame;
148
+ }
149
+ write = (frame) => {
150
+ this._frames.push(frame);
151
+ this._lastFrame = frame;
152
+ return true;
153
+ };
154
+ }
155
+ class Stderr extends EventEmitter {
156
+ columns;
157
+ _lastFrame;
158
+ _frames = [];
159
+ constructor(columns = 100) {
160
+ super();
161
+ this.columns = columns;
162
+ }
163
+ get frames() {
164
+ return this._frames;
165
+ }
166
+ lastFrame() {
167
+ return this._lastFrame;
168
+ }
169
+ write = (frame) => {
170
+ this._frames.push(frame);
171
+ this._lastFrame = frame;
172
+ return true;
173
+ };
174
+ }
175
+ class Stdin extends EventEmitter {
176
+ isTTY = true;
177
+ pendingData;
178
+ write = (data) => {
179
+ this.pendingData = data;
180
+ this.emit("readable");
181
+ this.emit("data", data);
182
+ return true;
183
+ };
184
+ read() {
185
+ const { pendingData } = this;
186
+ this.pendingData = void 0;
187
+ return pendingData;
188
+ }
189
+ setEncoding() {
190
+ return this;
191
+ }
192
+ setRawMode() {
193
+ return this;
194
+ }
195
+ resume() {
196
+ return this;
197
+ }
198
+ pause() {
199
+ return this;
200
+ }
201
+ ref() {
202
+ return this;
203
+ }
204
+ unref() {
205
+ return this;
206
+ }
207
+ }
208
+ const instances = [];
209
+ const testRender = (node, testOptions = {}) => {
210
+ const { columns, options: renderOptions } = testOptions;
211
+ const stdout = new Stdout(columns);
212
+ const stderr = new Stderr(columns);
213
+ const stdin = new Stdin();
214
+ const instance = render(node, {
215
+ debug: true,
216
+ exitOnCtrlC: false,
217
+ patchConsole: false,
218
+ stderr,
219
+ stdin,
220
+ stdout,
221
+ ...renderOptions
222
+ });
223
+ instances.push(instance);
224
+ const screen = createScreen(() => stdout.lastFrame(), stdout.frames);
225
+ const keys = createKeySender((data) => stdin.write(data));
226
+ const flush = async () => {
227
+ await new Promise((resolve) => {
228
+ setTimeout(resolve, 0);
229
+ });
230
+ await new Promise((resolve) => {
231
+ setTimeout(resolve, 0);
232
+ });
233
+ };
234
+ return {
235
+ cleanup: instance.cleanup,
236
+ flush,
237
+ get frames() {
238
+ return stdout.frames;
239
+ },
240
+ keys,
241
+ lastFrame: () => stdout.lastFrame(),
242
+ rerender: instance.rerender,
243
+ screen,
244
+ stderr,
245
+ stdin,
246
+ stdout,
247
+ unmount: instance.unmount,
248
+ async waitFor(condition, options) {
249
+ await waitFor(condition, () => screen.text(), options);
250
+ }
251
+ };
252
+ };
253
+ const cleanup = () => {
254
+ for (const instance of instances) {
255
+ instance.cleanup();
256
+ }
257
+ instances.length = 0;
258
+ };
259
+
260
+ export { KEY, cleanup, createKeySender, createScreen, testRender as render, waitFor };
@@ -0,0 +1,89 @@
1
+ export declare const KEY: {
2
+ readonly backspace: "";
3
+ readonly ctrlC: "\u0003";
4
+ readonly delete: "\u001B[3~";
5
+ readonly down: "\u001B[B";
6
+ readonly end: "\u001B[F";
7
+ readonly escape: "\u001B";
8
+ readonly home: "\u001B[H";
9
+ readonly left: "\u001B[D";
10
+ readonly pageDown: "\u001B[6~";
11
+ readonly pageUp: "\u001B[5~";
12
+ readonly return: "\r";
13
+ readonly right: "\u001B[C";
14
+ readonly space: " ";
15
+ readonly tab: "\t";
16
+ readonly up: "\u001B[A";
17
+ };
18
+ export type KeyName = keyof typeof KEY;
19
+ export interface KeySender {
20
+ /**
21
+ * Simulate pressing the backspace key.
22
+ */
23
+ backspace: () => void;
24
+ /**
25
+ * Simulate pressing the delete key.
26
+ */
27
+ delete: () => void;
28
+ /**
29
+ * Simulate pressing the down arrow key.
30
+ */
31
+ down: () => void;
32
+ /**
33
+ * Simulate pressing the end key.
34
+ */
35
+ end: () => void;
36
+ /**
37
+ * Simulate pressing the enter/return key.
38
+ */
39
+ enter: () => void;
40
+ /**
41
+ * Simulate pressing the escape key.
42
+ */
43
+ escape: () => void;
44
+ /**
45
+ * Simulate pressing the home key.
46
+ */
47
+ home: () => void;
48
+ /**
49
+ * Simulate pressing the left arrow key.
50
+ */
51
+ left: () => void;
52
+ /**
53
+ * Simulate pressing the page down key.
54
+ */
55
+ pageDown: () => void;
56
+ /**
57
+ * Simulate pressing the page up key.
58
+ */
59
+ pageUp: () => void;
60
+ /**
61
+ * Send a single character as a key press.
62
+ */
63
+ press: (char: string) => void;
64
+ /**
65
+ * Send arbitrary raw data to stdin.
66
+ */
67
+ raw: (data: string) => void;
68
+ /**
69
+ * Simulate pressing the right arrow key.
70
+ */
71
+ right: () => void;
72
+ /**
73
+ * Simulate pressing the space key.
74
+ */
75
+ space: () => void;
76
+ /**
77
+ * Simulate pressing the tab key.
78
+ */
79
+ tab: () => void;
80
+ /**
81
+ * Type a string character by character.
82
+ */
83
+ type: (text: string) => void;
84
+ /**
85
+ * Simulate pressing the up arrow key.
86
+ */
87
+ up: () => void;
88
+ }
89
+ export declare const createKeySender: (write: (data: string) => void) => KeySender;
@@ -0,0 +1,35 @@
1
+ export interface Screen {
2
+ /**
3
+ * Check if the current screen output contains the given text (ANSI-stripped).
4
+ */
5
+ contains: (text: string) => boolean;
6
+ /**
7
+ * Get all captured frames with ANSI codes stripped.
8
+ */
9
+ frames: () => string[];
10
+ /**
11
+ * Get a specific line by zero-based index from the current screen output.
12
+ */
13
+ line: (n: number) => string;
14
+ /**
15
+ * Get all non-empty lines from the current screen output.
16
+ */
17
+ lines: () => string[];
18
+ /**
19
+ * Check if the current screen output matches the given pattern (ANSI-stripped).
20
+ */
21
+ matches: (pattern: RegExp) => boolean;
22
+ /**
23
+ * Get all captured frames with ANSI codes preserved.
24
+ */
25
+ rawFrames: () => string[];
26
+ /**
27
+ * Get the last rendered frame with ANSI codes preserved.
28
+ */
29
+ rawText: () => string;
30
+ /**
31
+ * Get the last rendered frame with ANSI codes stripped.
32
+ */
33
+ text: () => string;
34
+ }
35
+ export declare const createScreen: (lastFrame: () => string | undefined, allFrames: ReadonlyArray<string>) => Screen;
@@ -0,0 +1,21 @@
1
+ export interface WaitForOptions {
2
+ /**
3
+ * Polling interval in milliseconds.
4
+ * @default 50
5
+ */
6
+ interval?: number;
7
+ /**
8
+ * Maximum time to wait in milliseconds before throwing.
9
+ * @default 3000
10
+ */
11
+ timeout?: number;
12
+ }
13
+ /**
14
+ * Wait for a condition to be met by polling at a regular interval.
15
+ *
16
+ * If `condition` is a string, waits until `screenText()` contains it.
17
+ * If `condition` is a function, waits until it stops throwing.
18
+ *
19
+ * @throws The last error encountered if the timeout is reached.
20
+ */
21
+ export declare const waitFor: (condition: (() => void) | string, screenText: () => string, options?: WaitForOptions) => Promise<void>;