@bestagentkits/render 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/LICENSE +21 -0
  3. package/README.md +166 -0
  4. package/dist/cli.d.ts +18 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +336 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/diagnostics.d.ts +45 -0
  9. package/dist/diagnostics.d.ts.map +1 -0
  10. package/dist/diagnostics.js +57 -0
  11. package/dist/diagnostics.js.map +1 -0
  12. package/dist/diagram/adapter.d.ts +71 -0
  13. package/dist/diagram/adapter.d.ts.map +1 -0
  14. package/dist/diagram/adapter.js +87 -0
  15. package/dist/diagram/adapter.js.map +1 -0
  16. package/dist/errors.d.ts +37 -0
  17. package/dist/errors.d.ts.map +1 -0
  18. package/dist/errors.js +42 -0
  19. package/dist/errors.js.map +1 -0
  20. package/dist/hash.d.ts +14 -0
  21. package/dist/hash.d.ts.map +1 -0
  22. package/dist/hash.js +27 -0
  23. package/dist/hash.js.map +1 -0
  24. package/dist/index.d.ts +43 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +25 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/internal/yaml-error.d.ts +14 -0
  29. package/dist/internal/yaml-error.d.ts.map +1 -0
  30. package/dist/internal/yaml-error.js +12 -0
  31. package/dist/internal/yaml-error.js.map +1 -0
  32. package/dist/ir.d.ts +77 -0
  33. package/dist/ir.d.ts.map +1 -0
  34. package/dist/ir.js +20 -0
  35. package/dist/ir.js.map +1 -0
  36. package/dist/json.d.ts +23 -0
  37. package/dist/json.d.ts.map +1 -0
  38. package/dist/json.js +47 -0
  39. package/dist/json.js.map +1 -0
  40. package/dist/registry/actions.d.ts +48 -0
  41. package/dist/registry/actions.d.ts.map +1 -0
  42. package/dist/registry/actions.js +274 -0
  43. package/dist/registry/actions.js.map +1 -0
  44. package/dist/registry/prop-schema.d.ts +108 -0
  45. package/dist/registry/prop-schema.d.ts.map +1 -0
  46. package/dist/registry/prop-schema.js +400 -0
  47. package/dist/registry/prop-schema.js.map +1 -0
  48. package/dist/registry/registry.d.ts +47 -0
  49. package/dist/registry/registry.d.ts.map +1 -0
  50. package/dist/registry/registry.js +201 -0
  51. package/dist/registry/registry.js.map +1 -0
  52. package/dist/registry/roster.d.ts +53 -0
  53. package/dist/registry/roster.d.ts.map +1 -0
  54. package/dist/registry/roster.js +692 -0
  55. package/dist/registry/roster.js.map +1 -0
  56. package/dist/render/blocks.d.ts +41 -0
  57. package/dist/render/blocks.d.ts.map +1 -0
  58. package/dist/render/blocks.js +749 -0
  59. package/dist/render/blocks.js.map +1 -0
  60. package/dist/render/charts.d.ts +29 -0
  61. package/dist/render/charts.d.ts.map +1 -0
  62. package/dist/render/charts.js +235 -0
  63. package/dist/render/charts.js.map +1 -0
  64. package/dist/render/document.d.ts +40 -0
  65. package/dist/render/document.d.ts.map +1 -0
  66. package/dist/render/document.js +90 -0
  67. package/dist/render/document.js.map +1 -0
  68. package/dist/render/escape.d.ts +46 -0
  69. package/dist/render/escape.d.ts.map +1 -0
  70. package/dist/render/escape.js +108 -0
  71. package/dist/render/escape.js.map +1 -0
  72. package/dist/render/render.d.ts +52 -0
  73. package/dist/render/render.d.ts.map +1 -0
  74. package/dist/render/render.js +216 -0
  75. package/dist/render/render.js.map +1 -0
  76. package/dist/render/runtime.d.ts +25 -0
  77. package/dist/render/runtime.d.ts.map +1 -0
  78. package/dist/render/runtime.js +451 -0
  79. package/dist/render/runtime.js.map +1 -0
  80. package/dist/render/styles.d.ts +15 -0
  81. package/dist/render/styles.d.ts.map +1 -0
  82. package/dist/render/styles.js +163 -0
  83. package/dist/render/styles.js.map +1 -0
  84. package/dist/render/verify.d.ts +25 -0
  85. package/dist/render/verify.d.ts.map +1 -0
  86. package/dist/render/verify.js +168 -0
  87. package/dist/render/verify.js.map +1 -0
  88. package/dist/spec/bindings.d.ts +19 -0
  89. package/dist/spec/bindings.d.ts.map +1 -0
  90. package/dist/spec/bindings.js +51 -0
  91. package/dist/spec/bindings.js.map +1 -0
  92. package/dist/spec/bounds.d.ts +43 -0
  93. package/dist/spec/bounds.d.ts.map +1 -0
  94. package/dist/spec/bounds.js +144 -0
  95. package/dist/spec/bounds.js.map +1 -0
  96. package/dist/spec/forbidden.d.ts +27 -0
  97. package/dist/spec/forbidden.d.ts.map +1 -0
  98. package/dist/spec/forbidden.js +91 -0
  99. package/dist/spec/forbidden.js.map +1 -0
  100. package/dist/spec/migrate.d.ts +33 -0
  101. package/dist/spec/migrate.d.ts.map +1 -0
  102. package/dist/spec/migrate.js +113 -0
  103. package/dist/spec/migrate.js.map +1 -0
  104. package/dist/spec/normalize.d.ts +29 -0
  105. package/dist/spec/normalize.d.ts.map +1 -0
  106. package/dist/spec/normalize.js +649 -0
  107. package/dist/spec/normalize.js.map +1 -0
  108. package/dist/spec/parse.d.ts +22 -0
  109. package/dist/spec/parse.d.ts.map +1 -0
  110. package/dist/spec/parse.js +62 -0
  111. package/dist/spec/parse.js.map +1 -0
  112. package/dist/spec/providers.d.ts +30 -0
  113. package/dist/spec/providers.d.ts.map +1 -0
  114. package/dist/spec/providers.js +64 -0
  115. package/dist/spec/providers.js.map +1 -0
  116. package/dist/spec/validate.d.ts +28 -0
  117. package/dist/spec/validate.d.ts.map +1 -0
  118. package/dist/spec/validate.js +68 -0
  119. package/dist/spec/validate.js.map +1 -0
  120. package/dist/theme/load-theme.d.ts +55 -0
  121. package/dist/theme/load-theme.d.ts.map +1 -0
  122. package/dist/theme/load-theme.js +219 -0
  123. package/dist/theme/load-theme.js.map +1 -0
  124. package/dist/theme/presets.d.ts +50 -0
  125. package/dist/theme/presets.d.ts.map +1 -0
  126. package/dist/theme/presets.js +304 -0
  127. package/dist/theme/presets.js.map +1 -0
  128. package/dist/theme/theme-catalog.d.ts +68 -0
  129. package/dist/theme/theme-catalog.d.ts.map +1 -0
  130. package/dist/theme/theme-catalog.js +198 -0
  131. package/dist/theme/theme-catalog.js.map +1 -0
  132. package/dist/theme/tokens.d.ts +38 -0
  133. package/dist/theme/tokens.d.ts.map +1 -0
  134. package/dist/theme/tokens.js +190 -0
  135. package/dist/theme/tokens.js.map +1 -0
  136. package/dist/version.d.ts +12 -0
  137. package/dist/version.d.ts.map +1 -0
  138. package/dist/version.js +12 -0
  139. package/dist/version.js.map +1 -0
  140. package/package.json +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-theme.js","sourceRoot":"","sources":["../../src/theme/load-theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Built-in theme presets.
3
+ *
4
+ * The presets carry over the curated visual language that the legacy HTML
5
+ * references owned in prose (see `docs/adr/0001-page-spec-compiler-boundary.md`
6
+ * and `html-design-guidelines.md`), now as validated token data.
7
+ *
8
+ * Fonts are system stacks only: the offline contract forbids a network fetch, so
9
+ * nothing here can reference a webfont, and therefore nothing here needs a font
10
+ * licence.
11
+ */
12
+ import type { Tokens } from './tokens.js';
13
+ export interface PresetDefinition {
14
+ name: string;
15
+ description: string;
16
+ light: Tokens;
17
+ dark: Tokens;
18
+ }
19
+ /**
20
+ * Palette notes, kept next to the data so a reviewer can check the intent:
21
+ * every preset pairs a warm/cool background with a matching accent family, uses
22
+ * a tinted hairline border rather than a neutral grey, and keeps body text at a
23
+ * contrast ratio above 7:1 against its background.
24
+ */
25
+ export declare const PRESETS: Readonly<Record<string, PresetDefinition>>;
26
+ /** Default preset used when a spec does not name one. */
27
+ export declare const DEFAULT_PRESET = "editorial";
28
+ export declare function presetNames(): string[];
29
+ /**
30
+ * A preset in its declarative, catalog-friendly form.
31
+ *
32
+ * Built-in presets are complete token sets; a file-authored preset typically
33
+ * declares `extends` plus overrides. Both are the same shape, so resolution has
34
+ * one code path.
35
+ */
36
+ export interface PresetEntry {
37
+ name: string;
38
+ version: number;
39
+ description: string;
40
+ extends?: string;
41
+ /** Light-scheme token values. */
42
+ tokens: Record<string, string>;
43
+ /** Dark-scheme token values. */
44
+ dark: Record<string, string>;
45
+ origin: 'built-in' | 'user' | 'project' | 'file';
46
+ file?: string;
47
+ }
48
+ /** Built-in presets expressed as catalog entries. */
49
+ export declare function builtinPresetEntries(): Record<string, PresetEntry>;
50
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/theme/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAkDD;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAyO9D,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qDAAqD;AACrD,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAalE"}
@@ -0,0 +1,304 @@
1
+ /**
2
+ * Built-in theme presets.
3
+ *
4
+ * The presets carry over the curated visual language that the legacy HTML
5
+ * references owned in prose (see `docs/adr/0001-page-spec-compiler-boundary.md`
6
+ * and `html-design-guidelines.md`), now as validated token data.
7
+ *
8
+ * Fonts are system stacks only: the offline contract forbids a network fetch, so
9
+ * nothing here can reference a webfont, and therefore nothing here needs a font
10
+ * licence.
11
+ */
12
+ /** Structural defaults shared by every preset; each preset overrides colours and voice. */
13
+ const STRUCTURAL = {
14
+ 'font-size-base': '16px',
15
+ 'font-scale': '1.25',
16
+ 'line-height': '1.65',
17
+ measure: '72ch',
18
+ 'space-unit': '8px',
19
+ density: 'comfortable',
20
+ 'radius-small': '4px',
21
+ 'radius-medium': '8px',
22
+ 'radius-large': '16px',
23
+ 'border-width': '1px',
24
+ 'elevation-card': 'subtle',
25
+ 'elevation-popover': 'medium',
26
+ 'motion-duration': '160ms',
27
+ 'motion-easing': 'ease',
28
+ 'motion-policy': 'full',
29
+ };
30
+ const SYSTEM_SANS = 'ui-sans-serif, system-ui, -apple-system, Segoe UI, sans-serif';
31
+ const SYSTEM_SERIF = 'ui-serif, Georgia, Times New Roman, serif';
32
+ const SYSTEM_MONO = 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace';
33
+ function preset(input) {
34
+ const shared = {
35
+ ...STRUCTURAL,
36
+ 'font-heading': SYSTEM_SANS,
37
+ 'font-body': SYSTEM_SANS,
38
+ 'font-mono': SYSTEM_MONO,
39
+ ...input.typing,
40
+ ...input.structure,
41
+ };
42
+ return {
43
+ name: input.name,
44
+ description: input.description,
45
+ light: { ...shared, ...input.colors.light },
46
+ dark: { ...shared, ...input.colors.dark },
47
+ };
48
+ }
49
+ /**
50
+ * Palette notes, kept next to the data so a reviewer can check the intent:
51
+ * every preset pairs a warm/cool background with a matching accent family, uses
52
+ * a tinted hairline border rather than a neutral grey, and keeps body text at a
53
+ * contrast ratio above 7:1 against its background.
54
+ */
55
+ export const PRESETS = {
56
+ blueprint: preset({
57
+ name: 'blueprint',
58
+ description: 'Technical drawing: cool slate surfaces, precise borders, monospace labels.',
59
+ typing: { 'font-heading': SYSTEM_SANS, 'font-mono': SYSTEM_MONO },
60
+ colors: {
61
+ light: {
62
+ 'color-background': '#f0f4f8',
63
+ 'color-surface': '#ffffff',
64
+ 'color-surface-raised': '#e8eef4',
65
+ 'color-border': '#c2d2e2',
66
+ 'color-text': '#122334',
67
+ 'color-text-muted': '#4b6480',
68
+ 'color-accent': '#1a5fa8',
69
+ 'color-accent-contrast': '#ffffff',
70
+ 'color-info': '#1a5fa8',
71
+ 'color-success': '#1d6f4a',
72
+ 'color-warning': '#8a5a00',
73
+ 'color-danger': '#a32a1f',
74
+ },
75
+ dark: {
76
+ 'color-background': '#0d1421',
77
+ 'color-surface': '#111d2e',
78
+ 'color-surface-raised': '#162438',
79
+ 'color-border': '#2b4360',
80
+ 'color-text': '#dbe7f3',
81
+ 'color-text-muted': '#93a9c0',
82
+ 'color-accent': '#6aa9e9',
83
+ 'color-accent-contrast': '#08111c',
84
+ 'color-info': '#6aa9e9',
85
+ 'color-success': '#63c194',
86
+ 'color-warning': '#e0b055',
87
+ 'color-danger': '#ef8a7d',
88
+ },
89
+ },
90
+ }),
91
+ editorial: preset({
92
+ name: 'editorial',
93
+ description: 'Serif headlines, generous whitespace, deep navy with gold accents.',
94
+ typing: { 'font-heading': SYSTEM_SERIF, 'font-body': SYSTEM_SERIF, 'line-height': '1.7' },
95
+ structure: { 'font-size-base': '17px', 'font-scale': '1.333', measure: '68ch' },
96
+ colors: {
97
+ light: {
98
+ 'color-background': '#faf8f2',
99
+ 'color-surface': '#ffffff',
100
+ 'color-surface-raised': '#f5f0e6',
101
+ 'color-border': '#e0d9c8',
102
+ 'color-text': '#1a1814',
103
+ 'color-text-muted': '#6b6558',
104
+ 'color-accent': '#8a6100',
105
+ 'color-accent-contrast': '#ffffff',
106
+ 'color-info': '#1f4e79',
107
+ 'color-success': '#2f6b46',
108
+ 'color-warning': '#8a6100',
109
+ 'color-danger': '#9c2c25',
110
+ },
111
+ dark: {
112
+ 'color-background': '#0f1729',
113
+ 'color-surface': '#162040',
114
+ 'color-surface-raised': '#1d2b52',
115
+ 'color-border': '#35446b',
116
+ 'color-text': '#f0ece0',
117
+ 'color-text-muted': '#b0a890',
118
+ 'color-accent': '#e2c069',
119
+ 'color-accent-contrast': '#1a1814',
120
+ 'color-info': '#8fb8e0',
121
+ 'color-success': '#88c9a1',
122
+ 'color-warning': '#e2c069',
123
+ 'color-danger': '#eb9a90',
124
+ },
125
+ },
126
+ }),
127
+ 'paper-ink': preset({
128
+ name: 'paper-ink',
129
+ description: 'Warm cream paper with terracotta and sage; informal and readable.',
130
+ typing: { 'font-heading': SYSTEM_SANS, 'font-body': SYSTEM_SANS },
131
+ colors: {
132
+ light: {
133
+ 'color-background': '#faf6f0',
134
+ 'color-surface': '#ffffff',
135
+ 'color-surface-raised': '#fffdf5',
136
+ 'color-border': '#e5dccd',
137
+ 'color-text': '#2c2a25',
138
+ 'color-text-muted': '#6f675c',
139
+ 'color-accent': '#a83a10',
140
+ 'color-accent-contrast': '#ffffff',
141
+ 'color-info': '#2f5f7a',
142
+ 'color-success': '#42703a',
143
+ 'color-warning': '#8a5a12',
144
+ 'color-danger': '#9c2f21',
145
+ },
146
+ dark: {
147
+ 'color-background': '#1c1916',
148
+ 'color-surface': '#262220',
149
+ 'color-surface-raised': '#332d29',
150
+ 'color-border': '#4a423b',
151
+ 'color-text': '#f2eae0',
152
+ 'color-text-muted': '#b3a89a',
153
+ 'color-accent': '#e8865c',
154
+ 'color-accent-contrast': '#1c1916',
155
+ 'color-info': '#8dbdd8',
156
+ 'color-success': '#96c288',
157
+ 'color-warning': '#e0b273',
158
+ 'color-danger': '#ef9c90',
159
+ },
160
+ },
161
+ }),
162
+ 'terminal-mono': preset({
163
+ name: 'terminal-mono',
164
+ description: 'Near-black terminal with green and amber, monospace throughout.',
165
+ typing: { 'font-heading': SYSTEM_MONO, 'font-body': SYSTEM_MONO },
166
+ structure: {
167
+ 'radius-small': '2px',
168
+ 'radius-medium': '3px',
169
+ 'radius-large': '6px',
170
+ density: 'compact',
171
+ },
172
+ colors: {
173
+ light: {
174
+ 'color-background': '#f4f4ef',
175
+ 'color-surface': '#ffffff',
176
+ 'color-surface-raised': '#eaeae2',
177
+ 'color-border': '#cfcfc2',
178
+ 'color-text': '#16180f',
179
+ 'color-text-muted': '#565a45',
180
+ 'color-accent': '#1f6b3a',
181
+ 'color-accent-contrast': '#ffffff',
182
+ 'color-info': '#1f4e79',
183
+ 'color-success': '#1f6b3a',
184
+ 'color-warning': '#7a5200',
185
+ 'color-danger': '#952c22',
186
+ },
187
+ dark: {
188
+ 'color-background': '#05070c',
189
+ 'color-surface': '#0b1017',
190
+ 'color-surface-raised': '#131a23',
191
+ 'color-border': '#2a3440',
192
+ 'color-text': '#d3e4d3',
193
+ 'color-text-muted': '#84997f',
194
+ 'color-accent': '#5fd08a',
195
+ 'color-accent-contrast': '#05070c',
196
+ 'color-info': '#7fb6e8',
197
+ 'color-success': '#5fd08a',
198
+ 'color-warning': '#e8c15f',
199
+ 'color-danger': '#ef8b7f',
200
+ },
201
+ },
202
+ }),
203
+ 'swiss-clean': preset({
204
+ name: 'swiss-clean',
205
+ description: 'Neutral high-contrast grid: one red accent, no decoration.',
206
+ typing: { 'font-heading': SYSTEM_SANS, 'font-body': SYSTEM_SANS },
207
+ structure: {
208
+ 'radius-small': '0px',
209
+ 'radius-medium': '0px',
210
+ 'radius-large': '0px',
211
+ 'elevation-card': 'none',
212
+ 'elevation-popover': 'subtle',
213
+ 'font-scale': '1.2',
214
+ measure: '76ch',
215
+ },
216
+ colors: {
217
+ light: {
218
+ 'color-background': '#ffffff',
219
+ 'color-surface': '#ffffff',
220
+ 'color-surface-raised': '#f4f4f4',
221
+ 'color-border': '#d4d4d4',
222
+ 'color-text': '#111111',
223
+ 'color-text-muted': '#5a5a5a',
224
+ 'color-accent': '#c02418',
225
+ 'color-accent-contrast': '#ffffff',
226
+ 'color-info': '#1a4f8a',
227
+ 'color-success': '#1c6b3f',
228
+ 'color-warning': '#8a5a00',
229
+ 'color-danger': '#c02418',
230
+ },
231
+ dark: {
232
+ 'color-background': '#101010',
233
+ 'color-surface': '#181818',
234
+ 'color-surface-raised': '#232323',
235
+ 'color-border': '#3a3a3a',
236
+ 'color-text': '#f5f5f5',
237
+ 'color-text-muted': '#b0b0b0',
238
+ 'color-accent': '#ff6a5c',
239
+ 'color-accent-contrast': '#101010',
240
+ 'color-info': '#8ab6ea',
241
+ 'color-success': '#7fd0a1',
242
+ 'color-warning': '#e6bb63',
243
+ 'color-danger': '#ff6a5c',
244
+ },
245
+ },
246
+ }),
247
+ 'warm-signal': preset({
248
+ name: 'warm-signal',
249
+ description: 'Warm neutral surfaces signalling with amber and emerald, data-friendly.',
250
+ typing: { 'font-heading': SYSTEM_SANS, 'font-body': SYSTEM_SANS },
251
+ structure: { density: 'spacious', 'radius-medium': '12px', 'radius-large': '20px' },
252
+ colors: {
253
+ light: {
254
+ 'color-background': '#fbf7f1',
255
+ 'color-surface': '#ffffff',
256
+ 'color-surface-raised': '#f6efe3',
257
+ 'color-border': '#e6dbc8',
258
+ 'color-text': '#2a2620',
259
+ 'color-text-muted': '#6e6558',
260
+ 'color-accent': '#8a5a00',
261
+ 'color-accent-contrast': '#ffffff',
262
+ 'color-info': '#2a5f86',
263
+ 'color-success': '#2c6b3f',
264
+ 'color-warning': '#8a5a00',
265
+ 'color-danger': '#9a2f22',
266
+ },
267
+ dark: {
268
+ 'color-background': '#181410',
269
+ 'color-surface': '#221d17',
270
+ 'color-surface-raised': '#2e2820',
271
+ 'color-border': '#453b2f',
272
+ 'color-text': '#f3ece1',
273
+ 'color-text-muted': '#b5a894',
274
+ 'color-accent': '#e5b567',
275
+ 'color-accent-contrast': '#181410',
276
+ 'color-info': '#8ec0e2',
277
+ 'color-success': '#8fc79c',
278
+ 'color-warning': '#e5b567',
279
+ 'color-danger': '#eda091',
280
+ },
281
+ },
282
+ }),
283
+ };
284
+ /** Default preset used when a spec does not name one. */
285
+ export const DEFAULT_PRESET = 'editorial';
286
+ export function presetNames() {
287
+ return Object.keys(PRESETS).sort();
288
+ }
289
+ /** Built-in presets expressed as catalog entries. */
290
+ export function builtinPresetEntries() {
291
+ const entries = {};
292
+ for (const definition of Object.values(PRESETS)) {
293
+ entries[definition.name] = {
294
+ name: definition.name,
295
+ version: 1,
296
+ description: definition.description,
297
+ tokens: { ...definition.light },
298
+ dark: { ...definition.dark },
299
+ origin: 'built-in',
300
+ };
301
+ }
302
+ return entries;
303
+ }
304
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/theme/presets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Theme catalog: built-in presets plus presets authored as files.
3
+ *
4
+ * A preset file is data with a fixed shape. It can extend another preset and
5
+ * override declared tokens; it cannot introduce a token, a selector, or a
6
+ * declaration, so a shared team preset is exactly as constrained as a built-in
7
+ * one. Precedence is explicit: built-in < user < project < explicitly named
8
+ * files, which is what makes a project-level override predictable.
9
+ */
10
+ import { builtinPresetEntries, type PresetEntry } from './presets.js';
11
+ export declare const PRESET_NAME_PATTERN: RegExp;
12
+ export declare const THEME_DIRECTORIES: readonly [".ak-render/themes", ".config/ak-render/themes"];
13
+ export interface PresetSource {
14
+ name: string;
15
+ origin: PresetEntry['origin'];
16
+ file?: string;
17
+ }
18
+ export interface ThemeCatalog {
19
+ entries: Record<string, PresetEntry>;
20
+ sources: PresetSource[];
21
+ /** Problems found while discovering presets; surfaced, never silently skipped. */
22
+ problems: {
23
+ path: string;
24
+ message: string;
25
+ }[];
26
+ }
27
+ /** Built-in-only catalog. */
28
+ export declare function builtinThemeCatalog(): ThemeCatalog;
29
+ /**
30
+ * Validate a preset document.
31
+ *
32
+ * Unknown keys and unknown tokens are errors: a preset that silently ignores a
33
+ * misspelled token would produce a page with a silently wrong theme.
34
+ */
35
+ export declare function parsePresetDocument(value: unknown, options?: {
36
+ file?: string;
37
+ origin?: PresetEntry['origin'];
38
+ name?: string;
39
+ }): PresetEntry;
40
+ /** Load and validate one preset file. Throws a `RenderError` when it is invalid. */
41
+ export declare function loadPresetFile(file: string, origin?: PresetEntry['origin']): PresetEntry;
42
+ /** Directories searched for presets, in increasing precedence. */
43
+ export declare function themeSearchDirectories(options?: {
44
+ cwd?: string;
45
+ home?: string;
46
+ }): {
47
+ user: string[];
48
+ project: string[];
49
+ };
50
+ export interface ThemeCatalogOptions {
51
+ cwd?: string;
52
+ home?: string;
53
+ /** Explicit preset files; highest precedence. */
54
+ files?: string[];
55
+ /** Set false to use built-ins only. */
56
+ discovery?: boolean;
57
+ }
58
+ /**
59
+ * Build a catalog from built-ins, discovered project and user presets, and any
60
+ * explicitly named files. A malformed file becomes a recorded problem rather
61
+ * than a crash, so one bad team preset does not make unrelated pages
62
+ * uncompilable.
63
+ */
64
+ export declare function buildThemeCatalog(options?: ThemeCatalogOptions): ThemeCatalog;
65
+ /** Preset names in a catalog, sorted. */
66
+ export declare function catalogPresetNames(catalog: ThemeCatalog): string[];
67
+ export { builtinPresetEntries };
68
+ //# sourceMappingURL=theme-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-catalog.d.ts","sourceRoot":"","sources":["../../src/theme/theme-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,EAAE,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAGtE,eAAO,MAAM,mBAAmB,QAA8B,CAAC;AAC/D,eAAO,MAAM,iBAAiB,4DAA6D,CAAC;AAW5F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,kFAAkF;IAClF,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C;AAED,6BAA6B;AAC7B,wBAAgB,mBAAmB,IAAI,YAAY,CAOlD;AAaD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7E,WAAW,CA2Eb;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,WAAW,CAAC,QAAQ,CAAU,GAAG,WAAW,CAShG;AAED,kEAAkE;AAClE,wBAAgB,sBAAsB,CAAC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG;IACrF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAOA;AAUD,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAgCjF;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CAElE;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Theme catalog: built-in presets plus presets authored as files.
3
+ *
4
+ * A preset file is data with a fixed shape. It can extend another preset and
5
+ * override declared tokens; it cannot introduce a token, a selector, or a
6
+ * declaration, so a shared team preset is exactly as constrained as a built-in
7
+ * one. Precedence is explicit: built-in < user < project < explicitly named
8
+ * files, which is what makes a project-level override predictable.
9
+ */
10
+ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
11
+ import { homedir } from 'node:os';
12
+ import { basename, extname, join } from 'node:path';
13
+ import { RenderError } from '../errors.js';
14
+ import { isPlainObject } from '../json.js';
15
+ import { parseSpec } from '../spec/parse.js';
16
+ import { builtinPresetEntries } from './presets.js';
17
+ import { TOKEN_SPECS, validateTokenValue } from './tokens.js';
18
+ export const PRESET_NAME_PATTERN = /^[a-z0-9][a-z0-9-]{0,63}$/;
19
+ export const THEME_DIRECTORIES = ['.ak-render/themes', '.config/ak-render/themes'];
20
+ const PRESET_FILE_EXTENSIONS = ['.yaml', '.yml', '.json'];
21
+ const ALLOWED_PRESET_KEYS = [
22
+ 'name',
23
+ 'version',
24
+ 'description',
25
+ 'extends',
26
+ 'tokens',
27
+ 'dark',
28
+ ];
29
+ /** Built-in-only catalog. */
30
+ export function builtinThemeCatalog() {
31
+ const entries = builtinPresetEntries();
32
+ return {
33
+ entries,
34
+ sources: Object.values(entries).map((entry) => ({ name: entry.name, origin: entry.origin })),
35
+ problems: [],
36
+ };
37
+ }
38
+ function presetNameFromFile(file) {
39
+ return basename(file, extname(file));
40
+ }
41
+ function fail(message, path, details) {
42
+ throw new RenderError('SPEC_VALIDATION_ERROR', message, {
43
+ path,
44
+ ...(details === undefined ? {} : { details }),
45
+ });
46
+ }
47
+ /**
48
+ * Validate a preset document.
49
+ *
50
+ * Unknown keys and unknown tokens are errors: a preset that silently ignores a
51
+ * misspelled token would produce a page with a silently wrong theme.
52
+ */
53
+ export function parsePresetDocument(value, options = {}) {
54
+ const origin = options.origin ?? 'file';
55
+ const path = options.file ?? '<theme>';
56
+ if (!isPlainObject(value)) {
57
+ fail('a preset must be an object', path);
58
+ }
59
+ for (const key of Object.keys(value)) {
60
+ if (!ALLOWED_PRESET_KEYS.includes(key)) {
61
+ fail(`unknown preset field "${key}"`, `${path}#${key}`, {
62
+ allowed: [...ALLOWED_PRESET_KEYS],
63
+ });
64
+ }
65
+ }
66
+ const declaredName = value.name;
67
+ const name = typeof declaredName === 'string' ? declaredName : (options.name ?? presetNameFromFile(path));
68
+ if (!PRESET_NAME_PATTERN.test(name)) {
69
+ fail(`"${name}" is not a valid preset name`, `${path}#name`);
70
+ }
71
+ const extendsValue = value.extends;
72
+ if (extendsValue !== undefined) {
73
+ if (typeof extendsValue !== 'string' || !PRESET_NAME_PATTERN.test(extendsValue)) {
74
+ fail(`"${String(extendsValue)}" is not a valid preset name to extend`, `${path}#extends`);
75
+ }
76
+ }
77
+ const version = value.version;
78
+ if (version !== undefined &&
79
+ (typeof version !== 'number' || !Number.isInteger(version) || version < 1)) {
80
+ fail('preset version must be a positive integer', `${path}#version`);
81
+ }
82
+ const description = value.description;
83
+ if (description !== undefined && typeof description !== 'string') {
84
+ fail('preset description must be a string', `${path}#description`);
85
+ }
86
+ const readTokens = (key) => {
87
+ const raw = value[key];
88
+ if (raw === undefined)
89
+ return {};
90
+ if (!isPlainObject(raw))
91
+ fail(`${key} must be an object of token values`, `${path}#${key}`);
92
+ const tokens = {};
93
+ for (const [token, tokenValue] of Object.entries(raw)) {
94
+ if (TOKEN_SPECS[token] === undefined) {
95
+ fail(`unknown theme token "${token}"`, `${path}#${key}.${token}`, {
96
+ known: Object.keys(TOKEN_SPECS).sort(),
97
+ });
98
+ }
99
+ const problem = validateTokenValue(token, tokenValue);
100
+ if (problem !== undefined) {
101
+ throw new RenderError('POLICY_VIOLATION', `theme token "${token}": ${problem.message}`, {
102
+ path: `${path}#${key}.${token}`,
103
+ details: { token },
104
+ });
105
+ }
106
+ tokens[token] = String(tokenValue);
107
+ }
108
+ return tokens;
109
+ };
110
+ const entry = {
111
+ name,
112
+ version: typeof version === 'number' ? version : 1,
113
+ description: typeof description === 'string' ? description : 'Custom theme preset.',
114
+ tokens: readTokens('tokens'),
115
+ dark: readTokens('dark'),
116
+ origin,
117
+ };
118
+ if (options.file !== undefined)
119
+ entry.file = options.file;
120
+ if (typeof extendsValue === 'string')
121
+ entry.extends = extendsValue;
122
+ return entry;
123
+ }
124
+ /** Load and validate one preset file. Throws a `RenderError` when it is invalid. */
125
+ export function loadPresetFile(file, origin = 'file') {
126
+ if (!existsSync(file)) {
127
+ throw new RenderError('SPEC_VALIDATION_ERROR', `preset file not found: ${file}`, {
128
+ path: file,
129
+ });
130
+ }
131
+ const text = readFileSync(file, 'utf8');
132
+ const document = parseSpec(text, { source: file });
133
+ return parsePresetDocument(document, { file, origin, name: presetNameFromFile(file) });
134
+ }
135
+ /** Directories searched for presets, in increasing precedence. */
136
+ export function themeSearchDirectories(options = {}) {
137
+ const home = options.home ?? homedir();
138
+ const cwd = options.cwd ?? process.cwd();
139
+ return {
140
+ user: THEME_DIRECTORIES.map((directory) => join(home, directory)),
141
+ project: THEME_DIRECTORIES.map((directory) => join(cwd, directory)),
142
+ };
143
+ }
144
+ function discoverIn(directory) {
145
+ if (!existsSync(directory) || !statSync(directory).isDirectory())
146
+ return [];
147
+ return readdirSync(directory)
148
+ .filter((name) => PRESET_FILE_EXTENSIONS.includes(extname(name)))
149
+ .sort()
150
+ .map((name) => join(directory, name));
151
+ }
152
+ /**
153
+ * Build a catalog from built-ins, discovered project and user presets, and any
154
+ * explicitly named files. A malformed file becomes a recorded problem rather
155
+ * than a crash, so one bad team preset does not make unrelated pages
156
+ * uncompilable.
157
+ */
158
+ export function buildThemeCatalog(options = {}) {
159
+ const catalog = builtinThemeCatalog();
160
+ if (options.discovery === false)
161
+ return catalog;
162
+ const directories = themeSearchDirectories(options);
163
+ const sources = [];
164
+ for (const directory of directories.user) {
165
+ for (const file of discoverIn(directory))
166
+ sources.push({ file, origin: 'user' });
167
+ }
168
+ for (const directory of directories.project) {
169
+ for (const file of discoverIn(directory))
170
+ sources.push({ file, origin: 'project' });
171
+ }
172
+ for (const file of options.files ?? [])
173
+ sources.push({ file, origin: 'file' });
174
+ for (const source of sources) {
175
+ try {
176
+ const entry = loadPresetFile(source.file, source.origin);
177
+ catalog.entries[entry.name] = entry;
178
+ catalog.sources.push({
179
+ name: entry.name,
180
+ origin: source.origin,
181
+ file: source.file,
182
+ });
183
+ }
184
+ catch (error) {
185
+ catalog.problems.push({
186
+ path: source.file,
187
+ message: error instanceof Error ? error.message : String(error),
188
+ });
189
+ }
190
+ }
191
+ return catalog;
192
+ }
193
+ /** Preset names in a catalog, sorted. */
194
+ export function catalogPresetNames(catalog) {
195
+ return Object.keys(catalog.entries).sort();
196
+ }
197
+ export { builtinPresetEntries };
198
+ //# sourceMappingURL=theme-catalog.js.map