@doneisbetter/gds-theme 3.0.2 → 3.0.4

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.
@@ -0,0 +1,665 @@
1
+ // src/theme.ts
2
+ import { DEFAULT_THEME, createTheme, mergeMantineTheme, mergeThemeOverrides } from "@mantine/core";
3
+ var baseTheme = mergeMantineTheme(DEFAULT_THEME, createTheme({
4
+ primaryColor: "violet",
5
+ fontFamily: "Inter, system-ui, Avenir, Helvetica, Arial, sans-serif",
6
+ fontSmoothing: true,
7
+ defaultRadius: "md",
8
+ black: "#111827",
9
+ white: "#ffffff",
10
+ headings: {
11
+ fontFamily: "Inter, system-ui, Avenir, Helvetica, Arial, sans-serif",
12
+ sizes: {
13
+ h1: { fontSize: "2.5rem", fontWeight: "800" },
14
+ h2: { fontSize: "1.75rem", fontWeight: "700" },
15
+ h3: { fontSize: "1.25rem", fontWeight: "600" }
16
+ }
17
+ },
18
+ shadows: {
19
+ md: "0 8px 24px rgba(15, 23, 42, 0.08)",
20
+ lg: "0 16px 40px rgba(15, 23, 42, 0.12)"
21
+ },
22
+ components: {
23
+ Button: {
24
+ defaultProps: {
25
+ radius: "md",
26
+ size: "sm",
27
+ fw: 600
28
+ }
29
+ },
30
+ Card: {
31
+ defaultProps: {
32
+ radius: "lg",
33
+ shadow: "sm",
34
+ withBorder: true
35
+ },
36
+ styles: {
37
+ root: {
38
+ background: "var(--mantine-color-body)"
39
+ }
40
+ }
41
+ },
42
+ Paper: {
43
+ defaultProps: {
44
+ radius: "lg",
45
+ withBorder: true
46
+ }
47
+ },
48
+ TextInput: {
49
+ defaultProps: {
50
+ radius: "md"
51
+ }
52
+ },
53
+ Table: {
54
+ defaultProps: {
55
+ highlightOnHover: true,
56
+ verticalSpacing: "md"
57
+ }
58
+ },
59
+ Badge: {
60
+ defaultProps: {
61
+ radius: "xl"
62
+ }
63
+ }
64
+ }
65
+ }));
66
+ var gdsTheme = baseTheme;
67
+ var gdsDarkPublicTheme = extendGdsTheme({
68
+ primaryColor: "violet",
69
+ components: {
70
+ AppShell: {
71
+ styles: {
72
+ main: {
73
+ background: "var(--mantine-color-dark-8)"
74
+ }
75
+ }
76
+ },
77
+ Card: {
78
+ styles: {
79
+ root: {
80
+ background: "var(--mantine-color-dark-7)",
81
+ borderColor: "var(--mantine-color-dark-4)"
82
+ }
83
+ }
84
+ },
85
+ Paper: {
86
+ styles: {
87
+ root: {
88
+ background: "var(--mantine-color-dark-7)",
89
+ borderColor: "var(--mantine-color-dark-4)"
90
+ }
91
+ }
92
+ },
93
+ Table: {
94
+ styles: {
95
+ table: {
96
+ color: "var(--mantine-color-gray-0)"
97
+ }
98
+ }
99
+ }
100
+ }
101
+ });
102
+ var gdsFlatSurfaceTheme = extendGdsTheme({
103
+ shadows: {
104
+ xs: "none",
105
+ sm: "none",
106
+ md: "none",
107
+ lg: "none",
108
+ xl: "none"
109
+ },
110
+ components: {
111
+ Card: {
112
+ defaultProps: {
113
+ shadow: void 0,
114
+ withBorder: true
115
+ }
116
+ },
117
+ Paper: {
118
+ defaultProps: {
119
+ withBorder: true
120
+ }
121
+ }
122
+ }
123
+ });
124
+ var gdsEditorialPublicTheme = extendGdsTheme({
125
+ headings: {
126
+ fontFamily: '"Instrument Serif", Georgia, "Times New Roman", serif',
127
+ sizes: {
128
+ h1: { fontSize: "2.75rem", fontWeight: "700" },
129
+ h2: { fontSize: "2rem", fontWeight: "700" },
130
+ h3: { fontSize: "1.375rem", fontWeight: "600" }
131
+ }
132
+ },
133
+ shadows: {
134
+ xs: "none",
135
+ sm: "none",
136
+ md: "none",
137
+ lg: "none",
138
+ xl: "none"
139
+ },
140
+ components: {
141
+ Card: {
142
+ defaultProps: {
143
+ shadow: void 0,
144
+ withBorder: true
145
+ }
146
+ },
147
+ Paper: {
148
+ defaultProps: {
149
+ withBorder: true
150
+ }
151
+ }
152
+ }
153
+ });
154
+ function composeGdsTheme(overrides = {}) {
155
+ return mergeMantineTheme(baseTheme, overrides);
156
+ }
157
+ function createPublicBrandTheme({
158
+ editorialSerif = false,
159
+ flatSurfaces = false,
160
+ overrides = {}
161
+ } = {}) {
162
+ const layeredOverrides = [];
163
+ if (flatSurfaces) {
164
+ layeredOverrides.push(gdsFlatSurfaceTheme);
165
+ }
166
+ if (editorialSerif) {
167
+ layeredOverrides.push(gdsEditorialPublicTheme);
168
+ }
169
+ layeredOverrides.push(overrides);
170
+ const mergedOverrides = layeredOverrides.reduce(
171
+ (theme, layer) => mergeThemeOverrides(theme, layer),
172
+ {}
173
+ );
174
+ return composeGdsTheme(mergedOverrides);
175
+ }
176
+ function extendGdsTheme(overrides = {}) {
177
+ return composeGdsTheme(overrides);
178
+ }
179
+ function withGdsMotion(overrides = {}) {
180
+ return extendGdsTheme(
181
+ mergeThemeOverrides(
182
+ {
183
+ components: {
184
+ Button: {
185
+ styles: {
186
+ root: {
187
+ transition: "transform 150ms ease, filter 120ms ease",
188
+ "&:hover": {
189
+ transform: "translateY(-1px)",
190
+ filter: "brightness(1.05)"
191
+ },
192
+ "&:active": {
193
+ transform: "translateY(0)",
194
+ filter: "brightness(0.95)"
195
+ }
196
+ }
197
+ }
198
+ },
199
+ Card: {
200
+ styles: {
201
+ root: {
202
+ transition: "transform 150ms ease, box-shadow 150ms ease"
203
+ }
204
+ }
205
+ }
206
+ }
207
+ },
208
+ overrides
209
+ )
210
+ );
211
+ }
212
+
213
+ // src/theme-presets.ts
214
+ function createVibrantPresetTheme(primaryColor, options = {}) {
215
+ const darkSurface = options.darkForward ? `color-mix(in srgb, var(--mantine-color-${primaryColor}-9) 18%, var(--mantine-color-dark-8))` : "var(--mantine-color-dark-8)";
216
+ return extendGdsTheme({
217
+ primaryColor,
218
+ components: {
219
+ AppShell: {
220
+ styles: {
221
+ main: {
222
+ background: `light-dark(color-mix(in srgb, var(--mantine-color-${primaryColor}-0) 58%, var(--mantine-color-white)), ${darkSurface})`
223
+ },
224
+ header: {
225
+ background: `light-dark(color-mix(in srgb, var(--mantine-color-${primaryColor}-0) 68%, var(--mantine-color-white)), var(--mantine-color-dark-8))`,
226
+ borderColor: `light-dark(var(--mantine-color-${primaryColor}-2), var(--mantine-color-dark-5))`
227
+ },
228
+ navbar: {
229
+ background: `light-dark(color-mix(in srgb, var(--mantine-color-${primaryColor}-0) 48%, var(--mantine-color-white)), var(--mantine-color-dark-8))`,
230
+ borderColor: `light-dark(var(--mantine-color-${primaryColor}-2), var(--mantine-color-dark-5))`
231
+ }
232
+ }
233
+ },
234
+ Card: {
235
+ styles: {
236
+ root: {
237
+ background: `light-dark(var(--mantine-color-white), color-mix(in srgb, var(--mantine-color-${primaryColor}-9) 10%, var(--mantine-color-dark-7)))`,
238
+ borderColor: `light-dark(var(--mantine-color-${primaryColor}-2), var(--mantine-color-dark-4))`
239
+ }
240
+ }
241
+ },
242
+ Paper: {
243
+ styles: {
244
+ root: {
245
+ background: `light-dark(color-mix(in srgb, var(--mantine-color-${primaryColor}-0) 16%, var(--mantine-color-white)), color-mix(in srgb, var(--mantine-color-${primaryColor}-9) 8%, var(--mantine-color-dark-7)))`,
246
+ borderColor: `light-dark(var(--mantine-color-${primaryColor}-2), var(--mantine-color-dark-4))`
247
+ }
248
+ }
249
+ }
250
+ }
251
+ });
252
+ }
253
+ var customPresetThemes = {
254
+ sunset: createVibrantPresetTheme("orange"),
255
+ oceanic: createVibrantPresetTheme("cyan"),
256
+ forest: createVibrantPresetTheme("green"),
257
+ ruby: createVibrantPresetTheme("red"),
258
+ amber: createVibrantPresetTheme("yellow"),
259
+ "neon-night": createVibrantPresetTheme("lime", { darkForward: true }),
260
+ skyline: createVibrantPresetTheme("indigo"),
261
+ aurora: createVibrantPresetTheme("teal"),
262
+ coral: createVibrantPresetTheme("pink"),
263
+ mint: createVibrantPresetTheme("lime"),
264
+ orchid: createVibrantPresetTheme("grape"),
265
+ royal: createVibrantPresetTheme("violet"),
266
+ cosmic: createVibrantPresetTheme("violet", { darkForward: true })
267
+ };
268
+ var themePresetCatalog = [
269
+ { id: "default", label: "Default runtime theme", description: "Balanced, neutral baseline lane.", runtimeLane: "gdsTheme" },
270
+ { id: "dark-public", label: "Dark public theme", description: "Dark-first public lane.", runtimeLane: "gdsDarkPublicTheme" },
271
+ { id: "flat-surface", label: "Flat surface theme", description: "Lower-elevation operational lane.", runtimeLane: "gdsFlatSurfaceTheme" },
272
+ { id: "editorial", label: "Editorial serif theme", description: "Reading-first, serif headline lane.", runtimeLane: "gdsEditorialPublicTheme" },
273
+ { id: "brand", label: "Brand theme generator", description: "Governed brand composition lane.", runtimeLane: "createPublicBrandTheme(...)" },
274
+ { id: "sunset", label: "Sunset pulse", description: "Warm orange-magenta vibrant lane.", runtimeLane: "resolveGdsThemePreset(sunset)" },
275
+ { id: "oceanic", label: "Oceanic wave", description: "Cool cyan-blue vibrant lane.", runtimeLane: "resolveGdsThemePreset(oceanic)" },
276
+ { id: "forest", label: "Forest signal", description: "Natural emerald-driven vibrant lane.", runtimeLane: "resolveGdsThemePreset(forest)" },
277
+ { id: "ruby", label: "Ruby spark", description: "Bold red high-contrast lane.", runtimeLane: "resolveGdsThemePreset(ruby)" },
278
+ { id: "amber", label: "Amber glow", description: "Golden yellow energetic lane.", runtimeLane: "resolveGdsThemePreset(amber)" },
279
+ { id: "neon-night", label: "Neon night", description: "Lime-accented dark-forward lane.", runtimeLane: "resolveGdsThemePreset(neon-night)" },
280
+ { id: "skyline", label: "Skyline indigo", description: "Indigo technology-forward lane.", runtimeLane: "resolveGdsThemePreset(skyline)" },
281
+ { id: "aurora", label: "Aurora teal", description: "Fresh teal-cyan app lane for optimistic product surfaces.", runtimeLane: "resolveGdsThemePreset(aurora)" },
282
+ { id: "coral", label: "Coral bloom", description: "Expressive pink-coral lane for creator, commerce, and social products.", runtimeLane: "resolveGdsThemePreset(coral)" },
283
+ { id: "mint", label: "Mint circuit", description: "Clean green-mint lane for health, learning, and growth products.", runtimeLane: "resolveGdsThemePreset(mint)" },
284
+ { id: "orchid", label: "Orchid signal", description: "Purple-grape lane for editorial, culture, and premium tools.", runtimeLane: "resolveGdsThemePreset(orchid)" },
285
+ { id: "royal", label: "Royal violet", description: "Confident violet lane for SaaS dashboards and professional apps.", runtimeLane: "resolveGdsThemePreset(royal)" },
286
+ { id: "cosmic", label: "Cosmic burst", description: "Highly saturated blue-violet-cyan-magenta showcase lane for bold public apps and launch surfaces.", runtimeLane: "resolveGdsThemePreset(cosmic)" }
287
+ ];
288
+ function getGdsThemePresets() {
289
+ return themePresetCatalog;
290
+ }
291
+ function resolveGdsThemePreset(id, options) {
292
+ switch (id) {
293
+ case "default":
294
+ return gdsTheme;
295
+ case "dark-public":
296
+ return gdsDarkPublicTheme;
297
+ case "flat-surface":
298
+ return gdsFlatSurfaceTheme;
299
+ case "editorial":
300
+ return gdsEditorialPublicTheme;
301
+ case "brand":
302
+ return createPublicBrandTheme({
303
+ editorialSerif: options?.brandEditorialSerif ?? false,
304
+ flatSurfaces: options?.brandFlatSurfaces ?? true,
305
+ overrides: { primaryColor: options?.brandPrimary ?? "blue" }
306
+ });
307
+ default:
308
+ return customPresetThemes[id] ?? gdsTheme;
309
+ }
310
+ }
311
+
312
+ // src/vibe-themes.ts
313
+ var neutralVibe = {
314
+ id: "default",
315
+ label: "Default runtime theme",
316
+ primary: "#7c3aed",
317
+ accent: "#06b6d4",
318
+ glow: "rgba(124, 58, 237, 0.2)",
319
+ canvasLight: "#f8fafc",
320
+ canvasDark: "#0f172a",
321
+ shellLight: "rgba(255, 255, 255, 0.82)",
322
+ shellDark: "rgba(15, 23, 42, 0.84)",
323
+ surfaceLight: "rgba(255, 255, 255, 0.9)",
324
+ surfaceDark: "rgba(30, 41, 59, 0.82)",
325
+ borderLight: "rgba(124, 58, 237, 0.22)",
326
+ borderDark: "rgba(167, 139, 250, 0.28)",
327
+ textLight: "#111827",
328
+ textDark: "#f8fafc",
329
+ mutedLight: "#64748b",
330
+ mutedDark: "#cbd5e1",
331
+ gradient: "radial-gradient(circle at 18% 12%, rgba(124, 58, 237, 0.18), transparent 28%), radial-gradient(circle at 82% 8%, rgba(6, 182, 212, 0.16), transparent 30%)",
332
+ hero: "linear-gradient(135deg, rgba(124, 58, 237, 0.14), rgba(6, 182, 212, 0.12))"
333
+ };
334
+ var vibeThemes = {
335
+ default: neutralVibe,
336
+ "dark-public": {
337
+ ...neutralVibe,
338
+ id: "dark-public",
339
+ label: "Dark public theme",
340
+ primary: "#8b5cf6",
341
+ accent: "#22d3ee",
342
+ canvasLight: "#f5f3ff",
343
+ canvasDark: "#050816",
344
+ shellDark: "rgba(8, 13, 32, 0.88)",
345
+ surfaceDark: "rgba(18, 24, 52, 0.86)",
346
+ gradient: "radial-gradient(circle at 20% 12%, rgba(139, 92, 246, 0.34), transparent 30%), radial-gradient(circle at 82% 16%, rgba(34, 211, 238, 0.2), transparent 28%)",
347
+ hero: "linear-gradient(135deg, rgba(139, 92, 246, 0.35), rgba(34, 211, 238, 0.14))"
348
+ },
349
+ "flat-surface": {
350
+ ...neutralVibe,
351
+ id: "flat-surface",
352
+ label: "Flat surface theme",
353
+ primary: "#2563eb",
354
+ accent: "#14b8a6",
355
+ canvasLight: "#f8fafc",
356
+ canvasDark: "#111827",
357
+ shellLight: "rgba(248, 250, 252, 0.94)",
358
+ surfaceLight: "rgba(255, 255, 255, 0.94)",
359
+ gradient: "linear-gradient(135deg, rgba(37, 99, 235, 0.08), rgba(20, 184, 166, 0.08))",
360
+ hero: "linear-gradient(135deg, rgba(37, 99, 235, 0.12), rgba(20, 184, 166, 0.1))"
361
+ },
362
+ editorial: {
363
+ ...neutralVibe,
364
+ id: "editorial",
365
+ label: "Editorial serif theme",
366
+ primary: "#9a3412",
367
+ accent: "#be123c",
368
+ canvasLight: "#fff7ed",
369
+ canvasDark: "#1c1917",
370
+ shellLight: "rgba(255, 247, 237, 0.9)",
371
+ surfaceLight: "rgba(255, 251, 247, 0.92)",
372
+ borderLight: "rgba(154, 52, 18, 0.22)",
373
+ gradient: "radial-gradient(circle at 12% 12%, rgba(251, 146, 60, 0.22), transparent 28%), radial-gradient(circle at 84% 10%, rgba(190, 18, 60, 0.12), transparent 28%)",
374
+ hero: "linear-gradient(135deg, rgba(251, 146, 60, 0.18), rgba(190, 18, 60, 0.12))"
375
+ },
376
+ brand: {
377
+ ...neutralVibe,
378
+ id: "brand",
379
+ label: "Brand theme generator"
380
+ },
381
+ sunset: {
382
+ ...neutralVibe,
383
+ id: "sunset",
384
+ label: "Sunset pulse",
385
+ primary: "#f97316",
386
+ accent: "#ec4899",
387
+ glow: "rgba(249, 115, 22, 0.3)",
388
+ canvasLight: "#fff7ed",
389
+ canvasDark: "#211106",
390
+ shellLight: "rgba(255, 247, 237, 0.9)",
391
+ shellDark: "rgba(44, 18, 10, 0.88)",
392
+ surfaceLight: "rgba(255, 250, 245, 0.9)",
393
+ surfaceDark: "rgba(68, 24, 12, 0.78)",
394
+ borderLight: "rgba(249, 115, 22, 0.3)",
395
+ borderDark: "rgba(251, 146, 60, 0.36)",
396
+ gradient: "radial-gradient(circle at 14% 8%, rgba(251, 146, 60, 0.38), transparent 28%), radial-gradient(circle at 88% 18%, rgba(236, 72, 153, 0.32), transparent 32%), linear-gradient(135deg, rgba(255, 247, 237, 0.96), rgba(253, 242, 248, 0.86))",
397
+ hero: "linear-gradient(135deg, rgba(249, 115, 22, 0.26), rgba(236, 72, 153, 0.22))"
398
+ },
399
+ oceanic: {
400
+ ...neutralVibe,
401
+ id: "oceanic",
402
+ label: "Oceanic wave",
403
+ primary: "#0891b2",
404
+ accent: "#2563eb",
405
+ glow: "rgba(8, 145, 178, 0.28)",
406
+ canvasLight: "#ecfeff",
407
+ canvasDark: "#04131f",
408
+ shellLight: "rgba(236, 254, 255, 0.88)",
409
+ shellDark: "rgba(5, 26, 44, 0.88)",
410
+ surfaceLight: "rgba(248, 253, 255, 0.9)",
411
+ surfaceDark: "rgba(8, 47, 73, 0.78)",
412
+ borderLight: "rgba(8, 145, 178, 0.28)",
413
+ borderDark: "rgba(103, 232, 249, 0.28)",
414
+ gradient: "radial-gradient(circle at 18% 8%, rgba(34, 211, 238, 0.32), transparent 30%), radial-gradient(circle at 86% 14%, rgba(37, 99, 235, 0.28), transparent 32%), linear-gradient(135deg, rgba(236, 254, 255, 0.96), rgba(239, 246, 255, 0.9))",
415
+ hero: "linear-gradient(135deg, rgba(8, 145, 178, 0.24), rgba(37, 99, 235, 0.2))"
416
+ },
417
+ forest: {
418
+ ...neutralVibe,
419
+ id: "forest",
420
+ label: "Forest signal",
421
+ primary: "#16a34a",
422
+ accent: "#84cc16",
423
+ glow: "rgba(22, 163, 74, 0.28)",
424
+ canvasLight: "#f0fdf4",
425
+ canvasDark: "#06180d",
426
+ shellLight: "rgba(240, 253, 244, 0.9)",
427
+ shellDark: "rgba(8, 35, 19, 0.88)",
428
+ surfaceLight: "rgba(250, 255, 251, 0.9)",
429
+ surfaceDark: "rgba(20, 83, 45, 0.72)",
430
+ borderLight: "rgba(22, 163, 74, 0.26)",
431
+ borderDark: "rgba(134, 239, 172, 0.28)",
432
+ gradient: "radial-gradient(circle at 18% 10%, rgba(34, 197, 94, 0.28), transparent 28%), radial-gradient(circle at 84% 14%, rgba(132, 204, 22, 0.24), transparent 30%)",
433
+ hero: "linear-gradient(135deg, rgba(22, 163, 74, 0.22), rgba(132, 204, 22, 0.18))"
434
+ },
435
+ ruby: {
436
+ ...neutralVibe,
437
+ id: "ruby",
438
+ label: "Ruby spark",
439
+ primary: "#e11d48",
440
+ accent: "#f97316",
441
+ canvasLight: "#fff1f2",
442
+ canvasDark: "#22050c",
443
+ shellLight: "rgba(255, 241, 242, 0.9)",
444
+ shellDark: "rgba(50, 8, 18, 0.88)",
445
+ surfaceDark: "rgba(76, 20, 32, 0.76)",
446
+ borderLight: "rgba(225, 29, 72, 0.28)",
447
+ gradient: "radial-gradient(circle at 18% 8%, rgba(225, 29, 72, 0.32), transparent 28%), radial-gradient(circle at 86% 18%, rgba(249, 115, 22, 0.22), transparent 30%)",
448
+ hero: "linear-gradient(135deg, rgba(225, 29, 72, 0.24), rgba(249, 115, 22, 0.18))"
449
+ },
450
+ amber: {
451
+ ...neutralVibe,
452
+ id: "amber",
453
+ label: "Amber glow",
454
+ primary: "#d97706",
455
+ accent: "#eab308",
456
+ canvasLight: "#fffbeb",
457
+ canvasDark: "#1f1604",
458
+ shellLight: "rgba(255, 251, 235, 0.9)",
459
+ shellDark: "rgba(41, 29, 6, 0.88)",
460
+ surfaceDark: "rgba(69, 46, 10, 0.76)",
461
+ borderLight: "rgba(217, 119, 6, 0.28)",
462
+ gradient: "radial-gradient(circle at 14% 10%, rgba(251, 191, 36, 0.34), transparent 30%), radial-gradient(circle at 84% 12%, rgba(217, 119, 6, 0.22), transparent 28%)",
463
+ hero: "linear-gradient(135deg, rgba(217, 119, 6, 0.22), rgba(234, 179, 8, 0.2))"
464
+ },
465
+ "neon-night": {
466
+ ...neutralVibe,
467
+ id: "neon-night",
468
+ label: "Neon night",
469
+ primary: "#84cc16",
470
+ accent: "#22d3ee",
471
+ glow: "rgba(132, 204, 22, 0.34)",
472
+ canvasLight: "#f7fee7",
473
+ canvasDark: "#030712",
474
+ shellLight: "rgba(247, 254, 231, 0.88)",
475
+ shellDark: "rgba(5, 12, 24, 0.9)",
476
+ surfaceDark: "rgba(12, 23, 36, 0.86)",
477
+ borderLight: "rgba(132, 204, 22, 0.3)",
478
+ borderDark: "rgba(190, 242, 100, 0.34)",
479
+ gradient: "radial-gradient(circle at 16% 8%, rgba(132, 204, 22, 0.36), transparent 26%), radial-gradient(circle at 86% 12%, rgba(34, 211, 238, 0.28), transparent 30%), linear-gradient(135deg, rgba(3, 7, 18, 0.96), rgba(8, 47, 73, 0.74))",
480
+ hero: "linear-gradient(135deg, rgba(132, 204, 22, 0.28), rgba(34, 211, 238, 0.18))"
481
+ },
482
+ skyline: {
483
+ ...neutralVibe,
484
+ id: "skyline",
485
+ label: "Skyline indigo",
486
+ primary: "#4f46e5",
487
+ accent: "#0ea5e9",
488
+ canvasLight: "#eef2ff",
489
+ canvasDark: "#0b1026",
490
+ shellLight: "rgba(238, 242, 255, 0.9)",
491
+ shellDark: "rgba(13, 20, 52, 0.88)",
492
+ surfaceDark: "rgba(30, 41, 86, 0.78)",
493
+ borderLight: "rgba(79, 70, 229, 0.28)",
494
+ gradient: "radial-gradient(circle at 18% 8%, rgba(79, 70, 229, 0.32), transparent 28%), radial-gradient(circle at 84% 12%, rgba(14, 165, 233, 0.28), transparent 30%)",
495
+ hero: "linear-gradient(135deg, rgba(79, 70, 229, 0.24), rgba(14, 165, 233, 0.18))"
496
+ },
497
+ aurora: {
498
+ ...neutralVibe,
499
+ id: "aurora",
500
+ label: "Aurora teal",
501
+ primary: "#0d9488",
502
+ accent: "#a3e635",
503
+ canvasLight: "#f0fdfa",
504
+ canvasDark: "#04211f",
505
+ shellLight: "rgba(240, 253, 250, 0.9)",
506
+ shellDark: "rgba(5, 44, 42, 0.88)",
507
+ surfaceDark: "rgba(19, 78, 74, 0.76)",
508
+ borderLight: "rgba(13, 148, 136, 0.28)",
509
+ gradient: "radial-gradient(circle at 16% 8%, rgba(45, 212, 191, 0.32), transparent 28%), radial-gradient(circle at 84% 14%, rgba(163, 230, 53, 0.22), transparent 30%)",
510
+ hero: "linear-gradient(135deg, rgba(13, 148, 136, 0.24), rgba(163, 230, 53, 0.16))"
511
+ },
512
+ coral: {
513
+ ...neutralVibe,
514
+ id: "coral",
515
+ label: "Coral bloom",
516
+ primary: "#db2777",
517
+ accent: "#fb7185",
518
+ canvasLight: "#fdf2f8",
519
+ canvasDark: "#251021",
520
+ shellLight: "rgba(253, 242, 248, 0.9)",
521
+ shellDark: "rgba(50, 18, 43, 0.88)",
522
+ surfaceDark: "rgba(80, 28, 66, 0.76)",
523
+ borderLight: "rgba(219, 39, 119, 0.28)",
524
+ gradient: "radial-gradient(circle at 16% 8%, rgba(219, 39, 119, 0.3), transparent 28%), radial-gradient(circle at 84% 14%, rgba(251, 113, 133, 0.24), transparent 30%)",
525
+ hero: "linear-gradient(135deg, rgba(219, 39, 119, 0.22), rgba(251, 113, 133, 0.18))"
526
+ },
527
+ mint: {
528
+ ...neutralVibe,
529
+ id: "mint",
530
+ label: "Mint circuit",
531
+ primary: "#059669",
532
+ accent: "#14b8a6",
533
+ canvasLight: "#ecfdf5",
534
+ canvasDark: "#031c16",
535
+ shellLight: "rgba(236, 253, 245, 0.9)",
536
+ shellDark: "rgba(5, 42, 34, 0.88)",
537
+ surfaceDark: "rgba(6, 78, 59, 0.74)",
538
+ borderLight: "rgba(5, 150, 105, 0.28)",
539
+ gradient: "radial-gradient(circle at 16% 8%, rgba(16, 185, 129, 0.3), transparent 28%), radial-gradient(circle at 84% 14%, rgba(20, 184, 166, 0.22), transparent 30%)",
540
+ hero: "linear-gradient(135deg, rgba(5, 150, 105, 0.24), rgba(20, 184, 166, 0.16))"
541
+ },
542
+ orchid: {
543
+ ...neutralVibe,
544
+ id: "orchid",
545
+ label: "Orchid signal",
546
+ primary: "#9333ea",
547
+ accent: "#ec4899",
548
+ canvasLight: "#faf5ff",
549
+ canvasDark: "#1d0b2f",
550
+ shellLight: "rgba(250, 245, 255, 0.9)",
551
+ shellDark: "rgba(39, 15, 63, 0.88)",
552
+ surfaceDark: "rgba(59, 25, 94, 0.78)",
553
+ borderLight: "rgba(147, 51, 234, 0.28)",
554
+ gradient: "radial-gradient(circle at 16% 8%, rgba(147, 51, 234, 0.32), transparent 28%), radial-gradient(circle at 84% 14%, rgba(236, 72, 153, 0.24), transparent 30%)",
555
+ hero: "linear-gradient(135deg, rgba(147, 51, 234, 0.24), rgba(236, 72, 153, 0.18))"
556
+ },
557
+ royal: {
558
+ ...neutralVibe,
559
+ id: "royal",
560
+ label: "Royal violet",
561
+ primary: "#7c3aed",
562
+ accent: "#06b6d4",
563
+ canvasLight: "#f5f3ff",
564
+ canvasDark: "#100a2d",
565
+ shellLight: "rgba(245, 243, 255, 0.9)",
566
+ shellDark: "rgba(21, 13, 59, 0.88)",
567
+ surfaceDark: "rgba(46, 26, 104, 0.78)",
568
+ borderLight: "rgba(124, 58, 237, 0.3)",
569
+ gradient: "radial-gradient(circle at 15% 9%, rgba(124, 58, 237, 0.34), transparent 28%), radial-gradient(circle at 82% 12%, rgba(6, 182, 212, 0.28), transparent 30%), radial-gradient(circle at 92% 72%, rgba(236, 72, 153, 0.2), transparent 26%)",
570
+ hero: "linear-gradient(135deg, rgba(124, 58, 237, 0.28), rgba(6, 182, 212, 0.18), rgba(236, 72, 153, 0.18))"
571
+ },
572
+ cosmic: {
573
+ id: "cosmic",
574
+ label: "Cosmic burst",
575
+ primary: "#7c3cff",
576
+ accent: "#e018ff",
577
+ glow: "rgba(224, 24, 255, 0.36)",
578
+ canvasLight: "#071a80",
579
+ canvasDark: "#030018",
580
+ shellLight: "rgba(10, 18, 70, 0.72)",
581
+ shellDark: "rgba(8, 10, 42, 0.84)",
582
+ surfaceLight: "rgba(10, 18, 70, 0.62)",
583
+ surfaceDark: "rgba(9, 14, 54, 0.76)",
584
+ borderLight: "rgba(190, 160, 255, 0.45)",
585
+ borderDark: "rgba(190, 160, 255, 0.52)",
586
+ textLight: "#ffffff",
587
+ textDark: "#ffffff",
588
+ mutedLight: "rgba(235, 238, 255, 0.76)",
589
+ mutedDark: "rgba(235, 238, 255, 0.78)",
590
+ gradient: "radial-gradient(circle at 92% 32%, rgba(255, 180, 70, 0.95) 0 8%, transparent 22%), radial-gradient(circle at 84% 42%, rgba(255, 45, 190, 0.75) 0 12%, transparent 28%), radial-gradient(circle at 72% 18%, rgba(0, 220, 255, 0.55) 0 11%, transparent 28%), radial-gradient(circle at 22% 82%, rgba(255, 60, 210, 0.35) 0 5%, transparent 16%), linear-gradient(135deg, #19005c 0%, #071a80 38%, #003fd1 63%, #4d08a8 100%)",
591
+ hero: "linear-gradient(135deg, rgba(124, 60, 255, 0.84), rgba(224, 24, 255, 0.62), rgba(255, 155, 61, 0.72))"
592
+ }
593
+ };
594
+ function getGdsVibeThemes() {
595
+ return Object.values(vibeThemes);
596
+ }
597
+ function resolveGdsVibeTheme(id) {
598
+ return vibeThemes[id] ?? neutralVibe;
599
+ }
600
+ function getGdsVibeThemeCssVariables(id, colorScheme) {
601
+ const vibe = resolveGdsVibeTheme(id);
602
+ const dark = colorScheme === "dark";
603
+ return {
604
+ "--gds-vibe-primary": vibe.primary,
605
+ "--gds-vibe-accent": vibe.accent,
606
+ "--gds-vibe-glow": vibe.glow,
607
+ "--gds-vibe-canvas": dark ? vibe.canvasDark : vibe.canvasLight,
608
+ "--gds-vibe-shell": dark ? vibe.shellDark : vibe.shellLight,
609
+ "--gds-vibe-surface": dark ? vibe.surfaceDark : vibe.surfaceLight,
610
+ "--gds-vibe-border": dark ? vibe.borderDark : vibe.borderLight,
611
+ "--gds-vibe-text": dark ? vibe.textDark : vibe.textLight,
612
+ "--gds-vibe-muted": dark ? vibe.mutedDark : vibe.mutedLight,
613
+ "--gds-vibe-gradient": vibe.gradient,
614
+ "--gds-vibe-hero": vibe.hero
615
+ };
616
+ }
617
+
618
+ // src/font-lanes.ts
619
+ import { mergeThemeOverrides as mergeThemeOverrides2 } from "@mantine/core";
620
+ var lanes = [
621
+ { id: "inter", label: "Inter", body: "Inter, system-ui, sans-serif", heading: "Inter, system-ui, sans-serif", mono: "ui-monospace, SFMono-Regular, Menlo, monospace" },
622
+ { id: "manrope", label: "Manrope", body: "Manrope, system-ui, sans-serif", heading: "Manrope, system-ui, sans-serif", mono: "ui-monospace, SFMono-Regular, Menlo, monospace" },
623
+ { id: "space-grotesk", label: "Space Grotesk", body: '"Space Grotesk", Inter, system-ui, sans-serif', heading: '"Space Grotesk", Inter, system-ui, sans-serif', mono: "ui-monospace, SFMono-Regular, Menlo, monospace" },
624
+ { id: "plus-jakarta", label: "Plus Jakarta Sans", body: '"Plus Jakarta Sans", Inter, system-ui, sans-serif', heading: '"Plus Jakarta Sans", Inter, system-ui, sans-serif', mono: "ui-monospace, SFMono-Regular, Menlo, monospace" },
625
+ { id: "nunito", label: "Nunito", body: "Nunito, Inter, system-ui, sans-serif", heading: "Nunito, Inter, system-ui, sans-serif", mono: "ui-monospace, SFMono-Regular, Menlo, monospace" },
626
+ { id: "work-sans", label: "Work Sans", body: '"Work Sans", Inter, system-ui, sans-serif', heading: '"Work Sans", Inter, system-ui, sans-serif', mono: "ui-monospace, SFMono-Regular, Menlo, monospace" },
627
+ { id: "barlow", label: "Barlow", body: "Barlow, Inter, system-ui, sans-serif", heading: "Barlow, Inter, system-ui, sans-serif", mono: "ui-monospace, SFMono-Regular, Menlo, monospace" },
628
+ { id: "dm-sans", label: "DM Sans", body: '"DM Sans", Inter, system-ui, sans-serif', heading: '"DM Sans", Inter, system-ui, sans-serif', mono: "ui-monospace, SFMono-Regular, Menlo, monospace" },
629
+ { id: "instrument-serif", label: "Instrument Serif", body: "Inter, system-ui, sans-serif", heading: '"Instrument Serif", Georgia, serif', mono: "ui-monospace, SFMono-Regular, Menlo, monospace" },
630
+ { id: "source-serif", label: "Source Serif", body: '"Source Serif 4", Georgia, serif', heading: '"Source Serif 4", Georgia, serif', mono: "ui-monospace, SFMono-Regular, Menlo, monospace" }
631
+ ];
632
+ function getGdsFontLanes() {
633
+ return lanes;
634
+ }
635
+ function resolveGdsFontLane(id) {
636
+ return lanes.find((lane) => lane.id === id) ?? lanes[0];
637
+ }
638
+ function applyGdsFontLane(theme, laneId) {
639
+ const lane = resolveGdsFontLane(laneId);
640
+ return mergeThemeOverrides2(theme, {
641
+ fontFamily: lane.body,
642
+ fontFamilyMonospace: lane.mono,
643
+ headings: {
644
+ fontFamily: lane.heading
645
+ }
646
+ });
647
+ }
648
+
649
+ export {
650
+ gdsTheme,
651
+ gdsDarkPublicTheme,
652
+ gdsFlatSurfaceTheme,
653
+ gdsEditorialPublicTheme,
654
+ createPublicBrandTheme,
655
+ extendGdsTheme,
656
+ withGdsMotion,
657
+ getGdsThemePresets,
658
+ resolveGdsThemePreset,
659
+ getGdsVibeThemes,
660
+ resolveGdsVibeTheme,
661
+ getGdsVibeThemeCssVariables,
662
+ getGdsFontLanes,
663
+ resolveGdsFontLane,
664
+ applyGdsFontLane
665
+ };
@@ -3,8 +3,9 @@ import {
3
3
  gdsTheme,
4
4
  getGdsFontLanes,
5
5
  getGdsThemePresets,
6
+ getGdsVibeThemeCssVariables,
6
7
  resolveGdsThemePreset
7
- } from "./chunk-TAPLA36E.mjs";
8
+ } from "./chunk-3QN7LJN7.mjs";
8
9
 
9
10
  // src/theme-runtime.ts
10
11
  import { useCallback, useEffect, useState } from "react";
@@ -84,9 +85,15 @@ function resolveDocumentScheme(selection) {
84
85
  return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
85
86
  }
86
87
  function applyDocumentRuntime(selection) {
87
- document.documentElement.setAttribute("data-mantine-color-scheme", resolveDocumentScheme(selection));
88
+ const documentScheme = resolveDocumentScheme(selection);
89
+ const vibeVariables = getGdsVibeThemeCssVariables(selection.preset, documentScheme);
90
+ document.documentElement.setAttribute("data-mantine-color-scheme", documentScheme);
91
+ document.documentElement.setAttribute("data-gds-theme-preset", selection.preset);
88
92
  document.documentElement.setAttribute("data-gds-theme-runtime", selection.runtimeKey ?? `${selection.preset}-${selection.colorScheme}`);
89
93
  document.documentElement.setAttribute("data-gds-font-lane", selection.fontLane);
94
+ Object.entries(vibeVariables).forEach(([property, value]) => {
95
+ document.documentElement.style.setProperty(property, value);
96
+ });
90
97
  }
91
98
  function useGdsThemePresetState({
92
99
  storageKey = defaultStorageKey,