@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,140 @@
1
+ import type { Palette, Surface, StyleSpec } from "../render/surface.js";
2
+ import type { Rect } from "./core/geometry.js";
3
+ import { View } from "./core/view.js";
4
+ import { Schema } from "effect";
5
+ import type { KeyMsg } from "../keys.js";
6
+ /** Geometry info captured from last render. */
7
+ export type TextInputGeom = {
8
+ firstW: number;
9
+ wrapW: number;
10
+ };
11
+ declare const TextInputState_base: Schema.Class<TextInputState, {
12
+ value: typeof Schema.String;
13
+ cursor: typeof Schema.Number;
14
+ focused: Schema.optionalWith<typeof Schema.Boolean, {
15
+ default: () => false;
16
+ }>;
17
+ _vcol: Schema.optionalWith<Schema.UndefinedOr<typeof Schema.Number>, {
18
+ default: () => undefined;
19
+ }>;
20
+ _geom: Schema.optionalWith<typeof Schema.Unknown, {
21
+ default: () => undefined;
22
+ }>;
23
+ }, Schema.Struct.Encoded<{
24
+ value: typeof Schema.String;
25
+ cursor: typeof Schema.Number;
26
+ focused: Schema.optionalWith<typeof Schema.Boolean, {
27
+ default: () => false;
28
+ }>;
29
+ _vcol: Schema.optionalWith<Schema.UndefinedOr<typeof Schema.Number>, {
30
+ default: () => undefined;
31
+ }>;
32
+ _geom: Schema.optionalWith<typeof Schema.Unknown, {
33
+ default: () => undefined;
34
+ }>;
35
+ }>, never, {
36
+ readonly value: string;
37
+ } & {
38
+ readonly cursor: number;
39
+ } & {
40
+ readonly focused?: boolean | undefined;
41
+ } & {
42
+ readonly _vcol?: number | undefined;
43
+ } & {
44
+ readonly _geom?: unknown;
45
+ }, {}, {}>;
46
+ /**
47
+ * TextInputState — immutable state for text input with built-in editing.
48
+ *
49
+ * Geometry is captured from render and used automatically in edit().
50
+ * This eliminates the need to manually pass wrap widths.
51
+ */
52
+ export declare class TextInputState extends TextInputState_base {
53
+ /** Create a new TextInputState with sensible defaults. */
54
+ static of(value: string, opts?: {
55
+ cursor?: number;
56
+ focused?: boolean;
57
+ }): TextInputState;
58
+ /** Create empty focused state. */
59
+ static empty(focused?: boolean): TextInputState;
60
+ /**
61
+ * Edit state in response to a key press.
62
+ * Uses geometry captured from last render for accurate multiline navigation.
63
+ */
64
+ edit(key: KeyMsg, opts?: {
65
+ multiline?: boolean;
66
+ }): {
67
+ state: TextInputState;
68
+ quit?: boolean;
69
+ };
70
+ withValue(value: string, cursor?: number): TextInputState;
71
+ withCursor(cursor: number): TextInputState;
72
+ focus(): TextInputState;
73
+ blur(): TextInputState;
74
+ clear(): TextInputState;
75
+ /** Internal: capture geometry from render. Called by TextInput view. */
76
+ _captureGeom(geom: TextInputGeom): void;
77
+ }
78
+ /** Legacy plain-object type for backward compatibility. */
79
+ export type TextInputStatePlain = {
80
+ value: string;
81
+ cursor: number;
82
+ focused?: boolean;
83
+ _vcol?: number;
84
+ _geom?: TextInputGeom;
85
+ };
86
+ export type TextInputOptions = {
87
+ placeholder?: string;
88
+ /** Optional left prompt character(s), e.g. ">" */
89
+ prompt?: string;
90
+ /** Optional styles, merged with inherited styles */
91
+ style?: {
92
+ base?: StyleSpec;
93
+ placeholder?: StyleSpec;
94
+ prompt?: StyleSpec;
95
+ caret?: StyleSpec;
96
+ };
97
+ /** Enable multiline input and rendering (supports newlines and wrapping). */
98
+ multiline?: boolean;
99
+ /** Word-wrapping preferences when multiline (defaults: wordWrap=true, breakWords=true). */
100
+ wrap?: {
101
+ wordWrap?: boolean;
102
+ breakWords?: boolean;
103
+ };
104
+ };
105
+ /** State that can be passed to TextInput: class instance or plain object. */
106
+ export type TextInputStateLike = TextInputState | TextInputStatePlain;
107
+ /** A minimal single-line text input view (no border). */
108
+ export declare class TextInput extends View {
109
+ readonly state: TextInputStateLike;
110
+ readonly opts?: TextInputOptions | undefined;
111
+ constructor(state: TextInputStateLike, opts?: TextInputOptions | undefined);
112
+ protected measureContent(maxW: number, maxH: number): {
113
+ w: number;
114
+ h: number;
115
+ };
116
+ protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
117
+ }
118
+ export type ViewTextInputExt = {
119
+ textInput(state: TextInputStateLike, opts?: TextInputOptions): View;
120
+ };
121
+ export declare const viewTextInput: ViewTextInputExt;
122
+ export type TextInputEditResult = {
123
+ state: TextInputState;
124
+ quit?: boolean;
125
+ };
126
+ export type TextInputEditOptions = {
127
+ /** Enable multiline editing semantics (enter inserts newline with shift). */
128
+ multiline?: boolean;
129
+ /** Visual wrap width for subsequent lines. If absent, only explicit newlines are considered. */
130
+ wrapWidth?: number;
131
+ /** Visual wrap width for first line (after prompt). Defaults to wrapWidth. */
132
+ firstLineWidth?: number;
133
+ };
134
+ /**
135
+ * Edit text input state with a key event.
136
+ * @deprecated Use TextInputState.edit() instead for automatic geometry handling.
137
+ */
138
+ export declare function editTextInput(state: TextInputStateLike, key: KeyMsg, opts?: TextInputEditOptions): TextInputEditResult;
139
+ export {};
140
+ //# sourceMappingURL=textinput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textinput.d.ts","sourceRoot":"","sources":["../../src/ui/textinput.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,402 @@
1
+ /* textinput.ts — single-line TextInput component and edit helpers */
2
+ import { View } from "./core/view.js";
3
+ import { geometryStore } from "./core/geometry-store.js";
4
+ import { Colors } from "../render/surface.js";
5
+ import { wrapText, findVisualPos, cellXWithinLine, cursorFromCellX, caretXYFromCursor } from "./text/layout.js";
6
+ import { Schema } from "effect";
7
+ /**
8
+ * TextInputState — immutable state for text input with built-in editing.
9
+ *
10
+ * Geometry is captured from render and used automatically in edit().
11
+ * This eliminates the need to manually pass wrap widths.
12
+ */
13
+ export class TextInputState extends Schema.Class("TextInputState")({
14
+ value: Schema.String,
15
+ cursor: Schema.Number,
16
+ focused: Schema.optionalWith(Schema.Boolean, { default: () => false }),
17
+ _vcol: Schema.optionalWith(Schema.UndefinedOr(Schema.Number), { default: () => undefined }),
18
+ _geom: Schema.optionalWith(Schema.Unknown, { default: () => undefined }),
19
+ }) {
20
+ /** Create a new TextInputState with sensible defaults. */
21
+ static of(value, opts) {
22
+ return new TextInputState({
23
+ value,
24
+ cursor: opts?.cursor ?? value.length,
25
+ focused: opts?.focused ?? false,
26
+ });
27
+ }
28
+ /** Create empty focused state. */
29
+ static empty(focused = true) {
30
+ return new TextInputState({ value: "", cursor: 0, focused });
31
+ }
32
+ /**
33
+ * Edit state in response to a key press.
34
+ * Uses geometry captured from last render for accurate multiline navigation.
35
+ */
36
+ edit(key, opts) {
37
+ const geom = this._geom;
38
+ return editTextInputCore(this, key, {
39
+ multiline: opts?.multiline ?? false,
40
+ wrapWidth: geom?.wrapW ?? Infinity,
41
+ firstLineWidth: geom?.firstW ?? Infinity,
42
+ });
43
+ }
44
+ // --- Immutable setters ---
45
+ withValue(value, cursor) {
46
+ return new TextInputState({
47
+ ...this,
48
+ value,
49
+ cursor: cursor ?? Math.min(this.cursor, [...value].length),
50
+ _vcol: undefined,
51
+ });
52
+ }
53
+ withCursor(cursor) {
54
+ const max = [...this.value].length;
55
+ return new TextInputState({
56
+ ...this,
57
+ cursor: Math.max(0, Math.min(max, cursor)),
58
+ _vcol: undefined,
59
+ });
60
+ }
61
+ focus() {
62
+ return this.focused ? this : new TextInputState({ ...this, focused: true });
63
+ }
64
+ blur() {
65
+ return !this.focused ? this : new TextInputState({ ...this, focused: false });
66
+ }
67
+ clear() {
68
+ return new TextInputState({ ...this, value: "", cursor: 0, _vcol: undefined });
69
+ }
70
+ /** Internal: capture geometry from render. Called by TextInput view. */
71
+ _captureGeom(geom) {
72
+ ;
73
+ this._geom = geom;
74
+ }
75
+ }
76
+ /** A minimal single-line text input view (no border). */
77
+ export class TextInput extends View {
78
+ state;
79
+ opts;
80
+ constructor(state, opts) {
81
+ super();
82
+ this.state = state;
83
+ this.opts = opts;
84
+ }
85
+ measureContent(maxW, maxH) {
86
+ const w = Math.max(0, maxW);
87
+ if (!this.opts?.multiline) {
88
+ // Greedy single line
89
+ return { w, h: 1 };
90
+ }
91
+ // Multiline: compute wrapped lines to determine natural height (clamped by maxH)
92
+ const { lines } = wrapText(this.state.value, {
93
+ widthFirst: Math.max(0, w - (this.opts?.prompt ? displayWidth(this.opts?.prompt ?? "") : 0)),
94
+ widthOther: w,
95
+ wordWrap: this.opts?.wrap?.wordWrap ?? true,
96
+ breakWords: this.opts?.wrap?.breakWords ?? true,
97
+ });
98
+ const h = Math.min(Math.max(1, lines.length), maxH);
99
+ return { w, h };
100
+ }
101
+ renderContent(s, pal, rect) {
102
+ const styles = this.opts?.style ?? {};
103
+ const idBase = pal.id(styles.base);
104
+ const idPlaceholder = pal.id(styles.placeholder ?? { fg: Colors.gray(12) });
105
+ const idCaret = pal.id(styles.caret ?? { inverse: true });
106
+ const w = Math.max(0, rect.w);
107
+ if (w <= 0 || rect.h <= 0)
108
+ return;
109
+ const promptText = this.opts?.prompt ?? "";
110
+ const prefix = promptText ? `${promptText}` : "";
111
+ const prefixW = displayWidth(prefix);
112
+ if (prefixW > 0)
113
+ s.drawText(rect.x, rect.y, prefix, pal.id(styles.prompt), w);
114
+ const contentX = rect.x + prefixW;
115
+ const contentW = Math.max(0, w - prefixW);
116
+ if (contentW <= 0)
117
+ return;
118
+ const valueEmpty = this.state.value.length === 0;
119
+ const placeholderText = this.opts?.placeholder ?? "";
120
+ // Capture geometry into state for accurate edit calculations
121
+ const geom = {
122
+ firstW: contentW,
123
+ wrapW: this.opts?.multiline ? w : contentW,
124
+ };
125
+ if (this.state instanceof TextInputState) {
126
+ this.state._captureGeom(geom);
127
+ }
128
+ else {
129
+ ;
130
+ this.state._geom = geom;
131
+ }
132
+ if (!this.opts?.multiline) {
133
+ // Single-line path (back-compat)
134
+ const text = valueEmpty ? placeholderText : this.state.value;
135
+ const isPlaceholder = valueEmpty && text.length > 0;
136
+ const textStyle = isPlaceholder ? idPlaceholder : idBase;
137
+ s.drawText(contentX, rect.y, text, textStyle, contentW);
138
+ if (this.state.focused) {
139
+ const cx0 = this.state.cursor | 0;
140
+ const cx = Math.max(0, Math.min(contentW - 1, cx0));
141
+ const arr = [...text];
142
+ const ch = arr[cx] ?? " ";
143
+ s.drawText(contentX + cx, rect.y, ch, idCaret, 1);
144
+ }
145
+ // Publish geometry snapshot if id is attached (legacy)
146
+ if (this._id) {
147
+ geometryStore.setInputGeom(this._id, {
148
+ firstW: contentW,
149
+ wrapW: contentW,
150
+ xFirst: contentX,
151
+ xOther: contentX,
152
+ });
153
+ }
154
+ return;
155
+ }
156
+ // Multiline path: wrap and render multiple rows
157
+ const wrap = wrapText(this.state.value, {
158
+ widthFirst: contentW,
159
+ widthOther: w,
160
+ wordWrap: this.opts?.wrap?.wordWrap ?? true,
161
+ breakWords: this.opts?.wrap?.breakWords ?? true,
162
+ });
163
+ // Draw placeholder on first line only when empty
164
+ if (valueEmpty && placeholderText) {
165
+ s.drawText(contentX, rect.y, placeholderText, idPlaceholder, contentW);
166
+ }
167
+ // Determine cursor location in visual coordinates
168
+ let caretAbsX = contentX;
169
+ let caretAbsY = rect.y;
170
+ if (this.state.focused) {
171
+ const { x, y } = caretXYFromCursor(wrap, this.state.cursor, {
172
+ xFirst: contentX,
173
+ xOther: rect.x,
174
+ });
175
+ caretAbsX = x;
176
+ caretAbsY = y + rect.y;
177
+ }
178
+ // Render lines (clip to rect.h)
179
+ const maxLines = Math.min(rect.h, wrap.lines.length);
180
+ for (let i = 0; i < maxLines; i++) {
181
+ const line = wrap.lines[i];
182
+ const baseX = i === 0 ? contentX : rect.x;
183
+ const maxW = i === 0 ? contentW : w;
184
+ const text = line.text;
185
+ if (text.length > 0)
186
+ s.drawText(baseX, rect.y + i, text, idBase, maxW);
187
+ }
188
+ // Publish input geometry for this id (legacy)
189
+ if (this._id) {
190
+ geometryStore.setInputGeom(this._id, {
191
+ firstW: contentW,
192
+ wrapW: w,
193
+ xFirst: contentX,
194
+ xOther: rect.x,
195
+ });
196
+ }
197
+ // Caret on top
198
+ if (this.state.focused) {
199
+ // Determine caret character (either actual char under cursor or space)
200
+ const { lineIdx, colInLine } = findVisualPos(wrap, this.state.cursor);
201
+ const line = wrap.lines[lineIdx];
202
+ const ch = line?.graphemes[colInLine] ?? " ";
203
+ s.drawText(caretAbsX, caretAbsY, ch, idCaret, 1);
204
+ }
205
+ }
206
+ }
207
+ export const viewTextInput = {
208
+ textInput(state, opts) {
209
+ return new TextInput(state, opts);
210
+ },
211
+ };
212
+ /** Core edit function. Prefer using TextInputState.edit() for automatic geometry. */
213
+ function editTextInputCore(state, key, opts) {
214
+ const { value, cursor, focused, _geom } = state;
215
+ const vcol = state._vcol;
216
+ const len = [...value].length;
217
+ const clamp = (n, lo, hi) => Math.max(lo, Math.min(hi, n));
218
+ // Create new state preserving geometry
219
+ const make = (updates) => new TextInputState({
220
+ value: updates.value ?? value,
221
+ cursor: updates.cursor ?? cursor,
222
+ focused,
223
+ _vcol: updates._vcol,
224
+ _geom,
225
+ });
226
+ // Unchanged state (preserve as-is, converting to class if needed)
227
+ const unchanged = () => state instanceof TextInputState ? state : new TextInputState({ value, cursor, focused, _vcol: vcol, _geom });
228
+ const isSpace = (ch) => /\s/.test(ch);
229
+ const prevWord = (arr, pos) => {
230
+ let i = clamp(pos, 0, arr.length);
231
+ if (i === 0)
232
+ return 0;
233
+ while (i > 0 && isSpace(arr[i - 1]))
234
+ i--;
235
+ while (i > 0 && !isSpace(arr[i - 1]))
236
+ i--;
237
+ return i;
238
+ };
239
+ const nextWord = (arr, pos) => {
240
+ let i = clamp(pos, 0, arr.length);
241
+ if (i === arr.length)
242
+ return i;
243
+ while (i < arr.length && !isSpace(arr[i]))
244
+ i++;
245
+ while (i < arr.length && isSpace(arr[i]))
246
+ i++;
247
+ return i;
248
+ };
249
+ const multiline = !!opts?.multiline;
250
+ const wrapWidth = opts?.wrapWidth;
251
+ const firstWidth = opts?.firstLineWidth ?? wrapWidth;
252
+ const getWrap = () => wrapText(value, {
253
+ widthFirst: firstWidth ?? Infinity,
254
+ widthOther: wrapWidth ?? Infinity,
255
+ wordWrap: true,
256
+ breakWords: true,
257
+ });
258
+ switch (key.name) {
259
+ case "left":
260
+ if (key.meta) {
261
+ const arr = [...value];
262
+ return { state: make({ cursor: prevWord(arr, cursor) }) };
263
+ }
264
+ return { state: make({ cursor: clamp(cursor - 1, 0, len) }) };
265
+ case "right":
266
+ if (key.meta) {
267
+ const arr = [...value];
268
+ return { state: make({ cursor: nextWord(arr, cursor) }) };
269
+ }
270
+ return { state: make({ cursor: clamp(cursor + 1, 0, len) }) };
271
+ case "home":
272
+ return { state: make({ cursor: 0 }) };
273
+ case "end":
274
+ return { state: make({ cursor: len }) };
275
+ case "up": {
276
+ if (!multiline)
277
+ return { state: unchanged() };
278
+ const wrap = getWrap();
279
+ const pos = findVisualPos(wrap, cursor);
280
+ if (pos.lineIdx <= 0)
281
+ return { state: unchanged() };
282
+ const curX = vcol ?? cellXWithinLine(wrap, pos.lineIdx, pos.colInLine);
283
+ const target = cursorFromCellX(wrap, pos.lineIdx - 1, curX);
284
+ return { state: make({ cursor: target, _vcol: curX }) };
285
+ }
286
+ case "down": {
287
+ if (!multiline)
288
+ return { state: unchanged() };
289
+ const wrap = getWrap();
290
+ const pos = findVisualPos(wrap, cursor);
291
+ if (pos.lineIdx >= wrap.lines.length - 1)
292
+ return { state: unchanged() };
293
+ const curX = vcol ?? cellXWithinLine(wrap, pos.lineIdx, pos.colInLine);
294
+ const target = cursorFromCellX(wrap, pos.lineIdx + 1, curX);
295
+ return { state: make({ cursor: target, _vcol: curX }) };
296
+ }
297
+ case "backspace": {
298
+ if (key.meta) {
299
+ if (cursor <= 0)
300
+ return { state: unchanged() };
301
+ const arr = [...value];
302
+ const start = prevWord(arr, cursor);
303
+ arr.splice(start, cursor - start);
304
+ return { state: make({ value: arr.join(""), cursor: start }) };
305
+ }
306
+ if (cursor <= 0)
307
+ return { state: unchanged() };
308
+ const arr = [...value];
309
+ arr.splice(cursor - 1, 1);
310
+ return { state: make({ value: arr.join(""), cursor: cursor - 1 }) };
311
+ }
312
+ case "delete": {
313
+ if (key.meta) {
314
+ if (cursor <= 0)
315
+ return { state: unchanged() };
316
+ const arr = [...value];
317
+ arr.splice(0, cursor);
318
+ return { state: make({ value: arr.join(""), cursor: 0 }) };
319
+ }
320
+ if (cursor >= len)
321
+ return { state: unchanged() };
322
+ const arr = [...value];
323
+ arr.splice(cursor, 1);
324
+ return { state: make({ value: arr.join(""), cursor }) };
325
+ }
326
+ case "enter":
327
+ case "return": {
328
+ if (multiline) {
329
+ const arr = [...value];
330
+ arr.splice(cursor, 0, "\n");
331
+ return { state: make({ value: arr.join(""), cursor: cursor + 1 }) };
332
+ }
333
+ return { state: unchanged() };
334
+ }
335
+ case "space": {
336
+ return editTextInputCore(state, { ...key, name: "char", text: " " }, opts);
337
+ }
338
+ case "char": {
339
+ if (!key.text)
340
+ return { state: unchanged() };
341
+ // Ctrl-C: clear or quit
342
+ if (key.ctrl && key.text === "c") {
343
+ if (value.length > 0) {
344
+ return { state: make({ value: "", cursor: 0 }) };
345
+ }
346
+ return { state: unchanged(), quit: true };
347
+ }
348
+ // Ctrl-U: delete to start
349
+ if (key.ctrl && key.text === "u") {
350
+ if (cursor <= 0)
351
+ return { state: unchanged() };
352
+ const arr = [...value];
353
+ arr.splice(0, cursor);
354
+ return { state: make({ value: arr.join(""), cursor: 0 }) };
355
+ }
356
+ // Ctrl-W: delete previous word
357
+ if (key.ctrl && key.text === "w") {
358
+ const arr = [...value];
359
+ const start = prevWord(arr, cursor);
360
+ arr.splice(start, cursor - start);
361
+ return { state: make({ value: arr.join(""), cursor: start }) };
362
+ }
363
+ // Meta-b/B: previous word
364
+ if (key.meta && (key.text === "b" || key.text === "B")) {
365
+ const arr = [...value];
366
+ return { state: make({ cursor: prevWord(arr, cursor) }) };
367
+ }
368
+ // Meta-f/F: next word
369
+ if (key.meta && (key.text === "f" || key.text === "F")) {
370
+ const arr = [...value];
371
+ return { state: make({ cursor: nextWord(arr, cursor) }) };
372
+ }
373
+ // Meta-d/D: delete next word
374
+ if (key.meta && (key.text === "d" || key.text === "D")) {
375
+ const arr = [...value];
376
+ const end = nextWord(arr, cursor);
377
+ if (end === cursor)
378
+ return { state: unchanged() };
379
+ arr.splice(cursor, end - cursor);
380
+ return { state: make({ value: arr.join(""), cursor }) };
381
+ }
382
+ if (key.meta)
383
+ return { state: unchanged() };
384
+ // Insert character
385
+ const arr = [...value];
386
+ arr.splice(cursor, 0, key.text);
387
+ return { state: make({ value: arr.join(""), cursor: cursor + 1 }) };
388
+ }
389
+ default:
390
+ return { state: unchanged() };
391
+ }
392
+ }
393
+ /**
394
+ * Edit text input state with a key event.
395
+ * @deprecated Use TextInputState.edit() instead for automatic geometry handling.
396
+ */
397
+ export function editTextInput(state, key, opts) {
398
+ return editTextInputCore(state, key, opts);
399
+ }
400
+ // --- Internal helpers for wrapping-aware cursor movement & rendering ---
401
+ import { displayWidth } from "../render/measure.js";
402
+ //# sourceMappingURL=textinput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textinput.js","sourceRoot":"","sources":["../../src/ui/textinput.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { View } from "./core/view.js";
2
+ import type { Align2D, HAlign, VAlign } from "./core/geometry.js";
3
+ import { Text } from "./primitives/text.js";
4
+ import { Rectangle } from "./primitives/rectangle.js";
5
+ import { Spacer } from "./primitives/spacer.js";
6
+ import { WrappedText, type WrappingOptions } from "./primitives/wrapped-text.js";
7
+ import { HStack } from "./containers/hstack.js";
8
+ import { VStack } from "./containers/vstack.js";
9
+ import { ZStack } from "./containers/zstack.js";
10
+ import { Scroll } from "./containers/scroll.js";
11
+ import { Canvas } from "./containers/canvas.js";
12
+ import { GeometryReader, type GeometryProxy } from "./containers/geometry-reader.js";
13
+ import { TextInput, type TextInputState, type TextInputOptions } from "./textinput.js";
14
+ import { Markdown, type MarkdownOptions } from "./markdown.js";
15
+ type HStackOpts = {
16
+ gap?: number;
17
+ spacing?: number;
18
+ alignment?: VAlign;
19
+ };
20
+ type VStackOpts = {
21
+ gap?: number;
22
+ spacing?: number;
23
+ alignment?: HAlign;
24
+ };
25
+ type ScrollOpts = {
26
+ axis?: "vertical" | "horizontal";
27
+ offset?: number;
28
+ align?: VAlign | HAlign;
29
+ };
30
+ export declare const ViewConstructors: {
31
+ readonly text: (s: string, wrap?: boolean) => Text;
32
+ readonly wrappedText: (s: string, options?: WrappingOptions) => WrappedText;
33
+ readonly rect: (w: number, h: number, fill?: string | number) => Rectangle;
34
+ readonly spacer: (minLength?: number) => Spacer;
35
+ readonly hstack: (children: View[], optsOrGap?: number | HStackOpts, maybe?: {
36
+ alignment?: VAlign;
37
+ }) => HStack;
38
+ readonly vstack: (children: View[], optsOrGap?: number | VStackOpts, maybe?: {
39
+ alignment?: HAlign;
40
+ }) => VStack;
41
+ readonly zstack: (children: View[], alignment?: Align2D) => ZStack;
42
+ readonly scroll: (child: View, opts?: ScrollOpts) => Scroll;
43
+ readonly canvas: (paint: (s: any, pal: any, rect: any) => void) => Canvas;
44
+ readonly geometryReader: (reader: (proxy: GeometryProxy) => View) => GeometryReader;
45
+ readonly overlay: (base: View, overlay: View, alignment?: Align2D) => ZStack;
46
+ readonly textInput: (state: TextInputState, opts?: TextInputOptions) => TextInput;
47
+ readonly markdown: (text: string, opts?: MarkdownOptions) => Markdown;
48
+ readonly Colors: {
49
+ readonly black: 0;
50
+ readonly red: 1;
51
+ readonly green: 2;
52
+ readonly yellow: 3;
53
+ readonly blue: 4;
54
+ readonly magenta: 5;
55
+ readonly cyan: 6;
56
+ readonly white: 7;
57
+ readonly brightBlack: 8;
58
+ readonly brightRed: 9;
59
+ readonly brightGreen: 10;
60
+ readonly brightYellow: 11;
61
+ readonly brightBlue: 12;
62
+ readonly brightMagenta: 13;
63
+ readonly brightCyan: 14;
64
+ readonly brightWhite: 15;
65
+ } & {
66
+ rgb(r: number, g: number, b: number): import("../render/palette.ts").ColorValue;
67
+ hex(hex: string): import("../render/palette.ts").ColorValue;
68
+ gray(level: number): number;
69
+ };
70
+ };
71
+ export {};
72
+ //# sourceMappingURL=view-constructors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-constructors.d.ts","sourceRoot":"","sources":["../../src/ui/view-constructors.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGjE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,iCAAiC,CAAA;AACpF,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtF,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAG9D,KAAK,UAAU,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AACxE,KAAK,UAAU,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AACxE,KAAK,UAAU,GAAG;IAAE,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAGhG,eAAO,MAAM,gBAAgB;uBAEjB,MAAM,SAAS,OAAO,KAAG,IAAI;8BAItB,MAAM,YAAY,eAAe,KAAG,WAAW;uBAItD,MAAM,KAAK,MAAM,SAAS,MAAM,GAAG,MAAM,KAAG,SAAS;6CAItC,MAAM;gCAKZ,IAAI,EAAE,cAAa,MAAM,GAAG,UAAU,UAAc;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAQ,MAAM;gCAOxF,IAAI,EAAE,cAAa,MAAM,GAAG,UAAU,UAAc;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAQ,MAAM;gCAOxF,IAAI,EAAE,cAAc,OAAO,KAAG,MAAM;6BAIvC,IAAI,SAAS,UAAU,KAAG,MAAM;6BAIhC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,KAAG,MAAM;sCAIrC,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,KAAG,cAAc;6BAKxD,IAAI,WAAW,IAAI,cAAc,OAAO,KAAG,MAAM;gCAK9C,cAAc,SAAS,gBAAgB,KAAG,SAAS;8BAIrD,MAAM,SAAS,eAAe,KAAG,QAAQ;;;;;;;;;;;;;;;;;;;;;;;CAMlD,CAAA"}