@refrakt-md/runes 0.16.0 → 0.17.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/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +72 -41
- package/dist/config.js.map +1 -1
- 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/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/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -1
- package/dist/nodes.d.ts.map +1 -1
- package/dist/nodes.js +62 -8
- package/dist/nodes.js.map +1 -1
- 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/badge.d.ts +5 -6
- package/dist/tags/badge.d.ts.map +1 -1
- package/dist/tags/badge.js +7 -18
- package/dist/tags/badge.js.map +1 -1
- package/dist/tags/bar.d.ts +23 -0
- package/dist/tags/bar.d.ts.map +1 -0
- package/dist/tags/bar.js +64 -0
- package/dist/tags/bar.js.map +1 -0
- package/dist/tags/codegroup.d.ts.map +1 -1
- package/dist/tags/codegroup.js +41 -2
- package/dist/tags/codegroup.js.map +1 -1
- package/dist/tags/deflist.d.ts +20 -0
- package/dist/tags/deflist.d.ts.map +1 -0
- package/dist/tags/deflist.js +173 -0
- package/dist/tags/deflist.js.map +1 -0
- 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/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
package/dist/tags/bar.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import Markdoc from '@markdoc/markdoc';
|
|
2
|
+
const { Tag } = Markdoc;
|
|
3
|
+
import { createContentModelSchema, asNodes } from '../lib/index.js';
|
|
4
|
+
/** Split the bar body's node list on the FIRST top-level `hr` into
|
|
5
|
+
* `left` / `right` halves. 1 zone → everything is left, right is empty.
|
|
6
|
+
* 2+ zones → left = before-hr, right = after-hr; subsequent hrs in the
|
|
7
|
+
* right half render as ordinary horizontal rules. Matches the body-zone
|
|
8
|
+
* convention `{% drawer %}` and `{% card %}` use, scaled to the two-group
|
|
9
|
+
* case the `bar` layout primitive renders (SPEC-080). */
|
|
10
|
+
function splitBarZones(nodes) {
|
|
11
|
+
const hrIndex = nodes.findIndex(n => n.type === 'hr');
|
|
12
|
+
if (hrIndex < 0)
|
|
13
|
+
return { left: nodes, right: [] };
|
|
14
|
+
return {
|
|
15
|
+
left: nodes.slice(0, hrIndex),
|
|
16
|
+
right: nodes.slice(hrIndex + 1),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Bar rune — block-level wrapper that renders the SPEC-080 `bar` layout
|
|
21
|
+
* primitive (a horizontal flex row) over author-written content. The body
|
|
22
|
+
* splits on a top-level `---` into a left group and a right group; the right
|
|
23
|
+
* group is tagged `data-align="end"` so the shared
|
|
24
|
+
* `[data-zone-layout="bar"] [data-align="end"] { margin-left: auto }` rule
|
|
25
|
+
* pushes it to the row's end. Position-agnostic: place it in the eyebrow
|
|
26
|
+
* slot for a kicker, or anywhere a labelled strip is wanted.
|
|
27
|
+
*
|
|
28
|
+
* Usage:
|
|
29
|
+
* {% bar %}
|
|
30
|
+
* ID-123
|
|
31
|
+
* ---
|
|
32
|
+
* {% badge sentiment="positive" %}done{% /badge %}
|
|
33
|
+
* {% /bar %}
|
|
34
|
+
*
|
|
35
|
+
* {% bar %}
|
|
36
|
+
* Just one side — no right group.
|
|
37
|
+
* {% /bar %}
|
|
38
|
+
*/
|
|
39
|
+
export const bar = createContentModelSchema({
|
|
40
|
+
attributes: {},
|
|
41
|
+
contentModel: {
|
|
42
|
+
type: 'sequence',
|
|
43
|
+
fields: [
|
|
44
|
+
{ name: 'body', match: 'any', optional: true, greedy: true },
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
transform(resolved, _attrs, config) {
|
|
48
|
+
const zones = splitBarZones(asNodes(resolved.body));
|
|
49
|
+
const leftNodes = Markdoc.transform(zones.left, config);
|
|
50
|
+
const rightNodes = Markdoc.transform(zones.right, config);
|
|
51
|
+
const left = new Tag('div', {}, leftNodes);
|
|
52
|
+
const right = zones.right.length > 0
|
|
53
|
+
? new Tag('div', { 'data-align': 'end' }, rightNodes)
|
|
54
|
+
: null;
|
|
55
|
+
const children = right ? [left, right] : [left];
|
|
56
|
+
// Same DOM as the engine's `bar` layout primitive so themes target
|
|
57
|
+
// both via `[data-zone-layout="bar"]`.
|
|
58
|
+
return new Tag('div', {
|
|
59
|
+
'data-rune': 'bar',
|
|
60
|
+
'data-zone-layout': 'bar',
|
|
61
|
+
}, children);
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bar.js","sourceRoot":"","sources":["../../src/tags/bar.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;;;0DAK0D;AAC1D,SAAS,aAAa,CAAC,KAAa;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACtD,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnD,OAAO;QACN,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;QAC7B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;KAC/B,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,wBAAwB,CAAC;IAC3C,UAAU,EAAE,EAAE;IACd,YAAY,EAAE;QACb,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;SAC5D;KACD;IACD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM;QACjC,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAyB,CAAC;QAChF,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAyB,CAAC;QAElF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YACnC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC;QAER,MAAM,QAAQ,GAAyB,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEtE,mEAAmE;QACnE,uCAAuC;QACvC,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE;YACrB,WAAW,EAAE,KAAK;YAClB,kBAAkB,EAAE,KAAK;SACzB,EAAE,QAAQ,CAAC,CAAC;IACd,CAAC;CACD,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegroup.d.ts","sourceRoot":"","sources":["../../src/tags/codegroup.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"codegroup.d.ts","sourceRoot":"","sources":["../../src/tags/codegroup.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAyCvC,eAAO,MAAM,SAAS,gBA+FpB,CAAC"}
|
package/dist/tags/codegroup.js
CHANGED
|
@@ -13,6 +13,27 @@ const languageNames = {
|
|
|
13
13
|
function prettifyLanguage(lang) {
|
|
14
14
|
return languageNames[lang] || lang.charAt(0).toUpperCase() + lang.slice(1);
|
|
15
15
|
}
|
|
16
|
+
/** Extract the trailing filename from a project-root-relative path.
|
|
17
|
+
* Falls back to the trimmed input when no separator is present. */
|
|
18
|
+
function basename(path) {
|
|
19
|
+
if (!path)
|
|
20
|
+
return '';
|
|
21
|
+
const trimmed = path.endsWith('/') ? path.slice(0, -1) : path;
|
|
22
|
+
const slash = trimmed.lastIndexOf('/');
|
|
23
|
+
return slash >= 0 ? trimmed.slice(slash + 1) : trimmed;
|
|
24
|
+
}
|
|
25
|
+
/** Derive a tab label from a fence's `source` (+ optional `lines`) annotation:
|
|
26
|
+
* `theme.ts` standalone, or `theme.ts:74-125` when a range is specified.
|
|
27
|
+
* Returns empty string when no `source` is set so callers can fall through
|
|
28
|
+
* to the next step in the label-resolution chain. */
|
|
29
|
+
function labelFromSource(source, lines) {
|
|
30
|
+
if (!source)
|
|
31
|
+
return '';
|
|
32
|
+
const name = basename(source);
|
|
33
|
+
if (!name)
|
|
34
|
+
return '';
|
|
35
|
+
return lines ? `${name}:${lines}` : name;
|
|
36
|
+
}
|
|
16
37
|
const overflowValues = ['scroll', 'wrap', 'hide'];
|
|
17
38
|
export const codegroup = createContentModelSchema({
|
|
18
39
|
attributes: {
|
|
@@ -30,7 +51,10 @@ export const codegroup = createContentModelSchema({
|
|
|
30
51
|
const customLabels = attrs.labels?.split(',').map(l => l.trim()) ?? [];
|
|
31
52
|
const properties = {};
|
|
32
53
|
const children = [];
|
|
33
|
-
|
|
54
|
+
// Emit the title meta whenever the attribute is *present* — even an
|
|
55
|
+
// empty string. `title=""` opts into the window chrome (stoplights)
|
|
56
|
+
// without a filename; an absent `title` renders no topbar at all.
|
|
57
|
+
if (attrs.title !== undefined) {
|
|
34
58
|
const titleMeta = new Tag('meta', { content: attrs.title });
|
|
35
59
|
properties.title = titleMeta;
|
|
36
60
|
children.push(titleMeta);
|
|
@@ -57,7 +81,22 @@ export const codegroup = createContentModelSchema({
|
|
|
57
81
|
const panelItems = [];
|
|
58
82
|
for (const child of panels) {
|
|
59
83
|
const lang = child.attributes.language || 'shell';
|
|
60
|
-
|
|
84
|
+
// Label precedence (WORK-304):
|
|
85
|
+
// 1. Group-level `labels=` positional override
|
|
86
|
+
// 2. Per-fence `label` annotation (` ```ts {% label="X" %} `)
|
|
87
|
+
// 3. Derived from fence `source` annotation (basename, with
|
|
88
|
+
// `:lines` suffix when set) — populated automatically when
|
|
89
|
+
// the panel is `{% snippet %}`-derived, and authorable on
|
|
90
|
+
// hand-written fences for the same effect
|
|
91
|
+
// 4. Prettified language name (today's default)
|
|
92
|
+
const fenceLabelAttr = typeof child.attributes.label === 'string'
|
|
93
|
+
? child.attributes.label
|
|
94
|
+
: '';
|
|
95
|
+
const sourceLabel = labelFromSource(typeof child.attributes.source === 'string' ? child.attributes.source : undefined, typeof child.attributes.lines === 'string' ? child.attributes.lines : undefined);
|
|
96
|
+
const label = customLabels[tabItems.length]
|
|
97
|
+
|| fenceLabelAttr
|
|
98
|
+
|| sourceLabel
|
|
99
|
+
|| prettifyLanguage(lang);
|
|
61
100
|
const nameSpan = new Tag('span', {}, [label]);
|
|
62
101
|
tabItems.push(new Tag('button', { 'data-name': 'tab', role: 'tab' }, [nameSpan]));
|
|
63
102
|
const code = Markdoc.transform(child, config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegroup.js","sourceRoot":"","sources":["../../src/tags/codegroup.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,aAAa,GAA2B;IAC5C,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ;IAChD,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO;IAC7C,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;IACxC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IACpD,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM;IACtD,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK;CACzC,CAAC;AAEF,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAE3D,MAAM,CAAC,MAAM,SAAS,GAAG,wBAAwB,CAAC;IACjD,UAAU,EAAE;QACX,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,sCAAsC,EAAE;QAC7F,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,mCAAmC,EAAE;QAC3F,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,iCAAiC,EAAE;KAC5H;IACD,YAAY,EAAE;QACb,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACP,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;SAChD;KACD;IACD,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM;QAChC,MAAM,YAAY,GAAI,KAAK,CAAC,MAA6B,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QAE/F,MAAM,UAAU,GAAwB,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAU,EAAE,CAAC;QAE3B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"codegroup.js","sourceRoot":"","sources":["../../src/tags/codegroup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import Markdoc from '@markdoc/markdoc';
|
|
2
|
+
/**
|
|
3
|
+
* Deflist rune — block-level wrapper that renders the SPEC-079
|
|
4
|
+
* `definition-list` layout primitive over an author-written markdown
|
|
5
|
+
* list. Each list item starting with `**Term:**` produces a `<dt>` +
|
|
6
|
+
* `<dd>` pair; items without that prefix get an empty `<dt>` plus the
|
|
7
|
+
* full content in `<dd>` (plus a build-time warning naming the line).
|
|
8
|
+
*
|
|
9
|
+
* Composable inside any container rune; same DOM as a projected
|
|
10
|
+
* metadata zone using the `definition-list` layout.
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* {% deflist %}
|
|
14
|
+
* - **Priority:** {% badge sentiment="caution" %}high{% /badge %}
|
|
15
|
+
* - **Complexity:** moderate
|
|
16
|
+
* - **Assignee:** @alice
|
|
17
|
+
* {% /deflist %}
|
|
18
|
+
*/
|
|
19
|
+
export declare const deflist: Markdoc.Schema;
|
|
20
|
+
//# sourceMappingURL=deflist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deflist.d.ts","sourceRoot":"","sources":["../../src/tags/deflist.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAyFvC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,OAAO,gBAmDlB,CAAC"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import Markdoc from '@markdoc/markdoc';
|
|
2
|
+
const { Ast, Tag } = Markdoc;
|
|
3
|
+
import { createContentModelSchema, asNodes } from '../lib/index.js';
|
|
4
|
+
/** Parse a list item's first paragraph node to look for a `**Term:**`
|
|
5
|
+
* prefix. Returns `{ term, rest }` where `term` is the bold-text
|
|
6
|
+
* content (without the trailing `:`) and `rest` is the remaining
|
|
7
|
+
* inline content of the paragraph + subsequent block children. If no
|
|
8
|
+
* bold prefix is found, returns `null` — the deflist rune falls back
|
|
9
|
+
* to an empty `<dt>` + the item's full content in `<dd>`. */
|
|
10
|
+
function extractTermPrefix(itemNode) {
|
|
11
|
+
const children = itemNode.children ?? [];
|
|
12
|
+
if (children.length === 0)
|
|
13
|
+
return null;
|
|
14
|
+
// Markdoc list items hold their content as either:
|
|
15
|
+
// - a tight `inline` node directly under `item` (simple one-line item)
|
|
16
|
+
// - a `paragraph` wrapping an `inline` node (loose / multi-block item)
|
|
17
|
+
// Handle both shapes — extract the inline node either way.
|
|
18
|
+
let inlineNode;
|
|
19
|
+
let restBlockChildren;
|
|
20
|
+
const first = children[0];
|
|
21
|
+
if (first?.type === 'inline') {
|
|
22
|
+
inlineNode = first;
|
|
23
|
+
restBlockChildren = children.slice(1);
|
|
24
|
+
}
|
|
25
|
+
else if (first?.type === 'paragraph') {
|
|
26
|
+
inlineNode = first.children?.[0];
|
|
27
|
+
restBlockChildren = children.slice(1);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (!inlineNode || inlineNode.type !== 'inline')
|
|
33
|
+
return null;
|
|
34
|
+
const inlineKids = inlineNode.children ?? [];
|
|
35
|
+
if (inlineKids.length === 0)
|
|
36
|
+
return null;
|
|
37
|
+
const head = inlineKids[0];
|
|
38
|
+
if (!head || head.type !== 'strong')
|
|
39
|
+
return null;
|
|
40
|
+
// Extract the bold text content; require it to end with `:`.
|
|
41
|
+
const strongChildren = head.children ?? [];
|
|
42
|
+
let strongText = '';
|
|
43
|
+
for (const c of strongChildren) {
|
|
44
|
+
if (c.type === 'text' && typeof c.attributes?.content === 'string') {
|
|
45
|
+
strongText += c.attributes.content;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (!strongText.endsWith(':'))
|
|
49
|
+
return null;
|
|
50
|
+
// Remove the trailing `:` from the term — common-case "Priority:" → "Priority".
|
|
51
|
+
const termText = strongText.slice(0, -1);
|
|
52
|
+
const termNodes = [
|
|
53
|
+
// Build a fresh text node with the cleaned term so the dt content
|
|
54
|
+
// is just the term name, no trailing colon.
|
|
55
|
+
new Ast.Node('text', { content: termText }),
|
|
56
|
+
];
|
|
57
|
+
// Build the rest of the inline content: drop the leading strong, and
|
|
58
|
+
// strip ONE leading whitespace text node if present (the space after
|
|
59
|
+
// `**Term:**` in markdown).
|
|
60
|
+
const remainingInline = inlineKids.slice(1);
|
|
61
|
+
const trimmed = (() => {
|
|
62
|
+
const first = remainingInline[0];
|
|
63
|
+
if (first?.type === 'text' && typeof first.attributes?.content === 'string') {
|
|
64
|
+
const stripped = first.attributes.content.replace(/^\s+/, '');
|
|
65
|
+
if (stripped === '')
|
|
66
|
+
return remainingInline.slice(1);
|
|
67
|
+
const clone = new Ast.Node('text', { content: stripped });
|
|
68
|
+
return [clone, ...remainingInline.slice(1)];
|
|
69
|
+
}
|
|
70
|
+
return remainingInline;
|
|
71
|
+
})();
|
|
72
|
+
const restInline = trimmed.length > 0
|
|
73
|
+
? [new Ast.Node('inline', {}, trimmed)]
|
|
74
|
+
: [];
|
|
75
|
+
const restParagraph = restInline.length > 0
|
|
76
|
+
? [new Ast.Node('paragraph', {}, restInline)]
|
|
77
|
+
: [];
|
|
78
|
+
return {
|
|
79
|
+
term: termNodes,
|
|
80
|
+
rest: restInline,
|
|
81
|
+
restBlocks: [...restParagraph, ...restBlockChildren],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Deflist rune — block-level wrapper that renders the SPEC-079
|
|
86
|
+
* `definition-list` layout primitive over an author-written markdown
|
|
87
|
+
* list. Each list item starting with `**Term:**` produces a `<dt>` +
|
|
88
|
+
* `<dd>` pair; items without that prefix get an empty `<dt>` plus the
|
|
89
|
+
* full content in `<dd>` (plus a build-time warning naming the line).
|
|
90
|
+
*
|
|
91
|
+
* Composable inside any container rune; same DOM as a projected
|
|
92
|
+
* metadata zone using the `definition-list` layout.
|
|
93
|
+
*
|
|
94
|
+
* Usage:
|
|
95
|
+
* {% deflist %}
|
|
96
|
+
* - **Priority:** {% badge sentiment="caution" %}high{% /badge %}
|
|
97
|
+
* - **Complexity:** moderate
|
|
98
|
+
* - **Assignee:** @alice
|
|
99
|
+
* {% /deflist %}
|
|
100
|
+
*/
|
|
101
|
+
export const deflist = createContentModelSchema({
|
|
102
|
+
attributes: {},
|
|
103
|
+
contentModel: {
|
|
104
|
+
type: 'sequence',
|
|
105
|
+
fields: [
|
|
106
|
+
{ name: 'list', match: 'list', optional: false },
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
transform(resolved, _attrs, config) {
|
|
110
|
+
const listNodes = asNodes(resolved.list);
|
|
111
|
+
const listNode = listNodes.find(n => n.type === 'list');
|
|
112
|
+
if (!listNode) {
|
|
113
|
+
// Fallback when the content model didn't capture a list — render
|
|
114
|
+
// an empty dl so DOM stays valid; the content-model resolver
|
|
115
|
+
// already emits its own diagnostic.
|
|
116
|
+
return new Tag('dl', {
|
|
117
|
+
'data-rune': 'deflist',
|
|
118
|
+
'data-zone-layout': 'definition-list',
|
|
119
|
+
}, []);
|
|
120
|
+
}
|
|
121
|
+
const items = (listNode.children ?? []).filter(c => c.type === 'item');
|
|
122
|
+
const rows = [];
|
|
123
|
+
for (const item of items) {
|
|
124
|
+
const extracted = extractTermPrefix(item);
|
|
125
|
+
let dt;
|
|
126
|
+
let dd;
|
|
127
|
+
if (extracted) {
|
|
128
|
+
const termRendered = Markdoc.transform(extracted.term, config);
|
|
129
|
+
const valueRendered = Markdoc.transform(extracted.restBlocks, config);
|
|
130
|
+
dt = new Tag('dt', { 'data-meta-label': '' }, termRendered);
|
|
131
|
+
dd = new Tag('dd', {}, unwrapSingleParagraph(valueRendered));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Fallback: empty <dt> + full item content in <dd>. Warn once
|
|
135
|
+
// per process so authors find the unparsed item.
|
|
136
|
+
const fullRendered = Markdoc.transform(item.children ?? [], config);
|
|
137
|
+
dt = new Tag('dt', { 'data-meta-label': '' }, []);
|
|
138
|
+
dd = new Tag('dd', {}, unwrapSingleParagraph(fullRendered));
|
|
139
|
+
warnDeflistUnparsedItem(item);
|
|
140
|
+
}
|
|
141
|
+
rows.push(new Tag('div', { 'data-name': 'row' }, [dt, dd]));
|
|
142
|
+
}
|
|
143
|
+
return new Tag('dl', {
|
|
144
|
+
'data-rune': 'deflist',
|
|
145
|
+
'data-zone-layout': 'definition-list',
|
|
146
|
+
}, rows);
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
/** When the dd's content is a single `<p>` (the typical case for a
|
|
150
|
+
* short inline value), unwrap it so the dd renders as `<dd>value</dd>`
|
|
151
|
+
* instead of `<dd><p>value</p></dd>`. Multi-paragraph dd content stays
|
|
152
|
+
* wrapped. */
|
|
153
|
+
function unwrapSingleParagraph(nodes) {
|
|
154
|
+
if (nodes.length !== 1)
|
|
155
|
+
return nodes;
|
|
156
|
+
const only = nodes[0];
|
|
157
|
+
if (!Markdoc.Tag.isTag(only) || only.name !== 'p')
|
|
158
|
+
return nodes;
|
|
159
|
+
return only.children;
|
|
160
|
+
}
|
|
161
|
+
const DEFLIST_WARNED = new Set();
|
|
162
|
+
function warnDeflistUnparsedItem(item) {
|
|
163
|
+
const loc = item.location ?? null;
|
|
164
|
+
const key = loc ? `${loc.start?.line ?? '?'}:${loc.start?.character ?? '?'}` : 'unknown';
|
|
165
|
+
if (DEFLIST_WARNED.has(key))
|
|
166
|
+
return;
|
|
167
|
+
DEFLIST_WARNED.add(key);
|
|
168
|
+
// eslint-disable-next-line no-console
|
|
169
|
+
console.warn(`[refrakt] {% deflist %} item at line ${loc?.start?.line ?? '?'} lacks ` +
|
|
170
|
+
`a \`**Term:**\` prefix — rendered with empty <dt>. Prefix the item ` +
|
|
171
|
+
`with bold term text ending in \`:\` to label it.`);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=deflist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deflist.js","sourceRoot":"","sources":["../../src/tags/deflist.ts"],"names":[],"mappings":"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"}
|
package/dist/tags/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/tags/diff.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/tags/diff.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AA+MvC,eAAO,MAAM,IAAI,gBAoEf,CAAC"}
|
package/dist/tags/diff.js
CHANGED
|
@@ -99,29 +99,46 @@ function getUnifiedLines(hunks) {
|
|
|
99
99
|
* before-num for an add line) takes the place of the old `+`/`-` prefix as
|
|
100
100
|
* the directional cue: combined with the change-tinted number colour and
|
|
101
101
|
* the line's left-edge border, the absence/presence pattern says which way
|
|
102
|
-
* the change goes without a dedicated prefix column.
|
|
103
|
-
|
|
102
|
+
* the change goes without a dedicated prefix column.
|
|
103
|
+
*
|
|
104
|
+
* WORK-304 — line spans carry `data-line-status` (was `data-type`) to
|
|
105
|
+
* share the row primitive with code-block line highlighting and any
|
|
106
|
+
* future per-line state. Values: `equal | add | remove`. */
|
|
107
|
+
function buildUnifiedRenderable(hunks, lang, beforeOffset = 0, afterOffset = 0) {
|
|
104
108
|
const lines = getUnifiedLines(hunks);
|
|
105
109
|
const lineNodes = lines.map(({ hunk, beforeNum, afterNum }) => {
|
|
106
|
-
return new Tag('span', { 'data-name': 'line', 'data-
|
|
107
|
-
new Tag('span', { 'data-name': 'gutter-num', 'data-side': 'before' }, [beforeNum != null ? String(beforeNum) : '']),
|
|
108
|
-
new Tag('span', { 'data-name': 'gutter-num', 'data-side': 'after' }, [afterNum != null ? String(afterNum) : '']),
|
|
110
|
+
return new Tag('span', { 'data-name': 'line', 'data-line-status': hunk.type }, [
|
|
111
|
+
new Tag('span', { 'data-name': 'gutter-num', 'data-side': 'before' }, [beforeNum != null ? String(beforeNum + beforeOffset) : '']),
|
|
112
|
+
new Tag('span', { 'data-name': 'gutter-num', 'data-side': 'after' }, [afterNum != null ? String(afterNum + afterOffset) : '']),
|
|
109
113
|
new Tag('span', { 'data-name': 'line-content', ...(lang ? { 'data-language': lang } : {}) }, [hunk.text]),
|
|
110
114
|
]);
|
|
111
115
|
});
|
|
112
|
-
return [new Tag('pre', { 'data-name': 'code', 'data-copy-selector': '[data-name="line-content"]' },
|
|
116
|
+
return [new Tag('pre', { 'data-name': 'code', 'data-copy-selector': '[data-name="line-content"]' }, [
|
|
117
|
+
// WORK-304 — inner wrapper hosts the `display: grid; min-width:
|
|
118
|
+
// max-content` row-width sizing so the row tint (+/-/highlight)
|
|
119
|
+
// extends across the full horizontal scroll region. Mirrors the
|
|
120
|
+
// `<pre><code>` pattern the standalone codeblock uses for the
|
|
121
|
+
// same reason: putting the sizing on the pre itself defeats
|
|
122
|
+
// `overflow-x: auto`. CSS hook: `.rf-diff__rows`.
|
|
123
|
+
new Tag('div', { 'data-name': 'rows' }, lineNodes),
|
|
124
|
+
])];
|
|
113
125
|
}
|
|
114
126
|
/** Build split diff renderable — side-by-side panels with one numbered
|
|
115
127
|
* gutter per panel. Placeholder rows (where the matching side has the
|
|
116
128
|
* add/remove) render an empty gutter + empty content; the fixed gutter
|
|
117
|
-
* width keeps the column rigid so rows align across panels.
|
|
118
|
-
|
|
129
|
+
* width keeps the column rigid so rows align across panels.
|
|
130
|
+
*
|
|
131
|
+
* WORK-304 — same `data-line-status` rename + per-side offset support
|
|
132
|
+
* as the unified renderable. `beforeOffset` / `afterOffset` are the
|
|
133
|
+
* `lines=` start minus one, so a fence with `lines="50-100"` adds 49
|
|
134
|
+
* to its 1-indexed `num` to produce gutter values starting at 50. */
|
|
135
|
+
function buildSplitRenderable(hunks, lang, beforeOffset = 0, afterOffset = 0) {
|
|
119
136
|
const { before, after } = getSplitLines(hunks);
|
|
120
|
-
function buildPanelLines(lines, side) {
|
|
137
|
+
function buildPanelLines(lines, side, offset) {
|
|
121
138
|
return lines.map(line => {
|
|
122
139
|
const type = line ? line.hunk.type : 'empty';
|
|
123
|
-
return new Tag('span', { 'data-name': 'line', 'data-
|
|
124
|
-
new Tag('span', { 'data-name': 'gutter-num', 'data-side': side }, [line ? String(line.num) : '']),
|
|
140
|
+
return new Tag('span', { 'data-name': 'line', 'data-line-status': type }, [
|
|
141
|
+
new Tag('span', { 'data-name': 'gutter-num', 'data-side': side }, [line ? String(line.num + offset) : '']),
|
|
125
142
|
new Tag('span', { 'data-name': 'line-content', ...(line && lang ? { 'data-language': lang } : {}) }, [
|
|
126
143
|
line ? line.hunk.text : '',
|
|
127
144
|
]),
|
|
@@ -130,13 +147,48 @@ function buildSplitRenderable(hunks, lang) {
|
|
|
130
147
|
}
|
|
131
148
|
return [new Tag('div', { 'data-name': 'split-container' }, [
|
|
132
149
|
new Tag('div', { 'data-name': 'panel' }, [
|
|
133
|
-
new Tag('pre', { 'data-name': 'code', 'data-copy-selector': '[data-name="line-content"]' },
|
|
150
|
+
new Tag('pre', { 'data-name': 'code', 'data-copy-selector': '[data-name="line-content"]' }, [
|
|
151
|
+
new Tag('div', { 'data-name': 'rows' }, buildPanelLines(before, 'before', beforeOffset)),
|
|
152
|
+
]),
|
|
134
153
|
]),
|
|
135
154
|
new Tag('div', { 'data-name': 'panel' }, [
|
|
136
|
-
new Tag('pre', { 'data-name': 'code', 'data-copy-selector': '[data-name="line-content"]' },
|
|
155
|
+
new Tag('pre', { 'data-name': 'code', 'data-copy-selector': '[data-name="line-content"]' }, [
|
|
156
|
+
new Tag('div', { 'data-name': 'rows' }, buildPanelLines(after, 'after', afterOffset)),
|
|
157
|
+
]),
|
|
137
158
|
]),
|
|
138
159
|
])];
|
|
139
160
|
}
|
|
161
|
+
/** Parse the leading integer of a `lines="N-M"` (or `"N"`) annotation and
|
|
162
|
+
* return `N - 1` as the gutter offset, or 0 when the annotation is
|
|
163
|
+
* missing / malformed. Diff uses this per side so each panel's gutter
|
|
164
|
+
* reflects the file's actual coordinates rather than always starting at 1. */
|
|
165
|
+
function gutterOffsetFromLines(linesAttr) {
|
|
166
|
+
if (typeof linesAttr !== 'string' || linesAttr.length === 0)
|
|
167
|
+
return 0;
|
|
168
|
+
const m = /^(\d+)/.exec(linesAttr.trim());
|
|
169
|
+
if (!m)
|
|
170
|
+
return 0;
|
|
171
|
+
const n = Number(m[1]);
|
|
172
|
+
return Number.isFinite(n) && n > 0 ? n - 1 : 0;
|
|
173
|
+
}
|
|
174
|
+
/** Build the diff header: explicit `title` attribute wins, otherwise the
|
|
175
|
+
* fence `source` annotations form the header. When both sides share a
|
|
176
|
+
* source they collapse to a single label; differing sources render as
|
|
177
|
+
* `before → after`. Falls back to no header when nothing is set. */
|
|
178
|
+
function deriveHeader(title, beforeSource, afterSource) {
|
|
179
|
+
if (title)
|
|
180
|
+
return [new Tag('div', { 'data-name': 'header' }, [title])];
|
|
181
|
+
if (beforeSource && afterSource) {
|
|
182
|
+
if (beforeSource === afterSource) {
|
|
183
|
+
return [new Tag('div', { 'data-name': 'header' }, [beforeSource])];
|
|
184
|
+
}
|
|
185
|
+
return [new Tag('div', { 'data-name': 'header' }, [`${beforeSource} → ${afterSource}`])];
|
|
186
|
+
}
|
|
187
|
+
const single = beforeSource || afterSource;
|
|
188
|
+
if (single)
|
|
189
|
+
return [new Tag('div', { 'data-name': 'header' }, [single])];
|
|
190
|
+
return [];
|
|
191
|
+
}
|
|
140
192
|
export const diff = createContentModelSchema({
|
|
141
193
|
attributes: {
|
|
142
194
|
mode: { type: String, required: false, matches: modeType.slice(), description: 'Diff display style: unified, split, or inline' },
|
|
@@ -160,15 +212,30 @@ export const diff = createContentModelSchema({
|
|
|
160
212
|
const beforeSource = fences.length > 0 ? (fences[0].attributes.content || '').replace(/\n$/, '') : '';
|
|
161
213
|
const afterSource = fences.length > 1 ? (fences[1].attributes.content || '').replace(/\n$/, '') : '';
|
|
162
214
|
const lang = language || (fences.length > 0 ? fences[0].attributes.language || '' : '');
|
|
215
|
+
// WORK-304 — per-fence annotations:
|
|
216
|
+
// - `source` populates the diff header (and collapses to a single
|
|
217
|
+
// label when both sides share it; renders `before → after`
|
|
218
|
+
// otherwise).
|
|
219
|
+
// - `lines` derives per-side gutter offsets so each panel's
|
|
220
|
+
// line numbers reflect the file's real coordinates.
|
|
221
|
+
// - `highlight` is intentionally ignored — diff's add/remove
|
|
222
|
+
// status IS the primary line-level signal, and emphasis on
|
|
223
|
+
// top would muddy the +/- channel. Silent no-op; no warning.
|
|
224
|
+
const beforeFenceSource = fences.length > 0 && typeof fences[0].attributes.source === 'string'
|
|
225
|
+
? fences[0].attributes.source
|
|
226
|
+
: undefined;
|
|
227
|
+
const afterFenceSource = fences.length > 1 && typeof fences[1].attributes.source === 'string'
|
|
228
|
+
? fences[1].attributes.source
|
|
229
|
+
: undefined;
|
|
230
|
+
const beforeOffset = fences.length > 0 ? gutterOffsetFromLines(fences[0].attributes.lines) : 0;
|
|
231
|
+
const afterOffset = fences.length > 1 ? gutterOffsetFromLines(fences[1].attributes.lines) : 0;
|
|
163
232
|
// Compute line-level diff (highlighting deferred to highlight transform)
|
|
164
233
|
const hunks = computeLineDiff(beforeSource, afterSource);
|
|
165
234
|
// Build expanded renderable AST
|
|
166
235
|
const expanded = mode === 'split'
|
|
167
|
-
? buildSplitRenderable(hunks, lang)
|
|
168
|
-
: buildUnifiedRenderable(hunks, lang);
|
|
169
|
-
const header = title
|
|
170
|
-
? [new Tag('div', { 'data-name': 'header' }, [title])]
|
|
171
|
-
: [];
|
|
236
|
+
? buildSplitRenderable(hunks, lang, beforeOffset, afterOffset)
|
|
237
|
+
: buildUnifiedRenderable(hunks, lang, beforeOffset, afterOffset);
|
|
238
|
+
const header = deriveHeader(title, beforeFenceSource, afterFenceSource);
|
|
172
239
|
const renderable = createComponentRenderable({ rune: 'diff',
|
|
173
240
|
tag: 'div',
|
|
174
241
|
properties: {
|
package/dist/tags/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/tags/diff.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/tags/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawer.d.ts","sourceRoot":"","sources":["../../src/tags/drawer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAMvC;qFACqF;AACrF,eAAO,MAAM,wBAAwB,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"drawer.d.ts","sourceRoot":"","sources":["../../src/tags/drawer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAMvC;qFACqF;AACrF,eAAO,MAAM,wBAAwB,2BAA2B,CAAC;AAoBjE,eAAO,MAAM,MAAM,gBAiIjB,CAAC"}
|
package/dist/tags/drawer.js
CHANGED
|
@@ -27,6 +27,21 @@ import { RenderableNodeCursor } from '../lib/renderable.js';
|
|
|
27
27
|
export const DRAWER_TITLE_AUTO_MARKER = 'data-drawer-title-auto';
|
|
28
28
|
const drawerSides = ['right', 'left', 'top', 'bottom'];
|
|
29
29
|
const drawerSizes = ['sm', 'md', 'lg'];
|
|
30
|
+
/** Split a drawer body's node list on the **first** top-level `hr` into body
|
|
31
|
+
* + footer zones. 1 zone → `{ body: nodes, footer: null }`; 2+ zones →
|
|
32
|
+
* `{ body: before-hr, footer: after-hr }` where any subsequent hrs in the
|
|
33
|
+
* footer render as ordinary horizontal rules within the footer. Matches the
|
|
34
|
+
* body-zone convention `{% card %}` uses (positional, count-driven), scaled
|
|
35
|
+
* down to the two-zone case the drawer needs. */
|
|
36
|
+
function splitDrawerBodyZones(nodes) {
|
|
37
|
+
const hrIndex = nodes.findIndex(n => n.type === 'hr');
|
|
38
|
+
if (hrIndex < 0)
|
|
39
|
+
return { body: nodes, footer: null };
|
|
40
|
+
return {
|
|
41
|
+
body: nodes.slice(0, hrIndex),
|
|
42
|
+
footer: nodes.slice(hrIndex + 1),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
30
45
|
export const drawer = createContentModelSchema({
|
|
31
46
|
attributes: {
|
|
32
47
|
id: {
|
|
@@ -96,7 +111,16 @@ export const drawer = createContentModelSchema({
|
|
|
96
111
|
headerChildren.push(titleTag);
|
|
97
112
|
headerChildren.push(closeButton);
|
|
98
113
|
const header = new Tag('header', {}, headerChildren);
|
|
99
|
-
|
|
114
|
+
// Split the body on the first top-level `hr` into body + footer zones
|
|
115
|
+
// (SPEC-078). 1 zone → all body; 2+ zones → body + footer. The footer
|
|
116
|
+
// zone shows up as `<footer data-name="footer" class="rf-drawer__footer">`
|
|
117
|
+
// alongside the body so the hoist mechanism for `preview="drawer"` and
|
|
118
|
+
// author-written standalone drawers populate the same slot.
|
|
119
|
+
const zones = splitDrawerBodyZones(asNodes(resolved.body));
|
|
120
|
+
const body = new RenderableNodeCursor(Markdoc.transform(zones.body, config)).wrap('div');
|
|
121
|
+
const footer = zones.footer !== null
|
|
122
|
+
? new RenderableNodeCursor(Markdoc.transform(zones.footer, config)).wrap('footer')
|
|
123
|
+
: null;
|
|
100
124
|
// Property meta tags drive engine modifier-from-meta + data-attribute
|
|
101
125
|
// derivation. We always emit `side` and `size` so the engine applies
|
|
102
126
|
// the BEM modifier even when the author didn't specify them (the
|
|
@@ -120,8 +144,14 @@ export const drawer = createContentModelSchema({
|
|
|
120
144
|
...(titleTag ? { title: titleTag } : {}),
|
|
121
145
|
close: closeButton,
|
|
122
146
|
body: body.tag('div'),
|
|
147
|
+
...(footer ? { footer: footer.tag('footer') } : {}),
|
|
123
148
|
},
|
|
124
|
-
children: [
|
|
149
|
+
children: [
|
|
150
|
+
...Object.values(properties),
|
|
151
|
+
header,
|
|
152
|
+
body.next(),
|
|
153
|
+
...(footer ? [footer.next()] : []),
|
|
154
|
+
],
|
|
125
155
|
});
|
|
126
156
|
// `data-drawer-id` carries the author-supplied id (before the
|
|
127
157
|
// `drawer-` prefix) for register-hook consumption. The register
|