@camp2gether/c2g-ui 0.0.7
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/README.md +95 -0
- package/charts/index.d.ts +199 -0
- package/fesm2022/camp2gether-c2g-ui-beach-animation-ipi3OoKW.mjs +54156 -0
- package/fesm2022/camp2gether-c2g-ui-beach-animation-ipi3OoKW.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-camping-animation-DY6XWXyF.mjs +35807 -0
- package/fesm2022/camp2gether-c2g-ui-camping-animation-DY6XWXyF.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-car-animation-DnDp7WfG.mjs +45189 -0
- package/fesm2022/camp2gether-c2g-ui-car-animation-DnDp7WfG.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-car-driving-landscape-animation-CawNeMKD.mjs +43833 -0
- package/fesm2022/camp2gether-c2g-ui-car-driving-landscape-animation-CawNeMKD.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-cat-love-animation-ewC7fZyY.mjs +30789 -0
- package/fesm2022/camp2gether-c2g-ui-cat-love-animation-ewC7fZyY.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-charts.mjs +404 -0
- package/fesm2022/camp2gether-c2g-ui-charts.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-checklist-animation-DqUkcLqI.mjs +19868 -0
- package/fesm2022/camp2gether-c2g-ui-checklist-animation-DqUkcLqI.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-coffee-time-animation-DQilaE0A.mjs +6816 -0
- package/fesm2022/camp2gether-c2g-ui-coffee-time-animation-DQilaE0A.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-error-404-pdjg-EHb.mjs +49742 -0
- package/fesm2022/camp2gether-c2g-ui-error-404-pdjg-EHb.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-fishing-animation-DwE3IF-V.mjs +38941 -0
- package/fesm2022/camp2gether-c2g-ui-fishing-animation-DwE3IF-V.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-layout.mjs +768 -0
- package/fesm2022/camp2gether-c2g-ui-layout.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-maps.mjs +223 -0
- package/fesm2022/camp2gether-c2g-ui-maps.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-mountain-search-animation-TebM1gS4.mjs +69245 -0
- package/fesm2022/camp2gether-c2g-ui-mountain-search-animation-TebM1gS4.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-planning-animation-D8QSsZk6.mjs +28330 -0
- package/fesm2022/camp2gether-c2g-ui-planning-animation-D8QSsZk6.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-presets.mjs +2855 -0
- package/fesm2022/camp2gether-c2g-ui-presets.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-share-animation-qgqs-k59.mjs +59129 -0
- package/fesm2022/camp2gether-c2g-ui-share-animation-qgqs-k59.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-summer-camp-animation-DPzirVNH.mjs +89317 -0
- package/fesm2022/camp2gether-c2g-ui-summer-camp-animation-DPzirVNH.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-theme.mjs +479 -0
- package/fesm2022/camp2gether-c2g-ui-theme.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-thinking-animation--X3er_pf.mjs +27929 -0
- package/fesm2022/camp2gether-c2g-ui-thinking-animation--X3er_pf.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-walking-avocado-animation-CQMU2C9-.mjs +4064 -0
- package/fesm2022/camp2gether-c2g-ui-walking-avocado-animation-CQMU2C9-.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-walking-orange-animation-CTJniCsF.mjs +3113 -0
- package/fesm2022/camp2gether-c2g-ui-walking-orange-animation-CTJniCsF.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-weather-partly-cloudy-animation-Cnw3W4cS.mjs +1731 -0
- package/fesm2022/camp2gether-c2g-ui-weather-partly-cloudy-animation-Cnw3W4cS.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui.mjs +2099 -0
- package/fesm2022/camp2gether-c2g-ui.mjs.map +1 -0
- package/index.d.ts +578 -0
- package/layout/index.d.ts +443 -0
- package/maps/index.d.ts +62 -0
- package/package.json +51 -0
- package/presets/index.d.ts +1437 -0
- package/src/lib/styles/design-tokens.css +153 -0
- package/src/lib/styles/themes.scss +346 -0
- package/theme/index.d.ts +63 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
/* Colors */
|
|
3
|
+
--c2g-color-bg-base: #f8f6f3;
|
|
4
|
+
--c2g-color-bg-secondary: #efe9e0;
|
|
5
|
+
--c2g-color-bg-tertiary: #e1d9ce;
|
|
6
|
+
--c2g-color-surface: #ffffff;
|
|
7
|
+
--c2g-color-surface-glass: rgba(255, 255, 255, 0.95);
|
|
8
|
+
--c2g-color-primary: #ff6b35;
|
|
9
|
+
--c2g-color-primary-light: #fff4f0;
|
|
10
|
+
--c2g-color-primary-dark: #e55623;
|
|
11
|
+
--c2g-color-primary-container: #ffede6;
|
|
12
|
+
--c2g-color-on-primary-container: #4a1800;
|
|
13
|
+
--c2g-color-primary-rgb: 255, 107, 53;
|
|
14
|
+
--c2g-color-secondary: #4ecdc4;
|
|
15
|
+
--c2g-color-secondary-light: #7ed8d2;
|
|
16
|
+
--c2g-color-secondary-dark: #3ba99f;
|
|
17
|
+
--c2g-color-secondary-container: #e5f9f7;
|
|
18
|
+
--c2g-color-tertiary: #ffb347;
|
|
19
|
+
--c2g-color-accent-light: #ffe570;
|
|
20
|
+
--c2g-color-accent-dark: #f4c430;
|
|
21
|
+
--c2g-color-success: #95e1d3;
|
|
22
|
+
--c2g-color-warning: #ffb347;
|
|
23
|
+
--c2g-color-error: #ff6b6b;
|
|
24
|
+
--c2g-color-info: #74c0fc;
|
|
25
|
+
--c2g-color-neutral-50: #f8f6f3;
|
|
26
|
+
--c2g-color-neutral-100: #efe9e0;
|
|
27
|
+
--c2g-color-neutral-200: #e1d9ce;
|
|
28
|
+
--c2g-color-neutral-300: #d1c4b5;
|
|
29
|
+
--c2g-color-neutral-400: #b8a89b;
|
|
30
|
+
--c2g-color-neutral-500: #98877a;
|
|
31
|
+
--c2g-color-neutral-600: #6b5e52;
|
|
32
|
+
--c2g-color-neutral-700: #4a423b;
|
|
33
|
+
--c2g-color-neutral-800: #2f2b27;
|
|
34
|
+
--c2g-color-neutral-900: #1a1714;
|
|
35
|
+
--c2g-color-text-primary: #1a1714;
|
|
36
|
+
--c2g-color-text-secondary: #4a423b;
|
|
37
|
+
--c2g-color-text-muted: #6b5e52;
|
|
38
|
+
--c2g-color-outline: #d1c4b5;
|
|
39
|
+
--c2g-color-outline-variant: #e1d9ce;
|
|
40
|
+
--c2g-color-border-subtle: rgba(74, 66, 59, 0.18);
|
|
41
|
+
--c2g-color-border-soft: rgba(74, 66, 59, 0.12);
|
|
42
|
+
--c2g-color-accent: #ff6b35;
|
|
43
|
+
--c2g-color-focus: #e55623;
|
|
44
|
+
--c2g-color-button-primary: #ff6b35;
|
|
45
|
+
--c2g-color-button-primary-hover: #e55623;
|
|
46
|
+
--c2g-color-button-secondary: #4ecdc4;
|
|
47
|
+
--c2g-color-button-secondary-hover: #3ba99f;
|
|
48
|
+
--c2g-color-button-secondary-text: #1a1714;
|
|
49
|
+
--c2g-color-button-primary-text: #1a1714;
|
|
50
|
+
--c2g-color-button-ghost-hover: #ffe0d6;
|
|
51
|
+
|
|
52
|
+
/* Map marker activity/status colors */
|
|
53
|
+
--c2g-activity-water: #1976d2;
|
|
54
|
+
--c2g-activity-forest: #2e7d32;
|
|
55
|
+
--c2g-activity-mountain: #6d4c41;
|
|
56
|
+
--c2g-activity-desert: #f9a825;
|
|
57
|
+
--c2g-activity-urban: #546e7a;
|
|
58
|
+
--c2g-activity-adventure: #8e24aa;
|
|
59
|
+
--c2g-activity-point-of-interest: #d81b60;
|
|
60
|
+
--c2g-tour-declined: #b71c1c;
|
|
61
|
+
--c2g-tour-completed: #2e7d32;
|
|
62
|
+
--c2g-tour-current: #ef6c00;
|
|
63
|
+
--c2g-tour-upcoming: #1565c0;
|
|
64
|
+
|
|
65
|
+
/* Typography */
|
|
66
|
+
--c2g-font-family-base: "Quicksand", "Segoe UI", sans-serif;
|
|
67
|
+
--c2g-font-size-xs: 0.75rem;
|
|
68
|
+
--c2g-font-size-sm: 0.875rem;
|
|
69
|
+
--c2g-font-size-md: 1rem;
|
|
70
|
+
--c2g-font-size-lg: 1.25rem;
|
|
71
|
+
--c2g-font-weight-semibold: 600;
|
|
72
|
+
--c2g-font-weight-bold: 700;
|
|
73
|
+
--c2g-font-weight-extrabold: 800;
|
|
74
|
+
--c2g-letter-spacing-tight: -0.02em;
|
|
75
|
+
--c2g-letter-spacing-wide: 0.1em;
|
|
76
|
+
|
|
77
|
+
/* Spacing */
|
|
78
|
+
--c2g-space-1: 0.25rem;
|
|
79
|
+
--c2g-space-2: 0.5rem;
|
|
80
|
+
--c2g-space-3: 0.75rem;
|
|
81
|
+
--c2g-space-4: 1rem;
|
|
82
|
+
--c2g-space-5: 1.25rem;
|
|
83
|
+
--c2g-space-6: 1.5rem;
|
|
84
|
+
|
|
85
|
+
/* Radius */
|
|
86
|
+
--c2g-radius-sm: 0.375rem;
|
|
87
|
+
--c2g-radius-md: 0.625rem;
|
|
88
|
+
--c2g-radius-lg: 0.75rem;
|
|
89
|
+
--c2g-radius-xl: 1.125rem;
|
|
90
|
+
|
|
91
|
+
/* Shadow */
|
|
92
|
+
--c2g-shadow-sm: 0 0 3px rgba(31, 28, 25, 0.06);
|
|
93
|
+
--c2g-shadow-md: 0 0 6px rgba(31, 28, 25, 0.08);
|
|
94
|
+
|
|
95
|
+
/* Motion */
|
|
96
|
+
--c2g-motion-duration-fast: 120ms;
|
|
97
|
+
--c2g-motion-duration-base: 200ms;
|
|
98
|
+
--c2g-motion-ease-standard: ease;
|
|
99
|
+
|
|
100
|
+
/* Z-index */
|
|
101
|
+
--c2g-z-index-base: 1;
|
|
102
|
+
--c2g-z-index-dropdown: 1000;
|
|
103
|
+
--c2g-z-index-sticky: 1100;
|
|
104
|
+
--c2g-z-index-overlay: 1200;
|
|
105
|
+
--c2g-z-index-modal: 1300;
|
|
106
|
+
--c2g-z-index-toast: 1400;
|
|
107
|
+
|
|
108
|
+
/* Breakpoints */
|
|
109
|
+
--c2g-breakpoint-sm: 36rem;
|
|
110
|
+
--c2g-breakpoint-md: 48rem;
|
|
111
|
+
--c2g-breakpoint-lg: 64rem;
|
|
112
|
+
--c2g-breakpoint-xl: 80rem;
|
|
113
|
+
|
|
114
|
+
/* Backward-compatible aliases used by existing components */
|
|
115
|
+
--c2g-glass-bg: var(--c2g-color-surface-glass);
|
|
116
|
+
|
|
117
|
+
/* Neutral color aliases (short form without -color- infix) */
|
|
118
|
+
--c2g-neutral-50: var(--c2g-color-neutral-50);
|
|
119
|
+
--c2g-neutral-100: var(--c2g-color-neutral-100);
|
|
120
|
+
--c2g-neutral-200: var(--c2g-color-neutral-200);
|
|
121
|
+
--c2g-neutral-300: var(--c2g-color-neutral-300);
|
|
122
|
+
--c2g-neutral-400: var(--c2g-color-neutral-400);
|
|
123
|
+
--c2g-neutral-500: var(--c2g-color-neutral-500);
|
|
124
|
+
--c2g-neutral-600: var(--c2g-color-neutral-600);
|
|
125
|
+
--c2g-neutral-700: var(--c2g-color-neutral-700);
|
|
126
|
+
--c2g-neutral-800: var(--c2g-color-neutral-800);
|
|
127
|
+
--c2g-neutral-900: var(--c2g-color-neutral-900);
|
|
128
|
+
|
|
129
|
+
/* Semantic space aliases */
|
|
130
|
+
--c2g-space-sm: var(--c2g-space-2);
|
|
131
|
+
--c2g-space-md: var(--c2g-space-4);
|
|
132
|
+
--c2g-space-lg: var(--c2g-space-6);
|
|
133
|
+
--c2g-space-xl: calc(var(--c2g-space-6) * 1.5);
|
|
134
|
+
|
|
135
|
+
/* Transition shorthand alias */
|
|
136
|
+
--c2g-transition-fast: var(--c2g-motion-duration-fast) var(--c2g-motion-ease-standard);
|
|
137
|
+
|
|
138
|
+
--c2g-primary: var(--c2g-color-primary);
|
|
139
|
+
--c2g-primary-light: var(--c2g-color-primary-light);
|
|
140
|
+
--c2g-primary-dark: var(--c2g-color-primary-dark);
|
|
141
|
+
--c2g-secondary: var(--c2g-color-secondary);
|
|
142
|
+
--c2g-secondary-light: var(--c2g-color-secondary-light);
|
|
143
|
+
--c2g-secondary-dark: var(--c2g-color-secondary-dark);
|
|
144
|
+
--c2g-accent: var(--c2g-color-tertiary);
|
|
145
|
+
--c2g-success: var(--c2g-color-success);
|
|
146
|
+
--c2g-warning: var(--c2g-color-warning);
|
|
147
|
+
--c2g-error: var(--c2g-color-error);
|
|
148
|
+
--c2g-info: var(--c2g-color-info);
|
|
149
|
+
--c2g-text-primary: var(--c2g-color-text-primary);
|
|
150
|
+
--c2g-text-secondary: var(--c2g-color-text-secondary);
|
|
151
|
+
--c2g-text-muted: var(--c2g-color-text-muted);
|
|
152
|
+
--spacing-3: var(--c2g-space-3);
|
|
153
|
+
}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// CAMP2GETHER THEME SYSTEM
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
// Universal theme variables that adapt to all theme modes
|
|
5
|
+
// Supports: light, dark, auto, high-contrast
|
|
6
|
+
// Uses C2G's warm color palette
|
|
7
|
+
|
|
8
|
+
// Base theme variables (always available)
|
|
9
|
+
:root {
|
|
10
|
+
// Animation and transitions
|
|
11
|
+
--c2g-transition-fast: var(--c2g-motion-duration-fast) var(--c2g-motion-ease-standard);
|
|
12
|
+
--c2g-transition-medium: 250ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
13
|
+
--c2g-transition-slow: 350ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
14
|
+
|
|
15
|
+
// Border radius (inherit from design tokens)
|
|
16
|
+
--c2g-radius-sm: var(--c2g-radius-sm);
|
|
17
|
+
--c2g-radius-md: var(--c2g-radius-md);
|
|
18
|
+
--c2g-radius-lg: var(--c2g-radius-lg);
|
|
19
|
+
--c2g-radius-xl: var(--c2g-radius-xl);
|
|
20
|
+
|
|
21
|
+
// Shadows (inherit from design tokens)
|
|
22
|
+
--c2g-shadow-sm: var(--c2g-shadow-sm);
|
|
23
|
+
--c2g-shadow-md: var(--c2g-shadow-md);
|
|
24
|
+
--c2g-shadow-lg: 0 10px 15px -3px rgba(31, 28, 25, 0.1), 0 4px 6px -2px rgba(31, 28, 25, 0.05);
|
|
25
|
+
--c2g-shadow-xl: 0 20px 25px -5px rgba(31, 28, 25, 0.1), 0 10px 10px -5px rgba(31, 28, 25, 0.04);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// ==========================================================================
|
|
29
|
+
// LIGHT THEME (Default - Uses C2G warm colors)
|
|
30
|
+
// ==========================================================================
|
|
31
|
+
body,
|
|
32
|
+
body.theme-light {
|
|
33
|
+
// Primary colors (C2G warm orange)
|
|
34
|
+
--c2g-theme-primary: var(--c2g-color-primary);
|
|
35
|
+
--c2g-theme-primary-dark: var(--c2g-color-primary-dark, #c0391a);
|
|
36
|
+
--c2g-theme-primary-hover: var(--c2g-color-primary-dark);
|
|
37
|
+
--c2g-theme-primary-container: var(--c2g-color-primary-container);
|
|
38
|
+
--c2g-theme-on-primary: #ffffff;
|
|
39
|
+
--c2g-theme-on-primary-container: var(--c2g-color-on-primary-container);
|
|
40
|
+
--c2g-theme-primary-shadow: rgba(255, 107, 53, 0.35);
|
|
41
|
+
--c2g-theme-primary-shadow-lg: rgba(255, 107, 53, 0.45);
|
|
42
|
+
|
|
43
|
+
// Secondary colors (C2G teal)
|
|
44
|
+
--c2g-theme-secondary: var(--c2g-color-secondary);
|
|
45
|
+
--c2g-theme-secondary-hover: var(--c2g-color-secondary-dark);
|
|
46
|
+
--c2g-theme-secondary-container: var(--c2g-color-secondary-container);
|
|
47
|
+
--c2g-theme-on-secondary: #ffffff;
|
|
48
|
+
--c2g-theme-on-secondary-container: var(--c2g-color-text-primary);
|
|
49
|
+
|
|
50
|
+
// Surface colors (C2G warm neutrals)
|
|
51
|
+
--c2g-theme-surface: var(--c2g-color-surface);
|
|
52
|
+
--c2g-theme-surface-container-lowest: var(--c2g-color-surface);
|
|
53
|
+
--c2g-theme-surface-container-low: var(--c2g-color-bg-base);
|
|
54
|
+
--c2g-theme-surface-container: var(--c2g-color-bg-secondary);
|
|
55
|
+
--c2g-theme-surface-container-high: var(--c2g-color-bg-tertiary);
|
|
56
|
+
--c2g-theme-surface-container-highest: var(--c2g-color-neutral-300);
|
|
57
|
+
--c2g-theme-on-surface: var(--c2g-color-text-primary);
|
|
58
|
+
--c2g-theme-on-surface-variant: var(--c2g-color-text-secondary);
|
|
59
|
+
|
|
60
|
+
// Background (C2G warm base)
|
|
61
|
+
--c2g-theme-background: var(--c2g-color-bg-base);
|
|
62
|
+
--c2g-theme-on-background: var(--c2g-color-text-primary);
|
|
63
|
+
|
|
64
|
+
// Error colors
|
|
65
|
+
--c2g-theme-error: var(--c2g-color-error);
|
|
66
|
+
--c2g-theme-error-container: #fff5f5;
|
|
67
|
+
--c2g-theme-on-error: #ffffff;
|
|
68
|
+
--c2g-theme-on-error-container: #7f1d1d;
|
|
69
|
+
|
|
70
|
+
// Success colors
|
|
71
|
+
--c2g-theme-success: var(--c2g-color-success);
|
|
72
|
+
--c2g-theme-success-container: #f0fdfa;
|
|
73
|
+
--c2g-theme-on-success: #ffffff;
|
|
74
|
+
--c2g-theme-on-success-container: #134e4a;
|
|
75
|
+
|
|
76
|
+
// Warning colors
|
|
77
|
+
--c2g-theme-warning: var(--c2g-color-warning);
|
|
78
|
+
--c2g-theme-warning-container: #fffbeb;
|
|
79
|
+
--c2g-theme-on-warning: #ffffff;
|
|
80
|
+
--c2g-theme-on-warning-container: #78350f;
|
|
81
|
+
|
|
82
|
+
// Outline colors
|
|
83
|
+
--c2g-theme-outline: var(--c2g-color-outline);
|
|
84
|
+
--c2g-theme-outline-variant: var(--c2g-color-outline-variant);
|
|
85
|
+
|
|
86
|
+
// Theme-specific shadows
|
|
87
|
+
--c2g-shadow-color: rgba(31, 28, 25, 0.1);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// ==========================================================================
|
|
91
|
+
// DARK THEME (C2G warm colors adapted for dark mode)
|
|
92
|
+
// ==========================================================================
|
|
93
|
+
body.theme-dark {
|
|
94
|
+
// Primary colors (brighter warm orange for dark)
|
|
95
|
+
--c2g-theme-primary: #ff8c5a;
|
|
96
|
+
--c2g-theme-primary-dark: #c0391a;
|
|
97
|
+
--c2g-theme-primary-hover: var(--c2g-color-primary);
|
|
98
|
+
--c2g-theme-primary-container: #4a1800;
|
|
99
|
+
--c2g-theme-on-primary: var(--c2g-color-neutral-900);
|
|
100
|
+
--c2g-theme-on-primary-container: #ffe0d6;
|
|
101
|
+
--c2g-theme-primary-shadow: rgba(255, 140, 90, 0.25);
|
|
102
|
+
--c2g-theme-primary-shadow-lg: rgba(255, 140, 90, 0.35);
|
|
103
|
+
|
|
104
|
+
// Secondary colors (lighter teal for dark)
|
|
105
|
+
--c2g-theme-secondary: #7ed8d2;
|
|
106
|
+
--c2g-theme-secondary-hover: var(--c2g-color-secondary-light);
|
|
107
|
+
--c2g-theme-secondary-container: #134e4a;
|
|
108
|
+
--c2g-theme-on-secondary: var(--c2g-color-neutral-900);
|
|
109
|
+
--c2g-theme-on-secondary-container: #a7f3d0;
|
|
110
|
+
|
|
111
|
+
// Surface colors (dark warm neutrals)
|
|
112
|
+
--c2g-theme-surface: var(--c2g-color-neutral-900);
|
|
113
|
+
--c2g-theme-surface-container-lowest: #0f0d0b;
|
|
114
|
+
--c2g-theme-surface-container-low: var(--c2g-color-neutral-800);
|
|
115
|
+
--c2g-theme-surface-container: var(--c2g-color-neutral-700);
|
|
116
|
+
--c2g-theme-surface-container-high: var(--c2g-color-neutral-600);
|
|
117
|
+
--c2g-theme-surface-container-highest: var(--c2g-color-neutral-500);
|
|
118
|
+
--c2g-theme-on-surface: var(--c2g-color-neutral-50);
|
|
119
|
+
--c2g-theme-on-surface-variant: var(--c2g-color-neutral-300);
|
|
120
|
+
|
|
121
|
+
// Background (darkest warm)
|
|
122
|
+
--c2g-theme-background: #0f0d0b;
|
|
123
|
+
--c2g-theme-on-background: var(--c2g-color-neutral-50);
|
|
124
|
+
|
|
125
|
+
// Error colors (adjusted for dark)
|
|
126
|
+
--c2g-theme-error: #ff9999;
|
|
127
|
+
--c2g-theme-error-container: #7f1d1d;
|
|
128
|
+
--c2g-theme-on-error: var(--c2g-color-neutral-900);
|
|
129
|
+
--c2g-theme-on-error-container: #fecaca;
|
|
130
|
+
|
|
131
|
+
// Success colors (adjusted for dark)
|
|
132
|
+
--c2g-theme-success: #a7f3d0;
|
|
133
|
+
--c2g-theme-success-container: #134e4a;
|
|
134
|
+
--c2g-theme-on-success: var(--c2g-color-neutral-900);
|
|
135
|
+
--c2g-theme-on-success-container: #d1fae5;
|
|
136
|
+
|
|
137
|
+
// Warning colors (adjusted for dark)
|
|
138
|
+
--c2g-theme-warning: #fcd34d;
|
|
139
|
+
--c2g-theme-warning-container: #78350f;
|
|
140
|
+
--c2g-theme-on-warning: var(--c2g-color-neutral-900);
|
|
141
|
+
--c2g-theme-on-warning-container: #fde68a;
|
|
142
|
+
|
|
143
|
+
// Outline colors
|
|
144
|
+
--c2g-theme-outline: var(--c2g-color-neutral-600);
|
|
145
|
+
--c2g-theme-outline-variant: var(--c2g-color-neutral-700);
|
|
146
|
+
|
|
147
|
+
// Theme-specific shadows
|
|
148
|
+
--c2g-shadow-color: rgba(0, 0, 0, 0.4);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// ==========================================================================
|
|
152
|
+
// HIGH CONTRAST THEME (WCAG AAA Compliant with C2G accent)
|
|
153
|
+
// ==========================================================================
|
|
154
|
+
body.theme-high-contrast {
|
|
155
|
+
// Primary colors - Maximum contrast with C2G orange
|
|
156
|
+
--c2g-theme-primary: #cc5529;
|
|
157
|
+
--c2g-theme-primary-dark: #7a2610;
|
|
158
|
+
--c2g-theme-primary-hover: #994020;
|
|
159
|
+
--c2g-theme-primary-container: #ffe6cc;
|
|
160
|
+
--c2g-theme-on-primary: #ffffff;
|
|
161
|
+
--c2g-theme-on-primary-container: #000000;
|
|
162
|
+
--c2g-theme-primary-shadow: rgba(0, 0, 0, 0.0);
|
|
163
|
+
--c2g-theme-primary-shadow-lg: rgba(0, 0, 0, 0.0);
|
|
164
|
+
|
|
165
|
+
// Secondary colors
|
|
166
|
+
--c2g-theme-secondary: #006666;
|
|
167
|
+
--c2g-theme-secondary-hover: #004444;
|
|
168
|
+
--c2g-theme-secondary-container: #ccffff;
|
|
169
|
+
--c2g-theme-on-secondary: #ffffff;
|
|
170
|
+
--c2g-theme-on-secondary-container: #000000;
|
|
171
|
+
|
|
172
|
+
// Surface colors - High contrast
|
|
173
|
+
--c2g-theme-surface: #ffffff;
|
|
174
|
+
--c2g-theme-surface-container-lowest: #ffffff;
|
|
175
|
+
--c2g-theme-surface-container-low: #f8f8f8;
|
|
176
|
+
--c2g-theme-surface-container: #f0f0f0;
|
|
177
|
+
--c2g-theme-surface-container-high: #e8e8e8;
|
|
178
|
+
--c2g-theme-surface-container-highest: #d0d0d0;
|
|
179
|
+
--c2g-theme-on-surface: #000000;
|
|
180
|
+
--c2g-theme-on-surface-variant: #333333;
|
|
181
|
+
|
|
182
|
+
// Background
|
|
183
|
+
--c2g-theme-background: #ffffff;
|
|
184
|
+
--c2g-theme-on-background: #000000;
|
|
185
|
+
|
|
186
|
+
// Error colors - High contrast
|
|
187
|
+
--c2g-theme-error: #cc0000;
|
|
188
|
+
--c2g-theme-error-container: #ffcccc;
|
|
189
|
+
--c2g-theme-on-error: #ffffff;
|
|
190
|
+
--c2g-theme-on-error-container: #000000;
|
|
191
|
+
|
|
192
|
+
// Success colors - High contrast
|
|
193
|
+
--c2g-theme-success: #006600;
|
|
194
|
+
--c2g-theme-success-container: #ccffcc;
|
|
195
|
+
--c2g-theme-on-success: #ffffff;
|
|
196
|
+
--c2g-theme-on-success-container: #000000;
|
|
197
|
+
|
|
198
|
+
// Warning colors - High contrast
|
|
199
|
+
--c2g-theme-warning: #cc6600;
|
|
200
|
+
--c2g-theme-warning-container: #ffe6cc;
|
|
201
|
+
--c2g-theme-on-warning: #ffffff;
|
|
202
|
+
--c2g-theme-on-warning-container: #000000;
|
|
203
|
+
|
|
204
|
+
// Outline colors - Strong borders
|
|
205
|
+
--c2g-theme-outline: #666666;
|
|
206
|
+
--c2g-theme-outline-variant: #999999;
|
|
207
|
+
|
|
208
|
+
// Enhanced shadows for better depth perception
|
|
209
|
+
--c2g-shadow-color: rgba(0, 0, 0, 0.5);
|
|
210
|
+
|
|
211
|
+
// High contrast specific enhancements
|
|
212
|
+
--c2g-focus-ring: 3px solid #cc5529;
|
|
213
|
+
--c2g-border-width: 2px;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// ==========================================================================
|
|
217
|
+
// AUTO THEME (Uses system preference with C2G colors)
|
|
218
|
+
// ==========================================================================
|
|
219
|
+
body.theme-auto {
|
|
220
|
+
@media (prefers-color-scheme: light) {
|
|
221
|
+
// Inherit light theme variables
|
|
222
|
+
--c2g-theme-primary: var(--c2g-color-primary);
|
|
223
|
+
--c2g-theme-primary-hover: var(--c2g-color-primary-dark);
|
|
224
|
+
--c2g-theme-primary-container: var(--c2g-color-primary-container);
|
|
225
|
+
--c2g-theme-on-primary: #ffffff;
|
|
226
|
+
--c2g-theme-on-primary-container: var(--c2g-color-on-primary-container);
|
|
227
|
+
--c2g-theme-secondary: var(--c2g-color-secondary);
|
|
228
|
+
--c2g-theme-secondary-hover: var(--c2g-color-secondary-dark);
|
|
229
|
+
--c2g-theme-secondary-container: var(--c2g-color-secondary-container);
|
|
230
|
+
--c2g-theme-on-secondary: #ffffff;
|
|
231
|
+
--c2g-theme-on-secondary-container: var(--c2g-color-text-primary);
|
|
232
|
+
--c2g-theme-surface: var(--c2g-color-surface);
|
|
233
|
+
--c2g-theme-surface-container-lowest: var(--c2g-color-surface);
|
|
234
|
+
--c2g-theme-surface-container-low: var(--c2g-color-bg-base);
|
|
235
|
+
--c2g-theme-surface-container: var(--c2g-color-bg-secondary);
|
|
236
|
+
--c2g-theme-surface-container-high: var(--c2g-color-bg-tertiary);
|
|
237
|
+
--c2g-theme-surface-container-highest: var(--c2g-color-neutral-300);
|
|
238
|
+
--c2g-theme-on-surface: var(--c2g-color-text-primary);
|
|
239
|
+
--c2g-theme-on-surface-variant: var(--c2g-color-text-secondary);
|
|
240
|
+
--c2g-theme-background: var(--c2g-color-bg-base);
|
|
241
|
+
--c2g-theme-on-background: var(--c2g-color-text-primary);
|
|
242
|
+
--c2g-theme-error: var(--c2g-color-error);
|
|
243
|
+
--c2g-theme-error-container: #fff5f5;
|
|
244
|
+
--c2g-theme-on-error: #ffffff;
|
|
245
|
+
--c2g-theme-on-error-container: #7f1d1d;
|
|
246
|
+
--c2g-theme-success: var(--c2g-color-success);
|
|
247
|
+
--c2g-theme-success-container: #f0fdfa;
|
|
248
|
+
--c2g-theme-on-success: #ffffff;
|
|
249
|
+
--c2g-theme-on-success-container: #134e4a;
|
|
250
|
+
--c2g-theme-warning: var(--c2g-color-warning);
|
|
251
|
+
--c2g-theme-warning-container: #fffbeb;
|
|
252
|
+
--c2g-theme-on-warning: #ffffff;
|
|
253
|
+
--c2g-theme-on-warning-container: #78350f;
|
|
254
|
+
--c2g-theme-outline: var(--c2g-color-outline);
|
|
255
|
+
--c2g-theme-outline-variant: var(--c2g-color-outline-variant);
|
|
256
|
+
--c2g-shadow-color: rgba(31, 28, 25, 0.1);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
@media (prefers-color-scheme: dark) {
|
|
260
|
+
// Inherit dark theme variables
|
|
261
|
+
--c2g-theme-primary: #ff8c5a;
|
|
262
|
+
--c2g-theme-primary-hover: var(--c2g-color-primary);
|
|
263
|
+
--c2g-theme-primary-container: #4a1800;
|
|
264
|
+
--c2g-theme-on-primary: var(--c2g-color-neutral-900);
|
|
265
|
+
--c2g-theme-on-primary-container: #ffe0d6;
|
|
266
|
+
--c2g-theme-secondary: #7ed8d2;
|
|
267
|
+
--c2g-theme-secondary-hover: var(--c2g-color-secondary-light);
|
|
268
|
+
--c2g-theme-secondary-container: #134e4a;
|
|
269
|
+
--c2g-theme-on-secondary: var(--c2g-color-neutral-900);
|
|
270
|
+
--c2g-theme-on-secondary-container: #a7f3d0;
|
|
271
|
+
--c2g-theme-surface: var(--c2g-color-neutral-900);
|
|
272
|
+
--c2g-theme-surface-container-lowest: #0f0d0b;
|
|
273
|
+
--c2g-theme-surface-container-low: var(--c2g-color-neutral-800);
|
|
274
|
+
--c2g-theme-surface-container: var(--c2g-color-neutral-700);
|
|
275
|
+
--c2g-theme-surface-container-high: var(--c2g-color-neutral-600);
|
|
276
|
+
--c2g-theme-surface-container-highest: var(--c2g-color-neutral-500);
|
|
277
|
+
--c2g-theme-on-surface: var(--c2g-color-neutral-50);
|
|
278
|
+
--c2g-theme-on-surface-variant: var(--c2g-color-neutral-300);
|
|
279
|
+
--c2g-theme-background: #0f0d0b;
|
|
280
|
+
--c2g-theme-on-background: var(--c2g-color-neutral-50);
|
|
281
|
+
--c2g-theme-error: #ff9999;
|
|
282
|
+
--c2g-theme-error-container: #7f1d1d;
|
|
283
|
+
--c2g-theme-on-error: var(--c2g-color-neutral-900);
|
|
284
|
+
--c2g-theme-on-error-container: #fecaca;
|
|
285
|
+
--c2g-theme-success: #a7f3d0;
|
|
286
|
+
--c2g-theme-success-container: #134e4a;
|
|
287
|
+
--c2g-theme-on-success: var(--c2g-color-neutral-900);
|
|
288
|
+
--c2g-theme-on-success-container: #d1fae5;
|
|
289
|
+
--c2g-theme-warning: #fcd34d;
|
|
290
|
+
--c2g-theme-warning-container: #78350f;
|
|
291
|
+
--c2g-theme-on-warning: var(--c2g-color-neutral-900);
|
|
292
|
+
--c2g-theme-on-warning-container: #fde68a;
|
|
293
|
+
--c2g-theme-outline: var(--c2g-color-neutral-600);
|
|
294
|
+
--c2g-theme-outline-variant: var(--c2g-color-neutral-700);
|
|
295
|
+
--c2g-shadow-color: rgba(0, 0, 0, 0.4);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// ==========================================================================
|
|
300
|
+
// ACCESSIBILITY ENHANCEMENTS
|
|
301
|
+
// ==========================================================================
|
|
302
|
+
// Enhanced focus indicators for all themes
|
|
303
|
+
body.theme-high-contrast {
|
|
304
|
+
*:focus-visible {
|
|
305
|
+
outline: var(--c2g-focus-ring, 2px solid var(--c2g-theme-primary));
|
|
306
|
+
outline-offset: 2px;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Stronger borders in high contrast mode
|
|
310
|
+
.mat-mdc-button,
|
|
311
|
+
.mat-mdc-card,
|
|
312
|
+
.mat-mdc-menu-panel {
|
|
313
|
+
border: var(--c2g-border-width, 1px) solid var(--c2g-theme-outline);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Reduced motion support
|
|
318
|
+
@media (prefers-reduced-motion: reduce) {
|
|
319
|
+
* {
|
|
320
|
+
animation-duration: 0.01ms !important;
|
|
321
|
+
animation-iteration-count: 1 !important;
|
|
322
|
+
transition-duration: 0.01ms !important;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// ==========================================================================
|
|
327
|
+
// THEME TRANSITION ANIMATIONS
|
|
328
|
+
// ==========================================================================
|
|
329
|
+
body {
|
|
330
|
+
transition:
|
|
331
|
+
background-color var(--c2g-transition-medium),
|
|
332
|
+
color var(--c2g-transition-medium);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// Smooth transitions for theme-aware components
|
|
336
|
+
.mat-mdc-card,
|
|
337
|
+
.mat-mdc-button,
|
|
338
|
+
.mat-mdc-menu-panel,
|
|
339
|
+
.action-card,
|
|
340
|
+
.dashboard-hero {
|
|
341
|
+
transition:
|
|
342
|
+
background-color var(--c2g-transition-medium),
|
|
343
|
+
color var(--c2g-transition-medium),
|
|
344
|
+
border-color var(--c2g-transition-medium),
|
|
345
|
+
box-shadow var(--c2g-transition-medium);
|
|
346
|
+
}
|
package/theme/index.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Provider } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
type ThemeMode = 'light' | 'dark' | 'auto' | 'high-contrast';
|
|
5
|
+
declare class ThemeService {
|
|
6
|
+
private readonly platformId;
|
|
7
|
+
private readonly destroyRef;
|
|
8
|
+
private readonly _currentTheme;
|
|
9
|
+
private readonly _isSystemDark;
|
|
10
|
+
private mediaQueryCleanup?;
|
|
11
|
+
readonly currentTheme: _angular_core.Signal<ThemeMode>;
|
|
12
|
+
readonly isSystemDark: _angular_core.Signal<boolean>;
|
|
13
|
+
readonly effectiveTheme: _angular_core.Signal<ThemeMode>;
|
|
14
|
+
readonly isLightTheme: _angular_core.Signal<boolean>;
|
|
15
|
+
readonly isDarkTheme: _angular_core.Signal<boolean>;
|
|
16
|
+
readonly isHighContrastTheme: _angular_core.Signal<boolean>;
|
|
17
|
+
constructor();
|
|
18
|
+
private initializeBrowserFeatures;
|
|
19
|
+
private getInitialTheme;
|
|
20
|
+
private getInitialSystemPreference;
|
|
21
|
+
private watchSystemPreference;
|
|
22
|
+
private applyThemeToDOM;
|
|
23
|
+
setTheme(theme: ThemeMode): void;
|
|
24
|
+
toggleTheme(): void;
|
|
25
|
+
resetToSystemPreference(): void;
|
|
26
|
+
getCurrentTheme(): ThemeMode;
|
|
27
|
+
getEffectiveTheme(): ThemeMode;
|
|
28
|
+
private cleanup;
|
|
29
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeService, never>;
|
|
30
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeService>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
declare class ThemeSwitcherComponent {
|
|
34
|
+
protected readonly themeService: ThemeService;
|
|
35
|
+
protected readonly currentTheme: _angular_core.Signal<ThemeMode>;
|
|
36
|
+
protected readonly themeIcon: _angular_core.Signal<string>;
|
|
37
|
+
protected readonly themeOptions: {
|
|
38
|
+
value: ThemeMode;
|
|
39
|
+
label: string;
|
|
40
|
+
icon: string;
|
|
41
|
+
}[];
|
|
42
|
+
protected selectTheme(theme: ThemeMode): void;
|
|
43
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeSwitcherComponent, never>;
|
|
44
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ThemeSwitcherComponent, "c2g-theme-switcher", never, {}, {}, never, never, true, never>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Providers for the C2G Theme system that includes all necessary CDK dependencies
|
|
49
|
+
*/
|
|
50
|
+
declare const C2G_THEME_PROVIDERS: Provider[];
|
|
51
|
+
/**
|
|
52
|
+
* Mock providers for testing or SSR environments where CDK might not be needed
|
|
53
|
+
*/
|
|
54
|
+
declare const C2G_THEME_MOCK_PROVIDERS: Provider[];
|
|
55
|
+
/**
|
|
56
|
+
* Smart provider factory that chooses appropriate providers based on environment
|
|
57
|
+
*/
|
|
58
|
+
declare function getC2GThemeProviders(): Provider[];
|
|
59
|
+
|
|
60
|
+
declare const C2G_TRANSLATIONS: Record<string, Record<string, unknown>>;
|
|
61
|
+
|
|
62
|
+
export { C2G_THEME_MOCK_PROVIDERS, C2G_THEME_PROVIDERS, C2G_TRANSLATIONS, ThemeService, ThemeSwitcherComponent, getC2GThemeProviders };
|
|
63
|
+
export type { ThemeMode };
|