@refrakt-md/lumina 0.8.0 → 0.8.2
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/base.css +4 -0
- package/contracts/structures.json +71 -14
- package/html/index.ts +28 -0
- package/package.json +16 -7
- package/styles/layouts/default.css +11 -5
- package/styles/layouts/search.css +3 -0
- package/styles/runes/feature.css +11 -11
- package/styles/runes/recipe.css +37 -0
- package/styles/runes/tabs.css +8 -10
package/base.css
CHANGED
|
@@ -1184,6 +1184,11 @@
|
|
|
1184
1184
|
"tag": "image",
|
|
1185
1185
|
"selector": ".rf-feature__image",
|
|
1186
1186
|
"source": "autoLabel"
|
|
1187
|
+
},
|
|
1188
|
+
"definitions": {
|
|
1189
|
+
"tag": "dl",
|
|
1190
|
+
"selector": ".rf-feature__definitions",
|
|
1191
|
+
"source": "autoLabel"
|
|
1187
1192
|
}
|
|
1188
1193
|
},
|
|
1189
1194
|
"inlineStyles": {
|
|
@@ -1198,15 +1203,6 @@
|
|
|
1198
1203
|
}
|
|
1199
1204
|
}
|
|
1200
1205
|
},
|
|
1201
|
-
"FeatureDefinition": {
|
|
1202
|
-
"block": "feature-definition",
|
|
1203
|
-
"root": ".rf-feature-definition",
|
|
1204
|
-
"dataRune": "feature-definition",
|
|
1205
|
-
"parent": "Feature",
|
|
1206
|
-
"childOrder": [
|
|
1207
|
-
"{content}"
|
|
1208
|
-
]
|
|
1209
|
-
},
|
|
1210
1206
|
"Steps": {
|
|
1211
1207
|
"block": "steps",
|
|
1212
1208
|
"root": ".rf-steps",
|
|
@@ -2423,9 +2419,15 @@
|
|
|
2423
2419
|
"dataRune": "recipe",
|
|
2424
2420
|
"childOrder": [
|
|
2425
2421
|
"meta",
|
|
2426
|
-
"{content
|
|
2422
|
+
"{content}"
|
|
2427
2423
|
],
|
|
2428
2424
|
"modifiers": {
|
|
2425
|
+
"layout": {
|
|
2426
|
+
"source": "meta",
|
|
2427
|
+
"default": "stacked",
|
|
2428
|
+
"classPattern": ".rf-recipe--{value}",
|
|
2429
|
+
"dataAttribute": "data-layout"
|
|
2430
|
+
},
|
|
2429
2431
|
"prepTime": {
|
|
2430
2432
|
"source": "meta",
|
|
2431
2433
|
"classPattern": ".rf-recipe--{value}",
|
|
@@ -2446,6 +2448,25 @@
|
|
|
2446
2448
|
"default": "medium",
|
|
2447
2449
|
"classPattern": ".rf-recipe--{value}",
|
|
2448
2450
|
"dataAttribute": "data-difficulty"
|
|
2451
|
+
},
|
|
2452
|
+
"ratio": {
|
|
2453
|
+
"source": "meta",
|
|
2454
|
+
"default": "1 1",
|
|
2455
|
+
"dataAttribute": "data-ratio"
|
|
2456
|
+
},
|
|
2457
|
+
"valign": {
|
|
2458
|
+
"source": "meta",
|
|
2459
|
+
"default": "top",
|
|
2460
|
+
"dataAttribute": "data-valign"
|
|
2461
|
+
},
|
|
2462
|
+
"gap": {
|
|
2463
|
+
"source": "meta",
|
|
2464
|
+
"default": "default",
|
|
2465
|
+
"dataAttribute": "data-gap"
|
|
2466
|
+
},
|
|
2467
|
+
"collapse": {
|
|
2468
|
+
"source": "meta",
|
|
2469
|
+
"dataAttribute": "data-collapse"
|
|
2449
2470
|
}
|
|
2450
2471
|
},
|
|
2451
2472
|
"elements": {
|
|
@@ -2474,10 +2495,46 @@
|
|
|
2474
2495
|
"parent": "meta",
|
|
2475
2496
|
"condition": "difficulty"
|
|
2476
2497
|
},
|
|
2477
|
-
"
|
|
2478
|
-
"tag": "
|
|
2479
|
-
"selector": ".rf-
|
|
2480
|
-
"source": "
|
|
2498
|
+
"header": {
|
|
2499
|
+
"tag": "header",
|
|
2500
|
+
"selector": ".rf-recipe__header",
|
|
2501
|
+
"source": "autoLabel"
|
|
2502
|
+
},
|
|
2503
|
+
"eyebrow": {
|
|
2504
|
+
"tag": "eyebrow",
|
|
2505
|
+
"selector": ".rf-recipe__eyebrow",
|
|
2506
|
+
"source": "autoLabel"
|
|
2507
|
+
},
|
|
2508
|
+
"headline": {
|
|
2509
|
+
"tag": "headline",
|
|
2510
|
+
"selector": ".rf-recipe__headline",
|
|
2511
|
+
"source": "autoLabel"
|
|
2512
|
+
},
|
|
2513
|
+
"blurb": {
|
|
2514
|
+
"tag": "blurb",
|
|
2515
|
+
"selector": ".rf-recipe__blurb",
|
|
2516
|
+
"source": "autoLabel"
|
|
2517
|
+
},
|
|
2518
|
+
"image": {
|
|
2519
|
+
"tag": "image",
|
|
2520
|
+
"selector": ".rf-recipe__image",
|
|
2521
|
+
"source": "autoLabel"
|
|
2522
|
+
},
|
|
2523
|
+
"media": {
|
|
2524
|
+
"tag": "media",
|
|
2525
|
+
"selector": ".rf-recipe__media",
|
|
2526
|
+
"source": "autoLabel"
|
|
2527
|
+
}
|
|
2528
|
+
},
|
|
2529
|
+
"inlineStyles": {
|
|
2530
|
+
"ratio": {
|
|
2531
|
+
"prop": "--split-ratio"
|
|
2532
|
+
},
|
|
2533
|
+
"valign": {
|
|
2534
|
+
"prop": "--split-valign"
|
|
2535
|
+
},
|
|
2536
|
+
"gap": {
|
|
2537
|
+
"prop": "--split-gap"
|
|
2481
2538
|
}
|
|
2482
2539
|
}
|
|
2483
2540
|
},
|
package/html/index.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { HtmlTheme } from '@refrakt-md/html';
|
|
2
|
+
import manifest from '../manifest.json';
|
|
3
|
+
import { defaultLayout, docsLayout, blogArticleLayout } from '@refrakt-md/transform';
|
|
4
|
+
|
|
5
|
+
// Layout region metadata from the base theme manifest
|
|
6
|
+
const layoutRegions: Record<string, { regions: string[]; requiredRegions?: string[] }> = {
|
|
7
|
+
default: { regions: ['header', 'footer'] },
|
|
8
|
+
docs: { regions: ['header', 'nav', 'sidebar', 'footer'], requiredRegions: ['nav'] },
|
|
9
|
+
'blog-article': { regions: ['header', 'sidebar', 'footer'] },
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const layouts: Record<string, any> = {};
|
|
13
|
+
for (const [name, def] of Object.entries(manifest.layouts)) {
|
|
14
|
+
layouts[name] = { ...layoutRegions[name], ...def };
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const mergedManifest = { ...manifest, layouts };
|
|
18
|
+
|
|
19
|
+
export { mergedManifest as manifest };
|
|
20
|
+
|
|
21
|
+
export const theme: HtmlTheme = {
|
|
22
|
+
manifest: mergedManifest as any,
|
|
23
|
+
layouts: {
|
|
24
|
+
default: defaultLayout,
|
|
25
|
+
docs: docsLayout,
|
|
26
|
+
'blog-article': blogArticleLayout,
|
|
27
|
+
},
|
|
28
|
+
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@refrakt-md/lumina",
|
|
3
3
|
"description": "Lumina theme for refrakt.md — design tokens, CSS, identity transform, and framework adapters",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.2",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -28,6 +28,10 @@
|
|
|
28
28
|
"svelte": "./svelte/index.ts",
|
|
29
29
|
"default": "./svelte/index.ts"
|
|
30
30
|
},
|
|
31
|
+
"./html": {
|
|
32
|
+
"types": "./html/index.ts",
|
|
33
|
+
"default": "./html/index.ts"
|
|
34
|
+
},
|
|
31
35
|
"./styles/runes/*.css": "./styles/runes/*.css",
|
|
32
36
|
"./svelte/tokens.css": "./svelte/tokens.css",
|
|
33
37
|
"./svelte/manifest": "./svelte/manifest.json"
|
|
@@ -40,20 +44,22 @@
|
|
|
40
44
|
"styles",
|
|
41
45
|
"contracts",
|
|
42
46
|
"manifest.json",
|
|
43
|
-
"svelte"
|
|
47
|
+
"svelte",
|
|
48
|
+
"html"
|
|
44
49
|
],
|
|
45
50
|
"scripts": {
|
|
46
51
|
"build": "tsc"
|
|
47
52
|
},
|
|
48
53
|
"dependencies": {
|
|
49
|
-
"@refrakt-md/runes": "0.8.
|
|
50
|
-
"@refrakt-md/transform": "0.8.
|
|
51
|
-
"@refrakt-md/types": "0.8.
|
|
52
|
-
"@refrakt-md/svelte": "0.8.
|
|
54
|
+
"@refrakt-md/runes": "0.8.2",
|
|
55
|
+
"@refrakt-md/transform": "0.8.2",
|
|
56
|
+
"@refrakt-md/types": "0.8.2",
|
|
57
|
+
"@refrakt-md/svelte": "0.8.2"
|
|
53
58
|
},
|
|
54
59
|
"peerDependencies": {
|
|
55
60
|
"svelte": "^5.0.0",
|
|
56
|
-
"@sveltejs/kit": "^2.0.0"
|
|
61
|
+
"@sveltejs/kit": "^2.0.0",
|
|
62
|
+
"@refrakt-md/html": "0.8.2"
|
|
57
63
|
},
|
|
58
64
|
"devDependencies": {
|
|
59
65
|
"postcss": "^8.4.0"
|
|
@@ -64,6 +70,9 @@
|
|
|
64
70
|
},
|
|
65
71
|
"@sveltejs/kit": {
|
|
66
72
|
"optional": true
|
|
73
|
+
},
|
|
74
|
+
"@refrakt-md/html": {
|
|
75
|
+
"optional": true
|
|
67
76
|
}
|
|
68
77
|
}
|
|
69
78
|
}
|
|
@@ -113,14 +113,20 @@
|
|
|
113
113
|
);
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
/* Section spacing — vertical rhythm
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
|
|
116
|
+
/* Section spacing — vertical rhythm around block runes.
|
|
117
|
+
* Rune blocks (elements with data-rune) get section-level margins.
|
|
118
|
+
* Prose elements (p, h2, pre, table, etc.) keep their natural flow
|
|
119
|
+
* spacing from global.css — only gaining section margins when
|
|
120
|
+
* immediately adjacent to a rune block. */
|
|
121
|
+
.rf-page-content > article > * + [data-rune] {
|
|
121
122
|
margin-top: var(--rf-spacing-section, 4rem);
|
|
122
123
|
margin-bottom: var(--rf-spacing-section, 4rem);
|
|
123
124
|
}
|
|
125
|
+
/* Prose after a rune block: section gap above only.
|
|
126
|
+
* No margin-bottom so subsequent prose keeps natural flow spacing. */
|
|
127
|
+
.rf-page-content > article > [data-rune] + :not([data-rune]) {
|
|
128
|
+
margin-top: var(--rf-spacing-section, 4rem);
|
|
129
|
+
}
|
|
124
130
|
.rf-page-content > article > [data-spacing="flush"] {
|
|
125
131
|
margin-top: 0;
|
|
126
132
|
margin-bottom: 0;
|
package/styles/runes/feature.css
CHANGED
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
.rf-feature[data-align="right"] h2 {
|
|
58
58
|
text-align: right;
|
|
59
59
|
}
|
|
60
|
-
.rf-
|
|
60
|
+
.rf-feature__definitions {
|
|
61
61
|
display: grid;
|
|
62
62
|
grid-template-columns: repeat(auto-fit, minmax(max(240px, calc((100% - 3rem) / 3)), 1fr));
|
|
63
63
|
gap: 1.5rem;
|
|
@@ -74,40 +74,40 @@
|
|
|
74
74
|
.rf-feature[data-layout="split-reverse"] h2 {
|
|
75
75
|
text-align: left;
|
|
76
76
|
}
|
|
77
|
-
.rf-feature[data-layout="split"]
|
|
78
|
-
.rf-feature[data-layout="split-reverse"]
|
|
77
|
+
.rf-feature[data-layout="split"] .rf-feature__definitions,
|
|
78
|
+
.rf-feature[data-layout="split-reverse"] .rf-feature__definitions {
|
|
79
79
|
display: block;
|
|
80
80
|
}
|
|
81
|
-
.rf-feature[data-layout="split"] .rf-
|
|
82
|
-
.rf-feature[data-layout="split-reverse"] .rf-
|
|
81
|
+
.rf-feature[data-layout="split"] .rf-feature__feature-item,
|
|
82
|
+
.rf-feature[data-layout="split-reverse"] .rf-feature__feature-item {
|
|
83
83
|
border: none;
|
|
84
84
|
background: none;
|
|
85
85
|
padding: 0.75rem 0;
|
|
86
86
|
}
|
|
87
|
-
.rf-
|
|
87
|
+
.rf-feature__feature-item {
|
|
88
88
|
padding: 1.75rem;
|
|
89
89
|
border-radius: var(--rf-radius-md);
|
|
90
90
|
border: 1px solid var(--rf-color-border);
|
|
91
91
|
background: var(--rf-color-bg);
|
|
92
92
|
}
|
|
93
|
-
.rf-
|
|
93
|
+
.rf-feature__feature-item dt {
|
|
94
94
|
font-weight: 650;
|
|
95
95
|
font-size: 1.125rem;
|
|
96
96
|
margin-bottom: 0.75rem;
|
|
97
97
|
letter-spacing: -0.01em;
|
|
98
98
|
color: var(--rf-color-text);
|
|
99
99
|
}
|
|
100
|
-
.rf-
|
|
100
|
+
.rf-feature__feature-item dt:has(> .rf-icon) {
|
|
101
101
|
display: flex;
|
|
102
102
|
flex-direction: column;
|
|
103
103
|
}
|
|
104
|
-
.rf-
|
|
104
|
+
.rf-feature__feature-item dt > .rf-icon {
|
|
105
105
|
width: 1.5rem;
|
|
106
106
|
height: 1.5rem;
|
|
107
107
|
margin-bottom: 0.5rem;
|
|
108
108
|
color: var(--rf-color-accent);
|
|
109
109
|
}
|
|
110
|
-
.rf-
|
|
110
|
+
.rf-feature__feature-item dd {
|
|
111
111
|
margin: 0;
|
|
112
112
|
color: var(--rf-color-muted);
|
|
113
113
|
font-size: 0.9rem;
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
.rf-feature--in-hero {
|
|
119
119
|
padding-top: 0;
|
|
120
120
|
}
|
|
121
|
-
.rf-feature--in-hero .rf-
|
|
121
|
+
.rf-feature--in-hero .rf-feature__feature-item {
|
|
122
122
|
background: transparent;
|
|
123
123
|
border-color: rgba(255, 255, 255, 0.15);
|
|
124
124
|
}
|
package/styles/runes/recipe.css
CHANGED
|
@@ -5,6 +5,28 @@
|
|
|
5
5
|
padding: 2rem;
|
|
6
6
|
margin: 1.5rem 0;
|
|
7
7
|
}
|
|
8
|
+
.rf-recipe__header {
|
|
9
|
+
margin-bottom: 1.5rem;
|
|
10
|
+
}
|
|
11
|
+
.rf-recipe .rf-recipe__eyebrow {
|
|
12
|
+
font-size: 0.875rem;
|
|
13
|
+
font-weight: 600;
|
|
14
|
+
letter-spacing: 0.05em;
|
|
15
|
+
text-transform: uppercase;
|
|
16
|
+
color: var(--rf-color-primary);
|
|
17
|
+
margin: 0 0 0.5rem;
|
|
18
|
+
}
|
|
19
|
+
.rf-recipe__headline {
|
|
20
|
+
margin-top: 0;
|
|
21
|
+
}
|
|
22
|
+
.rf-recipe .rf-recipe__blurb {
|
|
23
|
+
color: var(--rf-color-muted);
|
|
24
|
+
margin-bottom: 0;
|
|
25
|
+
max-width: 40rem;
|
|
26
|
+
}
|
|
27
|
+
.rf-recipe__image {
|
|
28
|
+
margin-bottom: 1rem;
|
|
29
|
+
}
|
|
8
30
|
.rf-recipe__meta {
|
|
9
31
|
display: flex;
|
|
10
32
|
flex-wrap: wrap;
|
|
@@ -45,3 +67,18 @@
|
|
|
45
67
|
.rf-recipe__content ol li {
|
|
46
68
|
padding: 0.25rem 0;
|
|
47
69
|
}
|
|
70
|
+
/* Media zone */
|
|
71
|
+
.rf-recipe__media {
|
|
72
|
+
border-radius: var(--rf-radius-lg);
|
|
73
|
+
}
|
|
74
|
+
.rf-recipe__media img {
|
|
75
|
+
display: block;
|
|
76
|
+
width: 100%;
|
|
77
|
+
height: auto;
|
|
78
|
+
border-radius: var(--rf-radius-lg);
|
|
79
|
+
}
|
|
80
|
+
/* Split layout: meta bar spans full width above the grid */
|
|
81
|
+
.rf-recipe[data-layout="split"] > .rf-recipe__meta,
|
|
82
|
+
.rf-recipe[data-layout="split-reverse"] > .rf-recipe__meta {
|
|
83
|
+
grid-column: 1 / -1;
|
|
84
|
+
}
|
package/styles/runes/tabs.css
CHANGED
|
@@ -42,13 +42,7 @@
|
|
|
42
42
|
.rf-tabs__image {
|
|
43
43
|
margin-bottom: 1rem;
|
|
44
44
|
}
|
|
45
|
-
.rf-tabs__tabs
|
|
46
|
-
.rf-tabs__panels {
|
|
47
|
-
list-style: none;
|
|
48
|
-
padding: 0;
|
|
49
|
-
margin: 0;
|
|
50
|
-
}
|
|
51
|
-
.rf-tabs__bar {
|
|
45
|
+
.rf-tabs__tabs {
|
|
52
46
|
display: flex;
|
|
53
47
|
background: var(--rf-color-surface);
|
|
54
48
|
border-bottom: 1px solid var(--rf-color-border);
|
|
@@ -56,7 +50,11 @@
|
|
|
56
50
|
overflow-y: hidden;
|
|
57
51
|
-webkit-overflow-scrolling: touch;
|
|
58
52
|
}
|
|
59
|
-
.rf-
|
|
53
|
+
.rf-tabs__panels {
|
|
54
|
+
padding: 0;
|
|
55
|
+
margin: 0;
|
|
56
|
+
}
|
|
57
|
+
.rf-tab {
|
|
60
58
|
flex: 0 0 auto;
|
|
61
59
|
padding: 0.625rem 1.25rem;
|
|
62
60
|
font-size: 0.85rem;
|
|
@@ -71,11 +69,11 @@
|
|
|
71
69
|
margin-bottom: -1px;
|
|
72
70
|
font-family: inherit;
|
|
73
71
|
}
|
|
74
|
-
.rf-
|
|
72
|
+
.rf-tab:hover {
|
|
75
73
|
color: var(--rf-color-text);
|
|
76
74
|
background: var(--rf-color-surface-hover);
|
|
77
75
|
}
|
|
78
|
-
.rf-
|
|
76
|
+
.rf-tab--active {
|
|
79
77
|
color: var(--rf-color-primary);
|
|
80
78
|
border-bottom-color: var(--rf-color-primary);
|
|
81
79
|
font-weight: 600;
|