@visulima/tui 1.0.0-alpha.1 → 1.0.0-alpha.10

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 (542) hide show
  1. package/CHANGELOG.md +137 -0
  2. package/LICENSE.md +203 -9
  3. package/README.md +6 -6
  4. package/dist/core/index.d.ts +58 -5
  5. package/dist/core/index.js +1 -5
  6. package/dist/ink/index.d.ts +6574 -159
  7. package/dist/ink/index.js +1 -100
  8. package/dist/packem_chunks/devtools.js +3 -26
  9. package/dist/packem_shared/Accordion-BXsqchV-.js +1 -0
  10. package/dist/packem_shared/Alert-BhYVMHtR.js +1 -0
  11. package/dist/packem_shared/AnimatePresence-Eu7Z8KHc.js +1 -0
  12. package/dist/packem_shared/ApprovalPrompt-BSn0FT1g.js +1 -0
  13. package/dist/packem_shared/AreaChart-Chy-frI7.js +1 -0
  14. package/dist/packem_shared/Badge-B8WPyRsK.js +1 -0
  15. package/dist/packem_shared/BarChart-rpZtlMcF.js +1 -0
  16. package/dist/packem_shared/BigText-CRpwUzrt.js +1 -0
  17. package/dist/packem_shared/BlinkDot-BvnRuWP8.js +1 -0
  18. package/dist/packem_shared/Box-BwqSvWuq.js +1 -0
  19. package/dist/packem_shared/Breadcrumb-D0hClbRV.js +1 -0
  20. package/dist/packem_shared/Button-B89Yvbc6.js +1 -0
  21. package/dist/packem_shared/COLOR_BLINDNESS_SIMULATION-DqErf7XX.js +1 -0
  22. package/dist/packem_shared/Calendar-Dmflvm2S.js +1 -0
  23. package/dist/packem_shared/Canvas-CKg6WV47.js +1 -0
  24. package/dist/packem_shared/Card-B_9fXdtU.js +1 -0
  25. package/dist/packem_shared/Cell-BrXn3jxY.js +1 -0
  26. package/dist/packem_shared/Checkbox-BN71eCWU.js +1 -0
  27. package/dist/packem_shared/Code-HhevcyiH.js +2 -0
  28. package/dist/packem_shared/Collapsible-u6uf_FdV.js +1 -0
  29. package/dist/packem_shared/CommandBlock-B-nslpCv.js +4 -0
  30. package/dist/packem_shared/CommandPalette-CEFdaURo.js +1 -0
  31. package/dist/packem_shared/ConfirmDialog-5Jje_Xpu.js +1 -0
  32. package/dist/packem_shared/ConfirmInput-D44Mb9oo.js +1 -0
  33. package/dist/packem_shared/ConsoleOverlay-CM3APfgP.js +1 -0
  34. package/dist/packem_shared/ContentSwitcher-Dm5BkrCt.js +1 -0
  35. package/dist/packem_shared/ControlledScrollView-DI8KZOQB.js +1 -0
  36. package/dist/packem_shared/Cursor-BoLFIMol.js +1 -0
  37. package/dist/packem_shared/DatePicker-CnSrFFAE.js +1 -0
  38. package/dist/packem_shared/DefinitionList-v8RDuF_R.js +1 -0
  39. package/dist/packem_shared/DevTools-O8EbCfHa.js +1 -0
  40. package/dist/packem_shared/Dialog-CTaL8pn0.js +1 -0
  41. package/dist/packem_shared/DiffView-BUIFqUB0.js +1 -0
  42. package/dist/packem_shared/Divider-C47bKmqu.js +1 -0
  43. package/dist/packem_shared/FilePicker-CUo7R5Qb.js +1 -0
  44. package/dist/packem_shared/FocusContext-Xy0cwJpO.js +1 -0
  45. package/dist/packem_shared/FormField-af3aUpRL.js +1 -0
  46. package/dist/packem_shared/Fullscreen-CuJ8y0s0.js +1 -0
  47. package/dist/packem_shared/Gauge-Dz-usH__.js +1 -0
  48. package/dist/packem_shared/Gradient-DYNc0GZA.js +1 -0
  49. package/dist/packem_shared/Heading-mwEYza3Y.js +1 -0
  50. package/dist/packem_shared/Heatmap-ChL97U1-.js +1 -0
  51. package/dist/packem_shared/Help-Zcelyw_U.js +1 -0
  52. package/dist/packem_shared/Histogram-FIf2F83d.js +1 -0
  53. package/dist/packem_shared/IMECompositionBuffer-C89PhiOu.js +1 -0
  54. package/dist/packem_shared/InputParser-rZKjY_7Y.js +2 -0
  55. package/dist/packem_shared/KEY-Bk8B-3h_.js +1 -0
  56. package/dist/packem_shared/Kbd-DpkPp4jB.js +1 -0
  57. package/dist/packem_shared/LayoutNode-rxblE317.js +1 -0
  58. package/dist/packem_shared/LineChart-BXE_girm.js +1 -0
  59. package/dist/packem_shared/Link-i2o2EG4-.js +1 -0
  60. package/dist/packem_shared/LoadingIndicator-TC1Fjwyt.js +1 -0
  61. package/dist/packem_shared/Markdown-R1XqK63D.js +1 -0
  62. package/dist/packem_shared/MaskedInput-J01phOZs.js +1 -0
  63. package/dist/packem_shared/Menu-CfrH4ymk.js +1 -0
  64. package/dist/packem_shared/MessageBubble-BmBBU2Rm.js +1 -0
  65. package/dist/packem_shared/ModelBadge-D3wrXncu.js +1 -0
  66. package/dist/packem_shared/MouseProvider-pjza-lpc.js +1 -0
  67. package/dist/packem_shared/MultiSelect-Dqmn-bVo.js +1 -0
  68. package/dist/packem_shared/NAMED_COLORS-B9fJsYdg.js +1 -0
  69. package/dist/packem_shared/Newline-BSG4iUqp.js +2 -0
  70. package/dist/packem_shared/OperationTree-DksxjMIV.js +1 -0
  71. package/dist/packem_shared/OptionList-CNx7r9yN.js +1 -0
  72. package/dist/packem_shared/OrderedList-BeDy035w.js +1 -0
  73. package/dist/packem_shared/Paginator-B56s6bhS.js +1 -0
  74. package/dist/packem_shared/Paragraph-BqJlH0R-.js +1 -0
  75. package/dist/packem_shared/Placeholder-GMpHRGC8.js +1 -0
  76. package/dist/packem_shared/ProgressBar-Bj3fmORR.js +1 -0
  77. package/dist/packem_shared/RadioGroup-Br8BeEwS.js +1 -0
  78. package/dist/packem_shared/Renderer-DJXooAsp.js +1 -0
  79. package/dist/packem_shared/ResizeObserverEntry-Dq0dk8Kq.js +1 -0
  80. package/dist/packem_shared/ScatterPlot-OhfYco5l.js +1 -0
  81. package/dist/packem_shared/ScrollBar-Da5Y3z7N.js +1 -0
  82. package/dist/packem_shared/ScrollBarBox-Dz6F-Eat.js +1 -0
  83. package/dist/packem_shared/ScrollList-DiVGyEjv.js +1 -0
  84. package/dist/packem_shared/ScrollView-BojONotI.js +1 -0
  85. package/dist/packem_shared/SearchInput-BoPTRbhV.js +1 -0
  86. package/dist/packem_shared/SelectInput-CAJ7SCBq.js +1 -0
  87. package/dist/packem_shared/SelectInputIndicator-N1n8ULHs.js +1 -0
  88. package/dist/packem_shared/SelectInputItem-BEkbmobs.js +1 -0
  89. package/dist/packem_shared/ShimmerText-CuGQ2NDC.js +1 -0
  90. package/dist/packem_shared/Slider-Cg_tJpKa.js +1 -0
  91. package/dist/packem_shared/Spacer-eT3HOrXk.js +1 -0
  92. package/dist/packem_shared/Sparkline-T6_FPVET.js +1 -0
  93. package/dist/packem_shared/Spinner-B0-A50pu.js +1 -0
  94. package/dist/packem_shared/Static-DLynr5pn.js +1 -0
  95. package/dist/packem_shared/Static-jzLPaHJF.js +1 -0
  96. package/dist/packem_shared/StaticRender-BgD61E7x.js +1 -0
  97. package/dist/packem_shared/StatusLine-Ch4jjef1.js +1 -0
  98. package/dist/packem_shared/StatusMessage-B1qfKeMM.js +1 -0
  99. package/dist/packem_shared/Stepper-CNPAqxiU.js +1 -0
  100. package/dist/packem_shared/Stopwatch-CAx2EWwq.js +1 -0
  101. package/dist/packem_shared/StreamingText-BYOKSB2T.js +1 -0
  102. package/dist/packem_shared/Switch-DzSpKYu7.js +1 -0
  103. package/dist/packem_shared/Tab-BcXzSUdj.js +1 -0
  104. package/dist/packem_shared/Table-DJp1TLrR.js +1 -0
  105. package/dist/packem_shared/Tabs-D68z0SOt.js +1 -0
  106. package/dist/packem_shared/Tag-BvLHnYRn.js +1 -0
  107. package/dist/packem_shared/Text-mTAve9R2.js +1 -0
  108. package/dist/packem_shared/TextInput-C_gYQlnF.js +1 -0
  109. package/dist/packem_shared/Textarea-C2ET_oMb.js +2 -0
  110. package/dist/packem_shared/Timer-CI3aQX65.js +1 -0
  111. package/dist/packem_shared/Toast-Drvc8XfG.js +1 -0
  112. package/dist/packem_shared/Tooltip-C5UnQlLd.js +1 -0
  113. package/dist/packem_shared/Transform-fYmcdqRT.js +1 -0
  114. package/dist/packem_shared/Transition-CJDBKYUB.js +1 -0
  115. package/dist/packem_shared/TreeNodeMap-CspqSCpb.js +1 -0
  116. package/dist/packem_shared/TreeView-DjhacGJ5.js +1 -0
  117. package/dist/packem_shared/TuiApp-DrjI_i-R.js +1 -0
  118. package/dist/packem_shared/TuiContext-BoJvG3NN.js +3 -0
  119. package/dist/packem_shared/UnorderedList-BnfqexZs.js +1 -0
  120. package/dist/packem_shared/accessibility-context-DDyHTwmA.js +1 -0
  121. package/dist/packem_shared/animation-context-DW3p-vpk.js +1 -0
  122. package/dist/packem_shared/ansi-parser-B6uXaq65.js +1 -0
  123. package/dist/packem_shared/ansi-tokenizer-DqX9nJuk.js +1 -0
  124. package/dist/packem_shared/app-context-BVpKlG1z.js +1 -0
  125. package/dist/packem_shared/background-context-rjOaWFki.js +1 -0
  126. package/dist/packem_shared/boxes-DyY_LXCi.js +1 -0
  127. package/dist/packem_shared/braille-BBjIoaN0.js +1 -0
  128. package/dist/packem_shared/colorize-DbTZMrJO.js +1 -0
  129. package/dist/packem_shared/comparePoints-C85EsmNz.js +1 -0
  130. package/dist/packem_shared/controlled-scroll-view-CmrAEvJk.js +1 -0
  131. package/dist/packem_shared/createInlineLoop-DRNZ7jqH.js +2 -0
  132. package/dist/packem_shared/createLinkedScrollGroup-BMTJ7rAj.js +1 -0
  133. package/dist/packem_shared/createMemoryStorage-QVZNXbWz.js +2 -0
  134. package/dist/packem_shared/createScreen-CrLrxA6t.js +3 -0
  135. package/dist/packem_shared/cursor-context-CFviBqPX.js +1 -0
  136. package/dist/packem_shared/dom-4y__5fWB.js +1 -0
  137. package/dist/packem_shared/focus-context-CsT69klR.js +1 -0
  138. package/dist/packem_shared/format-time-C7Q-hQZq.js +1 -0
  139. package/dist/packem_shared/getPathToRoot-B2tKmx3i.js +1 -0
  140. package/dist/packem_shared/getScrollHeight-BTEY8ewu.js +1 -0
  141. package/dist/packem_shared/input-utils-fAxzSlNh.js +1 -0
  142. package/dist/packem_shared/input.d-Bfq7oc06.d.ts +90 -0
  143. package/dist/packem_shared/isIntersecting-B3KbKTmu.js +1 -0
  144. package/dist/packem_shared/isOsc52Supported-DKK7Uee6.js +1 -0
  145. package/dist/packem_shared/isTerminalPaletteQuerySupported-Dn2hFAZ_.js +1 -0
  146. package/dist/packem_shared/kittyFlags-C3rZLbcK.js +1 -0
  147. package/dist/packem_shared/line-chart-DrM8PwnI.js +1 -0
  148. package/dist/packem_shared/measure-element-DSp7YDus.js +2 -0
  149. package/dist/packem_shared/measure-text-DDjHT1jD.js +3 -0
  150. package/dist/packem_shared/measureElement-DA8WqFP_.js +1 -0
  151. package/dist/packem_shared/mouse-context-DaARgUu1.js +1 -0
  152. package/dist/packem_shared/parseSgrMouse-Ccj70ijb.js +1 -0
  153. package/dist/packem_shared/processLayout-DXDfFb_d.js +1 -0
  154. package/dist/packem_shared/reconciler-BuOP-TZ6.js +1 -0
  155. package/dist/packem_shared/reconciler-DSYCrIZs.js +1 -0
  156. package/dist/packem_shared/render-DDqtMAFN.js +1 -0
  157. package/dist/packem_shared/render-_r0K9K11.js +28 -0
  158. package/dist/packem_shared/render.d-BR3gA-N8.d.ts +1257 -0
  159. package/dist/packem_shared/renderToString-DeqOWRP8.js +4 -0
  160. package/dist/packem_shared/renderToString-IYYPyASm.js +2 -0
  161. package/dist/packem_shared/renderTreeToBuffer-DPkoCgP2.js +2 -0
  162. package/dist/packem_shared/renderer-D2p6av2X.js +17 -0
  163. package/dist/packem_shared/setEnableStyledLineCache-D2gZbwFM.js +1 -0
  164. package/dist/packem_shared/squashTextNodesWithMap-Cpqmc45i.js +1 -0
  165. package/dist/packem_shared/stderr-context-BzEaUICS.js +1 -0
  166. package/dist/packem_shared/stdin-context-BTaaFagk.js +1 -0
  167. package/dist/packem_shared/stdout-context-BnblEPez.js +1 -0
  168. package/dist/packem_shared/text-width-CZ9vPvM0.js +2 -0
  169. package/dist/packem_shared/token-to-elements-BYxT6J_Q.js +1 -0
  170. package/dist/packem_shared/treeViewTheme-1RIZyB4M.js +1 -0
  171. package/dist/packem_shared/useAnimation-B9we6ZzL.js +1 -0
  172. package/dist/packem_shared/useApp-B6fvM42d.js +1 -0
  173. package/dist/packem_shared/useBoxMetrics-D5pkIr6P.js +1 -0
  174. package/dist/packem_shared/useClipboard-CBxy0hT8.js +1 -0
  175. package/dist/packem_shared/useColorBlindness-BvWcu2Bb.js +1 -0
  176. package/dist/packem_shared/useConsoleCapture-BxiG8iLJ.js +1 -0
  177. package/dist/packem_shared/useCursor-CPu8T5Db.js +1 -0
  178. package/dist/packem_shared/useElementDimensions-qJ_WXFZ9.js +1 -0
  179. package/dist/packem_shared/useFocus-DSmziO_x.js +1 -0
  180. package/dist/packem_shared/useFocusManager-Uapn3LQo.js +1 -0
  181. package/dist/packem_shared/useForm-CzV-Oext.js +1 -0
  182. package/dist/packem_shared/useHotkey-D0dGey14.js +1 -0
  183. package/dist/packem_shared/useInput-D1_jG26Z.js +2 -0
  184. package/dist/packem_shared/useInterval-AobjZT3u.js +1 -0
  185. package/dist/packem_shared/useIsScreenReaderEnabled-DjWHh-II.js +1 -0
  186. package/dist/packem_shared/useKeyBindings-zabkEJQs.js +1 -0
  187. package/dist/packem_shared/useKeyChord-CICQIxXj.js +1 -0
  188. package/dist/packem_shared/useMouseAction-2dRfU1vE.js +1 -0
  189. package/dist/packem_shared/useMouseContext-C746G7kY.js +1 -0
  190. package/dist/packem_shared/useMousePosition-BTWfV4JK.js +1 -0
  191. package/dist/packem_shared/useOnMouseClick-nY8xLZmt.js +1 -0
  192. package/dist/packem_shared/useOnMouseHover-D3DczIol.js +1 -0
  193. package/dist/packem_shared/useOnMouseState-cRK8QvzD.js +1 -0
  194. package/dist/packem_shared/usePaste-CKKB9H-Z.js +1 -0
  195. package/dist/packem_shared/useScrollAcceleration-NrY1oVMs.js +1 -0
  196. package/dist/packem_shared/useScrollInput-Caghtn-Q.js +1 -0
  197. package/dist/packem_shared/useStderr-BDZb6InG.js +1 -0
  198. package/dist/packem_shared/useStdin-DKa4h35k.js +1 -0
  199. package/dist/packem_shared/useStdout-B-2lX4C5.js +1 -0
  200. package/dist/packem_shared/useStopwatch-DffK7iMh.js +1 -0
  201. package/dist/packem_shared/useTerminalPalette-Cv7tSduR.js +1 -0
  202. package/dist/packem_shared/useTextBuffer-DekkGLxI.js +4 -0
  203. package/dist/packem_shared/useTextSelection-CGT0GLDR.js +1 -0
  204. package/dist/packem_shared/useTimeout-7LEFYTnG.js +1 -0
  205. package/dist/packem_shared/useTimer-DyoqSyGi.js +1 -0
  206. package/dist/packem_shared/useTreeView-8UlTK6sW.js +1 -0
  207. package/dist/packem_shared/useTreeViewState-CRPCUWrb.js +1 -0
  208. package/dist/packem_shared/useWindowSize-yDZsXF8z.js +1 -0
  209. package/dist/packem_shared/utils-THUhYKG2.js +1 -0
  210. package/dist/packem_shared/variant-config-BJqpNo7H.js +1 -0
  211. package/dist/packem_shared/waitFor-Dj5zfL5s.js +4 -0
  212. package/dist/packem_shared/wrapOrTruncateStyledLine-BZ00SM8i.js +3 -0
  213. package/dist/react/index.d.ts +519 -8
  214. package/dist/react/index.js +1 -9
  215. package/dist/testing/index.d.ts +274 -135
  216. package/dist/testing/index.js +1 -260
  217. package/index.js +691 -539
  218. package/package.json +24 -28
  219. package/dist/core/app.d.ts +0 -50
  220. package/dist/core/cell.d.ts +0 -33
  221. package/dist/core/inline.d.ts +0 -22
  222. package/dist/core/input.d.ts +0 -18
  223. package/dist/core/native-binding.d.ts +0 -22
  224. package/dist/ink/ansi-to-cell.d.ts +0 -5
  225. package/dist/ink/ansi-tokenizer.d.ts +0 -38
  226. package/dist/ink/clipboard.d.ts +0 -29
  227. package/dist/ink/color-matrix.d.ts +0 -49
  228. package/dist/ink/color-utils.d.ts +0 -30
  229. package/dist/ink/colorize.d.ts +0 -4
  230. package/dist/ink/components/AccessibilityContext.d.ts +0 -4
  231. package/dist/ink/components/Alert.d.ts +0 -30
  232. package/dist/ink/components/AnimationContext.d.ts +0 -10
  233. package/dist/ink/components/App.d.ts +0 -19
  234. package/dist/ink/components/AppContext.d.ts +0 -38
  235. package/dist/ink/components/BackgroundContext.d.ts +0 -5
  236. package/dist/ink/components/Badge.d.ts +0 -27
  237. package/dist/ink/components/BigText.d.ts +0 -71
  238. package/dist/ink/components/Box.d.ts +0 -58
  239. package/dist/ink/components/Code.d.ts +0 -46
  240. package/dist/ink/components/ConfirmInput.d.ts +0 -40
  241. package/dist/ink/components/ConsoleOverlay.d.ts +0 -52
  242. package/dist/ink/components/Cursor.d.ts +0 -43
  243. package/dist/ink/components/CursorContext.d.ts +0 -12
  244. package/dist/ink/components/Dialog.d.ts +0 -93
  245. package/dist/ink/components/DiffView.d.ts +0 -71
  246. package/dist/ink/components/ErrorBoundary.d.ts +0 -17
  247. package/dist/ink/components/ErrorOverview.d.ts +0 -6
  248. package/dist/ink/components/FocusContext.d.ts +0 -17
  249. package/dist/ink/components/Gradient.d.ts +0 -38
  250. package/dist/ink/components/Help.d.ts +0 -49
  251. package/dist/ink/components/Link.d.ts +0 -34
  252. package/dist/ink/components/Markdown.d.ts +0 -34
  253. package/dist/ink/components/MultiSelect.d.ts +0 -63
  254. package/dist/ink/components/Newline.d.ts +0 -12
  255. package/dist/ink/components/OrderedList.d.ts +0 -30
  256. package/dist/ink/components/Paginator.d.ts +0 -75
  257. package/dist/ink/components/ProgressBar.d.ts +0 -51
  258. package/dist/ink/components/SelectInput.d.ts +0 -96
  259. package/dist/ink/components/SelectInputIndicator.d.ts +0 -36
  260. package/dist/ink/components/SelectInputItem.d.ts +0 -43
  261. package/dist/ink/components/Slider.d.ts +0 -92
  262. package/dist/ink/components/Spacer.d.ts +0 -7
  263. package/dist/ink/components/Spinner.d.ts +0 -42
  264. package/dist/ink/components/Static.d.ts +0 -24
  265. package/dist/ink/components/StaticRender.d.ts +0 -28
  266. package/dist/ink/components/StatusMessage.d.ts +0 -26
  267. package/dist/ink/components/StderrContext.d.ts +0 -16
  268. package/dist/ink/components/StdinContext.d.ts +0 -29
  269. package/dist/ink/components/StdoutContext.d.ts +0 -16
  270. package/dist/ink/components/Stopwatch.d.ts +0 -44
  271. package/dist/ink/components/Tab.d.ts +0 -25
  272. package/dist/ink/components/Table.d.ts +0 -80
  273. package/dist/ink/components/Tabs.d.ts +0 -97
  274. package/dist/ink/components/Text.d.ts +0 -63
  275. package/dist/ink/components/TextInput.d.ts +0 -48
  276. package/dist/ink/components/Textarea.d.ts +0 -62
  277. package/dist/ink/components/Timer.d.ts +0 -52
  278. package/dist/ink/components/Transform.d.ts +0 -16
  279. package/dist/ink/components/UnorderedList.d.ts +0 -35
  280. package/dist/ink/components/file-picker/FilePicker.d.ts +0 -75
  281. package/dist/ink/components/file-picker/index.d.ts +0 -3
  282. package/dist/ink/components/file-picker/types.d.ts +0 -38
  283. package/dist/ink/components/file-picker/use-file-system.d.ts +0 -16
  284. package/dist/ink/components/scroll/ControlledScrollView.d.ts +0 -43
  285. package/dist/ink/components/scroll/ScrollBar.d.ts +0 -20
  286. package/dist/ink/components/scroll/ScrollBarBox.d.ts +0 -15
  287. package/dist/ink/components/scroll/ScrollList.d.ts +0 -12
  288. package/dist/ink/components/scroll/ScrollView.d.ts +0 -98
  289. package/dist/ink/components/scroll/index.d.ts +0 -10
  290. package/dist/ink/components/scroll/use-state-ref.d.ts +0 -8
  291. package/dist/ink/components/tree-view/TreeView.d.ts +0 -89
  292. package/dist/ink/components/tree-view/TreeViewNode.d.ts +0 -29
  293. package/dist/ink/components/tree-view/index.d.ts +0 -11
  294. package/dist/ink/components/tree-view/theme.d.ts +0 -24
  295. package/dist/ink/components/tree-view/tree-node-map.d.ts +0 -72
  296. package/dist/ink/components/tree-view/types.d.ts +0 -55
  297. package/dist/ink/components/tree-view/use-tree-view-state.d.ts +0 -135
  298. package/dist/ink/components/tree-view/use-tree-view.d.ts +0 -26
  299. package/dist/ink/components/variant-config.d.ts +0 -10
  300. package/dist/ink/cursor-helpers.d.ts +0 -38
  301. package/dist/ink/data-limited-lru-map.d.ts +0 -21
  302. package/dist/ink/devtools-window-polyfill.d.ts +0 -1
  303. package/dist/ink/devtools.d.ts +0 -1
  304. package/dist/ink/dom.d.ts +0 -213
  305. package/dist/ink/get-max-width.d.ts +0 -3
  306. package/dist/ink/highlighter.d.ts +0 -28
  307. package/dist/ink/hooks/use-animation.d.ts +0 -43
  308. package/dist/ink/hooks/use-app.d.ts +0 -6
  309. package/dist/ink/hooks/use-box-metrics.d.ts +0 -58
  310. package/dist/ink/hooks/use-clipboard.d.ts +0 -29
  311. package/dist/ink/hooks/use-color-blindness.d.ts +0 -33
  312. package/dist/ink/hooks/use-console-capture.d.ts +0 -43
  313. package/dist/ink/hooks/use-cursor.d.ts +0 -12
  314. package/dist/ink/hooks/use-focus-manager.d.ts +0 -42
  315. package/dist/ink/hooks/use-focus.d.ts +0 -30
  316. package/dist/ink/hooks/use-input.d.ts +0 -149
  317. package/dist/ink/hooks/use-is-screen-reader-enabled.d.ts +0 -6
  318. package/dist/ink/hooks/use-key-bindings.d.ts +0 -61
  319. package/dist/ink/hooks/use-linked-scroll.d.ts +0 -41
  320. package/dist/ink/hooks/use-paste.d.ts +0 -44
  321. package/dist/ink/hooks/use-scroll-acceleration.d.ts +0 -47
  322. package/dist/ink/hooks/use-scroll-input.d.ts +0 -34
  323. package/dist/ink/hooks/use-stderr.d.ts +0 -6
  324. package/dist/ink/hooks/use-stdin.d.ts +0 -7
  325. package/dist/ink/hooks/use-stdout.d.ts +0 -6
  326. package/dist/ink/hooks/use-stopwatch.d.ts +0 -40
  327. package/dist/ink/hooks/use-terminal-palette.d.ts +0 -19
  328. package/dist/ink/hooks/use-text-buffer.d.ts +0 -42
  329. package/dist/ink/hooks/use-text-selection.d.ts +0 -45
  330. package/dist/ink/hooks/use-timer.d.ts +0 -49
  331. package/dist/ink/hooks/use-window-size.d.ts +0 -18
  332. package/dist/ink/ime-utils.d.ts +0 -25
  333. package/dist/ink/ink.d.ts +0 -189
  334. package/dist/ink/input-parser.d.ts +0 -10
  335. package/dist/ink/input-utils.d.ts +0 -16
  336. package/dist/ink/instances.d.ts +0 -3
  337. package/dist/ink/kitty-keyboard.d.ts +0 -23
  338. package/dist/ink/layout.d.ts +0 -26
  339. package/dist/ink/log-update-native.d.ts +0 -14
  340. package/dist/ink/log-update.d.ts +0 -21
  341. package/dist/ink/measure-element.d.ts +0 -147
  342. package/dist/ink/measure-text.d.ts +0 -56
  343. package/dist/ink/mouse/Fullscreen.d.ts +0 -8
  344. package/dist/ink/mouse/MouseProvider.d.ts +0 -11
  345. package/dist/ink/mouse/ansi-parser.d.ts +0 -37
  346. package/dist/ink/mouse/constants.d.ts +0 -59
  347. package/dist/ink/mouse/index.d.ts +0 -20
  348. package/dist/ink/mouse/is-intersecting.d.ts +0 -18
  349. package/dist/ink/mouse/mouse-context.d.ts +0 -36
  350. package/dist/ink/mouse/use-element-position.d.ts +0 -29
  351. package/dist/ink/mouse/use-mouse-action.d.ts +0 -7
  352. package/dist/ink/mouse/use-mouse-position.d.ts +0 -7
  353. package/dist/ink/mouse/use-mouse.d.ts +0 -7
  354. package/dist/ink/mouse/use-on-mouse-click.d.ts +0 -14
  355. package/dist/ink/mouse/use-on-mouse-hover.d.ts +0 -8
  356. package/dist/ink/mouse/use-on-mouse-state.d.ts +0 -11
  357. package/dist/ink/output.d.ts +0 -74
  358. package/dist/ink/parse-keypress.d.ts +0 -22
  359. package/dist/ink/reconciler.d.ts +0 -3
  360. package/dist/ink/region.d.ts +0 -99
  361. package/dist/ink/render-background.d.ts +0 -4
  362. package/dist/ink/render-border.d.ts +0 -4
  363. package/dist/ink/render-node-to-output.d.ts +0 -38
  364. package/dist/ink/render-scrollbar.d.ts +0 -9
  365. package/dist/ink/render-sticky.d.ts +0 -44
  366. package/dist/ink/render-to-string.d.ts +0 -37
  367. package/dist/ink/render.d.ts +0 -191
  368. package/dist/ink/renderer.d.ts +0 -17
  369. package/dist/ink/resize-observer.d.ts +0 -44
  370. package/dist/ink/sanitize-ansi.d.ts +0 -2
  371. package/dist/ink/scroll.d.ts +0 -23
  372. package/dist/ink/selection.d.ts +0 -70
  373. package/dist/ink/squash-text-nodes.d.ts +0 -18
  374. package/dist/ink/style-flags.d.ts +0 -17
  375. package/dist/ink/styled-line-factory.d.ts +0 -25
  376. package/dist/ink/styled-line-serializer.d.ts +0 -18
  377. package/dist/ink/styled-line.d.ts +0 -109
  378. package/dist/ink/styles.d.ts +0 -369
  379. package/dist/ink/terminal-palette.d.ts +0 -25
  380. package/dist/ink/text-wrap.d.ts +0 -10
  381. package/dist/ink/token-to-elements.d.ts +0 -22
  382. package/dist/ink/utils/format-time.d.ts +0 -4
  383. package/dist/ink/utils.d.ts +0 -9
  384. package/dist/ink/wrap-text.d.ts +0 -3
  385. package/dist/ink/write-synchronized.d.ts +0 -4
  386. package/dist/packem_shared/AccessibilityContext-BLelHhNU.js +0 -7
  387. package/dist/packem_shared/Alert-Dr3s_LD9.js +0 -17
  388. package/dist/packem_shared/AnimationContext-BcJg8Jr6.js +0 -15
  389. package/dist/packem_shared/AppContext-CP0U6H7O.js +0 -11
  390. package/dist/packem_shared/BackgroundContext-BAUaxfOb.js +0 -5
  391. package/dist/packem_shared/Badge-Dk7EGGM6.js +0 -13
  392. package/dist/packem_shared/BigText-CjMdY63X.js +0 -24
  393. package/dist/packem_shared/Box-D_pSJ9Jp.js +0 -73
  394. package/dist/packem_shared/COLOR_BLINDNESS_SIMULATION-BsMy5Ewl.js +0 -81
  395. package/dist/packem_shared/Cell-DCg1kJY-.js +0 -48
  396. package/dist/packem_shared/Code-DjQvPBD9.js +0 -53
  397. package/dist/packem_shared/ConfirmInput-85Y4kRQW.js +0 -44
  398. package/dist/packem_shared/ConsoleOverlay-DBNa4vtj.js +0 -57
  399. package/dist/packem_shared/ControlledScrollView-BlOaxcsN.js +0 -286
  400. package/dist/packem_shared/ControlledScrollView-DfAhcufF.js +0 -5
  401. package/dist/packem_shared/Cursor-DiW7YoSK.js +0 -18
  402. package/dist/packem_shared/CursorContext-JxRzlqAx.js +0 -9
  403. package/dist/packem_shared/DevTools-aMPIsaHx.js +0 -61
  404. package/dist/packem_shared/Dialog-DsSNAVgC.js +0 -71
  405. package/dist/packem_shared/DiffView-hqaw-2S6.js +0 -329
  406. package/dist/packem_shared/FilePicker-DNwFxRhq.js +0 -254
  407. package/dist/packem_shared/FocusContext-CWkYtgcm.js +0 -26
  408. package/dist/packem_shared/FocusContext-D5wFxSRz.js +0 -153
  409. package/dist/packem_shared/Fullscreen-DrElAE1o.js +0 -11
  410. package/dist/packem_shared/Gradient-Ql5P0GUd.js +0 -136
  411. package/dist/packem_shared/Help-6wanGG38.js +0 -112
  412. package/dist/packem_shared/IMECompositionBuffer-Dl3S0KnF.js +0 -55
  413. package/dist/packem_shared/InputParser-BKHpWfvN.js +0 -156
  414. package/dist/packem_shared/LayoutNode-Cjnsodiy.js +0 -131
  415. package/dist/packem_shared/Link-COcKYfGT.js +0 -66
  416. package/dist/packem_shared/Markdown-y1ISztof.js +0 -212
  417. package/dist/packem_shared/MouseProvider-Y9TSSEGl.js +0 -136
  418. package/dist/packem_shared/MultiSelect-ChoLUcDI.js +0 -129
  419. package/dist/packem_shared/NAMED_COLORS-a4QBvb5r.js +0 -262
  420. package/dist/packem_shared/Newline-DBtYEg8x.js +0 -7
  421. package/dist/packem_shared/OrderedList-Cp7pXr6m.js +0 -26
  422. package/dist/packem_shared/Paginator-D1AuD-kj.js +0 -104
  423. package/dist/packem_shared/ProgressBar-DOfpVagn.js +0 -22
  424. package/dist/packem_shared/Renderer-zZ5O3vxc.js +0 -31
  425. package/dist/packem_shared/ResizeObserverEntry-Br4seLeQ.js +0 -102
  426. package/dist/packem_shared/ScrollBar-EWAs2Uc7.js +0 -106
  427. package/dist/packem_shared/ScrollBarBox-DTNNlh7R.js +0 -72
  428. package/dist/packem_shared/ScrollList-DCeIFL8M.js +0 -227
  429. package/dist/packem_shared/ScrollView-v3MCNIyX.js +0 -196
  430. package/dist/packem_shared/SelectInput-BN2TMyxp.js +0 -260
  431. package/dist/packem_shared/SelectInputIndicator-DkRMoH_b.js +0 -9
  432. package/dist/packem_shared/SelectInputItem-BF9LQgKu.js +0 -8
  433. package/dist/packem_shared/Slider-BWD7xZX6.js +0 -116
  434. package/dist/packem_shared/Spacer-Bs4ER-HK.js +0 -8
  435. package/dist/packem_shared/Spinner-BuI-kN4p.js +0 -1799
  436. package/dist/packem_shared/Static-DpTd6Eed.js +0 -22
  437. package/dist/packem_shared/Static-xmD9giJj.js +0 -18
  438. package/dist/packem_shared/StaticRender-tYwH6QXl.js +0 -33
  439. package/dist/packem_shared/StatusMessage-BtSYxzwb.js +0 -14
  440. package/dist/packem_shared/StderrContext-Bj4Mf7v7.js +0 -17
  441. package/dist/packem_shared/StdinContext-Bq_GNJ3z.js +0 -38
  442. package/dist/packem_shared/StdoutContext-CgjWeCdO.js +0 -17
  443. package/dist/packem_shared/Stopwatch-DjtTCyHn.js +0 -23
  444. package/dist/packem_shared/Tab-C6r5q4hR.js +0 -7
  445. package/dist/packem_shared/Table-D-rSVlzb.js +0 -82
  446. package/dist/packem_shared/Tabs-BXpZwLWo.js +0 -146
  447. package/dist/packem_shared/Text-DvAUdZcK.js +0 -65
  448. package/dist/packem_shared/TextInput-C79WEQ5U.js +0 -137
  449. package/dist/packem_shared/Textarea-Dj06R6Zd.js +0 -272
  450. package/dist/packem_shared/Timer-wi9zuh4n.js +0 -22
  451. package/dist/packem_shared/Transform-BHxY_dAM.js +0 -14
  452. package/dist/packem_shared/TreeNodeMap-CtJUvBnd.js +0 -155
  453. package/dist/packem_shared/TreeView-C2062dtj.js +0 -148
  454. package/dist/packem_shared/TuiApp-DfxOnXqi.js +0 -120
  455. package/dist/packem_shared/TuiContext-CqEjMyXd.js +0 -415
  456. package/dist/packem_shared/UnorderedList-DhnadWjX.js +0 -33
  457. package/dist/packem_shared/ansi-parser-0BdVTKho.js +0 -41
  458. package/dist/packem_shared/ansi-tokenizer-LHq2LUWA.js +0 -307
  459. package/dist/packem_shared/boxes-oi3WUbyR.js +0 -92
  460. package/dist/packem_shared/colorize-88_Vk8cn.js +0 -48
  461. package/dist/packem_shared/comparePoints-CGMDnd3_.js +0 -287
  462. package/dist/packem_shared/createInlineLoop-BxMmcq9D.js +0 -93
  463. package/dist/packem_shared/createLinkedScrollGroup-Djw4Ceo0.js +0 -44
  464. package/dist/packem_shared/dom-DvzhsAez.js +0 -225
  465. package/dist/packem_shared/format-time-BGmnDukX.js +0 -12
  466. package/dist/packem_shared/getPathToRoot-a1wbwxfL.js +0 -4
  467. package/dist/packem_shared/getScrollHeight-BubfU_df.js +0 -63
  468. package/dist/packem_shared/input-utils-ViAEXa0Z.js +0 -19
  469. package/dist/packem_shared/isIntersecting-fEXHJN5R.js +0 -10
  470. package/dist/packem_shared/isOsc52Supported-G0k4sXJx.js +0 -36
  471. package/dist/packem_shared/isTerminalPaletteQuerySupported-EeiwMKbr.js +0 -93
  472. package/dist/packem_shared/kittyFlags-bNNf_9kX.js +0 -26
  473. package/dist/packem_shared/measure-element-Reza_yfC.js +0 -396
  474. package/dist/packem_shared/measure-text-DItZYotK.js +0 -1189
  475. package/dist/packem_shared/measureElement-CTgFCmKd.js +0 -4
  476. package/dist/packem_shared/mouse-context-BUHWKEIe.js +0 -6
  477. package/dist/packem_shared/parseSgrMouse-BHVBPP9G.js +0 -1
  478. package/dist/packem_shared/processLayout-BQ9kXfd3.js +0 -2
  479. package/dist/packem_shared/reconciler-BXf6miSS.js +0 -211
  480. package/dist/packem_shared/reconciler-gfmqURLy.js +0 -680
  481. package/dist/packem_shared/render-BAwdjfki.js +0 -2806
  482. package/dist/packem_shared/render-Bpjhf0lD.js +0 -195
  483. package/dist/packem_shared/renderToString-Cfg55DRD.js +0 -62
  484. package/dist/packem_shared/renderToString-ClIaXgrC.js +0 -86
  485. package/dist/packem_shared/renderTreeToBuffer-D3mo7M7m.js +0 -308
  486. package/dist/packem_shared/renderer-B3wROkeg.js +0 -1431
  487. package/dist/packem_shared/setEnableStyledLineCache-BpskngSJ.js +0 -2
  488. package/dist/packem_shared/squashTextNodesWithMap-iqm6OMMT.js +0 -100
  489. package/dist/packem_shared/text-width-DhuarWcB.js +0 -42
  490. package/dist/packem_shared/token-to-elements-BRFl_rzw.js +0 -249
  491. package/dist/packem_shared/treeViewTheme-BpSw9TMf.js +0 -52
  492. package/dist/packem_shared/useAnimation-kj31sA-T.js +0 -62
  493. package/dist/packem_shared/useApp-DPQlRzi5.js +0 -6
  494. package/dist/packem_shared/useBoxMetrics-rBjKc-g4.js +0 -54
  495. package/dist/packem_shared/useClipboard-B_9-adw1.js +0 -23
  496. package/dist/packem_shared/useColorBlindness-D_sTIhcb.js +0 -30
  497. package/dist/packem_shared/useConsoleCapture-Dvt7G1W1.js +0 -61
  498. package/dist/packem_shared/useCursor-BIJzc8k9.js +0 -19
  499. package/dist/packem_shared/useElementDimensions-CAoKitVD.js +0 -67
  500. package/dist/packem_shared/useFocus-CNl5QHHf.js +0 -37
  501. package/dist/packem_shared/useFocusManager-BPYaUuKQ.js +0 -16
  502. package/dist/packem_shared/useInput-Cfp5zB2s.js +0 -594
  503. package/dist/packem_shared/useIsScreenReaderEnabled-CnGKCe0f.js +0 -9
  504. package/dist/packem_shared/useKeyBindings-B78l1E1n.js +0 -66
  505. package/dist/packem_shared/useMouseAction-C5gZ2nj7.js +0 -29
  506. package/dist/packem_shared/useMouseContext-D-rFy60Q.js +0 -12
  507. package/dist/packem_shared/useMousePosition-BHBJ-kBk.js +0 -25
  508. package/dist/packem_shared/useOnMouseClick--ZIyBOBO.js +0 -35
  509. package/dist/packem_shared/useOnMouseHover-26diuXUC.js +0 -32
  510. package/dist/packem_shared/useOnMouseState-NO_Kda_C.js +0 -13
  511. package/dist/packem_shared/usePaste-Ct8J4AGR.js +0 -35
  512. package/dist/packem_shared/useScrollAcceleration-R9LfrPVG.js +0 -73
  513. package/dist/packem_shared/useScrollInput-D3CpBq_a.js +0 -72
  514. package/dist/packem_shared/useStderr-CAOVUh4E.js +0 -6
  515. package/dist/packem_shared/useStdin-X-O0kd-n.js +0 -7
  516. package/dist/packem_shared/useStdout-DyF6DSH0.js +0 -6
  517. package/dist/packem_shared/useStopwatch-qC4Beai4.js +0 -33
  518. package/dist/packem_shared/useTerminalPalette-BaWO2c4Q.js +0 -38
  519. package/dist/packem_shared/useTextBuffer-C8fEe9Ly.js +0 -398
  520. package/dist/packem_shared/useTextSelection-mXtxgsPK.js +0 -50
  521. package/dist/packem_shared/useTimer-CPQ7j827.js +0 -46
  522. package/dist/packem_shared/useTreeView-BT57P3Kx.js +0 -101
  523. package/dist/packem_shared/useTreeViewState-BpS_KZ-K.js +0 -502
  524. package/dist/packem_shared/useWindowSize-ugEmGZJm.js +0 -20
  525. package/dist/packem_shared/utils-BgdlrbOH.js +0 -140
  526. package/dist/packem_shared/variant-config-DSZoX5TM.js +0 -8
  527. package/dist/packem_shared/wrapOrTruncateStyledLine-DN3Nogoc.js +0 -147
  528. package/dist/react/devtools.d.ts +0 -27
  529. package/dist/react/focus.d.ts +0 -39
  530. package/dist/react/hooks.d.ts +0 -238
  531. package/dist/react/layout.d.ts +0 -35
  532. package/dist/react/react.d.ts +0 -57
  533. package/dist/react/reconciler.d.ts +0 -4
  534. package/dist/react/render-to-string.d.ts +0 -21
  535. package/dist/react/renderer.d.ts +0 -2
  536. package/dist/react/scene.d.ts +0 -3
  537. package/dist/react/static.d.ts +0 -39
  538. package/dist/react/styles.d.ts +0 -83
  539. package/dist/react/text-width.d.ts +0 -20
  540. package/dist/testing/keys.d.ts +0 -89
  541. package/dist/testing/screen.d.ts +0 -35
  542. package/dist/testing/wait-for.d.ts +0 -21
@@ -1,1189 +0,0 @@
1
- import { isFullwidthCodePoint, getStringWidth } from '@visulima/string';
2
- import { t as tokenizeAnsi } from './ansi-tokenizer-LHq2LUWA.js';
3
-
4
- class DataLimitedLruMap {
5
- map;
6
- maxDataSize;
7
- maxKeys;
8
- currentDataSize = 0;
9
- constructor(maxKeys, maxDataSize) {
10
- this.map = /* @__PURE__ */ new Map();
11
- this.maxKeys = maxKeys;
12
- this.maxDataSize = maxDataSize;
13
- }
14
- get size() {
15
- return this.map.size;
16
- }
17
- clear() {
18
- this.map.clear();
19
- this.currentDataSize = 0;
20
- }
21
- get(key) {
22
- if (!this.map.has(key)) {
23
- return void 0;
24
- }
25
- const value = this.map.get(key);
26
- this.map.delete(key);
27
- this.map.set(key, value);
28
- return value;
29
- }
30
- set(key, value) {
31
- const size = key.length;
32
- if (size > this.maxDataSize) {
33
- return;
34
- }
35
- const hasKey = this.map.has(key);
36
- if (hasKey) {
37
- this.map.delete(key);
38
- this.currentDataSize -= size;
39
- }
40
- while (this.currentDataSize + size > this.maxDataSize && this.map.size > 0) {
41
- const lruKey = this.map.keys().next().value;
42
- if (lruKey === void 0) {
43
- break;
44
- }
45
- this.map.delete(lruKey);
46
- this.currentDataSize -= lruKey.length;
47
- }
48
- while (this.map.size >= this.maxKeys) {
49
- const lruKey = this.map.keys().next().value;
50
- if (lruKey === void 0) {
51
- break;
52
- }
53
- this.map.delete(lruKey);
54
- this.currentDataSize -= lruKey.length;
55
- }
56
- this.map.set(key, value);
57
- this.currentDataSize += size;
58
- }
59
- }
60
-
61
- const BOLD_MASK = 1;
62
- const DIM_MASK = 1 << 1;
63
- const ITALIC_MASK = 1 << 2;
64
- const UNDERLINE_MASK = 1 << 3;
65
- const STRIKETHROUGH_MASK = 1 << 4;
66
- const INVERSE_MASK = 1 << 5;
67
- const HIDDEN_MASK = 1 << 6;
68
- const FULL_WIDTH_MASK = 1 << 7;
69
-
70
- const OFFSET_MASK = 1073741823;
71
- const FULL_WIDTH_FLAG = 1073741824;
72
- class StyledLine {
73
- length = 0;
74
- static emptyCache = /* @__PURE__ */ new Map();
75
- text;
76
- charData;
77
- spans;
78
- _cachedTrimmedLength;
79
- static empty(length) {
80
- if (length <= 0) {
81
- return new StyledLine();
82
- }
83
- const cached = StyledLine.emptyCache.get(length);
84
- if (cached) {
85
- return cached.clone();
86
- }
87
- const line = new StyledLine();
88
- line.length = length;
89
- line.text = " ".repeat(length);
90
- line.charData = Array.from({ length });
91
- for (let i = 0; i < length; i++) {
92
- line.charData[i] = i;
93
- }
94
- line.spans = [{ formatFlags: 0, length }];
95
- line._cachedTrimmedLength = 0;
96
- Object.freeze(line.spans[0]);
97
- Object.freeze(line.spans);
98
- Object.freeze(line);
99
- StyledLine.emptyCache.set(length, line);
100
- return line.clone();
101
- }
102
- getValue(index) {
103
- if (this.text === void 0 || index < 0 || index >= this.length) {
104
- return "";
105
- }
106
- const start = this.charData[index] & OFFSET_MASK;
107
- const end = index + 1 < this.length ? this.charData[index + 1] & OFFSET_MASK : this.text.length;
108
- return this.text.slice(start, end);
109
- }
110
- /**
111
- * Get the raw text for a range of characters as a single string slice.
112
- * Much faster than calling getValue() per character.
113
- */
114
- getTextRange(start, end) {
115
- if (this.text === void 0 || start < 0 || end > this.length || start >= end) {
116
- return "";
117
- }
118
- const textStart = this.charData[start] & OFFSET_MASK;
119
- const textEnd = end < this.length ? this.charData[end] & OFFSET_MASK : this.text.length;
120
- return this.text.slice(textStart, textEnd);
121
- }
122
- getSpan(index) {
123
- if (this.spans === void 0 || index < 0 || index >= this.length) {
124
- return void 0;
125
- }
126
- let current = 0;
127
- for (const span of this.spans) {
128
- if (index < current + span.length) {
129
- return span;
130
- }
131
- current += span.length;
132
- }
133
- return void 0;
134
- }
135
- getFullWidth(index) {
136
- if (this.charData === void 0 || index < 0 || index >= this.length) {
137
- return false;
138
- }
139
- return (this.charData[index] & FULL_WIDTH_FLAG) !== 0;
140
- }
141
- hasStyles(index) {
142
- const span = this.getSpan(index);
143
- if (!span) {
144
- return false;
145
- }
146
- return (span.formatFlags & ~FULL_WIDTH_MASK) !== 0 || span.fgColor !== void 0 || span.bgColor !== void 0 || span.link !== void 0;
147
- }
148
- getFormatFlags(index) {
149
- let flags = this.getSpan(index)?.formatFlags ?? 0;
150
- if (this.getFullWidth(index)) {
151
- flags |= FULL_WIDTH_MASK;
152
- }
153
- return flags;
154
- }
155
- getFgColor(index) {
156
- return this.getSpan(index)?.fgColor;
157
- }
158
- getBgColor(index) {
159
- return this.getSpan(index)?.bgColor;
160
- }
161
- getLink(index) {
162
- return this.getSpan(index)?.link;
163
- }
164
- setInverted(index, inverted) {
165
- this._cachedTrimmedLength = void 0;
166
- this.updateSpanAt(index, (span) => {
167
- if (inverted) {
168
- span.formatFlags |= INVERSE_MASK;
169
- } else {
170
- span.formatFlags &= ~INVERSE_MASK;
171
- }
172
- });
173
- }
174
- setBackgroundColor(index, color) {
175
- this._cachedTrimmedLength = void 0;
176
- this.updateSpanAt(index, (span) => {
177
- span.bgColor = color;
178
- });
179
- }
180
- setForegroundColor(index, color) {
181
- this._cachedTrimmedLength = void 0;
182
- this.updateSpanAt(index, (span) => {
183
- span.fgColor = color;
184
- });
185
- }
186
- setChar(index, value, formatFlags, fgColor, bgColor, link) {
187
- if (index < 0 || index >= this.length) {
188
- return;
189
- }
190
- this._cachedTrimmedLength = void 0;
191
- this.ensureInitialized();
192
- const isFullWidth = (formatFlags & FULL_WIDTH_MASK) !== 0;
193
- const cleanFormatFlags = formatFlags & ~FULL_WIDTH_MASK;
194
- const start = this.charData[index] & OFFSET_MASK;
195
- const end = index + 1 < this.length ? this.charData[index + 1] & OFFSET_MASK : this.text.length;
196
- const oldLength = end - start;
197
- const newLength = value.length;
198
- this.text = this.text.slice(0, start) + value + this.text.slice(end);
199
- if (oldLength !== newLength) {
200
- const diff = newLength - oldLength;
201
- for (let i = index + 1; i < this.length; i++) {
202
- const data = this.charData[i];
203
- const oldOffset = data & OFFSET_MASK;
204
- const fw = data & FULL_WIDTH_FLAG;
205
- this.charData[i] = oldOffset + diff | fw;
206
- }
207
- }
208
- this.charData[index] = start | (isFullWidth ? FULL_WIDTH_FLAG : 0);
209
- this.splitSpansAt(index);
210
- this.splitSpansAt(index + 1);
211
- let current = 0;
212
- for (let i = 0; i < this.spans.length; i++) {
213
- const span = this.spans[i];
214
- if (current === index && span.length === 1) {
215
- this.spans[i] = {
216
- bgColor,
217
- fgColor,
218
- formatFlags: cleanFormatFlags,
219
- length: 1,
220
- link
221
- };
222
- break;
223
- }
224
- current += span.length;
225
- }
226
- this.mergeSpans();
227
- }
228
- /**
229
- * Optimized setChar for same-length single-byte replacement.
230
- * Skips string rebuild and offset adjustment when old and new values
231
- * have the same byte length (the common case for ASCII overwrites on empty lines).
232
- */
233
- setCharFast(index, value, formatFlags, fgColor, bgColor, link) {
234
- if (index < 0 || index >= this.length) {
235
- return;
236
- }
237
- this._cachedTrimmedLength = void 0;
238
- this.ensureInitialized();
239
- const isFullWidth = (formatFlags & FULL_WIDTH_MASK) !== 0;
240
- const cleanFormatFlags = formatFlags & ~FULL_WIDTH_MASK;
241
- const start = this.charData[index] & OFFSET_MASK;
242
- const end = index + 1 < this.length ? this.charData[index + 1] & OFFSET_MASK : this.text.length;
243
- const oldLength = end - start;
244
- if (value.length === oldLength) {
245
- if (value !== this.text.slice(start, end)) {
246
- this.text = this.text.slice(0, start) + value + this.text.slice(end);
247
- }
248
- this.charData[index] = start | (isFullWidth ? FULL_WIDTH_FLAG : 0);
249
- } else {
250
- this.text = this.text.slice(0, start) + value + this.text.slice(end);
251
- if (oldLength !== value.length) {
252
- const diff = value.length - oldLength;
253
- for (let i = index + 1; i < this.length; i++) {
254
- const data = this.charData[i];
255
- this.charData[i] = (data & OFFSET_MASK) + diff | data & FULL_WIDTH_FLAG;
256
- }
257
- }
258
- this.charData[index] = start | (isFullWidth ? FULL_WIDTH_FLAG : 0);
259
- }
260
- const existingSpan = this.getSpan(index);
261
- if (existingSpan?.formatFlags === cleanFormatFlags && existingSpan.fgColor === fgColor && existingSpan.bgColor === bgColor && existingSpan.link === link) {
262
- return;
263
- }
264
- this.splitSpansAt(index);
265
- this.splitSpansAt(index + 1);
266
- let current = 0;
267
- for (let i = 0; i < this.spans.length; i++) {
268
- const span = this.spans[i];
269
- if (current === index && span.length === 1) {
270
- this.spans[i] = {
271
- bgColor,
272
- fgColor,
273
- formatFlags: cleanFormatFlags,
274
- length: 1,
275
- link
276
- };
277
- break;
278
- }
279
- current += span.length;
280
- }
281
- this.mergeSpans();
282
- }
283
- /**
284
- * Overwrite a range of this line with content from a source StyledLine.
285
- * More efficient than calling setChar() per character because it does
286
- * a single span split + rebuild instead of per-character span manipulation.
287
- * @param destinationStart — start index in this line
288
- * @param source — the StyledLine to copy from
289
- * @param srcStart — start index in source (default 0)
290
- * @param count — number of characters to copy (default: source.length)
291
- */
292
- writeFrom(destinationStart, source, srcStart = 0, count) {
293
- const n = count ?? source.length - srcStart;
294
- if (n <= 0 || destinationStart >= this.length) {
295
- return;
296
- }
297
- this._cachedTrimmedLength = void 0;
298
- this.ensureInitialized();
299
- const actualCount = Math.min(n, this.length - destinationStart, source.length - srcStart);
300
- const destinationTextStart = this.charData[destinationStart] & OFFSET_MASK;
301
- const destinationTextEnd = destinationStart + actualCount < this.length ? this.charData[destinationStart + actualCount] & OFFSET_MASK : this.text.length;
302
- let newSegment = "";
303
- for (let i = 0; i < actualCount; i++) {
304
- newSegment += source.getValue(srcStart + i);
305
- }
306
- const oldSegLength = destinationTextEnd - destinationTextStart;
307
- const diff = newSegment.length - oldSegLength;
308
- this.text = this.text.slice(0, destinationTextStart) + newSegment + this.text.slice(destinationTextEnd);
309
- let offset = destinationTextStart;
310
- for (let i = 0; i < actualCount; i++) {
311
- const srcFullWidth = source.getFullWidth(srcStart + i);
312
- this.charData[destinationStart + i] = offset | (srcFullWidth ? FULL_WIDTH_FLAG : 0);
313
- offset += source.getValue(srcStart + i).length;
314
- }
315
- if (diff !== 0) {
316
- for (let i = destinationStart + actualCount; i < this.length; i++) {
317
- const data = this.charData[i];
318
- this.charData[i] = (data & OFFSET_MASK) + diff | data & FULL_WIDTH_FLAG;
319
- }
320
- }
321
- this.splitSpansAt(destinationStart);
322
- this.splitSpansAt(destinationStart + actualCount);
323
- const newSpans = [];
324
- let srcSpanStart = 0;
325
- for (const span of source.getSpans()) {
326
- const spanEnd = srcSpanStart + span.length;
327
- const overlapStart = Math.max(srcStart, srcSpanStart);
328
- const overlapEnd = Math.min(srcStart + actualCount, spanEnd);
329
- if (overlapStart < overlapEnd) {
330
- newSpans.push({ ...span, length: overlapEnd - overlapStart });
331
- }
332
- srcSpanStart = spanEnd;
333
- if (srcSpanStart >= srcStart + actualCount) {
334
- break;
335
- }
336
- }
337
- let destinationSpanIndex = 0;
338
- let destinationSpanOffset = 0;
339
- for (let i = 0; i < this.spans.length; i++) {
340
- if (destinationSpanOffset === destinationStart) {
341
- destinationSpanIndex = i;
342
- break;
343
- }
344
- destinationSpanOffset += this.spans[i].length;
345
- }
346
- let removeCount = 0;
347
- let covered = 0;
348
- for (let i = destinationSpanIndex; i < this.spans.length && covered < actualCount; i++) {
349
- covered += this.spans[i].length;
350
- removeCount++;
351
- }
352
- this.spans.splice(destinationSpanIndex, removeCount, ...newSpans);
353
- this.mergeSpans();
354
- }
355
- pushChar(value, formatFlags, fgColor, bgColor, link) {
356
- this._cachedTrimmedLength = void 0;
357
- this.ensureInitialized();
358
- const isFullWidth = (formatFlags & FULL_WIDTH_MASK) !== 0;
359
- const cleanFormatFlags = formatFlags & ~FULL_WIDTH_MASK;
360
- const offset = this.text.length;
361
- this.text = (this.text ?? "") + value;
362
- this.charData.push(offset | (isFullWidth ? FULL_WIDTH_FLAG : 0));
363
- const lastSpan = this.spans.at(-1);
364
- if (lastSpan?.formatFlags === cleanFormatFlags && lastSpan.fgColor === fgColor && lastSpan.bgColor === bgColor && lastSpan.link === link) {
365
- lastSpan.length++;
366
- } else {
367
- this.spans.push({
368
- bgColor,
369
- fgColor,
370
- formatFlags: cleanFormatFlags,
371
- length: 1,
372
- link
373
- });
374
- }
375
- this.length++;
376
- }
377
- clone() {
378
- if (this.charData === void 0) {
379
- return new StyledLine();
380
- }
381
- const result = new StyledLine();
382
- result.length = this.length;
383
- result.text = this.text;
384
- result.charData = [...this.charData];
385
- result.spans = this.spans.map((span) => {
386
- return {
387
- ...span
388
- };
389
- });
390
- result._cachedTrimmedLength = this._cachedTrimmedLength;
391
- return result;
392
- }
393
- slice(start, end) {
394
- if (this.charData === void 0) {
395
- return new StyledLine();
396
- }
397
- const actualStart = Math.max(0, start);
398
- const actualEnd = end === void 0 ? this.length : Math.min(this.length, end);
399
- if (actualStart >= actualEnd) {
400
- return new StyledLine();
401
- }
402
- if (actualStart === 0 && actualEnd === this.length) {
403
- return this.clone();
404
- }
405
- const result = new StyledLine();
406
- result.length = actualEnd - actualStart;
407
- result.charData = Array.from({ length: result.length });
408
- const textStart = this.charData[actualStart] & OFFSET_MASK;
409
- const textEnd = actualEnd < this.length ? this.charData[actualEnd] & OFFSET_MASK : this.text.length;
410
- result.text = this.text.slice(textStart, textEnd);
411
- for (let i = 0; i < result.length; i++) {
412
- const oldData = this.charData[actualStart + i];
413
- const oldOffset = oldData & OFFSET_MASK;
414
- const fw = oldData & FULL_WIDTH_FLAG;
415
- result.charData[i] = oldOffset - textStart | fw;
416
- }
417
- const newSpans = [];
418
- let current = 0;
419
- for (const span of this.spans) {
420
- const spanStart = current;
421
- const spanEnd = current + span.length;
422
- const intersectStart = Math.max(actualStart, spanStart);
423
- const intersectEnd = Math.min(actualEnd, spanEnd);
424
- if (intersectStart < intersectEnd) {
425
- newSpans.push({
426
- ...span,
427
- length: intersectEnd - intersectStart
428
- });
429
- }
430
- current += span.length;
431
- if (current >= actualEnd) {
432
- break;
433
- }
434
- }
435
- result.spans = newSpans;
436
- result.mergeSpans();
437
- return result;
438
- }
439
- combine(...others) {
440
- if (others.length === 0) {
441
- return this.clone();
442
- }
443
- const allLines = [this, ...others].filter((l) => l.length > 0);
444
- if (allLines.length === 0) {
445
- return new StyledLine();
446
- }
447
- if (allLines.length === 1) {
448
- return allLines[0].clone();
449
- }
450
- let totalChars = 0;
451
- for (const line of allLines) {
452
- totalChars += line.length;
453
- }
454
- const result = new StyledLine();
455
- result.length = totalChars;
456
- result.text = allLines.map((l) => l.getText()).join("");
457
- result.charData = Array.from({ length: totalChars });
458
- let currentChar = 0;
459
- let currentOffset = 0;
460
- for (const line of allLines) {
461
- const lineCharData = line.charData;
462
- const lineText = line.getText();
463
- if (lineCharData) {
464
- for (let i = 0; i < line.length; i++) {
465
- const data = lineCharData[i];
466
- const lineOffset = data & OFFSET_MASK;
467
- const fw = data & FULL_WIDTH_FLAG;
468
- result.charData[currentChar + i] = currentOffset + lineOffset | fw;
469
- }
470
- } else {
471
- for (let i = 0; i < line.length; i++) {
472
- result.charData[currentChar + i] = currentOffset + i;
473
- }
474
- }
475
- currentChar += line.length;
476
- currentOffset += lineText.length;
477
- }
478
- result.spans = allLines.flatMap((l) => l.getSpans().map((s) => {
479
- return {
480
- ...s
481
- };
482
- }));
483
- result.mergeSpans();
484
- return result;
485
- }
486
- getTrimmedLength() {
487
- if (this._cachedTrimmedLength !== void 0) {
488
- return this._cachedTrimmedLength;
489
- }
490
- if (this.length === 0) {
491
- this._cachedTrimmedLength = 0;
492
- return 0;
493
- }
494
- if (this.text === void 0 || this.charData === void 0) {
495
- this._cachedTrimmedLength = 0;
496
- return 0;
497
- }
498
- let currentIndex = this.length - 1;
499
- if (this.spans) {
500
- for (let s = this.spans.length - 1; s >= 0; s--) {
501
- const span = this.spans[s];
502
- const hasStylesOnSpan = (span.formatFlags & ~FULL_WIDTH_MASK) !== 0 || span.fgColor !== void 0 || span.bgColor !== void 0 || span.link !== void 0;
503
- if (hasStylesOnSpan) {
504
- this._cachedTrimmedLength = currentIndex + 1;
505
- return this._cachedTrimmedLength;
506
- }
507
- for (let i = 0; i < span.length; i++) {
508
- const charStart = this.charData[currentIndex] & OFFSET_MASK;
509
- const charEnd = currentIndex + 1 < this.length ? this.charData[currentIndex + 1] & OFFSET_MASK : this.text.length;
510
- if (charEnd - charStart !== 1 || this.text[charStart] !== " ") {
511
- this._cachedTrimmedLength = currentIndex + 1;
512
- return this._cachedTrimmedLength;
513
- }
514
- currentIndex--;
515
- }
516
- }
517
- }
518
- this._cachedTrimmedLength = 0;
519
- return 0;
520
- }
521
- trimEnd() {
522
- const trimmedLength = this.getTrimmedLength();
523
- if (trimmedLength === this.length) {
524
- return this;
525
- }
526
- if (trimmedLength === 0) {
527
- return new StyledLine();
528
- }
529
- return this.slice(0, trimmedLength);
530
- }
531
- equals(other) {
532
- if (this.length !== other.length) {
533
- return false;
534
- }
535
- if (this.length === 0) {
536
- return true;
537
- }
538
- if (this.getText() !== other.getText()) {
539
- return false;
540
- }
541
- const s1 = this.getSpans();
542
- const s2 = other.getSpans();
543
- if (s1.length !== s2.length) {
544
- return false;
545
- }
546
- for (const [i, element] of s1.entries()) {
547
- const sp1 = element;
548
- const sp2 = s2[i];
549
- if (sp1.length !== sp2.length || sp1.formatFlags !== sp2.formatFlags || sp1.fgColor !== sp2.fgColor || sp1.bgColor !== sp2.bgColor || sp1.link !== sp2.link) {
550
- return false;
551
- }
552
- }
553
- const thisCharData = this.charData;
554
- const otherCharData = other.charData;
555
- if (thisCharData && otherCharData) {
556
- for (let i = 0; i < this.length; i++) {
557
- if (thisCharData[i] !== otherCharData[i]) {
558
- return false;
559
- }
560
- }
561
- }
562
- return true;
563
- }
564
- getText() {
565
- return this.text ?? "";
566
- }
567
- getSpans() {
568
- return this.spans ?? [];
569
- }
570
- getValues() {
571
- return Array.from({ length: this.length }, (_, i) => this.getValue(i));
572
- }
573
- *[Symbol.iterator]() {
574
- if (this.length === 0) {
575
- return;
576
- }
577
- let currentSpanIndex = 0;
578
- let currentSpanPos = 0;
579
- const spans = this.getSpans();
580
- for (let i = 0; i < this.length; i++) {
581
- const span = spans[currentSpanIndex];
582
- const flags = span ? span.formatFlags : 0;
583
- const isFullWidth = this.getFullWidth(i);
584
- yield {
585
- bgColor: span?.bgColor,
586
- fgColor: span?.fgColor,
587
- formatFlags: flags | (isFullWidth ? FULL_WIDTH_MASK : 0),
588
- fullWidth: isFullWidth,
589
- hasStyles: (flags & ~FULL_WIDTH_MASK) !== 0 || span?.fgColor !== void 0 || span?.bgColor !== void 0 || span?.link !== void 0,
590
- link: span?.link,
591
- value: this.getValue(i)
592
- };
593
- if (span) {
594
- currentSpanPos++;
595
- if (currentSpanPos >= span.length) {
596
- currentSpanIndex++;
597
- currentSpanPos = 0;
598
- }
599
- }
600
- }
601
- }
602
- /**
603
- * Split the span at `index` into a single-char span, apply the updater,
604
- * then merge adjacent spans. Shared by setInverted/setBackgroundColor/setForegroundColor.
605
- */
606
- updateSpanAt(index, updater) {
607
- if (index < 0 || index >= this.length) {
608
- return;
609
- }
610
- this.ensureInitialized();
611
- this.splitSpansAt(index);
612
- this.splitSpansAt(index + 1);
613
- let current = 0;
614
- for (const span of this.spans) {
615
- if (current === index && span.length === 1) {
616
- updater(span);
617
- break;
618
- }
619
- current += span.length;
620
- }
621
- this.mergeSpans();
622
- }
623
- /**
624
- * Grow the line to at least `minWidth` columns, filling new cells with
625
- * empty strings (zero-width placeholders). This matches the behavior of
626
- * sparse JS arrays in the original ink Output where out-of-bounds writes
627
- * created gaps that produced no visible output.
628
- */
629
- ensureWidth(minWidth) {
630
- if (minWidth <= this.length) {
631
- return;
632
- }
633
- this.ensureInitialized();
634
- const oldLength = this.length;
635
- const extraCount = minWidth - oldLength;
636
- const oldTextLength = this.text.length;
637
- for (let i = 0; i < extraCount; i++) {
638
- this.charData.push(oldTextLength);
639
- }
640
- this.length = minWidth;
641
- const lastSpan = this.spans.at(-1);
642
- if (lastSpan?.formatFlags === 0 && lastSpan.fgColor === void 0 && lastSpan.bgColor === void 0 && lastSpan.link === void 0) {
643
- lastSpan.length += extraCount;
644
- } else {
645
- this.spans.push({ formatFlags: 0, length: extraCount });
646
- }
647
- }
648
- ensureInitialized() {
649
- if (this.charData === void 0) {
650
- this.text = "";
651
- this.charData = Array.from({ length: this.length });
652
- this.spans = this.length > 0 ? [{ formatFlags: 0, length: this.length }] : [];
653
- if (this.length > 0 && this.text.length === 0) {
654
- this.text = " ".repeat(this.length);
655
- for (let i = 0; i < this.length; i++) {
656
- this.charData[i] = i;
657
- }
658
- }
659
- }
660
- }
661
- splitSpansAt(index) {
662
- if (this.spans === void 0 || index <= 0 || index >= this.length) {
663
- return;
664
- }
665
- let current = 0;
666
- for (let i = 0; i < this.spans.length; i++) {
667
- const span = this.spans[i];
668
- if (index > current && index < current + span.length) {
669
- const leftLength = index - current;
670
- const rightLength = span.length - leftLength;
671
- this.spans.splice(i, 1, { ...span, length: leftLength }, { ...span, length: rightLength });
672
- return;
673
- }
674
- current += span.length;
675
- }
676
- }
677
- mergeSpans() {
678
- if (this.spans === void 0) {
679
- return;
680
- }
681
- const newSpans = [];
682
- for (const span of this.spans) {
683
- if (span.length === 0) {
684
- continue;
685
- }
686
- const last = newSpans.at(-1);
687
- if (last?.formatFlags === span.formatFlags && last.fgColor === span.fgColor && last.bgColor === span.bgColor && last.link === span.link) {
688
- last.length += span.length;
689
- } else {
690
- newSpans.push({ ...span });
691
- }
692
- }
693
- this.spans = newSpans;
694
- }
695
- }
696
-
697
- const NAMED_COLORS = {
698
- black: 0,
699
- blue: 4,
700
- cyan: 6,
701
- gray: 8,
702
- green: 2,
703
- grey: 8,
704
- magenta: 5,
705
- red: 1,
706
- white: 7,
707
- yellow: 3
708
- };
709
- const BRIGHT_COLORS = {
710
- blackBright: 8,
711
- blueBright: 12,
712
- cyanBright: 14,
713
- greenBright: 10,
714
- magentaBright: 13,
715
- redBright: 9,
716
- whiteBright: 15,
717
- yellowBright: 11
718
- };
719
- const ansi256Regex = /^ansi256\(\s?(\d+)\s?\)$/;
720
- const rgbRegex = /^rgb\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/;
721
- const colorToAnsi256 = (color) => {
722
- const named = NAMED_COLORS[color];
723
- if (named !== void 0) {
724
- return named;
725
- }
726
- const bright = BRIGHT_COLORS[color];
727
- if (bright !== void 0) {
728
- return bright;
729
- }
730
- const ansi256Match = ansi256Regex.exec(color);
731
- if (ansi256Match) {
732
- return Number(ansi256Match[1]) & 255;
733
- }
734
- if (color.startsWith("#") && color.length === 7) {
735
- const r = Number.parseInt(color.slice(1, 3), 16);
736
- const g = Number.parseInt(color.slice(3, 5), 16);
737
- const b = Number.parseInt(color.slice(5, 7), 16);
738
- return 16 + 36 * Math.round(r / 51) + 6 * Math.round(g / 51) + Math.round(b / 51);
739
- }
740
- const rgbMatch = rgbRegex.exec(color);
741
- if (rgbMatch) {
742
- return 16 + 36 * Math.round(Number(rgbMatch[1]) / 51) + 6 * Math.round(Number(rgbMatch[2]) / 51) + Math.round(Number(rgbMatch[3]) / 51);
743
- }
744
- return 255;
745
- };
746
- const colorToSgrParams = (color, isFg) => {
747
- const base = isFg ? 30 : 40;
748
- const named = NAMED_COLORS[color];
749
- if (named !== void 0) {
750
- return [base + named];
751
- }
752
- const bright = BRIGHT_COLORS[color];
753
- if (bright !== void 0) {
754
- return [base + 60 + (bright - 8)];
755
- }
756
- if (color.startsWith("#") && color.length === 7) {
757
- const r = Number.parseInt(color.slice(1, 3), 16);
758
- const g = Number.parseInt(color.slice(3, 5), 16);
759
- const b = Number.parseInt(color.slice(5, 7), 16);
760
- return [isFg ? 38 : 48, 2, r, g, b];
761
- }
762
- const ansi256Match = ansi256Regex.exec(color);
763
- if (ansi256Match) {
764
- return [isFg ? 38 : 48, 5, Number(ansi256Match[1])];
765
- }
766
- const rgbMatch = rgbRegex.exec(color);
767
- if (rgbMatch) {
768
- return [isFg ? 38 : 48, 2, Number(rgbMatch[1]), Number(rgbMatch[2]), Number(rgbMatch[3])];
769
- }
770
- return [];
771
- };
772
- const ansi256ToColorName = (index) => {
773
- const standardNames = ["black", "red", "green", "yellow", "blue", "magenta", "cyan", "white"];
774
- if (index >= 0 && index <= 7) {
775
- return standardNames[index];
776
- }
777
- return `ansi256(${index})`;
778
- };
779
-
780
- const createSgrState = () => {
781
- return {
782
- bgColor: void 0,
783
- fgColor: void 0,
784
- formatFlags: 0,
785
- link: void 0
786
- };
787
- };
788
- const applySgrParams = (state, parameterString) => {
789
- if (parameterString.length === 0) {
790
- return createSgrState();
791
- }
792
- const normalizedParams = parameterString.includes(":") ? parameterString.replaceAll(":", ";") : parameterString;
793
- const params = normalizedParams.split(";").filter((s) => s.length > 0).map(Number);
794
- let { bgColor, fgColor, formatFlags, link } = state;
795
- let index = 0;
796
- while (index < params.length) {
797
- const code = params[index];
798
- switch (code) {
799
- case 0: {
800
- formatFlags = 0;
801
- fgColor = void 0;
802
- bgColor = void 0;
803
- link = void 0;
804
- break;
805
- }
806
- case 1: {
807
- formatFlags |= BOLD_MASK;
808
- break;
809
- }
810
- case 2: {
811
- formatFlags |= DIM_MASK;
812
- break;
813
- }
814
- case 3: {
815
- formatFlags |= ITALIC_MASK;
816
- break;
817
- }
818
- case 4: {
819
- formatFlags |= UNDERLINE_MASK;
820
- break;
821
- }
822
- case 7: {
823
- formatFlags |= INVERSE_MASK;
824
- break;
825
- }
826
- case 8: {
827
- formatFlags |= HIDDEN_MASK;
828
- break;
829
- }
830
- case 9: {
831
- formatFlags |= STRIKETHROUGH_MASK;
832
- break;
833
- }
834
- // Reset individual attributes
835
- case 22: {
836
- formatFlags &= -4;
837
- break;
838
- }
839
- case 23: {
840
- formatFlags &= ~ITALIC_MASK;
841
- break;
842
- }
843
- case 24: {
844
- formatFlags &= ~UNDERLINE_MASK;
845
- break;
846
- }
847
- case 27: {
848
- formatFlags &= ~INVERSE_MASK;
849
- break;
850
- }
851
- case 28: {
852
- formatFlags &= ~HIDDEN_MASK;
853
- break;
854
- }
855
- case 29: {
856
- formatFlags &= ~STRIKETHROUGH_MASK;
857
- break;
858
- }
859
- // Standard foreground colors (30-37)
860
- case 30:
861
- case 31:
862
- case 32:
863
- case 33:
864
- case 34:
865
- case 35:
866
- case 36:
867
- case 37: {
868
- fgColor = ansi256ToColorName(code - 30);
869
- break;
870
- }
871
- // Extended foreground: 256-color or RGB
872
- case 38: {
873
- if (params[index + 1] === 5 && params[index + 2] !== void 0) {
874
- fgColor = ansi256ToColorName(params[index + 2]);
875
- index += 2;
876
- } else if (params[index + 1] === 2 && index + 4 < params.length) {
877
- fgColor = `rgb(${params[index + 2]}, ${params[index + 3]}, ${params[index + 4]})`;
878
- index += 4;
879
- }
880
- break;
881
- }
882
- // Default foreground
883
- case 39: {
884
- fgColor = void 0;
885
- break;
886
- }
887
- // Standard background colors (40-47)
888
- case 40:
889
- case 41:
890
- case 42:
891
- case 43:
892
- case 44:
893
- case 45:
894
- case 46:
895
- case 47: {
896
- bgColor = ansi256ToColorName(code - 40);
897
- break;
898
- }
899
- // Extended background: 256-color or RGB
900
- case 48: {
901
- if (params[index + 1] === 5 && params[index + 2] !== void 0) {
902
- bgColor = ansi256ToColorName(params[index + 2]);
903
- index += 2;
904
- } else if (params[index + 1] === 2 && index + 4 < params.length) {
905
- bgColor = `rgb(${params[index + 2]}, ${params[index + 3]}, ${params[index + 4]})`;
906
- index += 4;
907
- }
908
- break;
909
- }
910
- // Default background
911
- case 49: {
912
- bgColor = void 0;
913
- break;
914
- }
915
- // Bright foreground (90-97)
916
- case 90:
917
- case 91:
918
- case 92:
919
- case 93:
920
- case 94:
921
- case 95:
922
- case 96:
923
- case 97: {
924
- fgColor = `ansi256(${code - 90 + 8})`;
925
- break;
926
- }
927
- // Bright background (100-107)
928
- case 100:
929
- case 101:
930
- case 102:
931
- case 103:
932
- case 104:
933
- case 105:
934
- case 106:
935
- case 107: {
936
- bgColor = `ansi256(${code - 100 + 8})`;
937
- break;
938
- }
939
- }
940
- index++;
941
- }
942
- return { bgColor, fgColor, formatFlags, link };
943
- };
944
- const REGIONAL_INDICATOR_START = 127462;
945
- const REGIONAL_INDICATOR_END = 127487;
946
- const SKIN_TONE_START = 127995;
947
- const SKIN_TONE_END = 127999;
948
- const ZWJ = 8205;
949
- const TAGS_BLOCK_START = 917504;
950
- const TAGS_BLOCK_END = 917631;
951
- const unicodeMarkRegex = new RegExp("\\p{Mark}", "u");
952
- const graphemeSegmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
953
- const isFullwidthGrapheme = (grapheme, codePoint) => {
954
- if (isFullwidthCodePoint(codePoint)) {
955
- return true;
956
- }
957
- if (grapheme.includes("️")) {
958
- return true;
959
- }
960
- if (codePoint >= REGIONAL_INDICATOR_START && codePoint <= REGIONAL_INDICATOR_END) {
961
- return true;
962
- }
963
- return false;
964
- };
965
- const oscHyperlinkRegex = /(?:\u001B\]|\u009D)8;([^;]*);(.*?)(?:\u001B\\|\u0007|\u009C)/;
966
- const parseOscHyperlink = (oscValue) => {
967
- const match = oscHyperlinkRegex.exec(oscValue);
968
- if (!match?.[2]) {
969
- return void 0;
970
- }
971
- if (match[2].length === 0) {
972
- return void 0;
973
- }
974
- const usesST = oscValue.endsWith("\x1B\\");
975
- return usesST ? `ST:${match[2]}` : match[2];
976
- };
977
- const processTextToken = (text, line, state) => {
978
- const segments = graphemeSegmenter.segment(text);
979
- const graphemes = [];
980
- for (const { segment } of segments) {
981
- graphemes.push(segment);
982
- }
983
- for (let i = 0; i < graphemes.length; i++) {
984
- let value = graphemes[i];
985
- if (value === " ") {
986
- for (let s = 0; s < 4; s++) {
987
- line.pushChar(" ", state.formatFlags, state.fgColor, state.bgColor, state.link);
988
- }
989
- continue;
990
- }
991
- if (value === "\b") {
992
- continue;
993
- }
994
- const firstCodePoint = value.codePointAt(0);
995
- if (!firstCodePoint) {
996
- continue;
997
- }
998
- if (firstCodePoint >= REGIONAL_INDICATOR_START && firstCodePoint <= REGIONAL_INDICATOR_END && i + 1 < graphemes.length) {
999
- const nextGrapheme = graphemes[i + 1];
1000
- const nextCodePoint = nextGrapheme.codePointAt(0);
1001
- if (nextCodePoint && nextCodePoint >= REGIONAL_INDICATOR_START && nextCodePoint <= REGIONAL_INDICATOR_END) {
1002
- value += nextGrapheme;
1003
- i++;
1004
- }
1005
- } else {
1006
- while (i + 1 < graphemes.length) {
1007
- const nextGrapheme = graphemes[i + 1];
1008
- const nextCodePoint = nextGrapheme.codePointAt(0);
1009
- if (!nextCodePoint) {
1010
- break;
1011
- }
1012
- const firstCharIsUnicodeMark = unicodeMarkRegex.test(String.fromCodePoint(nextCodePoint));
1013
- const isSkinToneModifier = nextCodePoint >= SKIN_TONE_START && nextCodePoint <= SKIN_TONE_END;
1014
- const isZeroWidthJoiner = nextCodePoint === ZWJ;
1015
- const isTagsBlock = nextCodePoint >= TAGS_BLOCK_START && nextCodePoint <= TAGS_BLOCK_END;
1016
- if (!firstCharIsUnicodeMark && !isSkinToneModifier && !isZeroWidthJoiner && !isTagsBlock) {
1017
- break;
1018
- }
1019
- value += nextGrapheme;
1020
- i++;
1021
- if (isZeroWidthJoiner && i + 1 < graphemes.length) {
1022
- value += graphemes[i + 1];
1023
- i++;
1024
- }
1025
- }
1026
- }
1027
- const fw = isFullwidthGrapheme(value, firstCodePoint);
1028
- const flags = fw ? state.formatFlags | FULL_WIDTH_MASK : state.formatFlags;
1029
- line.pushChar(value, flags, state.fgColor, state.bgColor, state.link);
1030
- }
1031
- };
1032
- const textToStyledLine = (text) => {
1033
- if (text.length === 0) {
1034
- return new StyledLine();
1035
- }
1036
- const tokens = tokenizeAnsi(text);
1037
- const line = new StyledLine();
1038
- let sgrState = createSgrState();
1039
- for (const token of tokens) {
1040
- switch (token.type) {
1041
- case "csi": {
1042
- if (token.finalCharacter === "m") {
1043
- sgrState = applySgrParams(sgrState, token.parameterString);
1044
- }
1045
- break;
1046
- }
1047
- case "osc": {
1048
- const link = parseOscHyperlink(token.value);
1049
- if (link !== void 0) {
1050
- sgrState = { ...sgrState, link };
1051
- } else if (token.value.includes("8;")) {
1052
- sgrState = { ...sgrState, link: void 0 };
1053
- }
1054
- break;
1055
- }
1056
- case "text": {
1057
- processTextToken(token.value, line, sgrState);
1058
- break;
1059
- }
1060
- }
1061
- }
1062
- return line;
1063
- };
1064
- const asciiPrintableRegex = /^[\u0020-\u007E]*$/;
1065
- const plainTextToStyledLine = (text) => {
1066
- if (text.length === 0) {
1067
- return new StyledLine();
1068
- }
1069
- const line = new StyledLine();
1070
- if (asciiPrintableRegex.test(text)) {
1071
- for (const element of text) {
1072
- line.pushChar(element, 0);
1073
- }
1074
- return line;
1075
- }
1076
- processTextToken(text, line, createSgrState());
1077
- return line;
1078
- };
1079
-
1080
- const cache = new DataLimitedLruMap(1e4, 1e6);
1081
- const widthCache = /* @__PURE__ */ new Map();
1082
- const styledLineCache = new DataLimitedLruMap(1e4, 1e6);
1083
- let styledLineCacheEnabled = true;
1084
- let currentStringWidth = getStringWidth;
1085
- const setEnableStyledLineCache = (enabled) => {
1086
- styledLineCacheEnabled = enabled;
1087
- if (!enabled) {
1088
- styledLineCache.clear();
1089
- }
1090
- };
1091
- const clearStyledLineCache = () => {
1092
- styledLineCache.clear();
1093
- };
1094
- const setStringWidthFunction = (function_) => {
1095
- currentStringWidth = function_;
1096
- clearStringWidthCache();
1097
- };
1098
- const clearStringWidthCache = () => {
1099
- cache.clear();
1100
- widthCache.clear();
1101
- styledLineCache.clear();
1102
- };
1103
- const inkCharacterWidth = (text) => {
1104
- const cached = widthCache.get(text);
1105
- if (cached !== void 0) {
1106
- return cached;
1107
- }
1108
- let calculatedWidth;
1109
- try {
1110
- calculatedWidth = currentStringWidth(text);
1111
- } catch {
1112
- calculatedWidth = 1;
1113
- }
1114
- widthCache.set(text, calculatedWidth);
1115
- return calculatedWidth;
1116
- };
1117
- const safeGetStringWidth = (text) => {
1118
- try {
1119
- return currentStringWidth(text);
1120
- } catch {
1121
- return 1;
1122
- }
1123
- };
1124
- const measureText = (text) => {
1125
- if (text.length === 0) {
1126
- return {
1127
- height: 0,
1128
- width: 0
1129
- };
1130
- }
1131
- const cachedDimensions = cache.get(text);
1132
- if (cachedDimensions) {
1133
- return cachedDimensions;
1134
- }
1135
- const lines = text.split("\n");
1136
- const width = Math.max(...lines.map((line) => safeGetStringWidth(line)));
1137
- const height = lines.length;
1138
- const dimensions = { height, width };
1139
- cache.set(text, dimensions);
1140
- return dimensions;
1141
- };
1142
- const toStyledLine = (text) => {
1143
- if (styledLineCacheEnabled) {
1144
- const cached = styledLineCache.get(text);
1145
- if (cached !== void 0) {
1146
- return cached;
1147
- }
1148
- }
1149
- const line = textToStyledLine(text);
1150
- if (styledLineCacheEnabled) {
1151
- styledLineCache.set(text, line);
1152
- }
1153
- return line;
1154
- };
1155
- const styledLineWidth = (line) => {
1156
- let length = 0;
1157
- for (let i = 0; i < line.length; i++) {
1158
- length += inkCharacterWidth(line.getValue(i));
1159
- }
1160
- return length;
1161
- };
1162
- const splitStyledLineByNewline = (line) => {
1163
- if (line.length === 0) {
1164
- return [new StyledLine()];
1165
- }
1166
- const lines = [];
1167
- let start = 0;
1168
- for (let i = 0; i < line.length; i++) {
1169
- if (line.getValue(i) === "\n") {
1170
- lines.push(i > start ? line.slice(start, i) : new StyledLine());
1171
- start = i + 1;
1172
- }
1173
- }
1174
- lines.push(start < line.length ? line.slice(start) : new StyledLine());
1175
- return lines;
1176
- };
1177
- const measureStyledLine = (line) => {
1178
- if (line.length === 0) {
1179
- return { height: 0, width: 0 };
1180
- }
1181
- const lines = splitStyledLineByNewline(line);
1182
- let maxWidth = 0;
1183
- for (const l of lines) {
1184
- maxWidth = Math.max(maxWidth, styledLineWidth(l));
1185
- }
1186
- return { height: lines.length, width: maxWidth };
1187
- };
1188
-
1189
- export { BOLD_MASK as B, DIM_MASK as D, FULL_WIDTH_MASK as F, HIDDEN_MASK as H, ITALIC_MASK as I, StyledLine as S, UNDERLINE_MASK as U, clearStyledLineCache as a, setStringWidthFunction as b, clearStringWidthCache as c, styledLineWidth as d, INVERSE_MASK as e, STRIKETHROUGH_MASK as f, colorToSgrParams as g, colorToAnsi256 as h, inkCharacterWidth as i, textToStyledLine as j, measureStyledLine as k, splitStyledLineByNewline as l, measureText as m, plainTextToStyledLine as p, setEnableStyledLineCache as s, toStyledLine as t };