@visulima/tui 1.0.0-alpha.23 → 1.0.0-alpha.24

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 (307) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +17 -0
  3. package/dist/components/accordion.js +1 -1
  4. package/dist/components/alert.js +1 -1
  5. package/dist/components/animate-presence.js +1 -1
  6. package/dist/components/approval-prompt.js +1 -1
  7. package/dist/components/area-chart.js +1 -1
  8. package/dist/components/badge.js +1 -1
  9. package/dist/components/bar-chart.js +1 -1
  10. package/dist/components/big-text.js +1 -1
  11. package/dist/components/blink-dot.js +1 -1
  12. package/dist/components/box.d.ts +1 -1
  13. package/dist/components/breadcrumb.js +1 -1
  14. package/dist/components/button.js +1 -1
  15. package/dist/components/calendar.js +1 -1
  16. package/dist/components/canvas.d.ts +1 -1
  17. package/dist/components/canvas.js +1 -1
  18. package/dist/components/card.js +1 -1
  19. package/dist/components/checkbox.js +1 -1
  20. package/dist/components/code.js +2 -2
  21. package/dist/components/collapsible.js +1 -1
  22. package/dist/components/command-block.js +4 -4
  23. package/dist/components/command-palette.js +1 -1
  24. package/dist/components/confirm-dialog.js +1 -1
  25. package/dist/components/confirm-input.js +1 -1
  26. package/dist/components/console-overlay.js +1 -1
  27. package/dist/components/content-switcher.js +1 -1
  28. package/dist/components/controlled-scroll-view.d.ts +1 -1
  29. package/dist/components/controlled-scroll-view.js +1 -1
  30. package/dist/components/cursor.d.ts +1 -1
  31. package/dist/components/cursor.js +1 -1
  32. package/dist/components/date-picker.js +1 -1
  33. package/dist/components/definition-list.js +1 -1
  34. package/dist/components/dialog.d.ts +1 -1
  35. package/dist/components/dialog.js +1 -1
  36. package/dist/components/diff-view.js +1 -1
  37. package/dist/components/divider.js +1 -1
  38. package/dist/components/file-picker-entry.js +1 -1
  39. package/dist/components/form.js +1 -1
  40. package/dist/components/gauge.js +1 -1
  41. package/dist/components/gradient.js +1 -1
  42. package/dist/components/heading.js +1 -1
  43. package/dist/components/heatmap.js +1 -1
  44. package/dist/components/help.js +1 -1
  45. package/dist/components/histogram.js +1 -1
  46. package/dist/components/kbd.js +1 -1
  47. package/dist/components/line-chart.js +1 -1
  48. package/dist/components/link.js +1 -1
  49. package/dist/components/loading-indicator.js +1 -1
  50. package/dist/components/markdown.js +1 -1
  51. package/dist/components/masked-input.js +1 -1
  52. package/dist/components/menu.js +1 -1
  53. package/dist/components/message-bubble.js +1 -1
  54. package/dist/components/model-badge.js +1 -1
  55. package/dist/components/multi-select.js +1 -1
  56. package/dist/components/newline.js +2 -2
  57. package/dist/components/operation-tree.js +1 -1
  58. package/dist/components/option-list.js +1 -1
  59. package/dist/components/ordered-list.js +1 -1
  60. package/dist/components/paginator.js +1 -1
  61. package/dist/components/paragraph.js +1 -1
  62. package/dist/components/placeholder.js +1 -1
  63. package/dist/components/progress-bar.js +1 -1
  64. package/dist/components/radio-group.js +1 -1
  65. package/dist/components/scatter-plot.js +1 -1
  66. package/dist/components/scroll-bar-box.d.ts +1 -1
  67. package/dist/components/scroll-bar-box.js +1 -1
  68. package/dist/components/scroll-bar.d.ts +1 -1
  69. package/dist/components/scroll-bar.js +1 -1
  70. package/dist/components/scroll-list.d.ts +1 -1
  71. package/dist/components/scroll-list.js +1 -1
  72. package/dist/components/scroll-view.d.ts +1 -1
  73. package/dist/components/scroll-view.js +1 -1
  74. package/dist/components/search-input.js +1 -1
  75. package/dist/components/select-input-indicator.js +1 -1
  76. package/dist/components/select-input-item.js +1 -1
  77. package/dist/components/select-input.js +1 -1
  78. package/dist/components/shimmer-text.js +1 -1
  79. package/dist/components/slider.js +1 -1
  80. package/dist/components/spacer.js +1 -1
  81. package/dist/components/sparkline.js +1 -1
  82. package/dist/components/spinner.js +1 -1
  83. package/dist/components/static-render.d.ts +1 -1
  84. package/dist/components/static-render.js +1 -1
  85. package/dist/components/static.js +1 -1
  86. package/dist/components/status-line.js +1 -1
  87. package/dist/components/status-message.js +1 -1
  88. package/dist/components/stepper.js +1 -1
  89. package/dist/components/stopwatch.js +1 -1
  90. package/dist/components/streaming-text.js +1 -1
  91. package/dist/components/switch.js +1 -1
  92. package/dist/components/tab.js +1 -1
  93. package/dist/components/table.js +1 -1
  94. package/dist/components/tabs.js +1 -1
  95. package/dist/components/tag.js +1 -1
  96. package/dist/components/text-input.js +1 -1
  97. package/dist/components/text.js +1 -1
  98. package/dist/components/textarea.js +2 -2
  99. package/dist/components/timer.js +1 -1
  100. package/dist/components/toast.js +1 -1
  101. package/dist/components/tooltip.js +1 -1
  102. package/dist/components/transform.js +1 -1
  103. package/dist/components/transition.js +1 -1
  104. package/dist/components/tree-view-entry.d.ts +1 -1
  105. package/dist/components/tree-view-entry.js +1 -1
  106. package/dist/components/unordered-list.js +1 -1
  107. package/dist/core/index.js +1 -1
  108. package/dist/ink/hooks/use-animation.js +1 -1
  109. package/dist/ink/hooks/use-app.js +1 -1
  110. package/dist/ink/hooks/use-box-metrics.d.ts +1 -1
  111. package/dist/ink/hooks/use-box-metrics.js +1 -1
  112. package/dist/ink/hooks/use-clipboard.js +1 -1
  113. package/dist/ink/hooks/use-color-blindness.js +1 -1
  114. package/dist/ink/hooks/use-console-capture.js +1 -1
  115. package/dist/ink/hooks/use-cursor.js +1 -1
  116. package/dist/ink/hooks/use-focus-manager.js +1 -1
  117. package/dist/ink/hooks/use-focus.js +1 -1
  118. package/dist/ink/hooks/use-form.js +1 -1
  119. package/dist/ink/hooks/use-hotkey.js +1 -1
  120. package/dist/ink/hooks/use-input.js +2 -2
  121. package/dist/ink/hooks/use-interval.js +1 -1
  122. package/dist/ink/hooks/use-is-screen-reader-enabled.js +1 -1
  123. package/dist/ink/hooks/use-key-bindings.js +1 -1
  124. package/dist/ink/hooks/use-key-chord.js +1 -1
  125. package/dist/ink/hooks/use-linked-scroll.d.ts +1 -1
  126. package/dist/ink/hooks/use-linked-scroll.js +1 -1
  127. package/dist/ink/hooks/use-paste.js +1 -1
  128. package/dist/ink/hooks/use-persistent-state.d.ts +12 -3
  129. package/dist/ink/hooks/use-persistent-state.js +2 -2
  130. package/dist/ink/hooks/use-scroll-acceleration.js +1 -1
  131. package/dist/ink/hooks/use-scroll-input.js +1 -1
  132. package/dist/ink/hooks/use-stderr.js +1 -1
  133. package/dist/ink/hooks/use-stdin.js +1 -1
  134. package/dist/ink/hooks/use-stdout.js +1 -1
  135. package/dist/ink/hooks/use-stopwatch.js +1 -1
  136. package/dist/ink/hooks/use-terminal-palette.js +1 -1
  137. package/dist/ink/hooks/use-text-buffer.js +4 -4
  138. package/dist/ink/hooks/use-text-selection.d.ts +2 -2
  139. package/dist/ink/hooks/use-text-selection.js +1 -1
  140. package/dist/ink/hooks/use-timeout.js +1 -1
  141. package/dist/ink/hooks/use-timer.js +1 -1
  142. package/dist/ink/hooks/use-window-size.js +1 -1
  143. package/dist/ink/index.d.ts +17 -62
  144. package/dist/ink/index.js +1 -1
  145. package/dist/ink/mouse/use-element-position.d.ts +31 -0
  146. package/dist/ink/mouse/use-element-position.js +1 -0
  147. package/dist/ink/mouse/use-mouse-action.d.ts +5 -0
  148. package/dist/ink/mouse/use-mouse-action.js +1 -0
  149. package/dist/ink/mouse/use-mouse-position.d.ts +5 -0
  150. package/dist/ink/mouse/use-mouse-position.js +1 -0
  151. package/dist/ink/mouse/use-mouse.d.ts +5 -0
  152. package/dist/ink/mouse/use-mouse.js +1 -0
  153. package/dist/ink/mouse/use-on-mouse-click.d.ts +16 -0
  154. package/dist/ink/mouse/use-on-mouse-click.js +1 -0
  155. package/dist/ink/mouse/use-on-mouse-hover.d.ts +10 -0
  156. package/dist/ink/mouse/use-on-mouse-hover.js +1 -0
  157. package/dist/ink/mouse/use-on-mouse-state.d.ts +13 -0
  158. package/dist/ink/mouse/use-on-mouse-state.js +1 -0
  159. package/dist/packem_chunks/devtools.js +1 -1
  160. package/dist/packem_shared/COLOR_BLINDNESS_COMPENSATION-Ilnoyeqc.js +1 -0
  161. package/dist/packem_shared/ControlledScrollView-BoN5Oi-p.js +1 -0
  162. package/dist/packem_shared/DevTools-k6uiVzqv.js +1 -0
  163. package/dist/packem_shared/FilePicker-BLS9nOPz.js +1 -0
  164. package/dist/packem_shared/FocusContext-C2Sosxa4.js +1 -0
  165. package/dist/packem_shared/Fullscreen-BRhuBLBh.js +1 -0
  166. package/dist/packem_shared/IMECompositionBuffer-VhC9HRCv.js +1 -0
  167. package/dist/packem_shared/InputParser-CtwkCbrQ.js +2 -0
  168. package/dist/packem_shared/KEY-C--kOw41.js +1 -0
  169. package/dist/packem_shared/LayoutNode-LPYsuzBg.js +1 -0
  170. package/dist/packem_shared/MouseProvider-DUqQ3Eaa.js +1 -0
  171. package/dist/packem_shared/NAMED_COLORS-82DpREQV.js +1 -0
  172. package/dist/packem_shared/Range-BsVYNWtg.js +1 -0
  173. package/dist/packem_shared/Renderer-DsskdkUd.js +1 -0
  174. package/dist/packem_shared/ResizeObserver-aX8XOr2u.js +1 -0
  175. package/dist/packem_shared/ScrollBar-BKCK8jsb.js +1 -0
  176. package/dist/packem_shared/ScrollBarBox-CBhLo6eZ.js +1 -0
  177. package/dist/packem_shared/ScrollList-DyFyVs6I.js +1 -0
  178. package/dist/packem_shared/ScrollView-BEgrtSnt.js +1 -0
  179. package/dist/packem_shared/Static-DSzsElz4.js +1 -0
  180. package/dist/packem_shared/TreeNodeMap-cJlYqckB.js +1 -0
  181. package/dist/packem_shared/TreeView-BsvLCsf0.js +1 -0
  182. package/dist/packem_shared/TuiApp-BPL8v1i1.js +1 -0
  183. package/dist/packem_shared/TuiContext-BNmP0lMY.js +3 -0
  184. package/dist/packem_shared/ansi-parser-DlgLtOYO.js +1 -0
  185. package/dist/packem_shared/ansi-tokenizer-BU67A126.js +1 -0
  186. package/dist/packem_shared/braille-ch3O5D7I.js +1 -0
  187. package/dist/packem_shared/calculateScroll-D4Y_JR4H.js +1 -0
  188. package/dist/packem_shared/calculateScrollbarLayout--eUVRLw7.js +1 -0
  189. package/dist/packem_shared/clearOsc52-BUpnQOav.js +1 -0
  190. package/dist/packem_shared/clearStringWidthCache-DKFjfJuB.js +1 -0
  191. package/dist/packem_shared/colorize-DU4YZkp3.js +1 -0
  192. package/dist/packem_shared/controlled-scroll-view-t55HU9L8.js +1 -0
  193. package/dist/packem_shared/createInlineLoop-BT40Wpmx.js +2 -0
  194. package/dist/packem_shared/createScreen-DoYpyL0V.js +3 -0
  195. package/dist/packem_shared/dom-rphpG0kf.js +1 -0
  196. package/dist/packem_shared/{dom.d-C1IxuLJ9.d.ts → dom.d-B4kXbaVY.d.ts} +35 -0
  197. package/dist/packem_shared/format-time-fjoQHMxD.js +1 -0
  198. package/dist/packem_shared/{getPathToRoot-BuAM_kmj.js → getPathToRoot-PDJeqiEH.js} +1 -1
  199. package/dist/packem_shared/input-utils-BSWCb4F_.js +1 -0
  200. package/dist/packem_shared/isIntersecting-Bo2npvMR.js +1 -0
  201. package/dist/packem_shared/isTerminalPaletteQuerySupported-BYzmqq9-.js +1 -0
  202. package/dist/packem_shared/kittyFlags-g8ALyoCU.js +1 -0
  203. package/dist/packem_shared/line-chart-C7CUrvVs.js +1 -0
  204. package/dist/packem_shared/load-native-root-binding-DDikxNox.js +1 -0
  205. package/dist/packem_shared/measure-element-Cs7_proT.js +2 -0
  206. package/dist/packem_shared/measure-text-B7juNq4Y.js +3 -0
  207. package/dist/packem_shared/mouse-context.d-BfL9xGk_.d.ts +30 -0
  208. package/dist/packem_shared/parseSgrMouse-bUrqPrh-.js +1 -0
  209. package/dist/packem_shared/processLayout-tAee0ytT.js +1 -0
  210. package/dist/packem_shared/reconciler-ClpU7Y-V.js +1 -0
  211. package/dist/packem_shared/reconciler-DhUGYWCr.js +1 -0
  212. package/dist/packem_shared/render-DFZ8NHlG.js +1 -0
  213. package/dist/packem_shared/render-v2x7ZRzT.js +24 -0
  214. package/dist/packem_shared/{render.d-DuyG0zip.d.ts → render.d-CBnYBDk2.d.ts} +1 -1
  215. package/dist/packem_shared/renderToString-C2YmVNLG.js +4 -0
  216. package/dist/packem_shared/renderToString-L_bpw4OQ.js +2 -0
  217. package/dist/packem_shared/renderTreeToBuffer-C8lS0lJ2.js +2 -0
  218. package/dist/packem_shared/renderer-COXHo5Xk.js +17 -0
  219. package/dist/packem_shared/{selection.d-Dbha5bMS.d.ts → selection.d-CI3_p8wg.d.ts} +1 -1
  220. package/dist/packem_shared/squashTextNodesWithMap-BmUSBPfc.js +1 -0
  221. package/dist/packem_shared/stderr-context-Bvnik0hL.js +1 -0
  222. package/dist/packem_shared/stdin-context-88AhuztD.js +1 -0
  223. package/dist/packem_shared/text-width-e49vlbQH.js +2 -0
  224. package/dist/packem_shared/token-to-elements-D6J6-P2A.js +1 -0
  225. package/dist/packem_shared/treeViewTheme-Dq3ekRAC.js +1 -0
  226. package/dist/packem_shared/useTreeView-D5ifGwG3.js +1 -0
  227. package/dist/packem_shared/useTreeViewState-BiTJakkh.js +1 -0
  228. package/dist/packem_shared/utils-Bup8lyK8.js +1 -0
  229. package/dist/packem_shared/waitFor-CTAki32d.js +4 -0
  230. package/dist/packem_shared/wrapOrTruncateStyledLine-46W8bTtv.js +3 -0
  231. package/dist/react/index.js +1 -1
  232. package/dist/testing/index.d.ts +2 -2
  233. package/dist/testing/index.js +1 -1
  234. package/index.js +691 -539
  235. package/package.json +48 -23
  236. package/dist/packem_shared/COLOR_BLINDNESS_SIMULATION-DqErf7XX.js +0 -1
  237. package/dist/packem_shared/ControlledScrollView-CIc-x1Cx.js +0 -1
  238. package/dist/packem_shared/DevTools-ClAYpMVI.js +0 -1
  239. package/dist/packem_shared/FilePicker-tYj_CIau.js +0 -1
  240. package/dist/packem_shared/FocusContext-Xy0cwJpO.js +0 -1
  241. package/dist/packem_shared/Fullscreen-CxLd1-Zu.js +0 -1
  242. package/dist/packem_shared/IMECompositionBuffer-C89PhiOu.js +0 -1
  243. package/dist/packem_shared/InputParser-B_qZcN3r.js +0 -2
  244. package/dist/packem_shared/KEY-Bk8B-3h_.js +0 -1
  245. package/dist/packem_shared/LayoutNode-B8zej4dm.js +0 -1
  246. package/dist/packem_shared/MouseProvider-PnIUKURs.js +0 -1
  247. package/dist/packem_shared/NAMED_COLORS-B9fJsYdg.js +0 -1
  248. package/dist/packem_shared/Renderer-DJXooAsp.js +0 -1
  249. package/dist/packem_shared/ResizeObserverEntry-Dq0dk8Kq.js +0 -1
  250. package/dist/packem_shared/ScrollBar-U_37hlIT.js +0 -1
  251. package/dist/packem_shared/ScrollBarBox-DwiCxilX.js +0 -1
  252. package/dist/packem_shared/ScrollList-C7nZ9ufK.js +0 -1
  253. package/dist/packem_shared/ScrollView-DKZ8OM-m.js +0 -1
  254. package/dist/packem_shared/Static-DLynr5pn.js +0 -1
  255. package/dist/packem_shared/TreeNodeMap-CspqSCpb.js +0 -1
  256. package/dist/packem_shared/TreeView-C0Iv3et8.js +0 -1
  257. package/dist/packem_shared/TuiApp-BVDXP0Cv.js +0 -1
  258. package/dist/packem_shared/TuiContext-BoJvG3NN.js +0 -3
  259. package/dist/packem_shared/ansi-parser-B6uXaq65.js +0 -1
  260. package/dist/packem_shared/ansi-tokenizer-DqX9nJuk.js +0 -1
  261. package/dist/packem_shared/braille-BBjIoaN0.js +0 -1
  262. package/dist/packem_shared/colorize-DbTZMrJO.js +0 -1
  263. package/dist/packem_shared/comparePoints-C3NJirbh.js +0 -1
  264. package/dist/packem_shared/controlled-scroll-view-CcUS50jx.js +0 -1
  265. package/dist/packem_shared/createInlineLoop-DRNZ7jqH.js +0 -2
  266. package/dist/packem_shared/createScreen-CrLrxA6t.js +0 -3
  267. package/dist/packem_shared/dom-CXB-19sK.js +0 -1
  268. package/dist/packem_shared/format-time-C7Q-hQZq.js +0 -1
  269. package/dist/packem_shared/getScrollHeight-ClEOyLHH.js +0 -1
  270. package/dist/packem_shared/input-utils-fAxzSlNh.js +0 -1
  271. package/dist/packem_shared/isIntersecting-B3KbKTmu.js +0 -1
  272. package/dist/packem_shared/isOsc52Supported-DKK7Uee6.js +0 -1
  273. package/dist/packem_shared/isTerminalPaletteQuerySupported-Dn2hFAZ_.js +0 -1
  274. package/dist/packem_shared/kittyFlags-C3rZLbcK.js +0 -1
  275. package/dist/packem_shared/layout-BMo200nF.js +0 -2
  276. package/dist/packem_shared/line-chart-kf7uhR0K.js +0 -1
  277. package/dist/packem_shared/measure-text-Ce2widM1.js +0 -3
  278. package/dist/packem_shared/measureElement-BTtTFZg4.js +0 -1
  279. package/dist/packem_shared/parseSgrMouse-Ccj70ijb.js +0 -1
  280. package/dist/packem_shared/processLayout-FEKj_mWu.js +0 -1
  281. package/dist/packem_shared/reconciler-DIfG72R9.js +0 -1
  282. package/dist/packem_shared/reconciler-DYE5h4K4.js +0 -1
  283. package/dist/packem_shared/render-BRR1ESvR.js +0 -26
  284. package/dist/packem_shared/render-Dh7HMhK1.js +0 -1
  285. package/dist/packem_shared/renderToString-BbQiRHrd.js +0 -2
  286. package/dist/packem_shared/renderToString-vEQyGmv6.js +0 -4
  287. package/dist/packem_shared/renderTreeToBuffer-CZilzyhN.js +0 -2
  288. package/dist/packem_shared/renderer-maLLQcut.js +0 -17
  289. package/dist/packem_shared/setEnableStyledLineCache-DSbMbENc.js +0 -1
  290. package/dist/packem_shared/squashTextNodesWithMap-DCdi3SZ2.js +0 -1
  291. package/dist/packem_shared/stderr-context-BzEaUICS.js +0 -1
  292. package/dist/packem_shared/stdin-context-BTaaFagk.js +0 -1
  293. package/dist/packem_shared/text-width-BU2eeTWn.js +0 -2
  294. package/dist/packem_shared/token-to-elements-BAZpNZsu.js +0 -1
  295. package/dist/packem_shared/treeViewTheme-1RIZyB4M.js +0 -1
  296. package/dist/packem_shared/useElementDimensions-qJ_WXFZ9.js +0 -1
  297. package/dist/packem_shared/useMouseAction-2dRfU1vE.js +0 -1
  298. package/dist/packem_shared/useMouseContext-C746G7kY.js +0 -1
  299. package/dist/packem_shared/useMousePosition-BTWfV4JK.js +0 -1
  300. package/dist/packem_shared/useOnMouseClick-nY8xLZmt.js +0 -1
  301. package/dist/packem_shared/useOnMouseHover-D3DczIol.js +0 -1
  302. package/dist/packem_shared/useOnMouseState-cRK8QvzD.js +0 -1
  303. package/dist/packem_shared/useTreeView-BoMMeRPq.js +0 -1
  304. package/dist/packem_shared/useTreeViewState-CRPCUWrb.js +0 -1
  305. package/dist/packem_shared/utils-CoviI5Vm.js +0 -1
  306. package/dist/packem_shared/waitFor-Dj5zfL5s.js +0 -4
  307. package/dist/packem_shared/wrapOrTruncateStyledLine-C5rcIrNb.js +0 -3
@@ -1 +1 @@
1
- var i=Object.defineProperty;var s=(e,r)=>i(e,"name",{value:r,configurable:!0});import{useRef as u,useState as d,useEffect as S,useCallback as k}from"react";var p=Object.defineProperty,n=s((e,r)=>p(e,"name",{value:r,configurable:!0}),"t");const m=n(()=>{const e=new Set;let r=!1;return{useLinkedScroll:n(()=>{const l=u(null),[,a]=d(0),o={ref:l,setOffset:n(()=>{a(t=>t+1)},"setOffset")},c=u(o);return c.current=o,S(()=>{const{current:t}=c;return e.add(t),()=>{e.delete(t)}},[]),{onScroll:k(t=>{if(!r){r=!0;try{for(const f of e)f.ref!==l&&f.ref.current?.scrollTo(t)}finally{r=!1}}},[]),ref:l}},"useLinkedScroll")}},"createLinkedScrollGroup");export{m as createLinkedScrollGroup,m as default};
1
+ import{useRef as s,useState as u,useEffect as a,useCallback as d}from"react";const S=()=>{const r=new Set;let t=!1;return{useLinkedScroll:()=>{const l=s(null),[,c]=u(0),f={ref:l,setOffset:()=>{c(e=>e+1)}},n=s(f);return n.current=f,a(()=>{const{current:e}=n;return r.add(e),()=>{r.delete(e)}},[]),{onScroll:d(e=>{if(!t){t=!0;try{for(const o of r)o.ref!==l&&o.ref.current?.scrollTo(e)}finally{t=!1}}},[]),ref:l}}}};export{S as createLinkedScrollGroup,S as default};
@@ -1 +1 @@
1
- var l=Object.defineProperty;var n=(t,e)=>l(t,"name",{value:e,configurable:!0});import{useEffectEvent as v,useEffect as f}from"react";import{L as d}from"../../packem_shared/reconciler-DYE5h4K4.js";import{useStdinContext as m}from"./use-stdin.js";var p=Object.defineProperty,o=n((t,e)=>p(t,"name",{value:e,configurable:!0}),"n");const x=o((t,e={})=>{const{internal_eventEmitter:s,setBracketedPasteMode:r,setRawMode:a}=m(),c=v(t);f(()=>{if(e.isActive!==!1)return a(!0),r(!0),()=>{a(!1),r(!1)}},[e.isActive,a,r]),f(()=>{if(e.isActive===!1)return;const i=o(u=>{d.discreteUpdates(()=>{c(u)})},"handlePaste");return s.on("paste",i),()=>{s.removeListener("paste",i)}},[e.isActive,s])},"usePaste");export{x as default,x as usePaste};
1
+ import{useEffectEvent as c,useEffect as a}from"react";import{j as u}from"../../packem_shared/reconciler-DhUGYWCr.js";import{useStdinContext as m}from"./use-stdin.js";const l=(o,e={})=>{const{internal_eventEmitter:t,setBracketedPasteMode:s,setRawMode:r}=m(),f=c(o);a(()=>{if(e.isActive!==!1)return r(!0),s(!0),()=>{r(!1),s(!1)}},[e.isActive,r,s]),a(()=>{if(e.isActive===!1)return;const i=n=>{u.discreteUpdates(()=>{f(n)})};return t.on("paste",i),()=>{t.removeListener("paste",i)}},[e.isActive,t])};export{l as default,l as usePaste};
@@ -34,12 +34,22 @@ declare const createMemoryStorage: () => PersistentStorage;
34
34
  * updates use a temp-file + rename to avoid partial writes if the process
35
35
  * crashes mid-write. Errors are forwarded to `process.stderr.write` so they
36
36
  * are visible without crashing the UI.
37
+ *
38
+ * The namespace object is parsed from disk once (lazily) and kept in memory;
39
+ * subsequent reads/writes operate on the cached object instead of re-reading
40
+ * and re-parsing the whole file on every call.
37
41
  */
38
42
  declare const createFileStorage: (namespace: string) => PersistentStorage;
39
43
  /**
40
44
  * `useState` that persists its value through the configured `storage`
41
45
  * backend (file on disk by default). Behaves identically to `useState` at
42
- * the call-site; the writes happen synchronously after each update.
46
+ * the call-site.
47
+ *
48
+ * Persistence happens in a commit-phase effect, **not** inside the state
49
+ * updater — updaters must be pure (React may double-invoke them under
50
+ * StrictMode or discard them under concurrent rendering), so writing from
51
+ * inside one risked double or phantom disk writes. Writing after commit means
52
+ * only values that actually render are persisted.
43
53
  *
44
54
  * **Lifecycle note:** the storage backend (resolved from `options.storage`
45
55
  * or a fresh `createFileStorage(namespace)`) is captured once on mount and
@@ -49,8 +59,7 @@ declare const createFileStorage: (namespace: string) => PersistentStorage;
49
59
  * @param key Unique identifier within the backend namespace.
50
60
  * @param initialValue Value used when the backend has no entry for `key`.
51
61
  * @param options Optional storage backend + namespace overrides.
52
- * @returns A `[value, setValue]` tuple. Writes flush synchronously after
53
- * the React state update.
62
+ * @returns A `[value, setValue]` tuple. Writes flush in a post-commit effect.
54
63
  */
55
64
  declare const usePersistentState: <T>(key: string, initialValue: T, options?: UsePersistentStateOptions) => readonly [T, (value: T | ((previous: T) => T)) => void];
56
65
  export { PersistentStorage, UsePersistentStateOptions, createFileStorage, createMemoryStorage, usePersistentState as default, usePersistentState };
@@ -1,2 +1,2 @@
1
- var y=Object.defineProperty;var l=(t,e)=>y(t,"name",{value:e,configurable:!0});import{createRequire as S}from"node:module";import{useRef as E,useState as N,useCallback as O}from"react";const _=S(import.meta.url),u=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,f=l(t=>{if(typeof u<"u"&&u.versions&&u.versions.node){const[e,n]=u.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return u.getBuiltinModule(t)}return _(t)},"__cjs_getBuiltinModule"),{readFileSync:h,mkdirSync:v,writeFileSync:w,renameSync:j}=f("node:fs"),{homedir:b}=f("node:os"),m=f("node:path"),g=u;var $=Object.defineProperty,o=l((t,e)=>$(t,"name",{value:e,configurable:!0}),"s");const q=o(()=>{const t=new Map;return{read:o(e=>t.get(e),"read"),write:o((e,n)=>{t.set(e,n)},"write")}},"createMemoryStorage"),M=o(t=>{const e=m.join(b(),".cache","visulima-tui",`${t}.json`),n=o((s,r)=>{const d=r instanceof Error?r.message:String(r);g.stderr.write(`[visulima/tui] persistent-state ${s} failed: ${d}
2
- `)},"reportError"),i=o(()=>{try{const s=h(e,"utf8"),r=JSON.parse(s);return r&&typeof r=="object"?r:{}}catch(s){const r=s?.code;return r!=="ENOENT"&&r!=="EACCES"&&n("read",s),{}}},"load");return{read:o(s=>i()[s],"read"),write:o((s,r)=>{const d=m.dirname(e),c=`${e}.tmp.${g.pid}`;try{v(d,{recursive:!0});const a=i();a[s]=r,w(c,JSON.stringify(a,null,2),{encoding:"utf8",flag:"w"}),j(c,e)}catch(a){n("write",a)}},"write")}},"createFileStorage"),F=o((t,e,n)=>{const i=t.read(e);if(i===void 0)return n;try{return JSON.parse(i)}catch{return n}},"readInitial"),C=o((t,e,n)=>{const i=E(n?.storage??M(n?.namespace??"tui")),[s,r]=N(()=>F(i.current,t,e)),d=O(c=>{r(a=>{const p=typeof c=="function"?c(a):c;try{i.current.write(t,JSON.stringify(p))}catch{}return p})},[t]);return[s,d]},"usePersistentState");export{M as createFileStorage,q as createMemoryStorage,C as default,C as usePersistentState};
1
+ import{createRequire as g}from"node:module";import{useRef as m,useState as N,useEffect as b,useCallback as E}from"react";const S=g(import.meta.url),a=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,l=e=>{if(typeof a<"u"&&a.versions&&a.versions.node){const[r,s]=a.versions.node.split(".").map(Number);if(r>22||r===22&&s>=3||r===20&&s>=16)return a.getBuiltinModule(e)}return S(e)},{mkdirSync:v,writeFileSync:h,renameSync:_,readFileSync:w}=l("node:fs"),{homedir:j}=l("node:os"),f=l("node:path"),p=a,q=()=>{const e=new Map;return{read:r=>e.get(r),write:(r,s)=>{e.set(r,s)}}},O=/[/\\]/,$=e=>{if(e===""||e==="."||e===".."||O.test(e)||e.includes("\0"))throw new Error(`[visulima/tui] usePersistentState: invalid namespace ${JSON.stringify(e)} — must not be empty or contain path separators.`)},k=e=>{$(e);const r=f.join(j(),".cache","visulima-tui",`${e}.json`);let s;const i=(t,n)=>{const o=n instanceof Error?n.message:String(n);p.stderr.write(`[visulima/tui] persistent-state ${t} failed: ${o}
2
+ `)},c=()=>{if(s!==void 0)return s;try{const t=w(r,"utf8"),n=JSON.parse(t);s=n&&typeof n=="object"?n:{}}catch(t){const n=t?.code;n!=="ENOENT"&&n!=="EACCES"&&i("read",t),s={}}return s};return{read:t=>c()[t],write:(t,n)=>{const o=f.dirname(r),u=`${r}.tmp.${p.pid}`,d=c();d[t]=n;try{v(o,{recursive:!0}),h(u,JSON.stringify(d,null,2),{encoding:"utf8",flag:"w"}),_(u,r)}catch(y){i("write",y)}}}},J=(e,r,s)=>{const i=e.read(r);if(i===void 0)return s;try{return JSON.parse(i)}catch{return s}},C=(e,r,s)=>{const i=m(void 0);i.current??=s?.storage??k(s?.namespace??"tui");const c=i.current,[t,n]=N(()=>J(c,e,r)),o=m(void 0);o.current??={key:e,value:t},b(()=>{if(!(o.current?.key===e&&Object.is(o.current.value,t)))try{c.write(e,JSON.stringify(t)),o.current={key:e,value:t}}catch{}},[e,t,c]);const u=E(d=>{n(d)},[]);return[t,u]};export{k as createFileStorage,q as createMemoryStorage,C as default,C as usePersistentState};
@@ -1 +1 @@
1
- var w=Object.defineProperty;var p=(t,e)=>w(t,"name",{value:e,configurable:!0});import{useState as A,useRef as n,useEffect as I,useCallback as R,useMemo as x}from"react";var C=Object.defineProperty,k=p((t,e)=>C(t,"name",{value:e,configurable:!0}),"p");const V=100,j=16,D=.5,P=k((t={})=>{const{acceleration:e=1.5,decayRate:h=.92,isActive:c=!0,maxVelocity:m=20,onScroll:b}=t,[M,f]=A(0),[u,S]=A(!1),r=n(0),y=n(0),d=n(!1),v=n(void 0),a=n(b);a.current=b,I(()=>{if(!c||!u)return;const o=k(()=>{if(d.current){d.current=!1;return}const s=r.current;if(Math.abs(s)<D){r.current=0,f(0),S(!1);return}r.current*=h;const l=Math.round(r.current);l!==0&&a.current?.(l),f(r.current)},"tick");return v.current=setInterval(o,j),()=>{v.current&&clearInterval(v.current)}},[c,u,h]);const g=R(o=>{if(!c){a.current?.(o==="down"?1:-1);return}const s=Date.now(),l=s-y.current,i=o==="down"?1:-1;y.current=s,l<V&&Math.sign(r.current)===i?r.current=Math.min(Math.abs(r.current*e),m)*i:r.current=i,f(r.current),S(!0),d.current=!0,a.current?.(i)},[c,e,m]);return x(()=>({handleScroll:g,isCoasting:u,velocity:M}),[g,u,M])},"useScrollAcceleration");export{P as default,P as useScrollAcceleration};
1
+ import{useState as y,useRef as e,useEffect as p,useCallback as C,useMemo as I}from"react";const R=100,x=16,A=.5,D=(g={})=>{const{acceleration:d=1.5,decayRate:h=.92,isActive:t=!0,maxVelocity:m=20,onScroll:v}=g,[M,l]=y(0),[n,S]=y(!1),r=e(0),b=e(0),i=e(!1),f=e(void 0),c=e(v);c.current=v,p(()=>{if(!t||!n)return;const u=()=>{if(i.current){i.current=!1;return}const a=r.current;if(Math.abs(a)<A){r.current=0,l(0),S(!1);return}r.current*=h;const s=Math.round(r.current);s!==0&&c.current?.(s),l(r.current)};return f.current=setInterval(u,x),()=>{f.current&&clearInterval(f.current)}},[t,n,h]);const w=C(u=>{if(!t){c.current?.(u==="down"?1:-1);return}const a=Date.now(),s=a-b.current,o=u==="down"?1:-1;b.current=a,s<R&&Math.sign(r.current)===o?r.current=Math.min(Math.abs(r.current*d),m)*o:r.current=o,l(r.current),S(!0),i.current=!0,c.current?.(o)},[t,d,m]);return I(()=>({handleScroll:w,isCoasting:n,velocity:M}),[w,n,M])};export{D as default,D as useScrollAcceleration};
@@ -1 +1 @@
1
- var a=Object.defineProperty;var l=(e,t)=>a(e,"name",{value:t,configurable:!0});import p from"./use-focus.js";import d from"./use-input.js";var h=Object.defineProperty,m=l((e,t)=>h(e,"name",{value:t,configurable:!0}),"u");const A=m(e=>{const{getViewportHeight:t,isActive:u=!0,scrollBy:o,scrollToBottom:f,scrollToTop:n,vimBindings:s=!1}=e,{isFocused:c}=p({isActive:u});return d((i,r)=>{if(r.upArrow){o(-1);return}if(r.downArrow){o(1);return}if(r.pageUp){o(-t());return}if(r.pageDown){o(t());return}if(r.home){n();return}if(r.end){f();return}if(r.ctrl&&i==="u"){o(-Math.floor(t()/2));return}if(r.ctrl&&i==="d"){o(Math.floor(t()/2));return}if(s){if(i==="k"){o(-1);return}if(i==="j"){o(1);return}if(i==="G"&&r.shift){f();return}if(i==="g"&&!r.shift){n();return}if(i==="u"&&!r.ctrl){o(-Math.floor(t()/2));return}i==="d"&&!r.ctrl&&o(Math.floor(t()/2))}},{isActive:u}),{isFocused:c}},"useScrollInput");export{A as default,A as useScrollInput};
1
+ import c from"./use-focus.js";import a from"./use-input.js";const h=u=>{const{getViewportHeight:e,isActive:i=!0,scrollBy:o,scrollToBottom:f,scrollToTop:n,vimBindings:s=!1}=u,{isFocused:l}=c({isActive:i});return a((t,r)=>{if(r.upArrow){o(-1);return}if(r.downArrow){o(1);return}if(r.pageUp){o(-e());return}if(r.pageDown){o(e());return}if(r.home){n();return}if(r.end){f();return}if(r.ctrl&&t==="u"){o(-Math.floor(e()/2));return}if(r.ctrl&&t==="d"){o(Math.floor(e()/2));return}if(s){if(t==="k"){o(-1);return}if(t==="j"){o(1);return}if(t==="G"&&r.shift){f();return}if(t==="g"&&!r.shift){n();return}if(t==="u"&&!r.ctrl){o(-Math.floor(e()/2));return}t==="d"&&!r.ctrl&&o(Math.floor(e()/2))}},{isActive:i}),{isFocused:l}};export{h as default,h as useScrollInput};
@@ -1 +1 @@
1
- var a=Object.defineProperty;var t=(e,r)=>a(e,"name",{value:r,configurable:!0});import{useContext as o}from"react";import{t as s}from"../../packem_shared/stderr-context-BzEaUICS.js";var u=Object.defineProperty,f=t((e,r)=>u(e,"name",{value:r,configurable:!0}),"t");const d=f(()=>o(s),"useStderr");export{d as default,d as useStderr};
1
+ import{useContext as t}from"react";import{t as o}from"../../packem_shared/stderr-context-Bvnik0hL.js";const s=()=>t(o);export{s as default,s as useStderr};
@@ -1 +1 @@
1
- var u=Object.defineProperty;var n=(t,e)=>u(t,"name",{value:e,configurable:!0});import{useContext as o}from"react";import{e as r}from"../../packem_shared/stdin-context-BTaaFagk.js";var a=Object.defineProperty,s=n((t,e)=>a(t,"name",{value:e,configurable:!0}),"t");const m=s(()=>o(r),"useStdin"),c=s(()=>o(r),"useStdinContext");export{m as default,m as useStdin,c as useStdinContext};
1
+ import{useContext as t}from"react";import{e}from"../../packem_shared/stdin-context-88AhuztD.js";const n=()=>t(e),r=()=>t(e);export{n as default,n as useStdin,r as useStdinContext};
@@ -1 +1 @@
1
- var r=Object.defineProperty;var o=(t,e)=>r(t,"name",{value:e,configurable:!0});import{useContext as a}from"react";import{t as u}from"../../packem_shared/stdout-context-BnblEPez.js";var s=Object.defineProperty,f=o((t,e)=>s(t,"name",{value:e,configurable:!0}),"t");const i=f(()=>a(u),"useStdout");export{i as default,i as useStdout};
1
+ import{useContext as t}from"react";import{t as o}from"../../packem_shared/stdout-context-BnblEPez.js";const r=()=>t(o);export{r as default,r as useStdout};
@@ -1 +1 @@
1
- var R=Object.defineProperty;var u=(e,t)=>R(e,"name",{value:t,configurable:!0});import{useState as f,useCallback as r,useRef as w}from"react";import y from"./use-animation.js";var j=Object.defineProperty,k=u((e,t)=>j(e,"name",{value:t,configurable:!0}),"i");function x(e){const{autoStart:t=!1,interval:p=1e3}=e??{},[o,a]=f(t),[m,l]=f([]),{reset:i,time:n}=y({interval:p,isActive:o}),v=r(()=>{a(!0)},[]),S=r(()=>{a(!1)},[]),g=r(()=>{a(s=>!s)},[]),b=r(()=>{a(!1),l([]),i()},[i]),c=w(n);c.current=n;const d=r(()=>{const{current:s}=c;return l(h=>[...h,s]),s},[]);return{elapsed:n,isRunning:o,lap:d,laps:m,reset:b,start:v,stop:S,toggle:g}}u(x,"d");k(x,"useStopwatch");export{x as default,x as useStopwatch};
1
+ import{useState as u,useCallback as t,useRef as b}from"react";import h from"./use-animation.js";function x(c){const{autoStart:i=!1,interval:f=1e3}=c??{},[a,e]=u(i),[p,n]=u([]),{reset:o,time:s}=h({interval:f,isActive:a}),m=t(()=>{e(!0)},[]),g=t(()=>{e(!1)},[]),d=t(()=>{e(r=>!r)},[]),v=t(()=>{e(!1),n([]),o()},[o]),l=b(s);l.current=s;const R=t(()=>{const{current:r}=l;return n(S=>[...S,r]),r},[]);return{elapsed:s,isRunning:a,lap:R,laps:p,reset:v,start:m,stop:g,toggle:d}}export{x as default,x as useStopwatch};
@@ -1 +1 @@
1
- var f=Object.defineProperty;var u=(e,t)=>f(e,"name",{value:t,configurable:!0});import{useState as l,useMemo as p,useEffect as c}from"react";import{isTerminalPaletteQuerySupported as d,queryTerminalPalette as y}from"../../packem_shared/isTerminalPaletteQuerySupported-Dn2hFAZ_.js";import{useStdinContext as P}from"./use-stdin.js";import S from"./use-stdout.js";var T=Object.defineProperty,v=u((e,t)=>T(e,"name",{value:t,configurable:!0}),"o");const q=v(()=>{const{stdin:e}=P(),{stdout:t}=S(),[s,i]=l(null),[n,o]=l(!0),r=p(()=>d(),[]);return c(()=>{if(!r||!e||!t){o(!1);return}let a=!1;return(async()=>{try{const m=await y(e,t,200);a||i(m)}catch{}finally{a||o(!1)}})(),()=>{a=!0}},[r,e,t]),{isLoading:n,isSupported:r,palette:s}},"useTerminalPalette");export{q as default,q as useTerminalPalette};
1
+ import{useState as o,useMemo as m,useEffect as f}from"react";import{isTerminalPaletteQuerySupported as p,queryTerminalPalette as c}from"../../packem_shared/isTerminalPaletteQuerySupported-BYzmqq9-.js";import{useStdinContext as d}from"./use-stdin.js";import y from"./use-stdout.js";const g=()=>{const{stdin:t}=d(),{stdout:e}=y(),[u,i]=o(null),[l,s]=o(!0),r=m(()=>p(),[]);return f(()=>{if(!r||!t||!e){s(!1);return}let a=!1;return(async()=>{try{const n=await c(t,e,200);a||i(n)}catch{}finally{a||s(!1)}})(),()=>{a=!0}},[r,t,e]),{isLoading:l,isSupported:r,palette:u}};export{g as default,g as useTerminalPalette};
@@ -1,4 +1,4 @@
1
- var _=Object.defineProperty;var Q=(o,c)=>_(o,"name",{value:c,configurable:!0});import{useState as z,useRef as b,useCallback as u,useMemo as U}from"react";var Y=Object.defineProperty,m=Q((o,c)=>Y(o,"name",{value:c,configurable:!0}),"p");const nn=300,en=100,ln=/\S+\s*$/,j=m(o=>{const c=o.split(`
2
- `);return c.length===0?[""]:c},"splitLines"),rn=m(o=>o.join(`
3
- `),"joinLines"),h=m(o=>({anchor:o.anchor,cursor:{...o.cursor},lines:[...o.lines]}),"snapOf"),L=m((o,c,i)=>i?{...o,anchor:o.anchor??o.cursor,cursor:c}:{...o,anchor:null,cursor:c},"withSelection"),X=m((o,c)=>c.line<o.line||c.line===o.line&&c.col<o.col?{end:o,start:c}:{end:c,start:o},"getSelectionRange"),T=m(o=>{if(!o.anchor)return null;const{end:c,start:i}=X(o.cursor,o.anchor),a=[...o.lines],d=a[i.line].slice(0,i.col),f=a[c.line].slice(c.col);return a.splice(i.line,c.line-i.line+1,d+f),{anchor:null,cursor:i,lines:a}},"deleteSelectionFromState"),M=m((o,c)=>{const i=T(o)??o,a=[...i.lines],{col:d,line:f}=i.cursor,v=a[f].slice(0,d),S=a[f].slice(d),t=j(c);if(t.length===1)return a[f]=v+t[0]+S,{anchor:null,cursor:{col:d+t[0].length,line:f},lines:a};const k=v+t[0],w=t.at(-1)+S,x=t.slice(1,-1);return a.splice(f,1,k,...x,w),{anchor:null,cursor:{col:t.at(-1).length,line:f+t.length-1},lines:a}},"insertIntoState"),tn=m((o="")=>{const[c,i]=z(()=>{const n=j(o);return{anchor:null,cursor:{col:n.at(-1).length,line:n.length-1},lines:n}}),a=b([]),d=b([]),f=b(0),v=b(c.cursor.col);v.current=c.cursor.col;const S=b(c);S.current=c;const t=u(n=>{const e=Date.now();e-f.current<nn&&a.current.length>0||(a.current.push(n),a.current.length>en&&a.current.shift()),d.current=[],f.current=e},[]),k=u(()=>S.current.anchor!==null,[]),w=u(()=>{const n=S.current;if(!n.anchor)return"";const{end:e,start:l}=X(n.cursor,n.anchor);if(l.line===e.line)return n.lines[l.line].slice(l.col,e.col);const r=[];r.push(n.lines[l.line].slice(l.col));for(let s=l.line+1;s<e.line;s++)r.push(n.lines[s]);return r.push(n.lines[e.line].slice(0,e.col)),r.join(`
4
- `)},[]),x=u(n=>{i(e=>(t(h(e)),M(e,n)))},[t]),B=u(()=>{i(n=>{t(h(n));const e=T(n)??n,l=[...e.lines],{col:r,line:s}=e.cursor,g=l[s].slice(0,r),p=l[s].slice(r);return l.splice(s,1,g,p),{anchor:null,cursor:{col:0,line:s+1},lines:l}})},[t]),C=u(()=>{i(n=>{if(n.anchor)return t(h(n)),T(n)??n;const{col:e,line:l}=n.cursor;if(e===0&&l===0)return n;t(h(n));const r=[...n.lines];if(e===0){const s=r[l-1],g=s.length;return r[l-1]=s+r[l],r.splice(l,1),{anchor:null,cursor:{col:g,line:l-1},lines:r}}return r[l]=r[l].slice(0,e-1)+r[l].slice(e),{anchor:null,cursor:{col:e-1,line:l},lines:r}})},[t]),E=u(()=>{i(n=>{if(n.anchor)return t(h(n)),T(n)??n;const{col:e,line:l}=n.cursor,r=n.lines[l];if(e===r.length&&l===n.lines.length-1)return n;t(h(n));const s=[...n.lines];return e===r.length?(s[l]=r+s[l+1],s.splice(l+1,1),{anchor:null,cursor:n.cursor,lines:s}):(s[l]=r.slice(0,e)+r.slice(e+1),{anchor:null,cursor:n.cursor,lines:s})})},[t]),y=u(()=>{i(n=>{t(h(n));const e=[...n.lines],{line:l}=n.cursor;if(e.length===1)return{anchor:null,cursor:{col:0,line:0},lines:[""]};e.splice(l,1);const r=Math.min(l,e.length-1);return{anchor:null,cursor:{col:Math.min(n.cursor.col,e[r].length),line:r},lines:e}})},[t]),F=u(()=>{i(n=>{t(h(n));const e=[...n.lines],{col:l,line:r}=n.cursor;return e[r]=e[r].slice(0,l),{...n,anchor:null,lines:e}})},[t]),O=u(()=>{i(n=>{t(h(n));const e=[...n.lines],{col:l,line:r}=n.cursor;return e[r]=e[r].slice(l),{anchor:null,cursor:{col:0,line:r},lines:e}})},[t]),R=u(()=>{i(n=>{if(t(h(n)),n.anchor)return T(n)??n;const{col:e,line:l}=n.cursor,r=n.lines[l].slice(0,e).replace(ln,""),s=[...n.lines];return s[l]=r+n.lines[l].slice(e),{anchor:null,cursor:{col:r.length,line:l},lines:s}})},[t]),A=u((n,e=!1)=>{i(l=>{const{col:r,line:s}=l.cursor;let g=s,p=r;switch(n){case"down":{s<l.lines.length-1&&(g=s+1,p=Math.min(v.current,l.lines[g].length));break}case"left":{r>0?p=r-1:s>0&&(g=s-1,p=l.lines[g].length);break}case"right":{const Z=l.lines[s].length;r<Z?p=r+1:s<l.lines.length-1&&(g=s+1,p=0);break}case"up":{s>0&&(g=s-1,p=Math.min(v.current,l.lines[g].length));break}}return L(l,{col:p,line:g},e)})},[]),D=u((n=!1)=>{i(e=>L(e,{col:0,line:e.cursor.line},n))},[]),I=u((n=!1)=>{i(e=>L(e,{col:e.lines[e.cursor.line].length,line:e.cursor.line},n))},[]),P=u((n=!1)=>{i(e=>L(e,{col:0,line:0},n))},[]),V=u((n=!1)=>{i(e=>{const l=e.lines.length-1;return L(e,{col:e.lines[l].length,line:l},n)})},[]),W=u(()=>{i(n=>{const e=n.lines.length-1;return{...n,anchor:{col:0,line:0},cursor:{col:n.lines[e].length,line:e}}})},[]),$=u(()=>{i(n=>n.anchor?{...n,anchor:null}:n)},[]),q=u(()=>{i(n=>n.anchor?(t(h(n)),T(n)??n):n)},[t]),G=u(n=>{i(e=>{if(!e.anchor)return t(h(e)),M(e,n);t(h(e));const l=T(e)??e;return M(l,n)})},[t]),H=u(n=>{const e=j(n);i({anchor:null,cursor:{col:e.at(-1).length,line:e.length-1},lines:e}),a.current=[],d.current=[]},[]),J=u(()=>{const n=a.current.pop();n&&(d.current.push(h(S.current)),i(n))},[]),K=u(()=>{const n=d.current.pop();n&&(a.current.push(h(S.current)),i(n))},[]),N=U(()=>rn(c.lines),[c.lines]);return U(()=>({anchor:c.anchor,clearSelection:$,cursor:c.cursor,deleteBack:C,deleteForward:E,deleteLine:y,deleteSelection:q,deleteToLineEnd:F,deleteToLineStart:O,deleteWord:R,getSelectedText:w,hasSelection:k,insert:x,lines:c.lines,moveCursor:A,moveToEnd:V,moveToLineEnd:I,moveToLineStart:D,moveToStart:P,newline:B,redo:K,replaceSelection:G,selectAll:W,setValue:H,undo:J,value:N}),[c.anchor,c.cursor,c.lines,N,$,C,E,y,q,F,O,R,w,k,x,A,V,I,D,P,B,K,G,W,H,J])},"useTextBuffer");export{tn as default,tn as useTextBuffer};
1
+ import{useState as Y,useRef as T,useCallback as u,useMemo as Q}from"react";const Z=300,_=100,q=/\S+\s*$/,x=i=>{const t=i.split(`
2
+ `);return t.length===0?[""]:t},J=i=>i.join(`
3
+ `),h=i=>({anchor:i.anchor,cursor:{...i.cursor},lines:[...i.lines]}),b=(i,t,s)=>s?{...i,anchor:i.anchor??i.cursor,cursor:t}:{...i,anchor:null,cursor:t},U=(i,t)=>t.line<i.line||t.line===i.line&&t.col<i.col?{end:i,start:t}:{end:t,start:i},S=i=>{if(!i.anchor)return null;const{end:t,start:s}=U(i.cursor,i.anchor),a=[...i.lines],d=a[s.line].slice(0,s.col),f=a[t.line].slice(t.col);return a.splice(s.line,t.line-s.line+1,d+f),{anchor:null,cursor:s,lines:a}},M=(i,t)=>{const s=S(i)??i,a=[...s.lines],{col:d,line:f}=s.cursor,v=a[f].slice(0,d),m=a[f].slice(d),c=x(t);if(c.length===1)return a[f]=v+c[0]+m,{anchor:null,cursor:{col:d+c[0].length,line:f},lines:a};const k=v+c[0],L=c.at(-1)+m,w=c.slice(1,-1);return a.splice(f,1,k,...w,L),{anchor:null,cursor:{col:c.at(-1).length,line:f+c.length-1},lines:a}},ln=(i="")=>{const[t,s]=Y(()=>{const n=x(i);return{anchor:null,cursor:{col:n.at(-1).length,line:n.length-1},lines:n}}),a=T([]),d=T([]),f=T(0),v=T(t.cursor.col);v.current=t.cursor.col;const m=T(t);m.current=t;const c=u(n=>{const l=Date.now();l-f.current<Z&&a.current.length>0||(a.current.push(n),a.current.length>_&&a.current.shift()),d.current=[],f.current=l},[]),k=u(()=>m.current.anchor!==null,[]),L=u(()=>{const n=m.current;if(!n.anchor)return"";const{end:l,start:e}=U(n.cursor,n.anchor);if(e.line===l.line)return n.lines[e.line].slice(e.col,l.col);const r=[];r.push(n.lines[e.line].slice(e.col));for(let o=e.line+1;o<l.line;o++)r.push(n.lines[o]);return r.push(n.lines[l.line].slice(0,l.col)),r.join(`
4
+ `)},[]),w=u(n=>{s(l=>(c(h(l)),M(l,n)))},[c]),E=u(()=>{s(n=>{c(h(n));const l=S(n)??n,e=[...l.lines],{col:r,line:o}=l.cursor,g=e[o].slice(0,r),p=e[o].slice(r);return e.splice(o,1,g,p),{anchor:null,cursor:{col:0,line:o+1},lines:e}})},[c]),j=u(()=>{s(n=>{if(n.anchor)return c(h(n)),S(n)??n;const{col:l,line:e}=n.cursor;if(l===0&&e===0)return n;c(h(n));const r=[...n.lines];if(l===0){const o=r[e-1],g=o.length;return r[e-1]=o+r[e],r.splice(e,1),{anchor:null,cursor:{col:g,line:e-1},lines:r}}return r[e]=r[e].slice(0,l-1)+r[e].slice(l),{anchor:null,cursor:{col:l-1,line:e},lines:r}})},[c]),B=u(()=>{s(n=>{if(n.anchor)return c(h(n)),S(n)??n;const{col:l,line:e}=n.cursor,r=n.lines[e];if(l===r.length&&e===n.lines.length-1)return n;c(h(n));const o=[...n.lines];return l===r.length?(o[e]=r+o[e+1],o.splice(e+1,1),{anchor:null,cursor:n.cursor,lines:o}):(o[e]=r.slice(0,l)+r.slice(l+1),{anchor:null,cursor:n.cursor,lines:o})})},[c]),C=u(()=>{s(n=>{c(h(n));const l=[...n.lines],{line:e}=n.cursor;if(l.length===1)return{anchor:null,cursor:{col:0,line:0},lines:[""]};l.splice(e,1);const r=Math.min(e,l.length-1);return{anchor:null,cursor:{col:Math.min(n.cursor.col,l[r].length),line:r},lines:l}})},[c]),y=u(()=>{s(n=>{c(h(n));const l=[...n.lines],{col:e,line:r}=n.cursor;return l[r]=l[r].slice(0,e),{...n,anchor:null,lines:l}})},[c]),A=u(()=>{s(n=>{c(h(n));const l=[...n.lines],{col:e,line:r}=n.cursor;return l[r]=l[r].slice(e),{anchor:null,cursor:{col:0,line:r},lines:l}})},[c]),D=u(()=>{s(n=>{if(c(h(n)),n.anchor)return S(n)??n;const{col:l,line:e}=n.cursor,r=n.lines[e].slice(0,l).replace(q,""),o=[...n.lines];return o[e]=r+n.lines[e].slice(l),{anchor:null,cursor:{col:r.length,line:e},lines:o}})},[c]),F=u((n,l=!1)=>{s(e=>{const{col:r,line:o}=e.cursor;let g=o,p=r;switch(n){case"down":{o<e.lines.length-1&&(g=o+1,p=Math.min(v.current,e.lines[g].length));break}case"left":{r>0?p=r-1:o>0&&(g=o-1,p=e.lines[g].length);break}case"right":{const X=e.lines[o].length;r<X?p=r+1:o<e.lines.length-1&&(g=o+1,p=0);break}case"up":{o>0&&(g=o-1,p=Math.min(v.current,e.lines[g].length));break}}return b(e,{col:p,line:g},l)})},[]),R=u((n=!1)=>{s(l=>b(l,{col:0,line:l.cursor.line},n))},[]),V=u((n=!1)=>{s(l=>b(l,{col:l.lines[l.cursor.line].length,line:l.cursor.line},n))},[]),W=u((n=!1)=>{s(l=>b(l,{col:0,line:0},n))},[]),$=u((n=!1)=>{s(l=>{const e=l.lines.length-1;return b(l,{col:l.lines[e].length,line:e},n)})},[]),z=u(()=>{s(n=>{const l=n.lines.length-1;return{...n,anchor:{col:0,line:0},cursor:{col:n.lines[l].length,line:l}}})},[]),G=u(()=>{s(n=>n.anchor?{...n,anchor:null}:n)},[]),H=u(()=>{s(n=>n.anchor?(c(h(n)),S(n)??n):n)},[c]),I=u(n=>{s(l=>{if(!l.anchor)return c(h(l)),M(l,n);c(h(l));const e=S(l)??l;return M(e,n)})},[c]),K=u(n=>{const l=x(n);s({anchor:null,cursor:{col:l.at(-1).length,line:l.length-1},lines:l}),a.current=[],d.current=[]},[]),N=u(()=>{const n=a.current.pop();n&&(d.current.push(h(m.current)),s(n))},[]),O=u(()=>{const n=d.current.pop();n&&(a.current.push(h(m.current)),s(n))},[]),P=Q(()=>J(t.lines),[t.lines]);return Q(()=>({anchor:t.anchor,clearSelection:G,cursor:t.cursor,deleteBack:j,deleteForward:B,deleteLine:C,deleteSelection:H,deleteToLineEnd:y,deleteToLineStart:A,deleteWord:D,getSelectedText:L,hasSelection:k,insert:w,lines:t.lines,moveCursor:F,moveToEnd:$,moveToLineEnd:V,moveToLineStart:R,moveToStart:W,newline:E,redo:O,replaceSelection:I,selectAll:z,setValue:K,undo:N,value:P}),[t.anchor,t.cursor,t.lines,P,G,j,B,C,H,y,A,D,L,k,w,F,$,V,R,W,E,O,I,z,K,N])};export{ln as default,ln as useTextBuffer};
@@ -1,6 +1,6 @@
1
1
  import { RefObject } from 'react';
2
- import { D as DOMElement } from "../../packem_shared/dom.d-C1IxuLJ9.js";
3
- import { S as Selection } from "../../packem_shared/selection.d-Dbha5bMS.js";
2
+ import { D as DOMElement } from "../../packem_shared/dom.d-B4kXbaVY.js";
3
+ import { S as Selection } from "../../packem_shared/selection.d-CI3_p8wg.js";
4
4
  import 'yoga-layout';
5
5
  import "../../packem_shared/cursor-helpers.d-BONB9tky.js";
6
6
  import '@visulima/colorize';
@@ -1 +1 @@
1
- var v=Object.defineProperty;var m=(n,o)=>v(n,"name",{value:o,configurable:!0});import{useRef as d,useState as x,useEffect as R,useCallback as p,useMemo as y}from"react";import{Selection as A,Range as C}from"../../packem_shared/comparePoints-C3NJirbh.js";import b from"./use-clipboard.js";var h=Object.defineProperty,T=m((n,o)=>h(n,"name",{value:o,configurable:!0}),"f");const E=T((n,o={})=>{const{copyOnSelect:c=!1,isActive:r=!0,onSelectionChange:s}=o,{copy:l}=b(),e=d(new A).current,[a,S]=x(""),u=d(s);u.current=s,R(()=>r?e.onChange(()=>{const t=e.toString();S(t),u.current?.(t),c&&t.length>0&&l(t)}):void 0,[r,e,c,l]);const i=p(()=>{const t=n.current;if(!t||!r)return;e.removeAllRanges();const g=new C;g.selectNodeContents(t),e.addRange(g)},[n,r,e]),f=p(()=>{e.removeAllRanges()},[e]);return y(()=>({clearSelection:f,selectAll:i,selectedText:a,selection:e}),[f,a,i,e])},"useTextSelection");export{E as default,E as useTextSelection};
1
+ import{useRef as f,useState as p,useEffect as R,useCallback as g,useMemo as v}from"react";import{Selection as x,Range as A}from"../../packem_shared/Range-BsVYNWtg.js";import C from"./use-clipboard.js";const T=(o,d={})=>{const{copyOnSelect:c=!1,isActive:n=!0,onSelectionChange:r}=d,{copy:s}=C(),e=f(new x).current,[l,S]=p(""),a=f(r);a.current=r,R(()=>n?e.onChange(()=>{const t=e.toString();S(t),a.current?.(t),c&&t.length>0&&s(t)}):void 0,[n,e,c,s]);const u=g(()=>{const t=o.current;if(!t||!n)return;e.removeAllRanges();const m=new A;m.selectNodeContents(t),e.addRange(m)},[o,n,e]),i=g(()=>{e.removeAllRanges()},[e]);return v(()=>({clearSelection:i,selectAll:u,selectedText:l,selection:e}),[i,l,u,e])};export{T as default,T as useTextSelection};
@@ -1 +1 @@
1
- var d=Object.defineProperty;var o=(r,e)=>d(r,"name",{value:e,configurable:!0});import{useRef as n,useState as T,useCallback as s,useEffect as b}from"react";var p=Object.defineProperty,g=o((r,e)=>p(r,"name",{value:e,configurable:!0}),"i");const x=g((r,e,a)=>{const{isActive:c=!0}=a??{},i=n(r),t=n(void 0),[m,l]=T(0);i.current=r;const f=s(()=>{t.current!==void 0&&(clearTimeout(t.current),t.current=void 0)},[]),v=s(()=>{l(u=>u+1)},[]);return b(()=>{if(!c||e<0||!Number.isFinite(e))return;const u=setTimeout(()=>{i.current()},e);return t.current=u,()=>{clearTimeout(u),t.current=void 0}},[e,c,m]),{cancel:f,reset:v}},"useTimeout");export{x as default,x as useTimeout};
1
+ import{useRef as o,useState as d,useCallback as i,useEffect as v}from"react";const p=(u,r,s)=>{const{isActive:c=!0}=s??{},n=o(u),e=o(void 0),[a,m]=d(0);n.current=u;const f=i(()=>{e.current!==void 0&&(clearTimeout(e.current),e.current=void 0)},[]),l=i(()=>{m(t=>t+1)},[]);return v(()=>{if(!c||r<0||!Number.isFinite(r))return;const t=setTimeout(()=>{n.current()},r);return e.current=t,()=>{clearTimeout(t),e.current=void 0}},[r,c,a]),{cancel:f,reset:l}};export{p as default,p as useTimeout};
@@ -1 +1 @@
1
- var h=Object.defineProperty;var f=(e,t)=>h(e,"name",{value:t,configurable:!0});import{useState as x,useRef as m,useEffect as y,useCallback as u}from"react";import j from"./use-animation.js";var k=Object.defineProperty,A=f((e,t)=>k(e,"name",{value:t,configurable:!0}),"f");function C(e){const{autoStart:t=!1,duration:v,interval:g=1e3,onTimeout:o}=e,[s,r]=x(t),l=m(o);l.current=o;const i=m(!1),{reset:c,time:p}=j({interval:g,isActive:s}),n=Math.max(0,v-p),a=n<=0;y(()=>{a&&s&&(r(!1),i.current||(i.current=!0,l.current?.()))},[a,s]);const d=u(()=>{a||r(!0)},[a]),b=u(()=>{r(!1)},[]),T=u(()=>{r(S=>S?!1:n>0)},[n]),R=u(()=>{r(!1),i.current=!1,c()},[c]);return{isFinished:a,isRunning:s,remaining:n,reset:R,start:d,stop:b,toggle:T}}f(C,"c");A(C,"useTimer");export{C as default,C as useTimer};
1
+ import{useState as x,useRef as f,useEffect as S,useCallback as a}from"react";import b from"./use-animation.js";function A(c){const{autoStart:l=!1,duration:m,interval:g=1e3,onTimeout:u}=c,[r,e]=x(l),i=f(u);i.current=u;const n=f(!1),{reset:o,time:p}=b({interval:g,isActive:r}),s=Math.max(0,m-p),t=s<=0;S(()=>{t&&r&&(e(!1),n.current||(n.current=!0,i.current?.()))},[t,r]);const d=a(()=>{t||e(!0)},[t]),v=a(()=>{e(!1)},[]),h=a(()=>{e(T=>T?!1:s>0)},[s]),R=a(()=>{e(!1),n.current=!1,o()},[o]);return{isFinished:t,isRunning:r,remaining:s,reset:R,start:d,stop:v,toggle:h}}export{A as default,A as useTimer};
@@ -1 +1 @@
1
- var u=Object.defineProperty;var t=(e,o)=>u(e,"name",{value:o,configurable:!0});import{useState as a,useEffect as f}from"react";import{g as s}from"../../packem_shared/utils-CoviI5Vm.js";import m from"./use-stdout.js";var c=Object.defineProperty,i=t((e,o)=>c(e,"name",{value:o,configurable:!0}),"t");const g=i(()=>{const{stdout:e}=m(),[o,n]=a(()=>s(e));return f(()=>{const r=i(()=>{n(s(e))},"onResize");return e.on("resize",r),()=>{e.off("resize",r)}},[e]),o},"useWindowSize");export{g as default,g as useWindowSize};
1
+ import{useState as i,useEffect as n}from"react";import{g as o}from"../../packem_shared/utils-Bup8lyK8.js";import f from"./use-stdout.js";const c=()=>{const{stdout:e}=f(),[r,s]=i(()=>o(e));return n(()=>{const t=()=>{s(o(e))};return e.on("resize",t),()=>{e.off("resize",t)}},[e]),r};export{c as default,c as useWindowSize};
@@ -1,19 +1,28 @@
1
1
  export { type C as ClipboardTarget, c as clearOsc52, i as isOsc52Supported, w as writeOsc52 } from "../packem_shared/clipboard.d-D6lZTQ21.js";
2
2
  export { b as COLOR_BLINDNESS_COMPENSATION, c as COLOR_BLINDNESS_SIMULATION, type C as ColorBlindnessType, type a as ColorMatrix, I as IDENTITY_MATRIX, d as applyColorMatrix, h as hexToRgb, r as rgbToHex, t as transformHexColor } from "../packem_shared/color-matrix.d-DSXLsB64.js";
3
- import { D as DOMElement, a as DOMNode, S as StyledLine } from "../packem_shared/dom.d-C1IxuLJ9.js";
4
- export { R as ResizeObserver, type b as ResizeObserverCallback, c as ResizeObserverEntry, type d as ScrollState, type e as StickyHeader, f as calculateScroll, g as getPathToRoot, h as getScrollHeight, i as getScrollLeft, j as getScrollTop, k as getScrollWidth, l as isNodeSelectable } from "../packem_shared/dom.d-C1IxuLJ9.js";
5
- export { type I as Instance, type K as KittyFlagName, type a as KittyKeyboardOptions, type R as RenderOptions, k as kittyFlags, b as kittyModifiers, r as render } from "../packem_shared/render.d-DuyG0zip.js";
3
+ import { D as DOMElement, a as DOMNode, S as StyledLine } from "../packem_shared/dom.d-B4kXbaVY.js";
4
+ export { R as ResizeObserver, type b as ResizeObserverCallback, c as ResizeObserverEntry, type d as ScrollState, type e as StickyHeader, f as calculateScroll, g as getPathToRoot, h as getScrollHeight, i as getScrollLeft, j as getScrollTop, k as getScrollWidth, l as isNodeSelectable } from "../packem_shared/dom.d-B4kXbaVY.js";
5
+ export { type I as Instance, type K as KittyFlagName, type a as KittyKeyboardOptions, type R as RenderOptions, k as kittyFlags, b as kittyModifiers, r as render } from "../packem_shared/render.d-CBnYBDk2.js";
6
6
  import 'node:stream';
7
- export { type a as CursorPosition } from "../packem_shared/cursor-helpers.d-BONB9tky.js";
8
- import { EventEmitter } from 'node:events';
9
- import React, { PropsWithChildren, RefObject, ReactNode } from 'react';
10
- export { R as Range, S as Selection, a as applySelectionToStyledLine, c as comparePoints } from "../packem_shared/selection.d-Dbha5bMS.js";
7
+ export type { a as CursorPosition } from "../packem_shared/cursor-helpers.d-BONB9tky.js";
8
+ import { e as MouseButton, d as MousePosition } from "../packem_shared/mouse-context.d-BfL9xGk_.js";
9
+ export type { f as MouseAction, a as MouseClickAction, M as MouseContextShape, b as MouseDragAction, g as MouseEvents, c as MouseScrollAction } from "../packem_shared/mouse-context.d-BfL9xGk_.js";
10
+ import React, { PropsWithChildren, ReactNode } from 'react';
11
+ export { useElementDimensions, useElementPosition } from "./mouse/use-element-position.js";
12
+ export { default as useMouseContext } from "./mouse/use-mouse.js";
13
+ export { default as useMouseAction } from "./mouse/use-mouse-action.js";
14
+ export { default as useMousePosition } from "./mouse/use-mouse-position.js";
15
+ export { type UseOnMouseClickOptions, useOnMouseClick } from "./mouse/use-on-mouse-click.js";
16
+ export { default as useOnMouseHover } from "./mouse/use-on-mouse-hover.js";
17
+ export { default as useOnMouseState } from "./mouse/use-on-mouse-state.js";
18
+ export { R as Range, S as Selection, a as applySelectionToStyledLine, c as comparePoints } from "../packem_shared/selection.d-CI3_p8wg.js";
11
19
  export { type T as TerminalPalette, i as isTerminalPaletteQuerySupported, q as queryTerminalPalette } from "../packem_shared/terminal-palette.d-D2SQjfn-.js";
12
20
  import 'yoga-layout';
13
21
  import '@visulima/colorize';
14
22
  import 'cli-boxes';
15
23
  import "../packem_shared/styles.d-cMo36xQz.js";
16
24
  import 'type-fest';
25
+ import 'node:events';
17
26
  /**
18
27
  * Detect whether a string contains non-ASCII characters that are likely
19
28
  * IME (Input Method Editor) composition input — CJK ideographs, Hangul,
@@ -236,33 +245,6 @@ declare const inkCharacterWidth: (text: string) => number;
236
245
  * StyledChar objects.
237
246
  */
238
247
  declare const toStyledLine: (text: string) => StyledLine;
239
- type MousePosition = {
240
- x: number;
241
- y: number;
242
- };
243
- type MouseButton = "left" | "middle" | "right";
244
- type MouseClickAction = "press" | "release" | null;
245
- type MouseScrollAction = "scrolldown" | "scrollup" | null;
246
- type MouseDragAction = "dragging" | null;
247
- type MouseAction = MouseClickAction | MouseDragAction | MouseScrollAction;
248
- /**
249
- * Internal event emitter for mouse state changes.
250
- *
251
- * Events:
252
- * - "position" (position: MousePosition)
253
- * - "click" (position: MousePosition, action: MouseClickAction, button: MouseButton)
254
- * - "scroll" (position: MousePosition, direction: MouseScrollAction)
255
- * - "drag" (position: MousePosition, action: MouseDragAction, button: MouseButton)
256
- */
257
- type MouseEvents = EventEmitter;
258
- type MouseContextShape = {
259
- readonly button: MouseButton | null;
260
- readonly click: MouseClickAction;
261
- readonly drag: MouseDragAction;
262
- readonly events: MouseEvents;
263
- readonly position: MousePosition;
264
- readonly scroll: MouseScrollAction;
265
- };
266
248
  type SgrMouseEvent = {
267
249
  action: "press" | "release";
268
250
  button: MouseButton;
@@ -315,33 +297,6 @@ declare const isIntersecting: ({
315
297
  declare const MouseProvider: ({
316
298
  children
317
299
  }: PropsWithChildren) => React.JSX.Element;
318
- /**
319
- * Stateful hook to provide the absolute position of the referenced element.
320
- */
321
- declare const useElementPosition: (ref: RefObject<DOMElement | null>, deps?: unknown[]) => {
322
- left: number;
323
- top: number;
324
- };
325
- /**
326
- * Stateful hook to provide the dimensions of the referenced element.
327
- */
328
- declare const useElementDimensions: (ref: RefObject<DOMElement | null>, deps?: unknown[]) => {
329
- height: number;
330
- width: number;
331
- };
332
- declare const useMouseContext: () => MouseContextShape;
333
- declare const useMouseAction: () => MouseClickAction | MouseDragAction | MouseScrollAction | null;
334
- declare const useMousePosition: () => MousePosition;
335
- type UseOnMouseClickOptions = {
336
- /** Filter to only respond to a specific mouse button. Defaults to all buttons. */
337
- button?: MouseButton;
338
- };
339
- declare const useOnMouseClick: (ref: RefObject<DOMElement | null>, onChange: (clicking: boolean, button?: MouseButton) => void, options?: UseOnMouseClickOptions) => void;
340
- declare const useOnMouseHover: (ref: RefObject<DOMElement | null>, onChange: (event: boolean) => void) => void;
341
- declare const useOnMouseState: (ref: RefObject<DOMElement | null>) => {
342
- clicking: boolean;
343
- hovering: boolean;
344
- };
345
300
  type RenderToStringOptions = {
346
301
  /**
347
302
  * Width of the virtual terminal in columns.
@@ -395,4 +350,4 @@ declare const squashTextNodesWithMap: (node: DOMElement, map: CharOffsetMap, off
395
350
  current: number;
396
351
  }) => string;
397
352
  declare const wrapOrTruncateStyledLine: (line: StyledLine, maxWidth: number, textWrap?: string) => StyledLine[];
398
- export { type CharOffsetMap, type CharOffsetRange, type DOMElement, Fullscreen, IMECompositionBuffer, type LayoutCallbacks, type MouseAction, type MouseButton, type MouseClickAction, type MouseContextShape, type MouseDragAction, type MouseEvents, type MousePosition, MouseProvider, type MouseScrollAction, type RenderToStringOptions, type ScrollbarBoundingBox, type SgrMouseEvent, type StringWidthFunction, type TextFragment, type UseOnMouseClickOptions, calculateScrollbarLayout, calculateScrollbarThumb, clearStringWidthCache, clearStyledLineCache, collectSortedFragments, getAddedScrollHeight, getBoundingBox, getHorizontalScrollbarBoundingBox, getInnerHeight, getInnerWidth, getRelativeLeft, getRelativeTop, getText, getVerticalScrollbarBoundingBox, inkCharacterWidth, isIMEInput, isIntersecting, measureElement, parseSgrMouse, processLayout, renderToString, setEnableStyledLineCache, setStringWidthFunction, squashTextNodesWithMap, toStyledLine, useElementDimensions, useElementPosition, useMouseAction, useMouseContext, useMousePosition, useOnMouseClick, useOnMouseHover, useOnMouseState, wrapOrTruncateStyledLine };
353
+ export { type CharOffsetMap, type CharOffsetRange, type DOMElement, Fullscreen, IMECompositionBuffer, type LayoutCallbacks, type MouseButton, type MousePosition, MouseProvider, type RenderToStringOptions, type ScrollbarBoundingBox, type SgrMouseEvent, type StringWidthFunction, type TextFragment, calculateScrollbarLayout, calculateScrollbarThumb, clearStringWidthCache, clearStyledLineCache, collectSortedFragments, getAddedScrollHeight, getBoundingBox, getHorizontalScrollbarBoundingBox, getInnerHeight, getInnerWidth, getRelativeLeft, getRelativeTop, getText, getVerticalScrollbarBoundingBox, inkCharacterWidth, isIMEInput, isIntersecting, measureElement, parseSgrMouse, processLayout, renderToString, setEnableStyledLineCache, setStringWidthFunction, squashTextNodesWithMap, toStyledLine, wrapOrTruncateStyledLine };
package/dist/ink/index.js CHANGED
@@ -1 +1 @@
1
- import{clearOsc52 as o,isOsc52Supported as r,writeOsc52 as a}from"../packem_shared/isOsc52Supported-DKK7Uee6.js";import{COLOR_BLINDNESS_COMPENSATION as l,COLOR_BLINDNESS_SIMULATION as i,IDENTITY_MATRIX as n,applyColorMatrix as u,hexToRgb as f,rgbToHex as p,transformHexColor as c}from"../packem_shared/COLOR_BLINDNESS_SIMULATION-DqErf7XX.js";import{g as d,i as x}from"../packem_shared/dom-CXB-19sK.js";import{IMECompositionBuffer as S,isIMEInput as h}from"../packem_shared/IMECompositionBuffer-C89PhiOu.js";import{kittyFlags as M,kittyModifiers as O}from"../packem_shared/kittyFlags-C3rZLbcK.js";import{c as I,a as L,b,g as C,d as E,e as N,f as R,h as B,i as P,j as H,k as v,l as W,P as k,p as A}from"../packem_shared/layout-BMo200nF.js";import{c as D,a as F,i as z,s as q,b as w,t as j}from"../packem_shared/measure-text-Ce2widM1.js";import{default as U}from"../packem_shared/render-BRR1ESvR.js";import{default as X}from"../packem_shared/renderToString-vEQyGmv6.js";import{default as G,ResizeObserverEntry as J}from"../packem_shared/ResizeObserverEntry-Dq0dk8Kq.js";import{calculateScroll as Z,getScrollHeight as $,getScrollLeft as ee,getScrollTop as te,getScrollWidth as oe}from"../packem_shared/getScrollHeight-ClEOyLHH.js";import{Range as ae,Selection as se,applySelectionToStyledLine as le,comparePoints as ie}from"../packem_shared/comparePoints-C3NJirbh.js";import{squashTextNodesWithMap as ue}from"../packem_shared/squashTextNodesWithMap-DCdi3SZ2.js";import{isTerminalPaletteQuerySupported as pe,queryTerminalPalette as ce}from"../packem_shared/isTerminalPaletteQuerySupported-Dn2hFAZ_.js";import{wrapOrTruncateStyledLine as de}from"../packem_shared/wrapOrTruncateStyledLine-C5rcIrNb.js";import{default as ge}from"../packem_shared/Fullscreen-CxLd1-Zu.js";import{default as he}from"../packem_shared/MouseProvider-PnIUKURs.js";import{default as Me}from"../packem_shared/isIntersecting-B3KbKTmu.js";import{default as ye}from"../packem_shared/useMouseAction-2dRfU1vE.js";import{default as Le}from"../packem_shared/useMouseContext-C746G7kY.js";import{default as Ce}from"../packem_shared/useMousePosition-BTWfV4JK.js";import{default as Ne}from"../packem_shared/useOnMouseHover-D3DczIol.js";import{default as Be}from"../packem_shared/useOnMouseState-cRK8QvzD.js";import{a as He}from"../packem_shared/ansi-parser-B6uXaq65.js";import{useElementDimensions as We,useElementPosition as ke}from"../packem_shared/useElementDimensions-qJ_WXFZ9.js";import{useOnMouseClick as _e}from"../packem_shared/useOnMouseClick-nY8xLZmt.js";export{l as COLOR_BLINDNESS_COMPENSATION,i as COLOR_BLINDNESS_SIMULATION,ge as Fullscreen,n as IDENTITY_MATRIX,S as IMECompositionBuffer,he as MouseProvider,ae as Range,G as ResizeObserver,J as ResizeObserverEntry,se as Selection,u as applyColorMatrix,le as applySelectionToStyledLine,Z as calculateScroll,I as calculateScrollbarLayout,L as calculateScrollbarThumb,o as clearOsc52,D as clearStringWidthCache,F as clearStyledLineCache,b as collectSortedFragments,ie as comparePoints,C as getAddedScrollHeight,E as getBoundingBox,N as getHorizontalScrollbarBoundingBox,R as getInnerHeight,B as getInnerWidth,d as getPathToRoot,P as getRelativeLeft,H as getRelativeTop,$ as getScrollHeight,ee as getScrollLeft,te as getScrollTop,oe as getScrollWidth,v as getText,W as getVerticalScrollbarBoundingBox,f as hexToRgb,z as inkCharacterWidth,h as isIMEInput,Me as isIntersecting,x as isNodeSelectable,r as isOsc52Supported,pe as isTerminalPaletteQuerySupported,M as kittyFlags,O as kittyModifiers,k as measureElement,He as parseSgrMouse,A as processLayout,ce as queryTerminalPalette,U as render,X as renderToString,p as rgbToHex,q as setEnableStyledLineCache,w as setStringWidthFunction,ue as squashTextNodesWithMap,j as toStyledLine,c as transformHexColor,We as useElementDimensions,ke as useElementPosition,ye as useMouseAction,Le as useMouseContext,Ce as useMousePosition,_e as useOnMouseClick,Ne as useOnMouseHover,Be as useOnMouseState,de as wrapOrTruncateStyledLine,a as writeOsc52};
1
+ import{clearOsc52 as o,isOsc52Supported as r,writeOsc52 as a}from"../packem_shared/clearOsc52-BUpnQOav.js";import{COLOR_BLINDNESS_COMPENSATION as l,COLOR_BLINDNESS_SIMULATION as i,IDENTITY_MATRIX as n,applyColorMatrix as u,hexToRgb as f,rgbToHex as p,transformHexColor as c}from"../packem_shared/COLOR_BLINDNESS_COMPENSATION-Ilnoyeqc.js";import{g as m,i as x}from"../packem_shared/dom-rphpG0kf.js";import{IMECompositionBuffer as S,isIMEInput as h}from"../packem_shared/IMECompositionBuffer-VhC9HRCv.js";import{kittyFlags as M,kittyModifiers as O}from"../packem_shared/kittyFlags-g8ALyoCU.js";import{c as I,a as L,b,g as C,d as E,e as R,f as N,h as B,i as P,j as H,k as v,l as W,R as k,p as A}from"../packem_shared/measure-element-Cs7_proT.js";import{c as D,a as F,i as z,s as q,b as w,t as j}from"../packem_shared/measure-text-B7juNq4Y.js";import{default as U}from"../packem_shared/render-v2x7ZRzT.js";import{default as X}from"../packem_shared/renderToString-C2YmVNLG.js";import{default as G,ResizeObserverEntry as J}from"../packem_shared/ResizeObserver-aX8XOr2u.js";import{calculateScroll as Z,getScrollHeight as $,getScrollLeft as ee,getScrollTop as te,getScrollWidth as oe}from"../packem_shared/calculateScroll-D4Y_JR4H.js";import{Range as ae,Selection as se,applySelectionToStyledLine as le,comparePoints as ie}from"../packem_shared/Range-BsVYNWtg.js";import{squashTextNodesWithMap as ue}from"../packem_shared/squashTextNodesWithMap-BmUSBPfc.js";import{isTerminalPaletteQuerySupported as pe,queryTerminalPalette as ce}from"../packem_shared/isTerminalPaletteQuerySupported-BYzmqq9-.js";import{wrapOrTruncateStyledLine as me}from"../packem_shared/wrapOrTruncateStyledLine-46W8bTtv.js";import{default as ge}from"../packem_shared/Fullscreen-BRhuBLBh.js";import{default as he}from"../packem_shared/MouseProvider-DUqQ3Eaa.js";import{default as Me}from"../packem_shared/isIntersecting-Bo2npvMR.js";import{default as ye}from"./mouse/use-mouse-action.js";import{default as Le}from"./mouse/use-mouse.js";import{default as Ce}from"./mouse/use-mouse-position.js";import{default as Re}from"./mouse/use-on-mouse-hover.js";import{default as Be}from"./mouse/use-on-mouse-state.js";import{d as He}from"../packem_shared/ansi-parser-DlgLtOYO.js";import{useElementDimensions as We,useElementPosition as ke}from"./mouse/use-element-position.js";import{useOnMouseClick as _e}from"./mouse/use-on-mouse-click.js";export{l as COLOR_BLINDNESS_COMPENSATION,i as COLOR_BLINDNESS_SIMULATION,ge as Fullscreen,n as IDENTITY_MATRIX,S as IMECompositionBuffer,he as MouseProvider,ae as Range,G as ResizeObserver,J as ResizeObserverEntry,se as Selection,u as applyColorMatrix,le as applySelectionToStyledLine,Z as calculateScroll,I as calculateScrollbarLayout,L as calculateScrollbarThumb,o as clearOsc52,D as clearStringWidthCache,F as clearStyledLineCache,b as collectSortedFragments,ie as comparePoints,C as getAddedScrollHeight,E as getBoundingBox,R as getHorizontalScrollbarBoundingBox,N as getInnerHeight,B as getInnerWidth,m as getPathToRoot,P as getRelativeLeft,H as getRelativeTop,$ as getScrollHeight,ee as getScrollLeft,te as getScrollTop,oe as getScrollWidth,v as getText,W as getVerticalScrollbarBoundingBox,f as hexToRgb,z as inkCharacterWidth,h as isIMEInput,Me as isIntersecting,x as isNodeSelectable,r as isOsc52Supported,pe as isTerminalPaletteQuerySupported,M as kittyFlags,O as kittyModifiers,k as measureElement,He as parseSgrMouse,A as processLayout,ce as queryTerminalPalette,U as render,X as renderToString,p as rgbToHex,q as setEnableStyledLineCache,w as setStringWidthFunction,ue as squashTextNodesWithMap,j as toStyledLine,c as transformHexColor,We as useElementDimensions,ke as useElementPosition,ye as useMouseAction,Le as useMouseContext,Ce as useMousePosition,_e as useOnMouseClick,Re as useOnMouseHover,Be as useOnMouseState,me as wrapOrTruncateStyledLine,a as writeOsc52};
@@ -0,0 +1,31 @@
1
+ import { RefObject } from 'react';
2
+ import { D as DOMElement } from "../../packem_shared/dom.d-B4kXbaVY.js";
3
+ import 'yoga-layout';
4
+ import "../../packem_shared/cursor-helpers.d-BONB9tky.js";
5
+ import '@visulima/colorize';
6
+ import 'cli-boxes';
7
+ import "../../packem_shared/styles.d-cMo36xQz.js";
8
+ import 'type-fest';
9
+ declare const getElementPosition: (node: DOMElement | null) => {
10
+ left: number;
11
+ top: number;
12
+ } | undefined;
13
+ declare const getElementDimensions: (node: DOMElement | null) => {
14
+ height: number;
15
+ width: number;
16
+ } | undefined;
17
+ /**
18
+ * Stateful hook to provide the absolute position of the referenced element.
19
+ */
20
+ declare const useElementPosition: (ref: RefObject<DOMElement | null>, deps?: unknown[]) => {
21
+ left: number;
22
+ top: number;
23
+ };
24
+ /**
25
+ * Stateful hook to provide the dimensions of the referenced element.
26
+ */
27
+ declare const useElementDimensions: (ref: RefObject<DOMElement | null>, deps?: unknown[]) => {
28
+ height: number;
29
+ width: number;
30
+ };
31
+ export { getElementDimensions, getElementPosition, useElementDimensions, useElementPosition };
@@ -0,0 +1 @@
1
+ import{useState as i,useEffect as r}from"react";const u=e=>{let t=e,n=1,s=1;for(;t;){if(!t.yogaNode)return{left:n,top:s};const o=t.yogaNode.getComputedLayout();n+=o.left,s+=o.top,t=t.parentNode}return{left:n,top:s}},f=e=>{if(e)return u(e)},a=e=>{const t=e?.yogaNode?.getComputedLayout();if(t)return{height:t.height,width:t.width}},c=(e,t=[])=>{const[n,s]=i({left:0,top:0});return r(()=>{const o=f(e.current);o&&s(o)},t),n},d=(e,t=[])=>{const[n,s]=i({height:0,width:0});return r(()=>{const o=a(e.current);o&&s(o)},t),n};export{a as getElementDimensions,f as getElementPosition,d as useElementDimensions,c as useElementPosition};
@@ -0,0 +1,5 @@
1
+ import { a as MouseClickAction, b as MouseDragAction, c as MouseScrollAction } from "../../packem_shared/mouse-context.d-BfL9xGk_.js";
2
+ import 'node:events';
3
+ import 'react';
4
+ declare const useMouseAction: () => MouseClickAction | MouseDragAction | MouseScrollAction | null;
5
+ export { useMouseAction as default };
@@ -0,0 +1 @@
1
+ import{useState as l,useEffect as i}from"react";import v from"./use-mouse.js";const m=()=>{const e=v(),[f,o]=l(null);return i(()=>{const n=(c,t)=>{o(t)},s=(c,t)=>{o(t)},r=(c,t)=>{o(t)};return e.events.on("click",n),e.events.on("scroll",s),e.events.on("drag",r),()=>{e.events.off("click",n),e.events.off("scroll",s),e.events.off("drag",r)}},[e.events]),f};export{m as default};
@@ -0,0 +1,5 @@
1
+ import { d as MousePosition } from "../../packem_shared/mouse-context.d-BfL9xGk_.js";
2
+ import 'node:events';
3
+ import 'react';
4
+ declare const useMousePosition: () => MousePosition;
5
+ export { useMousePosition as default };
@@ -0,0 +1 @@
1
+ import{useState as i,useEffect as r}from"react";import p from"./use-mouse.js";const x=()=>{const t=p(),[n,s]=i({x:t.position.x,y:t.position.y});return r(()=>{const o=e=>{s({x:e.x,y:e.y})};return t.events.on("position",o),()=>{t.events.off("position",o)}},[t.events]),n};export{x as default};
@@ -0,0 +1,5 @@
1
+ import { M as MouseContextShape } from "../../packem_shared/mouse-context.d-BfL9xGk_.js";
2
+ import 'node:events';
3
+ import 'react';
4
+ declare const useMouseContext: () => MouseContextShape;
5
+ export { useMouseContext as default };
@@ -0,0 +1 @@
1
+ import{useContext as e}from"react";import{o as r}from"../../packem_shared/mouse-context-DaARgUu1.js";const s=()=>{const o=e(r);if(!o)throw new Error("useMouseContext must only be used within children of <MouseProvider/>");return o};export{s as default};
@@ -0,0 +1,16 @@
1
+ import { RefObject } from 'react';
2
+ import { D as DOMElement } from "../../packem_shared/dom.d-B4kXbaVY.js";
3
+ import { e as MouseButton } from "../../packem_shared/mouse-context.d-BfL9xGk_.js";
4
+ import 'yoga-layout';
5
+ import "../../packem_shared/cursor-helpers.d-BONB9tky.js";
6
+ import '@visulima/colorize';
7
+ import 'cli-boxes';
8
+ import "../../packem_shared/styles.d-cMo36xQz.js";
9
+ import 'type-fest';
10
+ import 'node:events';
11
+ type UseOnMouseClickOptions = {
12
+ /** Filter to only respond to a specific mouse button. Defaults to all buttons. */
13
+ button?: MouseButton;
14
+ };
15
+ declare const useOnMouseClick: (ref: RefObject<DOMElement | null>, onChange: (clicking: boolean, button?: MouseButton) => void, options?: UseOnMouseClickOptions) => void;
16
+ export { type UseOnMouseClickOptions, useOnMouseClick };
@@ -0,0 +1 @@
1
+ import{useCallback as l,useEffect as p}from"react";import a from"../../packem_shared/isIntersecting-Bo2npvMR.js";import{getElementPosition as b,getElementDimensions as k}from"./use-element-position.js";import C from"./use-mouse.js";const D=(e,r,n)=>{const s=C(),o=l((t,u,c)=>{if(n?.button&&c!==n.button)return;const i=b(e.current),m=k(e.current);if(!i||!m)return;const f={...i,...m};r(a({element:f,mouse:t})&&u==="press",c)},[e,r,n?.button]);p(()=>{const{events:t}=s;return t.on("click",o),()=>{t.off("click",o)}},[s.events,o])};export{D as useOnMouseClick};
@@ -0,0 +1,10 @@
1
+ import { RefObject } from 'react';
2
+ import { D as DOMElement } from "../../packem_shared/dom.d-B4kXbaVY.js";
3
+ import 'yoga-layout';
4
+ import "../../packem_shared/cursor-helpers.d-BONB9tky.js";
5
+ import '@visulima/colorize';
6
+ import 'cli-boxes';
7
+ import "../../packem_shared/styles.d-cMo36xQz.js";
8
+ import 'type-fest';
9
+ declare const useOnMouseHover: (ref: RefObject<DOMElement | null>, onChange: (event: boolean) => void) => void;
10
+ export { useOnMouseHover as default };
@@ -0,0 +1 @@
1
+ import{useCallback as f,useEffect as c}from"react";import u from"../../packem_shared/isIntersecting-Bo2npvMR.js";import{getElementPosition as l,getElementDimensions as p}from"./use-element-position.js";import a from"./use-mouse.js";const d=(e,n)=>{const r=a(),o=f(t=>{const s=l(e.current),m=p(e.current);if(!s||!m)return;const i={...s,...m};n(u({element:i,mouse:t}))},[e,n]);c(()=>{const{events:t}=r;return t.on("position",o),()=>{t.off("position",o)}},[r.events,o])};export{d as default};
@@ -0,0 +1,13 @@
1
+ import { RefObject } from 'react';
2
+ import { D as DOMElement } from "../../packem_shared/dom.d-B4kXbaVY.js";
3
+ import 'yoga-layout';
4
+ import "../../packem_shared/cursor-helpers.d-BONB9tky.js";
5
+ import '@visulima/colorize';
6
+ import 'cli-boxes';
7
+ import "../../packem_shared/styles.d-cMo36xQz.js";
8
+ import 'type-fest';
9
+ declare const useOnMouseState: (ref: RefObject<DOMElement | null>) => {
10
+ clicking: boolean;
11
+ hovering: boolean;
12
+ };
13
+ export { useOnMouseState as default };
@@ -0,0 +1 @@
1
+ import{useState as r}from"react";import{useOnMouseClick as m}from"./use-on-mouse-click.js";import n from"./use-on-mouse-hover.js";const l=o=>{const[t,e]=r(!1),[s,i]=r(!1);return m(o,i),n(o,e),{clicking:s,hovering:t}};export{l as default};
@@ -1,4 +1,4 @@
1
- var a=Object.defineProperty;var r=(t,e)=>a(t,"name",{value:e,configurable:!0});import n from"react-devtools-core";import i from"ws";var s=Object.defineProperty,l=r((t,e)=>s(t,"name",{value:e,configurable:!0}),"n");const c=l(async()=>new Promise(t=>{const e=new i("ws://localhost:8097"),o=setTimeout(()=>{e.terminate(),t(!1)},2e3);o.unref(),e.on("open",()=>{clearTimeout(o),e.terminate(),t(!0)}),e.on("error",()=>{clearTimeout(o),e.terminate(),t(!1)})}),"isDevToolsReachable");await c()?(n.initialize(),n.connectToDevTools()):console.warn(`DEV is set to true, but the React DevTools server is not running. Start it with:
1
+ import n from"react-devtools-core";import r from"ws";const i=async()=>new Promise(t=>{const e=new r("ws://localhost:8097"),o=setTimeout(()=>{e.terminate(),t(!1)},2e3);o.unref(),e.on("open",()=>{clearTimeout(o),e.terminate(),t(!0)}),e.on("error",()=>{clearTimeout(o),e.terminate(),t(!1)})});await i()?(n.initialize(),n.connectToDevTools()):console.warn(`DEV is set to true, but the React DevTools server is not running. Start it with:
2
2
 
3
3
  $ npx react-devtools
4
4
  `);
@@ -0,0 +1 @@
1
+ const c={achromatopsia:[[.299,.587,.114],[.299,.587,.114],[.299,.587,.114]],deuteranopia:[[.625,.375,0],[.7,.3,0],[0,.3,.7]],protanopia:[[.567,.433,0],[.558,.442,0],[0,.242,.758]],tritanopia:[[.95,.05,0],[0,.433,.567],[0,.475,.525]]},d={deuteranopia:[[1,.7,0],[0,1,0],[0,.7,1]],protanopia:[[1,0,0],[.7,1,0],[.7,0,1]],tritanopia:[[1,0,.7],[0,1,.7],[0,0,1]]},S=[[1,0,0],[0,1,0],[0,0,1]],n=r=>Math.max(0,Math.min(255,Math.round(r))),i=(r,a,t,o)=>[n(o[0][0]*r+o[0][1]*a+o[0][2]*t),n(o[1][0]*r+o[1][1]*a+o[1][2]*t),n(o[2][0]*r+o[2][1]*a+o[2][2]*t)],s=/^#?(?<r>[\da-f]{2})(?<g>[\da-f]{2})(?<b>[\da-f]{2})$/i,u=/^#?(?<r>[\da-f])(?<g>[\da-f])(?<b>[\da-f])$/i,I=r=>{const a=s.exec(r);if(a)return[Number.parseInt(a[1],16),Number.parseInt(a[2],16),Number.parseInt(a[3],16)];const t=u.exec(r);return t?[Number.parseInt(t[1]+t[1],16),Number.parseInt(t[2]+t[2],16),Number.parseInt(t[3]+t[3],16)]:null},N=(r,a,t)=>`#${n(r).toString(16).padStart(2,"0")}${n(a).toString(16).padStart(2,"0")}${n(t).toString(16).padStart(2,"0")}`,b=(r,a)=>{const t=I(r);if(!t)return r;const[o,p,e]=i(t[0],t[1],t[2],a);return N(o,p,e)};export{d as COLOR_BLINDNESS_COMPENSATION,c as COLOR_BLINDNESS_SIMULATION,S as IDENTITY_MATRIX,i as applyColorMatrix,I as hexToRgb,N as rgbToHex,b as transformHexColor};
@@ -0,0 +1 @@
1
+ import"react/jsx-runtime";import"react";import"./measure-element-Cs7_proT.js";import"../components/box.js";import{C as l}from"./controlled-scroll-view-t55HU9L8.js";export{l as ControlledScrollView};
@@ -0,0 +1 @@
1
+ import{jsxs as l,jsx as u}from"react/jsx-runtime";import{useState as p,useRef as s,useEffect as h}from"react";import{useWindowSize as x,useTuiContext as w}from"./TuiContext-BNmP0lMY.js";import{_Box as i,_Spacer as S,_Text as D}from"./render-DFZ8NHlG.js";function T(){const{app:r}=w(),[t,c]=p(0),e=s(0),n=s(Date.now()),o=s(null);return h(()=>{const m=()=>{o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{c(0),e.current=0,n.current=Date.now()},2e3),e.current++;const d=Date.now(),f=d-n.current;f>=500&&(c(Math.round(e.current/f*1e3)),e.current=0,n.current=d)},a=r.onBeforeFlush(()=>{m()});return()=>{a(),o.current&&clearTimeout(o.current)}},[r]),t}const b=({fps:r})=>{const t=r===0?"--":String(r);return u(i,{borderColor:"gray",borderStyle:"round",paddingX:1,children:l(D,{dim:!0,children:[t," ","updates/sec"]})})},B=({children:r,enabled:t=!0})=>{const c=T(),{columns:e,rows:n}=x();return l(i,{flexDirection:"column",height:n,width:e,children:[u(i,{flexGrow:1,children:r}),t&&l(i,{flexDirection:"row",flexShrink:0,children:[u(S,{}),u(b,{fps:c})]})]})};export{B as DevTools};
@@ -0,0 +1 @@
1
+ import{createRequire as A}from"node:module";import{jsxs as d,jsx as y}from"react/jsx-runtime";import{useState as g,useRef as G,useEffect as N,useCallback as $}from"react";import W from"../ink/hooks/use-input.js";import{Box as E}from"../components/box.js";import{Spinner as I}from"../components/spinner.js";import{Text as u}from"../components/text.js";const H=A(import.meta.url),w=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,U=e=>{if(typeof w<"u"&&w.versions&&w.versions.node){const[i,a]=w.versions.node.split(".").map(Number);if(i>22||i===22&&a>=3||i===20&&a>=16)return w.getBuiltinModule(e)}return H(e)},{readdir:K,stat:J}=U("node:fs/promises"),{resolve:L,join:R,dirname:O,extname:Q}=U("node:path");function V(e){const i=a=>`${a&4?"r":"-"}${a&2?"w":"-"}${a&1?"x":"-"}`;return`${i(e>>6&7)}${i(e>>3&7)}${i(e&7)}`}function X(e,i){if(!(i.showHidden??!1)&&e.isHidden||!(i.showDirectories??!0)&&e.isDirectory||!(i.showFiles??!0)&&!e.isDirectory)return!1;if(i.extensions&&i.extensions.length>0&&!e.isDirectory){const a=Q(e.name);if(!i.extensions.includes(a))return!1}return!0}function Y(e){const{filter:i,initialPath:a}=e,[h,D]=g(()=>L(a)),[C,l]=g([]),[b,x]=g(!0),[j,v]=g(),[P,o]=g(0),M=G(i);M.current=i,N(()=>{let s=!1;return(async()=>{x(!0),v(void 0);try{const n=await K(h,{withFileTypes:!0}),_=await Promise.all(n.map(async r=>{try{return await J(R(h,r.name))}catch{return}})),T=n.map((r,t)=>{const F=R(h,r.name),S=r.isDirectory(),k=r.name.startsWith("."),B=_[t],q=B?.size??0,z=B?V(B.mode):"---------";return{isDirectory:S,isHidden:k,name:r.name,path:F,permissions:z,size:q}});if(s)return;const c=T.filter(r=>X(r,M.current));c.sort((r,t)=>r.isDirectory!==t.isDirectory?r.isDirectory?-1:1:r.name.localeCompare(t.name,void 0,{sensitivity:"base"})),l(c)}catch(n){s||(v(n instanceof Error?n.message:String(n)),l([]))}finally{s||x(!1)}})().catch(()=>{}),()=>{s=!0}},[h,P]);const m=$(s=>{D(L(s))},[]),f=$(()=>{D(s=>{const n=O(s);return n===s?s:n})},[]),p=$(()=>{o(s=>s+1)},[]);return{currentPath:h,entries:C,error:j,goUp:f,isLoading:b,navigateTo:m,refresh:p}}function Z(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}K`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)}M`:`${(e/(1024*1024*1024)).toFixed(1)}G`}const ee={},re=()=>process.cwd(),le=({accentColor:e="cyan",directoryColor:i="blue",fileColor:a="white",filter:h=ee,initialPath:D,isFocused:C=!0,limit:l=10,onCancel:b,onSelect:x,showPermissions:j=!1,showSize:v=!1})=>{const P=D??re(),o=Y({filter:h,initialPath:P}),[M,m]=g(0),f=Math.max(0,o.entries.length-1),p=Math.min(M,f);W($((c,r)=>{if(r.upArrow)m(t=>Math.max(0,t-1));else if(r.downArrow)m(t=>Math.min(f,t+1));else if(r.return){const t=o.entries[p];t&&(t.isDirectory?(o.navigateTo(t.path),m(0)):x?.(t))}else r.backspace||r.leftArrow?(o.goUp(),m(0)):r.escape?b?.():c==="."?o.refresh():r.pageUp?m(t=>Math.max(0,t-l)):r.pageDown?m(t=>Math.min(f,t+l)):r.home?m(0):r.end&&m(f)},[f,p,o,l,x,b]),{isActive:C});const s=Math.floor(l/2);let n=Math.max(0,p-s);const _=Math.min(o.entries.length,n+l);n=Math.max(0,_-l);const T=o.entries.slice(n,_);return d(E,{flexDirection:"column",children:[y(u,{bold:!0,dimColor:!0,children:o.currentPath}),o.isLoading&&d(E,{children:[y(I,{}),y(u,{children:" Loading..."})]}),o.error&&d(u,{color:"red",children:["Error:",o.error]}),!o.isLoading&&!o.error&&o.entries.length===0&&y(u,{dimColor:!0,children:"(empty directory)"}),T.map((c,r)=>{const t=n+r===p,F=c.isDirectory?"📁 ":"📄 ",S=c.isDirectory?i:a;return d(E,{children:[y(u,{color:t?e:void 0,children:t?"▸ ":" "}),y(u,{children:F}),d(u,{bold:c.isDirectory,color:t?e:S,children:[c.name,c.isDirectory?"/":""]}),v&&!c.isDirectory&&d(u,{dimColor:!0,children:[" ",Z(c.size)]}),j&&d(u,{dimColor:!0,children:[" ",c.permissions]})]},c.name)}),o.entries.length>l&&d(u,{dimColor:!0,children:[p+1,"/",o.entries.length]})]})};export{le as default};
@@ -0,0 +1 @@
1
+ import E,{createContext as R,useRef as S,useState as I,useCallback as s,useMemo as P,useContext as C,useEffect as p}from"react";const m=R({activate(){},activeId:void 0,add(){},deactivate(){},disableFocus(){},enableFocus(){},focus(){},focusNext(){},focusPrevious(){},remove(){}});m.displayName="TuiFocusContext";const y=({children:u})=>{const i=S([]),[a,o]=I(void 0),[n,v]=I(!0),f=s((t,e)=>{if(i.current.some(r=>r.id===t))return;const d={autoFocus:e.autoFocus,id:t,isActive:!0};i.current=[...i.current,d],o(r=>e.autoFocus&&r===void 0||i.current.filter(M=>M.isActive).length===1&&r===void 0?t:r)},[]),l=s(t=>{i.current=i.current.filter(e=>e.id!==t),o(e=>e===t?void 0:e)},[]),F=s(t=>{i.current=i.current.map(e=>e.id===t?{...e,isActive:!0}:e)},[]),c=s(t=>{i.current=i.current.map(e=>e.id===t?{...e,isActive:!1}:e),o(e=>e===t?void 0:e)},[]),x=s(()=>v(!0),[]),b=s(()=>{v(!1),o(void 0)},[]),g=s(()=>{if(!n)return;const t=i.current.filter(e=>e.isActive);t.length!==0&&o(e=>{if(e===void 0)return t[0]?.id;const d=t.findIndex(r=>r.id===e);return t[(d+1)%t.length]?.id??t[0]?.id})},[n]),h=s(()=>{if(!n)return;const t=i.current.filter(e=>e.isActive);t.length!==0&&o(e=>{if(e===void 0)return t.at(-1)?.id;const d=t.findIndex(r=>r.id===e);return t[(d-1+t.length)%t.length]?.id??t.at(-1)?.id})},[n]),A=s(t=>{n&&i.current.some(e=>e.id===t&&e.isActive)&&o(t)},[n]),N=P(()=>({activate:F,activeId:a,add:f,deactivate:c,disableFocus:b,enableFocus:x,focus:A,focusNext:g,focusPrevious:h,remove:l}),[a,f,l,F,c,x,b,g,h,A]);return E.createElement(m.Provider,{value:N},u)},T=({autoFocus:u=!1,id:i,isActive:a=!0}={})=>{const{activate:o,activeId:n,add:v,deactivate:f,focus:l,remove:F}=C(m),c=P(()=>i??Math.random().toString(36).slice(2,7),[i]);return p(()=>(v(c,{autoFocus:u}),()=>{F(c)}),[c,u]),p(()=>{a?o(c):f(c)},[a,c]),{focus:l,isFocused:!!c&&n===c}},$=()=>{const u=C(m);return{activeId:u.activeId,disableFocus:u.disableFocus,enableFocus:u.enableFocus,focus:u.focus,focusNext:u.focusNext,focusPrevious:u.focusPrevious}};export{m as FocusContext,y as FocusProvider,T as useFocus,$ as useFocusManager};
@@ -0,0 +1 @@
1
+ import{jsx as m}from"react/jsx-runtime";import"react";import{Box as i}from"../components/box.js";import e from"../ink/hooks/use-window-size.js";const h=({children:r})=>{const{columns:o,rows:t}=e();return m(i,{flexGrow:1,height:t,width:o,children:r})};export{h as default};
@@ -0,0 +1 @@
1
+ const e=s=>{if(s.length===0)return!1;for(const t of s){const i=t.codePointAt(0)??0;return!(i<=127||i<=255)}return!1};class o{buffer="";timer;onFlush;timeout;constructor({onFlush:t,timeout:i}){this.onFlush=t,this.timeout=i}add(t){this.buffer+=t,this.timer!==void 0&&clearTimeout(this.timer),this.timer=setTimeout(()=>{this.flush()},this.timeout)}flush(){if(this.timer!==void 0&&(clearTimeout(this.timer),this.timer=void 0),this.buffer.length>0){const t=this.buffer;this.buffer="",this.onFlush(t)}}destroy(){this.timer!==void 0&&(clearTimeout(this.timer),this.timer=void 0),this.buffer=""}}export{o as IMECompositionBuffer,e as isIMEInput};
@@ -0,0 +1,2 @@
1
+ import{EventEmitter as l}from"tseep";class B extends l{constructor(t){super(),this.stdin=t}stdin;_boundHandleData=null;_pasteBuffer=null;start(){typeof this.stdin.setRawMode=="function"&&this.stdin.setRawMode(!0),this.stdin.resume(),this.stdin.setEncoding("utf8"),this._boundHandleData=this.handleData.bind(this),this.stdin.on("data",this._boundHandleData)}stop(){typeof this.stdin.setRawMode=="function"&&this.stdin.setRawMode(!1),this.stdin.pause(),this._boundHandleData&&(this.stdin.removeListener("data",this._boundHandleData),this._boundHandleData=null)}handleData(t){if(t===""){this.emit("exit");return}if(t.includes("\x1B[200~")||this._pasteBuffer!==null){if(this._pasteBuffer===null?this._pasteBuffer=t.replace("\x1B[200~",""):this._pasteBuffer+=t,this._pasteBuffer.includes("\x1B[201~")){const e=this._pasteBuffer.replace("\x1B[201~","");this._pasteBuffer=null,this.emit("paste",e),this.listenerCount("paste")===0&&this.emit("data",e)}return}if(t.length===1){const e=t.charCodeAt(0);if(e>=1&&e<=26&&e!==3&&e!==9&&e!==10&&e!==13){const s=String.fromCharCode(e+96);this.emit("ctrl",s),this.emit("data",t,{ctrl:!0});return}}if(t==="\x1B[A"){this.emit("keydown","up");return}if(t==="\x1B[B"){this.emit("keydown","down");return}if(t==="\x1B[C"){this.emit("keydown","right");return}if(t==="\x1B[D"){this.emit("keydown","left");return}if(t===" "){this.emit("keydown","tab");return}if(t==="\x1B[Z"){this.emit("keydown","shift-tab");return}if(t==="\x1B"){this.emit("keydown","escape");return}if(t==="\r"||t===`
2
+ `){this.emit("keydown","enter");return}if(t===""){this.emit("keydown","backspace");return}if(t==="\x1B[3~"){this.emit("keydown","delete");return}if(t==="\x1B[5~"){this.emit("keydown","pageUp");return}if(t==="\x1B[6~"){this.emit("keydown","pageDown");return}if(t==="\x1B[H"||t==="\x1B[1~"){this.emit("keydown","home");return}if(t==="\x1B[F"||t==="\x1B[4~"){this.emit("keydown","end");return}if(t.length===2&&t[0]==="\x1B"){this.emit("meta",t[1]),this.emit("data",t,{meta:!0});return}if(t.startsWith("\x1B[<")){const e=t.match(/\u001B\[<(\d+);(\d+);(\d+)(M)/i);if(e){const s=Number.parseInt(e[1]),a=Number.parseInt(e[2])-1,d=Number.parseInt(e[3])-1,r=e[4]==="m",h=(s&4)!==0,u=(s&8)!==0,o=(s&16)!==0,n=s&-29;let i=null;if(n===0&&!r?i="left":n===1&&!r?i="middle":n===2&&!r?i="right":n===64?i="scrollUp":n===65&&(i="scrollDown"),i){const f={button:i,ctrl:o,meta:u,shift:h,x:a,y:d};this.emit("mouse",f),i==="left"&&this.emit("click",{x:a,y:d})}}return}this.emit("data",t)}}export{B as InputParser};
@@ -0,0 +1 @@
1
+ const a={backspace:"",ctrlC:"",delete:"\x1B[3~",down:"\x1B[B",end:"\x1B[F",escape:"\x1B",home:"\x1B[H",left:"\x1B[D",pageDown:"\x1B[6~",pageUp:"\x1B[5~",return:"\r",right:"\x1B[C",space:" ",tab:" ",up:"\x1B[A"},c=e=>({backspace:()=>{e(a.backspace)},delete:()=>{e(a.delete)},down:()=>{e(a.down)},end:()=>{e(a.end)},enter:()=>{e(a.return)},escape:()=>{e(a.escape)},home:()=>{e(a.home)},left:()=>{e(a.left)},pageDown:()=>{e(a.pageDown)},pageUp:()=>{e(a.pageUp)},press(p){e(p)},raw:e,right:()=>{e(a.right)},space:()=>{e(a.space)},tab:()=>{e(a.tab)},type(p){for(const t of p)e(t)},up:()=>{e(a.up)}});export{a as KEY,c as createKeySender};
@@ -0,0 +1 @@
1
+ import i from"yoga-layout";import{m as l}from"./text-width-e49vlbQH.js";const n=new Map;class N{yogaNode;children=[];parent=null;_destroyed=!1;_hidden=!1;transform;_text;fg=255;bg=255;styles=0;_style;set text(t){this._text=t,t===void 0?this.yogaNode.unsetMeasureFunc():this.yogaNode.setMeasureFunc((e,o,s,d)=>{if(t.length===0)return{height:0,width:0};const a=l(t,Number.MAX_SAFE_INTEGER);let h=a.maxLineWidth;o===i.MEASURE_MODE_EXACTLY?h=Math.max(0,Math.floor(e)):o===i.MEASURE_MODE_AT_MOST&&(h=Math.min(a.maxLineWidth,Math.max(0,Math.floor(e))));let r=a.wrappedRows;return h>0&&(r=l(t,h).wrappedRows),d===i.MEASURE_MODE_EXACTLY?r=Math.max(0,Math.floor(s)):d===i.MEASURE_MODE_AT_MOST&&(r=Math.min(r,Math.max(0,Math.floor(s)))),{height:r,width:h}})}get text(){return this._text}constructor(){this.yogaNode=i.Node.create(),this.yogaNode.setFlexDirection(i.FLEX_DIRECTION_COLUMN)}insertChild(t,e){const o=n.get(t.yogaNode);o&&o.removeChild(t);const s=t.yogaNode.getParent();s&&s.removeChild(t.yogaNode);const d=this.yogaNode.getChildCount(),a=Math.min(e,d);try{this.yogaNode.insertChild(t.yogaNode,a)}catch{return}t.parent=this,this.children.splice(a,0,t),n.set(t.yogaNode,this)}remove(){this.parent&&this.parent.removeChild(this)}removeChild(t){const e=this.children.indexOf(t);if(e!==-1){this.children.splice(e,1),t.parent=null,n.delete(t.yogaNode);const o=t.yogaNode.getParent();o&&o.removeChild(t.yogaNode)}}destroy(){if(this._destroyed)return;this._destroyed=!0;for(const e of this.children)e.parent===this&&(e.parent=null);this.children=[],n.delete(this.yogaNode);const t=this.yogaNode.getParent();t&&t.removeChild(this.yogaNode),this.yogaNode.free()}calculateLayout(t,e){this.yogaNode.setWidth(t),this.yogaNode.setHeight(e),this.yogaNode.calculateLayout(t,e,i.DIRECTION_LTR)}getLayout(){return this.yogaNode.getComputedLayout()}}export{N as LayoutNode};
@@ -0,0 +1 @@
1
+ import{createRequire as y}from"node:module";import{jsx as T}from"react/jsx-runtime";import{useRef as d,useReducer as R,useEffect as b,useMemo as j}from"react";import{useStdinContext as x}from"../ink/hooks/use-stdin.js";import w from"../ink/hooks/use-stdout.js";import{M as n,d as B}from"./ansi-parser-DlgLtOYO.js";import{o as E}from"./mouse-context-DaARgUu1.js";const v=y(import.meta.url),u=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,_=e=>{if(typeof u<"u"&&u.versions&&u.versions.node){const[t,i]=u.versions.node.split(".").map(Number);if(t>22||t===22&&i>=3||t===20&&i>=16)return u.getBuiltinModule(e)}return v(e)},{EventEmitter:h}=_("node:events"),M=u,q={button:null,click:null,drag:null,position:{x:0,y:0},scroll:null},S=(e,t)=>{switch(t.type){case"click":return{...e,button:t.button,click:t.click,position:t.position};case"click-reset":return{...e,button:null,click:null};case"drag":return{...e,button:t.button,drag:t.drag,position:t.position};case"move":return{...e,position:t.position};case"scroll":return{...e,position:t.position,scroll:t.scroll};case"scroll-reset":return{...e,scroll:null};default:return e}},z=({children:e})=>{const{internal_eventEmitter:t}=x(),{stdout:i}=w(),l=d(new h),[s,c]=R(S,q),p=d(void 0),m=d(void 0);b(()=>{const a=i.isTTY?i:M.stdout;return a.write(n.mouseButton.on+n.mouseMotion.on+n.mouseMotionOthers.on+n.mouseSGR.on),()=>{a.write(n.mouseSGR.off+n.mouseMotionOthers.off+n.mouseMotion.off+n.mouseButton.off)}},[i]),b(()=>{const a=k=>{const o=B(k);if(!o)return;const r={x:o.x,y:o.y};switch(l.current.emit("position",r),o.type){case"click":{c({button:o.button,click:o.action,position:r,type:"click"}),l.current.emit("click",r,o.action,o.button),clearTimeout(p.current),p.current=setTimeout(()=>{c({type:"click-reset"})},100);break}case"drag":{const f=o.action==="press"?"dragging":null;c({button:o.button,drag:f,position:r,type:"drag"}),l.current.emit("drag",r,f,o.button);break}case"move":{c({position:r,type:"move"});break}case"scroll":{c({position:r,scroll:o.direction,type:"scroll"}),l.current.emit("scroll",r,o.direction),clearTimeout(m.current),m.current=setTimeout(()=>{c({type:"scroll-reset"})},100);break}}};return t.on("input",a),()=>{t.off("input",a),clearTimeout(p.current),clearTimeout(m.current)}},[t]);const g=j(()=>({button:s.button,click:s.click,drag:s.drag,events:l.current,position:s.position,scroll:s.scroll}),[s]);return T(E,{value:g,children:e})};export{z as default};