@refrakt-md/lumina 0.12.0 → 0.14.1

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.
Files changed (63) hide show
  1. package/assets/logo/prism-16-dark.png +0 -0
  2. package/assets/logo/prism-16-light.png +0 -0
  3. package/assets/logo/prism-180-dark.png +0 -0
  4. package/assets/logo/prism-180-light.png +0 -0
  5. package/assets/logo/prism-192-dark.png +0 -0
  6. package/assets/logo/prism-192-light.png +0 -0
  7. package/assets/logo/prism-24-dark.png +0 -0
  8. package/assets/logo/prism-24-light.png +0 -0
  9. package/assets/logo/prism-32-dark.png +0 -0
  10. package/assets/logo/prism-32-light.png +0 -0
  11. package/assets/logo/prism-48-dark.png +0 -0
  12. package/assets/logo/prism-48-light.png +0 -0
  13. package/assets/logo/prism-512-dark.png +0 -0
  14. package/assets/logo/prism-512-light.png +0 -0
  15. package/assets/logo/prism-64-dark.png +0 -0
  16. package/assets/logo/prism-64-light.png +0 -0
  17. package/assets/logo/prism-96-dark.png +0 -0
  18. package/assets/logo/prism-96-light.png +0 -0
  19. package/assets/logo/prism.svg +4 -0
  20. package/contracts/structures.json +23 -1
  21. package/dist/config.js +32 -32
  22. package/dist/config.js.map +1 -1
  23. package/dist/presets/niwaki.d.ts +23 -0
  24. package/dist/presets/niwaki.d.ts.map +1 -0
  25. package/dist/presets/niwaki.js +50 -0
  26. package/dist/presets/niwaki.js.map +1 -0
  27. package/dist/presets/nord.d.ts +46 -0
  28. package/dist/presets/nord.d.ts.map +1 -0
  29. package/dist/presets/nord.js +127 -0
  30. package/dist/presets/nord.js.map +1 -0
  31. package/dist/presets/tideline.d.ts +26 -0
  32. package/dist/presets/tideline.d.ts.map +1 -0
  33. package/dist/presets/tideline.js +132 -0
  34. package/dist/presets/tideline.js.map +1 -0
  35. package/dist/tokens.d.ts +20 -0
  36. package/dist/tokens.d.ts.map +1 -0
  37. package/dist/tokens.js +178 -0
  38. package/dist/tokens.js.map +1 -0
  39. package/dist/transform.d.ts +5 -0
  40. package/dist/transform.d.ts.map +1 -1
  41. package/dist/transform.js +5 -0
  42. package/dist/transform.js.map +1 -1
  43. package/index.css +1 -0
  44. package/package.json +21 -6
  45. package/styles/dimensions/surfaces.css +4 -2
  46. package/styles/elements/table.css +4 -0
  47. package/styles/global.css +13 -4
  48. package/styles/layouts/blog.css +8 -2
  49. package/styles/layouts/default.css +37 -3
  50. package/styles/layouts/docs.css +24 -6
  51. package/styles/layouts/mobile.css +36 -5
  52. package/styles/runes/codegroup.css +19 -15
  53. package/styles/runes/compare.css +9 -0
  54. package/styles/runes/cta.css +14 -0
  55. package/styles/runes/diff.css +40 -31
  56. package/styles/runes/hero.css +24 -0
  57. package/styles/runes/hint.css +5 -9
  58. package/styles/runes/nav.css +344 -1
  59. package/styles/runes/pagination.css +85 -0
  60. package/styles/runes/palette.css +9 -0
  61. package/styles/runes/tint.css +116 -72
  62. package/tokens/base.css +74 -53
  63. package/tokens/dark.css +97 -75
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"
2
+ fill="none" stroke="currentColor"
3
+ stroke-width="4" stroke-linecap="round" stroke-linejoin="round"
4
+ role="img" aria-label="refrakt"><title>refrakt</title><style>:where(svg){color:#1c1a17}@media (prefers-color-scheme:dark){:where(svg){color:#fff}}</style><path d="M 40.56 16 L 90 16 L 65.28 59.26 Z" fill="currentColor" stroke="none"/><path d="M 10 16 L 90 16 L 50 86 Z"/><line x1="20.19" y1="16" x2="55.09" y2="77.09"/><line x1="30.37" y1="16" x2="60.19" y2="68.18"/><line x1="40.56" y1="16" x2="65.28" y2="59.26"/></svg>
@@ -572,7 +572,14 @@
572
572
  "dataRune": "nav",
573
573
  "childOrder": [
574
574
  "{content}"
575
- ]
575
+ ],
576
+ "modifiers": {
577
+ "layout": {
578
+ "source": "attribute",
579
+ "classPattern": ".rf-nav--{value}",
580
+ "dataAttribute": "data-layout"
581
+ }
582
+ }
576
583
  },
577
584
  "NavGroup": {
578
585
  "block": "nav-group",
@@ -583,6 +590,21 @@
583
590
  "{content}"
584
591
  ]
585
592
  },
593
+ "Pagination": {
594
+ "block": "pagination",
595
+ "root": ".rf-pagination",
596
+ "dataRune": "pagination",
597
+ "childOrder": [
598
+ "{content}"
599
+ ],
600
+ "modifiers": {
601
+ "scope": {
602
+ "source": "meta",
603
+ "default": "siblings",
604
+ "dataAttribute": "data-scope"
605
+ }
606
+ }
607
+ },
586
608
  "NavItem": {
587
609
  "block": "nav-item",
588
610
  "root": ".rf-nav-item",
package/dist/config.js CHANGED
@@ -6,74 +6,74 @@ export const luminaConfig = mergeThemeConfig(baseConfig, {
6
6
  tints: {
7
7
  base: {
8
8
  light: {
9
- background: 'var(--rf-color-bg)',
9
+ bg: 'var(--rf-color-bg)',
10
10
  surface: 'var(--rf-color-surface)',
11
- primary: 'var(--rf-color-text)',
12
- secondary: 'var(--rf-color-muted)',
13
- accent: 'var(--rf-color-primary)',
11
+ text: 'var(--rf-color-text)',
12
+ muted: 'var(--rf-color-muted)',
13
+ primary: 'var(--rf-color-primary)',
14
14
  border: 'var(--rf-color-border)',
15
15
  },
16
16
  dark: {
17
- background: 'var(--rf-color-bg)',
17
+ bg: 'var(--rf-color-bg)',
18
18
  surface: 'var(--rf-color-surface)',
19
- primary: 'var(--rf-color-text)',
20
- secondary: 'var(--rf-color-muted)',
21
- accent: 'var(--rf-color-primary)',
19
+ text: 'var(--rf-color-text)',
20
+ muted: 'var(--rf-color-muted)',
21
+ primary: 'var(--rf-color-primary)',
22
22
  border: 'var(--rf-color-border)',
23
23
  },
24
24
  },
25
25
  subtle: {
26
26
  light: {
27
- background: 'var(--rf-color-surface)',
27
+ bg: 'var(--rf-color-surface)',
28
28
  surface: 'var(--rf-color-surface-hover)',
29
- primary: 'var(--rf-color-text)',
30
- secondary: 'var(--rf-color-muted)',
31
- accent: 'var(--rf-color-primary)',
29
+ text: 'var(--rf-color-text)',
30
+ muted: 'var(--rf-color-muted)',
31
+ primary: 'var(--rf-color-primary)',
32
32
  border: 'var(--rf-color-border)',
33
33
  },
34
34
  dark: {
35
- background: 'var(--rf-color-surface)',
35
+ bg: 'var(--rf-color-surface)',
36
36
  surface: 'var(--rf-color-surface-hover)',
37
- primary: 'var(--rf-color-text)',
38
- secondary: 'var(--rf-color-muted)',
39
- accent: 'var(--rf-color-primary)',
37
+ text: 'var(--rf-color-text)',
38
+ muted: 'var(--rf-color-muted)',
39
+ primary: 'var(--rf-color-primary)',
40
40
  border: 'var(--rf-color-border)',
41
41
  },
42
42
  },
43
43
  warm: {
44
44
  light: {
45
- background: 'var(--rf-color-surface-active)',
46
- primary: 'var(--rf-color-text)',
47
- accent: 'var(--rf-color-warning)',
45
+ bg: 'var(--rf-color-surface-active)',
46
+ text: 'var(--rf-color-text)',
47
+ primary: 'var(--rf-color-warning)',
48
48
  border: 'var(--rf-color-border)',
49
49
  },
50
50
  dark: {
51
- background: '#2a2018',
52
- primary: 'var(--rf-color-text)',
53
- accent: 'var(--rf-color-warning)',
51
+ bg: '#2a2018',
52
+ text: 'var(--rf-color-text)',
53
+ primary: 'var(--rf-color-warning)',
54
54
  border: '#4a3f33',
55
55
  },
56
56
  },
57
57
  cool: {
58
58
  light: {
59
- background: 'var(--rf-color-info-bg)',
60
- primary: 'var(--rf-color-text)',
61
- accent: 'var(--rf-color-primary)',
59
+ bg: 'var(--rf-color-info-bg)',
60
+ text: 'var(--rf-color-text)',
61
+ primary: 'var(--rf-color-primary)',
62
62
  border: 'var(--rf-color-info-border)',
63
63
  },
64
64
  dark: {
65
- background: 'var(--rf-color-primary-950)',
66
- primary: 'var(--rf-color-primary-300)',
67
- accent: 'var(--rf-color-primary)',
65
+ bg: 'var(--rf-color-primary-950)',
66
+ text: 'var(--rf-color-primary-300)',
67
+ primary: 'var(--rf-color-primary)',
68
68
  border: 'var(--rf-color-primary-700)',
69
69
  },
70
70
  },
71
71
  dark: {
72
- mode: 'dark',
72
+ lockMode: 'dark',
73
73
  dark: {
74
- background: 'var(--rf-color-primary-700)',
75
- primary: 'var(--rf-color-primary-50)',
76
- accent: 'var(--rf-color-danger)',
74
+ bg: 'var(--rf-color-primary-700)',
75
+ text: 'var(--rf-color-primary-50)',
76
+ primary: 'var(--rf-color-danger)',
77
77
  },
78
78
  },
79
79
  },
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAElD,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,EAAE;IACxD,KAAK,EAAE;QACN,IAAI,EAAE;YACL,KAAK,EAAE;gBACN,UAAU,EAAE,oBAAoB;gBAChC,OAAO,EAAE,yBAAyB;gBAClC,OAAO,EAAE,sBAAsB;gBAC/B,SAAS,EAAE,uBAAuB;gBAClC,MAAM,EAAE,yBAAyB;gBACjC,MAAM,EAAE,wBAAwB;aAChC;YACD,IAAI,EAAE;gBACL,UAAU,EAAE,oBAAoB;gBAChC,OAAO,EAAE,yBAAyB;gBAClC,OAAO,EAAE,sBAAsB;gBAC/B,SAAS,EAAE,uBAAuB;gBAClC,MAAM,EAAE,yBAAyB;gBACjC,MAAM,EAAE,wBAAwB;aAChC;SACD;QACD,MAAM,EAAE;YACP,KAAK,EAAE;gBACN,UAAU,EAAE,yBAAyB;gBACrC,OAAO,EAAE,+BAA+B;gBACxC,OAAO,EAAE,sBAAsB;gBAC/B,SAAS,EAAE,uBAAuB;gBAClC,MAAM,EAAE,yBAAyB;gBACjC,MAAM,EAAE,wBAAwB;aAChC;YACD,IAAI,EAAE;gBACL,UAAU,EAAE,yBAAyB;gBACrC,OAAO,EAAE,+BAA+B;gBACxC,OAAO,EAAE,sBAAsB;gBAC/B,SAAS,EAAE,uBAAuB;gBAClC,MAAM,EAAE,yBAAyB;gBACjC,MAAM,EAAE,wBAAwB;aAChC;SACD;QACD,IAAI,EAAE;YACL,KAAK,EAAE;gBACN,UAAU,EAAE,gCAAgC;gBAC5C,OAAO,EAAE,sBAAsB;gBAC/B,MAAM,EAAE,yBAAyB;gBACjC,MAAM,EAAE,wBAAwB;aAChC;YACD,IAAI,EAAE;gBACL,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,sBAAsB;gBAC/B,MAAM,EAAE,yBAAyB;gBACjC,MAAM,EAAE,SAAS;aACjB;SACD;QACD,IAAI,EAAE;YACL,KAAK,EAAE;gBACN,UAAU,EAAE,yBAAyB;gBACrC,OAAO,EAAE,sBAAsB;gBAC/B,MAAM,EAAE,yBAAyB;gBACjC,MAAM,EAAE,6BAA6B;aACrC;YACD,IAAI,EAAE;gBACL,UAAU,EAAE,6BAA6B;gBACzC,OAAO,EAAE,6BAA6B;gBACtC,MAAM,EAAE,yBAAyB;gBACjC,MAAM,EAAE,6BAA6B;aACrC;SACD;QACD,IAAI,EAAE;YACL,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;gBACL,UAAU,EAAE,6BAA6B;gBACzC,OAAO,EAAE,4BAA4B;gBACrC,MAAM,EAAE,wBAAwB;aAChC;SACD;KACD;IACD,KAAK,EAAE;QACN,IAAI,EAAE;YACL,IAAI,EAAE,4SAA4S;YAClT,OAAO,EAAE,iXAAiX;YAC1X,OAAO,EAAE,uSAAuS;YAChT,KAAK,EAAE,qRAAqR;SAC5R;QACD,MAAM,EAAE,WAAW;KACnB;CACD,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAElD,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,EAAE;IACxD,KAAK,EAAE;QACN,IAAI,EAAE;YACL,KAAK,EAAE;gBACN,EAAE,EAAE,oBAAoB;gBACxB,OAAO,EAAE,yBAAyB;gBAClC,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,yBAAyB;gBAClC,MAAM,EAAE,wBAAwB;aAChC;YACD,IAAI,EAAE;gBACL,EAAE,EAAE,oBAAoB;gBACxB,OAAO,EAAE,yBAAyB;gBAClC,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,yBAAyB;gBAClC,MAAM,EAAE,wBAAwB;aAChC;SACD;QACD,MAAM,EAAE;YACP,KAAK,EAAE;gBACN,EAAE,EAAE,yBAAyB;gBAC7B,OAAO,EAAE,+BAA+B;gBACxC,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,yBAAyB;gBAClC,MAAM,EAAE,wBAAwB;aAChC;YACD,IAAI,EAAE;gBACL,EAAE,EAAE,yBAAyB;gBAC7B,OAAO,EAAE,+BAA+B;gBACxC,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,yBAAyB;gBAClC,MAAM,EAAE,wBAAwB;aAChC;SACD;QACD,IAAI,EAAE;YACL,KAAK,EAAE;gBACN,EAAE,EAAE,gCAAgC;gBACpC,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,yBAAyB;gBAClC,MAAM,EAAE,wBAAwB;aAChC;YACD,IAAI,EAAE;gBACL,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,yBAAyB;gBAClC,MAAM,EAAE,SAAS;aACjB;SACD;QACD,IAAI,EAAE;YACL,KAAK,EAAE;gBACN,EAAE,EAAE,yBAAyB;gBAC7B,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,yBAAyB;gBAClC,MAAM,EAAE,6BAA6B;aACrC;YACD,IAAI,EAAE;gBACL,EAAE,EAAE,6BAA6B;gBACjC,IAAI,EAAE,6BAA6B;gBACnC,OAAO,EAAE,yBAAyB;gBAClC,MAAM,EAAE,6BAA6B;aACrC;SACD;QACD,IAAI,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE;gBACL,EAAE,EAAE,6BAA6B;gBACjC,IAAI,EAAE,4BAA4B;gBAClC,OAAO,EAAE,wBAAwB;aACjC;SACD;KACD;IACD,KAAK,EAAE;QACN,IAAI,EAAE;YACL,IAAI,EAAE,4SAA4S;YAClT,OAAO,EAAE,iXAAiX;YAC1X,OAAO,EAAE,uSAAuS;YAChT,KAAK,EAAE,qRAAqR;SAC5R;QACD,MAAM,EAAE,WAAW;KACnB;CACD,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ThemeTokensConfig } from '@refrakt-md/types';
2
+ /**
3
+ * Niwaki — a Japanese-garden-inspired *syntax-only* preset.
4
+ *
5
+ * Where tideline is a full identity overhaul (chrome + syntax + typography),
6
+ * niwaki deliberately scopes to the syntax tokens. Code blocks render in
7
+ * wakaba / sakura / matsu / momiji / ishi; everything else inherits from
8
+ * whichever chrome theme is layered above. Composes cleanly:
9
+ *
10
+ * - `presets: ["niwaki"]` → Japanese-garden code on the neutral default
11
+ * - `presets: ["tideline", "niwaki"]` → tideline chrome + niwaki code
12
+ *
13
+ * The refrakt documentation site uses `["niwaki"]`. See `/docs/themes/lumina/presets/niwaki`.
14
+ *
15
+ * Cultural sensitivity: the preset is named in Japanese (niwaki = 庭木, the
16
+ * cloud-pruned garden tree of Japanese tradition) and its colours reference
17
+ * wakaba (young leaf), sakura (cherry blossom), matsu (pine), momiji (autumn
18
+ * maple), and ishi (stone). The naming is a deliberate homage; we don't
19
+ * claim cultural ownership.
20
+ */
21
+ declare const niwaki: ThemeTokensConfig;
22
+ export default niwaki;
23
+ //# sourceMappingURL=niwaki.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"niwaki.d.ts","sourceRoot":"","sources":["../../src/presets/niwaki.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,MAAM,EAAE,iBA6Bb,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Niwaki — a Japanese-garden-inspired *syntax-only* preset.
3
+ *
4
+ * Where tideline is a full identity overhaul (chrome + syntax + typography),
5
+ * niwaki deliberately scopes to the syntax tokens. Code blocks render in
6
+ * wakaba / sakura / matsu / momiji / ishi; everything else inherits from
7
+ * whichever chrome theme is layered above. Composes cleanly:
8
+ *
9
+ * - `presets: ["niwaki"]` → Japanese-garden code on the neutral default
10
+ * - `presets: ["tideline", "niwaki"]` → tideline chrome + niwaki code
11
+ *
12
+ * The refrakt documentation site uses `["niwaki"]`. See `/docs/themes/lumina/presets/niwaki`.
13
+ *
14
+ * Cultural sensitivity: the preset is named in Japanese (niwaki = 庭木, the
15
+ * cloud-pruned garden tree of Japanese tradition) and its colours reference
16
+ * wakaba (young leaf), sakura (cherry blossom), matsu (pine), momiji (autumn
17
+ * maple), and ishi (stone). The naming is a deliberate homage; we don't
18
+ * claim cultural ownership.
19
+ */
20
+ const niwaki = {
21
+ // Light-mode syntax — matsu / sakura / momiji / wakaba / ishi
22
+ syntax: {
23
+ keyword: '#5e7d2a', // wakaba — deep young-leaf green
24
+ function: '#b54a6b', // sakura — mature cherry blossom
25
+ link: '#3d6b3d', // matsu — deep pine
26
+ string: '#a8521c', // momiji — deep peach
27
+ 'string-expression': '#c54a14', // momiji punchy — rust orange
28
+ constant: '#3d6b3d', // matsu — deep pine (same as link)
29
+ comment: '#8a857d', // ishi light — muted stone
30
+ punctuation: '#8a857d',
31
+ variable: '#1c1a17', // = neutral default's text
32
+ },
33
+ modes: {
34
+ dark: {
35
+ syntax: {
36
+ keyword: '#b3d475', // wakaba — yellow-green young leaf
37
+ function: '#f591a6', // sakura — cherry blossom pink
38
+ link: '#8ab589', // matsu — pine
39
+ string: '#eba073', // momiji — peach
40
+ 'string-expression': '#fa9a61', // momiji punchy — saturated orange
41
+ constant: '#8ab589', // matsu — pine (same as link)
42
+ comment: '#7d7062', // ishi — warm stone (italic via rune CSS)
43
+ punctuation: '#7d7062',
44
+ variable: '#f6f4ef', // = neutral default's dark text
45
+ },
46
+ },
47
+ },
48
+ };
49
+ export default niwaki;
50
+ //# sourceMappingURL=niwaki.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"niwaki.js","sourceRoot":"","sources":["../../src/presets/niwaki.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,GAAsB;IACjC,8DAA8D;IAC9D,MAAM,EAAE;QACP,OAAO,EAAE,SAAS,EAAc,iCAAiC;QACjE,QAAQ,EAAE,SAAS,EAAa,iCAAiC;QACjE,IAAI,EAAE,SAAS,EAAiB,oBAAoB;QACpD,MAAM,EAAE,SAAS,EAAe,sBAAsB;QACtD,mBAAmB,EAAE,SAAS,EAAE,8BAA8B;QAC9D,QAAQ,EAAE,SAAS,EAAa,mCAAmC;QACnE,OAAO,EAAE,SAAS,EAAc,2BAA2B;QAC3D,WAAW,EAAE,SAAS;QACtB,QAAQ,EAAE,SAAS,EAAa,2BAA2B;KAC3D;IAED,KAAK,EAAE;QACN,IAAI,EAAE;YACL,MAAM,EAAE;gBACP,OAAO,EAAE,SAAS,EAAM,mCAAmC;gBAC3D,QAAQ,EAAE,SAAS,EAAK,+BAA+B;gBACvD,IAAI,EAAE,SAAS,EAAS,eAAe;gBACvC,MAAM,EAAE,SAAS,EAAO,iBAAiB;gBACzC,mBAAmB,EAAE,SAAS,EAAE,mCAAmC;gBACnE,QAAQ,EAAE,SAAS,EAAK,8BAA8B;gBACtD,OAAO,EAAE,SAAS,EAAM,0CAA0C;gBAClE,WAAW,EAAE,SAAS;gBACtB,QAAQ,EAAE,SAAS,EAAK,gCAAgC;aACxD;SACD;KACD;CACD,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { ThemeTokensConfig } from '@refrakt-md/types';
2
+ /**
3
+ * Nord — an *integrated* palette preset (canvas + chrome + foreground).
4
+ *
5
+ * Where niwaki took the scoped "foreground only" position deliberately,
6
+ * Nord takes the integrated position because that's how Nord was designed:
7
+ * its 16 hues were tuned together against the Polar Night / Snow Storm
8
+ * canvas families. Rendering Nord's foreground on a warm or neutral
9
+ * canvas misrepresents the palette's intent.
10
+ *
11
+ * Nord therefore claims chrome (`color.bg`, `color.surface.base`,
12
+ * `color.text`, `color.muted`, `color.border`, `color.primary`) and
13
+ * code-surface (`color.code.*`) tokens alongside `syntax.*`. When Nord
14
+ * is the active preset, the whole page renders in Polar Night / Snow
15
+ * Storm. When Nord is used as a scoped tint (via
16
+ * `theme.tints[].extends`), every Nord-tinted subtree renders against
17
+ * Nord's canvas without affecting surrounding content. The scope-
18
+ * eligibility filter in `generateScopedTintStylesheet` enforces the
19
+ * boundary — typography, spacing, radius, shadow, and status sentiments
20
+ * stay with whatever chrome is active, even when Nord is tinting.
21
+ *
22
+ * Composes:
23
+ * - `presets: ["nord"]` → Nord syntax on Nord canvas, neutral chrome elsewhere
24
+ * - `presets: ["tideline", "nord"]` → tideline chrome with Nord code surface
25
+ * - Used as a tint via `tints: { nord: { extends: ".../presets/nord" } }`
26
+ * (WORK-223 unlocks this) to showcase Nord on a site whose active
27
+ * preset is something else.
28
+ *
29
+ * Derived from the Nord palette by Arctic Ice Studio & Sven Greb,
30
+ * MIT licensed. https://www.nordtheme.com/
31
+ *
32
+ * The Nord palette is structured as four named groups:
33
+ * - Polar Night (nord0–3): the dark canvas and its near-canvas elevation
34
+ * - Snow Storm (nord4–6): the light/text family and the light canvas
35
+ * - Frost (nord7–10): cool blue accents — types, functions, keywords
36
+ * - Aurora (nord11–15): warm accents — red, orange, yellow, green, purple
37
+ *
38
+ * Role assignments below follow Nord's own syntax-highlighting reference.
39
+ * Where SPEC-056's extended roles (`type`, `tag`, `attribute`, ...) let
40
+ * Nord's intended hue splits land on distinct refrakt roles, we set them
41
+ * explicitly; where Nord collapses two roles to the same hue, we leave
42
+ * the optional role unset and let the fallback chain carry the value.
43
+ */
44
+ declare const nord: ThemeTokensConfig;
45
+ export default nord;
46
+ //# sourceMappingURL=nord.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nord.d.ts","sourceRoot":"","sources":["../../src/presets/nord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,QAAA,MAAM,IAAI,EAAE,iBAqFX,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Nord — an *integrated* palette preset (canvas + chrome + foreground).
3
+ *
4
+ * Where niwaki took the scoped "foreground only" position deliberately,
5
+ * Nord takes the integrated position because that's how Nord was designed:
6
+ * its 16 hues were tuned together against the Polar Night / Snow Storm
7
+ * canvas families. Rendering Nord's foreground on a warm or neutral
8
+ * canvas misrepresents the palette's intent.
9
+ *
10
+ * Nord therefore claims chrome (`color.bg`, `color.surface.base`,
11
+ * `color.text`, `color.muted`, `color.border`, `color.primary`) and
12
+ * code-surface (`color.code.*`) tokens alongside `syntax.*`. When Nord
13
+ * is the active preset, the whole page renders in Polar Night / Snow
14
+ * Storm. When Nord is used as a scoped tint (via
15
+ * `theme.tints[].extends`), every Nord-tinted subtree renders against
16
+ * Nord's canvas without affecting surrounding content. The scope-
17
+ * eligibility filter in `generateScopedTintStylesheet` enforces the
18
+ * boundary — typography, spacing, radius, shadow, and status sentiments
19
+ * stay with whatever chrome is active, even when Nord is tinting.
20
+ *
21
+ * Composes:
22
+ * - `presets: ["nord"]` → Nord syntax on Nord canvas, neutral chrome elsewhere
23
+ * - `presets: ["tideline", "nord"]` → tideline chrome with Nord code surface
24
+ * - Used as a tint via `tints: { nord: { extends: ".../presets/nord" } }`
25
+ * (WORK-223 unlocks this) to showcase Nord on a site whose active
26
+ * preset is something else.
27
+ *
28
+ * Derived from the Nord palette by Arctic Ice Studio & Sven Greb,
29
+ * MIT licensed. https://www.nordtheme.com/
30
+ *
31
+ * The Nord palette is structured as four named groups:
32
+ * - Polar Night (nord0–3): the dark canvas and its near-canvas elevation
33
+ * - Snow Storm (nord4–6): the light/text family and the light canvas
34
+ * - Frost (nord7–10): cool blue accents — types, functions, keywords
35
+ * - Aurora (nord11–15): warm accents — red, orange, yellow, green, purple
36
+ *
37
+ * Role assignments below follow Nord's own syntax-highlighting reference.
38
+ * Where SPEC-056's extended roles (`type`, `tag`, `attribute`, ...) let
39
+ * Nord's intended hue splits land on distinct refrakt roles, we set them
40
+ * explicitly; where Nord collapses two roles to the same hue, we leave
41
+ * the optional role unset and let the fallback chain carry the value.
42
+ */
43
+ const nord = {
44
+ // Light mode — Snow Storm canvas with Polar Night foreground. Nord is
45
+ // dark-canonical; the light variant is a swap of the canvas/text axis
46
+ // while keeping the same Frost + Aurora accents at slightly darker
47
+ // values for contrast on the lighter background.
48
+ color: {
49
+ bg: '#eceff4', // Snow Storm nord6 — canonical light canvas
50
+ text: '#2e3440', // Polar Night nord0 — text on light canvas
51
+ muted: '#4c566a', // Polar Night nord3
52
+ border: '#d8dee9', // Snow Storm nord4 — between bg and elevated
53
+ primary: '#5e81ac', // Frost nord10 — Nord's interactive accent
54
+ 'primary-hover': '#81a1c1', // Frost nord9 — lighter on hover
55
+ surface: {
56
+ base: '#e5e9f0', // Snow Storm nord5 — slightly elevated card surface
57
+ hover: '#d8dee9', // Snow Storm nord4
58
+ active: '#d8dee9',
59
+ raised: '#eceff4',
60
+ },
61
+ code: {
62
+ bg: '#eceff4', // Snow Storm nord6 — same as page canvas
63
+ text: '#2e3440', // Polar Night nord0
64
+ 'inline-bg': '#e5e9f0', // Snow Storm nord5 — slight elevation for inline code
65
+ },
66
+ },
67
+ syntax: {
68
+ keyword: '#5e81ac', // Frost nord10 — slightly darker for light contrast
69
+ function: '#88c0d0', // Frost nord8
70
+ type: '#8fbcbb', // Frost nord7 — distinct from function (the SPEC-056 motivating split)
71
+ string: '#a3be8c', // Aurora nord14
72
+ constant: '#b48ead', // Aurora nord15 — purple for booleans/null/symbols
73
+ comment: '#4c566a', // Polar Night nord3 — muted on light canvas
74
+ punctuation: '#4c566a', // Polar Night nord3
75
+ variable: '#2e3440', // Polar Night nord0 — body text on light
76
+ // Extended roles where Nord's spec has a distinct intent
77
+ number: '#d08770', // Aurora nord12 — orange, separating numbers from string-constants
78
+ regex: '#ebcb8b', // Aurora nord13 — yellow regex hue
79
+ tag: '#5e81ac', // Frost nord10 — Nord renders HTML tags as deep Frost
80
+ attribute: '#8fbcbb', // Frost nord7 — Nord aligns attribute names with type-family
81
+ operator: '#81a1c1', // Frost nord9 — Nord splits operators from punctuation, painting them as keyword-family
82
+ // `parameter` and `property` and `link`, `string-expression` left unset:
83
+ // Nord doesn't separately spec them, so they cascade via the fallback
84
+ // chain (parameter→variable, property→variable, link→function,
85
+ // string-expression→string).
86
+ },
87
+ modes: {
88
+ dark: {
89
+ color: {
90
+ bg: '#2e3440', // Polar Night nord0 — canonical dark canvas
91
+ text: '#d8dee9', // Snow Storm nord4
92
+ muted: '#616e88', // between Polar Night nord3 and Snow Storm nord4
93
+ border: '#3b4252', // Polar Night nord1 — subtle separator
94
+ primary: '#88c0d0', // Frost nord8 — brighter on dark
95
+ 'primary-hover': '#8fbcbb', // Frost nord7
96
+ surface: {
97
+ base: '#3b4252', // Polar Night nord1 — elevated card on dark
98
+ hover: '#434c5e', // Polar Night nord2
99
+ active: '#4c566a', // Polar Night nord3
100
+ raised: '#434c5e',
101
+ },
102
+ code: {
103
+ bg: '#2e3440', // Polar Night nord0 — canonical dark canvas
104
+ text: '#d8dee9', // Snow Storm nord4
105
+ 'inline-bg': '#3b4252', // Polar Night nord1 — slightly elevated
106
+ },
107
+ },
108
+ syntax: {
109
+ keyword: '#81a1c1', // Frost nord9
110
+ function: '#88c0d0', // Frost nord8
111
+ type: '#8fbcbb', // Frost nord7
112
+ string: '#a3be8c', // Aurora nord14
113
+ constant: '#b48ead', // Aurora nord15
114
+ comment: '#616e88', // between nord3 and nord4 — Nord-spec'd comment on dark
115
+ punctuation: '#d8dee9', // Snow Storm nord4 — Nord's punctuation reads as default text
116
+ variable: '#d8dee9', // Snow Storm nord4
117
+ number: '#b48ead', // Aurora nord15 in dark; some Nord impls use nord12 — picking nord15 for harmony with constant
118
+ regex: '#ebcb8b', // Aurora nord13
119
+ tag: '#81a1c1', // Frost nord9 in dark
120
+ attribute: '#8fbcbb', // Frost nord7
121
+ operator: '#81a1c1', // Frost nord9
122
+ },
123
+ },
124
+ },
125
+ };
126
+ export default nord;
127
+ //# sourceMappingURL=nord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nord.js","sourceRoot":"","sources":["../../src/presets/nord.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { ThemeTokensConfig } from '@refrakt-md/types';
2
+ /**
3
+ * Tideline — Lumina's "warm + branded" full preset, named after the boundary
4
+ * where land meets water. Restores the cream-and-maritime-navy palette
5
+ * Lumina shipped pre-v0.14.0, with one deliberate upgrade: typography
6
+ * switches from Outfit to IBM Plex Sans / Plex Mono per SPEC-051.
7
+ *
8
+ * Opt in:
9
+ *
10
+ * ```jsonc
11
+ * {
12
+ * "site": {
13
+ * "theme": {
14
+ * "package": "@refrakt-md/lumina",
15
+ * "presets": ["@refrakt-md/lumina/presets/tideline"]
16
+ * }
17
+ * }
18
+ * }
19
+ * ```
20
+ *
21
+ * Sites that specifically depended on the Outfit font can pin it back via
22
+ * `theme.tokens.font.sans` after opting in to the rest of tideline.
23
+ */
24
+ declare const tideline: ThemeTokensConfig;
25
+ export default tideline;
26
+ //# sourceMappingURL=tideline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tideline.d.ts","sourceRoot":"","sources":["../../src/presets/tideline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,QAAA,MAAM,QAAQ,EAAE,iBAyHf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Tideline — Lumina's "warm + branded" full preset, named after the boundary
3
+ * where land meets water. Restores the cream-and-maritime-navy palette
4
+ * Lumina shipped pre-v0.14.0, with one deliberate upgrade: typography
5
+ * switches from Outfit to IBM Plex Sans / Plex Mono per SPEC-051.
6
+ *
7
+ * Opt in:
8
+ *
9
+ * ```jsonc
10
+ * {
11
+ * "site": {
12
+ * "theme": {
13
+ * "package": "@refrakt-md/lumina",
14
+ * "presets": ["@refrakt-md/lumina/presets/tideline"]
15
+ * }
16
+ * }
17
+ * }
18
+ * ```
19
+ *
20
+ * Sites that specifically depended on the Outfit font can pin it back via
21
+ * `theme.tokens.font.sans` after opting in to the rest of tideline.
22
+ */
23
+ const tideline = {
24
+ font: {
25
+ sans: "'IBM Plex Sans', system-ui, -apple-system, sans-serif",
26
+ mono: "'IBM Plex Mono', 'JetBrains Mono', ui-monospace, monospace",
27
+ },
28
+ color: {
29
+ text: '#1d3557',
30
+ muted: '#5a7a90',
31
+ border: '#d8e4de',
32
+ bg: '#faf5eb',
33
+ primary: '#457b9d',
34
+ 'primary-hover': '#376585',
35
+ // Cerulean → frosted blue scale, preserved from pre-v0.14.0 Lumina.
36
+ 'primary-scale': {
37
+ '50': '#f0f6f9',
38
+ '100': '#dcebf0',
39
+ '200': '#b8d6e2',
40
+ '300': '#a8dadc',
41
+ '400': '#70b4c0',
42
+ '500': '#457b9d',
43
+ '600': '#376585',
44
+ '700': '#1d3557',
45
+ '800': '#182c4a',
46
+ '900': '#12213a',
47
+ '950': '#0c162a',
48
+ },
49
+ surface: {
50
+ base: '#fffbf2',
51
+ hover: '#fdf0d5',
52
+ active: '#f9ebcc',
53
+ raised: '#ffffff',
54
+ },
55
+ info: { base: '#457b9d', bg: '#edf4f8', border: '#a8dadc' },
56
+ warning: { base: '#c8900a', bg: '#fdf5e4', border: '#edd49a' },
57
+ danger: { base: '#e63946', bg: '#fdeced', border: '#f0b0b5' },
58
+ success: { base: '#3d8f65', bg: '#ecf5ef', border: '#a8d4b8' },
59
+ code: {
60
+ bg: '#1d3557',
61
+ text: '#f1faee',
62
+ 'inline-bg': '#f9ebcc',
63
+ },
64
+ },
65
+ syntax: {
66
+ keyword: '#f2cc8f',
67
+ function: '#70b4c0',
68
+ string: '#a8dadc',
69
+ constant: '#e8c07a',
70
+ comment: '#5a7a90',
71
+ punctuation: '#a8dadc',
72
+ variable: '#b8d6e2',
73
+ },
74
+ modes: {
75
+ dark: {
76
+ color: {
77
+ text: '#f1faee',
78
+ muted: '#a8dadc',
79
+ border: 'rgba(168, 218, 220, 0.15)',
80
+ bg: '#152238',
81
+ primary: '#70b4c0',
82
+ 'primary-hover': '#a8dadc',
83
+ surface: {
84
+ base: '#1a2940',
85
+ hover: '#203048',
86
+ active: '#263850',
87
+ raised: '#1a2940',
88
+ },
89
+ info: { base: '#a8dadc', bg: 'rgba(69, 123, 157, 0.12)', border: 'rgba(69, 123, 157, 0.3)' },
90
+ warning: { base: '#e8c07a', bg: 'rgba(200, 144, 10, 0.12)', border: 'rgba(200, 144, 10, 0.3)' },
91
+ danger: { base: '#f07078', bg: 'rgba(230, 57, 70, 0.12)', border: 'rgba(230, 57, 70, 0.3)' },
92
+ success: { base: '#72c098', bg: 'rgba(61, 143, 101, 0.12)', border: 'rgba(61, 143, 101, 0.3)' },
93
+ code: {
94
+ bg: '#152238',
95
+ text: '#f1faee',
96
+ 'inline-bg': 'rgba(168, 218, 220, 0.08)',
97
+ },
98
+ },
99
+ shadow: {
100
+ xs: '0 1px 2px rgba(0,0,0,0.3)',
101
+ sm: '0 1px 3px rgba(0,0,0,0.4), 0 1px 2px rgba(0,0,0,0.3)',
102
+ md: '0 4px 12px rgba(0,0,0,0.4), 0 1px 3px rgba(0,0,0,0.3)',
103
+ lg: '0 8px 24px rgba(0,0,0,0.5), 0 2px 6px rgba(0,0,0,0.3)',
104
+ },
105
+ syntax: {
106
+ keyword: '#f2cc8f',
107
+ function: '#a8dadc',
108
+ string: '#a8dadc',
109
+ constant: '#e8c07a',
110
+ comment: '#5a7a90',
111
+ punctuation: '#70b4c0',
112
+ variable: '#b8d6e2',
113
+ },
114
+ // All `rf-syntax-*` Shiki aliases (token-*, foreground) auto-derive
115
+ // from `syntax.*` and `color.text` above. `rf-syntax-background`
116
+ // is set explicitly because tideline uses a deeper navy for the
117
+ // Shiki bg (#0c162a) than the outer `color.code.bg` (#152238).
118
+ extra: {
119
+ 'rf-color-inline-code-bg': 'rgba(168, 218, 220, 0.08)',
120
+ 'rf-syntax-background': '#0c162a',
121
+ },
122
+ },
123
+ },
124
+ // Shiki aliases auto-derive from `syntax.*` and `color.{text,code.bg}`
125
+ // above. Only the legacy `rf-color-inline-code-bg` alias needs an
126
+ // explicit entry.
127
+ extra: {
128
+ 'rf-color-inline-code-bg': '#f9ebcc',
129
+ },
130
+ };
131
+ export default tideline;
132
+ //# sourceMappingURL=tideline.js.map