@refrakt-md/lumina 0.9.0 → 0.9.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.
@@ -124,7 +124,8 @@
124
124
  },
125
125
  "min": "--grid-min",
126
126
  "aspect": "--grid-aspect"
127
- }
127
+ },
128
+ "childDensity": "compact"
128
129
  },
129
130
  "CodeGroup": {
130
131
  "block": "codegroup",
@@ -494,7 +495,8 @@
494
495
  "gap": {
495
496
  "prop": "--gallery-gap"
496
497
  }
497
- }
498
+ },
499
+ "childDensity": "compact"
498
500
  },
499
501
  "Sidenote": {
500
502
  "block": "sidenote",
@@ -752,7 +754,8 @@
752
754
  "prop": "--showcase-offset"
753
755
  },
754
756
  "aspect": "--showcase-aspect"
755
- }
757
+ },
758
+ "childDensity": "compact"
756
759
  },
757
760
  "TabGroup": {
758
761
  "block": "tabs",
@@ -1229,7 +1232,8 @@
1229
1232
  "inlineStyles": {
1230
1233
  "columns": "--bento-columns",
1231
1234
  "gap": "--bento-gap"
1232
- }
1235
+ },
1236
+ "childDensity": "compact"
1233
1237
  },
1234
1238
  "BentoCell": {
1235
1239
  "block": "bento-cell",
@@ -1511,7 +1515,8 @@
1511
1515
  "root": ".rf-testimonial",
1512
1516
  "dataRune": "testimonial",
1513
1517
  "childOrder": [
1514
- "{content}"
1518
+ "rating",
1519
+ "{content:content}"
1515
1520
  ],
1516
1521
  "modifiers": {
1517
1522
  "variant": {
@@ -1519,9 +1524,35 @@
1519
1524
  "default": "card",
1520
1525
  "classPattern": ".rf-testimonial--{value}",
1521
1526
  "dataAttribute": "data-variant"
1527
+ },
1528
+ "rating": {
1529
+ "source": "meta",
1530
+ "dataAttribute": "data-rating"
1531
+ },
1532
+ "ratingTotal": {
1533
+ "source": "meta",
1534
+ "default": "5",
1535
+ "dataAttribute": "data-rating-total"
1522
1536
  }
1523
1537
  },
1524
1538
  "elements": {
1539
+ "rating": {
1540
+ "tag": "div",
1541
+ "selector": ".rf-testimonial__rating",
1542
+ "source": "structure",
1543
+ "condition": "rating"
1544
+ },
1545
+ "star": {
1546
+ "tag": "span",
1547
+ "selector": ".rf-testimonial__star",
1548
+ "source": "structure",
1549
+ "parent": "rating"
1550
+ },
1551
+ "content": {
1552
+ "tag": "div",
1553
+ "selector": ".rf-testimonial__content",
1554
+ "source": "contentWrapper"
1555
+ },
1525
1556
  "quote": {
1526
1557
  "tag": "blockquote",
1527
1558
  "selector": ".rf-testimonial__quote",
@@ -1586,7 +1617,12 @@
1586
1617
  "source": "meta",
1587
1618
  "default": "text",
1588
1619
  "classPattern": ".rf-comparison-row--{value}",
1589
- "dataAttribute": "data-row-type"
1620
+ "dataAttribute": "data-row-type",
1621
+ "valueMap": {
1622
+ "check": "checked",
1623
+ "cross": "unchecked"
1624
+ },
1625
+ "mapTarget": "data-checked"
1590
1626
  }
1591
1627
  }
1592
1628
  },
@@ -2237,7 +2273,14 @@
2237
2273
  "source": "meta",
2238
2274
  "default": "planned",
2239
2275
  "classPattern": ".rf-beat--{value}",
2240
- "dataAttribute": "data-status"
2276
+ "dataAttribute": "data-status",
2277
+ "valueMap": {
2278
+ "complete": "checked",
2279
+ "active": "active",
2280
+ "planned": "unchecked",
2281
+ "abandoned": "skipped"
2282
+ },
2283
+ "mapTarget": "data-checked"
2241
2284
  },
2242
2285
  "id": {
2243
2286
  "source": "meta",
@@ -2521,7 +2564,7 @@
2521
2564
  "root": ".rf-map",
2522
2565
  "dataRune": "map",
2523
2566
  "childOrder": [
2524
- "{content}"
2567
+ "{content:container}"
2525
2568
  ],
2526
2569
  "modifiers": {
2527
2570
  "variant": {
@@ -2535,6 +2578,41 @@
2535
2578
  "default": "medium",
2536
2579
  "classPattern": ".rf-map--{value}",
2537
2580
  "dataAttribute": "data-height"
2581
+ },
2582
+ "zoom": {
2583
+ "source": "meta",
2584
+ "dataAttribute": "data-zoom"
2585
+ },
2586
+ "center": {
2587
+ "source": "meta",
2588
+ "dataAttribute": "data-center"
2589
+ },
2590
+ "provider": {
2591
+ "source": "meta",
2592
+ "dataAttribute": "data-provider"
2593
+ },
2594
+ "interactive": {
2595
+ "source": "meta",
2596
+ "dataAttribute": "data-interactive"
2597
+ },
2598
+ "route": {
2599
+ "source": "meta",
2600
+ "dataAttribute": "data-route"
2601
+ },
2602
+ "cluster": {
2603
+ "source": "meta",
2604
+ "dataAttribute": "data-cluster"
2605
+ },
2606
+ "apiKey": {
2607
+ "source": "meta",
2608
+ "dataAttribute": "data-api-key"
2609
+ }
2610
+ },
2611
+ "elements": {
2612
+ "container": {
2613
+ "tag": "div",
2614
+ "selector": ".rf-map__container",
2615
+ "source": "contentWrapper"
2538
2616
  }
2539
2617
  }
2540
2618
  },
@@ -2795,10 +2873,10 @@
2795
2873
  "{content}"
2796
2874
  ],
2797
2875
  "modifiers": {
2798
- "title": {
2876
+ "titleText": {
2799
2877
  "source": "meta",
2800
2878
  "classPattern": ".rf-design-context--{value}",
2801
- "dataAttribute": "data-title"
2879
+ "dataAttribute": "data-title-text"
2802
2880
  }
2803
2881
  }
2804
2882
  },
@@ -0,0 +1,13 @@
1
+ import { defaultLayout, docsLayout, blogArticleLayout } from '@refrakt-md/transform';
2
+
3
+ /**
4
+ * Layout name -> LayoutConfig map.
5
+ *
6
+ * This is the single framework-agnostic entry point for Lumina's layouts,
7
+ * replacing the per-framework adapter files (ADR-009).
8
+ */
9
+ export const layouts = {
10
+ default: defaultLayout,
11
+ docs: docsLayout,
12
+ 'blog-article': blogArticleLayout,
13
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@refrakt-md/lumina",
3
- "description": "Lumina theme for refrakt.md — design tokens, CSS, identity transform, and framework adapters",
4
- "version": "0.9.0",
3
+ "description": "Lumina theme for refrakt.md — design tokens, CSS, identity transform, and layout configs",
4
+ "version": "0.9.2",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -23,18 +23,11 @@
23
23
  },
24
24
  "./manifest": "./manifest.json",
25
25
  "./contracts": "./contracts/structures.json",
26
- "./svelte": {
27
- "types": "./svelte/index.ts",
28
- "svelte": "./svelte/index.ts",
29
- "default": "./svelte/index.ts"
26
+ "./layouts": {
27
+ "types": "./layouts/index.ts",
28
+ "default": "./layouts/index.ts"
30
29
  },
31
- "./html": {
32
- "types": "./html/index.ts",
33
- "default": "./html/index.ts"
34
- },
35
- "./styles/runes/*.css": "./styles/runes/*.css",
36
- "./svelte/tokens.css": "./svelte/tokens.css",
37
- "./svelte/manifest": "./svelte/manifest.json"
30
+ "./styles/runes/*.css": "./styles/runes/*.css"
38
31
  },
39
32
  "files": [
40
33
  "dist",
@@ -44,35 +37,17 @@
44
37
  "styles",
45
38
  "contracts",
46
39
  "manifest.json",
47
- "svelte",
48
- "html"
40
+ "layouts"
49
41
  ],
50
42
  "scripts": {
51
43
  "build": "tsc"
52
44
  },
53
45
  "dependencies": {
54
- "@refrakt-md/runes": "0.9.0",
55
- "@refrakt-md/transform": "0.9.0",
56
- "@refrakt-md/types": "0.9.0",
57
- "@refrakt-md/svelte": "0.9.0"
58
- },
59
- "peerDependencies": {
60
- "svelte": "^5.0.0",
61
- "@sveltejs/kit": "^2.0.0",
62
- "@refrakt-md/html": "0.9.0"
46
+ "@refrakt-md/runes": "0.9.2",
47
+ "@refrakt-md/transform": "0.9.2",
48
+ "@refrakt-md/types": "0.9.2"
63
49
  },
64
50
  "devDependencies": {
65
51
  "postcss": "^8.4.0"
66
- },
67
- "peerDependenciesMeta": {
68
- "svelte": {
69
- "optional": true
70
- },
71
- "@sveltejs/kit": {
72
- "optional": true
73
- },
74
- "@refrakt-md/html": {
75
- "optional": true
76
- }
77
52
  }
78
53
  }
@@ -19,7 +19,7 @@
19
19
  .rf-backlog__card {
20
20
  display: flex;
21
21
  flex-direction: column;
22
- gap: 0.25rem;
22
+ gap: 0.375rem;
23
23
  padding: 0.75rem 1rem;
24
24
  border-radius: var(--rf-radius-md);
25
25
  background: var(--rf-color-surface);
@@ -36,26 +36,73 @@
36
36
  color: inherit;
37
37
  display: flex;
38
38
  flex-direction: column;
39
- gap: 0.25rem;
39
+ gap: 0.375rem;
40
40
  }
41
41
  .rf-backlog__card-link:hover {
42
42
  text-decoration: none;
43
43
  }
44
44
 
45
- /* Card title smaller than full rune */
45
+ /* ─── Header row: ID left, status + progress right ──────────────────── */
46
+ .rf-backlog__card [data-section="header"] {
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: space-between;
50
+ gap: 0.5rem;
51
+ margin-bottom: 0;
52
+ }
53
+ .rf-backlog__card-header-left,
54
+ .rf-backlog__card-header-right {
55
+ display: inline-flex;
56
+ align-items: center;
57
+ gap: 0.5rem;
58
+ }
59
+
60
+ /* Strip borders and pill styling from header badges — doubled class for specificity */
61
+ .rf-backlog__card [data-section="header"] [data-meta-type][data-meta-type] {
62
+ border: none;
63
+ padding: 0;
64
+ border-radius: 0;
65
+ }
66
+
67
+ /* Suppress sentiment circles in header */
68
+ .rf-backlog__card [data-section="header"] [data-meta-sentiment]::before {
69
+ display: none;
70
+ }
71
+
72
+ /* ─── Body: title ───────────────────────────────────────────────────── */
46
73
  .rf-backlog__card [data-section="title"] {
47
74
  font-size: 0.9375rem;
48
75
  font-weight: 600;
49
76
  }
50
77
 
51
- /* Checklist progress badge */
78
+ /* ─── Footer row: uniform secondary pills ───────────────────────────── */
79
+ .rf-backlog__card [data-section="footer"] {
80
+ display: flex;
81
+ flex-wrap: wrap;
82
+ align-items: center;
83
+ gap: 0.375rem;
84
+ }
85
+
86
+ /* Normalize all footer pills to same size regardless of rank/type */
87
+ .rf-backlog__card [data-section="footer"] [data-meta-type] {
88
+ font-size: 0.75rem;
89
+ padding: 0.25em 0.75em;
90
+ opacity: 1;
91
+ }
92
+
93
+ /* Checklist progress badge — plain text in header.
94
+ Override checklist dimension styles that match [data-checked]. */
52
95
  .rf-backlog__card-progress {
53
96
  font-family: var(--rf-font-mono);
54
- font-size: 0.6875rem;
97
+ font-size: 0.75rem;
55
98
  font-weight: 600;
56
- padding: 0.125rem 0.5rem;
57
- border: 1px solid var(--rf-color-border);
58
- border-radius: 999px;
59
99
  color: var(--rf-color-muted);
60
- margin-left: auto;
100
+ border: none;
101
+ padding: 0;
102
+ padding-left: 0;
103
+ margin-left: 0;
104
+ position: static;
105
+ }
106
+ .rf-backlog__card-progress::before {
107
+ display: none;
61
108
  }
@@ -20,6 +20,7 @@
20
20
  position: relative;
21
21
  overflow: hidden;
22
22
  border-radius: var(--rf-radius-md);
23
+ margin: 0;
23
24
  }
24
25
  .rf-gallery__item img {
25
26
  width: 100%;
@@ -14,9 +14,12 @@
14
14
  color: var(--rf-color-border);
15
15
  line-height: 1;
16
16
  }
17
- .rf-testimonial__star--filled {
17
+ .rf-testimonial__star[data-filled="true"] {
18
18
  color: var(--rf-color-warning);
19
19
  }
20
+ .rf-testimonial__content {
21
+ display: contents;
22
+ }
20
23
  .rf-testimonial blockquote {
21
24
  border: none;
22
25
  padding: 0;
package/html/index.ts DELETED
@@ -1,28 +0,0 @@
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
- };
@@ -1 +0,0 @@
1
- export { elements } from '@refrakt-md/svelte';
package/svelte/index.ts DELETED
@@ -1,37 +0,0 @@
1
- import type { SvelteTheme } from '@refrakt-md/svelte';
2
- import adapterManifest from './manifest.json';
3
- import { registry } from './registry.js';
4
- import { elements } from './elements.js';
5
- import { defaultLayout, docsLayout, blogArticleLayout } from '@refrakt-md/transform';
6
-
7
- // Layout region metadata from the base theme manifest (packages/lumina/manifest.json).
8
- // Merged with adapter manifest component paths to produce full LayoutDefinitions.
9
- const layoutRegions: Record<string, { regions: string[]; requiredRegions?: string[] }> = {
10
- default: { regions: ['header', 'footer'] },
11
- docs: { regions: ['header', 'nav', 'sidebar', 'footer'], requiredRegions: ['nav'] },
12
- 'blog-article': { regions: ['header', 'sidebar', 'footer'] },
13
- };
14
-
15
- const layouts: Record<string, any> = {};
16
- for (const [name, adapter] of Object.entries(adapterManifest.layouts)) {
17
- layouts[name] = { ...layoutRegions[name], ...adapter };
18
- }
19
-
20
- const manifest = { ...adapterManifest, layouts };
21
-
22
- /** Re-export the merged manifest for server-side use (no Svelte imports) */
23
- export { manifest };
24
-
25
- /** The structured theme object consumed by ThemeShell */
26
- export const theme: SvelteTheme = {
27
- manifest: manifest as any,
28
- layouts: {
29
- default: defaultLayout,
30
- docs: docsLayout,
31
- 'blog-article': blogArticleLayout,
32
- },
33
- components: registry,
34
- elements,
35
- };
36
-
37
- export { registry };
@@ -1,17 +0,0 @@
1
- {
2
- "name": "lumina",
3
- "version": "0.1.0",
4
- "description": "A clean, light documentation theme for refrakt.md",
5
- "target": "svelte",
6
- "designTokens": "tokens.css",
7
-
8
- "layouts": {
9
- "default": {},
10
- "docs": {},
11
- "blog": {}
12
- },
13
-
14
- "components": {},
15
-
16
- "unsupportedRuneBehavior": "passthrough"
17
- }
@@ -1,2 +0,0 @@
1
- // Re-export base registry — lumina uses the same interactive components
2
- export { registry } from '@refrakt-md/svelte';
package/svelte/tokens.css DELETED
@@ -1,6 +0,0 @@
1
- /* ──────────────────────────────────────────────
2
- Lumina Theme — Token Bridge
3
- Imports identity tokens + global styles (--rf-* prefix).
4
- ────────────────────────────────────────────── */
5
-
6
- @import '../index.css';