create-neutron 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/index.js +15 -2
  2. package/dist/index.js.map +1 -1
  3. package/package.json +1 -1
  4. package/templates/app/README.md +28 -0
  5. package/templates/app/_gitignore +3 -0
  6. package/templates/app/public/favicon.svg +5 -0
  7. package/templates/app/src/neutron-env.d.ts +10 -0
  8. package/templates/app/src/routes/_layout.tsx +6 -1
  9. package/templates/app/tsconfig.json +11 -3
  10. package/templates/basic/README.md +28 -0
  11. package/templates/basic/_gitignore +3 -0
  12. package/templates/basic/public/favicon.svg +5 -0
  13. package/templates/basic/src/neutron-env.d.ts +10 -0
  14. package/templates/basic/src/routes/_layout.tsx +6 -1
  15. package/templates/basic/tsconfig.json +11 -3
  16. package/templates/docs/README.md +29 -0
  17. package/templates/docs/_gitignore +3 -0
  18. package/templates/docs/public/favicon.svg +5 -1
  19. package/templates/docs/src/content/docs/getting-started/installation.mdx +0 -2
  20. package/templates/docs/src/content/docs/getting-started/quick-start.mdx +0 -2
  21. package/templates/docs/src/content/docs/index.mdx +0 -2
  22. package/templates/docs/src/neutron-env.d.ts +10 -0
  23. package/templates/docs/src/routes/_layout.tsx +3 -1
  24. package/templates/docs/src/routes/docs/_layout.tsx +4 -3
  25. package/templates/docs/tsconfig.json +9 -2
  26. package/templates/full/README.md +28 -0
  27. package/templates/full/_gitignore +3 -0
  28. package/templates/full/public/favicon.svg +5 -0
  29. package/templates/full/src/neutron-env.d.ts +10 -0
  30. package/templates/full/src/routes/_layout.tsx +6 -1
  31. package/templates/full/tsconfig.json +11 -3
  32. package/templates/marketing/README.md +28 -0
  33. package/templates/marketing/_gitignore +3 -0
  34. package/templates/marketing/public/favicon.svg +5 -0
  35. package/templates/marketing/src/neutron-env.d.ts +10 -0
  36. package/templates/marketing/src/routes/_layout.tsx +6 -1
  37. package/templates/marketing/tsconfig.json +11 -3
package/dist/index.js CHANGED
@@ -95,12 +95,25 @@ Options:
95
95
  --runtime <mode> Runtime mode: preact | react-compat (default: preact)
96
96
  -h, --help Show this help message`);
97
97
  }
98
+ function detectPackageManager() {
99
+ const ua = process.env.npm_config_user_agent || "";
100
+ if (ua.startsWith("pnpm"))
101
+ return "pnpm";
102
+ if (ua.startsWith("yarn"))
103
+ return "yarn";
104
+ if (ua.startsWith("bun"))
105
+ return "bun";
106
+ return "npm";
107
+ }
98
108
  function printSuccess(projectName, template, runtime) {
109
+ const pm = detectPackageManager();
110
+ const install = pm === "yarn" ? "yarn" : `${pm} install`;
111
+ const dev = pm === "npm" ? "npm run dev" : `${pm} dev`;
99
112
  console.log(`\nCreated ${projectName} (template: ${template}, runtime: ${runtime})\n`);
100
113
  console.log("Next steps:");
101
114
  console.log(` cd ${projectName}`);
102
- console.log(" pnpm install");
103
- console.log(" pnpm dev\n");
115
+ console.log(` ${install}`);
116
+ console.log(` ${dev}\n`);
104
117
  }
105
118
  async function ensureTargetDirectory(targetDir) {
106
119
  if (!fs.existsSync(targetDir)) {
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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","sourcesContent":["#!/usr/bin/env node\n\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\ntype RuntimeMode = \"preact\" | \"react-compat\";\ntype TemplateName = \"basic\" | \"marketing\" | \"app\" | \"full\" | \"docs\";\n\nconst TEMPLATE_NAMES: TemplateName[] = [\"basic\", \"marketing\", \"app\", \"full\", \"docs\"];\n\ninterface CliOptions {\n targetDir: string;\n template: TemplateName;\n runtime: RuntimeMode;\n}\n\nasync function main(): Promise<void> {\n const options = parseArgs(process.argv.slice(2));\n\n if (!options) {\n printUsage();\n process.exit(1);\n }\n\n if (options.targetDir === \"--help\" || options.targetDir === \"-h\") {\n printUsage();\n return;\n }\n\n const absoluteTargetDir = path.resolve(process.cwd(), options.targetDir);\n const packageName = toPackageName(path.basename(absoluteTargetDir));\n const dependencyVersions = resolveDependencyVersions(absoluteTargetDir);\n\n await ensureTargetDirectory(absoluteTargetDir);\n await copyTemplate(options.template, absoluteTargetDir, {\n PROJECT_NAME: path.basename(absoluteTargetDir),\n PACKAGE_NAME: packageName,\n RUNTIME: options.runtime,\n NEUTRON_VERSION: dependencyVersions.neutron,\n NEUTRON_CLI_VERSION: dependencyVersions.neutronCli,\n });\n\n printSuccess(path.basename(absoluteTargetDir), options.template, options.runtime);\n}\n\nfunction parseArgs(argv: string[]): CliOptions | null {\n const positional: string[] = [];\n let template: TemplateName = \"basic\";\n let runtime: RuntimeMode = \"preact\";\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (!arg) {\n continue;\n }\n\n if (arg === \"--template\" && argv[i + 1]) {\n const candidate = argv[++i];\n if (isTemplateName(candidate)) {\n template = candidate;\n } else {\n console.error(`Unsupported template: ${candidate}`);\n return null;\n }\n continue;\n }\n\n if (arg.startsWith(\"--template=\")) {\n const candidate = arg.split(\"=\")[1];\n if (isTemplateName(candidate)) {\n template = candidate;\n } else {\n console.error(`Unsupported template: ${candidate}`);\n return null;\n }\n continue;\n }\n\n if (arg === \"--runtime\" && argv[i + 1]) {\n const candidate = argv[++i];\n if (candidate === \"preact\" || candidate === \"react-compat\") {\n runtime = candidate;\n } else {\n console.error(`Unsupported runtime: ${candidate}`);\n return null;\n }\n continue;\n }\n\n if (arg.startsWith(\"--runtime=\")) {\n const candidate = arg.split(\"=\")[1];\n if (candidate === \"preact\" || candidate === \"react-compat\") {\n runtime = candidate;\n } else {\n console.error(`Unsupported runtime: ${candidate}`);\n return null;\n }\n continue;\n }\n\n positional.push(arg);\n }\n\n const targetDir = positional[0] || \"neutron-app\";\n return { targetDir, template, runtime };\n}\n\nfunction printUsage(): void {\n console.log(`Usage:\n create-neutron [project-name] [options]\n\nOptions:\n --template <name> Template to use (default: basic)\n ${TEMPLATE_NAMES.join(\" | \")}\n --runtime <mode> Runtime mode: preact | react-compat (default: preact)\n -h, --help Show this help message`);\n}\n\nfunction detectPackageManager(): string {\n const ua = process.env.npm_config_user_agent || \"\";\n if (ua.startsWith(\"pnpm\")) return \"pnpm\";\n if (ua.startsWith(\"yarn\")) return \"yarn\";\n if (ua.startsWith(\"bun\")) return \"bun\";\n return \"npm\";\n}\n\nfunction printSuccess(projectName: string, template: TemplateName, runtime: RuntimeMode): void {\n const pm = detectPackageManager();\n const install = pm === \"yarn\" ? \"yarn\" : `${pm} install`;\n const dev = pm === \"npm\" ? \"npm run dev\" : `${pm} dev`;\n console.log(`\\nCreated ${projectName} (template: ${template}, runtime: ${runtime})\\n`);\n console.log(\"Next steps:\");\n console.log(` cd ${projectName}`);\n console.log(` ${install}`);\n console.log(` ${dev}\\n`);\n}\n\nasync function ensureTargetDirectory(targetDir: string): Promise<void> {\n if (!fs.existsSync(targetDir)) {\n await fsp.mkdir(targetDir, { recursive: true });\n return;\n }\n\n const files = await fsp.readdir(targetDir);\n if (files.length > 0) {\n throw new Error(`Target directory is not empty: ${targetDir}`);\n }\n}\n\nasync function copyTemplate(\n template: TemplateName,\n targetDir: string,\n tokens: Record<string, string>\n): Promise<void> {\n const templateRoot = getTemplateRoot();\n const sourceDir = path.join(templateRoot, template);\n\n if (!fs.existsSync(sourceDir)) {\n throw new Error(`Template not found: ${template}`);\n }\n\n await copyDirectory(sourceDir, targetDir, tokens);\n}\n\nasync function copyDirectory(\n sourceDir: string,\n targetDir: string,\n tokens: Record<string, string>\n): Promise<void> {\n await fsp.mkdir(targetDir, { recursive: true });\n const entries = await fsp.readdir(sourceDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const sourcePath = path.join(sourceDir, entry.name);\n const outputName = resolveOutputName(entry.name);\n const outputPath = path.join(targetDir, outputName);\n\n if (entry.isDirectory()) {\n await copyDirectory(sourcePath, outputPath, tokens);\n continue;\n }\n\n const source = await fsp.readFile(sourcePath, \"utf-8\");\n const rendered = applyTokens(source, tokens);\n await fsp.writeFile(outputPath, rendered, \"utf-8\");\n }\n}\n\nfunction resolveOutputName(inputName: string): string {\n if (inputName === \"_gitignore\") {\n return \".gitignore\";\n }\n return inputName;\n}\n\nfunction applyTokens(source: string, tokens: Record<string, string>): string {\n let output = source;\n for (const [key, value] of Object.entries(tokens)) {\n output = output.replaceAll(`__${key}__`, value);\n }\n return output;\n}\n\nfunction toPackageName(input: string): string {\n const normalized = input\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n\n return normalized || \"neutron-app\";\n}\n\nfunction isTemplateName(value: string): value is TemplateName {\n return TEMPLATE_NAMES.includes(value as TemplateName);\n}\n\nfunction resolveDependencyVersions(targetDir: string): {\n neutron: string;\n neutronCli: string;\n} {\n const workspaceRoot = findWorkspaceRoot(path.dirname(targetDir));\n if (!workspaceRoot) {\n return {\n neutron: \"latest\",\n neutronCli: \"latest\",\n };\n }\n\n return {\n neutron: \"workspace:*\",\n neutronCli: \"workspace:*\",\n };\n}\n\nfunction findWorkspaceRoot(startDir: string): string | null {\n let current = path.resolve(startDir);\n\n while (true) {\n const hasWorkspaceConfig = fs.existsSync(path.join(current, \"pnpm-workspace.yaml\"));\n const hasNeutronPackage = fs.existsSync(path.join(current, \"packages\", \"neutron\"));\n const hasNeutronCliPackage = fs.existsSync(path.join(current, \"packages\", \"neutron-cli\"));\n if (hasWorkspaceConfig && hasNeutronPackage && hasNeutronCliPackage) {\n return current;\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n return null;\n }\n current = parent;\n }\n}\n\nfunction getTemplateRoot(): string {\n const currentFile = fileURLToPath(import.meta.url);\n const currentDir = path.dirname(currentFile);\n return path.resolve(currentDir, \"..\", \"templates\");\n}\n\nmain().catch((error) => {\n console.error(\"\\nFailed to create Neutron app.\");\n console.error(error);\n process.exit(1);\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-neutron",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Scaffold a new Neutron project. Run with: npm create neutron@latest",
5
5
  "author": "Tyler",
6
6
  "license": "MIT",
@@ -0,0 +1,28 @@
1
+ # __PROJECT_NAME__
2
+
3
+ A Neutron app starter — app routes, protected/login pages, and an API route.
4
+
5
+ Built with [Neutron](https://neutron.build).
6
+
7
+ ## Commands
8
+
9
+ Run from the project root:
10
+
11
+ | Command | Action |
12
+ | --- | --- |
13
+ | `npm install` | Install dependencies |
14
+ | `npm run dev` | Start the dev server |
15
+ | `npm run build` | Build for production (output in `dist/`) |
16
+ | `npm run preview` | Preview the production build locally |
17
+
18
+ (Works the same with `pnpm` or `yarn`.)
19
+
20
+ ## Project structure
21
+
22
+ - `src/routes/` — file-based routes: `index.tsx` -> `/`, `[id].tsx` -> dynamic params, `_layout.tsx` -> shared layout
23
+ - `src/main.tsx` — client entry and hydration
24
+ - `neutron.config.ts` — framework configuration
25
+
26
+ ## Learn more
27
+
28
+ - Documentation: https://neutron.build/docs
@@ -1,3 +1,6 @@
1
1
  node_modules
2
2
  dist
3
+
4
+ # Neutron build cache and generated type files (regenerated by dev/build)
3
5
  .neutron
6
+ **/.neutron-*.d.ts
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="icon">
2
+ <rect width="32" height="32" rx="7" fill="#0A0A0A"/>
3
+ <circle cx="16" cy="16" r="6.5" fill="#EDEDED"/>
4
+ <circle cx="16" cy="16" r="11" fill="none" stroke="#EDEDED" stroke-opacity="0.5" stroke-width="1.5"/>
5
+ </svg>
@@ -0,0 +1,10 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ // Ambient types for Neutron's Vite virtual modules so `tsc` is clean before the
4
+ // first dev/build run (which generates the per-route and content type files).
5
+ declare module "virtual:neutron/routes" {
6
+ // Typed as exactly what registerRoutes() accepts, so it can never drift.
7
+ export const routes: Parameters<
8
+ typeof import("@neutron-build/core/client").registerRoutes
9
+ >[0];
10
+ }
@@ -1,4 +1,9 @@
1
- export default function Layout(props: { children?: unknown }) {
1
+ import type { ComponentChildren } from "preact";
2
+ export function head() {
3
+ return { link: { rel: "icon", type: "image/svg+xml", href: "/favicon.svg" } };
4
+ }
5
+
6
+ export default function Layout(props: { children?: ComponentChildren }) {
2
7
  return (
3
8
  <div style="max-width: 900px; margin: 0 auto; padding: 2rem; font-family: system-ui, sans-serif;">
4
9
  <header style="margin-bottom: 1.5rem;">
@@ -3,12 +3,20 @@
3
3
  "target": "ES2022",
4
4
  "module": "ESNext",
5
5
  "moduleResolution": "bundler",
6
- "lib": ["ES2022", "DOM"],
6
+ "lib": [
7
+ "ES2022",
8
+ "DOM"
9
+ ],
7
10
  "jsx": "react-jsx",
8
11
  "jsxImportSource": "preact",
9
12
  "strict": true,
10
13
  "skipLibCheck": true,
11
- "types": ["vite/client"]
14
+ "types": [
15
+ "vite/client"
16
+ ]
12
17
  },
13
- "include": ["src"]
18
+ "include": [
19
+ "src",
20
+ "src/**/.neutron-*.d.ts"
21
+ ]
14
22
  }
@@ -0,0 +1,28 @@
1
+ # __PROJECT_NAME__
2
+
3
+ A minimal Neutron starter — file-based routing, Preact SSR, and a dynamic route.
4
+
5
+ Built with [Neutron](https://neutron.build).
6
+
7
+ ## Commands
8
+
9
+ Run from the project root:
10
+
11
+ | Command | Action |
12
+ | --- | --- |
13
+ | `npm install` | Install dependencies |
14
+ | `npm run dev` | Start the dev server |
15
+ | `npm run build` | Build for production (output in `dist/`) |
16
+ | `npm run preview` | Preview the production build locally |
17
+
18
+ (Works the same with `pnpm` or `yarn`.)
19
+
20
+ ## Project structure
21
+
22
+ - `src/routes/` — file-based routes: `index.tsx` -> `/`, `[id].tsx` -> dynamic params, `_layout.tsx` -> shared layout
23
+ - `src/main.tsx` — client entry and hydration
24
+ - `neutron.config.ts` — framework configuration
25
+
26
+ ## Learn more
27
+
28
+ - Documentation: https://neutron.build/docs
@@ -1,3 +1,6 @@
1
1
  node_modules
2
2
  dist
3
+
4
+ # Neutron build cache and generated type files (regenerated by dev/build)
3
5
  .neutron
6
+ **/.neutron-*.d.ts
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="icon">
2
+ <rect width="32" height="32" rx="7" fill="#0A0A0A"/>
3
+ <circle cx="16" cy="16" r="6.5" fill="#EDEDED"/>
4
+ <circle cx="16" cy="16" r="11" fill="none" stroke="#EDEDED" stroke-opacity="0.5" stroke-width="1.5"/>
5
+ </svg>
@@ -0,0 +1,10 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ // Ambient types for Neutron's Vite virtual modules so `tsc` is clean before the
4
+ // first dev/build run (which generates the per-route and content type files).
5
+ declare module "virtual:neutron/routes" {
6
+ // Typed as exactly what registerRoutes() accepts, so it can never drift.
7
+ export const routes: Parameters<
8
+ typeof import("@neutron-build/core/client").registerRoutes
9
+ >[0];
10
+ }
@@ -1,4 +1,9 @@
1
- export default function Layout(props: { children?: unknown }) {
1
+ import type { ComponentChildren } from "preact";
2
+ export function head() {
3
+ return { link: { rel: "icon", type: "image/svg+xml", href: "/favicon.svg" } };
4
+ }
5
+
6
+ export default function Layout(props: { children?: ComponentChildren }) {
2
7
  return (
3
8
  <div style="max-width: 900px; margin: 0 auto; padding: 2rem; font-family: system-ui, sans-serif;">
4
9
  <header style="margin-bottom: 1.5rem;">
@@ -3,12 +3,20 @@
3
3
  "target": "ES2022",
4
4
  "module": "ESNext",
5
5
  "moduleResolution": "bundler",
6
- "lib": ["ES2022", "DOM"],
6
+ "lib": [
7
+ "ES2022",
8
+ "DOM"
9
+ ],
7
10
  "jsx": "react-jsx",
8
11
  "jsxImportSource": "preact",
9
12
  "strict": true,
10
13
  "skipLibCheck": true,
11
- "types": ["vite/client"]
14
+ "types": [
15
+ "vite/client"
16
+ ]
12
17
  },
13
- "include": ["src"]
18
+ "include": [
19
+ "src",
20
+ "src/**/.neutron-*.d.ts"
21
+ ]
14
22
  }
@@ -0,0 +1,29 @@
1
+ # __PROJECT_NAME__
2
+
3
+ A Neutron documentation starter — content collections, sidebar navigation, search, and a theme toggle.
4
+
5
+ Built with [Neutron](https://neutron.build).
6
+
7
+ ## Commands
8
+
9
+ Run from the project root:
10
+
11
+ | Command | Action |
12
+ | --- | --- |
13
+ | `npm install` | Install dependencies |
14
+ | `npm run dev` | Start the dev server |
15
+ | `npm run build` | Build for production (output in `dist/`) |
16
+ | `npm run preview` | Preview the production build locally |
17
+
18
+ (Works the same with `pnpm` or `yarn`.)
19
+
20
+ ## Project structure
21
+
22
+ - `src/routes/` — file-based routes: `index.tsx` -> `/`, `[id].tsx` -> dynamic params, `_layout.tsx` -> shared layout
23
+ - `src/main.tsx` — client entry and hydration
24
+ - `neutron.config.ts` — framework configuration
25
+ - `src/content/docs/` — your documentation pages (`.mdx`). Run `npm run dev` once to generate content types.
26
+
27
+ ## Learn more
28
+
29
+ - Documentation: https://neutron.build/docs
@@ -1,3 +1,6 @@
1
1
  node_modules
2
2
  dist
3
+
4
+ # Neutron build cache and generated type files (regenerated by dev/build)
3
5
  .neutron
6
+ **/.neutron-*.d.ts
@@ -1 +1,5 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><circle cx="16" cy="16" r="14" fill="none" stroke="#818cf8" stroke-width="2"/><circle cx="16" cy="16" r="4" fill="#818cf8"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="icon">
2
+ <rect width="32" height="32" rx="7" fill="#0A0A0A"/>
3
+ <circle cx="16" cy="16" r="6.5" fill="#EDEDED"/>
4
+ <circle cx="16" cy="16" r="11" fill="none" stroke="#EDEDED" stroke-opacity="0.5" stroke-width="1.5"/>
5
+ </svg>
@@ -4,8 +4,6 @@ description: How to install the project
4
4
  order: 1
5
5
  ---
6
6
 
7
- # Installation
8
-
9
7
  Install via npm:
10
8
 
11
9
  ```bash
@@ -4,8 +4,6 @@ description: Your first steps
4
4
  order: 2
5
5
  ---
6
6
 
7
- # Quick Start
8
-
9
7
  Follow these steps to get started:
10
8
 
11
9
  1. Create a new project
@@ -4,8 +4,6 @@ description: Getting started with __PROJECT_NAME__
4
4
  order: 0
5
5
  ---
6
6
 
7
- # Welcome to __PROJECT_NAME__
8
-
9
7
  This is your documentation site built with [Neutron](https://neutron.build).
10
8
 
11
9
  ## Quick Start
@@ -0,0 +1,10 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ // Ambient types for Neutron's Vite virtual modules so `tsc` is clean before the
4
+ // first dev/build run (which generates the per-route and content type files).
5
+ declare module "virtual:neutron/routes" {
6
+ // Typed as exactly what registerRoutes() accepts, so it can never drift.
7
+ export const routes: Parameters<
8
+ typeof import("@neutron-build/core/client").registerRoutes
9
+ >[0];
10
+ }
@@ -1,3 +1,4 @@
1
+ import type { ComponentChildren } from "preact";
1
2
  import "../styles/docs.css";
2
3
  import { Island, ViewTransitions } from "@neutron-build/core/client";
3
4
  import { ThemeToggle } from "../components/ThemeToggle";
@@ -6,6 +7,7 @@ export function head() {
6
7
  return {
7
8
  titleTemplate: "%s — __PROJECT_NAME__",
8
9
  description: "__PROJECT_NAME__ Documentation",
10
+ link: { rel: "icon", type: "image/svg+xml", href: "/favicon.svg" },
9
11
  htmlAttrs: { lang: "en", "data-theme": "dark" },
10
12
  headScripts: [
11
13
  {
@@ -16,7 +18,7 @@ export function head() {
16
18
  };
17
19
  }
18
20
 
19
- export default function RootLayout({ children }: { children?: unknown }) {
21
+ export default function RootLayout({ children }: { children?: ComponentChildren }) {
20
22
  return (
21
23
  <div class="docs-app">
22
24
  <ViewTransitions />
@@ -1,3 +1,4 @@
1
+ import type { ComponentChildren } from "preact";
1
2
  import { getCollection } from "@neutron-build/core/content";
2
3
  import { buildSidebarTree } from "../../lib/sidebar";
3
4
  import { Sidebar } from "../../components/Sidebar";
@@ -25,7 +26,7 @@ export default function DocsLayout({
25
26
  children,
26
27
  }: {
27
28
  data: { entries: any[]; tree: any[] };
28
- children?: unknown;
29
+ children?: ComponentChildren;
29
30
  }) {
30
31
  return (
31
32
  <div class="docs-layout">
@@ -39,9 +40,9 @@ export default function DocsLayout({
39
40
  <Sidebar tree={data.tree} />
40
41
  </nav>
41
42
  </aside>
42
- <div class="docs-content">
43
+ <main class="docs-content">
43
44
  {children}
44
- </div>
45
+ </main>
45
46
  </div>
46
47
  );
47
48
  }
@@ -3,7 +3,11 @@
3
3
  "target": "ES2022",
4
4
  "module": "ESNext",
5
5
  "moduleResolution": "bundler",
6
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
6
+ "lib": [
7
+ "ES2022",
8
+ "DOM",
9
+ "DOM.Iterable"
10
+ ],
7
11
  "strict": true,
8
12
  "skipLibCheck": true,
9
13
  "esModuleInterop": true,
@@ -15,5 +19,8 @@
15
19
  "jsx": "react-jsx",
16
20
  "jsxImportSource": "preact"
17
21
  },
18
- "include": ["src/**/*"]
22
+ "include": [
23
+ "src",
24
+ "src/**/.neutron-*.d.ts"
25
+ ]
19
26
  }
@@ -0,0 +1,28 @@
1
+ # __PROJECT_NAME__
2
+
3
+ A full-stack Neutron starter — static pages, app routes, route groups, and islands.
4
+
5
+ Built with [Neutron](https://neutron.build).
6
+
7
+ ## Commands
8
+
9
+ Run from the project root:
10
+
11
+ | Command | Action |
12
+ | --- | --- |
13
+ | `npm install` | Install dependencies |
14
+ | `npm run dev` | Start the dev server |
15
+ | `npm run build` | Build for production (output in `dist/`) |
16
+ | `npm run preview` | Preview the production build locally |
17
+
18
+ (Works the same with `pnpm` or `yarn`.)
19
+
20
+ ## Project structure
21
+
22
+ - `src/routes/` — file-based routes: `index.tsx` -> `/`, `[id].tsx` -> dynamic params, `_layout.tsx` -> shared layout
23
+ - `src/main.tsx` — client entry and hydration
24
+ - `neutron.config.ts` — framework configuration
25
+
26
+ ## Learn more
27
+
28
+ - Documentation: https://neutron.build/docs
@@ -1,3 +1,6 @@
1
1
  node_modules
2
2
  dist
3
+
4
+ # Neutron build cache and generated type files (regenerated by dev/build)
3
5
  .neutron
6
+ **/.neutron-*.d.ts
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="icon">
2
+ <rect width="32" height="32" rx="7" fill="#0A0A0A"/>
3
+ <circle cx="16" cy="16" r="6.5" fill="#EDEDED"/>
4
+ <circle cx="16" cy="16" r="11" fill="none" stroke="#EDEDED" stroke-opacity="0.5" stroke-width="1.5"/>
5
+ </svg>
@@ -0,0 +1,10 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ // Ambient types for Neutron's Vite virtual modules so `tsc` is clean before the
4
+ // first dev/build run (which generates the per-route and content type files).
5
+ declare module "virtual:neutron/routes" {
6
+ // Typed as exactly what registerRoutes() accepts, so it can never drift.
7
+ export const routes: Parameters<
8
+ typeof import("@neutron-build/core/client").registerRoutes
9
+ >[0];
10
+ }
@@ -1,4 +1,9 @@
1
- export default function Layout(props: { children?: unknown }) {
1
+ import type { ComponentChildren } from "preact";
2
+ export function head() {
3
+ return { link: { rel: "icon", type: "image/svg+xml", href: "/favicon.svg" } };
4
+ }
5
+
6
+ export default function Layout(props: { children?: ComponentChildren }) {
2
7
  return (
3
8
  <div style="max-width: 900px; margin: 0 auto; padding: 2rem; font-family: system-ui, sans-serif;">
4
9
  <header style="margin-bottom: 1.5rem;">
@@ -3,12 +3,20 @@
3
3
  "target": "ES2022",
4
4
  "module": "ESNext",
5
5
  "moduleResolution": "bundler",
6
- "lib": ["ES2022", "DOM"],
6
+ "lib": [
7
+ "ES2022",
8
+ "DOM"
9
+ ],
7
10
  "jsx": "react-jsx",
8
11
  "jsxImportSource": "preact",
9
12
  "strict": true,
10
13
  "skipLibCheck": true,
11
- "types": ["vite/client"]
14
+ "types": [
15
+ "vite/client"
16
+ ]
12
17
  },
13
- "include": ["src"]
18
+ "include": [
19
+ "src",
20
+ "src/**/.neutron-*.d.ts"
21
+ ]
14
22
  }
@@ -0,0 +1,28 @@
1
+ # __PROJECT_NAME__
2
+
3
+ A Neutron marketing-site starter — static pages, a blog with dynamic routes, and an interactive island.
4
+
5
+ Built with [Neutron](https://neutron.build).
6
+
7
+ ## Commands
8
+
9
+ Run from the project root:
10
+
11
+ | Command | Action |
12
+ | --- | --- |
13
+ | `npm install` | Install dependencies |
14
+ | `npm run dev` | Start the dev server |
15
+ | `npm run build` | Build for production (output in `dist/`) |
16
+ | `npm run preview` | Preview the production build locally |
17
+
18
+ (Works the same with `pnpm` or `yarn`.)
19
+
20
+ ## Project structure
21
+
22
+ - `src/routes/` — file-based routes: `index.tsx` -> `/`, `[id].tsx` -> dynamic params, `_layout.tsx` -> shared layout
23
+ - `src/main.tsx` — client entry and hydration
24
+ - `neutron.config.ts` — framework configuration
25
+
26
+ ## Learn more
27
+
28
+ - Documentation: https://neutron.build/docs
@@ -1,3 +1,6 @@
1
1
  node_modules
2
2
  dist
3
+
4
+ # Neutron build cache and generated type files (regenerated by dev/build)
3
5
  .neutron
6
+ **/.neutron-*.d.ts
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="icon">
2
+ <rect width="32" height="32" rx="7" fill="#0A0A0A"/>
3
+ <circle cx="16" cy="16" r="6.5" fill="#EDEDED"/>
4
+ <circle cx="16" cy="16" r="11" fill="none" stroke="#EDEDED" stroke-opacity="0.5" stroke-width="1.5"/>
5
+ </svg>
@@ -0,0 +1,10 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ // Ambient types for Neutron's Vite virtual modules so `tsc` is clean before the
4
+ // first dev/build run (which generates the per-route and content type files).
5
+ declare module "virtual:neutron/routes" {
6
+ // Typed as exactly what registerRoutes() accepts, so it can never drift.
7
+ export const routes: Parameters<
8
+ typeof import("@neutron-build/core/client").registerRoutes
9
+ >[0];
10
+ }
@@ -1,4 +1,9 @@
1
- export default function Layout(props: { children?: unknown }) {
1
+ import type { ComponentChildren } from "preact";
2
+ export function head() {
3
+ return { link: { rel: "icon", type: "image/svg+xml", href: "/favicon.svg" } };
4
+ }
5
+
6
+ export default function Layout(props: { children?: ComponentChildren }) {
2
7
  return (
3
8
  <div style="max-width: 920px; margin: 0 auto; padding: 2rem; font-family: system-ui, sans-serif;">
4
9
  <header style="margin-bottom: 1.5rem;">
@@ -3,12 +3,20 @@
3
3
  "target": "ES2022",
4
4
  "module": "ESNext",
5
5
  "moduleResolution": "bundler",
6
- "lib": ["ES2022", "DOM"],
6
+ "lib": [
7
+ "ES2022",
8
+ "DOM"
9
+ ],
7
10
  "jsx": "react-jsx",
8
11
  "jsxImportSource": "preact",
9
12
  "strict": true,
10
13
  "skipLibCheck": true,
11
- "types": ["vite/client"]
14
+ "types": [
15
+ "vite/client"
16
+ ]
12
17
  },
13
- "include": ["src"]
18
+ "include": [
19
+ "src",
20
+ "src/**/.neutron-*.d.ts"
21
+ ]
14
22
  }