silvery 0.15.0 → 0.16.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/README.md +2 -2
- package/bin/silvery.js +4 -0
- package/bin/silvery.js.map +10 -0
- package/dist/index.js +23 -101
- package/dist/ink.js +6 -6
- package/dist/runtime.js +7 -7
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Powerful apps. Polished UIs. Proudly terminal.**
|
|
4
4
|
|
|
5
|
-
Ink-compatible React renderer for interactive terminal apps. Same `Box`, `Text`, `useInput` API you know.
|
|
5
|
+
Ink-compatible React renderer for interactive terminal apps. Same `Box`, `Text`, `useInput` API you know. 3–27× faster (typically 15–20×) in mounted rerender benchmarks.
|
|
6
6
|
|
|
7
7
|
```console
|
|
8
8
|
$ npm install silvery react
|
|
@@ -35,7 +35,7 @@ await render(<Counter />).run()
|
|
|
35
35
|
|
|
36
36
|
### Shiny new stuff
|
|
37
37
|
|
|
38
|
-
- **[Best-in-class performance](https://silvery.dev/guide/silvery-vs-ink#performance-size)** —
|
|
38
|
+
- **[Best-in-class performance](https://silvery.dev/guide/silvery-vs-ink#performance-size)** — 3–27× faster (typically 15–20×) than Ink in mounted rerender benchmarks, 10–20× less terminal output. Cell-level dirty tracking, only changed cells emit. Per-node skip for unchanged subtrees. Works in inline mode with native scrollback, not just fullscreen
|
|
39
39
|
- **Pure TypeScript, zero native deps** — no WASM, no build steps. [Layout via Flexily](https://silvery.dev/guide/layout-engine) (or Yoga). Works on Alpine, CI, Docker, everywhere
|
|
40
40
|
- **[Web-like responsive layout](https://silvery.dev/guide/silvery-vs-ink#responsive-layout)** — `useBoxRect()` returns actual dimensions during render. No post-render measurement, no two-pass layout cycle. Enables:
|
|
41
41
|
- [Scroll containers](https://silvery.dev/guide/scrolling) — `overflow="scroll"` with virtualization
|
package/bin/silvery.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{resolve,dirname,join}from"node:path";import{readFileSync,existsSync}from"node:fs";import{spawn}from"node:child_process";import{fileURLToPath}from"node:url";var __filename2=fileURLToPath(import.meta.url),__dirname2=dirname(__filename2);function findPackageRoot(startDir){let dir=startDir;for(let i=0;i<10;i++){let pkg=join(dir,"package.json");if(existsSync(pkg))try{if(JSON.parse(readFileSync(pkg,"utf8")).name==="silvery")return dir}catch{}let parent=dirname(dir);if(parent===dir)break;dir=parent}return dirname(startDir)}var runtime=typeof globalThis.Bun<"u"?"bun":"node",root=findPackageRoot(__dirname2),args=process.argv.slice(2),examplesCli=resolve(root,"packages/examples/bin/cli.ts");if(args.includes("--version")||args.includes("-v")){let pkg=JSON.parse(readFileSync(resolve(root,"package.json"),"utf8"));console.log(`silvery ${pkg.version}`),process.exit(0)}var delegateArgs=args[0]==="examples"?args.slice(1):args,runArgs=runtime==="bun"?["run",examplesCli,...delegateArgs]:[examplesCli,...delegateArgs],proc=spawn(runtime,runArgs,{stdio:"inherit"});proc.on("exit",(code)=>process.exit(code??1));
|
|
3
|
+
|
|
4
|
+
//# debugId=BD6B672EEBA48F8E64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["silvery.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"#!/usr/bin/env node\n/**\n * silvery CLI — delegates to @silvery/examples\n * Works on both Node.js 23.6+ and Bun.\n */\nimport { resolve, dirname, join } from \"node:path\"\nimport { readFileSync, existsSync } from \"node:fs\"\nimport { spawn } from \"node:child_process\"\nimport { fileURLToPath } from \"node:url\"\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = dirname(__filename)\n\n// Find package root by walking up looking for package.json with name \"silvery\"\nfunction findPackageRoot(startDir: string): string {\n let dir = startDir\n for (let i = 0; i < 10; i++) {\n const pkg = join(dir, \"package.json\")\n if (existsSync(pkg)) {\n try {\n const json = JSON.parse(readFileSync(pkg, \"utf8\")) as { name?: string }\n if (json.name === \"silvery\") return dir\n } catch {}\n }\n const parent = dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n return dirname(startDir)\n}\n\n// Detect runtime for spawning child processes\nconst runtime = typeof globalThis.Bun !== \"undefined\" ? \"bun\" : \"node\"\n\nconst root = findPackageRoot(__dirname)\nconst args = process.argv.slice(2)\nconst examplesCli = resolve(root, \"packages/examples/bin/cli.ts\")\n\nif (args.includes(\"--version\") || args.includes(\"-v\")) {\n const pkg = JSON.parse(readFileSync(resolve(root, \"package.json\"), \"utf8\")) as { version?: string }\n console.log(`silvery ${pkg.version}`)\n process.exit(0)\n}\n\n// Strip \"examples\" subcommand — the examples CLI handles bare args as example names\nconst delegateArgs = args[0] === \"examples\" ? args.slice(1) : args\n\nconst runArgs = runtime === \"bun\" ? [\"run\", examplesCli, ...delegateArgs] : [examplesCli, ...delegateArgs]\nconst proc = spawn(runtime, runArgs, {\n stdio: \"inherit\",\n})\nproc.on(\"exit\", (code) => process.exit(code ?? 1))\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";AAKA,4CACA,6CACA,sCACA,oCAEA,IAAM,YAAa,cAAc,YAAY,GAAG,EAC1C,WAAY,QAAQ,WAAU,EAGpC,SAAS,eAAe,CAAC,SAA0B,CACjD,IAAI,IAAM,SACV,QAAS,EAAI,EAAG,EAAI,GAAI,IAAK,CAC3B,IAAM,IAAM,KAAK,IAAK,cAAc,EACpC,GAAI,WAAW,GAAG,EAChB,GAAI,CAEF,GADa,KAAK,MAAM,aAAa,IAAK,MAAM,CAAC,EACxC,OAAS,UAAW,OAAO,IACpC,KAAM,EAEV,IAAM,OAAS,QAAQ,GAAG,EAC1B,GAAI,SAAW,IAAK,MACpB,IAAM,OAER,OAAO,QAAQ,QAAQ,EAIzB,IAAM,QAAU,OAAO,WAAW,IAAQ,IAAc,MAAQ,OAE1D,KAAO,gBAAgB,UAAS,EAChC,KAAO,QAAQ,KAAK,MAAM,CAAC,EAC3B,YAAc,QAAQ,KAAM,8BAA8B,EAEhE,GAAI,KAAK,SAAS,WAAW,GAAK,KAAK,SAAS,IAAI,EAAG,CACrD,IAAM,IAAM,KAAK,MAAM,aAAa,QAAQ,KAAM,cAAc,EAAG,MAAM,CAAC,EAC1E,QAAQ,IAAI,WAAW,IAAI,SAAS,EACpC,QAAQ,KAAK,CAAC,EAIhB,IAAM,aAAe,KAAK,KAAO,WAAa,KAAK,MAAM,CAAC,EAAI,KAExD,QAAU,UAAY,MAAQ,CAAC,MAAO,YAAa,GAAG,YAAY,EAAI,CAAC,YAAa,GAAG,YAAY,EACnG,KAAO,MAAM,QAAS,QAAS,CACnC,MAAO,SACT,CAAC,EACD,KAAK,GAAG,OAAQ,CAAC,OAAS,QAAQ,KAAK,MAAQ,CAAC,CAAC",
|
|
8
|
+
"debugId": "BD6B672EEBA48F8E64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|