uniweb 1.0.0 → 1.0.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.
- package/LICENSE +201 -0
- package/README.md +532 -3
- package/package.json +60 -11
- package/partials/adding-pages.hbs +77 -0
- package/partials/agents.md +3000 -0
- package/partials/ai-assistance.hbs +28 -0
- package/partials/components-docs.hbs +13 -0
- package/partials/config-reference.hbs +66 -0
- package/partials/deployment.hbs +13 -0
- package/partials/learn-more.hbs +6 -0
- package/partials/quick-start.hbs +8 -0
- package/partials/search-docs.hbs +110 -0
- package/src/backend/asset-download.js +222 -0
- package/src/backend/client.js +986 -0
- package/src/backend/foundation-bring-along.js +692 -0
- package/src/backend/payment-handoff.js +362 -0
- package/src/backend/service-request.js +210 -0
- package/src/backend/site-media.js +255 -0
- package/src/backend/site-preview.js +77 -0
- package/src/backend/site-sync.js +2515 -0
- package/src/backend/workspace.js +234 -0
- package/src/commands/add.js +1900 -0
- package/src/commands/build.js +1214 -0
- package/src/commands/clone.js +466 -0
- package/src/commands/content.js +202 -0
- package/src/commands/deploy.js +537 -0
- package/src/commands/dev.js +202 -0
- package/src/commands/docs.js +530 -0
- package/src/commands/doctor.js +1982 -0
- package/src/commands/export.js +116 -0
- package/src/commands/families.js +82 -0
- package/src/commands/forget.js +197 -0
- package/src/commands/handoff.js +21 -0
- package/src/commands/i18n.js +1707 -0
- package/src/commands/inspect.js +375 -0
- package/src/commands/invite.js +24 -0
- package/src/commands/org.js +96 -0
- package/src/commands/publish.js +1087 -0
- package/src/commands/pull.js +1257 -0
- package/src/commands/push.js +663 -0
- package/src/commands/refresh.js +212 -0
- package/src/commands/register.js +1092 -0
- package/src/commands/rename.js +647 -0
- package/src/commands/site.js +358 -0
- package/src/commands/snapshot.js +461 -0
- package/src/commands/starter.js +206 -0
- package/src/commands/status.js +302 -0
- package/src/commands/sync.js +93 -0
- package/src/commands/template.js +107 -0
- package/src/commands/update.js +887 -0
- package/src/commands/validate.js +376 -0
- package/src/framework-index.json +248 -0
- package/src/index.js +2241 -0
- package/src/templates/fetchers/github.js +113 -0
- package/src/templates/fetchers/npm.js +85 -0
- package/src/templates/fetchers/release.js +92 -0
- package/src/templates/index.js +190 -0
- package/src/templates/processor.js +333 -0
- package/src/templates/resolver.js +232 -0
- package/src/templates/validator.js +155 -0
- package/src/utils/agents-stamp.js +110 -0
- package/src/utils/args.js +126 -0
- package/src/utils/asset-upload.js +270 -0
- package/src/utils/bytes.js +30 -0
- package/src/utils/code-upload.js +394 -0
- package/src/utils/config.js +417 -0
- package/src/utils/conformance.js +274 -0
- package/src/utils/dep-survey.js +176 -0
- package/src/utils/destination-prompt.js +146 -0
- package/src/utils/discover.js +75 -0
- package/src/utils/env.js +22 -0
- package/src/utils/exit.js +30 -0
- package/src/utils/fetch-retry.js +109 -0
- package/src/utils/flag-guard.js +246 -0
- package/src/utils/foundation-name.js +179 -0
- package/src/utils/git.js +342 -0
- package/src/utils/host-prompt.js +51 -0
- package/src/utils/install-integrity.js +210 -0
- package/src/utils/interactive.js +118 -0
- package/src/utils/json-file.js +72 -0
- package/src/utils/names.js +91 -0
- package/src/utils/placement.js +151 -0
- package/src/utils/pm.js +165 -0
- package/src/utils/preview.js +20 -0
- package/src/utils/pull-written.js +132 -0
- package/src/utils/records-guard.js +88 -0
- package/src/utils/registry-auth.js +994 -0
- package/src/utils/registry-orgs.js +290 -0
- package/src/utils/scaffold.js +483 -0
- package/src/utils/schemaless-report.js +30 -0
- package/src/utils/semver-precedence.js +80 -0
- package/src/utils/session-file.js +95 -0
- package/src/utils/site-content-refs.js +23 -0
- package/src/utils/site-copies.js +123 -0
- package/src/utils/site-data-upload.js +302 -0
- package/src/utils/site-identity.js +137 -0
- package/src/utils/snapshot-settings.js +112 -0
- package/src/utils/update-check.js +302 -0
- package/src/utils/uwx-read.js +157 -0
- package/src/utils/workspace.js +223 -0
- package/src/versions.js +467 -0
- package/starter/foundation/main.js +50 -0
- package/starter/foundation/sections/Section/index.jsx +95 -0
- package/starter/foundation/sections/Section/meta.js +44 -0
- package/starter/site/pages/about/1-about.md.hbs +13 -0
- package/starter/site/pages/about/page.yml +3 -0
- package/starter/site/pages/home/1-welcome.md.hbs +14 -0
- package/starter/site/pages/home/page.yml +3 -0
- package/templates/foundation/_gitignore +5 -0
- package/templates/foundation/components/.gitkeep +0 -0
- package/templates/foundation/main.js.hbs +33 -0
- package/templates/foundation/package.json.hbs +51 -0
- package/templates/foundation/sections/.gitkeep +0 -0
- package/templates/foundation/styles.css +6 -0
- package/templates/foundation/vite.config.js +3 -0
- package/templates/site/_gitignore +12 -0
- package/templates/site/entry.js +7 -0
- package/templates/site/index.html.hbs +13 -0
- package/templates/site/package.json.hbs +27 -0
- package/templates/site/public/favicon.svg +7 -0
- package/templates/site/site.yml.hbs +91 -0
- package/templates/site/theme.yml +99 -0
- package/templates/site/vite.config.js +7 -0
- package/templates/workspace/AGENTS.md.hbs +2 -0
- package/templates/workspace/README.md.hbs +87 -0
- package/templates/workspace/_gitignore +29 -0
- package/templates/workspace/_vscode/settings.json +6 -0
- package/templates/workspace/package.json.hbs +20 -0
- package/templates/workspace/pnpm-workspace.yaml.hbs +26 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Foundation Configuration
|
|
3
|
+
*
|
|
4
|
+
* This file defines foundation-level configuration:
|
|
5
|
+
* - vars: CSS custom properties that sites can override in theme.yml
|
|
6
|
+
* - defaultLayout: Name of the default layout from src/layouts/ (optional)
|
|
7
|
+
* - props: Foundation-wide props accessible via website.foundationProps
|
|
8
|
+
*
|
|
9
|
+
* Name: `name` in the default export is what this foundation registers as
|
|
10
|
+
* (@org/<name>) — `uniweb create` adds it. The version comes from package.json.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// Create a layout at src/layouts/MyLayout/index.jsx
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* CSS custom properties that sites can override in theme.yml
|
|
17
|
+
*/
|
|
18
|
+
export const vars = {
|
|
19
|
+
'header-height': {
|
|
20
|
+
default: '4rem',
|
|
21
|
+
description: 'Fixed header height',
|
|
22
|
+
},
|
|
23
|
+
'max-content-width': {
|
|
24
|
+
default: '80rem',
|
|
25
|
+
description: 'Maximum content width (1280px)',
|
|
26
|
+
},
|
|
27
|
+
'section-padding-y': {
|
|
28
|
+
default: 'clamp(4rem, 6vw, 7rem)',
|
|
29
|
+
description: 'Vertical padding for sections (fluid: adapts to viewport)',
|
|
30
|
+
},
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Runtime exports
|
|
35
|
+
*
|
|
36
|
+
* Layout components live in src/layouts/ and are auto-discovered.
|
|
37
|
+
* Each layout receives pre-rendered page areas as props:
|
|
38
|
+
* - page, website, params: Runtime context
|
|
39
|
+
* - header, body, footer: Core page regions (pre-rendered React elements)
|
|
40
|
+
* - Plus any custom areas declared in the layout's meta.js
|
|
41
|
+
*
|
|
42
|
+
* If no layouts exist, the runtime uses a default layout.
|
|
43
|
+
*/
|
|
44
|
+
export default {
|
|
45
|
+
// Optional: Create custom layouts in src/layouts/
|
|
46
|
+
// Then set defaultLayout: 'MyLayout' below
|
|
47
|
+
|
|
48
|
+
// Foundation-wide props (accessible via website.foundationProps):
|
|
49
|
+
props: {},
|
|
50
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { H1, H2, P, Link, cn } from '@uniweb/kit'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Section Component
|
|
5
|
+
*
|
|
6
|
+
* A versatile content section that handles headings, text, and links.
|
|
7
|
+
* Uses semantic tokens so it adapts to any theme context automatically.
|
|
8
|
+
*/
|
|
9
|
+
export default function Section({ content, params }) {
|
|
10
|
+
const { title, pretitle, subtitle, paragraphs = [], links = [], images = [] } = content || {}
|
|
11
|
+
|
|
12
|
+
const {
|
|
13
|
+
align = 'center',
|
|
14
|
+
width = 'default',
|
|
15
|
+
} = params || {}
|
|
16
|
+
|
|
17
|
+
const alignments = {
|
|
18
|
+
left: 'text-left',
|
|
19
|
+
center: 'text-center',
|
|
20
|
+
right: 'text-right',
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const widths = {
|
|
24
|
+
narrow: 'max-w-2xl',
|
|
25
|
+
default: 'max-w-4xl',
|
|
26
|
+
wide: 'max-w-6xl',
|
|
27
|
+
full: 'max-w-none',
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<div className={cn('py-16 px-6', alignments[align])}>
|
|
32
|
+
<div className={cn('mx-auto', widths[width])}>
|
|
33
|
+
{pretitle && (
|
|
34
|
+
<p className="text-sm font-medium text-link mb-4 uppercase tracking-wide">
|
|
35
|
+
{pretitle}
|
|
36
|
+
</p>
|
|
37
|
+
)}
|
|
38
|
+
|
|
39
|
+
{title && (
|
|
40
|
+
<H1
|
|
41
|
+
text={title}
|
|
42
|
+
className="text-heading text-3xl sm:text-4xl font-bold mb-4"
|
|
43
|
+
/>
|
|
44
|
+
)}
|
|
45
|
+
|
|
46
|
+
{subtitle && (
|
|
47
|
+
<H2
|
|
48
|
+
text={subtitle}
|
|
49
|
+
className="text-body text-xl mb-6"
|
|
50
|
+
/>
|
|
51
|
+
)}
|
|
52
|
+
|
|
53
|
+
{paragraphs.map((para, index) => (
|
|
54
|
+
<P
|
|
55
|
+
key={index}
|
|
56
|
+
text={para}
|
|
57
|
+
className="text-body text-lg mb-4 leading-relaxed"
|
|
58
|
+
/>
|
|
59
|
+
))}
|
|
60
|
+
|
|
61
|
+
{links.length > 0 && (
|
|
62
|
+
<div className={cn('mt-8 flex gap-4 flex-wrap', align === 'center' && 'justify-center')}>
|
|
63
|
+
{links.map((link, index) => (
|
|
64
|
+
<Link
|
|
65
|
+
key={index}
|
|
66
|
+
to={link.href}
|
|
67
|
+
className={cn(
|
|
68
|
+
'inline-flex items-center px-6 py-3 font-medium rounded-lg transition-colors',
|
|
69
|
+
index === 0
|
|
70
|
+
? 'bg-primary text-primary-foreground hover:bg-primary-hover'
|
|
71
|
+
: 'bg-secondary text-secondary-foreground hover:bg-secondary-hover'
|
|
72
|
+
)}
|
|
73
|
+
>
|
|
74
|
+
{link.label}
|
|
75
|
+
</Link>
|
|
76
|
+
))}
|
|
77
|
+
</div>
|
|
78
|
+
)}
|
|
79
|
+
|
|
80
|
+
{images.length > 0 && (
|
|
81
|
+
<div className="mt-8">
|
|
82
|
+
{images.map((img, index) => (
|
|
83
|
+
<img
|
|
84
|
+
key={index}
|
|
85
|
+
src={img.url || img.src}
|
|
86
|
+
alt={img.alt || ''}
|
|
87
|
+
className="rounded-lg shadow-lg mx-auto"
|
|
88
|
+
/>
|
|
89
|
+
))}
|
|
90
|
+
</div>
|
|
91
|
+
)}
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
)
|
|
95
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
title: 'Section',
|
|
3
|
+
description: 'A versatile content section for headings, text, and links',
|
|
4
|
+
|
|
5
|
+
content: {
|
|
6
|
+
pretitle: 'Eyebrow text',
|
|
7
|
+
title: 'Main heading',
|
|
8
|
+
subtitle: 'Secondary heading',
|
|
9
|
+
paragraphs: 'Body text',
|
|
10
|
+
links: 'Call-to-action buttons',
|
|
11
|
+
images: 'Section images',
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
params: {
|
|
15
|
+
align: {
|
|
16
|
+
type: 'select',
|
|
17
|
+
label: 'Alignment',
|
|
18
|
+
options: ['left', 'center', 'right'],
|
|
19
|
+
default: 'center',
|
|
20
|
+
},
|
|
21
|
+
width: {
|
|
22
|
+
type: 'select',
|
|
23
|
+
label: 'Width',
|
|
24
|
+
options: [
|
|
25
|
+
'narrow',
|
|
26
|
+
'default',
|
|
27
|
+
'wide',
|
|
28
|
+
{ value: 'full', label: 'Full Width' },
|
|
29
|
+
],
|
|
30
|
+
default: 'default',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
presets: {
|
|
35
|
+
default: {
|
|
36
|
+
label: 'Centered',
|
|
37
|
+
params: { align: 'center' },
|
|
38
|
+
},
|
|
39
|
+
left: {
|
|
40
|
+
label: 'Left Aligned',
|
|
41
|
+
params: { align: 'left' },
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Section
|
|
3
|
+
theme: dark
|
|
4
|
+
align: center
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# About {{projectName}}
|
|
8
|
+
|
|
9
|
+
## A second page to demonstrate routing
|
|
10
|
+
|
|
11
|
+
This page uses a dark theme. Click the link below to navigate back to the home page and see the theme change.
|
|
12
|
+
|
|
13
|
+
[Back to Home](/)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Section
|
|
3
|
+
theme: light
|
|
4
|
+
align: center
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Welcome to {{projectName}}
|
|
8
|
+
|
|
9
|
+
## Your Uniweb project is ready
|
|
10
|
+
|
|
11
|
+
This is a minimal starting point for your Uniweb project. Edit the content in `site/pages/` and build section types in `src/sections/`.
|
|
12
|
+
|
|
13
|
+
[About](/about)
|
|
14
|
+
[Documentation](https://github.com/uniweb)
|
|
File without changes
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Foundation Configuration
|
|
2
|
+
//
|
|
3
|
+
// ─── CSS Custom Properties ──────────────────────────────────────────────────────
|
|
4
|
+
// Export `vars` to declare CSS custom properties that sites can override in theme.yml:
|
|
5
|
+
//
|
|
6
|
+
// export const vars = {
|
|
7
|
+
// 'header-height': { default: '4rem', description: 'Fixed header height' },
|
|
8
|
+
// 'max-content-width': { default: '80rem', description: 'Max content width' },
|
|
9
|
+
// }
|
|
10
|
+
//
|
|
11
|
+
// Sites override in theme.yml: vars: { header-height: 5rem }
|
|
12
|
+
// Components use: height: var(--header-height)
|
|
13
|
+
|
|
14
|
+
{{#if isExtension}}
|
|
15
|
+
export default {
|
|
16
|
+
{{#if registryName}}
|
|
17
|
+
name: '{{registryName}}',
|
|
18
|
+
{{/if}}
|
|
19
|
+
extension: true,
|
|
20
|
+
}
|
|
21
|
+
{{else}}
|
|
22
|
+
export default {
|
|
23
|
+
{{#if registryName}}
|
|
24
|
+
// ─── Name ───────────────────────────────────────────────────────────────────
|
|
25
|
+
// What this foundation registers as — @<org>/<name> — and what sites pin.
|
|
26
|
+
name: '{{registryName}}',
|
|
27
|
+
|
|
28
|
+
{{/if}}
|
|
29
|
+
// ─── Layout ─────────────────────────────────────────────────────────────────
|
|
30
|
+
// Create layouts in layouts/MyLayout/index.jsx (auto-discovered).
|
|
31
|
+
// defaultLayout: 'MyLayout',
|
|
32
|
+
}
|
|
33
|
+
{{/if}}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{name}}",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "{{projectName}} foundation",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./_entry.generated.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./_entry.generated.js",
|
|
9
|
+
"./styles": "./styles.css",
|
|
10
|
+
"./dist": "./dist/entry.js",
|
|
11
|
+
"./dist/styles": "./dist/assets/style.css"
|
|
12
|
+
},
|
|
13
|
+
"imports": {
|
|
14
|
+
"#components/*": "./components/*",
|
|
15
|
+
"#utils/*": "./utils/*"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"sections",
|
|
20
|
+
"components",
|
|
21
|
+
"layouts",
|
|
22
|
+
"utils",
|
|
23
|
+
"main.js",
|
|
24
|
+
"styles.css",
|
|
25
|
+
"_entry.generated.js"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"dev": "vite",
|
|
29
|
+
"build": "uniweb build",
|
|
30
|
+
"build:vite": "vite build",
|
|
31
|
+
"preview": "vite preview"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"react": "{{version "react"}}",
|
|
35
|
+
"react-dom": "{{version "react-dom"}}"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"@uniweb/core": "{{version "@uniweb/core"}}",
|
|
39
|
+
"@uniweb/kit": "{{version "@uniweb/kit"}}"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@tailwindcss/vite": "^4.0.0",
|
|
43
|
+
"@uniweb/build": "{{version "@uniweb/build"}}",
|
|
44
|
+
"@vitejs/plugin-react": "^5.0.0",
|
|
45
|
+
"react": "{{version "react"}}",
|
|
46
|
+
"react-dom": "{{version "react-dom"}}",
|
|
47
|
+
"tailwindcss": "^4.0.0",
|
|
48
|
+
"vite": "^7.0.0",
|
|
49
|
+
"vite-plugin-svgr": "^4.2.0"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
node_modules
|
|
2
|
+
dist
|
|
3
|
+
.uniweb/
|
|
4
|
+
.DS_Store
|
|
5
|
+
*.local
|
|
6
|
+
|
|
7
|
+
# Generated from records/ on every build — compiled queries in public/data/, and
|
|
8
|
+
# each record's files, published in public/records/. Both land in the source tree
|
|
9
|
+
# rather than dist/, so without this they look permanent, get committed, and then
|
|
10
|
+
# look like something you may edit. They aren't: records live in records/.
|
|
11
|
+
public/data/
|
|
12
|
+
public/records/
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>{{projectName}}</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="root"></div>
|
|
11
|
+
<script type="module" src="/entry.js"></script>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{name}}",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"private": true,
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite",
|
|
8
|
+
"dev:runtime": "VITE_FOUNDATION_MODE=runtime vite",
|
|
9
|
+
"build": "uniweb build",
|
|
10
|
+
"preview": "vite preview"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@uniweb/runtime": "{{version "@uniweb/runtime"}}"{{#if foundationPath}},
|
|
14
|
+
"{{foundationName}}": "{{foundationPath}}"{{/if}}
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@tailwindcss/vite": "^4.0.0",
|
|
18
|
+
"@uniweb/build": "{{version "@uniweb/build"}}",
|
|
19
|
+
"@vitejs/plugin-react": "^5.0.0",
|
|
20
|
+
"react": "{{version "react"}}",
|
|
21
|
+
"react-dom": "{{version "react-dom"}}",
|
|
22
|
+
"react-router-dom": "^7.0.0",
|
|
23
|
+
"tailwindcss": "^4.0.0",
|
|
24
|
+
"vite": "^7.0.0",
|
|
25
|
+
"vite-plugin-svgr": "^4.2.0"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
2
|
+
<rect width="32" height="32" rx="6" fill="#1e293b"/>
|
|
3
|
+
<!-- < symbol -->
|
|
4
|
+
<path d="M12 10 L6 16 L12 22" stroke="#FA8400" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
5
|
+
<!-- > symbol -->
|
|
6
|
+
<path d="M20 10 L26 16 L20 22" stroke="#00ADFE" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Site Configuration
|
|
2
|
+
# Full reference: uniweb docs site | Schema: schemas/site.schema.json
|
|
3
|
+
|
|
4
|
+
name: {{projectName}}
|
|
5
|
+
|
|
6
|
+
{{#if foundationRef}}
|
|
7
|
+
foundation: {{{foundationRefYaml}}}
|
|
8
|
+
|
|
9
|
+
{{/if}}
|
|
10
|
+
index: home
|
|
11
|
+
|
|
12
|
+
# ─── Page Ordering ─────────────────────────────────────────────────────────────
|
|
13
|
+
# Control which pages appear in navigation and in what order.
|
|
14
|
+
# pages: [home, about, ...] # home first, about second, rest auto-discovered
|
|
15
|
+
# pages: [home, ..., contact] # home first, contact last, rest in middle
|
|
16
|
+
# pages: [home, about] # Strict: only these pages in nav (others still built)
|
|
17
|
+
# Or just set the homepage and auto-discover the rest:
|
|
18
|
+
# index: home
|
|
19
|
+
|
|
20
|
+
# ─── Content Paths ─────────────────────────────────────────────────────────────
|
|
21
|
+
# Mount external content directories into your site's page tree.
|
|
22
|
+
# Paths resolve relative to this file.
|
|
23
|
+
#
|
|
24
|
+
# paths:
|
|
25
|
+
# pages/docs: ../../../docs # Mount docs repo at /docs route
|
|
26
|
+
# pages/blog: ../../blog-content # Mount blog content at /blog route
|
|
27
|
+
# layout: ./custom-layout # Custom layout directory
|
|
28
|
+
# records: ./data # Where this site's records live
|
|
29
|
+
#
|
|
30
|
+
# To give a mounted route a layout or a title, add a local folder for it
|
|
31
|
+
# (pages/docs/) holding a folder.yml — folder.yml, not page.yml, because the
|
|
32
|
+
# mounted directory is a folder of pages. Whatever that stub leaves unset comes
|
|
33
|
+
# from the mounted directory's own folder.yml, so it need only say what differs.
|
|
34
|
+
#
|
|
35
|
+
# ! A `pages/<segment>:` sub-mount is BUILD-ONLY today. `uniweb export` and
|
|
36
|
+
# `uniweb deploy --host <adapter>` mount it normally, but `uniweb push` /
|
|
37
|
+
# `uniweb publish` do not read the key, so the mounted pages do not reach a
|
|
38
|
+
# backend (the CLI warns when it skips them). The whole-directory form
|
|
39
|
+
# `paths: { pages: <dir> }` IS carried by both. Static hosting: use either.
|
|
40
|
+
|
|
41
|
+
# ─── Structured Content ───────────────────────────────────────────────────────
|
|
42
|
+
# Three things, and they are separate on purpose:
|
|
43
|
+
#
|
|
44
|
+
# records/{schema}/ your site's records — every file here is one. The folder
|
|
45
|
+
# names their data schema:
|
|
46
|
+
# records/article/ → @/article (your foundation's)
|
|
47
|
+
# records/std/person/ → @std/person
|
|
48
|
+
# A file whose name starts with `_` is not a record.
|
|
49
|
+
# records/folder.yml OPTIONAL — sorts records into folders a query can slice
|
|
50
|
+
# with `scope:`. The one file in records/ that is not a
|
|
51
|
+
# record. Most sites have none:
|
|
52
|
+
# - folder: archive
|
|
53
|
+
# records:
|
|
54
|
+
# - article/2025-*.md
|
|
55
|
+
# queries.yml HOW CONTENT IS REACHED — named queries over those records:
|
|
56
|
+
# recent:
|
|
57
|
+
# schema: '@/article'
|
|
58
|
+
# sort: date desc
|
|
59
|
+
# limit: 10
|
|
60
|
+
#
|
|
61
|
+
# Pages and sections then name a query: `query: recent`, or
|
|
62
|
+
# `fetch: { query: recent, limit: 3 }` for anything more.
|
|
63
|
+
#
|
|
64
|
+
# You can also keep queries here instead of in queries.yml:
|
|
65
|
+
#
|
|
66
|
+
# queries:
|
|
67
|
+
# articles:
|
|
68
|
+
# schema: '@/article'
|
|
69
|
+
# sort: date desc # Sort by frontmatter field
|
|
70
|
+
#
|
|
71
|
+
# fetch:
|
|
72
|
+
# - url: https://api.example.com/team # Remote JSON
|
|
73
|
+
# as: team # Access as content.data.team
|
|
74
|
+
# - path: /data/config.json # Local file from public/
|
|
75
|
+
|
|
76
|
+
# ─── Extensions ────────────────────────────────────────────────────────────────
|
|
77
|
+
# Load additional foundations (section types) via URL.
|
|
78
|
+
# extensions:
|
|
79
|
+
# - https://cdn.example.com/effects/foundation.js
|
|
80
|
+
|
|
81
|
+
# ─── Layout ────────────────────────────────────────────────────────────────────
|
|
82
|
+
# Override the foundation's default layout per-site.
|
|
83
|
+
# layout: DocsLayout
|
|
84
|
+
# Or per-page in page.yml: layout: { name: MarketingLayout, hide: [left] }
|
|
85
|
+
|
|
86
|
+
# ─── Base Path ─────────────────────────────────────────────────────────────────
|
|
87
|
+
# For subdirectory deployments (e.g., https://example.com/docs/).
|
|
88
|
+
# base: /docs/
|
|
89
|
+
|
|
90
|
+
build:
|
|
91
|
+
prerender: true
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Theme Configuration
|
|
2
|
+
# Controls colors, typography, and visual style for the site.
|
|
3
|
+
# Only set what you want to change — everything has sensible defaults.
|
|
4
|
+
|
|
5
|
+
# ─── Colors ────────────────────────────────────────────────────────────────────
|
|
6
|
+
# Palette colors generate shades (50–950) used by semantic tokens.
|
|
7
|
+
# Values: any CSS color (hex, rgb, hsl, oklch).
|
|
8
|
+
|
|
9
|
+
colors:
|
|
10
|
+
primary: '#3b82f6' # Brand color — buttons, links, focus rings
|
|
11
|
+
# secondary: '#64748b' # Secondary actions
|
|
12
|
+
# accent: '#8b5cf6' # Highlights, decorative elements (defaults to primary)
|
|
13
|
+
# neutral: stone # Gray family — stone, zinc, gray, slate, neutral
|
|
14
|
+
|
|
15
|
+
# ─── Fonts ─────────────────────────────────────────────────────────────────────
|
|
16
|
+
# Font families for text, headings, and code blocks.
|
|
17
|
+
# Default: system-ui stack. Uncomment to use custom fonts.
|
|
18
|
+
|
|
19
|
+
# fonts:
|
|
20
|
+
# heading: '"Inter", system-ui, sans-serif'
|
|
21
|
+
# body: '"Inter", system-ui, sans-serif'
|
|
22
|
+
# code: '"JetBrains Mono", ui-monospace, monospace'
|
|
23
|
+
# import:
|
|
24
|
+
# - url: https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap
|
|
25
|
+
# - url: https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap
|
|
26
|
+
|
|
27
|
+
# ─── Page Background ──────────────────────────────────────────────────────────
|
|
28
|
+
# Background applied to the page body. Any CSS background value.
|
|
29
|
+
|
|
30
|
+
# background: '#fafaf9'
|
|
31
|
+
# background: 'linear-gradient(to bottom, #fafaf9, white)'
|
|
32
|
+
|
|
33
|
+
# ─── Appearance ────────────────────────────────────────────────────────────────
|
|
34
|
+
# Color scheme support. Simple value: light, dark, or system.
|
|
35
|
+
# Or use the expanded form for more control.
|
|
36
|
+
|
|
37
|
+
# appearance: light
|
|
38
|
+
# appearance:
|
|
39
|
+
# default: light
|
|
40
|
+
# schemes: [light, dark]
|
|
41
|
+
# allowToggle: true
|
|
42
|
+
# respectSystemPreference: true
|
|
43
|
+
|
|
44
|
+
# ─── Context Overrides ─────────────────────────────────────────────────────────
|
|
45
|
+
# Sections declare a context (light, medium, dark) in frontmatter.
|
|
46
|
+
# Each context maps semantic tokens to palette values.
|
|
47
|
+
# Override individual tokens here — unlisted tokens keep their defaults.
|
|
48
|
+
#
|
|
49
|
+
# Available tokens:
|
|
50
|
+
# Surfaces: section, card, muted
|
|
51
|
+
# Text: body, heading, subtle
|
|
52
|
+
# Border: border, ring
|
|
53
|
+
# Links: link, link-hover
|
|
54
|
+
# Actions: primary, primary-foreground, primary-hover, primary-border
|
|
55
|
+
# secondary, secondary-foreground, secondary-hover, secondary-border
|
|
56
|
+
# Status: success, warning, error, info (+ -subtle variants)
|
|
57
|
+
|
|
58
|
+
# contexts:
|
|
59
|
+
# light:
|
|
60
|
+
# section: white
|
|
61
|
+
# medium:
|
|
62
|
+
# section: neutral-100
|
|
63
|
+
# dark:
|
|
64
|
+
# heading: white
|
|
65
|
+
|
|
66
|
+
# ─── Inline Text Styles ───────────────────────────────────────────────────────
|
|
67
|
+
# Named styles for inline text in markdown: [text]{accent}
|
|
68
|
+
# Each name maps to CSS properties.
|
|
69
|
+
# Defaults: accent (colored + bold), muted (subtle).
|
|
70
|
+
|
|
71
|
+
# inline:
|
|
72
|
+
# accent:
|
|
73
|
+
# color: 'var(--link)'
|
|
74
|
+
# font-weight: '600'
|
|
75
|
+
# muted:
|
|
76
|
+
# color: 'var(--subtle)'
|
|
77
|
+
|
|
78
|
+
# ─── Code Blocks ───────────────────────────────────────────────────────────────
|
|
79
|
+
# Syntax highlighting colors for code blocks (uses Shiki).
|
|
80
|
+
|
|
81
|
+
# code:
|
|
82
|
+
# background: '#1e1e2e'
|
|
83
|
+
# foreground: '#cdd6f4'
|
|
84
|
+
# keyword: '#cba6f7'
|
|
85
|
+
# string: '#a6e3a1'
|
|
86
|
+
# number: '#fab387'
|
|
87
|
+
# comment: '#6c7086'
|
|
88
|
+
# function: '#89b4fa'
|
|
89
|
+
# variable: '#f5e0dc'
|
|
90
|
+
# type: '#f9e2af'
|
|
91
|
+
# property: '#94e2d5'
|
|
92
|
+
# tag: '#89b4fa'
|
|
93
|
+
|
|
94
|
+
# ─── Foundation Variables ──────────────────────────────────────────────────────
|
|
95
|
+
# Override variables declared by the foundation (e.g., header-height, max-width).
|
|
96
|
+
# Available variables depend on the foundation — check its main.js.
|
|
97
|
+
|
|
98
|
+
# vars:
|
|
99
|
+
# header-height: 5rem
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { defineSiteConfig } from '@uniweb/build/site'
|
|
2
|
+
|
|
3
|
+
// Options passed here REPLACE the framework's, key by key — except
|
|
4
|
+
// optimizeDeps.include / .exclude, which are added to rather than replaced.
|
|
5
|
+
// So `build: { sourcemap: true }` overrides the framework's whole build block;
|
|
6
|
+
// check what you are replacing before you pass one.
|
|
7
|
+
export default defineSiteConfig()
|