<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Components on OINK</title><link>https://lxghost.github.io/categories/components/</link><description>Recent content in Components on OINK</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 28 Aug 2026 00:08:16 +0800</lastBuildDate><atom:link href="https://lxghost.github.io/categories/components/index.xml" rel="self" type="application/rss+xml"/><item><title>Callouts</title><link>https://lxghost.github.io/docs/components/callout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/callout/</guid><description>&lt;p&gt;A callout is a GitHub / Obsidian style blockquote: &lt;code&gt;&amp;gt; [!TYPE]&lt;/code&gt; on the first&#10;line, the body underneath. Use it to lift a prerequisite, a warning or an aside&#10;out of the running text; if a sentence in the prose says it, a callout is not&#10;needed.&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--titled" id="td-code-31213a44-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="markdown" data-td-line-count="2" role="group" aria-labelledby="td-code-31213a44-fence-0-title"&gt;&#10; &lt;div class="td-code__header"&gt;&#10; &lt;span class="td-code__filename" id="td-code-31213a44-fence-0-title" title="Source"&gt;Source&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="td-code__viewport" id="td-code-31213a44-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!NOTE]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; Hugo Modules need Go on the machine; an offline archive does not.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="td-callout td-callout--note" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-info" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Note&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;Hugo Modules need Go on the machine; an offline archive does not.&lt;/p&gt;</description></item><item><title>Images</title><link>https://lxghost.github.io/docs/components/image/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/image/</guid><description>&lt;p&gt;There is one way to write an image: Markdown&amp;rsquo;s &lt;code&gt;![alt text](source &amp;quot;title&amp;quot;)&lt;/code&gt;. An&#10;image standing alone as its own paragraph can be followed by a &lt;code&gt;{…}&lt;/code&gt; attribute&#10;line, making it a captioned figure, a zoom candidate, a numbered figure, or a&#10;derivative processed by Hugo. The theme has no image shortcode.&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--titled" id="td-code-30676200-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="markdown" data-td-line-count="1" role="group" aria-labelledby="td-code-30676200-fence-0-title"&gt;&#10; &lt;div class="td-code__header"&gt;&#10; &lt;span class="td-code__filename" id="td-code-30676200-fence-0-title" title="Source"&gt;Source&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="td-code__viewport" id="td-code-30676200-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![&lt;span class="nt"&gt;The OINK documentation shell: sidebar, article and table of contents&lt;/span&gt;](&lt;span class="na"&gt;oink-shell.webp&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;img class="td-image" src="https://lxghost.github.io/docs/components/image/oink-shell.webp" alt="The OINK documentation shell: sidebar, article and table of contents" width="1200" height="771" loading="lazy" decoding="async"&gt;&lt;p&gt;This image sits in the same directory as the page (a page bundle), so the theme&#10;reads its intrinsic size and writes &lt;code&gt;width&lt;/code&gt;/&lt;code&gt;height&lt;/code&gt;, and the page does not&#10;shift while loading; every image is lazy-loaded. Alternative text serves screen&#10;readers and search engines and should always be written; an empty alt marks a&#10;decorative image, which zoom skips.&lt;/p&gt;</description></item><item><title>Code Blocks</title><link>https://lxghost.github.io/docs/components/code/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/code/</guid><description>&lt;p&gt;A code block is an ordinary Markdown fence. Highlighting is done at build time&#10;by Chroma, which Hugo embeds; there is no highlighter in the browser. Use it for&#10;commands, configuration snippets and source. The &lt;code&gt;{…}&lt;/code&gt; attributes on the fence&amp;rsquo;s&#10;info line decide the title bar, copy behaviour, line numbers and line anchors.&#10;Diagram-style fences (&lt;code&gt;mermaid&lt;/code&gt;, &lt;code&gt;echarts&lt;/code&gt;, &lt;code&gt;filetree&lt;/code&gt; and friends) never take&#10;this path — each has its own render hook.&lt;/p&gt;</description></item><item><title>Components</title><link>https://lxghost.github.io/docs/components/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/</guid><description>&lt;p&gt;This section answers one question: how do I write this component in Markdown?&#10;Every page has the same shape — the shortest example, progressively richer&#10;examples, the output matrix, the parameter table, the limits. For syntax at a&#10;glance, use the cheatsheet below.&lt;/p&gt;&#10;&lt;h2 id="two-forms"&gt;Two forms&#10;&lt;/h2&gt;&#10;&lt;p&gt;A component&amp;rsquo;s first form is Markdown itself: blockquotes, lists, tables,&#10;images, fences — plus a single &lt;code&gt;{…}&lt;/code&gt; attribute line right after them. The&#10;native form stays readable on GitHub and in any Markdown editor, and the&#10;Markdown output keeps the source rather than the rendered HTML.&lt;/p&gt;</description></item><item><title>Tabs</title><link>https://lxghost.github.io/docs/components/tabs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/tabs/</guid><description>&lt;p&gt;Tabs put equivalent alternatives side by side: package managers, distributions,&#10;YAML / TOML / JSON, an environment variable versus a configuration key. Ordered&#10;steps and unrelated content do not belong in tabs — the reader sees only one&#10;panel at a time.&lt;/p&gt;&#10;&lt;p&gt;The native form is a &lt;code&gt;tab&lt;/code&gt; attribute on adjacent blocks. Reach for the&#10;&lt;code&gt;tabs&lt;/code&gt;/&lt;code&gt;tab&lt;/code&gt; shortcode only when the panels hold running text: several&#10;paragraphs, lists, callouts. Both forms share one runtime, one DOM and the same&#10;keyboard behaviour.&lt;/p&gt;</description></item><item><title>Tables</title><link>https://lxghost.github.io/docs/components/table/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/table/</guid><description>&lt;p&gt;A table is an ordinary GFM pipe table. The theme&amp;rsquo;s table render hook wraps every&#10;one in a horizontally scrollable region, and the &lt;code&gt;{…}&lt;/code&gt; attribute line underneath&#10;decides which kind of table it is: captioned, a compatibility matrix, a field&#10;list, a numbered table, or a tab set. Merged cells, sorting and filtering are&#10;out of scope; when you need them, change how the data is presented.&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;p&gt;Without an attribute line it is just a table. Alignment still comes from the&#10;delimiter row, and header cells are &lt;code&gt;th scope=&amp;quot;col&amp;quot;&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Fields</title><link>https://lxghost.github.io/docs/components/fields/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/fields/</guid><description>&lt;p&gt;Fields render &amp;ldquo;a list of named values with metadata and a description&amp;rdquo; as a&#10;responsive definition list: the name gets its own line, type / required /&#10;default sit beside it as small chips, the description starts on the next line,&#10;and every entry carries its own anchor. Use it for configuration keys, command&#10;flags and API fields. When readers need to compare many rows across the same&#10;columns, keep a plain table; when the content is a sequence of actions, use&#10;steps.&lt;/p&gt;</description></item><item><title>Steps</title><link>https://lxghost.github.io/docs/components/steps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/steps/</guid><description>&lt;p&gt;Steps are an ordered list with numbered dots and a rule running through them: a&#10;plain ordered list plus a &lt;code&gt;{.steps}&lt;/code&gt; marker line. The dots and the rule are&#10;drawn in CSS and no script is loaded. Use it for procedures that have an order.&#10;Parallel items with no order belong in a plain list or in cards.&lt;/p&gt;&#10;&lt;p&gt;There are two spellings: an ordered list plus &lt;code&gt;{.steps}&lt;/code&gt; (the default choice),&#10;and the &lt;code&gt;{{% steps %}}&lt;/code&gt; shortcode, for when each step needs its own heading&#10;and those headings belong in the table of contents.&lt;/p&gt;</description></item><item><title>Cards</title><link>https://lxghost.github.io/docs/components/cards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/cards/</guid><description>&lt;p&gt;Cards are a set of parallel links: each card is a linked title plus a sentence,&#10;and the grid adapts to the container width. They suit section landing pages,&#10;&amp;ldquo;what to read next&amp;rdquo;, and a handful of parallel entry points. They do not suit&#10;running prose (use paragraphs) or a wall of images (use a&#10;&lt;a href="https://lxghost.github.io/docs/components/gallery/"&gt;gallery&lt;/a&gt;).&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;p&gt;A link list with &lt;code&gt;{.cards}&lt;/code&gt; is a card grid. The link is the title; whatever&#10;follows &lt;code&gt;—&lt;/code&gt; is the description.&lt;/p&gt;</description></item><item><title>FileTree</title><link>https://lxghost.github.io/docs/components/filetree/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/filetree/</guid><description>&lt;p&gt;A file tree is a &lt;code&gt;filetree&lt;/code&gt; fence whose body is the listing itself: indentation&#10;is depth, a trailing &lt;code&gt;/&lt;/code&gt; marks a directory, and everything after &lt;code&gt;#&lt;/code&gt; is a&#10;comment. Use it to explain the part of a directory structure that concerns the&#10;reader, one annotation at a time. When the reader has to copy the listing&#10;verbatim, use an ordinary code block.&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--titled" id="td-code-dcf303b2-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="markdown" data-td-line-count="8" role="group" aria-labelledby="td-code-dcf303b2-fence-0-title"&gt;&#10; &lt;div class="td-code__header"&gt;&#10; &lt;span class="td-code__filename" id="td-code-dcf303b2-fence-0-title" title="Source"&gt;Source&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="td-code__viewport" id="td-code-dcf303b2-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```filetree&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- content/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - _index.md&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - docs/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - blog/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- hugo.yml&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- go.mod&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;pre class="td-filetree-source"&gt;&lt;code class="language-filetree"&gt;- content/&#10; - _index.md&#10; - docs/&#10; - blog/&#10;- hugo.yml&#10;- go.mod&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Bullets (&lt;code&gt;-&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;+&lt;/code&gt;) may be omitted; the result is the same. An entry with&#10;children is a directory. Without children, a trailing &lt;code&gt;/&lt;/code&gt; tells the theme it is&#10;one.&lt;/p&gt;</description></item><item><title>Math</title><link>https://lxghost.github.io/docs/components/math/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/math/</guid><description>&lt;p&gt;Mathematics is rendered by KaTeX at build time into HTML + MathML. A page with&#10;formulas gains one local KaTeX stylesheet and nothing else — no JavaScript, no&#10;request to a remote maths service. Inline formulas are &lt;code&gt;\(…\)&lt;/code&gt;, display&#10;formulas are &lt;code&gt;$$…$$&lt;/code&gt; or &lt;code&gt;\[…\]&lt;/code&gt;, and there are &lt;code&gt;math&lt;/code&gt; and &lt;code&gt;chem&lt;/code&gt; fences. For&#10;TikZ drawings or macro packages KaTeX does not support, use a pre-rendered&#10;&lt;a href="https://lxghost.github.io/docs/components/image/"&gt;image&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;p&gt;An inline formula sits inside a sentence, with the surrounding spaces and&#10;punctuation outside the delimiters.&lt;/p&gt;</description></item><item><title>Mermaid</title><link>https://lxghost.github.io/docs/components/mermaid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/mermaid/</guid><description>&lt;p&gt;A &lt;code&gt;mermaid&lt;/code&gt; fence renders text as a flowchart, sequence diagram, Gantt chart,&#10;class diagram, ER diagram or state diagram. The diagram exists as source: it goes&#10;into Git, it reviews as a diff, and search finds it. Rendering happens in the&#10;reader&amp;rsquo;s browser with the Mermaid copy the theme ships — no external service is&#10;contacted. Diagrams that need pixel-level control belong in an SVG, used as an&#10;&lt;a href="https://lxghost.github.io/docs/components/image/"&gt;image&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--titled" id="td-code-64dc8f05-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="markdown" data-td-line-count="7" role="group" aria-labelledby="td-code-64dc8f05-fence-0-title"&gt;&#10; &lt;div class="td-code__header"&gt;&#10; &lt;span class="td-code__filename" id="td-code-64dc8f05-fence-0-title" title="Source"&gt;Source&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="td-code__viewport" id="td-code-64dc8f05-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```mermaid&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flowchart LR&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; content[&amp;#34;content/&amp;#34;] --&amp;gt; Hugo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; config[&amp;#34;hugo.yml&amp;#34;] --&amp;gt; Hugo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; theme[&amp;#34;OINK theme&amp;#34;] --&amp;gt; Hugo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Hugo --&amp;gt; site[&amp;#34;public/&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;pre class="td-mermaid-source"&gt;&lt;code class="language-mermaid"&gt;flowchart LR&#10; content[&amp;#34;content/&amp;#34;] --&amp;gt; Hugo&#10; config[&amp;#34;hugo.yml&amp;#34;] --&amp;gt; Hugo&#10; theme[&amp;#34;OINK theme&amp;#34;] --&amp;gt; Hugo&#10; Hugo --&amp;gt; site[&amp;#34;public/&amp;#34;]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The fence language is &lt;code&gt;mermaid&lt;/code&gt; and there is no other switch. Only when the&#10;theme sees such a fence does it add the Mermaid runtime to that page, and ten&#10;diagrams on one page still load it once.&lt;/p&gt;</description></item><item><title>PlantUML</title><link>https://lxghost.github.io/docs/components/plantuml/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/plantuml/</guid><description>&lt;p&gt;A &lt;code&gt;plantuml&lt;/code&gt; fence holds PlantUML source. The browser compresses and encodes it,&#10;appends it to the URL of a PlantUML server, and gets an SVG back. It suits&#10;sequence, class, component, activity and use-case diagrams that need the full&#10;expressiveness of UML. Rendering depends on that server: the theme ships no&#10;default endpoint, and &lt;code&gt;enable: true&lt;/code&gt; without &lt;code&gt;svg_image_url&lt;/code&gt; fails the build.&#10;With no server available, use &lt;a href="https://lxghost.github.io/docs/components/mermaid/"&gt;Mermaid&lt;/a&gt; instead.&lt;/p&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;This page shows source only, not rendered diagrams&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;PlantUML has to reach a server you run, and this site assumes no endpoint on&#10;the reader&amp;rsquo;s behalf. In the current theme version the &lt;code&gt;plantuml&lt;/code&gt; fence also&#10;double-escapes &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;amp;&lt;/code&gt; and &lt;code&gt;&amp;quot;&lt;/code&gt;, so source with arrows or quotes comes&#10;back from the endpoint as a &lt;code&gt;Syntax Error?&lt;/code&gt; image (see &lt;a href="https://lxghost.github.io/docs/components/plantuml/#limits"&gt;Limits&lt;/a&gt;).&#10;Every snippet below is correct PlantUML in itself.&lt;/p&gt;</description></item><item><title>Markmap</title><link>https://lxghost.github.io/docs/components/markmap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/markmap/</guid><description>&lt;p&gt;The body of a &lt;code&gt;markmap&lt;/code&gt; fence is a plain Markdown outline: headings and lists&#10;give the hierarchy, and the browser draws it as a tree you can expand and&#10;collapse. It suits showing &amp;ldquo;what this section covers&amp;rdquo; at one glance. For flows&#10;with direction and conditions, use &lt;a href="https://lxghost.github.io/docs/components/mermaid/"&gt;Mermaid&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--titled" id="td-code-68b37749-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="markdown" data-td-line-count="14" role="group" aria-labelledby="td-code-68b37749-fence-0-title"&gt;&#10; &lt;div class="td-code__header"&gt;&#10; &lt;span class="td-code__filename" id="td-code-68b37749-fence-0-title" title="Source"&gt;Source&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="td-code__viewport" id="td-code-68b37749-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```markmap&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# OINK&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## Local-first&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- every runtime ships with the theme&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- no CDN involved&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## Markdown-native&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- components are fences and attribute lines&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- usable without writing a shortcode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## Four output states&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- HTML&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- print&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Markdown&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- RSS&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-markmap"&gt;# OINK&#10;## Local-first&#10;- every runtime ships with the theme&#10;- no CDN involved&#10;## Markdown-native&#10;- components are fences and attribute lines&#10;- usable without writing a shortcode&#10;## Four output states&#10;- HTML&#10;- print&#10;- Markdown&#10;- RSS&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;The first-level heading is the root; other headings and list items hang under it&#10;by indentation. Click the dot on a node to fold or unfold that branch, scroll to&#10;zoom, drag to pan. The toolbar at the bottom right offers zoom, fit-to-window&#10;and download-as-SVG.&lt;/p&gt;</description></item><item><title>Draw.io</title><link>https://lxghost.github.io/docs/components/drawio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/drawio/</guid><description>&lt;p&gt;The Draw.io integration has neither a fence nor a shortcode — it uses plain&#10;Markdown images. Tick &amp;ldquo;Include a copy of my diagram&amp;rdquo; when exporting from&#10;Draw.io and the SVG or PNG carries an &lt;code&gt;mxfile&lt;/code&gt; copy inside it; the theme&amp;rsquo;s&#10;runtime spots that copy and adds an edit button to the image. It suits diagrams&#10;readers are meant to take away and change. A diagram that is only there to be&#10;looked at is an ordinary &lt;a href="https://lxghost.github.io/docs/components/image/"&gt;image&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>ECharts</title><link>https://lxghost.github.io/docs/components/echarts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/echarts/</guid><description>&lt;p&gt;The body of an &lt;code&gt;echarts&lt;/code&gt; fence is an ECharts option object in YAML or JSON — not&#10;code. Use it for quantitative charts that need axes, series and a legend. For&#10;relationships and flows use &lt;a href="https://lxghost.github.io/docs/components/mermaid/"&gt;Mermaid&lt;/a&gt;; for order and&#10;hierarchy use &lt;a href="https://lxghost.github.io/docs/components/infographic/"&gt;Infographic&lt;/a&gt;. Hugo parses the&#10;options at build time and fails the build if they do not parse; the browser&#10;draws with the ECharts copy the theme ships, and only a page that uses it loads&#10;the runtime.&lt;/p&gt;</description></item><item><title>Infographic</title><link>https://lxghost.github.io/docs/components/infographic/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/infographic/</guid><description>&lt;p&gt;An &lt;code&gt;infographic&lt;/code&gt; fence picks an AntV template and renders &amp;ldquo;a title plus a list&#10;of items&amp;rdquo; as an infographic. Use it for structure: order, hierarchy, comparison.&#10;When you need axes and numeric precision use&#10;&lt;a href="https://lxghost.github.io/docs/components/echarts/"&gt;ECharts&lt;/a&gt;; when you need a flow with conditional&#10;branches use &lt;a href="https://lxghost.github.io/docs/components/mermaid/"&gt;Mermaid&lt;/a&gt;. The fence body is data, and&#10;it stays readable text on GitHub.&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;p&gt;The first line is &lt;code&gt;infographic &amp;lt;template&amp;gt;&lt;/code&gt;, followed by a &lt;code&gt;data&lt;/code&gt; block: &lt;code&gt;title&lt;/code&gt;&#10;is the title and every entry under &lt;code&gt;items&lt;/code&gt; needs at least a &lt;code&gt;label&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Gallery</title><link>https://lxghost.github.io/docs/components/gallery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/gallery/</guid><description>&lt;p&gt;A gallery arranges related images in a responsive grid, one image per line&#10;inside the fence. It suits several views of one thing: a few screenshots, a few&#10;states, a few colour schemes. A single image is an&#10;&lt;a href="https://lxghost.github.io/docs/components/image/"&gt;image&lt;/a&gt;, and images with no order or comparison between&#10;them do not belong in one gallery.&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;p&gt;One image per line, written as Markdown&amp;rsquo;s &lt;code&gt;![alt](src)&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="td-code td-code--titled" id="td-code-c7d36151-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="markdown" data-td-line-count="4" role="group" aria-labelledby="td-code-c7d36151-fence-0-title"&gt;&#10; &lt;div class="td-code__header"&gt;&#10; &lt;span class="td-code__filename" id="td-code-c7d36151-fence-0-title" title="Source"&gt;Source&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="td-code__viewport" id="td-code-c7d36151-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```gallery&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![OINK&amp;#39;s default documentation shell](/images/oink.webp)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![The classic Docsy layout upstream](/images/docsy.webp)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul class="td-gallery td-gallery--static"&gt;&lt;li class="td-gallery__item"&gt;&lt;img class="td-gallery__image" src="https://lxghost.github.io/images/oink.webp" alt="OINK&amp;#39;s default documentation shell" loading="lazy" decoding="async"&gt;&lt;/li&gt;&lt;li class="td-gallery__item"&gt;&lt;img class="td-gallery__image" src="https://lxghost.github.io/images/docsy.webp" alt="The classic Docsy layout upstream" loading="lazy" decoding="async"&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Alternative text is mandatory: it is the item&amp;rsquo;s title, the only text a screen&#10;reader gets, and what decides whether the image can zoom. There is no column&#10;parameter — the grid adapts to the container and drops columns on a narrow&#10;screen.&lt;/p&gt;</description></item><item><title>Badge</title><link>https://lxghost.github.io/docs/components/badge/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/badge/</guid><description>&lt;p&gt;A badge is an inline status label that sits right after a name: Beta,&#10;deprecated, v0.5, needs a server. It suits a status of one or two words. The&#10;author picks a semantic tone and the theme picks the colour, with contrast&#10;guaranteed in light and dark. When the status needs an explanation, a procedure&#10;or a deadline, use prose or a &lt;a href="https://lxghost.github.io/docs/components/callout/"&gt;callout&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--titled" id="td-code-0421c838-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="markdown" data-td-line-count="1" role="group" aria-labelledby="td-code-0421c838-fence-0-title"&gt;&#10; &lt;div class="td-code__header"&gt;&#10; &lt;span class="td-code__filename" id="td-code-0421c838-fence-0-title" title="Source"&gt;Source&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="td-code__viewport" id="td-code-0421c838-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; badge text=&amp;#34;Beta&amp;#34; tone=&amp;#34;warning&amp;#34; &amp;gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;span class="td-badge td-badge--warning"&gt;Beta&lt;/span&gt;&#10;&lt;p&gt;&lt;code&gt;text&lt;/code&gt; is the only required parameter and must be a non-empty string.&lt;/p&gt;</description></item><item><title>Kbd</title><link>https://lxghost.github.io/docs/components/kbd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/kbd/</guid><description>&lt;p&gt;Keys separate what the reader has to press from the prose. Use it for shortcuts&#10;and chords: one positional parameter per key, and the theme draws the caps, adds&#10;the separators, and gives screen readers a readable sequence. Command names,&#10;flags and text to type are inline code — they are not physical keys.&lt;/p&gt;&#10;&lt;h2 id="minimal"&gt;Shortest form&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--titled" id="td-code-16335da9-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="markdown" data-td-line-count="1" role="group" aria-labelledby="td-code-16335da9-fence-0-title"&gt;&#10; &lt;div class="td-code__header"&gt;&#10; &lt;span class="td-code__filename" id="td-code-16335da9-fence-0-title" title="Source"&gt;Source&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="td-code__viewport" id="td-code-16335da9-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Press {{&amp;lt; kbd &amp;#34;Ctrl&amp;#34; &amp;#34;K&amp;#34; &amp;gt;}} to open the command palette.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Press &lt;span class="td-kbd-sequence"&gt;&lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;span class="td-kbd-sequence__separator" aria-hidden="true"&gt;+&lt;/span&gt;&lt;span class="visually-hidden"&gt; with &lt;/span&gt;&lt;kbd&gt;K&lt;/kbd&gt;&lt;/span&gt; to open the command palette.&lt;/p&gt;</description></item><item><title>Includes</title><link>https://lxghost.github.io/docs/components/include/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/include/</guid><description>&lt;p&gt;Three shortcodes, one job each: &lt;code&gt;include&lt;/code&gt; puts another file&amp;rsquo;s contents into this&#10;page, &lt;code&gt;param&lt;/code&gt; prints a page or site parameter, and &lt;code&gt;comment&lt;/code&gt; discards a passage.&#10;They are for fragments reused across pages and constants scattered over many:&#10;one set of install steps that appears on three pages is an &lt;code&gt;include&lt;/code&gt;, a version&#10;number that appears on dozens is a &lt;code&gt;param&lt;/code&gt;, and either way you edit one place.&#10;Content that appears on one page belongs on that page.&lt;/p&gt;</description></item><item><title>Asciinema</title><link>https://lxghost.github.io/docs/components/asciinema/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/components/asciinema/</guid><description>&lt;p&gt;&lt;code&gt;asciinema&lt;/code&gt; renders a &lt;code&gt;.cast&lt;/code&gt; recording as a terminal player on the page. It&#10;suits command-line walkthroughs: the text in the terminal is still text, it can&#10;be selected and copied, and the near-two-minute install excerpt on this page is&#10;about 110 KB. Graphical interfaces belong in screenshots or video — this&#10;component plays terminal recordings only. The player and its styles ship with&#10;the theme, nothing is downloaded at build time, no CDN is contacted at runtime,&#10;and the runtime loads only on a page that uses it, and only in its HTML&#10;output.&lt;/p&gt;</description></item></channel></rss>