From 31efa02757ba1aca48a5d8d2140a14126671f3a0 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Thu, 2 Jul 2026 10:45:15 -0500 Subject: [PATCH 01/76] Very first commit of BA docs --- .github/ISSUE_TEMPLATE/config.yml | 10 ++-- README.md | 9 ++-- config/activity.js | 3 +- config/addedin.js | 10 ++-- config/ba-balloon.png | Bin 0 -> 14615 bytes config/feedPlugin.js | 40 ++++++++------- config/markdownPlugin.js | 3 ++ eleventy.config.js | 12 +---- package.json | 8 +-- src/_data/config.js | 2 +- src/_data/github.js | 2 +- src/_data/githubReleases.js | 4 +- src/_includes/components/callout.css | 46 ++++++++---------- .../components/eleventy-shell-syntax.js | 2 +- .../components/giant-docs-button.webc | 11 ----- src/_includes/components/header.css | 43 +--------------- src/_includes/components/minilink.css | 9 ---- src/_includes/components/possum-home.css | 31 ------------ src/_includes/components/possum.webc | 3 +- src/_includes/components/product-tabs.css | 20 ++++++-- src/_includes/components/product-tabs.njk | 4 +- src/_includes/components/quick-start.webc | 33 +++++-------- src/_includes/components/toc.css | 13 +++-- src/_includes/header.njk | 11 +++-- src/_includes/layouts/base.njk | 1 - src/_includes/layouts/main.njk | 10 +--- src/docs/plugins/fetch.md | 4 +- src/docs/quicktips/cache-api-requests.md | 4 +- src/docs/quicktips/eliminate-js.md | 2 +- src/docs/versions.md | 4 +- src/firehose-feed.11ty.js | 2 +- src/firehose.11ty.js | 8 +-- src/index.webc | 8 +-- src/opensearch.xml | 16 +++--- src/styleguide.webc | 15 +----- 35 files changed, 145 insertions(+), 258 deletions(-) create mode 100644 config/ba-balloon.png delete mode 100644 src/_includes/components/possum-home.css diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index a97bb7719e..c59bb15126 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,13 +1,13 @@ contact_links: - - name: I’m having trouble with Eleventy! - url: https://github.com/11ty/eleventy/issues/new/choose + - name: I’m having trouble with Build Awesome or Eleventy + url: https://github.com/11ty/buildawesome/issues/new/choose about: If you have a question or suggestion regarding Eleventy (not the docs), head over to the `eleventy` repo! - - name: I built something with Eleventy and want to add it to 11ty.dev! - url: https://github.com/11ty/11ty-community/issues/new/choose + - name: I built something with Build Awesome or Eleventy and want to add it to build.awesome.me or 11ty.dev! + url: https://github.com/11ty/docs/issues/new/choose about: Sites to add to your authors page or to the Eleventy Leaderboards are now added on the `11ty/11ty-community` repository. - name: I have a feature request for the docs url: https://github.com/11ty/docs/discussions/categories/documentation-queue - about: Enhancement or new Features for the documentation. e.g. “I wish the Eleventy docs did this.” Suggest an idea! (Please search existing discussions first!) + about: Enhancement or new Features for the documentation. e.g. “I wish the docs did this.” Suggest an idea! (Please search existing discussions first!) - name: Discord Community url: https://discord.gg/GBkBy9u about: Ask the community on Discord diff --git a/README.md b/README.md index 67352a8c00..f19f2947f2 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ -

eleventy Logo

+

Build Awesome (white balloon on a green background) Logo

-# 11ty.dev 🕚⚡️🎈🐀 +# build.awesome.me 🕚⚡️🎈🐀 -- https://www.11ty.dev/ +- https://build.awesome.me/ (v4) +- https://www.11ty.dev/ (v3 and prior) -The website and documentation for the [Eleventy static site generator](https://github.com/11ty/eleventy/). +The website and documentation for the [Build Awesome (Eleventy/11ty) site generator](https://github.com/11ty/buildawesome/). ## Running Locally diff --git a/config/activity.js b/config/activity.js index 8b866cff8a..b935c78284 100644 --- a/config/activity.js +++ b/config/activity.js @@ -11,11 +11,12 @@ export default async function () { // The Eleventy Activity Feed feed.addSource("youtubeUser", "YouTube", "UCskGTioqrMBcw8pd14_334A"); // Eleventy - feed.addSource("atom", "Blog", "https://www.11ty.dev/blog/feed.xml"); + feed.addSource("atom", "Blog", "https://build.awesome.me/blog/feed.xml"); feed.addSource( "atom", "Quick Tips", "https://www.11ty.dev/docs/quicktips/feed.xml" + // "https://build.awesome.me/docs/quicktips/feed.xml" ); feed.addSource("fediverse", "Mastodon", "@eleventy@fosstodon.org"); feed.addSource("fediverse", "Mastodon", "@11ty@neighborhood.11ty.dev"); diff --git a/config/addedin.js b/config/addedin.js index 3dd1dbcc12..b1198cefed 100644 --- a/config/addedin.js +++ b/config/addedin.js @@ -1,4 +1,6 @@ import semver from "semver"; +export { rcompare } from "semver"; + import versions from "../src/_data/versions.js"; const newestPublishedVersion = versions @@ -33,7 +35,7 @@ function isPreReleaseOf(version, releasedVersion) { } // coerce -canary to -beta or if stable version is released, strips -canary and -beta -function coerceVersion(version) { +export function coerceVersion(version) { if (!isCoreRelease(version)) { return version; } @@ -66,7 +68,7 @@ function coerceVersion(version) { return versionText; } -function addedIn(version, tag, extraClass) { +export function addedIn(version, tag, extraClass) { let beforeText = "Added in "; if (isCoreRelease(version)) { // Skip super old version notes @@ -100,8 +102,6 @@ function addedIn(version, tag, extraClass) { )}`; } -function greaterThan(first, second) { +export function greaterThan(first, second) { return semver.gt(first, second); } - -export { addedIn, coerceVersion, greaterThan }; diff --git a/config/ba-balloon.png b/config/ba-balloon.png new file mode 100644 index 0000000000000000000000000000000000000000..e4ce2d572dbb68c6619515dbc3b36c24ebcace2f GIT binary patch literal 14615 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 OfX3~6s)fpyf&Uk(K7UpK literal 0 HcmV?d00001 diff --git a/config/feedPlugin.js b/config/feedPlugin.js index 588223902e..adf2180c8d 100644 --- a/config/feedPlugin.js +++ b/config/feedPlugin.js @@ -1,5 +1,15 @@ import { feedPlugin } from "@11ty/eleventy-plugin-rss"; +const FEED_BASE = "https://build.awesome.me/"; + +const METADATA_OPTIONS = { + language: "en", + base: FEED_BASE, + author: { + name: "Zach Leatherman" + } +} + export default function(eleventyConfig) { eleventyConfig.addCollection("docsFeed", function (collection) { return collection.getFilteredByGlob("src/docs/**/*.md").filter(entry => { @@ -19,13 +29,9 @@ export default function(eleventyConfig) { limit: 10, }, metadata: { - language: "en", - title: "Eleventy Documentation", - subtitle: "Updates to the Eleventy Documentation, sorted by recent git commits.", - base: "https://www.11ty.dev/", - author: { - name: "Zach Leatherman" - } + title: "Build Awesome Documentation", + subtitle: "Updates to the Build Awesome Documentation, sorted by recent git commits.", + ...METADATA_OPTIONS, } }); @@ -38,13 +44,9 @@ export default function(eleventyConfig) { limit: 0, }, metadata: { - language: "en", - title: "Eleventy Quick Tips", - subtitle: "All of the official Eleventy Quick Tips, in feed form.", - base: "https://www.11ty.dev/", - author: { - name: "Zach Leatherman" - } + title: "Build Awesome Quick Tips", + subtitle: "All of the official Build Awesome Quick Tips, in feed form.", + ...METADATA_OPTIONS, } }); @@ -57,13 +59,9 @@ export default function(eleventyConfig) { limit: 10, }, metadata: { - language: "en", - title: "Eleventy Blog", - subtitle: "News and updates about the Eleventy static site generator project.", - base: "https://www.11ty.dev/", - author: { - name: "Zach Leatherman" - } + title: "Build Awesome Blog", + subtitle: "News and updates about the Build Awesome site generator project.", + ...METADATA_OPTIONS, } }); } diff --git a/config/markdownPlugin.js b/config/markdownPlugin.js index ae704852ec..d9635ed94e 100644 --- a/config/markdownPlugin.js +++ b/config/markdownPlugin.js @@ -82,6 +82,9 @@ export default function (eleventyConfig) { } else if(level === "info") { // label is skipped classLevel = "elv-callout-info"; + } else if(level === "brand") { + // label is skipped + classLevel = "elv-callout-brand"; } else if(level === "demo") { // label is skipped classLevel = "elv-callout-skew elv-callout-skew--demo"; diff --git a/eleventy.config.js b/eleventy.config.js index 51f116d140..c1f533c900 100644 --- a/eleventy.config.js +++ b/eleventy.config.js @@ -19,7 +19,7 @@ import fontAwesomePlugin from "@11ty/font-awesome"; import { getImageColors } from "@11ty/image-color"; import imagePlugin from "./config/imagePlugin.js"; -import { addedIn, coerceVersion, greaterThan } from "./config/addedin.js"; +import { addedIn, coerceVersion, greaterThan, rcompare as compareVersion } from "./config/addedin.js"; import minificationLocalPlugin, { minifyJavaScriptFile } from "./config/minification.js"; import { bundle, bundleModulePath } from "./config/bundleJavaScript.js"; import cleanName from "./config/cleanAuthorName.js"; @@ -517,7 +517,7 @@ export default async function (eleventyConfig) { eleventyConfig.addShortcode( "latestVersion", function (versions, config, prefix = "v") { - for (let version of versions) { + for (let version of versions.sort((v1, v2) => compareVersion(v1.tag, v2.tag))) { if (version.channel && version.channel !== "latest") { continue; } @@ -900,14 +900,6 @@ to: } ); - eleventyConfig.addFilter("injectAvatars", function (content) { - return content - .split("Eleventy") - .join( - shortcodes.getIndieAvatarHtml("https://www.11ty.dev/") + "Eleventy" - ); - }); - eleventyConfig.addFilter("packageManagerCodeTransform", (content, type) => { if(type === "yarn") { return content.replaceAll("npx @11ty/", "yarn exec "); diff --git a/package.json b/package.json index 578320697d..3b23b5f416 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "@11ty/website", - "version": "2.0.0", + "name": "@11ty/docs", + "version": "4.0.0", "private": true, - "description": "The website at 11ty.dev", + "description": "The docs website for Build Awesome at build.awesome.me", "type": "module", "engines": { "node": ">=22.15" @@ -11,7 +11,7 @@ "check-links": "npx check-html-links _site", "build": "npx @11ty/eleventy --quiet && npm run create-search-index", "build-production": "npm run get-new-data && NODE_ENV=production npx @11ty/eleventy && npm run create-search-index", - "start": "npx @11ty/eleventy --serve --quiet --port=8091 --incremental", + "start": "npx @11ty/eleventy --serve --quiet --port=8091", "start-production": "NODE_ENV=production npx @11ty/eleventy --serve --quiet --port=8091", "create-search-index": "npx pagefind --site \"_site\" --glob \"{docs,blog}/**/*.html\"", "get-new-data": "rm -rf ./src/_data/builtwith/ && npx degit github:11ty/11ty-community/built-with-eleventy src/_data/builtwith/", diff --git a/src/_data/config.js b/src/_data/config.js index 4785e789b5..e29907e90f 100644 --- a/src/_data/config.js +++ b/src/_data/config.js @@ -1,6 +1,6 @@ export default { outdated: false, - prerelease: false, + prerelease: true, githubEdit: "https://github.com/11ty/docs/tree/main/", now: new Date(), env: process.env.NODE_ENV, diff --git a/src/_data/github.js b/src/_data/github.js index 1cefe3db3b..e889adebdc 100644 --- a/src/_data/github.js +++ b/src/_data/github.js @@ -7,7 +7,7 @@ export default async function () { try { // https://developer.github.com/v3/repos/#get let json = await Fetch( - "https://api.github.com/repos/11ty/eleventy", + "https://api.github.com/repos/11ty/buildawesome", { type: "json", duration: CACHE_DURATION, diff --git a/src/_data/githubReleases.js b/src/_data/githubReleases.js index fbc44b5a42..92d1dc964c 100644 --- a/src/_data/githubReleases.js +++ b/src/_data/githubReleases.js @@ -35,8 +35,8 @@ async function getPagedGitHubData(url, pageIndex = 1) { export default async function () { try { // https://developer.github.com/v3/repos/#get - let releasesJson = await getPagedGitHubData("https://api.github.com/repos/11ty/eleventy/releases"); - let tagsJson = await getPagedGitHubData("https://api.github.com/repos/11ty/eleventy/tags"); + let releasesJson = await getPagedGitHubData("https://api.github.com/repos/11ty/buildawesome/releases"); + let tagsJson = await getPagedGitHubData("https://api.github.com/repos/11ty/buildawesome/tags"); let releases = releasesJson.filter(entry => { // no drafts diff --git a/src/_includes/components/callout.css b/src/_includes/components/callout.css index 6640a24635..5d4f483e46 100644 --- a/src/_includes/components/callout.css +++ b/src/_includes/components/callout.css @@ -9,14 +9,26 @@ --callout-label-skew: 11deg; line-height: 1.5; - margin-inline: -1rem; + margin-inline: 0; margin-block: 1em; background-color: var(--callout-secondary); border: 1.5px solid var(--callout-primary); } +header .elv-callout { + margin: 0; + border-radius: 0; + box-shadow: 0 3px 0 0 rgba(0, 0, 0, 0.08); + + .elv-callout-c { + text-align: center; + text-wrap: balance; + } +} +main .elv-callout { + margin-inline: -1rem; +} details .elv-callout { - margin-left: 0; - margin-right: 0; + margin-inline: 0; } /* #2col */ @@ -167,30 +179,6 @@ table .elv-callout { margin-bottom: 0; } -/* Sticky callout is for legacy docs versions */ -body > .elv-callout-sticky .elv-callout-label { - display: none; -} -body > .elv-callout-sticky .elv-callout { - margin: 0; - border-left: 0; - border-right: 0; - border-radius: 0; - margin-bottom: 1em; -} -body > .elv-callout-sticky .elv-callout-c { - text-align: center; - text-wrap: balance; -} -@media (min-height: 43.75em) { /* 700px */ - body > .elv-callout-sticky { - position: sticky; - top: 0; - z-index: 12; - box-shadow: 0 3px 0 0 rgba(0, 0, 0, 0.08); - } -} - /* in left nav */ .elv-toc .elv-callout { margin-block-start: 0; @@ -252,6 +240,10 @@ body > .elv-callout-sticky .elv-callout-c { .elv-callout-warn { --callout-hue: 60; } +/* Brand */ +.elv-callout-brand { + --callout-hue: 162; +} .elv-callout-skew--demo { --callout-hue: 270; } diff --git a/src/_includes/components/eleventy-shell-syntax.js b/src/_includes/components/eleventy-shell-syntax.js index c94246d665..00770651d6 100644 --- a/src/_includes/components/eleventy-shell-syntax.js +++ b/src/_includes/components/eleventy-shell-syntax.js @@ -3,7 +3,7 @@ const css = String.raw; // Properly highlights Eleventy syntax in a terminal window class EleventyShell { static selector = "code.language-11ty-output"; - static PREFIX = "[11ty] "; + static PREFIX = "[buildawesome] "; static cssAdded = false; static register(root) { diff --git a/src/_includes/components/giant-docs-button.webc b/src/_includes/components/giant-docs-button.webc index ff7d9a2ad5..f0beb59880 100644 --- a/src/_includes/components/giant-docs-button.webc +++ b/src/_includes/components/giant-docs-button.webc @@ -24,17 +24,6 @@ a.btn-primary:hover { transform: none; } } -/* #2col × 950px */ -@media (min-width: 41.4375em) and (min-height: 59.375em) { - :host-context(html:not(:has(:focus-visible))) { - display: block; - position: sticky; - top: 10px; - left: 0; - right: 0; - z-index: 10; - } -} Documentation \ No newline at end of file diff --git a/src/_includes/components/header.css b/src/_includes/components/header.css index 83bbfd6d6c..8c2cd0ffdb 100644 --- a/src/_includes/components/header.css +++ b/src/_includes/components/header.css @@ -20,19 +20,13 @@ } .elv-header { position: relative; - z-index: 1; + z-index: 2; } .elv-hed, .elv-nav-header { width: 100%; margin: 0 auto; } -/* #2col */ -@media (min-width: 41.4375em) { - .elv-header-default .elv-nav-header { - margin-block-end: 3.5rem; - } -} .elv-nav-menu { padding: 1rem; margin-inline: auto; @@ -48,26 +42,6 @@ .elv-nav-menu { max-width: calc(var(--layout-max)); } -.elv-nav-menu-logo { - display: block; - width: 2em; - height: 2em; - max-height: 2em; - background-color: #222; - text-align: center; - border-radius: 0.15em; - padding: 0 0.25em; -} -.elv-nav-menu-logo svg { - width: 100%; - height: 100%; - color: #fff; - margin: 0; -} -/* Full width logo */ -.elv-header-default .elv-nav-header { - max-width: none; -} /* Sticky, #2col × 600px */ @media (min-width: 41.4375em) and (min-height: 43.75em) { @@ -218,11 +192,6 @@ a[href].elv-hero-11ty:visited { color: #fff; background-color: #222; } -.elv-header-default .elv-hero { - display: flex; - justify-content: center; - padding-inline-end: 8rem; -} .elv-header-docs .elv-hero { float: left; margin-right: 0.5em; @@ -256,16 +225,6 @@ main h1.elv-hed { border: none; } -/* fix: big header link fighting with versions overlay */ -.elv-header-default .elv-menu { - position: relative; - z-index: 1; -} -.elv-header-default .elv-nav-header { - position: relative; - z-index: 0; -} - .elv-mascot-image { position: absolute; bottom: 0; diff --git a/src/_includes/components/minilink.css b/src/_includes/components/minilink.css index a0fb92b19f..7dfd8530d0 100644 --- a/src/_includes/components/minilink.css +++ b/src/_includes/components/minilink.css @@ -134,15 +134,6 @@ a[href]:focus .minilink-buildcost { .minilink-github > :first-child { color: #eac54f; } -/* GitHub star count, home page variant (dark theme) */ -.elv-header-default .minilink-github { - background-color: #222; - color: #fff; -} -.elv-header-default .minilink[href]:hover, -.elv-header-default .minilink[href]:focus { - background-color: #444; -} @media (prefers-color-scheme: dark) { .minilink-github.minilink-github { background-color: #222; diff --git a/src/_includes/components/possum-home.css b/src/_includes/components/possum-home.css deleted file mode 100644 index 03c627522b..0000000000 --- a/src/_includes/components/possum-home.css +++ /dev/null @@ -1,31 +0,0 @@ -/* #2col */ -@media (min-width: 41.4375em) { - .elv-header-default:has(.elv-possum) { - overflow: hidden; - } - .elv-header-default .elv-possum { - --possum-top: 20%; - pointer-events: none; - width: auto; - height: calc((50vh - 2rem) / 1.6); - top: var(--possum-top); - left: 1vw; - right: auto; - animation-duration: 180s; - animation-name: balloonFloat; - } -} - -@media (prefers-reduced-motion: reduce) { - .elv-header-default .elv-possum { - animation-duration: 0s; - } -} -@keyframes balloonFloat { - from { - transform: translate(-7vw, var(--possum-top)); - } - to { - transform: translate(100vw, -52%); - } -} diff --git a/src/_includes/components/possum.webc b/src/_includes/components/possum.webc index 7bed5a856e..728006cdd7 100644 --- a/src/_includes/components/possum.webc +++ b/src/_includes/components/possum.webc @@ -1,2 +1 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/src/_includes/components/product-tabs.css b/src/_includes/components/product-tabs.css index 6e26ae10fe..08c3a2edf0 100644 --- a/src/_includes/components/product-tabs.css +++ b/src/_includes/components/product-tabs.css @@ -1,12 +1,22 @@ .products { --products-spacing: 1em; - background-color: rgb(240 241 243); -} -@media (prefers-color-scheme: dark) { - .products { - background-color: #222; + --products-stripe-hue: 162; + --products-stripe-light: 84%; + background-color: #222; + background-image: repeating-linear-gradient( + -45deg, + hsl(var(--products-stripe-hue), 100%, var(--products-stripe-light)), + hsl(var(--products-stripe-hue), 100%, var(--products-stripe-light)) 20px, + hsl(var(--products-stripe-hue), 100%, calc(var(--products-stripe-light) + 6%)) 20px, + hsl(var(--products-stripe-hue), 100%, calc(var(--products-stripe-light) + 6%)) 40px + ); + + @media (prefers-color-scheme: dark) { + --products-stripe-hue: 162; + --products-stripe-light: 13%; } } + .products-max { display: flex; flex-wrap: wrap; diff --git a/src/_includes/components/product-tabs.njk b/src/_includes/components/product-tabs.njk index 304e422de0..9f6f803d46 100644 --- a/src/_includes/components/product-tabs.njk +++ b/src/_includes/components/product-tabs.njk @@ -1,8 +1,8 @@
- {% include "components/announcement.njk" %} + {# {% include "components/announcement.njk" %} #}
- {% include "components/ba-balloon.svg" %}{% include "components/ba-wordmark.svg" %}Build Awesome + {% include "components/ba-balloon.svg" %}{% include "components/ba-wordmark.svg" %}Build Awesome Font Awesome Web Awesome diff --git a/src/_includes/components/quick-start.webc b/src/_includes/components/quick-start.webc index 1501613f55..02c61eb4c4 100644 --- a/src/_includes/components/quick-start.webc +++ b/src/_includes/components/quick-start.webc @@ -1,6 +1,6 @@

Quick Start

-

Eleventy requires a way to run JavaScript on your computer and we recommend Node.js (version or newer). You can check whether or not you have Node.js installed by running node --version in a Terminal. (Well, wait—what is a Terminal?) If node is not found or it reports a version number below , you will need to install Node.js before moving on.

+

Build Awesome requires a way to run JavaScript on your computer and we recommend Node.js (version or newer). You can check whether or not you have Node.js installed by running node --version in a Terminal. (Well, wait—what is a Terminal?) If node is not found or it reports a version number below , you will need to install Node.js before moving on.

Now we’ll create an index.md Markdown file. You can do this in the text editor of your choice or by running one of these commands in your terminal:

@@ -33,7 +33,7 @@ echo '# Heading' | npx @11ty/create index.md
-

Run Eleventy using npx, an npm-provided command that is bundled with Node.js.

+

Run Build Awesome using npx, an npm-provided command that is bundled with Node.js.

@@ -43,49 +43,38 @@ echo '# Heading' | npx @11ty/create index.md
-npx @11ty/eleventy --serve +npx @awesome.me/buildawesome --serve
-pnpm dlx @11ty/eleventy --serve +pnpm dlx @awesome.me/buildawesome --serve

pnpm is an optional alternative to npm that needs to be installed separately.

-yarn dlx @11ty/eleventy --serve +yarn dlx @awesome.me/buildawesome --serve

Yarn is an optional alternative to npm that needs to be installed separately.

-

Eleventy compiles any files in the current directory matching valid file extensions (md is one of many) to the _site output folder. It might look like this:

+

Build Awesome compiles any files in the current directory matching valid file extensions (md is one of many) to the _site output folder. It might look like this:

The --serve option also starts a local development server. Open up http://localhost:8080/ in your favorite web browser to view your web site.

-

If you’d like to experiment further with different template syntax, edit the following sample index.md file in your browser. Front Matter, Liquid and Markdown are in use.

- - - - ---- -title: Heading ---- -# {{ title }} - - - +

If you’d like to experiment further with different template syntax, try out the playground below.

  • Read our full Get Started guide on the docs.
  • diff --git a/src/_includes/components/toc.css b/src/_includes/components/toc.css index 6e55f357db..40be60c954 100644 --- a/src/_includes/components/toc.css +++ b/src/_includes/components/toc.css @@ -16,13 +16,18 @@ font-size: 1rem; /* Reset */ } .elv-header-docs + .elv-layout .elv-toc { - --elv-toc-sticky-top: 5.625rem; + --elv-toc-sticky-top: 6rem; } -@media (min-width: 55em) { - /* 880px */ +.elv-header-docs:has(.elv-callout) + .elv-layout .elv-toc { + --elv-toc-sticky-top: 13.5rem; +} +@media (min-width: 55em) {/* 880px */ .elv-header-docs + .elv-layout .elv-toc { --elv-toc-sticky-top: 4rem; } + .elv-header-docs:has(.elv-callout) + .elv-layout .elv-toc { + --elv-toc-sticky-top: 9rem; + } } @media (prefers-color-scheme: dark) { .elv-toc { @@ -281,7 +286,7 @@ details.toc[open] > summary { /* Sidebar ads */ .elv-toc .elv-callout:first-child:has(+ .elv-callout) { - --callout-hue: 162; + --callout-hue: 162; /* Also a `brand` callout */ } .elv-toc-callout-link { display: block; diff --git a/src/_includes/header.njk b/src/_includes/header.njk index 8306deb47a..817dd2959f 100644 --- a/src/_includes/header.njk +++ b/src/_includes/header.njk @@ -4,7 +4,6 @@
    \ No newline at end of file diff --git a/src/_includes/layouts/base.njk b/src/_includes/layouts/base.njk index 252a6d1d6c..8e0f100a81 100644 --- a/src/_includes/layouts/base.njk +++ b/src/_includes/layouts/base.njk @@ -117,7 +117,6 @@ let eleventyComputed = { {% include 'components/flex-luthor/flex-luthor-separators.css' %} {% include 'components/testimonials.css' %} {% include 'components/possum.css' %} - {% include 'components/possum-home.css' %} /* Filters */ .filter-tags--hide { diff --git a/src/_includes/layouts/main.njk b/src/_includes/layouts/main.njk index 301d5d9ab4..c46fc3f671 100644 --- a/src/_includes/layouts/main.njk +++ b/src/_includes/layouts/main.njk @@ -1,6 +1,7 @@ --- layout: layouts/base.njk -headerClass: elv-header-default +headerClass: elv-header-docs +isDocs: true ---
    Skip to navigation @@ -9,13 +10,6 @@ headerClass: elv-header-default {% include "header.njk" %} -{% if config.outdated -%} -
    {% callout "warn" %}This is an older version of Eleventy. Go to the newest Eleventy docs (current path: {{ page.url }}) or the full release history.{% endcallout %}
    -{% endif -%} -{% if config.prerelease -%} -
    {% callout "info" %}These docs are for an upcoming version of Eleventy and subject to change—take extra care before linking here! Look to the latest docs instead (or full release history).{% endcallout %}
    -{% endif -%} -
    {% include "components/docs-toc.njk" %}
    diff --git a/src/docs/plugins/fetch.md b/src/docs/plugins/fetch.md index f2a321b02b..21e241520d 100644 --- a/src/docs/plugins/fetch.md +++ b/src/docs/plugins/fetch.md @@ -60,7 +60,7 @@ Consider the following example, perhaps in an Eleventy [Global Data File](/docs/ import Fetch from "@11ty/eleventy-fetch"; export default async function () { - let url = "https://api.github.com/repos/11ty/eleventy"; + let url = "https://api.github.com/repos/11ty/buildawesome"; let json = await Fetch(url, { duration: "1d", // save for 1 day @@ -130,7 +130,7 @@ import Fetch from "@11ty/eleventy-fetch"; export default async function () { try { - let url = "https://api.github.com/repos/11ty/eleventy"; + let url = "https://api.github.com/repos/11ty/buildawesome"; /* This returns a promise */ return Fetch(url, { diff --git a/src/docs/quicktips/cache-api-requests.md b/src/docs/quicktips/cache-api-requests.md index d52fedbda9..d6663a6e5d 100644 --- a/src/docs/quicktips/cache-api-requests.md +++ b/src/docs/quicktips/cache-api-requests.md @@ -32,7 +32,7 @@ import Fetch from "@11ty/eleventy-fetch"; export default async function () { // https://developer.github.com/v3/repos/#get - let json = await Fetch("https://api.github.com/repos/11ty/eleventy", { + let json = await Fetch("https://api.github.com/repos/11ty/buildawesome", { duration: "1d", // 1 day type: "json", // also supports "text" or "buffer" }); @@ -59,7 +59,7 @@ export default async function () { try { // https://developer.github.com/v3/repos/#get let json = await Fetch( - "https://api.github.com/repos/11ty/eleventy", + "https://api.github.com/repos/11ty/buildawesome", { duration: "1d", // 1 day type: "json", // also supports "text" or "buffer" diff --git a/src/docs/quicktips/eliminate-js.md b/src/docs/quicktips/eliminate-js.md index 8102ff413c..1129e1abc2 100644 --- a/src/docs/quicktips/eliminate-js.md +++ b/src/docs/quicktips/eliminate-js.md @@ -28,7 +28,7 @@ export default async function () { console.log("Fetching new github stargazers count…"); // GitHub API: https://developer.github.com/v3/repos/#get - let res = await fetch("https://api.github.com/repos/11ty/eleventy"); + let res = await fetch("https://api.github.com/repos/11ty/buildawesome"); let json = await res.json(); // prune the data to return only what we want diff --git a/src/docs/versions.md b/src/docs/versions.md index baee1461a2..b13eac314e 100644 --- a/src/docs/versions.md +++ b/src/docs/versions.md @@ -16,8 +16,8 @@ You can also browse the latest releases on: ## Major Branches
      -
    • Soon: v4 (Currently in alpha)
    • -
    • www.11ty.dev for v3 (Latest, stable)
    • +
    • build.awesome.me for v4 (Currently in alpha)
    • +
    • www.11ty.dev for v3 (Latest Stable)
    • v2.11ty.dev
    • v1.11ty.dev
    • v0.11ty.dev
    • diff --git a/src/firehose-feed.11ty.js b/src/firehose-feed.11ty.js index 69ed8af64d..d5b172d3c6 100644 --- a/src/firehose-feed.11ty.js +++ b/src/firehose-feed.11ty.js @@ -18,7 +18,7 @@ export default class { title: "The Eleventy Firehose", subtitle: "One centralized feed of Eleventy activity across the web.", language: "en", - url: `https://www.11ty.dev${PERMALINK}`, + url: `https://build.awesome.me${PERMALINK}`, }); } } diff --git a/src/firehose.11ty.js b/src/firehose.11ty.js index 3e8fa488cc..926ba31c17 100644 --- a/src/firehose.11ty.js +++ b/src/firehose.11ty.js @@ -2,6 +2,8 @@ import { escapeText } from "entities/escape"; import activity from "../config/activity.js"; +const html = String.raw; + function getSlugFromTitle(str) { if (str.startsWith("GitHub Releases [")) { return "github"; @@ -30,10 +32,10 @@ export async function data() { } export async function render({ entries }) { - return ` -

      Eleventy Firehose

      + return html` +

      Build Awesome Firehose

      -

      This page shows activity from the Eleventy Blog, Quick Tips, YouTube channel, Mastodon account, and all GitHub releases (all of 11ty org repositories).

      +

      This page shows activity from the Build Awesome Blog, Quick Tips, YouTube channel, Mastodon account, and all GitHub releases (all of 11ty org repositories).

      • Subscribe to the Firehose RSS feed.
      • diff --git a/src/index.webc b/src/index.webc index d009057734..63370157b9 100644 --- a/src/index.webc +++ b/src/index.webc @@ -54,8 +54,8 @@ export function randomTestimonialLink(testimonials) {
        -

        Try Eleventy in Your Browser

        -

        Next try editing one of the three files in this Eleventy project. Change the title in front matter on a blog post and watch the list update on the index page!

        +

        Try Build Awesome in Your Browser

        +

        Now try editing one of the three files in this project. You can make use of Front Matter, Liquid and Markdown template syntax. Change the title in front matter on a blog post and watch the list update on the index page!

        --- @@ -74,7 +74,7 @@ You can type here! - [{{ post.data.title }}]({{ post.url}}) {%- endfor %} -_Built with {{ eleventy.generator }}_ +_Built with {{ buildawesome.generator }}_ @@ -97,7 +97,7 @@ tags: posts

        News from the Blog

          -

          Why should you use Eleventy?

          +

          Why should you use Build Awesome?

          • Eleventy has fast builds and even faster web sites. diff --git a/src/opensearch.xml b/src/opensearch.xml index c7c49b3eff..9e949926eb 100644 --- a/src/opensearch.xml +++ b/src/opensearch.xml @@ -2,15 +2,15 @@ - 11ty - Eleventy - Search for things on the Eleventy website + Build Awesome + Build Awesome (11ty) + Search for things on the Build Awesome website UTF-8 - https://www.11ty.dev/img/favicon.png - + type="image/png">https://build.awesome.me/img/favicon-16.png --> + https://build.awesome.me/img/favicon.png + - https://www.11ty.dev/ + template="https://build.awesome.me/opensearch.xml" /> + https://build.awesome.me/ \ No newline at end of file diff --git a/src/styleguide.webc b/src/styleguide.webc index 3e75ab96c7..6883b57fbf 100644 --- a/src/styleguide.webc +++ b/src/styleguide.webc @@ -1,5 +1,5 @@ --- -headerTitle: 11ty.dev Style Guide +headerTitle: Docs Style Guide layout: layouts/docs.njk --- -Documentation \ No newline at end of file +Documentation \ No newline at end of file diff --git a/src/_includes/components/quick-start.webc b/src/_includes/components/quick-start.webc index d054d1f36c..7b4a847bfe 100644 --- a/src/_includes/components/quick-start.webc +++ b/src/_includes/components/quick-start.webc @@ -1,4 +1,4 @@ -

            Quick Start

            +

            Quick Start

            Build Awesome requires a way to run JavaScript on your computer and we recommend Node.js (version or newer). You can check whether or not you have Node.js installed by running node --version in a Terminal. (Well, wait—what is a Terminal?) If node is not found or it reports a version number below , you will need to install Node.js before moving on.

            diff --git a/src/_includes/components/subhed.css b/src/_includes/components/subhed.css index 315caa0a92..572c40f954 100644 --- a/src/_includes/components/subhed.css +++ b/src/_includes/components/subhed.css @@ -1,9 +1,9 @@ .subhed { - font-family: system-ui, sans-serif; - font-size: 0.9375em; /* 15px /16 */ + font-family: Cera Round Pro, system-ui, sans-serif; + font-size: 1em; line-height: 1; text-transform: uppercase; - letter-spacing: 1px; + letter-spacing: 0.125em; /* 2px /16 */ margin: 0; color: #666; text-align: center; diff --git a/src/_includes/footer-nav.njk b/src/_includes/footer-nav.njk index 72d48121c2..eb3bdeca6b 100644 --- a/src/_includes/footer-nav.njk +++ b/src/_includes/footer-nav.njk @@ -8,7 +8,7 @@
          • Built With
          • -
          • Build Awesome v{{ eleventy.version }}
          • +
          • Build Awesome v{{ eleventy.version }}
          • Built
          • Statistics
          • {%- if github and github.stargazers %} diff --git a/src/_includes/header.njk b/src/_includes/header.njk index 9dd31d9445..dcf4b27508 100644 --- a/src/_includes/header.njk +++ b/src/_includes/header.njk @@ -80,6 +80,6 @@ {% if config.outdated -%} {% callout "warn" %}This is an older version of Eleventy. Go to the newest Eleventy docs (current path: {{ page.url }}) or the full release history.{% endcallout %} {% elseif config.prerelease -%} - {% callout "brand" %}These docs are for an upcoming version of Build Awesome (Eleventy) and are subject to change—take extra care before linking here as URLs may change! Look to the latest stable docs instead (or the full release history).{% endcallout %} + {% callout "brand" %}These docs are for an upcoming version of Build Awesome and are subject to change—take extra care before linking here as URLs may change! Look to the latest stable docs instead (or the full release history).{% endcallout %} {% endif -%} \ No newline at end of file diff --git a/src/_includes/index.css b/src/_includes/index.css index 8fc7a9ec3a..4be6092206 100644 --- a/src/_includes/index.css +++ b/src/_includes/index.css @@ -50,7 +50,7 @@ html { overflow-y: scroll; } body { - font-family: system-ui, sans-serif; + font-family: Cera Round Pro, system-ui, sans-serif; background-color: var(--background-color); color: var(--color); margin: 0; @@ -169,6 +169,11 @@ main details[open] > summary { margin: 0 0 1em; } +.brand-typeface { + font-family: Cera Round Pro, system-ui, sans-serif; + font-weight: 700; +} + /* Headings */ h1, h2, @@ -177,9 +182,8 @@ h4, h5, .elv-hed, .elv-h2, -.elv-h3, -.benchnine { - font-family: BenchNine, system-ui, sans-serif; +.elv-h3 { + font-family: Cera Round Pro, system-ui, sans-serif; font-weight: 700; text-wrap: pretty; } @@ -198,6 +202,7 @@ main .elv-toc + #skip-content > heading-anchors > h1:first-child { main .breadcrumb + h1, main h1:first-child, main .elv-toc + #skip-content > heading-anchors > h1:first-child { + padding-block-end: .5em; border-bottom: 1px solid #aaa; } @media (min-width: 55em) { @@ -325,7 +330,7 @@ footer.elv-layout { display: grid; gap: 2rem; grid-template-columns: var(--toc-sidebar-size) minmax(1px, 1fr); - padding: 1rem 1rem 2rem 1rem; + padding: 1.5rem 1rem 2rem 1rem; } } diff --git a/src/_includes/layouts/base.njk b/src/_includes/layouts/base.njk index fbf086ea7f..90ee20b55c 100644 --- a/src/_includes/layouts/base.njk +++ b/src/_includes/layouts/base.njk @@ -46,7 +46,7 @@ let eleventyComputed = { } {%- endif %} - + diff --git a/src/_includes/social-callout.njk b/src/_includes/social-callout.njk index 9ed97bd92d..1d8274d5bc 100644 --- a/src/_includes/social-callout.njk +++ b/src/_includes/social-callout.njk @@ -1,7 +1,7 @@ {% callout %}
            {%- if not ignoreGitHubButtons %} - {% include "star-on-github.njk" %} +

            {% include "star-on-github.njk" %} This is the easiest way to support our underdog project!

            {%- endif %}
            • Read the Blog
            • diff --git a/src/_includes/star-on-github.njk b/src/_includes/star-on-github.njk index 12ec42cee4..98014e40ae 100644 --- a/src/_includes/star-on-github.njk +++ b/src/_includes/star-on-github.njk @@ -1 +1 @@ -

              {% if github.stargazers %}{{ github.stargazers | humanReadableNum }}{% endif %} Star Build Awesome on GitHub! This is the easiest way to support our underdog project.

              \ No newline at end of file + {% if github.stargazers %}{{ github.stargazers | humanReadableNum }}{% endif %} Star Build Awesome on GitHub! \ No newline at end of file diff --git a/src/authors/author-pages.md b/src/authors/author-pages.md index 137da78557..c3542f806d 100644 --- a/src/authors/author-pages.md +++ b/src/authors/author-pages.md @@ -41,7 +41,7 @@ let eleventyComputed = { ### Member of the [Eleventy Super Professional Business Network {% emoji "💼" %}](/super-professional-business-network/) -Let’s Do Business +Let’s Do Business {%- endif %} {%- set authorStarters = starters | sortObjectByOrder | findBy("author", author.name) %} diff --git a/src/blog/2025-01-13-certification.md b/src/blog/2025-01-13-certification.md index ec5d5682f6..7a88470564 100644 --- a/src/blog/2025-01-13-certification.md +++ b/src/blog/2025-01-13-certification.md @@ -9,5 +9,5 @@ In the year 2025 Eleventy has launched an [official](https://fediverse.zachleat. - + \ No newline at end of file diff --git a/src/css/fonts/subset.sh b/src/css/fonts/subset.sh index 8f8835f060..d6e03068ac 100755 --- a/src/css/fonts/subset.sh +++ b/src/css/fonts/subset.sh @@ -3,6 +3,6 @@ # npm install datauri-cli -g # datauri BenchNine-Bold-kern-latin.woff2 --copy -pyftsubset "BenchNine-Bold.ttf" --output-file="BenchNine-Bold-kern-latin.woff2" --flavor=woff2 --layout-features=ccmp,locl,mark,mkmk,kern --no-hinting --desubroutinize --unicodes=U+20-7E,U+D6,U+D8,U+E9,U+F4,U+F6,U+F8,U+15A,U+200B,U+2014,U+2019,U+2026 +# pyftsubset "BenchNine-Bold.ttf" --output-file="BenchNine-Bold-kern-latin.woff2" --flavor=woff2 --layout-features=ccmp,locl,mark,mkmk,kern --no-hinting --desubroutinize --unicodes=U+20-7E,U+D6,U+D8,U+E9,U+F4,U+F6,U+F8,U+15A,U+200B,U+2014,U+2019,U+2026 pyftsubset "RobotoMono-Regular.ttf" --output-file="RobotoMono-Regular-kern-latin.woff2" --flavor=woff2 --layout-features=ccmp,locl,mark,mkmk,kern --no-hinting --desubroutinize --unicodes=U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD pyftsubset "RobotoMono-Regular.ttf" --output-file="RobotoMono-Regular-kern-latinext.woff2" --flavor=woff2 --layout-features=ccmp,locl,mark,mkmk,kern --no-hinting --desubroutinize --unicodes=U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF diff --git a/src/css/type/cera-round-pro-black.woff2 b/src/css/type/cera-round-pro-black.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e9080808d2a589f5e8d7667bc424ac04e6a42bbd GIT binary patch literal 21948 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 TB8m3y(*y>Li2o(= literal 0 HcmV?d00001 diff --git a/src/css/type/cera-round-pro-bold.woff2 b/src/css/type/cera-round-pro-bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..983167e957f6bb4a98d965f0ba6e0563b6b5dd9e GIT binary patch literal 23216 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 literal 0 HcmV?d00001 diff --git a/src/css/type/cera-round-pro-medium.woff2 b/src/css/type/cera-round-pro-medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8b97ec54b3762791b7c041b6669a0ae111ea14fa GIT binary patch literal 22980 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 LxS{T60RR91=?S5x literal 0 HcmV?d00001 diff --git a/src/css/type/cera-round-pro-regular.woff2 b/src/css/type/cera-round-pro-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3cfb92f4dac017c93d5b0fa5c77a677f1763753a GIT binary patch literal 22536 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 literal 0 HcmV?d00001 diff --git a/src/docs/index.webc b/src/docs/index.webc index b64714140a..803d1d9574 100644 --- a/src/docs/index.webc +++ b/src/docs/index.webc @@ -11,12 +11,12 @@ overrideCommunityLinks: true

              Get Started

              -

              Eleventy requires a JavaScript runtime, typically Node.js (version or higher).

              +

              Build Awesome requires a JavaScript runtime, typically Node.js (version or higher).

              You can check whether or not you have Node.js installed by running node --version in a terminal application. (Well, wait—what is a Terminal?) If the command is not found or it reports a number lower than , you will need to download and install Node.js before moving on to the next step. Learn why it’s encouraged to use even numbered releases of Node.js.

              diff --git a/src/index.webc b/src/index.webc index 7f11bf439c..6d8b2596c0 100644 --- a/src/index.webc +++ b/src/index.webc @@ -47,10 +47,10 @@ export function randomTestimonialLink(testimonials) {

              Build Awesome helps you build better web sites

              -

              Build Awesome is a lightweight developer tool to help you build web sites without getting in your way.

              +

              Build Awesome is a tool to help you build fast web sites faster.

                -
              • It’s fast and offers best-in-class build times for JavaScript site generators.
              • +
              • It’s fast with best-in-class build times for JavaScript site generators.
              • It generates fast web sites focused on reducing runtime JavaScript.
              • It’s lean: we decrease our dependency count with every release.
              • It’s secure: static web sites are the most secure web sites.
              • @@ -160,7 +160,7 @@ tags: posts -

                Built With Eleventy

                +

                Built With Build Awesome

                diff --git a/src/super-professional-business-network/index.njk b/src/super-professional-business-network/index.njk index c143ecc7a8..d9497cc21b 100644 --- a/src/super-professional-business-network/index.njk +++ b/src/super-professional-business-network/index.njk @@ -15,7 +15,7 @@ layout: layouts/docs.njk {% indieavatar author.business_url, "avatar-large" %}{{ author.business_name or author.name }}
          From bad3ea2d95b04c73277ff32faee57f5bf684a687 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Thu, 2 Jul 2026 14:16:42 -0500 Subject: [PATCH 07/76] Redirect all blog links back to stable --- config/activity.js | 5 ++--- src/firehose.11ty.js | 2 +- vercel.json | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/activity.js b/config/activity.js index b935c78284..031c503c19 100644 --- a/config/activity.js +++ b/config/activity.js @@ -11,12 +11,11 @@ export default async function () { // The Eleventy Activity Feed feed.addSource("youtubeUser", "YouTube", "UCskGTioqrMBcw8pd14_334A"); // Eleventy - feed.addSource("atom", "Blog", "https://build.awesome.me/blog/feed.xml"); + feed.addSource("atom", "Blog", "https://www.11ty.dev/blog/feed.xml"); feed.addSource( "atom", "Quick Tips", - "https://www.11ty.dev/docs/quicktips/feed.xml" - // "https://build.awesome.me/docs/quicktips/feed.xml" + "https://build.awesome.me/docs/quicktips/feed.xml" ); feed.addSource("fediverse", "Mastodon", "@eleventy@fosstodon.org"); feed.addSource("fediverse", "Mastodon", "@11ty@neighborhood.11ty.dev"); diff --git a/src/firehose.11ty.js b/src/firehose.11ty.js index 926ba31c17..9c4751ff44 100644 --- a/src/firehose.11ty.js +++ b/src/firehose.11ty.js @@ -35,7 +35,7 @@ export async function render({ entries }) { return html`

          Build Awesome Firehose

          -

          This page shows activity from the Build Awesome Blog, Quick Tips, YouTube channel, Mastodon account, and all GitHub releases (all of 11ty org repositories).

          +

          This page shows activity from the Eleventy Blog, Quick Tips, YouTube channel, Mastodon account, and all GitHub releases (all of 11ty org repositories).

          - npx @11ty/eleventy --serve + npx @awesome.me/buildawesome --serve
          - pnpm exec eleventy --serve + pnpm exec buildawesome --serve
          - yarn exec eleventy -- --serve + yarn exec buildawesome -- --serve
          @@ -268,22 +268,22 @@ Use `--serve` to start up a hot-reloading local web server. Your command line might look something like: ```11ty-output -[11ty] Writing _site/index.html from ./index.html (liquid) -[11ty] Writing _site/README/index.html from ./README.md (liquid) -[11ty] Wrote 2 files in 0.04 seconds ({% latestVersion versions, config %}) -[11ty] Watching… -[11ty] Server at http://localhost:8080/ +[buildawesome] Writing _site/index.html from ./index.html (liquid) +[buildawesome] Writing _site/README/index.html from ./README.md (liquid) +[buildawesome] Wrote 2 files in 0.04 seconds ({% latestVersion versions, config %}) +[buildawesome] Watching… +[buildawesome] Server at http://localhost:8080/ ``` Open `http://localhost:8080/` or `http://localhost:8080/README/` in your favorite web browser to see your Eleventy site live! When you save your template files—Eleventy will refresh the browser with your new changes automatically! ## Step 6 Put it online (optional) -Your output folder (`_site`) now contains all of the statically built files for your new web site. You can upload this folder to any web host! Head over to our [deployment documentation](/docs/deployment/) to read more about putting your Eleventy project online for everyone to see. +Your output folder (`_site`) now contains all of the statically built files for your new web site. You can upload this folder to any web host! Head over to our [deployment documentation](/docs/deployment/) to read more about putting your Build Awesome project online for everyone to see. ## Step 7 Continue Learning… -Congratulations—you made something with Eleventy! Now put it to work: +Congratulations—you made something with Build Awesome! Now put it to work: 1. Add more content! In the above tutorial we used [HTML](/docs/languages/html/) and [Markdown](/docs/languages/markdown/). Why not [JavaScript](/docs/languages/javascript/) or [WebC](/docs/languages/webc/) (for components) next? [Nunjucks](/docs/languages/nunjucks/) and [Liquid](/docs/languages/liquid/) are also very popular. Maybe you’re feeling super adventurous and want to [add your own custom type?](/docs/languages/custom/). 1. Use [a layout file so that you don’t have to repeat boilerplate on every template](/docs/layouts/). diff --git a/src/index.webc b/src/index.webc index c5c39073ec..c822f05ea6 100644 --- a/src/index.webc +++ b/src/index.webc @@ -47,8 +47,11 @@ export function randomTestimonialLink(testimonials) {

          Build Awesome helps you build better web sites

          -

          Build Awesome is a developer tool to help you build fast web sites, faster. It features fast build times and generates fast web sites focused on reducing runtime JavaScript. It’s lean: we’ve been decreasing our dependency count with every major release since 2017.

          -

          Build Awesome is secure. Choosing to generate a static web site is the most secure and resilient/scalable architecture for the modern agent-heavy web. It’s trusted by folks at NASA Cern TC39 Google Microsoft Mozilla (and more).

          +

          Build Awesome is a developer tool to help you build fast web sites, faster. It features fast build times and generates fast web sites focused on reducing runtime JavaScript. It’s lightweight: we’ve been decreasing our dependency count with every major release since 2018.

          + +

          Build Awesome is secure. When you create a static web site with Build Awesome, there is no runtime that can fail in the middle of the night. It’s easy to host and is widely accepted as the most resilient and scalable architecture for the modern agent-heavy web. It’s trusted by folks at NASA Cern TC39 Google Microsoft Cloudflare Mozilla (and more).

          + +

          You should have a web site and Build Awesome can help you create your very own home on the web. Get started!

          @@ -151,7 +154,7 @@ tags: posts -

          Built With Build Awesome

          +

          Built Awesome

          From e5d11bfd57eba5e54afe053c629653e2850fb28b Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Thu, 2 Jul 2026 15:30:56 -0500 Subject: [PATCH 14/76] Make it clearer the blog links to 11ty.dev --- src/_includes/components/header.css | 5 +++-- src/_includes/components/navigation.css | 6 ++++++ src/_includes/header.njk | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/_includes/components/header.css b/src/_includes/components/header.css index 510b162377..edd8e8a3ef 100644 --- a/src/_includes/components/header.css +++ b/src/_includes/components/header.css @@ -28,7 +28,9 @@ margin: 0 auto; } .elv-nav-menu { - padding: 1rem; + display: flex; + align-items: center; + padding: .75rem 1rem; margin-inline: auto; } @media (min-width: 58.125em) { /* 930px */ @@ -75,7 +77,6 @@ --search-text: #fff; } } - .elv-nav-menu form { color: var(--search-text); } diff --git a/src/_includes/components/navigation.css b/src/_includes/components/navigation.css index d56841df9d..f04ebedb10 100644 --- a/src/_includes/components/navigation.css +++ b/src/_includes/components/navigation.css @@ -10,6 +10,12 @@ .elv-nav-menu a { font-weight: 700; + display: flex; + align-items: center; + gap: 0 .125em; +} +.elv-nav-menu a small { + font-weight: 500; } /* Spacer and social links */ diff --git a/src/_includes/header.njk b/src/_includes/header.njk index dcf4b27508..69425cecc4 100644 --- a/src/_includes/header.njk +++ b/src/_includes/header.njk @@ -5,7 +5,7 @@
          • Get Started
          • -
          • Blog
          • +
          • Blog
          • Community
          • v{{ npmVersions.latest }}
          • From c4495151446e261dd1cb2fa88d649bebe1aba8ac Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Thu, 2 Jul 2026 16:04:57 -0500 Subject: [PATCH 15/76] Speedlify redirects --- vercel.json | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/vercel.json b/vercel.json index 39a219cefe..799497a5e2 100644 --- a/vercel.json +++ b/vercel.json @@ -1,5 +1,5 @@ { - "trailingSlash": true, + "trailingSlash": true, "redirects": [ { "source": "/survey/", "destination": "https://forms.gle/v8mjUuf5cyRZy2GG7", "statusCode": 301 }, { "source": "/survey/2025/", "destination": "https://forms.gle/v8mjUuf5cyRZy2GG7", "statusCode": 301 }, @@ -15,22 +15,24 @@ { "source": "/docs/accessibility-leaderboard/", "destination": "/speedlify/", "statusCode": 301 }, { "source": "/leaderboard/(.*)", "destination": "/speedlify/", "statusCode": 301 }, { "source": "/news/:path*", "destination": "/blog/:path*", "permanent": true }, - { "source": "/blog/", "destination": "https://www.11ty.dev/blog/", "permanent": false }, - { "source": "/blog/:path*", "destination": "https://www.11ty.dev/blog/:path*", "permanent": false }, { "source": "/docs/how-to-support/", "destination": "/docs/community/", "statusCode": 301 }, { "source": "/docs/plugins/cache/", "destination": "/docs/plugins/fetch/", "statusCode": 301 }, { "source": "/docs/plugins/partial-hydration/", "destination": "/docs/plugins/is-land/", "statusCode": 301 }, { "source": "/docs/templates/", "destination": "/docs/projects/", "statusCode": 301 }, { "source": "/docs/plugins/official/", "destination": "/docs/plugins/", "statusCode": 301 }, - { "source": "/docs/memoize/", "destination": "/docs/filters/#memoize-filters", "statusCode": 301 } + { "source": "/docs/memoize/", "destination": "/docs/filters/#memoize-filters", "statusCode": 301 }, + + { "source": "/speedlify/", "destination": "https://www.11ty.dev/speedlify/", "permanent": false }, + { "source": "/blog/", "destination": "https://www.11ty.dev/blog/", "permanent": false }, + { "source": "/blog/:path*", "destination": "https://www.11ty.dev/blog/:path*", "permanent": false } ], - "rewrites": [ + "rewrites": [ { "source": "/speedlify/(.*)", "destination": "https://built-with-11ty-speedlify.vercel.app/speedlify/$1" } ], - "headers": [ + "headers": [ { "source": "/(.*)", "headers": [ @@ -40,7 +42,7 @@ } ] }, - { + { "source": "/api/(.*)", "headers": [ { @@ -49,7 +51,7 @@ } ] }, - { + { "source": "/blog/feed.xml", "headers": [ { @@ -62,5 +64,5 @@ } ] } - ] + ] } \ No newline at end of file From 4e67d264e438b629aea14d0dd4446996864df13e Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Thu, 2 Jul 2026 16:05:05 -0500 Subject: [PATCH 16/76] Balance header --- src/_includes/index.css | 1 + src/docs/community.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/_includes/index.css b/src/_includes/index.css index 3045f597fa..fa8c29d77f 100644 --- a/src/_includes/index.css +++ b/src/_includes/index.css @@ -190,6 +190,7 @@ h5, } h1 { margin: 0 0 .5em; + text-wrap: balance; } h1, .elv-hed, diff --git a/src/docs/community.md b/src/docs/community.md index 6688ad293c..7c65919126 100644 --- a/src/docs/community.md +++ b/src/docs/community.md @@ -16,7 +16,7 @@ eleventyNavigation: ## Step {{ count }} Participate -- **Build something**—join the [{{ authors | length }} developers building with Eleventy](/authors/). +- **Build something**—join the [{{ authors | length }} developers that have added sites to the Built Awesome showcase](/authors/). - Want to brave the [Eleventy Leaderboards](/speedlify/) and track the Lighthouse scores of your web site over time? [Add your site to the `11ty-community` repo](/docs/leaderboards-add/)! - It’s also helpful if you add [`` to your existing Eleventy project](/docs/data-eleventy-supplied/#use-with-meta-namegenerator). - **Ask a question, answer a question**: We welcome questions from people of all experience levels on [Discord](/blog/discord/), [GitHub Discussions](https://github.com/11ty/eleventy/discussions), and the [issue tracker](https://github.com/11ty/eleventy/issues). We _really_ appreciate help answering those questions too! From 8ad1588249cfca611a82c3c4055941aee232eec0 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Thu, 2 Jul 2026 17:01:02 -0500 Subject: [PATCH 17/76] Fix issue with copy button in Safari --- config/syntaxHighlightPlugin.js | 4 +- package-lock.json | 8 ++-- src/_includes/components/callout.css | 3 +- src/_includes/components/code-copy.css | 7 +++- src/_includes/components/code.css | 17 ++++---- src/_includes/components/code.webc | 1 - src/_includes/components/codetitle.css | 10 ++--- .../components/syntax-highlight.webc | 10 ++--- .../components/testimonials-list.webc | 2 - src/_includes/layouts/base.njk | 42 +++++++++---------- 10 files changed, 47 insertions(+), 57 deletions(-) delete mode 100644 src/_includes/components/code.webc diff --git a/config/syntaxHighlightPlugin.js b/config/syntaxHighlightPlugin.js index 4a40d1585b..0a31fe952f 100644 --- a/config/syntaxHighlightPlugin.js +++ b/config/syntaxHighlightPlugin.js @@ -32,9 +32,7 @@ function highlightCode(code, language, attrs = {}, options = {}) { attrs.id ??= `highlighted-source-${options.highlightCounter}`; // When more Web Awesome components are in place, remove this `import` and re-enable Web Awesome script/link in base.njk - let preamble = `${copyButtonEnabled ? ` - -` : ""}`; + let preamble = `${copyButtonEnabled ? `` : ""}`; if(inputPath?.endsWith(".md")) { let ticks = rawMarkdown ? QUADRUPLE_TICK : TRIPLE_TICK; diff --git a/package-lock.json b/package-lock.json index 09c3ffbf08..83679e9ca7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "@11ty/website", - "version": "2.0.0", + "name": "@11ty/docs", + "version": "4.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@11ty/website", - "version": "2.0.0", + "name": "@11ty/docs", + "version": "4.0.0", "license": "MIT", "dependencies": { "@11ty/client": "4.0.0-alpha.9", diff --git a/src/_includes/components/callout.css b/src/_includes/components/callout.css index 8994ad5592..01ae9af2ff 100644 --- a/src/_includes/components/callout.css +++ b/src/_includes/components/callout.css @@ -110,8 +110,7 @@ table .elv-callout { color: var(--callout-primarytext); } .elv-callout pre { - margin-top: 1em; - margin-bottom: 1em; + margin-block: 1em; } .elv-callout-label:first-child:last-child { diff --git a/src/_includes/components/code-copy.css b/src/_includes/components/code-copy.css index f6e4bec257..9205b19de5 100644 --- a/src/_includes/components/code-copy.css +++ b/src/_includes/components/code-copy.css @@ -2,12 +2,14 @@ :is(syntax-highlight, .syntax-highlight):has(wa-copy-button) { position: relative; - wa-copy-button { + wa-copy-button { position: absolute; right: 0; bottom: 0; - margin: .25em; + padding: .25em 0; + margin: 0; color: #fff; + height: 2.5em; /* SAFARI WEEEEE */ &::part(button) { transition: 300ms all; @@ -16,6 +18,7 @@ border-radius: .25em; cursor: copy; } + &:is(:hover, :focus)::part(button) { opacity: 1; background-color: rgba(0,0,0,1); diff --git a/src/_includes/components/code.css b/src/_includes/components/code.css index d52c6f2782..f4982984a6 100644 --- a/src/_includes/components/code.css +++ b/src/_includes/components/code.css @@ -24,14 +24,15 @@ pre { } :is(.syntax-highlight, syntax-highlight) { - margin-inline: -1rem; -} -:is(.syntax-highlight, syntax-highlight) pre { - margin-inline: 0; + margin: 0 -1rem; + + pre { + margin: 0 0; + } } .fl > * > pre { - margin-top: 0; + margin-block-start: 0; } pre code { border-radius: 0; @@ -42,12 +43,12 @@ pre > code { font-family: inherit; } pre + pre[class*="language-"] { - margin-top: 1em; + margin-block-start: 1em; } pre + .note { font-size: 0.6666666666667em; /* 16px /24 */ - margin-top: -2.875em; /* 46px /16 */ - margin-bottom: 2.5em; /* 40px /16 */ + margin-block-start: -2.875em; /* 46px /16 */ + margin-block-end: 2.5em; /* 40px /16 */ text-align: right; } @media (prefers-color-scheme: dark) { diff --git a/src/_includes/components/code.webc b/src/_includes/components/code.webc deleted file mode 100644 index 84eb5da016..0000000000 --- a/src/_includes/components/code.webc +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/_includes/components/codetitle.css b/src/_includes/components/codetitle.css index ec3daa0bb2..964a8afc11 100644 --- a/src/_includes/components/codetitle.css +++ b/src/_includes/components/codetitle.css @@ -39,13 +39,13 @@ } .codetitle + pre, .codetitle + .minilink + pre { - margin-top: 0; + margin-block-start: 0; } .codetitle + div:has(> is-land) { clear: both; } .codetitle + div:has(> is-land) :is(eleventy-editor, pre) { - margin-top: 0; + margin-block-start: 0; } .codetitle + .minilink { float: right; @@ -62,12 +62,12 @@ } .codetitle-left + .minilink { float: left; - margin-left: 1em; - margin-right: 0; + margin-inline-start: 1em; + margin-inline-end: 0; position: relative; bottom: -2px; } .codetitle-left + .codetitle-left { clear: none; - margin-left: 2em; + margin-inline-start: 2em; } diff --git a/src/_includes/components/syntax-highlight.webc b/src/_includes/components/syntax-highlight.webc index 1c2e049f11..a02f3ef98f 100644 --- a/src/_includes/components/syntax-highlight.webc +++ b/src/_includes/components/syntax-highlight.webc @@ -1,18 +1,14 @@ - - - - +
            +
            +
            + Zero runtime. Zero worries. +

            Go build something
            awesome.

            +

            A simpler website generator. Point it at your Markdown and launch a fast, resilient site — skip a runtime and skip the downtime!

            + +
              +
            • Stable
            • +
            • Lightweight
            • +
            • Live Reload
            • +
            • Markdown-friendly
            • +
            +
            + +
            +
            +
            +
            + + ~/my-awesome-site + +
            +
            +
            +
            +
            +
            +
            + http://localhost:8080/
            +
            +
            My Awesome SiteBlog
            +

            First blog post

            +

            Hello world — this page was just built from index.md in a hundredth of a second. Edit and save to see it live-reload.

            + # posts +
            +
            +
            +
            +
            +
            + \ No newline at end of file diff --git a/src/_includes/header.njk b/src/_includes/header.njk index 05817036b1..42c729ad97 100644 --- a/src/_includes/header.njk +++ b/src/_includes/header.njk @@ -69,4 +69,8 @@ {% elseif config.prerelease -%} {% callout "brand" %}These docs are for an upcoming version of Build Awesome — take extra care before linking here as URLs may change! Look to the latest stable docs instead (or the full release history).{% endcallout %} {% endif -%} - \ No newline at end of file + + +{% if page.url == "/" %} +{% include "components/build-awesome-hero.njk" %} +{% endif %} \ No newline at end of file From 4bb1631b467a465a4cb9c3991ea62e09a60f7885 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 11:38:31 -0500 Subject: [PATCH 57/76] Fix shadow overflow --- src/_includes/components/build-awesome-hero.njk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_includes/components/build-awesome-hero.njk b/src/_includes/components/build-awesome-hero.njk index a81af49d55..1769eff523 100644 --- a/src/_includes/components/build-awesome-hero.njk +++ b/src/_includes/components/build-awesome-hero.njk @@ -11,8 +11,8 @@ --ba-hero-body:"Cera Round Pro",system-ui,sans-serif; --ba-hero-mono:Menlo,Monaco,Consolas,Courier New,monospace; } - .ba-hero{ position:relative; display:flex; flex-direction:column; overflow:hidden; font-family:var(--ba-hero-body); margin-block: 0 6vh; padding-block: 4vh 0; } - .ba-hero::before{ content:""; position:absolute; top:-28%; right:-8%; width:66vw; height:66vw; z-index:0; + .ba-hero{ position:relative; display:flex; flex-direction:column; font-family:var(--ba-hero-body); margin-block: 0 6vh; padding-block: 4vh 0; } + .ba-hero::before{ content:""; position:absolute; top:-28%; right:0; width:52vw; height:66vw; z-index:0; background: radial-gradient(circle at 50% 15%, var(--ba-hero-shadow), transparent 60%); filter:blur(24px); } .ba-hero-grid{ position:relative; z-index:0; flex:1; display:grid; grid-template-columns: 1.02fr .98fr; gap:36px; align-items:center; From 8f0bd1f834fa9ec54c7bdaba020fc075282e7108 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 11:39:45 -0500 Subject: [PATCH 58/76] Copy tweak --- src/_includes/components/build-awesome-hero.njk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_includes/components/build-awesome-hero.njk b/src/_includes/components/build-awesome-hero.njk index 1769eff523..bc4e83e209 100644 --- a/src/_includes/components/build-awesome-hero.njk +++ b/src/_includes/components/build-awesome-hero.njk @@ -116,7 +116,7 @@
            Zero runtime. Zero worries.

            Go build something
            awesome.

            -

            A simpler website generator. Point it at your Markdown and launch a fast, resilient site — skip a runtime and skip the downtime!

            +

            A simpler website generator. Point it at your Markdown and launch a fast, resilient static website — skip a runtime and skip the downtime!

            Get started View on GitHub From c7b56303f50938bb664434096c96f2add36b6f02 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 11:50:22 -0500 Subject: [PATCH 59/76] Spacing and layout fixes --- .../components/build-awesome-hero.njk | 201 +++++++++--------- 1 file changed, 101 insertions(+), 100 deletions(-) diff --git a/src/_includes/components/build-awesome-hero.njk b/src/_includes/components/build-awesome-hero.njk index bc4e83e209..caa31b0260 100644 --- a/src/_includes/components/build-awesome-hero.njk +++ b/src/_includes/components/build-awesome-hero.njk @@ -11,107 +11,108 @@ --ba-hero-body:"Cera Round Pro",system-ui,sans-serif; --ba-hero-mono:Menlo,Monaco,Consolas,Courier New,monospace; } - .ba-hero{ position:relative; display:flex; flex-direction:column; font-family:var(--ba-hero-body); margin-block: 0 6vh; padding-block: 4vh 0; } - .ba-hero::before{ content:""; position:absolute; top:-28%; right:0; width:52vw; height:66vw; z-index:0; - background: radial-gradient(circle at 50% 15%, var(--ba-hero-shadow), transparent 60%); filter:blur(24px); } - - .ba-hero-grid{ position:relative; z-index:0; flex:1; display:grid; grid-template-columns: 1.02fr .98fr; gap:36px; align-items:center; - padding: 16px clamp(20px,5vw,56px); } - .ba-hero-kicker{ display:inline-flex; align-items:center; gap:8px; background:var(--ba-hero-mint-bg); color:var(--ba-hero-green); font-family:var(--ba-hero-body); - font-weight:600; font-size:.85rem; padding:8px 16px; border-radius:100px; margin-bottom:22px; } - .ba-hero-kicker-dot{ width:7px; height:7px; border-radius:50%; background:var(--ba-hero-green); box-shadow:0 0 0 0 rgba(0,167,118,.5); animation: ba-hero-ping 2.4s ease-out infinite; } - @keyframes ba-hero-ping{ 0%{ box-shadow:0 0 0 0 rgba(0,167,118,.5);} 70%,100%{ box-shadow:0 0 0 8px rgba(0,167,118,0);} } - .ba-hero-title{ font-family:var(--ba-hero-body); font-weight:700; font-size:clamp(2.6rem,6.6vw,5.4rem); line-height:.98; letter-spacing:-.01em; margin:0; color:var(--ba-hero-navy); } - .ba-hero-accent{ color:var(--ba-hero-green); } - .ba-hero-sub{ font-size:clamp(1.05rem,1.6vw,1.3rem); line-height:1.5; max-width:46ch; margin:22px 0 30px; } - .ba-hero-actions{ display:flex; gap:14px; align-items:center; flex-wrap:wrap; } - .ba-hero-btn{ font-family:var(--ba-hero-body); font-weight:600; font-size:1.05rem; padding:15px 30px; border-radius:100px; text-decoration:none; cursor:pointer; transition:transform .14s ease, box-shadow .14s ease; } - .ba-hero-btn-fill:any-link{ background:var(--ba-hero-navy); color:#fff; } - .ba-hero-btn-fill:hover{ transform:translateY(-3px); box-shadow:0 16px 30px -8px rgba(0,167,118,.7); } - .ba-hero-btn-ghost{ color:var(--ba-hero-navy); border:2px solid #e6e6e6; } .ba-hero-btn-ghost:hover{ border-color:var(--ba-hero-green); color:var(--ba-hero-green); } - .ba-hero-feats{ list-style:none; display:flex; flex-wrap:wrap; gap:10px 18px; margin:28px 0 0; padding:0; } - .ba-hero-feat{ display:flex; align-items:center; gap:8px; font-weight:600; font-size:.92rem; color:var(--ba-hero-navy); } - .ba-hero-feat::before{ content:""; width:16px; height:16px; border-radius:50%; background:var(--ba-hero-mint-bg); - box-shadow: inset 0 0 0 2px var(--ba-hero-green); } - - /* stage */ - .ba-hero-stage{ position:relative; z-index:2; height: clamp(420px, 40vw, 500px); } - .ba-hero-floaty{ position:absolute; animation: ba-hero-bob 7s ease-in-out infinite; } - .ba-hero-floaty-term{ top:0; left:0; width:97%; z-index:1; } - .ba-hero-floaty-browser{ top:220px; right:-20px; width:90%; z-index:3; animation-delay:1.5s; } - @keyframes ba-hero-bob{ 0%,100%{ transform:translateY(0);} 50%{ transform:translateY(-9px);} } - - .ba-hero-card{ border-radius:16px; will-change:transform; } - .ba-hero-dot{ width:12px; height:12px; border-radius:50%; display:inline-block; flex:none; } - .ba-hero-dot-r{ background:#ff5f57; } .ba-hero-dot-y{ background:#febc2e; } .ba-hero-dot-g{ background:#28c840; } - - .ba-hero-term{ background:#0f1b2d; box-shadow:0 44px 90px -34px rgba(24,49,83,.55), 0 0 0 1px rgba(24,49,83,.06); overflow:hidden; - transform: perspective(1500px) rotateY(-6deg) rotateX(3deg) translate3d(var(--ba-hero-px,0),var(--ba-hero-py,0),0); - transition: transform .12s ease-out; } - .ba-hero-term-bar{ display:flex; align-items:center; gap:8px; padding:12px 14px; background:#14243b; } - .ba-hero-term-name{ margin-left:8px; font-family:var(--ba-hero-mono); font-size:.78rem; color:#7d90ad; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } - .ba-hero-copybtn{ margin-left:auto; flex:none; white-space:nowrap; font-family:var(--ba-hero-mono); font-size:.72rem; color:#9fb4d0; background:rgba(255,255,255,.06); - border:1px solid rgba(255,255,255,.12); border-radius:7px; padding:5px 10px; cursor:pointer; transition:.15s; } - .ba-hero-copybtn:hover{ color:#fff; background:rgba(255,255,255,.12); } - .ba-hero-copybtn.is-done{ color:var(--ba-hero-mint); border-color:rgba(113,244,205,.4); } - .ba-hero-term-body{ padding:18px 20px 24px; font-family:var(--ba-hero-mono); font-size:.84rem; line-height:1.75; color:#cde3ff; min-height:236px; } - .ba-hero-ln{ white-space:pre-wrap; word-break:break-word; } - .ba-hero-pr{ color:var(--ba-hero-green); font-weight:700; } - .ba-hero-cmd{ color:var(--ba-hero-cyan); } - .ba-hero-path{ color:#8fd0ff; } - .ba-hero-dim{ color:#63789a; } - .ba-hero-ok{ color:var(--ba-hero-mint); font-weight:700; } - .ba-hero-link{ color:var(--ba-hero-cyan); text-decoration:underline; text-underline-offset:3px; } - .ba-hero-term-body b{ color:#fff; font-weight:700; } - .ba-hero-cur{ display:inline-block; width:8px; height:1.05em; background:var(--ba-hero-cyan); vertical-align:-2px; animation: ba-hero-blink 1s steps(1) infinite; } - @keyframes ba-hero-blink{ 50%{ opacity:0; } } - - /* browser preview */ - .ba-hero-browser{ background:#fff; box-shadow:0 40px 80px -30px rgba(24,49,83,.4), 0 0 0 1px rgba(24,49,83,.07); overflow:hidden; - transform: perspective(1500px) rotateY(-6deg) rotateX(3deg) translate3d(var(--ba-hero-bx,0), var(--ba-hero-by,0), 0); } - .ba-hero-browser .ba-hero-bbody { opacity:0; transition: opacity .55s ease, transform .6s cubic-bezier(.2,.85,.25,1); } - .ba-hero-browser.is-shown .ba-hero-bbody{ opacity:1; } - .ba-hero-bbar{ display:flex; align-items:center; gap:8px; padding:10px 12px; background:#f1f3f6; border-bottom:1px solid #e6e9ef; } - .ba-hero-bbar .ba-hero-dot{ width:11px; height:11px; } - .ba-hero-url{ margin-left:8px; flex:1; background:#fff; border:1px solid #e6e9ef; border-radius:7px; padding:5px 10px; - font-family:var(--ba-hero-mono); font-size:.72rem; color:#6d7c90; } - .ba-hero-bbody{ padding:20px 22px 26px; } - .ba-hero-bnav{ display:flex; align-items:center; justify-content:space-between; margin-bottom:16px; } - .ba-hero-bbrand{ display:flex; align-items:center; gap:7px; font-family:var(--ba-hero-body); font-weight:700; color:var(--ba-hero-navy); font-size:.98rem; } - .ba-hero-bballoon{ color:var(--ba-hero-green); } - .ba-hero-blink-link{ font-weight:600; color:var(--ba-hero-muted); font-size:.85rem; } - .ba-hero-bpost-title{ font-family:var(--ba-hero-body); font-weight:700; color:var(--ba-hero-navy); font-size:1.5rem; margin:0 0 8px; } - .ba-hero-bbody p{ margin:0 0 14px; color:var(--ba-hero-muted); font-size:.95rem; line-height:1.5; } - .ba-hero-bbody code{ font-family:var(--ba-hero-mono); font-size:.85em; background:var(--ba-hero-mint-bg); color:var(--ba-hero-green); padding:1px 6px; border-radius:5px; } - .ba-hero-btag{ display:inline-block; font-size:.78rem; font-weight:700; color:var(--ba-hero-green); background:var(--ba-hero-mint-bg); padding:4px 12px; border-radius:100px; } - - @media (max-width: 58.6875em) { /* 939px /16 */ - .ba-hero-grid{ grid-template-columns:1fr; text-align:center; } - .ba-hero-sub{ margin-inline:auto; } .ba-hero-actions, .ba-hero-feats{ justify-content:center; } - .ba-hero-stage{ height:auto; max-width:540px; margin:8px auto 60px; text-align:left; } - .ba-hero-floaty{ position:relative !important; width:100% !important; animation:none; } - .ba-hero-floaty-browser{ top: 0; width:92% !important; margin:-6px auto 0; } - .ba-hero-term, .ba-hero-browser{ transform:none !important; } - } - @media (prefers-reduced-motion: reduce){ - .ba-hero-floaty, .ba-hero-cur, .ba-hero-kicker-dot, .ba-hero-copy{ animation:none; } - .ba-hero-browser{ transition:none; } - } - - @media (prefers-color-scheme: dark){ - .ba-hero{ - --ba-hero-navy:#eef3fb; /* headings / strong text -> near-white */ - --ba-hero-muted:#93a2b6; - --ba-hero-mint-bg:rgba(0,167,118,.16); /* pill / chip backgrounds */ - } - .ba-hero-btn-ghost{ border-color:rgba(255,255,255,.16); } - /* browser preview: dark chrome to match the terminal */ - .ba-hero-browser{ background:#0f1b2d; box-shadow:0 40px 80px -30px rgba(0,0,0,.65), 0 0 0 1px rgba(255,255,255,.07); } - .ba-hero-bbar{ background:#14243b; border-bottom-color:rgba(255,255,255,.08); } - .ba-hero-url{ background:rgba(255,255,255,.05); border-color:rgba(255,255,255,.10); color:#9fb4d0; } - } +.ba-hero{ position:relative; display:flex; flex-direction:column; font-family:var(--ba-hero-body); margin: 0 auto 6vh; padding-block: 4vh 0; } +.ba-hero::before{ content:""; position:absolute; top:-28%; right:0; width:52vw; height:66vw; z-index:0; + background: radial-gradient(circle at 50% 15%, var(--ba-hero-shadow), transparent 60%); filter:blur(24px); } + +.ba-hero-grid{ position:relative; z-index:0; flex:1; display:grid; grid-template-columns: 1.02fr .98fr; gap:36px; align-items:center; + padding: 1em 0; +} +.ba-hero-kicker{ display:inline-flex; align-items:center; gap:8px; background:var(--ba-hero-mint-bg); color:var(--ba-hero-green); font-family:var(--ba-hero-body); + font-weight:600; font-size:.85rem; padding:8px 16px; border-radius:100px; margin-bottom:22px; } +.ba-hero-kicker-dot{ width:7px; height:7px; border-radius:50%; background:var(--ba-hero-green); box-shadow:0 0 0 0 rgba(0,167,118,.5); animation: ba-hero-ping 2.4s ease-out infinite; } +@keyframes ba-hero-ping{ 0%{ box-shadow:0 0 0 0 rgba(0,167,118,.5);} 70%,100%{ box-shadow:0 0 0 8px rgba(0,167,118,0);} } +.ba-hero-title{ font-family:var(--ba-hero-body); font-weight:700; font-size:clamp(2.6rem,6.6vw,5.4rem); line-height:.98; letter-spacing:-.01em; margin:0; color:var(--ba-hero-navy); } +.ba-hero-accent{ color:var(--ba-hero-green); } +.ba-hero-sub{ font-size:clamp(1.05rem,1.6vw,1.3rem); line-height:1.5; max-width:46ch; margin:22px 0 30px; } +.ba-hero-actions{ display:flex; gap:14px; align-items:center; flex-wrap:wrap; } +.ba-hero-btn{ font-family:var(--ba-hero-body); font-weight:600; font-size:1.05rem; padding:15px 30px; border-radius:100px; text-decoration:none; cursor:pointer; transition:transform .14s ease, box-shadow .14s ease; } +.ba-hero-btn-fill:any-link{ background:var(--ba-hero-navy); color:#fff; } +.ba-hero-btn-fill:hover{ transform:translateY(-3px); box-shadow:0 16px 30px -8px rgba(0,167,118,.7); } +.ba-hero-btn-ghost{ color:var(--ba-hero-navy); border:2px solid #e6e6e6; } .ba-hero-btn-ghost:hover{ border-color:var(--ba-hero-green); color:var(--ba-hero-green); } +.ba-hero-feats{ list-style:none; display:flex; flex-wrap:wrap; gap:10px 18px; margin:28px 0 0; padding:0; } +.ba-hero-feat{ display:flex; align-items:center; gap:8px; font-weight:600; font-size:.92rem; color:var(--ba-hero-navy); } +.ba-hero-feat::before{ content:""; width:16px; height:16px; border-radius:50%; background:var(--ba-hero-mint-bg); + box-shadow: inset 0 0 0 2px var(--ba-hero-green); } + +/* stage */ +.ba-hero-stage{ position:relative; z-index:2; height: clamp(420px, 40vw, 500px);margin-inline-end: clamp(1em,5vw,2em); } +.ba-hero-floaty{ position:absolute; animation: ba-hero-bob 7s ease-in-out infinite; } +.ba-hero-floaty-term{ top:0; left:0; width:97%; z-index:1; } +.ba-hero-floaty-browser{ top:220px; right:-20px; width:90%; z-index:3; animation-delay:1.5s; } +@keyframes ba-hero-bob{ 0%,100%{ transform:translateY(0);} 50%{ transform:translateY(-9px);} } + +.ba-hero-card{ border-radius:16px; will-change:transform; } +.ba-hero-dot{ width:12px; height:12px; border-radius:50%; display:inline-block; flex:none; } +.ba-hero-dot-r{ background:#ff5f57; } .ba-hero-dot-y{ background:#febc2e; } .ba-hero-dot-g{ background:#28c840; } + +.ba-hero-term{ background:#0f1b2d; box-shadow:0 44px 90px -34px rgba(24,49,83,.55), 0 0 0 1px rgba(24,49,83,.06); overflow:hidden; + transform: perspective(1500px) rotateY(-6deg) rotateX(3deg) translate3d(var(--ba-hero-px,0),var(--ba-hero-py,0),0); + transition: transform .12s ease-out; } +.ba-hero-term-bar{ display:flex; align-items:center; gap:8px; padding:12px 14px; background:#14243b; } +.ba-hero-term-name{ margin-left:8px; font-family:var(--ba-hero-mono); font-size:.78rem; color:#7d90ad; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } +.ba-hero-copybtn{ margin-left:auto; flex:none; white-space:nowrap; font-family:var(--ba-hero-mono); font-size:.72rem; color:#9fb4d0; background:rgba(255,255,255,.06); + border:1px solid rgba(255,255,255,.12); border-radius:7px; padding:5px 10px; cursor:pointer; transition:.15s; } +.ba-hero-copybtn:hover{ color:#fff; background:rgba(255,255,255,.12); } +.ba-hero-copybtn.is-done{ color:var(--ba-hero-mint); border-color:rgba(113,244,205,.4); } +.ba-hero-term-body{ padding:18px 20px 24px; font-family:var(--ba-hero-mono); font-size:.84rem; line-height:1.75; color:#cde3ff; min-height:236px; } +.ba-hero-ln{ white-space:pre-wrap; word-break:break-word; } +.ba-hero-pr{ color:var(--ba-hero-green); font-weight:700; } +.ba-hero-cmd{ color:var(--ba-hero-cyan); } +.ba-hero-path{ color:#8fd0ff; } +.ba-hero-dim{ color:#63789a; } +.ba-hero-ok{ color:var(--ba-hero-mint); font-weight:700; } +.ba-hero-link{ color:var(--ba-hero-cyan); text-decoration:underline; text-underline-offset:3px; } +.ba-hero-term-body b{ color:#fff; font-weight:700; } +.ba-hero-cur{ display:inline-block; width:8px; height:1.05em; background:var(--ba-hero-cyan); vertical-align:-2px; animation: ba-hero-blink 1s steps(1) infinite; } +@keyframes ba-hero-blink{ 50%{ opacity:0; } } + +/* browser preview */ +.ba-hero-browser{ background:#fff; box-shadow:0 40px 80px -30px rgba(24,49,83,.4), 0 0 0 1px rgba(24,49,83,.07); overflow:hidden; + transform: perspective(1500px) rotateY(-6deg) rotateX(3deg) translate3d(var(--ba-hero-bx,0), var(--ba-hero-by,0), 0); } +.ba-hero-browser .ba-hero-bbody { opacity:0; transition: opacity .55s ease, transform .6s cubic-bezier(.2,.85,.25,1); } +.ba-hero-browser.is-shown .ba-hero-bbody{ opacity:1; } +.ba-hero-bbar{ display:flex; align-items:center; gap:8px; padding:10px 12px; background:#f1f3f6; border-bottom:1px solid #e6e9ef; } +.ba-hero-bbar .ba-hero-dot{ width:11px; height:11px; } +.ba-hero-url{ margin-left:8px; flex:1; background:#fff; border:1px solid #e6e9ef; border-radius:7px; padding:5px 10px; + font-family:var(--ba-hero-mono); font-size:.72rem; color:#6d7c90; } +.ba-hero-bbody{ padding:20px 22px 26px; } +.ba-hero-bnav{ display:flex; align-items:center; justify-content:space-between; margin-bottom:16px; } +.ba-hero-bbrand{ display:flex; align-items:center; gap:7px; font-family:var(--ba-hero-body); font-weight:700; color:var(--ba-hero-navy); font-size:.98rem; } +.ba-hero-bballoon{ color:var(--ba-hero-green); } +.ba-hero-blink-link{ font-weight:600; color:var(--ba-hero-muted); font-size:.85rem; } +.ba-hero-bpost-title{ font-family:var(--ba-hero-body); font-weight:700; color:var(--ba-hero-navy); font-size:1.5rem; margin:0 0 8px; } +.ba-hero-bbody p{ margin:0 0 14px; color:var(--ba-hero-muted); font-size:.95rem; line-height:1.5; } +.ba-hero-bbody code{ font-family:var(--ba-hero-mono); font-size:.85em; background:var(--ba-hero-mint-bg); color:var(--ba-hero-green); padding:1px 6px; border-radius:5px; } +.ba-hero-btag{ display:inline-block; font-size:.78rem; font-weight:700; color:var(--ba-hero-green); background:var(--ba-hero-mint-bg); padding:4px 12px; border-radius:100px; } + +@media (max-width: 58.6875em) { /* 939px /16 */ + .ba-hero-grid{ grid-template-columns:1fr; text-align:center; } + .ba-hero-sub{ margin-inline:auto; } .ba-hero-actions, .ba-hero-feats{ justify-content:center; } + .ba-hero-stage{ height:auto; max-width:540px; margin:8px auto 60px; text-align:left; } + .ba-hero-floaty{ position:relative !important; width:100% !important; animation:none; } + .ba-hero-floaty-browser{ top: 0; width:92% !important; margin:-6px auto 0; } + .ba-hero-term, .ba-hero-browser{ transform:none !important; } +} +@media (prefers-reduced-motion: reduce){ + .ba-hero-floaty, .ba-hero-cur, .ba-hero-kicker-dot, .ba-hero-copy{ animation:none; } + .ba-hero-browser{ transition:none; } +} + +@media (prefers-color-scheme: dark){ + .ba-hero{ + --ba-hero-navy:#eef3fb; /* headings / strong text -> near-white */ + --ba-hero-muted:#93a2b6; + --ba-hero-mint-bg:rgba(0,167,118,.16); /* pill / chip backgrounds */ + } + .ba-hero-btn-ghost{ border-color:rgba(255,255,255,.16); } + /* browser preview: dark chrome to match the terminal */ + .ba-hero-browser{ background:#0f1b2d; box-shadow:0 40px 80px -30px rgba(0,0,0,.65), 0 0 0 1px rgba(255,255,255,.07); } + .ba-hero-bbar{ background:#14243b; border-bottom-color:rgba(255,255,255,.08); } + .ba-hero-url{ background:rgba(255,255,255,.05); border-color:rgba(255,255,255,.10); color:#9fb4d0; } +} -
            +
            Zero runtime. Zero worries. From fd1b3e2bb996fea33ca95564743838d6abb64664 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 11:52:36 -0500 Subject: [PATCH 60/76] Alignment for first paragraph on home page --- src/_includes/index.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/_includes/index.css b/src/_includes/index.css index 6acbffdf25..c99e9eb3c4 100644 --- a/src/_includes/index.css +++ b/src/_includes/index.css @@ -96,6 +96,9 @@ p { p:empty { display: none; } +main heading-anchors > p:first-child { + margin-block-start: 0; +} abbr { text-decoration: none; From dec6d84c700b26464e386739db21c0667d2b6f8c Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 11:54:28 -0500 Subject: [PATCH 61/76] Fix dark mode shadow --- src/_includes/components/build-awesome-hero.njk | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/_includes/components/build-awesome-hero.njk b/src/_includes/components/build-awesome-hero.njk index caa31b0260..b434230ec4 100644 --- a/src/_includes/components/build-awesome-hero.njk +++ b/src/_includes/components/build-awesome-hero.njk @@ -10,6 +10,13 @@ --ba-hero-shadow: rgba(0,224,224,.18); --ba-hero-body:"Cera Round Pro",system-ui,sans-serif; --ba-hero-mono:Menlo,Monaco,Consolas,Courier New,monospace; + + @media (prefers-color-scheme: dark){ + --ba-hero-navy:#eef3fb; /* headings / strong text -> near-white */ + --ba-hero-shadow: rgba(48,117,117,.18); + --ba-hero-muted:#93a2b6; + --ba-hero-mint-bg:rgba(0,167,118,.16); /* pill / chip backgrounds */ + } } .ba-hero{ position:relative; display:flex; flex-direction:column; font-family:var(--ba-hero-body); margin: 0 auto 6vh; padding-block: 4vh 0; } .ba-hero::before{ content:""; position:absolute; top:-28%; right:0; width:52vw; height:66vw; z-index:0; @@ -100,11 +107,6 @@ } @media (prefers-color-scheme: dark){ - .ba-hero{ - --ba-hero-navy:#eef3fb; /* headings / strong text -> near-white */ - --ba-hero-muted:#93a2b6; - --ba-hero-mint-bg:rgba(0,167,118,.16); /* pill / chip backgrounds */ - } .ba-hero-btn-ghost{ border-color:rgba(255,255,255,.16); } /* browser preview: dark chrome to match the terminal */ .ba-hero-browser{ background:#0f1b2d; box-shadow:0 40px 80px -30px rgba(0,0,0,.65), 0 0 0 1px rgba(255,255,255,.07); } From a87202f60c6fe40a7c18a4c91469f2455a4dd488 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 11:59:27 -0500 Subject: [PATCH 62/76] Fix overlapping issue --- src/_includes/components/build-awesome-hero.njk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/_includes/components/build-awesome-hero.njk b/src/_includes/components/build-awesome-hero.njk index b434230ec4..40c493b039 100644 --- a/src/_includes/components/build-awesome-hero.njk +++ b/src/_includes/components/build-awesome-hero.njk @@ -19,8 +19,7 @@ } } .ba-hero{ position:relative; display:flex; flex-direction:column; font-family:var(--ba-hero-body); margin: 0 auto 6vh; padding-block: 4vh 0; } -.ba-hero::before{ content:""; position:absolute; top:-28%; right:0; width:52vw; height:66vw; z-index:0; - background: radial-gradient(circle at 50% 15%, var(--ba-hero-shadow), transparent 60%); filter:blur(24px); } +.ba-hero::before{ content:""; position:absolute; top:-28%; right:0; width:52vw; height:66vw; z-index:-1; background: radial-gradient(circle at 50% 15%, var(--ba-hero-shadow), transparent 60%); filter:blur(24px); } .ba-hero-grid{ position:relative; z-index:0; flex:1; display:grid; grid-template-columns: 1.02fr .98fr; gap:36px; align-items:center; padding: 1em 0; From 9fef1223a9d32c830a1cdd4fbdfe60b8222c8e7b Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 12:01:26 -0500 Subject: [PATCH 63/76] Not a real heading --- src/_includes/components/build-awesome-hero.njk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_includes/components/build-awesome-hero.njk b/src/_includes/components/build-awesome-hero.njk index 40c493b039..5d79de8b09 100644 --- a/src/_includes/components/build-awesome-hero.njk +++ b/src/_includes/components/build-awesome-hero.njk @@ -148,7 +148,7 @@ http://localhost:8080/
            My Awesome SiteBlog
            -

            First blog post

            +
            First blog post

            Hello world — this page was just built from index.md in a hundredth of a second. Edit and save to see it live-reload.

            # posts
            From 49607e19d3d9ceaf0c8981135babe850b8030fad Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 12:04:36 -0500 Subject: [PATCH 64/76] Fix for sticky top --- src/_includes/components/toc.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/_includes/components/toc.css b/src/_includes/components/toc.css index 2acc1665ad..3f0112999b 100644 --- a/src/_includes/components/toc.css +++ b/src/_includes/components/toc.css @@ -15,17 +15,17 @@ --elv-toc-hover-color: #dff7ff; font-size: 1rem; /* Reset */ } -.elv-header-docs + .elv-layout .elv-toc { +.elv-header-docs ~ .elv-layout .elv-toc { --elv-toc-sticky-top: 6rem; } -.elv-header-docs:has(.elv-callout) + .elv-layout .elv-toc { +.elv-header-docs:has(.elv-callout) ~ .elv-layout .elv-toc { --elv-toc-sticky-top: 13.5rem; } @media (min-width: 55em) {/* 880px */ - .elv-header-docs + .elv-layout .elv-toc { + .elv-header-docs ~.elv-layout .elv-toc { --elv-toc-sticky-top: 4rem; } - .elv-header-docs:has(.elv-callout) + .elv-layout .elv-toc { + .elv-header-docs:has(.elv-callout) ~.elv-layout .elv-toc { --elv-toc-sticky-top: 9rem; } } From 5d7fd98fba12876d57a1b88f268d4ec4783881f2 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 13:18:16 -0500 Subject: [PATCH 65/76] Refactor (code org) --- .../components/build-awesome-hero.njk | 404 +++++++++--------- 1 file changed, 200 insertions(+), 204 deletions(-) diff --git a/src/_includes/components/build-awesome-hero.njk b/src/_includes/components/build-awesome-hero.njk index 5d79de8b09..f035b6f419 100644 --- a/src/_includes/components/build-awesome-hero.njk +++ b/src/_includes/components/build-awesome-hero.njk @@ -1,119 +1,119 @@ - -
            +
            Zero runtime. Zero worries. @@ -156,94 +156,90 @@
            -
            - \ No newline at end of file + +
            \ No newline at end of file From c422c49be29959f6d5605c80ee1300ffdabd265c Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 13:55:37 -0500 Subject: [PATCH 66/76] Tweaks to prejs --- .../components/build-awesome-hero.njk | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/_includes/components/build-awesome-hero.njk b/src/_includes/components/build-awesome-hero.njk index f035b6f419..0fccabc596 100644 --- a/src/_includes/components/build-awesome-hero.njk +++ b/src/_includes/components/build-awesome-hero.njk @@ -58,13 +58,13 @@ transition: transform .12s ease-out; } .ba-hero-term-bar{ display:flex; align-items:center; gap:8px; padding:12px 14px; background:#14243b; } .ba-hero-term-name{ margin-left:8px; font-family:var(--ba-hero-mono); font-size:.78rem; color:#7d90ad; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } - .ba-hero-copybtn{ margin-left:auto; flex:none; white-space:nowrap; font-family:var(--ba-hero-mono); font-size:.72rem; color:#9fb4d0; background:rgba(255,255,255,.06); - border:1px solid rgba(255,255,255,.12); border-radius:7px; padding:5px 10px; cursor:pointer; transition:.15s; } - .ba-hero-copybtn:hover{ color:#fff; background:rgba(255,255,255,.12); } - .ba-hero-copybtn.is-done{ color:var(--ba-hero-mint); border-color:rgba(113,244,205,.4); } + .ba-hero-copybtn{ border: 0; margin-left:auto; flex:none; color: #fff; white-space:nowrap; font-size:.72rem; padding:0.3125em; cursor:pointer; transition:.15s; background: transparent; } + .ba-hero-copybtn.is-waiting { opacity: 0; } + .ba-hero-copybtn.is-done{ color:var(--ba-hero-mint); } .ba-hero-term-body{ padding:18px 20px 24px; font-family:var(--ba-hero-mono); font-size:.84rem; line-height:1.75; color:#cde3ff; min-height:236px; } .ba-hero-ln{ white-space:pre-wrap; word-break:break-word; } .ba-hero-pr{ color:var(--ba-hero-green); font-weight:700; } + .ba-hero-pr:before{ content: "$ "; } .ba-hero-cmd{ color:var(--ba-hero-cyan); } .ba-hero-path{ color:#8fd0ff; } .ba-hero-dim{ color:#63789a; } @@ -137,7 +137,7 @@
            ~/my-awesome-site - +
            @@ -178,6 +178,8 @@ const browser = root.querySelector('.ba-hero-browser'); const stage = root.querySelector('.ba-hero-stage'); const copy = root.querySelector('.ba-hero-copybtn'); + const promptHtml = ``; + const cursorHtml = ``; if (!term || !browser || !stage) return; function run() { @@ -190,18 +192,17 @@ if (i >= steps.length) { setTimeout(run, HOLD_MS); return; } const s = steps[i]; if (s.cmd !== undefined) { - const prompt = '$ '; let k = 0; (function typeCh() { term.innerHTML = renderLines(lines) + - `
            ${prompt}${s.cmd.slice(0, k)}
            `; + `
            ${promptHtml}${s.cmd.slice(0, k)}${cursorHtml}
            `; k++; if (k <= s.cmd.length) setTimeout(typeCh, 46); - else { lines.push(prompt + `${s.cmd}`); i++; setTimeout(step, 520); } + else { lines.push(promptHtml + `${s.cmd}`); i++; setTimeout(step, 520); } })(); } else { lines.push(s.out); - term.innerHTML = renderLines(lines) + `
            `; + term.innerHTML = renderLines(lines) + `
            ${cursorHtml}
            `; if (s.server) setTimeout(() => browser.classList.add('is-shown'), 380); i++; setTimeout(step, s.out ? 320 : 150); @@ -212,7 +213,7 @@ if (reduce) { const all = steps.map(s => s.cmd !== undefined - ? `$ ${s.cmd}` : s.out); + ? `${promptHtml}${s.cmd}` : s.out); term.innerHTML = renderLines(all); browser.classList.add('is-shown'); } else { @@ -220,10 +221,13 @@ } // copy command + copy?.classList.remove('is-waiting'); copy?.addEventListener('click', async () => { try { await navigator.clipboard.writeText(CMD); } catch (e) {} - copy.textContent = 'Copied!'; copy.classList.add('is-done'); - setTimeout(() => { copy.textContent = 'Copy command'; copy.classList.remove('is-done'); }, 1500); + let previousHtml = copy.innerHTML; + copy.textContent = 'Copied!'; + copy.classList.add('is-done'); + setTimeout(() => { copy.innerHTML = previousHtml; copy.classList.remove('is-done'); }, 1500); }); // cursor parallax From f53a79ecd5fb6520d3423050bc4df4af4fa8de45 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 13:56:32 -0500 Subject: [PATCH 67/76] Better pre-js style --- src/_includes/components/build-awesome-hero.njk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_includes/components/build-awesome-hero.njk b/src/_includes/components/build-awesome-hero.njk index 0fccabc596..1e3b0eae83 100644 --- a/src/_includes/components/build-awesome-hero.njk +++ b/src/_includes/components/build-awesome-hero.njk @@ -59,7 +59,7 @@ .ba-hero-term-bar{ display:flex; align-items:center; gap:8px; padding:12px 14px; background:#14243b; } .ba-hero-term-name{ margin-left:8px; font-family:var(--ba-hero-mono); font-size:.78rem; color:#7d90ad; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .ba-hero-copybtn{ border: 0; margin-left:auto; flex:none; color: #fff; white-space:nowrap; font-size:.72rem; padding:0.3125em; cursor:pointer; transition:.15s; background: transparent; } - .ba-hero-copybtn.is-waiting { opacity: 0; } + .ba-hero-copybtn.is-waiting { visibility: hidden; } .ba-hero-copybtn.is-done{ color:var(--ba-hero-mint); } .ba-hero-term-body{ padding:18px 20px 24px; font-family:var(--ba-hero-mono); font-size:.84rem; line-height:1.75; color:#cde3ff; min-height:236px; } .ba-hero-ln{ white-space:pre-wrap; word-break:break-word; } From c37c7d19da678acbb28a62e326333e918cd0d6e8 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Wed, 22 Jul 2026 13:59:34 -0500 Subject: [PATCH 68/76] Swap to icon on copy --- src/_includes/components/build-awesome-hero.njk | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/_includes/components/build-awesome-hero.njk b/src/_includes/components/build-awesome-hero.njk index 1e3b0eae83..6de2f77941 100644 --- a/src/_includes/components/build-awesome-hero.njk +++ b/src/_includes/components/build-awesome-hero.njk @@ -61,6 +61,12 @@ .ba-hero-copybtn{ border: 0; margin-left:auto; flex:none; color: #fff; white-space:nowrap; font-size:.72rem; padding:0.3125em; cursor:pointer; transition:.15s; background: transparent; } .ba-hero-copybtn.is-waiting { visibility: hidden; } .ba-hero-copybtn.is-done{ color:var(--ba-hero-mint); } + .ba-hero-copybtn.is-done .fa11ty-icon:first-child { + display: none; + } + .ba-hero-copybtn:not(.is-done) .fa11ty-icon:last-child { + display: none; + } .ba-hero-term-body{ padding:18px 20px 24px; font-family:var(--ba-hero-mono); font-size:.84rem; line-height:1.75; color:#cde3ff; min-height:236px; } .ba-hero-ln{ white-space:pre-wrap; word-break:break-word; } .ba-hero-pr{ color:var(--ba-hero-green); font-weight:700; } @@ -137,7 +143,7 @@
            ~/my-awesome-site - +
            @@ -225,7 +231,6 @@ copy?.addEventListener('click', async () => { try { await navigator.clipboard.writeText(CMD); } catch (e) {} let previousHtml = copy.innerHTML; - copy.textContent = 'Copied!'; copy.classList.add('is-done'); setTimeout(() => { copy.innerHTML = previousHtml; copy.classList.remove('is-done'); }, 1500); }); From 85001ea0df50db30541d40da3f167df3d02066f2 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Thu, 23 Jul 2026 11:29:18 -0500 Subject: [PATCH 69/76] Minor alignment issue on small viewport --- src/_includes/components/build-awesome-hero.njk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_includes/components/build-awesome-hero.njk b/src/_includes/components/build-awesome-hero.njk index 6de2f77941..8fb0d84cb4 100644 --- a/src/_includes/components/build-awesome-hero.njk +++ b/src/_includes/components/build-awesome-hero.njk @@ -104,7 +104,7 @@ .ba-hero-sub{ margin-inline:auto; } .ba-hero-actions, .ba-hero-feats{ justify-content:center; } .ba-hero-stage{ height:auto; max-width:540px; margin:8px auto 60px; text-align:left; } .ba-hero-floaty{ position:relative !important; width:100% !important; animation:none; } - .ba-hero-floaty-browser{ top: 0; width:92% !important; margin:-6px auto 0; } + .ba-hero-floaty-browser{ top: 0; right: 0; width:92% !important; margin:-26px auto 0; } .ba-hero-term, .ba-hero-browser{ transform:none !important; } } @media (prefers-reduced-motion: reduce){ From efa975a76e9cb9c9b8842106479276428470d991 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Thu, 23 Jul 2026 12:10:01 -0500 Subject: [PATCH 70/76] Tweaks to grid layouts --- src/_includes/components/grid-layout.css | 5 +---- src/docs/starter.md | 4 ++-- src/pro/pro.md | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/_includes/components/grid-layout.css b/src/_includes/components/grid-layout.css index 64fab04905..3ee901fcd7 100644 --- a/src/_includes/components/grid-layout.css +++ b/src/_includes/components/grid-layout.css @@ -3,10 +3,7 @@ --lo-grid-repeat: auto-fit; display: grid; margin: 0; - grid-template-columns: repeat( - var(--lo-grid-repeat), - minmax(var(--lo-c-minwidth), 1fr) - ); + grid-template-columns: repeat(var(--lo-grid-repeat), minmax(min(var(--lo-c-minwidth), 100%), 1fr)); grid-row-gap: var(--fl-gap-v, 0); grid-column-gap: var(--fl-gap-h, 0); } diff --git a/src/docs/starter.md b/src/docs/starter.md index 0cdc7a6677..b1b95c594c 100644 --- a/src/docs/starter.md +++ b/src/docs/starter.md @@ -8,7 +8,7 @@ eleventyNavigation: # Starter Projects
            -
            +
            {%- for site in starters | sortObjectByOrder %} {%- if site.official %} {%- set siteData = speedlifyStarters.data[site.demo] or speedlifyStarters.data[site.url] %} @@ -20,7 +20,7 @@ eleventyNavigation: [Add your own starter project](https://github.com/11ty/docs/tree/main/src/_data/starters). Community contributions are shown in random order.
            -
            +
            {%- for site in starters | sortObjectByOrder %} {%- if site.disabled != true and site.featured %} {%- set siteData = speedlifyStarters.data[site.demo] or speedlifyStarters.data[site.url] %} diff --git a/src/pro/pro.md b/src/pro/pro.md index 54bb216a4a..66dcd4bb02 100644 --- a/src/pro/pro.md +++ b/src/pro/pro.md @@ -33,7 +33,7 @@ Our [Kickstarter]({{ config.kickstarterUrl }}) was funded successfully by **{{ k ## Features -
              +
              • No installation required. Build Awesome Pro runs on our servers — Build Awesome (free) runs on yours. Skip the terminal and get straight to building.
              • Publish on the go. Return to the office? No thank you! Add new content from any device with a web browser.
              • Visual editing. Edit your site’s content and preview your changes live.
              • From 9b9c3d7160c1175121f99b2fbe14b31ff952ae2d Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Thu, 23 Jul 2026 16:06:44 -0500 Subject: [PATCH 71/76] Upgrade v4 docs to use require(esm) since it meets minimum Node requirements --- src/_includes/components/inline-code.css | 3 ++ .../snippets/config/config-pathprefix.njk | 4 +- .../snippets/plugins/base-install-options.njk | 4 +- .../snippets/plugins/base-install.njk | 4 +- .../snippets/plugins/i18n-install-options.njk | 4 +- .../snippets/plugins/i18n-install.njk | 4 +- .../snippets/plugins/idattr-opts.njk | 4 +- src/_includes/snippets/plugins/idattr.njk | 4 +- .../snippets/plugins/inputpath-options.njk | 4 +- src/_includes/snippets/plugins/inputpath.njk | 4 +- .../plugins/renderinstall-advanced.njk | 4 +- .../snippets/plugins/renderinstall.njk | 4 +- .../snippets/programmatic/chdirs.njk | 14 +++++-- .../snippets/programmatic/fullopts.njk | 14 +++++-- .../snippets/programmatic/json-out-data.njk | 8 ++-- .../snippets/programmatic/json-out.njk | 4 +- .../snippets/programmatic/node-script.njk | 4 +- src/docs/cjs-esm.md | 39 +------------------ src/docs/events.md | 3 +- 19 files changed, 58 insertions(+), 75 deletions(-) diff --git a/src/_includes/components/inline-code.css b/src/_includes/components/inline-code.css index 5e58a887e0..0250adf723 100644 --- a/src/_includes/components/inline-code.css +++ b/src/_includes/components/inline-code.css @@ -10,6 +10,9 @@ code { padding-right: 4px; border-radius: 0.15em; } +table code { + word-break: normal; +} pre[class*="language-"] code { background-color: inherit; } diff --git a/src/_includes/snippets/config/config-pathprefix.njk b/src/_includes/snippets/config/config-pathprefix.njk index a92e852506..5dd3413f43 100644 --- a/src/_includes/snippets/config/config-pathprefix.njk +++ b/src/_includes/snippets/config/config-pathprefix.njk @@ -19,9 +19,9 @@ export const config = {
            {% set codeBlock %} -module.exports = async function ($config) { - const { HtmlBasePlugin } = await import("@awesome.me/buildawesome"); +const { HtmlBasePlugin } = require("@awesome.me/buildawesome"); +module.exports = function ($config) { $config.addPlugin(HtmlBasePlugin); }; diff --git a/src/_includes/snippets/plugins/base-install-options.njk b/src/_includes/snippets/plugins/base-install-options.njk index 72661d2471..7a851ffcaf 100644 --- a/src/_includes/snippets/plugins/base-install-options.njk +++ b/src/_includes/snippets/plugins/base-install-options.njk @@ -25,9 +25,9 @@ export default function ($config) {
            {% set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { HtmlBasePlugin } = await import("@awesome.me/buildawesome"); +const { HtmlBasePlugin } = require("@awesome.me/buildawesome"); +module.exports = function ($config) { $config.addPlugin(HtmlBasePlugin, { // The base URL: defaults to Path Prefix baseHref: $config.pathPrefix, diff --git a/src/_includes/snippets/plugins/base-install.njk b/src/_includes/snippets/plugins/base-install.njk index 1741f7591d..09bc2bb427 100644 --- a/src/_includes/snippets/plugins/base-install.njk +++ b/src/_includes/snippets/plugins/base-install.njk @@ -15,9 +15,9 @@ export default function ($config) {
            {% set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { HtmlBasePlugin } = await import("@awesome.me/buildawesome"); +const { HtmlBasePlugin } = require("@awesome.me/buildawesome"); +module.exports = function ($config) { $config.addPlugin(HtmlBasePlugin); } {% endraw %}{% endset %} diff --git a/src/_includes/snippets/plugins/i18n-install-options.njk b/src/_includes/snippets/plugins/i18n-install-options.njk index 8c2c870cc6..f159567b7f 100644 --- a/src/_includes/snippets/plugins/i18n-install-options.njk +++ b/src/_includes/snippets/plugins/i18n-install-options.njk @@ -35,9 +35,9 @@ export default function ($config) {
            {% set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { I18nPlugin } = await import("@awesome.me/buildawesome"); +const { I18nPlugin } = require("@awesome.me/buildawesome"); +module.exports = function ($config) { $config.addPlugin(I18nPlugin, { // any valid BCP 47-compatible language tag is supported defaultLanguage: "", // Required, this site uses "en" diff --git a/src/_includes/snippets/plugins/i18n-install.njk b/src/_includes/snippets/plugins/i18n-install.njk index 575528072f..00f215d6c8 100644 --- a/src/_includes/snippets/plugins/i18n-install.njk +++ b/src/_includes/snippets/plugins/i18n-install.njk @@ -15,9 +15,9 @@ export default function ($config) {
            {% set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { I18nPlugin } = await import("@awesome.me/buildawesome"); +const { I18nPlugin } = require("@awesome.me/buildawesome"); +module.exports = function ($config) { $config.addPlugin(I18nPlugin); } {% endraw %}{% endset %} diff --git a/src/_includes/snippets/plugins/idattr-opts.njk b/src/_includes/snippets/plugins/idattr-opts.njk index 7bb9839869..54f05ff888 100644 --- a/src/_includes/snippets/plugins/idattr-opts.njk +++ b/src/_includes/snippets/plugins/idattr-opts.njk @@ -34,9 +34,9 @@ export default function ($config) {
            {%- set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { IdAttributePlugin } = await import("@awesome.me/buildawesome"); +const { IdAttributePlugin } = require("@awesome.me/buildawesome"); +module.exports = function ($config) { $config.addPlugin(IdAttributePlugin, { selector: "h1,h2,h3,h4,h5,h6", // default diff --git a/src/_includes/snippets/plugins/idattr.njk b/src/_includes/snippets/plugins/idattr.njk index ed308cb078..9025860181 100644 --- a/src/_includes/snippets/plugins/idattr.njk +++ b/src/_includes/snippets/plugins/idattr.njk @@ -15,9 +15,9 @@ export default function ($config) {
            {%- set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { IdAttributePlugin } = await import("@awesome.me/buildawesome"); +const { IdAttributePlugin } = require("@awesome.me/buildawesome"); +module.exports = function ($config) { $config.addPlugin(IdAttributePlugin); } {% endraw %}{%- endset %} diff --git a/src/_includes/snippets/plugins/inputpath-options.njk b/src/_includes/snippets/plugins/inputpath-options.njk index 9eb20eb665..46c405223f 100644 --- a/src/_includes/snippets/plugins/inputpath-options.njk +++ b/src/_includes/snippets/plugins/inputpath-options.njk @@ -18,9 +18,9 @@ export default function ($config) {
            {%- set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { InputPathToUrlTransformPlugin } = await import("@awesome.me/buildawesome"); +const { InputPathToUrlTransformPlugin } = require("@awesome.me/buildawesome"); +module.exports = function ($config) { $config.addPlugin(InputPathToUrlTransformPlugin, { // Comma separated list of outputPath file extensions to apply the transform extensions: "html", diff --git a/src/_includes/snippets/plugins/inputpath.njk b/src/_includes/snippets/plugins/inputpath.njk index ae2e306de2..f4d531b002 100644 --- a/src/_includes/snippets/plugins/inputpath.njk +++ b/src/_includes/snippets/plugins/inputpath.njk @@ -15,9 +15,9 @@ export default function ($config) {
            {%- set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { InputPathToUrlTransformPlugin } = await import("@awesome.me/buildawesome"); +const { InputPathToUrlTransformPlugin } = require("@awesome.me/buildawesome"); +module.exports = function ($config) { $config.addPlugin(InputPathToUrlTransformPlugin); } {% endraw %}{%- endset %} diff --git a/src/_includes/snippets/plugins/renderinstall-advanced.njk b/src/_includes/snippets/plugins/renderinstall-advanced.njk index 7408cc4308..e068c8145c 100644 --- a/src/_includes/snippets/plugins/renderinstall-advanced.njk +++ b/src/_includes/snippets/plugins/renderinstall-advanced.njk @@ -22,9 +22,9 @@ export default function ($config) {
            {%- set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { RenderPlugin } = await import("@awesome.me/buildawesome"); +const { RenderPlugin } = require("@awesome.me/buildawesome"); +module.exports = function ($config) { $config.addPlugin(RenderPlugin, { tagName: "renderTemplate", // Change the renderTemplate shortcode name tagNameFile: "renderFile", // Change the renderFile shortcode name diff --git a/src/_includes/snippets/plugins/renderinstall.njk b/src/_includes/snippets/plugins/renderinstall.njk index 3d1bb76227..2cb34f66a1 100644 --- a/src/_includes/snippets/plugins/renderinstall.njk +++ b/src/_includes/snippets/plugins/renderinstall.njk @@ -15,9 +15,9 @@ export default function ($config) {
            {%- set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { RenderPlugin } = await import("@awesome.me/buildawesome"); +const { RenderPlugin } = require("@awesome.me/buildawesome"); +module.exports = function ($config) { $config.addPlugin(RenderPlugin); }; {% endraw %}{%- endset %} diff --git a/src/_includes/snippets/programmatic/chdirs.njk b/src/_includes/snippets/programmatic/chdirs.njk index ecb900b331..6192db4f9c 100644 --- a/src/_includes/snippets/programmatic/chdirs.njk +++ b/src/_includes/snippets/programmatic/chdirs.njk @@ -7,7 +7,10 @@ {%- set codeBlock %}{% raw %} import BuildAwesome from "@awesome.me/buildawesome"; -let ba = new BuildAwesome(".", "_site"); +let ba = new BuildAwesome({ + input: ".", + output: "_site", +}); // Use `write` or `toJSON` {% endraw %}{%- endset %} @@ -15,10 +18,13 @@ let ba = new BuildAwesome(".", "_site");
            {%- set codeBlock %}{% raw %} -(async function () { - const { default: BuildAwesome } = await import("@awesome.me/buildawesome"); +const { default: BuildAwesome } = require("@awesome.me/buildawesome"); - let ba = new BuildAwesome(".", "_site"); +(async function () { + let ba = new BuildAwesome({ + input: ".", + output: "_site", + }); // Use `write` or `toJSON` })(); diff --git a/src/_includes/snippets/programmatic/fullopts.njk b/src/_includes/snippets/programmatic/fullopts.njk index 9dac661474..89ca211388 100644 --- a/src/_includes/snippets/programmatic/fullopts.njk +++ b/src/_includes/snippets/programmatic/fullopts.njk @@ -7,7 +7,11 @@ {%- set codeBlock %}{% raw %} import BuildAwesome from "@awesome.me/buildawesome"; -let ba = new BuildAwesome(".", "_site", { +let ba = new BuildAwesome({ + // Input and output directories + input: ".", + output: "_site", + // --quiet quietMode: true, @@ -26,10 +30,14 @@ let ba = new BuildAwesome(".", "_site", {
            {%- set codeBlock %}{% raw %} +const { default: BuildAwesome } = require("@awesome.me/buildawesome"); + (async function () { - const { default: BuildAwesome } = await import("@awesome.me/buildawesome"); + let ba = new BuildAwesome({ + // Input and output directories + input: ".", + output: "_site", - let ba = new BuildAwesome(".", "_site", { // --quiet quietMode: true, diff --git a/src/_includes/snippets/programmatic/json-out-data.njk b/src/_includes/snippets/programmatic/json-out-data.njk index 390b670cc4..51e11fc5d5 100644 --- a/src/_includes/snippets/programmatic/json-out-data.njk +++ b/src/_includes/snippets/programmatic/json-out-data.njk @@ -7,7 +7,7 @@ {%- set codeBlock %}{% raw %} import BuildAwesome from "@awesome.me/buildawesome"; -let ba = new BuildAwesome(".", "_site", { +let ba = new BuildAwesome({ config: function($config) { $config.dataFilterSelectors.add("globalData.key1"); $config.dataFilterSelectors.add("globalData.key2"); @@ -27,10 +27,10 @@ console.log(json);
            {%- set codeBlock %}{% raw %} -(async function () { - const { default: BuildAwesome } = await import("@awesome.me/buildawesome"); +const { default: BuildAwesome } = require("@awesome.me/buildawesome"); - let ba = new BuildAwesome(".", "_site", { +(async function () { + let ba = new BuildAwesome({ config: function($config) { $config.dataFilterSelectors.add("globalData.key1"); $config.dataFilterSelectors.add("globalData.key2"); diff --git a/src/_includes/snippets/programmatic/json-out.njk b/src/_includes/snippets/programmatic/json-out.njk index e8b9b82118..dfcb51e726 100644 --- a/src/_includes/snippets/programmatic/json-out.njk +++ b/src/_includes/snippets/programmatic/json-out.njk @@ -17,9 +17,9 @@ console.log(json);
            {%- set codeBlock %}{% raw %} -(async function () { - const { default: BuildAwesome } = await import("@awesome.me/buildawesome"); +const { default: BuildAwesome } = require("@awesome.me/buildawesome"); +(async function () { let ba = new BuildAwesome(); let json = await ba.toJSON(); diff --git a/src/_includes/snippets/programmatic/node-script.njk b/src/_includes/snippets/programmatic/node-script.njk index 5e0bd81b05..f04de585b5 100644 --- a/src/_includes/snippets/programmatic/node-script.njk +++ b/src/_includes/snippets/programmatic/node-script.njk @@ -14,9 +14,9 @@ await ba.write();
            {%- set codeBlock %}{% raw %} -(async function () { - const { default: BuildAwesome } = await import("@awesome.me/buildawesome"); +const { default: BuildAwesome } = require("@awesome.me/buildawesome"); +(async function () { let ba = new BuildAwesome(); await ba.write(); })(); diff --git a/src/docs/cjs-esm.md b/src/docs/cjs-esm.md index 7a10d6bed5..19630a38a1 100644 --- a/src/docs/cjs-esm.md +++ b/src/docs/cjs-esm.md @@ -132,12 +132,9 @@ Note the use of `import` and `export default`. ### CommonJS Configuration -If you use core bundled plugins (like [i18n](/docs/plugins/i18n/), [Render](/docs/plugins/render/), [InputPath to URL](/docs/plugins/inputpath-to-url/), [`id` Attribute](/docs/plugins/id-attribute/) or [HTML ``](/docs/plugins/html-base/)), you have a few options in your [configuration file](/docs/config.md). - -Consider this CommonJS configuration file: +If you use core bundled plugins (like [i18n](/docs/plugins/i18n/), [Render](/docs/plugins/render/), [InputPath to URL](/docs/plugins/inputpath-to-url/), [`id` Attribute](/docs/plugins/id-attribute/) or [HTML ``](/docs/plugins/html-base/)) (or any ESM package, really), you can simply require the package directly in your [configuration file](/docs/config.md) as [`require(ESM)` is now natively supported in Node 20.19 and newer](https://nodejs.org/docs/latest/api/modules.html#loading-ecmascript-modules-using-require). {%- set codeBlock %}{% raw %} -// This requires Node v20.19 or newer const { I18nPlugin, RenderPlugin, HtmlBasePlugin } = require("@awesome.me/buildawesome"); module.exports = function ($config) { @@ -146,37 +143,7 @@ module.exports = function ($config) { {% endraw %}{%- endset %} {{ codeBlock | highlight("js") | safe }} -- Read more about [`require(ESM)` in Node.js](https://nodejs.org/docs/latest/api/modules.html#loading-ecmascript-modules-using-require) - -If you attempt to `require("@awesome.me/buildawesome")` with Build Awesome (Eleventy) v3 in a version of Node that does not support it, we’ll throw a [very helpful error message which will provide you exact instructions on how to fix the issue](https://www.zachleat.com/web/future-friendly-esm/). - -#### CommonJS Configuration in Node 18 - -For older versions of Node.js, you’ll need to use a dynamic `import()` instead of `require` (or change your configuration file to use ESM): - -{%- set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { I18nPlugin, RenderPlugin, HtmlBasePlugin } = await import("@awesome.me/buildawesome"); - // … -}; -{% endraw %}{%- endset %} -{{ codeBlock | highlight("js") | safe }} - -Note the `async` configuration callback. - -#### Using ESM plugins in CommonJS Configuration - -_Remember, you can use `require` to import an ESM plugin in Node 20.19 and newer (and ignore this section)._ - -But if you’re on an older version of Node, you can use ESM plugins in a CommonJS configuration file with dynamic import. Keep in mind that using default export as the plugin callback, you will need to use the special `default` property supplied from dynamic `import()`. - -{%- set codeBlock %}{% raw %} -module.exports = async function ($config) { - const { default: myPlugin } = await import("my-plugin"); - // … -}; -{% endraw %}{%- endset %} -{{ codeBlock | highlight("js") | safe }} +If you attempt to `require("@awesome.me/buildawesome")` in a version of Node that does not support it, we’ll throw a [very helpful error message which will provide you exact instructions on how to fix the issue](https://www.zachleat.com/web/future-friendly-esm/). ### Plugins @@ -202,5 +169,3 @@ You can write your [plugins](/docs/plugins.md) in CommonJS or ESM too. Which sho _It is not recommended to use TypeScript in plugin code as type stripping is not supported in Node.js’ `node_modules` folder._ - -Notably, the same limitations documented above for Build Awesome bundled plugins will apply to your plugin code as well! diff --git a/src/docs/events.md b/src/docs/events.md index af79c19b80..c6f8845b2c 100644 --- a/src/docs/events.md +++ b/src/docs/events.md @@ -97,11 +97,12 @@ export default function($config) { The `eleventy.beforeConfig` runs before your configuration is initialized and was added as an escape hatch for folks unable to update their top-level configuration callback to be `async` (usually due to some limitation in a third-party tool or a requirement to use CommonJS). You probably won’t need this. {%- set codeBlock %} +const { HtmlBasePlugin } = require("@awesome.me/buildawesome"); + // sync configuration callback module.exports = function ($config) { // async-friendly event $config.on("eleventy.beforeConfig", async function ($config) { - const { HtmlBasePlugin } = await import("@awesome.me/buildawesome"); $config.addPlugin(HtmlBasePlugin); }); }; From 586b0d810a115c51db578ce6735f98a527ce02f1 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Thu, 23 Jul 2026 16:55:39 -0500 Subject: [PATCH 72/76] Improves the programmatic API docs --- .../snippets/programmatic/chdirs.njk | 35 ------- .../snippets/programmatic/node-script.njk | 12 ++- src/docs/programmatic.md | 99 ++++++++++++++++--- 3 files changed, 94 insertions(+), 52 deletions(-) delete mode 100644 src/_includes/snippets/programmatic/chdirs.njk diff --git a/src/_includes/snippets/programmatic/chdirs.njk b/src/_includes/snippets/programmatic/chdirs.njk deleted file mode 100644 index 6192db4f9c..0000000000 --- a/src/_includes/snippets/programmatic/chdirs.njk +++ /dev/null @@ -1,35 +0,0 @@ -{%- set tabid = "chdirs" %} -
            my-node-script.js
            - - - {% renderFile "./src/_includes/syntax-chooser-tablist.11ty.js", {id: tabid, only: "jsesm,jscjs"} %} -
            -{%- set codeBlock %}{% raw %} -import BuildAwesome from "@awesome.me/buildawesome"; - -let ba = new BuildAwesome({ - input: ".", - output: "_site", -}); - -// Use `write` or `toJSON` -{% endraw %}{%- endset %} -{{ codeBlock | highlight("js") | safe }} -
            -
            -{%- set codeBlock %}{% raw %} -const { default: BuildAwesome } = require("@awesome.me/buildawesome"); - -(async function () { - let ba = new BuildAwesome({ - input: ".", - output: "_site", - }); - - // Use `write` or `toJSON` -})(); -{% endraw %}{%- endset %} -{{ codeBlock | highlight("js") | safe }} -
            -
            -
            diff --git a/src/_includes/snippets/programmatic/node-script.njk b/src/_includes/snippets/programmatic/node-script.njk index f04de585b5..cd98ceff74 100644 --- a/src/_includes/snippets/programmatic/node-script.njk +++ b/src/_includes/snippets/programmatic/node-script.njk @@ -7,7 +7,11 @@ {%- set codeBlock %}{% raw %} import BuildAwesome from "@awesome.me/buildawesome"; -let ba = new BuildAwesome(); +let ba = new BuildAwesome({ + input: ".", // optional + output: "_site", // optional +}); + await ba.write(); {% endraw %}{%- endset %} {{ codeBlock | highlight("js") | safe }} @@ -17,7 +21,11 @@ await ba.write(); const { default: BuildAwesome } = require("@awesome.me/buildawesome"); (async function () { - let ba = new BuildAwesome(); + let ba = new BuildAwesome({ + input: ".", // optional + output: "_site", // optional + }); + await ba.write(); })(); {% endraw %}{%- endset %} diff --git a/src/docs/programmatic.md b/src/docs/programmatic.md index 1a8639ac15..0c3e60f4e0 100644 --- a/src/docs/programmatic.md +++ b/src/docs/programmatic.md @@ -9,13 +9,13 @@ eleventyNavigation: {% tableofcontents %} -You can run Build Awesome in any arbitrary Node script. +Instead of running Build Awesome from the command line, you can import it and run it from any Node script — useful for custom build tooling, running Build Awesome as part of a larger process, or retrieving your rendered content as data without writing any files. -## Write to the file system +Don’t forget to [install Build Awesome into your local project first](/docs/#step-2-install-build-awesome)! -Don’t forget to [install Build Awesome into your local project first](/docs/step-2-install-build-awesome)! +## Simplest -Now create a file called `my-node-script.js` with the following contents: +The constructor takes an options object and every property is optional. {% include "snippets/programmatic/node-script.njk" %} @@ -25,30 +25,99 @@ Then run your new script from the command line. node my-node-script.js ``` -## Don’t write to the file system +`write()` is one of a few [build methods](#building-your-site) offered (`toJSON()` is also commonly used). -Using `.write()` will write your output to the file system. If, instead, you want to retrieve the content programmatically without writing, use `.toJSON()`. +## Options -### JSON Output +All configuration is passed through an `options` object and every property is optional. + +| Option | Type | Default | Description | +| ------------ | ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------ | +| `input` | `string` | `"."` | The input directory (or a single input file). Mirrors the [`--input` CLI flag](/docs/usage/). | +| `output` | `string` | `"_site"` | The output directory. Mirrors the [`--output` CLI flag](/docs/usage/). | +| `configPath` | `string` | _(none)_ | Path to a configuration file. Equivalent to the [`--config` CLI flag](/docs/usage/). | +| `config` | `function` | _(none)_ | A [configuration callback](#the-config-callback) that receives the config API object. | +| `quietMode` | `boolean` | `false` | When `true`, suppresses the build output logging. Equivalent to the [`--quiet` CLI flag](/docs/usage/). | +| `dryRun` | `boolean` | `false` | When `true`, runs a full build but does not write anything to the file system. | +| `runMode` | `string` | `"build"` | One of `"build"`, `"watch"`, or `"serve"`. | +| `pathPrefix` | `string` | `"/"` | Prepends this value to all URLs. Equivalent to the [`--pathprefix` CLI option used with the HTML `` plugin](/docs/plugins/html-base/). | +| `loader` | `string` | `"auto"` | Force the module mode: `"esm"`, `"cjs"`, or `"auto"` (detected from your `package.json` `type`). | + +{% include "snippets/programmatic/fullopts.njk" %} + +{% callout "info", "md", "Backwards compatibility note" -%} +In previous versions, `input` and `output` were passed in as separate arguments (e.g. `new BuildAwesome(input, output, options)`). Starting with Build Awesome v4, the single `options` argument is now recommended. Feel free to browse the [v3 documentation for more information](https://v3.11ty.dev/docs/programmatic/). +{%- endcallout %} + +### The `config` Callback + +The `config` option is a function that receives the [Configuration API](/docs/config/) object, letting you configure Build Awesome inline without a separate config file: + +Notably, the `config` callback does not replace your configuration file: both run. Importantly, they run in this order: + +1. `config` callback function +1. `configPath` configuration file (can override things set in `config`) + +{# +Missing from above: +- The default Build Awesome configuration file +- [`beforeConfig` event fires](/docs/events/#eleventy-before-config) +- Plugins +#} + +## Building Your Project + +Making a new instance of Build Awesome doesn’t process anything: you must call one of these methods to execute a build. Each returns a Promise, so use with `await` or `.then()`. + +| Method | Returns | Description | +| --------------- | ------------------------------------ | ------------------------------------------------------------------------------ | +| `write()` | `Promise` | Renders and writes output to the file system. | +| `toJSON()` | `Promise` | Renders and returns output as data (no files written). | +| `watch()` | `Promise` | Runs an initial build, then rebuilds on file changes. | +| `serve(port)` | `Promise` | Starts the [Dev Server](/docs/dev-server/) on the given port. | + +### Write to the File System + +Use `write()` to render your site and write the output files to the [output directory](#input-and-output-directories)—this is the same thing running Build Awesome [from the command line](/docs/usage/) does. + +### Don’t Write to the File System + +If you want to retrieve the rendered content programmatically _without_ writing anything to disk, use `toJSON()` (or the `dryRun` option documented above). {% include "snippets/programmatic/json-out.njk" %} +`toJSON()` resolves to an array of entries, one per rendered output. Each entry includes: + +| Property | Description | +| ------------ | --------------------------------------------------------------------------- | +| `inputPath` | The template’s source path. | +| `outputPath` | Where the file _would_ be written on disk. | +| `url` | The output [URL](/docs/data-eleventy-supplied/#page-variable) for the page. | +| `content` | The final rendered content. | +| `rawInput` | The template’s raw (unrendered) input. | +| `data` | Selected [Data Cascade](/docs/data-cascade/) entries—only present when you add [data filter selectors](#adding-data-to-json-output). | + #### Adding data to JSON output -You can use the `$config.dataFilterSelectors` configuration API `Set` instance to add or remove lodash-style selectors for Data Cascade entries to be included in individual entries from the `toJSON` method. +By default, the `data` property is not included in `toJSON` entries. Use the `$config.dataFilterSelectors` configuration API `Set` instance to add (or remove) lodash-style selectors for the Data Cascade entries you want included: {% include "snippets/programmatic/json-out-data.njk" %} -## Changing the Input and Output Directories +## Advanced -The first argument is the input directory. The second argument is the output directory. +### Setup Methods -{% include "snippets/programmatic/chdirs.njk" %} +In addition to the constructor `options`, you can configure an instance by calling these methods _before_ a build. Each corresponds to a command line flag. -## Full Options List +| Method | Description | +| ----------------------------- | --------------------------------------------------------------------- | +| `setFormats(formats)` | Comma-separated [template formats](/docs/usage/) (`--formats`) to process. | +| `disableLogger()` | Disable Build Awesome’s logging entirely. | -The third argument to Build Awesome is an options object. +### Handling Errors -_(This documentation section is a work in progress but [you’re welcome to dig into the `Core` class source code in `{% latestVersion versions, config %}` to learn more](https://github.com/11ty/buildawesome/blob/{% latestVersion versions, config %}/src/Core.js))_ +Wrap your build in a `try`/`catch` to handle errors yourself. When run programmatically (`source: "script"`, the default), Build Awesome throws on error rather than changing the process exit code, so it won’t exit your script for you. -{% include "snippets/programmatic/fullopts.njk" %} +### Full Options and Source + +_(This documentation covers the most common options. For everything else, [dig into the `Core` class source code](https://github.com/11ty/buildawesome/blob/main/src/Core.js).)_ From dbc0b853fd4a200077b556598fcab86ee25f4a11 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Mon, 27 Jul 2026 11:26:41 -0500 Subject: [PATCH 73/76] Upgrade to latest Image utility alpha --- eleventy.config.js | 16 +- package-lock.json | 400 +++++++++++++++++++++++---------------------- package.json | 6 +- 3 files changed, 213 insertions(+), 209 deletions(-) diff --git a/eleventy.config.js b/eleventy.config.js index 0b9045b3e8..1aa23f33e4 100644 --- a/eleventy.config.js +++ b/eleventy.config.js @@ -71,7 +71,7 @@ const shortcodes = { (linkUrl ? `` : "") ); }, - getScreenshotHtml(alt, siteUrl, sizes, preset = "small") { + async getScreenshotHtml(alt, siteUrl, sizes, preset = "small") { let zoom; let viewport = { width: 375, @@ -120,11 +120,13 @@ const shortcodes = { }, }; - let stats = eleventyImage.statsByDimensionsSync( + let stats = await eleventyImage( screenshotUrl, - viewport.width, - viewport.height, - options + { + ...options, + statsOnly: true, + imageMetadataOverride: { width: viewport.width, height: viewport.height }, + } ); let attrs = { @@ -435,7 +437,7 @@ export default async function ($config) { return !!data && !("error" in data) && data.lighthouse.total === 400; }); - $config.addFilter("cardScreenshotHtml", function (site) { + $config.addFilter("cardScreenshotHtml", async function (site) { let url = site.demo || site.url; if(!url) { return `
            `; @@ -443,7 +445,7 @@ export default async function ($config) { if(site.screenshotOverride) { return `
            ${site.screenshotOverride.alt}
            `; } - return `
            ${shortcodes.getScreenshotHtml(site.fileSlug, url, null, site.screenshotSize, site.screenshotAspectRatio)}
            `; + return `
            ${await shortcodes.getScreenshotHtml(site.fileSlug, url, null, site.screenshotSize, site.screenshotAspectRatio)}
            `; }); $config.addFilter("speedlifyHash", function (site) { diff --git a/package-lock.json b/package-lock.json index 83679e9ca7..18ce5b50da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "4.0.0", "license": "MIT", "dependencies": { - "@11ty/client": "4.0.0-alpha.9", + "@11ty/client": "4.0.0-alpha.10", "@11ty/is-land": "^5.0.1", "@11ty/logo": "^3.0.0", "@awesome.me/webawesome": "^3.10.0", @@ -27,7 +27,7 @@ "@11ty/eleventy": "4.0.0-alpha.10", "@11ty/eleventy-activity-feed": "^2.0.0", "@11ty/eleventy-fetch": "^5.1.3", - "@11ty/eleventy-img": "7.0.0-alpha.4", + "@11ty/eleventy-img": "7.0.0-alpha.5", "@11ty/eleventy-navigation": "^1.0.5", "@11ty/eleventy-plugin-rss": "^3.0.0", "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.2", @@ -65,9 +65,9 @@ } }, "node_modules/@11ty/client": { - "version": "4.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@11ty/client/-/client-4.0.0-alpha.9.tgz", - "integrity": "sha512-YE+/mARGazjCUZWaTSom4EHXnByxwf0PQFt7NpLhmHC2gfhdfjGLFjWBDjxhjxdDoxrzRR7uBr4b7ZlqMPjz7Q==", + "version": "4.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@11ty/client/-/client-4.0.0-alpha.10.tgz", + "integrity": "sha512-HWGYgL8gJ2M22M3pJktXjl4uzM+BU6bUkXeKN7cuiC7pC0FCxGwi9zO+sT1h0OZVoInN3/EQYEuEHhNXjPJvjA==", "license": "MIT", "funding": { "type": "opencollective", @@ -251,42 +251,28 @@ } }, "node_modules/@11ty/eleventy-img": { - "version": "7.0.0-alpha.4", - "resolved": "https://registry.npmjs.org/@11ty/eleventy-img/-/eleventy-img-7.0.0-alpha.4.tgz", - "integrity": "sha512-7FJD1+ShuWK+rvLNvSpWyWmGKnOzDqPfMYcXyBH5cAMZcsjWAsPhzX1ERjvOROz41D6hLu/Ss6YE77yOmRGQSA==", + "version": "7.0.0-alpha.5", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-img/-/eleventy-img-7.0.0-alpha.5.tgz", + "integrity": "sha512-rQMtdHTR1CrNqtgaSW99JjjtAmc829Hf3GdNmDldDRINLiUpPw1xfeKFUBY7d8yYrxaHWMFMUMjY2p8PBYzjLw==", "dev": true, "license": "MIT", "dependencies": { - "@11ty/eleventy-fetch": "^5.1.2", + "@11ty/eleventy-fetch": "^5.1.3", "@11ty/eleventy-utils": "^2.0.7", "brotli-size": "^4.0.0", - "debug": "^4.4.3", - "entities": "^6.0.1", - "image-size": "^1.2.1", - "p-queue": "^8.1.0", - "sharp": "^0.34.5" + "entities": "^8.0.0", + "obug": "^2.1.4", + "p-queue": "^9.3.3", + "sharp": "^0.35.3" }, "engines": { - "node": ">=18" + "node": ">=22" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/11ty" } }, - "node_modules/@11ty/eleventy-img/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/@11ty/eleventy-img/node_modules/eventemitter3": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", @@ -295,30 +281,30 @@ "license": "MIT" }, "node_modules/@11ty/eleventy-img/node_modules/p-queue": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", - "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz", + "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==", "dev": true, "license": "MIT", "dependencies": { - "eventemitter3": "^5.0.1", - "p-timeout": "^6.1.2" + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@11ty/eleventy-img/node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.16" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -822,9 +808,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", - "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", "dev": true, "license": "MIT", "optional": true, @@ -1372,9 +1358,9 @@ } }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", - "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz", + "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==", "cpu": [ "arm64" ], @@ -1385,19 +1371,19 @@ "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.4" + "@img/sharp-libvips-darwin-arm64": "1.3.2" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", - "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz", + "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==", "cpu": [ "x64" ], @@ -1408,19 +1394,39 @@ "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.4" + "@img/sharp-libvips-darwin-x64": "1.3.2" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz", + "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", - "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz", + "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==", "cpu": [ "arm64" ], @@ -1435,9 +1441,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", - "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz", + "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==", "cpu": [ "x64" ], @@ -1452,9 +1458,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", - "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz", + "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==", "cpu": [ "arm" ], @@ -1472,9 +1478,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", - "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz", + "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==", "cpu": [ "arm64" ], @@ -1492,9 +1498,9 @@ } }, "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", - "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz", + "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==", "cpu": [ "ppc64" ], @@ -1512,9 +1518,9 @@ } }, "node_modules/@img/sharp-libvips-linux-riscv64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", - "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz", + "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==", "cpu": [ "riscv64" ], @@ -1532,9 +1538,9 @@ } }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", - "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz", + "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==", "cpu": [ "s390x" ], @@ -1552,9 +1558,9 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", - "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz", + "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==", "cpu": [ "x64" ], @@ -1572,9 +1578,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", - "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz", + "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==", "cpu": [ "arm64" ], @@ -1592,9 +1598,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", - "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz", + "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==", "cpu": [ "x64" ], @@ -1612,9 +1618,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", - "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz", + "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==", "cpu": [ "arm" ], @@ -1628,19 +1634,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.4" + "@img/sharp-libvips-linux-arm": "1.3.2" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", - "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz", + "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==", "cpu": [ "arm64" ], @@ -1654,19 +1660,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.4" + "@img/sharp-libvips-linux-arm64": "1.3.2" } }, "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", - "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz", + "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==", "cpu": [ "ppc64" ], @@ -1680,19 +1686,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.4" + "@img/sharp-libvips-linux-ppc64": "1.3.2" } }, "node_modules/@img/sharp-linux-riscv64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", - "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz", + "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==", "cpu": [ "riscv64" ], @@ -1706,19 +1712,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-riscv64": "1.2.4" + "@img/sharp-libvips-linux-riscv64": "1.3.2" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", - "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz", + "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==", "cpu": [ "s390x" ], @@ -1732,19 +1738,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.4" + "@img/sharp-libvips-linux-s390x": "1.3.2" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", - "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz", + "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==", "cpu": [ "x64" ], @@ -1758,19 +1764,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.4" + "@img/sharp-libvips-linux-x64": "1.3.2" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", - "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz", + "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==", "cpu": [ "arm64" ], @@ -1784,19 +1790,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", - "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz", + "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==", "cpu": [ "x64" ], @@ -1810,39 +1816,56 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + "@img/sharp-libvips-linuxmusl-x64": "1.3.2" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", - "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz", + "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==", + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.1" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz", + "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==", "cpu": [ "wasm32" ], "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.7.0" + "@img/sharp-wasm32": "0.35.3" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", - "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz", + "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==", "cpu": [ "arm64" ], @@ -1853,16 +1876,16 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", - "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz", + "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==", "cpu": [ "ia32" ], @@ -1873,16 +1896,16 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", - "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz", + "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==", "cpu": [ "x64" ], @@ -1893,7 +1916,7 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -3223,22 +3246,6 @@ "dev": true, "license": "MIT" }, - "node_modules/image-size": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", - "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", - "dev": true, - "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, "node_modules/import-module-string": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/import-module-string/-/import-module-string-2.0.3.tgz", @@ -4153,9 +4160,9 @@ } }, "node_modules/obug": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", - "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", @@ -4413,16 +4420,6 @@ "node": ">=6" } }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4569,48 +4566,53 @@ "license": "ISC" }, "node_modules/sharp": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", - "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz", + "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==", "dev": true, - "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@img/colour": "^1.0.0", + "@img/colour": "^1.1.0", "detect-libc": "^2.1.2", - "semver": "^7.7.3" + "semver": "^7.8.5" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.5", - "@img/sharp-darwin-x64": "0.34.5", - "@img/sharp-libvips-darwin-arm64": "1.2.4", - "@img/sharp-libvips-darwin-x64": "1.2.4", - "@img/sharp-libvips-linux-arm": "1.2.4", - "@img/sharp-libvips-linux-arm64": "1.2.4", - "@img/sharp-libvips-linux-ppc64": "1.2.4", - "@img/sharp-libvips-linux-riscv64": "1.2.4", - "@img/sharp-libvips-linux-s390x": "1.2.4", - "@img/sharp-libvips-linux-x64": "1.2.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", - "@img/sharp-libvips-linuxmusl-x64": "1.2.4", - "@img/sharp-linux-arm": "0.34.5", - "@img/sharp-linux-arm64": "0.34.5", - "@img/sharp-linux-ppc64": "0.34.5", - "@img/sharp-linux-riscv64": "0.34.5", - "@img/sharp-linux-s390x": "0.34.5", - "@img/sharp-linux-x64": "0.34.5", - "@img/sharp-linuxmusl-arm64": "0.34.5", - "@img/sharp-linuxmusl-x64": "0.34.5", - "@img/sharp-wasm32": "0.34.5", - "@img/sharp-win32-arm64": "0.34.5", - "@img/sharp-win32-ia32": "0.34.5", - "@img/sharp-win32-x64": "0.34.5" + "@img/sharp-darwin-arm64": "0.35.3", + "@img/sharp-darwin-x64": "0.35.3", + "@img/sharp-freebsd-wasm32": "0.35.3", + "@img/sharp-libvips-darwin-arm64": "1.3.2", + "@img/sharp-libvips-darwin-x64": "1.3.2", + "@img/sharp-libvips-linux-arm": "1.3.2", + "@img/sharp-libvips-linux-arm64": "1.3.2", + "@img/sharp-libvips-linux-ppc64": "1.3.2", + "@img/sharp-libvips-linux-riscv64": "1.3.2", + "@img/sharp-libvips-linux-s390x": "1.3.2", + "@img/sharp-libvips-linux-x64": "1.3.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2", + "@img/sharp-libvips-linuxmusl-x64": "1.3.2", + "@img/sharp-linux-arm": "0.35.3", + "@img/sharp-linux-arm64": "0.35.3", + "@img/sharp-linux-ppc64": "0.35.3", + "@img/sharp-linux-riscv64": "0.35.3", + "@img/sharp-linux-s390x": "0.35.3", + "@img/sharp-linux-x64": "0.35.3", + "@img/sharp-linuxmusl-arm64": "0.35.3", + "@img/sharp-linuxmusl-x64": "0.35.3", + "@img/sharp-webcontainers-wasm32": "0.35.3", + "@img/sharp-win32-arm64": "0.35.3", + "@img/sharp-win32-ia32": "0.35.3", + "@img/sharp-win32-x64": "0.35.3" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/short-hash": { diff --git a/package.json b/package.json index 3b23b5f416..b0aed5dbd3 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@11ty/eleventy": "4.0.0-alpha.10", "@11ty/eleventy-activity-feed": "^2.0.0", "@11ty/eleventy-fetch": "^5.1.3", - "@11ty/eleventy-img": "7.0.0-alpha.4", + "@11ty/eleventy-img": "7.0.0-alpha.5", "@11ty/eleventy-navigation": "^1.0.5", "@11ty/eleventy-plugin-rss": "^3.0.0", "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.2", @@ -71,7 +71,7 @@ "terser": "^5.48.0" }, "dependencies": { - "@11ty/client": "4.0.0-alpha.9", + "@11ty/client": "4.0.0-alpha.10", "@11ty/is-land": "^5.0.1", "@11ty/logo": "^3.0.0", "@awesome.me/webawesome": "^3.10.0", @@ -86,6 +86,6 @@ "speedlify-score": "^4.0.4" }, "overrides": { - "@11ty/eleventy-img": "7.0.0-alpha.4" + "@11ty/eleventy-img": "7.0.0-alpha.5" } } From bc8de68b2379235ff5aa1436336780483320fecd Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Mon, 27 Jul 2026 12:22:34 -0500 Subject: [PATCH 74/76] Copy improvements to getting started --- src/docs/index.webc | 6 ++++-- src/docs/javascript-runtime.webc | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/docs/index.webc b/src/docs/index.webc index 8d750c342a..c31fe5636e 100644 --- a/src/docs/index.webc +++ b/src/docs/index.webc @@ -16,9 +16,11 @@ overrideCommunityLinks: true {% endcallout %} -

            Build Awesome requires a JavaScript runtime, typically Node.js (version or higher).

            +

            Build Awesome requires a JavaScript runtime, typically Node.js.

            -

            You can check whether or not you have Node.js installed by running node --version in a terminal application. (Well, wait—what is a Terminal?) If the command is not found or it reports a number lower than , you will need to download and install Node.js before moving on to the next step. Learn why it’s encouraged to use even numbered releases of Node.js.

            +

            You can check whether or not you have Node.js installed by running node --version in a terminal application. (Well, wait—what is a Terminal?)

            + +

            Build Awesome requires Node version or higher. If the node command is not found or it reports a number lower than , you will need to download and install Node.js before moving on to the next step. It’s encouraged to use an even numbered version of Node.js (22, 24, 26).