@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,75 @@
1
+ import type { ReactElement } from "react";
2
+ import type { FileEntry, FilePickerFilter } from "./types.d.ts";
3
+ export type Props = {
4
+ /**
5
+ * Color for the focused item highlight.
6
+ *
7
+ * @default "cyan"
8
+ */
9
+ readonly accentColor?: string;
10
+ /**
11
+ * Color for directory entries.
12
+ *
13
+ * @default "blue"
14
+ */
15
+ readonly directoryColor?: string;
16
+ /**
17
+ * Color for file entries.
18
+ *
19
+ * @default "white"
20
+ */
21
+ readonly fileColor?: string;
22
+ /**
23
+ * File filter options.
24
+ */
25
+ readonly filter?: FilePickerFilter;
26
+ /**
27
+ * Starting directory path.
28
+ *
29
+ * @default process.cwd()
30
+ */
31
+ readonly initialPath?: string;
32
+ /**
33
+ * Whether keyboard navigation is active.
34
+ *
35
+ * @default true
36
+ */
37
+ readonly isFocused?: boolean;
38
+ /**
39
+ * Maximum number of visible items (viewport height).
40
+ *
41
+ * @default 10
42
+ */
43
+ readonly limit?: number;
44
+ /**
45
+ * Called when escape is pressed.
46
+ */
47
+ readonly onCancel?: () => void;
48
+ /**
49
+ * Called when a file is selected (enter on a file entry).
50
+ */
51
+ readonly onSelect?: (entry: FileEntry) => void;
52
+ /**
53
+ * Show file permissions column.
54
+ *
55
+ * @default false
56
+ */
57
+ readonly showPermissions?: boolean;
58
+ /**
59
+ * Show file size column.
60
+ *
61
+ * @default false
62
+ */
63
+ readonly showSize?: boolean;
64
+ };
65
+ /**
66
+ * A file system browser component for picking files from the terminal.
67
+ *
68
+ * ```tsx
69
+ * <FilePicker
70
+ * onSelect={(entry) => console.log("Selected:", entry.path)}
71
+ * filter={{ extensions: [".ts", ".tsx"] }}
72
+ * />
73
+ * ```
74
+ */
75
+ export default function FilePicker({ accentColor, directoryColor, fileColor, filter, initialPath, isFocused, limit, onCancel, onSelect, showPermissions, showSize, }: Props): ReactElement;
@@ -0,0 +1,3 @@
1
+ export type { Props as FilePickerProps } from "./FilePicker.d.ts";
2
+ export { default as FilePicker } from "./FilePicker.d.ts";
3
+ export type { FileEntry, FilePickerFilter } from "./types.d.ts";
@@ -0,0 +1,38 @@
1
+ /**
2
+ * A single entry (file or directory) returned by the file system hook.
3
+ */
4
+ export type FileEntry = {
5
+ readonly isDirectory: boolean;
6
+ readonly isHidden: boolean;
7
+ readonly name: string;
8
+ readonly path: string;
9
+ readonly permissions: string;
10
+ readonly size: number;
11
+ };
12
+ /**
13
+ * Filter options for the file picker.
14
+ */
15
+ export type FilePickerFilter = {
16
+ /**
17
+ * Allowed file extensions (e.g. `[".ts", ".tsx"]`). Empty or omitted means all.
18
+ */
19
+ readonly extensions?: readonly string[];
20
+ /**
21
+ * Whether to include directories in the list.
22
+ *
23
+ * @default true
24
+ */
25
+ readonly showDirectories?: boolean;
26
+ /**
27
+ * Whether to include regular files in the list.
28
+ *
29
+ * @default true
30
+ */
31
+ readonly showFiles?: boolean;
32
+ /**
33
+ * Whether to include hidden files (names starting with `.`).
34
+ *
35
+ * @default false
36
+ */
37
+ readonly showHidden?: boolean;
38
+ };
@@ -0,0 +1,16 @@
1
+ import type { FileEntry, FilePickerFilter } from "./types.d.ts";
2
+ type UseFileSystemOptions = {
3
+ readonly filter: FilePickerFilter;
4
+ readonly initialPath: string;
5
+ };
6
+ type UseFileSystemResult = {
7
+ readonly currentPath: string;
8
+ readonly entries: readonly FileEntry[];
9
+ readonly error: string | undefined;
10
+ readonly goUp: () => void;
11
+ readonly isLoading: boolean;
12
+ readonly navigateTo: (path: string) => void;
13
+ readonly refresh: () => void;
14
+ };
15
+ export default function useFileSystem(options: UseFileSystemOptions): UseFileSystemResult;
16
+ export {};
@@ -0,0 +1,43 @@
1
+ import type React from "react";
2
+ import type { ReactNode, Ref } from "react";
3
+ import type { Props as BoxProps } from "../Box.d.ts";
4
+ export interface ControlledScrollViewProps extends BoxProps {
5
+ children?: ReactNode;
6
+ debug?: boolean;
7
+ onContentHeightChange?: (height: number, previousHeight: number) => void;
8
+ onItemHeightChange?: (index: number, height: number, previousHeight: number) => void;
9
+ onViewportSizeChange?: (size: {
10
+ height: number;
11
+ width: number;
12
+ }, previousSize: {
13
+ height: number;
14
+ width: number;
15
+ }) => void;
16
+ /**
17
+ * Number of extra items to render above/below the viewport when virtualized.
18
+ * @default 3
19
+ */
20
+ overscan?: number;
21
+ scrollOffset: number;
22
+ /**
23
+ * Only render items visible in the viewport plus overscan.
24
+ * Items must be measured first (first render always renders all items).
25
+ * @default false
26
+ */
27
+ virtualize?: boolean;
28
+ }
29
+ export interface ControlledScrollViewRef {
30
+ getBottomOffset: () => number;
31
+ getContentHeight: () => number;
32
+ getItemHeight: (index: number) => number;
33
+ getItemPosition: (index: number) => {
34
+ height: number;
35
+ top: number;
36
+ } | null;
37
+ getViewportHeight: () => number;
38
+ remeasure: () => void;
39
+ remeasureItem: (index: number) => void;
40
+ }
41
+ export declare const ControlledScrollView: ({ children, debug, onContentHeightChange, onItemHeightChange, onViewportSizeChange, overscan, ref, scrollOffset, virtualize, ...boxProps }: ControlledScrollViewProps & {
42
+ ref?: Ref<ControlledScrollViewRef>;
43
+ }) => React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ import type { Props as BoxProps } from "../Box.d.ts";
3
+ type ScrollBarPlacement = "inset" | "left" | "right";
4
+ type ScrollBarStyle = BoxProps["borderStyle"] | "block" | "line" | "thick" | "dots";
5
+ interface ScrollBarProps {
6
+ autoHide?: boolean;
7
+ color?: string;
8
+ contentHeight: number;
9
+ dimColor?: boolean;
10
+ placement?: ScrollBarPlacement;
11
+ scrollOffset: number;
12
+ style?: ScrollBarStyle;
13
+ thumbChar?: string;
14
+ trackChar?: string;
15
+ viewportHeight: number;
16
+ }
17
+ declare const ScrollBar: React.FC<ScrollBarProps>;
18
+ export type { ScrollBarPlacement, ScrollBarProps, ScrollBarStyle };
19
+ export { ScrollBar };
20
+ export default ScrollBar;
@@ -0,0 +1,15 @@
1
+ import type React from "react";
2
+ import type { Props as BoxProps } from "../Box.d.ts";
3
+ interface ScrollBarBoxProps extends BoxProps {
4
+ children?: React.ReactNode;
5
+ contentHeight: number;
6
+ scrollBarAutoHide?: boolean;
7
+ scrollBarPosition?: "left" | "right";
8
+ scrollOffset: number;
9
+ thumbChar?: string;
10
+ viewportHeight: number;
11
+ }
12
+ declare const ScrollBarBox: ({ borderColor, borderDimColor, borderLeftColor, borderLeftDimColor, borderRightColor, borderRightDimColor, borderStyle, children, contentHeight, height, scrollBarAutoHide, scrollBarPosition, scrollOffset, thumbChar, viewportHeight, ...boxProps }: ScrollBarBoxProps) => React.JSX.Element;
13
+ export type { ScrollBarBoxProps };
14
+ export { ScrollBarBox };
15
+ export default ScrollBarBox;
@@ -0,0 +1,12 @@
1
+ import type React from "react";
2
+ import type { Ref } from "react";
3
+ import type { ScrollViewProps, ScrollViewRef } from "./ScrollView.d.ts";
4
+ export type ScrollAlignment = "auto" | "bottom" | "center" | "top";
5
+ export interface ScrollListProps extends ScrollViewProps {
6
+ readonly scrollAlignment?: ScrollAlignment;
7
+ readonly selectedIndex?: number;
8
+ }
9
+ export type ScrollListRef = ScrollViewRef;
10
+ export declare const ScrollList: (props: ScrollListProps & {
11
+ ref?: Ref<ScrollListRef>;
12
+ }) => React.JSX.Element;
@@ -0,0 +1,98 @@
1
+ import type React from "react";
2
+ import type { ReactNode, Ref } from "react";
3
+ import type { Props as BoxProps } from "../Box.d.ts";
4
+ export interface ScrollViewProps extends BoxProps {
5
+ children?: ReactNode;
6
+ debug?: boolean;
7
+ /**
8
+ * Auto-scroll to bottom when content grows and user is at/near the bottom.
9
+ * Pauses when user scrolls away from bottom; resumes when they return.
10
+ * @default false
11
+ */
12
+ followOutput?: boolean;
13
+ /**
14
+ * Number of lines from bottom that still counts as "at bottom" for followOutput.
15
+ * @default 3
16
+ */
17
+ followThreshold?: number;
18
+ /**
19
+ * Enable built-in keyboard navigation (arrows, page up/down, home/end, ctrl+u/d).
20
+ * When enabled, the component becomes focusable.
21
+ * @default false
22
+ */
23
+ keyboard?: boolean;
24
+ onContentHeightChange?: (height: number, previousHeight: number) => void;
25
+ onItemHeightChange?: (index: number, height: number, previousHeight: number) => void;
26
+ /**
27
+ * Fires when scrolled within `reachThreshold` lines of the end.
28
+ * Only fires once per entry into the threshold zone.
29
+ */
30
+ onReachEnd?: () => void;
31
+ /**
32
+ * Fires when scrolled within `reachThreshold` lines of the start.
33
+ * Only fires once per entry into the threshold zone.
34
+ */
35
+ onReachStart?: () => void;
36
+ onScroll?: (scrollOffset: number) => void;
37
+ onViewportSizeChange?: (size: {
38
+ height: number;
39
+ width: number;
40
+ }, previousSize: {
41
+ height: number;
42
+ width: number;
43
+ }) => void;
44
+ /**
45
+ * Number of extra items to render above/below the viewport when virtualized.
46
+ * @default 3
47
+ */
48
+ overscan?: number;
49
+ /**
50
+ * Distance in lines from the edge to trigger onReachEnd/onReachStart.
51
+ * @default 5
52
+ */
53
+ reachThreshold?: number;
54
+ /**
55
+ * Show a scrollbar track when content overflows the viewport.
56
+ * @default false
57
+ */
58
+ scrollbar?: boolean;
59
+ /**
60
+ * Color of the scrollbar thumb and track.
61
+ */
62
+ scrollbarColor?: string;
63
+ /**
64
+ * Scrollbar visual style.
65
+ * @default "line"
66
+ */
67
+ scrollbarStyle?: "arrow" | "block" | "bold" | "classic" | "dots" | "double" | "doubleSingle" | "line" | "round" | "single" | "singleDouble" | "thick";
68
+ /**
69
+ * Enable vim-style keybindings (j/k/g/G/u/d). Requires `keyboard` to be true.
70
+ * @default false
71
+ */
72
+ vimBindings?: boolean;
73
+ /**
74
+ * Only render items visible in the viewport plus overscan. Requires items to be measured first.
75
+ * @default false
76
+ */
77
+ virtualize?: boolean;
78
+ }
79
+ export interface ScrollViewRef {
80
+ getBottomOffset: () => number;
81
+ getContentHeight: () => number;
82
+ getItemHeight: (index: number) => number;
83
+ getItemPosition: (index: number) => {
84
+ height: number;
85
+ top: number;
86
+ } | null;
87
+ getScrollOffset: () => number;
88
+ getViewportHeight: () => number;
89
+ remeasure: () => void;
90
+ remeasureItem: (index: number) => void;
91
+ scrollBy: (delta: number) => void;
92
+ scrollTo: (offset: number) => void;
93
+ scrollToBottom: () => void;
94
+ scrollToTop: () => void;
95
+ }
96
+ export declare const ScrollView: ({ children, debug, followOutput, followThreshold, keyboard, onContentHeightChange, onItemHeightChange, onReachEnd, onReachStart, onScroll, onViewportSizeChange, overscan, reachThreshold, ref, scrollbar, scrollbarColor, scrollbarStyle: scrollbarStyleProp, vimBindings, virtualize, ...boxProps }: ScrollViewProps & {
97
+ ref?: Ref<ScrollViewRef>;
98
+ }) => React.JSX.Element;
@@ -0,0 +1,10 @@
1
+ export type { ControlledScrollViewProps, ControlledScrollViewRef } from "./ControlledScrollView.d.ts";
2
+ export { ControlledScrollView } from "./ControlledScrollView.d.ts";
3
+ export type { ScrollBarPlacement, ScrollBarProps, ScrollBarStyle } from "./ScrollBar.d.ts";
4
+ export { ScrollBar } from "./ScrollBar.d.ts";
5
+ export type { ScrollBarBoxProps } from "./ScrollBarBox.d.ts";
6
+ export { ScrollBarBox } from "./ScrollBarBox.d.ts";
7
+ export type { ScrollAlignment, ScrollListProps, ScrollListRef } from "./ScrollList.d.ts";
8
+ export { ScrollList } from "./ScrollList.d.ts";
9
+ export type { ScrollViewProps, ScrollViewRef } from "./ScrollView.d.ts";
10
+ export { ScrollView } from "./ScrollView.d.ts";
@@ -0,0 +1,8 @@
1
+ import type React from "react";
2
+ /**
3
+ * Hook to manage state with immediate ref synchronization.
4
+ * Useful for values that need to be read synchronously in imperative methods
5
+ * but also trigger re-renders when changed.
6
+ */
7
+ declare const useStateRef: <T>(initialValue: T) => readonly [T, (update: React.SetStateAction<T>) => void, () => T];
8
+ export default useStateRef;
@@ -0,0 +1,89 @@
1
+ /**
2
+ * TreeView component for terminal UIs with keyboard navigation,
3
+ * expand/collapse, single/multi selection, async children loading,
4
+ * and viewport virtualization.
5
+ *
6
+ * Ported from ink-tree-view by John Costa.
7
+ * @see https://github.com/costajohnt/ink-tree-view
8
+ *
9
+ * MIT License
10
+ * Copyright (c) John Costa
11
+ */
12
+ import type { ReactElement, ReactNode } from "react";
13
+ import type { AsyncChildrenFunction, SelectionMode, TreeNode, TreeNodeRendererProps } from "./types.d.ts";
14
+ export type Props<T = Record<string, unknown>> = {
15
+ /**
16
+ * Accessible label for the tree container.
17
+ * Useful when multiple tree views are on screen.
18
+ * @default "Tree view"
19
+ */
20
+ readonly ariaLabel?: string;
21
+ /**
22
+ * The tree data. Array of root-level nodes.
23
+ *
24
+ * **Important:** Must be referentially stable across renders (e.g. stored
25
+ * in state or wrapped in `useMemo`). Passing a new array reference on
26
+ * every render will reset focus, expansion, and selection state.
27
+ */
28
+ readonly data: TreeNode<T>[];
29
+ /**
30
+ * Set of node IDs that are expanded by default.
31
+ * If not provided, all nodes start collapsed.
32
+ */
33
+ readonly defaultExpanded?: ReadonlySet<string> | "all";
34
+ /**
35
+ * Set of node IDs that are selected by default.
36
+ */
37
+ readonly defaultSelected?: ReadonlySet<string>;
38
+ /**
39
+ * When disabled, user input is ignored.
40
+ * @default false
41
+ */
42
+ readonly isDisabled?: boolean;
43
+ /**
44
+ * Async function to load children on demand.
45
+ */
46
+ readonly loadChildren?: AsyncChildrenFunction<T>;
47
+ /** Called when expanded set changes. */
48
+ readonly onExpandChange?: (expandedIds: ReadonlySet<string>) => void;
49
+ /** Called when the focused node changes. */
50
+ readonly onFocusChange?: (nodeId: string) => void;
51
+ /**
52
+ * Called when `loadChildren` rejects. Receives the node ID and error.
53
+ */
54
+ readonly onLoadError?: (nodeId: string, error: Error) => void;
55
+ /** Called when selection changes. */
56
+ readonly onSelectChange?: (selectedIds: ReadonlySet<string>) => void;
57
+ /**
58
+ * Custom node renderer. Receives node + state, returns Ink JSX.
59
+ */
60
+ readonly renderNode?: (props: TreeNodeRendererProps<T>) => ReactNode;
61
+ /**
62
+ * Selection mode.
63
+ * - "none": No selection behavior (default).
64
+ * - "single": One node can be selected at a time.
65
+ * - "multiple": Multiple nodes can be selected (checkboxes shown).
66
+ * @default "none"
67
+ */
68
+ readonly selectionMode?: SelectionMode;
69
+ /**
70
+ * Number of visible nodes in the viewport (for virtualization).
71
+ * @default Infinity (no virtualization)
72
+ */
73
+ readonly visibleNodeCount?: number;
74
+ };
75
+ /**
76
+ * Renders an interactive tree view with keyboard navigation.
77
+ *
78
+ * ```tsx
79
+ * &lt;TreeView
80
+ * data={[
81
+ * { id: "1", label: "Root", children: [
82
+ * { id: "1.1", label: "Child" },
83
+ * ]},
84
+ * ]}
85
+ * defaultExpanded="all"
86
+ * />
87
+ * ```
88
+ */
89
+ export declare function TreeView<T = Record<string, unknown>>({ ariaLabel, data, defaultExpanded, defaultSelected, isDisabled, loadChildren, onExpandChange, onFocusChange, onLoadError, onSelectChange, renderNode, selectionMode, visibleNodeCount, }: Props<T>): ReactElement;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * TreeViewNode renders a single node in the tree with focus indicator,
3
+ * indentation, expand/collapse indicator, label, and selection state.
4
+ *
5
+ * Ported from ink-tree-view by John Costa.
6
+ * @see https://github.com/costajohnt/ink-tree-view
7
+ *
8
+ * MIT License
9
+ * Copyright (c) John Costa
10
+ */
11
+ import type { ReactElement } from "react";
12
+ import type { Theme } from "./theme.d.ts";
13
+ import type { SelectionMode, TreeNode, TreeNodeState } from "./types.d.ts";
14
+ type Props<T = Record<string, unknown>> = {
15
+ readonly isScreenReaderEnabled: boolean;
16
+ readonly node: TreeNode<T>;
17
+ readonly nodeState: TreeNodeState;
18
+ readonly selectionMode: SelectionMode;
19
+ readonly siblingCount: number;
20
+ readonly siblingPosition: number;
21
+ readonly styles: Theme["styles"];
22
+ };
23
+ export declare function buildNodeAriaLabel(label: string, nodeState: TreeNodeState, siblingPosition: number, siblingCount: number): string;
24
+ export declare function buildNodeAriaState(nodeState: TreeNodeState, selectionMode: SelectionMode): {
25
+ expanded?: boolean;
26
+ selected?: boolean;
27
+ } | undefined;
28
+ export declare function TreeViewNode<T>({ isScreenReaderEnabled, node, nodeState, selectionMode, siblingCount, siblingPosition, styles }: Props<T>): ReactElement;
29
+ export {};
@@ -0,0 +1,11 @@
1
+ export type { Theme as TreeViewTheme } from "./theme.d.ts";
2
+ export { theme as treeViewTheme } from "./theme.d.ts";
3
+ export type { FlatNode } from "./tree-node-map.d.ts";
4
+ export { TreeNodeMap } from "./tree-node-map.d.ts";
5
+ export type { Props as TreeViewProps } from "./TreeView.d.ts";
6
+ export { TreeView } from "./TreeView.d.ts";
7
+ export type { AsyncChildrenFunction, SelectionMode, TreeNode, TreeNodeRendererProps, TreeNodeState } from "./types.d.ts";
8
+ export type { UseTreeViewProps } from "./use-tree-view.d.ts";
9
+ export { useTreeView } from "./use-tree-view.d.ts";
10
+ export type { TreeViewState, UseTreeViewStateProps } from "./use-tree-view-state.d.ts";
11
+ export { useTreeViewState } from "./use-tree-view-state.d.ts";
@@ -0,0 +1,24 @@
1
+ import type { Props as BoxProps } from "../Box.d.ts";
2
+ import type { Props as TextProps } from "../Text.d.ts";
3
+ type StyleFunctionProps = {
4
+ readonly depth?: number;
5
+ readonly hasChildren?: boolean;
6
+ readonly isExpanded?: boolean;
7
+ readonly isFocused?: boolean;
8
+ readonly isLoading?: boolean;
9
+ readonly isSelected?: boolean;
10
+ };
11
+ declare const theme: {
12
+ styles: {
13
+ container: () => BoxProps;
14
+ expandIndicator: (_props: StyleFunctionProps) => TextProps;
15
+ focusIndicator: () => TextProps;
16
+ indent: ({ depth }: StyleFunctionProps) => BoxProps;
17
+ label: ({ isFocused, isSelected }: StyleFunctionProps) => TextProps;
18
+ loadingIndicator: () => TextProps;
19
+ node: ({ isFocused }: StyleFunctionProps) => BoxProps;
20
+ selectedIndicator: () => TextProps;
21
+ };
22
+ };
23
+ export { theme };
24
+ export type Theme = typeof theme;
@@ -0,0 +1,72 @@
1
+ import type { TreeNode } from "./types.d.ts";
2
+ /**
3
+ * A flattened representation of a tree node with navigation links.
4
+ */
5
+ export type FlatNode<T = Record<string, unknown>> = {
6
+ /** Ordered list of direct children IDs. */
7
+ readonly childrenIds: ReadonlyArray<string>;
8
+ /** Depth in the tree (0 for roots). */
9
+ readonly depth: number;
10
+ /** Index in the flattened DFS order (across ALL nodes, not just visible). */
11
+ readonly flatIndex: number;
12
+ /** Whether this node has children. */
13
+ readonly hasChildren: boolean;
14
+ /** Next sibling's ID, or undefined. */
15
+ readonly nextSiblingId: string | undefined;
16
+ /** The original tree node. */
17
+ readonly node: TreeNode<T>;
18
+ /** Parent's id, or undefined if root. */
19
+ readonly parentId: string | undefined;
20
+ /** Previous sibling's ID, or undefined. */
21
+ readonly previousSiblingId: string | undefined;
22
+ /** Total number of siblings (including this node). */
23
+ readonly siblingCount: number;
24
+ /** Zero-based index among siblings. */
25
+ readonly siblingIndex: number;
26
+ };
27
+ /**
28
+ * A flattened map of all tree nodes built via DFS traversal.
29
+ * Stores parent/child/sibling links for O(1) navigation.
30
+ */
31
+ export declare class TreeNodeMap<T = Record<string, unknown>> {
32
+ /** All node IDs in DFS order. */
33
+ readonly orderedIds: string[];
34
+ /** Root-level node IDs. */
35
+ readonly rootIds: string[];
36
+ /** Map from node ID to FlatNode. */
37
+ private readonly map;
38
+ constructor(data: TreeNode<T>[]);
39
+ /**
40
+ * Iterate over all entries.
41
+ */
42
+ entries(): IterableIterator<[string, FlatNode<T>]>;
43
+ /**
44
+ * Get a flat node by ID.
45
+ */
46
+ get(id: string): FlatNode<T> | undefined;
47
+ /**
48
+ * Total number of nodes in the tree.
49
+ */
50
+ get size(): number;
51
+ /**
52
+ * Given a set of expanded node IDs, return the ordered list of
53
+ * VISIBLE node IDs (i.e., a node is visible if all its ancestors
54
+ * are expanded).
55
+ *
56
+ * Uses iterative DFS, skipping collapsed subtrees.
57
+ */
58
+ getVisibleIds(expandedIds: ReadonlySet<string>): string[];
59
+ /**
60
+ * Check if a node is a descendant of another node.
61
+ */
62
+ isDescendantOf(nodeId: string, ancestorId: string): boolean;
63
+ /**
64
+ * Insert dynamically-loaded children under a parent node.
65
+ * Returns a new TreeNodeMap (immutable operation).
66
+ *
67
+ * Rebuilds the full tree from the current map state (not the original
68
+ * input data), so successive calls for different parents are safe.
69
+ */
70
+ withChildren(parentId: string, children: TreeNode<T>[]): TreeNodeMap<T>;
71
+ private buildFromData;
72
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * A single node in the tree. Generic over the user's data shape.
3
+ * The `id` field MUST be unique across the entire tree.
4
+ */
5
+ export type TreeNode<T = Record<string, unknown>> = {
6
+ /** Child nodes. Undefined or empty array means leaf node. */
7
+ readonly children?: TreeNode<T>[];
8
+ /** Arbitrary user data attached to this node. */
9
+ readonly data?: T;
10
+ /** Unique identifier for this node. Used as the key for all lookups. */
11
+ readonly id: string;
12
+ /**
13
+ * Explicitly marks this node as a parent that can have children loaded
14
+ * asynchronously via `loadChildren`. When true, the node shows an expand
15
+ * indicator even if `children` is empty or undefined, and expanding it
16
+ * triggers the `loadChildren` callback.
17
+ */
18
+ readonly isParent?: boolean;
19
+ /** Display label. Used by the default renderer. */
20
+ readonly label: string;
21
+ };
22
+ /**
23
+ * For async/lazy loading: a function that resolves children on demand.
24
+ */
25
+ export type AsyncChildrenFunction<T = Record<string, unknown>> = (node: TreeNode<T>) => Promise<TreeNode<T>[]>;
26
+ /**
27
+ * State passed to custom renderers and theme functions.
28
+ */
29
+ export type TreeNodeState = {
30
+ /** Depth of this node in the tree (root = 0). */
31
+ readonly depth: number;
32
+ /** Whether this node has children (or a lazy loader). */
33
+ readonly hasChildren: boolean;
34
+ /** Whether this node is expanded (children visible). */
35
+ readonly isExpanded: boolean;
36
+ /** Whether this node is currently focused (cursor is on it). */
37
+ readonly isFocused: boolean;
38
+ /** Whether children are currently loading (async mode). */
39
+ readonly isLoading: boolean;
40
+ /** Whether this node is selected (in select/multi-select mode). */
41
+ readonly isSelected: boolean;
42
+ };
43
+ /**
44
+ * Props received by a custom node renderer.
45
+ */
46
+ export type TreeNodeRendererProps<T = Record<string, unknown>> = {
47
+ /** The tree node data. */
48
+ readonly node: TreeNode<T>;
49
+ /** Current state of this node. */
50
+ readonly state: TreeNodeState;
51
+ };
52
+ /**
53
+ * Selection mode for the tree view.
54
+ */
55
+ export type SelectionMode = "multiple" | "none" | "single";