@velumo/renderer-dom 0.1.0-beta.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 (58) hide show
  1. package/dist/background-renderer.d.ts +16 -0
  2. package/dist/background-renderer.d.ts.map +1 -0
  3. package/dist/background-renderer.js +41 -0
  4. package/dist/background-renderer.js.map +1 -0
  5. package/dist/camera-adapter.d.ts +16 -0
  6. package/dist/camera-adapter.d.ts.map +1 -0
  7. package/dist/camera-adapter.js +13 -0
  8. package/dist/camera-adapter.js.map +1 -0
  9. package/dist/default-theme.d.ts +5 -0
  10. package/dist/default-theme.d.ts.map +1 -0
  11. package/dist/default-theme.js +579 -0
  12. package/dist/default-theme.js.map +1 -0
  13. package/dist/dom-renderer.d.ts +62 -0
  14. package/dist/dom-renderer.d.ts.map +1 -0
  15. package/dist/dom-renderer.js +306 -0
  16. package/dist/dom-renderer.js.map +1 -0
  17. package/dist/html-sanitize.d.ts +18 -0
  18. package/dist/html-sanitize.d.ts.map +1 -0
  19. package/dist/html-sanitize.js +379 -0
  20. package/dist/html-sanitize.js.map +1 -0
  21. package/dist/index.d.ts +12 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +10 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/layout-renderer.d.ts +16 -0
  26. package/dist/layout-renderer.d.ts.map +1 -0
  27. package/dist/layout-renderer.js +450 -0
  28. package/dist/layout-renderer.js.map +1 -0
  29. package/dist/slide-thumbnail.d.ts +63 -0
  30. package/dist/slide-thumbnail.d.ts.map +1 -0
  31. package/dist/slide-thumbnail.js +93 -0
  32. package/dist/slide-thumbnail.js.map +1 -0
  33. package/dist/spatial-renderer.d.ts +18 -0
  34. package/dist/spatial-renderer.d.ts.map +1 -0
  35. package/dist/spatial-renderer.js +36 -0
  36. package/dist/spatial-renderer.js.map +1 -0
  37. package/dist/theme-fonts.d.ts +8 -0
  38. package/dist/theme-fonts.d.ts.map +1 -0
  39. package/dist/theme-fonts.js +68 -0
  40. package/dist/theme-fonts.js.map +1 -0
  41. package/dist/theme-tokens.d.ts +3 -0
  42. package/dist/theme-tokens.d.ts.map +1 -0
  43. package/dist/theme-tokens.js +43 -0
  44. package/dist/theme-tokens.js.map +1 -0
  45. package/dist/tsconfig.tsbuildinfo +1 -0
  46. package/package.json +20 -0
  47. package/src/background-renderer.ts +77 -0
  48. package/src/camera-adapter.ts +21 -0
  49. package/src/default-theme.ts +582 -0
  50. package/src/dom-renderer.ts +486 -0
  51. package/src/html-sanitize.ts +446 -0
  52. package/src/index.ts +25 -0
  53. package/src/layout-renderer.ts +721 -0
  54. package/src/slide-thumbnail.ts +146 -0
  55. package/src/spatial-renderer.ts +62 -0
  56. package/src/theme-fonts.ts +75 -0
  57. package/src/theme-tokens.ts +66 -0
  58. package/tsconfig.json +10 -0
@@ -0,0 +1,579 @@
1
+ export const defaultThemeId = "velumo-default";
2
+ export const defaultTheme = {
3
+ id: defaultThemeId,
4
+ tokens: {
5
+ colors: {
6
+ background: "#0b0e14",
7
+ foreground: "#e8edf4",
8
+ muted: "#9aa6b8",
9
+ accent: "#6ea8fe",
10
+ danger: "#ff6b6b",
11
+ magenta: "#ff6ba3",
12
+ cyan: "#5bd6f0",
13
+ purple: "#a98bff",
14
+ green: "#5fd398",
15
+ },
16
+ typography: {
17
+ heading: {
18
+ fontFamily: "ui-sans-serif, system-ui, sans-serif",
19
+ fontSize: "clamp(2.25rem, 5cqw, 4.5rem)",
20
+ lineHeight: 1.05,
21
+ fontWeight: 760,
22
+ letterSpacing: "-0.045em",
23
+ },
24
+ body: {
25
+ fontFamily: "ui-sans-serif, system-ui, sans-serif",
26
+ fontSize: "clamp(1.05rem, 1.7cqw, 1.35rem)",
27
+ lineHeight: 1.6,
28
+ fontWeight: 450,
29
+ },
30
+ caption: {
31
+ fontFamily: "ui-sans-serif, system-ui, sans-serif",
32
+ fontSize: "0.92rem",
33
+ lineHeight: 1.45,
34
+ fontWeight: 520,
35
+ letterSpacing: "0.02em",
36
+ },
37
+ },
38
+ spacing: {
39
+ xs: "0.375rem",
40
+ sm: "0.75rem",
41
+ md: "1.25rem",
42
+ lg: "2rem",
43
+ xl: "3rem",
44
+ },
45
+ radii: {
46
+ card: "1.25rem",
47
+ pill: "999px",
48
+ },
49
+ shadows: {
50
+ card: "0 24px 80px rgba(0, 0, 0, 0.45)",
51
+ },
52
+ motion: {
53
+ quick: {
54
+ duration: "140ms",
55
+ easing: "ease-out",
56
+ },
57
+ standard: {
58
+ duration: "260ms",
59
+ easing: "cubic-bezier(0.2, 0, 0, 1)",
60
+ },
61
+ },
62
+ surfaces: {
63
+ default: "#11151c",
64
+ muted: "#1a1f29",
65
+ card: "rgba(255, 255, 255, 0.04)",
66
+ accent: "rgba(110, 168, 254, 0.12)",
67
+ inverse: "#f8fafc",
68
+ danger: "rgba(255, 107, 107, 0.14)",
69
+ },
70
+ text: {
71
+ default: "#e8edf4",
72
+ muted: "#9aa6b8",
73
+ accent: "#9ec5ff",
74
+ inverse: "#0b0e14",
75
+ danger: "#ff8585",
76
+ },
77
+ },
78
+ };
79
+ export const defaultThemeCss = `
80
+ [data-velumo-renderer="dom"] {
81
+ box-sizing: border-box;
82
+ position: relative;
83
+ overflow: hidden;
84
+ scroll-padding: var(--velumo-spacing-xs, 0.375rem);
85
+ background: var(--velumo-color-background, #0b0e14);
86
+ color: var(--velumo-text-default, #e8edf4);
87
+ font-family: var(--velumo-typography-body-font-family, ui-sans-serif, system-ui, sans-serif);
88
+ font-size: var(--velumo-typography-body-font-size, 1.125rem);
89
+ line-height: var(--velumo-typography-body-line-height, 1.6);
90
+ /* Size containment makes the host's sizing of this root load-bearing: a host
91
+ MUST give the Velumo renderer root a definite size, or it collapses. All
92
+ shipped shells (CLI default, example, presenter preview, SlideThumbnail
93
+ surface) already do.*/
94
+ container-type: size;
95
+ container-name: velumo-slide;
96
+ --velumo-tone-default: var(--velumo-text-default, #e8edf4);
97
+ --velumo-tone-muted: var(--velumo-text-muted, #9aa6b8);
98
+ --velumo-tone-accent: var(--velumo-text-accent, #9ec5ff);
99
+ --velumo-tone-danger: var(--velumo-text-danger, #ff8585);
100
+ --velumo-tone-magenta: var(--velumo-color-magenta, #ff6ba3);
101
+ --velumo-tone-cyan: var(--velumo-color-cyan, #5bd6f0);
102
+ --velumo-tone-purple: var(--velumo-color-purple, #a98bff);
103
+ --velumo-tone-green: var(--velumo-color-green, #5fd398);
104
+ }
105
+
106
+ [data-velumo-renderer="dom"] *,
107
+ [data-velumo-renderer="dom"] *::before,
108
+ [data-velumo-renderer="dom"] *::after {
109
+ box-sizing: border-box;
110
+ }
111
+
112
+ [data-velumo-renderer="dom"] [data-velumo-slide-id] {
113
+ box-sizing: border-box;
114
+ position: relative;
115
+ width: 100%;
116
+ height: 100%;
117
+ margin: 0;
118
+ display: flex;
119
+ flex-direction: column;
120
+ padding: var(--velumo-margin-frame, clamp(2.5rem, 4.5cqh, 4rem)) var(--velumo-margin-frame-x, clamp(4rem, 8cqw, 8.5rem));
121
+ background: transparent;
122
+ overflow: hidden;
123
+ }
124
+
125
+ [data-velumo-renderer="dom"] [data-velumo-watermark] {
126
+ position: absolute;
127
+ top: var(--velumo-margin-frame, clamp(2.5rem, 4.5cqh, 4rem));
128
+ right: var(--velumo-margin-frame-x, clamp(4rem, 8cqw, 8.5rem));
129
+ z-index: 5;
130
+ pointer-events: none;
131
+ font-family: var(--velumo-font-mono, ui-monospace, "JetBrains Mono", monospace);
132
+ font-size: 0.72rem;
133
+ letter-spacing: 0.24em;
134
+ text-transform: uppercase;
135
+ color: color-mix(in srgb, var(--velumo-text-muted, #9aa6b8) 62%, transparent);
136
+ }
137
+
138
+ [data-velumo-renderer="dom"] [data-velumo-layout-root] {
139
+ display: flex;
140
+ flex-direction: column;
141
+ flex: 1;
142
+ min-height: 0;
143
+ }
144
+
145
+ [data-velumo-renderer="dom"] [data-velumo-layout="stack"],
146
+ [data-velumo-renderer="dom"] [data-velumo-layout="hero"],
147
+ [data-velumo-renderer="dom"] [data-velumo-layout="frame"] {
148
+ display: flex;
149
+ flex-direction: column;
150
+ gap: var(--velumo-spacing-md, 1.25rem);
151
+ flex: 1;
152
+ min-height: 0;
153
+ }
154
+ [data-velumo-renderer="dom"] [data-velumo-layout="stack"][data-velumo-stack-direction="horizontal"] {
155
+ flex-direction: row;
156
+ }
157
+
158
+ [data-velumo-renderer="dom"] [data-velumo-layout="hero"] {
159
+ justify-content: center;
160
+ }
161
+
162
+ [data-velumo-renderer="dom"] [data-velumo-layout="frame"] {
163
+ padding: var(--velumo-spacing-lg, 2rem);
164
+ border: 1px solid color-mix(in srgb, var(--velumo-color-muted, #9aa6b8) 18%, transparent);
165
+ border-radius: var(--velumo-radius-card, 1.25rem);
166
+ background: linear-gradient(180deg, color-mix(in srgb, var(--velumo-text-default, #e8edf4) 8%, transparent), color-mix(in srgb, var(--velumo-text-default, #e8edf4) 3%, transparent)), var(--velumo-surface-card, rgba(255, 255, 255, 0.04));
167
+ box-shadow: var(--velumo-shadow-card, 0 24px 80px rgba(0, 0, 0, 0.45));
168
+ }
169
+ [data-velumo-renderer="dom"] [data-velumo-layout="frame"][data-velumo-frame-tone="muted"] { border-color: color-mix(in srgb, var(--velumo-tone-muted) 40%, transparent); }
170
+ [data-velumo-renderer="dom"] [data-velumo-layout="frame"][data-velumo-frame-tone="accent"] { border-color: color-mix(in srgb, var(--velumo-tone-accent) 40%, transparent); }
171
+ [data-velumo-renderer="dom"] [data-velumo-layout="frame"][data-velumo-frame-tone="danger"] { border-color: color-mix(in srgb, var(--velumo-tone-danger) 40%, transparent); }
172
+ [data-velumo-renderer="dom"] [data-velumo-layout="frame"][data-velumo-frame-tone="magenta"] { border-color: color-mix(in srgb, var(--velumo-tone-magenta) 40%, transparent); }
173
+ [data-velumo-renderer="dom"] [data-velumo-layout="frame"][data-velumo-frame-tone="cyan"] { border-color: color-mix(in srgb, var(--velumo-tone-cyan) 40%, transparent); }
174
+ [data-velumo-renderer="dom"] [data-velumo-layout="frame"][data-velumo-frame-tone="purple"] { border-color: color-mix(in srgb, var(--velumo-tone-purple) 40%, transparent); }
175
+ [data-velumo-renderer="dom"] [data-velumo-layout="frame"][data-velumo-frame-tone="green"] { border-color: color-mix(in srgb, var(--velumo-tone-green) 40%, transparent); }
176
+
177
+ [data-velumo-renderer="dom"] [data-velumo-layout="stack"][data-velumo-stack-justify="center"] { justify-content: center; }
178
+ [data-velumo-renderer="dom"] [data-velumo-layout="stack"][data-velumo-stack-justify="between"] { justify-content: space-between; }
179
+ [data-velumo-renderer="dom"] [data-velumo-layout="stack"][data-velumo-stack-justify="end"] { justify-content: flex-end; }
180
+ [data-velumo-renderer="dom"] [data-velumo-stack-align="start"] { align-items: flex-start; }
181
+ [data-velumo-renderer="dom"] [data-velumo-stack-align="center"] { align-items: center; }
182
+ [data-velumo-renderer="dom"] [data-velumo-stack-align="end"] { align-items: flex-end; }
183
+ [data-velumo-renderer="dom"] [data-velumo-stack-align="stretch"] { align-items: stretch; }
184
+ [data-velumo-renderer="dom"] [data-velumo-layout="canvas"] { flex: 1; min-height: 0; }
185
+ [data-velumo-renderer="dom"] [data-velumo-slide-id]::after,
186
+ [data-velumo-renderer="dom"] [data-velumo-spatial="viewport"]::after {
187
+ content: "";
188
+ position: absolute;
189
+ inset: 0;
190
+ pointer-events: none;
191
+ z-index: 2;
192
+ background: radial-gradient(120% 120% at 50% 42%, transparent 55%, rgba(0, 0, 0, var(--velumo-vignette-strength, 0.5)) 100%);
193
+ mix-blend-mode: multiply;
194
+ }
195
+
196
+ [data-velumo-renderer="dom"] [data-velumo-layout="grid"] {
197
+ display: grid;
198
+ grid-template-columns: repeat(var(--velumo-layout-columns, 2), minmax(0, 1fr));
199
+ gap: var(--velumo-spacing-md, 1.25rem);
200
+ }
201
+
202
+ [data-velumo-renderer="dom"] [data-velumo-layout="split"] {
203
+ display: grid;
204
+ grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
205
+ gap: var(--velumo-spacing-lg, 2rem);
206
+ align-items: start;
207
+ }
208
+
209
+ [data-velumo-renderer="dom"] [data-velumo-element="heading"] {
210
+ margin: 0;
211
+ max-width: 20ch;
212
+ text-wrap: balance;
213
+ color: var(--velumo-text-default, #e8edf4);
214
+ font-family: var(--velumo-typography-heading-font-family, ui-sans-serif, system-ui, sans-serif);
215
+ font-size: var(--velumo-typography-heading-font-size, clamp(2.25rem, 5cqw, 4.5rem));
216
+ font-weight: var(--velumo-typography-heading-font-weight, 760);
217
+ letter-spacing: var(--velumo-typography-heading-letter-spacing, -0.045em);
218
+ line-height: var(--velumo-typography-heading-line-height, 1.05);
219
+ }
220
+ [data-velumo-renderer="dom"] [data-velumo-element="heading"][data-velumo-heading-size="display"] {
221
+ font-size: calc(var(--velumo-typography-heading-font-size, clamp(2.25rem, 5cqw, 4.5rem))*1.55);
222
+ line-height: 0.98;
223
+ }
224
+ [data-velumo-renderer="dom"] [data-velumo-element="heading"][data-velumo-heading-size="hero"] {
225
+ font-size: calc(var(--velumo-typography-heading-font-size, clamp(2.25rem, 5cqw, 4.5rem))*2.5);
226
+ line-height: 0.9;
227
+ }
228
+
229
+ [data-velumo-renderer="dom"] [data-velumo-element="text"] {
230
+ margin: 0;
231
+ max-width: 68ch;
232
+ color: var(--velumo-text-default, #e8edf4);
233
+ font-size: var(--velumo-typography-body-font-size, 1.125rem);
234
+ line-height: var(--velumo-typography-body-line-height, 1.6);
235
+ }
236
+
237
+ [data-velumo-renderer="dom"] [data-velumo-text-variant="lead"] {
238
+ color: var(--velumo-text-muted, #9aa6b8);
239
+ font-size: 1.3275rem;
240
+ }
241
+
242
+ [data-velumo-renderer="dom"] [data-velumo-text-variant="caption"] {
243
+ color: var(--velumo-text-muted, #9aa6b8);
244
+ font-size: var(--velumo-typography-caption-font-size, 0.92rem);
245
+ letter-spacing: var(--velumo-typography-caption-letter-spacing, 0.02em);
246
+ line-height: var(--velumo-typography-caption-line-height, 1.45);
247
+ }
248
+
249
+ [data-velumo-renderer="dom"] [data-velumo-element="media"] {
250
+ display: block;
251
+ max-width: 100%;
252
+ min-height: 8rem;
253
+ border-radius: var(--velumo-radius-card, 1.25rem);
254
+ background: var(--velumo-surface-muted, #1a1f29);
255
+ object-fit: contain;
256
+ }
257
+
258
+ [data-velumo-renderer="dom"] [data-velumo-media-fit="cover"] {
259
+ object-fit: cover;
260
+ }
261
+
262
+ [data-velumo-renderer="dom"] [data-velumo-media-fit="fill"] {
263
+ object-fit: fill;
264
+ }
265
+
266
+ [data-velumo-renderer="dom"] [data-velumo-element="callout"] {
267
+ display: grid;
268
+ gap: var(--velumo-spacing-sm, 0.75rem);
269
+ padding: var(--velumo-spacing-md, 1.25rem) var(--velumo-spacing-lg, 2rem);
270
+ border: 1px solid color-mix(in srgb, var(--velumo-text-default, #e8edf4) 12%, transparent);
271
+ border-left: 0.3rem solid var(--velumo-color-accent, #6ea8fe);
272
+ border-radius: var(--velumo-radius-card, 1.25rem);
273
+ background: linear-gradient(180deg, color-mix(in srgb, var(--velumo-text-default, #e8edf4) 9%, transparent), color-mix(in srgb, var(--velumo-text-default, #e8edf4) 4%, transparent));
274
+ box-shadow: var(--velumo-shadow-card, 0 24px 80px rgba(0, 0, 0, 0.45));
275
+ color: var(--velumo-text-default, #e8edf4);
276
+ }
277
+
278
+ [data-velumo-renderer="dom"] [data-velumo-callout-tone="info"] {
279
+ border-left-color: var(--velumo-color-cyan, #5bd6f0);
280
+ }
281
+
282
+ [data-velumo-renderer="dom"] [data-velumo-callout-tone="warning"] {
283
+ border-left-color: var(--velumo-color-magenta, #ff6ba3);
284
+ }
285
+
286
+ [data-velumo-renderer="dom"] [data-velumo-callout-tone="success"] {
287
+ border-left-color: var(--velumo-color-green, #5fd398);
288
+ }
289
+
290
+ [data-velumo-renderer="dom"] [data-velumo-callout-tone="quote"] {
291
+ border-left-color: var(--velumo-color-muted, #9aa6b8);
292
+ }
293
+
294
+ [data-velumo-renderer="dom"] [data-velumo-callout-tone="danger"] {
295
+ border-left-color: var(--velumo-color-danger, #ff6b6b);
296
+ }
297
+
298
+ [data-velumo-renderer="dom"] [data-velumo-layer-type="markdown"],
299
+ [data-velumo-renderer="dom"] [data-velumo-layer-type="html"] {
300
+ margin-top: var(--velumo-spacing-lg, 2rem);
301
+ color: var(--velumo-text-default, #e8edf4);
302
+ font-size: var(--velumo-typography-body-font-size, 1.125rem);
303
+ line-height: var(--velumo-typography-body-line-height, 1.6);
304
+ }
305
+
306
+ [data-velumo-renderer="dom"] [data-velumo-fragment="hidden"] {
307
+ display: none;
308
+ }
309
+
310
+ @media (prefers-reduced-motion: no-preference) {
311
+ @keyframes velumo-rise {
312
+ from { opacity: 0; transform: translateY(2rem); }
313
+ to { opacity: 1; transform: none; }
314
+ }
315
+ @keyframes velumo-fade {
316
+ from { opacity: 0; }
317
+ to { opacity: 1; }
318
+ }
319
+ @keyframes velumo-zoom {
320
+ from { opacity: 0; transform: scale(0.86); }
321
+ to { opacity: 1; transform: none; }
322
+ }
323
+ @keyframes velumo-draw {
324
+ from { opacity: 0; transform: scaleX(0); }
325
+ to { opacity: 1; transform: scaleX(1); }
326
+ }
327
+ @keyframes velumo-in-left {
328
+ from { opacity: 0; transform: translateX(-3rem); }
329
+ to { opacity: 1; transform: none; }
330
+ }
331
+ @keyframes velumo-in-right {
332
+ from { opacity: 0; transform: translateX(3rem); }
333
+ to { opacity: 1; transform: none; }
334
+ }
335
+
336
+ [data-velumo-renderer="dom"] [data-velumo-animation] {
337
+ animation-duration: var(--velumo-animation-duration, 0.8s);
338
+ animation-delay: var(--velumo-animation-delay, 0s);
339
+ animation-timing-function: var(--velumo-animation-easing, cubic-bezier(0.4, 0, 0.2, 1));
340
+ animation-fill-mode: both;
341
+ }
342
+ [data-velumo-renderer="dom"] [data-velumo-animation="rise"] { animation-name: velumo-rise; }
343
+ [data-velumo-renderer="dom"] [data-velumo-animation="fade"] { animation-name: velumo-fade; }
344
+ [data-velumo-renderer="dom"] [data-velumo-animation="zoom"] { animation-name: velumo-zoom; }
345
+ [data-velumo-renderer="dom"] [data-velumo-animation="draw"] { animation-name: velumo-draw; transform-origin: left center; }
346
+ [data-velumo-renderer="dom"] [data-velumo-animation="in-left"] { animation-name: velumo-in-left; }
347
+ [data-velumo-renderer="dom"] [data-velumo-animation="in-right"] { animation-name: velumo-in-right; }
348
+
349
+ @keyframes velumo-glow {
350
+ from { text-shadow: 0 0 28px rgba(255, 209, 102, 0.4), 0 0 60px rgba(255, 61, 127, 0.28); }
351
+ to { text-shadow: 0 0 40px rgba(255, 209, 102, 0.6), 0 0 96px rgba(255, 61, 127, 0.42); }
352
+ }
353
+ @keyframes velumo-blink {
354
+ 0%, 100% { opacity: 1; }
355
+ 50% { opacity: 0.35; }
356
+ }
357
+ @keyframes velumo-pulse {
358
+ 0%, 100% { opacity: 0.55; transform: none; }
359
+ 50% { opacity: 1; transform: scale(1.03); }
360
+ }
361
+ @keyframes velumo-sweep {
362
+ from { transform: translateX(-46%); }
363
+ to { transform: translateX(46%); }
364
+ }
365
+ [data-velumo-renderer="dom"] [data-velumo-animation="glow"] { animation: velumo-glow var(--velumo-animation-duration, 2.6s) var(--velumo-animation-easing, ease-in-out) var(--velumo-animation-delay, 0s) infinite alternate; }
366
+ [data-velumo-renderer="dom"] [data-velumo-animation="blink"] { animation: velumo-blink max(1s, var(--velumo-animation-duration, 1.4s)) var(--velumo-animation-easing, ease-in-out) var(--velumo-animation-delay, 0s) infinite; }
367
+ [data-velumo-renderer="dom"] [data-velumo-animation="pulse"] { animation: velumo-pulse var(--velumo-animation-duration, 2.4s) var(--velumo-animation-easing, ease-in-out) var(--velumo-animation-delay, 0s) infinite; }
368
+ [data-velumo-renderer="dom"] [data-velumo-animation="sweep"] { animation: velumo-sweep var(--velumo-animation-duration, 3.2s) var(--velumo-animation-easing, cubic-bezier(0.4, 0, 0.2, 1)) var(--velumo-animation-delay, 0s) infinite alternate; }
369
+ }
370
+
371
+ [data-velumo-thumbnail] [data-velumo-animation] { animation: none !important; }
372
+
373
+ [data-velumo-renderer="dom"] [data-velumo-text-transform="uppercase"] { text-transform: uppercase; }
374
+ [data-velumo-renderer="dom"] [data-velumo-text-transform="lowercase"] { text-transform: lowercase; }
375
+ [data-velumo-renderer="dom"] [data-velumo-text-transform="capitalize"] { text-transform: capitalize; }
376
+
377
+ [data-velumo-renderer="dom"] [data-velumo-text-decoration="underline"] { text-decoration: underline; }
378
+ [data-velumo-renderer="dom"] [data-velumo-text-decoration="line-through"] { text-decoration: line-through; }
379
+
380
+ [data-velumo-renderer="dom"] [data-velumo-text-glow] {
381
+ text-shadow: 0 0 0.4em currentColor, 0 0 1.2em currentColor;
382
+ }
383
+
384
+ [data-velumo-renderer="dom"] [data-velumo-text-tone="muted"] { color: var(--velumo-text-muted, #9aa6b8); }
385
+ [data-velumo-renderer="dom"] [data-velumo-text-tone="accent"] { color: var(--velumo-text-accent, #9ec5ff); }
386
+ [data-velumo-renderer="dom"] [data-velumo-text-tone="danger"] { color: var(--velumo-text-danger, #ff8585); }
387
+ [data-velumo-renderer="dom"] [data-velumo-text-tone="magenta"] { color: var(--velumo-color-magenta, #ff6ba3); }
388
+ [data-velumo-renderer="dom"] [data-velumo-text-tone="cyan"] { color: var(--velumo-color-cyan, #5bd6f0); }
389
+ [data-velumo-renderer="dom"] [data-velumo-text-tone="purple"] { color: var(--velumo-color-purple, #a98bff); }
390
+ [data-velumo-renderer="dom"] [data-velumo-text-tone="green"] { color: var(--velumo-color-green, #5fd398); }
391
+
392
+ [data-velumo-renderer="dom"] [data-velumo-element="badge"] {
393
+ display: inline-flex;
394
+ align-items: center;
395
+ gap: 0.5em;
396
+ padding: 0.35em 0.9em;
397
+ border-radius: 999px;
398
+ border: 1px solid color-mix(in srgb, currentColor 45%, transparent);
399
+ color: var(--velumo-text-default, #e8edf4);
400
+ font-size: 0.9em;
401
+ line-height: 1.2;
402
+ vertical-align: middle;
403
+ white-space: nowrap;
404
+ }
405
+ [data-velumo-renderer="dom"] [data-velumo-badge-mono] {
406
+ font-family: var(--velumo-font-mono, ui-monospace, "JetBrains Mono", monospace);
407
+ letter-spacing: 0.02em;
408
+ }
409
+ [data-velumo-renderer="dom"] [data-velumo-badge-variant="soft"] {
410
+ background: color-mix(in srgb, currentColor 12%, transparent);
411
+ }
412
+ [data-velumo-renderer="dom"] [data-velumo-badge-variant="solid"] {
413
+ background: color-mix(in srgb, currentColor 22%, transparent);
414
+ border-color: color-mix(in srgb, currentColor 60%, transparent);
415
+ }
416
+ [data-velumo-renderer="dom"] [data-velumo-badge-tone="muted"] { color: var(--velumo-text-muted, #9aa6b8); }
417
+ [data-velumo-renderer="dom"] [data-velumo-badge-tone="accent"] { color: var(--velumo-text-accent, #9ec5ff); }
418
+ [data-velumo-renderer="dom"] [data-velumo-badge-tone="danger"] { color: var(--velumo-text-danger, #ff8585); }
419
+ [data-velumo-renderer="dom"] [data-velumo-badge-tone="magenta"] { color: var(--velumo-color-magenta, #ff6ba3); }
420
+ [data-velumo-renderer="dom"] [data-velumo-badge-tone="cyan"] { color: var(--velumo-color-cyan, #5bd6f0); }
421
+ [data-velumo-renderer="dom"] [data-velumo-badge-tone="purple"] { color: var(--velumo-color-purple, #a98bff); }
422
+ [data-velumo-renderer="dom"] [data-velumo-badge-tone="green"] { color: var(--velumo-color-green, #5fd398); }
423
+ [data-velumo-renderer="dom"] [data-velumo-badge-dot] {
424
+ width: 0.6em;
425
+ height: 0.6em;
426
+ border-radius: 999px;
427
+ flex: none;
428
+ background: currentColor;
429
+ box-shadow: 0 0 0.6em currentColor;
430
+ }
431
+ [data-velumo-renderer="dom"] [data-velumo-badge-dot="muted"] { color: var(--velumo-text-muted, #9aa6b8); }
432
+ [data-velumo-renderer="dom"] [data-velumo-badge-dot="accent"] { color: var(--velumo-text-accent, #9ec5ff); }
433
+ [data-velumo-renderer="dom"] [data-velumo-badge-dot="danger"] { color: var(--velumo-text-danger, #ff8585); }
434
+ [data-velumo-renderer="dom"] [data-velumo-badge-dot="magenta"] { color: var(--velumo-color-magenta, #ff6ba3); }
435
+ [data-velumo-renderer="dom"] [data-velumo-badge-dot="cyan"] { color: var(--velumo-color-cyan, #5bd6f0); }
436
+ [data-velumo-renderer="dom"] [data-velumo-badge-dot="purple"] { color: var(--velumo-color-purple, #a98bff); }
437
+ [data-velumo-renderer="dom"] [data-velumo-badge-dot="green"] { color: var(--velumo-color-green, #5fd398); }
438
+
439
+ [data-velumo-renderer="dom"] [data-velumo-element="rule"] {
440
+ display: block;
441
+ flex: none;
442
+ background: var(--velumo-tone-default);
443
+ }
444
+ [data-velumo-renderer="dom"] [data-velumo-rule-tone="muted"] { background: var(--velumo-tone-muted); }
445
+ [data-velumo-renderer="dom"] [data-velumo-rule-tone="accent"] { background: var(--velumo-tone-accent); }
446
+ [data-velumo-renderer="dom"] [data-velumo-rule-tone="danger"] { background: var(--velumo-tone-danger); }
447
+ [data-velumo-renderer="dom"] [data-velumo-rule-tone="magenta"] { background: var(--velumo-tone-magenta); }
448
+ [data-velumo-renderer="dom"] [data-velumo-rule-tone="cyan"] { background: var(--velumo-tone-cyan); }
449
+ [data-velumo-renderer="dom"] [data-velumo-rule-tone="purple"] { background: var(--velumo-tone-purple); }
450
+ [data-velumo-renderer="dom"] [data-velumo-rule-tone="green"] { background: var(--velumo-tone-green); }
451
+ [data-velumo-renderer="dom"] [data-velumo-rule-gradient] {
452
+ background: linear-gradient(90deg, var(--velumo-rule-from, var(--velumo-tone-default)), var(--velumo-rule-to, var(--velumo-tone-default)));
453
+ }
454
+
455
+ [data-velumo-renderer="dom"] pre[data-velumo-element="code"] {
456
+ margin: 0;
457
+ padding: 1.1rem 1.35rem;
458
+ border: 1px solid var(--velumo-color-muted, #9aa6b8);
459
+ border-radius: var(--velumo-radii-card, 0.75rem);
460
+ background: var(--velumo-surface-muted, #1a1f29);
461
+ color: var(--velumo-text-default, #e8edf4);
462
+ font-family: ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, monospace;
463
+ font-size: 0.95em;
464
+ line-height: 1.6;
465
+ overflow: auto;
466
+ white-space: pre;
467
+ }
468
+ [data-velumo-renderer="dom"] [data-velumo-token="keyword"] { color: var(--velumo-color-purple, #a98bff); }
469
+ [data-velumo-renderer="dom"] [data-velumo-token="function"] { color: var(--velumo-text-accent, #9ec5ff); }
470
+ [data-velumo-renderer="dom"] [data-velumo-token="string"] { color: var(--velumo-color-green, #5fd398); }
471
+ [data-velumo-renderer="dom"] [data-velumo-token="number"] { color: var(--velumo-color-magenta, #ff6ba3); }
472
+ [data-velumo-renderer="dom"] [data-velumo-token="property"] { color: var(--velumo-color-cyan, #5bd6f0); }
473
+ [data-velumo-renderer="dom"] [data-velumo-token="comment"] { color: var(--velumo-text-muted, #9aa6b8); }
474
+ [data-velumo-renderer="dom"] [data-velumo-token="punctuation"] { color: var(--velumo-text-muted, #9aa6b8); }
475
+
476
+ [data-velumo-renderer="dom"] [data-velumo-element="icon"] {
477
+ display: inline-flex;
478
+ align-items: center;
479
+ justify-content: center;
480
+ width: 1.6em;
481
+ height: 1.6em;
482
+ border-radius: 999px;
483
+ background: color-mix(in srgb, currentColor 20%, transparent);
484
+ vertical-align: middle;
485
+ flex: none;
486
+ }
487
+ [data-velumo-renderer="dom"] [data-velumo-element="icon"]::before {
488
+ content: "";
489
+ display: block;
490
+ box-sizing: border-box;
491
+ }
492
+ [data-velumo-renderer="dom"] [data-velumo-icon="check"]::before {
493
+ width: 0.34em;
494
+ height: 0.62em;
495
+ border: solid currentColor;
496
+ border-width: 0 0.14em 0.14em 0;
497
+ transform: translateY(-0.07em) rotate(45deg);
498
+ }
499
+ [data-velumo-renderer="dom"] [data-velumo-icon="cross"] { position: relative; }
500
+ [data-velumo-renderer="dom"] [data-velumo-icon="cross"]::before,
501
+ [data-velumo-renderer="dom"] [data-velumo-icon="cross"]::after {
502
+ content: "";
503
+ position: absolute;
504
+ top: 50%;
505
+ left: 50%;
506
+ width: 0.72em;
507
+ height: 0.14em;
508
+ border-radius: 2px;
509
+ background: currentColor;
510
+ }
511
+ [data-velumo-renderer="dom"] [data-velumo-icon="cross"]::before { transform: translate(-50%, -50%) rotate(45deg); }
512
+ [data-velumo-renderer="dom"] [data-velumo-icon="cross"]::after { transform: translate(-50%, -50%) rotate(-45deg); }
513
+ [data-velumo-renderer="dom"] [data-velumo-icon="dash"]::before {
514
+ width: 0.72em;
515
+ height: 0.14em;
516
+ border-radius: 2px;
517
+ background: currentColor;
518
+ }
519
+ [data-velumo-renderer="dom"] [data-velumo-icon="ring"]::before {
520
+ width: 0.78em;
521
+ height: 0.78em;
522
+ border: 0.13em solid currentColor;
523
+ border-radius: 50%;
524
+ }
525
+ [data-velumo-renderer="dom"] [data-velumo-icon="dot"]::before {
526
+ width: 0.5em;
527
+ height: 0.5em;
528
+ background: currentColor;
529
+ border-radius: 50%;
530
+ }
531
+ [data-velumo-renderer="dom"] [data-velumo-icon="arrow"]::before {
532
+ width: 0.42em;
533
+ height: 0.42em;
534
+ border: solid currentColor;
535
+ border-width: 0.14em 0.14em 0 0;
536
+ transform: translateX(-0.08em) rotate(45deg);
537
+ }
538
+ [data-velumo-renderer="dom"] [data-velumo-layout="table"] {
539
+ display: flex;
540
+ flex-direction: column;
541
+ border: 1px solid var(--velumo-color-muted, #9aa6b8);
542
+ border-radius: var(--velumo-radii-card, 0.75rem);
543
+ background: var(--velumo-surface-muted, #1a1f29);
544
+ overflow: hidden;
545
+ }
546
+ [data-velumo-renderer="dom"] [data-velumo-layout="table"] [role="row"] {
547
+ display: grid;
548
+ grid-template-columns: var(--velumo-table-columns, 1fr);
549
+ align-items: center;
550
+ padding: 0 1.4rem;
551
+ }
552
+ [data-velumo-renderer="dom"] [data-velumo-layout="table"] [data-velumo-table-head] {
553
+ background: color-mix(in srgb, var(--velumo-text-default, #e8edf4) 8%, transparent);
554
+ border-bottom: 1px solid var(--velumo-color-muted, #9aa6b8);
555
+ }
556
+ [data-velumo-renderer="dom"] [data-velumo-layout="table"] [role="rowgroup"] [role="row"] + [role="row"] {
557
+ border-top: 1px solid color-mix(in srgb, var(--velumo-text-default, #e8edf4) 8%, transparent);
558
+ }
559
+ [data-velumo-renderer="dom"] [data-velumo-layout="table"] [role="cell"],
560
+ [data-velumo-renderer="dom"] [data-velumo-layout="table"] [role="columnheader"] {
561
+ display: flex;
562
+ align-items: center;
563
+ align-self: stretch;
564
+ padding: 0.85rem 0;
565
+ }
566
+ [data-velumo-renderer="dom"] [data-velumo-layout="table"] [role="columnheader"] {
567
+ font-weight: 650;
568
+ letter-spacing: 0.01em;
569
+ }
570
+ [data-velumo-renderer="dom"] [data-velumo-layout="table"] [data-velumo-col-align="center"] { justify-content: center; }
571
+ [data-velumo-renderer="dom"] [data-velumo-layout="table"] [data-velumo-col-align="end"] { justify-content: flex-end; }
572
+ [data-velumo-renderer="dom"] [data-velumo-layout="table"] [data-velumo-col-emphasis] {
573
+ background: color-mix(in srgb, var(--velumo-text-accent, #6ea8fe) 10%, transparent);
574
+ }
575
+ [data-velumo-renderer="dom"] [data-velumo-layout="table"] [data-velumo-table-head] [data-velumo-col-emphasis] {
576
+ box-shadow: inset 0 0.18rem 0 0 var(--velumo-text-accent, #6ea8fe);
577
+ }
578
+ `.trim();
579
+ //# sourceMappingURL=default-theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-theme.js","sourceRoot":"","sources":["../src/default-theme.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAU;IACjC,EAAE,EAAE,cAAc;IAClB,MAAM,EAAE;QACN,MAAM,EAAE;YACN,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,SAAS;SACjB;QACD,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,UAAU,EAAE,sCAAsC;gBAClD,QAAQ,EAAE,8BAA8B;gBACxC,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,GAAG;gBACf,aAAa,EAAE,UAAU;aAC1B;YACD,IAAI,EAAE;gBACJ,UAAU,EAAE,sCAAsC;gBAClD,QAAQ,EAAE,iCAAiC;gBAC3C,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,GAAG;aAChB;YACD,OAAO,EAAE;gBACP,UAAU,EAAE,sCAAsC;gBAClD,QAAQ,EAAE,SAAS;gBACnB,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,GAAG;gBACf,aAAa,EAAE,QAAQ;aACxB;SACF;QACD,OAAO,EAAE;YACP,EAAE,EAAE,UAAU;YACd,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,MAAM;YACV,EAAE,EAAE,MAAM;SACX;QACD,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,OAAO;SACd;QACD,OAAO,EAAE;YACP,IAAI,EAAE,iCAAiC;SACxC;QACD,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,UAAU;aACnB;YACD,QAAQ,EAAE;gBACR,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,4BAA4B;aACrC;SACF;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,2BAA2B;YACjC,MAAM,EAAE,2BAA2B;YACnC,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,2BAA2B;SACpC;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,SAAS;SAClB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmf9B,CAAC,IAAI,EAAE,CAAC"}
@@ -0,0 +1,62 @@
1
+ import type { JsonValue, Layer, Manifest, SlideEntry } from "@velumo/core";
2
+ import { type ActionContext, type ActionHandler, type LayerRenderer, type RuntimeController } from "@velumo/runtime";
3
+ interface DomDocumentLike {
4
+ createElement(tagName: string): DomElementLike;
5
+ createElementNS(namespace: string, tagName: string): DomElementLike;
6
+ createTextNode(text: string): DomNodeLike;
7
+ readonly head?: DomElementLike;
8
+ querySelector?(selectors: string): DomElementLike | null;
9
+ }
10
+ type DomNodeChild = DomElementLike | DomNodeLike;
11
+ type DomChild = DomNodeChild | string;
12
+ type DomLayerRenderResult = DomChild | readonly DomChild[] | null | undefined;
13
+ interface DomNodeLike {
14
+ parentNode?: unknown;
15
+ textContent: string;
16
+ }
17
+ interface DomElementLike extends DomNodeLike {
18
+ readonly ownerDocument: DomDocumentLike;
19
+ readonly style?: DomStyleLike;
20
+ append(...children: DomChild[]): void;
21
+ appendChild(child: DomNodeChild): DomNodeChild;
22
+ removeAttribute(name: string): void;
23
+ replaceChildren(...children: DomChild[]): void;
24
+ setAttribute(name: string, value: string): void;
25
+ }
26
+ interface DomStyleLike {
27
+ removeProperty(name: string): string;
28
+ setProperty(name: string, value: string): void;
29
+ }
30
+ export interface DomLayerRendererContext {
31
+ readonly layer: Layer;
32
+ readonly slide: SlideEntry;
33
+ readonly manifest: Manifest;
34
+ readonly runtime: RuntimeController;
35
+ createElement(tagName: string): DomElementLike;
36
+ createText(text: string): DomNodeLike;
37
+ dispatch(action: {
38
+ type: string;
39
+ payload?: JsonValue;
40
+ }): void;
41
+ }
42
+ interface DomRuntimeRegistry {
43
+ getLayerRenderer(type: string): LayerRenderer<DomLayerRendererContext, DomLayerRenderResult> | undefined;
44
+ getActionHandler?(type: string): ActionHandler<ActionContext> | undefined;
45
+ }
46
+ export interface DomRendererOptions {
47
+ readonly root: DomElementLike;
48
+ readonly manifest: Manifest;
49
+ readonly runtime: RuntimeController;
50
+ readonly registry?: DomRuntimeRegistry;
51
+ }
52
+ export declare class DomRenderer {
53
+ #private;
54
+ constructor(options: DomRendererOptions);
55
+ getRoot(): DomElementLike;
56
+ mount(): void;
57
+ render(): void;
58
+ unmount(): void;
59
+ dispose(): void;
60
+ }
61
+ export {};
62
+ //# sourceMappingURL=dom-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-renderer.d.ts","sourceRoot":"","sources":["../src/dom-renderer.ts"],"names":[],"mappings":"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"}