create-rezi 0.1.0-alpha.3 → 0.1.0-alpha.30

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 (81) hide show
  1. package/README.md +47 -10
  2. package/dist/index.js +54 -16
  3. package/dist/index.js.map +1 -1
  4. package/dist/scaffold.d.ts +4 -1
  5. package/dist/scaffold.d.ts.map +1 -1
  6. package/dist/scaffold.js +70 -34
  7. package/dist/scaffold.js.map +1 -1
  8. package/package.json +8 -5
  9. package/templates/animation-lab/README.md +43 -0
  10. package/templates/{file-browser → animation-lab}/package.json +5 -3
  11. package/templates/animation-lab/src/__tests__/keybindings.test.ts +13 -0
  12. package/templates/animation-lab/src/__tests__/reducer.test.ts +41 -0
  13. package/templates/animation-lab/src/__tests__/render.test.ts +15 -0
  14. package/templates/animation-lab/src/helpers/keybindings.ts +30 -0
  15. package/templates/animation-lab/src/helpers/state.ts +159 -0
  16. package/templates/animation-lab/src/main.ts +186 -0
  17. package/templates/animation-lab/src/screens/reactor-lab.ts +763 -0
  18. package/templates/animation-lab/src/theme.ts +3 -0
  19. package/templates/animation-lab/src/types.ts +29 -0
  20. package/templates/cli-tool/README.md +67 -0
  21. package/templates/cli-tool/package.json +25 -0
  22. package/templates/cli-tool/src/__tests__/keybindings.test.ts +12 -0
  23. package/templates/cli-tool/src/__tests__/reducer.test.ts +18 -0
  24. package/templates/cli-tool/src/__tests__/render.test.ts +13 -0
  25. package/templates/cli-tool/src/helpers/keybindings.ts +28 -0
  26. package/templates/cli-tool/src/helpers/logs.ts +51 -0
  27. package/templates/cli-tool/src/helpers/state.ts +98 -0
  28. package/templates/cli-tool/src/main.ts +175 -0
  29. package/templates/cli-tool/src/screens/home.ts +52 -0
  30. package/templates/cli-tool/src/screens/index.ts +45 -0
  31. package/templates/cli-tool/src/screens/logs.ts +75 -0
  32. package/templates/cli-tool/src/screens/settings.ts +97 -0
  33. package/templates/cli-tool/src/screens/shell.ts +80 -0
  34. package/templates/cli-tool/src/theme.ts +48 -0
  35. package/templates/cli-tool/src/types.ts +31 -0
  36. package/templates/dashboard/README.md +51 -8
  37. package/templates/dashboard/package.json +6 -4
  38. package/templates/dashboard/src/__tests__/keybindings.test.ts +12 -0
  39. package/templates/dashboard/src/__tests__/reducer.test.ts +19 -0
  40. package/templates/dashboard/src/__tests__/render.test.ts +21 -0
  41. package/templates/dashboard/src/__tests__/telemetry.test.ts +48 -0
  42. package/templates/dashboard/src/helpers/formatters.ts +53 -0
  43. package/templates/dashboard/src/helpers/keybindings.ts +27 -0
  44. package/templates/dashboard/src/helpers/state.ts +204 -0
  45. package/templates/dashboard/src/helpers/telemetry.ts +22 -0
  46. package/templates/dashboard/src/main.ts +166 -241
  47. package/templates/dashboard/src/screens/overview.ts +171 -0
  48. package/templates/dashboard/src/theme.ts +51 -0
  49. package/templates/dashboard/src/types.ts +36 -0
  50. package/templates/minimal/README.md +53 -0
  51. package/templates/{form-app → minimal}/package.json +6 -4
  52. package/templates/minimal/src/__tests__/keybindings.test.ts +12 -0
  53. package/templates/minimal/src/__tests__/reducer.test.ts +20 -0
  54. package/templates/minimal/src/__tests__/render.test.ts +24 -0
  55. package/templates/minimal/src/helpers/keybindings.ts +23 -0
  56. package/templates/minimal/src/helpers/state.ts +20 -0
  57. package/templates/minimal/src/main.ts +150 -0
  58. package/templates/minimal/src/screens/main-screen.ts +81 -0
  59. package/templates/minimal/src/theme.ts +31 -0
  60. package/templates/minimal/src/types.ts +15 -0
  61. package/templates/stress-test/README.md +105 -0
  62. package/templates/{streaming-viewer → stress-test}/package.json +5 -3
  63. package/templates/stress-test/src/__tests__/keybindings.test.ts +11 -0
  64. package/templates/stress-test/src/__tests__/reducer.test.ts +11 -0
  65. package/templates/stress-test/src/__tests__/render.test.ts +11 -0
  66. package/templates/stress-test/src/helpers/test-examples.ts +49 -0
  67. package/templates/stress-test/src/main.ts +1636 -0
  68. package/templates/stress-test/tsconfig.json +14 -0
  69. package/dist/__tests__/scaffold.test.d.ts +0 -2
  70. package/dist/__tests__/scaffold.test.d.ts.map +0 -1
  71. package/dist/__tests__/scaffold.test.js +0 -29
  72. package/dist/__tests__/scaffold.test.js.map +0 -1
  73. package/templates/file-browser/README.md +0 -18
  74. package/templates/file-browser/src/main.ts +0 -258
  75. package/templates/form-app/README.md +0 -18
  76. package/templates/form-app/src/main.ts +0 -222
  77. package/templates/streaming-viewer/README.md +0 -17
  78. package/templates/streaming-viewer/src/main.ts +0 -176
  79. /package/templates/{file-browser → animation-lab}/tsconfig.json +0 -0
  80. /package/templates/{form-app → cli-tool}/tsconfig.json +0 -0
  81. /package/templates/{streaming-viewer → minimal}/tsconfig.json +0 -0
package/README.md CHANGED
@@ -7,24 +7,61 @@ Scaffold a new Rezi terminal UI app.
7
7
  ```bash
8
8
  npm create rezi my-app
9
9
  cd my-app
10
- npm start
10
+ npm run start
11
+
12
+ # Bun
13
+ bun create rezi my-app
14
+ cd my-app
15
+ bun run start
11
16
  ```
12
17
 
13
18
  ## Templates
14
19
 
15
- Choose a template interactively, or pass `--template`.
20
+ Currently available templates:
21
+
22
+ - `dashboard` - EdgeOps-style operations console starter
23
+ - Alias: `dash`
24
+ - `stress-test` - Visual benchmark matrix starter
25
+ - Aliases: `stress`, `chaos`, `bench`
26
+ - `cli-tool` - Multi-screen CLI workflow starter with route-based screens
27
+ - Aliases: `cli`, `tool`, `multiscreen`
28
+ - `animation-lab` - Declarative animation playground with responsive reactor visuals
29
+ - Aliases: `animation`, `anim`, `lab`, `motion`
30
+ - `minimal` - Single-screen utility starter for small tools
31
+ - Aliases: `mini`, `basic`, `utility`
16
32
 
17
33
  ```bash
18
34
  npm create rezi my-app -- --template dashboard
19
- npm create rezi my-app -- --template form-app
20
- npm create rezi my-app -- --template file-browser
21
- npm create rezi my-app -- --template streaming-viewer
35
+ npm create rezi my-app -- --template stress-test
36
+ npm create rezi my-app -- --template cli-tool
37
+ npm create rezi my-app -- --template animation-lab
38
+ npm create rezi my-app -- --template minimal
39
+ ```
40
+
41
+ List templates and highlights from the CLI:
42
+
43
+ ```bash
44
+ npm create rezi -- --list-templates
22
45
  ```
23
46
 
24
47
  ## Options
25
48
 
26
- - `--template <name>`: Choose a template.
27
- - `--no-install`: Skip dependency installation.
28
- - `--pm <npm|pnpm|yarn|bun>`: Choose a package manager.
29
- - `--list-templates`: Print available templates.
30
- - `--help`: Show help.
49
+ - `--template, -t <name>`: Select a template (`dashboard`, `stress-test`, `cli-tool`, `animation-lab`, `minimal`, plus aliases).
50
+ - `--no-install, --skip-install`: Skip dependency installation.
51
+ - `--pm, --package-manager <npm|pnpm|yarn|bun>`: Choose a package manager.
52
+ - `--list-templates, --templates`: Print available templates and highlights.
53
+ - `--help, -h`: Show help.
54
+
55
+ ## Template Conventions
56
+
57
+ Scaffolded templates now follow the same baseline structure:
58
+
59
+ - `src/types.ts`
60
+ - `src/theme.ts`
61
+ - `src/helpers/`
62
+ - `src/screens/`
63
+ - `src/main.ts`
64
+ - `src/__tests__/`
65
+
66
+ For template descriptions and highlights, see:
67
+ https://rezitui.dev/docs/getting-started/create-rezi/
package/dist/index.js CHANGED
@@ -63,18 +63,24 @@ function parseArgs(argv) {
63
63
  function printHelp() {
64
64
  stdout.write("create-rezi\n\n");
65
65
  stdout.write("Usage:\n");
66
- stdout.write(" npm create rezi my-app\n\n");
66
+ stdout.write(" npm create rezi my-app\n");
67
+ stdout.write(" bun create rezi my-app\n\n");
67
68
  stdout.write("Options:\n");
68
- stdout.write(" --template, -t <name> Choose a template\n");
69
- stdout.write(" --no-install Skip dependency install\n");
69
+ stdout.write(" --template, -t <name> dashboard | stress-test | cli-tool | animation-lab | minimal\n");
70
+ stdout.write(" --no-install Skip dependency install\n");
70
71
  stdout.write(" --pm <npm|pnpm|yarn|bun> Choose a package manager\n");
71
- stdout.write(" --list-templates Show available templates\n");
72
- stdout.write(" --help, -h Show this help\n");
72
+ stdout.write(" --list-templates Show templates and highlights\n");
73
+ stdout.write(" --help, -h Show this help\n");
73
74
  }
74
75
  function printTemplates() {
75
- stdout.write("Available templates:\n");
76
+ stdout.write("Available templates (--template <name>):\n");
76
77
  TEMPLATE_DEFINITIONS.forEach((template, index) => {
77
- stdout.write(` ${index + 1}. ${template.key.padEnd(16)} ${template.label} - ${template.description}\n`);
78
+ const defaultSuffix = index === 0 ? " (default)" : "";
79
+ const highlights = template.highlights.join(" | ");
80
+ stdout.write(` ${index + 1}. ${template.key.padEnd(16)} ${template.label}${defaultSuffix}\n`);
81
+ stdout.write(` ${template.description}\n`);
82
+ stdout.write(` Safety: ${template.safetyTag} — ${template.safetyNote}\n`);
83
+ stdout.write(` Highlights: ${highlights}\n`);
78
84
  });
79
85
  }
80
86
  function detectPackageManager() {
@@ -105,20 +111,33 @@ async function promptText(rl, prompt, fallback) {
105
111
  return answer.trim() || fallback;
106
112
  }
107
113
  async function promptTemplate(rl) {
108
- stdout.write("\nSelect a template:\n");
114
+ stdout.write("\nSelect a template (name or number):\n");
109
115
  TEMPLATE_DEFINITIONS.forEach((template, index) => {
110
- stdout.write(` ${index + 1}. ${template.label} - ${template.description}\n`);
116
+ const defaultSuffix = index === 0 ? " (default)" : "";
117
+ stdout.write(` ${index + 1}. ${template.key.padEnd(16)} ${template.label}${defaultSuffix}\n`);
118
+ stdout.write(` ${template.description}\n`);
119
+ stdout.write(` Safety: ${template.safetyTag} — ${template.safetyNote}\n`);
120
+ stdout.write(` Highlights: ${template.highlights.join(" | ")}\n`);
111
121
  });
112
- const answer = await rl.question("Template (1-4, default 1): ");
122
+ const answer = await rl.question(`Template (1-${TEMPLATE_DEFINITIONS.length}, default 1): `);
113
123
  const trimmed = answer.trim();
114
- if (!trimmed)
115
- return "dashboard";
124
+ if (!trimmed) {
125
+ return TEMPLATE_DEFINITIONS[0]?.key ?? "dashboard";
126
+ }
116
127
  const asNumber = Number(trimmed);
117
128
  if (!Number.isNaN(asNumber) && asNumber >= 1 && asNumber <= TEMPLATE_DEFINITIONS.length) {
118
- return TEMPLATE_DEFINITIONS[asNumber - 1]?.key ?? "dashboard";
129
+ return TEMPLATE_DEFINITIONS[asNumber - 1]?.key ?? TEMPLATE_DEFINITIONS[0]?.key ?? "dashboard";
119
130
  }
120
131
  return trimmed;
121
132
  }
133
+ async function confirmStressTemplate(rl) {
134
+ stdout.write("\nSafety check for stress-test template:\n");
135
+ stdout.write(" - This template intentionally drives heavy CPU and optional disk I/O load.\n");
136
+ stdout.write(" - Turbo/write-flood modes increase system pressure.\n");
137
+ const answer = await rl.question("Continue with stress-test? (y/N): ");
138
+ const normalized = answer.trim().toLowerCase();
139
+ return normalized === "y" || normalized === "yes";
140
+ }
122
141
  function runInstall(pm, targetDir) {
123
142
  const res = spawnSync(pm, ["install"], {
124
143
  cwd: targetDir,
@@ -129,18 +148,23 @@ function runInstall(pm, targetDir) {
129
148
  }
130
149
  }
131
150
  function printNextSteps(targetDir, packageManager, installRan) {
151
+ const installCommand = `${packageManager} install`;
152
+ const startCommand = packageManager === "npm" || packageManager === "bun"
153
+ ? `${packageManager} run start`
154
+ : `${packageManager} start`;
132
155
  const rel = relative(cwd(), resolve(targetDir)) || ".";
133
156
  stdout.write("\nNext steps:\n");
134
157
  if (rel !== ".") {
135
158
  stdout.write(` cd ${rel}\n`);
136
159
  }
137
160
  if (!installRan) {
138
- stdout.write(` ${packageManager} install\n`);
161
+ stdout.write(` ${installCommand}\n`);
139
162
  }
140
- stdout.write(` ${packageManager} start\n`);
163
+ stdout.write(` ${startCommand}\n`);
141
164
  }
142
165
  async function main() {
143
166
  const options = parseArgs(process.argv.slice(2));
167
+ const isInteractive = Boolean(stdin.isTTY && stdout.isTTY);
144
168
  if (options.help) {
145
169
  printHelp();
146
170
  return;
@@ -155,10 +179,24 @@ async function main() {
155
179
  const templateInput = options.template || (await promptTemplate(rl));
156
180
  const templateKey = normalizeTemplateName(templateInput);
157
181
  if (!templateKey) {
182
+ const allowed = TEMPLATE_DEFINITIONS.map((template) => template.key).join(", ");
158
183
  stdout.write(`\nUnknown template: ${templateInput}\n`);
159
- printTemplates();
184
+ stdout.write(`Use one of: ${allowed}\n`);
185
+ stdout.write("Run with --list-templates to see highlights.\n");
160
186
  throw new Error("Invalid template");
161
187
  }
188
+ if (templateKey === "stress-test") {
189
+ if (isInteractive) {
190
+ const confirmed = await confirmStressTemplate(rl);
191
+ if (!confirmed) {
192
+ stdout.write("\nTemplate selection cancelled.\n");
193
+ return;
194
+ }
195
+ }
196
+ else {
197
+ stdout.write("\nSafety notice: stress-test template selected in non-interactive mode; skipping prompt.\n");
198
+ }
199
+ }
162
200
  const rawName = resolveTargetName(targetDir);
163
201
  const displayName = toDisplayName(rawName);
164
202
  const packageName = toValidPackageName(rawName);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
- export type TemplateKey = "dashboard" | "form-app" | "file-browser" | "streaming-viewer";
1
+ export type TemplateKey = "dashboard" | "stress-test" | "cli-tool" | "animation-lab" | "minimal";
2
2
  export type TemplateDefinition = {
3
3
  key: TemplateKey;
4
4
  label: string;
5
5
  description: string;
6
+ safetyTag: string;
7
+ safetyNote: string;
8
+ highlights: readonly string[];
6
9
  dir: string;
7
10
  };
8
11
  export declare const TEMPLATE_DEFINITIONS: readonly TemplateDefinition[];
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAEzF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,SAAS,kBAAkB,EAyBpD,CAAC;AAMX,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAyBvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB/D;AA+BD,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyB/F"}
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,GAAG,eAAe,GAAG,SAAS,CAAC;AAEjG,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,SAAS,kBAAkB,EA+DpD,CAAC;AAwBX,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB/D;AA+BD,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyB/F"}
package/dist/scaffold.js CHANGED
@@ -4,56 +4,92 @@ import { fileURLToPath } from "node:url";
4
4
  export const TEMPLATE_DEFINITIONS = [
5
5
  {
6
6
  key: "dashboard",
7
- label: "Dashboard",
8
- description: "Multi-panel ops dashboard with status list",
7
+ label: "EdgeOps Dashboard",
8
+ description: "Product-grade operations console with deterministic updates",
9
+ safetyTag: "safe-default",
10
+ safetyNote: "Balanced runtime profile for everyday app development.",
11
+ highlights: [
12
+ "fleet control plane with stable live telemetry",
13
+ "incident feed + inspector + escalation runbook",
14
+ ],
9
15
  dir: "dashboard",
10
16
  },
11
17
  {
12
- key: "form-app",
13
- label: "Form app",
14
- description: "Data entry flow with preview panel",
15
- dir: "form-app",
18
+ key: "stress-test",
19
+ label: "Visual Benchmark Matrix",
20
+ description: "Three-lane visual benchmark with deterministic sim model + real runtime diagnostics",
21
+ safetyTag: "high-cpu-io",
22
+ safetyNote: "Generates heavy CPU/IO pressure; intended for benchmarking only.",
23
+ highlights: [
24
+ "geometry + text/file activity + matrix rain lanes with phase-based intensity ramp",
25
+ "deterministic sim scorecard and measured CPU/RSS/lag/timing/sink throughput",
26
+ ],
27
+ dir: "stress-test",
16
28
  },
17
29
  {
18
- key: "file-browser",
19
- label: "File browser",
20
- description: "Split view with directory list + preview",
21
- dir: "file-browser",
30
+ key: "cli-tool",
31
+ label: "Multi-Screen CLI Tool",
32
+ description: "Task-oriented multi-screen TUI with first-party page routing",
33
+ safetyTag: "safe-default",
34
+ safetyNote: "Lightweight template focused on product workflows and routing.",
35
+ highlights: [
36
+ "home/logs/settings/detail screens with router history and focus restoration",
37
+ "global route keybindings plus breadcrumb + tabs helpers wired to router state",
38
+ ],
39
+ dir: "cli-tool",
22
40
  },
23
41
  {
24
- key: "streaming-viewer",
25
- label: "Streaming viewer",
26
- description: "Live stream list with chat + metrics",
27
- dir: "streaming-viewer",
42
+ key: "animation-lab",
43
+ label: "Declarative Animation Lab",
44
+ description: "Responsive animation playground showcasing transition/spring/sequence/stagger hooks",
45
+ safetyTag: "safe-default",
46
+ safetyNote: "Visual-first starter with moderate CPU usage and deterministic animation targets.",
47
+ highlights: [
48
+ "reactor command deck combining canvas visuals, charts, gauges, and staggered module rails",
49
+ "keyboard-driven autoplay + vector nudging + burst impulses with resize-aware layout adaptation",
50
+ ],
51
+ dir: "animation-lab",
52
+ },
53
+ {
54
+ key: "minimal",
55
+ label: "Minimal Utility TUI",
56
+ description: "Single-screen starter for focused tools with essential patterns only",
57
+ safetyTag: "safe-default",
58
+ safetyNote: "Small footprint template intended for quick utility workflows.",
59
+ highlights: [
60
+ "single-screen state flow with keybindings, theme cycling, and inline error handling",
61
+ "lean multi-file structure plus reducer/render/keybinding test examples",
62
+ ],
63
+ dir: "minimal",
28
64
  },
29
65
  ];
30
66
  const TEMPLATE_BY_KEY = new Map(TEMPLATE_DEFINITIONS.map((template) => [template.key, template]));
67
+ const TEMPLATE_ALIASES = new Map(TEMPLATE_DEFINITIONS.map((template) => [template.key, template.key]));
68
+ TEMPLATE_ALIASES.set("dash", "dashboard");
69
+ TEMPLATE_ALIASES.set("stress", "stress-test");
70
+ TEMPLATE_ALIASES.set("chaos", "stress-test");
71
+ TEMPLATE_ALIASES.set("bench", "stress-test");
72
+ TEMPLATE_ALIASES.set("cli", "cli-tool");
73
+ TEMPLATE_ALIASES.set("tool", "cli-tool");
74
+ TEMPLATE_ALIASES.set("multiscreen", "cli-tool");
75
+ TEMPLATE_ALIASES.set("animation", "animation-lab");
76
+ TEMPLATE_ALIASES.set("anim", "animation-lab");
77
+ TEMPLATE_ALIASES.set("lab", "animation-lab");
78
+ TEMPLATE_ALIASES.set("motion", "animation-lab");
79
+ TEMPLATE_ALIASES.set("mini", "minimal");
80
+ TEMPLATE_ALIASES.set("basic", "minimal");
81
+ TEMPLATE_ALIASES.set("utility", "minimal");
31
82
  const PACKAGE_NAME_RE = /^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;
32
83
  export function normalizeTemplateName(value) {
33
84
  const cleaned = value.trim().toLowerCase();
34
85
  if (!cleaned)
35
86
  return null;
36
87
  const slug = cleaned.replace(/[\s_]+/g, "-");
37
- switch (slug) {
38
- case "dashboard":
39
- return "dashboard";
40
- case "form":
41
- case "form-app":
42
- case "formapp":
43
- return "form-app";
44
- case "file":
45
- case "files":
46
- case "file-browser":
47
- case "filebrowser":
48
- return "file-browser";
49
- case "stream":
50
- case "streaming":
51
- case "streaming-viewer":
52
- case "streamingviewer":
53
- return "streaming-viewer";
54
- default:
55
- return TEMPLATE_BY_KEY.has(slug) ? slug : null;
56
- }
88
+ const normalized = TEMPLATE_ALIASES.get(slug);
89
+ if (normalized)
90
+ return normalized;
91
+ const compact = slug.replace(/-/g, "");
92
+ return TEMPLATE_ALIASES.get(compact) ?? null;
57
93
  }
58
94
  export function toDisplayName(value) {
59
95
  const name = value.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "create-rezi",
3
- "version": "0.1.0-alpha.3",
3
+ "version": "0.1.0-alpha.30",
4
4
  "description": "Scaffold a Rezi terminal UI app.",
5
5
  "license": "Apache-2.0",
6
- "homepage": "https://rtlzeromemory.github.io/Rezi/",
6
+ "homepage": "https://rezitui.dev",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/RtlZeroMemory/Rezi.git",
@@ -19,12 +19,15 @@
19
19
  "files": [
20
20
  "dist/",
21
21
  "templates/",
22
- "README.md"
22
+ "README.md",
23
+ "!dist/**/__tests__/**",
24
+ "!dist/**/__e2e__/**"
23
25
  ],
24
26
  "engines": {
25
- "node": ">=18"
27
+ "node": ">=18",
28
+ "bun": ">=1.3.0"
26
29
  },
27
30
  "devDependencies": {
28
- "@rezi-ui/testkit": "0.1.0-alpha.3"
31
+ "@rezi-ui/testkit": "0.1.0-alpha.30"
29
32
  }
30
33
  }
@@ -0,0 +1,43 @@
1
+ # __APP_NAME__
2
+
3
+ Scaffolded with `create-rezi` using the **__TEMPLATE_LABEL__** template.
4
+
5
+ ## What This Template Demonstrates
6
+
7
+ - Declarative animation hooks with first-class primitives: `useTransition`, `useSpring`, `useSequence`, `useStagger`.
8
+ - Canvas-driven reactor visualization combined with charts, gauges, and staggered module rails.
9
+ - Reducer-managed animation targets with deterministic tick updates.
10
+ - Responsive layout that adapts to terminal resize events.
11
+ - Keyboard controls for autoplay, single-step, vector tuning, burst impulses, and palette cycling.
12
+
13
+ ## File Layout
14
+
15
+ - `src/types.ts`: animation state and action contracts.
16
+ - `src/theme.ts`: template identity constants.
17
+ - `src/helpers/state.ts`: layout resolver + reducer transitions.
18
+ - `src/helpers/keybindings.ts`: key to command resolver.
19
+ - `src/screens/reactor-lab.ts`: reactor field screen renderer.
20
+ - `src/main.ts`: app bootstrap, resize handling, animation loop.
21
+ - `src/__tests__/`: reducer, render, and keybinding examples.
22
+
23
+ ## Quickstart
24
+
25
+ ```bash
26
+ # npm
27
+ npm install
28
+ npm run start
29
+
30
+ # bun
31
+ bun install
32
+ bun run start
33
+ ```
34
+
35
+ ## Controls
36
+
37
+ - `q` or `ctrl+c`: Quit
38
+ - `space` or `p`: Toggle autoplay
39
+ - `enter`: Step one tick
40
+ - Arrow keys: Nudge drift/flux/orbit vectors
41
+ - `b`: Burst impulse
42
+ - `r`: Randomized retarget
43
+ - `m`: Cycle color palette
@@ -6,11 +6,13 @@
6
6
  "scripts": {
7
7
  "start": "tsx src/main.ts",
8
8
  "dev": "tsx watch src/main.ts",
9
- "typecheck": "tsc --noEmit"
9
+ "build": "tsc --pretty false",
10
+ "typecheck": "tsc --noEmit",
11
+ "test": "tsx --test src/__tests__"
10
12
  },
11
13
  "dependencies": {
12
- "@rezi-ui/core": "^0.1.0-alpha.0",
13
- "@rezi-ui/node": "^0.1.0-alpha.0"
14
+ "@rezi-ui/core": "^0.1.0-alpha.17",
15
+ "@rezi-ui/node": "^0.1.0-alpha.17"
14
16
  },
15
17
  "devDependencies": {
16
18
  "@types/node": "^22.13.1",
@@ -0,0 +1,13 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { resolveAnimationLabCommand } from "../helpers/keybindings.js";
4
+
5
+ test("animation lab keybinding map resolves expected commands", () => {
6
+ assert.equal(resolveAnimationLabCommand("q"), "quit");
7
+ assert.equal(resolveAnimationLabCommand("space"), "toggle-autoplay");
8
+ assert.equal(resolveAnimationLabCommand("enter"), "step");
9
+ assert.equal(resolveAnimationLabCommand("right"), "nudge-right");
10
+ assert.equal(resolveAnimationLabCommand("b"), "burst");
11
+ assert.equal(resolveAnimationLabCommand("m"), "cycle-phase");
12
+ assert.equal(resolveAnimationLabCommand("x"), undefined);
13
+ });
@@ -0,0 +1,41 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { createInitialState, reduceAnimationLabState } from "../helpers/state.js";
4
+
5
+ test("animation lab reducer advances and keeps bounds", () => {
6
+ const initial = createInitialState();
7
+ const next = reduceAnimationLabState(initial, { type: "advance" });
8
+
9
+ assert.equal(next.tick, 1);
10
+ assert.ok(next.fluxTarget >= 0 && next.fluxTarget <= 1);
11
+ assert.ok(next.orbitTarget >= 0 && next.orbitTarget <= 1);
12
+ assert.ok(next.burstTarget >= 0 && next.burstTarget <= 1);
13
+ assert.ok(next.driftTarget >= -1 && next.driftTarget <= 1);
14
+ });
15
+
16
+ test("animation lab reducer applies viewport", () => {
17
+ const initial = createInitialState({ cols: 96, rows: 32 });
18
+ const resized = reduceAnimationLabState(initial, {
19
+ type: "apply-viewport",
20
+ cols: 70,
21
+ rows: 20,
22
+ });
23
+
24
+ assert.equal(resized.viewportCols, 70);
25
+ assert.equal(resized.viewportRows, 20);
26
+ assert.ok(resized.panelWidth <= 66);
27
+ assert.ok(resized.panelHeight <= 18);
28
+ });
29
+
30
+ test("animation lab reducer supports nudge and phase cycle", () => {
31
+ const initial = createInitialState();
32
+ const nudged = reduceAnimationLabState(initial, {
33
+ type: "nudge",
34
+ payload: { driftDelta: 0.3, fluxDelta: 0.1, orbitDelta: 0.1 },
35
+ });
36
+ const cycled = reduceAnimationLabState(nudged, { type: "cycle-phase" });
37
+
38
+ assert.equal(cycled.phase, 1);
39
+ assert.ok(cycled.driftTarget > initial.driftTarget);
40
+ assert.ok(cycled.fluxTarget > initial.fluxTarget);
41
+ });
@@ -0,0 +1,15 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { createTestRenderer } from "@rezi-ui/core/testing";
4
+ import { createInitialState } from "../helpers/state.js";
5
+ import { renderReactorLab } from "../screens/reactor-lab.js";
6
+
7
+ test("animation lab screen renders core sections", () => {
8
+ const state = createInitialState({ cols: 140, rows: 48 });
9
+ const renderer = createTestRenderer({ viewport: { cols: 140, rows: 48 } });
10
+ const output = renderer.render(renderReactorLab(state)).toText();
11
+
12
+ assert.match(output, /__APP_NAME__/);
13
+ assert.match(output, /Animation Lab/);
14
+ assert.match(output, /controls: space\/p autoplay/);
15
+ });
@@ -0,0 +1,30 @@
1
+ export type AnimationLabCommand =
2
+ | "quit"
3
+ | "toggle-autoplay"
4
+ | "step"
5
+ | "nudge-right"
6
+ | "nudge-left"
7
+ | "nudge-up"
8
+ | "nudge-down"
9
+ | "burst"
10
+ | "randomize"
11
+ | "cycle-phase";
12
+
13
+ const COMMAND_MAP: Readonly<Record<string, AnimationLabCommand>> = Object.freeze({
14
+ q: "quit",
15
+ "ctrl+c": "quit",
16
+ space: "toggle-autoplay",
17
+ p: "toggle-autoplay",
18
+ enter: "step",
19
+ right: "nudge-right",
20
+ left: "nudge-left",
21
+ up: "nudge-up",
22
+ down: "nudge-down",
23
+ b: "burst",
24
+ r: "randomize",
25
+ m: "cycle-phase",
26
+ });
27
+
28
+ export function resolveAnimationLabCommand(key: string): AnimationLabCommand | undefined {
29
+ return COMMAND_MAP[key];
30
+ }