@vizejs/fresco 0.345.0 → 0.350.2

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 (34) hide show
  1. package/dist/app-DJImCkSW.d.mts +135 -0
  2. package/dist/app-DJImCkSW.d.mts.map +1 -0
  3. package/dist/{useInput-BYoxI3PX.mjs → app-D_Ke7C8w.mjs} +3 -221
  4. package/dist/app-D_Ke7C8w.mjs.map +1 -0
  5. package/dist/components/index.d.mts +2 -2
  6. package/dist/components/index.mjs +1 -1
  7. package/dist/{components-Co_HaVzY.mjs → components-3-vKPu1z.mjs} +2 -2
  8. package/dist/{components-Co_HaVzY.mjs.map → components-3-vKPu1z.mjs.map} +1 -1
  9. package/dist/composables/index.d.mts +3 -2
  10. package/dist/composables/index.mjs +3 -2
  11. package/dist/{composables-DwlfqK02.mjs → composables-Da3c5pxz.mjs} +3 -2
  12. package/dist/{composables-DwlfqK02.mjs.map → composables-Da3c5pxz.mjs.map} +1 -1
  13. package/dist/{index-B9BJP7in.d.mts → index-D2kUje57.d.mts} +182 -376
  14. package/dist/index-D2kUje57.d.mts.map +1 -0
  15. package/dist/{index-Dwx6lKP0.d.mts → index-DqGcW9sz.d.mts} +2 -85
  16. package/dist/index-DqGcW9sz.d.mts.map +1 -0
  17. package/dist/index.d.mts +6 -138
  18. package/dist/index.mjs +4 -3
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/renderer-DWG0G3g8.d.mts +198 -0
  21. package/dist/renderer-DWG0G3g8.d.mts.map +1 -0
  22. package/dist/testing/index.d.mts +124 -0
  23. package/dist/testing/index.d.mts.map +1 -0
  24. package/dist/testing/index.mjs +282 -0
  25. package/dist/testing/index.mjs.map +1 -0
  26. package/dist/useApp-CNjer3hJ.d.mts +86 -0
  27. package/dist/useApp-CNjer3hJ.d.mts.map +1 -0
  28. package/dist/useInput-BpH-JIU3.mjs +219 -0
  29. package/dist/useInput-BpH-JIU3.mjs.map +1 -0
  30. package/package.json +9 -5
  31. package/dist/index-B9BJP7in.d.mts.map +0 -1
  32. package/dist/index-Dwx6lKP0.d.mts.map +0 -1
  33. package/dist/index.d.mts.map +0 -1
  34. package/dist/useInput-BYoxI3PX.mjs.map +0 -1
@@ -0,0 +1,135 @@
1
+ import { F as PasteEvent, I as ResizeEvent, M as KeyEvent, P as MouseEvent, a as FocusEvent, i as CompositionEvent } from "./renderer-DWG0G3g8.mjs";
2
+ import { Component, Ref, VNode } from "@vue/runtime-core";
3
+ import { TerminalInfoNapi } from "@vizejs/fresco-native";
4
+
5
+ //#region src/kittyKeyboard.d.ts
6
+ /**
7
+ * Kitty keyboard protocol constants compatible with Ink.
8
+ */
9
+ declare const kittyFlags: {
10
+ readonly disambiguateEscapeCodes: 1;
11
+ readonly reportEventTypes: 2;
12
+ readonly reportAlternateKeys: 4;
13
+ readonly reportAllKeysAsEscapeCodes: 8;
14
+ readonly reportAssociatedText: 16;
15
+ };
16
+ type KittyFlagName = keyof typeof kittyFlags;
17
+ interface KittyKeyboardOptions {
18
+ mode?: "auto" | "enabled" | "disabled";
19
+ flags?: KittyFlagName[];
20
+ }
21
+ declare function resolveKittyFlags(flags: KittyFlagName[]): number;
22
+ declare const kittyModifiers: {
23
+ readonly shift: 1;
24
+ readonly alt: 2;
25
+ readonly ctrl: 4;
26
+ readonly super: 8;
27
+ readonly hyper: 16;
28
+ readonly meta: 32;
29
+ readonly capsLock: 64;
30
+ readonly numLock: 128;
31
+ };
32
+ //#endregion
33
+ //#region src/app.d.ts
34
+ declare const lastKeyEvent: Ref<KeyEvent | null>;
35
+ declare const lastPasteEvent: Ref<PasteEvent | null>;
36
+ declare const lastResizeEvent: Ref<ResizeEvent | null>;
37
+ declare const lastMouseEvent: Ref<MouseEvent | null>;
38
+ declare const lastFocusEvent: Ref<FocusEvent | null>;
39
+ declare const lastCompositionEvent: Ref<CompositionEvent | null>;
40
+ /**
41
+ * App options
42
+ */
43
+ interface AppOptions {
44
+ /** Enable mouse support */
45
+ mouse?: boolean;
46
+ /** Exit on Ctrl+C */
47
+ exitOnCtrlC?: boolean;
48
+ /** Custom error handler */
49
+ onError?: (error: Error) => void;
50
+ /** Debug mode - logs render tree */
51
+ debug?: boolean;
52
+ /** Ink-compatible option, accepted for API parity */
53
+ stdout?: NodeJS.WriteStream;
54
+ /** Ink-compatible option, accepted for API parity */
55
+ stdin?: NodeJS.ReadStream;
56
+ /** Ink-compatible option, accepted for API parity */
57
+ stderr?: NodeJS.WriteStream;
58
+ /** Ink-compatible option, accepted for API parity */
59
+ patchConsole?: boolean;
60
+ /** Called after a frame is rendered */
61
+ onRender?: (metrics: RenderMetrics) => void;
62
+ /** Enable screen reader rendering hints */
63
+ isScreenReaderEnabled?: boolean;
64
+ /** Maximum render frames per second */
65
+ maxFps?: number;
66
+ /** Use alternate screen buffer */
67
+ alternateScreen?: boolean;
68
+ /** Ink-compatible option, accepted for API parity */
69
+ incrementalRendering?: boolean;
70
+ /** Ink-compatible option, accepted for API parity */
71
+ concurrent?: boolean;
72
+ /** Override interactive mode detection */
73
+ interactive?: boolean;
74
+ /** Configure Kitty keyboard protocol support */
75
+ kittyKeyboard?: KittyKeyboardOptions;
76
+ }
77
+ type RenderOptions = AppOptions;
78
+ type AppRoot = Component | VNode;
79
+ /**
80
+ * Performance metrics for a render operation.
81
+ */
82
+ interface RenderMetrics {
83
+ /** Time spent rendering in milliseconds */
84
+ renderTime: number;
85
+ }
86
+ /**
87
+ * Fresco App instance
88
+ */
89
+ interface App$1 {
90
+ /** Mount the app */
91
+ mount(): Promise<void>;
92
+ /** Unmount the app */
93
+ unmount(errorOrResult?: unknown): Promise<void>;
94
+ /** Wait for exit */
95
+ waitUntilExit(): Promise<unknown>;
96
+ /** Wait for pending render output */
97
+ waitUntilRenderFlush(): Promise<void>;
98
+ /** Render the app */
99
+ render(): void;
100
+ /** Clear the screen */
101
+ clear(): void;
102
+ /** Get terminal info */
103
+ getTerminalInfo(): Promise<TerminalInfoNapi>;
104
+ }
105
+ interface RenderInstance {
106
+ rerender(root: AppRoot): void;
107
+ unmount(errorOrResult?: unknown): Promise<void>;
108
+ waitUntilExit(): Promise<unknown>;
109
+ waitUntilRenderFlush(): Promise<void>;
110
+ cleanup(): Promise<void>;
111
+ clear(): void;
112
+ }
113
+ type Instance = RenderInstance;
114
+ interface RenderToStringOptions {
115
+ /** Width of the virtual terminal in columns */
116
+ columns?: number;
117
+ }
118
+ interface WritableStreamLike {
119
+ write(...args: unknown[]): unknown;
120
+ }
121
+ /**
122
+ * Create a Fresco TUI app
123
+ */
124
+ declare function createApp(rootComponent: AppRoot, options?: AppOptions): App$1;
125
+ /**
126
+ * Ink-compatible helper that mounts immediately.
127
+ */
128
+ declare function render(root: AppRoot, options?: AppOptions | WritableStreamLike): RenderInstance;
129
+ /**
130
+ * Render a Fresco component to a plain string without starting a terminal app.
131
+ */
132
+ declare function renderToString(root: AppRoot, options?: RenderToStringOptions): string;
133
+ //#endregion
134
+ export { KittyFlagName as _, RenderMetrics as a, kittyModifiers as b, createApp as c, lastKeyEvent as d, lastMouseEvent as f, renderToString as g, render as h, RenderInstance as i, lastCompositionEvent as l, lastResizeEvent as m, AppOptions as n, RenderOptions as o, lastPasteEvent as p, Instance as r, RenderToStringOptions as s, App$1 as t, lastFocusEvent as u, KittyKeyboardOptions as v, resolveKittyFlags as x, kittyFlags as y };
135
+ //# sourceMappingURL=app-DJImCkSW.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-DJImCkSW.d.mts","names":[],"sources":["../src/kittyKeyboard.ts","../src/app.ts"],"mappings":";;;;;;;;cAIa,UAAA;EAAA;;;;;;KAQD,aAAA,gBAA6B,UAAU;AAAA,UAElC,oBAAA;EACf,IAAA;EACA,KAAA,GAAQ,aAAa;AAAA;AAAA,iBAGP,iBAAA,CAAkB,KAAsB,EAAf,aAAa;AAAA,cAIzC,cAAA;EAAA;;;;;;;;;;;cCoCA,YAAA,EAAc,GAAG,CAAC,QAAA;AAAA,cAClB,cAAA,EAAgB,GAAG,CAAC,UAAA;AAAA,cACpB,eAAA,EAAiB,GAAG,CAAC,WAAA;AAAA,cACrB,cAAA,EAAgB,GAAG,CAAC,UAAA;AAAA,cACpB,cAAA,EAAgB,GAAG,CAAC,UAAA;AAAA,cACpB,oBAAA,EAAsB,GAAG,CAAC,gBAAA;;;ADpDvC;UCuEiB,UAAA;;EAEf,KAAA;EDzEiD;EC2EjD,WAAA;EDzEmC;EC2EnC,OAAA,IAAW,KAAA,EAAO,KAAA;EDzEG;EC2ErB,KAAA;ED3EA;EC6EA,MAAA,GAAS,MAAA,CAAO,WAAA;ED7EK;EC+ErB,KAAA,GAAQ,MAAA,CAAO,UAAA;ED5ED;EC8Ed,MAAA,GAAS,MAAA,CAAO,WAAA;;EAEhB,YAAA;EDhFsD;ECkFtD,QAAA,IAAY,OAAA,EAAS,aAAA;EDrEb;ECuER,qBAAA;EDvEQ;ECyER,MAAA;;EAEA,eAAA;;EAEA,oBAAA;;EAEA,UAAA;;EAEA,WAAA;;EAEA,aAAA,GAAgB,oBAAA;AAAA;AAAA,KAGN,aAAA,GAAgB,UAAU;AAAA,KAE1B,OAAA,GAAU,SAAA,GAAY,KAAK;;;;UAKtB,aAAA;EAjEJ;EAmEX,UAAU;AAAA;;AAnE+B;AAC3C;UAwEiB,KAAA;;EAEf,KAAA,IAAS,OAAA;EA1EkC;EA4E3C,OAAA,CAAQ,aAAA,aAA0B,OAAA;EA3E2B;EA6E7D,aAAA,IAAiB,OAAA;EA7EU;EA+E3B,oBAAA,IAAwB,OAAA;EA9Eb;EAgFX,MAAA;;EAEA,KAAA;EAlFyC;EAoFzC,eAAA,IAAmB,OAAA,CAAQ,gBAAA;AAAA;AAAA,UAGZ,cAAA;EACf,QAAA,CAAS,IAAA,EAAM,OAAA;EACf,OAAA,CAAQ,aAAA,aAA0B,OAAA;EAClC,aAAA,IAAiB,OAAA;EACjB,oBAAA,IAAwB,OAAA;EACxB,OAAA,IAAW,OAAA;EACX,KAAA;AAAA;AAAA,KAGU,QAAA,GAAW,cAAc;AAAA,UAEpB,qBAAA;EA5DM;EA8DrB,OAAO;AAAA;AAAA,UAGQ,kBAAA;EACf,KAAA,IAAS,IAAI;AAAA;;;;iBA2PC,SAAA,CAAU,aAAA,EAAe,OAAA,EAAS,OAAA,GAAS,UAAA,GAAkB,KAAA;;;;iBA6c7D,MAAA,CACd,IAAA,EAAM,OAAA,EACN,OAAA,GAAS,UAAA,GAAa,kBAAA,GACrB,cAAA;;;;iBAgCa,cAAA,CAAe,IAAA,EAAM,OAAA,EAAS,OAAA,GAAS,qBAA0B"}
@@ -1198,11 +1198,7 @@ function createApp(rootComponent, options = {}) {
1198
1198
  }
1199
1199
  }
1200
1200
  async function getTerminalInfo() {
1201
- const info = (await loadNative()).getTerminalInfo();
1202
- return {
1203
- width: info.width,
1204
- height: info.height
1205
- };
1201
+ return (await loadNative()).getTerminalInfo();
1206
1202
  }
1207
1203
  function dispatchEvent(event) {
1208
1204
  if (event.eventType === "resize") {
@@ -1370,220 +1366,6 @@ function renderToString(root, options = {}) {
1370
1366
  return output;
1371
1367
  }
1372
1368
  //#endregion
1373
- //#region src/composables/useIsScreenReaderEnabled.ts
1374
- /**
1375
- * useIsScreenReaderEnabled - screen reader mode flag.
1376
- */
1377
- function useIsScreenReaderEnabled() {
1378
- return inject(SCREEN_READER_KEY, null)?.value ?? isScreenReaderEnabledByDefault();
1379
- }
1380
- //#endregion
1381
- //#region src/composables/usePaste.ts
1382
- /**
1383
- * usePaste - bracketed paste handling.
1384
- */
1385
- let activePasteHandlerCount = 0;
1386
- function hasActivePasteHandlers() {
1387
- return activePasteHandlerCount > 0;
1388
- }
1389
- function toRef$1(value) {
1390
- return isRef(value) ? value : ref(value);
1391
- }
1392
- function usePaste(handler, options = {}) {
1393
- const isActive = toRef$1(options.isActive ?? true);
1394
- const streams = useStreamsContext();
1395
- let rawModeEnabled = false;
1396
- let bracketedPasteEnabled = false;
1397
- let pasteHandlerRegistered = false;
1398
- const syncRawMode = (isEnabled) => {
1399
- if (rawModeEnabled === isEnabled) return;
1400
- streams.setRawMode(isEnabled);
1401
- rawModeEnabled = isEnabled;
1402
- };
1403
- const syncBracketedPasteMode = (isEnabled) => {
1404
- if (bracketedPasteEnabled === isEnabled) return;
1405
- streams.setBracketedPasteMode(isEnabled);
1406
- bracketedPasteEnabled = isEnabled;
1407
- };
1408
- const syncPasteRegistration = (isEnabled) => {
1409
- if (pasteHandlerRegistered === isEnabled) return;
1410
- activePasteHandlerCount += isEnabled ? 1 : -1;
1411
- pasteHandlerRegistered = isEnabled;
1412
- };
1413
- const syncActiveState = (isEnabled) => {
1414
- syncRawMode(isEnabled);
1415
- syncBracketedPasteMode(isEnabled);
1416
- syncPasteRegistration(isEnabled);
1417
- };
1418
- watch(lastPasteEvent, (event) => {
1419
- if (!event || !isActive.value) return;
1420
- handler(event.text);
1421
- });
1422
- watch(isActive, syncActiveState, { immediate: true });
1423
- onUnmounted(() => syncActiveState(false));
1424
- return {
1425
- isActive,
1426
- enable: () => {
1427
- isActive.value = true;
1428
- },
1429
- disable: () => {
1430
- isActive.value = false;
1431
- }
1432
- };
1433
- }
1434
- //#endregion
1435
- //#region src/composables/useInput.ts
1436
- /**
1437
- * useInput - Input handling composable
1438
- */
1439
- function toRef(value) {
1440
- return isRef(value) ? value : ref(value);
1441
- }
1442
- function keyName(event) {
1443
- return event.char ?? event.key ?? "";
1444
- }
1445
- function toInkKey(event) {
1446
- const key = event.key;
1447
- return {
1448
- upArrow: key === "up",
1449
- downArrow: key === "down",
1450
- leftArrow: key === "left",
1451
- rightArrow: key === "right",
1452
- pageDown: key === "pagedown" || key === "pageDown",
1453
- pageUp: key === "pageup" || key === "pageUp",
1454
- home: key === "home",
1455
- end: key === "end",
1456
- return: key === "enter" || key === "return",
1457
- escape: key === "escape" || key === "esc",
1458
- ctrl: event.ctrl,
1459
- shift: event.shift,
1460
- tab: key === "tab" || key === "backtab",
1461
- backspace: key === "backspace",
1462
- delete: key === "delete",
1463
- meta: event.meta,
1464
- super: event.super,
1465
- hyper: event.hyper,
1466
- capsLock: event.capsLock,
1467
- numLock: event.numLock,
1468
- eventType: event.eventType
1469
- };
1470
- }
1471
- function emptyKey() {
1472
- return {
1473
- upArrow: false,
1474
- downArrow: false,
1475
- leftArrow: false,
1476
- rightArrow: false,
1477
- pageDown: false,
1478
- pageUp: false,
1479
- home: false,
1480
- end: false,
1481
- return: false,
1482
- escape: false,
1483
- ctrl: false,
1484
- shift: false,
1485
- tab: false,
1486
- backspace: false,
1487
- delete: false,
1488
- meta: false,
1489
- super: false,
1490
- hyper: false,
1491
- capsLock: false,
1492
- numLock: false
1493
- };
1494
- }
1495
- function inputValue(event, key) {
1496
- if (event.char) return event.char;
1497
- if (key.return) return "\r";
1498
- return "";
1499
- }
1500
- function handleStructuredOptions(event, options, lastKey) {
1501
- const modifiers = {
1502
- ctrl: event.ctrl,
1503
- alt: event.alt,
1504
- shift: event.shift,
1505
- meta: event.meta
1506
- };
1507
- const pressedKey = keyName(event);
1508
- const inkKey = toInkKey(event);
1509
- if (event.char) {
1510
- lastKey.value = event.char;
1511
- options.onChar?.(event.char);
1512
- options.onKey?.(event.char, modifiers);
1513
- return;
1514
- }
1515
- if (pressedKey) {
1516
- lastKey.value = pressedKey;
1517
- options.onKey?.(pressedKey, modifiers);
1518
- }
1519
- if (inkKey.return) options.onSubmit?.();
1520
- if (inkKey.escape) options.onEscape?.();
1521
- if (inkKey.upArrow) options.onArrow?.("up");
1522
- if (inkKey.downArrow) options.onArrow?.("down");
1523
- if (inkKey.leftArrow) options.onArrow?.("left");
1524
- if (inkKey.rightArrow) options.onArrow?.("right");
1525
- }
1526
- function useInput(handlerOrOptions = {}, handlerOptions = {}) {
1527
- const options = typeof handlerOrOptions === "function" ? {
1528
- handler: handlerOrOptions,
1529
- isActive: handlerOptions.isActive
1530
- } : handlerOrOptions;
1531
- const isActive = toRef(options.isActive ?? options.active ?? true);
1532
- const lastKey = ref(null);
1533
- const streams = useStreamsContext();
1534
- let rawModeEnabled = false;
1535
- const syncRawMode = (isEnabled) => {
1536
- if (rawModeEnabled === isEnabled) return;
1537
- streams.setRawMode(isEnabled);
1538
- rawModeEnabled = isEnabled;
1539
- };
1540
- watch(lastKeyEvent, (event) => {
1541
- if (!event || !isActive.value) return;
1542
- const inkKey = toInkKey(event);
1543
- const input = inputValue(event, inkKey);
1544
- const pressedKey = keyName(event);
1545
- if (input === "c" && inkKey.ctrl && streams.internal_exitOnCtrlC) return;
1546
- lastKey.value = pressedKey || null;
1547
- options.handler?.(input, inkKey);
1548
- handleStructuredOptions(event, options, lastKey);
1549
- });
1550
- watch(lastPasteEvent, (event) => {
1551
- if (!event || !isActive.value || hasActivePasteHandlers()) return;
1552
- lastKey.value = event.text;
1553
- options.handler?.(event.text, emptyKey());
1554
- options.onChar?.(event.text);
1555
- });
1556
- watch(lastCompositionEvent, (event) => {
1557
- if (!event || !isActive.value) return;
1558
- if (event.type === "compositionstart") options.onCompositionStart?.();
1559
- else if (event.type === "compositionupdate") options.onCompositionUpdate?.(event.text, event.cursor);
1560
- else options.onCompositionEnd?.(event.text);
1561
- });
1562
- watch(isActive, syncRawMode, { immediate: true });
1563
- onUnmounted(() => syncRawMode(false));
1564
- const enable = () => {
1565
- isActive.value = true;
1566
- };
1567
- const disable = () => {
1568
- isActive.value = false;
1569
- };
1570
- return {
1571
- isActive,
1572
- lastKey,
1573
- enable,
1574
- disable
1575
- };
1576
- }
1577
- /**
1578
- * Shorthand for handling specific key combinations
1579
- */
1580
- function useKeyPress(key, handler, options = {}) {
1581
- const { ctrl = false, alt = false, shift = false, meta = false } = options;
1582
- useInput({ onKey: (pressedKey, modifiers) => {
1583
- if (pressedKey.toLowerCase() === key.toLowerCase() && modifiers.ctrl === ctrl && modifiers.alt === alt && modifiers.shift === shift && modifiers.meta === meta) handler();
1584
- } });
1585
- }
1586
- //#endregion
1587
- export { useFocusManager as C, useFocus as S, updateLastRenderLayouts as _, createApp as a, useStdin as b, lastKeyEvent as c, lastResizeEvent as d, render as f, measureElement as g, getLastRenderLayout as h, useIsScreenReaderEnabled as i, lastMouseEvent as l, createRenderer$1 as m, useKeyPress as n, lastCompositionEvent as o, renderToString as p, usePaste as r, lastFocusEvent as s, useInput as t, lastPasteEvent as u, useCursor as v, useApp as w, useStdout as x, useStderr as y };
1369
+ export { SCREEN_READER_KEY as A, FOCUS_KEY as C, APP_KEY as D, useFocusManager as E, createAppContext as O, useStreamsContext as S, useFocus as T, STREAMS_KEY as _, lastMouseEvent as a, useStdin as b, render as c, getLastRenderLayout as d, measureElement as f, useCursor as g, createCursorContext as h, lastKeyEvent as i, isScreenReaderEnabledByDefault as j, useApp as k, renderToString as l, CURSOR_KEY as m, lastCompositionEvent as n, lastPasteEvent as o, updateLastRenderLayouts as p, lastFocusEvent as r, lastResizeEvent as s, createApp as t, createRenderer$1 as u, createStreamsContext as v, createFocusManager as w, useStdout as x, useStderr as y };
1588
1370
 
1589
- //# sourceMappingURL=useInput-BYoxI3PX.mjs.map
1371
+ //# sourceMappingURL=app-D_Ke7C8w.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-D_Ke7C8w.mjs","names":["stringValue","nodeText","loadNative","createRenderer","createVueRenderer","createRenderer"],"sources":["../src/renderPayload.ts","../src/accessibility.ts","../src/composables/useApp.ts","../src/composables/useFocus.ts","../src/composables/useStreams.ts","../src/composables/useCursor.ts","../src/layoutMetrics.ts","../src/nativeInput.ts","../src/renderer.ts","../src/app.ts"],"sourcesContent":["import type {\n FrescoAlignContent,\n FrescoAlignItems,\n FrescoAlignSelf,\n FrescoAppearance,\n FrescoBorderStyle,\n FrescoDisplay,\n FrescoFlexDirection,\n FrescoFlexWrap,\n FrescoInputRenderNode,\n FrescoJustifyContent,\n FrescoOverflow,\n FrescoPosition,\n FrescoRenderNode,\n FrescoRenderStyle,\n FrescoRootRenderNode,\n FrescoTextRenderNode,\n FrescoTextWrapMode,\n} from \"./protocol.js\";\nimport type { FrescoNode } from \"./renderer.js\";\n\nconst displays = [\"flex\", \"none\"] as const satisfies readonly FrescoDisplay[];\nconst positions = [\"absolute\", \"relative\", \"static\"] as const satisfies readonly FrescoPosition[];\nconst overflows = [\"visible\", \"hidden\", \"scroll\"] as const satisfies readonly FrescoOverflow[];\nconst flexDirections = [\n \"row\",\n \"column\",\n \"row-reverse\",\n \"column-reverse\",\n] as const satisfies readonly FrescoFlexDirection[];\nconst flexWraps = [\"nowrap\", \"wrap\", \"wrap-reverse\"] as const satisfies readonly FrescoFlexWrap[];\nconst justifyContents = [\n \"flex-start\",\n \"flex-end\",\n \"start\",\n \"end\",\n \"center\",\n \"space-between\",\n \"space-around\",\n \"space-evenly\",\n] as const satisfies readonly FrescoJustifyContent[];\nconst alignItems = [\n \"flex-start\",\n \"flex-end\",\n \"start\",\n \"end\",\n \"center\",\n \"stretch\",\n \"baseline\",\n] as const satisfies readonly FrescoAlignItems[];\nconst alignSelf = [\"auto\", ...alignItems] as const satisfies readonly FrescoAlignSelf[];\nconst alignContent = [\n \"flex-start\",\n \"flex-end\",\n \"start\",\n \"end\",\n \"center\",\n \"stretch\",\n \"space-between\",\n \"space-around\",\n \"space-evenly\",\n] as const satisfies readonly FrescoAlignContent[];\nconst borderStyles = [\n \"none\",\n \"single\",\n \"double\",\n \"rounded\",\n \"heavy\",\n \"dashed\",\n] as const satisfies readonly FrescoBorderStyle[];\nconst wrapModes = [\n \"none\",\n \"wrap\",\n \"hard\",\n \"truncate\",\n \"truncate-start\",\n \"truncate-middle\",\n \"truncate-end\",\n] as const satisfies readonly FrescoTextWrapMode[];\n\nfunction recordValue(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null ? (value as Record<string, unknown>) : {};\n}\n\nfunction firstValue(record: Record<string, unknown>, ...keys: string[]): unknown {\n for (const key of keys) {\n if (record[key] !== undefined) return record[key];\n }\n return undefined;\n}\n\nfunction enumValue<Value extends string>(\n value: unknown,\n values: readonly Value[],\n): Value | undefined {\n return typeof value === \"string\" && values.includes(value as Value)\n ? (value as Value)\n : undefined;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" || typeof value === \"number\" ? String(value) : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction booleanValue(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction enabledValue(value: unknown): true | undefined {\n return value === true ? true : undefined;\n}\n\nfunction nonEmptyStringValue(value: unknown): string | undefined {\n const string = stringValue(value);\n return string ? string : undefined;\n}\n\nexport function normalizeFrescoStyle(value: unknown): FrescoRenderStyle | undefined {\n const source = recordValue(value);\n const style: FrescoRenderStyle = {};\n\n style.display = enumValue(source.display, displays);\n style.position = enumValue(source.position, positions);\n style.top = stringValue(source.top);\n style.right = stringValue(source.right);\n style.bottom = stringValue(source.bottom);\n style.left = stringValue(source.left);\n style.overflow = enumValue(source.overflow, overflows);\n style.overflowX = enumValue(firstValue(source, \"overflowX\", \"overflow_x\"), overflows);\n style.overflowY = enumValue(firstValue(source, \"overflowY\", \"overflow_y\"), overflows);\n style.flexDirection = enumValue(\n firstValue(source, \"flexDirection\", \"flex_direction\"),\n flexDirections,\n );\n style.flexWrap = enumValue(firstValue(source, \"flexWrap\", \"flex_wrap\"), flexWraps);\n style.justifyContent = enumValue(\n firstValue(source, \"justifyContent\", \"justify_content\"),\n justifyContents,\n );\n style.alignItems = enumValue(firstValue(source, \"alignItems\", \"align_items\"), alignItems);\n style.alignSelf = enumValue(firstValue(source, \"alignSelf\", \"align_self\"), alignSelf);\n style.alignContent = enumValue(firstValue(source, \"alignContent\", \"align_content\"), alignContent);\n style.flexGrow = numberValue(firstValue(source, \"flexGrow\", \"flex_grow\"));\n style.flexShrink = numberValue(firstValue(source, \"flexShrink\", \"flex_shrink\"));\n style.flexBasis = stringValue(firstValue(source, \"flexBasis\", \"flex_basis\"));\n style.width = stringValue(source.width);\n style.height = stringValue(source.height);\n style.minWidth = stringValue(firstValue(source, \"minWidth\", \"min_width\"));\n style.minHeight = stringValue(firstValue(source, \"minHeight\", \"min_height\"));\n style.maxWidth = stringValue(firstValue(source, \"maxWidth\", \"max_width\"));\n style.maxHeight = stringValue(firstValue(source, \"maxHeight\", \"max_height\"));\n style.aspectRatio = numberValue(firstValue(source, \"aspectRatio\", \"aspect_ratio\"));\n style.padding = numberValue(source.padding);\n style.paddingTop = numberValue(firstValue(source, \"paddingTop\", \"padding_top\"));\n style.paddingRight = numberValue(firstValue(source, \"paddingRight\", \"padding_right\"));\n style.paddingBottom = numberValue(firstValue(source, \"paddingBottom\", \"padding_bottom\"));\n style.paddingLeft = numberValue(firstValue(source, \"paddingLeft\", \"padding_left\"));\n style.margin = numberValue(source.margin);\n style.marginTop = numberValue(firstValue(source, \"marginTop\", \"margin_top\"));\n style.marginRight = numberValue(firstValue(source, \"marginRight\", \"margin_right\"));\n style.marginBottom = numberValue(firstValue(source, \"marginBottom\", \"margin_bottom\"));\n style.marginLeft = numberValue(firstValue(source, \"marginLeft\", \"margin_left\"));\n style.gap = numberValue(source.gap);\n style.columnGap = numberValue(firstValue(source, \"columnGap\", \"column_gap\"));\n style.rowGap = numberValue(firstValue(source, \"rowGap\", \"row_gap\"));\n\n for (const key of Object.keys(style) as (keyof FrescoRenderStyle)[]) {\n if (style[key] === undefined) delete style[key];\n }\n return Object.keys(style).length > 0 ? style : undefined;\n}\n\nfunction normalizeAppearance(props: Record<string, unknown>): FrescoAppearance | undefined {\n const appearance: FrescoAppearance = {};\n appearance.fg = nonEmptyStringValue(firstValue(props, \"fg\", \"color\"));\n appearance.bg = nonEmptyStringValue(\n firstValue(props, \"bg\", \"backgroundColor\", \"background_color\"),\n );\n appearance.bold = enabledValue(props.bold);\n appearance.dim = enabledValue(firstValue(props, \"dim\", \"dimColor\", \"dim_color\"));\n appearance.italic = enabledValue(props.italic);\n appearance.underline = enabledValue(props.underline);\n appearance.inverse = enabledValue(props.inverse);\n appearance.blink = enabledValue(props.blink);\n appearance.hidden = enabledValue(props.hidden);\n appearance.strikethrough = enabledValue(props.strikethrough);\n\n for (const key of Object.keys(appearance) as (keyof FrescoAppearance)[]) {\n if (appearance[key] === undefined) delete appearance[key];\n }\n return Object.keys(appearance).length > 0 ? appearance : undefined;\n}\n\nfunction commonFields(node: FrescoNode): Omit<FrescoRootRenderNode, \"nodeType\"> {\n const common: Omit<FrescoRootRenderNode, \"nodeType\"> = { id: node.id };\n const style = normalizeFrescoStyle(node.props.style);\n const appearance = normalizeAppearance(node.props);\n const border = enumValue(node.props.border, borderStyles);\n if (style) common.style = style;\n if (appearance) common.appearance = appearance;\n if (border) common.border = border;\n if (node.children.length > 0) common.children = node.children.map((child) => child.id);\n return common;\n}\n\nfunction wrapMode(value: unknown): FrescoTextWrapMode | undefined {\n if (value === false) return \"none\";\n if (value === true) return \"wrap\";\n if (value === \"end\") return \"truncate-end\";\n if (value === \"middle\") return \"truncate-middle\";\n return enumValue(value, wrapModes);\n}\n\nfunction wrappingEnabled(value: unknown, mode: FrescoTextWrapMode | undefined): boolean {\n if (value === undefined || value === false) return false;\n return !(mode?.startsWith(\"truncate\") ?? false);\n}\n\nexport function frescoNodeToRenderNode(node: FrescoNode): FrescoRenderNode {\n const common = commonFields(node);\n\n if (node.type === \"root\" || node.type === \"box\") {\n return { ...common, nodeType: node.type };\n }\n\n if (node.type === \"text\") {\n const renderNode: FrescoTextRenderNode = { ...common, nodeType: \"text\" };\n const text = node.text ?? stringValue(firstValue(node.props, \"text\", \"content\"));\n const mode = wrapMode(node.props.wrap);\n if (text !== undefined) renderNode.text = text;\n if (node.props.wrap !== undefined) {\n renderNode.wrap = wrappingEnabled(node.props.wrap, mode);\n if (mode) renderNode.wrapMode = mode;\n }\n return renderNode;\n }\n\n const renderNode: FrescoInputRenderNode = { ...common, nodeType: \"input\" };\n const value = stringValue(node.props.value);\n const placeholder = stringValue(node.props.placeholder);\n const focused = booleanValue(firstValue(node.props, \"focused\", \"focus\"));\n const cursor = numberValue(node.props.cursor);\n const mask = booleanValue(node.props.mask);\n const maskChar = stringValue(firstValue(node.props, \"maskChar\", \"mask_char\", \"mask-char\"));\n if (value !== undefined) renderNode.value = value;\n if (placeholder !== undefined) renderNode.placeholder = placeholder;\n if (focused !== undefined) renderNode.focused = focused;\n if (cursor !== undefined) renderNode.cursor = cursor;\n if (mask !== undefined) renderNode.mask = mask;\n if (maskChar !== undefined) renderNode.maskChar = maskChar;\n return renderNode;\n}\n","/**\n * Ink-compatible screen reader helpers.\n */\n\nimport type { InjectionKey, Ref } from \"@vue/runtime-core\";\nimport type { FrescoNode, NativeRenderNode } from \"./renderer.js\";\nimport { normalizeFrescoStyle } from \"./renderPayload.js\";\n\nexport const SCREEN_READER_KEY: InjectionKey<Readonly<Ref<boolean>>> =\n Symbol(\"fresco-screen-reader\");\n\nexport type AriaRole =\n | \"button\"\n | \"checkbox\"\n | \"combobox\"\n | \"list\"\n | \"listbox\"\n | \"listitem\"\n | \"menu\"\n | \"menuitem\"\n | \"option\"\n | \"progressbar\"\n | \"radio\"\n | \"radiogroup\"\n | \"tab\"\n | \"tablist\"\n | \"table\"\n | \"textbox\"\n | \"timer\"\n | \"toolbar\";\n\nexport type AriaState = Partial<\n Record<\n | \"busy\"\n | \"checked\"\n | \"disabled\"\n | \"expanded\"\n | \"multiline\"\n | \"multiselectable\"\n | \"readonly\"\n | \"required\"\n | \"selected\",\n boolean\n >\n>;\n\nexport function isScreenReaderEnabledByDefault(): boolean {\n return process.env.INK_SCREEN_READER === \"true\" || process.env.FRESCO_SCREEN_READER === \"true\";\n}\n\nfunction stringValue(value: unknown): string | undefined {\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n return undefined;\n}\n\nfunction nodeText(node: FrescoNode): string {\n const ariaLabel = stringValue(node.props[\"aria-label\"]);\n if (ariaLabel !== undefined) return ariaLabel;\n if (node.text !== undefined) return node.text;\n\n const propText = node.props.text ?? node.props.content;\n if (typeof propText === \"string\" || typeof propText === \"number\") return String(propText);\n\n if (node.type === \"input\") {\n const value = node.props.value;\n const placeholder = node.props.placeholder;\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n if (typeof placeholder === \"string\" || typeof placeholder === \"number\")\n return String(placeholder);\n }\n\n return \"\";\n}\n\nfunction flexDirection(node: FrescoNode): string {\n const style = (node.props.style ?? {}) as Record<string, unknown>;\n return stringValue(style.flexDirection ?? style.flex_direction) ?? \"column\";\n}\n\nfunction ariaRole(node: FrescoNode): AriaRole | undefined {\n return stringValue(node.props[\"aria-role\"]) as AriaRole | undefined;\n}\n\nfunction ariaState(node: FrescoNode): AriaState | undefined {\n const state = node.props[\"aria-state\"];\n if (!state || typeof state !== \"object\") return undefined;\n return state as AriaState;\n}\n\nfunction isAriaHidden(node: FrescoNode): boolean {\n return node.props[\"aria-hidden\"] === true;\n}\n\nexport function treeToScreenReaderString(\n node: FrescoNode,\n options: { parentRole?: AriaRole } = {},\n): string {\n if (isAriaHidden(node)) return \"\";\n\n let output = \"\";\n const text = nodeText(node);\n\n if (node.type === \"text\" || node.type === \"input\") {\n output = `${text}${node.children.map((child) => treeToScreenReaderString(child, options)).join(\"\")}`;\n } else if (text) {\n output = text;\n } else {\n const direction = flexDirection(node);\n const separator = direction === \"row\" || direction === \"row-reverse\" ? \" \" : \"\\n\";\n const children =\n direction === \"row-reverse\" || direction === \"column-reverse\"\n ? [...node.children].reverse()\n : node.children;\n\n const role = ariaRole(node);\n output = children\n .map((child) => treeToScreenReaderString(child, { parentRole: role }))\n .filter(Boolean)\n .join(separator);\n }\n\n const state = ariaState(node);\n if (state) {\n const stateDescription = Object.keys(state)\n .filter((key) => state[key as keyof AriaState])\n .join(\", \");\n\n if (stateDescription) {\n output = `(${stateDescription}) ${output}`;\n }\n }\n\n const role = ariaRole(node);\n if (role && role !== options.parentRole) {\n output = `${role}: ${output}`;\n }\n\n return output;\n}\n\nexport function treeToScreenReaderRenderNodes(root: FrescoNode): NativeRenderNode[] {\n const output = treeToScreenReaderString(root);\n const rootStyle = normalizeFrescoStyle(root.props.style) ?? {};\n const nodes: NativeRenderNode[] = [\n {\n id: root.id,\n nodeType: \"root\",\n style: {\n ...rootStyle,\n flexDirection: \"column\",\n },\n },\n ];\n\n if (!output) return nodes;\n\n const textId = root.id - 1;\n nodes[0].children = [textId];\n nodes.push({\n id: textId,\n nodeType: \"text\",\n text: output,\n wrap: true,\n wrapMode: \"wrap\",\n });\n\n return nodes;\n}\n","/**\n * useApp - App context composable\n */\n\nimport { ref, provide, inject, type InjectionKey, type Ref } from \"@vue/runtime-core\";\n\nexport const APP_KEY: InjectionKey<UseAppReturn> = Symbol(\"fresco-app\");\n\nexport interface UseAppReturn {\n /** Terminal width */\n width: Ref<number>;\n /** Terminal height */\n height: Ref<number>;\n /** Whether app is running */\n isRunning: Ref<boolean>;\n /** Exit the app */\n exit: (errorOrResult?: unknown) => void;\n /** Force re-render */\n render: () => void;\n /** Clear the screen */\n clear: () => void;\n /** Wait until pending render output has flushed */\n waitUntilRenderFlush: () => Promise<void>;\n}\n\nexport interface AppContextControls {\n exit?: (errorOrResult?: unknown) => void;\n render?: () => void;\n clear?: () => void;\n waitUntilRenderFlush?: () => Promise<void>;\n stdout?: NodeJS.WriteStream;\n width?: number;\n height?: number;\n}\n\n/**\n * Create app context (use at app root)\n */\nexport function createAppContext(controls: AppContextControls = {}): UseAppReturn {\n const width = ref(controls.width ?? 80);\n const height = ref(controls.height ?? 24);\n const isRunning = ref(true);\n\n const exit = (errorOrResult?: unknown) => {\n isRunning.value = false;\n controls.exit?.(errorOrResult);\n };\n\n const render = () => {\n controls.render?.();\n };\n\n const clear = () => {\n controls.clear?.();\n };\n\n const waitUntilRenderFlush = () => {\n return controls.waitUntilRenderFlush?.() ?? Promise.resolve();\n };\n\n const stdout = controls.stdout ?? (typeof process !== \"undefined\" ? process.stdout : undefined);\n\n // Try to get terminal size\n if (stdout) {\n width.value = controls.width ?? stdout.columns ?? 80;\n height.value = controls.height ?? stdout.rows ?? 24;\n\n stdout.on?.(\"resize\", () => {\n width.value = stdout.columns ?? 80;\n height.value = stdout.rows ?? 24;\n });\n }\n\n return {\n width,\n height,\n isRunning,\n exit,\n render,\n clear,\n waitUntilRenderFlush,\n };\n}\n\n/**\n * Provide app context to descendants\n */\nexport function provideApp(context: UseAppReturn) {\n provide(APP_KEY, context);\n}\n\n/**\n * Use app context\n */\nexport function useApp(): UseAppReturn {\n const context = inject(APP_KEY);\n\n if (!context) {\n // Return defaults if not in app context\n return {\n width: ref(80),\n height: ref(24),\n isRunning: ref(false),\n exit: () => {},\n render: () => {},\n clear: () => {},\n waitUntilRenderFlush: () => Promise.resolve(),\n };\n }\n\n return context;\n}\n\n/**\n * Use terminal dimensions\n */\nexport function useTerminalSize() {\n const { width, height } = useApp();\n return { width, height };\n}\n\n/**\n * Exit handler\n */\nexport function useExit() {\n const { exit } = useApp();\n return exit;\n}\n","/**\n * useFocus - Focus management composable\n */\n\nimport {\n computed,\n inject,\n isRef,\n onUnmounted,\n provide,\n ref,\n watch,\n type InjectionKey,\n type Ref,\n} from \"@vue/runtime-core\";\n\nexport const FOCUS_KEY: InjectionKey<FocusManager> = Symbol(\"fresco-focus\");\n\nexport interface UseFocusOptions {\n /** Enable or disable this focus target while keeping its logical identity */\n isActive?: boolean | Ref<boolean>;\n /** Auto-focus this component when nothing else is focused */\n autoFocus?: boolean;\n /** Focus ID for this element */\n id?: string;\n}\n\nexport interface FocusManager {\n /** Currently focused element ID */\n focusedId: Ref<string | null>;\n /** Ink-compatible currently focused ID alias */\n activeId: Readonly<Ref<string | undefined>>;\n /** All active focusable element IDs */\n focusableIds: Readonly<Ref<string[]>>;\n /** Whether focus management is enabled */\n isEnabled: Ref<boolean>;\n /** Enable focus management */\n enableFocus: () => void;\n /** Disable focus management */\n disableFocus: () => void;\n /** Focus a specific element */\n focus: (id: string) => void;\n /** Focus next element */\n focusNext: () => void;\n /** Focus previous element */\n focusPrevious: () => void;\n /** Register a focusable element */\n register: (id: string, options?: { isActive?: boolean; autoFocus?: boolean }) => void;\n /** Unregister a focusable element */\n unregister: (id: string) => void;\n /** Activate or deactivate a focusable element while keeping its order */\n setActive: (id: string, isActive: boolean) => void;\n}\n\ninterface Focusable {\n id: string;\n isActive: boolean;\n}\n\nfunction activeFocusables(focusables: Focusable[]): Focusable[] {\n return focusables.filter((focusable) => focusable.isActive);\n}\n\n/**\n * Create a focus manager (use at app root)\n */\nexport function createFocusManager(): FocusManager {\n const focusedId = ref<string | null>(null);\n const activeId = computed(() => focusedId.value ?? undefined);\n const focusables = ref<Focusable[]>([]);\n const focusableIds = computed(() => activeFocusables(focusables.value).map(({ id }) => id));\n const isEnabled = ref(true);\n\n const focus = (id: string) => {\n const target = focusables.value.find((focusable) => focusable.id === id);\n if (isEnabled.value && target?.isActive) {\n focusedId.value = id;\n }\n };\n\n const focusNext = () => {\n const active = activeFocusables(focusables.value);\n if (!isEnabled.value || active.length === 0) return;\n\n const currentIndex = focusedId.value\n ? focusables.value.findIndex((focusable) => focusable.id === focusedId.value)\n : -1;\n const next = focusables.value.slice(currentIndex + 1).find((focusable) => focusable.isActive);\n focusedId.value = next?.id ?? active[0]?.id ?? null;\n };\n\n const focusPrevious = () => {\n const active = activeFocusables(focusables.value);\n if (!isEnabled.value || active.length === 0) return;\n\n const currentIndex = focusedId.value\n ? focusables.value.findIndex((focusable) => focusable.id === focusedId.value)\n : focusables.value.length;\n const previous = focusables.value\n .slice(0, currentIndex < 0 ? 0 : currentIndex)\n .findLast((focusable) => focusable.isActive);\n focusedId.value = previous?.id ?? active.at(-1)?.id ?? null;\n };\n\n const register: FocusManager[\"register\"] = (id, options = {}) => {\n const existing = focusables.value.find((focusable) => focusable.id === id);\n if (existing) {\n existing.isActive = options.isActive ?? existing.isActive;\n } else {\n focusables.value.push({\n id,\n isActive: options.isActive ?? true,\n });\n }\n\n if (options.autoFocus && !focusedId.value && options.isActive !== false) {\n focus(id);\n }\n };\n\n const unregister = (id: string) => {\n const index = focusables.value.findIndex((focusable) => focusable.id === id);\n if (index !== -1) {\n focusables.value.splice(index, 1);\n if (focusedId.value === id) {\n focusedId.value = null;\n }\n }\n };\n\n const setActive = (id: string, isActive: boolean) => {\n const focusable = focusables.value.find((item) => item.id === id);\n if (!focusable) return;\n\n focusable.isActive = isActive;\n if (!isActive && focusedId.value === id) {\n focusedId.value = null;\n }\n };\n\n const enableFocus = () => {\n isEnabled.value = true;\n };\n\n const disableFocus = () => {\n isEnabled.value = false;\n focusedId.value = null;\n };\n\n return {\n focusedId,\n activeId,\n focusableIds,\n isEnabled,\n enableFocus,\n disableFocus,\n focus,\n focusNext,\n focusPrevious,\n register,\n unregister,\n setActive,\n };\n}\n\n/**\n * Provide focus manager to descendants\n */\nexport function provideFocusManager(manager: FocusManager) {\n provide(FOCUS_KEY, manager);\n}\n\n/**\n * Use focus management\n */\nexport function useFocus(options: UseFocusOptions = {}) {\n const {\n autoFocus = false,\n id = `focus-${Math.random().toString(36).slice(2)}`,\n isActive: isActiveOption = true,\n } = options;\n\n const manager = inject(FOCUS_KEY, null);\n const localFocused = ref(autoFocus);\n const active = isRef(isActiveOption) ? isActiveOption : ref(isActiveOption);\n\n const isFocused = computed(() => {\n if (manager) {\n return manager.isEnabled.value && manager.focusedId.value === id;\n }\n return active.value && localFocused.value;\n });\n\n const focus = (targetId = id) => {\n if (manager) {\n manager.focus(targetId);\n } else if (targetId === id) {\n localFocused.value = true;\n }\n };\n\n const blur = () => {\n if (manager) {\n if (manager.focusedId.value === id) {\n manager.focusedId.value = null;\n }\n } else {\n localFocused.value = false;\n }\n };\n\n if (manager) {\n manager.register(id, { isActive: active.value, autoFocus });\n\n watch(\n active,\n (enabled) => {\n manager.setActive(id, enabled);\n if (enabled && autoFocus && !manager.focusedId.value) manager.focus(id);\n },\n { immediate: false },\n );\n\n onUnmounted(() => {\n manager.unregister(id);\n });\n }\n\n return {\n id,\n isFocused,\n focus,\n blur,\n };\n}\n\n/**\n * Use global focus manager controls.\n */\nexport function useFocusManager() {\n const manager = inject(FOCUS_KEY, null);\n\n if (!manager) {\n const empty = ref<string[]>([]);\n const activeId = ref<string | undefined>(undefined);\n return {\n enableFocus: () => {},\n disableFocus: () => {},\n focusNext: () => {},\n focusPrevious: () => {},\n focus: (_id: string) => {},\n activeId,\n focusableIds: empty,\n };\n }\n\n return {\n enableFocus: manager.enableFocus,\n disableFocus: manager.disableFocus,\n focusNext: manager.focusNext,\n focusPrevious: manager.focusPrevious,\n focus: manager.focus,\n activeId: manager.activeId,\n focusableIds: manager.focusableIds,\n };\n}\n","/**\n * Stream composables matching Ink's stdin/stdout/stderr helpers.\n */\n\nimport { inject, type InjectionKey } from \"@vue/runtime-core\";\n\nconst BRACKETED_PASTE_ENABLE = \"\\x1B[?2004h\";\nconst BRACKETED_PASTE_DISABLE = \"\\x1B[?2004l\";\n\nexport const STREAMS_KEY: InjectionKey<StreamsContext> = Symbol(\"fresco-streams\");\n\nexport interface StreamsContextOptions {\n stdin?: NodeJS.ReadStream;\n stdout?: NodeJS.WriteStream;\n stderr?: NodeJS.WriteStream;\n exitOnCtrlC?: boolean;\n interactive?: boolean;\n writeToStdout?: (data: string) => void;\n writeToStderr?: (data: string) => void;\n}\n\nexport interface StreamsContext {\n stdin: NodeJS.ReadStream;\n stdout: NodeJS.WriteStream;\n stderr: NodeJS.WriteStream;\n setRawMode: (isRawMode: boolean) => void;\n isRawModeSupported: boolean;\n setBracketedPasteMode: (isEnabled: boolean) => void;\n writeToStdout: (data: string) => void;\n writeToStderr: (data: string) => void;\n internal_exitOnCtrlC: boolean;\n}\n\nexport interface UseStdinReturn {\n stdin: NodeJS.ReadStream;\n setRawMode: (isRawMode: boolean) => void;\n isRawModeSupported: boolean;\n internal_exitOnCtrlC: boolean;\n}\n\nexport interface UseStdoutReturn {\n stdout: NodeJS.WriteStream;\n write: (data: string) => void;\n}\n\nexport interface UseStderrReturn {\n stderr: NodeJS.WriteStream;\n write: (data: string) => void;\n}\n\nexport function createStreamsContext(options: StreamsContextOptions = {}): StreamsContext {\n const stdin = options.stdin ?? process.stdin;\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n const isInteractive = options.interactive ?? true;\n const writeToStdout = options.writeToStdout ?? ((data: string) => stdout.write(data));\n const writeToStderr = options.writeToStderr ?? ((data: string) => stderr.write(data));\n let rawModeDepth = 0;\n let pendingRawModeDisable = false;\n let bracketedPasteDepth = 0;\n\n return {\n stdin,\n stdout,\n stderr,\n setRawMode: (isRawMode: boolean) => {\n if (!isInteractive || typeof stdin.setRawMode !== \"function\") return;\n\n stdin.setEncoding?.(\"utf8\");\n\n if (isRawMode) {\n pendingRawModeDisable = false;\n if (rawModeDepth === 0) {\n stdin.ref?.();\n stdin.setRawMode(true);\n }\n rawModeDepth += 1;\n return;\n }\n\n if (rawModeDepth === 0) return;\n rawModeDepth -= 1;\n if (rawModeDepth > 0) return;\n\n pendingRawModeDisable = true;\n queueMicrotask(() => {\n if (!pendingRawModeDisable || rawModeDepth > 0) return;\n pendingRawModeDisable = false;\n stdin.setRawMode?.(false);\n stdin.unref?.();\n });\n },\n isRawModeSupported: isInteractive && typeof stdin.setRawMode === \"function\",\n setBracketedPasteMode: (isEnabled: boolean) => {\n if (!isInteractive) return;\n\n if (isEnabled) {\n bracketedPasteDepth += 1;\n if (bracketedPasteDepth === 1) stdout.write(BRACKETED_PASTE_ENABLE);\n return;\n }\n\n if (bracketedPasteDepth === 0) return;\n bracketedPasteDepth -= 1;\n if (bracketedPasteDepth === 0) stdout.write(BRACKETED_PASTE_DISABLE);\n },\n writeToStdout,\n writeToStderr,\n internal_exitOnCtrlC: options.exitOnCtrlC ?? true,\n };\n}\n\nexport function useStreamsContext(): StreamsContext {\n return inject(STREAMS_KEY) ?? createStreamsContext();\n}\n\nexport function useStdin(): UseStdinReturn {\n const streams = useStreamsContext();\n\n return {\n stdin: streams.stdin,\n setRawMode: streams.setRawMode,\n isRawModeSupported: streams.isRawModeSupported,\n internal_exitOnCtrlC: streams.internal_exitOnCtrlC,\n };\n}\n\nexport function useStdout(): UseStdoutReturn {\n const { stdout, writeToStdout } = useStreamsContext();\n\n return {\n stdout,\n write: writeToStdout,\n };\n}\n\nexport function useStderr(): UseStderrReturn {\n const { stderr, writeToStderr } = useStreamsContext();\n\n return {\n stderr,\n write: writeToStderr,\n };\n}\n","/**\n * useCursor - terminal cursor positioning.\n */\n\nimport { inject, onUnmounted, type InjectionKey } from \"@vue/runtime-core\";\n\nexport interface CursorPosition {\n x: number;\n y: number;\n}\n\nexport interface CursorContext {\n setCursorPosition: (position: CursorPosition | undefined) => void;\n}\n\nexport const CURSOR_KEY: InjectionKey<CursorContext> = Symbol(\"fresco-cursor\");\n\nasync function loadNative() {\n return import(\"@vizejs/fresco-native\");\n}\n\nexport function createCursorContext(\n setCursorPosition: (position: CursorPosition | undefined) => void,\n): CursorContext {\n return {\n setCursorPosition,\n };\n}\n\nfunction setNativeCursorPosition(position: CursorPosition | undefined) {\n void loadNative()\n .then((native) => {\n if (position) {\n native.setCursor(position.x, position.y);\n native.showCursor();\n } else {\n native.hideCursor();\n }\n })\n .catch(() => {\n // Cursor control is best-effort outside a mounted Fresco app.\n });\n}\n\nexport function useCursor() {\n const context = inject(CURSOR_KEY, null);\n let didSetCursor = false;\n\n const setCursorPosition = (position: CursorPosition | undefined) => {\n didSetCursor = true;\n\n if (context) {\n context.setCursorPosition(position);\n return;\n }\n\n setNativeCursorPosition(position);\n };\n\n onUnmounted(() => {\n if (didSetCursor) {\n context?.setCursorPosition(undefined);\n }\n });\n\n return {\n setCursorPosition,\n };\n}\n","/**\n * Shared post-render layout metrics.\n */\n\nimport type { LayoutResultNapi } from \"@vizejs/fresco-native\";\n\nexport interface DOMElement {\n id?: number;\n $el?: {\n id?: number;\n };\n}\n\nlet lastRenderLayouts: LayoutResultNapi[] = [];\n\nexport function updateLastRenderLayouts(layouts: LayoutResultNapi[]) {\n lastRenderLayouts = layouts;\n}\n\nexport function getLastRenderLayout(node: DOMElement | null | undefined): LayoutResultNapi | null {\n const id = node?.id ?? node?.$el?.id;\n if (id === undefined) return null;\n return lastRenderLayouts.find((layout) => layout.id === id) ?? null;\n}\n\nexport function measureElement(node: DOMElement): { width: number; height: number } {\n const layout = getLastRenderLayout(node);\n return {\n width: layout?.width ?? 0,\n height: layout?.height ?? 0,\n };\n}\n","import type { KeyEventType } from \"./protocol.js\";\n\nexport function normalizeKeyEventType(value: string | undefined): KeyEventType | undefined {\n switch (value) {\n case \"press\":\n case \"repeat\":\n case \"release\":\n return value;\n default:\n return undefined;\n }\n}\n","/**\n * Fresco Vue Custom Renderer\n */\n\nimport {\n createRenderer as createVueRenderer,\n type RendererOptions,\n type RendererNode,\n type RendererElement,\n} from \"@vue/runtime-core\";\nimport type { FrescoRenderNode, FrescoRenderNodeKind } from \"./protocol.js\";\nimport { frescoNodeToRenderNode } from \"./renderPayload.js\";\n\nexport type { FrescoRenderNodeKind } from \"./protocol.js\";\n\n/** @internal Mutable Vue host node; not part of the public render protocol. */\nexport interface FrescoNode extends RendererNode {\n id: number;\n type: FrescoRenderNodeKind;\n props: Record<string, unknown>;\n children: FrescoNode[];\n parent: FrescoNode | null;\n text?: string;\n}\n\n/** @internal Mutable Vue host element; not part of the public render protocol. */\nexport interface FrescoElement extends FrescoNode, RendererElement {}\n\nlet nextId = 0;\n\nfunction createNode(type: FrescoRenderNodeKind): FrescoNode {\n return {\n id: nextId++,\n type,\n props: {},\n children: [],\n parent: null,\n };\n}\n\n/**\n * Renderer options for Fresco\n */\nconst rendererOptions: RendererOptions<FrescoNode, FrescoElement> = {\n patchProp(el, key, _prevValue, nextValue) {\n if (nextValue == null) {\n delete el.props[key];\n } else {\n el.props[key] = nextValue;\n }\n },\n\n insert(child, parent, anchor) {\n // Vue reuses host nodes for keyed moves and re-inserts them without a\n // preceding remove, relying on DOM insertBefore move semantics. Detach the\n // child from its current position first so a reorder repositions the\n // existing node instead of duplicating it.\n if (child.parent) {\n const existing = child.parent.children.indexOf(child);\n if (existing !== -1) {\n child.parent.children.splice(existing, 1);\n }\n }\n child.parent = parent;\n if (anchor) {\n const index = parent.children.indexOf(anchor);\n if (index !== -1) {\n parent.children.splice(index, 0, child);\n return;\n }\n }\n parent.children.push(child);\n },\n\n remove(child) {\n if (child.parent) {\n const index = child.parent.children.indexOf(child);\n if (index !== -1) {\n child.parent.children.splice(index, 1);\n }\n child.parent = null;\n }\n },\n\n createElement(type) {\n const nodeType = mapElementType(type);\n return createNode(nodeType) as FrescoElement;\n },\n\n createText(text) {\n const node = createNode(\"text\");\n node.text = text;\n return node;\n },\n\n createComment() {\n // Comments are ignored in TUI\n return createNode(\"text\");\n },\n\n setText(node, text) {\n node.text = text;\n },\n\n setElementText(el, text) {\n el.text = text;\n el.children = [];\n },\n\n parentNode(node) {\n return node.parent;\n },\n\n nextSibling(node) {\n if (!node.parent) return null;\n const index = node.parent.children.indexOf(node);\n return node.parent.children[index + 1] || null;\n },\n};\n\n/**\n * Map Vue element types to Fresco node types\n */\nfunction mapElementType(type: string): FrescoRenderNodeKind {\n switch (type.toLowerCase()) {\n case \"box\":\n case \"div\":\n case \"view\":\n return \"box\";\n case \"text\":\n case \"span\":\n return \"text\";\n case \"input\":\n case \"textinput\":\n return \"input\";\n default:\n return \"box\";\n }\n}\n\n/**\n * Create the Fresco renderer\n */\nexport function createRenderer() {\n return createVueRenderer(rendererOptions);\n}\n\n/** Compatibility name for the render payload produced by this package. */\nexport type NativeRenderNode = FrescoRenderNode;\n\n/**\n * Convert Fresco tree to render nodes for native\n */\nexport function treeToRenderNodes(root: FrescoNode): NativeRenderNode[] {\n const nodes: NativeRenderNode[] = [];\n\n function visit(node: FrescoNode) {\n const renderNode = frescoNodeToRenderNode(node);\n\n nodes.push(renderNode);\n\n // Visit children\n for (const child of node.children) {\n visit(child);\n }\n }\n\n visit(root);\n return nodes;\n}\n","/**\n * Fresco App - Application instance management\n */\n\nimport { format } from \"node:util\";\nimport {\n defineComponent,\n h,\n ref,\n shallowRef,\n type App as VueApp,\n type Component,\n type Ref,\n type VNode,\n} from \"@vue/runtime-core\";\nimport type { InputEventNapi, ModifiersNapi, TerminalInfoNapi } from \"@vizejs/fresco-native\";\nimport {\n SCREEN_READER_KEY,\n isScreenReaderEnabledByDefault,\n treeToScreenReaderRenderNodes,\n} from \"./accessibility.js\";\nimport { APP_KEY, createAppContext, type UseAppReturn } from \"./composables/useApp.js\";\nimport { createFocusManager, FOCUS_KEY, type FocusManager } from \"./composables/useFocus.js\";\nimport {\n createStreamsContext,\n STREAMS_KEY,\n type StreamsContext,\n} from \"./composables/useStreams.js\";\nimport { createCursorContext, CURSOR_KEY, type CursorPosition } from \"./composables/useCursor.js\";\nimport { updateLastRenderLayouts } from \"./layoutMetrics.js\";\nimport type { KittyKeyboardOptions } from \"./kittyKeyboard.js\";\nimport { normalizeKeyEventType } from \"./nativeInput.js\";\nimport type {\n CompositionEvent,\n FocusEvent,\n KeyEvent,\n MouseEvent,\n PasteEvent,\n ResizeEvent,\n} from \"./protocol.js\";\nimport {\n createRenderer,\n treeToRenderNodes,\n type FrescoElement,\n type FrescoNode,\n} from \"./renderer.js\";\n\nexport type {\n CompositionEvent,\n FocusEvent,\n FrescoInputEvent,\n InputEvent,\n KeyEvent,\n KeyEventType,\n MouseEvent,\n PasteEvent,\n ResizeEvent,\n} from \"./protocol.js\";\n\nexport const lastKeyEvent: Ref<KeyEvent | null> = ref(null);\nexport const lastPasteEvent: Ref<PasteEvent | null> = ref(null);\nexport const lastResizeEvent: Ref<ResizeEvent | null> = ref(null);\nexport const lastMouseEvent: Ref<MouseEvent | null> = ref(null);\nexport const lastFocusEvent: Ref<FocusEvent | null> = ref(null);\nexport const lastCompositionEvent: Ref<CompositionEvent | null> = ref(null);\n\n// Import native bindings\n// eslint-disable-next-line typescript-eslint/no-redundant-type-constituents -- index.d.ts is generated by napi\nlet native: typeof import(\"@vizejs/fresco-native\") | null = null;\n\ntype ConsoleMethod = \"debug\" | \"error\" | \"info\" | \"log\" | \"warn\";\nconst consoleMethods: ConsoleMethod[] = [\"debug\", \"error\", \"info\", \"log\", \"warn\"];\n\nasync function loadNative() {\n if (!native) {\n native = await import(\"@vizejs/fresco-native\");\n }\n return native;\n}\n\n/**\n * App options\n */\nexport interface AppOptions {\n /** Enable mouse support */\n mouse?: boolean;\n /** Exit on Ctrl+C */\n exitOnCtrlC?: boolean;\n /** Custom error handler */\n onError?: (error: Error) => void;\n /** Debug mode - logs render tree */\n debug?: boolean;\n /** Ink-compatible option, accepted for API parity */\n stdout?: NodeJS.WriteStream;\n /** Ink-compatible option, accepted for API parity */\n stdin?: NodeJS.ReadStream;\n /** Ink-compatible option, accepted for API parity */\n stderr?: NodeJS.WriteStream;\n /** Ink-compatible option, accepted for API parity */\n patchConsole?: boolean;\n /** Called after a frame is rendered */\n onRender?: (metrics: RenderMetrics) => void;\n /** Enable screen reader rendering hints */\n isScreenReaderEnabled?: boolean;\n /** Maximum render frames per second */\n maxFps?: number;\n /** Use alternate screen buffer */\n alternateScreen?: boolean;\n /** Ink-compatible option, accepted for API parity */\n incrementalRendering?: boolean;\n /** Ink-compatible option, accepted for API parity */\n concurrent?: boolean;\n /** Override interactive mode detection */\n interactive?: boolean;\n /** Configure Kitty keyboard protocol support */\n kittyKeyboard?: KittyKeyboardOptions;\n}\n\nexport type RenderOptions = AppOptions;\n\nexport type AppRoot = Component | VNode;\n\n/**\n * Performance metrics for a render operation.\n */\nexport interface RenderMetrics {\n /** Time spent rendering in milliseconds */\n renderTime: number;\n}\n\n/**\n * Fresco App instance\n */\nexport interface App {\n /** Mount the app */\n mount(): Promise<void>;\n /** Unmount the app */\n unmount(errorOrResult?: unknown): Promise<void>;\n /** Wait for exit */\n waitUntilExit(): Promise<unknown>;\n /** Wait for pending render output */\n waitUntilRenderFlush(): Promise<void>;\n /** Render the app */\n render(): void;\n /** Clear the screen */\n clear(): void;\n /** Get terminal info */\n getTerminalInfo(): Promise<TerminalInfoNapi>;\n}\n\nexport interface RenderInstance {\n rerender(root: AppRoot): void;\n unmount(errorOrResult?: unknown): Promise<void>;\n waitUntilExit(): Promise<unknown>;\n waitUntilRenderFlush(): Promise<void>;\n cleanup(): Promise<void>;\n clear(): void;\n}\n\nexport type Instance = RenderInstance;\n\nexport interface RenderToStringOptions {\n /** Width of the virtual terminal in columns */\n columns?: number;\n}\n\nexport interface WritableStreamLike {\n write(...args: unknown[]): unknown;\n}\n\ntype Listener = (...args: unknown[]) => void;\n\nfunction createNoopWriteStream(columns: number, rows: number): NodeJS.WriteStream {\n const stream = {\n isTTY: false,\n columns,\n rows,\n write: () => true,\n on: (_event: string, _listener: Listener) => stream,\n off: (_event: string, _listener: Listener) => stream,\n once: (_event: string, _listener: Listener) => stream,\n removeListener: (_event: string, _listener: Listener) => stream,\n };\n\n return stream as unknown as NodeJS.WriteStream;\n}\n\nfunction createNoopReadStream(): NodeJS.ReadStream {\n const stream = {\n isTTY: false,\n isPaused: () => true,\n pause: () => stream,\n resume: () => stream,\n ref: () => stream,\n unref: () => stream,\n setEncoding: () => stream,\n setRawMode: () => stream,\n on: (_event: string, _listener: Listener) => stream,\n off: (_event: string, _listener: Listener) => stream,\n once: (_event: string, _listener: Listener) => stream,\n removeListener: (_event: string, _listener: Listener) => stream,\n };\n\n return stream as unknown as NodeJS.ReadStream;\n}\n\nfunction isWritableStream(value: unknown): value is WritableStreamLike {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"write\" in value &&\n typeof (value as { write?: unknown }).write === \"function\"\n );\n}\n\nfunction normalizeRenderOptions(options: AppOptions | WritableStreamLike): AppOptions {\n return isWritableStream(options) ? { stdout: options as NodeJS.WriteStream } : options;\n}\n\nfunction isVNodeRoot(root: AppRoot): root is VNode {\n return typeof root === \"object\" && root !== null && \"__v_isVNode\" in root;\n}\n\nfunction componentFromRoot(root: AppRoot): Component {\n if (!isVNodeRoot(root)) return root;\n\n return defineComponent({\n name: \"FrescoVNodeRoot\",\n setup() {\n return () => root;\n },\n });\n}\n\nfunction createRootElement(width = \"100%\", height = \"100%\"): FrescoElement {\n return {\n id: -1,\n type: \"root\",\n props: {\n style: {\n width,\n height,\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n alignContent: \"flex-start\",\n },\n },\n children: [],\n parent: null,\n };\n}\n\nfunction nodeText(node: FrescoNode): string {\n if (node.text !== undefined) return node.text;\n const propText = node.props.text ?? node.props.content;\n if (typeof propText === \"string\" || typeof propText === \"number\") return String(propText);\n if (node.type === \"input\") {\n const value = node.props.value;\n const placeholder = node.props.placeholder;\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n if (typeof placeholder === \"string\" || typeof placeholder === \"number\")\n return String(placeholder);\n }\n return \"\";\n}\n\nfunction isStaticNode(node: FrescoNode): boolean {\n return node.props.internal_static === true || node.props.internalStatic === true;\n}\n\nfunction joinOutput(parts: string[], separator = \"\\n\"): string {\n return parts.filter(Boolean).join(separator);\n}\n\nfunction treeToString(node: FrescoNode, options: { skipStatic?: boolean } = {}): string {\n if (options.skipStatic && isStaticNode(node)) return \"\";\n\n const ownText = nodeText(node);\n const childOutput = node.children.map((child) => treeToString(child, options));\n\n if (node.type === \"text\" || node.type === \"input\") {\n return `${ownText}${childOutput.join(\"\")}`;\n }\n\n const style = (node.props.style ?? {}) as Record<string, unknown>;\n const flexDirection = style.flexDirection ?? style.flex_direction;\n const separator = flexDirection === \"column\" ? \"\\n\" : \"\";\n return joinOutput(childOutput, separator);\n}\n\nfunction normalizeOutput(output: string): string {\n return output.endsWith(\"\\n\") ? output.slice(0, -1) : output;\n}\n\nfunction appendOutput(previous: string, next: string): string {\n const normalized = normalizeOutput(next);\n if (!normalized) return previous;\n return previous ? `${previous}\\n${normalized}` : normalized;\n}\n\nfunction captureStaticOutput(node: FrescoNode, renderedStaticItems: Map<number, number>): string {\n const output: string[] = [];\n\n function visit(current: FrescoNode) {\n if (isStaticNode(current)) {\n const renderedItems = renderedStaticItems.get(current.id) ?? 0;\n const nextItems = current.children.slice(renderedItems);\n const nextOutput = joinOutput(\n nextItems.map((child) => treeToString(child)),\n \"\\n\",\n );\n if (nextOutput) output.push(nextOutput);\n renderedStaticItems.set(current.id, current.children.length);\n return;\n }\n\n for (const child of current.children) {\n visit(child);\n }\n }\n\n visit(node);\n return joinOutput(output, \"\\n\");\n}\n\nfunction createStaticOutputNode(output: string): FrescoElement | null {\n const normalized = normalizeOutput(output);\n if (!normalized) return null;\n\n const staticRoot: FrescoElement = {\n id: -1,\n type: \"box\",\n props: {\n style: {\n flexDirection: \"column\",\n },\n },\n children: [],\n parent: null,\n };\n\n staticRoot.children = normalized.split(\"\\n\").map((line, index) => ({\n id: -2 - index,\n type: \"text\",\n props: {\n text: line,\n },\n children: [],\n parent: staticRoot,\n }));\n\n return staticRoot;\n}\n\nfunction cloneDynamicTree(node: FrescoNode): FrescoElement | null {\n if (isStaticNode(node)) return null;\n\n const clone: FrescoElement = {\n id: node.id,\n type: node.type,\n props: node.props,\n children: [],\n parent: null,\n text: node.text,\n };\n\n clone.children = node.children\n .map((child) => cloneDynamicTree(child))\n .filter((child): child is FrescoElement => child !== null);\n for (const child of clone.children) {\n child.parent = clone;\n }\n\n return clone;\n}\n\nfunction createRenderTree(root: FrescoElement, staticOutput: string): FrescoElement {\n const dynamicRoot = cloneDynamicTree(root) ?? createRootElement();\n const staticOutputNode = createStaticOutputNode(staticOutput);\n\n if (staticOutputNode) {\n staticOutputNode.parent = dynamicRoot;\n dynamicRoot.children = [staticOutputNode, ...dynamicRoot.children];\n }\n\n return dynamicRoot;\n}\n\nfunction renderPlainOutput(root: FrescoNode, staticOutput: string): string {\n return joinOutput([staticOutput, treeToString(root, { skipStatic: true })], \"\\n\");\n}\n\nfunction updateAppSize(context: UseAppReturn | null, width: number, height: number) {\n if (!context) return;\n context.width.value = width;\n context.height.value = height;\n}\n\nconst CI_ENVIRONMENT_KEYS = [\"CI\", \"CONTINUOUS_INTEGRATION\", \"BUILD_NUMBER\", \"RUN_ID\"] as const;\n\nfunction isTruthyEnvironmentValue(value: string | undefined): boolean {\n if (!value) return false;\n return ![\"0\", \"false\", \"no\"].includes(value.toLowerCase());\n}\n\nfunction isCiEnvironment(env: NodeJS.ProcessEnv = process.env): boolean {\n return CI_ENVIRONMENT_KEYS.some((key) => isTruthyEnvironmentValue(env[key]));\n}\n\nfunction detectInteractiveMode(options: AppOptions): boolean {\n const stdout = options.stdout ?? process.stdout;\n return options.interactive ?? (stdout.isTTY === true && !isCiEnvironment());\n}\n\n/**\n * Create a Fresco TUI app\n */\nexport function createApp(rootComponent: AppRoot, options: AppOptions = {}): App {\n const { mouse = false, exitOnCtrlC = true, onError } = options;\n const interactive = detectInteractiveMode(options);\n const screenReaderEnabled = ref(\n options.isScreenReaderEnabled ?? isScreenReaderEnabledByDefault(),\n );\n const frameDelay = Math.max(1, Math.floor(1000 / Math.max(1, options.maxFps ?? 30)));\n let streamsContext: StreamsContext;\n const writeToStdout = (data: string) => {\n writeExternalOutput(streamsContext.stdout, data);\n };\n const writeToStderr = (data: string) => {\n writeExternalOutput(streamsContext.stderr, data);\n };\n streamsContext = createStreamsContext({\n stdin: options.stdin,\n stdout: options.stdout,\n stderr: options.stderr,\n exitOnCtrlC,\n interactive,\n writeToStdout,\n writeToStderr,\n });\n\n let vueApp: VueApp | null = null;\n let rootElement: FrescoElement | null = null;\n let mounted = false;\n let running = false;\n let needsRender = true;\n let appContext: UseAppReturn | null = null;\n let focusManager: FocusManager | null = null;\n let consoleRestore: (() => void) | null = null;\n let isWritingExternalOutput = false;\n let nonInteractiveOutput = \"\";\n let staticOutput = \"\";\n const renderedStaticItems = new Map<number, number>();\n let cursorPosition: CursorPosition | undefined;\n let hasCursorOverride = false;\n\n let exitSettled = false;\n let resolveExit: ((value?: unknown) => void) | null = null;\n let rejectExit: ((reason?: unknown) => void) | null = null;\n const exitPromise = new Promise<unknown>((resolve, reject) => {\n resolveExit = resolve;\n rejectExit = reject;\n });\n\n const { createApp: createVueApp } = createRenderer();\n\n async function mount() {\n if (mounted) return;\n\n const n = interactive ? await loadNative() : null;\n\n if (n) {\n if (typeof n.initTerminalWithOptions === \"function\") {\n n.initTerminalWithOptions({\n alternateScreen: options.alternateScreen === true,\n bracketedPaste: true,\n hideCursor: true,\n mouse,\n rawMode: true,\n });\n } else if (mouse) {\n n.initTerminalWithMouse();\n } else {\n n.initTerminal();\n }\n\n n.enableIme?.();\n\n // Initialize layout engine\n n.initLayout();\n }\n\n // Create Vue app with custom renderer\n const app = createVueApp(componentFromRoot(rootComponent));\n\n const info = n?.getTerminalInfo() ?? {\n width: streamsContext.stdout.columns ?? 80,\n height: streamsContext.stdout.rows ?? 24,\n };\n appContext = createAppContext({\n width: info.width,\n height: info.height,\n exit: (value) => {\n void unmount(value);\n },\n render,\n clear,\n waitUntilRenderFlush,\n stdout: streamsContext.stdout,\n });\n focusManager = createFocusManager();\n app.provide(APP_KEY, appContext);\n app.provide(FOCUS_KEY, focusManager);\n app.provide(SCREEN_READER_KEY, screenReaderEnabled);\n app.provide(STREAMS_KEY, streamsContext);\n app.provide(\n CURSOR_KEY,\n createCursorContext((position) => {\n hasCursorOverride = true;\n cursorPosition = position;\n needsRender = true;\n }),\n );\n\n // Create a root element for mounting\n rootElement = createRootElement();\n\n patchConsoleMethods();\n try {\n app.mount(rootElement);\n } catch (error) {\n restoreConsoleMethods();\n throw error;\n }\n vueApp = app;\n\n mounted = true;\n running = true;\n needsRender = true;\n\n // Start event loop\n void eventLoop();\n }\n\n async function unmount(errorOrResult?: unknown) {\n if (!mounted) return;\n\n running = false;\n\n if (!interactive && rootElement) {\n staticOutput = appendOutput(\n staticOutput,\n captureStaticOutput(rootElement, renderedStaticItems),\n );\n nonInteractiveOutput = renderPlainOutput(rootElement, staticOutput);\n }\n\n if (native && interactive) {\n native.disableIme?.();\n native.restoreTerminal();\n }\n\n restoreConsoleMethods();\n\n if (vueApp) {\n vueApp.unmount();\n vueApp = null;\n }\n\n if (!interactive && nonInteractiveOutput) {\n streamsContext.stdout.write(\n nonInteractiveOutput.endsWith(\"\\n\") ? nonInteractiveOutput : `${nonInteractiveOutput}\\n`,\n );\n nonInteractiveOutput = \"\";\n }\n\n rootElement = null;\n mounted = false;\n appContext = null;\n focusManager = null;\n cursorPosition = undefined;\n hasCursorOverride = false;\n\n if (!exitSettled) {\n exitSettled = true;\n if (errorOrResult instanceof Error) {\n rejectExit?.(errorOrResult);\n } else {\n resolveExit?.(errorOrResult);\n }\n }\n }\n\n async function waitUntilExit(): Promise<unknown> {\n return exitPromise;\n }\n\n async function waitUntilRenderFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n function clear() {\n if (!mounted) return;\n staticOutput = \"\";\n if (!interactive) {\n nonInteractiveOutput = \"\";\n return;\n }\n if (!native) return;\n native.clearScreen();\n native.flushTerminal();\n }\n\n function writeExternalOutput(stream: NodeJS.WriteStream, data: string) {\n if (!mounted || !interactive || !native || isWritingExternalOutput) {\n stream.write(data);\n return;\n }\n\n try {\n isWritingExternalOutput = true;\n native.clearScreen();\n native.flushTerminal();\n stream.write(data);\n needsRender = true;\n render();\n } finally {\n isWritingExternalOutput = false;\n }\n }\n\n function patchConsoleMethods() {\n if (options.patchConsole === false || consoleRestore) return;\n\n const target = console as unknown as Record<ConsoleMethod, (...data: unknown[]) => void>;\n const original: Partial<Record<ConsoleMethod, (...data: unknown[]) => void>> = {};\n const patch = (method: ConsoleMethod, writer: (data: string) => void) => {\n original[method] = target[method];\n target[method] = (...args: unknown[]) => {\n writer(`${format(...args)}\\n`);\n };\n };\n\n patch(\"debug\", writeToStdout);\n patch(\"info\", writeToStdout);\n patch(\"log\", writeToStdout);\n patch(\"warn\", writeToStderr);\n patch(\"error\", writeToStderr);\n\n consoleRestore = () => {\n for (const method of consoleMethods) {\n const originalMethod = original[method];\n if (originalMethod) target[method] = originalMethod;\n }\n consoleRestore = null;\n };\n }\n\n function restoreConsoleMethods() {\n consoleRestore?.();\n }\n\n function applyCursorOverride() {\n if (!hasCursorOverride || !native) return;\n\n if (cursorPosition) {\n native.setCursor(cursorPosition.x, cursorPosition.y);\n native.showCursor();\n } else {\n native.hideCursor();\n }\n }\n\n function render() {\n if (!mounted || !rootElement) {\n return;\n }\n\n const start = performance.now();\n\n try {\n if (!interactive) {\n staticOutput = appendOutput(\n staticOutput,\n captureStaticOutput(rootElement, renderedStaticItems),\n );\n nonInteractiveOutput = renderPlainOutput(rootElement, staticOutput);\n options.onRender?.({ renderTime: performance.now() - start });\n return;\n }\n\n if (!native) {\n return;\n }\n\n staticOutput = appendOutput(\n staticOutput,\n captureStaticOutput(rootElement, renderedStaticItems),\n );\n const renderRoot = createRenderTree(rootElement, staticOutput);\n const renderNodes = screenReaderEnabled.value\n ? treeToScreenReaderRenderNodes(renderRoot)\n : treeToRenderNodes(renderRoot);\n\n // Send to native for rendering\n if (renderNodes.length > 0) {\n if (options.debug) {\n streamsContext.stderr.write(`${JSON.stringify(renderNodes, null, 2)}\\n`);\n }\n\n // Use renderTree which handles layout and painting\n native.renderTree(renderNodes);\n if (\"getLastRenderLayouts\" in native) {\n updateLastRenderLayouts(native.getLastRenderLayouts());\n }\n\n applyCursorOverride();\n\n // Flush to display\n native.flushTerminal();\n options.onRender?.({ renderTime: performance.now() - start });\n }\n } catch (error) {\n if (onError) {\n onError(error as Error);\n } else {\n console.error(\"Render error:\", error);\n }\n }\n }\n\n async function getTerminalInfo() {\n const n = await loadNative();\n return n.getTerminalInfo();\n }\n\n function dispatchEvent(event: InputEventNapi) {\n if (event.eventType === \"resize\") {\n const resizeEvent = {\n type: \"resize\" as const,\n width: event.width ?? 0,\n height: event.height ?? 0,\n };\n lastResizeEvent.value = resizeEvent;\n updateAppSize(appContext, resizeEvent.width, resizeEvent.height);\n return;\n }\n\n if (event.eventType === \"paste\") {\n lastPasteEvent.value = {\n type: \"paste\",\n text: event.text ?? \"\",\n };\n return;\n }\n\n if (event.eventType === \"mouse\") {\n lastMouseEvent.value = {\n type: \"mouse\",\n button: event.button ?? undefined,\n x: event.x ?? 0,\n y: event.y ?? 0,\n };\n return;\n }\n\n if (event.eventType === \"focus\") {\n lastFocusEvent.value = {\n type: \"focus\",\n focused: event.key === \"gained\",\n };\n return;\n }\n\n if (\n event.eventType === \"compositionstart\" ||\n event.eventType === \"compositionupdate\" ||\n event.eventType === \"compositionend\"\n ) {\n const type = event.eventType as CompositionEvent[\"type\"];\n lastCompositionEvent.value = {\n type,\n text: event.text ?? \"\",\n cursor: event.cursor ?? 0,\n };\n return;\n }\n\n if (event.eventType === \"key\") {\n const modifiers: Partial<ModifiersNapi> = event.modifiers ?? {};\n lastKeyEvent.value = {\n type: \"key\",\n key: event.key ?? undefined,\n char: event.char ?? undefined,\n ctrl: modifiers.ctrl ?? false,\n alt: modifiers.alt ?? false,\n shift: modifiers.shift ?? false,\n meta: modifiers.meta ?? false,\n super: modifiers.super ?? false,\n hyper: modifiers.hyper ?? false,\n capsLock: modifiers.capsLock ?? false,\n numLock: modifiers.numLock ?? false,\n eventType: normalizeKeyEventType(event.keyEventType),\n };\n }\n }\n\n async function eventLoop() {\n const n = interactive ? await loadNative() : null;\n\n while (running) {\n try {\n const event = n?.pollEvent(16); // ~60fps\n\n if (event) {\n // Handle resize\n if (event.eventType === \"resize\") {\n n?.syncTerminalSize();\n n?.clearScreen();\n needsRender = true;\n }\n\n dispatchEvent(event);\n\n // Handle focus traversal\n if (event.eventType === \"key\" && event.key === \"tab\") {\n focusManager?.focusNext();\n needsRender = true;\n } else if (event.eventType === \"key\" && event.key === \"backtab\") {\n focusManager?.focusPrevious();\n needsRender = true;\n }\n\n // Handle Ctrl+C\n if (\n exitOnCtrlC &&\n event.eventType === \"key\" &&\n event.char === \"c\" &&\n event.modifiers?.ctrl\n ) {\n await unmount();\n break;\n }\n }\n\n // Render frame if needed\n if (needsRender) {\n render();\n needsRender = false;\n }\n\n // Schedule re-render (Vue reactivity will trigger updates)\n needsRender = true;\n } catch (error) {\n if (onError) {\n onError(error as Error);\n }\n }\n\n // Small delay to prevent busy loop\n await new Promise((resolve) => setTimeout(resolve, frameDelay));\n }\n }\n\n return {\n mount,\n unmount,\n waitUntilExit,\n waitUntilRenderFlush,\n render,\n clear,\n getTerminalInfo,\n };\n}\n\n/**\n * Ink-compatible helper that mounts immediately.\n */\nexport function render(\n root: AppRoot,\n options: AppOptions | WritableStreamLike = {},\n): RenderInstance {\n const renderOptions = normalizeRenderOptions(options);\n const rootRef = shallowRef(root);\n const Root = defineComponent({\n name: \"FrescoRenderRoot\",\n setup() {\n return () => {\n const current = rootRef.value;\n return isVNodeRoot(current) ? current : h(current);\n };\n },\n });\n\n const app = createApp(Root, renderOptions);\n void app.mount();\n\n return {\n rerender(nextRoot: AppRoot) {\n rootRef.value = nextRoot;\n app.render();\n },\n unmount: (value?: unknown) => app.unmount(value),\n waitUntilExit: () => app.waitUntilExit(),\n waitUntilRenderFlush: () => app.waitUntilRenderFlush(),\n cleanup: () => app.unmount(),\n clear: () => app.clear(),\n };\n}\n\n/**\n * Render a Fresco component to a plain string without starting a terminal app.\n */\nexport function renderToString(root: AppRoot, options: RenderToStringOptions = {}): string {\n const { createApp: createVueApp } = createRenderer();\n const app = createVueApp(componentFromRoot(root));\n const columns = options.columns ?? 80;\n const stdout = createNoopWriteStream(columns, 24);\n const stderr = createNoopWriteStream(columns, 24);\n const stdin = createNoopReadStream();\n const rootElement = createRootElement(String(columns), \"auto\");\n\n app.provide(\n APP_KEY,\n createAppContext({\n width: columns,\n height: 24,\n stdout,\n }),\n );\n app.provide(FOCUS_KEY, createFocusManager());\n app.provide(SCREEN_READER_KEY, ref(false));\n app.provide(\n CURSOR_KEY,\n createCursorContext(() => {}),\n );\n app.provide(\n STREAMS_KEY,\n createStreamsContext({\n stdin,\n stdout,\n stderr,\n interactive: false,\n writeToStdout: () => {},\n writeToStderr: () => {},\n }),\n );\n app.mount(rootElement);\n\n const renderedStaticItems = new Map<number, number>();\n const staticOutput = captureStaticOutput(rootElement, renderedStaticItems);\n const output = renderPlainOutput(rootElement, staticOutput);\n app.unmount();\n return output;\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { $ as FormProps, A as TableColumn, At as HStack, B as TimerProps, C as Menu, Ct as NewlineProps, D as TreeNode, Dt as CardProps, E as Tree, Et as Card, F as Tooltip, Ft as DividerProps, G as AlertProps, H as BadgeProps, I as TooltipPosition, It as Spacer, J as ProgressBarProps, K as AlertType, L as TooltipProps, Lt as Box, M as List, Mt as StackProps, N as ListItem, Nt as VStack, O as TreeProps, Ot as Grid, P as ListProps, Pt as Divider, Q as FormField, R as Timer, Rt as BoxProps, S as TabsProps, St as Newline, T as MenuProps, Tt as TextProps, U as BadgeVariant, V as Badge, W as Alert, X as SpinnerProps, Y as Spinner, Z as Form, _ as Breadcrumb, _t as CodeProps, a as KeyHintProps, at as Checkbox, b as Tab, bt as Static, c as StatusBar, ct as SelectOption, d as Modal, dt as TextAreaProps, et as Confirm, f as ModalProps, ft as TextInput, g as StepperProps, gt as Code, h as Stepper, ht as LinkProps, i as KeyHint, it as RadioOption, j as TableProps, jt as Stack, k as Table, kt as GridProps, l as StatusBarItem, lt as SelectProps, m as StepStatus, mt as Link, n as AvatarProps, nt as RadioGroup, o as Header, ot as CheckboxProps, p as Step, pt as TextInputProps, q as ProgressBar, r as KeyBinding, rt as RadioGroupProps, s as HeaderProps, st as Select, t as Avatar, tt as ConfirmProps, u as StatusBarProps, ut as TextArea, v as BreadcrumbItem, vt as Transform, w as MenuItem, wt as Text, x as Tabs, xt as StaticProps, y as BreadcrumbProps, yt as TransformProps, z as TimerMode } from "../index-B9BJP7in.mjs";
2
- export { Alert, AlertProps, AlertType, Avatar, AvatarProps, Badge, BadgeProps, BadgeVariant, Box, BoxProps, Breadcrumb, BreadcrumbItem, BreadcrumbProps, Card, CardProps, Checkbox, CheckboxProps, Code, CodeProps, Confirm, ConfirmProps, Divider, DividerProps, Form, FormField, FormProps, Grid, GridProps, HStack, Header, HeaderProps, KeyBinding, KeyHint, KeyHintProps, Link, LinkProps, List, ListItem, ListProps, Menu, MenuItem, MenuProps, Modal, ModalProps, Newline, NewlineProps, ProgressBar, ProgressBarProps, RadioGroup, RadioGroupProps, RadioOption, Select, SelectOption, SelectProps, Spacer, Spinner, SpinnerProps, Stack, StackProps, Static, StaticProps, StatusBar, StatusBarItem, StatusBarProps, Step, StepStatus, Stepper, StepperProps, Tab, Table, TableColumn, TableProps, Tabs, TabsProps, Text, TextArea, TextAreaProps, TextInput, TextInputProps, TextProps, Timer, TimerMode, TimerProps, Tooltip, TooltipPosition, TooltipProps, Transform, TransformProps, Tree, TreeNode, TreeProps, VStack };
1
+ import { $ as FormProps, A as TableColumn, At as HStack, B as TimerProps, C as Menu, Ct as NewlineProps, D as TreeNode, Dt as CardProps, E as Tree, Et as Card, F as Tooltip, Ft as DividerProps, G as AlertProps, H as BadgeProps, I as TooltipPosition, It as Spacer, J as ProgressBarProps, K as AlertType, L as TooltipProps, Lt as Box, M as List, Mt as StackProps, N as ListItem, Nt as VStack, O as TreeProps, Ot as Grid, P as ListProps, Pt as Divider, Q as FormField, R as Timer, Rt as BoxProps, S as TabsProps, St as Newline, T as MenuProps, Tt as TextProps, U as BadgeVariant, V as Badge, W as Alert, X as SpinnerProps, Y as Spinner, Z as Form, _ as Breadcrumb, _t as CodeProps, a as KeyHintProps, at as Checkbox, b as Tab, bt as Static, c as StatusBar, ct as SelectOption, d as Modal, dt as TextAreaProps, et as Confirm, f as ModalProps, ft as TextInput, g as StepperProps, gt as Code, h as Stepper, ht as LinkProps, i as KeyHint, it as RadioOption, j as TableProps, jt as Stack, k as Table, kt as GridProps, l as StatusBarItem, lt as SelectProps, m as StepStatus, mt as Link, n as AvatarProps, nt as RadioGroup, o as Header, ot as CheckboxProps, p as Step, pt as TextInputProps, q as ProgressBar, r as KeyBinding, rt as RadioGroupProps, s as HeaderProps, st as Select, t as Avatar, tt as ConfirmProps, u as StatusBarProps, ut as TextArea, v as BreadcrumbItem, vt as Transform, w as MenuItem, wt as Text, x as Tabs, xt as StaticProps, y as BreadcrumbProps, yt as TransformProps, z as TimerMode } from "../index-D2kUje57.mjs";
2
+ export { Alert, type AlertProps, type AlertType, Avatar, type AvatarProps, Badge, type BadgeProps, type BadgeVariant, Box, type BoxProps, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Card, type CardProps, Checkbox, type CheckboxProps, Code, type CodeProps, Confirm, type ConfirmProps, Divider, type DividerProps, Form, type FormField, type FormProps, Grid, type GridProps, HStack, Header, type HeaderProps, type KeyBinding, KeyHint, type KeyHintProps, Link, type LinkProps, List, type ListItem, type ListProps, Menu, type MenuItem, type MenuProps, Modal, type ModalProps, Newline, type NewlineProps, ProgressBar, type ProgressBarProps, RadioGroup, type RadioGroupProps, type RadioOption, Select, type SelectOption, type SelectProps, Spacer, Spinner, type SpinnerProps, Stack, type StackProps, Static, type StaticProps, StatusBar, type StatusBarItem, type StatusBarProps, type Step, type StepStatus, Stepper, type StepperProps, type Tab, Table, type TableColumn, type TableProps, Tabs, type TabsProps, Text, TextArea, type TextAreaProps, TextInput, type TextInputProps, type TextProps, Timer, type TimerMode, type TimerProps, Tooltip, type TooltipPosition, type TooltipProps, Transform, type TransformProps, Tree, type TreeNode, type TreeProps, VStack };
@@ -1,2 +1,2 @@
1
- import { A as Newline, C as Select, D as Code, E as Link, F as Stack, I as VStack, L as Divider, M as Card, N as Grid, O as Transform, P as HStack, R as Spacer, S as Checkbox, T as TextInput, _ as ProgressBar, a as Modal, b as Confirm, c as Tabs, d as Table, f as List, g as Alert, h as Badge, i as StatusBar, j as Text, k as Static, l as Menu, m as Timer, n as KeyHint, o as Stepper, p as Tooltip, r as Header, s as Breadcrumb, t as Avatar, u as Tree, v as Spinner, w as TextArea, x as RadioGroup, y as Form, z as Box } from "../components-Co_HaVzY.mjs";
1
+ import { A as Newline, C as Select, D as Code, E as Link, F as Stack, I as VStack, L as Divider, M as Card, N as Grid, O as Transform, P as HStack, R as Spacer, S as Checkbox, T as TextInput, _ as ProgressBar, a as Modal, b as Confirm, c as Tabs, d as Table, f as List, g as Alert, h as Badge, i as StatusBar, j as Text, k as Static, l as Menu, m as Timer, n as KeyHint, o as Stepper, p as Tooltip, r as Header, s as Breadcrumb, t as Avatar, u as Tree, v as Spinner, w as TextArea, x as RadioGroup, y as Form, z as Box } from "../components-3-vKPu1z.mjs";
2
2
  export { Alert, Avatar, Badge, Box, Breadcrumb, Card, Checkbox, Code, Confirm, Divider, Form, Grid, HStack, Header, KeyHint, Link, List, Menu, Modal, Newline, ProgressBar, RadioGroup, Select, Spacer, Spinner, Stack, Static, StatusBar, Stepper, Table, Tabs, Text, TextArea, TextInput, Timer, Tooltip, Transform, Tree, VStack };
@@ -1,4 +1,4 @@
1
- import { i as useIsScreenReaderEnabled, t as useInput } from "./useInput-BYoxI3PX.mjs";
1
+ import { i as useIsScreenReaderEnabled, t as useInput } from "./useInput-BpH-JIU3.mjs";
2
2
  import { computed, defineComponent, h, onMounted, onUnmounted, ref, watch } from "@vue/runtime-core";
3
3
  //#region src/components/Box.ts
4
4
  /**
@@ -2896,4 +2896,4 @@ const Avatar = defineComponent({
2896
2896
  //#endregion
2897
2897
  export { Newline as A, Select as C, Code as D, Link as E, Stack as F, VStack as I, Divider as L, Card as M, Grid as N, Transform as O, HStack as P, Spacer as R, Checkbox as S, TextInput as T, ProgressBar as _, Modal as a, Confirm as b, Tabs as c, Table as d, List as f, Alert as g, Badge as h, StatusBar as i, Text as j, Static as k, Menu as l, Timer as m, KeyHint as n, Stepper as o, Tooltip as p, Header as r, Breadcrumb as s, Avatar as t, Tree as u, Spinner as v, TextArea as w, RadioGroup as x, Form as y, Box as z };
2898
2898
 
2899
- //# sourceMappingURL=components-Co_HaVzY.mjs.map
2899
+ //# sourceMappingURL=components-3-vKPu1z.mjs.map