silvery 0.17.4 → 0.18.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.
Files changed (154) hide show
  1. package/README.md +7 -13
  2. package/dist/{UPNG-AVSMjiFE.mjs → UPNG-DvKjM6wE.mjs} +1 -1
  3. package/dist/{UPNG-AVSMjiFE.mjs.map → UPNG-DvKjM6wE.mjs.map} +1 -1
  4. package/dist/{__vite-browser-external-2447137e-D3GdsvS_.mjs → __vite-browser-external-2447137e-DPKHHqQK.mjs} +1 -1
  5. package/dist/{__vite-browser-external-2447137e-D3GdsvS_.mjs.map → __vite-browser-external-2447137e-DPKHHqQK.mjs.map} +1 -1
  6. package/dist/{animation-C_PTO0uH.mjs → animation-DhINOJk8.mjs} +1 -1
  7. package/dist/{animation-C_PTO0uH.mjs.map → animation-DhINOJk8.mjs.map} +1 -1
  8. package/dist/{ansi-CXLE_pt1.mjs → ansi-C6Qs1Wn2.mjs} +1 -1
  9. package/dist/{ansi-CXLE_pt1.mjs.map → ansi-C6Qs1Wn2.mjs.map} +1 -1
  10. package/dist/{ansi-zmNzgkPB.d.mts → ansi-CsjnZtAw.d.mts} +1 -1
  11. package/dist/{ansi-zmNzgkPB.d.mts.map → ansi-CsjnZtAw.d.mts.map} +1 -1
  12. package/dist/apng-CvSlLBtc.mjs +3 -0
  13. package/dist/{apng-ENBAJk-H.mjs → apng-DFFVOItr.mjs} +3 -3
  14. package/dist/{apng-ENBAJk-H.mjs.map → apng-DFFVOItr.mjs.map} +1 -1
  15. package/dist/{backend-CkIkIHR-.mjs → backend-DU0Y938U.mjs} +1 -1
  16. package/dist/{backend-CkIkIHR-.mjs.map → backend-DU0Y938U.mjs.map} +1 -1
  17. package/dist/{backends-CkvbG3js.mjs → backends-BihMKFY_.mjs} +3 -3
  18. package/dist/{backends-CkvbG3js.mjs.map → backends-BihMKFY_.mjs.map} +1 -1
  19. package/dist/backends-Dk_5G_gC.mjs +3 -0
  20. package/dist/cli-GwJ0S2In.mjs +4 -0
  21. package/dist/{context-QreF3UHr.mjs → context-BjWgrikx.mjs} +1 -1
  22. package/dist/{context-QreF3UHr.mjs.map → context-BjWgrikx.mjs.map} +1 -1
  23. package/dist/{derive-D7bFJdfU.d.mts → derive-O_Kb1Bk_.d.mts} +3 -3
  24. package/dist/derive-O_Kb1Bk_.d.mts.map +1 -0
  25. package/dist/{devtools-owvUPfBi.mjs → devtools-CeO9X_uv.mjs} +4 -4
  26. package/dist/{devtools-owvUPfBi.mjs.map → devtools-CeO9X_uv.mjs.map} +1 -1
  27. package/dist/devtools-nX4tj6OH.mjs +2 -0
  28. package/dist/{eta-DLiVPaSD.mjs → eta-BnQSZcWf.mjs} +1 -1
  29. package/dist/{eta-DLiVPaSD.mjs.map → eta-BnQSZcWf.mjs.map} +1 -1
  30. package/dist/{flexily-zero-adapter-DmG4Ge8t.mjs → flexily-zero-adapter-BOM0cl8R.mjs} +61 -9
  31. package/dist/flexily-zero-adapter-BOM0cl8R.mjs.map +1 -0
  32. package/dist/{flexily-zero-adapter-GHwEW11s.mjs → flexily-zero-adapter-V8R3HQtK.mjs} +1 -1
  33. package/dist/{gif-Bp6fIyN3.mjs → gif-B9Uq4qZA.mjs} +3 -3
  34. package/dist/{gif-Bp6fIyN3.mjs.map → gif-B9Uq4qZA.mjs.map} +1 -1
  35. package/dist/gif-BdrLRBmM.mjs +3 -0
  36. package/dist/{gifenc-GiVCZ9-3.mjs → gifenc-DfhOb4xr.mjs} +1 -1
  37. package/dist/{gifenc-GiVCZ9-3.mjs.map → gifenc-DfhOb4xr.mjs.map} +1 -1
  38. package/dist/{image-Dx7gYjkq.mjs → image-B0zMbVUr.mjs} +136 -5
  39. package/dist/image-B0zMbVUr.mjs.map +1 -0
  40. package/dist/index-Bh3U1K09.d.mts +10823 -0
  41. package/dist/index-Bh3U1K09.d.mts.map +1 -0
  42. package/dist/{index-p-wBs_wH.d.mts → index-C4vrhbud.d.mts} +1 -1
  43. package/dist/{index-p-wBs_wH.d.mts.map → index-C4vrhbud.d.mts.map} +1 -1
  44. package/dist/{index-DCVL3jHo.d.mts → index-dehZ18K-.d.mts} +144 -99
  45. package/dist/index-dehZ18K-.d.mts.map +1 -0
  46. package/dist/index.d.mts +7 -7219
  47. package/dist/index.d.mts.map +1 -1
  48. package/dist/index.mjs +13 -9343
  49. package/dist/index.mjs.map +1 -1
  50. package/dist/{key-mapping-BsUHe_nk.mjs → key-mapping-7k2ufK2b.mjs} +1 -1
  51. package/dist/{key-mapping-DsyfLEdC.mjs → key-mapping-WLUmxjx1.mjs} +1 -1
  52. package/dist/{key-mapping-DsyfLEdC.mjs.map → key-mapping-WLUmxjx1.mjs.map} +1 -1
  53. package/dist/{layout-engine-D_lSR4i9.mjs → layout-engine--drvrWjD.mjs} +1 -1
  54. package/dist/{layout-engine-B3dsnVLU.mjs → layout-engine-Dr3cY5U4.mjs} +3 -3
  55. package/dist/{layout-engine-B3dsnVLU.mjs.map → layout-engine-Dr3cY5U4.mjs.map} +1 -1
  56. package/dist/{multi-progress-CQVB9lES.mjs → multi-progress-CcdqJFlf.mjs} +3 -3
  57. package/dist/{multi-progress-CQVB9lES.mjs.map → multi-progress-CcdqJFlf.mjs.map} +1 -1
  58. package/dist/{multi-progress-C0-rkn86.d.mts → multi-progress-DQ-uUzLf.d.mts} +2 -2
  59. package/dist/{multi-progress-C0-rkn86.d.mts.map → multi-progress-DQ-uUzLf.d.mts.map} +1 -1
  60. package/dist/{node-Dedx-6xF.mjs → node-CP5WChgr.mjs} +1 -1
  61. package/dist/{node-Dedx-6xF.mjs.map → node-CP5WChgr.mjs.map} +1 -1
  62. package/dist/{progress-bar-COPSBlT9.mjs → progress-bar-IrUjkLfU.mjs} +4 -4
  63. package/dist/{progress-bar-COPSBlT9.mjs.map → progress-bar-IrUjkLfU.mjs.map} +1 -1
  64. package/dist/{reconciler-B-NaZvbO.mjs → reconciler-B8uxQxaU.mjs} +57 -81
  65. package/dist/reconciler-B8uxQxaU.mjs.map +1 -0
  66. package/dist/{render-string-CZKpuKXo.mjs → render-string-BwLG7rIX.mjs} +1 -1
  67. package/dist/{pipeline-BmfaZb1O.mjs → render-string-DVfgc8xr.mjs} +836 -508
  68. package/dist/render-string-DVfgc8xr.mjs.map +1 -0
  69. package/dist/{resvg-js-V6oMi8CY.mjs → resvg-js-Cwipz-_J.mjs} +1 -1
  70. package/dist/{resvg-js-V6oMi8CY.mjs.map → resvg-js-Cwipz-_J.mjs.map} +1 -1
  71. package/dist/runtime.d.mts +2 -2
  72. package/dist/runtime.mjs +3 -3
  73. package/dist/{spinner-Cgej6Vnb.d.mts → spinner-BRkaJI0N.d.mts} +2 -2
  74. package/dist/{spinner-Cgej6Vnb.d.mts.map → spinner-BRkaJI0N.d.mts.map} +1 -1
  75. package/dist/{spinner-DSByknyx.mjs → spinner-BmldKx0M.mjs} +3 -3
  76. package/dist/{spinner-DSByknyx.mjs.map → spinner-BmldKx0M.mjs.map} +1 -1
  77. package/dist/{src-C9f3hiVG.mjs → src-C0sOQW-t.mjs} +402 -156
  78. package/dist/src-C0sOQW-t.mjs.map +1 -0
  79. package/dist/src-CJPXf3fC.mjs +18348 -0
  80. package/dist/src-CJPXf3fC.mjs.map +1 -0
  81. package/dist/{src-fJVbhdn-.mjs → src-D8kLrQBT.mjs} +1 -1
  82. package/dist/{src-fJVbhdn-.mjs.map → src-D8kLrQBT.mjs.map} +1 -1
  83. package/dist/{src-9B5k0JmY.mjs → src-D_BS-as7.mjs} +1130 -100
  84. package/dist/src-D_BS-as7.mjs.map +1 -0
  85. package/dist/theme.d.mts +45 -30
  86. package/dist/theme.d.mts.map +1 -1
  87. package/dist/theme.mjs +3 -3
  88. package/dist/{types-CDgkE-Rw.d.mts → types-B4A8Ebba.d.mts} +1 -1
  89. package/dist/{types-CDgkE-Rw.d.mts.map → types-B4A8Ebba.d.mts.map} +1 -1
  90. package/dist/types-e4dpfbSa.mjs +468 -0
  91. package/dist/types-e4dpfbSa.mjs.map +1 -0
  92. package/dist/ui/animation.d.mts +1 -1
  93. package/dist/ui/animation.mjs +1 -1
  94. package/dist/ui/ansi.d.mts +1 -1
  95. package/dist/ui/ansi.mjs +1 -1
  96. package/dist/ui/cli.d.mts +3 -3
  97. package/dist/ui/cli.mjs +5 -5
  98. package/dist/ui/display.d.mts +2 -2
  99. package/dist/ui/display.mjs +1 -1
  100. package/dist/ui/display.mjs.map +1 -1
  101. package/dist/ui/image.d.mts +1 -1
  102. package/dist/ui/image.mjs +1 -1
  103. package/dist/ui/input.d.mts +3 -3
  104. package/dist/ui/input.mjs +2 -2
  105. package/dist/ui/input.mjs.map +1 -1
  106. package/dist/ui/progress.d.mts +3 -3
  107. package/dist/ui/progress.mjs +4 -4
  108. package/dist/ui/progress.mjs.map +1 -1
  109. package/dist/ui/react.d.mts +3 -3
  110. package/dist/ui/react.mjs +4 -4
  111. package/dist/ui/react.mjs.map +1 -1
  112. package/dist/ui/utils.mjs +1 -1
  113. package/dist/ui/wrappers.d.mts +2 -2
  114. package/dist/ui/wrappers.mjs +1 -1
  115. package/dist/ui.d.mts +5 -5
  116. package/dist/ui.mjs +6 -6
  117. package/dist/{useLatest-BMIYXd6e.d.mts → useLatest-6xqnGIU6.d.mts} +1 -1
  118. package/dist/{useLatest-BMIYXd6e.d.mts.map → useLatest-6xqnGIU6.d.mts.map} +1 -1
  119. package/dist/{with-text-input-CmHf_9d6.d.mts → with-text-input-lUh9gYAG.d.mts} +3 -3
  120. package/dist/{with-text-input-CmHf_9d6.d.mts.map → with-text-input-lUh9gYAG.d.mts.map} +1 -1
  121. package/dist/{wrapper-Dqh0zi2W.mjs → wrapper-CE6GQ27z.mjs} +1 -1
  122. package/dist/{wrapper-Dqh0zi2W.mjs.map → wrapper-CE6GQ27z.mjs.map} +1 -1
  123. package/dist/{wrappers-hhL8EQ_n.mjs → wrappers-JrEYTuKA.mjs} +4 -4
  124. package/dist/wrappers-JrEYTuKA.mjs.map +1 -0
  125. package/dist/yoga-adapter-B8LZpQcE.mjs +2 -0
  126. package/dist/{yoga-adapter-BJ9SOhTY.mjs → yoga-adapter-Bc8XT9cN.mjs} +11 -2
  127. package/dist/yoga-adapter-Bc8XT9cN.mjs.map +1 -0
  128. package/package.json +20 -14
  129. package/dist/apng-DCWY913R.mjs +0 -3
  130. package/dist/backends-CyJqNLeK.mjs +0 -3
  131. package/dist/cli-B-k7Bm56.mjs +0 -4
  132. package/dist/derive-D7bFJdfU.d.mts.map +0 -1
  133. package/dist/devtools-DS9NseGT.mjs +0 -2
  134. package/dist/flexily-zero-adapter-DmG4Ge8t.mjs.map +0 -1
  135. package/dist/gif-BaJNREpP.mjs +0 -3
  136. package/dist/image-Dx7gYjkq.mjs.map +0 -1
  137. package/dist/index-CBcSpGSM.d.mts +0 -3416
  138. package/dist/index-CBcSpGSM.d.mts.map +0 -1
  139. package/dist/index-DCVL3jHo.d.mts.map +0 -1
  140. package/dist/pipeline-BmfaZb1O.mjs.map +0 -1
  141. package/dist/reconciler-B-NaZvbO.mjs.map +0 -1
  142. package/dist/render-string-Bvh1XzBv.mjs +0 -201
  143. package/dist/render-string-Bvh1XzBv.mjs.map +0 -1
  144. package/dist/runtime-PH2xY1DM.mjs +0 -8723
  145. package/dist/runtime-PH2xY1DM.mjs.map +0 -1
  146. package/dist/src-9B5k0JmY.mjs.map +0 -1
  147. package/dist/src-C9f3hiVG.mjs.map +0 -1
  148. package/dist/types-Bhj5QkIQ.mjs +0 -13
  149. package/dist/types-Bhj5QkIQ.mjs.map +0 -1
  150. package/dist/useLayout-BG2cGl15.mjs +0 -139
  151. package/dist/useLayout-BG2cGl15.mjs.map +0 -1
  152. package/dist/wrappers-hhL8EQ_n.mjs.map +0 -1
  153. package/dist/yoga-adapter-BJ9SOhTY.mjs.map +0 -1
  154. package/dist/yoga-adapter-Daq6-dw1.mjs +0 -2
package/README.md CHANGED
@@ -2,8 +2,6 @@
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. 3–27× faster (typically 15–20×) in mounted rerender benchmarks.
6
-
7
5
  ```console
8
6
  $ npm install silvery react
9
7
  ```
@@ -27,16 +25,12 @@ function Counter() {
27
25
  await render(<Counter />).run()
28
26
  ```
29
27
 
30
- ### Familiar
31
-
32
- - **React 18 + 19** — hooks, refs, effects, suspense — all works
33
- - **Flexbox layout** — `Box` with `flexDirection`, `padding`, `gap`, `flexGrow`, just like Ink
34
- - **[Ink-compatible](https://silvery.dev/guide/silvery-vs-ink#compatibility)** — most code works with just an import change. 918/931 Ink 7.0 tests pass on silvery's compat layer. Drop-in migration via [`@silvery/ink`](https://silvery.dev/guide/silvery-vs-ink). See the [full feature comparison](https://silvery.dev/guide/silvery-vs-ink)
28
+ React 18 + 19 with concurrent mode, Suspense, and flexbox layout. [Drop-in Ink compatible](https://silvery.dev/guide/silvery-vs-ink#compatibility) ([`@silvery/ink`](https://silvery.dev/guide/silvery-vs-ink)) — same `Box`, `Text`, `useInput` API with 918/931 Ink 7.0 tests passing.
35
29
 
36
30
  ### Shiny new stuff
37
31
 
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
- - **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
32
+ - **[Best-in-class performance](https://silvery.dev/guide/silvery-vs-ink#performance-size)** — **3–27× faster** (typically 15–20×) and **10–20× less terminal output** vs Ink 7.0 with its new incremental rendering, in mounted rerender benchmarks. Cell-level dirty tracking, only changed cells emit. Per-node skip for unchanged subtrees. Works in inline mode with native scrollback, not just fullscreen.
33
+ - **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
34
  - **[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
35
  - [Scroll containers](https://silvery.dev/guide/scrolling) — `overflow="scroll"` with virtualization
42
36
  - [Sticky positioning](https://silvery.dev/guide/layout-coordinates) — `position="sticky"` for headers and footers
@@ -51,7 +45,7 @@ await render(<Counter />).run()
51
45
  - [Find](https://silvery.dev/guide/find) — `Ctrl+F` with match highlighting and `n`/`N` navigation
52
46
  - [Copy-mode](https://silvery.dev/guide/clipboard) — `Esc, v` for vim-style keyboard selection and yanking
53
47
  - [Drag-and-drop](https://silvery.dev/guide/event-handling) — mouse drag with hit testing
54
- - **[Rich component library](https://silvery.dev/guides/components)** — 45+ components: TextInput, SelectList, ListView, Table, TreeView, Tabs, CommandPalette, ModalDialog, Toast, and more. Every component automatically participates in focus, mouse, and keybindings (readline, vim) — no wiring needed. [38 theme palettes](https://silvery.dev/guide/styling) with semantic tokens (`$primary`, `$error`) and auto-detected terminal colors
48
+ - **[Rich component library](https://silvery.dev/guides/components)** — 45+ components: TextInput, SelectList, ListView, Table, TreeView, Tabs, CommandPalette, ModalDialog, Toast, and more. Every component automatically participates in focus, mouse, and keybindings (readline, vim) — no wiring needed. [38 theme palettes](https://silvery.dev/guide/styling) with semantic tokens (`$primary`, `$error`) and auto-detected terminal colors.
55
49
  - **[Playwright-style testing](https://silvery.dev/guide/testing)** — 3,000+ tests. Full access to terminal internals (scrollback buffer, cursor position, cell styles, window dimensions):
56
50
  - `createRenderer` — fast unit tests with auto-refreshing CSS locators, cell-level color assertions, frame-by-frame inspection
57
51
  - [Termless](https://termless.dev) — like Playwright for terminals. Full ANSI fidelity with [10 swappable backends](https://termless.dev/guide/backends) (xterm.js, Ghostty, Alacritty, WezTerm, Kitty, and more)
@@ -61,7 +55,7 @@ await render(<Counter />).run()
61
55
  - [State](https://silvery.dev/guide/runtime-layers) — BYO (useState, Zustand, Jotai, Redux)
62
56
  - [Term](https://silvery.dev/guide/runtime-layers) — real, headless, emulator
63
57
  - [App](https://silvery.dev/guide/runtime-layers) — from stringify to rich app (withFocus, withDomEvents, withCommands). Render to terminal, Canvas, or DOM
64
- - **[All modern terminal protocols](https://silvery.dev/guide/silvery-vs-ink#terminal-protocol-coverage)** — [60 years of terminal protocols](https://terminfo.dev/about), unified into clean APIs. 100+ escape sequences you'll never have to write — auto-negotiated and gracefully degraded: [Kitty keyboard](https://terminfo.dev) + [SGR mouse](https://terminfo.dev) become rich events with modifiers; [hyperlinks](https://terminfo.dev) are just props; [clipboard](https://terminfo.dev) is a function call. Truecolor, underline styles, synchronized output, bracketed paste, focus reporting, resize detection, inline images, and [more](https://silvery.dev/guide/silvery-vs-ink#terminal-protocol-coverage)
58
+ - **[All modern terminal protocols](https://silvery.dev/guide/silvery-vs-ink#terminal-protocol-coverage)** — [60 years of terminal protocols](https://terminfo.dev/about), unified into clean APIs. 100+ escape sequences you'll never have to write — auto-negotiated and gracefully degraded: [Kitty keyboard](https://terminfo.dev) + [SGR mouse](https://terminfo.dev) become rich events with modifiers; [hyperlinks](https://terminfo.dev) are just props; [clipboard](https://terminfo.dev) is a function call. Truecolor, underline styles, synchronized output, bracketed paste, focus reporting, resize detection, inline images, and [more](https://silvery.dev/guide/silvery-vs-ink#terminal-protocol-coverage).
65
59
 
66
60
  ### Why Silvery?
67
61
 
@@ -85,7 +79,7 @@ Along the way, three principles emerged. Take the best from the web, stay true t
85
79
  | `@silvery/ink` / `@silvery/chalk` | Ink compatibility — 918/931 Ink 7.0 tests, 32/32 Chalk tests |
86
80
  | `@silvery/test` | Playwright-style testing — locators, `press()`, buffer assertions |
87
81
  | `@silvery/create` | Composable app builder — `pipe()` providers |
88
- | `@silvery/theme` | 38 palettes, semantic tokens, auto-detect |
82
+ | `@silvery/theme` | 84 color schemes, semantic tokens, auto-detect |
89
83
  | `@silvery/commander` | **Beautiful CLIs for free** — help renders through Silvery itself |
90
84
  | `@silvery/headless` | Pure state machines — portable, no React |
91
85
  | `@silvery/ansi` | Terminal primitives — styling, SGR, detection |
@@ -99,7 +93,7 @@ Standalone projects Silvery builds on — each stands on its own:
99
93
  | [Flexily](https://beorn.codes/flexily) | Pure JS flexbox layout engine (Yoga-compatible, 2.5× faster, zero WASM) |
100
94
  | [Termless](https://termless.dev) | Headless terminal testing — like Playwright for terminal apps |
101
95
  | [terminfo.dev](https://terminfo.dev) | Terminal feature compatibility database (161 features, 19 terminals) |
102
- | [Loggily](https://beorn.codes/loggily) | Structured logging + tracing + metrics |
96
+ | [Loggily](https://loggily.dev) | Structured logging + tracing + metrics |
103
97
 
104
98
  ## Coming
105
99
 
@@ -5073,4 +5073,4 @@ var require_UPNG = /* @__PURE__ */ __commonJSMin(((exports, module) => {
5073
5073
  export default require_UPNG();
5074
5074
  export {};
5075
5075
 
5076
- //# sourceMappingURL=UPNG-AVSMjiFE.mjs.map
5076
+ //# sourceMappingURL=UPNG-DvKjM6wE.mjs.map