@refrakt-md/lumina 0.4.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/contracts/structures.json +5 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +238 -0
- package/dist/config.js.map +1 -0
- package/dist/lib/engine.d.ts +13 -0
- package/dist/lib/engine.d.ts.map +1 -0
- package/dist/lib/engine.js +218 -0
- package/dist/lib/engine.js.map +1 -0
- package/dist/lib/helpers.d.ts +14 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/helpers.js +26 -0
- package/dist/lib/helpers.js.map +1 -0
- package/dist/lib/types.d.ts +74 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/transform.d.ts +5 -0
- package/dist/transform.d.ts.map +1 -0
- package/dist/transform.js +7 -0
- package/dist/transform.js.map +1 -0
- package/index.css +57 -0
- package/manifest.json +13 -0
- package/package.json +62 -0
- package/styles/elements/blockquote.css +22 -0
- package/styles/elements/table.css +26 -0
- package/styles/global.css +138 -0
- package/styles/layouts/default.css +45 -0
- package/styles/layouts/docs.css +94 -0
- package/styles/runes/accordion.css +55 -0
- package/styles/runes/annotate.css +87 -0
- package/styles/runes/api.css +77 -0
- package/styles/runes/bento.css +48 -0
- package/styles/runes/breadcrumb.css +46 -0
- package/styles/runes/cast.css +56 -0
- package/styles/runes/changelog.css +53 -0
- package/styles/runes/chart.css +33 -0
- package/styles/runes/codegroup.css +72 -0
- package/styles/runes/compare.css +41 -0
- package/styles/runes/comparison.css +211 -0
- package/styles/runes/conversation.css +54 -0
- package/styles/runes/cta.css +87 -0
- package/styles/runes/datatable.css +112 -0
- package/styles/runes/details.css +44 -0
- package/styles/runes/diagram.css +27 -0
- package/styles/runes/diff.css +74 -0
- package/styles/runes/embed.css +32 -0
- package/styles/runes/event.css +57 -0
- package/styles/runes/feature.css +67 -0
- package/styles/runes/figure.css +24 -0
- package/styles/runes/form.css +184 -0
- package/styles/runes/grid.css +13 -0
- package/styles/runes/hero.css +102 -0
- package/styles/runes/hint.css +97 -0
- package/styles/runes/howto.css +37 -0
- package/styles/runes/nav.css +50 -0
- package/styles/runes/organization.css +26 -0
- package/styles/runes/page-section.css +20 -0
- package/styles/runes/pricing.css +109 -0
- package/styles/runes/recipe.css +47 -0
- package/styles/runes/reveal.css +55 -0
- package/styles/runes/sidenote.css +28 -0
- package/styles/runes/steps.css +59 -0
- package/styles/runes/storyboard.css +65 -0
- package/styles/runes/tabs.css +50 -0
- package/styles/runes/testimonial.css +59 -0
- package/styles/runes/timeline.css +67 -0
- package/styles/runes/toc.css +43 -0
- package/sveltekit/components/Accordion.svelte +26 -0
- package/sveltekit/components/Bento.svelte +50 -0
- package/sveltekit/components/Chart.svelte +121 -0
- package/sveltekit/components/CodeGroup.svelte +88 -0
- package/sveltekit/components/Comparison.svelte +209 -0
- package/sveltekit/components/DataTable.svelte +154 -0
- package/sveltekit/components/Details.svelte +23 -0
- package/sveltekit/components/Diagram.svelte +45 -0
- package/sveltekit/components/Embed.svelte +36 -0
- package/sveltekit/components/Form.svelte +194 -0
- package/sveltekit/components/Grid.svelte +42 -0
- package/sveltekit/components/Nav.svelte +62 -0
- package/sveltekit/components/Pricing.svelte +20 -0
- package/sveltekit/components/Reveal.svelte +62 -0
- package/sveltekit/components/Storyboard.svelte +41 -0
- package/sveltekit/components/Tabs.svelte +75 -0
- package/sveltekit/components/Testimonial.svelte +26 -0
- package/sveltekit/elements/Blockquote.svelte +37 -0
- package/sveltekit/elements/Pre.svelte +77 -0
- package/sveltekit/elements/Table.svelte +40 -0
- package/sveltekit/elements.ts +11 -0
- package/sveltekit/index.ts +32 -0
- package/sveltekit/layouts/BlogLayout.svelte +382 -0
- package/sveltekit/layouts/DefaultLayout.svelte +70 -0
- package/sveltekit/layouts/DocsLayout.svelte +133 -0
- package/sveltekit/manifest.json +51 -0
- package/sveltekit/registry.ts +59 -0
- package/sveltekit/tokens.css +71 -0
- package/tokens/base.css +78 -0
- package/tokens/dark.css +102 -0
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,iEAAiE;AACjE,eAAO,MAAM,YAAY,EAAE,WAgP1B,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/** Lumina theme configuration — drives the identity transform */
|
|
2
|
+
export const luminaConfig = {
|
|
3
|
+
prefix: 'rf',
|
|
4
|
+
tokenPrefix: '--rf',
|
|
5
|
+
icons: {
|
|
6
|
+
hint: {
|
|
7
|
+
note: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>',
|
|
8
|
+
warning: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>',
|
|
9
|
+
caution: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="15" y1="9" x2="9" y2="15"/><line x1="9" y1="9" x2="15" y2="15"/></svg>',
|
|
10
|
+
check: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>',
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
runes: {
|
|
14
|
+
// ─── Simple runes (block name only, engine adds BEM classes) ───
|
|
15
|
+
Accordion: { block: 'accordion' },
|
|
16
|
+
AccordionItem: { block: 'accordion-item', autoLabel: { name: 'header' } },
|
|
17
|
+
Details: { block: 'details', autoLabel: { summary: 'summary' } },
|
|
18
|
+
Grid: { block: 'grid' },
|
|
19
|
+
CodeGroup: {
|
|
20
|
+
block: 'codegroup',
|
|
21
|
+
structure: {
|
|
22
|
+
topbar: {
|
|
23
|
+
tag: 'div', before: true,
|
|
24
|
+
children: [
|
|
25
|
+
{ tag: 'span', ref: 'dot' },
|
|
26
|
+
{ tag: 'span', ref: 'dot' },
|
|
27
|
+
{ tag: 'span', ref: 'dot' },
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
PageSection: { block: 'page-section' },
|
|
33
|
+
TableOfContents: { block: 'toc' },
|
|
34
|
+
Embed: { block: 'embed' },
|
|
35
|
+
Breadcrumb: { block: 'breadcrumb' },
|
|
36
|
+
BreadcrumbItem: { block: 'breadcrumb-item' },
|
|
37
|
+
Testimonial: { block: 'testimonial' },
|
|
38
|
+
Timeline: { block: 'timeline' },
|
|
39
|
+
TimelineEntry: { block: 'timeline-entry' },
|
|
40
|
+
Changelog: { block: 'changelog' },
|
|
41
|
+
ChangelogRelease: { block: 'changelog-release' },
|
|
42
|
+
Event: {
|
|
43
|
+
block: 'event',
|
|
44
|
+
contentWrapper: { tag: 'div', ref: 'content' },
|
|
45
|
+
modifiers: {
|
|
46
|
+
date: { source: 'meta' },
|
|
47
|
+
endDate: { source: 'meta' },
|
|
48
|
+
location: { source: 'meta' },
|
|
49
|
+
url: { source: 'meta' },
|
|
50
|
+
},
|
|
51
|
+
structure: {
|
|
52
|
+
details: {
|
|
53
|
+
tag: 'div', before: true,
|
|
54
|
+
children: [
|
|
55
|
+
{
|
|
56
|
+
tag: 'div', ref: 'detail', condition: 'date',
|
|
57
|
+
children: [
|
|
58
|
+
{ tag: 'span', ref: 'label', children: ['Date'] },
|
|
59
|
+
{ tag: 'span', ref: 'value', metaText: 'date' },
|
|
60
|
+
{ tag: 'span', ref: 'end-date', metaText: 'endDate', textPrefix: ' — ', condition: 'endDate' },
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
tag: 'div', ref: 'detail', condition: 'location',
|
|
65
|
+
children: [
|
|
66
|
+
{ tag: 'span', ref: 'label', children: ['Location'] },
|
|
67
|
+
{ tag: 'span', ref: 'value', metaText: 'location' },
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
tag: 'a', ref: 'register', condition: 'url',
|
|
72
|
+
attrs: { href: { fromModifier: 'url' } },
|
|
73
|
+
children: ['Register'],
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
Organization: { block: 'organization' },
|
|
80
|
+
Cast: { block: 'cast' },
|
|
81
|
+
CastMember: { block: 'cast-member' },
|
|
82
|
+
Recipe: {
|
|
83
|
+
block: 'recipe',
|
|
84
|
+
contentWrapper: { tag: 'div', ref: 'content' },
|
|
85
|
+
modifiers: {
|
|
86
|
+
prepTime: { source: 'meta' },
|
|
87
|
+
cookTime: { source: 'meta' },
|
|
88
|
+
servings: { source: 'meta' },
|
|
89
|
+
difficulty: { source: 'meta', default: 'medium' },
|
|
90
|
+
},
|
|
91
|
+
structure: {
|
|
92
|
+
meta: {
|
|
93
|
+
tag: 'div', before: true,
|
|
94
|
+
conditionAny: ['prepTime', 'cookTime', 'servings', 'difficulty'],
|
|
95
|
+
children: [
|
|
96
|
+
{ tag: 'span', ref: 'meta-item', metaText: 'prepTime', transform: 'duration', textPrefix: 'Prep: ', condition: 'prepTime' },
|
|
97
|
+
{ tag: 'span', ref: 'meta-item', metaText: 'cookTime', transform: 'duration', textPrefix: 'Cook: ', condition: 'cookTime' },
|
|
98
|
+
{ tag: 'span', ref: 'meta-item', metaText: 'servings', textPrefix: 'Serves: ', condition: 'servings' },
|
|
99
|
+
{ tag: 'span', ref: 'badge', metaText: 'difficulty', condition: 'difficulty' },
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
RecipeIngredient: { block: 'recipe-ingredient' },
|
|
105
|
+
Pricing: { block: 'pricing' },
|
|
106
|
+
Tier: { block: 'tier' },
|
|
107
|
+
FeaturedTier: { block: 'featured-tier' },
|
|
108
|
+
Feature: { block: 'feature', contextModifiers: { 'Hero': 'in-hero', 'Grid': 'in-grid' } },
|
|
109
|
+
FeatureDefinition: { block: 'feature-definition' },
|
|
110
|
+
Steps: { block: 'steps' },
|
|
111
|
+
Step: { block: 'step' },
|
|
112
|
+
Nav: { block: 'nav' },
|
|
113
|
+
NavGroup: { block: 'nav-group' },
|
|
114
|
+
NavItem: { block: 'nav-item' },
|
|
115
|
+
Api: {
|
|
116
|
+
block: 'api',
|
|
117
|
+
contentWrapper: { tag: 'div', ref: 'body' },
|
|
118
|
+
modifiers: {
|
|
119
|
+
method: { source: 'meta', default: 'GET' },
|
|
120
|
+
path: { source: 'meta' },
|
|
121
|
+
auth: { source: 'meta' },
|
|
122
|
+
},
|
|
123
|
+
structure: {
|
|
124
|
+
header: {
|
|
125
|
+
tag: 'div', before: true,
|
|
126
|
+
children: [
|
|
127
|
+
{ tag: 'span', ref: 'method', metaText: 'method' },
|
|
128
|
+
{ tag: 'code', ref: 'path', metaText: 'path' },
|
|
129
|
+
{ tag: 'span', ref: 'auth', metaText: 'auth', condition: 'auth' },
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
Diff: {
|
|
135
|
+
block: 'diff',
|
|
136
|
+
modifiers: { mode: { source: 'meta', default: 'unified' } },
|
|
137
|
+
},
|
|
138
|
+
Chart: { block: 'chart' },
|
|
139
|
+
MusicPlaylist: { block: 'music-playlist' },
|
|
140
|
+
MusicRecording: { block: 'music-recording' },
|
|
141
|
+
// ─── Runes with modifier meta tags ───
|
|
142
|
+
Hint: {
|
|
143
|
+
block: 'hint',
|
|
144
|
+
modifiers: { hintType: { source: 'meta', default: 'note' } },
|
|
145
|
+
contextModifiers: { 'Hero': 'in-hero', 'Feature': 'in-feature' },
|
|
146
|
+
structure: {
|
|
147
|
+
header: {
|
|
148
|
+
tag: 'div', before: true,
|
|
149
|
+
children: [
|
|
150
|
+
{ tag: 'span', ref: 'icon', icon: { group: 'hint', variant: 'hintType' } },
|
|
151
|
+
{ tag: 'span', ref: 'title', metaText: 'hintType' },
|
|
152
|
+
],
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
Hero: {
|
|
157
|
+
block: 'hero',
|
|
158
|
+
modifiers: { align: { source: 'meta', default: 'center' } },
|
|
159
|
+
contextModifiers: { 'Feature': 'in-feature' },
|
|
160
|
+
},
|
|
161
|
+
CallToAction: { block: 'cta', contextModifiers: { 'Hero': 'in-hero', 'Pricing': 'in-pricing' } },
|
|
162
|
+
Figure: {
|
|
163
|
+
block: 'figure',
|
|
164
|
+
modifiers: {
|
|
165
|
+
size: { source: 'meta', default: 'default' },
|
|
166
|
+
align: { source: 'meta', default: 'center' },
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
Sidenote: {
|
|
170
|
+
block: 'sidenote',
|
|
171
|
+
modifiers: { style: { source: 'meta', default: 'sidenote' } },
|
|
172
|
+
},
|
|
173
|
+
Compare: {
|
|
174
|
+
block: 'compare',
|
|
175
|
+
modifiers: { layout: { source: 'meta', default: 'side-by-side' } },
|
|
176
|
+
},
|
|
177
|
+
Conversation: { block: 'conversation' },
|
|
178
|
+
ConversationMessage: {
|
|
179
|
+
block: 'conversation-message',
|
|
180
|
+
modifiers: { alignment: { source: 'meta', default: 'left' } },
|
|
181
|
+
},
|
|
182
|
+
Annotate: {
|
|
183
|
+
block: 'annotate',
|
|
184
|
+
modifiers: { style: { source: 'meta', default: 'margin' } },
|
|
185
|
+
},
|
|
186
|
+
AnnotateNote: { block: 'annotate-note' },
|
|
187
|
+
Storyboard: {
|
|
188
|
+
block: 'storyboard',
|
|
189
|
+
modifiers: { style: { source: 'meta', default: 'clean' } },
|
|
190
|
+
},
|
|
191
|
+
StoryboardPanel: { block: 'storyboard-panel' },
|
|
192
|
+
Bento: { block: 'bento' },
|
|
193
|
+
BentoCell: {
|
|
194
|
+
block: 'bento-cell',
|
|
195
|
+
modifiers: { size: { source: 'meta', default: 'medium' } },
|
|
196
|
+
},
|
|
197
|
+
Comparison: { block: 'comparison' },
|
|
198
|
+
ComparisonColumn: { block: 'comparison-column' },
|
|
199
|
+
ComparisonRow: {
|
|
200
|
+
block: 'comparison-row',
|
|
201
|
+
modifiers: { rowType: { source: 'meta', default: 'text' } },
|
|
202
|
+
},
|
|
203
|
+
HowTo: {
|
|
204
|
+
block: 'howto',
|
|
205
|
+
contentWrapper: { tag: 'div', ref: 'content' },
|
|
206
|
+
modifiers: {
|
|
207
|
+
estimatedTime: { source: 'meta' },
|
|
208
|
+
difficulty: { source: 'meta', default: 'medium' },
|
|
209
|
+
},
|
|
210
|
+
structure: {
|
|
211
|
+
meta: {
|
|
212
|
+
tag: 'div', before: true,
|
|
213
|
+
conditionAny: ['estimatedTime', 'difficulty'],
|
|
214
|
+
children: [
|
|
215
|
+
{ tag: 'span', ref: 'meta-item', metaText: 'estimatedTime', transform: 'duration', textPrefix: 'Estimated time: ', condition: 'estimatedTime' },
|
|
216
|
+
{ tag: 'span', ref: 'meta-item', metaText: 'difficulty', textPrefix: 'Difficulty: ', condition: 'difficulty' },
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
// ─── Interactive runes (still get BEM classes, components add behavior) ───
|
|
222
|
+
TabGroup: { block: 'tabs' },
|
|
223
|
+
Tab: { block: 'tab' },
|
|
224
|
+
DataTable: { block: 'datatable' },
|
|
225
|
+
Form: {
|
|
226
|
+
block: 'form',
|
|
227
|
+
modifiers: { style: { source: 'meta', default: 'stacked' } },
|
|
228
|
+
},
|
|
229
|
+
FormField: {
|
|
230
|
+
block: 'form-field',
|
|
231
|
+
modifiers: { fieldType: { source: 'meta', default: 'text' } },
|
|
232
|
+
},
|
|
233
|
+
Reveal: { block: 'reveal' },
|
|
234
|
+
RevealStep: { block: 'reveal-step' },
|
|
235
|
+
Diagram: { block: 'diagram' },
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ThemeConfig, RendererNode } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create an identity transform function from a theme configuration.
|
|
4
|
+
*
|
|
5
|
+
* The returned function walks the serialized tag tree and enhances it:
|
|
6
|
+
* - Adds BEM classes based on the rune config
|
|
7
|
+
* - Reads and consumes meta tags for variant info
|
|
8
|
+
* - Auto-labels children by tag name (e.g., summary → data-name="header")
|
|
9
|
+
* - Injects structural elements (headers, icons, titles) from config
|
|
10
|
+
* - Recurses into children for nested runes
|
|
11
|
+
*/
|
|
12
|
+
export declare function createTransform(config: ThemeConfig): (tree: RendererNode) => RendererNode;
|
|
13
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/lib/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA6C,YAAY,EAAE,MAAM,YAAY,CAAC;AAkBvG;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,UAGjB,YAAY,KAAG,YAAY,CAgB5D"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { isTag, makeTag, readMeta } from './helpers.js';
|
|
2
|
+
/** Pure text transforms for metaText values */
|
|
3
|
+
const transforms = {
|
|
4
|
+
duration(iso) {
|
|
5
|
+
const m = iso.match(/PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?/);
|
|
6
|
+
if (!m)
|
|
7
|
+
return iso;
|
|
8
|
+
const parts = [];
|
|
9
|
+
if (m[1])
|
|
10
|
+
parts.push(`${m[1]}h`);
|
|
11
|
+
if (m[2])
|
|
12
|
+
parts.push(`${m[2]}m`);
|
|
13
|
+
if (m[3])
|
|
14
|
+
parts.push(`${m[3]}s`);
|
|
15
|
+
return parts.join(' ') || iso;
|
|
16
|
+
},
|
|
17
|
+
uppercase: (s) => s.toUpperCase(),
|
|
18
|
+
capitalize: (s) => s.charAt(0).toUpperCase() + s.slice(1),
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Create an identity transform function from a theme configuration.
|
|
22
|
+
*
|
|
23
|
+
* The returned function walks the serialized tag tree and enhances it:
|
|
24
|
+
* - Adds BEM classes based on the rune config
|
|
25
|
+
* - Reads and consumes meta tags for variant info
|
|
26
|
+
* - Auto-labels children by tag name (e.g., summary → data-name="header")
|
|
27
|
+
* - Injects structural elements (headers, icons, titles) from config
|
|
28
|
+
* - Recurses into children for nested runes
|
|
29
|
+
*/
|
|
30
|
+
export function createTransform(config) {
|
|
31
|
+
const { prefix, runes, icons = {} } = config;
|
|
32
|
+
function identityTransform(tree) {
|
|
33
|
+
if (tree === null || tree === undefined)
|
|
34
|
+
return tree;
|
|
35
|
+
if (typeof tree === 'string' || typeof tree === 'number')
|
|
36
|
+
return tree;
|
|
37
|
+
if (Array.isArray(tree))
|
|
38
|
+
return tree.map(identityTransform);
|
|
39
|
+
if (!isTag(tree))
|
|
40
|
+
return tree;
|
|
41
|
+
const typeof_ = tree.attributes?.typeof;
|
|
42
|
+
if (typeof_ && typeof_ in runes) {
|
|
43
|
+
return transformRune(tree, runes[typeof_], prefix, icons, identityTransform);
|
|
44
|
+
}
|
|
45
|
+
// Recurse into children even for non-rune tags
|
|
46
|
+
return { ...tree, children: tree.children.map(identityTransform) };
|
|
47
|
+
}
|
|
48
|
+
return identityTransform;
|
|
49
|
+
}
|
|
50
|
+
/** Apply BEM classes and structural enhancements to a rune tag */
|
|
51
|
+
function transformRune(tag, config, prefix, icons, recurse) {
|
|
52
|
+
const block = `${prefix}-${config.block}`;
|
|
53
|
+
// 1. Read modifiers from meta tags, collecting resolved values
|
|
54
|
+
const modifierClasses = [];
|
|
55
|
+
const modifierValues = {};
|
|
56
|
+
if (config.modifiers) {
|
|
57
|
+
for (const [name, mod] of Object.entries(config.modifiers)) {
|
|
58
|
+
const value = mod.source === 'meta'
|
|
59
|
+
? readMeta(tag, name, mod.default)
|
|
60
|
+
: tag.attributes[name] ?? mod.default;
|
|
61
|
+
if (value) {
|
|
62
|
+
modifierValues[name] = value;
|
|
63
|
+
modifierClasses.push(`${block}--${value}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// 2. Store modifier values as data attributes (so components can read them even after meta removal)
|
|
68
|
+
const modDataAttrs = {};
|
|
69
|
+
for (const [name, value] of Object.entries(modifierValues)) {
|
|
70
|
+
const kebab = name.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
71
|
+
modDataAttrs[`data-${kebab}`] = value;
|
|
72
|
+
}
|
|
73
|
+
// 3. Build the class string
|
|
74
|
+
const existingClass = tag.attributes.class || '';
|
|
75
|
+
const bemClass = [block, ...modifierClasses, existingClass].filter(Boolean).join(' ');
|
|
76
|
+
// 4. Auto-label children by tag name or property attribute
|
|
77
|
+
let children = tag.children;
|
|
78
|
+
if (config.autoLabel) {
|
|
79
|
+
children = children.map(child => {
|
|
80
|
+
if (!isTag(child))
|
|
81
|
+
return child;
|
|
82
|
+
const label = config.autoLabel[child.name] ?? config.autoLabel[child.attributes?.property];
|
|
83
|
+
if (label && !child.attributes['data-name']) {
|
|
84
|
+
return { ...child, attributes: { ...child.attributes, 'data-name': label } };
|
|
85
|
+
}
|
|
86
|
+
return child;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// 5. Inject structural elements from config
|
|
90
|
+
if (config.structure) {
|
|
91
|
+
const prepend = [];
|
|
92
|
+
const append = [];
|
|
93
|
+
for (const [name, entry] of Object.entries(config.structure)) {
|
|
94
|
+
const element = buildStructureElement(entry, name, modifierValues, icons);
|
|
95
|
+
if (!element)
|
|
96
|
+
continue;
|
|
97
|
+
if (entry.before) {
|
|
98
|
+
prepend.push(element);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
append.push(element);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (config.contentWrapper) {
|
|
105
|
+
const wrapped = makeTag(config.contentWrapper.tag, { 'data-name': config.contentWrapper.ref }, children);
|
|
106
|
+
children = [...prepend, wrapped, ...append];
|
|
107
|
+
}
|
|
108
|
+
else if (prepend.length || append.length) {
|
|
109
|
+
children = [...prepend, ...children, ...append];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (config.contentWrapper) {
|
|
113
|
+
const wrapped = makeTag(config.contentWrapper.tag, { 'data-name': config.contentWrapper.ref }, children);
|
|
114
|
+
children = [wrapped];
|
|
115
|
+
}
|
|
116
|
+
// 6. Apply BEM element classes to data-name children (recursively for structural elements)
|
|
117
|
+
const enhancedChildren = children.map(child => {
|
|
118
|
+
if (!isTag(child))
|
|
119
|
+
return recurse(child);
|
|
120
|
+
return applyBemClasses(child, block, recurse);
|
|
121
|
+
});
|
|
122
|
+
// 7. Remove consumed meta tags
|
|
123
|
+
const filteredChildren = enhancedChildren.filter(child => {
|
|
124
|
+
if (!isTag(child))
|
|
125
|
+
return true;
|
|
126
|
+
const c = child;
|
|
127
|
+
if (c.name !== 'meta' || !c.attributes.property)
|
|
128
|
+
return true;
|
|
129
|
+
return !config.modifiers || !(c.attributes.property in config.modifiers);
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
...tag,
|
|
133
|
+
attributes: {
|
|
134
|
+
...tag.attributes,
|
|
135
|
+
...modDataAttrs,
|
|
136
|
+
class: bemClass,
|
|
137
|
+
...(config.rootAttributes || {}),
|
|
138
|
+
},
|
|
139
|
+
children: filteredChildren,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/** Recursively apply BEM element classes to data-name elements within a rune's children */
|
|
143
|
+
function applyBemClasses(child, block, recurse) {
|
|
144
|
+
const dataName = child.attributes['data-name'];
|
|
145
|
+
if (dataName) {
|
|
146
|
+
const elementClass = `${block}__${dataName}`;
|
|
147
|
+
const childExistingClass = child.attributes.class || '';
|
|
148
|
+
// Recursively apply BEM to nested data-name children (e.g., icon/title inside header)
|
|
149
|
+
const nestedChildren = child.children.map(c => {
|
|
150
|
+
if (!isTag(c))
|
|
151
|
+
return c;
|
|
152
|
+
return applyBemClasses(c, block, recurse);
|
|
153
|
+
});
|
|
154
|
+
return recurse({
|
|
155
|
+
...child,
|
|
156
|
+
attributes: {
|
|
157
|
+
...child.attributes,
|
|
158
|
+
class: [elementClass, childExistingClass].filter(Boolean).join(' '),
|
|
159
|
+
},
|
|
160
|
+
children: nestedChildren,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return recurse(child);
|
|
164
|
+
}
|
|
165
|
+
/** Build a structural element from a StructureEntry config. Returns null if condition is not met. */
|
|
166
|
+
function buildStructureElement(entry, name, modifierValues, icons) {
|
|
167
|
+
// Conditional injection
|
|
168
|
+
if (entry.condition && !modifierValues[entry.condition])
|
|
169
|
+
return null;
|
|
170
|
+
if (entry.conditionAny && !entry.conditionAny.some(k => modifierValues[k]))
|
|
171
|
+
return null;
|
|
172
|
+
const dataName = entry.ref ?? name;
|
|
173
|
+
// Resolve extra attributes
|
|
174
|
+
const extraAttrs = {};
|
|
175
|
+
if (entry.attrs) {
|
|
176
|
+
for (const [key, val] of Object.entries(entry.attrs)) {
|
|
177
|
+
if (typeof val === 'string') {
|
|
178
|
+
extraAttrs[key] = val;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
extraAttrs[key] = modifierValues[val.fromModifier] ?? '';
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const baseAttrs = { 'data-name': dataName, ...extraAttrs };
|
|
186
|
+
// Icon entry: create empty element, CSS displays icon via mask-image
|
|
187
|
+
if (entry.icon) {
|
|
188
|
+
return makeTag(entry.tag, baseAttrs, []);
|
|
189
|
+
}
|
|
190
|
+
// Meta text injection: use resolved modifier value as text content
|
|
191
|
+
if (entry.metaText) {
|
|
192
|
+
let text = modifierValues[entry.metaText] ?? '';
|
|
193
|
+
if (entry.transform && transforms[entry.transform]) {
|
|
194
|
+
text = transforms[entry.transform](text);
|
|
195
|
+
}
|
|
196
|
+
if (entry.textPrefix)
|
|
197
|
+
text = entry.textPrefix + text;
|
|
198
|
+
if (entry.textSuffix)
|
|
199
|
+
text = text + entry.textSuffix;
|
|
200
|
+
return makeTag(entry.tag, baseAttrs, [text]);
|
|
201
|
+
}
|
|
202
|
+
// Process children recursively
|
|
203
|
+
const elementChildren = [];
|
|
204
|
+
if (entry.children) {
|
|
205
|
+
for (const child of entry.children) {
|
|
206
|
+
if (typeof child === 'string') {
|
|
207
|
+
elementChildren.push(child);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
const built = buildStructureElement(child, child.ref ?? '', modifierValues, icons);
|
|
211
|
+
if (built)
|
|
212
|
+
elementChildren.push(built);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return makeTag(entry.tag, baseAttrs, elementChildren);
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/lib/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SerializedTag, RendererNode } from './types.js';
|
|
2
|
+
/** Type guard: is this node a serialized tag? */
|
|
3
|
+
export declare function isTag(node: RendererNode): node is SerializedTag;
|
|
4
|
+
/** Create a serialized tag node */
|
|
5
|
+
export declare function makeTag(name: string, attributes?: Record<string, any>, children?: RendererNode[]): SerializedTag;
|
|
6
|
+
/** Find a meta tag child by its property attribute */
|
|
7
|
+
export declare function findMeta(tag: SerializedTag, property: string): SerializedTag | undefined;
|
|
8
|
+
/** Find a child tag by its data-name attribute */
|
|
9
|
+
export declare function findByDataName(tag: SerializedTag, name: string): SerializedTag | undefined;
|
|
10
|
+
/** Get all children that are NOT meta tags */
|
|
11
|
+
export declare function nonMetaChildren(tag: SerializedTag): RendererNode[];
|
|
12
|
+
/** Read a meta tag's content value, with optional default */
|
|
13
|
+
export declare function readMeta(tag: SerializedTag, property: string, defaultValue?: string): string | undefined;
|
|
14
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/lib/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D,iDAAiD;AACjD,wBAAgB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,IAAI,aAAa,CAE/D;AAED,mCAAmC;AACnC,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAAE,QAAQ,GAAE,YAAY,EAAO,GAAG,aAAa,CAExH;AAED,sDAAsD;AACtD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAIxF;AAED,kDAAkD;AAClD,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAI1F;AAED,8CAA8C;AAC9C,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,EAAE,CAElE;AAED,6DAA6D;AAC7D,wBAAgB,QAAQ,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGxG"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Type guard: is this node a serialized tag? */
|
|
2
|
+
export function isTag(node) {
|
|
3
|
+
return typeof node === 'object' && node !== null && !Array.isArray(node) && node.$$mdtype === 'Tag';
|
|
4
|
+
}
|
|
5
|
+
/** Create a serialized tag node */
|
|
6
|
+
export function makeTag(name, attributes = {}, children = []) {
|
|
7
|
+
return { $$mdtype: 'Tag', name, attributes, children };
|
|
8
|
+
}
|
|
9
|
+
/** Find a meta tag child by its property attribute */
|
|
10
|
+
export function findMeta(tag, property) {
|
|
11
|
+
return tag.children.find((c) => isTag(c) && c.name === 'meta' && c.attributes.property === property);
|
|
12
|
+
}
|
|
13
|
+
/** Find a child tag by its data-name attribute */
|
|
14
|
+
export function findByDataName(tag, name) {
|
|
15
|
+
return tag.children.find((c) => isTag(c) && c.attributes['data-name'] === name);
|
|
16
|
+
}
|
|
17
|
+
/** Get all children that are NOT meta tags */
|
|
18
|
+
export function nonMetaChildren(tag) {
|
|
19
|
+
return tag.children.filter(c => !(isTag(c) && c.name === 'meta'));
|
|
20
|
+
}
|
|
21
|
+
/** Read a meta tag's content value, with optional default */
|
|
22
|
+
export function readMeta(tag, property, defaultValue) {
|
|
23
|
+
const meta = findMeta(tag, property);
|
|
24
|
+
return meta?.attributes.content ?? defaultValue;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/lib/helpers.ts"],"names":[],"mappings":"AAEA,iDAAiD;AACjD,MAAM,UAAU,KAAK,CAAC,IAAkB;IACvC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAK,IAAY,CAAC,QAAQ,KAAK,KAAK,CAAC;AAC9G,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,aAAkC,EAAE,EAAE,WAA2B,EAAE;IACxG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACxD,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,QAAQ,CAAC,GAAkB,EAAE,QAAgB;IAC5D,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CACvB,CAAC,CAAC,EAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAC9F,CAAC;AACH,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,cAAc,CAAC,GAAkB,EAAE,IAAY;IAC9D,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CACvB,CAAC,CAAC,EAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CACzE,CAAC;AACH,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,eAAe,CAAC,GAAkB;IACjD,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,QAAQ,CAAC,GAAkB,EAAE,QAAgB,EAAE,YAAqB;IACnF,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrC,OAAO,IAAI,EAAE,UAAU,CAAC,OAAO,IAAI,YAAY,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/** A serialized Markdoc Tag (plain object, not a class instance) */
|
|
2
|
+
export interface SerializedTag {
|
|
3
|
+
$$mdtype: 'Tag';
|
|
4
|
+
name: string;
|
|
5
|
+
attributes: Record<string, any>;
|
|
6
|
+
children: RendererNode[];
|
|
7
|
+
}
|
|
8
|
+
export type RendererNode = SerializedTag | string | number | null | undefined | RendererNode[];
|
|
9
|
+
/** Configuration for a single rune's identity transform */
|
|
10
|
+
export interface RuneConfig {
|
|
11
|
+
/** BEM block name (without prefix). E.g., 'hint' → .rf-hint */
|
|
12
|
+
block: string;
|
|
13
|
+
/** Modifier sources — maps modifier name to where to read it from */
|
|
14
|
+
modifiers?: Record<string, {
|
|
15
|
+
/** Where to read the modifier value */
|
|
16
|
+
source: 'meta' | 'attribute';
|
|
17
|
+
/** Default value if not found */
|
|
18
|
+
default?: string;
|
|
19
|
+
}>;
|
|
20
|
+
/** Structural overrides — additional elements to inject (keyed by data-name) */
|
|
21
|
+
structure?: Record<string, StructureEntry>;
|
|
22
|
+
/** Auto-label children by tag name → data-name. E.g., { summary: 'header' } */
|
|
23
|
+
autoLabel?: Record<string, string>;
|
|
24
|
+
/** Extra attributes to add to the root element */
|
|
25
|
+
rootAttributes?: Record<string, string>;
|
|
26
|
+
/** Wrap content children (non-structural) in this element */
|
|
27
|
+
contentWrapper?: {
|
|
28
|
+
tag: string;
|
|
29
|
+
ref: string;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export interface StructureEntry {
|
|
33
|
+
/** HTML tag name */
|
|
34
|
+
tag: string;
|
|
35
|
+
/** Sets data-name on the element (overrides the structure key) */
|
|
36
|
+
ref?: string;
|
|
37
|
+
/** Child structure entries or content directives */
|
|
38
|
+
children?: (string | StructureEntry)[];
|
|
39
|
+
/** Insert before existing children */
|
|
40
|
+
before?: boolean;
|
|
41
|
+
/** Inject an SVG icon from config.icons[group][resolvedVariantValue] */
|
|
42
|
+
icon?: {
|
|
43
|
+
group: string;
|
|
44
|
+
variant: string;
|
|
45
|
+
};
|
|
46
|
+
/** Inject text from a resolved modifier value */
|
|
47
|
+
metaText?: string;
|
|
48
|
+
/** Only inject if the named modifier has a truthy resolved value */
|
|
49
|
+
condition?: string;
|
|
50
|
+
/** Only inject if ANY of the named modifiers has a truthy value */
|
|
51
|
+
conditionAny?: string[];
|
|
52
|
+
/** Extra attributes. String values are literal; objects reference modifiers */
|
|
53
|
+
attrs?: Record<string, string | {
|
|
54
|
+
fromModifier: string;
|
|
55
|
+
}>;
|
|
56
|
+
/** Transform applied to metaText value before injection */
|
|
57
|
+
transform?: 'duration' | 'uppercase' | 'capitalize';
|
|
58
|
+
/** Static text prepended to metaText value */
|
|
59
|
+
textPrefix?: string;
|
|
60
|
+
/** Static text appended to metaText value */
|
|
61
|
+
textSuffix?: string;
|
|
62
|
+
}
|
|
63
|
+
/** Top-level theme configuration */
|
|
64
|
+
export interface ThemeConfig {
|
|
65
|
+
/** BEM prefix. E.g., 'rf' → .rf-hint */
|
|
66
|
+
prefix: string;
|
|
67
|
+
/** CSS custom property prefix. E.g., '--rf' → --rf-color-text */
|
|
68
|
+
tokenPrefix: string;
|
|
69
|
+
/** Icon SVGs organized by rune and variant */
|
|
70
|
+
icons: Record<string, Record<string, string>>;
|
|
71
|
+
/** Per-rune transform configuration */
|
|
72
|
+
runes: Record<string, RuneConfig>;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=types.d.ts.map
|