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.
Files changed (129) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +532 -3
  3. package/package.json +60 -11
  4. package/partials/adding-pages.hbs +77 -0
  5. package/partials/agents.md +3000 -0
  6. package/partials/ai-assistance.hbs +28 -0
  7. package/partials/components-docs.hbs +13 -0
  8. package/partials/config-reference.hbs +66 -0
  9. package/partials/deployment.hbs +13 -0
  10. package/partials/learn-more.hbs +6 -0
  11. package/partials/quick-start.hbs +8 -0
  12. package/partials/search-docs.hbs +110 -0
  13. package/src/backend/asset-download.js +222 -0
  14. package/src/backend/client.js +986 -0
  15. package/src/backend/foundation-bring-along.js +692 -0
  16. package/src/backend/payment-handoff.js +362 -0
  17. package/src/backend/service-request.js +210 -0
  18. package/src/backend/site-media.js +255 -0
  19. package/src/backend/site-preview.js +77 -0
  20. package/src/backend/site-sync.js +2515 -0
  21. package/src/backend/workspace.js +234 -0
  22. package/src/commands/add.js +1900 -0
  23. package/src/commands/build.js +1214 -0
  24. package/src/commands/clone.js +466 -0
  25. package/src/commands/content.js +202 -0
  26. package/src/commands/deploy.js +537 -0
  27. package/src/commands/dev.js +202 -0
  28. package/src/commands/docs.js +530 -0
  29. package/src/commands/doctor.js +1982 -0
  30. package/src/commands/export.js +116 -0
  31. package/src/commands/families.js +82 -0
  32. package/src/commands/forget.js +197 -0
  33. package/src/commands/handoff.js +21 -0
  34. package/src/commands/i18n.js +1707 -0
  35. package/src/commands/inspect.js +375 -0
  36. package/src/commands/invite.js +24 -0
  37. package/src/commands/org.js +96 -0
  38. package/src/commands/publish.js +1087 -0
  39. package/src/commands/pull.js +1257 -0
  40. package/src/commands/push.js +663 -0
  41. package/src/commands/refresh.js +212 -0
  42. package/src/commands/register.js +1092 -0
  43. package/src/commands/rename.js +647 -0
  44. package/src/commands/site.js +358 -0
  45. package/src/commands/snapshot.js +461 -0
  46. package/src/commands/starter.js +206 -0
  47. package/src/commands/status.js +302 -0
  48. package/src/commands/sync.js +93 -0
  49. package/src/commands/template.js +107 -0
  50. package/src/commands/update.js +887 -0
  51. package/src/commands/validate.js +376 -0
  52. package/src/framework-index.json +248 -0
  53. package/src/index.js +2241 -0
  54. package/src/templates/fetchers/github.js +113 -0
  55. package/src/templates/fetchers/npm.js +85 -0
  56. package/src/templates/fetchers/release.js +92 -0
  57. package/src/templates/index.js +190 -0
  58. package/src/templates/processor.js +333 -0
  59. package/src/templates/resolver.js +232 -0
  60. package/src/templates/validator.js +155 -0
  61. package/src/utils/agents-stamp.js +110 -0
  62. package/src/utils/args.js +126 -0
  63. package/src/utils/asset-upload.js +270 -0
  64. package/src/utils/bytes.js +30 -0
  65. package/src/utils/code-upload.js +394 -0
  66. package/src/utils/config.js +417 -0
  67. package/src/utils/conformance.js +274 -0
  68. package/src/utils/dep-survey.js +176 -0
  69. package/src/utils/destination-prompt.js +146 -0
  70. package/src/utils/discover.js +75 -0
  71. package/src/utils/env.js +22 -0
  72. package/src/utils/exit.js +30 -0
  73. package/src/utils/fetch-retry.js +109 -0
  74. package/src/utils/flag-guard.js +246 -0
  75. package/src/utils/foundation-name.js +179 -0
  76. package/src/utils/git.js +342 -0
  77. package/src/utils/host-prompt.js +51 -0
  78. package/src/utils/install-integrity.js +210 -0
  79. package/src/utils/interactive.js +118 -0
  80. package/src/utils/json-file.js +72 -0
  81. package/src/utils/names.js +91 -0
  82. package/src/utils/placement.js +151 -0
  83. package/src/utils/pm.js +165 -0
  84. package/src/utils/preview.js +20 -0
  85. package/src/utils/pull-written.js +132 -0
  86. package/src/utils/records-guard.js +88 -0
  87. package/src/utils/registry-auth.js +994 -0
  88. package/src/utils/registry-orgs.js +290 -0
  89. package/src/utils/scaffold.js +483 -0
  90. package/src/utils/schemaless-report.js +30 -0
  91. package/src/utils/semver-precedence.js +80 -0
  92. package/src/utils/session-file.js +95 -0
  93. package/src/utils/site-content-refs.js +23 -0
  94. package/src/utils/site-copies.js +123 -0
  95. package/src/utils/site-data-upload.js +302 -0
  96. package/src/utils/site-identity.js +137 -0
  97. package/src/utils/snapshot-settings.js +112 -0
  98. package/src/utils/update-check.js +302 -0
  99. package/src/utils/uwx-read.js +157 -0
  100. package/src/utils/workspace.js +223 -0
  101. package/src/versions.js +467 -0
  102. package/starter/foundation/main.js +50 -0
  103. package/starter/foundation/sections/Section/index.jsx +95 -0
  104. package/starter/foundation/sections/Section/meta.js +44 -0
  105. package/starter/site/pages/about/1-about.md.hbs +13 -0
  106. package/starter/site/pages/about/page.yml +3 -0
  107. package/starter/site/pages/home/1-welcome.md.hbs +14 -0
  108. package/starter/site/pages/home/page.yml +3 -0
  109. package/templates/foundation/_gitignore +5 -0
  110. package/templates/foundation/components/.gitkeep +0 -0
  111. package/templates/foundation/main.js.hbs +33 -0
  112. package/templates/foundation/package.json.hbs +51 -0
  113. package/templates/foundation/sections/.gitkeep +0 -0
  114. package/templates/foundation/styles.css +6 -0
  115. package/templates/foundation/vite.config.js +3 -0
  116. package/templates/site/_gitignore +12 -0
  117. package/templates/site/entry.js +7 -0
  118. package/templates/site/index.html.hbs +13 -0
  119. package/templates/site/package.json.hbs +27 -0
  120. package/templates/site/public/favicon.svg +7 -0
  121. package/templates/site/site.yml.hbs +91 -0
  122. package/templates/site/theme.yml +99 -0
  123. package/templates/site/vite.config.js +7 -0
  124. package/templates/workspace/AGENTS.md.hbs +2 -0
  125. package/templates/workspace/README.md.hbs +87 -0
  126. package/templates/workspace/_gitignore +29 -0
  127. package/templates/workspace/_vscode/settings.json +6 -0
  128. package/templates/workspace/package.json.hbs +20 -0
  129. 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,3 @@
1
+ id: e5f6a7b8
2
+ title: About
3
+ description: About this project
@@ -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)
@@ -0,0 +1,3 @@
1
+ id: a1b2c3d4
2
+ title: Home
3
+ description: Welcome to the site
@@ -0,0 +1,5 @@
1
+ node_modules
2
+ dist
3
+ _entry.generated.js
4
+ .DS_Store
5
+ *.local
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,6 @@
1
+ @import "tailwindcss";
2
+ @import "@uniweb/kit/theme-tokens.css";
3
+
4
+ @source "./sections/**/*.{js,jsx}";
5
+ @source "./layouts/**/*.{js,jsx}";
6
+ @source "./node_modules/@uniweb/kit/src/**/*.{js,jsx}";
@@ -0,0 +1,3 @@
1
+ import { defineFoundationConfig } from '@uniweb/build'
2
+
3
+ export default defineFoundationConfig()
@@ -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,7 @@
1
+ import '#foundation/styles'
2
+ import { start } from '@uniweb/runtime'
3
+
4
+ start({
5
+ config: __FOUNDATION_CONFIG__,
6
+ foundation: import('#foundation')
7
+ })
@@ -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()
@@ -0,0 +1,2 @@
1
+ <!-- uniweb-agents v{{cliVersion}} -->
2
+ {{> agents}}