@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,63 @@
1
+ import Yoga from 'yoga-layout';
2
+
3
+ const calculateScrollDimensions = (node) => {
4
+ const { yogaNode } = node;
5
+ if (!yogaNode) {
6
+ return { scrollHeight: 0, scrollWidth: 0 };
7
+ }
8
+ const top = yogaNode.getComputedBorder(Yoga.EDGE_TOP);
9
+ const left = yogaNode.getComputedBorder(Yoga.EDGE_LEFT);
10
+ let maxBottom = top;
11
+ let maxRight = yogaNode.getComputedPadding(Yoga.EDGE_LEFT);
12
+ for (let index = 0; index < yogaNode.getChildCount(); index++) {
13
+ const child = yogaNode.getChild(index);
14
+ const childBottom = child.getComputedTop() + child.getComputedHeight() + child.getComputedMargin(Yoga.EDGE_BOTTOM);
15
+ if (childBottom > maxBottom) {
16
+ maxBottom = childBottom;
17
+ }
18
+ const childRight = child.getComputedLeft() + child.getComputedWidth() + child.getComputedMargin(Yoga.EDGE_RIGHT);
19
+ if (childRight > maxRight) {
20
+ maxRight = childRight;
21
+ }
22
+ }
23
+ const scrollHeight = maxBottom - top + yogaNode.getComputedPadding(Yoga.EDGE_BOTTOM);
24
+ const scrollWidth = maxRight - left + yogaNode.getComputedPadding(Yoga.EDGE_RIGHT);
25
+ return { scrollHeight, scrollWidth };
26
+ };
27
+ const getScrollHeight = (node) => node.internal_scrollState?.scrollHeight ?? 0;
28
+ const getScrollWidth = (node) => node.internal_scrollState?.scrollWidth ?? 0;
29
+ const calculateScroll = (node) => {
30
+ const { yogaNode } = node;
31
+ if (!yogaNode) {
32
+ return;
33
+ }
34
+ const { scrollHeight: actualScrollHeight, scrollWidth } = calculateScrollDimensions(node);
35
+ let scrollHeight = actualScrollHeight;
36
+ const clientHeight = Math.max(0, yogaNode.getComputedHeight() - yogaNode.getComputedBorder(Yoga.EDGE_TOP) - yogaNode.getComputedBorder(Yoga.EDGE_BOTTOM));
37
+ if (node.style.stableScrollback && node.style.overflowToBackbuffer) {
38
+ const actualMaxScrollTop = Math.max(0, actualScrollHeight - clientHeight);
39
+ if (node.internal_isScrollbackDirty) {
40
+ node.internal_maxScrollTop = actualMaxScrollTop;
41
+ node.internal_isScrollbackDirty = false;
42
+ } else {
43
+ node.internal_maxScrollTop = Math.max(node.internal_maxScrollTop ?? 0, actualMaxScrollTop);
44
+ }
45
+ scrollHeight = Math.max(actualScrollHeight, (node.internal_maxScrollTop ?? 0) + clientHeight);
46
+ }
47
+ const scrollTop = Math.max(0, Math.min(node.style.scrollTop ?? 0, scrollHeight - clientHeight));
48
+ const clientWidth = Math.max(0, yogaNode.getComputedWidth() - yogaNode.getComputedBorder(Yoga.EDGE_LEFT) - yogaNode.getComputedBorder(Yoga.EDGE_RIGHT));
49
+ const scrollLeft = Math.max(0, Math.min(node.style.scrollLeft ?? 0, scrollWidth - clientWidth));
50
+ node.internal_scrollState = {
51
+ actualScrollHeight,
52
+ clientHeight,
53
+ clientWidth,
54
+ scrollHeight,
55
+ scrollLeft,
56
+ scrollTop,
57
+ scrollWidth
58
+ };
59
+ };
60
+ const getScrollTop = (node) => node.internal_scrollState?.scrollTop ?? 0;
61
+ const getScrollLeft = (node) => node.internal_scrollState?.scrollLeft ?? 0;
62
+
63
+ export { calculateScroll, getScrollHeight, getScrollLeft, getScrollTop, getScrollWidth };
@@ -0,0 +1,19 @@
1
+ const IS_ASCII_LETTER = /^[a-z]$/i;
2
+ const isControlCharacter = (input) => {
3
+ const codepoint = input.codePointAt(0);
4
+ return codepoint !== void 0 && (codepoint < 32 || codepoint === 127);
5
+ };
6
+ const isInsertableInput = (input, key) => {
7
+ if (input.length === 0 || isControlCharacter(input)) {
8
+ return false;
9
+ }
10
+ if (key.ctrl && key.meta) {
11
+ return !IS_ASCII_LETTER.test(input);
12
+ }
13
+ if (key.ctrl || key.meta) {
14
+ return false;
15
+ }
16
+ return true;
17
+ };
18
+
19
+ export { isInsertableInput as i };
@@ -0,0 +1,10 @@
1
+ const isIntersecting = ({
2
+ element,
3
+ mouse: { x, y }
4
+ }) => {
5
+ const isOutsideHorizontally = x < element.left || x >= element.left + element.width;
6
+ const isOutsideVertically = y < element.top || y >= element.top + element.height;
7
+ return !isOutsideHorizontally && !isOutsideVertically;
8
+ };
9
+
10
+ export { isIntersecting as default };
@@ -0,0 +1,36 @@
1
+ const BEL = "\x07";
2
+ const OSC = "\x1B]";
3
+ const SUPPORTED_TERMINALS = /* @__PURE__ */ new Set(["Alacritty", "contour", "foot", "Ghostty", "iTerm2", "iTerm.app", "kitty", "rio", "WezTerm"]);
4
+ const isOsc52Supported = () => {
5
+ const termProgram = process.env["TERM_PROGRAM"] ?? "";
6
+ if (SUPPORTED_TERMINALS.has(termProgram)) {
7
+ return true;
8
+ }
9
+ const term = process.env["TERM"] ?? "";
10
+ if (term.startsWith("xterm")) {
11
+ return true;
12
+ }
13
+ if (process.env["WT_SESSION"]) {
14
+ return true;
15
+ }
16
+ if (process.env["TMUX"]) {
17
+ return true;
18
+ }
19
+ if (term.startsWith("screen")) {
20
+ return true;
21
+ }
22
+ return false;
23
+ };
24
+ const VALID_TARGETS = /* @__PURE__ */ new Set(["c", "p", "s"]);
25
+ const writeOsc52 = (stream, text, target = "c") => {
26
+ if (!VALID_TARGETS.has(target)) {
27
+ throw new Error(`Invalid clipboard target: ${target}`);
28
+ }
29
+ const encoded = Buffer.from(text, "utf8").toString("base64");
30
+ stream.write(`${OSC}52;${target};${encoded}${BEL}`);
31
+ };
32
+ const clearOsc52 = (stream, target = "c") => {
33
+ stream.write(`${OSC}52;${target};${BEL}`);
34
+ };
35
+
36
+ export { clearOsc52, isOsc52Supported, writeOsc52 };
@@ -0,0 +1,93 @@
1
+ const BEL = "\x07";
2
+ const OSC = "\x1B]";
3
+ const parseOscColorResponse = (response) => {
4
+ const match = /rgb:([\da-f]{2,4})\/([\da-f]{2,4})\/([\da-f]{2,4})/i.exec(response);
5
+ if (!match) {
6
+ return null;
7
+ }
8
+ const toHex = (value) => {
9
+ if (value.length <= 2) {
10
+ return value.padStart(2, "0");
11
+ }
12
+ return value.slice(0, 2);
13
+ };
14
+ return `#${toHex(match[1])}${toHex(match[2])}${toHex(match[3])}`;
15
+ };
16
+ const isTerminalPaletteQuerySupported = () => {
17
+ const termProgram = process.env["TERM_PROGRAM"] ?? "";
18
+ const supported = /* @__PURE__ */ new Set(["Alacritty", "contour", "foot", "Ghostty", "iTerm2", "iTerm.app", "kitty", "rio", "WezTerm"]);
19
+ if (supported.has(termProgram)) {
20
+ return true;
21
+ }
22
+ const term = process.env["TERM"] ?? "";
23
+ return term.startsWith("xterm") || Boolean(process.env["WT_SESSION"]);
24
+ };
25
+ const MAX_RESPONSE_BYTES = 256;
26
+ const queryOsc = (stdin, stdout, sequence, timeout = 500) => new Promise((resolve) => {
27
+ let buffer = "";
28
+ let timer;
29
+ const cleanup = () => {
30
+ if (timer) {
31
+ clearTimeout(timer);
32
+ }
33
+ stdin.removeListener("data", onData);
34
+ };
35
+ const onData = (data) => {
36
+ buffer += data.toString();
37
+ if (buffer.length > MAX_RESPONSE_BYTES) {
38
+ cleanup();
39
+ resolve(null);
40
+ return;
41
+ }
42
+ if (buffer.includes(BEL) || buffer.includes("\x1B\\")) {
43
+ cleanup();
44
+ resolve(buffer);
45
+ }
46
+ };
47
+ timer = setTimeout(() => {
48
+ cleanup();
49
+ resolve(null);
50
+ }, timeout);
51
+ stdin.on("data", onData);
52
+ stdout.write(sequence);
53
+ });
54
+ const queryTerminalPalette = async (stdin, stdout, timeout = 500) => {
55
+ const result = {};
56
+ const fgResponse = await queryOsc(stdin, stdout, `${OSC}10;?${BEL}`, timeout);
57
+ if (fgResponse) {
58
+ const fg = parseOscColorResponse(fgResponse);
59
+ if (fg) {
60
+ result.foreground = fg;
61
+ }
62
+ }
63
+ const bgResponse = await queryOsc(stdin, stdout, `${OSC}11;?${BEL}`, timeout);
64
+ if (bgResponse) {
65
+ const bg = parseOscColorResponse(bgResponse);
66
+ if (bg) {
67
+ result.background = bg;
68
+ }
69
+ }
70
+ const cursorResponse = await queryOsc(stdin, stdout, `${OSC}12;?${BEL}`, timeout);
71
+ if (cursorResponse) {
72
+ const cursor = parseOscColorResponse(cursorResponse);
73
+ if (cursor) {
74
+ result.cursor = cursor;
75
+ }
76
+ }
77
+ const colors = [];
78
+ for (let index = 0; index < 16; index++) {
79
+ const colorResponse = await queryOsc(stdin, stdout, `${OSC}4;${index};?${BEL}`, timeout);
80
+ if (colorResponse) {
81
+ const color = parseOscColorResponse(colorResponse);
82
+ colors.push(color ?? "");
83
+ } else {
84
+ colors.push("");
85
+ }
86
+ }
87
+ if (colors.some((c) => c.length > 0)) {
88
+ result.colors = colors;
89
+ }
90
+ return result;
91
+ };
92
+
93
+ export { isTerminalPaletteQuerySupported, queryTerminalPalette };
@@ -0,0 +1,26 @@
1
+ const kittyFlags = {
2
+ disambiguateEscapeCodes: 1,
3
+ reportAllKeysAsEscapeCodes: 8,
4
+ reportAlternateKeys: 4,
5
+ reportAssociatedText: 16,
6
+ reportEventTypes: 2
7
+ };
8
+ function resolveFlags(flags) {
9
+ let result = 0;
10
+ for (const flag of flags) {
11
+ result |= kittyFlags[flag];
12
+ }
13
+ return result;
14
+ }
15
+ const kittyModifiers = {
16
+ alt: 2,
17
+ capsLock: 64,
18
+ ctrl: 4,
19
+ hyper: 16,
20
+ meta: 32,
21
+ numLock: 128,
22
+ shift: 1,
23
+ super: 8
24
+ };
25
+
26
+ export { kittyFlags, kittyModifiers, resolveFlags };
@@ -0,0 +1,396 @@
1
+ import Yoga from 'yoga-layout';
2
+ import { getScrollTop, getScrollLeft } from './getScrollHeight-BubfU_df.js';
3
+ import squashTextNodes from './squashTextNodesWithMap-iqm6OMMT.js';
4
+
5
+ const getAbsoluteBorderPosition = (node) => {
6
+ let currentNode = node;
7
+ let x = 0;
8
+ let y = 0;
9
+ while (currentNode?.parentNode) {
10
+ if (!currentNode.yogaNode) {
11
+ return void 0;
12
+ }
13
+ x += currentNode.yogaNode.getComputedLeft();
14
+ y += currentNode.yogaNode.getComputedTop();
15
+ currentNode = currentNode.parentNode;
16
+ }
17
+ return { x, y };
18
+ };
19
+ const getAbsolutePosition = (node) => getAbsoluteBorderPosition(node);
20
+ const getAbsoluteContentPosition = (node) => {
21
+ const borderPosition = getAbsoluteBorderPosition(node);
22
+ if (!borderPosition || !node.yogaNode) {
23
+ return void 0;
24
+ }
25
+ return {
26
+ x: borderPosition.x + node.yogaNode.getComputedBorder(Yoga.EDGE_LEFT) + node.yogaNode.getComputedPadding(Yoga.EDGE_LEFT),
27
+ y: borderPosition.y + node.yogaNode.getComputedBorder(Yoga.EDGE_TOP) + node.yogaNode.getComputedPadding(Yoga.EDGE_TOP)
28
+ };
29
+ };
30
+ const processLayout = (node, callbacks) => {
31
+ const { initialState, onNewline, onSpace, onText } = callbacks;
32
+ if (node.nodeName !== "ink-box" && node.nodeName !== "ink-root" && node.nodeName !== "ink-text" && node.nodeName !== "ink-virtual-text" || !node.yogaNode) {
33
+ return { lineBottom: 0, state: initialState() };
34
+ }
35
+ const { fragments } = collectSortedFragments(node);
36
+ const state = initialState();
37
+ state.currentX = 0;
38
+ state.lineBottom = 0;
39
+ state.yieldedContent = false;
40
+ for (const fragment of fragments) {
41
+ if (fragment.y >= state.lineBottom) {
42
+ const gap = fragment.y - state.lineBottom;
43
+ const newlines = state.yieldedContent ? 1 + gap : gap;
44
+ if (newlines > 0) {
45
+ onNewline(newlines, state);
46
+ state.currentX = 0;
47
+ }
48
+ state.lineBottom = fragment.y;
49
+ }
50
+ if (fragment.x > state.currentX) {
51
+ const spaces = fragment.x - state.currentX;
52
+ onSpace(spaces, state);
53
+ state.currentX = fragment.x;
54
+ }
55
+ if (fragment.text.length > 0) {
56
+ state.yieldedContent = true;
57
+ onText(fragment, state);
58
+ }
59
+ const newlinesInText = (fragment.text.match(/\n/g) ?? []).length;
60
+ if (newlinesInText > 0) {
61
+ const lastNewlineIndex = fragment.text.lastIndexOf("\n");
62
+ state.currentX = fragment.text.length - lastNewlineIndex - 1;
63
+ } else {
64
+ state.currentX += fragment.text.length;
65
+ }
66
+ state.lineBottom = Math.max(state.lineBottom, fragment.y + fragment.height);
67
+ }
68
+ return { lineBottom: state.lineBottom, state };
69
+ };
70
+
71
+ const measureElement = (node) => {
72
+ const position = getAbsolutePosition(node);
73
+ return {
74
+ height: node.yogaNode?.getComputedHeight() ?? 0,
75
+ width: node.yogaNode?.getComputedWidth() ?? 0,
76
+ x: position?.x ?? 0,
77
+ y: position?.y ?? 0
78
+ };
79
+ };
80
+ const getInnerWidth = (node) => {
81
+ const { yogaNode } = node;
82
+ if (!yogaNode) {
83
+ return 0;
84
+ }
85
+ const width = yogaNode.getComputedWidth() ?? 0;
86
+ const borderLeft = yogaNode.getComputedBorder(Yoga.EDGE_LEFT);
87
+ const borderRight = yogaNode.getComputedBorder(Yoga.EDGE_RIGHT);
88
+ return width - borderLeft - borderRight;
89
+ };
90
+ const getInnerHeight = (node) => {
91
+ const { yogaNode } = node;
92
+ if (!yogaNode) {
93
+ return 0;
94
+ }
95
+ const height = yogaNode.getComputedHeight() ?? 0;
96
+ const borderTop = yogaNode.getComputedBorder(Yoga.EDGE_TOP);
97
+ const borderBottom = yogaNode.getComputedBorder(Yoga.EDGE_BOTTOM);
98
+ return height - borderTop - borderBottom;
99
+ };
100
+ const getBoundingBox = (node) => {
101
+ const { yogaNode } = node;
102
+ if (!yogaNode) {
103
+ return { height: 0, width: 0, x: 0, y: 0 };
104
+ }
105
+ const width = yogaNode.getComputedWidth() ?? 0;
106
+ const height = yogaNode.getComputedHeight() ?? 0;
107
+ let x = yogaNode.getComputedLeft();
108
+ let y = yogaNode.getComputedTop();
109
+ let parent = node.parentNode;
110
+ while (parent?.yogaNode) {
111
+ x += parent.yogaNode.getComputedLeft();
112
+ y += parent.yogaNode.getComputedTop();
113
+ if (parent.nodeName === "ink-box") {
114
+ const overflow = parent.style.overflow ?? "visible";
115
+ const overflowX = parent.style.overflowX ?? overflow;
116
+ const overflowY = parent.style.overflowY ?? overflow;
117
+ if (overflowY === "scroll") {
118
+ y -= getScrollTop(parent);
119
+ }
120
+ if (overflowX === "scroll") {
121
+ x -= getScrollLeft(parent);
122
+ }
123
+ }
124
+ parent = parent.parentNode;
125
+ }
126
+ return { height, width, x, y };
127
+ };
128
+ const getAddedScrollHeight = (node) => {
129
+ const scrollHeight = node.internal_scrollState?.scrollHeight ?? 0;
130
+ const actualScrollHeight = node.internal_scrollState?.actualScrollHeight ?? 0;
131
+ return Math.max(0, scrollHeight - actualScrollHeight);
132
+ };
133
+ const calculateScrollbarThumb = (options) => {
134
+ const { axis, clientDimension, scrollbarDimension, scrollDimension, scrollPosition } = options;
135
+ const scrollbarDimensionHalves = scrollbarDimension * 2;
136
+ const thumbDimensionHalves = Math.max(axis === "vertical" ? 2 : 1, Math.round(clientDimension / scrollDimension * scrollbarDimensionHalves));
137
+ const maxScrollPosition = scrollDimension - clientDimension;
138
+ const maxThumbPosition = scrollbarDimensionHalves - thumbDimensionHalves;
139
+ const thumbPosition = maxScrollPosition > 0 ? Math.round(scrollPosition / maxScrollPosition * maxThumbPosition) : 0;
140
+ const thumbStartHalf = thumbPosition;
141
+ const thumbEndHalf = thumbPosition + thumbDimensionHalves;
142
+ const startIndex = Math.floor(thumbStartHalf / 2);
143
+ const endIndex = Math.min(scrollbarDimension, Math.ceil(thumbEndHalf / 2));
144
+ return { endIndex, startIndex, thumbEndHalf, thumbStartHalf };
145
+ };
146
+ const calculateScrollbarLayout = (options) => {
147
+ const { axis, clientDimension, hasOppositeScrollbar, height, marginBottom, marginRight, scrollDimension, scrollPosition, width, x, y } = options;
148
+ if (scrollDimension <= clientDimension) {
149
+ return void 0;
150
+ }
151
+ if (axis === "vertical") {
152
+ const { endIndex: endIndex2, startIndex: startIndex2, thumbEndHalf: thumbEndHalf2, thumbStartHalf: thumbStartHalf2 } = calculateScrollbarThumb({
153
+ axis,
154
+ clientDimension,
155
+ scrollbarDimension: height,
156
+ scrollDimension,
157
+ scrollPosition
158
+ });
159
+ const scrollbarX = x + width - 1 - marginRight;
160
+ return {
161
+ height,
162
+ thumb: {
163
+ end: endIndex2,
164
+ endHalf: thumbEndHalf2,
165
+ height: endIndex2 - startIndex2,
166
+ start: startIndex2,
167
+ startHalf: thumbStartHalf2,
168
+ width: 1,
169
+ x: scrollbarX,
170
+ y: y + startIndex2
171
+ },
172
+ width: 1,
173
+ x: scrollbarX,
174
+ y
175
+ };
176
+ }
177
+ const scrollbarWidth = width - (hasOppositeScrollbar ? 1 : 0);
178
+ const { endIndex, startIndex, thumbEndHalf, thumbStartHalf } = calculateScrollbarThumb({
179
+ axis,
180
+ clientDimension,
181
+ scrollbarDimension: scrollbarWidth,
182
+ scrollDimension,
183
+ scrollPosition
184
+ });
185
+ const scrollbarY = y + height - 1 - marginBottom;
186
+ return {
187
+ height: 1,
188
+ thumb: {
189
+ end: endIndex,
190
+ endHalf: thumbEndHalf,
191
+ height: 1,
192
+ start: startIndex,
193
+ startHalf: thumbStartHalf,
194
+ width: endIndex - startIndex,
195
+ x: x + startIndex,
196
+ y: scrollbarY
197
+ },
198
+ width: scrollbarWidth,
199
+ x,
200
+ y: scrollbarY
201
+ };
202
+ };
203
+ const getVerticalScrollbarBoundingBox = (node, offset) => {
204
+ const { yogaNode } = node;
205
+ if (!yogaNode) {
206
+ return void 0;
207
+ }
208
+ const overflow = node.style.overflow ?? "visible";
209
+ const overflowY = node.style.overflowY ?? overflow;
210
+ if (overflowY !== "scroll") {
211
+ return void 0;
212
+ }
213
+ const clientHeight = node.internal_scrollState?.clientHeight ?? 0;
214
+ const scrollHeight = node.internal_scrollState?.scrollHeight ?? 0;
215
+ if (scrollHeight <= clientHeight) {
216
+ return void 0;
217
+ }
218
+ const { x, y } = offset ?? getBoundingBox(node);
219
+ const scrollbarHeight = yogaNode.getComputedHeight() - yogaNode.getComputedBorder(Yoga.EDGE_TOP) - yogaNode.getComputedBorder(Yoga.EDGE_BOTTOM);
220
+ return calculateScrollbarLayout({
221
+ axis: "vertical",
222
+ clientDimension: clientHeight,
223
+ hasOppositeScrollbar: false,
224
+ height: scrollbarHeight,
225
+ marginBottom: yogaNode.getComputedBorder(Yoga.EDGE_BOTTOM),
226
+ marginRight: yogaNode.getComputedBorder(Yoga.EDGE_RIGHT),
227
+ scrollDimension: scrollHeight,
228
+ scrollPosition: node.internal_scrollState?.scrollTop ?? 0,
229
+ width: yogaNode.getComputedWidth() - yogaNode.getComputedBorder(Yoga.EDGE_LEFT),
230
+ x: x + yogaNode.getComputedBorder(Yoga.EDGE_LEFT),
231
+ y: y + yogaNode.getComputedBorder(Yoga.EDGE_TOP)
232
+ });
233
+ };
234
+ const getHorizontalScrollbarBoundingBox = (node, offset) => {
235
+ const { yogaNode } = node;
236
+ if (!yogaNode) {
237
+ return void 0;
238
+ }
239
+ const overflow = node.style.overflow ?? "visible";
240
+ const overflowX = node.style.overflowX ?? overflow;
241
+ if (overflowX !== "scroll") {
242
+ return void 0;
243
+ }
244
+ const clientWidth = node.internal_scrollState?.clientWidth ?? 0;
245
+ const scrollWidth = node.internal_scrollState?.scrollWidth ?? 0;
246
+ if (scrollWidth <= clientWidth) {
247
+ return void 0;
248
+ }
249
+ const { x, y } = offset ?? getBoundingBox(node);
250
+ const overflowY = node.style.overflowY ?? overflow;
251
+ const clientHeight = node.internal_scrollState?.clientHeight ?? 0;
252
+ const scrollHeight = node.internal_scrollState?.scrollHeight ?? 0;
253
+ const isVerticalScrollbarVisible = overflowY === "scroll" && scrollHeight > clientHeight;
254
+ return calculateScrollbarLayout({
255
+ axis: "horizontal",
256
+ clientDimension: clientWidth,
257
+ hasOppositeScrollbar: isVerticalScrollbarVisible,
258
+ height: yogaNode.getComputedHeight() - yogaNode.getComputedBorder(Yoga.EDGE_TOP),
259
+ marginBottom: yogaNode.getComputedBorder(Yoga.EDGE_BOTTOM),
260
+ marginRight: yogaNode.getComputedBorder(Yoga.EDGE_RIGHT),
261
+ scrollDimension: scrollWidth,
262
+ scrollPosition: node.internal_scrollState?.scrollLeft ?? 0,
263
+ width: yogaNode.getComputedWidth() - yogaNode.getComputedBorder(Yoga.EDGE_LEFT) - yogaNode.getComputedBorder(Yoga.EDGE_RIGHT),
264
+ x: x + yogaNode.getComputedBorder(Yoga.EDGE_LEFT),
265
+ y: y + yogaNode.getComputedBorder(Yoga.EDGE_TOP)
266
+ });
267
+ };
268
+ const getRelativeTop = (node, ancestor) => {
269
+ if (!node.yogaNode || node === ancestor) {
270
+ return 0;
271
+ }
272
+ let top = node.yogaNode.getComputedTop();
273
+ let parent = node.parentNode;
274
+ while (parent && parent !== ancestor) {
275
+ if (parent.yogaNode) {
276
+ top += parent.yogaNode.getComputedTop();
277
+ }
278
+ parent = parent.parentNode;
279
+ }
280
+ if (ancestor !== void 0 && parent !== ancestor) {
281
+ return void 0;
282
+ }
283
+ return top;
284
+ };
285
+ const getRelativeLeft = (node, ancestor) => {
286
+ if (!node.yogaNode || node === ancestor) {
287
+ return 0;
288
+ }
289
+ let left = node.yogaNode.getComputedLeft();
290
+ let parent = node.parentNode;
291
+ while (parent && parent !== ancestor) {
292
+ if (parent.yogaNode) {
293
+ left += parent.yogaNode.getComputedLeft();
294
+ }
295
+ parent = parent.parentNode;
296
+ }
297
+ if (ancestor !== void 0 && parent !== ancestor) {
298
+ return void 0;
299
+ }
300
+ return left;
301
+ };
302
+ const getText = (node) => {
303
+ if (node.nodeName === "#text") {
304
+ return node.nodeValue;
305
+ }
306
+ if (node.nodeName === "ink-text" || node.nodeName === "ink-virtual-text") {
307
+ return squashTextNodes(node);
308
+ }
309
+ return "";
310
+ };
311
+ const collectSortedFragments = (node) => {
312
+ const fragments = [];
313
+ const collect = (currentNode, coords, selectable) => {
314
+ const { visualX, visualY, x, y } = coords;
315
+ let v2 = 0;
316
+ let h2 = 0;
317
+ let currentSelectable = selectable;
318
+ const { userSelect } = currentNode.style;
319
+ if (userSelect === "none") {
320
+ currentSelectable = false;
321
+ } else if (userSelect === "text" || userSelect === "all") {
322
+ currentSelectable = true;
323
+ }
324
+ if (currentNode.nodeName === "ink-text" || currentNode.nodeName === "ink-virtual-text") {
325
+ if (currentSelectable) {
326
+ const text = getText(currentNode);
327
+ fragments.push({
328
+ height: currentNode.yogaNode?.getComputedHeight() ?? 0,
329
+ node: currentNode,
330
+ text,
331
+ visualX,
332
+ visualY,
333
+ width: currentNode.yogaNode?.getComputedWidth() ?? 0,
334
+ x,
335
+ y
336
+ });
337
+ return { h: 0, hasContent: true, v: 0 };
338
+ }
339
+ return {
340
+ h: currentNode.yogaNode?.getComputedWidth() ?? 0,
341
+ hasContent: false,
342
+ v: currentNode.yogaNode?.getComputedHeight() ?? 0
343
+ };
344
+ }
345
+ if (currentNode.nodeName === "ink-box" || currentNode.nodeName === "ink-root") {
346
+ if (!currentNode.yogaNode || currentNode.yogaNode.getDisplay() === Yoga.DISPLAY_NONE) {
347
+ return { h: 0, hasContent: false, v: 0 };
348
+ }
349
+ const borderTop = currentNode.yogaNode.getComputedBorder(Yoga.EDGE_TOP);
350
+ const borderBottom = currentNode.yogaNode.getComputedBorder(Yoga.EDGE_BOTTOM);
351
+ const borderLeft = currentNode.yogaNode.getComputedBorder(Yoga.EDGE_LEFT);
352
+ const borderRight = currentNode.yogaNode.getComputedBorder(Yoga.EDGE_RIGHT);
353
+ v2 += borderTop + borderBottom;
354
+ h2 += borderLeft + borderRight;
355
+ const flexDirection = currentNode.yogaNode.getFlexDirection();
356
+ const isColumn = flexDirection === Yoga.FLEX_DIRECTION_COLUMN || flexDirection === Yoga.FLEX_DIRECTION_COLUMN_REVERSE;
357
+ let siblingRemovedH = 0;
358
+ let siblingRemovedV = 0;
359
+ let childHasContent = false;
360
+ for (const child of currentNode.childNodes) {
361
+ if (child.yogaNode) {
362
+ const childX = x + child.yogaNode.getComputedLeft() - borderLeft - siblingRemovedH;
363
+ const childY = y + child.yogaNode.getComputedTop() - borderTop - siblingRemovedV;
364
+ const childVisualX = visualX + child.yogaNode.getComputedLeft();
365
+ const childVisualY = visualY + child.yogaNode.getComputedTop();
366
+ const res = collect(child, { visualX: childVisualX, visualY: childVisualY, x: childX, y: childY }, currentSelectable);
367
+ if (res.hasContent) {
368
+ childHasContent = true;
369
+ }
370
+ if (isColumn) {
371
+ siblingRemovedV += res.v;
372
+ } else {
373
+ siblingRemovedH += res.h;
374
+ }
375
+ }
376
+ }
377
+ if (isColumn) {
378
+ v2 += siblingRemovedV;
379
+ } else {
380
+ h2 += siblingRemovedH;
381
+ }
382
+ return { h: h2, hasContent: childHasContent, v: v2 };
383
+ }
384
+ return { h: 0, hasContent: false, v: 0 };
385
+ };
386
+ const { h, v } = collect(node, { visualX: 0, visualY: 0, x: 0, y: 0 }, true);
387
+ fragments.sort((a, b) => {
388
+ if (a.y !== b.y) {
389
+ return a.y - b.y;
390
+ }
391
+ return a.x - b.x;
392
+ });
393
+ return { fragments, removedHorizontal: h, removedVertical: v };
394
+ };
395
+
396
+ export { calculateScrollbarThumb as a, collectSortedFragments as b, calculateScrollbarLayout as c, getBoundingBox as d, getHorizontalScrollbarBoundingBox as e, getInnerHeight as f, getAddedScrollHeight as g, getInnerWidth as h, getRelativeLeft as i, getRelativeTop as j, getText as k, getVerticalScrollbarBoundingBox as l, measureElement as m, getAbsoluteContentPosition as n, getAbsolutePosition as o, processLayout as p };