@gtcx/tokens 0.1.0 → 0.2.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.
package/dist/index.d.mts CHANGED
@@ -1,3 +1,6 @@
1
+ export { F as FiftyFourPlatformTokens, S as SemanticColorKey, a as SemanticColors, b as SemanticLayout, c as SemanticRadii, d as SemanticShadows, e as SemanticSpacing, f as SemanticSpacingKey, g as SemanticTokens, h as SemanticTypography, i as fiftyFourColors, j as fiftyFourPlatformTokens, k as fiftyFourRadii, l as fiftyFourShadows, s as semanticColors, m as semanticLayout, n as semanticRadii, o as semanticShadows, p as semanticSpacing, q as semanticTokens, r as semanticTypography } from './fifty-four-Z057XMFQ.mjs';
2
+ export { generateCSSVariables } from './css.mjs';
3
+
1
4
  /**
2
5
  * @module primitives
3
6
  *
@@ -10,103 +13,135 @@
10
13
  */
11
14
  /** GTCX brand color palette. Each scale runs 50 (lightest) → 950 (darkest). */
12
15
  declare const colorPrimitives: {
13
- /** GTCX brand primary — sky blue */
16
+ /** GTCX brand primary — Metronic blue (#1B84FF at 500) */
14
17
  readonly primary: {
15
- readonly 50: "#f0f9ff";
16
- readonly 100: "#e0f2fe";
17
- readonly 200: "#bae6fd";
18
- readonly 300: "#7dd3fc";
19
- readonly 400: "#38bdf8";
20
- readonly 500: "#0ea5e9";
21
- readonly 600: "#0284c7";
22
- readonly 700: "#0369a1";
23
- readonly 800: "#075985";
24
- readonly 900: "#0c4a6e";
25
- readonly 950: "#082f49";
18
+ readonly 50: "#EFF5FF";
19
+ readonly 100: "#D6E6FF";
20
+ readonly 200: "#ADCAFF";
21
+ readonly 300: "#84A9FF";
22
+ readonly 400: "#5290FF";
23
+ readonly 500: "#1B84FF";
24
+ readonly 600: "#1270DC";
25
+ readonly 700: "#0A5CB8";
26
+ readonly 800: "#064794";
27
+ readonly 900: "#033370";
28
+ readonly 950: "#01214D";
26
29
  };
27
- /** GTCX brand secondary — purple */
30
+ /** GTCX brand secondary — indigo */
28
31
  readonly secondary: {
29
- readonly 50: "#faf5ff";
30
- readonly 100: "#f3e8ff";
31
- readonly 200: "#e9d5ff";
32
- readonly 300: "#d8b4fe";
33
- readonly 400: "#c084fc";
34
- readonly 500: "#a855f7";
35
- readonly 600: "#9333ea";
36
- readonly 700: "#7c3aed";
37
- readonly 800: "#6b21a8";
38
- readonly 900: "#581c87";
39
- readonly 950: "#3b0764";
32
+ readonly 50: "#eef4ff";
33
+ readonly 100: "#e0eaff";
34
+ readonly 200: "#c7d7fe";
35
+ readonly 300: "#a4bcfd";
36
+ readonly 400: "#8098f9";
37
+ readonly 500: "#6172f3";
38
+ readonly 600: "#444ce7";
39
+ readonly 700: "#3538cd";
40
+ readonly 800: "#2d31a6";
41
+ readonly 900: "#2d3282";
42
+ readonly 950: "#1f235b";
40
43
  };
41
- /** Positive feedback, approvals, profit */
44
+ /** Positive feedback, approvals, profit — Metronic success (#17C653 at 500) */
42
45
  readonly success: {
43
- readonly 50: "#f0fdf4";
44
- readonly 100: "#dcfce7";
45
- readonly 200: "#bbf7d0";
46
- readonly 300: "#86efac";
47
- readonly 400: "#4ade80";
48
- readonly 500: "#22c55e";
49
- readonly 600: "#16a34a";
50
- readonly 700: "#15803d";
51
- readonly 800: "#166534";
52
- readonly 900: "#14532d";
53
- readonly 950: "#052e16";
46
+ readonly 50: "#ECFDF1";
47
+ readonly 100: "#D1FAE1";
48
+ readonly 200: "#A3F5C3";
49
+ readonly 300: "#6DECA6";
50
+ readonly 400: "#3DD986";
51
+ readonly 500: "#17C653";
52
+ readonly 600: "#12A344";
53
+ readonly 700: "#0D7F35";
54
+ readonly 800: "#085F28";
55
+ readonly 900: "#044519";
56
+ readonly 950: "#02290F";
54
57
  };
55
- /** Caution states, pending actions */
58
+ /** Caution states, pending actions — Metronic warning (#F6B100 at 500) */
56
59
  readonly warning: {
57
- readonly 50: "#fffbeb";
58
- readonly 100: "#fef3c7";
59
- readonly 200: "#fde68a";
60
- readonly 300: "#fcd34d";
61
- readonly 400: "#fbbf24";
62
- readonly 500: "#f59e0b";
63
- readonly 600: "#d97706";
64
- readonly 700: "#b45309";
65
- readonly 800: "#92400e";
66
- readonly 900: "#78350f";
67
- readonly 950: "#451a03";
60
+ readonly 50: "#FFFBEB";
61
+ readonly 100: "#FEF3C7";
62
+ readonly 200: "#FDE68A";
63
+ readonly 300: "#FCD34D";
64
+ readonly 400: "#FBBF24";
65
+ readonly 500: "#F6B100";
66
+ readonly 600: "#D09200";
67
+ readonly 700: "#A37200";
68
+ readonly 800: "#7A5300";
69
+ readonly 900: "#563A00";
70
+ readonly 950: "#342300";
68
71
  };
69
- /** Destructive actions, rejections, loss */
72
+ /** Destructive actions, rejections, loss — Metronic danger (#F8285A at 500) */
70
73
  readonly error: {
71
- readonly 50: "#fef2f2";
72
- readonly 100: "#fee2e2";
73
- readonly 200: "#fecaca";
74
- readonly 300: "#fca5a5";
75
- readonly 400: "#f87171";
76
- readonly 500: "#ef4444";
77
- readonly 600: "#dc2626";
78
- readonly 700: "#b91c1c";
79
- readonly 800: "#991b1b";
80
- readonly 900: "#7f1d1d";
81
- readonly 950: "#450a0a";
74
+ readonly 50: "#FFF1F4";
75
+ readonly 100: "#FFE0E7";
76
+ readonly 200: "#FFC2D0";
77
+ readonly 300: "#FF99B3";
78
+ readonly 400: "#FF6089";
79
+ readonly 500: "#F8285A";
80
+ readonly 600: "#D4194A";
81
+ readonly 700: "#A80F37";
82
+ readonly 800: "#800A28";
83
+ readonly 900: "#60061D";
84
+ readonly 950: "#3D0312";
82
85
  };
83
- /** Informational, links */
86
+ /** Informational Metronic info (#7239EA at 500) */
84
87
  readonly info: {
85
- readonly 50: "#eff6ff";
86
- readonly 100: "#dbeafe";
87
- readonly 200: "#bfdbfe";
88
- readonly 300: "#93c5fd";
89
- readonly 400: "#60a5fa";
90
- readonly 500: "#3b82f6";
91
- readonly 600: "#2563eb";
92
- readonly 700: "#1d4ed8";
93
- readonly 800: "#1e40af";
94
- readonly 900: "#1e3a8a";
95
- readonly 950: "#172554";
88
+ readonly 50: "#F4EFFE";
89
+ readonly 100: "#E9DFFC";
90
+ readonly 200: "#D3BFF9";
91
+ readonly 300: "#B894F5";
92
+ readonly 400: "#9866EF";
93
+ readonly 500: "#7239EA";
94
+ readonly 600: "#5B2CC5";
95
+ readonly 700: "#4621A0";
96
+ readonly 800: "#33177C";
97
+ readonly 900: "#230F58";
98
+ readonly 950: "#140836";
96
99
  };
97
- /** Grays for text, backgrounds, borders */
100
+ /** Light mode grays Metronic gray scale */
98
101
  readonly neutral: {
102
+ readonly 50: "#F9F9F9";
103
+ readonly 100: "#F1F1F4";
104
+ readonly 200: "#DBDFE9";
105
+ readonly 300: "#C4CADA";
106
+ readonly 400: "#99A1B7";
107
+ readonly 500: "#78829D";
108
+ readonly 600: "#5E6880";
109
+ readonly 700: "#4B5675";
110
+ readonly 800: "#252F4A";
111
+ readonly 900: "#071437";
112
+ readonly 950: "#030A25";
113
+ };
114
+ /** Dark mode grays — Metronic dark scale (purpose-built for dark surfaces) */
115
+ readonly neutralDark: {
116
+ readonly 25: "#F5F5F5";
117
+ readonly 50: "#CDCED1";
118
+ readonly 100: "#9899A3";
119
+ readonly 200: "#6D6F80";
120
+ readonly 300: "#636674";
121
+ readonly 400: "#565674";
122
+ readonly 500: "#383D50";
123
+ readonly 600: "#2D3142";
124
+ readonly 700: "#242731";
125
+ readonly 800: "#1E2129";
126
+ readonly 900: "#181C22";
127
+ readonly 950: "#13171E";
128
+ };
129
+ /**
130
+ * Zinc — Tailwind CSS neutral gray scale used by Metronic v9.4.x as its dark
131
+ * surface palette. Referenced by darkSemanticColors for layout parity.
132
+ */
133
+ readonly zinc: {
99
134
  readonly 50: "#fafafa";
100
- readonly 100: "#f5f5f5";
101
- readonly 200: "#e5e5e5";
102
- readonly 300: "#d4d4d4";
103
- readonly 400: "#a3a3a3";
104
- readonly 500: "#737373";
105
- readonly 600: "#525252";
106
- readonly 700: "#404040";
107
- readonly 800: "#262626";
108
- readonly 900: "#171717";
109
- readonly 950: "#0a0a0a";
135
+ readonly 100: "#f4f4f5";
136
+ readonly 200: "#e4e4e7";
137
+ readonly 300: "#d4d4d8";
138
+ readonly 400: "#a1a1aa";
139
+ readonly 500: "#71717a";
140
+ readonly 600: "#52525b";
141
+ readonly 700: "#3f3f46";
142
+ readonly 800: "#27272a";
143
+ readonly 900: "#18181b";
144
+ readonly 950: "#09090b";
110
145
  };
111
146
  readonly white: "#ffffff";
112
147
  readonly black: "#000000";
@@ -128,7 +163,7 @@ declare const spacingPrimitives: {
128
163
  readonly 24: 96;
129
164
  readonly 32: 128;
130
165
  };
131
- /** Font size scale in pixels. */
166
+ /** Font size scale in pixels — Untitled UI v7.0 type scale. */
132
167
  declare const fontSizePrimitives: {
133
168
  readonly xs: 12;
134
169
  readonly sm: 14;
@@ -139,6 +174,8 @@ declare const fontSizePrimitives: {
139
174
  readonly '3xl': 30;
140
175
  readonly '4xl': 36;
141
176
  readonly '5xl': 48;
177
+ readonly '6xl': 60;
178
+ readonly '7xl': 72;
142
179
  };
143
180
  /** Font weight scale. Maps named weights to numeric values. */
144
181
  declare const fontWeightPrimitives: {
@@ -165,13 +202,18 @@ declare const fontFamilyPrimitives: {
165
202
  readonly mono: "JetBrains Mono, Fira Code, Consolas, monospace";
166
203
  readonly serif: "Georgia, 'Times New Roman', serif";
167
204
  };
168
- /** Border radius scale in pixels. */
205
+ /** Border radius scale in pixels — Untitled UI v7.0 radius scale. */
169
206
  declare const borderRadiusPrimitives: {
170
207
  readonly none: 0;
171
- readonly sm: 2;
172
- readonly md: 4;
173
- readonly lg: 8;
208
+ readonly xxs: 2;
209
+ readonly xs: 4;
210
+ readonly sm: 6;
211
+ readonly md: 8;
212
+ readonly lg: 10;
174
213
  readonly xl: 12;
214
+ readonly '2xl': 16;
215
+ readonly '3xl': 20;
216
+ readonly '4xl': 24;
175
217
  readonly full: 9999;
176
218
  };
177
219
  /** Box shadow scale using CSS shadow syntax. */
@@ -225,7 +267,7 @@ declare const focusPrimitives: {
225
267
  /** Ring offset from element edge in pixels */
226
268
  readonly ringOffset: 2;
227
269
  /** Ring color — uses primary brand color */
228
- readonly ringColor: "#0ea5e9";
270
+ readonly ringColor: "#1B84FF";
229
271
  /** Ring border-style */
230
272
  readonly ringStyle: "solid";
231
273
  };
@@ -268,573 +310,6 @@ type ColorScaleKey = Exclude<keyof typeof colorPrimitives, 'white' | 'black'>;
268
310
  /** Union of color shade steps (50, 100, ... 950). */
269
311
  type ColorShade = keyof (typeof colorPrimitives)['primary'];
270
312
 
271
- /**
272
- * @module semantic
273
- *
274
- * Semantic design tokens — named for their purpose, not their value.
275
- * Components should consume these tokens exclusively; never reference
276
- * primitives directly.
277
- *
278
- * Each category is exported individually so consumers can import only
279
- * what they need:
280
- *
281
- * ```ts
282
- * import { semanticColors, semanticTypography } from '@gtcx/tokens';
283
- * ```
284
- *
285
- * The combined `semanticTokens` object is also exported for backward
286
- * compatibility with code that imports the entire token set.
287
- */
288
- /**
289
- * Semantic color tokens.
290
- *
291
- * Every value traces back to a {@link colorPrimitives} value — no orphan
292
- * hex strings. Dark mode overrides live in {@link ../dark | darkSemanticColors}.
293
- */
294
- declare const semanticColors: {
295
- /** Primary brand action color */
296
- readonly primary: "#0ea5e9";
297
- /** Primary hover state */
298
- readonly primaryHover: "#0284c7";
299
- /** Primary active/pressed state */
300
- readonly primaryActive: "#0369a1";
301
- /** Primary tinted background (selected rows, badges) */
302
- readonly primaryBg: "#f0f9ff";
303
- /** Secondary brand color */
304
- readonly secondary: "#a855f7";
305
- /** Secondary hover state */
306
- readonly secondaryHover: "#9333ea";
307
- /** Positive outcome (approvals, passing checks) */
308
- readonly success: "#22c55e";
309
- /** Caution state (pending review, warnings) */
310
- readonly warning: "#f59e0b";
311
- /** Destructive/failure state */
312
- readonly error: "#ef4444";
313
- /** Informational state */
314
- readonly info: "#3b82f6";
315
- /** Financial gain */
316
- readonly profit: "#22c55e";
317
- /** Financial loss */
318
- readonly loss: "#ef4444";
319
- /** Compliance approved */
320
- readonly approved: "#16a34a";
321
- /** Compliance pending */
322
- readonly pending: "#d97706";
323
- /** Compliance rejected */
324
- readonly rejected: "#dc2626";
325
- /** Security verified */
326
- readonly secure: "#16a34a";
327
- /** Security compromised */
328
- readonly insecure: "#dc2626";
329
- /** Primary body text */
330
- readonly textPrimary: "#171717";
331
- /** Secondary/supporting text */
332
- readonly textSecondary: "#525252";
333
- /** Tertiary/label text */
334
- readonly textTertiary: "#737373";
335
- /** Muted/placeholder text */
336
- readonly textMuted: "#a3a3a3";
337
- /** Text on dark backgrounds */
338
- readonly textInverse: "#fafafa";
339
- /** Page-level background */
340
- readonly bgPage: "#fafafa";
341
- /** Card/surface background */
342
- readonly bgSurface: "#ffffff";
343
- /** Surface hover state */
344
- readonly bgSurfaceHover: "#f5f5f5";
345
- /** Tertiary surface (nested cards, wells) */
346
- readonly bgSurfaceTertiary: "#e5e5e5";
347
- /** Inverse background (dark sections) */
348
- readonly bgInverse: "#171717";
349
- /** Sidebar background */
350
- readonly bgSidebar: "#ffffff";
351
- /** Header background */
352
- readonly bgHeader: "#ffffff";
353
- /** Default border */
354
- readonly border: "#e5e5e5";
355
- /** Light/subtle border */
356
- readonly borderLight: "#f5f5f5";
357
- /** Emphasized border */
358
- readonly borderSecondary: "#d4d4d4";
359
- /** Focus ring border */
360
- readonly borderFocus: "#0ea5e9";
361
- /** Default link color */
362
- readonly link: "#0284c7";
363
- /** Link hover state */
364
- readonly linkHover: "#0369a1";
365
- };
366
- /**
367
- * Semantic spacing tokens.
368
- *
369
- * Page-level gutters, component-internal spacing, and layout dimensions.
370
- * All values trace to {@link spacingPrimitives}.
371
- */
372
- declare const semanticSpacing: {
373
- /** Horizontal page gutter */
374
- readonly pageGutter: 24;
375
- /** Internal card padding */
376
- readonly cardPadding: 16;
377
- /** Gap between page sections */
378
- readonly sectionGap: 24;
379
- /** Gap between sibling components */
380
- readonly componentGap: 12;
381
- /** Inline element gap (icon + label) */
382
- readonly inlineGap: 8;
383
- /** Per-component spacing presets */
384
- readonly component: {
385
- readonly button: {
386
- readonly paddingX: 16;
387
- readonly paddingY: 8;
388
- readonly gap: 8;
389
- };
390
- readonly input: {
391
- readonly paddingX: 12;
392
- readonly paddingY: 8;
393
- };
394
- readonly card: {
395
- readonly padding: 24;
396
- readonly gap: 16;
397
- };
398
- readonly form: {
399
- readonly fieldGap: 16;
400
- readonly sectionGap: 32;
401
- readonly labelGap: 8;
402
- };
403
- readonly modal: {
404
- readonly padding: 24;
405
- readonly gap: 16;
406
- };
407
- readonly table: {
408
- readonly cellPadding: 16;
409
- readonly headerPadding: 16;
410
- };
411
- };
412
- /** Layout-level spacing presets */
413
- readonly layout: {
414
- readonly container: {
415
- readonly paddingX: 16;
416
- readonly paddingY: 24;
417
- };
418
- readonly section: {
419
- readonly marginY: 48;
420
- readonly gap: 32;
421
- };
422
- readonly page: {
423
- readonly marginY: 64;
424
- readonly paddingX: 24;
425
- };
426
- };
427
- };
428
- /**
429
- * Semantic typography tokens.
430
- *
431
- * Font families, display/heading/body/button type scales.
432
- * All values trace to font-* primitive scales.
433
- */
434
- declare const semanticTypography: {
435
- /** Default sans-serif font stack */
436
- readonly fontFamily: "Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
437
- /** Monospace font stack for code */
438
- readonly fontFamilyCode: "JetBrains Mono, Fira Code, Consolas, monospace";
439
- /** Serif font stack for editorial content */
440
- readonly fontFamilySerif: "Georgia, 'Times New Roman', serif";
441
- /** Display type scale — hero sections, feature numbers */
442
- readonly display: {
443
- readonly lg: {
444
- readonly fontSize: 48;
445
- readonly fontWeight: 700;
446
- readonly lineHeight: 1.2;
447
- readonly letterSpacing: "-0.025em";
448
- };
449
- readonly md: {
450
- readonly fontSize: 36;
451
- readonly fontWeight: 700;
452
- readonly lineHeight: 1.2;
453
- readonly letterSpacing: "0em";
454
- };
455
- readonly sm: {
456
- readonly fontSize: 30;
457
- readonly fontWeight: 600;
458
- readonly lineHeight: 1.2;
459
- readonly letterSpacing: "0em";
460
- };
461
- };
462
- /** Heading type scale — page/section/card headings */
463
- readonly heading: {
464
- readonly h1: {
465
- readonly fontSize: 30;
466
- readonly fontWeight: 700;
467
- readonly lineHeight: 1.2;
468
- };
469
- readonly h2: {
470
- readonly fontSize: 24;
471
- readonly fontWeight: 600;
472
- readonly lineHeight: 1.2;
473
- };
474
- readonly h3: {
475
- readonly fontSize: 20;
476
- readonly fontWeight: 600;
477
- readonly lineHeight: 1.5;
478
- };
479
- readonly h4: {
480
- readonly fontSize: 18;
481
- readonly fontWeight: 500;
482
- readonly lineHeight: 1.5;
483
- };
484
- };
485
- /** Body type scale — paragraphs, descriptions */
486
- readonly body: {
487
- readonly lg: {
488
- readonly fontSize: 18;
489
- readonly fontWeight: 400;
490
- readonly lineHeight: 1.7;
491
- };
492
- readonly md: {
493
- readonly fontSize: 16;
494
- readonly fontWeight: 400;
495
- readonly lineHeight: 1.5;
496
- };
497
- readonly sm: {
498
- readonly fontSize: 14;
499
- readonly fontWeight: 400;
500
- readonly lineHeight: 1.5;
501
- };
502
- };
503
- /** Caption — footnotes, timestamps, fine print */
504
- readonly caption: {
505
- readonly fontSize: 12;
506
- readonly fontWeight: 400;
507
- readonly lineHeight: 1.5;
508
- };
509
- /** Button label type scale */
510
- readonly button: {
511
- readonly lg: {
512
- readonly fontSize: 18;
513
- readonly fontWeight: 500;
514
- readonly lineHeight: 1.5;
515
- };
516
- readonly md: {
517
- readonly fontSize: 16;
518
- readonly fontWeight: 500;
519
- readonly lineHeight: 1.5;
520
- };
521
- readonly sm: {
522
- readonly fontSize: 14;
523
- readonly fontWeight: 500;
524
- readonly lineHeight: 1.5;
525
- };
526
- };
527
- };
528
- /** Semantic border-radius tokens for component shapes. */
529
- declare const semanticRadii: {
530
- /** Default component radius */
531
- readonly component: 4;
532
- /** Card/panel radius */
533
- readonly card: 8;
534
- /** Button radius */
535
- readonly button: 4;
536
- /** Input/select radius */
537
- readonly input: 4;
538
- /** Tag/badge radius */
539
- readonly tag: 2;
540
- /** Avatar — fully round */
541
- readonly avatar: 9999;
542
- };
543
- /** Semantic shadow tokens for elevation. */
544
- declare const semanticShadows: {
545
- /** Card/panel elevation */
546
- readonly card: "0 1px 2px 0 rgb(0 0 0 / 0.05)";
547
- /** Dropdown/popover elevation */
548
- readonly dropdown: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)";
549
- /** Modal/dialog elevation */
550
- readonly modal: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)";
551
- };
552
- /** Semantic layout dimension tokens (in pixels). */
553
- declare const semanticLayout: {
554
- /** Sidebar expanded width */
555
- readonly sidebarWidth: 240;
556
- /** Sidebar collapsed width */
557
- readonly sidebarCollapsedWidth: 72;
558
- /** Top header height */
559
- readonly headerHeight: 56;
560
- /** Maximum content area width */
561
- readonly contentMaxWidth: 1440;
562
- };
563
- /**
564
- * Combined semantic token object.
565
- *
566
- * @deprecated Prefer the named exports (`semanticColors`, `semanticSpacing`,
567
- * etc.) for better tree-shaking and clearer imports. This combined object
568
- * is preserved for backward compatibility only.
569
- */
570
- declare const semanticTokens: {
571
- readonly colors: {
572
- /** Primary brand action color */
573
- readonly primary: "#0ea5e9";
574
- /** Primary hover state */
575
- readonly primaryHover: "#0284c7";
576
- /** Primary active/pressed state */
577
- readonly primaryActive: "#0369a1";
578
- /** Primary tinted background (selected rows, badges) */
579
- readonly primaryBg: "#f0f9ff";
580
- /** Secondary brand color */
581
- readonly secondary: "#a855f7";
582
- /** Secondary hover state */
583
- readonly secondaryHover: "#9333ea";
584
- /** Positive outcome (approvals, passing checks) */
585
- readonly success: "#22c55e";
586
- /** Caution state (pending review, warnings) */
587
- readonly warning: "#f59e0b";
588
- /** Destructive/failure state */
589
- readonly error: "#ef4444";
590
- /** Informational state */
591
- readonly info: "#3b82f6";
592
- /** Financial gain */
593
- readonly profit: "#22c55e";
594
- /** Financial loss */
595
- readonly loss: "#ef4444";
596
- /** Compliance approved */
597
- readonly approved: "#16a34a";
598
- /** Compliance pending */
599
- readonly pending: "#d97706";
600
- /** Compliance rejected */
601
- readonly rejected: "#dc2626";
602
- /** Security verified */
603
- readonly secure: "#16a34a";
604
- /** Security compromised */
605
- readonly insecure: "#dc2626";
606
- /** Primary body text */
607
- readonly textPrimary: "#171717";
608
- /** Secondary/supporting text */
609
- readonly textSecondary: "#525252";
610
- /** Tertiary/label text */
611
- readonly textTertiary: "#737373";
612
- /** Muted/placeholder text */
613
- readonly textMuted: "#a3a3a3";
614
- /** Text on dark backgrounds */
615
- readonly textInverse: "#fafafa";
616
- /** Page-level background */
617
- readonly bgPage: "#fafafa";
618
- /** Card/surface background */
619
- readonly bgSurface: "#ffffff";
620
- /** Surface hover state */
621
- readonly bgSurfaceHover: "#f5f5f5";
622
- /** Tertiary surface (nested cards, wells) */
623
- readonly bgSurfaceTertiary: "#e5e5e5";
624
- /** Inverse background (dark sections) */
625
- readonly bgInverse: "#171717";
626
- /** Sidebar background */
627
- readonly bgSidebar: "#ffffff";
628
- /** Header background */
629
- readonly bgHeader: "#ffffff";
630
- /** Default border */
631
- readonly border: "#e5e5e5";
632
- /** Light/subtle border */
633
- readonly borderLight: "#f5f5f5";
634
- /** Emphasized border */
635
- readonly borderSecondary: "#d4d4d4";
636
- /** Focus ring border */
637
- readonly borderFocus: "#0ea5e9";
638
- /** Default link color */
639
- readonly link: "#0284c7";
640
- /** Link hover state */
641
- readonly linkHover: "#0369a1";
642
- };
643
- readonly spacing: {
644
- /** Horizontal page gutter */
645
- readonly pageGutter: 24;
646
- /** Internal card padding */
647
- readonly cardPadding: 16;
648
- /** Gap between page sections */
649
- readonly sectionGap: 24;
650
- /** Gap between sibling components */
651
- readonly componentGap: 12;
652
- /** Inline element gap (icon + label) */
653
- readonly inlineGap: 8;
654
- /** Per-component spacing presets */
655
- readonly component: {
656
- readonly button: {
657
- readonly paddingX: 16;
658
- readonly paddingY: 8;
659
- readonly gap: 8;
660
- };
661
- readonly input: {
662
- readonly paddingX: 12;
663
- readonly paddingY: 8;
664
- };
665
- readonly card: {
666
- readonly padding: 24;
667
- readonly gap: 16;
668
- };
669
- readonly form: {
670
- readonly fieldGap: 16;
671
- readonly sectionGap: 32;
672
- readonly labelGap: 8;
673
- };
674
- readonly modal: {
675
- readonly padding: 24;
676
- readonly gap: 16;
677
- };
678
- readonly table: {
679
- readonly cellPadding: 16;
680
- readonly headerPadding: 16;
681
- };
682
- };
683
- /** Layout-level spacing presets */
684
- readonly layout: {
685
- readonly container: {
686
- readonly paddingX: 16;
687
- readonly paddingY: 24;
688
- };
689
- readonly section: {
690
- readonly marginY: 48;
691
- readonly gap: 32;
692
- };
693
- readonly page: {
694
- readonly marginY: 64;
695
- readonly paddingX: 24;
696
- };
697
- };
698
- };
699
- readonly typography: {
700
- /** Default sans-serif font stack */
701
- readonly fontFamily: "Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
702
- /** Monospace font stack for code */
703
- readonly fontFamilyCode: "JetBrains Mono, Fira Code, Consolas, monospace";
704
- /** Serif font stack for editorial content */
705
- readonly fontFamilySerif: "Georgia, 'Times New Roman', serif";
706
- /** Display type scale — hero sections, feature numbers */
707
- readonly display: {
708
- readonly lg: {
709
- readonly fontSize: 48;
710
- readonly fontWeight: 700;
711
- readonly lineHeight: 1.2;
712
- readonly letterSpacing: "-0.025em";
713
- };
714
- readonly md: {
715
- readonly fontSize: 36;
716
- readonly fontWeight: 700;
717
- readonly lineHeight: 1.2;
718
- readonly letterSpacing: "0em";
719
- };
720
- readonly sm: {
721
- readonly fontSize: 30;
722
- readonly fontWeight: 600;
723
- readonly lineHeight: 1.2;
724
- readonly letterSpacing: "0em";
725
- };
726
- };
727
- /** Heading type scale — page/section/card headings */
728
- readonly heading: {
729
- readonly h1: {
730
- readonly fontSize: 30;
731
- readonly fontWeight: 700;
732
- readonly lineHeight: 1.2;
733
- };
734
- readonly h2: {
735
- readonly fontSize: 24;
736
- readonly fontWeight: 600;
737
- readonly lineHeight: 1.2;
738
- };
739
- readonly h3: {
740
- readonly fontSize: 20;
741
- readonly fontWeight: 600;
742
- readonly lineHeight: 1.5;
743
- };
744
- readonly h4: {
745
- readonly fontSize: 18;
746
- readonly fontWeight: 500;
747
- readonly lineHeight: 1.5;
748
- };
749
- };
750
- /** Body type scale — paragraphs, descriptions */
751
- readonly body: {
752
- readonly lg: {
753
- readonly fontSize: 18;
754
- readonly fontWeight: 400;
755
- readonly lineHeight: 1.7;
756
- };
757
- readonly md: {
758
- readonly fontSize: 16;
759
- readonly fontWeight: 400;
760
- readonly lineHeight: 1.5;
761
- };
762
- readonly sm: {
763
- readonly fontSize: 14;
764
- readonly fontWeight: 400;
765
- readonly lineHeight: 1.5;
766
- };
767
- };
768
- /** Caption — footnotes, timestamps, fine print */
769
- readonly caption: {
770
- readonly fontSize: 12;
771
- readonly fontWeight: 400;
772
- readonly lineHeight: 1.5;
773
- };
774
- /** Button label type scale */
775
- readonly button: {
776
- readonly lg: {
777
- readonly fontSize: 18;
778
- readonly fontWeight: 500;
779
- readonly lineHeight: 1.5;
780
- };
781
- readonly md: {
782
- readonly fontSize: 16;
783
- readonly fontWeight: 500;
784
- readonly lineHeight: 1.5;
785
- };
786
- readonly sm: {
787
- readonly fontSize: 14;
788
- readonly fontWeight: 500;
789
- readonly lineHeight: 1.5;
790
- };
791
- };
792
- };
793
- readonly radii: {
794
- /** Default component radius */
795
- readonly component: 4;
796
- /** Card/panel radius */
797
- readonly card: 8;
798
- /** Button radius */
799
- readonly button: 4;
800
- /** Input/select radius */
801
- readonly input: 4;
802
- /** Tag/badge radius */
803
- readonly tag: 2;
804
- /** Avatar — fully round */
805
- readonly avatar: 9999;
806
- };
807
- readonly shadows: {
808
- /** Card/panel elevation */
809
- readonly card: "0 1px 2px 0 rgb(0 0 0 / 0.05)";
810
- /** Dropdown/popover elevation */
811
- readonly dropdown: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)";
812
- /** Modal/dialog elevation */
813
- readonly modal: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)";
814
- };
815
- readonly layout: {
816
- /** Sidebar expanded width */
817
- readonly sidebarWidth: 240;
818
- /** Sidebar collapsed width */
819
- readonly sidebarCollapsedWidth: 72;
820
- /** Top header height */
821
- readonly headerHeight: 56;
822
- /** Maximum content area width */
823
- readonly contentMaxWidth: 1440;
824
- };
825
- };
826
- type SemanticColors = typeof semanticColors;
827
- type SemanticSpacing = typeof semanticSpacing;
828
- type SemanticTypography = typeof semanticTypography;
829
- type SemanticRadii = typeof semanticRadii;
830
- type SemanticShadows = typeof semanticShadows;
831
- type SemanticLayout = typeof semanticLayout;
832
- type SemanticTokens = typeof semanticTokens;
833
- /** Union of all semantic color keys. */
834
- type SemanticColorKey = keyof typeof semanticColors;
835
- /** Union of top-level semantic spacing keys. */
836
- type SemanticSpacingKey = keyof typeof semanticSpacing;
837
-
838
313
  /**
839
314
  * @module dark
840
315
  *
@@ -852,45 +327,47 @@ type SemanticSpacingKey = keyof typeof semanticSpacing;
852
327
  /**
853
328
  * Dark mode overrides for {@link semanticColors}.
854
329
  *
330
+ * Surface colors use the zinc scale to match Metronic v9.4.x dark mode.
331
+ * Brand and feedback colors remain on the GTCX primitive scales.
855
332
  * Structure intentionally mirrors `semanticColors` so the theme engine
856
333
  * can validate completeness at build time.
857
334
  */
858
335
  declare const darkSemanticColors: {
859
- readonly primary: "#38bdf8";
860
- readonly primaryHover: "#7dd3fc";
861
- readonly primaryActive: "#0ea5e9";
862
- readonly primaryBg: "#082f49";
863
- readonly secondary: "#c084fc";
864
- readonly secondaryHover: "#d8b4fe";
865
- readonly success: "#4ade80";
866
- readonly warning: "#fbbf24";
867
- readonly error: "#f87171";
868
- readonly info: "#60a5fa";
869
- readonly profit: "#4ade80";
870
- readonly loss: "#f87171";
871
- readonly approved: "#4ade80";
872
- readonly pending: "#fbbf24";
873
- readonly rejected: "#f87171";
874
- readonly secure: "#4ade80";
875
- readonly insecure: "#f87171";
336
+ readonly primary: "#1B84FF";
337
+ readonly primaryHover: "#5290FF";
338
+ readonly primaryActive: "#1270DC";
339
+ readonly primaryBg: "#01214D";
340
+ readonly secondary: "#6172f3";
341
+ readonly secondaryHover: "#8098f9";
342
+ readonly success: "#3DD986";
343
+ readonly warning: "#FBBF24";
344
+ readonly error: "#FF6089";
345
+ readonly info: "#9866EF";
346
+ readonly profit: "#3DD986";
347
+ readonly loss: "#FF6089";
348
+ readonly approved: "#3DD986";
349
+ readonly pending: "#FBBF24";
350
+ readonly rejected: "#FF6089";
351
+ readonly secure: "#3DD986";
352
+ readonly insecure: "#FF6089";
876
353
  readonly textPrimary: "#fafafa";
877
- readonly textSecondary: "#d4d4d4";
878
- readonly textTertiary: "#a3a3a3";
879
- readonly textMuted: "#737373";
880
- readonly textInverse: "#171717";
881
- readonly bgPage: "#0a0a0a";
882
- readonly bgSurface: "#171717";
883
- readonly bgSurfaceHover: "#262626";
884
- readonly bgSurfaceTertiary: "#404040";
885
- readonly bgInverse: "#fafafa";
886
- readonly bgSidebar: "#171717";
887
- readonly bgHeader: "#171717";
888
- readonly border: "#404040";
889
- readonly borderLight: "#262626";
890
- readonly borderSecondary: "#525252";
891
- readonly borderFocus: "#38bdf8";
892
- readonly link: "#38bdf8";
893
- readonly linkHover: "#7dd3fc";
354
+ readonly textSecondary: "#d4d4d8";
355
+ readonly textTertiary: "#a1a1aa";
356
+ readonly textMuted: "#71717a";
357
+ readonly textInverse: "#071437";
358
+ readonly bgPage: "#09090b";
359
+ readonly bgSurface: "#18181b";
360
+ readonly bgSurfaceHover: "#27272a";
361
+ readonly bgSurfaceTertiary: "#3f3f46";
362
+ readonly bgInverse: "#ffffff";
363
+ readonly bgSidebar: "#18181b";
364
+ readonly bgHeader: "#09090b";
365
+ readonly border: "#3f3f46";
366
+ readonly borderLight: "#27272a";
367
+ readonly borderSecondary: "#52525b";
368
+ readonly borderFocus: "#1B84FF";
369
+ readonly link: "#1B84FF";
370
+ readonly linkHover: "#5290FF";
894
371
  };
895
372
  /**
896
373
  * Legacy dark colors export.
@@ -901,19 +378,140 @@ declare const darkSemanticColors: {
901
378
  declare const darkColors: {
902
379
  readonly text: {
903
380
  readonly primary: "#fafafa";
904
- readonly secondary: "#d4d4d4";
905
- readonly tertiary: "#a3a3a3";
381
+ readonly secondary: "#d4d4d8";
382
+ readonly tertiary: "#a1a1aa";
906
383
  };
907
384
  readonly background: {
908
- readonly primary: "#0a0a0a";
909
- readonly secondary: "#171717";
910
- readonly tertiary: "#404040";
385
+ readonly primary: "#09090b";
386
+ readonly secondary: "#18181b";
387
+ readonly tertiary: "#3f3f46";
911
388
  };
912
389
  readonly border: {
913
- readonly primary: "#404040";
914
- readonly secondary: "#525252";
390
+ readonly primary: "#3f3f46";
391
+ readonly secondary: "#52525b";
915
392
  };
916
393
  };
917
394
  type DarkSemanticColors = typeof darkSemanticColors;
918
395
 
919
- export { type BorderRadiusPrimitives, type BreakpointKey, type BreakpointPrimitives, type ColorPrimitives, type ColorScaleKey, type ColorShade, type DarkSemanticColors, type FocusPrimitives, type FontFamilyPrimitives, type FontSizePrimitives, type FontWeightPrimitives, type LetterSpacingPrimitives, type LineHeightPrimitives, type MotionPrimitives, type OpacityPrimitives, type SemanticColorKey, type SemanticColors, type SemanticLayout, type SemanticRadii, type SemanticShadows, type SemanticSpacing, type SemanticSpacingKey, type SemanticTokens, type SemanticTypography, type ShadowPrimitives, type SpacingPrimitives, type TransitionPrimitives, type ZIndexPrimitives, borderRadiusPrimitives, breakpointPrimitives, colorPrimitives, darkColors, darkSemanticColors, focusPrimitives, fontFamilyPrimitives, fontSizePrimitives, fontWeightPrimitives, letterSpacingPrimitives, lineHeightPrimitives, motionPrimitives, opacityPrimitives, semanticColors, semanticLayout, semanticRadii, semanticShadows, semanticSpacing, semanticTokens, semanticTypography, shadowPrimitives, spacingPrimitives, transitionPrimitives, zIndexPrimitives };
396
+ /**
397
+ * @module theme
398
+ *
399
+ * Theme factory for generating CSS custom properties from token overrides.
400
+ * Bridges @gtcx/tokens primitives to the Metronic/Tailwind v4 CSS variable
401
+ * system used by @gtcx/ui components.
402
+ *
403
+ * Usage:
404
+ * ```ts
405
+ * import { createTheme, brands } from '@gtcx/tokens';
406
+ *
407
+ * // Default GTCX theme
408
+ * const css = createTheme();
409
+ *
410
+ * // Brand variant
411
+ * const agxCss = createTheme(brands.agx);
412
+ *
413
+ * // Custom theme
414
+ * const custom = createTheme({ primary: '#FF6600' });
415
+ * ```
416
+ */
417
+ interface BrandConfig {
418
+ name: string;
419
+ primary: string;
420
+ primaryForeground?: string;
421
+ secondary?: string;
422
+ secondaryForeground?: string;
423
+ accent?: string;
424
+ accentForeground?: string;
425
+ destructive?: string;
426
+ chart1?: string;
427
+ chart2?: string;
428
+ chart3?: string;
429
+ chart4?: string;
430
+ chart5?: string;
431
+ }
432
+ /** GTCX ecosystem brand palettes. */
433
+ declare const brands: {
434
+ readonly gtcx: {
435
+ readonly name: "GTCX";
436
+ readonly primary: "#1B84FF";
437
+ readonly chart1: "#1B84FF";
438
+ readonly chart2: "#17C653";
439
+ readonly chart3: "#F6B100";
440
+ readonly chart4: "#F8285A";
441
+ readonly chart5: "#7239EA";
442
+ };
443
+ readonly agx: {
444
+ readonly name: "AGX";
445
+ readonly primary: "#C5A028";
446
+ readonly chart1: "#C5A028";
447
+ readonly chart2: "#8B7020";
448
+ readonly chart3: "#E5C33C";
449
+ readonly chart4: "#F8285A";
450
+ readonly chart5: "#A08620";
451
+ };
452
+ readonly crx: {
453
+ readonly name: "CRX";
454
+ readonly primary: "#00B894";
455
+ readonly chart1: "#00B894";
456
+ readonly chart2: "#00A383";
457
+ readonly chart3: "#55D6B8";
458
+ readonly chart4: "#F8285A";
459
+ readonly chart5: "#009B77";
460
+ };
461
+ readonly sgx: {
462
+ readonly name: "SGX";
463
+ readonly primary: "#6C5CE7";
464
+ readonly chart1: "#6C5CE7";
465
+ readonly chart2: "#5A4BD1";
466
+ readonly chart3: "#8E7FF0";
467
+ readonly chart4: "#F8285A";
468
+ readonly chart5: "#4834D4";
469
+ };
470
+ readonly pathways: {
471
+ readonly name: "Pathways";
472
+ readonly primary: "#0984E3";
473
+ readonly chart1: "#0984E3";
474
+ readonly chart2: "#0773C5";
475
+ readonly chart3: "#3DA4F0";
476
+ readonly chart4: "#F8285A";
477
+ readonly chart5: "#0660A7";
478
+ };
479
+ };
480
+ type BrandKey = keyof typeof brands;
481
+ interface ThemeOptions {
482
+ /** Brand primary color — overrides --primary and --ring */
483
+ primary?: string;
484
+ /** Foreground for primary backgrounds */
485
+ primaryForeground?: string;
486
+ /** Destructive/error color */
487
+ destructive?: string;
488
+ /** Chart color overrides */
489
+ chart1?: string;
490
+ chart2?: string;
491
+ chart3?: string;
492
+ chart4?: string;
493
+ chart5?: string;
494
+ /** Border radius base value */
495
+ radius?: string;
496
+ }
497
+ /**
498
+ * Generate CSS custom property declarations for a theme.
499
+ *
500
+ * Returns an object of CSS variable key-value pairs suitable for
501
+ * injection into `:root` or a `style` attribute.
502
+ *
503
+ * @param options - Brand config or custom overrides. Omit for Metronic defaults.
504
+ */
505
+ declare function createTheme(options?: ThemeOptions | BrandConfig): {
506
+ light: Record<string, string>;
507
+ dark: Record<string, string>;
508
+ };
509
+ /**
510
+ * Generate a CSS string from theme variables.
511
+ *
512
+ * @param options - Brand config or custom overrides.
513
+ * @returns CSS string with :root and .dark selectors.
514
+ */
515
+ declare function createThemeCSS(options?: ThemeOptions | BrandConfig): string;
516
+
517
+ export { type BorderRadiusPrimitives, type BrandConfig, type BrandKey, type BreakpointKey, type BreakpointPrimitives, type ColorPrimitives, type ColorScaleKey, type ColorShade, type DarkSemanticColors, type FocusPrimitives, type FontFamilyPrimitives, type FontSizePrimitives, type FontWeightPrimitives, type LetterSpacingPrimitives, type LineHeightPrimitives, type MotionPrimitives, type OpacityPrimitives, type ShadowPrimitives, type SpacingPrimitives, type ThemeOptions, type TransitionPrimitives, type ZIndexPrimitives, borderRadiusPrimitives, brands, breakpointPrimitives, colorPrimitives, createTheme, createThemeCSS, darkColors, darkSemanticColors, focusPrimitives, fontFamilyPrimitives, fontSizePrimitives, fontWeightPrimitives, letterSpacingPrimitives, lineHeightPrimitives, motionPrimitives, opacityPrimitives, shadowPrimitives, spacingPrimitives, transitionPrimitives, zIndexPrimitives };