@visulima/tui 1.0.0-alpha.22 → 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.
- package/CHANGELOG.md +53 -0
- package/README.md +17 -0
- package/dist/components/accordion.js +1 -1
- package/dist/components/alert.js +1 -1
- package/dist/components/animate-presence.js +1 -1
- package/dist/components/approval-prompt.js +1 -1
- package/dist/components/area-chart.js +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/bar-chart.js +1 -1
- package/dist/components/big-text.js +1 -1
- package/dist/components/blink-dot.js +1 -1
- package/dist/components/box.d.ts +1 -1
- package/dist/components/breadcrumb.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/canvas.d.ts +1 -1
- package/dist/components/canvas.js +1 -1
- package/dist/components/card.js +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/code.js +2 -2
- package/dist/components/collapsible.js +1 -1
- package/dist/components/command-block.js +4 -4
- package/dist/components/command-palette.js +1 -1
- package/dist/components/confirm-dialog.js +1 -1
- package/dist/components/confirm-input.js +1 -1
- package/dist/components/console-overlay.js +1 -1
- package/dist/components/content-switcher.js +1 -1
- package/dist/components/controlled-scroll-view.d.ts +1 -1
- package/dist/components/controlled-scroll-view.js +1 -1
- package/dist/components/cursor.d.ts +1 -1
- package/dist/components/cursor.js +1 -1
- package/dist/components/date-picker.js +1 -1
- package/dist/components/definition-list.js +1 -1
- package/dist/components/dialog.d.ts +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/diff-view.js +1 -1
- package/dist/components/divider.js +1 -1
- package/dist/components/file-picker-entry.js +1 -1
- package/dist/components/form.js +1 -1
- package/dist/components/gauge.js +1 -1
- package/dist/components/gradient.js +1 -1
- package/dist/components/heading.js +1 -1
- package/dist/components/heatmap.js +1 -1
- package/dist/components/help.js +1 -1
- package/dist/components/histogram.js +1 -1
- package/dist/components/kbd.js +1 -1
- package/dist/components/line-chart.js +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/loading-indicator.js +1 -1
- package/dist/components/markdown.js +1 -1
- package/dist/components/masked-input.js +1 -1
- package/dist/components/menu.js +1 -1
- package/dist/components/message-bubble.js +1 -1
- package/dist/components/model-badge.js +1 -1
- package/dist/components/multi-select.js +1 -1
- package/dist/components/newline.js +2 -2
- package/dist/components/operation-tree.js +1 -1
- package/dist/components/option-list.js +1 -1
- package/dist/components/ordered-list.js +1 -1
- package/dist/components/paginator.js +1 -1
- package/dist/components/paragraph.js +1 -1
- package/dist/components/placeholder.js +1 -1
- package/dist/components/progress-bar.js +1 -1
- package/dist/components/radio-group.js +1 -1
- package/dist/components/scatter-plot.js +1 -1
- package/dist/components/scroll-bar-box.d.ts +1 -1
- package/dist/components/scroll-bar-box.js +1 -1
- package/dist/components/scroll-bar.d.ts +1 -1
- package/dist/components/scroll-bar.js +1 -1
- package/dist/components/scroll-list.d.ts +1 -1
- package/dist/components/scroll-list.js +1 -1
- package/dist/components/scroll-view.d.ts +1 -1
- package/dist/components/scroll-view.js +1 -1
- package/dist/components/search-input.js +1 -1
- package/dist/components/select-input-indicator.js +1 -1
- package/dist/components/select-input-item.js +1 -1
- package/dist/components/select-input.js +1 -1
- package/dist/components/shimmer-text.js +1 -1
- package/dist/components/slider.js +1 -1
- package/dist/components/spacer.js +1 -1
- package/dist/components/sparkline.js +1 -1
- package/dist/components/spinner.js +1 -1
- package/dist/components/static-render.d.ts +1 -1
- package/dist/components/static-render.js +1 -1
- package/dist/components/static.js +1 -1
- package/dist/components/status-line.js +1 -1
- package/dist/components/status-message.js +1 -1
- package/dist/components/stepper.js +1 -1
- package/dist/components/stopwatch.js +1 -1
- package/dist/components/streaming-text.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/tab.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/tag.js +1 -1
- package/dist/components/text-input.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/textarea.js +2 -2
- package/dist/components/timer.js +1 -1
- package/dist/components/toast.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/components/transform.js +1 -1
- package/dist/components/transition.js +1 -1
- package/dist/components/tree-view-entry.d.ts +1 -1
- package/dist/components/tree-view-entry.js +1 -1
- package/dist/components/unordered-list.js +1 -1
- package/dist/core/index.js +1 -1
- package/dist/ink/hooks/use-animation.js +1 -1
- package/dist/ink/hooks/use-app.js +1 -1
- package/dist/ink/hooks/use-box-metrics.d.ts +1 -1
- package/dist/ink/hooks/use-box-metrics.js +1 -1
- package/dist/ink/hooks/use-clipboard.js +1 -1
- package/dist/ink/hooks/use-color-blindness.js +1 -1
- package/dist/ink/hooks/use-console-capture.js +1 -1
- package/dist/ink/hooks/use-cursor.js +1 -1
- package/dist/ink/hooks/use-focus-manager.js +1 -1
- package/dist/ink/hooks/use-focus.js +1 -1
- package/dist/ink/hooks/use-form.js +1 -1
- package/dist/ink/hooks/use-hotkey.js +1 -1
- package/dist/ink/hooks/use-input.js +2 -2
- package/dist/ink/hooks/use-interval.js +1 -1
- package/dist/ink/hooks/use-is-screen-reader-enabled.js +1 -1
- package/dist/ink/hooks/use-key-bindings.js +1 -1
- package/dist/ink/hooks/use-key-chord.js +1 -1
- package/dist/ink/hooks/use-linked-scroll.d.ts +1 -1
- package/dist/ink/hooks/use-linked-scroll.js +1 -1
- package/dist/ink/hooks/use-paste.js +1 -1
- package/dist/ink/hooks/use-persistent-state.d.ts +12 -3
- package/dist/ink/hooks/use-persistent-state.js +2 -2
- package/dist/ink/hooks/use-scroll-acceleration.js +1 -1
- package/dist/ink/hooks/use-scroll-input.js +1 -1
- package/dist/ink/hooks/use-stderr.js +1 -1
- package/dist/ink/hooks/use-stdin.js +1 -1
- package/dist/ink/hooks/use-stdout.js +1 -1
- package/dist/ink/hooks/use-stopwatch.js +1 -1
- package/dist/ink/hooks/use-terminal-palette.js +1 -1
- package/dist/ink/hooks/use-text-buffer.js +4 -4
- package/dist/ink/hooks/use-text-selection.d.ts +2 -2
- package/dist/ink/hooks/use-text-selection.js +1 -1
- package/dist/ink/hooks/use-timeout.js +1 -1
- package/dist/ink/hooks/use-timer.js +1 -1
- package/dist/ink/hooks/use-window-size.js +1 -1
- package/dist/ink/index.d.ts +17 -62
- package/dist/ink/index.js +1 -1
- package/dist/ink/mouse/use-element-position.d.ts +31 -0
- package/dist/ink/mouse/use-element-position.js +1 -0
- package/dist/ink/mouse/use-mouse-action.d.ts +5 -0
- package/dist/ink/mouse/use-mouse-action.js +1 -0
- package/dist/ink/mouse/use-mouse-position.d.ts +5 -0
- package/dist/ink/mouse/use-mouse-position.js +1 -0
- package/dist/ink/mouse/use-mouse.d.ts +5 -0
- package/dist/ink/mouse/use-mouse.js +1 -0
- package/dist/ink/mouse/use-on-mouse-click.d.ts +16 -0
- package/dist/ink/mouse/use-on-mouse-click.js +1 -0
- package/dist/ink/mouse/use-on-mouse-hover.d.ts +10 -0
- package/dist/ink/mouse/use-on-mouse-hover.js +1 -0
- package/dist/ink/mouse/use-on-mouse-state.d.ts +13 -0
- package/dist/ink/mouse/use-on-mouse-state.js +1 -0
- package/dist/packem_chunks/devtools.js +1 -1
- package/dist/packem_shared/COLOR_BLINDNESS_COMPENSATION-Ilnoyeqc.js +1 -0
- package/dist/packem_shared/ControlledScrollView-BoN5Oi-p.js +1 -0
- package/dist/packem_shared/DevTools-k6uiVzqv.js +1 -0
- package/dist/packem_shared/FilePicker-BLS9nOPz.js +1 -0
- package/dist/packem_shared/FocusContext-C2Sosxa4.js +1 -0
- package/dist/packem_shared/Fullscreen-BRhuBLBh.js +1 -0
- package/dist/packem_shared/IMECompositionBuffer-VhC9HRCv.js +1 -0
- package/dist/packem_shared/InputParser-CtwkCbrQ.js +2 -0
- package/dist/packem_shared/KEY-C--kOw41.js +1 -0
- package/dist/packem_shared/LayoutNode-LPYsuzBg.js +1 -0
- package/dist/packem_shared/MouseProvider-DUqQ3Eaa.js +1 -0
- package/dist/packem_shared/NAMED_COLORS-82DpREQV.js +1 -0
- package/dist/packem_shared/Range-BsVYNWtg.js +1 -0
- package/dist/packem_shared/Renderer-DsskdkUd.js +1 -0
- package/dist/packem_shared/ResizeObserver-aX8XOr2u.js +1 -0
- package/dist/packem_shared/ScrollBar-BKCK8jsb.js +1 -0
- package/dist/packem_shared/ScrollBarBox-CBhLo6eZ.js +1 -0
- package/dist/packem_shared/ScrollList-DyFyVs6I.js +1 -0
- package/dist/packem_shared/ScrollView-BEgrtSnt.js +1 -0
- package/dist/packem_shared/Static-DSzsElz4.js +1 -0
- package/dist/packem_shared/TreeNodeMap-cJlYqckB.js +1 -0
- package/dist/packem_shared/TreeView-BsvLCsf0.js +1 -0
- package/dist/packem_shared/TuiApp-BPL8v1i1.js +1 -0
- package/dist/packem_shared/TuiContext-BNmP0lMY.js +3 -0
- package/dist/packem_shared/ansi-parser-DlgLtOYO.js +1 -0
- package/dist/packem_shared/ansi-tokenizer-BU67A126.js +1 -0
- package/dist/packem_shared/braille-ch3O5D7I.js +1 -0
- package/dist/packem_shared/calculateScroll-D4Y_JR4H.js +1 -0
- package/dist/packem_shared/calculateScrollbarLayout--eUVRLw7.js +1 -0
- package/dist/packem_shared/clearOsc52-BUpnQOav.js +1 -0
- package/dist/packem_shared/clearStringWidthCache-DKFjfJuB.js +1 -0
- package/dist/packem_shared/colorize-DU4YZkp3.js +1 -0
- package/dist/packem_shared/controlled-scroll-view-t55HU9L8.js +1 -0
- package/dist/packem_shared/createInlineLoop-BT40Wpmx.js +2 -0
- package/dist/packem_shared/createScreen-DoYpyL0V.js +3 -0
- package/dist/packem_shared/dom-rphpG0kf.js +1 -0
- package/dist/packem_shared/{dom.d-DzUPFLuP.d.ts → dom.d-B4kXbaVY.d.ts} +36 -1
- package/dist/packem_shared/format-time-fjoQHMxD.js +1 -0
- package/dist/packem_shared/{getPathToRoot-BuAM_kmj.js → getPathToRoot-PDJeqiEH.js} +1 -1
- package/dist/packem_shared/input-utils-BSWCb4F_.js +1 -0
- package/dist/packem_shared/isIntersecting-Bo2npvMR.js +1 -0
- package/dist/packem_shared/isTerminalPaletteQuerySupported-BYzmqq9-.js +1 -0
- package/dist/packem_shared/kittyFlags-g8ALyoCU.js +1 -0
- package/dist/packem_shared/line-chart-C7CUrvVs.js +1 -0
- package/dist/packem_shared/load-native-root-binding-DDikxNox.js +1 -0
- package/dist/packem_shared/measure-element-Cs7_proT.js +2 -0
- package/dist/packem_shared/measure-text-B7juNq4Y.js +3 -0
- package/dist/packem_shared/mouse-context.d-BfL9xGk_.d.ts +30 -0
- package/dist/packem_shared/parseSgrMouse-bUrqPrh-.js +1 -0
- package/dist/packem_shared/processLayout-tAee0ytT.js +1 -0
- package/dist/packem_shared/reconciler-ClpU7Y-V.js +1 -0
- package/dist/packem_shared/reconciler-DhUGYWCr.js +1 -0
- package/dist/packem_shared/render-DFZ8NHlG.js +1 -0
- package/dist/packem_shared/render-v2x7ZRzT.js +24 -0
- package/dist/packem_shared/{render.d-E2MsoY_g.d.ts → render.d-CBnYBDk2.d.ts} +1 -1
- package/dist/packem_shared/renderToString-C2YmVNLG.js +4 -0
- package/dist/packem_shared/renderToString-L_bpw4OQ.js +2 -0
- package/dist/packem_shared/renderTreeToBuffer-C8lS0lJ2.js +2 -0
- package/dist/packem_shared/renderer-COXHo5Xk.js +17 -0
- package/dist/packem_shared/{selection.d-FWD8cYY2.d.ts → selection.d-CI3_p8wg.d.ts} +1 -1
- package/dist/packem_shared/squashTextNodesWithMap-BmUSBPfc.js +1 -0
- package/dist/packem_shared/stderr-context-Bvnik0hL.js +1 -0
- package/dist/packem_shared/stdin-context-88AhuztD.js +1 -0
- package/dist/packem_shared/text-width-e49vlbQH.js +2 -0
- package/dist/packem_shared/token-to-elements-D6J6-P2A.js +1 -0
- package/dist/packem_shared/treeViewTheme-Dq3ekRAC.js +1 -0
- package/dist/packem_shared/useTreeView-D5ifGwG3.js +1 -0
- package/dist/packem_shared/useTreeViewState-BiTJakkh.js +1 -0
- package/dist/packem_shared/utils-Bup8lyK8.js +1 -0
- package/dist/packem_shared/waitFor-CTAki32d.js +4 -0
- package/dist/packem_shared/wrapOrTruncateStyledLine-46W8bTtv.js +3 -0
- package/dist/react/index.js +1 -1
- package/dist/testing/index.d.ts +2 -2
- package/dist/testing/index.js +1 -1
- package/index.js +691 -539
- package/package.json +48 -23
- package/dist/packem_shared/COLOR_BLINDNESS_SIMULATION-DqErf7XX.js +0 -1
- package/dist/packem_shared/ControlledScrollView-CIc-x1Cx.js +0 -1
- package/dist/packem_shared/DevTools-ClAYpMVI.js +0 -1
- package/dist/packem_shared/FilePicker-tYj_CIau.js +0 -1
- package/dist/packem_shared/FocusContext-Xy0cwJpO.js +0 -1
- package/dist/packem_shared/Fullscreen-CxLd1-Zu.js +0 -1
- package/dist/packem_shared/IMECompositionBuffer-C89PhiOu.js +0 -1
- package/dist/packem_shared/InputParser-B_qZcN3r.js +0 -2
- package/dist/packem_shared/KEY-Bk8B-3h_.js +0 -1
- package/dist/packem_shared/LayoutNode-B8zej4dm.js +0 -1
- package/dist/packem_shared/MouseProvider-PnIUKURs.js +0 -1
- package/dist/packem_shared/NAMED_COLORS-B9fJsYdg.js +0 -1
- package/dist/packem_shared/Renderer-DJXooAsp.js +0 -1
- package/dist/packem_shared/ResizeObserverEntry-Dq0dk8Kq.js +0 -1
- package/dist/packem_shared/ScrollBar-U_37hlIT.js +0 -1
- package/dist/packem_shared/ScrollBarBox-DwiCxilX.js +0 -1
- package/dist/packem_shared/ScrollList-C7nZ9ufK.js +0 -1
- package/dist/packem_shared/ScrollView-DKZ8OM-m.js +0 -1
- package/dist/packem_shared/Static-DLynr5pn.js +0 -1
- package/dist/packem_shared/TreeNodeMap-CspqSCpb.js +0 -1
- package/dist/packem_shared/TreeView-C0Iv3et8.js +0 -1
- package/dist/packem_shared/TuiApp-BVDXP0Cv.js +0 -1
- package/dist/packem_shared/TuiContext-BoJvG3NN.js +0 -3
- package/dist/packem_shared/ansi-parser-B6uXaq65.js +0 -1
- package/dist/packem_shared/ansi-tokenizer-DqX9nJuk.js +0 -1
- package/dist/packem_shared/braille-BBjIoaN0.js +0 -1
- package/dist/packem_shared/colorize-DbTZMrJO.js +0 -1
- package/dist/packem_shared/comparePoints-C3NJirbh.js +0 -1
- package/dist/packem_shared/controlled-scroll-view-CcUS50jx.js +0 -1
- package/dist/packem_shared/createInlineLoop-DRNZ7jqH.js +0 -2
- package/dist/packem_shared/createScreen-CrLrxA6t.js +0 -3
- package/dist/packem_shared/dom-CXB-19sK.js +0 -1
- package/dist/packem_shared/format-time-C7Q-hQZq.js +0 -1
- package/dist/packem_shared/getScrollHeight-ClEOyLHH.js +0 -1
- package/dist/packem_shared/input-utils-fAxzSlNh.js +0 -1
- package/dist/packem_shared/isIntersecting-B3KbKTmu.js +0 -1
- package/dist/packem_shared/isOsc52Supported-DKK7Uee6.js +0 -1
- package/dist/packem_shared/isTerminalPaletteQuerySupported-Dn2hFAZ_.js +0 -1
- package/dist/packem_shared/kittyFlags-C3rZLbcK.js +0 -1
- package/dist/packem_shared/layout-BMo200nF.js +0 -2
- package/dist/packem_shared/line-chart-kf7uhR0K.js +0 -1
- package/dist/packem_shared/measure-text-Ce2widM1.js +0 -3
- package/dist/packem_shared/measureElement-BTtTFZg4.js +0 -1
- package/dist/packem_shared/parseSgrMouse-Ccj70ijb.js +0 -1
- package/dist/packem_shared/processLayout-FEKj_mWu.js +0 -1
- package/dist/packem_shared/reconciler-DIfG72R9.js +0 -1
- package/dist/packem_shared/reconciler-DYE5h4K4.js +0 -1
- package/dist/packem_shared/render-BRR1ESvR.js +0 -26
- package/dist/packem_shared/render-Dh7HMhK1.js +0 -1
- package/dist/packem_shared/renderToString-BbQiRHrd.js +0 -2
- package/dist/packem_shared/renderToString-vEQyGmv6.js +0 -4
- package/dist/packem_shared/renderTreeToBuffer-CZilzyhN.js +0 -2
- package/dist/packem_shared/renderer-maLLQcut.js +0 -17
- package/dist/packem_shared/setEnableStyledLineCache-DSbMbENc.js +0 -1
- package/dist/packem_shared/squashTextNodesWithMap-DCdi3SZ2.js +0 -1
- package/dist/packem_shared/stderr-context-BzEaUICS.js +0 -1
- package/dist/packem_shared/stdin-context-BTaaFagk.js +0 -1
- package/dist/packem_shared/text-width-BU2eeTWn.js +0 -2
- package/dist/packem_shared/token-to-elements-BAZpNZsu.js +0 -1
- package/dist/packem_shared/treeViewTheme-1RIZyB4M.js +0 -1
- package/dist/packem_shared/useElementDimensions-qJ_WXFZ9.js +0 -1
- package/dist/packem_shared/useMouseAction-2dRfU1vE.js +0 -1
- package/dist/packem_shared/useMouseContext-C746G7kY.js +0 -1
- package/dist/packem_shared/useMousePosition-BTWfV4JK.js +0 -1
- package/dist/packem_shared/useOnMouseClick-nY8xLZmt.js +0 -1
- package/dist/packem_shared/useOnMouseHover-D3DczIol.js +0 -1
- package/dist/packem_shared/useOnMouseState-cRK8QvzD.js +0 -1
- package/dist/packem_shared/useTreeView-BoMMeRPq.js +0 -1
- package/dist/packem_shared/useTreeViewState-CRPCUWrb.js +0 -1
- package/dist/packem_shared/utils-CoviI5Vm.js +0 -1
- package/dist/packem_shared/waitFor-Dj5zfL5s.js +0 -4
- package/dist/packem_shared/wrapOrTruncateStyledLine-C5rcIrNb.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
2
|
-
`)},
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2
|
-
`);return
|
|
3
|
-
`),
|
|
4
|
-
`)},[]),
|
|
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 {
|
|
3
|
-
import { S as Selection } from "../../packem_shared/selection.d-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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};
|
package/dist/ink/index.d.ts
CHANGED
|
@@ -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 {
|
|
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-
|
|
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-
|
|
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 {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
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
|
|
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/
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
-
|
|
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};
|