@refrakt-md/runes 0.33.0 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aggregate-resolve.d.ts.map +1 -1
- package/dist/aggregate-resolve.js +18 -4
- package/dist/aggregate-resolve.js.map +1 -1
- package/dist/attributes.d.ts +15 -0
- package/dist/attributes.d.ts.map +1 -1
- package/dist/attributes.js +22 -7
- package/dist/attributes.js.map +1 -1
- package/dist/collection-helpers.d.ts.map +1 -1
- package/dist/collection-helpers.js +1 -1
- package/dist/collection-helpers.js.map +1 -1
- package/dist/collection-resolve.d.ts.map +1 -1
- package/dist/collection-resolve.js +31 -8
- package/dist/collection-resolve.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +195 -74
- package/dist/config.js.map +1 -1
- package/dist/data-adapters.d.ts.map +1 -1
- package/dist/data-adapters.js +28 -11
- package/dist/data-adapters.js.map +1 -1
- package/dist/data-emit.d.ts.map +1 -1
- package/dist/data-emit.js.map +1 -1
- package/dist/data-pipeline.d.ts.map +1 -1
- package/dist/data-pipeline.js +45 -12
- package/dist/data-pipeline.js.map +1 -1
- package/dist/data-projection.d.ts.map +1 -1
- package/dist/data-projection.js +4 -3
- package/dist/data-projection.js.map +1 -1
- package/dist/data-resolve.d.ts.map +1 -1
- package/dist/data-resolve.js +5 -2
- package/dist/data-resolve.js.map +1 -1
- package/dist/documents/page.d.ts.map +1 -1
- package/dist/documents/page.js.map +1 -1
- package/dist/drawer-pipeline.d.ts.map +1 -1
- package/dist/drawer-pipeline.js +3 -2
- package/dist/drawer-pipeline.js.map +1 -1
- package/dist/expand-pipeline.d.ts.map +1 -1
- package/dist/expand-pipeline.js +3 -3
- package/dist/expand-pipeline.js.map +1 -1
- package/dist/fence-escape.d.ts.map +1 -1
- package/dist/fence-escape.js +1 -3
- package/dist/fence-escape.js.map +1 -1
- package/dist/field-match.d.ts.map +1 -1
- package/dist/field-match.js.map +1 -1
- package/dist/file-ref-resolve.js +6 -4
- package/dist/file-ref-resolve.js.map +1 -1
- package/dist/fixtures.js +2 -2
- package/dist/fixtures.js.map +1 -1
- package/dist/functions.d.ts.map +1 -1
- package/dist/functions.js +16 -3
- package/dist/functions.js.map +1 -1
- package/dist/include-pipeline.d.ts.map +1 -1
- package/dist/include-pipeline.js +3 -1
- package/dist/include-pipeline.js.map +1 -1
- package/dist/index.d.ts +92 -37
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +281 -60
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/layouts/grid.d.ts +1 -1
- package/dist/layouts/grid.d.ts.map +1 -1
- package/dist/layouts/grid.js +4 -6
- package/dist/layouts/grid.js.map +1 -1
- package/dist/lib/component.d.ts.map +1 -1
- package/dist/lib/component.js +7 -7
- package/dist/lib/component.js.map +1 -1
- package/dist/lib/icon-resolve.d.ts.map +1 -1
- package/dist/lib/icon-resolve.js.map +1 -1
- package/dist/lib/image-schemes.js +2 -2
- package/dist/lib/image-schemes.js.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +251 -50
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/node.d.ts.map +1 -1
- package/dist/lib/node.js +3 -2
- package/dist/lib/node.js.map +1 -1
- package/dist/lib/placeholder.d.ts.map +1 -1
- package/dist/lib/placeholder.js +6 -9
- package/dist/lib/placeholder.js.map +1 -1
- package/dist/lib/read-file.d.ts.map +1 -1
- package/dist/lib/read-file.js.map +1 -1
- package/dist/lib/renderable.d.ts.map +1 -1
- package/dist/lib/renderable.js +5 -5
- package/dist/lib/renderable.js.map +1 -1
- package/dist/lib/resolver.d.ts.map +1 -1
- package/dist/lib/resolver.js +26 -35
- package/dist/lib/resolver.js.map +1 -1
- package/dist/lib/svg.d.ts.map +1 -1
- package/dist/lib/svg.js.map +1 -1
- package/dist/nodes.d.ts.map +1 -1
- package/dist/nodes.js +9 -11
- package/dist/nodes.js.map +1 -1
- package/dist/outline-scope.js +1 -3
- package/dist/outline-scope.js.map +1 -1
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +13 -10
- package/dist/plugins.js.map +1 -1
- package/dist/reference.d.ts.map +1 -1
- package/dist/reference.js +28 -22
- package/dist/reference.js.map +1 -1
- package/dist/relationships-resolve.d.ts.map +1 -1
- package/dist/relationships-resolve.js +31 -7
- package/dist/relationships-resolve.js.map +1 -1
- package/dist/rune.d.ts.map +1 -1
- package/dist/rune.js.map +1 -1
- package/dist/sandbox-sources.js +6 -6
- package/dist/sandbox-sources.js.map +1 -1
- package/dist/seo.d.ts.map +1 -1
- package/dist/seo.js +4 -4
- package/dist/seo.js.map +1 -1
- package/dist/snippet-pipeline.d.ts.map +1 -1
- package/dist/snippet-pipeline.js +1 -1
- package/dist/snippet-pipeline.js.map +1 -1
- package/dist/tags/accordion.d.ts.map +1 -1
- package/dist/tags/accordion.js +23 -9
- package/dist/tags/accordion.js.map +1 -1
- package/dist/tags/aggregate.d.ts.map +1 -1
- package/dist/tags/aggregate.js +65 -10
- package/dist/tags/aggregate.js.map +1 -1
- package/dist/tags/annotate.d.ts.map +1 -1
- package/dist/tags/annotate.js +12 -9
- package/dist/tags/annotate.js.map +1 -1
- package/dist/tags/badge.d.ts.map +1 -1
- package/dist/tags/badge.js.map +1 -1
- package/dist/tags/bar.d.ts.map +1 -1
- package/dist/tags/bar.js +3 -7
- package/dist/tags/bar.js.map +1 -1
- package/dist/tags/bg.d.ts.map +1 -1
- package/dist/tags/bg.js +60 -12
- package/dist/tags/bg.js.map +1 -1
- package/dist/tags/blog.d.ts.map +1 -1
- package/dist/tags/blog.js +35 -10
- package/dist/tags/blog.js.map +1 -1
- package/dist/tags/breadcrumb.d.ts.map +1 -1
- package/dist/tags/breadcrumb.js +33 -11
- package/dist/tags/breadcrumb.js.map +1 -1
- package/dist/tags/budget.d.ts.map +1 -1
- package/dist/tags/budget.js +54 -16
- package/dist/tags/budget.js.map +1 -1
- package/dist/tags/card.d.ts.map +1 -1
- package/dist/tags/card.js +24 -6
- package/dist/tags/card.js.map +1 -1
- package/dist/tags/chart.d.ts.map +1 -1
- package/dist/tags/chart.js +33 -11
- package/dist/tags/chart.js.map +1 -1
- package/dist/tags/codegroup.d.ts.map +1 -1
- package/dist/tags/codegroup.js +39 -21
- package/dist/tags/codegroup.js.map +1 -1
- package/dist/tags/collection.d.ts.map +1 -1
- package/dist/tags/collection.js +55 -9
- package/dist/tags/collection.js.map +1 -1
- package/dist/tags/common.d.ts.map +1 -1
- package/dist/tags/common.js +34 -9
- package/dist/tags/common.js.map +1 -1
- package/dist/tags/compare.d.ts.map +1 -1
- package/dist/tags/compare.js +26 -14
- package/dist/tags/compare.js.map +1 -1
- package/dist/tags/conversation.d.ts.map +1 -1
- package/dist/tags/conversation.js +19 -17
- package/dist/tags/conversation.js.map +1 -1
- package/dist/tags/data.d.ts.map +1 -1
- package/dist/tags/data.js +67 -13
- package/dist/tags/data.js.map +1 -1
- package/dist/tags/datatable.d.ts.map +1 -1
- package/dist/tags/datatable.js +22 -8
- package/dist/tags/datatable.js.map +1 -1
- package/dist/tags/deflist.d.ts.map +1 -1
- package/dist/tags/deflist.js +5 -11
- package/dist/tags/deflist.js.map +1 -1
- package/dist/tags/details.d.ts.map +1 -1
- package/dist/tags/details.js +8 -5
- package/dist/tags/details.js.map +1 -1
- package/dist/tags/diagram.d.ts.map +1 -1
- package/dist/tags/diagram.js +9 -5
- package/dist/tags/diagram.js.map +1 -1
- package/dist/tags/diff.d.ts.map +1 -1
- package/dist/tags/diff.js +43 -24
- package/dist/tags/diff.js.map +1 -1
- package/dist/tags/drawer.d.ts.map +1 -1
- package/dist/tags/drawer.js +4 -6
- package/dist/tags/drawer.js.map +1 -1
- package/dist/tags/embed.d.ts.map +1 -1
- package/dist/tags/embed.js +10 -5
- package/dist/tags/embed.js.map +1 -1
- package/dist/tags/expand.d.ts.map +1 -1
- package/dist/tags/expand.js.map +1 -1
- package/dist/tags/figure.d.ts.map +1 -1
- package/dist/tags/figure.js +29 -9
- package/dist/tags/figure.js.map +1 -1
- package/dist/tags/file-ref.d.ts.map +1 -1
- package/dist/tags/file-ref.js.map +1 -1
- package/dist/tags/form.d.ts.map +1 -1
- package/dist/tags/form.js +52 -25
- package/dist/tags/form.js.map +1 -1
- package/dist/tags/gallery.d.ts.map +1 -1
- package/dist/tags/gallery.js +26 -12
- package/dist/tags/gallery.js.map +1 -1
- package/dist/tags/grid.d.ts.map +1 -1
- package/dist/tags/grid.js +57 -14
- package/dist/tags/grid.js.map +1 -1
- package/dist/tags/hint.d.ts.map +1 -1
- package/dist/tags/hint.js +9 -5
- package/dist/tags/hint.js.map +1 -1
- package/dist/tags/icon.d.ts.map +1 -1
- package/dist/tags/icon.js +5 -1
- package/dist/tags/icon.js.map +1 -1
- package/dist/tags/include.d.ts.map +1 -1
- package/dist/tags/include.js +1 -1
- package/dist/tags/include.js.map +1 -1
- package/dist/tags/juxtapose.d.ts.map +1 -1
- package/dist/tags/juxtapose.js +32 -14
- package/dist/tags/juxtapose.js.map +1 -1
- package/dist/tags/layout.d.ts.map +1 -1
- package/dist/tags/layout.js +7 -4
- package/dist/tags/layout.js.map +1 -1
- package/dist/tags/mediatext.d.ts.map +1 -1
- package/dist/tags/mediatext.js +19 -8
- package/dist/tags/mediatext.js.map +1 -1
- package/dist/tags/nav.d.ts.map +1 -1
- package/dist/tags/nav.js +43 -23
- package/dist/tags/nav.js.map +1 -1
- package/dist/tags/pagination.d.ts.map +1 -1
- package/dist/tags/pagination.js +27 -5
- package/dist/tags/pagination.js.map +1 -1
- package/dist/tags/progress.d.ts.map +1 -1
- package/dist/tags/progress.js +25 -5
- package/dist/tags/progress.js.map +1 -1
- package/dist/tags/pullquote.d.ts.map +1 -1
- package/dist/tags/pullquote.js +16 -9
- package/dist/tags/pullquote.js.map +1 -1
- package/dist/tags/region.d.ts.map +1 -1
- package/dist/tags/region.js +9 -4
- package/dist/tags/region.js.map +1 -1
- package/dist/tags/relationships.d.ts.map +1 -1
- package/dist/tags/relationships.js +55 -9
- package/dist/tags/relationships.js.map +1 -1
- package/dist/tags/reveal.d.ts.map +1 -1
- package/dist/tags/reveal.js +16 -7
- package/dist/tags/reveal.js.map +1 -1
- package/dist/tags/sandbox.d.ts.map +1 -1
- package/dist/tags/sandbox.js +104 -44
- package/dist/tags/sandbox.js.map +1 -1
- package/dist/tags/section.d.ts.map +1 -1
- package/dist/tags/section.js +13 -3
- package/dist/tags/section.js.map +1 -1
- package/dist/tags/showcase.d.ts.map +1 -1
- package/dist/tags/showcase.js +33 -11
- package/dist/tags/showcase.js.map +1 -1
- package/dist/tags/sidenote.d.ts.map +1 -1
- package/dist/tags/sidenote.js +9 -5
- package/dist/tags/sidenote.js.map +1 -1
- package/dist/tags/snippet.d.ts.map +1 -1
- package/dist/tags/snippet.js.map +1 -1
- package/dist/tags/tabs.d.ts.map +1 -1
- package/dist/tags/tabs.js +16 -9
- package/dist/tags/tabs.js.map +1 -1
- package/dist/tags/textblock.d.ts.map +1 -1
- package/dist/tags/textblock.js +9 -5
- package/dist/tags/textblock.js.map +1 -1
- package/dist/tags/tint.d.ts +1 -1
- package/dist/tags/tint.d.ts.map +1 -1
- package/dist/tags/tint.js +14 -2
- package/dist/tags/tint.js.map +1 -1
- package/dist/tags/toc.d.ts.map +1 -1
- package/dist/tags/toc.js +16 -7
- package/dist/tags/toc.js.map +1 -1
- package/dist/tags/xref.d.ts.map +1 -1
- package/dist/tags/xref.js.map +1 -1
- package/dist/universal-attributes.d.ts.map +1 -1
- package/dist/universal-attributes.js +28 -5
- package/dist/universal-attributes.js.map +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +4 -4
- package/dist/util.js.map +1 -1
- package/dist/xref-patterns.js +1 -1
- package/dist/xref-patterns.js.map +1 -1
- package/dist/xref-preview-resolve.js +3 -4
- package/dist/xref-preview-resolve.js.map +1 -1
- package/dist/xref-resolve.d.ts.map +1 -1
- package/dist/xref-resolve.js +4 -4
- package/dist/xref-resolve.js.map +1 -1
- package/i18n/de.json +67 -67
- package/i18n/en.json +67 -67
- package/package.json +3 -3
- package/dist/tags/error.d.ts +0 -3
- package/dist/tags/error.d.ts.map +0 -1
- package/dist/tags/error.js +0 -34
- package/dist/tags/error.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { heading, paragraph, fence, list, item, em, strong, text, link, hardbreak, image, table, td } from './nodes.js';
|
|
1
|
+
import { heading, paragraph, fence, list, item, em, strong, text, link, hardbreak, image, table, td, } from './nodes.js';
|
|
2
2
|
export { Page } from './documents/page.js';
|
|
3
3
|
import { DocPage } from './documents/doc.js';
|
|
4
|
-
import { error } from './tags/error.js';
|
|
5
4
|
import { grid } from './tags/grid.js';
|
|
6
5
|
import { codegroup } from './tags/codegroup.js';
|
|
7
6
|
import { snippet } from './tags/snippet.js';
|
|
@@ -63,18 +62,24 @@ import Markdoc from '@markdoc/markdoc';
|
|
|
63
62
|
import { defineRune, runeTagMap } from './rune.js';
|
|
64
63
|
export * from './interfaces.js';
|
|
65
64
|
export { Rune, defineRune, runeTagMap } from './rune.js';
|
|
65
|
+
/** Custom Markdoc attribute types. Exported since SPEC-132, which is the first
|
|
66
|
+
* release in which their `validate()` runs in a build at all — `transform()`
|
|
67
|
+
* never invoked it, only `Markdoc.validate()` does. `plugins/media` carries its
|
|
68
|
+
* own copies of these classes, which is what an unexported utility tends to
|
|
69
|
+
* produce. */
|
|
70
|
+
export { SeparatedString, CommaSeparatedList, SpaceSeparatedList, SpaceSeparatedNumberList, } from './attributes.js';
|
|
66
71
|
export { RenderableNodeCursor } from './lib/renderable.js';
|
|
67
|
-
export { createContentModelSchema, createComponentRenderable, asNodes, schemaContentModels, schemaRuneStructures, declareUniversalPosture, sanitizeSandboxContent } from './lib/index.js';
|
|
72
|
+
export { createContentModelSchema, createComponentRenderable, asNodes, schemaContentModels, schemaRuneStructures, declareUniversalPosture, sanitizeSandboxContent, } from './lib/index.js';
|
|
68
73
|
// SPEC-125 Phase 3 — the declared rule for universal-attribute availability
|
|
69
|
-
export { resolveUniversalAttributes, AXIS_ATTRIBUTES, POSTURE_REASONS } from './universal-attributes.js';
|
|
74
|
+
export { resolveUniversalAttributes, AXIS_ATTRIBUTES, POSTURE_REASONS, } from './universal-attributes.js';
|
|
70
75
|
export { describeSchemaUniversals, UNRECORDED_REASON } from './schema-universals.js';
|
|
71
|
-
export { resolve, resolveSequence, resolveDelimited, resolveContentModel, resolveListItems, evaluateCondition, matchesType } from './lib/resolver.js';
|
|
76
|
+
export { resolve, resolveSequence, resolveDelimited, resolveContentModel, resolveListItems, evaluateCondition, matchesType, } from './lib/resolver.js';
|
|
72
77
|
export { registerImageScheme, resolveImageScheme, hasImageScheme } from './lib/image-schemes.js';
|
|
73
78
|
export { resolveIcon, splitIconName } from './lib/icon-resolve.js';
|
|
74
|
-
export { placeholderSvg, PLACEHOLDER_SHAPES, DEFAULT_PLACEHOLDER_SHAPE } from './lib/placeholder.js';
|
|
79
|
+
export { placeholderSvg, PLACEHOLDER_SHAPES, DEFAULT_PLACEHOLDER_SHAPE, } from './lib/placeholder.js';
|
|
75
80
|
export { FIXTURE_ROLES, splitFixture, parseFixtureFilename, validateFixtureFrontmatter, parseFixture, } from './fixtures.js';
|
|
76
|
-
export { parseFieldMatch, matchesFieldMatch, matchesFilterExpr, resolveEntityField } from './field-match.js';
|
|
77
|
-
export { DEFERRED_BODY_ATTR, captureDeferredBodies, readDeferredBody, transformDeferredTemplate } from './deferred-body.js';
|
|
81
|
+
export { parseFieldMatch, matchesFieldMatch, matchesFilterExpr, resolveEntityField, } from './field-match.js';
|
|
82
|
+
export { DEFERRED_BODY_ATTR, captureDeferredBodies, readDeferredBody, transformDeferredTemplate, } from './deferred-body.js';
|
|
78
83
|
export { resolveCollections } from './collection-resolve.js';
|
|
79
84
|
export { resolveRelationships } from './relationships-resolve.js';
|
|
80
85
|
export { resolveAggregates } from './aggregate-resolve.js';
|
|
@@ -88,8 +93,8 @@ export { hoistPreviewDrawers, registerHoistBuilder, getHoistBuilder, pathToSlug,
|
|
|
88
93
|
export { Ordering, buildOrdering, sortEntities, groupEntities, groupBy, entityUrl, entityTitle, fieldValue, titleLink, projectItem, renderItemTemplate, } from './collection-helpers.js';
|
|
89
94
|
export { COLLECTION_SENTINEL } from './tags/collection.js';
|
|
90
95
|
export { functions, currency, date, number, join, concat, humanize } from './functions.js';
|
|
91
|
-
export { linkItem, pageSectionProperties, buildLayoutMetas, splitMediaBodyFooter, extractMediaImage, unwrapParagraphImages, isMediaNode, isSchemeMediaNode, name as nameHelper, description as descriptionHelper, SplitablePageSectionModel, SplitLayoutModel, splitLayoutAttributes } from './tags/common.js';
|
|
92
|
-
export { extractHeadings, firstH1, headingsToList, headingSlug, headingText, renderableText } from './util.js';
|
|
96
|
+
export { linkItem, pageSectionProperties, buildLayoutMetas, splitMediaBodyFooter, extractMediaImage, unwrapParagraphImages, isMediaNode, isSchemeMediaNode, name as nameHelper, description as descriptionHelper, SplitablePageSectionModel, SplitLayoutModel, splitLayoutAttributes, } from './tags/common.js';
|
|
97
|
+
export { extractHeadings, firstH1, headingsToList, headingSlug, headingText, renderableText, } from './util.js';
|
|
93
98
|
export { LANG_MAP, FALLBACK_LANG, inferLanguage } from './lang-map.js';
|
|
94
99
|
export { extractSeo, collectJsonLd, textContent } from './seo.js';
|
|
95
100
|
export { serialize, serializeTree } from './serialize.js';
|
|
@@ -97,9 +102,9 @@ export { RUNE_EXAMPLES, RUNE_FIXTURE_META } from './examples.js';
|
|
|
97
102
|
export { describeRune, renderContentModel, serializeContentModel, stripContentModel, hydrateRuneInfo, hydrateAllRuneInfos, hydrateRuneByName, serializeRune, groupReferenceInfos, renderReferenceMarkdown, EXCLUDED_RUNES, HIDDEN_ATTRIBUTES, } from './reference.js';
|
|
98
103
|
export { registerAttributePreset, lookupAttributePreset, schemaBasePresets, UNIVERSAL_ATTRIBUTE_NAMES, } from './attribute-presets.js';
|
|
99
104
|
export { LAYOUT, CANONICAL_LAYOUTS, layoutMatches } from './layout-vocabulary.js';
|
|
100
|
-
export { READING_REGISTERS, DEFAULT_READING, READING_CAPABILITIES, resolveReading, coerceRegister } from '@refrakt-md/transform';
|
|
101
|
-
export { loadPlugin, mergePlugins, applyAliases, loadLocalRunes, discoverPluginFixtures, discoverPluginFixtureManifest, assertFileRootNamespaceAllowed } from './plugins.js';
|
|
102
|
-
export { coreConfig, baseConfig, corePipelineHooks, createCorePipelineHooks, resolveCoreSentinels } from './config.js';
|
|
105
|
+
export { READING_REGISTERS, DEFAULT_READING, READING_CAPABILITIES, resolveReading, coerceRegister, } from '@refrakt-md/transform';
|
|
106
|
+
export { loadPlugin, mergePlugins, applyAliases, loadLocalRunes, discoverPluginFixtures, discoverPluginFixtureManifest, assertFileRootNamespaceAllowed, } from './plugins.js';
|
|
107
|
+
export { coreConfig, baseConfig, corePipelineHooks, createCorePipelineHooks, resolveCoreSentinels, } from './config.js';
|
|
103
108
|
// SPEC-035 — first-party core translation bundles (generated from i18n/*.json).
|
|
104
109
|
export { coreTranslations } from './translations.generated.js';
|
|
105
110
|
export { BREADCRUMB_AUTO_SENTINEL } from './tags/breadcrumb.js';
|
|
@@ -120,7 +125,14 @@ export const runes = {
|
|
|
120
125
|
description: 'Navigation structure with page slug references and optional grouping',
|
|
121
126
|
typeName: 'Nav',
|
|
122
127
|
category: 'Site',
|
|
123
|
-
snippet: [
|
|
128
|
+
snippet: [
|
|
129
|
+
'{% nav %}',
|
|
130
|
+
'## ${1:Section}',
|
|
131
|
+
'',
|
|
132
|
+
'- ${2:page-slug}',
|
|
133
|
+
'- ${3:another-page}',
|
|
134
|
+
'{% /nav %}',
|
|
135
|
+
],
|
|
124
136
|
}),
|
|
125
137
|
region: defineRune({
|
|
126
138
|
name: 'region',
|
|
@@ -133,7 +145,13 @@ export const runes = {
|
|
|
133
145
|
schema: layout,
|
|
134
146
|
description: 'Layout definition containing named regions',
|
|
135
147
|
category: 'Site',
|
|
136
|
-
snippet: [
|
|
148
|
+
snippet: [
|
|
149
|
+
'{% layout %}',
|
|
150
|
+
'{% region name="${1:header}" %}',
|
|
151
|
+
'$0',
|
|
152
|
+
'{% /region %}',
|
|
153
|
+
'{% /layout %}',
|
|
154
|
+
],
|
|
137
155
|
}),
|
|
138
156
|
codegroup: defineRune({
|
|
139
157
|
name: 'codegroup',
|
|
@@ -141,14 +159,17 @@ export const runes = {
|
|
|
141
159
|
description: 'Tabbed code block with language tabs',
|
|
142
160
|
typeName: 'CodeGroup',
|
|
143
161
|
category: 'Code & Data',
|
|
144
|
-
snippet: [
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
162
|
+
snippet: [
|
|
163
|
+
'{% codegroup %}',
|
|
164
|
+
'```${1:js}',
|
|
165
|
+
'$0',
|
|
166
|
+
'```',
|
|
167
|
+
'',
|
|
168
|
+
'```${2:ts}',
|
|
169
|
+
'',
|
|
170
|
+
'```',
|
|
171
|
+
'{% /codegroup %}',
|
|
172
|
+
],
|
|
152
173
|
}),
|
|
153
174
|
grid: defineRune({
|
|
154
175
|
name: 'grid',
|
|
@@ -157,7 +178,15 @@ export const runes = {
|
|
|
157
178
|
description: 'Grid layout container with configurable columns and rows',
|
|
158
179
|
typeName: 'Grid',
|
|
159
180
|
category: 'Layout',
|
|
160
|
-
snippet: [
|
|
181
|
+
snippet: [
|
|
182
|
+
'{% grid columns=${1:2} %}',
|
|
183
|
+
'${2:First column content}',
|
|
184
|
+
'',
|
|
185
|
+
'---',
|
|
186
|
+
'',
|
|
187
|
+
'${3:Second column content}',
|
|
188
|
+
'{% /grid %}',
|
|
189
|
+
],
|
|
161
190
|
}),
|
|
162
191
|
hint: defineRune({
|
|
163
192
|
name: 'hint',
|
|
@@ -180,7 +209,17 @@ export const runes = {
|
|
|
180
209
|
description: 'Tabbed interface with tab panels',
|
|
181
210
|
typeName: 'TabGroup',
|
|
182
211
|
category: 'Layout',
|
|
183
|
-
snippet: [
|
|
212
|
+
snippet: [
|
|
213
|
+
'{% tabs %}',
|
|
214
|
+
'## ${1:Tab One}',
|
|
215
|
+
'',
|
|
216
|
+
'${2:Content for tab one.}',
|
|
217
|
+
'',
|
|
218
|
+
'## ${3:Tab Two}',
|
|
219
|
+
'',
|
|
220
|
+
'${4:Content for tab two.}',
|
|
221
|
+
'{% /tabs %}',
|
|
222
|
+
],
|
|
184
223
|
}),
|
|
185
224
|
details: defineRune({
|
|
186
225
|
name: 'details',
|
|
@@ -196,25 +235,43 @@ export const runes = {
|
|
|
196
235
|
description: 'Modal side panel addressed by id. Triggered by xrefs anywhere on the page; falls back to in-flow rendering without JS.',
|
|
197
236
|
typeName: 'Drawer',
|
|
198
237
|
category: 'Layout',
|
|
199
|
-
snippet: [
|
|
238
|
+
snippet: [
|
|
239
|
+
'{% drawer id="${1:auth-explainer}" title="${2:Auth system}" %}',
|
|
240
|
+
'$0',
|
|
241
|
+
'{% /drawer %}',
|
|
242
|
+
],
|
|
200
243
|
}),
|
|
201
244
|
figure: defineRune({
|
|
202
245
|
name: 'figure',
|
|
203
246
|
schema: figure,
|
|
204
247
|
description: 'Enhanced image with caption, attribution, and sizing',
|
|
205
248
|
seoType: 'ImageObject',
|
|
206
|
-
typeName: 'Figure',
|
|
249
|
+
typeName: 'Figure',
|
|
250
|
+
schemaOrgType: 'ImageObject',
|
|
207
251
|
category: 'Content',
|
|
208
|
-
snippet: [
|
|
252
|
+
snippet: [
|
|
253
|
+
'{% figure size="${1|medium,small,large,full|}" %}',
|
|
254
|
+
'',
|
|
255
|
+
'',
|
|
256
|
+
'${4:Caption text}',
|
|
257
|
+
'{% /figure %}',
|
|
258
|
+
],
|
|
209
259
|
}),
|
|
210
260
|
gallery: defineRune({
|
|
211
261
|
name: 'gallery',
|
|
212
262
|
schema: gallery,
|
|
213
263
|
description: 'Multi-image container with grid, carousel, or masonry layout and optional lightbox',
|
|
214
264
|
seoType: 'ImageGallery',
|
|
215
|
-
typeName: 'Gallery',
|
|
265
|
+
typeName: 'Gallery',
|
|
266
|
+
schemaOrgType: 'ImageGallery',
|
|
216
267
|
category: 'Content',
|
|
217
|
-
snippet: [
|
|
268
|
+
snippet: [
|
|
269
|
+
'{% gallery layout="${1|grid,carousel,masonry|}" %}',
|
|
270
|
+
'',
|
|
271
|
+
'',
|
|
272
|
+
'',
|
|
273
|
+
'{% /gallery %}',
|
|
274
|
+
],
|
|
218
275
|
}),
|
|
219
276
|
accordion: defineRune({
|
|
220
277
|
name: 'accordion',
|
|
@@ -222,15 +279,27 @@ export const runes = {
|
|
|
222
279
|
schema: accordion,
|
|
223
280
|
description: 'Collapsible accordion sections where headings become toggleable headers',
|
|
224
281
|
seoType: 'FAQPage',
|
|
225
|
-
typeName: 'Accordion',
|
|
282
|
+
typeName: 'Accordion',
|
|
283
|
+
schemaOrgType: 'FAQPage',
|
|
226
284
|
category: 'Layout',
|
|
227
|
-
snippet: [
|
|
285
|
+
snippet: [
|
|
286
|
+
'{% accordion %}',
|
|
287
|
+
'## ${1:First Question}',
|
|
288
|
+
'',
|
|
289
|
+
'${2:Answer to the first question.}',
|
|
290
|
+
'',
|
|
291
|
+
'## ${3:Second Question}',
|
|
292
|
+
'',
|
|
293
|
+
'${4:Answer to the second question.}',
|
|
294
|
+
'{% /accordion %}',
|
|
295
|
+
],
|
|
228
296
|
}),
|
|
229
297
|
'accordion-item': defineRune({
|
|
230
298
|
name: 'accordion-item',
|
|
231
299
|
schema: accordionItem,
|
|
232
300
|
description: 'Individual accordion section',
|
|
233
|
-
typeName: 'AccordionItem',
|
|
301
|
+
typeName: 'AccordionItem',
|
|
302
|
+
schemaOrgType: 'Question',
|
|
234
303
|
}),
|
|
235
304
|
toc: defineRune({
|
|
236
305
|
name: 'toc',
|
|
@@ -246,7 +315,8 @@ export const runes = {
|
|
|
246
315
|
schema: embed,
|
|
247
316
|
description: 'Embedded content from external services (YouTube, Twitter, CodePen, Spotify)',
|
|
248
317
|
seoType: 'VideoObject',
|
|
249
|
-
typeName: 'Embed',
|
|
318
|
+
typeName: 'Embed',
|
|
319
|
+
schemaOrgType: 'VideoObject',
|
|
250
320
|
category: 'Content',
|
|
251
321
|
snippet: ['{% embed url="${1:https://}" /%}'],
|
|
252
322
|
}),
|
|
@@ -255,7 +325,8 @@ export const runes = {
|
|
|
255
325
|
schema: breadcrumb,
|
|
256
326
|
description: 'Navigation breadcrumb trail showing page hierarchy',
|
|
257
327
|
seoType: 'BreadcrumbList',
|
|
258
|
-
typeName: 'Breadcrumb',
|
|
328
|
+
typeName: 'Breadcrumb',
|
|
329
|
+
schemaOrgType: 'BreadcrumbList',
|
|
259
330
|
category: 'Site',
|
|
260
331
|
snippet: ['{% breadcrumb /%}'],
|
|
261
332
|
}),
|
|
@@ -272,9 +343,17 @@ export const runes = {
|
|
|
272
343
|
schema: budget,
|
|
273
344
|
description: 'Structured cost breakdown with categories, line items, and auto-calculated totals',
|
|
274
345
|
seoType: 'ItemList',
|
|
275
|
-
typeName: 'Budget',
|
|
346
|
+
typeName: 'Budget',
|
|
347
|
+
schemaOrgType: 'ItemList',
|
|
276
348
|
category: 'Semantic',
|
|
277
|
-
snippet: [
|
|
349
|
+
snippet: [
|
|
350
|
+
'{% budget %}',
|
|
351
|
+
'## ${1:Category}',
|
|
352
|
+
'',
|
|
353
|
+
'- ${2:Item description}: \\$${3:100}',
|
|
354
|
+
'- ${4:Another item}: \\$${5:200}',
|
|
355
|
+
'{% /budget %}',
|
|
356
|
+
],
|
|
278
357
|
}),
|
|
279
358
|
'budget-category': defineRune({
|
|
280
359
|
name: 'budget-category',
|
|
@@ -294,7 +373,17 @@ export const runes = {
|
|
|
294
373
|
description: 'Side-by-side code comparison with labeled panels',
|
|
295
374
|
typeName: 'Compare',
|
|
296
375
|
category: 'Code & Data',
|
|
297
|
-
snippet: [
|
|
376
|
+
snippet: [
|
|
377
|
+
'{% compare %}',
|
|
378
|
+
'```${1:js}',
|
|
379
|
+
'${2:// Before}',
|
|
380
|
+
'```',
|
|
381
|
+
'',
|
|
382
|
+
'```${3:js}',
|
|
383
|
+
'${4:// After}',
|
|
384
|
+
'```',
|
|
385
|
+
'{% /compare %}',
|
|
386
|
+
],
|
|
298
387
|
}),
|
|
299
388
|
datatable: defineRune({
|
|
300
389
|
name: 'datatable',
|
|
@@ -302,9 +391,16 @@ export const runes = {
|
|
|
302
391
|
schema: datatable,
|
|
303
392
|
description: 'Interactive data table with sorting, filtering, and pagination from a Markdown table',
|
|
304
393
|
seoType: 'Dataset',
|
|
305
|
-
typeName: 'DataTable',
|
|
394
|
+
typeName: 'DataTable',
|
|
395
|
+
schemaOrgType: 'Dataset',
|
|
306
396
|
category: 'Code & Data',
|
|
307
|
-
snippet: [
|
|
397
|
+
snippet: [
|
|
398
|
+
'{% datatable %}',
|
|
399
|
+
'| ${1:Column A} | ${2:Column B} | ${3:Column C} |',
|
|
400
|
+
'|---|---|---|',
|
|
401
|
+
'| ${4:Data} | ${5:Data} | ${6:Data} |',
|
|
402
|
+
'{% /datatable %}',
|
|
403
|
+
],
|
|
308
404
|
}),
|
|
309
405
|
diff: defineRune({
|
|
310
406
|
name: 'diff',
|
|
@@ -312,7 +408,17 @@ export const runes = {
|
|
|
312
408
|
description: 'Side-by-side or unified diff view between two code blocks',
|
|
313
409
|
typeName: 'Diff',
|
|
314
410
|
category: 'Code & Data',
|
|
315
|
-
snippet: [
|
|
411
|
+
snippet: [
|
|
412
|
+
'{% diff %}',
|
|
413
|
+
'```${1:js}',
|
|
414
|
+
'${2:// Before}',
|
|
415
|
+
'```',
|
|
416
|
+
'',
|
|
417
|
+
'```${3:js}',
|
|
418
|
+
'${4:// After}',
|
|
419
|
+
'```',
|
|
420
|
+
'{% /diff %}',
|
|
421
|
+
],
|
|
316
422
|
}),
|
|
317
423
|
snippet: defineRune({
|
|
318
424
|
name: 'snippet',
|
|
@@ -341,7 +447,7 @@ export const runes = {
|
|
|
341
447
|
include: defineRune({
|
|
342
448
|
name: 'include',
|
|
343
449
|
schema: include,
|
|
344
|
-
description:
|
|
450
|
+
description: "Paste a partial's AST into the page before the preprocess phase, so `data` and `snippet` inside it resolve — the case `{% partial %}` cannot serve. Reads the same `_partials/` and file roots (SPEC-129).",
|
|
345
451
|
typeName: 'Include',
|
|
346
452
|
category: 'Code & Data',
|
|
347
453
|
snippet: ['{% include file="${1:shared-block.md}" /%}'],
|
|
@@ -352,7 +458,14 @@ export const runes = {
|
|
|
352
458
|
description: 'Chart visualization from a Markdown table. First column becomes axis labels, header row becomes series names.',
|
|
353
459
|
typeName: 'Chart',
|
|
354
460
|
category: 'Code & Data',
|
|
355
|
-
snippet: [
|
|
461
|
+
snippet: [
|
|
462
|
+
'{% chart type="${1|bar,line,pie,area|}" %}',
|
|
463
|
+
'| ${2:Label} | ${3:Series A} | ${4:Series B} |',
|
|
464
|
+
'|---|---|---|',
|
|
465
|
+
'| ${5:Item 1} | ${6:10} | ${7:20} |',
|
|
466
|
+
'| ${8:Item 2} | ${9:30} | ${10:15} |',
|
|
467
|
+
'{% /chart %}',
|
|
468
|
+
],
|
|
356
469
|
}),
|
|
357
470
|
diagram: defineRune({
|
|
358
471
|
name: 'diagram',
|
|
@@ -360,7 +473,13 @@ export const runes = {
|
|
|
360
473
|
description: 'Diagram rendering from Mermaid, PlantUML, or ASCII art code blocks',
|
|
361
474
|
typeName: 'Diagram',
|
|
362
475
|
category: 'Code & Data',
|
|
363
|
-
snippet: [
|
|
476
|
+
snippet: [
|
|
477
|
+
'{% diagram language="${1|mermaid,plantuml,ascii|}" %}',
|
|
478
|
+
'```${1:mermaid}',
|
|
479
|
+
'$0',
|
|
480
|
+
'```',
|
|
481
|
+
'{% /diagram %}',
|
|
482
|
+
],
|
|
364
483
|
}),
|
|
365
484
|
sidenote: defineRune({
|
|
366
485
|
name: 'sidenote',
|
|
@@ -378,7 +497,13 @@ export const runes = {
|
|
|
378
497
|
description: 'Chat/dialogue display where blockquotes become alternating speaker messages',
|
|
379
498
|
typeName: 'Conversation',
|
|
380
499
|
category: 'Semantic',
|
|
381
|
-
snippet: [
|
|
500
|
+
snippet: [
|
|
501
|
+
'{% conversation %}',
|
|
502
|
+
'> **${1:Alice}**: ${2:Hello!}',
|
|
503
|
+
'',
|
|
504
|
+
'> **${3:Bob}**: ${4:Hi there!}',
|
|
505
|
+
'{% /conversation %}',
|
|
506
|
+
],
|
|
382
507
|
}),
|
|
383
508
|
'conversation-message': defineRune({
|
|
384
509
|
name: 'conversation-message',
|
|
@@ -392,7 +517,17 @@ export const runes = {
|
|
|
392
517
|
description: 'Progressive disclosure where headings become reveal steps shown one at a time',
|
|
393
518
|
typeName: 'Reveal',
|
|
394
519
|
category: 'Layout',
|
|
395
|
-
snippet: [
|
|
520
|
+
snippet: [
|
|
521
|
+
'{% reveal %}',
|
|
522
|
+
'## ${1:Step One}',
|
|
523
|
+
'',
|
|
524
|
+
'${2:Content revealed first.}',
|
|
525
|
+
'',
|
|
526
|
+
'## ${3:Step Two}',
|
|
527
|
+
'',
|
|
528
|
+
'${4:Content revealed next.}',
|
|
529
|
+
'{% /reveal %}',
|
|
530
|
+
],
|
|
396
531
|
}),
|
|
397
532
|
'reveal-step': defineRune({
|
|
398
533
|
name: 'reveal-step',
|
|
@@ -406,7 +541,17 @@ export const runes = {
|
|
|
406
541
|
description: 'A generic page section: an eyebrow/headline/blurb header above arbitrary body content',
|
|
407
542
|
typeName: 'Section',
|
|
408
543
|
category: 'Layout',
|
|
409
|
-
snippet: [
|
|
544
|
+
snippet: [
|
|
545
|
+
'{% section %}',
|
|
546
|
+
'Eyebrow',
|
|
547
|
+
'',
|
|
548
|
+
'## ${1:Section title}',
|
|
549
|
+
'',
|
|
550
|
+
'${2:A short supporting blurb.}',
|
|
551
|
+
'',
|
|
552
|
+
'${3:Body content — a bento, cards, anything.}',
|
|
553
|
+
'{% /section %}',
|
|
554
|
+
],
|
|
410
555
|
}),
|
|
411
556
|
juxtapose: defineRune({
|
|
412
557
|
name: 'juxtapose',
|
|
@@ -421,7 +566,17 @@ export const runes = {
|
|
|
421
566
|
description: 'Content with margin annotations. Nested note tags appear as margin notes alongside the main text.',
|
|
422
567
|
typeName: 'Annotate',
|
|
423
568
|
category: 'Layout',
|
|
424
|
-
snippet: [
|
|
569
|
+
snippet: [
|
|
570
|
+
'{% annotate %}',
|
|
571
|
+
'${1:Main content here.}',
|
|
572
|
+
'',
|
|
573
|
+
'{% note %}',
|
|
574
|
+
'${2:Margin note content.}',
|
|
575
|
+
'{% /note %}',
|
|
576
|
+
'',
|
|
577
|
+
'${3:More main content.}',
|
|
578
|
+
'{% /annotate %}',
|
|
579
|
+
],
|
|
425
580
|
}),
|
|
426
581
|
note: defineRune({
|
|
427
582
|
name: 'note',
|
|
@@ -436,7 +591,15 @@ export const runes = {
|
|
|
436
591
|
description: 'Accessible HTML form from Markdown. Lists become input fields with smart type inference, blockquotes followed by lists become select/radio/checkbox groups.',
|
|
437
592
|
typeName: 'Form',
|
|
438
593
|
category: 'Content',
|
|
439
|
-
snippet: [
|
|
594
|
+
snippet: [
|
|
595
|
+
'{% form action="${1:/api/contact}" %}',
|
|
596
|
+
'- Name',
|
|
597
|
+
'- Email',
|
|
598
|
+
'- Message',
|
|
599
|
+
'',
|
|
600
|
+
'**${2:Submit}**',
|
|
601
|
+
'{% /form %}',
|
|
602
|
+
],
|
|
440
603
|
}),
|
|
441
604
|
'form-field': defineRune({
|
|
442
605
|
name: 'form-field',
|
|
@@ -450,7 +613,11 @@ export const runes = {
|
|
|
450
613
|
description: 'Isolated HTML/CSS/JS rendering in an iframe with optional framework loading',
|
|
451
614
|
typeName: 'Sandbox',
|
|
452
615
|
category: 'Code & Data',
|
|
453
|
-
snippet: [
|
|
616
|
+
snippet: [
|
|
617
|
+
'{% sandbox framework="${1|,tailwind,bootstrap,bulma,pico|}" %}',
|
|
618
|
+
'$0',
|
|
619
|
+
'{% /sandbox %}',
|
|
620
|
+
],
|
|
454
621
|
}),
|
|
455
622
|
pullquote: defineRune({
|
|
456
623
|
name: 'pullquote',
|
|
@@ -459,7 +626,11 @@ export const runes = {
|
|
|
459
626
|
description: 'Decorative pull quote for magazine-style emphasis with float and block modes',
|
|
460
627
|
typeName: 'PullQuote',
|
|
461
628
|
category: 'Content',
|
|
462
|
-
snippet: [
|
|
629
|
+
snippet: [
|
|
630
|
+
'{% pullquote variant="${1|default,accent,editorial|}" %}',
|
|
631
|
+
'> ${2:Quote text to emphasize.}',
|
|
632
|
+
'{% /pullquote %}',
|
|
633
|
+
],
|
|
463
634
|
}),
|
|
464
635
|
textblock: defineRune({
|
|
465
636
|
name: 'textblock',
|
|
@@ -468,7 +639,11 @@ export const runes = {
|
|
|
468
639
|
description: 'Text formatting block with drop caps, multi-column layout, lead paragraphs, and alignment control',
|
|
469
640
|
typeName: 'TextBlock',
|
|
470
641
|
category: 'Content',
|
|
471
|
-
snippet: [
|
|
642
|
+
snippet: [
|
|
643
|
+
'{% textblock dropcap %}',
|
|
644
|
+
'${1:Formatted text content with drop cap styling.}',
|
|
645
|
+
'{% /textblock %}',
|
|
646
|
+
],
|
|
472
647
|
}),
|
|
473
648
|
mediatext: defineRune({
|
|
474
649
|
name: 'mediatext',
|
|
@@ -477,7 +652,13 @@ export const runes = {
|
|
|
477
652
|
description: 'Image and text side by side with configurable ratio and optional text wrapping',
|
|
478
653
|
typeName: 'MediaText',
|
|
479
654
|
category: 'Layout',
|
|
480
|
-
snippet: [
|
|
655
|
+
snippet: [
|
|
656
|
+
'{% mediatext align="${1|left,right|}" ratio="${2|1:1,1:2,2:1|}" %}',
|
|
657
|
+
'',
|
|
658
|
+
'',
|
|
659
|
+
'${5:Text content displayed alongside the image.}',
|
|
660
|
+
'{% /mediatext %}',
|
|
661
|
+
],
|
|
481
662
|
}),
|
|
482
663
|
icon: defineRune({
|
|
483
664
|
name: 'icon',
|
|
@@ -491,7 +672,13 @@ export const runes = {
|
|
|
491
672
|
schema: tint,
|
|
492
673
|
description: 'Section-level colour override via CSS custom properties. Declared as first child of a block rune.',
|
|
493
674
|
typeName: 'Tint',
|
|
494
|
-
snippet: [
|
|
675
|
+
snippet: [
|
|
676
|
+
'{% tint %}',
|
|
677
|
+
'- background: ${1:#1a1a2e}',
|
|
678
|
+
'- primary: ${2:#e94560}',
|
|
679
|
+
'- accent: ${3:#0f3460}',
|
|
680
|
+
'{% /tint %}',
|
|
681
|
+
],
|
|
495
682
|
}),
|
|
496
683
|
showcase: defineRune({
|
|
497
684
|
name: 'showcase',
|
|
@@ -513,7 +700,8 @@ export const runes = {
|
|
|
513
700
|
schema: blog,
|
|
514
701
|
description: 'Blog post listing with filtering, sorting, and multiple layouts. Displays pages from a content folder as a navigable blog index.',
|
|
515
702
|
seoType: 'Blog',
|
|
516
|
-
typeName: 'Blog',
|
|
703
|
+
typeName: 'Blog',
|
|
704
|
+
schemaOrgType: 'Blog',
|
|
517
705
|
category: 'Semantic',
|
|
518
706
|
}),
|
|
519
707
|
xref: defineRune({
|
|
@@ -525,7 +713,7 @@ export const runes = {
|
|
|
525
713
|
expand: defineRune({
|
|
526
714
|
name: 'expand',
|
|
527
715
|
schema: expand,
|
|
528
|
-
description:
|
|
716
|
+
description: "Substitute a registered entity's source content inline. Reads the entity's sourceFile via the plan plugin (or any plugin that registers extractable entities) and inlines it. Symmetric with `xref`: same lookup chain, different output (content rather than a link).",
|
|
529
717
|
typeName: 'Expand',
|
|
530
718
|
category: 'Content',
|
|
531
719
|
snippet: ['{% expand "${1:SPEC-001}" /%}'],
|
|
@@ -536,7 +724,11 @@ export const runes = {
|
|
|
536
724
|
description: 'Inline pill that flags a piece of content (status, category, recency, tag). Visual variant from the universal metadata-system dimensions (sentiment, rank, type).',
|
|
537
725
|
typeName: 'Badge',
|
|
538
726
|
category: 'Content',
|
|
539
|
-
snippet: [
|
|
727
|
+
snippet: [
|
|
728
|
+
'{% badge sentiment="${1|positive,negative,caution,neutral|}" %}',
|
|
729
|
+
'${2:Label}',
|
|
730
|
+
'{% /badge %}',
|
|
731
|
+
],
|
|
540
732
|
}),
|
|
541
733
|
bar: defineRune({
|
|
542
734
|
name: 'bar',
|
|
@@ -553,7 +745,12 @@ export const runes = {
|
|
|
553
745
|
description: 'Block-level wrapper that renders the SPEC-079 definition-list layout primitive over a markdown list. Each `- **Term:** value` item becomes a <dt>/<dd> pair. Inline runes compose naturally inside <dd>.',
|
|
554
746
|
typeName: 'Deflist',
|
|
555
747
|
category: 'Content',
|
|
556
|
-
snippet: [
|
|
748
|
+
snippet: [
|
|
749
|
+
'{% deflist %}',
|
|
750
|
+
'- **${1:Term}:** ${2:Value}',
|
|
751
|
+
'- **${3:Term}:** ${4:Value}',
|
|
752
|
+
'{% /deflist %}',
|
|
753
|
+
],
|
|
557
754
|
}),
|
|
558
755
|
collection: defineRune({
|
|
559
756
|
name: 'collection',
|
|
@@ -585,7 +782,9 @@ export const runes = {
|
|
|
585
782
|
description: 'Path-based inline reference to a project file — third member of the Registry family beside `xref` (id → link) and `expand` (id → inlined content). Resolves to a deep-link `<a>` pointing at `{repoUrl}/blob/{repoBranch}/{path}#L{start}-L{end}` on GitHub. With `preview="drawer"`, hoists a drawer containing the file\'s snippet and a "View source on GitHub →" footer link, leaving an inline link at the call site that opens it.',
|
|
586
783
|
typeName: 'FileRef',
|
|
587
784
|
category: 'Content',
|
|
588
|
-
snippet: [
|
|
785
|
+
snippet: [
|
|
786
|
+
'{% file-ref path="${1:packages/types/src/token-contract.ts}" lines="${2:42-58}" label="${3:ThemeTokensConfig}" /%}',
|
|
787
|
+
],
|
|
589
788
|
}),
|
|
590
789
|
progress: defineRune({
|
|
591
790
|
name: 'progress',
|
|
@@ -601,7 +800,12 @@ export const runes = {
|
|
|
601
800
|
description: 'A generic, self-contained content card. The body splits on `---` into [media] / body / [footer]: the media zone holds any content (image, codegroup, sandbox, …) and lays out beside the body on wide screens / as a full-bleed header on mobile; the footer is a muted meta row. Optional `href` makes the whole card a link. Knows nothing about the registry — usable standalone or inside a collection body template.',
|
|
602
801
|
typeName: 'Card',
|
|
603
802
|
category: 'Content',
|
|
604
|
-
snippet: [
|
|
803
|
+
snippet: [
|
|
804
|
+
'{% card href="${1:/posts/slug/}" %}',
|
|
805
|
+
'### ${2:Title}',
|
|
806
|
+
'${3:A short summary.}',
|
|
807
|
+
'{% /card %}',
|
|
808
|
+
],
|
|
605
809
|
}),
|
|
606
810
|
};
|
|
607
811
|
/** Markdoc-compatible tags map derived from runes + Markdoc built-in tags.
|
|
@@ -615,6 +819,23 @@ export const tags = {
|
|
|
615
819
|
...runeTagMap(runes),
|
|
616
820
|
link,
|
|
617
821
|
...Markdoc.tags,
|
|
822
|
+
// Markdoc's `if` / `else` declare `primary: { type: Object }`, which is a
|
|
823
|
+
// statement about *expression syntax*: `{% if $var %}` and
|
|
824
|
+
// `{% if equals(a, b) %}` both pass an AST node, and an AST node is an
|
|
825
|
+
// object. It stops being true in this pipeline, because preprocess hooks
|
|
826
|
+
// substitute variables for their values before the page is validated —
|
|
827
|
+
// `bindRow` turns `{% if $row.required %}` into `{% if true %}`, and a
|
|
828
|
+
// boolean is not an Object.
|
|
829
|
+
//
|
|
830
|
+
// SPEC-132's validation pass reported that 3,302 times across `site/`
|
|
831
|
+
// (WORK-557), every one a false positive. The type check cannot catch a
|
|
832
|
+
// real authoring error here: pre-substitution every legal form is already
|
|
833
|
+
// an object, and post-substitution every value is legal. So the constraint
|
|
834
|
+
// is dropped rather than the findings filtered — the root cause, not the
|
|
835
|
+
// symptom. `render: false` is preserved; it is what keeps the condition out
|
|
836
|
+
// of the rendered output.
|
|
837
|
+
if: { ...Markdoc.tags.if, attributes: { primary: { render: false } } },
|
|
838
|
+
else: { ...Markdoc.tags.else, attributes: { primary: { render: false } } },
|
|
618
839
|
};
|
|
619
840
|
export const nodes = {
|
|
620
841
|
heading,
|