@dkkoval/tui-preview 0.1.1 → 0.2.1

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/dist/index.cjs DELETED
@@ -1 +0,0 @@
1
- "use strict";var V=Object.defineProperty;var G=(e,t,n)=>t in e?V(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var R=(e,t,n)=>G(e,typeof t!="symbol"?t+"":t,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("react/jsx-runtime"),v=require("react");let k=null;function H(){return k||(k=Promise.resolve().then(()=>require("./ghostty-web-DkOZu5AZ.cjs")).then(async e=>(await e.init(),e))),k}const _={cols:80,rows:24},W={},$=[];function Y(e){return"wasm"in e}function C(e){const t=e??$;return typeof t=="function"?t:()=>t}function Z(e){return e.cols!==void 0||e.rows!==void 0?{fit:"none",size:{cols:Math.max(1,e.cols??_.cols),rows:Math.max(1,e.rows??_.rows)}}:{fit:"container",size:_}}let D=!1;function J(e){!e||D||(D=!0,console.warn("[tui-preview] Legacy props (`app`, `args`, `cols`, `rows`, `fontSize`, `fontFamily`, `theme`) are deprecated. Use `wasm`, `argv`, `fit`, `size`, and `terminal`."))}function K(e){var i,o,r,s,c,u,a,h,m;if(Y(e)){const y=e.fit??(e.size?"none":"container"),d=y==="none"?{cols:Math.max(1,((i=e.size)==null?void 0:i.cols)??_.cols),rows:Math.max(1,((o=e.size)==null?void 0:o.rows)??_.rows)}:{cols:Math.max(1,((r=e.size)==null?void 0:r.cols)??_.cols),rows:Math.max(1,((s=e.size)==null?void 0:s.rows)??_.rows)},E=e.mode??"terminal";return{wasm:e.wasm,env:e.env??W,interactive:E==="static"?!1:e.interactive??!0,mode:E,fit:y,size:d,terminal:{fontSize:((c=e.terminal)==null?void 0:c.fontSize)??14,fontFamily:((u=e.terminal)==null?void 0:u.fontFamily)??"monospace",cursorBlink:((a=e.terminal)==null?void 0:a.cursorBlink)??!0,convertEol:((h=e.terminal)==null?void 0:h.convertEol)??!0,theme:(m=e.terminal)==null?void 0:m.theme},resolveArgv:C(e.argv),onExit:e.onExit,onError:e.onError,onStatusChange:e.onStatusChange,usedLegacyProps:!1}}const{fit:t,size:n}=Z(e);return{wasm:e.app,env:e.env??W,interactive:e.interactive??!0,mode:"terminal",fit:t,size:n,terminal:{fontSize:e.fontSize??14,fontFamily:e.fontFamily??"monospace",cursorBlink:!0,convertEol:!0,theme:e.theme},resolveArgv:C(e.args),onExit:e.onExit,onError:e.onError,onStatusChange:e.onStatusChange,usedLegacyProps:!0}}const w=0,X=6,b=8,tt=0,L=1,et=2;class j{constructor(t){R(this,"inputQueue",[]);R(this,"memory");this.opts=t}pushInput(t){const n=typeof t=="string"?new TextEncoder().encode(t):t;this.inputQueue.push(n)}attachMemory(t){this.memory=t}view(){return new DataView(this.memory.buffer)}u8(){return new Uint8Array(this.memory.buffer)}get imports(){return{args_sizes_get:(t,n)=>{const{args:i}=this.opts,o=new TextEncoder,r=i.reduce((s,c)=>s+o.encode(c).length+1,0);return this.view().setUint32(t,i.length,!0),this.view().setUint32(n,r,!0),w},args_get:(t,n)=>{const i=new TextEncoder,o=this.u8(),r=this.view();let s=n;return this.opts.args.forEach((c,u)=>{const a=i.encode(c);o.set(a,s),o[s+a.length]=0,r.setUint32(t+u*4,s,!0),s+=a.length+1}),w},environ_sizes_get:(t,n)=>{const i=this.envEntries(),o=new TextEncoder,r=i.reduce((s,c)=>s+o.encode(c).length+1,0);return this.view().setUint32(t,i.length,!0),this.view().setUint32(n,r,!0),w},environ_get:(t,n)=>{const i=new TextEncoder,o=this.u8(),r=this.view();let s=n;return this.envEntries().forEach((c,u)=>{const a=i.encode(c);o.set(a,s),o[s+a.length]=0,r.setUint32(t+u*4,s,!0),s+=a.length+1}),w},fd_write:(t,n,i,o)=>{if(t!==L&&t!==et)return b;const r=this.view(),s=this.u8();let c=0;const u=[];for(let m=0;m<i;m++){const y=r.getUint32(n+m*8,!0),d=r.getUint32(n+m*8+4,!0);u.push(s.slice(y,y+d)),c+=d}const a=new Uint8Array(c);let h=0;for(const m of u)a.set(m,h),h+=m.length;return t===L?this.opts.stdout(a):this.opts.stderr(a),r.setUint32(o,c,!0),w},fd_read:(t,n,i,o)=>{if(t!==tt)return b;const r=this.inputQueue.shift();if(!r)return X;const s=this.view(),c=this.u8();let u=0;for(let a=0;a<i&&u<r.length;a++){const h=s.getUint32(n+a*8,!0),m=s.getUint32(n+a*8+4,!0),y=Math.min(m,r.length-u);c.set(r.subarray(u,u+y),h),u+=y}return s.setUint32(o,u,!0),w},poll_oneoff:(t,n,i,o)=>{const r=this.view();let s=0;for(let c=0;c<i;c++){const u=t+c*48,a=r.getUint8(u+8);if(a===0&&this.inputQueue.length>0){const h=n+s*32;r.setBigUint64(h,r.getBigUint64(u,!0),!0),r.setUint16(h+8,0,!0),r.setUint8(h+10,a),s++}}return r.setUint32(o,s,!0),w},proc_exit:t=>{throw this.opts.onExit(t),new p(t)},random_get:(t,n)=>(crypto.getRandomValues(new Uint8Array(this.memory.buffer,t,n)),w),fd_close:()=>w,fd_seek:()=>w,fd_fdstat_get:(t,n)=>(this.view().setUint8(n,t<=2?2:0),w),fd_prestat_get:()=>b,fd_prestat_dir_name:()=>b,path_open:()=>b,sched_yield:()=>w,clock_time_get:(t,n,i)=>{const o=BigInt(Date.now())*1000000n;return this.view().setBigUint64(i,o,!0),w}}}envEntries(){const t={TERM:"xterm-256color",COLORTERM:"truecolor",...this.opts.env};return Object.entries(t).map(([n,i])=>`${n}=${i}`)}}class p extends Error{constructor(t){super(`WASI exit: ${t}`),this.code=t}}const I=new Map;async function N(e,t){const n=e.toString();let i=I.get(n);if(!i){const u=await(await fetch(e)).arrayBuffer();i=await WebAssembly.compile(u),I.set(n,i)}const o={wasi_snapshot_preview1:t.imports},r=await WebAssembly.instantiate(i,o);t.attachMemory(r.exports.memory);const s=r.exports._start;if(!s)throw new Error("WASM module has no _start export");return{run:async()=>{try{s()}catch(c){if(!(c instanceof p))throw c}}}}function nt(e){var y;const t=v.useMemo(()=>K(e),[e]),n=v.useRef(null),i=v.useRef(null),o=v.useRef(null),[r,s]=v.useState("loading"),[c,u]=v.useState(""),a=v.useRef(null),[h,m]=v.useState(t.size);return v.useEffect(()=>{J(t.usedLegacyProps)},[t.usedLegacyProps]),v.useEffect(()=>{m(t.size)},[t.fit,t.size.cols,t.size.rows]),v.useEffect(()=>{if(t.fit!=="container"||!n.current)return;const d=new ResizeObserver(([E])=>{var z,A;const{width:x,height:S}=E.contentRect;if(x>0&&S>0){const f=((z=a.current)==null?void 0:z.w)??t.terminal.fontSize*.6,l=((A=a.current)==null?void 0:A.h)??t.terminal.fontSize*1.2;m({cols:Math.max(1,Math.floor(x/f)),rows:Math.max(1,Math.floor(S/l))})}});return d.observe(n.current),()=>d.disconnect()},[t.fit,t.terminal.fontSize]),v.useEffect(()=>{if(!h||!i.current)return;let d=!1;const E=i.current,x=h,S=f=>{var l;s(f),(l=t.onStatusChange)==null||l.call(t,f)},z=f=>{var l;S("error"),u(f instanceof Error?f.message:String(f)),(l=t.onError)==null||l.call(t,f)};S("loading"),u("");async function A(){try{const f=await H();if(d)return;E.innerHTML="";const l=new f.Terminal({cols:x.cols,rows:x.rows,fontSize:t.terminal.fontSize,fontFamily:t.terminal.fontFamily,theme:t.terminal.theme,disableStdin:!t.interactive,cursorBlink:t.terminal.cursorBlink,convertEol:t.terminal.convertEol});o.current=l,l.open(E),t.mode==="static"&&l.write("\x1B[?25l");let U=l.cols,M=l.rows;if(t.fit==="container"){const g=new f.FitAddon;l.loadAddon(g),g.fit(),U=l.cols,M=l.rows,n.current&&U>0&&M>0&&(a.current={w:n.current.clientWidth/U,h:n.current.clientHeight/M})}const q=t.resolveArgv({cols:U,rows:M}),B=new TextDecoder,F=new j({args:[t.wasm.toString(),...q],env:t.env,stdout:g=>l.write(B.decode(g)),stderr:g=>l.write(B.decode(g)),onExit:g=>{var P;d||(S("exited"),(P=t.onExit)==null||P.call(t,g))}});t.interactive&&l.onData(g=>F.pushInput(g));const Q=await N(t.wasm,F);if(d)return;S("running"),queueMicrotask(()=>{d||Q.run().catch(g=>{d||z(g)})})}catch(f){d||z(f)}}return A(),()=>{var f;d=!0,(f=o.current)==null||f.dispose(),o.current=null}},[t.mode,h,t.wasm,t.resolveArgv,t.env,t.fit,t.interactive,t.onExit,t.onError,t.onStatusChange,t.terminal.fontSize,t.terminal.fontFamily,t.terminal.theme,t.terminal.cursorBlink,t.terminal.convertEol]),T.jsxs("div",{ref:n,className:e.className,style:{position:"relative",display:"inline-block",background:((y=t.terminal.theme)==null?void 0:y.background)??"#1a1b26",borderRadius:6,overflow:"hidden",...e.style},children:[T.jsx("div",{ref:i,style:{display:r==="error"?"none":void 0}}),r==="loading"&&T.jsx("div",{style:O,children:"Loading…"}),r==="error"&&T.jsxs("div",{style:{...O,color:"#f7768e"},children:["Error: ",c]})]})}const O={padding:"1rem",fontFamily:"monospace",fontSize:14,color:"#a9b1d6"};exports.TuiPreview=nt;exports.WasiBridge=j;exports.WasiExitError=p;exports.instantiateApp=N;
package/dist/wasi.d.ts DELETED
@@ -1 +0,0 @@
1
- export { WasiBridge, WasiExitError, instantiateApp } from "./core/wasi.js";
package/dist/wasi.js DELETED
@@ -1,2 +0,0 @@
1
- // Backwards-compatible re-export.
2
- export { WasiBridge, WasiExitError, instantiateApp } from "./core/wasi.js";