@effect-tui/core 0.1.1 → 0.1.4

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,15 +0,0 @@
1
- import type { Palette, Surface } from "../../render/surface.js";
2
- import { View } from "../core/view.js";
3
- import type { Rect } from "../core/geometry.js";
4
- export declare class Offset extends View {
5
- readonly child: View;
6
- readonly dx: number;
7
- readonly dy: number;
8
- constructor(child: View, dx?: number, dy?: number);
9
- protected measureContent(maxW: number, maxH: number): {
10
- w: number;
11
- h: number;
12
- };
13
- protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
14
- }
15
- //# sourceMappingURL=offset.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"offset.d.ts","sourceRoot":"","sources":["../../../src/ui/modifiers/offset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAG/C,qBAAa,MAAO,SAAQ,IAAI;IAE5B,QAAQ,CAAC,KAAK,EAAE,IAAI;IACpB,QAAQ,CAAC,EAAE;IACX,QAAQ,CAAC,EAAE;gBAFF,KAAK,EAAE,IAAI,EACX,EAAE,SAAI,EACN,EAAE,SAAI;IAKjB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAInD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAI7D"}
@@ -1,21 +0,0 @@
1
- import { View } from "../core/view.js";
2
- // Offset wrapper: translate child's render position by (dx, dy) without affecting measurement
3
- export class Offset extends View {
4
- child;
5
- dx;
6
- dy;
7
- constructor(child, dx = 0, dy = 0) {
8
- super();
9
- this.child = child;
10
- this.dx = dx;
11
- this.dy = dy;
12
- }
13
- measureContent(maxW, maxH) {
14
- return this.child.measure(maxW, maxH);
15
- }
16
- renderContent(s, pal, rect) {
17
- const r = { x: rect.x + (this.dx | 0), y: rect.y + (this.dy | 0), w: rect.w, h: rect.h };
18
- this.child.render(s, pal, r);
19
- }
20
- }
21
- //# sourceMappingURL=offset.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"offset.js","sourceRoot":"","sources":["../../../src/ui/modifiers/offset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,8FAA8F;AAC9F,MAAM,OAAO,MAAO,SAAQ,IAAI;IAEnB;IACA;IACA;IAHX,YACW,KAAW,EACX,KAAK,CAAC,EACN,KAAK,CAAC;QAEf,KAAK,EAAE,CAAA;QAJE,UAAK,GAAL,KAAK,CAAM;QACX,OAAE,GAAF,EAAE,CAAI;QACN,OAAE,GAAF,EAAE,CAAI;IAGjB,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,IAAY;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;IAES,aAAa,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QAC1D,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAA;QACxF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IAC9B,CAAC;CACF"}
@@ -1,15 +0,0 @@
1
- import type { Surface } from "../../render/surface.js";
2
- import { Palette } from "../../render/surface.js";
3
- import { View } from "../core/view.js";
4
- import type { Rect } from "../core/geometry.js";
5
- export declare class Opacity extends View {
6
- readonly child: View;
7
- readonly alpha: number;
8
- constructor(child: View, alpha?: number);
9
- protected measureContent(maxW: number, maxH: number): {
10
- w: number;
11
- h: number;
12
- };
13
- protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
14
- }
15
- //# sourceMappingURL=opacity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opacity.d.ts","sourceRoot":"","sources":["../../../src/ui/modifiers/opacity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAyB,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAAc,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAE7D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAwC/C,qBAAa,OAAQ,SAAQ,IAAI;IAE7B,QAAQ,CAAC,KAAK,EAAE,IAAI;IACpB,QAAQ,CAAC,KAAK;gBADL,KAAK,EAAE,IAAI,EACX,KAAK,SAAI;IAKpB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAInD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAM7D"}
@@ -1,95 +0,0 @@
1
- import { mergeStyle, Palette } from "../../render/surface.js";
2
- import { clamp255, idxToRGB } from "../../render/color-utils.js";
3
- import { View } from "../core/view.js";
4
- // Minimal palette wrapper that applies a style transform before delegating to the base palette
5
- class FilterPalette extends Palette {
6
- base;
7
- transform;
8
- constructor(base, transform) {
9
- super();
10
- this.base = base;
11
- this.transform = transform;
12
- }
13
- id(spec) {
14
- return this.base.id(this.transform(spec));
15
- }
16
- sgr(id) {
17
- return this.base.sgr(id);
18
- }
19
- }
20
- function toRGB(c) {
21
- if (c == null)
22
- return undefined;
23
- if (typeof c === "number")
24
- return idxToRGB(c);
25
- return { r: clamp255(c.r), g: clamp255(c.g), b: clamp255(c.b) };
26
- }
27
- function applyOpacity(spec, alpha) {
28
- if (!spec)
29
- return spec;
30
- const a = Math.max(0, Math.min(1, alpha));
31
- if (a === 1)
32
- return spec;
33
- if (a <= 0)
34
- return {}; // render as default style; caller may skip drawing entirely
35
- const next = { ...spec };
36
- const fgc = toRGB(spec.fg);
37
- const bgc = toRGB(spec.bg);
38
- if (fgc)
39
- next.fg = { r: clamp255(fgc.r * a), g: clamp255(fgc.g * a), b: clamp255(fgc.b * a) };
40
- if (bgc)
41
- next.bg = { r: clamp255(bgc.r * a), g: clamp255(bgc.g * a), b: clamp255(bgc.b * a) };
42
- // Optionally taper bold to avoid harshness at low alpha
43
- if (spec.bold && a < 0.5)
44
- next.bold = false;
45
- return next;
46
- }
47
- export class Opacity extends View {
48
- child;
49
- alpha;
50
- constructor(child, alpha = 1) {
51
- super();
52
- this.child = child;
53
- this.alpha = alpha;
54
- }
55
- measureContent(maxW, maxH) {
56
- return this.child.measure(maxW, maxH);
57
- }
58
- renderContent(s, pal, rect) {
59
- const a = Math.max(0, Math.min(1, this.alpha));
60
- if (a <= 0.001)
61
- return; // invisible; keep layout but skip drawing
62
- const filtered = new FilterPalette(pal, (spec) => applyOpacity(mergeStyle(undefined, spec), a));
63
- this.child.render(s, filtered, rect);
64
- }
65
- }
66
- /*
67
- * opacity.ts — composable opacity modifier for terminal views
68
- *
69
- * How it works (no real alpha in terminals):
70
- * - Terminals don’t support true alpha blending, and we can’t read the
71
- * current screen contents to composite. To approximate “opacity”, we
72
- * dim colors toward black by scaling their RGB channels by `alpha`.
73
- * At alpha=1 the colors are unchanged; at alpha=0 they become black.
74
- *
75
- * Implementation:
76
- * - We wrap the palette with a tiny FilterPalette that transforms any
77
- * StyleSpec handed to `palette.id()` before it is converted to SGR.
78
- * - The transform scales fg/bg colors by `alpha` and optionally disables
79
- * bold at low alpha to avoid harsh flashes.
80
- * - Rendering is skipped entirely when alpha ≤ ~0.001 (keeps layout but
81
- * avoids drawing noise while effectively invisible).
82
- *
83
- * Composition:
84
- * - This is a real modifier (wrapper node). You can chain it on any view:
85
- * View.text("Loading").opacity(0.5)
86
- * ShinyText.view(model).opacity(alpha).padding(0,1,0,1)
87
- * - Multiple opacities compound (roughly multiplicative dimming).
88
- * - Use it for fade in/out by driving `alpha` with a spring/motion value.
89
- *
90
- * Trade-offs:
91
- * - Fades toward black, not toward the terminal background color. For most
92
- * themes this reads as a natural fade. If you prefer a different look,
93
- * we could add a color-tint/brightness modifier using the same pattern.
94
- */
95
- //# sourceMappingURL=opacity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opacity.js","sourceRoot":"","sources":["../../../src/ui/modifiers/opacity.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import type { Palette, Surface } from "../../render/surface.js";
2
- import { View } from "../core/view.js";
3
- import type { Rect } from "../core/geometry.js";
4
- export interface PaddingSpec {
5
- t: number;
6
- r: number;
7
- b: number;
8
- l: number;
9
- }
10
- export declare class Padding extends View {
11
- readonly child: View;
12
- private readonly pad;
13
- constructor(child: View, t: number, r?: number, b?: number, l?: number);
14
- protected measureContent(maxW: number, maxH: number): {
15
- w: number;
16
- h: number;
17
- };
18
- protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
19
- }
20
- //# sourceMappingURL=padding.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"padding.d.ts","sourceRoot":"","sources":["../../../src/ui/modifiers/padding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAUD,qBAAa,OAAQ,SAAQ,IAAI;IAI7B,QAAQ,CAAC,KAAK,EAAE,IAAI;IAHtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;gBAGtB,KAAK,EAAE,IAAI,EACpB,CAAC,EAAE,MAAM,EACT,CAAC,CAAC,EAAE,MAAM,EACV,CAAC,CAAC,EAAE,MAAM,EACV,CAAC,CAAC,EAAE,MAAM;IAMZ,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAUnD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAS7D"}
@@ -1,36 +0,0 @@
1
- import { View } from "../core/view.js";
2
- function resolvePadding(t, r, b, l) {
3
- const top = Math.max(0, t | 0);
4
- const right = r == null ? top : Math.max(0, r | 0);
5
- const bottom = b == null ? top : Math.max(0, b | 0);
6
- const left = l == null ? right : Math.max(0, l | 0);
7
- return { t: top, r: right, b: bottom, l: left };
8
- }
9
- export class Padding extends View {
10
- child;
11
- pad;
12
- constructor(child, t, r, b, l) {
13
- super();
14
- this.child = child;
15
- this.pad = resolvePadding(t, r, b, l);
16
- }
17
- measureContent(maxW, maxH) {
18
- const innerW = Math.max(0, maxW - this.pad.l - this.pad.r);
19
- const innerH = Math.max(0, maxH - this.pad.t - this.pad.b);
20
- const m = this.child.measure(innerW, innerH);
21
- return {
22
- w: Math.min(maxW, m.w + this.pad.l + this.pad.r),
23
- h: Math.min(maxH, m.h + this.pad.t + this.pad.b),
24
- };
25
- }
26
- renderContent(s, pal, rect) {
27
- const inner = {
28
- x: rect.x + this.pad.l,
29
- y: rect.y + this.pad.t,
30
- w: Math.max(0, rect.w - this.pad.l - this.pad.r),
31
- h: Math.max(0, rect.h - this.pad.t - this.pad.b),
32
- };
33
- this.child.render(s, pal, inner);
34
- }
35
- }
36
- //# sourceMappingURL=padding.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"padding.js","sourceRoot":"","sources":["../../../src/ui/modifiers/padding.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import type { Palette, Surface, StyleSpec } from "../../render/surface.js";
2
- import { View } from "../core/view.js";
3
- import type { Rect } from "../core/geometry.js";
4
- export declare class Styled extends View {
5
- readonly child: View;
6
- readonly styleSpec: StyleSpec;
7
- constructor(child: View, styleSpec: StyleSpec);
8
- protected measureContent(maxW: number, maxH: number): {
9
- w: number;
10
- h: number;
11
- };
12
- protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
13
- }
14
- //# sourceMappingURL=styled.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"styled.d.ts","sourceRoot":"","sources":["../../../src/ui/modifiers/styled.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,qBAAa,MAAO,SAAQ,IAAI;IAE5B,QAAQ,CAAC,KAAK,EAAE,IAAI;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS;gBADpB,KAAK,EAAE,IAAI,EACX,SAAS,EAAE,SAAS;IAK/B,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAInD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAa7D"}
@@ -1,26 +0,0 @@
1
- import { derivePalette } from "../../render/surface.js";
2
- import { View } from "../core/view.js";
3
- export class Styled extends View {
4
- child;
5
- styleSpec;
6
- constructor(child, styleSpec) {
7
- super();
8
- this.child = child;
9
- this.styleSpec = styleSpec;
10
- }
11
- measureContent(maxW, maxH) {
12
- return this.child.measure(maxW, maxH);
13
- }
14
- renderContent(s, pal, rect) {
15
- // Create derived palette with our style applied
16
- const derivedPal = derivePalette(pal, this.styleSpec);
17
- // If we have a background color, fill the entire rect
18
- if (this.styleSpec.bg != null) {
19
- const id = derivedPal.id(this.styleSpec);
20
- s.fillRect(rect.x, rect.y, rect.w, rect.h, 32, id); // 32 = space character
21
- }
22
- // Render child with the styled palette
23
- this.child.render(s, derivedPal, rect);
24
- }
25
- }
26
- //# sourceMappingURL=styled.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"styled.js","sourceRoot":"","sources":["../../../src/ui/modifiers/styled.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,MAAM,OAAO,MAAO,SAAQ,IAAI;IAEnB;IACA;IAFX,YACW,KAAW,EACX,SAAoB;QAE7B,KAAK,EAAE,CAAA;QAHE,UAAK,GAAL,KAAK,CAAM;QACX,cAAS,GAAT,SAAS,CAAW;IAG/B,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,IAAY;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;IAES,aAAa,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QAC1D,gDAAgD;QAChD,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAErD,sDAAsD;QACtD,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACxC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA,CAAC,uBAAuB;QAC5E,CAAC;QAED,uCAAuC;QACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;CACF"}
@@ -1,15 +0,0 @@
1
- import type { Palette, Surface } from "../../render/surface.js";
2
- import { View } from "../core/view.js";
3
- import type { Rect } from "../core/geometry.js";
4
- export declare class Rectangle extends View {
5
- readonly width: number;
6
- readonly height: number;
7
- readonly fillCP: number;
8
- constructor(width: number, height: number, fillCP?: number);
9
- protected measureContent(maxW: number, maxH: number): {
10
- w: number;
11
- h: number;
12
- };
13
- protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
14
- }
15
- //# sourceMappingURL=rectangle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rectangle.d.ts","sourceRoot":"","sources":["../../../src/ui/primitives/rectangle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAG/C,qBAAa,SAAU,SAAQ,IAAI;IAE/B,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,MAAM;gBAFN,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,SAAK;IAKtB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAMnD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAI7D"}
@@ -1,23 +0,0 @@
1
- import { View } from "../core/view.js";
2
- // Rectangle primitive (fills area with a codepoint, default space). Useful as a block element.
3
- export class Rectangle extends View {
4
- width;
5
- height;
6
- fillCP;
7
- constructor(width, height, fillCP = 32) {
8
- super();
9
- this.width = width;
10
- this.height = height;
11
- this.fillCP = fillCP;
12
- }
13
- measureContent(maxW, maxH) {
14
- const w = Math.min(maxW, Math.max(0, this.width | 0));
15
- const h = Math.min(maxH, Math.max(0, this.height | 0));
16
- return { w, h };
17
- }
18
- renderContent(s, pal, rect) {
19
- const id = pal.id();
20
- s.fillRect(rect.x, rect.y, rect.w, rect.h, this.fillCP, id);
21
- }
22
- }
23
- //# sourceMappingURL=rectangle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rectangle.js","sourceRoot":"","sources":["../../../src/ui/primitives/rectangle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,+FAA+F;AAC/F,MAAM,OAAO,SAAU,SAAQ,IAAI;IAEtB;IACA;IACA;IAHX,YACW,KAAa,EACb,MAAc,EACd,SAAS,EAAE;QAEpB,KAAK,EAAE,CAAA;QAJE,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAK;IAGtB,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,IAAY;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QACrD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QACtD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;IACjB,CAAC;IAES,aAAa,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QAC1D,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,CAAA;QACnB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC7D,CAAC;CACF"}
@@ -1,13 +0,0 @@
1
- import type { Palette, Surface } from "../../render/surface.js";
2
- import { View } from "../core/view.js";
3
- import type { Rect } from "../core/geometry.js";
4
- export declare class Spacer extends View {
5
- readonly minLength: number;
6
- constructor(minLength?: number);
7
- protected measureContent(_maxW: number, _maxH: number): {
8
- w: number;
9
- h: number;
10
- };
11
- protected renderContent(_s: Surface, _pal: Palette, _rect: Rect): void;
12
- }
13
- //# sourceMappingURL=spacer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spacer.d.ts","sourceRoot":"","sources":["../../../src/ui/primitives/spacer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAG/C,qBAAa,MAAO,SAAQ,IAAI;IAClB,QAAQ,CAAC,SAAS;gBAAT,SAAS,SAAI;IAIlC,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;;IAIrD,SAAS,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI;CAGhE"}
@@ -1,16 +0,0 @@
1
- import { View } from "../core/view.js";
2
- // Spacer (flexible in stacks)
3
- export class Spacer extends View {
4
- minLength;
5
- constructor(minLength = 0) {
6
- super();
7
- this.minLength = minLength;
8
- }
9
- measureContent(_maxW, _maxH) {
10
- return { w: 0, h: 0 };
11
- }
12
- renderContent(_s, _pal, _rect) {
13
- // Spacers render nothing
14
- }
15
- }
16
- //# sourceMappingURL=spacer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spacer.js","sourceRoot":"","sources":["../../../src/ui/primitives/spacer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,8BAA8B;AAC9B,MAAM,OAAO,MAAO,SAAQ,IAAI;IACT;IAArB,YAAqB,YAAY,CAAC;QAChC,KAAK,EAAE,CAAA;QADY,cAAS,GAAT,SAAS,CAAI;IAElC,CAAC;IAES,cAAc,CAAC,KAAa,EAAE,KAAa;QACnD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;IACvB,CAAC;IAES,aAAa,CAAC,EAAW,EAAE,IAAa,EAAE,KAAW;QAC7D,yBAAyB;IAC3B,CAAC;CACF"}
@@ -1,15 +0,0 @@
1
- import type { Palette, Surface } from "../../render/surface.js";
2
- import { View } from "../core/view.js";
3
- import type { Rect } from "../core/geometry.js";
4
- export declare class Text extends View {
5
- readonly text: string;
6
- readonly wrap?: boolean | undefined;
7
- constructor(text: string, wrap?: boolean | undefined);
8
- protected measureContent(maxW: number, maxH: number): {
9
- w: number;
10
- h: number;
11
- };
12
- protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
13
- private wrapText;
14
- }
15
- //# sourceMappingURL=text.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/ui/primitives/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAE/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,qBAAa,IAAK,SAAQ,IAAI;IAE1B,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO;gBADd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,YAAA;IAKzB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAgBnD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;IAgB5D,OAAO,CAAC,QAAQ;CAuCjB"}
@@ -1,79 +0,0 @@
1
- import { displayWidth } from "../../render/measure.js";
2
- import { View } from "../core/view.js";
3
- export class Text extends View {
4
- text;
5
- wrap;
6
- constructor(text, wrap) {
7
- super();
8
- this.text = text;
9
- this.wrap = wrap;
10
- }
11
- measureContent(maxW, maxH) {
12
- if (!this.wrap) {
13
- const w = Math.min(maxW, displayWidth(this.text));
14
- return { w, h: 1 };
15
- }
16
- // Wrapped text measurement
17
- const lines = this.wrapText(maxW);
18
- const height = Math.min(maxH, lines.length);
19
- let width = 0;
20
- for (let i = 0; i < height; i++) {
21
- width = Math.max(width, Math.min(maxW, displayWidth(lines[i])));
22
- }
23
- return { w: width, h: height };
24
- }
25
- renderContent(s, pal, rect) {
26
- const id = pal.id();
27
- if (this.wrap) {
28
- // Use wrapping logic for rendering
29
- const lines = this.wrapText(rect.w);
30
- for (let i = 0; i < Math.min(lines.length, rect.h); i++) {
31
- const line = lines[i];
32
- if (line.length > 0) {
33
- s.drawText(rect.x, rect.y + i, line, id, rect.w);
34
- }
35
- }
36
- }
37
- else {
38
- s.drawText(rect.x, rect.y, this.text, id, rect.w);
39
- }
40
- }
41
- wrapText(maxWidth) {
42
- if (maxWidth <= 0)
43
- return [""];
44
- if (!this.text)
45
- return [""];
46
- const lines = this.text.split("\n");
47
- const result = [];
48
- for (const line of lines) {
49
- if (line.length === 0) {
50
- result.push("");
51
- continue;
52
- }
53
- const words = line.split(" ");
54
- let currentLine = "";
55
- for (const word of words) {
56
- const testLine = currentLine + (currentLine ? " " : "") + word;
57
- if (displayWidth(testLine) <= maxWidth) {
58
- currentLine = testLine;
59
- }
60
- else {
61
- if (currentLine) {
62
- result.push(currentLine);
63
- currentLine = word;
64
- }
65
- else {
66
- // Single word longer than maxWidth
67
- result.push(word.slice(0, maxWidth));
68
- currentLine = word.slice(maxWidth);
69
- }
70
- }
71
- }
72
- if (currentLine) {
73
- result.push(currentLine);
74
- }
75
- }
76
- return result.length > 0 ? result : [""];
77
- }
78
- }
79
- //# sourceMappingURL=text.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/ui/primitives/text.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- import type { Palette, Surface } from "../../render/surface.js";
2
- import type { Rect } from "../core/geometry.js";
3
- import { View } from "../core/view.js";
4
- export type WrappingOptions = {
5
- wordWrap?: boolean;
6
- breakWords?: boolean;
7
- };
8
- export declare class WrappedText extends View {
9
- readonly text: string;
10
- readonly options: WrappingOptions;
11
- constructor(text: string, options?: WrappingOptions);
12
- /**
13
- * Split text into lines, respecting wrapping rules
14
- */
15
- private wrapText;
16
- /**
17
- * Wrap a line by word boundaries
18
- */
19
- private wrapLineByWords;
20
- /**
21
- * Wrap a line by character boundaries
22
- */
23
- private wrapLineByCharacters;
24
- protected measureContent(maxW: number, maxH: number): {
25
- w: number;
26
- h: number;
27
- };
28
- protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
29
- }
30
- //# sourceMappingURL=wrapped-text.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrapped-text.d.ts","sourceRoot":"","sources":["../../../src/ui/primitives/wrapped-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,qBAAa,WAAY,SAAQ,IAAI;IAEjC,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,OAAO,EAAE,eAAe;gBADxB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB;IAKxC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAgChB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0CvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAQ9E,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;CAWpE"}
@@ -1,117 +0,0 @@
1
- import { View } from "../core/view.js";
2
- import { displayWidth, sliceByWidth } from "../../render/measure.js";
3
- export class WrappedText extends View {
4
- text;
5
- options;
6
- constructor(text, options = {}) {
7
- super();
8
- this.text = text;
9
- this.options = options;
10
- }
11
- /**
12
- * Split text into lines, respecting wrapping rules
13
- */
14
- wrapText(maxWidth) {
15
- if (maxWidth <= 0)
16
- return [""];
17
- if (!this.text)
18
- return [];
19
- const { wordWrap = true, breakWords = false } = this.options;
20
- // First split on explicit line breaks
21
- const inputLines = this.text.split("\n");
22
- const wrappedLines = [];
23
- for (const line of inputLines) {
24
- if (line.length === 0) {
25
- wrappedLines.push("");
26
- continue;
27
- }
28
- if (line.length <= maxWidth) {
29
- wrappedLines.push(line);
30
- continue;
31
- }
32
- // Line needs wrapping
33
- if (wordWrap) {
34
- this.wrapLineByWords(line, maxWidth, breakWords, wrappedLines);
35
- }
36
- else {
37
- this.wrapLineByCharacters(line, maxWidth, wrappedLines);
38
- }
39
- }
40
- return wrappedLines;
41
- }
42
- /**
43
- * Wrap a line by word boundaries
44
- */
45
- wrapLineByWords(line, maxWidth, breakWords, output) {
46
- const words = line.split(/(\s+)/); // Keep whitespace in results
47
- let currentLine = "";
48
- for (const word of words) {
49
- // Skip empty strings
50
- if (word.length === 0)
51
- continue;
52
- // If this is whitespace and we're at the start of a line, skip it
53
- if (/^\s+$/.test(word) && currentLine.length === 0)
54
- continue;
55
- // If adding this word would exceed width
56
- if (displayWidth(currentLine + word) > maxWidth) {
57
- // If we have content on current line, save it and start new line
58
- if (currentLine.length > 0) {
59
- output.push(currentLine.trimEnd());
60
- currentLine = "";
61
- }
62
- // Handle long words
63
- if (displayWidth(word.trim()) > maxWidth) {
64
- if (breakWords) {
65
- this.wrapLineByCharacters(word.trim(), maxWidth, output);
66
- }
67
- else {
68
- // Don't break the word, just put it on its own line (may overflow)
69
- output.push(word.trim());
70
- }
71
- }
72
- else if (word.trim().length > 0) {
73
- // Start new line with this word (skip leading whitespace)
74
- currentLine = word.trim();
75
- }
76
- }
77
- else {
78
- currentLine += word;
79
- }
80
- }
81
- // Add remaining content
82
- if (currentLine.length > 0) {
83
- output.push(currentLine.trimEnd());
84
- }
85
- }
86
- /**
87
- * Wrap a line by character boundaries
88
- */
89
- wrapLineByCharacters(line, maxWidth, output) {
90
- let rest = line;
91
- while (rest.length > 0) {
92
- const { text } = sliceByWidth(rest, maxWidth);
93
- if (text.length === 0)
94
- break;
95
- output.push(text);
96
- rest = rest.slice(text.length);
97
- }
98
- }
99
- measureContent(maxW, maxH) {
100
- const lines = this.wrapText(maxW);
101
- const h = Math.min(maxH, Math.max(1, lines.length));
102
- // WrappedText is greedy horizontally - takes full available width when content exists
103
- const w = maxW;
104
- return { w, h };
105
- }
106
- renderContent(s, pal, rect) {
107
- const lines = this.wrapText(rect.w);
108
- const styleId = pal.id();
109
- for (let i = 0; i < Math.min(lines.length, rect.h); i++) {
110
- const line = lines[i];
111
- if (line.length > 0) {
112
- s.drawText(rect.x, rect.y + i, line, styleId, rect.w);
113
- }
114
- }
115
- }
116
- }
117
- //# sourceMappingURL=wrapped-text.js.map