@kernlang/terminal 2.0.0 → 3.0.0

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.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  /**
2
- * @kernlang/terminal — ANSI terminal rendering transpiler
2
+ * @kernlang/terminal — ANSI terminal rendering transpiler + Ink (React) transpiler
3
3
  */
4
4
  export { transpileTerminal } from './transpiler-terminal.js';
5
+ export { transpileInk } from './transpiler-ink.js';
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  /**
2
- * @kernlang/terminal — ANSI terminal rendering transpiler
2
+ * @kernlang/terminal — ANSI terminal rendering transpiler + Ink (React) transpiler
3
3
  */
4
4
  export { transpileTerminal } from './transpiler-terminal.js';
5
+ export { transpileInk } from './transpiler-ink.js';
5
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { IRNode, TranspileResult, ResolvedKernConfig } from '@kernlang/core';
2
+ export declare function transpileInk(root: IRNode, _config?: ResolvedKernConfig): TranspileResult;
@@ -0,0 +1,775 @@
1
+ import { countTokens, serializeIR, isCoreNode, generateCoreNode, generateMachineReducer } from '@kernlang/core';
2
+ /**
3
+ * Ink Transpiler — generates React (Ink) TSX components for terminal UIs
4
+ *
5
+ * Maps KERN terminal nodes to Ink components:
6
+ * screen → React function component (export default)
7
+ * text → <Text bold color="blue">...</Text>
8
+ * box → <Box borderStyle="round" borderColor="blue">...</Box>
9
+ * separator → <Text dimColor>{'─'.repeat(48)}</Text>
10
+ * table → <Box flexDirection="column"> with row components
11
+ * scoreboard → <Box flexDirection="column"> with metric rows
12
+ * spinner → <Text><Spinner /> {message}</Text>
13
+ * progress → <Box><Text>{bar}</Text></Box>
14
+ * gradient → <Text>{gradientChars}</Text>
15
+ * state → const [x, setX] = useState(initial)
16
+ * ref → const xRef = useRef(initial)
17
+ * stream → useEffect with async generator iteration (streaming output)
18
+ * logic → useEffect with side-effect code
19
+ * machine → standard output + useReducer hook
20
+ * conditional → {condition && (<>...</>)}
21
+ * input-area → <Box> at bottom of screen (persistent input region)
22
+ * output-area → <Box flexGrow={1}> scrollable output region
23
+ * text-input → <TextInput value={...} onChange={...} />
24
+ * select-input → <SelectInput items={...} onSelect={...} />
25
+ * handler → raw JSX injection
26
+ */
27
+ // ── Helpers ──────────────────────────────────────────────────────────────
28
+ function getProps(node) {
29
+ return node.props || {};
30
+ }
31
+ function getChildren(node, type) {
32
+ const c = node.children || [];
33
+ return type ? c.filter(ch => ch.type === type) : c;
34
+ }
35
+ function capitalize(s) {
36
+ return s.charAt(0).toUpperCase() + s.slice(1);
37
+ }
38
+ /** Check if a prop value is a {{ expression }} object from the parser. */
39
+ function isExpr(v) {
40
+ return typeof v === 'object' && v !== null && '__expr' in v;
41
+ }
42
+ /** Unwrap a prop value: expressions return their code, strings return as-is. */
43
+ function unwrapProp(v) {
44
+ if (isExpr(v))
45
+ return v.code;
46
+ return String(v ?? '');
47
+ }
48
+ /** Strip common leading whitespace from multiline handler code. */
49
+ function dedent(code) {
50
+ const lines = code.split('\n');
51
+ const nonEmpty = lines.filter(l => l.trim().length > 0);
52
+ if (nonEmpty.length === 0)
53
+ return code;
54
+ const min = Math.min(...nonEmpty.map(l => l.match(/^(\s*)/)?.[1].length ?? 0));
55
+ return lines.map(l => l.slice(min)).join('\n');
56
+ }
57
+ /** Split a comma-separated prop string while respecting angle-bracket/paren depth. */
58
+ function splitPropsRespectingDepth(s) {
59
+ const parts = [];
60
+ let depth = 0;
61
+ let current = '';
62
+ for (const ch of s) {
63
+ if (ch === '<' || ch === '(')
64
+ depth++;
65
+ else if (ch === '>' || ch === ')')
66
+ depth--;
67
+ if (ch === ',' && depth === 0) {
68
+ parts.push(current);
69
+ current = '';
70
+ }
71
+ else {
72
+ current += ch;
73
+ }
74
+ }
75
+ if (current.trim())
76
+ parts.push(current);
77
+ return parts;
78
+ }
79
+ /** Convert KERN condition to JS expression — handles __expr and shorthand. */
80
+ function irConditionToJs(cond) {
81
+ if (isExpr(cond))
82
+ return cond.code;
83
+ return String(cond)
84
+ .replace(/&/g, ' && ')
85
+ .replace(/([a-zA-Z_]+)=([a-zA-Z_]+)/g, "$1 === '$2'");
86
+ }
87
+ /** Convert KERN style value to Ink-compatible color prop */
88
+ function inkColor(color) {
89
+ if (typeof color === 'number')
90
+ return `{${color}}`;
91
+ if (typeof color === 'string') {
92
+ if (color.startsWith('#'))
93
+ return `"${color}"`;
94
+ return `"${color}"`;
95
+ }
96
+ return '"white"';
97
+ }
98
+ /** Ink key name → key object property check */
99
+ function keyToCheck(key) {
100
+ switch (key) {
101
+ case 'return':
102
+ case 'Enter': return 'key.return';
103
+ case 'escape':
104
+ case 'Escape': return 'key.escape';
105
+ case 'tab':
106
+ case 'Tab': return 'key.tab';
107
+ case 'up':
108
+ case 'ArrowUp': return 'key.upArrow';
109
+ case 'down':
110
+ case 'ArrowDown': return 'key.downArrow';
111
+ case 'left':
112
+ case 'ArrowLeft': return 'key.leftArrow';
113
+ case 'right':
114
+ case 'ArrowRight': return 'key.rightArrow';
115
+ case 'backspace':
116
+ case 'Backspace': return 'key.backspace';
117
+ case 'delete':
118
+ case 'Delete': return 'key.delete';
119
+ default: return `input === '${key}'`;
120
+ }
121
+ }
122
+ // ── Import tracker ──────────────────────────────────────────────────────
123
+ class ImportTracker {
124
+ reactImports = new Set();
125
+ inkImports = new Set();
126
+ inkSpinner = false;
127
+ inkTextInput = false;
128
+ inkSelectInput = false;
129
+ addReact(name) { this.reactImports.add(name); }
130
+ addInk(name) { this.inkImports.add(name); }
131
+ needSpinner() { this.inkSpinner = true; }
132
+ needTextInput() { this.inkTextInput = true; }
133
+ needSelectInput() { this.inkSelectInput = true; }
134
+ emit() {
135
+ const lines = [];
136
+ if (this.reactImports.size > 0) {
137
+ lines.push(`import React, { ${[...this.reactImports].sort().join(', ')} } from 'react';`);
138
+ }
139
+ else {
140
+ lines.push(`import React from 'react';`);
141
+ }
142
+ if (this.inkImports.size > 0) {
143
+ lines.push(`import { ${[...this.inkImports].sort().join(', ')} } from 'ink';`);
144
+ }
145
+ if (this.inkSpinner) {
146
+ lines.push(`import Spinner from 'ink-spinner';`);
147
+ }
148
+ if (this.inkTextInput) {
149
+ lines.push(`import TextInput from 'ink-text-input';`);
150
+ }
151
+ if (this.inkSelectInput) {
152
+ lines.push(`import SelectInput from 'ink-select-input';`);
153
+ }
154
+ return lines;
155
+ }
156
+ }
157
+ // ── State block → useState ──────────────────────────────────────────────
158
+ function generateStateHook(stateNode, imports) {
159
+ const lines = [];
160
+ const props = getProps(stateNode);
161
+ const name = props.name;
162
+ const initialProp = props.initial;
163
+ if (name && initialProp !== undefined) {
164
+ imports.addReact('useState');
165
+ const initial = isExpr(initialProp)
166
+ ? initialProp.code
167
+ : String(initialProp);
168
+ const initVal = isExpr(initialProp) ? initial
169
+ : initial === 'null' ? 'null'
170
+ : initial === 'true' ? 'true'
171
+ : initial === 'false' ? 'false'
172
+ : initial.startsWith('[') || initial.startsWith('{') ? initial
173
+ : isNaN(Number(initial)) ? `'${initial}'`
174
+ : String(initial);
175
+ const setter = `set${capitalize(name)}`;
176
+ lines.push(` const [${name}, ${setter}] = useState(${initVal});`);
177
+ }
178
+ return lines;
179
+ }
180
+ // ── Ref block → useRef (Feature #10) ────────────────────────────────────
181
+ function generateRefHook(refNode, imports) {
182
+ const lines = [];
183
+ const props = getProps(refNode);
184
+ const name = props.name;
185
+ const initialProp = props.initial;
186
+ if (name) {
187
+ imports.addReact('useRef');
188
+ const initVal = initialProp === undefined ? 'null'
189
+ : isExpr(initialProp) ? unwrapProp(initialProp)
190
+ : String(initialProp);
191
+ lines.push(` const ${name}Ref = useRef(${initVal});`);
192
+ }
193
+ return lines;
194
+ }
195
+ // ── Stream block → useEffect with async generator ───────────────────────
196
+ function generateStreamEffect(streamNode, imports) {
197
+ const lines = [];
198
+ const props = getProps(streamNode);
199
+ const name = props.name;
200
+ const source = props.source;
201
+ const append = props.append !== 'false'; // default true
202
+ if (name && source) {
203
+ imports.addReact('useEffect');
204
+ const setter = `set${capitalize(name)}`;
205
+ lines.push(` useEffect(() => {`);
206
+ lines.push(` let cancelled = false;`);
207
+ lines.push(` (async () => {`);
208
+ lines.push(` for await (const chunk of ${source}()) {`);
209
+ lines.push(` if (cancelled) break;`);
210
+ if (append) {
211
+ lines.push(` ${setter}(prev => [...prev, chunk]);`);
212
+ }
213
+ else {
214
+ lines.push(` ${setter}(chunk);`);
215
+ }
216
+ lines.push(` }`);
217
+ lines.push(` })();`);
218
+ lines.push(` return () => { cancelled = true; };`);
219
+ lines.push(` }, []);`);
220
+ }
221
+ return lines;
222
+ }
223
+ // ── Logic block → useEffect (Feature #8) ────────────────────────────────
224
+ function generateLogicEffect(logicNode, imports) {
225
+ const lines = [];
226
+ const props = getProps(logicNode);
227
+ const code = props.code || '';
228
+ const deps = props.deps;
229
+ if (code) {
230
+ imports.addReact('useEffect');
231
+ const dedented = dedent(code);
232
+ const depsStr = deps ? `[${deps}]` : '[]';
233
+ lines.push(` useEffect(() => {`);
234
+ for (const line of dedented.split('\n')) {
235
+ lines.push(` ${line}`);
236
+ }
237
+ lines.push(` }, ${depsStr});`);
238
+ }
239
+ return lines;
240
+ }
241
+ // ── Callback block → useCallback (Feature #11) ─────────────────────────
242
+ function generateCallbackHook(callbackNode, imports) {
243
+ const lines = [];
244
+ const props = getProps(callbackNode);
245
+ const name = props.name;
246
+ const params = props.params || '';
247
+ const deps = props.deps;
248
+ const handlerChild = (callbackNode.children || []).find(c => c.type === 'handler');
249
+ const code = handlerChild ? (getProps(handlerChild).code || '') : '';
250
+ if (name && code) {
251
+ imports.addReact('useCallback');
252
+ const dedented = dedent(code);
253
+ const depsStr = deps ? `[${deps}]` : '[]';
254
+ const isAsync = props.async === 'true' || props.async === true;
255
+ const asyncKw = isAsync ? 'async ' : '';
256
+ lines.push(` const ${name} = useCallback(${asyncKw}(${params}) => {`);
257
+ for (const line of dedented.split('\n')) {
258
+ lines.push(` ${line}`);
259
+ }
260
+ lines.push(` }, ${depsStr});`);
261
+ }
262
+ return lines;
263
+ }
264
+ // ── Collect nested on-nodes from UI tree for hoisting (Bug #1) ─────────
265
+ function collectNestedOnNodes(node) {
266
+ const found = [];
267
+ for (const child of node.children || []) {
268
+ if (child.type === 'on') {
269
+ found.push(child);
270
+ }
271
+ else if (!['state', 'stream', 'logic', 'callback', 'ref'].includes(child.type) && !isCoreNode(child.type)) {
272
+ found.push(...collectNestedOnNodes(child));
273
+ }
274
+ }
275
+ return found;
276
+ }
277
+ // ── Generate useInput from an on-node ───────────────────────────────────
278
+ function generateOnHook(onNode, imports) {
279
+ const lines = [];
280
+ const onProps = getProps(onNode);
281
+ const event = (onProps.event || onProps.name);
282
+ if (event === 'key' || event === 'input') {
283
+ imports.addInk('useInput');
284
+ const key = onProps.key;
285
+ const handlerChild = (onNode.children || []).find(c => c.type === 'handler');
286
+ const code = handlerChild ? (getProps(handlerChild).code || '') : '';
287
+ lines.push(` useInput((input, key) => {`);
288
+ if (key) {
289
+ lines.push(` if (!(${keyToCheck(key)})) return;`);
290
+ }
291
+ if (code) {
292
+ const dedented = dedent(code);
293
+ for (const line of dedented.split('\n')) {
294
+ lines.push(` ${line}`);
295
+ }
296
+ }
297
+ lines.push(` });`);
298
+ lines.push('');
299
+ }
300
+ return lines;
301
+ }
302
+ // ── Node renderer → JSX ─────────────────────────────────────────────────
303
+ function renderInkNode(node, indent, imports) {
304
+ const p = getProps(node);
305
+ const lines = [];
306
+ switch (node.type) {
307
+ case 'text': {
308
+ imports.addInk('Text');
309
+ // Bug #2: Handle __expr objects for dynamic text values
310
+ const rawValue = p.value;
311
+ const styles = p.styles || {};
312
+ const textProps = [];
313
+ if (styles.fw === 'bold' || styles.bold)
314
+ textProps.push('bold');
315
+ if (styles.dim)
316
+ textProps.push('dimColor');
317
+ if (styles.italic)
318
+ textProps.push('italic');
319
+ if (styles.c || styles.color)
320
+ textProps.push(`color=${inkColor(styles.c || styles.color)}`);
321
+ if (styles.bg)
322
+ textProps.push(`backgroundColor=${inkColor(styles.bg)}`);
323
+ const propsStr = textProps.length > 0 ? ' ' + textProps.join(' ') : '';
324
+ if (isExpr(rawValue)) {
325
+ lines.push(`${indent}<Text${propsStr}>{${rawValue.code}}</Text>`);
326
+ }
327
+ else {
328
+ const value = String(rawValue ?? '');
329
+ lines.push(`${indent}<Text${propsStr}>{${JSON.stringify(value)}}</Text>`);
330
+ }
331
+ break;
332
+ }
333
+ case 'separator': {
334
+ imports.addInk('Text');
335
+ const width = Number(p.width) || 48;
336
+ lines.push(`${indent}<Text dimColor>{'${'─'.repeat(width)}'}</Text>`);
337
+ break;
338
+ }
339
+ case 'box': {
340
+ imports.addInk('Box');
341
+ imports.addInk('Text');
342
+ const color = p.color;
343
+ const borderStyle = p.borderStyle || 'round';
344
+ const flexDirection = p.flexDirection;
345
+ const width = p.width;
346
+ const flexGrow = p.flexGrow;
347
+ const padding = p.padding;
348
+ const paddingX = p.paddingX;
349
+ const paddingY = p.paddingY;
350
+ const boxProps = [];
351
+ if (color)
352
+ boxProps.push(`borderStyle="${borderStyle}"`, `borderColor=${inkColor(color)}`);
353
+ if (flexDirection)
354
+ boxProps.push(`flexDirection="${flexDirection}"`);
355
+ if (width)
356
+ boxProps.push(`width={${width}}`);
357
+ if (flexGrow)
358
+ boxProps.push(`flexGrow={${flexGrow}}`);
359
+ if (padding)
360
+ boxProps.push(`padding={${padding}}`);
361
+ if (paddingX)
362
+ boxProps.push(`paddingX={${paddingX}}`);
363
+ if (paddingY)
364
+ boxProps.push(`paddingY={${paddingY}}`);
365
+ const propsStr = boxProps.length > 0 ? ' ' + boxProps.join(' ') : '';
366
+ lines.push(`${indent}<Box${propsStr}>`);
367
+ for (const child of node.children || []) {
368
+ // Skip nested on-nodes in JSX — they're hoisted to component body
369
+ if (child.type === 'on')
370
+ continue;
371
+ lines.push(...renderInkNode(child, indent + ' ', imports));
372
+ }
373
+ lines.push(`${indent}</Box>`);
374
+ break;
375
+ }
376
+ case 'table': {
377
+ imports.addInk('Box');
378
+ imports.addInk('Text');
379
+ const headers = p.headers || '[]';
380
+ const rows = getChildren(node, 'row');
381
+ lines.push(`${indent}<Box flexDirection="column">`);
382
+ // Header row
383
+ lines.push(`${indent} <Box>`);
384
+ lines.push(`${indent} {(${headers} as string[]).map((h: string, i: number) => (`);
385
+ lines.push(`${indent} <Box key={i} width={20}><Text bold>{h}</Text></Box>`);
386
+ lines.push(`${indent} ))}`);
387
+ lines.push(`${indent} </Box>`);
388
+ // Separator
389
+ lines.push(`${indent} <Text dimColor>{'${'─'.repeat(60)}'}</Text>`);
390
+ // Data rows
391
+ for (const row of rows) {
392
+ const rowData = getProps(row).data || '[]';
393
+ lines.push(`${indent} <Box>`);
394
+ lines.push(`${indent} {(${rowData} as string[]).map((cell: string, i: number) => (`);
395
+ lines.push(`${indent} <Box key={i} width={20}><Text>{cell}</Text></Box>`);
396
+ lines.push(`${indent} ))}`);
397
+ lines.push(`${indent} </Box>`);
398
+ }
399
+ lines.push(`${indent}</Box>`);
400
+ break;
401
+ }
402
+ case 'scoreboard': {
403
+ imports.addInk('Box');
404
+ imports.addInk('Text');
405
+ const title = p.title || 'Results';
406
+ const winner = p.winner || '';
407
+ const metrics = getChildren(node, 'metric');
408
+ lines.push(`${indent}<Box flexDirection="column">`);
409
+ lines.push(`${indent} <Text bold>{${JSON.stringify(title)}}</Text>`);
410
+ if (winner) {
411
+ lines.push(`${indent} <Text bold color="green">{'Winner: ${winner}'}</Text>`);
412
+ }
413
+ for (const metric of metrics) {
414
+ const mp = getProps(metric);
415
+ const mname = mp.name || '';
416
+ const values = mp.values || '[]';
417
+ lines.push(`${indent} <Box>`);
418
+ lines.push(`${indent} <Text dimColor>{${JSON.stringify(mname + ':')}}</Text>`);
419
+ lines.push(`${indent} <Text>{' '}{(${values} as string[]).join(' | ')}</Text>`);
420
+ lines.push(`${indent} </Box>`);
421
+ }
422
+ lines.push(`${indent}</Box>`);
423
+ break;
424
+ }
425
+ case 'spinner': {
426
+ imports.addInk('Text');
427
+ imports.needSpinner();
428
+ const rawMsg = p.message;
429
+ const color = p.color;
430
+ const spinnerColor = color ? ` color=${inkColor(color)}` : '';
431
+ const msgContent = isExpr(rawMsg) ? `{${rawMsg.code}}` : `{' ${String(rawMsg ?? 'Loading...')}'}`;
432
+ lines.push(`${indent}<Text>`);
433
+ lines.push(`${indent} <Spinner${spinnerColor} />`);
434
+ lines.push(`${indent} ${msgContent}`);
435
+ lines.push(`${indent}</Text>`);
436
+ break;
437
+ }
438
+ // Bug #3: Handle dynamic progress values via __expr
439
+ case 'progress': {
440
+ imports.addInk('Box');
441
+ imports.addInk('Text');
442
+ const rawValue = p.value;
443
+ const rawMax = p.max;
444
+ const color = p.color || 'green';
445
+ const barWidth = 20;
446
+ if (isExpr(rawValue) || isExpr(rawMax)) {
447
+ // Dynamic progress — compute at runtime
448
+ const valueExpr = isExpr(rawValue) ? rawValue.code : String(rawValue ?? 0);
449
+ const maxExpr = isExpr(rawMax) ? rawMax.code : String(rawMax ?? 100);
450
+ lines.push(`${indent}<Box>`);
451
+ lines.push(`${indent} {(() => {`);
452
+ lines.push(`${indent} const _pct = Math.min(1, Math.max(0, (${valueExpr}) / (${maxExpr})));`);
453
+ lines.push(`${indent} const _filled = Math.round(_pct * ${barWidth});`);
454
+ lines.push(`${indent} const _empty = ${barWidth} - _filled;`);
455
+ lines.push(`${indent} return (<>`);
456
+ lines.push(`${indent} <Text color=${inkColor(color)}>${'{'}'▓'.repeat(_filled)${'}'}</Text>`);
457
+ lines.push(`${indent} <Text>${'{'}'░'.repeat(_empty)${'}'}</Text>`);
458
+ lines.push(`${indent} <Text>{' ' + Math.round(_pct * 100) + '%'}</Text>`);
459
+ lines.push(`${indent} </>);`);
460
+ lines.push(`${indent} })()}`);
461
+ lines.push(`${indent}</Box>`);
462
+ }
463
+ else {
464
+ // Static progress — compute at compile time
465
+ const value = Number(rawValue) || 0;
466
+ const max = Number(rawMax) || 100;
467
+ const pct = Math.min(1, Math.max(0, value / max));
468
+ const filled = Math.round(pct * barWidth);
469
+ const empty = barWidth - filled;
470
+ lines.push(`${indent}<Box>`);
471
+ lines.push(`${indent} <Text color=${inkColor(color)}>{'${'▓'.repeat(filled)}'}</Text>`);
472
+ lines.push(`${indent} <Text>{'${'░'.repeat(empty)}'}</Text>`);
473
+ lines.push(`${indent} <Text>{' ${Math.round(pct * 100)}%'}</Text>`);
474
+ lines.push(`${indent}</Box>`);
475
+ }
476
+ break;
477
+ }
478
+ case 'gradient': {
479
+ imports.addInk('Text');
480
+ const text = p.text || '';
481
+ const colors = p.colors || '[]';
482
+ lines.push(`${indent}<Text>`);
483
+ lines.push(`${indent} {${JSON.stringify(text)}.split('').map((ch: string, i: number) => {`);
484
+ lines.push(`${indent} const colors = ${colors} as number[];`);
485
+ lines.push(`${indent} const colorIdx = Math.floor((i / ${text.length}) * colors.length);`);
486
+ lines.push(`${indent} const color = String(colors[Math.min(colorIdx, colors.length - 1)]);`);
487
+ lines.push(`${indent} return <Text key={i} color={color}>{ch}</Text>;`);
488
+ lines.push(`${indent} })}`);
489
+ lines.push(`${indent}</Text>`);
490
+ break;
491
+ }
492
+ case 'input-area': {
493
+ imports.addInk('Box');
494
+ const children = node.children || [];
495
+ lines.push(`${indent}<Box flexDirection="column" borderStyle="single" borderColor="gray">`);
496
+ for (const child of children) {
497
+ if (child.type === 'on')
498
+ continue;
499
+ lines.push(...renderInkNode(child, indent + ' ', imports));
500
+ }
501
+ lines.push(`${indent}</Box>`);
502
+ break;
503
+ }
504
+ case 'output-area': {
505
+ imports.addInk('Box');
506
+ const children = node.children || [];
507
+ lines.push(`${indent}<Box flexDirection="column" flexGrow={1}>`);
508
+ for (const child of children) {
509
+ if (child.type === 'on')
510
+ continue;
511
+ lines.push(...renderInkNode(child, indent + ' ', imports));
512
+ }
513
+ lines.push(`${indent}</Box>`);
514
+ break;
515
+ }
516
+ // Bug #4: Wire text-input value/onChange for controlled component
517
+ case 'text-input': {
518
+ imports.needTextInput();
519
+ const placeholder = p.placeholder || '';
520
+ const bind = p.bind;
521
+ const history = p.history;
522
+ const onSubmit = p.onSubmit;
523
+ const inputProps = [];
524
+ if (placeholder)
525
+ inputProps.push(`placeholder=${JSON.stringify(placeholder)}`);
526
+ if (history)
527
+ inputProps.push(`history={${history}}`);
528
+ if (bind) {
529
+ inputProps.push(`value={${bind}}`);
530
+ inputProps.push(`onChange={set${capitalize(bind)}}`);
531
+ }
532
+ if (onSubmit) {
533
+ inputProps.push(`onSubmit={${onSubmit}}`);
534
+ }
535
+ lines.push(`${indent}<TextInput ${inputProps.join(' ')} />`);
536
+ break;
537
+ }
538
+ // Bug #5: Wire select-input onSelect handler
539
+ case 'select-input': {
540
+ imports.needSelectInput();
541
+ const rawItems = p.items;
542
+ const items = isExpr(rawItems) ? rawItems.code : (rawItems || '[]');
543
+ const onSelect = p.onSelect;
544
+ const selectProps = [`items={${items}}`];
545
+ if (onSelect) {
546
+ selectProps.push(`onSelect={${onSelect}}`);
547
+ }
548
+ lines.push(`${indent}<SelectInput ${selectProps.join(' ')} />`);
549
+ break;
550
+ }
551
+ // Bug #6: Fix handler indentation — use dedent instead of trim
552
+ case 'handler': {
553
+ const code = p.code || '';
554
+ const dedented = dedent(code);
555
+ for (const line of dedented.split('\n')) {
556
+ lines.push(`${indent}${line}`);
557
+ }
558
+ break;
559
+ }
560
+ // Feature: each — JSX list iteration
561
+ // each collection={{items}} item=engine index=i key={{engine.id}}
562
+ // box ...
563
+ // → {items.map((engine, i) => (<Box key={engine.id}>...</Box>))}
564
+ case 'each': {
565
+ const rawCollection = p.collection;
566
+ const collection = isExpr(rawCollection) ? rawCollection.code : (rawCollection || '[]');
567
+ const item = p.item || 'item';
568
+ const index = p.index || 'i';
569
+ const rawKey = p.key;
570
+ const key = isExpr(rawKey) ? rawKey.code : (rawKey || index);
571
+ lines.push(`${indent}{${collection}.map((${item}, ${index}) => (`);
572
+ // If there's one child, render it directly with key; otherwise wrap in fragment
573
+ const children = node.children || [];
574
+ if (children.length === 1) {
575
+ const childLines = renderInkNode(children[0], indent + ' ', imports);
576
+ // Inject key prop into the first JSX opening tag
577
+ if (childLines.length > 0) {
578
+ childLines[0] = childLines[0].replace(/^(\s*<\w+)/, `$1 key={${key}}`);
579
+ }
580
+ lines.push(...childLines);
581
+ }
582
+ else {
583
+ lines.push(`${indent} <React.Fragment key={${key}}>`);
584
+ for (const child of children) {
585
+ lines.push(...renderInkNode(child, indent + ' ', imports));
586
+ }
587
+ lines.push(`${indent} </React.Fragment>`);
588
+ }
589
+ lines.push(`${indent}))}`);
590
+ break;
591
+ }
592
+ // Feature #7: Conditional rendering
593
+ case 'conditional': {
594
+ const condition = p.if;
595
+ const jsCondition = irConditionToJs(condition ?? 'true');
596
+ lines.push(`${indent}{${jsCondition} && (`);
597
+ lines.push(`${indent} <>`);
598
+ for (const child of node.children || []) {
599
+ lines.push(...renderInkNode(child, indent + ' ', imports));
600
+ }
601
+ lines.push(`${indent} </>`);
602
+ lines.push(`${indent})}`);
603
+ break;
604
+ }
605
+ case 'state':
606
+ // Handled at component level as useState
607
+ break;
608
+ case 'ref':
609
+ // Handled at component level as useRef
610
+ break;
611
+ case 'stream':
612
+ // Handled at component level as useEffect with async generator
613
+ break;
614
+ case 'logic':
615
+ // Handled at component level as useEffect
616
+ break;
617
+ case 'callback':
618
+ // Handled at component level as useCallback
619
+ break;
620
+ // Bug #1: Nested on-nodes are hoisted — skip in JSX, emit comment
621
+ case 'on':
622
+ break;
623
+ default: {
624
+ // Core language nodes emit as-is (they're TypeScript, not JSX)
625
+ if (isCoreNode(node.type)) {
626
+ // Machine nodes get useReducer treatment in Ink
627
+ if (node.type === 'machine') {
628
+ lines.push(...generateMachineReducer(node).map(l => l));
629
+ }
630
+ else {
631
+ lines.push(...generateCoreNode(node));
632
+ }
633
+ break;
634
+ }
635
+ // Recurse into children for unknown nodes
636
+ if (node.children) {
637
+ for (const child of node.children) {
638
+ lines.push(...renderInkNode(child, indent, imports));
639
+ }
640
+ }
641
+ }
642
+ }
643
+ return lines;
644
+ }
645
+ // ── Main export ──────────────────────────────────────────────────────────
646
+ export function transpileInk(root, _config) {
647
+ const sourceMap = [];
648
+ const imports = new ImportTracker();
649
+ const lines = [];
650
+ const rootProps = getProps(root);
651
+ const screenName = rootProps.name || 'App';
652
+ // Feature #9: Component props from screen attributes
653
+ const propsAttr = rootProps.props;
654
+ const propParts = propsAttr ? splitPropsRespectingDepth(propsAttr) : [];
655
+ const propsParam = propParts.length > 0
656
+ ? `{ ${propParts.map(p => p.trim().split(':')[0].trim()).join(', ')} }: { ${propParts.map(p => {
657
+ const trimmed = p.trim();
658
+ if (trimmed.includes(':'))
659
+ return trimmed;
660
+ return `${trimmed}: any`;
661
+ }).join('; ')} }`
662
+ : '';
663
+ // Separate node categories
664
+ const stateNodes = getChildren(root, 'state');
665
+ const refNodes = getChildren(root, 'ref');
666
+ const onNodes = getChildren(root, 'on');
667
+ const streamNodes = getChildren(root, 'stream');
668
+ const logicNodes = getChildren(root, 'logic');
669
+ const callbackNodes = getChildren(root, 'callback');
670
+ // In Ink context, 'each' is a UI node (.map iteration), not a core node (for...of loop)
671
+ const isInkUiNode = (type) => type === 'each' || type === 'conditional' || type === 'select'
672
+ || type === 'model' || type === 'repository' || type === 'dependency' || type === 'cache';
673
+ const coreChildren = (root.children || []).filter(c => isCoreNode(c.type) && c.type !== 'on' && !isInkUiNode(c.type));
674
+ const uiChildren = (root.children || []).filter(c => c.type !== 'state' && c.type !== 'ref' && c.type !== 'on' && c.type !== 'stream'
675
+ && c.type !== 'logic' && c.type !== 'callback' && (!isCoreNode(c.type) || isInkUiNode(c.type)));
676
+ // Bug #1: Collect nested on-nodes from UI tree and hoist to component level
677
+ const nestedOnNodes = collectNestedOnNodes(root);
678
+ // Deduplicate — top-level on-nodes are already in onNodes
679
+ const allOnNodes = [...onNodes];
680
+ for (const nested of nestedOnNodes) {
681
+ if (!onNodes.includes(nested)) {
682
+ allOnNodes.push(nested);
683
+ }
684
+ }
685
+ // ── Core nodes emitted above component (types, interfaces, machines, events) ──
686
+ const coreLines = [];
687
+ if (coreChildren.length > 0) {
688
+ coreLines.push('// ── Core ───────────────────────────────────────────────');
689
+ for (const child of coreChildren) {
690
+ if (child.type === 'machine') {
691
+ // Machine nodes get useReducer treatment
692
+ imports.addReact('useReducer');
693
+ coreLines.push(...generateMachineReducer(child));
694
+ }
695
+ else {
696
+ coreLines.push(...generateCoreNode(child));
697
+ }
698
+ coreLines.push('');
699
+ }
700
+ }
701
+ // ── Component body ──
702
+ const bodyLines = [];
703
+ // State hooks
704
+ for (const stateNode of stateNodes) {
705
+ bodyLines.push(...generateStateHook(stateNode, imports));
706
+ }
707
+ if (stateNodes.length > 0)
708
+ bodyLines.push('');
709
+ // Ref hooks (Feature #10)
710
+ for (const refNode of refNodes) {
711
+ bodyLines.push(...generateRefHook(refNode, imports));
712
+ }
713
+ if (refNodes.length > 0)
714
+ bodyLines.push('');
715
+ // Callback hooks (Feature #11)
716
+ for (const callbackNode of callbackNodes) {
717
+ bodyLines.push(...generateCallbackHook(callbackNode, imports));
718
+ bodyLines.push('');
719
+ }
720
+ // on event=key → useInput() hooks (Bug #1: now includes hoisted nested on-nodes)
721
+ for (const onNode of allOnNodes) {
722
+ bodyLines.push(...generateOnHook(onNode, imports));
723
+ }
724
+ // Stream effects → useEffect with async generator iteration
725
+ for (const streamNode of streamNodes) {
726
+ bodyLines.push(...generateStreamEffect(streamNode, imports));
727
+ bodyLines.push('');
728
+ }
729
+ // Logic effects → useEffect (Feature #8)
730
+ for (const logicNode of logicNodes) {
731
+ bodyLines.push(...generateLogicEffect(logicNode, imports));
732
+ bodyLines.push('');
733
+ }
734
+ // JSX return
735
+ imports.addInk('Box');
736
+ bodyLines.push(' return (');
737
+ bodyLines.push(' <Box flexDirection="column">');
738
+ for (const child of uiChildren) {
739
+ bodyLines.push(...renderInkNode(child, ' ', imports));
740
+ }
741
+ bodyLines.push(' </Box>');
742
+ bodyLines.push(' );');
743
+ // ── Assemble ──
744
+ // Imports (computed last since renderInkNode populates the tracker)
745
+ lines.push(...imports.emit());
746
+ lines.push('');
747
+ // Core nodes
748
+ if (coreLines.length > 0) {
749
+ lines.push(...coreLines);
750
+ }
751
+ // Component (Feature #9: with props)
752
+ lines.push(`export default function ${screenName}(${propsParam}) {`);
753
+ lines.push(...bodyLines);
754
+ lines.push('}');
755
+ // Source map
756
+ sourceMap.push({
757
+ irLine: root.loc?.line || 0,
758
+ irCol: root.loc?.col || 1,
759
+ outLine: 1,
760
+ outCol: 1,
761
+ });
762
+ const code = lines.join('\n');
763
+ const irText = serializeIR(root);
764
+ const irTokenCount = countTokens(irText);
765
+ const tsTokenCount = countTokens(code);
766
+ const tokenReduction = Math.round((1 - irTokenCount / tsTokenCount) * 100);
767
+ return {
768
+ code,
769
+ sourceMap,
770
+ irTokenCount,
771
+ tsTokenCount,
772
+ tokenReduction,
773
+ };
774
+ }
775
+ //# sourceMappingURL=transpiler-ink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transpiler-ink.js","sourceRoot":"","sources":["../src/transpiler-ink.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,19 +1,22 @@
1
1
  {
2
2
  "name": "@kernlang/terminal",
3
- "version": "2.0.0",
3
+ "version": "3.0.0",
4
4
  "description": "Kern ANSI terminal rendering transpiler",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "exports": {
9
- ".": "./dist/index.js"
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
10
13
  },
11
14
  "files": [
12
15
  "dist"
13
16
  ],
14
17
  "license": "AGPL-3.0",
15
18
  "dependencies": {
16
- "@kernlang/core": "2.0.0"
19
+ "@kernlang/core": "3.0.0"
17
20
  },
18
21
  "scripts": {
19
22
  "build": "tsc -b",