@effect-tui/core 0.1.0-alpha.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 (241) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -0
  3. package/dist/anim.d.ts +4 -0
  4. package/dist/anim.d.ts.map +1 -0
  5. package/dist/anim.js +5 -0
  6. package/dist/anim.js.map +1 -0
  7. package/dist/ansi.d.ts +69 -0
  8. package/dist/ansi.d.ts.map +1 -0
  9. package/dist/ansi.js +72 -0
  10. package/dist/ansi.js.map +1 -0
  11. package/dist/index.d.ts +16 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +16 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/keys.d.ts +18 -0
  16. package/dist/keys.d.ts.map +1 -0
  17. package/dist/keys.js +247 -0
  18. package/dist/keys.js.map +1 -0
  19. package/dist/layout/linearStack.d.ts +17 -0
  20. package/dist/layout/linearStack.d.ts.map +1 -0
  21. package/dist/layout/linearStack.js +86 -0
  22. package/dist/layout/linearStack.js.map +1 -0
  23. package/dist/motion-value.d.ts +58 -0
  24. package/dist/motion-value.d.ts.map +1 -0
  25. package/dist/motion-value.js +250 -0
  26. package/dist/motion-value.js.map +1 -0
  27. package/dist/present/display.d.ts +58 -0
  28. package/dist/present/display.d.ts.map +1 -0
  29. package/dist/present/display.js +168 -0
  30. package/dist/present/display.js.map +1 -0
  31. package/dist/present/writers/fullscreen.d.ts +19 -0
  32. package/dist/present/writers/fullscreen.d.ts.map +1 -0
  33. package/dist/present/writers/fullscreen.js +55 -0
  34. package/dist/present/writers/fullscreen.js.map +1 -0
  35. package/dist/present/writers/inline.d.ts +20 -0
  36. package/dist/present/writers/inline.d.ts.map +1 -0
  37. package/dist/present/writers/inline.js +92 -0
  38. package/dist/present/writers/inline.js.map +1 -0
  39. package/dist/render/buffer.d.ts +31 -0
  40. package/dist/render/buffer.d.ts.map +1 -0
  41. package/dist/render/buffer.js +183 -0
  42. package/dist/render/buffer.js.map +1 -0
  43. package/dist/render/color-utils.d.ts +18 -0
  44. package/dist/render/color-utils.d.ts.map +1 -0
  45. package/dist/render/color-utils.js +58 -0
  46. package/dist/render/color-utils.js.map +1 -0
  47. package/dist/render/diff.d.ts +30 -0
  48. package/dist/render/diff.d.ts.map +1 -0
  49. package/dist/render/diff.js +83 -0
  50. package/dist/render/diff.js.map +1 -0
  51. package/dist/render/measure.d.ts +15 -0
  52. package/dist/render/measure.d.ts.map +1 -0
  53. package/dist/render/measure.js +65 -0
  54. package/dist/render/measure.js.map +1 -0
  55. package/dist/render/palette.d.ts +46 -0
  56. package/dist/render/palette.d.ts.map +1 -0
  57. package/dist/render/palette.js +108 -0
  58. package/dist/render/palette.js.map +1 -0
  59. package/dist/render/surface.d.ts +77 -0
  60. package/dist/render/surface.d.ts.map +1 -0
  61. package/dist/render/surface.js +198 -0
  62. package/dist/render/surface.js.map +1 -0
  63. package/dist/runtime/backend_node.d.ts +36 -0
  64. package/dist/runtime/backend_node.d.ts.map +1 -0
  65. package/dist/runtime/backend_node.js +66 -0
  66. package/dist/runtime/backend_node.js.map +1 -0
  67. package/dist/spring-physics.d.ts +36 -0
  68. package/dist/spring-physics.d.ts.map +1 -0
  69. package/dist/spring-physics.js +113 -0
  70. package/dist/spring-physics.js.map +1 -0
  71. package/dist/spring.d.ts +73 -0
  72. package/dist/spring.d.ts.map +1 -0
  73. package/dist/spring.js +136 -0
  74. package/dist/spring.js.map +1 -0
  75. package/dist/ui/containers/canvas.d.ts +13 -0
  76. package/dist/ui/containers/canvas.d.ts.map +1 -0
  77. package/dist/ui/containers/canvas.js +16 -0
  78. package/dist/ui/containers/canvas.js.map +1 -0
  79. package/dist/ui/containers/geometry-reader.d.ts +17 -0
  80. package/dist/ui/containers/geometry-reader.d.ts.map +1 -0
  81. package/dist/ui/containers/geometry-reader.js +24 -0
  82. package/dist/ui/containers/geometry-reader.js.map +1 -0
  83. package/dist/ui/containers/hstack.d.ts +12 -0
  84. package/dist/ui/containers/hstack.d.ts.map +1 -0
  85. package/dist/ui/containers/hstack.js +28 -0
  86. package/dist/ui/containers/hstack.js.map +1 -0
  87. package/dist/ui/containers/scroll.d.ts +28 -0
  88. package/dist/ui/containers/scroll.d.ts.map +1 -0
  89. package/dist/ui/containers/scroll.js +97 -0
  90. package/dist/ui/containers/scroll.js.map +1 -0
  91. package/dist/ui/containers/shared.d.ts +12 -0
  92. package/dist/ui/containers/shared.d.ts.map +1 -0
  93. package/dist/ui/containers/shared.js +19 -0
  94. package/dist/ui/containers/shared.js.map +1 -0
  95. package/dist/ui/containers/vstack.d.ts +12 -0
  96. package/dist/ui/containers/vstack.d.ts.map +1 -0
  97. package/dist/ui/containers/vstack.js +28 -0
  98. package/dist/ui/containers/vstack.js.map +1 -0
  99. package/dist/ui/containers/zstack.d.ts +14 -0
  100. package/dist/ui/containers/zstack.d.ts.map +1 -0
  101. package/dist/ui/containers/zstack.js +36 -0
  102. package/dist/ui/containers/zstack.js.map +1 -0
  103. package/dist/ui/core/geometry-store.d.ts +22 -0
  104. package/dist/ui/core/geometry-store.d.ts.map +1 -0
  105. package/dist/ui/core/geometry-store.js +29 -0
  106. package/dist/ui/core/geometry-store.js.map +1 -0
  107. package/dist/ui/core/geometry.d.ts +34 -0
  108. package/dist/ui/core/geometry.d.ts.map +1 -0
  109. package/dist/ui/core/geometry.js +14 -0
  110. package/dist/ui/core/geometry.js.map +1 -0
  111. package/dist/ui/core/view.d.ts +25 -0
  112. package/dist/ui/core/view.d.ts.map +1 -0
  113. package/dist/ui/core/view.js +34 -0
  114. package/dist/ui/core/view.js.map +1 -0
  115. package/dist/ui/index.d.ts +44 -0
  116. package/dist/ui/index.d.ts.map +1 -0
  117. package/dist/ui/index.js +39 -0
  118. package/dist/ui/index.js.map +1 -0
  119. package/dist/ui/inlinetext.d.ts +24 -0
  120. package/dist/ui/inlinetext.d.ts.map +1 -0
  121. package/dist/ui/inlinetext.js +131 -0
  122. package/dist/ui/inlinetext.js.map +1 -0
  123. package/dist/ui/install.d.ts +22 -0
  124. package/dist/ui/install.d.ts.map +1 -0
  125. package/dist/ui/install.js +66 -0
  126. package/dist/ui/install.js.map +1 -0
  127. package/dist/ui/markdown.d.ts +40 -0
  128. package/dist/ui/markdown.d.ts.map +1 -0
  129. package/dist/ui/markdown.js +351 -0
  130. package/dist/ui/markdown.js.map +1 -0
  131. package/dist/ui/modifiers/border.d.ts +33 -0
  132. package/dist/ui/modifiers/border.d.ts.map +1 -0
  133. package/dist/ui/modifiers/border.js +82 -0
  134. package/dist/ui/modifiers/border.js.map +1 -0
  135. package/dist/ui/modifiers/fill.d.ts +14 -0
  136. package/dist/ui/modifiers/fill.d.ts.map +1 -0
  137. package/dist/ui/modifiers/fill.js +25 -0
  138. package/dist/ui/modifiers/fill.js.map +1 -0
  139. package/dist/ui/modifiers/frame.d.ts +23 -0
  140. package/dist/ui/modifiers/frame.d.ts.map +1 -0
  141. package/dist/ui/modifiers/frame.js +54 -0
  142. package/dist/ui/modifiers/frame.js.map +1 -0
  143. package/dist/ui/modifiers/offset.d.ts +15 -0
  144. package/dist/ui/modifiers/offset.d.ts.map +1 -0
  145. package/dist/ui/modifiers/offset.js +21 -0
  146. package/dist/ui/modifiers/offset.js.map +1 -0
  147. package/dist/ui/modifiers/opacity.d.ts +15 -0
  148. package/dist/ui/modifiers/opacity.d.ts.map +1 -0
  149. package/dist/ui/modifiers/opacity.js +95 -0
  150. package/dist/ui/modifiers/opacity.js.map +1 -0
  151. package/dist/ui/modifiers/padding.d.ts +20 -0
  152. package/dist/ui/modifiers/padding.d.ts.map +1 -0
  153. package/dist/ui/modifiers/padding.js +36 -0
  154. package/dist/ui/modifiers/padding.js.map +1 -0
  155. package/dist/ui/modifiers/styled.d.ts +14 -0
  156. package/dist/ui/modifiers/styled.d.ts.map +1 -0
  157. package/dist/ui/modifiers/styled.js +26 -0
  158. package/dist/ui/modifiers/styled.js.map +1 -0
  159. package/dist/ui/primitives/rectangle.d.ts +15 -0
  160. package/dist/ui/primitives/rectangle.d.ts.map +1 -0
  161. package/dist/ui/primitives/rectangle.js +23 -0
  162. package/dist/ui/primitives/rectangle.js.map +1 -0
  163. package/dist/ui/primitives/spacer.d.ts +13 -0
  164. package/dist/ui/primitives/spacer.d.ts.map +1 -0
  165. package/dist/ui/primitives/spacer.js +16 -0
  166. package/dist/ui/primitives/spacer.js.map +1 -0
  167. package/dist/ui/primitives/text.d.ts +15 -0
  168. package/dist/ui/primitives/text.d.ts.map +1 -0
  169. package/dist/ui/primitives/text.js +79 -0
  170. package/dist/ui/primitives/text.js.map +1 -0
  171. package/dist/ui/primitives/wrapped-text.d.ts +30 -0
  172. package/dist/ui/primitives/wrapped-text.d.ts.map +1 -0
  173. package/dist/ui/primitives/wrapped-text.js +117 -0
  174. package/dist/ui/primitives/wrapped-text.js.map +1 -0
  175. package/dist/ui/shinytext.d.ts +66 -0
  176. package/dist/ui/shinytext.d.ts.map +1 -0
  177. package/dist/ui/shinytext.js +99 -0
  178. package/dist/ui/shinytext.js.map +1 -0
  179. package/dist/ui/text/layout.d.ts +35 -0
  180. package/dist/ui/text/layout.d.ts.map +1 -0
  181. package/dist/ui/text/layout.js +102 -0
  182. package/dist/ui/text/layout.js.map +1 -0
  183. package/dist/ui/textinput.d.ts +140 -0
  184. package/dist/ui/textinput.d.ts.map +1 -0
  185. package/dist/ui/textinput.js +402 -0
  186. package/dist/ui/textinput.js.map +1 -0
  187. package/dist/ui/view-constructors.d.ts +72 -0
  188. package/dist/ui/view-constructors.d.ts.map +1 -0
  189. package/dist/ui/view-constructors.js +74 -0
  190. package/dist/ui/view-constructors.js.map +1 -0
  191. package/package.json +57 -0
  192. package/src/anim.ts +5 -0
  193. package/src/ansi.ts +83 -0
  194. package/src/index.ts +21 -0
  195. package/src/keys.ts +302 -0
  196. package/src/layout/linearStack.ts +115 -0
  197. package/src/motion-value.ts +335 -0
  198. package/src/present/display.ts +206 -0
  199. package/src/present/writers/fullscreen.ts +58 -0
  200. package/src/present/writers/inline.ts +101 -0
  201. package/src/render/buffer.ts +200 -0
  202. package/src/render/color-utils.ts +60 -0
  203. package/src/render/diff.ts +95 -0
  204. package/src/render/measure.ts +74 -0
  205. package/src/render/palette.ts +113 -0
  206. package/src/render/surface.ts +238 -0
  207. package/src/runtime/backend_node.ts +80 -0
  208. package/src/spring-physics.ts +151 -0
  209. package/src/spring.ts +234 -0
  210. package/src/ui/__snapshots__/wrappedtext.test.ts.snap +57 -0
  211. package/src/ui/containers/canvas.ts +18 -0
  212. package/src/ui/containers/geometry-reader.ts +32 -0
  213. package/src/ui/containers/hstack.ts +33 -0
  214. package/src/ui/containers/scroll.ts +106 -0
  215. package/src/ui/containers/shared.ts +27 -0
  216. package/src/ui/containers/vstack.ts +34 -0
  217. package/src/ui/containers/zstack.ts +37 -0
  218. package/src/ui/core/geometry-store.ts +42 -0
  219. package/src/ui/core/geometry.ts +30 -0
  220. package/src/ui/core/view.ts +49 -0
  221. package/src/ui/index.ts +84 -0
  222. package/src/ui/inlinetext.ts +135 -0
  223. package/src/ui/install.ts +110 -0
  224. package/src/ui/markdown.test.ts +74 -0
  225. package/src/ui/markdown.ts +388 -0
  226. package/src/ui/modifiers/border.ts +100 -0
  227. package/src/ui/modifiers/fill.ts +28 -0
  228. package/src/ui/modifiers/frame.ts +74 -0
  229. package/src/ui/modifiers/offset.ts +23 -0
  230. package/src/ui/modifiers/opacity.ts +93 -0
  231. package/src/ui/modifiers/padding.ts +53 -0
  232. package/src/ui/modifiers/styled.ts +31 -0
  233. package/src/ui/primitives/rectangle.ts +25 -0
  234. package/src/ui/primitives/spacer.ts +18 -0
  235. package/src/ui/primitives/text.ts +85 -0
  236. package/src/ui/primitives/wrapped-text.ts +131 -0
  237. package/src/ui/shinytext.ts +159 -0
  238. package/src/ui/text/layout.ts +119 -0
  239. package/src/ui/textinput.ts +496 -0
  240. package/src/ui/view-constructors.ts +96 -0
  241. package/src/ui/wrappedtext.test.ts +138 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/present/display.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { RunWriter } from "../../render/diff.js";
2
+ import type { Palette } from "../../render/surface.js";
3
+ export declare class FullscreenWriter implements RunWriter {
4
+ private palette;
5
+ private out;
6
+ private curRow;
7
+ private curCol;
8
+ private curStyle;
9
+ private rows;
10
+ constructor(palette: Palette);
11
+ begin(vp: {
12
+ cols: number;
13
+ rows: number;
14
+ }): void;
15
+ run(row: number, col: number, styleId: number, text: string): void;
16
+ end(): void;
17
+ flush(): string;
18
+ }
19
+ //# sourceMappingURL=fullscreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreen.d.ts","sourceRoot":"","sources":["../../../src/present/writers/fullscreen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAgBtD,qBAAa,gBAAiB,YAAW,SAAS;IAOpC,OAAO,CAAC,OAAO;IAN3B,OAAO,CAAC,GAAG,CAAqB;IAChC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,IAAI,CAAI;gBAEI,OAAO,EAAE,OAAO;IAEpC,KAAK,CAAC,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAclE,GAAG,IAAI,IAAI;IAMX,KAAK,IAAI,MAAM;CAOhB"}
@@ -0,0 +1,55 @@
1
+ import { displayWidth } from "../../render/measure.js";
2
+ import { ANSI } from "../../ansi.js";
3
+ class ChunkBuilder {
4
+ parts = [];
5
+ push(s) {
6
+ if (s)
7
+ this.parts.push(s);
8
+ }
9
+ concat() {
10
+ const out = this.parts.join("");
11
+ this.parts = [];
12
+ return out;
13
+ }
14
+ }
15
+ export class FullscreenWriter {
16
+ palette;
17
+ out = new ChunkBuilder();
18
+ curRow = -1;
19
+ curCol = -1;
20
+ curStyle = -1;
21
+ rows = 0;
22
+ constructor(palette) {
23
+ this.palette = palette;
24
+ }
25
+ begin(vp) {
26
+ this.rows = vp.rows;
27
+ }
28
+ run(row, col, styleId, text) {
29
+ if (row !== this.curRow || col !== this.curCol) {
30
+ this.out.push(ANSI.cursor.to(row + 1, col + 1));
31
+ this.curRow = row;
32
+ this.curCol = col;
33
+ }
34
+ if (this.curStyle !== styleId) {
35
+ this.out.push(this.palette.sgr(styleId));
36
+ this.curStyle = styleId;
37
+ }
38
+ this.out.push(text);
39
+ this.curCol += displayWidth(text); // fix for wide glyphs
40
+ }
41
+ end() {
42
+ if (this.curStyle !== -1)
43
+ this.out.push(ANSI.reset);
44
+ // park cursor bottom-left (optional)
45
+ this.out.push(ANSI.cursor.to(this.rows, 1));
46
+ }
47
+ flush() {
48
+ const s = this.out.concat();
49
+ // reset tracked cursor/style to unknown so next frame emits properly
50
+ this.curRow = this.curCol = -1;
51
+ this.curStyle = -1;
52
+ return s;
53
+ }
54
+ }
55
+ //# sourceMappingURL=fullscreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreen.js","sourceRoot":"","sources":["../../../src/present/writers/fullscreen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC,MAAM,YAAY;IACR,KAAK,GAAa,EAAE,CAAA;IAC5B,IAAI,CAAC,CAAS;QACZ,IAAI,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC3B,CAAC;IACD,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,OAAO,GAAG,CAAA;IACZ,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IAOP;IANZ,GAAG,GAAG,IAAI,YAAY,EAAE,CAAA;IACxB,MAAM,GAAG,CAAC,CAAC,CAAA;IACX,MAAM,GAAG,CAAC,CAAC,CAAA;IACX,QAAQ,GAAG,CAAC,CAAC,CAAA;IACb,IAAI,GAAG,CAAC,CAAA;IAEhB,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC,KAAK,CAAC,EAAkC;QACtC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAA;IACrB,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,OAAe,EAAE,IAAY;QACzD,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;YAC/C,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA;YACjB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;YACxC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACzB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA,CAAC,sBAAsB;IAC1D,CAAC;IAED,GAAG;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnD,qCAAqC;QACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;QAC3B,qEAAqE;QACrE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC9B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;QAClB,OAAO,CAAC,CAAA;IACV,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type { RunWriter } from "../../render/diff.js";
2
+ import type { Palette } from "../../render/surface.js";
3
+ export declare class LineDiffWriter implements RunWriter {
4
+ private palette;
5
+ private shadow;
6
+ private printed;
7
+ private rows;
8
+ private baseRow;
9
+ constructor(palette: Palette);
10
+ begin(vp: {
11
+ cols: number;
12
+ rows: number;
13
+ }): void;
14
+ setBaseRow(n: number): void;
15
+ run(row: number, col: number, style: number, text: string): void;
16
+ end(): void;
17
+ private sameRow;
18
+ flush(): string;
19
+ }
20
+ //# sourceMappingURL=inline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../../../src/present/writers/inline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAKtD,qBAAa,cAAe,YAAW,SAAS;IAMlC,OAAO,CAAC,OAAO;IAL3B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,OAAO,CAAI;gBAEC,OAAO,EAAE,OAAO;IAEpC,KAAK,CAAC,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAKxC,UAAU,CAAC,CAAC,EAAE,MAAM;IAIpB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAOzD,GAAG;IAIH,OAAO,CAAC,OAAO;IAWf,KAAK,IAAI,MAAM;CAuDhB"}
@@ -0,0 +1,92 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.js","sourceRoot":"","sources":["../../../src/present/writers/inline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export type Wcwidth = (cp: number) => 0 | 1 | 2;
2
+ export declare const defaultWcwidth: Wcwidth;
3
+ export declare class CellBuffer {
4
+ readonly w: number;
5
+ readonly h: number;
6
+ readonly g: Uint32Array;
7
+ readonly s: Uint32Array;
8
+ readonly cw: Uint8Array;
9
+ private wcwidth;
10
+ private clip;
11
+ private clipStack;
12
+ private offX;
13
+ private offY;
14
+ private offStack;
15
+ constructor(width: number, height: number, wcwidth?: Wcwidth);
16
+ /** Clear the buffer to spaces in the given style. */
17
+ clear(styleId?: number): void;
18
+ /** Draw a single code point at (x,y). If width=2, marks following cell as continuation. */
19
+ drawCP(x: number, y: number, cp: number, styleId?: number): void;
20
+ /** Draw plain text (no wrapping) clipped to width. Uses Intl.Segmenter if available. */
21
+ drawText(x: number, y: number, text: string, styleId?: number, maxWidth?: number): void;
22
+ /** Fill a rectangle with a code point + style. */
23
+ fillRect(x: number, y: number, w: number, h: number, cp?: number, styleId?: number): void;
24
+ pushClip(x: number, y: number, w: number, h: number): void;
25
+ popClip(): void;
26
+ withClip(x: number, y: number, w: number, h: number, fn: () => void): void;
27
+ pushOffset(dx: number, dy: number): void;
28
+ popOffset(): void;
29
+ withOffset(dx: number, dy: number, fn: () => void): void;
30
+ }
31
+ //# sourceMappingURL=buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/render/buffer.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAG/C,eAAO,MAAM,cAAc,EAAE,OAAoE,CAAA;AAKjG,qBAAa,UAAU;IACrB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAGlB,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAA;IACvB,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAA;IACvB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAA;IAEvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,QAAQ,CAAiC;gBAErC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAwB;IAY5E,qDAAqD;IACrD,KAAK,CAAC,OAAO,SAAI,GAAG,IAAI;IAMxB,2FAA2F;IAC3F,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,IAAI;IAuB3D,wFAAwF;IACxF,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,SAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA+ClF,kDAAkD;IAClD,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAK,EAAE,OAAO,SAAI,GAAG,IAAI;IAuBhF,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAc1D,OAAO,IAAI,IAAI;IASf,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAU1E,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAMxC,SAAS,IAAI,IAAI;IAWjB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;CAQzD"}
@@ -0,0 +1,183 @@
1
+ /* buffer.ts — 2D cell buffer with drawing, clipping, and offsets */
2
+ // basic ASCII/Latin fallback; plug a real wcwidth for CJK/emoji later
3
+ export const defaultWcwidth = (cp) => (cp === 0 ? 0 : cp < 32 ? 0 : cp === 0x7f ? 0 : 1);
4
+ // Represents a single frame of cells (glyph + style + cell width)
5
+ export class CellBuffer {
6
+ w;
7
+ h;
8
+ // cell data
9
+ g; // glyph code points
10
+ s; // style ids
11
+ cw; // cell width: 0 (continuation), 1, 2
12
+ wcwidth;
13
+ clip;
14
+ clipStack = [];
15
+ offX = 0;
16
+ offY = 0;
17
+ offStack = [];
18
+ constructor(width, height, wcwidth = defaultWcwidth) {
19
+ this.w = Math.max(1, width | 0);
20
+ this.h = Math.max(1, height | 0);
21
+ const n = this.w * this.h;
22
+ this.g = new Uint32Array(n);
23
+ this.s = new Uint32Array(n);
24
+ this.cw = new Uint8Array(n);
25
+ this.wcwidth = wcwidth;
26
+ this.clip = { x: 0, y: 0, w: this.w, h: this.h };
27
+ this.clear(0);
28
+ }
29
+ /** Clear the buffer to spaces in the given style. */
30
+ clear(styleId = 0) {
31
+ this.g.fill(32);
32
+ this.s.fill(styleId);
33
+ this.cw.fill(1);
34
+ }
35
+ /** Draw a single code point at (x,y). If width=2, marks following cell as continuation. */
36
+ drawCP(x, y, cp, styleId = 0) {
37
+ const ax = x + this.offX;
38
+ const ay = y + this.offY;
39
+ if (ax < 0 || ay < 0 || ax >= this.w || ay >= this.h)
40
+ return;
41
+ if (ax < this.clip.x || ay < this.clip.y || ax >= this.clip.x + this.clip.w || ay >= this.clip.y + this.clip.h)
42
+ return;
43
+ const idx = ay * this.w + ax;
44
+ const w = this.wcwidth(cp);
45
+ this.g[idx] = cp;
46
+ this.s[idx] = styleId;
47
+ this.cw[idx] = w === 0 ? 1 : w; // treat nonspacing as width 1 here
48
+ if (w === 2) {
49
+ // mark the continuation cell
50
+ if (x + 1 < this.w) {
51
+ const cidx = idx + 1;
52
+ this.g[cidx] = 0; // not printed
53
+ this.s[cidx] = styleId;
54
+ this.cw[cidx] = 0; // continuation slot
55
+ }
56
+ }
57
+ }
58
+ /** Draw plain text (no wrapping) clipped to width. Uses Intl.Segmenter if available. */
59
+ drawText(x, y, text, styleId = 0, maxWidth) {
60
+ const ax = x + this.offX;
61
+ const ay = y + this.offY;
62
+ if (ay < 0 || ay >= this.h)
63
+ return;
64
+ // vertical clip
65
+ if (ay < this.clip.y || ay >= this.clip.y + this.clip.h)
66
+ return;
67
+ const limit = Math.min(this.w - ax, maxWidth ?? this.w, this.clip.x + this.clip.w - ax);
68
+ if (limit <= 0)
69
+ return;
70
+ const SegCtor = globalThis.Intl?.Segmenter;
71
+ const seg = typeof SegCtor === "function"
72
+ ? new SegCtor(undefined, {
73
+ granularity: "grapheme",
74
+ })
75
+ : null;
76
+ let col = 0;
77
+ if (seg) {
78
+ for (const { segment } of seg.segment(text)) {
79
+ const cp = segment.codePointAt(0) ?? 32; // first code point of grapheme
80
+ const w = this.wcwidth(cp) || 1; // nonspacing combining: treat as 1 (simple path)
81
+ if (col + w > limit)
82
+ break;
83
+ this.drawCP(x + col, y, cp, styleId);
84
+ col += w;
85
+ }
86
+ }
87
+ else {
88
+ for (const ch of text) {
89
+ const cp = ch.codePointAt(0) ?? 32;
90
+ const w = this.wcwidth(cp) || 1;
91
+ if (col + w > limit)
92
+ break;
93
+ this.drawCP(x + col, y, cp, styleId);
94
+ col += w;
95
+ }
96
+ }
97
+ // pad remainder within the visible limit with spaces in the same style (erases leftovers)
98
+ for (; col < limit; col++) {
99
+ this.drawCP(x + col, y, 32, styleId);
100
+ }
101
+ }
102
+ /** Fill a rectangle with a code point + style. */
103
+ fillRect(x, y, w, h, cp = 32, styleId = 0) {
104
+ const ax = x + this.offX;
105
+ const ay = y + this.offY;
106
+ let x0 = Math.max(0, ax | 0), y0 = Math.max(0, ay | 0);
107
+ let x1 = Math.min(this.w, x0 + Math.max(0, w | 0));
108
+ let y1 = Math.min(this.h, y0 + Math.max(0, h | 0));
109
+ // intersect with current clip
110
+ x0 = Math.max(x0, this.clip.x);
111
+ y0 = Math.max(y0, this.clip.y);
112
+ x1 = Math.min(x1, this.clip.x + this.clip.w);
113
+ y1 = Math.min(y1, this.clip.y + this.clip.h);
114
+ const width = x1 - x0;
115
+ if (width <= 0 || y1 <= y0)
116
+ return;
117
+ for (let yy = y0; yy < y1; yy++) {
118
+ const base = yy * this.w + x0;
119
+ this.g.fill(cp, base, base + width);
120
+ this.s.fill(styleId, base, base + width);
121
+ this.cw.fill(1, base, base + width);
122
+ }
123
+ }
124
+ // Clipping API
125
+ pushClip(x, y, w, h) {
126
+ const nx = Math.max(0, x | 0);
127
+ const ny = Math.max(0, y | 0);
128
+ const nw = Math.max(0, w | 0);
129
+ const nh = Math.max(0, h | 0);
130
+ const cur = this.clip;
131
+ const ix = Math.max(cur.x, nx);
132
+ const iy = Math.max(cur.y, ny);
133
+ const ix2 = Math.min(cur.x + cur.w, nx + nw);
134
+ const iy2 = Math.min(cur.y + cur.h, ny + nh);
135
+ this.clipStack.push(cur);
136
+ this.clip = { x: ix, y: iy, w: Math.max(0, ix2 - ix), h: Math.max(0, iy2 - iy) };
137
+ }
138
+ popClip() {
139
+ if (this.clipStack.length > 0) {
140
+ const prev = this.clipStack.pop();
141
+ this.clip = prev;
142
+ }
143
+ else {
144
+ this.clip = { x: 0, y: 0, w: this.w, h: this.h };
145
+ }
146
+ }
147
+ withClip(x, y, w, h, fn) {
148
+ this.pushClip(x, y, w, h);
149
+ try {
150
+ fn();
151
+ }
152
+ finally {
153
+ this.popClip();
154
+ }
155
+ }
156
+ // Translation API
157
+ pushOffset(dx, dy) {
158
+ this.offStack.push({ x: this.offX, y: this.offY });
159
+ this.offX += dx | 0;
160
+ this.offY += dy | 0;
161
+ }
162
+ popOffset() {
163
+ if (this.offStack.length > 0) {
164
+ const prev = this.offStack.pop();
165
+ this.offX = prev.x;
166
+ this.offY = prev.y;
167
+ }
168
+ else {
169
+ this.offX = 0;
170
+ this.offY = 0;
171
+ }
172
+ }
173
+ withOffset(dx, dy, fn) {
174
+ this.pushOffset(dx, dy);
175
+ try {
176
+ fn();
177
+ }
178
+ finally {
179
+ this.popOffset();
180
+ }
181
+ }
182
+ }
183
+ //# sourceMappingURL=buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../src/render/buffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,58 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-utils.js","sourceRoot":"","sources":["../../src/render/color-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
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
@@ -0,0 +1 @@
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"}