@punkestu/react-html 0.1.0 → 0.1.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 (88) hide show
  1. package/dist/cli/docs-content.d.ts +8 -0
  2. package/dist/cli/docs-content.d.ts.map +1 -0
  3. package/dist/cli/docs-content.js +261 -0
  4. package/dist/cli/docs-content.js.map +1 -0
  5. package/dist/cli/index.d.ts +2 -0
  6. package/dist/cli/index.d.ts.map +1 -0
  7. package/dist/cli/index.js +113 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/cli/tui-docs.d.ts +5 -0
  10. package/dist/cli/tui-docs.d.ts.map +1 -0
  11. package/dist/cli/tui-docs.js +191 -0
  12. package/dist/cli/tui-docs.js.map +1 -0
  13. package/dist/client/hydrate.d.ts +4 -0
  14. package/dist/client/hydrate.d.ts.map +1 -0
  15. package/dist/client/hydrate.js +80 -0
  16. package/dist/client/hydrate.js.map +1 -0
  17. package/dist/core/bundler.d.ts +7 -0
  18. package/dist/core/bundler.d.ts.map +1 -0
  19. package/dist/core/bundler.js +103 -0
  20. package/dist/core/bundler.js.map +1 -0
  21. package/dist/core/formatter.d.ts +6 -0
  22. package/dist/core/formatter.d.ts.map +1 -0
  23. package/dist/core/formatter.js +74 -0
  24. package/dist/core/formatter.js.map +1 -0
  25. package/dist/core/island-client.d.ts +9 -0
  26. package/dist/core/island-client.d.ts.map +1 -0
  27. package/dist/core/island-client.js +8 -0
  28. package/dist/core/island-client.js.map +1 -0
  29. package/dist/core/island-registry.d.ts +15 -0
  30. package/dist/core/island-registry.d.ts.map +1 -0
  31. package/dist/core/island-registry.js +17 -0
  32. package/dist/core/island-registry.js.map +1 -0
  33. package/dist/core/island.d.ts +32 -0
  34. package/dist/core/island.d.ts.map +1 -0
  35. package/dist/core/island.js +47 -0
  36. package/dist/core/island.js.map +1 -0
  37. package/dist/core/loader.d.ts +11 -0
  38. package/dist/core/loader.d.ts.map +1 -0
  39. package/dist/core/loader.js +73 -0
  40. package/dist/core/loader.js.map +1 -0
  41. package/dist/core/renderer.d.ts +20 -0
  42. package/dist/core/renderer.d.ts.map +1 -0
  43. package/dist/core/renderer.js +53 -0
  44. package/dist/core/renderer.js.map +1 -0
  45. package/dist/index.d.ts +23 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +104 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/server/dev-server.d.ts +8 -0
  50. package/dist/server/dev-server.d.ts.map +1 -0
  51. package/dist/server/dev-server.js +112 -0
  52. package/dist/server/dev-server.js.map +1 -0
  53. package/dist/server/engine.d.ts +46 -0
  54. package/dist/server/engine.d.ts.map +1 -0
  55. package/dist/server/engine.js +222 -0
  56. package/dist/server/engine.js.map +1 -0
  57. package/{src/server/index.ts → dist/server/index.d.ts} +1 -1
  58. package/dist/server/index.d.ts.map +1 -0
  59. package/dist/server/index.js +3 -0
  60. package/dist/server/index.js.map +1 -0
  61. package/package.json +4 -1
  62. package/.react-html/cache/page-fefe905ae5d2.mjs +0 -9
  63. package/DOCS.md +0 -317
  64. package/example/public/styles.css +0 -184
  65. package/example/src/components/Card.tsx +0 -17
  66. package/example/src/components/Counter.island.tsx +0 -35
  67. package/example/src/components/Footer.tsx +0 -13
  68. package/example/src/components/Header.tsx +0 -20
  69. package/example/src/components/Layout.tsx +0 -39
  70. package/example/src/components/Tabs.island.tsx +0 -59
  71. package/example/src/pages/index.tsx +0 -49
  72. package/example/src/pages/pure.tsx +0 -56
  73. package/src/cli/docs-content.ts +0 -268
  74. package/src/cli/index.ts +0 -113
  75. package/src/cli/tui-docs.ts +0 -214
  76. package/src/client/hydrate.ts +0 -84
  77. package/src/core/bundler.ts +0 -122
  78. package/src/core/formatter.ts +0 -92
  79. package/src/core/island-client.ts +0 -23
  80. package/src/core/island-registry.ts +0 -35
  81. package/src/core/island.tsx +0 -110
  82. package/src/core/loader.ts +0 -89
  83. package/src/core/renderer.ts +0 -80
  84. package/src/index.ts +0 -138
  85. package/src/server/dev-server.ts +0 -125
  86. package/src/server/engine.ts +0 -270
  87. package/tests/engine.test.mjs +0 -288
  88. package/tsconfig.json +0 -21
@@ -0,0 +1,8 @@
1
+ export interface DocSection {
2
+ id: string;
3
+ title: string;
4
+ summary: string;
5
+ content: string[];
6
+ }
7
+ export declare const DOC_SECTIONS: DocSection[];
8
+ //# sourceMappingURL=docs-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-content.d.ts","sourceRoot":"","sources":["../../src/cli/docs-content.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,eAAO,MAAM,YAAY,EAAE,UAAU,EAmQpC,CAAC"}
@@ -0,0 +1,261 @@
1
+ export const DOC_SECTIONS = [
2
+ {
3
+ id: 'intro',
4
+ title: '1. Overview & Philosophy',
5
+ summary: 'Core concepts: pure HTML output, zero-JS by default, and modular JSX.',
6
+ content: [
7
+ '# 1. Overview & Philosophy',
8
+ '',
9
+ 'react-html bridges the gap between modern component-based developer experience',
10
+ 'and lightweight, blazing-fast static websites.',
11
+ '',
12
+ '* ZERO JAVASCRIPT BY DEFAULT:',
13
+ ' Standard components (layouts, navigation, typography, cards, footers) render into',
14
+ ' 100% clean, semantic HTML5. No React runtime, no data-reactroot attributes,',
15
+ ' and 0 KB JavaScript sent to the browser.',
16
+ '',
17
+ '* MODULAR & DRY (DON\'T REPEAT YOURSELF):',
18
+ ' Eliminate copy-pasting HTML boilerplate. Compose pages with reusable React',
19
+ ' components (<Layout>, <Header>, <Card>, <Footer>) with typed props.',
20
+ '',
21
+ '* SELECTIVE REACTIVITY (ISLANDS ARCHITECTURE):',
22
+ ' Only components that explicitly require client-side interactivity are bundled',
23
+ ' into isolated, tiny JavaScript files. Everything around them remains pure HTML.'
24
+ ]
25
+ },
26
+ {
27
+ id: 'quickstart',
28
+ title: '2. Getting Started & Setup',
29
+ summary: 'Installation, Node.js environment, and initial directory structure.',
30
+ content: [
31
+ '# 2. Getting Started & Setup',
32
+ '',
33
+ '* PREREQUISITES:',
34
+ ' - Node.js v20.0.0 or higher (runs natively on standard Node.js & npm)',
35
+ '',
36
+ '* INSTALLATION:',
37
+ ' $ npm install react-html',
38
+ '',
39
+ '* RECOMMENDED PROJECT STRUCTURE:',
40
+ ' my-project/',
41
+ ' ├── package.json',
42
+ ' ├── public/ # Static assets (CSS, images, icons)',
43
+ ' │ └── styles.css',
44
+ ' └── src/',
45
+ ' ├── components/ # Reusable UI components',
46
+ ' │ ├── Layout.tsx # Master HTML shell',
47
+ ' │ ├── Header.tsx # Navigation bar',
48
+ ' │ └── Counter.island.tsx # Interactive island component',
49
+ ' └── pages/ # Multi-page entries',
50
+ ' ├── index.tsx # -> dist/index.html',
51
+ ' ├── about.tsx # -> dist/about.html',
52
+ ' └── blog/',
53
+ ' └── first.tsx # -> dist/blog/first.html'
54
+ ]
55
+ },
56
+ {
57
+ id: 'modular-html',
58
+ title: '3. Modular HTML with React',
59
+ summary: 'Creating reusable layouts, header partials, and nested components.',
60
+ content: [
61
+ '# 3. Modular HTML with React',
62
+ '',
63
+ 'Stop repeating HTML boilerplate. Create a single Layout component:',
64
+ '',
65
+ '// src/components/Layout.tsx',
66
+ 'import React, { ReactNode } from "react";',
67
+ 'import { Header } from "./Header.js";',
68
+ 'import { Footer } from "./Footer.js";',
69
+ '',
70
+ 'export function Layout({ title, children }: { title: string; children: ReactNode }) {',
71
+ ' return (',
72
+ ' <html lang="en">',
73
+ ' <head>',
74
+ ' <meta charSet="UTF-8" />',
75
+ ' <meta name="viewport" content="width=device-width, initial-scale=1.0" />',
76
+ ' <title>{title}</title>',
77
+ ' <link rel="stylesheet" href="/styles.css" />',
78
+ ' </head>',
79
+ ' <body>',
80
+ ' <Header />',
81
+ ' <main>{children}</main>',
82
+ ' <Footer />',
83
+ ' </body>',
84
+ ' </html>',
85
+ ' );',
86
+ '}',
87
+ '',
88
+ 'Every page simply wraps its content in <Layout>: no copy-pasting required!'
89
+ ]
90
+ },
91
+ {
92
+ id: 'islands',
93
+ title: '4. Reactive Islands Architecture',
94
+ summary: 'Compiling interactive React components to tiny client-side JavaScript.',
95
+ content: [
96
+ '# 4. Reactive Islands Architecture',
97
+ '',
98
+ 'When you need client-side state (useState, useEffect, event listeners):',
99
+ '',
100
+ '1. Create the component and wrap it using island():',
101
+ '// src/components/Counter.island.tsx',
102
+ 'import React, { useState } from "react";',
103
+ 'import { island } from "react-html";',
104
+ '',
105
+ 'function CounterComponent({ initial = 0 }) {',
106
+ ' const [count, setCount] = useState(initial);',
107
+ ' return (',
108
+ ' <button onClick={() => setCount(c => c + 1)}>Count: {count}</button>',
109
+ ' );',
110
+ '}',
111
+ '',
112
+ 'export const Counter = island(CounterComponent, import.meta.url, "Counter");',
113
+ 'export default Counter;',
114
+ '',
115
+ '2. Use it in any page just like a normal React component:',
116
+ '// src/pages/index.tsx',
117
+ '<Counter initial={10} />',
118
+ '',
119
+ '* HOW THE ENGINE COMPILES IT:',
120
+ ' - Initial HTML is pre-rendered for instant paint and SEO.',
121
+ ' - esbuild bundles ONLY CounterComponent into dist/assets/islands/Counter.js.',
122
+ ' - Only pages containing <Counter> will have the <script> tag injected.'
123
+ ]
124
+ },
125
+ {
126
+ id: 'directives',
127
+ title: '5. Hydration Directives (Performance)',
128
+ summary: 'Controlling client hydration timing with load, idle, and visible.',
129
+ content: [
130
+ '# 5. Hydration Directives (Performance)',
131
+ '',
132
+ 'Control when JavaScript executes on the user\'s device with the `client` prop:',
133
+ '',
134
+ '* client="load" (Default):',
135
+ ' <Counter client="load" />',
136
+ ' Hydrates as soon as DOMContentLoaded fires. Use for critical UI above the fold.',
137
+ '',
138
+ '* client="idle":',
139
+ ' <Counter client="idle" />',
140
+ ' Hydrates during browser idle time via requestIdleCallback. Perfect for widgets',
141
+ ' or floating elements that do not block immediate interaction.',
142
+ '',
143
+ '* client="visible":',
144
+ ' <Counter client="visible" />',
145
+ ' Hydrates only when scrolled into the viewport using IntersectionObserver.',
146
+ ' Ideal for carousels, comment sections, or widgets further down the page.'
147
+ ]
148
+ },
149
+ {
150
+ id: 'cli',
151
+ title: '6. CLI Commands & Options',
152
+ summary: 'Full guide for build, dev, and docs commands.',
153
+ content: [
154
+ '# 6. CLI Commands & Options',
155
+ '',
156
+ '* BUILD PRODUCTION STATIC SITE:',
157
+ ' $ react-html build [options]',
158
+ ' Flags:',
159
+ ' --pages <dir> Directory containing pages (default: src/pages or pages)',
160
+ ' --out <dir> Output directory (default: dist)',
161
+ ' --root <dir> Root directory of the project (default: cwd)',
162
+ ' --no-minify Disable JS minification for debugging',
163
+ '',
164
+ '* START DEV SERVER (LIVE PREVIEW & WATCH):',
165
+ ' $ react-html dev [options]',
166
+ ' Flags:',
167
+ ' --port <number> Port to listen on (default: 3000)',
168
+ ' --host <string> Host to bind to (default: localhost)',
169
+ '',
170
+ '* TERMINAL UI DOCUMENTATION (TUI):',
171
+ ' $ react-html docs # Interactive TUI navigator',
172
+ ' $ react-html docs --all # Print entire manual to stdout',
173
+ ' $ react-html docs <section-id> # Print specific section'
174
+ ]
175
+ },
176
+ {
177
+ id: 'api',
178
+ title: '7. Programmatic API Reference',
179
+ summary: 'Using build(), renderPageToHtml(), and createDevServer() in Node.js.',
180
+ content: [
181
+ '# 7. Programmatic API Reference',
182
+ '',
183
+ 'import { build, renderPageToHtml, island, Island } from "react-html";',
184
+ '',
185
+ '* build(config):',
186
+ ' const result = await build({',
187
+ ' root: process.cwd(),',
188
+ ' pagesDir: "src/pages",',
189
+ ' outDir: "dist",',
190
+ ' minify: true',
191
+ ' });',
192
+ ' // Returns: { pages: [...], islands: [...], outDir: string }',
193
+ '',
194
+ '* renderPageToHtml({ pagePath, Component, props, metadata }):',
195
+ ' const { html, islands } = renderPageToHtml({',
196
+ ' pagePath: "/path/to/page.tsx",',
197
+ ' Component: MyPage,',
198
+ ' metadata: { title: "Custom Title" }',
199
+ ' });',
200
+ ' // Returns pure HTML string and list of detected islands.'
201
+ ]
202
+ },
203
+ {
204
+ id: 'server',
205
+ title: '8. Server App Integration (Express, Fastify, Node HTTP)',
206
+ summary: 'Using createEngine() for production static hosting and development live rebuilds.',
207
+ content: [
208
+ '# 8. Server App Integration (Express, Fastify, Node HTTP)',
209
+ '',
210
+ 'You can import and use react-html directly inside your backend server application:',
211
+ '',
212
+ 'import express from "express";',
213
+ 'import { createEngine } from "react-html";',
214
+ '// or: import { createEngine } from "react-html/server";',
215
+ '',
216
+ 'const app = express();',
217
+ 'const engine = createEngine({',
218
+ ' pagesDir: "src/pages",',
219
+ ' distDir: "dist",',
220
+ ' // Automatically checks process.env.NODE_ENV === "production"',
221
+ '});',
222
+ '',
223
+ '* 1. CONNECT / EXPRESS MIDDLEWARE:',
224
+ ' app.use(engine.middleware);',
225
+ ' // In production: finds and streams pre-built static HTML from dist/.',
226
+ ' // In development: dynamically rebuilds TSX on the fly and returns fresh HTML.',
227
+ '',
228
+ '* 2. PROGRAMMATIC ROUTE RENDERING:',
229
+ ' app.get("/custom", async (req, res) => {',
230
+ ' const html = await engine.render("index", { user: req.user });',
231
+ ' res.setHeader("Content-Type", "text/html; charset=utf-8");',
232
+ ' res.send(html);',
233
+ ' });',
234
+ '',
235
+ '* 3. NATIVE NODE HTTP SERVER:',
236
+ ' import http from "node:http";',
237
+ ' const server = http.createServer(engine.handle);',
238
+ ' server.listen(3000);'
239
+ ]
240
+ },
241
+ {
242
+ id: 'troubleshooting',
243
+ title: '9. Best Practices & Troubleshooting',
244
+ summary: 'Avoiding hydration mismatch, React error #418, and styling rules.',
245
+ content: [
246
+ '# 8. Best Practices & Troubleshooting',
247
+ '',
248
+ '* PREVENTING HYDRATION MISMATCH (React Error #418):',
249
+ ' - Ensure server and initial client props match.',
250
+ ' - Do not use client-only objects (window.innerWidth, localStorage) in initial render.',
251
+ ' Instead, read them inside useEffect() or an event handler.',
252
+ ' - react-html automatically protects island markup during formatting and uses',
253
+ ' renderToString for interactive inner trees to guarantee matching text nodes.',
254
+ '',
255
+ '* ISOLATE STATEFUL LOGIC:',
256
+ ' Keep non-interactive parts (headers, card shells, footers) pure React components.',
257
+ ' Only place state hooks (useState, useReducer) inside *.island.tsx files.'
258
+ ]
259
+ }
260
+ ];
261
+ //# sourceMappingURL=docs-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-content.js","sourceRoot":"","sources":["../../src/cli/docs-content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runCli(args?: string[]): Promise<void>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAKA,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGlF"}
@@ -0,0 +1,113 @@
1
+ import path from 'node:path';
2
+ import { build } from '../index.js';
3
+ import { createDevServer } from '../server/dev-server.js';
4
+ import { launchDocsTui } from './tui-docs.js';
5
+ export async function runCli(args = process.argv.slice(2)) {
6
+ const command = args[0] || 'help';
7
+ function getArgValue(flag) {
8
+ const idx = args.indexOf(flag);
9
+ return idx !== -1 && args[idx + 1] ? args[idx + 1] : undefined;
10
+ }
11
+ const hasFlag = (flag) => args.includes(flag);
12
+ if (hasFlag('--help') || hasFlag('-h') || command === 'help') {
13
+ console.log(`
14
+ react-html - Engine to convert React to pure HTML with reactive islands
15
+
16
+ Usage:
17
+ react-html <command> [options]
18
+
19
+ Commands:
20
+ build Compile pages into pure HTML & bundle reactive islands
21
+ dev Start live preview development server with auto-rebuild
22
+ docs Browse interactive documentation in Terminal UI (TUI)
23
+ help Show this help message
24
+
25
+ Options:
26
+ --pages <dir> Pages directory (default: src/pages or pages)
27
+ --out <dir> Output directory (default: dist)
28
+ --port <number> Dev server port (default: 3000)
29
+ --host <string> Dev server host (default: localhost)
30
+ --no-minify Disable minification for island bundles
31
+ --root <path> Project root directory (default: cwd)
32
+
33
+ Docs Options:
34
+ react-html docs Launch interactive Terminal UI
35
+ react-html docs --all Print complete manual to terminal
36
+ react-html docs <section> Print a specific section (e.g. islands, api, cli)
37
+ `);
38
+ return;
39
+ }
40
+ if (hasFlag('--version') || hasFlag('-v')) {
41
+ console.log(`react-html v0.1.0`);
42
+ return;
43
+ }
44
+ const root = getArgValue('--root') || process.cwd();
45
+ const pagesDir = getArgValue('--pages');
46
+ const outDir = getArgValue('--out') || 'dist';
47
+ const minify = !hasFlag('--no-minify');
48
+ if (command === 'build') {
49
+ console.log(`\n🚀 [react-html] Building static site...`);
50
+ const startTime = Date.now();
51
+ try {
52
+ const result = await build({
53
+ root,
54
+ pagesDir,
55
+ outDir,
56
+ minify
57
+ });
58
+ console.log(`✅ [react-html] Build successful in ${Date.now() - startTime}ms`);
59
+ console.log(`📄 Pages compiled (${result.pages.length}):`);
60
+ result.pages.forEach(p => {
61
+ console.log(` - ${path.relative(root, p.output)}`);
62
+ });
63
+ if (result.islands.length > 0) {
64
+ console.log(`🏝️ Reactive islands bundled (${result.islands.length}):`);
65
+ result.islands.forEach(isl => {
66
+ console.log(` - ${path.relative(root, isl)}`);
67
+ });
68
+ }
69
+ else {
70
+ console.log(`✨ Pure 100% HTML generated (0 KB JavaScript overhead)`);
71
+ }
72
+ }
73
+ catch (err) {
74
+ console.error(`❌ [react-html] Build failed:`, err?.message || err);
75
+ process.exit(1);
76
+ }
77
+ }
78
+ else if (command === 'dev') {
79
+ const port = parseInt(getArgValue('--port') || '3000', 10);
80
+ const host = getArgValue('--host') || 'localhost';
81
+ try {
82
+ await createDevServer({
83
+ root,
84
+ pagesDir,
85
+ outDir,
86
+ port,
87
+ host
88
+ });
89
+ }
90
+ catch (err) {
91
+ console.error(`❌ [react-html] Dev server failed:`, err?.message || err);
92
+ process.exit(1);
93
+ }
94
+ }
95
+ else if (command === 'docs') {
96
+ try {
97
+ await launchDocsTui(args[1]);
98
+ }
99
+ catch (err) {
100
+ console.error(`❌ [react-html] Docs error:`, err?.message || err);
101
+ process.exit(1);
102
+ }
103
+ }
104
+ else {
105
+ console.error(`Unknown command "${command}". Run "react-html --help" for available commands.`);
106
+ process.exit(1);
107
+ }
108
+ }
109
+ // Direct invocation check
110
+ if (import.meta.url === `file://${process.argv[1]}`) {
111
+ runCli();
112
+ }
113
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { DocSection } from './docs-content.js';
2
+ export declare function printSectionDirect(section: DocSection): void;
3
+ export declare function printAllDocs(): void;
4
+ export declare function launchDocsTui(initialArg?: string): Promise<void>;
5
+ //# sourceMappingURL=tui-docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-docs.d.ts","sourceRoot":"","sources":["../../src/cli/tui-docs.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAgC7D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAM5D;AAED,wBAAgB,YAAY,IAAI,IAAI,CAQnC;AAED,wBAAsB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiKtE"}
@@ -0,0 +1,191 @@
1
+ import readline from 'node:readline';
2
+ import { DOC_SECTIONS } from './docs-content.js';
3
+ // ANSI escape sequences
4
+ const CLEAR = '\x1b[2J\x1b[H';
5
+ const HIDE_CURSOR = '\x1b[?25l';
6
+ const SHOW_CURSOR = '\x1b[?25h';
7
+ const BOLD = '\x1b[1m';
8
+ const DIM = '\x1b[2m';
9
+ const RESET = '\x1b[0m';
10
+ const CYAN = '\x1b[36m';
11
+ const GREEN = '\x1b[32m';
12
+ const YELLOW = '\x1b[33m';
13
+ const BLUE = '\x1b[34m';
14
+ const MAGENTA = '\x1b[35m';
15
+ const INVERT = '\x1b[7m';
16
+ function formatLine(line) {
17
+ if (line.startsWith('# ')) {
18
+ return `${BOLD}${CYAN}${line}${RESET}`;
19
+ }
20
+ if (line.startsWith('* ')) {
21
+ return `${BOLD}${GREEN}${line}${RESET}`;
22
+ }
23
+ if (line.startsWith('//') || line.startsWith(' $ ')) {
24
+ return `${YELLOW}${line}${RESET}`;
25
+ }
26
+ if (line.includes('├──') || line.includes('└──') || line.includes('│')) {
27
+ return `${DIM}${line}${RESET}`;
28
+ }
29
+ return line;
30
+ }
31
+ export function printSectionDirect(section) {
32
+ console.log(`\n${BOLD}${CYAN}=== ${section.title} ===${RESET}\n`);
33
+ for (const line of section.content) {
34
+ console.log(formatLine(line));
35
+ }
36
+ console.log('');
37
+ }
38
+ export function printAllDocs() {
39
+ console.log(`\n${BOLD}${CYAN}====================================================${RESET}`);
40
+ console.log(`${BOLD}${CYAN} ⚛️ REACT-HTML COMPLETE MANUAL ${RESET}`);
41
+ console.log(`${BOLD}${CYAN}====================================================${RESET}\n`);
42
+ for (const sec of DOC_SECTIONS) {
43
+ printSectionDirect(sec);
44
+ console.log(`${DIM}${'─'.repeat(60)}${RESET}\n`);
45
+ }
46
+ }
47
+ export async function launchDocsTui(initialArg) {
48
+ // If specific section or --all requested non-interactively
49
+ if (initialArg === '--all' || initialArg === '-a') {
50
+ printAllDocs();
51
+ return;
52
+ }
53
+ if (initialArg) {
54
+ const match = DOC_SECTIONS.find((s, idx) => s.id.toLowerCase() === initialArg.toLowerCase() ||
55
+ String(idx + 1) === initialArg ||
56
+ s.title.toLowerCase().includes(initialArg.toLowerCase()));
57
+ if (match) {
58
+ printSectionDirect(match);
59
+ return;
60
+ }
61
+ }
62
+ // Non-TTY fallback
63
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
64
+ printAllDocs();
65
+ return;
66
+ }
67
+ let selectedIndex = 0;
68
+ let viewMode = 'menu';
69
+ let scrollOffset = 0;
70
+ readline.emitKeypressEvents(process.stdin);
71
+ process.stdin.setRawMode(true);
72
+ process.stdout.write(HIDE_CURSOR);
73
+ function cleanup() {
74
+ process.stdout.write(SHOW_CURSOR);
75
+ if (process.stdin.isTTY) {
76
+ process.stdin.setRawMode(false);
77
+ }
78
+ process.stdin.pause();
79
+ console.clear();
80
+ }
81
+ function renderMenu() {
82
+ const termWidth = Math.max(process.stdout.columns || 80, 60);
83
+ const border = '═'.repeat(Math.min(termWidth - 2, 70));
84
+ let out = CLEAR;
85
+ out += `${CYAN}╔${border}╗${RESET}\n`;
86
+ out += `${CYAN}║${BOLD} ⚛️ REACT-HTML TERMINAL DOCUMENTATION (TUI) ${RESET}${CYAN}║${RESET}\n`;
87
+ out += `${CYAN}║${DIM} Modular pure HTML with selective reactive islands compilation ${RESET}${CYAN}║${RESET}\n`;
88
+ out += `${CYAN}╚${border}╝${RESET}\n\n`;
89
+ out += `${BOLD}Select a topic using arrow keys and press [Enter]:${RESET}\n\n`;
90
+ DOC_SECTIONS.forEach((sec, idx) => {
91
+ const isSelected = idx === selectedIndex;
92
+ if (isSelected) {
93
+ out += ` ${BOLD}${CYAN}▶ ${INVERT} ${sec.title} ${RESET}\n`;
94
+ out += ` ${DIM}${sec.summary}${RESET}\n\n`;
95
+ }
96
+ else {
97
+ out += ` ${BOLD}${sec.title}${RESET}\n`;
98
+ out += ` ${DIM}${sec.summary}${RESET}\n\n`;
99
+ }
100
+ });
101
+ out += `\n${DIM}${'─'.repeat(Math.min(termWidth - 2, 70))}${RESET}\n`;
102
+ out += `${BOLD}[↑/↓ or j/k]${RESET} Navigate ${BOLD}[Enter]${RESET} Read ${BOLD}[q / Ctrl+C]${RESET} Exit\n`;
103
+ process.stdout.write(out);
104
+ }
105
+ function renderReader() {
106
+ const sec = DOC_SECTIONS[selectedIndex];
107
+ const termHeight = Math.max(process.stdout.rows || 24, 15);
108
+ const termWidth = Math.max(process.stdout.columns || 80, 60);
109
+ const contentRows = termHeight - 8;
110
+ const visibleLines = sec.content.slice(scrollOffset, scrollOffset + contentRows);
111
+ let out = CLEAR;
112
+ out += `${CYAN}${BOLD}⚛️ react-html :: ${sec.title}${RESET}\n`;
113
+ out += `${DIM}${'═'.repeat(Math.min(termWidth - 2, 70))}${RESET}\n\n`;
114
+ for (const line of visibleLines) {
115
+ out += formatLine(line) + '\n';
116
+ }
117
+ // Fill blank lines if content is short
118
+ for (let i = visibleLines.length; i < contentRows; i++) {
119
+ out += '\n';
120
+ }
121
+ const maxScroll = Math.max(0, sec.content.length - contentRows);
122
+ const scrollInfo = maxScroll > 0 ? ` [Line ${scrollOffset + 1}/${sec.content.length}]` : '';
123
+ out += `\n${DIM}${'─'.repeat(Math.min(termWidth - 2, 70))}${RESET}\n`;
124
+ out += `${BOLD}[↑/↓ or j/k]${RESET} Scroll${scrollInfo} ${BOLD}[b / Esc]${RESET} Back to Menu ${BOLD}[q]${RESET} Quit\n`;
125
+ process.stdout.write(out);
126
+ }
127
+ function draw() {
128
+ if (viewMode === 'menu') {
129
+ renderMenu();
130
+ }
131
+ else {
132
+ renderReader();
133
+ }
134
+ }
135
+ draw();
136
+ return new Promise((resolve) => {
137
+ process.stdin.on('keypress', (str, key) => {
138
+ if ((key.ctrl && key.name === 'c') || key.name === 'q') {
139
+ cleanup();
140
+ resolve();
141
+ return;
142
+ }
143
+ if (viewMode === 'menu') {
144
+ if (key.name === 'up' || key.name === 'k') {
145
+ selectedIndex = (selectedIndex - 1 + DOC_SECTIONS.length) % DOC_SECTIONS.length;
146
+ draw();
147
+ }
148
+ else if (key.name === 'down' || key.name === 'j') {
149
+ selectedIndex = (selectedIndex + 1) % DOC_SECTIONS.length;
150
+ draw();
151
+ }
152
+ else if (key.name === 'return' || key.name === 'space') {
153
+ viewMode = 'reader';
154
+ scrollOffset = 0;
155
+ draw();
156
+ }
157
+ }
158
+ else if (viewMode === 'reader') {
159
+ const sec = DOC_SECTIONS[selectedIndex];
160
+ const termHeight = Math.max(process.stdout.rows || 24, 15);
161
+ const contentRows = termHeight - 8;
162
+ const maxScroll = Math.max(0, sec.content.length - contentRows);
163
+ if (key.name === 'escape' || key.name === 'b' || key.name === 'backspace') {
164
+ viewMode = 'menu';
165
+ draw();
166
+ }
167
+ else if (key.name === 'up' || key.name === 'k') {
168
+ if (scrollOffset > 0) {
169
+ scrollOffset--;
170
+ draw();
171
+ }
172
+ }
173
+ else if (key.name === 'down' || key.name === 'j') {
174
+ if (scrollOffset < maxScroll) {
175
+ scrollOffset++;
176
+ draw();
177
+ }
178
+ }
179
+ else if (key.name === 'pageup') {
180
+ scrollOffset = Math.max(0, scrollOffset - 5);
181
+ draw();
182
+ }
183
+ else if (key.name === 'pagedown') {
184
+ scrollOffset = Math.min(maxScroll, scrollOffset + 5);
185
+ draw();
186
+ }
187
+ }
188
+ });
189
+ });
190
+ }
191
+ //# sourceMappingURL=tui-docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-docs.js","sourceRoot":"","sources":["../../src/cli/tui-docs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ComponentType } from 'react';
2
+ export type ClientDirective = 'load' | 'idle' | 'visible';
3
+ export declare function hydrateIsland(islandName: string, Component: ComponentType<any>): void;
4
+ //# sourceMappingURL=hydrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../src/client/hydrate.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG7C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAE1D,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,GAC5B,IAAI,CA2EN"}