@visulima/tui 0.0.1 → 1.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/CHANGELOG.md +194 -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 +97 -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-BXpZwLWo.js +146 -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
package/README.md CHANGED
@@ -1,45 +1,189 @@
1
- # @visulima/tui
1
+ <!-- START_PACKAGE_OG_IMAGE_PLACEHOLDER -->
2
2
 
3
- ## ⚠️ IMPORTANT NOTICE ⚠️
3
+ <a href="https://www.anolilab.com/open-source" align="center">
4
4
 
5
- **This package is created solely for the purpose of setting up OIDC (OpenID Connect) trusted publishing with npm.**
5
+ <img src="__assets__/package-og.svg" alt="tui" />
6
6
 
7
- This is **NOT** a functional package and contains **NO** code or functionality beyond the OIDC setup configuration.
7
+ </a>
8
8
 
9
- ## Purpose
9
+ <h3 align="center">React-based TUI library powered by a native Rust diff engine, drop-in Ink-compatible API</h3>
10
10
 
11
- This package exists to:
12
- 1. Configure OIDC trusted publishing for the package name `@visulima/tui`
13
- 2. Enable secure, token-less publishing from CI/CD workflows
14
- 3. Establish provenance for packages published under this name
11
+ <!-- END_PACKAGE_OG_IMAGE_PLACEHOLDER -->
15
12
 
16
- ## What is OIDC Trusted Publishing?
13
+ <br />
17
14
 
18
- OIDC trusted publishing allows package maintainers to publish packages directly from their CI/CD workflows without needing to manage npm access tokens. Instead, it uses OpenID Connect to establish trust between the CI/CD provider (like GitHub Actions) and npm.
15
+ <div align="center">
19
16
 
20
- ## Setup Instructions
17
+ [![typescript-image][typescript-badge]][typescript-url]
18
+ [![mit licence][license-badge]][license]
19
+ [![npm downloads][npm-downloads-badge]][npm-downloads]
20
+ [![Chat][chat-badge]][chat]
21
+ [![PRs Welcome][prs-welcome-badge]][prs-welcome]
21
22
 
22
- To properly configure OIDC trusted publishing for this package:
23
+ </div>
23
24
 
24
- 1. Go to [npmjs.com](https://www.npmjs.com/) and navigate to your package settings
25
- 2. Configure the trusted publisher (e.g., GitHub Actions)
26
- 3. Specify the repository and workflow that should be allowed to publish
27
- 4. Use the configured workflow to publish your actual package
25
+ ---
28
26
 
29
- ## DO NOT USE THIS PACKAGE
27
+ <div align="center">
28
+ <p>
29
+ <sup>
30
+ Daniel Bannert's open source work is supported by the community on <a href="https://github.com/sponsors/prisis">GitHub Sponsors</a>
31
+ </sup>
32
+ </p>
33
+ </div>
30
34
 
31
- This package is a placeholder for OIDC configuration only. It:
32
- - Contains no executable code
33
- - Provides no functionality
34
- - Should not be installed as a dependency
35
- - Exists only for administrative purposes
35
+ ---
36
36
 
37
- ## More Information
37
+ ## Overview
38
38
 
39
- For more details about npm's trusted publishing feature, see:
40
- - [npm Trusted Publishing Documentation](https://docs.npmjs.com/generating-provenance-statements)
41
- - [GitHub Actions OIDC Documentation](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect)
39
+ `@visulima/tui` is a React-based terminal UI library with a native Rust diff engine and drop-in [Ink](https://github.com/vadimdemedes/ink)-compatible API. Build rich, interactive CLI applications with React components, hooks, and a familiar developer experience.
42
40
 
43
- ---
41
+ Based on [ratatat](https://github.com/geoffmiller/ratatat) by Geoff Miller.
42
+
43
+ ## Features
44
+
45
+ - **Faster than Ink** on mount (1.3-2.3x), competitive on rerender
46
+ - **Drop-in Ink-compatible** React API
47
+ - **Native Rust diff engine** via NAPI for high-throughput rendering
48
+ - **React hooks** for input, focus, clipboard, mouse, scroll, animation, and window size
49
+ - **Rich component library** - Box, Text, Spinner, Select, TextInput, Tabs, ScrollView, and more
50
+ - **Cross-platform** native bindings (macOS, Linux glibc/musl, Windows x64/arm64)
51
+ - **Server-side rendering** via `renderToString`
52
+ - **Testing utilities** with mock streams and frame capture
53
+
54
+ ## Install
55
+
56
+ ```sh
57
+ npm install @visulima/tui
58
+ ```
59
+
60
+ ```sh
61
+ yarn add @visulima/tui
62
+ ```
63
+
64
+ ```sh
65
+ pnpm add @visulima/tui
66
+ ```
67
+
68
+ ## Quick Start
69
+
70
+ ```tsx
71
+ import { render, Box, Text } from "@visulima/tui";
72
+
73
+ const App = () => (
74
+ <Box flexDirection="column" padding={1}>
75
+ <Text bold>Hello, world!</Text>
76
+ <Text color="green">Powered by a native Rust diff engine</Text>
77
+ </Box>
78
+ );
79
+
80
+ render(<App />);
81
+ ```
82
+
83
+ ## Hooks
84
+
85
+ ### `useAnimation(options?)`
86
+
87
+ Drive frame-based or time-based animations with a shared timer. Multiple `useAnimation` calls consolidate into one render cycle.
88
+
89
+ ```tsx
90
+ import { Text, useAnimation } from "@visulima/tui";
91
+
92
+ const Spinner = () => {
93
+ const { frame } = useAnimation({ interval: 80 });
94
+ const characters = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
95
+
96
+ return <Text>{characters[frame % characters.length]}</Text>;
97
+ };
98
+ ```
99
+
100
+ | Option | Type | Default | Description |
101
+ | ---------- | --------- | ------- | -------------------------------------------------------------------------------------------------------------------------- |
102
+ | `interval` | `number` | `100` | Time between ticks in milliseconds. |
103
+ | `isActive` | `boolean` | `true` | Whether the animation is running. When set to `false`, the animation stops. When toggled back to `true`, values reset to 0. |
104
+
105
+ Returns `{ frame, time, delta, reset }`. See the [full hooks reference](https://visulima.com/packages/tui/hooks#useanimation) for detailed return values, more examples (sine waves, physics, pausable, reset), and `maxFps` interaction.
106
+
107
+ ## Documentation
108
+
109
+ Full documentation, API reference, component gallery, and guides are available at:
110
+
111
+ **[visulima.com/packages/tui](https://visulima.com/packages/tui)**
112
+
113
+ - [Getting Started](https://visulima.com/packages/tui/getting-started)
114
+ - [Package Map](https://visulima.com/packages/tui/package-map) - Entry points and what they export
115
+ - [Components](https://visulima.com/packages/tui/components) - Box, Text, Spinner, Select, TextInput, and more
116
+ - [Hooks](https://visulima.com/packages/tui/hooks) - useInput, useFocus, useApp, useStdout, and more
117
+ - [Mouse Support](https://visulima.com/packages/tui/mouse) - Click, hover, drag, and scroll events
118
+ - [Scroll](https://visulima.com/packages/tui/scroll) - ScrollView, ScrollList, and overflow handling
119
+ - [Rendering Modes](https://visulima.com/packages/tui/rendering-modes) - Ink-compatible, React, and raw buffer
120
+ - [Ink Compatibility](https://visulima.com/packages/tui/ink-compat) - Migration guide from Ink
121
+ - [Testing](https://visulima.com/packages/tui/testing) - Testing utilities with mock streams
122
+ - [Troubleshooting](https://visulima.com/packages/tui/troubleshooting)
123
+
124
+ ## Performance
125
+
126
+ | Scenario | @visulima/tui | Ink 6.8 | Speedup |
127
+ | -------------------------- | ------------: | -----------: | --------------: |
128
+ | Mount + render (simple) | 3,221 ops/s | 2,694 ops/s | **1.2x faster** |
129
+ | Mount + render (dashboard) | 1,659 ops/s | 718 ops/s | **2.3x faster** |
130
+ | Rerender (simple) | 19,111 ops/s | 25,743 ops/s | 0.74x |
131
+
132
+ > Benchmarks use production builds. Run: `pnpm --filter @visulima/tui run build:prod && pnpm vitest bench`
133
+
134
+ ### Kitchen Sink Demo
135
+
136
+ | Layout | Focus | Graph | Live |
137
+ | ----------------------------------- | --------------------------------- | --------------------------------- | ------------------------------- |
138
+ | ![Layout](docs/media/ks-layout.png) | ![Focus](docs/media/ks-focus.png) | ![Graph](docs/media/ks-graph.png) | ![Live](docs/media/ks-live.png) |
139
+
140
+ | Incremental | UI | Static | Mouse |
141
+ | --------------------------------------------- | --------------------------- | ----------------------------------- | --------------------------------- |
142
+ | ![Incremental](docs/media/ks-incremental.png) | ![UI](docs/media/ks-ui.png) | ![Static](docs/media/ks-static.png) | ![Mouse](docs/media/ks-mouse.png) |
143
+
144
+ ## Related
145
+
146
+ - [ink](https://github.com/vadimdemedes/ink) - React for interactive command-line apps
147
+ - [ratatat](https://github.com/geoffmiller/ratatat) - The project this library is based on
148
+ - [jacob314/ink](https://github.com/jacob314/ink) - Fork with StyledLine, Region model, and render caching (ported features)
149
+
150
+ ## Supported Node.js Versions
151
+
152
+ Libraries in this ecosystem make the best effort to track [Node.js' release schedule](https://github.com/nodejs/release#release-schedule).
153
+ Here's [a post on why we think this is important](https://medium.com/the-node-js-collection/maintainers-should-consider-following-node-js-release-schedule-ab08ed4de71a).
154
+
155
+ ## Contributing
156
+
157
+ If you would like to help take a look at the [list of issues](https://github.com/visulima/visulima/issues) and check our [Contributing](.github/CONTRIBUTING.md) guidelines.
158
+
159
+ > **Note:** please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
160
+
161
+ ## Credits
162
+
163
+ - [Daniel Bannert](https://github.com/prisis)
164
+ - [Geoff Miller](https://github.com/geoffmiller) - Original [ratatat](https://github.com/geoffmiller/ratatat) library
165
+ - [Vadym Demedes](https://github.com/vadimdemedes) - [Ink](https://github.com/vadimdemedes/ink) (MIT)
166
+ - [Google LLC / jacob314](https://github.com/jacob314/ink) - StyledLine, Region model, render caching (Apache-2.0)
167
+ - [Zeno Jiricek](https://github.com/nickhudkins/ink-mouse) - Mouse event system (Apache-2.0)
168
+ - [All Contributors](https://github.com/visulima/visulima/graphs/contributors)
169
+
170
+ ## Made with ❤️ at Anolilab
171
+
172
+ This is an open source project and will always remain free to use. If you think it's cool, please star it 🌟. [Anolilab](https://www.anolilab.com/open-source) is a Development and AI Studio. Contact us at [hello@anolilab.com](mailto:hello@anolilab.com) if you need any help with these technologies or just want to say hi!
173
+
174
+ ## License
175
+
176
+ The visulima tui is open-sourced software licensed under the [MIT][license]
177
+
178
+ <!-- badges -->
44
179
 
45
- **Maintained for OIDC setup purposes only**
180
+ [license-badge]: https://img.shields.io/npm/l/@visulima/tui?style=for-the-badge
181
+ [license]: https://github.com/visulima/visulima/blob/main/LICENSE
182
+ [npm-downloads-badge]: https://img.shields.io/npm/dm/@visulima/tui?style=for-the-badge
183
+ [npm-downloads]: https://www.npmjs.com/package/@visulima/tui
184
+ [prs-welcome-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge
185
+ [prs-welcome]: https://github.com/visulima/visulima/blob/main/.github/CONTRIBUTING.md
186
+ [chat-badge]: https://img.shields.io/discord/932323359193186354.svg?style=for-the-badge
187
+ [chat]: https://discord.gg/TtFJY8xkFK
188
+ [typescript-badge]: https://img.shields.io/badge/Typescript-294E80.svg?style=for-the-badge&logo=typescript
189
+ [typescript-url]: https://www.typescriptlang.org/
@@ -0,0 +1,50 @@
1
+ import EventEmitter from "eventemitter3";
2
+ export declare class TuiApp extends EventEmitter {
3
+ private renderer;
4
+ private terminal;
5
+ private backBuffer;
6
+ private width;
7
+ private height;
8
+ private isRunning;
9
+ private stdoutBuffer;
10
+ private stderrBuffer;
11
+ constructor();
12
+ /** Enters raw mode + alternate screen. Does NOT start any render loop. */
13
+ start(): void;
14
+ /** Request a clean exit — restores terminal, stops input, exits the process. */
15
+ quit(): void;
16
+ /** Exits raw mode + alternate screen, then flushes any buffered stdout/stderr. */
17
+ stop(): void;
18
+ /**
19
+ * Buffer a write to stdout. While the alternate screen is active, writing
20
+ * directly would corrupt the TUI. Buffered output is flushed on stop().
21
+ */
22
+ writeStdout(text: string): void;
23
+ /**
24
+ * Buffer a write to stderr. While the alternate screen is active, writing
25
+ * directly would corrupt the TUI. Buffered output is flushed on stop().
26
+ */
27
+ writeStderr(text: string): void;
28
+ /** Returns the shared Uint32Array back-buffer (width * height * 2 u32 cells). */
29
+ getBuffer(): Uint32Array;
30
+ /** Returns current terminal dimensions. */
31
+ getSize(): {
32
+ height: number;
33
+ width: number;
34
+ };
35
+ /** Update terminal dimensions (called on SIGWINCH). */
36
+ resize(width: number, height: number): void;
37
+ /**
38
+ * Callbacks fired on every frame after React paints the buffer but before
39
+ * the Rust diff engine flushes to stdout. Use for direct buffer painting
40
+ * that needs to overlay React output (animated graphs, overlays, FPS counters).
41
+ * Multiple listeners are supported — they fire in registration order.
42
+ */
43
+ private beforeFlushListeners;
44
+ onBeforeFlush(function_: (buffer: Uint32Array, width: number, height: number) => void): () => void;
45
+ /**
46
+ * Layout + paint synchronously. Called from the render loop on every dirty frame,
47
+ * and directly on resize for immediate response.
48
+ */
49
+ paintNow(calculateLayout: (w: number, h: number) => void, renderToBuffer: (buf: Uint32Array, w: number, h: number) => void): void;
50
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * 2×u32 per-cell back-buffer layout:
3
+ * buffer[idx * 2] = charCode (Unicode codepoint, u32)
4
+ * buffer[idx * 2 + 1] = attrCode = (styles &lt;< 16) | (bg &lt;< 8) | fg
5
+ */
6
+ export declare const Cell: {
7
+ /** Read bg color from an attr slot value (buffer[idx*2+1]) — bits 15:8 */
8
+ getBg(attributeSlot: number): number;
9
+ /** Read the char character from a raw char slot value (buffer[idx*2]) */
10
+ getChar(charSlot: number): string;
11
+ /** Read fg color from an attr slot value (buffer[idx*2+1]) — bits 7:0 */
12
+ getFg(attributeSlot: number): number;
13
+ /** Read styles bitmask from an attr slot value (buffer[idx*2+1]) — bits 23:16 */
14
+ getStyles(attributeSlot: number): number;
15
+ /**
16
+ * Pack a cell into a [charCode, attrCode] tuple.
17
+ * charCode = char.codePointAt(0)
18
+ * attrCode = (styles & 0xFF) &lt;< 16 | (bg & 0xFF) &lt;< 8 | (fg & 0xFF)
19
+ *
20
+ * Write to buffer as: buffer[idx*2] = charCode; buffer[idx*2+1] = attrCode
21
+ */
22
+ pack(char: string, fg?: number, bg?: number, styles?: number): [number, number];
23
+ };
24
+ export declare const StyleMasks: {
25
+ BLINK: number;
26
+ BOLD: number;
27
+ DIM: number;
28
+ HIDDEN: number;
29
+ INVERT: number;
30
+ ITALIC: number;
31
+ STRIKETHROUGH: number;
32
+ UNDERLINE: number;
33
+ };
@@ -0,0 +1,5 @@
1
+ export * from "./app.d.ts";
2
+ export * from "./cell.d.ts";
3
+ export * from "./inline.d.ts";
4
+ export * from "./input.d.ts";
5
+ export { Renderer, TerminalGuard, type TerminalSize, terminalSize } from "./native-binding.d.ts";
@@ -0,0 +1,5 @@
1
+ export { TuiApp } from '../packem_shared/TuiApp-DfxOnXqi.js';
2
+ export { Cell, StyleMasks } from '../packem_shared/Cell-DCg1kJY-.js';
3
+ export { createInlineLoop } from '../packem_shared/createInlineLoop-BxMmcq9D.js';
4
+ export { InputParser } from '../packem_shared/InputParser-BKHpWfvN.js';
5
+ export { Renderer, TerminalGuard, terminalSize } from '../packem_shared/Renderer-zZ5O3vxc.js';
@@ -0,0 +1,22 @@
1
+ export interface InlineOptions {
2
+ /** Frames per second. Default: 60 */
3
+ fps?: number;
4
+ /**
5
+ * What to do with the rendered content when the loop stops.
6
+ * - 'preserve' (default) — content stays in terminal scrollback
7
+ * - 'destroy' — content is cleared, terminal looks untouched
8
+ */
9
+ onExit?: "preserve" | "destroy";
10
+ /** Number of terminal rows to reserve. Default: 10 */
11
+ rows?: number;
12
+ }
13
+ export type InlinePaintFn = (buf: Uint32Array, cols: number, rows: number, frame: number) => void;
14
+ export interface InlineLoop {
15
+ start: () => void;
16
+ stop: () => void;
17
+ }
18
+ /**
19
+ * Create an inline render loop. Renders `rows` lines immediately below the
20
+ * current cursor position (no alternate screen).
21
+ */
22
+ export declare function createInlineLoop(paint: InlinePaintFn, options?: InlineOptions): InlineLoop;
@@ -0,0 +1,18 @@
1
+ import EventEmitter from "eventemitter3";
2
+ export interface MouseEvent {
3
+ button: "left" | "right" | "middle" | "scrollUp" | "scrollDown";
4
+ ctrl: boolean;
5
+ meta: boolean;
6
+ shift: boolean;
7
+ x: number;
8
+ y: number;
9
+ }
10
+ export declare class InputParser extends EventEmitter {
11
+ private stdin;
12
+ private _boundHandleData;
13
+ private _pasteBuffer;
14
+ constructor(stdin: NodeJS.ReadStream);
15
+ start(): void;
16
+ stop(): void;
17
+ private handleData;
18
+ }
@@ -0,0 +1,22 @@
1
+ export interface TerminalSize {
2
+ cols: number;
3
+ rows: number;
4
+ }
5
+ export interface RendererInstance {
6
+ readonly height: number;
7
+ render: (backBuffer: Uint32Array) => void;
8
+ renderDiff: (backBuffer: Uint32Array) => string;
9
+ resize: (width: number, height: number) => void;
10
+ setRowOffset: (offset: number) => void;
11
+ readonly width: number;
12
+ writeRaw: (data: string) => void;
13
+ }
14
+ export type RendererConstructor = new (width: number, height: number) => RendererInstance;
15
+ export interface TerminalGuardInstance {
16
+ getSize: () => TerminalSize;
17
+ leave: () => void;
18
+ }
19
+ export type TerminalGuardConstructor = new (mouse?: boolean | undefined | null) => TerminalGuardInstance;
20
+ export declare const Renderer: RendererConstructor;
21
+ export declare const TerminalGuard: TerminalGuardConstructor;
22
+ export declare const terminalSize: () => TerminalSize;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Sentinel value for the trailing cell of a wide (fullWidth) character.
3
+ * Must be outside Unicode scalar range so it never collides with real text.
4
+ */
5
+ export declare const CONTINUATION_CELL_CODE = 1114112;
@@ -0,0 +1,38 @@
1
+ type ControlStringType = "osc" | "dcs" | "pm" | "apc" | "sos";
2
+ type CsiToken = {
3
+ readonly finalCharacter: string;
4
+ readonly intermediateString: string;
5
+ readonly parameterString: string;
6
+ readonly type: "csi";
7
+ readonly value: string;
8
+ };
9
+ type EscToken = {
10
+ readonly finalCharacter: string;
11
+ readonly intermediateString: string;
12
+ readonly type: "esc";
13
+ readonly value: string;
14
+ };
15
+ type ControlStringToken = {
16
+ readonly type: ControlStringType;
17
+ readonly value: string;
18
+ };
19
+ type TextToken = {
20
+ readonly type: "text";
21
+ readonly value: string;
22
+ };
23
+ type StToken = {
24
+ readonly type: "st";
25
+ readonly value: string;
26
+ };
27
+ type C1Token = {
28
+ readonly type: "c1";
29
+ readonly value: string;
30
+ };
31
+ type InvalidToken = {
32
+ readonly type: "invalid";
33
+ readonly value: string;
34
+ };
35
+ export type AnsiToken = TextToken | CsiToken | EscToken | ControlStringToken | StToken | C1Token | InvalidToken;
36
+ export declare const hasAnsiControlCharacters: (text: string) => boolean;
37
+ export declare const tokenizeAnsi: (text: string) => AnsiToken[];
38
+ export {};
@@ -0,0 +1,29 @@
1
+ /**
2
+ * OSC 52 clipboard protocol utilities.
3
+ *
4
+ * OSC 52 allows terminal applications to read/write the system clipboard
5
+ * via escape sequences. Format: ESC ] 52 ; &lt;target> ; &lt;base64-data> BEL
6
+ * @see https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Operating-System-Commands
7
+ */
8
+ import type { Writable } from "node:stream";
9
+ /**
10
+ * Clipboard targets as defined by the OSC 52 spec.
11
+ * - `c` — system clipboard
12
+ * - `p` — primary selection (X11 only)
13
+ * - `s` — secondary selection (X11 only)
14
+ */
15
+ export type ClipboardTarget = "c" | "p" | "s";
16
+ /**
17
+ * Check whether the current terminal likely supports OSC 52.
18
+ *
19
+ * Detection is best-effort based on `TERM_PROGRAM` and other env vars.
20
+ * Returns `true` for known-supported terminals, `false` otherwise.
21
+ */
22
+ export declare const isOsc52Supported: () => boolean;
23
+ export declare const writeOsc52: (stream: Writable, text: string, target?: ClipboardTarget) => void;
24
+ /**
25
+ * Clear the clipboard via OSC 52.
26
+ * @param stream The writable stream to write the escape sequence to.
27
+ * @param target The clipboard target. Defaults to `"c"`.
28
+ */
29
+ export declare const clearOsc52: (stream: Writable, target?: ClipboardTarget) => void;
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Color matrix transforms for color blindness simulation and compensation.
3
+ *
4
+ * Matrices sourced from research by Brettel, Viénot, and Mollon (1997)
5
+ * and Machado, Oliveira, and Fernandes (2009).
6
+ * @see https://www.inf.ufrgs.br/~oliveira/pubs_files/CVD_Simulation/CVD_Simulation.html
7
+ */
8
+ /**
9
+ * 3x3 color transformation matrix operating on linear RGB values (0-255).
10
+ */
11
+ export type ColorMatrix = readonly [readonly [number, number, number], readonly [number, number, number], readonly [number, number, number]];
12
+ export type ColorBlindnessType = "achromatopsia" | "deuteranopia" | "protanopia" | "tritanopia";
13
+ /**
14
+ * Simulation matrices — show how colors appear to users with color vision deficiency.
15
+ */
16
+ export declare const COLOR_BLINDNESS_SIMULATION: Record<ColorBlindnessType, ColorMatrix>;
17
+ /**
18
+ * Compensation matrices — shift colors into a distinguishable range for affected users.
19
+ * These remap problematic colors to alternatives the user can perceive.
20
+ */
21
+ /**
22
+ * Compensation matrices — enhance distinguishability for affected users
23
+ * by redistributing the lost channel's energy into perceivable channels.
24
+ * Based on Daltonization approach (Fidaner et al., 2005).
25
+ */
26
+ export declare const COLOR_BLINDNESS_COMPENSATION: Record<Exclude<ColorBlindnessType, "achromatopsia">, ColorMatrix>;
27
+ /**
28
+ * Identity matrix (no transformation).
29
+ */
30
+ export declare const IDENTITY_MATRIX: ColorMatrix;
31
+ /**
32
+ * Apply a 3x3 color matrix to an RGB triplet.
33
+ * @param r Red channel (0-255)
34
+ * @param g Green channel (0-255)
35
+ * @param b Blue channel (0-255)
36
+ * @param matrix The 3x3 transformation matrix
37
+ * @returns Transformed [r, g, b] triplet, clamped to 0-255
38
+ */
39
+ export declare const applyColorMatrix: (r: number, g: number, b: number, matrix: ColorMatrix) => [number, number, number];
40
+ export declare const hexToRgb: (hex: string) => [number, number, number] | null;
41
+ /**
42
+ * Convert RGB components to a hex color string.
43
+ */
44
+ export declare const rgbToHex: (r: number, g: number, b: number) => string;
45
+ /**
46
+ * Transform a hex color through a color blindness simulation or compensation matrix.
47
+ * Returns the original color if parsing fails.
48
+ */
49
+ export declare const transformHexColor: (hex: string, matrix: ColorMatrix) => string;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Shared color lookup tables and parsing utilities.
3
+ *
4
+ * Used by styled-line-serializer.ts, styled-line-factory.ts, and output.ts
5
+ * to avoid triplicate color mapping code.
6
+ */
7
+ /** Standard ANSI color names to 0-7 index */
8
+ export declare const NAMED_COLORS: Readonly<Record<string, number>>;
9
+ /** Bright ANSI color names to 8-15 index */
10
+ export declare const BRIGHT_COLORS: Readonly<Record<string, number>>;
11
+ /**
12
+ * Parse a color string into an ANSI 256-color index (0-255).
13
+ * Returns 255 (default) for unrecognized colors.
14
+ */
15
+ export declare const colorToAnsi256: (color: string) => number;
16
+ /**
17
+ * Convert a color string to SGR parameter array for escape sequences.
18
+ * @param color the color string to convert
19
+ * @param isFg true for foreground (30-based), false for background (40-based)
20
+ */
21
+ export declare const colorToSgrParams: (color: string, isFg: boolean) => number[];
22
+ /**
23
+ * Convert a color string to a raw ANSI escape code string.
24
+ */
25
+ export declare const colorToAnsiCode: (color: string, isFg: boolean) => string | undefined;
26
+ /**
27
+ * Convert an ANSI 256-color index to a named color string.
28
+ * Standard colors (0-7) use names; everything else uses ansi256(N).
29
+ */
30
+ export declare const ansi256ToColorName: (index: number) => string;
@@ -0,0 +1,4 @@
1
+ type ColorType = "foreground" | "background";
2
+ declare const colorize: (string_: string, color: string | undefined, type: ColorType) => string;
3
+ export declare const getBackgroundColorEscape: (color: string) => string | undefined;
4
+ export default colorize;
@@ -0,0 +1,4 @@
1
+ import type { Context } from "react";
2
+ export declare const accessibilityContext: Context<{
3
+ isScreenReaderEnabled: boolean;
4
+ }>;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Alert component for Ink.
3
+ *
4
+ * Inspired by ink-ui Alert by Vadim Demedes.
5
+ * @see https://github.com/vadimdemedes/ink-ui
6
+ *
7
+ * MIT License
8
+ * Copyright (c) Vadym Demedes (github.com/vadimdemedes)
9
+ */
10
+ import type { ReactElement, ReactNode } from "react";
11
+ import type { Variant } from "./variant-config.d.ts";
12
+ export type AlertVariant = Variant;
13
+ export type Props = {
14
+ /**
15
+ * Alert message content.
16
+ */
17
+ readonly children: ReactNode;
18
+ /**
19
+ * Optional heading displayed above the message.
20
+ */
21
+ readonly title?: string;
22
+ /**
23
+ * Determines the border color and icon.
24
+ */
25
+ readonly variant: AlertVariant;
26
+ };
27
+ /**
28
+ * Renders a bordered alert box with a variant-specific icon, optional title, and message.
29
+ */
30
+ export default function Alert({ children, title, variant }: Props): ReactElement;
@@ -0,0 +1,10 @@
1
+ import type { Context } from "react";
2
+ type AnimationContextValue = {
3
+ readonly renderThrottleMs: number;
4
+ readonly subscribe: (callback: (currentTime: number) => void, interval: number) => {
5
+ readonly startTime: number;
6
+ readonly unsubscribe: () => void;
7
+ };
8
+ };
9
+ declare const animationContext: Context<AnimationContextValue>;
10
+ export default animationContext;
@@ -0,0 +1,19 @@
1
+ import type { ReactNode } from "react";
2
+ import React from "react";
3
+ import type { CursorPosition } from "../log-update.d.ts";
4
+ type Props = {
5
+ readonly children: ReactNode;
6
+ readonly exitOnCtrlC: boolean;
7
+ readonly interactive: boolean;
8
+ readonly onExit: (errorOrResult?: unknown) => void;
9
+ readonly onWaitUntilRenderFlush: () => Promise<void>;
10
+ readonly renderThrottleMs: number;
11
+ readonly setCursorPosition: (position: CursorPosition | undefined) => void;
12
+ readonly stderr: NodeJS.WriteStream;
13
+ readonly stdin: NodeJS.ReadStream;
14
+ readonly stdout: NodeJS.WriteStream;
15
+ readonly writeToStderr: (data: string) => void;
16
+ readonly writeToStdout: (data: string) => void;
17
+ };
18
+ declare const _default: React.FC<Props>;
19
+ export default _default;
@@ -0,0 +1,38 @@
1
+ import type { Context } from "react";
2
+ export type Props = {
3
+ /**
4
+ * Exit (unmount) the whole Ink app.
5
+ *
6
+ * - `exit()` — resolves `waitUntilExit()` with `undefined`.
7
+ * - `exit(new Error('…'))` — rejects `waitUntilExit()` with the error.
8
+ * - `exit(value)` — resolves `waitUntilExit()` with `value`.
9
+ */
10
+ readonly exit: (errorOrResult?: Error | unknown) => void;
11
+ /**
12
+ * Returns a promise that settles after pending render output is flushed to stdout.
13
+ * @example
14
+ * ```jsx
15
+ * import {useEffect} from 'react';
16
+ * import {useApp} from 'ink';
17
+
18
+ const Example = () => {
19
+ const {waitUntilRenderFlush} = useApp();
20
+
21
+ useEffect(() => {
22
+ void (async () => {
23
+ await waitUntilRenderFlush();
24
+ runNextCommand();
25
+ })();
26
+ }, [waitUntilRenderFlush]);
27
+
28
+ return …;
29
+ };
30
+ ```
31
+ */
32
+ readonly waitUntilRenderFlush: () => Promise<void>;
33
+ };
34
+ /**
35
+ * `AppContext` is a React context that exposes lifecycle methods for the app.
36
+ */
37
+ declare const AppContext: Context<Props>;
38
+ export default AppContext;
@@ -0,0 +1,5 @@
1
+ import type { AnsiColors } from "@visulima/colorize";
2
+ import type { Context } from "react";
3
+ import type { LiteralUnion } from "type-fest";
4
+ export type BackgroundColor = LiteralUnion<AnsiColors, string>;
5
+ export declare const backgroundContext: Context<BackgroundColor | undefined>;