@refrakt-md/runes 0.15.0 → 0.16.1
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 +4 -0
- package/dist/aggregate-resolve.d.ts.map +1 -0
- package/dist/aggregate-resolve.js +209 -0
- package/dist/aggregate-resolve.js.map +1 -0
- package/dist/collection-helpers.d.ts +101 -0
- package/dist/collection-helpers.d.ts.map +1 -0
- package/dist/collection-helpers.js +206 -0
- package/dist/collection-helpers.js.map +1 -0
- package/dist/collection-resolve.d.ts +5 -0
- package/dist/collection-resolve.d.ts.map +1 -0
- package/dist/collection-resolve.js +209 -0
- package/dist/collection-resolve.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +87 -5
- package/dist/config.js.map +1 -1
- package/dist/deferred-body.d.ts +19 -0
- package/dist/deferred-body.d.ts.map +1 -0
- package/dist/deferred-body.js +70 -0
- package/dist/deferred-body.js.map +1 -0
- package/dist/drawer-pipeline.d.ts +72 -1
- package/dist/drawer-pipeline.d.ts.map +1 -1
- package/dist/drawer-pipeline.js +242 -1
- package/dist/drawer-pipeline.js.map +1 -1
- package/dist/expand-pipeline.js +25 -16
- package/dist/expand-pipeline.js.map +1 -1
- package/dist/field-match.d.ts +43 -0
- package/dist/field-match.d.ts.map +1 -0
- package/dist/field-match.js +121 -0
- package/dist/field-match.js.map +1 -0
- package/dist/file-ref-resolve.d.ts +22 -0
- package/dist/file-ref-resolve.d.ts.map +1 -0
- package/dist/file-ref-resolve.js +233 -0
- package/dist/file-ref-resolve.js.map +1 -0
- package/dist/functions.d.ts +36 -0
- package/dist/functions.d.ts.map +1 -0
- package/dist/functions.js +74 -0
- package/dist/functions.js.map +1 -0
- package/dist/index.d.ts +33 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +80 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/index.d.ts +6 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +9 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/nodes.d.ts.map +1 -1
- package/dist/nodes.js +68 -9
- package/dist/nodes.js.map +1 -1
- package/dist/outline-scope.d.ts +17 -0
- package/dist/outline-scope.d.ts.map +1 -1
- package/dist/outline-scope.js +59 -0
- package/dist/outline-scope.js.map +1 -1
- package/dist/relationships-resolve.d.ts +4 -0
- package/dist/relationships-resolve.d.ts.map +1 -0
- package/dist/relationships-resolve.js +180 -0
- package/dist/relationships-resolve.js.map +1 -0
- package/dist/snippet-pipeline.d.ts +7 -5
- package/dist/snippet-pipeline.d.ts.map +1 -1
- package/dist/snippet-pipeline.js +32 -13
- package/dist/snippet-pipeline.js.map +1 -1
- package/dist/tags/aggregate.d.ts +19 -0
- package/dist/tags/aggregate.d.ts.map +1 -0
- package/dist/tags/aggregate.js +59 -0
- package/dist/tags/aggregate.js.map +1 -0
- package/dist/tags/card.d.ts +25 -0
- package/dist/tags/card.d.ts.map +1 -0
- package/dist/tags/card.js +138 -0
- package/dist/tags/card.js.map +1 -0
- package/dist/tags/codegroup.d.ts.map +1 -1
- package/dist/tags/codegroup.js +37 -1
- package/dist/tags/codegroup.js.map +1 -1
- package/dist/tags/collection.d.ts +10 -0
- package/dist/tags/collection.d.ts.map +1 -0
- package/dist/tags/collection.js +54 -0
- package/dist/tags/collection.js.map +1 -0
- package/dist/tags/conversation.d.ts.map +1 -1
- package/dist/tags/conversation.js +26 -6
- package/dist/tags/conversation.js.map +1 -1
- package/dist/tags/diff.d.ts.map +1 -1
- package/dist/tags/diff.js +85 -18
- package/dist/tags/diff.js.map +1 -1
- package/dist/tags/drawer.d.ts.map +1 -1
- package/dist/tags/drawer.js +32 -2
- package/dist/tags/drawer.js.map +1 -1
- package/dist/tags/file-ref.d.ts +21 -0
- package/dist/tags/file-ref.d.ts.map +1 -0
- package/dist/tags/file-ref.js +88 -0
- package/dist/tags/file-ref.js.map +1 -0
- package/dist/tags/progress.d.ts +9 -0
- package/dist/tags/progress.d.ts.map +1 -0
- package/dist/tags/progress.js +96 -0
- package/dist/tags/progress.js.map +1 -0
- package/dist/tags/relationships.d.ts +12 -0
- package/dist/tags/relationships.d.ts.map +1 -0
- package/dist/tags/relationships.js +62 -0
- package/dist/tags/relationships.js.map +1 -0
- package/dist/tags/snippet.d.ts.map +1 -1
- package/dist/tags/snippet.js +10 -0
- package/dist/tags/snippet.js.map +1 -1
- package/dist/tags/xref.d.ts.map +1 -1
- package/dist/tags/xref.js +9 -0
- package/dist/tags/xref.js.map +1 -1
- package/dist/xref-preview-resolve.d.ts +35 -0
- package/dist/xref-preview-resolve.d.ts.map +1 -0
- package/dist/xref-preview-resolve.js +188 -0
- package/dist/xref-preview-resolve.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* collection postProcess resolver (SPEC-070).
|
|
3
|
+
*
|
|
4
|
+
* Walks the serialized renderable, finds `collection` sentinels, queries the
|
|
5
|
+
* registry (filter / sort / group / limit via the shared field-match grammar),
|
|
6
|
+
* and renders either a per-entity body template (deferBody) or a built-in
|
|
7
|
+
* layout (list / cards / grid / table with `fields` projection).
|
|
8
|
+
*/
|
|
9
|
+
import Markdoc from '@markdoc/markdoc';
|
|
10
|
+
import { parseFieldMatch, matchesFieldMatch } from './field-match.js';
|
|
11
|
+
import { transformDeferredTemplate } from './deferred-body.js';
|
|
12
|
+
import { humanize } from './functions.js';
|
|
13
|
+
import { fieldValue, titleLink as titleLinkFor, sortEntities, groupEntities, projectItem, buildOrdering, splitBodyZones, renderItemTemplate, renderGroupAccordion, } from './collection-helpers.js';
|
|
14
|
+
import { COLLECTION_SENTINEL } from './tags/collection.js';
|
|
15
|
+
const { Tag, Ast } = Markdoc;
|
|
16
|
+
function titleLink(e) {
|
|
17
|
+
return titleLinkFor(e, 'rf-collection');
|
|
18
|
+
}
|
|
19
|
+
function isTag(node) {
|
|
20
|
+
return Tag.isTag(node);
|
|
21
|
+
}
|
|
22
|
+
function metaContent(tag, field) {
|
|
23
|
+
for (const child of tag.children ?? []) {
|
|
24
|
+
if (isTag(child) && child.name === 'meta' && child.attributes['data-field'] === field) {
|
|
25
|
+
return String(child.attributes.content ?? '');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return '';
|
|
29
|
+
}
|
|
30
|
+
function hasSentinel(tag) {
|
|
31
|
+
return (tag.children ?? []).some((c) => isTag(c) && c.name === 'meta' && c.attributes['data-field'] === COLLECTION_SENTINEL);
|
|
32
|
+
}
|
|
33
|
+
function readQuery(tag) {
|
|
34
|
+
const limitRaw = metaContent(tag, 'collection-limit');
|
|
35
|
+
const limitNum = Number(limitRaw);
|
|
36
|
+
return {
|
|
37
|
+
types: metaContent(tag, 'collection-type').split(',').map((s) => s.trim()).filter(Boolean),
|
|
38
|
+
filter: metaContent(tag, 'collection-filter'),
|
|
39
|
+
sort: metaContent(tag, 'collection-sort'),
|
|
40
|
+
group: metaContent(tag, 'collection-group'),
|
|
41
|
+
groupDisplay: metaContent(tag, 'collection-group-display') || 'headings',
|
|
42
|
+
limit: limitRaw && Number.isFinite(limitNum) && limitNum > 0 ? Math.floor(limitNum) : undefined,
|
|
43
|
+
fields: metaContent(tag, 'collection-fields').split(',').map((s) => s.trim()).filter(Boolean),
|
|
44
|
+
layout: metaContent(tag, 'collection-layout') || 'list',
|
|
45
|
+
bodySource: metaContent(tag, 'collection-body'),
|
|
46
|
+
empty: metaContent(tag, 'collection-empty'),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function renderBuiltInItem(e, q) {
|
|
50
|
+
const fieldSpans = q.fields.map((f) => new Tag('span', { class: 'rf-collection__field', 'data-field': f }, [fieldValue(e, f)]));
|
|
51
|
+
if (q.layout === 'list') {
|
|
52
|
+
return new Tag('div', { class: 'rf-collection__item', 'data-entity-id': e.id }, [titleLink(e)]);
|
|
53
|
+
}
|
|
54
|
+
// cards / grid
|
|
55
|
+
return new Tag('article', { class: 'rf-collection__card', 'data-entity-id': e.id }, [titleLink(e), ...fieldSpans]);
|
|
56
|
+
}
|
|
57
|
+
/** Split a captured body source into table columns by heading (SPEC-070 / WORK-264). */
|
|
58
|
+
function splitColumns(bodySource, ctx, pageUrl) {
|
|
59
|
+
const ast = Markdoc.parse(bodySource);
|
|
60
|
+
const columns = [];
|
|
61
|
+
let current = null;
|
|
62
|
+
for (const node of ast.children) {
|
|
63
|
+
if (node.type === 'heading') {
|
|
64
|
+
const label = Markdoc.format(node).replace(/^#+\s*/, '').trim();
|
|
65
|
+
if (label.includes('$item')) {
|
|
66
|
+
ctx.warn(`collection: $item in a table column heading ("${label}") is not per-row; use a static label`, pageUrl);
|
|
67
|
+
}
|
|
68
|
+
current = { label, cellNodes: [] };
|
|
69
|
+
columns.push({ label, cellSource: '' });
|
|
70
|
+
}
|
|
71
|
+
else if (current) {
|
|
72
|
+
current.cellNodes.push(node);
|
|
73
|
+
columns[columns.length - 1].cellSource = Markdoc.format(new Ast.Node('document', {}, current.cellNodes));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return columns;
|
|
77
|
+
}
|
|
78
|
+
function renderHeadingTable(entities, bodySource, embedConfig, ctx, pageUrl) {
|
|
79
|
+
const columns = splitColumns(bodySource, ctx, pageUrl);
|
|
80
|
+
if (!embedConfig) {
|
|
81
|
+
ctx.error('collection — table column templates present but no embedConfig threaded through the pipeline', pageUrl);
|
|
82
|
+
return new Tag('table', { class: 'rf-collection__table' }, []);
|
|
83
|
+
}
|
|
84
|
+
const thead = new Tag('thead', {}, [new Tag('tr', {}, columns.map((c) => new Tag('th', {}, [c.label])))]);
|
|
85
|
+
const rows = entities.map((e) => {
|
|
86
|
+
const item = projectItem(e);
|
|
87
|
+
const cells = columns.map((c) => {
|
|
88
|
+
const out = transformDeferredTemplate(c.cellSource, embedConfig, { item });
|
|
89
|
+
const kids = Array.isArray(out) ? out : [out];
|
|
90
|
+
return new Tag('td', {}, kids);
|
|
91
|
+
});
|
|
92
|
+
return new Tag('tr', { 'data-entity-id': e.id }, cells);
|
|
93
|
+
});
|
|
94
|
+
return new Tag('table', { class: 'rf-collection__table' }, [thead, new Tag('tbody', {}, rows)]);
|
|
95
|
+
}
|
|
96
|
+
function renderTable(entities, q) {
|
|
97
|
+
const headCells = [new Tag('th', {}, ['Title']), ...q.fields.map((f) => new Tag('th', {}, [humanize(f)]))];
|
|
98
|
+
const thead = new Tag('thead', {}, [new Tag('tr', {}, headCells)]);
|
|
99
|
+
const rows = entities.map((e) => {
|
|
100
|
+
const cells = [
|
|
101
|
+
new Tag('td', {}, [titleLink(e)]),
|
|
102
|
+
...q.fields.map((f) => new Tag('td', { 'data-field': f }, [fieldValue(e, f)])),
|
|
103
|
+
];
|
|
104
|
+
return new Tag('tr', { 'data-entity-id': e.id }, cells);
|
|
105
|
+
});
|
|
106
|
+
return new Tag('table', { class: 'rf-collection__table' }, [thead, new Tag('tbody', {}, rows)]);
|
|
107
|
+
}
|
|
108
|
+
function renderBody(entities, bodySource, embedConfig, ctx, pageUrl) {
|
|
109
|
+
if (!embedConfig) {
|
|
110
|
+
ctx.error('collection — body template present but no embedConfig threaded through the pipeline', pageUrl);
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
return entities.map((e) => {
|
|
114
|
+
const item = projectItem(e);
|
|
115
|
+
const out = transformDeferredTemplate(bodySource, embedConfig, { item });
|
|
116
|
+
const children = Array.isArray(out) ? out : [out];
|
|
117
|
+
return new Tag('div', { class: 'rf-collection__item', 'data-entity-id': e.id, 'data-block': '' }, children);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function renderGroupOrFlat(entities, q, ordering, renderItems) {
|
|
121
|
+
if (!q.group)
|
|
122
|
+
return renderItems(entities);
|
|
123
|
+
const groups = groupEntities(entities, q.group, ordering);
|
|
124
|
+
if (q.groupDisplay === 'accordion') {
|
|
125
|
+
return renderGroupAccordion([...groups].map(([name, es]) => ({ key: name, label: name, count: es.length, nodes: renderItems(es) })));
|
|
126
|
+
}
|
|
127
|
+
const out = [];
|
|
128
|
+
for (const [name, es] of groups) {
|
|
129
|
+
out.push(new Tag('div', { class: 'rf-collection__group', 'data-group': name }, [
|
|
130
|
+
new Tag('h3', { class: 'rf-collection__group-title' }, [name]),
|
|
131
|
+
...renderItems(es),
|
|
132
|
+
]));
|
|
133
|
+
}
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
136
|
+
function resolveOne(tag, registry, embedConfig, ordering, ctx, pageUrl) {
|
|
137
|
+
const q = readQuery(tag);
|
|
138
|
+
// Query
|
|
139
|
+
let entities = [];
|
|
140
|
+
for (const type of q.types)
|
|
141
|
+
entities.push(...registry.getAll(type));
|
|
142
|
+
if (q.filter) {
|
|
143
|
+
const parsed = parseFieldMatch(q.filter);
|
|
144
|
+
for (const w of parsed.warnings)
|
|
145
|
+
ctx.warn(`collection filter: ${w}`, pageUrl);
|
|
146
|
+
entities = entities.filter((e) => matchesFieldMatch(e, parsed));
|
|
147
|
+
}
|
|
148
|
+
entities = sortEntities(entities, q.sort, ordering);
|
|
149
|
+
// `$count` = total matched (pre-limit); `$shown` = rendered (post-limit).
|
|
150
|
+
const matched = entities.length;
|
|
151
|
+
if (q.limit !== undefined && entities.length > q.limit)
|
|
152
|
+
entities = entities.slice(0, q.limit);
|
|
153
|
+
const counts = { count: matched, shown: entities.length };
|
|
154
|
+
const zones = splitBodyZones(q.bodySource);
|
|
155
|
+
const tmpl = zones.template;
|
|
156
|
+
const attrs = { ...tag.attributes, 'data-type': q.types.join(','), 'data-layout': q.layout };
|
|
157
|
+
// Empty state (SPEC-072 Cap 5): fallback zone, else the `empty` attribute,
|
|
158
|
+
// else nothing. No preamble when empty.
|
|
159
|
+
if (entities.length === 0) {
|
|
160
|
+
const out = [];
|
|
161
|
+
if (zones.fallback && embedConfig) {
|
|
162
|
+
out.push(new Tag('div', { 'data-name': 'empty', class: 'rf-collection__empty' }, renderItemTemplate(zones.fallback, embedConfig, counts)));
|
|
163
|
+
}
|
|
164
|
+
else if (q.empty) {
|
|
165
|
+
out.push(new Tag('div', { 'data-name': 'empty', class: 'rf-collection__empty' }, [q.empty]));
|
|
166
|
+
}
|
|
167
|
+
return new Tag(tag.name, attrs, out);
|
|
168
|
+
}
|
|
169
|
+
// Render items from the template zone (or the built-in when it's empty).
|
|
170
|
+
let children;
|
|
171
|
+
if (q.layout === 'table' && tmpl) {
|
|
172
|
+
// Heading-delimited column templates (WORK-264).
|
|
173
|
+
children = renderGroupOrFlat(entities, q, ordering, (es) => [renderHeadingTable(es, tmpl, embedConfig, ctx, pageUrl)]);
|
|
174
|
+
}
|
|
175
|
+
else if (tmpl) {
|
|
176
|
+
children = renderGroupOrFlat(entities, q, ordering, (es) => renderBody(es, tmpl, embedConfig, ctx, pageUrl));
|
|
177
|
+
}
|
|
178
|
+
else if (q.layout === 'table') {
|
|
179
|
+
children = renderGroupOrFlat(entities, q, ordering, (es) => [renderTable(es, q)]);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
children = renderGroupOrFlat(entities, q, ordering, (es) => es.map((e) => renderBuiltInItem(e, q)));
|
|
183
|
+
}
|
|
184
|
+
const itemsDiv = new Tag('div', { 'data-name': 'items', class: 'rf-collection__items' }, children);
|
|
185
|
+
// Preamble renders once, above items, only when non-empty.
|
|
186
|
+
const head = [];
|
|
187
|
+
if (zones.preamble && embedConfig) {
|
|
188
|
+
head.push(new Tag('div', { 'data-name': 'preamble', class: 'rf-collection__preamble' }, renderItemTemplate(zones.preamble, embedConfig, counts)));
|
|
189
|
+
}
|
|
190
|
+
return new Tag(tag.name, attrs, [...head, itemsDiv]);
|
|
191
|
+
}
|
|
192
|
+
export function resolveCollections(renderable, pageUrl, registry, embedConfig, ctx) {
|
|
193
|
+
const ordering = buildOrdering(embedConfig);
|
|
194
|
+
const walk = (node) => {
|
|
195
|
+
if (Array.isArray(node))
|
|
196
|
+
return node.map(walk);
|
|
197
|
+
if (!isTag(node))
|
|
198
|
+
return node;
|
|
199
|
+
const tag = node;
|
|
200
|
+
if (tag.attributes?.['data-rune'] === 'collection' && hasSentinel(tag)) {
|
|
201
|
+
return resolveOne(tag, registry, embedConfig, ordering, ctx, pageUrl);
|
|
202
|
+
}
|
|
203
|
+
if (!tag.children || tag.children.length === 0)
|
|
204
|
+
return tag;
|
|
205
|
+
return new Tag(tag.name, tag.attributes, tag.children.map(walk));
|
|
206
|
+
};
|
|
207
|
+
return walk(renderable);
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=collection-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-resolve.js","sourceRoot":"","sources":["../src/collection-resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -57,6 +57,13 @@ export interface CorePipelineHooksOptions {
|
|
|
57
57
|
* through `aggregate` into the postProcess `coreData` shape so the xref
|
|
58
58
|
* resolver can use them as a URL-resolution fallback. */
|
|
59
59
|
xrefPatterns?: CompiledXrefPattern[];
|
|
60
|
+
/** Canonical GitHub (or compatible) repository URL — `SiteConfig.repoUrl`
|
|
61
|
+
* threaded through to the file-ref resolver (SPEC-078) so it can build
|
|
62
|
+
* deep-link source URLs of the form `{repoUrl}/blob/{ref}/{path}#L{...}`. */
|
|
63
|
+
repoUrl?: string;
|
|
64
|
+
/** Git ref appended to GitHub source URLs (branch / tag / commit SHA).
|
|
65
|
+
* Defaults to `"main"` when omitted. */
|
|
66
|
+
repoBranch?: string;
|
|
60
67
|
/** Merged Markdoc transform config (tags + nodes from core + every
|
|
61
68
|
* loaded plugin) plus the project root. Threaded through `aggregate`
|
|
62
69
|
* so the expand postProcess (SPEC-066) can re-transform embedded
|
|
@@ -65,6 +72,12 @@ export interface CorePipelineHooksOptions {
|
|
|
65
72
|
embedConfig?: {
|
|
66
73
|
tags: Record<string, unknown>;
|
|
67
74
|
nodes: Record<string, unknown>;
|
|
75
|
+
functions?: Record<string, unknown>;
|
|
76
|
+
/** Parsed partials from the content tree's `_partials/` and any
|
|
77
|
+
* registered file-root namespaces. Threaded through so partial
|
|
78
|
+
* references inside deferred-body templates (collection, expand)
|
|
79
|
+
* resolve the same way they do in top-level page transforms. */
|
|
80
|
+
partials?: Record<string, unknown>;
|
|
68
81
|
projectRoot?: string;
|
|
69
82
|
};
|
|
70
83
|
}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA+B,MAAM,uBAAuB,CAAC;AAEtF,OAAO,KAAK,EAAE,mBAAmB,EAAmB,cAAc,EAAkB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAS/H,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA+B,MAAM,uBAAuB,CAAC;AAEtF,OAAO,KAAK,EAAE,mBAAmB,EAAmB,cAAc,EAAkB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAS/H,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAkF9D;gFACgF;AAChF,eAAO,MAAM,UAAU,EAAE,WA6wBxB,CAAC;AAEF,sGAAsG;AACtG,eAAO,MAAM,UAAU,aAAa,CAAC;AAIrC,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,EAAE,CAAC;CACzB;AA0vCD,UAAU,YAAY;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAiLD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CACnC,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE;IACT,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChI,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACnC;;;uBAGmB;IACnB,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACrC,EACD,GAAG,EAAE,eAAe;AACpB;;yEAEyE;AACzE,cAAc,CAAC,EAAE,OAAO,EAAE,GACxB,OAAO,CAqBT;AAED,2DAA2D;AAC3D,MAAM,WAAW,wBAAwB;IACxC;;8DAE0D;IAC1D,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC;;kFAE8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;6CACyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;2EAIuE;IACvE,WAAW,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC;;;yEAGiE;QACjE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,WAAW,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACF;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,wBAA6B,GAAG,mBAAmB,CA0ShG;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,EAAE,mBAA+C,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -7,9 +7,14 @@ import { NAV_AUTO_SENTINEL, NAV_COLLAPSED_AUTO } from './tags/nav.js';
|
|
|
7
7
|
import { PAGINATION_AUTO_SENTINEL } from './tags/pagination.js';
|
|
8
8
|
import { resolveXrefs } from './xref-resolve.js';
|
|
9
9
|
import { preprocessSnippets, wrapStandaloneSnippets } from './snippet-pipeline.js';
|
|
10
|
-
import { registerDrawers, resolveAutoDrawerTitleLevels } from './drawer-pipeline.js';
|
|
11
|
-
import {
|
|
10
|
+
import { registerDrawers, resolveAutoDrawerTitleLevels, hoistPreviewDrawers } from './drawer-pipeline.js';
|
|
11
|
+
import { resolveFileRefs } from './file-ref-resolve.js';
|
|
12
|
+
import { resolveXrefPreviews } from './xref-preview-resolve.js';
|
|
13
|
+
import { applyOutlineScopeWalkers, harvestHeadingsFromRenderable } from './outline-scope.js';
|
|
12
14
|
import { resolveExpands } from './expand-pipeline.js';
|
|
15
|
+
import { resolveCollections } from './collection-resolve.js';
|
|
16
|
+
import { resolveRelationships } from './relationships-resolve.js';
|
|
17
|
+
import { resolveAggregates } from './aggregate-resolve.js';
|
|
13
18
|
// ─── Budget postTransform helpers ───
|
|
14
19
|
const BUDGET_CURRENCY_SYMBOLS = {
|
|
15
20
|
USD: '$', EUR: '€', GBP: '£', JPY: '¥', CNY: '¥',
|
|
@@ -150,6 +155,43 @@ export const coreConfig = {
|
|
|
150
155
|
* class="rf-expand" data-rune="expand">`. Engine config provides the
|
|
151
156
|
* block name for CSS tree-shaking. */
|
|
152
157
|
Expand: { block: 'expand' },
|
|
158
|
+
/* Badge emits a complete `<span class="rf-badge" data-rune="badge">`
|
|
159
|
+
* directly from its schema and needs no engine post-processing, but
|
|
160
|
+
* still needs an entry in the theme config so `computeUsedCssBlocks`
|
|
161
|
+
* includes `badge.css` in CSS tree-shaking when a badge is rendered. */
|
|
162
|
+
Badge: { block: 'badge' },
|
|
163
|
+
/* Collection emits a sentinel during transform; the postProcess hook
|
|
164
|
+
* (`resolveCollections`) fills it with queried entities. Engine config
|
|
165
|
+
* provides the block name for CSS tree-shaking. */
|
|
166
|
+
Collection: { block: 'collection' },
|
|
167
|
+
Relationships: { block: 'relationships' },
|
|
168
|
+
/* file-ref emits a sentinel during transform; resolveFileRefs in
|
|
169
|
+
* the postProcess chain binds it to a GitHub URL anchor (and to
|
|
170
|
+
* a hoist sentinel for the drawer pipeline when preview="drawer").
|
|
171
|
+
* Engine config entry exists so the BEM block / data-rune are
|
|
172
|
+
* registered and CSS tree-shaking includes file-ref.css when
|
|
173
|
+
* authors use the rune. */
|
|
174
|
+
FileRef: { block: 'file-ref' },
|
|
175
|
+
/* Aggregate emits a sentinel during transform; the postProcess hook
|
|
176
|
+
* (`resolveAggregates`) fills it with either a single integer (no-body
|
|
177
|
+
* form) or a body-zoned breakdown. Engine config provides the block
|
|
178
|
+
* name for CSS tree-shaking. */
|
|
179
|
+
Aggregate: { block: 'aggregate' },
|
|
180
|
+
Progress: {
|
|
181
|
+
block: 'progress',
|
|
182
|
+
modifiers: { sentiment: { source: 'meta' } },
|
|
183
|
+
},
|
|
184
|
+
/* card — generic content card. The `layout` meta drives the shared
|
|
185
|
+
* split layout (split.css, data-attribute-keyed); data-media-position
|
|
186
|
+
* hoists the media to a full-bleed header on mobile. Named parts
|
|
187
|
+
* (media/content/body/footer/link) get rf-card__* from data-name. */
|
|
188
|
+
Card: {
|
|
189
|
+
block: 'card',
|
|
190
|
+
rootAttributes: { 'data-media-position': 'top' },
|
|
191
|
+
modifiers: {
|
|
192
|
+
layout: { source: 'meta', default: 'stacked' },
|
|
193
|
+
},
|
|
194
|
+
},
|
|
153
195
|
Embed: {
|
|
154
196
|
block: 'embed',
|
|
155
197
|
defaultDensity: 'compact',
|
|
@@ -331,8 +373,8 @@ export const coreConfig = {
|
|
|
331
373
|
size: { source: 'meta', default: 'md' },
|
|
332
374
|
shortcut: { source: 'meta', noBemClass: true },
|
|
333
375
|
},
|
|
334
|
-
sections: { header: 'header', body: 'body' },
|
|
335
|
-
editHints: { title: 'inline', body: 'none', close: 'none' },
|
|
376
|
+
sections: { header: 'header', body: 'body', footer: 'footer' },
|
|
377
|
+
editHints: { title: 'inline', body: 'none', close: 'none', footer: 'none' },
|
|
336
378
|
},
|
|
337
379
|
Figure: {
|
|
338
380
|
block: 'figure',
|
|
@@ -2047,6 +2089,8 @@ navSearchScope) {
|
|
|
2047
2089
|
export function createCorePipelineHooks(opts = {}) {
|
|
2048
2090
|
const xrefPatterns = opts.xrefPatterns ?? [];
|
|
2049
2091
|
const embedConfig = opts.embedConfig;
|
|
2092
|
+
const repoUrl = opts.repoUrl;
|
|
2093
|
+
const repoBranch = opts.repoBranch;
|
|
2050
2094
|
return {
|
|
2051
2095
|
preprocess: preprocessSnippets,
|
|
2052
2096
|
register(pages, registry, ctx) {
|
|
@@ -2117,7 +2161,7 @@ export function createCorePipelineHooks(opts = {}) {
|
|
|
2117
2161
|
draft: e.data.draft || false,
|
|
2118
2162
|
frontmatter: e.data,
|
|
2119
2163
|
}));
|
|
2120
|
-
return { pageTree, breadcrumbPaths, pagesByUrl, headingIndex, allPosts, registry, xrefPatterns, embedConfig };
|
|
2164
|
+
return { pageTree, breadcrumbPaths, pagesByUrl, headingIndex, allPosts, registry, xrefPatterns, embedConfig, repoUrl, repoBranch };
|
|
2121
2165
|
},
|
|
2122
2166
|
postProcess(page, aggregated, ctx) {
|
|
2123
2167
|
const coreData = aggregated['__core__'];
|
|
@@ -2138,10 +2182,38 @@ export function createCorePipelineHooks(opts = {}) {
|
|
|
2138
2182
|
// resolution so the rewritten title doesn't carry the sentinel
|
|
2139
2183
|
// attribute into the rendered HTML.
|
|
2140
2184
|
renderable = resolveAutoDrawerTitleLevels(renderable);
|
|
2185
|
+
// SPEC-078 — bind file-ref sentinels to their GitHub URLs and emit
|
|
2186
|
+
// the hoist sentinel when `preview="drawer"`. Must run before
|
|
2187
|
+
// `hoistPreviewDrawers` (which consumes the hoist sentinel) and
|
|
2188
|
+
// before xref resolution (so the file-ref's inline `<a>` carries
|
|
2189
|
+
// its final href into the rendered tree).
|
|
2190
|
+
renderable = resolveFileRefs(renderable, page.url, coreData.repoUrl, coreData.repoBranch, ctx);
|
|
2191
|
+
// SPEC-078 — rewrite xref placeholders carrying `data-xref-preview=
|
|
2192
|
+
// "drawer"` into an inline `<a href="#drawer-{id}">` + hoist
|
|
2193
|
+
// sentinel. Non-preview xref placeholders pass through to
|
|
2194
|
+
// resolveXrefs later in the chain.
|
|
2195
|
+
renderable = resolveXrefPreviews(renderable, page.url, coreData.registry, ctx);
|
|
2196
|
+
// SPEC-078 hoist mechanism — collect `preview="drawer"` sentinels
|
|
2197
|
+
// from file-ref / xref / future reference runes and emit hoisted
|
|
2198
|
+
// `<section class="rf-drawer">` at the page root. Runs before
|
|
2199
|
+
// expand resolution so an xref-preview drawer's body (which uses
|
|
2200
|
+
// the expand resolver internally) is resolved by the same pass.
|
|
2201
|
+
renderable = hoistPreviewDrawers(renderable, page.url, coreData.registry, coreData.embedConfig?.projectRoot, ctx);
|
|
2141
2202
|
// SPEC-066 expand resolution — substitutes embedded entity content
|
|
2142
2203
|
// before xref runs so refs inside substituted content are resolved
|
|
2143
2204
|
// by the same pass as host-page refs.
|
|
2144
2205
|
renderable = resolveExpands(renderable, page.url, coreData.registry, coreData.xrefPatterns ?? [], coreData.embedConfig, ctx);
|
|
2206
|
+
// SPEC-070 collection resolution — runs after expand and before xref so
|
|
2207
|
+
// item-template `{% ref %}`s are resolved by the same xref pass.
|
|
2208
|
+
renderable = resolveCollections(renderable, page.url, coreData.registry, coreData.embedConfig, ctx);
|
|
2209
|
+
// SPEC-072 relationships resolution — same placement rationale as
|
|
2210
|
+
// collection: after expand, before xref (so item-template `{% ref %}`s
|
|
2211
|
+
// resolve in the same xref pass).
|
|
2212
|
+
renderable = resolveRelationships(renderable, page.url, coreData.registry, coreData.embedConfig, ctx);
|
|
2213
|
+
// SPEC-076 aggregate resolution — same placement as collection /
|
|
2214
|
+
// relationships: after expand, before xref (so any `{% ref %}` inside
|
|
2215
|
+
// the body template resolves in the same xref pass).
|
|
2216
|
+
renderable = resolveAggregates(renderable, page.url, coreData.registry, coreData.embedConfig, ctx);
|
|
2145
2217
|
renderable = resolveXrefs(renderable, page.url, coreData.registry, coreData.xrefPatterns ?? [], ctx);
|
|
2146
2218
|
// SPEC-062 standalone snippet wrap: turn `<pre data-snippet-source>`
|
|
2147
2219
|
// into `<figure class="rf-snippet">` when not inside a fence-consuming
|
|
@@ -2154,6 +2226,16 @@ export function createCorePipelineHooks(opts = {}) {
|
|
|
2154
2226
|
// see the final tree (including expand-substituted content once
|
|
2155
2227
|
// that lands in v0.15.0).
|
|
2156
2228
|
applyOutlineScopeWalkers(wrappedPage.renderable);
|
|
2229
|
+
// Refresh `page.headings` from the final renderable. Parse-time
|
|
2230
|
+
// `extractHeadings` only saw the raw AST — anything inlined by
|
|
2231
|
+
// postProcess (expand `level=N`, collection bodies) wouldn't make
|
|
2232
|
+
// it into the parse-time list, leaving the page TOC blind to those
|
|
2233
|
+
// headings. Skips `data-outline-scope` subtrees so peer-document
|
|
2234
|
+
// embeds stay isolated, matching the TOC walker.
|
|
2235
|
+
const harvested = harvestHeadingsFromRenderable(wrappedPage.renderable);
|
|
2236
|
+
if (harvested.length > 0 || wrappedPage.headings.length > 0) {
|
|
2237
|
+
return { ...wrappedPage, headings: harvested };
|
|
2238
|
+
}
|
|
2157
2239
|
return wrappedPage;
|
|
2158
2240
|
},
|
|
2159
2241
|
};
|