From 6042cfaf2605efb31ffcac94ab648235a123c26c Mon Sep 17 00:00:00 2001 From: Feng Ruohang Date: Sun, 18 Oct 2026 09:43:15 +0800 Subject: [PATCH 1/2] fix: restore Hugo-only builds for v1.3.2 --- .github/workflows/ci.yml | 52 ++++++------ AGENTS.md | 29 ++++--- CHANGELOG.md | 16 ++++ README.md | 38 +++++---- assets/scss/td/_chroma.scss | 4 +- bin/check-scss.py | 105 ++++++++++++++++++++++++ hugo.yaml | 2 +- layouts/_partials/head-css.html | 11 +-- layouts/_partials/scripts.html | 2 +- tests/goldens/html/home-landing-zh.html | 2 +- tests/goldens/html/home-landing.html | 2 +- tests/goldens/rss/fixtures.xml | 8 +- theme.toml | 2 +- 13 files changed, 195 insertions(+), 78 deletions(-) create mode 100644 bin/check-scss.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 15ea5266..461b6de0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ permissions: env: GO_VERSION: stable - HUGO_VERSION: latest + HUGO_VERSION: "0.166.0" GOTOOLCHAIN: local jobs: @@ -56,22 +56,10 @@ jobs: hugo-version: ${{ env.HUGO_VERSION }} extended: true - - name: Install Dart Sass 1.105.2 - shell: bash - run: | - sass_archive="$RUNNER_TEMP/dart-sass-1.105.2-linux-x64.tar.gz" - curl --fail --location --silent --show-error \ - --output "$sass_archive" \ - https://github.com/sass/dart-sass/releases/download/1.105.2/dart-sass-1.105.2-linux-x64.tar.gz - echo "a530ee08d5792c80bdb9d9614b45fb58219c890cb42a280a80775f0af9c29582 $sass_archive" | sha256sum --check - tar --extract --gzip --file "$sass_archive" --directory "$RUNNER_TEMP" - echo "$RUNNER_TEMP/dart-sass" >> "$GITHUB_PATH" - - name: Record build tool versions run: | go version hugo version - sass --version - name: Install PDF inspection tools run: | @@ -195,7 +183,7 @@ jobs: build: name: Hugo theme checks runs-on: ubuntu-latest - # CI follows the latest stable Hugo release. A run that reaches this + # CI uses the minimum supported Hugo release. A run that reaches this # ceiling is hung infrastructure, and a cancelled six-hour job must never # again stand in for a release verdict. timeout-minutes: 60 @@ -215,22 +203,10 @@ jobs: hugo-version: ${{ env.HUGO_VERSION }} extended: true - - name: Install Dart Sass 1.105.2 - shell: bash - run: | - sass_archive="$RUNNER_TEMP/dart-sass-1.105.2-linux-x64.tar.gz" - curl --fail --location --silent --show-error \ - --output "$sass_archive" \ - https://github.com/sass/dart-sass/releases/download/1.105.2/dart-sass-1.105.2-linux-x64.tar.gz - echo "a530ee08d5792c80bdb9d9614b45fb58219c890cb42a280a80775f0af9c29582 $sass_archive" | sha256sum --check - tar --extract --gzip --file "$sass_archive" --directory "$RUNNER_TEMP" - echo "$RUNNER_TEMP/dart-sass" >> "$GITHUB_PATH" - - name: Record build tool versions run: | go version hugo version - sass --version - name: Check translation key parity run: python3 bin/check-i18n.py @@ -436,3 +412,27 @@ jobs: exit 1 fi grep -q 'invalid params.ui.typography' "$RUNNER_TEMP/oink-invalid.log" + + scss: + name: Built-in Sass (Hugo ${{ matrix.hugo }}) + runs-on: ubuntu-latest + timeout-minutes: 10 + strategy: + matrix: + hugo: ['0.166.0', '0.168.0'] + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-python@v7 + with: + python-version: '3.x' + - uses: peaceiris/actions-hugo@v3 + with: + hugo-version: ${{ matrix.hugo }} + extended: true + - name: Build without an external Sass executable + run: | + if [ '${{ matrix.hugo }}' = '0.168.0' ]; then + python3 bin/check-scss.py --allow-libsass-warning + else + python3 bin/check-scss.py + fi diff --git a/AGENTS.md b/AGENTS.md index 71c4a34f..80d0ab7d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,8 +6,8 @@ accepted decisions, dated research, and active proposals. ## Current baseline -The current release is `v1.3.1`, dated 2026-10-18 in `CHANGELOG.md`. The sibling -site's `v1.3.1` Design contracts describe this release. Refresh Git state, +The current release is `v1.3.2`, dated 2026-10-18 in `CHANGELOG.md`. The sibling +site's `v1.3.2` Design contracts describe this release. Refresh Git state, public tags, and consumer pins before making claims about later releases or downstream adoption. @@ -94,21 +94,20 @@ make -C ../oink.pgsty.com dev ## Theme contracts -- As of 2026-10-17, the tested toolchain is Go 1.27.2 and Hugo Extended - 0.168.0. CI automatically follows the latest stable Go and Hugo releases - and records the resolved versions. Hugo 0.168.0 remains the declared minimum, - not an exact-version lock. Update module/theme requirements, checkers, and - current bilingual documentation together when raising that minimum. - Do not run older-Hugo compatibility - matrices, adapt code for old versions, or add compatibility shims unless the - user explicitly requests it. Historical release/research records are not - current support requirements. -- SCSS builds use standalone Dart Sass 1.105.2 on `PATH`; CI pins the same - distribution. Preserve the project-variable import hooks and strict warnings. +- Hugo Extended 0.166.0 is the minimum and default development/strict CI + version. Keep this baseline pinned; do not automatically follow latest Hugo. + A focused Hugo 0.168.0 check accepts its known upstream LibSass deprecation + warning while rejecting other diagnostics. Ordinary 0.168.0 builds may warn. + Update requirements, checkers, and current bilingual contracts together. +- SCSS uses Hugo Extended's built-in LibSass, including main and ReDoc styles. + Ordinary consumers must not install Dart Sass or another Sass executable. + Preserve project-variable/style hooks. Future Hugo upgrades must preserve + this dependency boundary; do not add compatibility shims for unrelated versions. - The module declares Go 1.27.0 as its minimum; the current development default is Go 1.27.2. Record the actual local tool versions when reporting validation. -- Run checkers with `--panicOnWarning` when they build Hugo output. Ordinary - editing may warn and fall back; publishing gates turn warnings into failures. +- Run default 0.166.0 checkers with `--panicOnWarning`. The focused 0.168.0 + compatibility check permits only the upstream LibSass warning; theme warnings + remain failures. Ordinary editing may warn and fall back. - Keep generated `public/`, `resources/`, locks, and caches out of Git. - Preserve pre-existing changes in this shared worktree and edit only the owning implementation, checker, and public Design contract for a change. diff --git a/CHANGELOG.md b/CHANGELOG.md index daef8c0d..03c30ef8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,22 @@ All notable changes to OINK are documented here. The project follows ## [Unreleased] +## [1.3.2] — 2026-10-18 + +Restore the Hugo-only build promised to ordinary OINK consumers. + +### Fixed + +- Remove the mandatory Dart Sass dependency introduced in 1.3.1. Main and + ReDoc styles use Hugo Extended's built-in LibSass again; preserve project + variable/style hooks and the dark Chroma palette. +- Restore Hugo Extended 0.166.0 as the minimum and default development/strict + CI version. Hugo 0.168.0 can build with its upstream LibSass deprecation + warning; no external compiler is required and no warnings are hidden. +- Verify both compiler versions without Sass on `PATH`, including ReDoc and + consumer SCSS hooks. Keep all independent readability and FileTree fixes + from 1.3.1, including the corrected download-channel selector. + ## [1.3.1] — 2026-10-18 Readability repairs and an opt-in FileTree comment layout, with a refreshed diff --git a/README.md b/README.md index 5700fa7c..e6dfb8cf 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Website Release CI - Hugo Extended 0.168.0 or newer + Hugo Extended 0.166.0 or newer Apache 2.0

@@ -41,7 +41,7 @@ print and RSS for publication, semantic Markdown for reuse, and optional ## Why OINK - **One deterministic toolchain.** Resolve the Hugo Module once, then build and - preview with Hugo and the standalone Dart Sass compiler. + preview with Hugo Extended and its built-in Sass compiler. - **Complete publishing surfaces.** Docs, Blog, Book, Expo image albums, OpenAPI, releases, downloads, and data-driven landing pages share one navigation and visual system. @@ -62,10 +62,10 @@ print and RSS for publication, semantic Markdown for reuse, and optional JavaScript; interaction, accessibility, responsive behavior, print, and machine-readable outputs are tested as separate contracts. -OINK 1.3.1 improves Markmap contrast, footer clearance, technical table widths, -and optional FileTree comment wrapping. It requires Hugo Extended 0.168.0 and -standalone Dart Sass 1.105.2. See the [changelog](CHANGELOG.md) for the fixes, -upgrade requirements, and contributor credits. +OINK 1.3.2 restores builds with Hugo Extended alone: Dart Sass is no longer +required. Hugo Extended 0.166.0 is the minimum and default validation version. +The Markmap, footer, table, and FileTree fixes from 1.3.1 remain included. +See the [changelog](CHANGELOG.md) for upgrade details and contributor credits. ## Start a site @@ -82,8 +82,8 @@ repository's internal fixtures. · [Setup guide](https://oink.pgsty.com/docs/start/) For development and validation, use Git, Go 1.27.2, and Hugo Extended -0.168.0 or newer with [Dart Sass 1.105.2](https://github.com/sass/dart-sass/releases/tag/1.105.2) -on `PATH` (the standalone distribution, not the npm package). The site does not require Node.js. To evaluate the neutral template locally: +0.166.0 or a newer release that retains built-in LibSass. No external Sass +compiler or Node.js is required. To evaluate the neutral template locally: ```sh git clone https://github.com/pgsty/oink-starter.git @@ -129,8 +129,8 @@ HTML, RSS, Print, Markdown, LLMS, LLMSFULL, and NAVJSON outputs the site needs; the [configuration reference](https://oink.pgsty.com/docs/customize/config/) documents their defaults and scope. -For production, commit `go.mod` and `go.sum`, build with warnings promoted to -errors, and inspect representative routes: +For production, commit `go.mod` and `go.sum`. The default Hugo 0.166.0 release +gate promotes warnings to errors; inspect representative routes after building: ```sh hugo --cleanDestinationDir --gc --minify --environment production \ @@ -212,18 +212,20 @@ assuming drop-in compatibility. | Dependency | Policy | | --- | --- | -| Hugo | **Extended 0.168.0 or newer**; CI follows the latest stable release | -| Dart Sass | Standalone 1.105.2 on `PATH`; no Node.js or npm dependency | +| Hugo | **Extended 0.166.0 minimum**; default development and strict CI version 0.166.0 | +| Sass | Built-in LibSass; no separately installed compiler | | Go | 1.27.0 minimum for Hugo Module resolution; current default 1.27.2, CI follows the latest stable release; not needed when using an offline archive or submodule | | Node.js | Not required to build or run an OINK site | | Locales | Native OINK interface text for all 31 locale names shipped by Docsy, plus generic `zh`; every bundle owns the same 218-message schema, including CLDR plural forms, with no English placeholder blocks | -CI automatically resolves stable Go and Hugo releases and records their actual -versions. OINK 1.3.1 is validated with Go 1.27.2 and Hugo Extended 0.168.0; -these are not exact-version locks. Update declared requirements and current -documentation together when raising the minimum. Older Hugo versions receive -no compatibility testing or adaptation. Dated release and research records -retain their original tool versions. +CI follows stable Go releases and pins Hugo 0.166.0 for strict checks. A separate +Hugo 0.168.0 check verifies builds without an external Sass executable and +accepts only Hugo's known LibSass deprecation warning. Ordinary builds and +previews on 0.168.0 remain supported; `--panicOnWarning` makes that upstream +warning fatal, so use 0.166.0 for the strict gate. No warnings are hidden by the +theme. Future Hugo releases that remove LibSass require a separate compatibility +decision; upgrading must not add a mandatory Sass installation for consumers. +Dated release and research records retain their original tool versions. ## Community and releases diff --git a/assets/scss/td/_chroma.scss b/assets/scss/td/_chroma.scss index 2d92b40e..bde0a52b 100644 --- a/assets/scss/td/_chroma.scss +++ b/assets/scss/td/_chroma.scss @@ -1,5 +1,3 @@ -@use "sass:meta"; - // Class-based syntax highlighting (Chroma). // // Requires `markup.highlight.noClasses: false`, which the theme sets in its @@ -146,7 +144,7 @@ @if $enable-dark-mode { [data-bs-theme='dark'] { - @include meta.load-css('chroma/dark'); + @import 'chroma/dark'; .chroma { --td-code-hl-bg: color-mix( diff --git a/bin/check-scss.py b/bin/check-scss.py new file mode 100644 index 00000000..a6a801ce --- /dev/null +++ b/bin/check-scss.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +"""Build real theme styles and consumer hooks without an external Sass tool.""" + +from __future__ import annotations + +import argparse +import os +from pathlib import Path +import re +import shutil +import tempfile + +from test_site import ROOT, run_hugo_process + + +LIBSASS_WARNING = ( + "WARN deprecated: css.Sass: libsass was deprecated in Hugo v0.153.0 " + "and will be removed in a future release. Use dartsass instead. " + "See https://gohugo.io/functions/css/sass/#dart-sass" +) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--hugo", default="hugo") + parser.add_argument("--allow-libsass-warning", action="store_true", + help="accept only Hugo 0.168's known LibSass warning") + args = parser.parse_args() + hugo = shutil.which(args.hugo) + if not hugo: + raise SystemExit(f"Hugo executable not found: {args.hugo}") + + with tempfile.TemporaryDirectory(prefix="oink-scss-") as directory: + site = Path(directory) + tools = site / "tools" + tools.mkdir() + # A fresh PATH and fresh resources prevent an installed Sass compiler + # or a previously compiled asset from making this regression pass. + env = os.environ.copy() + env.update(PATH=str(tools), GOWORK="off", HUGO_MODULE_WORKSPACE="off", + HUGO_RESOURCEDIR=str(site / "resources")) + env.pop("HUGO_MODULE_REPLACEMENTS", None) + assert shutil.which("sass", path=env["PATH"]) is None + files = { + "hugo.yaml": """baseURL: https://example.org/ +title: Sass regression +theme: oink +disableKinds: [taxonomy, term, RSS, sitemap] +markup: + highlight: + noClasses: false +""", + "content/_index.md": "---\ntitle: Sass regression\n---\n", + "content/docs/_index.md": "---\ntitle: Docs\n---\n", + "content/docs/api.md": ( + '---\ntitle: API\n---\n\n{{< redoc "/spec.yaml" >}}\n' + '\n```go\nfunc main() {}\n```\n' + ), + "static/spec.yaml": "openapi: 3.0.0\ninfo: {title: Probe, version: '1'}\npaths: {}\n", + "assets/scss/_variables_project.scss": "$primary: #13579b;\n", + "assets/scss/_variables_project_after_bs.scss": "$oink_probe_width: 42px;\n", + "assets/scss/_styles_project.scss": ( + ".oink-scss-hook-probe { width: $oink_probe_width; color: $primary; }\n" + ), + } + for name, content in files.items(): + path = site / name + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(content) + command = [hugo, "--source", str(site), "--themesDir", str(ROOT.parent), + "--destination", str(site / "public"), "--cacheDir", str(site / "cache"), + "--ignoreCache", "--noBuildLock", "--logLevel", "warn", + "--environment", "development"] + if not args.allow_libsass_warning: + command.append("--panicOnWarning") + result = run_hugo_process(command, env=env, text=True, capture_output=True) + output = result.stdout + result.stderr + if result.returncode: + raise SystemExit(output) + diagnostics = [line for line in output.splitlines() if re.match(r"^(WARN|ERROR)\b", line)] + unexpected = [line for line in diagnostics + if not (args.allow_libsass_warning and line == LIBSASS_WARNING)] + if unexpected: + raise SystemExit("Unexpected build diagnostics:\n" + "\n".join(unexpected)) + if args.allow_libsass_warning and LIBSASS_WARNING not in diagnostics: + raise SystemExit("Expected the Hugo 0.168 LibSass warning to remain visible") + public = site / "public" + page = (public / "docs/api/index.html").read_text() + styles = {path.name: path.read_text() for path in (public / "scss").glob("*.css")} + main_css = next((css for name, css in styles.items() if name.startswith("main.")), "") + redoc_css = next((css for name, css in styles.items() if name.startswith("redoc.")), "") + assert re.search(r"\.oink-scss-hook-probe\s*\{\s*width: 42px;\s*color: #13579b;", main_css), \ + "consumer variable/style hooks were not compiled" + assert "--bs-primary: #13579b" in main_css, "Bootstrap ignored the consumer primary color" + assert re.search(r"\[data-bs-theme=['\"]?dark['\"]?\] \.chroma", main_css), \ + "dark Chroma palette is missing" + assert ".td-redoc" in redoc_css and re.search(r'href="[^"]*redoc[^\"]*\.css"', page), \ + "ReDoc stylesheet was not compiled and linked" + for diagnostic in diagnostics: + print(diagnostic) + print("SCSS checks passed: built-in compiler, main/ReDoc CSS, dark Chroma, and consumer hooks; no Sass on PATH") + + +if __name__ == "__main__": + main() diff --git a/hugo.yaml b/hugo.yaml index 4bc2822d..be99ebcd 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -299,7 +299,7 @@ mediaTypes: module: hugoVersion: extended: true - min: 0.168.0 + min: 0.166.0 mounts: - source: assets target: assets diff --git a/layouts/_partials/head-css.html b/layouts/_partials/head-css.html index ec2f077e..3aa87ba1 100644 --- a/layouts/_partials/head-css.html +++ b/layouts/_partials/head-css.html @@ -1,11 +1,8 @@ {{ $scssMain := "scss/main.scss" -}} -{{/* Bootstrap 5.3 and the public project-variable hooks still share Sass's - legacy import scope. Silence only their known language deprecations; - Sass @warn, invalid selectors, and Hugo diagnostics remain visible. */ -}} -{{ $scss := resources.Get $scssMain | toCSS (dict - "transpiler" "dartsass" - "silenceDeprecations" (slice "import" "global-builtin" "color-functions" "if-function") - "enableSourceMap" (not hugo.IsProduction)) -}} +{{/* Use Hugo Extended's built-in compiler; consumers need no external Sass + executable. Hugo 0.168 may report its upstream LibSass deprecation. */ -}} +{{ $scss := resources.Get $scssMain + | toCSS (dict "enableSourceMap" (not hugo.IsProduction)) -}} {{/* Concatenate Font Awesome's official compiled CSS into one stable vendor resource. Keep it separate from consumer SCSS so an ordinary theme or site style edit does not invalidate the icon distribution. The target remains diff --git a/layouts/_partials/scripts.html b/layouts/_partials/scripts.html index 8058260d..6d17e660 100644 --- a/layouts/_partials/scripts.html +++ b/layouts/_partials/scripts.html @@ -261,7 +261,7 @@ {{ end -}} {{ if and $interactiveOutput (.Page.Store.Get "hasRedoc") -}} - {{ $redocCSS := resources.Get "scss/redoc.scss" | toCSS (dict "transpiler" "dartsass" "enableSourceMap" (not hugo.IsProduction)) -}} + {{ $redocCSS := resources.Get "scss/redoc.scss" | toCSS (dict "enableSourceMap" (not hugo.IsProduction)) -}} {{ if hugo.IsProduction }}{{ $redocCSS = $redocCSS | minify | fingerprint }}{{ end -}} diff --git a/tests/goldens/html/home-landing-zh.html b/tests/goldens/html/home-landing-zh.html index 74a103c8..7c890543 100644 --- a/tests/goldens/html/home-landing-zh.html +++ b/tests/goldens/html/home-landing-zh.html @@ -1,6 +1,7 @@ + @@ -74,7 +75,6 @@ } catch (_) {} })(); - 跳转到主要内容 diff --git a/tests/goldens/html/home-landing.html b/tests/goldens/html/home-landing.html index f4912f8a..ea0dc672 100644 --- a/tests/goldens/html/home-landing.html +++ b/tests/goldens/html/home-landing.html @@ -1,6 +1,7 @@ + @@ -74,7 +75,6 @@ } catch (_) {} })(); - Skip to content diff --git a/tests/goldens/rss/fixtures.xml b/tests/goldens/rss/fixtures.xml index 78e50e01..cac62be9 100644 --- a/tests/goldens/rss/fixtures.xml +++ b/tests/goldens/rss/fixtures.xml @@ -13,7 +13,7 @@ https://example.org/fixtures/callouts/ Mon, 01 Jan 0001 00:00:00 +0000 https://example.org/fixtures/callouts/ -<h2 id="canonical-types">Canonical types </h2> <div class="td-callout td-callout--note" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-circle-info" aria-hidden="true"></i><span class="td-callout__label">Note</span></div> <div class="td-callout__body"> <p>Five GitHub types render natively on GitHub. This one is a note.</p> </div> </div><div class="td-callout td-callout--tip" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-lightbulb" aria-hidden="true"></i><span class="td-callout__label">Tip with a title</span></div> <div class="td-callout__body"> <p>Titles are inline Markdown: <code>code</code>, <em>emphasis</em>, <a href="https://example.org/docs/">links</a>.</p> </div> </div><div class="td-callout td-callout--important" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-circle-exclamation" aria-hidden="true"></i><span class="td-callout__label">Important</span></div> <div class="td-callout__body"> <p>Important information.</p> </div> </div><div class="td-callout td-callout--warning" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"></i><span class="td-callout__label">Warning</span></div> <div class="td-callout__body"> <p>Warning: this operation is destructive.</p> </div> </div><div class="td-callout td-callout--caution" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-circle-xmark" aria-hidden="true"></i><span class="td-callout__label">Caution</span></div> <div class="td-callout__body"> <p>Caution: data loss possible.</p> </div> </div><div class="td-callout td-callout--success" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-circle-check" aria-hidden="true"></i><span class="td-callout__label">Success</span></div> <div class="td-callout__body"> <p>Everything worked.</p> </div> </div> +<h2 id="canonical-types">Canonical types </h2> <div class="td-callout td-callout--note" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-circle-info" aria-hidden="true"></i><span class="td-callout__label">Note</span></div> <div class="td-callout__body"> <p>Five GitHub types render natively on GitHub. This one is a note.</p> </div> </div><div class="td-callout td-callout--tip" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-lightbulb" aria-hidden="true"></i><span class="td-callout__label">Tip with a title</span></div> <div class="td-callout__body"> <p>Titles are inline Markdown: <code>code</code>, <em>emphasis</em>, <a href="https://example.org/docs/">links</a>.</p> </div> </div><div class="td-callout td-callout--important" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-circle-exclamation" aria-hidden="true"></i><span class="td-callout__label">Important</span></div> <div class="td-callout__body"> <p>Important information.</p> </div> </div><div class="td-callout td-callout--warning" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"></i><span class="td-callout__label">Warning</span></div> <div class="td-callout__body"> <p>Warning: this operation is destructive.</p> </div> </div><div class="td-callout td-callout--caution" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-circle-xmark" aria-hidden="true"></i><span class="td-callout__label">Caution</span></div> <div class="td-callout__body"> <p>Caution: data loss possible.</p> </div> </div><div class="td-callout td-callout--success" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-circle-check" aria-hidden="true"></i><span class="td-callout__label">Success</span></div> <div class="td-callout__body"> <p>Everything worked.</p> Typography fixture @@ -27,14 +27,14 @@ https://example.org/fixtures/code-blocks/ Mon, 01 Jan 0001 00:00:00 +0000 https://example.org/fixtures/code-blocks/ -<h2 id="titled-numbered-and-highlighted">Titled, numbered, and highlighted </h2> <div class="td-code td-code--titled" id="td-code-344b5b47-fence-0" data-td-code data-td-code-auto-id data-td-language="yaml" data-td-line-count="5" role="group" aria-labelledby="td-code-344b5b47-fence-0-title"> <div class="td-code__header"> <span class="td-code__filename" id="td-code-344b5b47-fence-0-title" title="config/very-long-example-name-for-responsive-layout.yml">config/very-long-example-name-for-responsive-layout.yml</span> </div> <div class="td-code__viewport" id="td-code-344b5b47-fence-0-viewport" data-td-code-viewport><div class="highlight"><div class="chroma"> <table class="lntable"><tr><td class="lntd"> <pre tabindex="0" class="chroma"><code><span class="lnt">3 </span><span class="lnt">4 </span><span class="lnt">5 </span><span class="hl"><span class="lnt">6 </span></span><span class="lnt">7 </span></code></pre></td> <td class="lntd"> <pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">params</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">offline_search</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ui</span><span class="p">:</span><span class="w"> </span></span></span><span class="line hl"><span class="cl"><span class="w"> </span><span class="nt">sidebar_menu_foldable</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">sidebar_menu_compact</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span></span></span></code></pre></td></tr></table> </div> </div></div> </div> <h2 id="escaped-generic-attributes">Escaped generic attributes </h2> <div class="td-code td-code--untitled code-fixture" id="generic-code" data-td-code data-td-language="text" data-td-line-count="1" data-note="a &#34;quoted&#34; &amp; value"> <div class="td-code__viewport" id="generic-code-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">safe attributes</span></span></code></pre></div></div> </div> <h2 id="wrapped-and-collapsed">Wrapped and collapsed </h2> <div class="td-code td-code--untitled td-code--wrap" id="wrapped-example" data-td-code data-td-language="text" data-td-line-count="7" role="group" aria-label="Wrapped configuration example"> <div class="td-code__viewport" id="wrapped-example-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">alpha = one </span></span><span class="line"><span class="cl">beta = two </span></span><span class="line"><span class="cl">gamma = this-is-a-deliberately-long-unbroken-value-that-tests-responsive-wrapping-without-changing-the-source </span></span><span class="line"><span class="cl">delta = four </span></span><span class="line"><span class="cl">epsilon = five </span></span><span class="line"><span class="cl">zeta = six </span></span><span class="line"><span class="cl">eta = seven</span></span></code></pre></div></div> </div> <h2 id="console-commands">Console commands </h2> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-3" data-td-code data-td-code-auto-id data-td-language="console" data-td-line-count="9"> <div class="td-code__viewport" id="td-code-344b5b47-fence-3-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="gp">$</span> <span class="nb">printf</span> <span class="s1">&#39;hello\n&#39;</span> </span></span><span class="line"><span class="cl"><span class="go">hello </span></span></span><span class="line"><span class="cl"><span class="gp">$</span> <span class="nb">printf</span> <span class="s1">&#39;world\n&#39;</span> </span></span><span class="line"><span class="cl"><span class="go">world </span></span></span><span class="line"><span class="cl"><span class="gp">$</span> <span class="nb">printf</span> <span class="s1">&#39;%s\n&#39;</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="gp">&gt;</span> first <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="gp">&gt;</span> second </span></span><span class="line"><span class="cl"><span class="go">first </span></span></span><span class="line"><span class="cl"><span class="go">second </span></span></span></code></pre></div></div> </div> <h2 id="shell-language-label">Shell language label </h2> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-4" data-td-code data-td-code-auto-id data-td-language="sh" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-4-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;displayed as Bash&#34;</span></span></span></code></pre></div></div> </div> <h2 id="package-managers-adjacent-fences-synchronized-group">Package managers (adjacent fences, synchronized group) </h2> <div class="td-tab-block td-tab-block--code" data-td-tab="npm" data-td-tab-group="package-manager" data-td-tab-value="npm" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>npm</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-5" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-5-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">npm install @example/client</span></span></code></pre></div></div> </div> </div> <div class="td-tab-block td-tab-block--code" data-td-tab="pnpm" data-td-tab-value="pnpm" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>pnpm</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-6" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-6-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pnpm add @example/client</span></span></code></pre></div></div> </div> </div> <div class="td-tab-block td-tab-block--code" data-td-tab="yarn" data-td-tab-value="yarn" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>yarn</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-7" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-7-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">yarn add @example/client</span></span></code></pre></div></div> </div> </div> <h2 id="synchronized-peer">Synchronized peer </h2> <div class="td-tab-block td-tab-block--code" data-td-tab="npm" data-td-tab-group="package-manager" data-td-tab-value="npm" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>npm</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-8" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-8-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">npm install --global @example/tool</span></span></code></pre></div></div> </div> </div> <div class="td-tab-block td-tab-block--code" data-td-tab="pnpm" data-td-tab-value="pnpm" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>pnpm</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-9" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-9-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pnpm add --global @example/tool</span></span></code></pre></div></div> </div> </div> <h2 id="local-tabs-without-a-group-no-hash--persistence">Local tabs without a group (no hash / persistence) </h2> <div class="td-tab-block td-tab-block--code" data-td-tab="A **literal** [label]" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>A **literal** [label]</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-10" data-td-code data-td-code-auto-id data-td-language="text" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-10-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">punctuation stays literal</span></span></code></pre></div></div> </div> </div> <div class="td-tab-block td-tab-block--code" data-td-tab="YAML" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>YAML</div> <div class="td-code td-code--titled" id="td-code-344b5b47-fence-11" data-td-code data-td-code-auto-id data-td-language="yaml" data-td-line-count="1" role="group" aria-labelledby="td-code-344b5b47-fence-11-title"> <div class="td-code__header"> <span class="td-code__filename" id="td-code-344b5b47-fence-11-title" title="config.yaml">config.yaml</span> </div> <div class="td-code__viewport" id="td-code-344b5b47-fence-11-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">message</span><span class="p">:</span><span class="w"> </span><span class="l">title and tab coexist</span></span></span></code></pre></div></div> </div> </div> <h2 id="full-form--tabs--with-markdown-bodies">Full form: <code>{{&lt; tabs &gt;}}</code> with Markdown bodies </h2> <div class="td-tabs td-tabs--shortcode" id="td-tabs-344b5b47-0"> <div class="td-tabs__panel" id="setting-env" data-td-tabs-value="env"> <div class="td-tabs__panel-title" aria-hidden="true">Environment Variable</div> <div class="td-tabs__panel-body"><h6 id="envvar-queue-dir"><code>MINIO_LOGGER_WEBHOOK_QUEUE_DIR</code> </h6> <p>Set the queue directory through the environment.</p> <div class="td-code td-code--untitled" id="td-code-344b5b47-tabs0-env-fence-0" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-tabs0-env-fence-0-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">MINIO_LOGGER_WEBHOOK_QUEUE_DIR</span><span class="o">=</span>/var/lib/minio/queue</span></span></code></pre></div></div> </div> </div> </div> <div class="td-tabs__panel" id="setting-conf" data-td-tabs-value="conf" data-td-tabs-active> <div class="td-tabs__panel-title" aria-hidden="true">Configuration Setting</div> <div class="td-tabs__panel-body"><h6 id="conf-queue-dir"><code>logger_webhook queue_dir</code> </h6> <p>Set it with <code>mc admin config set</code>.</p> <div class="td-callout td-callout--tip" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-lightbulb" aria-hidden="true"></i><span class="td-callout__label">Tip</span></div> <div class="td-callout__body"> <p>Callouts and other blocks work inside tabs.</p> </div> </div></div> </div> </div> +<h2 id="titled-numbered-and-highlighted">Titled, numbered, and highlighted </h2> <div class="td-code td-code--titled" id="td-code-344b5b47-fence-0" data-td-code data-td-code-auto-id data-td-language="yaml" data-td-line-count="5" role="group" aria-labelledby="td-code-344b5b47-fence-0-title"> <div class="td-code__header"> <span class="td-code__filename" id="td-code-344b5b47-fence-0-title" title="config/very-long-example-name-for-responsive-layout.yml">config/very-long-example-name-for-responsive-layout.yml</span> </div> <div class="td-code__viewport" id="td-code-344b5b47-fence-0-viewport" data-td-code-viewport><div class="highlight"><div class="chroma"> <table class="lntable"><tr><td class="lntd"> <pre tabindex="0" class="chroma"><code><span class="lnt">3 </span><span class="lnt">4 </span><span class="lnt">5 </span><span class="hl"><span class="lnt">6 </span></span><span class="lnt">7 </span></code></pre></td> <td class="lntd"> <pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">params</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">offline_search</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ui</span><span class="p">:</span><span class="w"> </span></span></span><span class="line hl"><span class="cl"><span class="w"> </span><span class="nt">sidebar_menu_foldable</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">sidebar_menu_compact</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span></span></span></code></pre></td></tr></table> </div> </div></div> </div> <h2 id="escaped-generic-attributes">Escaped generic attributes </h2> <div class="td-code td-code--untitled code-fixture" id="generic-code" data-td-code data-td-language="text" data-td-line-count="1" data-note="a &#34;quoted&#34; &amp; value"> <div class="td-code__viewport" id="generic-code-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">safe attributes</span></span></code></pre></div></div> </div> <h2 id="wrapped-and-collapsed">Wrapped and collapsed </h2> <div class="td-code td-code--untitled td-code--wrap" id="wrapped-example" data-td-code data-td-language="text" data-td-line-count="7" role="group" aria-label="Wrapped configuration example"> <div class="td-code__viewport" id="wrapped-example-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">alpha = one </span></span><span class="line"><span class="cl">beta = two </span></span><span class="line"><span class="cl">gamma = this-is-a-deliberately-long-unbroken-value-that-tests-responsive-wrapping-without-changing-the-source </span></span><span class="line"><span class="cl">delta = four </span></span><span class="line"><span class="cl">epsilon = five </span></span><span class="line"><span class="cl">zeta = six </span></span><span class="line"><span class="cl">eta = seven</span></span></code></pre></div></div> </div> <h2 id="console-commands">Console commands </h2> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-3" data-td-code data-td-code-auto-id data-td-language="console" data-td-line-count="9"> <div class="td-code__viewport" id="td-code-344b5b47-fence-3-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="gp">$</span> <span class="nb">printf</span> <span class="s1">&#39;hello\n&#39;</span> </span></span><span class="line"><span class="cl"><span class="go">hello </span></span></span><span class="line"><span class="cl"><span class="gp">$</span> <span class="nb">printf</span> <span class="s1">&#39;world\n&#39;</span> </span></span><span class="line"><span class="cl"><span class="go">world </span></span></span><span class="line"><span class="cl"><span class="gp">$</span> <span class="nb">printf</span> <span class="s1">&#39;%s\n&#39;</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="gp">&gt;</span> first <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="gp">&gt;</span> second </span></span><span class="line"><span class="cl"><span class="go">first </span></span></span><span class="line"><span class="cl"><span class="go">second </span></span></span></code></pre></div></div> </div> <h2 id="shell-language-label">Shell language label </h2> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-4" data-td-code data-td-code-auto-id data-td-language="sh" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-4-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;displayed as Bash&#34;</span></span></span></code></pre></div></div> </div> <h2 id="package-managers-adjacent-fences-synchronized-group">Package managers (adjacent fences, synchronized group) </h2> <div class="td-tab-block td-tab-block--code" data-td-tab="npm" data-td-tab-group="package-manager" data-td-tab-value="npm" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>npm</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-5" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-5-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">npm install @example/client</span></span></code></pre></div></div> </div> </div> <div class="td-tab-block td-tab-block--code" data-td-tab="pnpm" data-td-tab-value="pnpm" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>pnpm</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-6" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-6-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pnpm add @example/client</span></span></code></pre></div></div> </div> </div> <div class="td-tab-block td-tab-block--code" data-td-tab="yarn" data-td-tab-value="yarn" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>yarn</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-7" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-7-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">yarn add @example/client</span></span></code></pre></div></div> </div> </div> <h2 id="synchronized-peer">Synchronized peer </h2> <div class="td-tab-block td-tab-block--code" data-td-tab="npm" data-td-tab-group="package-manager" data-td-tab-value="npm" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>npm</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-8" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-8-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">npm install --global @example/tool</span></span></code></pre></div></div> </div> </div> <div class="td-tab-block td-tab-block--code" data-td-tab="pnpm" data-td-tab-value="pnpm" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>pnpm</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-9" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-9-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pnpm add --global @example/tool</span></span></code></pre></div></div> </div> </div> <h2 id="local-tabs-without-a-group-no-hash--persistence">Local tabs without a group (no hash / persistence) </h2> <div class="td-tab-block td-tab-block--code" data-td-tab="A **literal** [label]" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>A **literal** [label]</div> <div class="td-code td-code--untitled" id="td-code-344b5b47-fence-10" data-td-code data-td-code-auto-id data-td-language="text" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-344b5b47-fence-10-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">punctuation stays literal</span></span></code></pre></div></div> </div> </div> <div class="td-tab-block td-tab-block--code" data-td-tab="YAML" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>YAML</div> <div class="td-code td-code--titled" id="td-code-344b5b47-fence-11" data-td-code data-td-code-auto-id data-td-language="yaml" data-td-line-count="1" role="group" aria-labelledby="td-code-344b5b47-fence-11-title"> <div class="td-code__header"> <span class="td-code__filename" id="td-code-344b5b47-fence-11-title" title="config.yaml">config.yaml</span> </div> <div class="td-code__viewport" id="td-code-344b5b47-fence-11-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">message</span><span class="p">:</span><span class="w"> </span><span class="l">title and tab coexist</span></span></span></code></pre></div></div> </div> </div> <h2 id="full-form--tabs--with-markdown-bodies">Full form: <code>{{&lt; tabs &gt;}}</code> with Markdown bodies </h2> <div class="td-tabs td-tabs--shortcode" id="td-tabs-344b5b47-0"> <div class="td-tabs__panel" id="setting-env" data-td-tabs-value="env"> <div class="td-tabs__panel-title" aria-hidden="true">Environment Variable</div> <div class="td-tabs__panel-body"><h6 id="envvar-queue-dir"><code>MINIO_LOGGER_WEBHOOK_QUEUE_DIR</code> </h6> <p>Set the queue directory through the environment.</p> Steps https://example.org/fixtures/steps/ Mon, 01 Jan 0001 00:00:00 +0000 https://example.org/fixtures/steps/ -<h2 id="native-form-ordered-list">Native form: ordered list </h2> <ol class="steps"> <li> <p>Install the dependencies</p> <p>A step can hold any block: paragraphs, fences, callouts, nested lists.</p> <div class="td-tab-block td-tab-block--code" data-td-tab="Homebrew" data-td-tab-group="install" data-td-tab-value="brew" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>Homebrew</div> <div class="td-code td-code--untitled" id="td-code-e534f852-fence-0" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-e534f852-fence-0-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">brew install pigsty</span></span></code></pre></div></div> </div> </div> <div class="td-tab-block td-tab-block--code" data-td-tab="APT" data-td-tab-value="apt" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>APT</div> <div class="td-code td-code--untitled" id="td-code-e534f852-fence-1" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-e534f852-fence-1-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo apt install pigsty</span></span></code></pre></div></div> </div> </div> </li> <li> <h3 id="init-workspace">Initialise the workspace </h3> <p>Headings inside a step enter the table of contents.</p> <div class="td-callout td-callout--tip" role="note"> <div class="td-callout__title"><i class="td-callout__icon fa-solid fa-lightbulb" aria-hidden="true"></i><span class="td-callout__label">Tip</span></div> <div class="td-callout__body"> <p>Callouts work inside steps.</p> </div> </div></li> <li> <p>Verify the installation</p> <div class="td-code td-code--untitled" id="td-code-e534f852-fence-2" data-td-code data-td-code-auto-id data-td-language="console" data-td-line-count="2"> <div class="td-code__viewport" id="td-code-e534f852-fence-2-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="gp">$</span> pig --version </span></span><span class="line"><span class="cl"><span class="go">pig 1.7.0 </span></span></span></code></pre></div></div> </div> </li> </ol> +<h2 id="native-form-ordered-list">Native form: ordered list </h2> <ol class="steps"> <li> <p>Install the dependencies</p> <p>A step can hold any block: paragraphs, fences, callouts, nested lists.</p> <div class="td-tab-block td-tab-block--code" data-td-tab="Homebrew" data-td-tab-group="install" data-td-tab-value="brew" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>Homebrew</div> <div class="td-code td-code--untitled" id="td-code-e534f852-fence-0" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-e534f852-fence-0-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">brew install pigsty</span></span></code></pre></div></div> </div> </div> <div class="td-tab-block td-tab-block--code" data-td-tab="APT" data-td-tab-value="apt" data-td-tab-kind="code"> <div class="td-tab-block__title" data-td-tab-title>APT</div> <div class="td-code td-code--untitled" id="td-code-e534f852-fence-1" data-td-code data-td-code-auto-id data-td-language="bash" data-td-line-count="1"> <div class="td-code__viewport" id="td-code-e534f852-fence-1-viewport" data-td-code-viewport><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo apt install pigsty</span></span></code></pre></div></div> </div> </div> </li> <li> <h3 id="init-workspace">Initialise the workspace </h3> <p>Headings inside a step enter the table of contents.</p> Math passthrough @@ -48,7 +48,7 @@ https://example.org/fixtures/content-primitives/ Tue, 18 Aug 2026 00:00:00 +0000 https://example.org/fixtures/content-primitives/ -<p>Status <span class="td-badge td-badge--warning">Beta</span> remains inline with prose.</p> <p>Linked release <a class="td-badge td-badge--info" href="https://example.org/release/">v0.3</a> and a filled state <span class="td-badge td-badge--danger">Deprecated</span>.</p> <p>Escaped text <span class="td-badge td-badge--success">R&amp;D &lt;Preview&gt;</span> and long text <span class="td-badge td-badge--neutral">A-deliberately-long-unbroken-status-value-for-responsive-layout</span>.</p> <p>CJK <span class="td-badge td-badge--info">实验功能</span> and RTL text <span class="td-badge td-badge--warning">ميزة تجريبية</span>.</p> <p>Open search with <span class="td-kbd-sequence"><kbd>Ctrl</kbd><span class="td-kbd-sequence__separator" aria-hidden="true">+</span><span class="visually-hidden"> with </span><kbd>K</kbd></span> or the command palette with <span class="td-kbd-sequence"><kbd>⌘</kbd><span class="td-kbd-sequence__separator" aria-hidden="true">+</span><span class="visually-hidden"> with </span><kbd>Shift</kbd><span class="td-kbd-sequence__separator" aria-hidden="true">+</span><span class="visually-hidden"> with </span><kbd>P</kbd></span>.</p> <p>Escaped keys remain readable: <span class="td-kbd-sequence"><kbd>[</kbd><span class="td-kbd-sequence__separator" aria-hidden="true">+</span><span class="visually-hidden"> with </span><kbd>A&#43;B</kbd><span class="td-kbd-sequence__separator" aria-hidden="true">+</span><span class="visually-hidden"> with </span><kbd>&gt;</kbd></span>.</p> <h2 id="fields">Fields </h2> <div class="td-fields"> <p class="td-fields__label" id="td-fields-b3143e1ab8e100c7db85584f152eee8b-10-label">Configuration fields</p> <dl class="td-fields__list" aria-labelledby="td-fields-b3143e1ab8e100c7db85584f152eee8b-10-label"> <div class="td-field"> <dt class="td-field__term"><code class="td-field__name">offline_search</code> <span class="visually-hidden">, </span><span class="td-field__type"><span class="td-field__meta-value"><code>boolean</code></span></span> <span class="visually-hidden">, </span><span class="td-field__required">required</span> <span class="visually-hidden">, </span><span class="td-field__default"><span class="td-field__meta-label">default</span><span class="td-field__meta-value"><code>true</code></span></span> </dt> <dd class="td-field__description"><p>Enables the local search index and links to the <a href="https://example.org/docs/">documentation</a>.</p> </dd> </div> <div class="td-field"> <dt class="td-field__term"><code class="td-field__name">offline_search_max_results</code> <span class="visually-hidden">, </span><span class="td-field__type"><span class="td-field__meta-value"><code>integer</code></span></span> <span class="visually-hidden">, </span><span class="td-field__default"><span class="td-field__meta-label">default</span><span class="td-field__meta-value"><code>10</code></span></span> </dt> <dd class="td-field__description"><p>Maximum number of visible results.</p> <p>A second paragraph preserves multiline description Markdown and <code>inline code</code>.</p> </dd> </div> <div class="td-field"> <dt class="td-field__term"><code class="td-field__name">explicitFalse</code> <span class="visually-hidden">, </span><span class="td-field__type"><span class="td-field__meta-value"><code>boolean</code></span></span> <span class="visually-hidden">, </span><span class="td-field__default"><span class="td-field__meta-label">default</span><span class="td-field__meta-value"><code>false</code></span></span> </dt> <dd class="td-field__description"><p>Proves that an explicit false value is not treated as an absent default.</p> </dd> </div> <div class="td-field"> <dt class="td-field__term"><code class="td-field__name">zeroLimit</code> <span class="visually-hidden">, </span><span class="td-field__type"><span class="td-field__meta-value"><code>integer</code></span></span> <span class="visually-hidden">, </span><span class="td-field__default"><span class="td-field__meta-label">default</span><span class="td-field__meta-value"><code>0</code></span></span> </dt> <dd class="td-field__description"><p>Proves that an explicit zero value remains visible.</p> </dd> </div> <div class="td-field"> <dt class="td-field__term"><code class="td-field__name">emptyPrefix</code> <span class="visually-hidden">, </span><span class="td-field__type"><span class="td-field__meta-value"><code>string</code></span></span> <span class="visually-hidden">, </span><span class="td-field__default"><span class="td-field__meta-label">default</span><span class="td-field__meta-value"><code>&#34;&#34;</code></span></span> </dt> <dd class="td-field__description"><p>Proves that an explicit empty string remains distinct from no default.</p> </dd> </div> <div class="td-field"> <dt class="td-field__term"><code class="td-field__name">resolverOutput</code> <span class="visually-hidden">, </span><span class="td-field__type"><span class="td-field__meta-value"><code>Array&lt;string&gt; | map[string]any</code></span></span> </dt> <dd class="td-field__description"><p>Exercises angle brackets, brackets, and a union in a type value.</p> </dd> </div> <div class="td-field"> <dt class="td-field__term"><code class="td-field__name">aDeliberatelyLongUnbrokenConfigurationFieldNameForResponsiveLayout</code> <span class="visually-hidden">, </span><span class="td-field__type"><span class="td-field__meta-value"><code>namespace.ReallyLongGenericType&lt;FirstArgument,SecondArgument&gt;</code></span></span> </dt> <dd class="td-field__description"><p>A long field name and type must stay within the component at narrow widths.</p> </dd> </div> <div class="td-field"> <dt class="td-field__term"><code class="td-field__name">搜索模式</code> <span class="visually-hidden">, </span><span class="td-field__type"><span class="td-field__meta-value"><code>字符串</code></span></span> <span class="visually-hidden">, </span><span class="td-field__required">required</span> <span class="visually-hidden">, </span><span class="td-field__default"><span class="td-field__meta-label">default</span><span class="td-field__meta-value"><code>本地</code></span></span> </dt> <dd class="td-field__description"><p>控制搜索是在浏览器本地执行,还是交给远程服务。</p> </dd> </div> <div class="td-field"> <dt class="td-field__term"><code class="td-field__name">وضع_البحث</code> <span class="visually-hidden">, </span><span class="td-field__type"><span class="td-field__meta-value"><code>سلسلة</code></span></span> <span class="visually-hidden">, </span><span class="td-field__default"><span class="td-field__meta-label">default</span><span class="td-field__meta-value"><code>محلي</code></span></span> </dt> <dd class="td-field__description"><p>يختبر النص من اليمين إلى اليسار داخل تعريف الحقل.</p> </dd> </div> </dl> </div> +<p>Status <span class="td-badge td-badge--warning">Beta</span> remains inline with prose.</p> <p>Linked release <a class="td-badge td-badge--info" href="https://example.org/release/">v0.3</a> and a filled state <span class="td-badge td-badge--danger">Deprecated</span>.</p> <p>Escaped text <span class="td-badge td-badge--success">R&amp;D &lt;Preview&gt;</span> and long text <span class="td-badge td-badge--neutral">A-deliberately-long-unbroken-status-value-for-responsive-layout</span>.</p> <p>CJK <span class="td-badge td-badge--info">实验功能</span> and RTL text <span class="td-badge td-badge--warning">ميزة تجريبية</span>.</p> <p>Open search with <span class="td-kbd-sequence"><kbd>Ctrl</kbd><span class="td-kbd-sequence__separator" aria-hidden="true">+</span><span class="visually-hidden"> with </span><kbd>K</kbd></span> or the command palette with <span class="td-kbd-sequence"><kbd>⌘</kbd><span class="td-kbd-sequence__separator" aria-hidden="true">+</span><span class="visually-hidden"> with </span><kbd>Shift</kbd><span class="td-kbd-sequence__separator" aria-hidden="true">+</span><span class="visually-hidden"> with </span><kbd>P</kbd></span>.</p> <p>Escaped keys remain readable: <span class="td-kbd-sequence"><kbd>[</kbd><span class="td-kbd-sequence__separator" aria-hidden="true">+</span><span class="visually-hidden"> with </span><kbd>A&#43;B</kbd><span class="td-kbd-sequence__separator" aria-hidden="true">+</span><span class="visually-hidden"> with </span><kbd>&gt;</kbd></span>.</p> <h2 id="fields">Fields </h2> <div class="td-fields"> <p class="td-fields__label" id="td-fields-b3143e1ab8e100c7db85584f152eee8b-10-label">Configuration fields</p> <dl class="td-fields__list" aria-labelledby="td-fields-b3143e1ab8e100c7db85584f152eee8b-10-label"> <div class="td-field"> <dt class="td-field__term"><code class="td-field__name">offline_search</code> <span class="visually-hidden">, </span><span class="td-field__type"><span class="td-field__meta-value"><code>boolean</code></span></span> <span class="visually-hidden">, </span><span class="td-field__required">required</span> <span class="visually-hidden">, </span><span class="td-field__default"><span class="td-field__meta-label">default</span><span class="td-field__meta-value"><code>true</code></span></span> </dt> <dd class="td-field__description"><p>Enables the local search index and links to the <a href="https://example.org/docs/">documentation</a>.</p> Cards, FileTree, Gallery diff --git a/theme.toml b/theme.toml index 31fa6b3d..9dfb8cfc 100644 --- a/theme.toml +++ b/theme.toml @@ -7,7 +7,7 @@ homepage = "https://github.com/pgsty/oink" demosite = "https://oink.pgsty.com/" tags = ["documentation", "multilingual", "local-first", "responsive", "docs", "book", "blog", "expo", "gallery"] features = ["offline search", "command palette", "dark mode", "Book publishing", "Expo image albums", "diagrams", "API documentation", "agent-friendly outputs"] -min_version = "0.168.0" +min_version = "0.166.0" [author] name = "PGSTY contributors" From 7c987e0d8fbb50f7f1e88a4987b521113b9547e3 Mon Sep 17 00:00:00 2001 From: Feng Ruohang Date: Sun, 18 Oct 2026 09:54:55 +0800 Subject: [PATCH 2/2] docs: link the v1.3.2 release comparison --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03c30ef8..90a29790 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2331,7 +2331,8 @@ fail the build with the new name rather than being silently ignored. responsive shell rails, improved footer/hero/blog layouts, and accessibility repairs. -[Unreleased]: https://github.com/pgsty/oink/compare/v1.3.1...HEAD +[Unreleased]: https://github.com/pgsty/oink/compare/v1.3.2...HEAD +[1.3.2]: https://github.com/pgsty/oink/compare/v1.3.1...v1.3.2 [1.3.1]: https://github.com/pgsty/oink/compare/v1.3.0...v1.3.1 [1.3.0]: https://github.com/pgsty/oink/compare/v1.2.0...v1.3.0 [1.2.0]: https://github.com/pgsty/oink/compare/v1.1.0...v1.2.0