@refrakt-md/runes 0.15.0 → 0.16.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.
Files changed (73) hide show
  1. package/dist/aggregate-resolve.d.ts +4 -0
  2. package/dist/aggregate-resolve.d.ts.map +1 -0
  3. package/dist/aggregate-resolve.js +209 -0
  4. package/dist/aggregate-resolve.js.map +1 -0
  5. package/dist/collection-helpers.d.ts +101 -0
  6. package/dist/collection-helpers.d.ts.map +1 -0
  7. package/dist/collection-helpers.js +206 -0
  8. package/dist/collection-helpers.js.map +1 -0
  9. package/dist/collection-resolve.d.ts +5 -0
  10. package/dist/collection-resolve.d.ts.map +1 -0
  11. package/dist/collection-resolve.js +209 -0
  12. package/dist/collection-resolve.js.map +1 -0
  13. package/dist/config.d.ts +6 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +55 -1
  16. package/dist/config.js.map +1 -1
  17. package/dist/deferred-body.d.ts +19 -0
  18. package/dist/deferred-body.d.ts.map +1 -0
  19. package/dist/deferred-body.js +70 -0
  20. package/dist/deferred-body.js.map +1 -0
  21. package/dist/expand-pipeline.js +25 -16
  22. package/dist/expand-pipeline.js.map +1 -1
  23. package/dist/field-match.d.ts +43 -0
  24. package/dist/field-match.d.ts.map +1 -0
  25. package/dist/field-match.js +121 -0
  26. package/dist/field-match.js.map +1 -0
  27. package/dist/functions.d.ts +36 -0
  28. package/dist/functions.d.ts.map +1 -0
  29. package/dist/functions.js +74 -0
  30. package/dist/functions.js.map +1 -0
  31. package/dist/index.d.ts +25 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +63 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/lib/index.d.ts +6 -0
  36. package/dist/lib/index.d.ts.map +1 -1
  37. package/dist/lib/index.js +9 -0
  38. package/dist/lib/index.js.map +1 -1
  39. package/dist/nodes.d.ts.map +1 -1
  40. package/dist/nodes.js +6 -1
  41. package/dist/nodes.js.map +1 -1
  42. package/dist/outline-scope.d.ts +17 -0
  43. package/dist/outline-scope.d.ts.map +1 -1
  44. package/dist/outline-scope.js +59 -0
  45. package/dist/outline-scope.js.map +1 -1
  46. package/dist/relationships-resolve.d.ts +4 -0
  47. package/dist/relationships-resolve.d.ts.map +1 -0
  48. package/dist/relationships-resolve.js +180 -0
  49. package/dist/relationships-resolve.js.map +1 -0
  50. package/dist/tags/aggregate.d.ts +19 -0
  51. package/dist/tags/aggregate.d.ts.map +1 -0
  52. package/dist/tags/aggregate.js +59 -0
  53. package/dist/tags/aggregate.js.map +1 -0
  54. package/dist/tags/card.d.ts +25 -0
  55. package/dist/tags/card.d.ts.map +1 -0
  56. package/dist/tags/card.js +138 -0
  57. package/dist/tags/card.js.map +1 -0
  58. package/dist/tags/collection.d.ts +10 -0
  59. package/dist/tags/collection.d.ts.map +1 -0
  60. package/dist/tags/collection.js +54 -0
  61. package/dist/tags/collection.js.map +1 -0
  62. package/dist/tags/conversation.d.ts.map +1 -1
  63. package/dist/tags/conversation.js +26 -6
  64. package/dist/tags/conversation.js.map +1 -1
  65. package/dist/tags/progress.d.ts +9 -0
  66. package/dist/tags/progress.d.ts.map +1 -0
  67. package/dist/tags/progress.js +96 -0
  68. package/dist/tags/progress.js.map +1 -0
  69. package/dist/tags/relationships.d.ts +12 -0
  70. package/dist/tags/relationships.d.ts.map +1 -0
  71. package/dist/tags/relationships.js +62 -0
  72. package/dist/tags/relationships.js.map +1 -0
  73. 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
@@ -65,6 +65,12 @@ export interface CorePipelineHooksOptions {
65
65
  embedConfig?: {
66
66
  tags: Record<string, unknown>;
67
67
  nodes: Record<string, unknown>;
68
+ functions?: Record<string, unknown>;
69
+ /** Parsed partials from the content tree's `_partials/` and any
70
+ * registered file-root namespaces. Threaded through so partial
71
+ * references inside deferred-body templates (collection, expand)
72
+ * resolve the same way they do in top-level page transforms. */
73
+ partials?: Record<string, unknown>;
68
74
  projectRoot?: string;
69
75
  };
70
76
  }
@@ -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;AA6E9D;gFACgF;AAChF,eAAO,MAAM,UAAU,EAAE,WAwuBxB,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;;;;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,WAAW,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACF;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,wBAA6B,GAAG,mBAAmB,CAoNhG;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,EAAE,mBAA+C,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;AAgF9D;gFACgF;AAChF,eAAO,MAAM,UAAU,EAAE,WAswBxB,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;;;;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,CAiQhG;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,EAAE,mBAA+C,CAAC"}
package/dist/config.js CHANGED
@@ -8,8 +8,11 @@ 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
10
  import { registerDrawers, resolveAutoDrawerTitleLevels } from './drawer-pipeline.js';
11
- import { applyOutlineScopeWalkers } from './outline-scope.js';
11
+ import { applyOutlineScopeWalkers, harvestHeadingsFromRenderable } from './outline-scope.js';
12
12
  import { resolveExpands } from './expand-pipeline.js';
13
+ import { resolveCollections } from './collection-resolve.js';
14
+ import { resolveRelationships } from './relationships-resolve.js';
15
+ import { resolveAggregates } from './aggregate-resolve.js';
13
16
  // ─── Budget postTransform helpers ───
14
17
  const BUDGET_CURRENCY_SYMBOLS = {
15
18
  USD: '$', EUR: '€', GBP: '£', JPY: '¥', CNY: '¥',
@@ -150,6 +153,36 @@ export const coreConfig = {
150
153
  * class="rf-expand" data-rune="expand">`. Engine config provides the
151
154
  * block name for CSS tree-shaking. */
152
155
  Expand: { block: 'expand' },
156
+ /* Badge emits a complete `<span class="rf-badge" data-rune="badge">`
157
+ * directly from its schema and needs no engine post-processing, but
158
+ * still needs an entry in the theme config so `computeUsedCssBlocks`
159
+ * includes `badge.css` in CSS tree-shaking when a badge is rendered. */
160
+ Badge: { block: 'badge' },
161
+ /* Collection emits a sentinel during transform; the postProcess hook
162
+ * (`resolveCollections`) fills it with queried entities. Engine config
163
+ * provides the block name for CSS tree-shaking. */
164
+ Collection: { block: 'collection' },
165
+ Relationships: { block: 'relationships' },
166
+ /* Aggregate emits a sentinel during transform; the postProcess hook
167
+ * (`resolveAggregates`) fills it with either a single integer (no-body
168
+ * form) or a body-zoned breakdown. Engine config provides the block
169
+ * name for CSS tree-shaking. */
170
+ Aggregate: { block: 'aggregate' },
171
+ Progress: {
172
+ block: 'progress',
173
+ modifiers: { sentiment: { source: 'meta' } },
174
+ },
175
+ /* card — generic content card. The `layout` meta drives the shared
176
+ * split layout (split.css, data-attribute-keyed); data-media-position
177
+ * hoists the media to a full-bleed header on mobile. Named parts
178
+ * (media/content/body/footer/link) get rf-card__* from data-name. */
179
+ Card: {
180
+ block: 'card',
181
+ rootAttributes: { 'data-media-position': 'top' },
182
+ modifiers: {
183
+ layout: { source: 'meta', default: 'stacked' },
184
+ },
185
+ },
153
186
  Embed: {
154
187
  block: 'embed',
155
188
  defaultDensity: 'compact',
@@ -2142,6 +2175,17 @@ export function createCorePipelineHooks(opts = {}) {
2142
2175
  // before xref runs so refs inside substituted content are resolved
2143
2176
  // by the same pass as host-page refs.
2144
2177
  renderable = resolveExpands(renderable, page.url, coreData.registry, coreData.xrefPatterns ?? [], coreData.embedConfig, ctx);
2178
+ // SPEC-070 collection resolution — runs after expand and before xref so
2179
+ // item-template `{% ref %}`s are resolved by the same xref pass.
2180
+ renderable = resolveCollections(renderable, page.url, coreData.registry, coreData.embedConfig, ctx);
2181
+ // SPEC-072 relationships resolution — same placement rationale as
2182
+ // collection: after expand, before xref (so item-template `{% ref %}`s
2183
+ // resolve in the same xref pass).
2184
+ renderable = resolveRelationships(renderable, page.url, coreData.registry, coreData.embedConfig, ctx);
2185
+ // SPEC-076 aggregate resolution — same placement as collection /
2186
+ // relationships: after expand, before xref (so any `{% ref %}` inside
2187
+ // the body template resolves in the same xref pass).
2188
+ renderable = resolveAggregates(renderable, page.url, coreData.registry, coreData.embedConfig, ctx);
2145
2189
  renderable = resolveXrefs(renderable, page.url, coreData.registry, coreData.xrefPatterns ?? [], ctx);
2146
2190
  // SPEC-062 standalone snippet wrap: turn `<pre data-snippet-source>`
2147
2191
  // into `<figure class="rf-snippet">` when not inside a fence-consuming
@@ -2154,6 +2198,16 @@ export function createCorePipelineHooks(opts = {}) {
2154
2198
  // see the final tree (including expand-substituted content once
2155
2199
  // that lands in v0.15.0).
2156
2200
  applyOutlineScopeWalkers(wrappedPage.renderable);
2201
+ // Refresh `page.headings` from the final renderable. Parse-time
2202
+ // `extractHeadings` only saw the raw AST — anything inlined by
2203
+ // postProcess (expand `level=N`, collection bodies) wouldn't make
2204
+ // it into the parse-time list, leaving the page TOC blind to those
2205
+ // headings. Skips `data-outline-scope` subtrees so peer-document
2206
+ // embeds stay isolated, matching the TOC walker.
2207
+ const harvested = harvestHeadingsFromRenderable(wrappedPage.renderable);
2208
+ if (harvested.length > 0 || wrappedPage.headings.length > 0) {
2209
+ return { ...wrappedPage, headings: harvested };
2210
+ }
2157
2211
  return wrappedPage;
2158
2212
  },
2159
2213
  };