arc402-cli 1.6.6 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/renderer/ThemeProvider.d.ts +46 -0
  2. package/dist/renderer/ThemeProvider.d.ts.map +1 -0
  3. package/dist/renderer/ThemeProvider.js +57 -0
  4. package/dist/renderer/ThemeProvider.js.map +1 -0
  5. package/dist/renderer/ThemedBox.d.ts +8 -0
  6. package/dist/renderer/ThemedBox.d.ts.map +1 -0
  7. package/dist/renderer/ThemedBox.js +14 -0
  8. package/dist/renderer/ThemedBox.js.map +1 -0
  9. package/dist/renderer/ThemedText.d.ts +27 -0
  10. package/dist/renderer/ThemedText.d.ts.map +1 -0
  11. package/dist/renderer/ThemedText.js +34 -0
  12. package/dist/renderer/ThemedText.js.map +1 -0
  13. package/dist/renderer/cell.d.ts +56 -0
  14. package/dist/renderer/cell.d.ts.map +1 -0
  15. package/dist/renderer/cell.js +54 -0
  16. package/dist/renderer/cell.js.map +1 -0
  17. package/dist/renderer/diff.d.ts +9 -0
  18. package/dist/renderer/diff.d.ts.map +1 -0
  19. package/dist/renderer/diff.js +55 -0
  20. package/dist/renderer/diff.js.map +1 -0
  21. package/dist/renderer/dom.d.ts +21 -0
  22. package/dist/renderer/dom.d.ts.map +1 -0
  23. package/dist/renderer/dom.js +31 -0
  24. package/dist/renderer/dom.js.map +1 -0
  25. package/dist/renderer/index.d.ts +11 -0
  26. package/dist/renderer/index.d.ts.map +1 -0
  27. package/dist/renderer/index.js +29 -0
  28. package/dist/renderer/index.js.map +1 -0
  29. package/dist/renderer/ink.d.ts +40 -0
  30. package/dist/renderer/ink.d.ts.map +1 -0
  31. package/dist/renderer/ink.js +59 -0
  32. package/dist/renderer/ink.js.map +1 -0
  33. package/dist/renderer/input.d.ts +22 -0
  34. package/dist/renderer/input.d.ts.map +1 -0
  35. package/dist/renderer/input.js +175 -0
  36. package/dist/renderer/input.js.map +1 -0
  37. package/dist/renderer/layout.d.ts +31 -0
  38. package/dist/renderer/layout.d.ts.map +1 -0
  39. package/dist/renderer/layout.js +119 -0
  40. package/dist/renderer/layout.js.map +1 -0
  41. package/dist/renderer/loop.d.ts +6 -0
  42. package/dist/renderer/loop.d.ts.map +1 -0
  43. package/dist/renderer/loop.js +57 -0
  44. package/dist/renderer/loop.js.map +1 -0
  45. package/dist/renderer/reconciler.d.ts +3 -0
  46. package/dist/renderer/reconciler.d.ts.map +1 -0
  47. package/dist/renderer/reconciler.js +86 -0
  48. package/dist/renderer/reconciler.js.map +1 -0
  49. package/dist/renderer/screen.d.ts +25 -0
  50. package/dist/renderer/screen.d.ts.map +1 -0
  51. package/dist/renderer/screen.js +74 -0
  52. package/dist/renderer/screen.js.map +1 -0
  53. package/dist/renderer/terminal.d.ts +5 -0
  54. package/dist/renderer/terminal.d.ts.map +1 -0
  55. package/dist/renderer/terminal.js +49 -0
  56. package/dist/renderer/terminal.js.map +1 -0
  57. package/dist/renderer/theme.d.ts +51 -0
  58. package/dist/renderer/theme.d.ts.map +1 -0
  59. package/dist/renderer/theme.js +28 -0
  60. package/dist/renderer/theme.js.map +1 -0
  61. package/dist/tui/App.d.ts.map +1 -1
  62. package/dist/tui/App.js +2 -1
  63. package/dist/tui/App.js.map +1 -1
  64. package/dist/tui/Footer.js +2 -2
  65. package/dist/tui/Footer.js.map +1 -1
  66. package/dist/tui/Header.js +2 -2
  67. package/dist/tui/Header.js.map +1 -1
  68. package/dist/tui/InputLine.d.ts +1 -0
  69. package/dist/tui/InputLine.d.ts.map +1 -1
  70. package/dist/tui/InputLine.js +145 -85
  71. package/dist/tui/InputLine.js.map +1 -1
  72. package/dist/tui/KernelPayloadRenderer.js +4 -4
  73. package/dist/tui/KernelPayloadRenderer.js.map +1 -1
  74. package/dist/tui/Viewport.js +2 -2
  75. package/dist/tui/Viewport.js.map +1 -1
  76. package/dist/tui/WalletConnectPairing.js +2 -2
  77. package/dist/tui/WalletConnectPairing.js.map +1 -1
  78. package/dist/tui/components/Button.d.ts.map +1 -1
  79. package/dist/tui/components/Button.js +2 -1
  80. package/dist/tui/components/Button.js.map +1 -1
  81. package/dist/tui/components/CeremonyView.js +2 -2
  82. package/dist/tui/components/CeremonyView.js.map +1 -1
  83. package/dist/tui/components/CompletionDropdown.js +4 -4
  84. package/dist/tui/components/CompletionDropdown.js.map +1 -1
  85. package/dist/tui/components/ConfirmPrompt.js +2 -2
  86. package/dist/tui/components/ConfirmPrompt.js.map +1 -1
  87. package/dist/tui/components/CustomTextInput.d.ts.map +1 -1
  88. package/dist/tui/components/CustomTextInput.js +3 -2
  89. package/dist/tui/components/CustomTextInput.js.map +1 -1
  90. package/dist/tui/components/InteractiveTable.d.ts.map +1 -1
  91. package/dist/tui/components/InteractiveTable.js +4 -3
  92. package/dist/tui/components/InteractiveTable.js.map +1 -1
  93. package/dist/tui/components/StepSpinner.js +5 -5
  94. package/dist/tui/components/StepSpinner.js.map +1 -1
  95. package/dist/tui/components/Toast.js +3 -3
  96. package/dist/tui/components/Toast.js.map +1 -1
  97. package/dist/tui/components/commerce/AgentPicker.d.ts.map +1 -1
  98. package/dist/tui/components/commerce/AgentPicker.js +4 -3
  99. package/dist/tui/components/commerce/AgentPicker.js.map +1 -1
  100. package/dist/tui/components/commerce/DiscoverList.js +5 -5
  101. package/dist/tui/components/commerce/DiscoverList.js.map +1 -1
  102. package/dist/tui/components/commerce/HireCard.js +2 -2
  103. package/dist/tui/components/commerce/HireCard.js.map +1 -1
  104. package/dist/tui/components/commerce/ProfileCard.js +2 -2
  105. package/dist/tui/components/commerce/ProfileCard.js.map +1 -1
  106. package/dist/tui/components/commerce/SquadCard.js +2 -2
  107. package/dist/tui/components/commerce/SquadCard.js.map +1 -1
  108. package/dist/tui/components/commerce/StatusCard.js +2 -2
  109. package/dist/tui/components/commerce/StatusCard.js.map +1 -1
  110. package/dist/tui/components/commerce/SubscribeCard.js +2 -2
  111. package/dist/tui/components/commerce/SubscribeCard.js.map +1 -1
  112. package/dist/tui/components/commerce/WorkroomCard.js +2 -2
  113. package/dist/tui/components/commerce/WorkroomCard.js.map +1 -1
  114. package/dist/tui/components/commerce/common.js +7 -7
  115. package/dist/tui/components/commerce/common.js.map +1 -1
  116. package/dist/tui/index.d.ts.map +1 -1
  117. package/dist/tui/index.js +9 -2
  118. package/dist/tui/index.js.map +1 -1
  119. package/dist/tui/useScroll.d.ts.map +1 -1
  120. package/dist/tui/useScroll.js +15 -9
  121. package/dist/tui/useScroll.js.map +1 -1
  122. package/dist/tui/useTerminalSize.d.ts.map +1 -1
  123. package/dist/tui/useTerminalSize.js +2 -3
  124. package/dist/tui/useTerminalSize.js.map +1 -1
  125. package/package.json +2 -1
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import { type Theme } from './theme.js';
3
+ export declare function ThemeProvider({ theme, children }: {
4
+ theme?: Theme;
5
+ children: React.ReactNode;
6
+ }): React.FunctionComponentElement<React.ProviderProps<Theme>>;
7
+ export declare function useTheme(): Theme;
8
+ export declare function useColor(name: keyof Theme['colors']): import("./cell.js").Color;
9
+ export declare function useComponentStyle<K extends keyof Theme['components']>(name: K): {
10
+ header: {
11
+ fg: import("./cell.js").Color;
12
+ bold: boolean;
13
+ };
14
+ label: {
15
+ fg: import("./cell.js").Color;
16
+ };
17
+ value: {
18
+ fg: import("./cell.js").Color | null;
19
+ };
20
+ badge: {
21
+ fg: import("./cell.js").Color | null;
22
+ bg: import("./cell.js").Color;
23
+ bold: boolean;
24
+ };
25
+ separator: {
26
+ fg: import("./cell.js").Color;
27
+ };
28
+ prompt: {
29
+ fg: import("./cell.js").Color;
30
+ bold: boolean;
31
+ };
32
+ cursor: {
33
+ fg: import("./cell.js").Color | null;
34
+ bg: import("./cell.js").Color;
35
+ };
36
+ success: {
37
+ fg: import("./cell.js").Color;
38
+ };
39
+ warning: {
40
+ fg: import("./cell.js").Color;
41
+ };
42
+ danger: {
43
+ fg: import("./cell.js").Color;
44
+ };
45
+ }[K];
46
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/renderer/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,KAAK,KAAK,EAAgB,MAAM,YAAY,CAAC;AAItD,wBAAgB,aAAa,CAAC,EAAE,KAAoB,EAAE,QAAQ,EAAE,EAAE;IAChE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,8DAEA;AAED,wBAAgB,QAAQ,IAAI,KAAK,CAEhC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,QAAQ,CAAC,6BAGnD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAG7E"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ThemeProvider = ThemeProvider;
37
+ exports.useTheme = useTheme;
38
+ exports.useColor = useColor;
39
+ exports.useComponentStyle = useComponentStyle;
40
+ const react_1 = __importStar(require("react"));
41
+ const theme_js_1 = require("./theme.js");
42
+ const ThemeContext = (0, react_1.createContext)(theme_js_1.defaultTheme);
43
+ function ThemeProvider({ theme = theme_js_1.defaultTheme, children }) {
44
+ return react_1.default.createElement(ThemeContext.Provider, { value: theme }, children);
45
+ }
46
+ function useTheme() {
47
+ return (0, react_1.useContext)(ThemeContext);
48
+ }
49
+ function useColor(name) {
50
+ const theme = useTheme();
51
+ return theme.colors[name];
52
+ }
53
+ function useComponentStyle(name) {
54
+ const theme = useTheme();
55
+ return theme.components[name];
56
+ }
57
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../src/renderer/ThemeProvider.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,sCAKC;AAED,4BAEC;AAED,4BAGC;AAED,8CAGC;AAxBD,+CAAyD;AACzD,yCAAsD;AAEtD,MAAM,YAAY,GAAG,IAAA,qBAAa,EAAQ,uBAAY,CAAC,CAAC;AAExD,SAAgB,aAAa,CAAC,EAAE,KAAK,GAAG,uBAAY,EAAE,QAAQ,EAG7D;IACC,OAAO,eAAK,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;AAChF,CAAC;AAED,SAAgB,QAAQ;IACtB,OAAO,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,QAAQ,CAAC,IAA2B;IAClD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,iBAAiB,CAAsC,IAAO;IAC5E,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { BoxStyle } from './layout.js';
3
+ interface ThemedBoxProps extends BoxStyle {
4
+ children?: React.ReactNode;
5
+ }
6
+ export declare function ThemedBox({ children, ...style }: ThemedBoxProps): React.DetailedReactHTMLElement<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
7
+ export {};
8
+ //# sourceMappingURL=ThemedBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemedBox.d.ts","sourceRoot":"","sources":["../../src/renderer/ThemedBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,UAAU,cAAe,SAAQ,QAAQ;IACvC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,iGAI/D"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ThemedBox = ThemedBox;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ink_js_1 = require("./ink.js");
9
+ function ThemedBox({ children, ...style }) {
10
+ // Spread BoxStyle props directly — Ink's Box accepts them as top-level props
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ return react_1.default.createElement(ink_js_1.Box, style, children);
13
+ }
14
+ //# sourceMappingURL=ThemedBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemedBox.js","sourceRoot":"","sources":["../../src/renderer/ThemedBox.tsx"],"names":[],"mappings":";;;;;AAUA,8BAIC;AAdD,kDAA0B;AAC1B,qCAA+B;AAS/B,SAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAkB;IAC9D,6EAA6E;IAC7E,8DAA8D;IAC9D,OAAO,eAAK,CAAC,aAAa,CAAC,YAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import type { Color } from './cell.js';
3
+ import type { Theme } from './theme.js';
4
+ interface ThemedTextProps {
5
+ variant?: keyof Theme['components'];
6
+ color?: Color | null;
7
+ bold?: boolean;
8
+ dim?: boolean;
9
+ italic?: boolean;
10
+ underline?: boolean;
11
+ children: React.ReactNode;
12
+ }
13
+ export declare function ThemedText({ variant, color, bold, dim, italic, underline, children }: ThemedTextProps): React.CElement<{
14
+ color: string | undefined;
15
+ bold: boolean | undefined;
16
+ dimColor: boolean | undefined;
17
+ italic: boolean | undefined;
18
+ underline: boolean | undefined;
19
+ }, React.Component<{
20
+ color: string | undefined;
21
+ bold: boolean | undefined;
22
+ dimColor: boolean | undefined;
23
+ italic: boolean | undefined;
24
+ underline: boolean | undefined;
25
+ }, any, any>>;
26
+ export {};
27
+ //# sourceMappingURL=ThemedText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemedText.d.ts","sourceRoot":"","sources":["../../src/renderer/ThemedText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,UAAU,eAAe;IAEvB,OAAO,CAAC,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;IAEpC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,eAAe;;;;;;;;;;;;cAyBrG"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ThemedText = ThemedText;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ThemeProvider_js_1 = require("./ThemeProvider.js");
9
+ const ink_js_1 = require("./ink.js");
10
+ function ThemedText({ variant, color, bold, dim, italic, underline, children }) {
11
+ const theme = (0, ThemeProvider_js_1.useTheme)();
12
+ let resolvedColor = color;
13
+ let resolvedBold = bold;
14
+ let resolvedDim = dim;
15
+ if (variant) {
16
+ const style = theme.components[variant];
17
+ if (resolvedColor === undefined)
18
+ resolvedColor = style.fg ?? null;
19
+ if (resolvedBold === undefined && style.bold)
20
+ resolvedBold = style.bold;
21
+ }
22
+ const colorStr = resolvedColor != null
23
+ ? `#${resolvedColor.r.toString(16).padStart(2, '0')}${resolvedColor.g.toString(16).padStart(2, '0')}${resolvedColor.b.toString(16).padStart(2, '0')}`
24
+ : undefined;
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ return react_1.default.createElement(ink_js_1.Text, {
27
+ color: colorStr,
28
+ bold: resolvedBold,
29
+ dimColor: resolvedDim,
30
+ italic,
31
+ underline,
32
+ }, children);
33
+ }
34
+ //# sourceMappingURL=ThemedText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemedText.js","sourceRoot":"","sources":["../../src/renderer/ThemedText.tsx"],"names":[],"mappings":";;;;;AAkBA,gCAyBC;AA3CD,kDAA0B;AAC1B,yDAAiE;AACjE,qCAAgC;AAgBhC,SAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAmB;IACpG,MAAM,KAAK,GAAG,IAAA,2BAAQ,GAAE,CAAC;IAEzB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,YAAY,GAAG,IAAI,CAAC;IACxB,IAAI,WAAW,GAAG,GAAG,CAAC;IAEtB,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAA4B,CAAC;QACnE,IAAI,aAAa,KAAK,SAAS;YAAE,aAAa,GAAI,KAAK,CAAC,EAA+B,IAAI,IAAI,CAAC;QAChG,IAAI,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI;YAAE,YAAY,GAAG,KAAK,CAAC,IAAe,CAAC;IACrF,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,IAAI,IAAI;QACpC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QACrJ,CAAC,CAAC,SAAS,CAAC;IAEd,8DAA8D;IAC9D,OAAO,eAAK,CAAC,aAAa,CAAC,aAAW,EAAE;QACtC,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,WAAW;QACrB,MAAM;QACN,SAAS;KACV,EAAE,QAAQ,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,56 @@
1
+ export interface Color {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ }
6
+ export declare const COLORS: {
7
+ readonly cyan: {
8
+ readonly r: 34;
9
+ readonly g: 211;
10
+ readonly b: 238;
11
+ };
12
+ readonly green: {
13
+ readonly r: 74;
14
+ readonly g: 222;
15
+ readonly b: 128;
16
+ };
17
+ readonly yellow: {
18
+ readonly r: 251;
19
+ readonly g: 191;
20
+ readonly b: 36;
21
+ };
22
+ readonly red: {
23
+ readonly r: 248;
24
+ readonly g: 113;
25
+ readonly b: 113;
26
+ };
27
+ readonly slate: {
28
+ readonly r: 148;
29
+ readonly g: 163;
30
+ readonly b: 184;
31
+ };
32
+ readonly dim: {
33
+ readonly r: 71;
34
+ readonly g: 85;
35
+ readonly b: 105;
36
+ };
37
+ readonly white: {
38
+ readonly r: 255;
39
+ readonly g: 255;
40
+ readonly b: 255;
41
+ };
42
+ };
43
+ export interface Cell {
44
+ char: string;
45
+ fg: Color | null;
46
+ bg: Color | null;
47
+ bold: boolean;
48
+ dim: boolean;
49
+ italic: boolean;
50
+ underline: boolean;
51
+ }
52
+ export type Frame = Cell[][];
53
+ export declare function emptyCell(): Cell;
54
+ export declare function createFrame(rows: number, cols: number): Frame;
55
+ export declare function cellsEqual(a: Cell, b: Cell): boolean;
56
+ //# sourceMappingURL=cell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell.d.ts","sourceRoot":"","sources":["../../src/renderer/cell.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;CACjC;AAGD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQT,CAAC;AAEX,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC;IACjB,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,KAAK,GAAG,IAAI,EAAE,EAAE,CAAC;AAE7B,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAI7D;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAmBpD"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COLORS = void 0;
4
+ exports.emptyCell = emptyCell;
5
+ exports.createFrame = createFrame;
6
+ exports.cellsEqual = cellsEqual;
7
+ // Named ANSI colors as Color-compatible values
8
+ exports.COLORS = {
9
+ cyan: { r: 34, g: 211, b: 238 }, // #22d3ee — ARC-402 primary
10
+ green: { r: 74, g: 222, b: 128 }, // #4ade80
11
+ yellow: { r: 251, g: 191, b: 36 }, // #fbbf24
12
+ red: { r: 248, g: 113, b: 113 }, // #f87171
13
+ slate: { r: 148, g: 163, b: 184 }, // #94a3b8
14
+ dim: { r: 71, g: 85, b: 105 }, // #475569
15
+ white: { r: 255, g: 255, b: 255 },
16
+ };
17
+ function emptyCell() {
18
+ return { char: ' ', fg: null, bg: null, bold: false, dim: false, italic: false, underline: false };
19
+ }
20
+ function createFrame(rows, cols) {
21
+ return Array.from({ length: rows }, () => Array.from({ length: cols }, () => emptyCell()));
22
+ }
23
+ function cellsEqual(a, b) {
24
+ if (a.char !== b.char)
25
+ return false;
26
+ if (a.bold !== b.bold)
27
+ return false;
28
+ if (a.dim !== b.dim)
29
+ return false;
30
+ if (a.italic !== b.italic)
31
+ return false;
32
+ if (a.underline !== b.underline)
33
+ return false;
34
+ // fg comparison
35
+ if (a.fg === null && b.fg !== null)
36
+ return false;
37
+ if (a.fg !== null && b.fg === null)
38
+ return false;
39
+ if (a.fg !== null && b.fg !== null) {
40
+ if (a.fg.r !== b.fg.r || a.fg.g !== b.fg.g || a.fg.b !== b.fg.b)
41
+ return false;
42
+ }
43
+ // bg comparison
44
+ if (a.bg === null && b.bg !== null)
45
+ return false;
46
+ if (a.bg !== null && b.bg === null)
47
+ return false;
48
+ if (a.bg !== null && b.bg !== null) {
49
+ if (a.bg.r !== b.bg.r || a.bg.g !== b.bg.g || a.bg.b !== b.bg.b)
50
+ return false;
51
+ }
52
+ return true;
53
+ }
54
+ //# sourceMappingURL=cell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell.js","sourceRoot":"","sources":["../../src/renderer/cell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Frame, Cell } from './cell.js';
2
+ export interface Patch {
3
+ row: number;
4
+ col: number;
5
+ cells: Cell[];
6
+ }
7
+ export declare function diff(front: Frame, back: Frame): Patch[];
8
+ export declare function optimizePatches(patches: Patch[]): Patch[];
9
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/renderer/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAc,MAAM,WAAW,CAAC;AAEpD,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAID,wBAAgB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,CA6BvD;AAGD,wBAAgB,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAkBzD"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.diff = diff;
4
+ exports.optimizePatches = optimizePatches;
5
+ const cell_js_1 = require("./cell.js");
6
+ // Compare front (current screen) vs back (desired screen)
7
+ // Return minimal set of patches needed to update the screen
8
+ function diff(front, back) {
9
+ const patches = [];
10
+ const rows = Math.min(front.length, back.length);
11
+ for (let row = 0; row < rows; row++) {
12
+ const frontRow = front[row];
13
+ const backRow = back[row];
14
+ const cols = Math.min(frontRow.length, backRow.length);
15
+ let currentPatch = null;
16
+ for (let col = 0; col < cols; col++) {
17
+ if (!(0, cell_js_1.cellsEqual)(frontRow[col], backRow[col])) {
18
+ if (currentPatch && currentPatch.row === row && currentPatch.col + currentPatch.cells.length === col) {
19
+ // Extend current run
20
+ currentPatch.cells.push(backRow[col]);
21
+ }
22
+ else {
23
+ // Start a new patch
24
+ currentPatch = { row, col, cells: [backRow[col]] };
25
+ patches.push(currentPatch);
26
+ }
27
+ }
28
+ else {
29
+ // Unchanged — break the current run
30
+ currentPatch = null;
31
+ }
32
+ }
33
+ }
34
+ return patches;
35
+ }
36
+ // Merge patches that are adjacent in the same row
37
+ function optimizePatches(patches) {
38
+ if (patches.length === 0)
39
+ return [];
40
+ const result = [];
41
+ let current = { ...patches[0], cells: [...patches[0].cells] };
42
+ for (let i = 1; i < patches.length; i++) {
43
+ const next = patches[i];
44
+ if (next.row === current.row && current.col + current.cells.length === next.col) {
45
+ current.cells = current.cells.concat(next.cells);
46
+ }
47
+ else {
48
+ result.push(current);
49
+ current = { ...next, cells: [...next.cells] };
50
+ }
51
+ }
52
+ result.push(current);
53
+ return result;
54
+ }
55
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/renderer/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export type NodeType = 'root' | 'box' | 'text';
2
+ export interface DOMNode {
3
+ type: NodeType;
4
+ parent: DOMNode | null;
5
+ children: DOMNode[];
6
+ style?: import('./layout.js').BoxStyle;
7
+ text?: string;
8
+ textStyle?: {
9
+ fg?: import('./cell.js').Color | null;
10
+ bg?: import('./cell.js').Color | null;
11
+ bold?: boolean;
12
+ dim?: boolean;
13
+ italic?: boolean;
14
+ underline?: boolean;
15
+ };
16
+ }
17
+ export declare function createNode(type: NodeType): DOMNode;
18
+ export declare function appendChild(parent: DOMNode, child: DOMNode): void;
19
+ export declare function removeChild(parent: DOMNode, child: DOMNode): void;
20
+ export declare function insertBefore(parent: DOMNode, child: DOMNode, before: DOMNode): void;
21
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/renderer/dom.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAE/C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,EAAE,CAAC;IAGpB,KAAK,CAAC,EAAE,OAAO,aAAa,EAAE,QAAQ,CAAC;IAGvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE;QACV,EAAE,CAAC,EAAE,OAAO,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC;QACtC,EAAE,CAAC,EAAE,OAAO,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAElD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAGjE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAMjE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAQnF"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createNode = createNode;
4
+ exports.appendChild = appendChild;
5
+ exports.removeChild = removeChild;
6
+ exports.insertBefore = insertBefore;
7
+ function createNode(type) {
8
+ return { type, parent: null, children: [] };
9
+ }
10
+ function appendChild(parent, child) {
11
+ child.parent = parent;
12
+ parent.children.push(child);
13
+ }
14
+ function removeChild(parent, child) {
15
+ const idx = parent.children.indexOf(child);
16
+ if (idx !== -1) {
17
+ parent.children.splice(idx, 1);
18
+ child.parent = null;
19
+ }
20
+ }
21
+ function insertBefore(parent, child, before) {
22
+ const idx = parent.children.indexOf(before);
23
+ if (idx !== -1) {
24
+ parent.children.splice(idx, 0, child);
25
+ child.parent = parent;
26
+ }
27
+ else {
28
+ appendChild(parent, child);
29
+ }
30
+ }
31
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/renderer/dom.ts"],"names":[],"mappings":";;AAsBA,gCAEC;AAED,kCAGC;AAED,kCAMC;AAED,oCAQC;AAzBD,SAAgB,UAAU,CAAC,IAAc;IACvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC9C,CAAC;AAED,SAAgB,WAAW,CAAC,MAAe,EAAE,KAAc;IACzD,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,WAAW,CAAC,MAAe,EAAE,KAAc;IACzD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,MAAe,EAAE,KAAc,EAAE,MAAe;IAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ export * from './cell.js';
2
+ export * from './diff.js';
3
+ export * from './terminal.js';
4
+ export * from './loop.js';
5
+ export * from './input.js';
6
+ export * from './screen.js';
7
+ export * from './layout.js';
8
+ export * from './dom.js';
9
+ export * from './reconciler.js';
10
+ export * from './ink.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // Re-export everything from Phase 1
18
+ __exportStar(require("./cell.js"), exports);
19
+ __exportStar(require("./diff.js"), exports);
20
+ __exportStar(require("./terminal.js"), exports);
21
+ __exportStar(require("./loop.js"), exports);
22
+ __exportStar(require("./input.js"), exports);
23
+ __exportStar(require("./screen.js"), exports);
24
+ __exportStar(require("./layout.js"), exports);
25
+ // Phase 4: React reconciler + virtual DOM
26
+ __exportStar(require("./dom.js"), exports);
27
+ __exportStar(require("./reconciler.js"), exports);
28
+ __exportStar(require("./ink.js"), exports);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oCAAoC;AACpC,4CAA0B;AAC1B,4CAA0B;AAC1B,gDAA8B;AAC9B,4CAA0B;AAC1B,6CAA2B;AAC3B,8CAA4B;AAC5B,8CAA4B;AAC5B,0CAA0C;AAC1C,2CAAyB;AACzB,kDAAgC;AAChC,2CAAyB"}
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import type { BoxStyle } from './layout.js';
3
+ import type { Color } from './cell.js';
4
+ export interface RenderOptions {
5
+ stdout?: NodeJS.WriteStream;
6
+ rows?: number;
7
+ cols?: number;
8
+ }
9
+ export interface RenderInstance {
10
+ update(node: React.ReactElement): void;
11
+ unmount(): void;
12
+ waitUntilExit(): Promise<void>;
13
+ }
14
+ export declare function render(node: React.ReactElement, options?: RenderOptions): RenderInstance;
15
+ export interface BoxProps extends BoxStyle {
16
+ style?: BoxStyle;
17
+ children?: React.ReactNode;
18
+ }
19
+ export declare function Box({ style, children, ...flatProps }: BoxProps): React.ReactElement<{
20
+ style: BoxStyle;
21
+ }, string | React.JSXElementConstructor<any>>;
22
+ export interface TextProps {
23
+ color?: Color | string;
24
+ bold?: boolean;
25
+ dim?: boolean;
26
+ dimColor?: boolean;
27
+ italic?: boolean;
28
+ underline?: boolean;
29
+ inverse?: boolean;
30
+ children?: React.ReactNode;
31
+ }
32
+ export declare function Text({ color, bold, dim, dimColor, italic, underline, inverse, children }: TextProps): React.ReactElement<{
33
+ color: string | Color | undefined;
34
+ bold: boolean | undefined;
35
+ dim: boolean | undefined;
36
+ italic: boolean | undefined;
37
+ underline: boolean | undefined;
38
+ inverse: boolean | undefined;
39
+ }, string | React.JSXElementConstructor<any>>;
40
+ //# sourceMappingURL=ink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ink.d.ts","sourceRoot":"","sources":["../../src/renderer/ink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IACvC,OAAO,IAAI,IAAI,CAAC;IAChB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,GAAE,aAAkB,GAAG,cAAc,CAsC5F;AAGD,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAGD,wBAAgB,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,EAAE,QAAQ;;8CAI9D;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS;;;;;;;8CAInG"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.render = render;
7
+ exports.Box = Box;
8
+ exports.Text = Text;
9
+ const react_1 = __importDefault(require("react"));
10
+ const reconciler_js_1 = require("./reconciler.js");
11
+ const dom_js_1 = require("./dom.js");
12
+ const cell_js_1 = require("./cell.js");
13
+ const diff_js_1 = require("./diff.js");
14
+ const terminal_js_1 = require("./terminal.js");
15
+ const loop_js_1 = require("./loop.js");
16
+ function render(node, options = {}) {
17
+ const stdout = options.stdout ?? process.stdout;
18
+ const rows = options.rows ?? stdout.rows ?? 24;
19
+ const cols = options.cols ?? stdout.columns ?? 80;
20
+ let frontFrame = (0, cell_js_1.createFrame)(rows, cols);
21
+ const container = (0, dom_js_1.createNode)('root');
22
+ const { schedule } = (0, loop_js_1.createRenderLoop)(() => {
23
+ // Phase 4 stub — full render implementation in Phase 6
24
+ const backFrame = (0, cell_js_1.createFrame)(rows, cols);
25
+ const patches = (0, diff_js_1.diff)(frontFrame, backFrame);
26
+ (0, terminal_js_1.writePatches)(patches, stdout);
27
+ frontFrame = backFrame;
28
+ });
29
+ (0, reconciler_js_1.setOnCommit)(schedule);
30
+ // react-reconciler v0.26 createContainer(containerInfo, tag, hydrate, hydrationCallbacks)
31
+ const fiberRoot = reconciler_js_1.reconciler.createContainer(container, 0, false, null);
32
+ reconciler_js_1.reconciler.updateContainer(node, fiberRoot, null, null);
33
+ let exitResolve;
34
+ const exitPromise = new Promise(resolve => { exitResolve = resolve; });
35
+ return {
36
+ update(newNode) {
37
+ reconciler_js_1.reconciler.updateContainer(newNode, fiberRoot, null, null);
38
+ },
39
+ unmount() {
40
+ reconciler_js_1.reconciler.updateContainer(null, fiberRoot, null, null);
41
+ exitResolve();
42
+ },
43
+ waitUntilExit() {
44
+ return exitPromise;
45
+ },
46
+ };
47
+ }
48
+ // Primitive components — translated by the reconciler
49
+ function Box({ style, children, ...flatProps }) {
50
+ // Merge flat layout props into style
51
+ const mergedStyle = { ...flatProps, ...style };
52
+ return react_1.default.createElement('arc-box', { style: mergedStyle }, children);
53
+ }
54
+ function Text({ color, bold, dim, dimColor, italic, underline, inverse, children }) {
55
+ // dimColor is an ink-compat alias for dim
56
+ const resolvedDim = dim ?? dimColor;
57
+ return react_1.default.createElement('arc-text', { color, bold, dim: resolvedDim, italic, underline, inverse }, children);
58
+ }
59
+ //# sourceMappingURL=ink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ink.js","sourceRoot":"","sources":["../../src/renderer/ink.ts"],"names":[],"mappings":";;;;;AAsBA,wBAsCC;AASD,kBAIC;AAaD,oBAIC;AA1FD,kDAA0B;AAC1B,mDAA0D;AAC1D,qCAA+C;AAC/C,uCAA+C;AAC/C,uCAAiC;AACjC,+CAA6C;AAC7C,uCAA6C;AAgB7C,SAAgB,MAAM,CAAC,IAAwB,EAAE,UAAyB,EAAE;IAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAK,MAAiD,CAAC,IAAI,IAAI,EAAE,CAAC;IAC3F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAK,MAAoD,CAAC,OAAO,IAAI,EAAE,CAAC;IAEjG,IAAI,UAAU,GAAU,IAAA,qBAAW,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,SAAS,GAAY,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;IAE9C,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,0BAAgB,EAAC,GAAG,EAAE;QACzC,uDAAuD;QACvD,MAAM,SAAS,GAAG,IAAA,qBAAW,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAA,cAAI,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAA,0BAAY,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9B,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAA,2BAAW,EAAC,QAAQ,CAAC,CAAC;IAEtB,0FAA0F;IAC1F,MAAM,SAAS,GAAG,0BAAU,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAExE,0BAAU,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAExD,IAAI,WAAwB,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,OAAO;QACL,MAAM,CAAC,OAA2B;YAChC,0BAAU,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO;YACL,0BAAU,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACxD,WAAW,EAAE,CAAC;QAChB,CAAC;QACD,aAAa;YACX,OAAO,WAAW,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC;AAQD,sDAAsD;AACtD,SAAgB,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAY;IAC7D,qCAAqC;IACrC,MAAM,WAAW,GAAa,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,EAAE,CAAC;IACzD,OAAO,eAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC1E,CAAC;AAaD,SAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAa;IAClG,0CAA0C;IAC1C,MAAM,WAAW,GAAG,GAAG,IAAI,QAAQ,CAAC;IACpC,OAAO,eAAK,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAClH,CAAC"}