@refrakt-md/runes 0.1.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/attributes.d.ts +15 -0
- package/dist/attributes.d.ts.map +1 -0
- package/dist/attributes.js +46 -0
- package/dist/attributes.js.map +1 -0
- package/dist/documents/doc.d.ts +4 -0
- package/dist/documents/doc.d.ts.map +1 -0
- package/dist/documents/doc.js +4 -0
- package/dist/documents/doc.js.map +1 -0
- package/dist/documents/footer.d.ts +2 -0
- package/dist/documents/footer.d.ts.map +1 -0
- package/dist/documents/footer.js +60 -0
- package/dist/documents/footer.js.map +1 -0
- package/dist/documents/menu.d.ts +2 -0
- package/dist/documents/menu.d.ts.map +1 -0
- package/dist/documents/menu.js +40 -0
- package/dist/documents/menu.js.map +1 -0
- package/dist/documents/page.d.ts +10 -0
- package/dist/documents/page.d.ts.map +1 -0
- package/dist/documents/page.js +30 -0
- package/dist/documents/page.js.map +1 -0
- package/dist/documents/summary.d.ts +3 -0
- package/dist/documents/summary.d.ts.map +1 -0
- package/dist/documents/summary.js +63 -0
- package/dist/documents/summary.js.map +1 -0
- package/dist/hljs-markdoc.d.ts +3 -0
- package/dist/hljs-markdoc.d.ts.map +1 -0
- package/dist/hljs-markdoc.js +37 -0
- package/dist/hljs-markdoc.js.map +1 -0
- package/dist/index.d.ts +131 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +295 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces.d.ts +44 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +11 -0
- package/dist/interfaces.js.map +1 -0
- package/dist/layouts/grid.d.ts +23 -0
- package/dist/layouts/grid.d.ts.map +1 -0
- package/dist/layouts/grid.js +30 -0
- package/dist/layouts/grid.js.map +1 -0
- package/dist/layouts/index.d.ts +3 -0
- package/dist/layouts/index.d.ts.map +1 -0
- package/dist/layouts/index.js +3 -0
- package/dist/layouts/index.js.map +1 -0
- package/dist/layouts/split.d.ts +15 -0
- package/dist/layouts/split.d.ts.map +1 -0
- package/dist/layouts/split.js +26 -0
- package/dist/layouts/split.js.map +1 -0
- package/dist/lib/annotations/annotation.d.ts +11 -0
- package/dist/lib/annotations/annotation.d.ts.map +1 -0
- package/dist/lib/annotations/annotation.js +21 -0
- package/dist/lib/annotations/annotation.js.map +1 -0
- package/dist/lib/annotations/attribute.d.ts +12 -0
- package/dist/lib/annotations/attribute.d.ts.map +1 -0
- package/dist/lib/annotations/attribute.js +17 -0
- package/dist/lib/annotations/attribute.js.map +1 -0
- package/dist/lib/annotations/decoration.d.ts +10 -0
- package/dist/lib/annotations/decoration.d.ts.map +1 -0
- package/dist/lib/annotations/decoration.js +46 -0
- package/dist/lib/annotations/decoration.js.map +1 -0
- package/dist/lib/annotations/group.d.ts +24 -0
- package/dist/lib/annotations/group.d.ts.map +1 -0
- package/dist/lib/annotations/group.js +78 -0
- package/dist/lib/annotations/group.js.map +1 -0
- package/dist/lib/annotations/id.d.ts +19 -0
- package/dist/lib/annotations/id.d.ts.map +1 -0
- package/dist/lib/annotations/id.js +32 -0
- package/dist/lib/annotations/id.js.map +1 -0
- package/dist/lib/annotations/interfaces.d.ts +27 -0
- package/dist/lib/annotations/interfaces.d.ts.map +1 -0
- package/dist/lib/annotations/interfaces.js +2 -0
- package/dist/lib/annotations/interfaces.js.map +1 -0
- package/dist/lib/component.d.ts +26 -0
- package/dist/lib/component.d.ts.map +1 -0
- package/dist/lib/component.js +28 -0
- package/dist/lib/component.js.map +1 -0
- package/dist/lib/index.d.ts +10 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +25 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/model.d.ts +13 -0
- package/dist/lib/model.d.ts.map +1 -0
- package/dist/lib/model.js +33 -0
- package/dist/lib/model.js.map +1 -0
- package/dist/lib/node.d.ts +18 -0
- package/dist/lib/node.d.ts.map +1 -0
- package/dist/lib/node.js +49 -0
- package/dist/lib/node.js.map +1 -0
- package/dist/lib/renderable.d.ts +22 -0
- package/dist/lib/renderable.d.ts.map +1 -0
- package/dist/lib/renderable.js +52 -0
- package/dist/lib/renderable.js.map +1 -0
- package/dist/lib/types.d.ts +8 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +14 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/nodes.d.ts +18 -0
- package/dist/nodes.d.ts.map +1 -0
- package/dist/nodes.js +181 -0
- package/dist/nodes.js.map +1 -0
- package/dist/registry.d.ts +47 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +60 -0
- package/dist/registry.js.map +1 -0
- package/dist/rune.d.ts +34 -0
- package/dist/rune.d.ts.map +1 -0
- package/dist/rune.js +29 -0
- package/dist/rune.js.map +1 -0
- package/dist/tags/accordion.d.ts +4 -0
- package/dist/tags/accordion.d.ts.map +1 -0
- package/dist/tags/accordion.js +98 -0
- package/dist/tags/accordion.js.map +1 -0
- package/dist/tags/breadcrumb.d.ts +3 -0
- package/dist/tags/breadcrumb.d.ts.map +1 -0
- package/dist/tags/breadcrumb.js +76 -0
- package/dist/tags/breadcrumb.js.map +1 -0
- package/dist/tags/changelog.d.ts +4 -0
- package/dist/tags/changelog.d.ts.map +1 -0
- package/dist/tags/changelog.js +124 -0
- package/dist/tags/changelog.js.map +1 -0
- package/dist/tags/codegroup.d.ts +2 -0
- package/dist/tags/codegroup.d.ts.map +1 -0
- package/dist/tags/codegroup.js +60 -0
- package/dist/tags/codegroup.js.map +1 -0
- package/dist/tags/common.d.ts +17 -0
- package/dist/tags/common.d.ts.map +1 -0
- package/dist/tags/common.js +61 -0
- package/dist/tags/common.js.map +1 -0
- package/dist/tags/compare.d.ts +3 -0
- package/dist/tags/compare.d.ts.map +1 -0
- package/dist/tags/compare.js +61 -0
- package/dist/tags/compare.js.map +1 -0
- package/dist/tags/cta.d.ts +3 -0
- package/dist/tags/cta.d.ts.map +1 -0
- package/dist/tags/cta.js +75 -0
- package/dist/tags/cta.js.map +1 -0
- package/dist/tags/details.d.ts +3 -0
- package/dist/tags/details.d.ts.map +1 -0
- package/dist/tags/details.js +55 -0
- package/dist/tags/details.js.map +1 -0
- package/dist/tags/embed.d.ts +3 -0
- package/dist/tags/embed.d.ts.map +1 -0
- package/dist/tags/embed.js +130 -0
- package/dist/tags/embed.js.map +1 -0
- package/dist/tags/error.d.ts +3 -0
- package/dist/tags/error.d.ts.map +1 -0
- package/dist/tags/error.js +50 -0
- package/dist/tags/error.js.map +1 -0
- package/dist/tags/feature.d.ts +16 -0
- package/dist/tags/feature.d.ts.map +1 -0
- package/dist/tags/feature.js +98 -0
- package/dist/tags/feature.js.map +1 -0
- package/dist/tags/figure.d.ts +3 -0
- package/dist/tags/figure.d.ts.map +1 -0
- package/dist/tags/figure.js +64 -0
- package/dist/tags/figure.js.map +1 -0
- package/dist/tags/grid.d.ts +2 -0
- package/dist/tags/grid.d.ts.map +1 -0
- package/dist/tags/grid.js +56 -0
- package/dist/tags/grid.js.map +1 -0
- package/dist/tags/hero.d.ts +3 -0
- package/dist/tags/hero.d.ts.map +1 -0
- package/dist/tags/hero.js +75 -0
- package/dist/tags/hero.js.map +1 -0
- package/dist/tags/hint.d.ts +3 -0
- package/dist/tags/hint.d.ts.map +1 -0
- package/dist/tags/hint.js +41 -0
- package/dist/tags/hint.js.map +1 -0
- package/dist/tags/layout.d.ts +3 -0
- package/dist/tags/layout.d.ts.map +1 -0
- package/dist/tags/layout.js +32 -0
- package/dist/tags/layout.js.map +1 -0
- package/dist/tags/music-playlist.d.ts +3 -0
- package/dist/tags/music-playlist.d.ts.map +1 -0
- package/dist/tags/music-playlist.js +80 -0
- package/dist/tags/music-playlist.js.map +1 -0
- package/dist/tags/music-recording.d.ts +17 -0
- package/dist/tags/music-recording.d.ts.map +1 -0
- package/dist/tags/music-recording.js +99 -0
- package/dist/tags/music-recording.js.map +1 -0
- package/dist/tags/nav.d.ts +3 -0
- package/dist/tags/nav.d.ts.map +1 -0
- package/dist/tags/nav.js +114 -0
- package/dist/tags/nav.js.map +1 -0
- package/dist/tags/pricing.d.ts +12 -0
- package/dist/tags/pricing.d.ts.map +1 -0
- package/dist/tags/pricing.js +78 -0
- package/dist/tags/pricing.js.map +1 -0
- package/dist/tags/region.d.ts +3 -0
- package/dist/tags/region.d.ts.map +1 -0
- package/dist/tags/region.js +37 -0
- package/dist/tags/region.js.map +1 -0
- package/dist/tags/steps.d.ts +4 -0
- package/dist/tags/steps.d.ts.map +1 -0
- package/dist/tags/steps.js +71 -0
- package/dist/tags/steps.js.map +1 -0
- package/dist/tags/tabs.d.ts +4 -0
- package/dist/tags/tabs.d.ts.map +1 -0
- package/dist/tags/tabs.js +119 -0
- package/dist/tags/tabs.js.map +1 -0
- package/dist/tags/testimonial.d.ts +3 -0
- package/dist/tags/testimonial.d.ts.map +1 -0
- package/dist/tags/testimonial.js +99 -0
- package/dist/tags/testimonial.js.map +1 -0
- package/dist/tags/timeline.d.ts +4 -0
- package/dist/tags/timeline.d.ts.map +1 -0
- package/dist/tags/timeline.js +125 -0
- package/dist/tags/timeline.js.map +1 -0
- package/dist/tags/toc.d.ts +3 -0
- package/dist/tags/toc.d.ts.map +1 -0
- package/dist/tags/toc.js +53 -0
- package/dist/tags/toc.js.map +1 -0
- package/dist/util.d.ts +21 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +99 -0
- package/dist/util.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/tags/tabs.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AA8CvC,eAAO,MAAM,GAAG,gBAAyB,CAAC;AAsE1C,eAAO,MAAM,IAAI,gBAA0B,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import Markdoc from '@markdoc/markdoc';
|
|
11
|
+
const { Ast, Tag } = Markdoc;
|
|
12
|
+
import { headingsToList } from '../util.js';
|
|
13
|
+
import { schema } from '../registry.js';
|
|
14
|
+
import { NodeStream } from '../lib/node.js';
|
|
15
|
+
import { attribute, group, id, Model, createComponentRenderable, createSchema } from '../lib/index.js';
|
|
16
|
+
import { RenderableNodeCursor } from '../lib/renderable.js';
|
|
17
|
+
import { pageSectionProperties } from './common.js';
|
|
18
|
+
class TabModel extends Model {
|
|
19
|
+
transform() {
|
|
20
|
+
let tab = new RenderableNodeCursor([]);
|
|
21
|
+
if (this.image) {
|
|
22
|
+
tab = tab.concat(Markdoc.transform(new Ast.Node('image', { src: this.image }), this.config));
|
|
23
|
+
}
|
|
24
|
+
tab = tab.concat(new Tag('span', {}, [this.name]));
|
|
25
|
+
const panel = this.transformChildren();
|
|
26
|
+
const name = tab.tag('span');
|
|
27
|
+
const image = tab.tag('svg');
|
|
28
|
+
return [
|
|
29
|
+
createComponentRenderable(schema.Tab, {
|
|
30
|
+
tag: 'li',
|
|
31
|
+
properties: { name, image },
|
|
32
|
+
children: tab.toArray(),
|
|
33
|
+
}),
|
|
34
|
+
createComponentRenderable(schema.TabPanel, {
|
|
35
|
+
tag: 'li',
|
|
36
|
+
properties: {},
|
|
37
|
+
children: panel.toArray(),
|
|
38
|
+
})
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
__decorate([
|
|
43
|
+
attribute({ type: String, required: true }),
|
|
44
|
+
__metadata("design:type", String)
|
|
45
|
+
], TabModel.prototype, "name", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
attribute({ type: String, required: false }),
|
|
48
|
+
__metadata("design:type", String)
|
|
49
|
+
], TabModel.prototype, "image", void 0);
|
|
50
|
+
export const tab = createSchema(TabModel);
|
|
51
|
+
class TabsModel extends Model {
|
|
52
|
+
constructor() {
|
|
53
|
+
super(...arguments);
|
|
54
|
+
this.headingLevel = undefined;
|
|
55
|
+
}
|
|
56
|
+
convertHeadings(nodes) {
|
|
57
|
+
const converted = headingsToList({ level: this.headingLevel })(nodes);
|
|
58
|
+
const n = converted.length - 1;
|
|
59
|
+
const tags = converted[n].children.map(item => {
|
|
60
|
+
const heading = item.children[0];
|
|
61
|
+
const image = Array.from(heading.walk()).find(n => n.type === 'image');
|
|
62
|
+
const name = Array.from(heading.walk()).filter(n => n.type === 'text').map(t => t.attributes.content);
|
|
63
|
+
return new Ast.Node('tag', {
|
|
64
|
+
name,
|
|
65
|
+
image: image ? image.attributes.src : undefined,
|
|
66
|
+
}, item.children.slice(1), 'tab');
|
|
67
|
+
});
|
|
68
|
+
converted.splice(n, 1, ...tags);
|
|
69
|
+
return converted;
|
|
70
|
+
}
|
|
71
|
+
processChildren(nodes) {
|
|
72
|
+
if (this.headingLevel !== undefined) {
|
|
73
|
+
return super.processChildren(this.convertHeadings(nodes));
|
|
74
|
+
}
|
|
75
|
+
return super.processChildren(nodes);
|
|
76
|
+
}
|
|
77
|
+
transform() {
|
|
78
|
+
const header = this.header.transform();
|
|
79
|
+
const tabStream = this.tabgroup.transform();
|
|
80
|
+
const tabs = tabStream.tag('li').typeof('Tab');
|
|
81
|
+
const panels = tabStream.tag('li').typeof('TabPanel');
|
|
82
|
+
const tabList = tabs.wrap('ul');
|
|
83
|
+
const panelList = panels.wrap('ul');
|
|
84
|
+
const children = header.count() > 0
|
|
85
|
+
? [header.wrap('header').next(), tabList.next(), panelList.next()]
|
|
86
|
+
: [tabList.next(), panelList.next()];
|
|
87
|
+
return createComponentRenderable(schema.TabGroup, {
|
|
88
|
+
tag: 'section',
|
|
89
|
+
id: this.id,
|
|
90
|
+
class: this.node.transformAttributes(this.config).class,
|
|
91
|
+
property: 'contentSection',
|
|
92
|
+
properties: {
|
|
93
|
+
...pageSectionProperties(header),
|
|
94
|
+
tab: tabs,
|
|
95
|
+
panel: panels,
|
|
96
|
+
},
|
|
97
|
+
refs: { tabs: tabList, panels: panelList },
|
|
98
|
+
children,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
__decorate([
|
|
103
|
+
id({ generate: true }),
|
|
104
|
+
__metadata("design:type", String)
|
|
105
|
+
], TabsModel.prototype, "id", void 0);
|
|
106
|
+
__decorate([
|
|
107
|
+
attribute({ type: Number, required: false }),
|
|
108
|
+
__metadata("design:type", Object)
|
|
109
|
+
], TabsModel.prototype, "headingLevel", void 0);
|
|
110
|
+
__decorate([
|
|
111
|
+
group({ include: ['heading', 'paragraph'] }),
|
|
112
|
+
__metadata("design:type", NodeStream)
|
|
113
|
+
], TabsModel.prototype, "header", void 0);
|
|
114
|
+
__decorate([
|
|
115
|
+
group({ include: ['tag'] }),
|
|
116
|
+
__metadata("design:type", NodeStream)
|
|
117
|
+
], TabsModel.prototype, "tabgroup", void 0);
|
|
118
|
+
export const tabs = createSchema(TabsModel);
|
|
119
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/tags/tabs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testimonial.d.ts","sourceRoot":"","sources":["../../src/tags/testimonial.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAoFvC,eAAO,MAAM,WAAW,gBAAiC,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import Markdoc from '@markdoc/markdoc';
|
|
11
|
+
const { Tag } = Markdoc;
|
|
12
|
+
import { schema } from '../registry.js';
|
|
13
|
+
import { attribute, Model, createComponentRenderable, createSchema } from '../lib/index.js';
|
|
14
|
+
const layoutType = ['card', 'inline', 'quote'];
|
|
15
|
+
class TestimonialModel extends Model {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
this.rating = undefined;
|
|
19
|
+
this.layout = 'card';
|
|
20
|
+
}
|
|
21
|
+
transform() {
|
|
22
|
+
const children = this.transformChildren();
|
|
23
|
+
// Extract blockquote as the testimonial quote
|
|
24
|
+
let quoteTag;
|
|
25
|
+
let authorNameTag;
|
|
26
|
+
let authorRoleTag;
|
|
27
|
+
let avatarTag;
|
|
28
|
+
for (const node of children.toArray()) {
|
|
29
|
+
if (!Tag.isTag(node))
|
|
30
|
+
continue;
|
|
31
|
+
if (node.name === 'blockquote' && !quoteTag) {
|
|
32
|
+
quoteTag = node;
|
|
33
|
+
}
|
|
34
|
+
else if (node.name === 'p' && !authorNameTag) {
|
|
35
|
+
// Parse "**Name** — Role, Company" pattern from paragraph
|
|
36
|
+
for (const child of node.children) {
|
|
37
|
+
if (Tag.isTag(child) && child.name === 'strong' && !authorNameTag) {
|
|
38
|
+
const nameText = child.children.filter((c) => typeof c === 'string').join('');
|
|
39
|
+
authorNameTag = new Tag('span', { property: 'authorName' }, [nameText]);
|
|
40
|
+
// Get the role text after the strong tag
|
|
41
|
+
const idx = node.children.indexOf(child);
|
|
42
|
+
const rest = node.children.slice(idx + 1)
|
|
43
|
+
.filter((c) => typeof c === 'string')
|
|
44
|
+
.join('')
|
|
45
|
+
.replace(/^\s*[-–—]\s*/, '')
|
|
46
|
+
.trim();
|
|
47
|
+
if (rest) {
|
|
48
|
+
authorRoleTag = new Tag('span', { property: 'authorRole' }, [rest]);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (node.name === 'img' || (node.name === 'p' && node.children.some((c) => Tag.isTag(c) && c.name === 'img'))) {
|
|
54
|
+
// Extract image (could be direct or wrapped in p)
|
|
55
|
+
if (node.name === 'img') {
|
|
56
|
+
avatarTag = node;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
avatarTag = node.children.find((c) => Tag.isTag(c) && c.name === 'img');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const ratingMeta = this.rating !== undefined ? new Tag('meta', { content: this.rating }) : undefined;
|
|
64
|
+
const layoutMeta = new Tag('meta', { content: this.layout });
|
|
65
|
+
const resultChildren = [];
|
|
66
|
+
if (quoteTag)
|
|
67
|
+
resultChildren.push(quoteTag);
|
|
68
|
+
if (authorNameTag)
|
|
69
|
+
resultChildren.push(authorNameTag);
|
|
70
|
+
if (authorRoleTag)
|
|
71
|
+
resultChildren.push(authorRoleTag);
|
|
72
|
+
if (ratingMeta)
|
|
73
|
+
resultChildren.push(ratingMeta);
|
|
74
|
+
resultChildren.push(layoutMeta);
|
|
75
|
+
if (avatarTag)
|
|
76
|
+
resultChildren.push(avatarTag);
|
|
77
|
+
return createComponentRenderable(schema.Testimonial, {
|
|
78
|
+
tag: 'article',
|
|
79
|
+
properties: {
|
|
80
|
+
quote: quoteTag,
|
|
81
|
+
authorName: authorNameTag,
|
|
82
|
+
authorRole: authorRoleTag,
|
|
83
|
+
rating: ratingMeta,
|
|
84
|
+
avatar: avatarTag,
|
|
85
|
+
},
|
|
86
|
+
children: resultChildren,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
__decorate([
|
|
91
|
+
attribute({ type: Number, required: false }),
|
|
92
|
+
__metadata("design:type", Object)
|
|
93
|
+
], TestimonialModel.prototype, "rating", void 0);
|
|
94
|
+
__decorate([
|
|
95
|
+
attribute({ type: String, required: false, matches: layoutType.slice() }),
|
|
96
|
+
__metadata("design:type", Object)
|
|
97
|
+
], TestimonialModel.prototype, "layout", void 0);
|
|
98
|
+
export const testimonial = createSchema(TestimonialModel);
|
|
99
|
+
//# sourceMappingURL=testimonial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testimonial.js","sourceRoot":"","sources":["../../src/tags/testimonial.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/tags/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AA+GvC,eAAO,MAAM,aAAa,gBAAmC,CAAC;AAE9D,eAAO,MAAM,QAAQ,gBAA8B,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import Markdoc from '@markdoc/markdoc';
|
|
11
|
+
const { Ast, Tag } = Markdoc;
|
|
12
|
+
import { headingsToList } from '../util.js';
|
|
13
|
+
import { schema } from '../registry.js';
|
|
14
|
+
import { NodeStream } from '../lib/node.js';
|
|
15
|
+
import { attribute, group, Model, createComponentRenderable, createSchema } from '../lib/index.js';
|
|
16
|
+
import { pageSectionProperties } from './common.js';
|
|
17
|
+
// Parse "2023 - Company founded" or "2020-2023: Growth phase"
|
|
18
|
+
const DATE_LABEL_PATTERN = /^(.+?)\s*[-–—:]\s*(.+)$/;
|
|
19
|
+
class TimelineEntryModel extends Model {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
this.date = '';
|
|
23
|
+
this.label = '';
|
|
24
|
+
}
|
|
25
|
+
transform() {
|
|
26
|
+
const dateTag = new Tag('time', {}, [this.date]);
|
|
27
|
+
const labelTag = new Tag('span', {}, [this.label]);
|
|
28
|
+
const body = this.transformChildren().wrap('div');
|
|
29
|
+
return createComponentRenderable(schema.TimelineEntry, {
|
|
30
|
+
tag: 'li',
|
|
31
|
+
properties: {
|
|
32
|
+
date: dateTag,
|
|
33
|
+
label: labelTag,
|
|
34
|
+
},
|
|
35
|
+
refs: {
|
|
36
|
+
body: body.tag('div'),
|
|
37
|
+
},
|
|
38
|
+
children: [dateTag, labelTag, body.next()],
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
__decorate([
|
|
43
|
+
attribute({ type: String, required: false }),
|
|
44
|
+
__metadata("design:type", String)
|
|
45
|
+
], TimelineEntryModel.prototype, "date", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
attribute({ type: String, required: false }),
|
|
48
|
+
__metadata("design:type", String)
|
|
49
|
+
], TimelineEntryModel.prototype, "label", void 0);
|
|
50
|
+
class TimelineModel extends Model {
|
|
51
|
+
constructor() {
|
|
52
|
+
super(...arguments);
|
|
53
|
+
this.headingLevel = undefined;
|
|
54
|
+
this.direction = 'vertical';
|
|
55
|
+
}
|
|
56
|
+
convertHeadings(nodes) {
|
|
57
|
+
// Auto-detect heading level from first heading if not specified
|
|
58
|
+
const level = this.headingLevel ?? nodes.find(n => n.type === 'heading')?.attributes.level;
|
|
59
|
+
if (!level)
|
|
60
|
+
return nodes;
|
|
61
|
+
const converted = headingsToList({ level })(nodes);
|
|
62
|
+
const n = converted.length - 1;
|
|
63
|
+
if (!converted[n] || converted[n].type !== 'list')
|
|
64
|
+
return nodes;
|
|
65
|
+
const tags = converted[n].children.map(item => {
|
|
66
|
+
const heading = item.children[0];
|
|
67
|
+
const headingText = Array.from(heading.walk())
|
|
68
|
+
.filter(n => n.type === 'text')
|
|
69
|
+
.map(t => t.attributes.content)
|
|
70
|
+
.join(' ');
|
|
71
|
+
// Parse date and label from heading text
|
|
72
|
+
const match = headingText.match(DATE_LABEL_PATTERN);
|
|
73
|
+
const date = match ? match[1].trim() : '';
|
|
74
|
+
const label = match ? match[2].trim() : headingText;
|
|
75
|
+
return new Ast.Node('tag', { date, label }, item.children.slice(1), 'timeline-entry');
|
|
76
|
+
});
|
|
77
|
+
converted.splice(n, 1, ...tags);
|
|
78
|
+
return converted;
|
|
79
|
+
}
|
|
80
|
+
processChildren(nodes) {
|
|
81
|
+
return super.processChildren(this.convertHeadings(nodes));
|
|
82
|
+
}
|
|
83
|
+
transform() {
|
|
84
|
+
const header = this.header.transform();
|
|
85
|
+
const itemStream = this.itemgroup.transform();
|
|
86
|
+
const directionMeta = new Tag('meta', { content: this.direction });
|
|
87
|
+
const items = itemStream.tag('li').typeof('TimelineEntry');
|
|
88
|
+
const entriesList = new Tag('ol', {}, items.toArray());
|
|
89
|
+
const children = [directionMeta];
|
|
90
|
+
if (header.count() > 0) {
|
|
91
|
+
children.push(header.wrap('header').next());
|
|
92
|
+
}
|
|
93
|
+
children.push(entriesList);
|
|
94
|
+
return createComponentRenderable(schema.Timeline, {
|
|
95
|
+
tag: 'section',
|
|
96
|
+
property: 'contentSection',
|
|
97
|
+
properties: {
|
|
98
|
+
...pageSectionProperties(header),
|
|
99
|
+
direction: directionMeta,
|
|
100
|
+
entry: items,
|
|
101
|
+
},
|
|
102
|
+
refs: { entries: entriesList },
|
|
103
|
+
children,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
__decorate([
|
|
108
|
+
attribute({ type: Number, required: false }),
|
|
109
|
+
__metadata("design:type", Object)
|
|
110
|
+
], TimelineModel.prototype, "headingLevel", void 0);
|
|
111
|
+
__decorate([
|
|
112
|
+
attribute({ type: String, required: false }),
|
|
113
|
+
__metadata("design:type", String)
|
|
114
|
+
], TimelineModel.prototype, "direction", void 0);
|
|
115
|
+
__decorate([
|
|
116
|
+
group({ include: ['heading', 'paragraph'] }),
|
|
117
|
+
__metadata("design:type", NodeStream)
|
|
118
|
+
], TimelineModel.prototype, "header", void 0);
|
|
119
|
+
__decorate([
|
|
120
|
+
group({ include: ['tag'] }),
|
|
121
|
+
__metadata("design:type", NodeStream)
|
|
122
|
+
], TimelineModel.prototype, "itemgroup", void 0);
|
|
123
|
+
export const timelineEntry = createSchema(TimelineEntryModel);
|
|
124
|
+
export const timeline = createSchema(TimelineModel);
|
|
125
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/tags/timeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../src/tags/toc.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AA6CvC,eAAO,MAAM,GAAG,gBAAyB,CAAC"}
|
package/dist/tags/toc.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import Markdoc from '@markdoc/markdoc';
|
|
11
|
+
const { Tag } = Markdoc;
|
|
12
|
+
import { schema } from '../registry.js';
|
|
13
|
+
import { attribute, Model, createComponentRenderable, createSchema } from '../lib/index.js';
|
|
14
|
+
class TocModel extends Model {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.depth = 3;
|
|
18
|
+
this.ordered = false;
|
|
19
|
+
}
|
|
20
|
+
transform() {
|
|
21
|
+
const headings = this.config.variables?.headings || [];
|
|
22
|
+
// Filter to h2..h{depth+1}
|
|
23
|
+
const maxLevel = this.depth + 1;
|
|
24
|
+
const filtered = headings.filter(h => h.level >= 2 && h.level <= maxLevel);
|
|
25
|
+
const items = filtered.map(h => new Tag('li', { 'data-level': h.level }, [
|
|
26
|
+
new Tag('a', { href: `#${h.id}` }, [h.text]),
|
|
27
|
+
]));
|
|
28
|
+
const list = new Tag('ul', {}, items);
|
|
29
|
+
const depthMeta = new Tag('meta', { content: this.depth });
|
|
30
|
+
const orderedMeta = new Tag('meta', { content: this.ordered });
|
|
31
|
+
return createComponentRenderable(schema.TableOfContents, {
|
|
32
|
+
tag: 'nav',
|
|
33
|
+
properties: {
|
|
34
|
+
depth: depthMeta,
|
|
35
|
+
ordered: orderedMeta,
|
|
36
|
+
},
|
|
37
|
+
refs: {
|
|
38
|
+
list,
|
|
39
|
+
},
|
|
40
|
+
children: [depthMeta, orderedMeta, list],
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
__decorate([
|
|
45
|
+
attribute({ type: Number, required: false }),
|
|
46
|
+
__metadata("design:type", Number)
|
|
47
|
+
], TocModel.prototype, "depth", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
attribute({ type: Boolean, required: false }),
|
|
50
|
+
__metadata("design:type", Boolean)
|
|
51
|
+
], TocModel.prototype, "ordered", void 0);
|
|
52
|
+
export const toc = createSchema(TocModel);
|
|
53
|
+
//# sourceMappingURL=toc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toc.js","sourceRoot":"","sources":["../../src/tags/toc.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG5F,MAAM,QAAS,SAAQ,KAAK;IAA5B;;QAEC,UAAK,GAAW,CAAC,CAAC;QAGlB,YAAO,GAAY,KAAK,CAAC;IA+B1B,CAAC;IA7BA,SAAS;QACR,MAAM,QAAQ,GAAkB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,IAAI,EAAE,CAAC;QAEtE,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC9B,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE;YACxC,IAAI,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC5C,CAAC,CACF,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAE/D,OAAO,yBAAyB,CAAC,MAAM,CAAC,eAAe,EAAE;YACxD,GAAG,EAAE,KAAK;YACV,UAAU,EAAE;gBACX,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,WAAW;aACpB;YACD,IAAI,EAAE;gBACL,IAAI;aACJ;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC;SACxC,CAAC,CAAC;IACJ,CAAC;CACD;AAlCA;IADC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;uCAC3B;AAGlB;IADC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;yCACrB;AAiC1B,MAAM,CAAC,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC"}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import Markdoc from '@markdoc/markdoc';
|
|
2
|
+
import type { Tag, Config, Node, RenderableTreeNode } from '@markdoc/markdoc';
|
|
3
|
+
import { NodeFilter } from './interfaces.js';
|
|
4
|
+
export declare function generateIdIfMissing(node: Node, config: Config): void;
|
|
5
|
+
export declare function walkTag(tag: Tag): Generator<RenderableTreeNode>;
|
|
6
|
+
export interface HeadingsToListOptions {
|
|
7
|
+
level?: number;
|
|
8
|
+
include?: NodeFilter[];
|
|
9
|
+
}
|
|
10
|
+
export interface HeadingInfo {
|
|
11
|
+
level: number;
|
|
12
|
+
text: string;
|
|
13
|
+
id: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Pre-scan an AST for heading nodes, extracting their text and generating
|
|
17
|
+
* IDs using the same algorithm as nodes.ts heading transform.
|
|
18
|
+
*/
|
|
19
|
+
export declare function extractHeadings(node: Node): HeadingInfo[];
|
|
20
|
+
export declare function headingsToList(options?: HeadingsToListOptions): (nodes: Node[]) => Markdoc.Node[];
|
|
21
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAoB7D;AAED,wBAAiB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAShE;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,EAAE,CA+BzD;AAED,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,IAIpD,OAAO,IAAI,EAAE,oBA+BtB"}
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import Markdoc from '@markdoc/markdoc';
|
|
2
|
+
const { Ast } = Markdoc;
|
|
3
|
+
import { isFilterMatching } from './lib/node.js';
|
|
4
|
+
export function generateIdIfMissing(node, config) {
|
|
5
|
+
if (!config.variables?.generatedIds) {
|
|
6
|
+
config.variables.generatedIds = new Set();
|
|
7
|
+
}
|
|
8
|
+
const generatedIds = config.variables?.generatedIds;
|
|
9
|
+
if (!node.attributes.id) {
|
|
10
|
+
const prefix = node.type === 'tag' ? node.tag : node.type;
|
|
11
|
+
if (node.type === 'tag') {
|
|
12
|
+
let index = 0;
|
|
13
|
+
while (generatedIds.has(`${prefix}-${index}`)) {
|
|
14
|
+
index++;
|
|
15
|
+
}
|
|
16
|
+
const id = `${prefix}-${index}`;
|
|
17
|
+
generatedIds.add(id);
|
|
18
|
+
node.attributes.id = id;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function* walkTag(tag) {
|
|
23
|
+
yield tag;
|
|
24
|
+
for (const child of tag.children) {
|
|
25
|
+
if (Markdoc.Tag.isTag(child)) {
|
|
26
|
+
yield* walkTag(child);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
yield child;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Pre-scan an AST for heading nodes, extracting their text and generating
|
|
35
|
+
* IDs using the same algorithm as nodes.ts heading transform.
|
|
36
|
+
*/
|
|
37
|
+
export function extractHeadings(node) {
|
|
38
|
+
const headings = [];
|
|
39
|
+
function walk(n) {
|
|
40
|
+
if (n.type === 'heading') {
|
|
41
|
+
const textParts = [];
|
|
42
|
+
for (const child of n.walk()) {
|
|
43
|
+
if (child.type === 'text' && child.attributes.content) {
|
|
44
|
+
textParts.push(child.attributes.content);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const text = textParts.join(' ');
|
|
48
|
+
const id = n.attributes.id || text
|
|
49
|
+
.replace(/[?]/g, '')
|
|
50
|
+
.replace(/\s+/g, '-')
|
|
51
|
+
.toLowerCase();
|
|
52
|
+
headings.push({
|
|
53
|
+
level: n.attributes.level,
|
|
54
|
+
text,
|
|
55
|
+
id,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
for (const child of n.children) {
|
|
59
|
+
walk(child);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
walk(node);
|
|
63
|
+
return headings;
|
|
64
|
+
}
|
|
65
|
+
export function headingsToList(options) {
|
|
66
|
+
const level = options?.level ?? 1;
|
|
67
|
+
const include = options?.include;
|
|
68
|
+
return (nodes) => {
|
|
69
|
+
let start;
|
|
70
|
+
const list = new Ast.Node('list');
|
|
71
|
+
const head = [];
|
|
72
|
+
let tail = [];
|
|
73
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
74
|
+
const node = nodes[i];
|
|
75
|
+
if (node.type === 'heading' && node.attributes.level === level) {
|
|
76
|
+
list.children.push(new Ast.Node('item', {}, [node]));
|
|
77
|
+
start = i;
|
|
78
|
+
}
|
|
79
|
+
else if (start === undefined) {
|
|
80
|
+
head.push(node);
|
|
81
|
+
}
|
|
82
|
+
else if (!include || include.some(filter => isFilterMatching(node, filter))) {
|
|
83
|
+
const lastItem = list.children.at(-1);
|
|
84
|
+
if (lastItem) {
|
|
85
|
+
lastItem.children.push(node);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
tail = nodes.slice(i);
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (list.children.length === 0) {
|
|
94
|
+
return nodes;
|
|
95
|
+
}
|
|
96
|
+
return [...head, list, ...tail];
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@refrakt-md/runes",
|
|
3
|
+
"description": "Semantic Markdoc runes for refrakt.md",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/refrakt-md/refrakt.git",
|
|
10
|
+
"directory": "packages/runes"
|
|
11
|
+
},
|
|
12
|
+
"bugs": "https://github.com/refrakt-md/refrakt/issues",
|
|
13
|
+
"homepage": "https://github.com/refrakt-md/refrakt",
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
},
|
|
17
|
+
"main": "dist/index.js",
|
|
18
|
+
"types": "dist/index.d.ts",
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@refrakt-md/types": "0.1.0",
|
|
27
|
+
"@markdoc/markdoc": "0.4.0",
|
|
28
|
+
"reflect-metadata": "^0.2.0",
|
|
29
|
+
"fast-xml-parser": "4.5.1",
|
|
30
|
+
"highlight.js": "^11.11.1",
|
|
31
|
+
"path-browserify": "1.0.1",
|
|
32
|
+
"iso8601-duration": "2.1.2"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/path-browserify": "1.0.3"
|
|
36
|
+
}
|
|
37
|
+
}
|