@effect-tui/core 0.1.1 → 0.1.5

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 (271) hide show
  1. package/README.md +31 -11
  2. package/dist/ansi.d.ts +127 -32
  3. package/dist/ansi.d.ts.map +1 -1
  4. package/dist/ansi.js +159 -37
  5. package/dist/ansi.js.map +1 -1
  6. package/dist/colors.d.ts +139 -0
  7. package/dist/colors.d.ts.map +1 -0
  8. package/dist/colors.js +339 -0
  9. package/dist/colors.js.map +1 -0
  10. package/dist/index.d.ts +6 -10
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +13 -11
  13. package/dist/index.js.map +1 -1
  14. package/dist/keys.d.ts +21 -0
  15. package/dist/keys.d.ts.map +1 -1
  16. package/dist/keys.js +199 -58
  17. package/dist/keys.js.map +1 -1
  18. package/dist/layout/axis-helpers.d.ts +19 -0
  19. package/dist/layout/axis-helpers.d.ts.map +1 -0
  20. package/dist/layout/axis-helpers.js +19 -0
  21. package/dist/layout/axis-helpers.js.map +1 -0
  22. package/dist/output.d.ts +59 -0
  23. package/dist/output.d.ts.map +1 -0
  24. package/dist/output.js +142 -0
  25. package/dist/output.js.map +1 -0
  26. package/dist/render/buffer.d.ts.map +1 -1
  27. package/dist/render/buffer.js +6 -25
  28. package/dist/render/buffer.js.map +1 -1
  29. package/dist/render/graphemes.d.ts +15 -0
  30. package/dist/render/graphemes.d.ts.map +1 -0
  31. package/dist/render/graphemes.js +28 -0
  32. package/dist/render/graphemes.js.map +1 -0
  33. package/dist/render/measure.d.ts +1 -0
  34. package/dist/render/measure.d.ts.map +1 -1
  35. package/dist/render/measure.js +14 -36
  36. package/dist/render/measure.js.map +1 -1
  37. package/dist/render/palette.d.ts.map +1 -1
  38. package/dist/render/palette.js +26 -1
  39. package/dist/render/palette.js.map +1 -1
  40. package/dist/render/segmenter.d.ts +8 -0
  41. package/dist/render/segmenter.d.ts.map +1 -0
  42. package/dist/render/segmenter.js +23 -0
  43. package/dist/render/segmenter.js.map +1 -0
  44. package/dist/render/surface.d.ts +6 -32
  45. package/dist/render/surface.d.ts.map +1 -1
  46. package/dist/render/surface.js +11 -80
  47. package/dist/render/surface.js.map +1 -1
  48. package/dist/runtime/backend_node.d.ts.map +1 -1
  49. package/dist/runtime/backend_node.js.map +1 -1
  50. package/dist/tailwind-colors.d.ts +291 -0
  51. package/dist/tailwind-colors.d.ts.map +1 -0
  52. package/dist/tailwind-colors.js +291 -0
  53. package/dist/tailwind-colors.js.map +1 -0
  54. package/dist/types.d.ts +15 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +3 -0
  57. package/dist/types.js.map +1 -0
  58. package/package.json +55 -55
  59. package/src/ansi.ts +201 -73
  60. package/src/colors.ts +468 -0
  61. package/src/index.ts +28 -14
  62. package/src/keys.ts +467 -287
  63. package/src/layout/axis-helpers.ts +33 -0
  64. package/src/output.ts +175 -0
  65. package/src/render/buffer.ts +161 -184
  66. package/src/render/graphemes.ts +34 -0
  67. package/src/render/measure.ts +15 -38
  68. package/src/render/palette.ts +98 -77
  69. package/src/render/segmenter.ts +27 -0
  70. package/src/render/surface.ts +139 -225
  71. package/src/runtime/backend_node.ts +71 -71
  72. package/src/tailwind-colors.ts +295 -0
  73. package/src/types.ts +18 -0
  74. package/dist/anim.d.ts +0 -4
  75. package/dist/anim.d.ts.map +0 -1
  76. package/dist/anim.js +0 -5
  77. package/dist/anim.js.map +0 -1
  78. package/dist/layout/linearStack.d.ts +0 -17
  79. package/dist/layout/linearStack.d.ts.map +0 -1
  80. package/dist/layout/linearStack.js +0 -86
  81. package/dist/layout/linearStack.js.map +0 -1
  82. package/dist/motion-value.d.ts +0 -58
  83. package/dist/motion-value.d.ts.map +0 -1
  84. package/dist/motion-value.js +0 -250
  85. package/dist/motion-value.js.map +0 -1
  86. package/dist/present/display.d.ts +0 -58
  87. package/dist/present/display.d.ts.map +0 -1
  88. package/dist/present/display.js +0 -168
  89. package/dist/present/display.js.map +0 -1
  90. package/dist/present/writers/fullscreen.d.ts +0 -19
  91. package/dist/present/writers/fullscreen.d.ts.map +0 -1
  92. package/dist/present/writers/fullscreen.js +0 -55
  93. package/dist/present/writers/fullscreen.js.map +0 -1
  94. package/dist/present/writers/inline.d.ts +0 -20
  95. package/dist/present/writers/inline.d.ts.map +0 -1
  96. package/dist/present/writers/inline.js +0 -92
  97. package/dist/present/writers/inline.js.map +0 -1
  98. package/dist/render/color-utils.d.ts +0 -18
  99. package/dist/render/color-utils.d.ts.map +0 -1
  100. package/dist/render/color-utils.js +0 -58
  101. package/dist/render/color-utils.js.map +0 -1
  102. package/dist/render/diff.d.ts +0 -30
  103. package/dist/render/diff.d.ts.map +0 -1
  104. package/dist/render/diff.js +0 -83
  105. package/dist/render/diff.js.map +0 -1
  106. package/dist/spring-physics.d.ts +0 -36
  107. package/dist/spring-physics.d.ts.map +0 -1
  108. package/dist/spring-physics.js +0 -113
  109. package/dist/spring-physics.js.map +0 -1
  110. package/dist/spring.d.ts +0 -73
  111. package/dist/spring.d.ts.map +0 -1
  112. package/dist/spring.js +0 -136
  113. package/dist/spring.js.map +0 -1
  114. package/dist/ui/containers/canvas.d.ts +0 -13
  115. package/dist/ui/containers/canvas.d.ts.map +0 -1
  116. package/dist/ui/containers/canvas.js +0 -16
  117. package/dist/ui/containers/canvas.js.map +0 -1
  118. package/dist/ui/containers/geometry-reader.d.ts +0 -17
  119. package/dist/ui/containers/geometry-reader.d.ts.map +0 -1
  120. package/dist/ui/containers/geometry-reader.js +0 -24
  121. package/dist/ui/containers/geometry-reader.js.map +0 -1
  122. package/dist/ui/containers/hstack.d.ts +0 -12
  123. package/dist/ui/containers/hstack.d.ts.map +0 -1
  124. package/dist/ui/containers/hstack.js +0 -28
  125. package/dist/ui/containers/hstack.js.map +0 -1
  126. package/dist/ui/containers/scroll.d.ts +0 -28
  127. package/dist/ui/containers/scroll.d.ts.map +0 -1
  128. package/dist/ui/containers/scroll.js +0 -97
  129. package/dist/ui/containers/scroll.js.map +0 -1
  130. package/dist/ui/containers/shared.d.ts +0 -12
  131. package/dist/ui/containers/shared.d.ts.map +0 -1
  132. package/dist/ui/containers/shared.js +0 -19
  133. package/dist/ui/containers/shared.js.map +0 -1
  134. package/dist/ui/containers/vstack.d.ts +0 -12
  135. package/dist/ui/containers/vstack.d.ts.map +0 -1
  136. package/dist/ui/containers/vstack.js +0 -28
  137. package/dist/ui/containers/vstack.js.map +0 -1
  138. package/dist/ui/containers/zstack.d.ts +0 -14
  139. package/dist/ui/containers/zstack.d.ts.map +0 -1
  140. package/dist/ui/containers/zstack.js +0 -36
  141. package/dist/ui/containers/zstack.js.map +0 -1
  142. package/dist/ui/core/geometry-store.d.ts +0 -22
  143. package/dist/ui/core/geometry-store.d.ts.map +0 -1
  144. package/dist/ui/core/geometry-store.js +0 -29
  145. package/dist/ui/core/geometry-store.js.map +0 -1
  146. package/dist/ui/core/geometry.d.ts +0 -34
  147. package/dist/ui/core/geometry.d.ts.map +0 -1
  148. package/dist/ui/core/geometry.js +0 -14
  149. package/dist/ui/core/geometry.js.map +0 -1
  150. package/dist/ui/core/view.d.ts +0 -25
  151. package/dist/ui/core/view.d.ts.map +0 -1
  152. package/dist/ui/core/view.js +0 -34
  153. package/dist/ui/core/view.js.map +0 -1
  154. package/dist/ui/index.d.ts +0 -44
  155. package/dist/ui/index.d.ts.map +0 -1
  156. package/dist/ui/index.js +0 -39
  157. package/dist/ui/index.js.map +0 -1
  158. package/dist/ui/inlinetext.d.ts +0 -24
  159. package/dist/ui/inlinetext.d.ts.map +0 -1
  160. package/dist/ui/inlinetext.js +0 -131
  161. package/dist/ui/inlinetext.js.map +0 -1
  162. package/dist/ui/install.d.ts +0 -22
  163. package/dist/ui/install.d.ts.map +0 -1
  164. package/dist/ui/install.js +0 -66
  165. package/dist/ui/install.js.map +0 -1
  166. package/dist/ui/markdown.d.ts +0 -40
  167. package/dist/ui/markdown.d.ts.map +0 -1
  168. package/dist/ui/markdown.js +0 -351
  169. package/dist/ui/markdown.js.map +0 -1
  170. package/dist/ui/modifiers/border.d.ts +0 -33
  171. package/dist/ui/modifiers/border.d.ts.map +0 -1
  172. package/dist/ui/modifiers/border.js +0 -82
  173. package/dist/ui/modifiers/border.js.map +0 -1
  174. package/dist/ui/modifiers/fill.d.ts +0 -14
  175. package/dist/ui/modifiers/fill.d.ts.map +0 -1
  176. package/dist/ui/modifiers/fill.js +0 -25
  177. package/dist/ui/modifiers/fill.js.map +0 -1
  178. package/dist/ui/modifiers/frame.d.ts +0 -23
  179. package/dist/ui/modifiers/frame.d.ts.map +0 -1
  180. package/dist/ui/modifiers/frame.js +0 -54
  181. package/dist/ui/modifiers/frame.js.map +0 -1
  182. package/dist/ui/modifiers/offset.d.ts +0 -15
  183. package/dist/ui/modifiers/offset.d.ts.map +0 -1
  184. package/dist/ui/modifiers/offset.js +0 -21
  185. package/dist/ui/modifiers/offset.js.map +0 -1
  186. package/dist/ui/modifiers/opacity.d.ts +0 -15
  187. package/dist/ui/modifiers/opacity.d.ts.map +0 -1
  188. package/dist/ui/modifiers/opacity.js +0 -95
  189. package/dist/ui/modifiers/opacity.js.map +0 -1
  190. package/dist/ui/modifiers/padding.d.ts +0 -20
  191. package/dist/ui/modifiers/padding.d.ts.map +0 -1
  192. package/dist/ui/modifiers/padding.js +0 -36
  193. package/dist/ui/modifiers/padding.js.map +0 -1
  194. package/dist/ui/modifiers/styled.d.ts +0 -14
  195. package/dist/ui/modifiers/styled.d.ts.map +0 -1
  196. package/dist/ui/modifiers/styled.js +0 -26
  197. package/dist/ui/modifiers/styled.js.map +0 -1
  198. package/dist/ui/primitives/rectangle.d.ts +0 -15
  199. package/dist/ui/primitives/rectangle.d.ts.map +0 -1
  200. package/dist/ui/primitives/rectangle.js +0 -23
  201. package/dist/ui/primitives/rectangle.js.map +0 -1
  202. package/dist/ui/primitives/spacer.d.ts +0 -13
  203. package/dist/ui/primitives/spacer.d.ts.map +0 -1
  204. package/dist/ui/primitives/spacer.js +0 -16
  205. package/dist/ui/primitives/spacer.js.map +0 -1
  206. package/dist/ui/primitives/text.d.ts +0 -15
  207. package/dist/ui/primitives/text.d.ts.map +0 -1
  208. package/dist/ui/primitives/text.js +0 -79
  209. package/dist/ui/primitives/text.js.map +0 -1
  210. package/dist/ui/primitives/wrapped-text.d.ts +0 -30
  211. package/dist/ui/primitives/wrapped-text.d.ts.map +0 -1
  212. package/dist/ui/primitives/wrapped-text.js +0 -117
  213. package/dist/ui/primitives/wrapped-text.js.map +0 -1
  214. package/dist/ui/shinytext.d.ts +0 -66
  215. package/dist/ui/shinytext.d.ts.map +0 -1
  216. package/dist/ui/shinytext.js +0 -99
  217. package/dist/ui/shinytext.js.map +0 -1
  218. package/dist/ui/text/layout.d.ts +0 -35
  219. package/dist/ui/text/layout.d.ts.map +0 -1
  220. package/dist/ui/text/layout.js +0 -102
  221. package/dist/ui/text/layout.js.map +0 -1
  222. package/dist/ui/textinput.d.ts +0 -140
  223. package/dist/ui/textinput.d.ts.map +0 -1
  224. package/dist/ui/textinput.js +0 -402
  225. package/dist/ui/textinput.js.map +0 -1
  226. package/dist/ui/view-constructors.d.ts +0 -72
  227. package/dist/ui/view-constructors.d.ts.map +0 -1
  228. package/dist/ui/view-constructors.js +0 -74
  229. package/dist/ui/view-constructors.js.map +0 -1
  230. package/src/anim.ts +0 -5
  231. package/src/layout/linearStack.ts +0 -115
  232. package/src/motion-value.ts +0 -335
  233. package/src/present/display.ts +0 -206
  234. package/src/present/writers/fullscreen.ts +0 -58
  235. package/src/present/writers/inline.ts +0 -101
  236. package/src/render/color-utils.ts +0 -60
  237. package/src/render/diff.ts +0 -95
  238. package/src/spring-physics.ts +0 -151
  239. package/src/spring.ts +0 -234
  240. package/src/ui/__snapshots__/wrappedtext.test.ts.snap +0 -57
  241. package/src/ui/containers/canvas.ts +0 -18
  242. package/src/ui/containers/geometry-reader.ts +0 -32
  243. package/src/ui/containers/hstack.ts +0 -33
  244. package/src/ui/containers/scroll.ts +0 -106
  245. package/src/ui/containers/shared.ts +0 -27
  246. package/src/ui/containers/vstack.ts +0 -34
  247. package/src/ui/containers/zstack.ts +0 -37
  248. package/src/ui/core/geometry-store.ts +0 -42
  249. package/src/ui/core/geometry.ts +0 -30
  250. package/src/ui/core/view.ts +0 -49
  251. package/src/ui/index.ts +0 -84
  252. package/src/ui/inlinetext.ts +0 -135
  253. package/src/ui/install.ts +0 -110
  254. package/src/ui/markdown.test.ts +0 -74
  255. package/src/ui/markdown.ts +0 -388
  256. package/src/ui/modifiers/border.ts +0 -100
  257. package/src/ui/modifiers/fill.ts +0 -28
  258. package/src/ui/modifiers/frame.ts +0 -74
  259. package/src/ui/modifiers/offset.ts +0 -23
  260. package/src/ui/modifiers/opacity.ts +0 -93
  261. package/src/ui/modifiers/padding.ts +0 -53
  262. package/src/ui/modifiers/styled.ts +0 -31
  263. package/src/ui/primitives/rectangle.ts +0 -25
  264. package/src/ui/primitives/spacer.ts +0 -18
  265. package/src/ui/primitives/text.ts +0 -85
  266. package/src/ui/primitives/wrapped-text.ts +0 -131
  267. package/src/ui/shinytext.ts +0 -159
  268. package/src/ui/text/layout.ts +0 -119
  269. package/src/ui/textinput.ts +0 -496
  270. package/src/ui/view-constructors.ts +0 -96
  271. package/src/ui/wrappedtext.test.ts +0 -138
@@ -1,92 +0,0 @@
1
- import { ANSI } from "../../ansi.js";
2
- export class LineDiffWriter {
3
- palette;
4
- shadow = new Map();
5
- printed = new Map(); // canonical content per row
6
- rows = 0;
7
- baseRow = 0;
8
- constructor(palette) {
9
- this.palette = palette;
10
- }
11
- begin(vp) {
12
- this.rows = vp.rows;
13
- this.shadow.clear();
14
- }
15
- setBaseRow(n) {
16
- this.baseRow = Math.max(0, n | 0);
17
- }
18
- run(row, col, style, text) {
19
- if (!text)
20
- return;
21
- const list = this.shadow.get(row) ?? [];
22
- list.push({ col, style, text });
23
- this.shadow.set(row, list);
24
- }
25
- end() {
26
- /* no-op */
27
- }
28
- sameRow(a, b) {
29
- if (!a && !b)
30
- return true;
31
- if (!a || !b || a.length !== b.length)
32
- return false;
33
- for (let i = 0; i < a.length; i++) {
34
- const A = a[i], B = b[i];
35
- if (A.col !== B.col || A.style !== B.style || A.text !== B.text)
36
- return false;
37
- }
38
- return true;
39
- }
40
- flush() {
41
- // Only process rows that the diff reported as changed.
42
- // Unchanged rows are left intact to avoid accidental clearing.
43
- const rowsToProcess = Array.from(this.shadow.keys()).sort((a, b) => a - b);
44
- let out = "";
45
- for (const row of rowsToProcess) {
46
- const segs = (this.shadow.get(row) ?? []).sort((a, b) => a.col - b.col);
47
- const prev = this.printed.get(row);
48
- if (this.sameRow(prev, segs))
49
- continue; // nothing changed effectively
50
- // coalesce adjacent segments with same style (keep this optimization)
51
- const merged = [];
52
- for (const s of segs) {
53
- const last = merged[merged.length - 1];
54
- if (last && last.style === s.style && last.col + last.text.length === s.col) {
55
- last.text += s.text;
56
- }
57
- else {
58
- merged.push({ ...s });
59
- }
60
- }
61
- // Move to absolute row (1-based) and place segments in-place.
62
- // Avoid clearing the entire line; we only overwrite changed cells.
63
- const termRow1 = this.baseRow + row + 1;
64
- out += ANSI.cursor.to(termRow1, 1);
65
- let curStyle = -1;
66
- for (const s of merged) {
67
- // Move to column (1-based) within the current row
68
- out += ANSI.cursor.toCol(s.col + 1);
69
- if (curStyle !== s.style) {
70
- out += this.palette.sgr(s.style);
71
- curStyle = s.style;
72
- }
73
- out += s.text;
74
- }
75
- if (curStyle !== -1)
76
- out += ANSI.reset;
77
- this.printed.set(row, merged);
78
- }
79
- // Determine printed height (last row index with any segments + 1)
80
- let lastRow = -1;
81
- for (const [r, segs] of this.printed) {
82
- if (segs.length > 0 && r > lastRow)
83
- lastRow = r;
84
- }
85
- const printedHeight = lastRow + 1;
86
- // Park cursor at bottom-left of our region (clamped to viewport)
87
- const parkRow = Math.min(this.rows, Math.max(1, this.baseRow + (printedHeight > 0 ? printedHeight : 1)));
88
- out += ANSI.cursor.to(parkRow, 1);
89
- return out;
90
- }
91
- }
92
- //# sourceMappingURL=inline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inline.js","sourceRoot":"","sources":["../../../src/present/writers/inline.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * Clamp a number to the 0-255 range and convert to integer.
3
- */
4
- export declare function clamp255(n: number): number;
5
- /**
6
- * Convert a 256-color index to RGB values (approximate xterm palette).
7
- *
8
- * The 256-color palette is divided into:
9
- * - 0-15: Standard ANSI colors (system colors)
10
- * - 16-231: 6x6x6 RGB cube
11
- * - 232-255: Grayscale ramp (24 shades)
12
- */
13
- export declare function idxToRGB(idx: number): {
14
- r: number;
15
- g: number;
16
- b: number;
17
- };
18
- //# sourceMappingURL=color-utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"color-utils.d.ts","sourceRoot":"","sources":["../../src/render/color-utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CA0CzE"}
@@ -1,58 +0,0 @@
1
- // color-utils.ts - Shared color conversion utilities
2
- /**
3
- * Clamp a number to the 0-255 range and convert to integer.
4
- */
5
- export function clamp255(n) {
6
- return n < 0 ? 0 : n > 255 ? 255 : n | 0;
7
- }
8
- /**
9
- * Convert a 256-color index to RGB values (approximate xterm palette).
10
- *
11
- * The 256-color palette is divided into:
12
- * - 0-15: Standard ANSI colors (system colors)
13
- * - 16-231: 6x6x6 RGB cube
14
- * - 232-255: Grayscale ramp (24 shades)
15
- */
16
- export function idxToRGB(idx) {
17
- if (idx < 0)
18
- idx = 0;
19
- if (idx > 255)
20
- idx = 255;
21
- // Standard ANSI colors (0-15)
22
- if (idx < 16) {
23
- const base = [
24
- [0x00, 0x00, 0x00], // 0: black
25
- [0x80, 0x00, 0x00], // 1: red
26
- [0x00, 0x80, 0x00], // 2: green
27
- [0x80, 0x80, 0x00], // 3: yellow
28
- [0x00, 0x00, 0x80], // 4: blue
29
- [0x80, 0x00, 0x80], // 5: magenta
30
- [0x00, 0x80, 0x80], // 6: cyan
31
- [0xc0, 0xc0, 0xc0], // 7: white
32
- [0x80, 0x80, 0x80], // 8: bright black (gray)
33
- [0xff, 0x00, 0x00], // 9: bright red
34
- [0x00, 0xff, 0x00], // 10: bright green
35
- [0xff, 0xff, 0x00], // 11: bright yellow
36
- [0x00, 0x00, 0xff], // 12: bright blue
37
- [0xff, 0x00, 0xff], // 13: bright magenta
38
- [0x00, 0xff, 0xff], // 14: bright cyan
39
- [0xff, 0xff, 0xff], // 15: bright white
40
- ];
41
- const [r, g, b] = base[idx] ?? [0, 0, 0];
42
- return { r, g, b };
43
- }
44
- // Grayscale ramp (232-255)
45
- if (idx >= 232) {
46
- const n = idx - 232; // 0..23
47
- const v = 8 + n * 10;
48
- return { r: v, g: v, b: v };
49
- }
50
- // 6x6x6 RGB cube (16-231)
51
- const n = idx - 16; // 0..215
52
- const r = Math.floor(n / 36) % 6;
53
- const g = Math.floor(n / 6) % 6;
54
- const b = n % 6;
55
- const steps = [0, 95, 135, 175, 215, 255];
56
- return { r: steps[r] ?? 0, g: steps[g] ?? 0, b: steps[b] ?? 0 };
57
- }
58
- //# sourceMappingURL=color-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"color-utils.js","sourceRoot":"","sources":["../../src/render/color-utils.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- import type { Surface } from "./surface.js";
2
- /**
3
- * Writer that consumes style runs produced by diffing two frames.
4
- * - Coordinates are 0-based: `row` in [0..rows), `col` in [0..cols).
5
- * - `begin` is called once with the viewport size, then `run` zero or more times,
6
- * then `end`. Implementations may buffer and expose the result via `flush`.
7
- */
8
- export interface RunWriter {
9
- begin(viewport: {
10
- cols: number;
11
- rows: number;
12
- }): void;
13
- run(row: number, col: number, styleId: number, text: string): void;
14
- end(): void;
15
- flush(): string;
16
- }
17
- /**
18
- * Stream a minimal set of style-runs for changes from prev → next.
19
- *
20
- * Algorithm (row-wise):
21
- * - For each row, compute a tight change window [left, right]. Skip entirely if equal.
22
- * - Within the window, emit contiguous runs grouped by style. A new run begins when:
23
- * - A cell changes, and
24
- * - Its style differs from the current run (or the run just started).
25
- * - Wide glyph continuation cells (cw=0) are skipped so they are not reprinted.
26
- *
27
- * Assumes both Surfaces are same size and compares their back buffers (B).
28
- */
29
- export declare function diffFrames(prev: Surface, next: Surface, w: RunWriter): void;
30
- //# sourceMappingURL=diff.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/render/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACrD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAClE,GAAG,IAAI,IAAI,CAAA;IACX,KAAK,IAAI,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,GAAG,IAAI,CAmE3E"}
@@ -1,83 +0,0 @@
1
- /**
2
- * Stream a minimal set of style-runs for changes from prev → next.
3
- *
4
- * Algorithm (row-wise):
5
- * - For each row, compute a tight change window [left, right]. Skip entirely if equal.
6
- * - Within the window, emit contiguous runs grouped by style. A new run begins when:
7
- * - A cell changes, and
8
- * - Its style differs from the current run (or the run just started).
9
- * - Wide glyph continuation cells (cw=0) are skipped so they are not reprinted.
10
- *
11
- * Assumes both Surfaces are same size and compares their back buffers (B).
12
- */
13
- export function diffFrames(prev, next, w) {
14
- const width = next.w;
15
- const height = next.h;
16
- // Access back buffers (like Surface.flush does). B is private on Surface, so use `any`.
17
- const gA = prev.B.g;
18
- const sA = prev.B.s;
19
- const gB = next.B.g;
20
- const sB = next.B.s;
21
- const cwB = next.B.cw;
22
- w.begin({ cols: width, rows: height });
23
- for (let y = 0; y < height; y++) {
24
- const row = y * width;
25
- // Fast skip window: [left..right] bounds that changed
26
- let left = 0, right = width - 1;
27
- while (left <= right) {
28
- const i = row + left;
29
- if (gA[i] === gB[i] && sA[i] === sB[i])
30
- left++;
31
- else
32
- break;
33
- }
34
- if (left > right)
35
- continue;
36
- while (right >= left) {
37
- const i = row + right;
38
- if (gA[i] === gB[i] && sA[i] === sB[i])
39
- right--;
40
- else
41
- break;
42
- }
43
- // Emit contiguous style runs within [left..right]
44
- let x = left;
45
- while (x <= right) {
46
- // Skip unchanged within window
47
- while (x <= right) {
48
- const i = row + x;
49
- if (gA[i] !== gB[i] || sA[i] !== sB[i])
50
- break;
51
- x++;
52
- }
53
- if (x > right)
54
- break;
55
- const style = sB[row + x];
56
- const runX = x;
57
- let text = "";
58
- while (x <= right) {
59
- const i = row + x;
60
- if (sB[i] !== style)
61
- break;
62
- const cp = gB[i];
63
- const ww = cwB[i];
64
- if (ww !== 0)
65
- text += cp === 32 ? " " : String.fromCodePoint(cp);
66
- x++;
67
- // skip continuation cells of wide glyphs from the next buffer
68
- while (x <= right && cwB[row + x] === 0)
69
- x++;
70
- // Stop run if next cell is unchanged; diff window will reposition
71
- if (x <= right) {
72
- const j = row + x;
73
- if (gA[j] === gB[j] && sA[j] === sB[j])
74
- break;
75
- }
76
- }
77
- if (text.length > 0)
78
- w.run(y, runX, style, text);
79
- }
80
- }
81
- w.end();
82
- }
83
- //# sourceMappingURL=diff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/render/diff.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- export type SpringState = {
2
- x: number;
3
- v: number;
4
- target: number;
5
- };
6
- export type SpringConfig = {
7
- frequency?: number;
8
- dampingRatio?: number;
9
- epsilon?: number;
10
- duration?: number;
11
- bounce?: number;
12
- };
13
- export declare const DEFAULTS: Required<Omit<SpringConfig, "duration">> & {
14
- duration?: number;
15
- };
16
- export declare function fromDurationBounce(durationSec: number, bounce?: number): {
17
- frequency: number;
18
- dampingRatio: number;
19
- };
20
- /**
21
- * Advance a 1D damped spring towards its target using a semi-implicit Euler step.
22
- * - Stable enough for small dt (<= ~1/30s) typical of frame ticks.
23
- * - Uses frequency/dampingRatio to feel similar across frame rates.
24
- */
25
- export declare function advanceSpring(state: SpringState, dtSeconds: number, config?: SpringConfig): SpringState & {
26
- settled: boolean;
27
- };
28
- /**
29
- * Internal exact spring step for 1D channel (frame-rate independent).
30
- * Uses closed-form analytical solution for underdamped/critically-damped/overdamped cases.
31
- */
32
- export declare function stepSpring1D(x: number, v: number, target: number, dt: number, freq: number, zeta: number): {
33
- x: number;
34
- v: number;
35
- };
36
- //# sourceMappingURL=spring-physics.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spring-physics.d.ts","sourceRoot":"","sources":["../src/spring-physics.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG;IAEzB,CAAC,EAAE,MAAM,CAAA;IAET,CAAC,EAAE,MAAM,CAAA;IAET,MAAM,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAE1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,OAAO,CAAC,EAAE,MAAM,CAAA;IAGhB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,MAAM,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAMpF,CAAA;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAgB/G;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,YAAY,GACnB,WAAW,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CA4CpC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC3B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACV;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAiC1B"}
@@ -1,113 +0,0 @@
1
- // spring-physics.ts - Core spring physics primitives
2
- export const DEFAULTS = {
3
- frequency: 3,
4
- dampingRatio: 1,
5
- epsilon: 0.0005,
6
- duration: undefined,
7
- bounce: 0,
8
- };
9
- export function fromDurationBounce(durationSec, bounce = 0) {
10
- const d = Math.max(0.05, durationSec);
11
- let zeta;
12
- const b = Math.max(0, Math.min(0.999, bounce));
13
- if (b <= 0) {
14
- zeta = 1; // critically damped, no overshoot
15
- }
16
- else {
17
- // Map overshoot ratio M_p=b to damping ratio via standard 2nd-order step response
18
- const lnMp = Math.log(Math.max(1e-6, b));
19
- zeta = Math.sqrt((lnMp * lnMp) / (Math.PI * Math.PI + lnMp * lnMp));
20
- zeta = Math.max(0.02, Math.min(0.999, zeta));
21
- }
22
- // Use ~2% settling time approximation Ts ≈ 4/(ζ ω_n)
23
- const omega = 4 / (Math.max(0.02, zeta) * d);
24
- const freq = omega / (2 * Math.PI);
25
- return { frequency: freq, dampingRatio: zeta };
26
- }
27
- /**
28
- * Advance a 1D damped spring towards its target using a semi-implicit Euler step.
29
- * - Stable enough for small dt (<= ~1/30s) typical of frame ticks.
30
- * - Uses frequency/dampingRatio to feel similar across frame rates.
31
- */
32
- export function advanceSpring(state, dtSeconds, config) {
33
- let { frequency, dampingRatio, epsilon } = { ...DEFAULTS, ...(config ?? {}) };
34
- const bounce = config?.bounce ?? DEFAULTS.bounce;
35
- // If duration is provided, derive frequency/dampingRatio from it and bounce
36
- if (config?.duration != null) {
37
- const derived = fromDurationBounce(config.duration, config.bounce ?? DEFAULTS.bounce);
38
- frequency = derived.frequency;
39
- dampingRatio = derived.dampingRatio;
40
- }
41
- const omega = Math.PI * 2 * Math.max(0.001, frequency);
42
- const k = omega * omega; // stiffness
43
- const c = 2 * dampingRatio * omega; // damping
44
- let { x, v, target } = state;
45
- const prevX = x;
46
- if (dtSeconds <= 0)
47
- return {
48
- x,
49
- v,
50
- target,
51
- settled: Math.abs(x - target) < epsilon && Math.abs(v) < epsilon,
52
- };
53
- // semi-implicit Euler integration
54
- const a = k * (target - x) - c * v;
55
- v += a * dtSeconds;
56
- x += v * dtSeconds;
57
- // With bounce=0 users expect a monotonic approach; clamp if we cross the target.
58
- if (bounce <= 0) {
59
- const crossed = (prevX - target) * (x - target) <= 0;
60
- if (crossed) {
61
- x = target;
62
- v = 0;
63
- }
64
- }
65
- // snap to target when sufficiently close to avoid long tails
66
- const settled = Math.abs(x - target) < epsilon && Math.abs(v) < epsilon;
67
- if (settled) {
68
- x = target;
69
- v = 0;
70
- }
71
- return { x, v, target, settled };
72
- }
73
- /**
74
- * Internal exact spring step for 1D channel (frame-rate independent).
75
- * Uses closed-form analytical solution for underdamped/critically-damped/overdamped cases.
76
- */
77
- export function stepSpring1D(x, v, target, dt, freq, zeta) {
78
- const omega = Math.max(0.001, freq) * 2 * Math.PI;
79
- const A0 = x - target;
80
- const exp = Math.exp(-zeta * omega * dt);
81
- if (zeta < 1) {
82
- // Underdamped
83
- const wd = omega * Math.sqrt(1 - zeta * zeta);
84
- const cos = Math.cos(wd * dt);
85
- const sin = Math.sin(wd * dt);
86
- const B0 = v + zeta * omega * A0;
87
- const A = exp * (A0 * cos + (B0 / wd) * sin);
88
- const dA = exp * (-zeta * omega * (A0 * cos + (B0 / wd) * sin) + (-A0 * wd * sin + B0 * cos));
89
- return { x: target + A, v: dA };
90
- }
91
- else if (zeta === 1) {
92
- // Critically damped
93
- const t = dt;
94
- const C2 = v + omega * A0;
95
- const A = exp * (A0 + C2 * t);
96
- const dA = exp * (C2 - omega * (A0 + C2 * t));
97
- return { x: target + A, v: dA };
98
- }
99
- else {
100
- // Overdamped
101
- const s = Math.sqrt(zeta * zeta - 1);
102
- const r1 = -omega * (zeta - s);
103
- const r2 = -omega * (zeta + s);
104
- const C1 = (v - r2 * A0) / (r1 - r2);
105
- const C2 = A0 - C1;
106
- const e1 = Math.exp(r1 * dt);
107
- const e2 = Math.exp(r2 * dt);
108
- const A = C1 * e1 + C2 * e2;
109
- const dA = C1 * r1 * e1 + C2 * r2 * e2;
110
- return { x: target + A, v: dA };
111
- }
112
- }
113
- //# sourceMappingURL=spring-physics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spring-physics.js","sourceRoot":"","sources":["../src/spring-physics.ts"],"names":[],"mappings":"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"}
package/dist/spring.d.ts DELETED
@@ -1,73 +0,0 @@
1
- import type { ColorLike, ColorValue } from "./render/surface.js";
2
- import { type SpringConfig, type SpringState } from "./spring-physics.js";
3
- export type SpringValue = SpringState & {
4
- /** last timestamp in ms used for dt; hidden from callers */
5
- _last?: number;
6
- /** default config for ticks (optional) */
7
- _config?: SpringConfig;
8
- };
9
- export type SpringColorValue = {
10
- x: {
11
- r: number;
12
- g: number;
13
- b: number;
14
- };
15
- v: {
16
- r: number;
17
- g: number;
18
- b: number;
19
- };
20
- target: {
21
- r: number;
22
- g: number;
23
- b: number;
24
- };
25
- _last?: number;
26
- _config?: SpringConfig;
27
- };
28
- export type AnySpringValue = SpringValue | SpringColorValue;
29
- export type SpringAutoOptions = SpringConfig & {
30
- as?: "auto" | "number" | "color";
31
- };
32
- export declare function colorLikeToRGB(c: ColorLike): {
33
- r: number;
34
- g: number;
35
- b: number;
36
- };
37
- export type SpringAPI = {
38
- init(initial: number, cfg?: SpringConfig): SpringValue;
39
- to(s: SpringValue, target: number): SpringValue;
40
- tick(s: SpringValue, nowMs: number, cfg?: SpringConfig): SpringValue;
41
- value(s: SpringValue): number;
42
- settled(s: SpringValue, eps?: number): boolean;
43
- color: {
44
- init(initial: ColorLike, cfg?: SpringConfig): SpringColorValue;
45
- to(s: SpringColorValue, target: ColorLike): SpringColorValue;
46
- tick(s: SpringColorValue, nowMs: number, cfg?: SpringConfig): SpringColorValue;
47
- value(s: SpringColorValue): ColorValue;
48
- settled(s: SpringColorValue, eps?: number): boolean;
49
- };
50
- create(initial: number, cfg?: SpringAutoOptions): SpringValue;
51
- create(initial: ColorLike, cfg?: SpringAutoOptions): SpringColorValue;
52
- to(s: SpringColorValue, target: ColorLike): SpringColorValue;
53
- tick(s: SpringColorValue, nowMs: number, cfg?: SpringConfig): SpringColorValue;
54
- advance(s: SpringValue, nowMs: number, cfg?: SpringConfig): SpringValue;
55
- advance(s: SpringColorValue, nowMs: number, cfg?: SpringConfig): SpringColorValue;
56
- read(s: SpringValue): number;
57
- read(s: SpringColorValue): ColorValue;
58
- isSettled(s: SpringValue, eps?: number): boolean;
59
- isSettled(s: SpringColorValue, eps?: number): boolean;
60
- };
61
- export declare const Spring: SpringAPI;
62
- export type Stepper = {
63
- index: number;
64
- length: number;
65
- intervalMs: number;
66
- _accumMs: number;
67
- _last?: number;
68
- };
69
- export declare const Step: {
70
- init(length: number, intervalMs: number, startIndex?: number): Stepper;
71
- tick(s: Stepper, nowMs: number): Stepper;
72
- };
73
- //# sourceMappingURL=spring.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spring.d.ts","sourceRoot":"","sources":["../src/spring.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAGhE,OAAO,EAA2B,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAIlG,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACvC,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,OAAO,CAAC,EAAE,YAAY,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACtC,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACtC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,YAAY,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,gBAAgB,CAAA;AAE3D,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG;IAC9C,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;CAChC,CAAA;AAID,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAIhF;AAwHD,MAAM,MAAM,SAAS,GAAG;IAEvB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,WAAW,CAAA;IACtD,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAAA;IAC/C,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,WAAW,CAAA;IACpE,KAAK,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;IAC7B,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAG9C,KAAK,EAAE;QACN,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAAA;QAC9D,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,gBAAgB,CAAA;QAC5D,IAAI,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAAA;QAC9E,KAAK,CAAC,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAA;QACtC,OAAO,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KACnD,CAAA;IAGD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAAA;IAC7D,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAAA;IACrE,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,gBAAgB,CAAA;IAC5D,IAAI,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAAA;IAC9E,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,WAAW,CAAA;IACvE,OAAO,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAAA;IACjF,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;IAC5B,IAAI,CAAC,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAA;IACrC,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAChD,SAAS,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACrD,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,SAgBpB,CAAA;AAID,MAAM,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,IAAI;iBACH,MAAM,cAAc,MAAM,wBAAmB,OAAO;YAQzD,OAAO,SAAS,MAAM,GAAG,OAAO;CAUxC,CAAA"}