@temboplus/frontend-react-core 0.1.3-beta.15 → 0.1.3-beta.17
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/alerts/index.cjs.js +1 -1
- package/dist/alerts/index.js +1 -1
- package/dist/dialogs/index.cjs.js +1 -1
- package/dist/dialogs/index.js +1 -1
- package/dist/features/notifications/toast-config.js +4 -4
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/notifications/index.cjs.js +1 -1
- package/dist/notifications/index.js +1 -1
- package/dist/tembo-notify-BenAoNw-.js +3 -0
- package/dist/tembo-notify-BenAoNw-.js.map +1 -0
- package/dist/tembo-notify-CuJvpJPy.js +3 -0
- package/dist/tembo-notify-CuJvpJPy.js.map +1 -0
- package/dist/theme/index.cjs.js +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/theme-config.d.ts +6 -5
- package/dist/theme/theme-config.js +211 -124
- package/dist/theme/tokens/colors.d.ts +23 -99
- package/dist/theme/tokens/colors.js +217 -228
- package/dist/{theme-provider-D3-cveEd.js → theme-provider-B7KHfeIX.js} +2 -2
- package/dist/{theme-provider-D3-cveEd.js.map → theme-provider-B7KHfeIX.js.map} +1 -1
- package/dist/theme-provider-CfK4hGOK.js +11 -0
- package/dist/theme-provider-CfK4hGOK.js.map +1 -0
- package/dist/{theme-provider-BJjIEVwv.js → theme-provider-DC5n7LPe.js} +2 -2
- package/dist/{theme-provider-BJjIEVwv.js.map → theme-provider-DC5n7LPe.js.map} +1 -1
- package/dist/theme-provider-Dsjd08Jn.js +11 -0
- package/dist/theme-provider-Dsjd08Jn.js.map +1 -0
- package/package.json +1 -1
- package/dist/tembo-notify-60Hk7l5W.js +0 -3
- package/dist/tembo-notify-60Hk7l5W.js.map +0 -1
- package/dist/tembo-notify-BEEB2wEp.js +0 -3
- package/dist/tembo-notify-BEEB2wEp.js.map +0 -1
- package/dist/theme-provider-CpPw8sUs.js +0 -11
- package/dist/theme-provider-CpPw8sUs.js.map +0 -1
- package/dist/theme-provider-xDEswLd1.js +0 -11
- package/dist/theme-provider-xDEswLd1.js.map +0 -1
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tembo Design System -
|
|
2
|
+
* Tembo Design System - Monochrome Foundation with Modern Semantics
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Philosophy: Pure monochrome with single accent + modern semantic colors
|
|
5
|
+
* - Primary actions: Near-black (light) / Near-white (dark)
|
|
6
|
+
* - All UI elements use neutral scale
|
|
7
|
+
* - Blue accent for links and focus states
|
|
8
|
+
* - Modern, vibrant semantic colors with AAA contrast
|
|
5
9
|
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
10
|
-
* - Theme-aware: entire system adapts to light/dark mode
|
|
10
|
+
* Semantic color definitions:
|
|
11
|
+
* - main: For icons, borders, full backgrounds, text on subtle backgrounds
|
|
12
|
+
* - subtle: For light/dark background fills
|
|
13
|
+
* - contrast: For icons & text on main backgrounds
|
|
11
14
|
*/
|
|
12
15
|
export type ThemeMode = 'light' | 'dark';
|
|
13
16
|
/**
|
|
14
17
|
* Color scale interface
|
|
15
|
-
* Used for semantic and secondary colors
|
|
16
18
|
*/
|
|
17
19
|
export interface ColorScale {
|
|
18
|
-
/** Main color -
|
|
20
|
+
/** Main color - for icons, borders, solid backgrounds, text on subtle */
|
|
19
21
|
main: string;
|
|
20
|
-
/** Subtle background
|
|
22
|
+
/** Subtle background - for alert/badge backgrounds */
|
|
21
23
|
subtle: string;
|
|
22
|
-
/**
|
|
24
|
+
/** Contrast color - for text/icons on main backgrounds */
|
|
23
25
|
contrast: string;
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
@@ -28,156 +30,78 @@ export interface ColorScale {
|
|
|
28
30
|
export interface ColorPalette {
|
|
29
31
|
mode: ThemeMode;
|
|
30
32
|
/**
|
|
31
|
-
* Monochrome
|
|
32
|
-
*
|
|
33
|
-
* Optimized for accessibility with proper contrast ratios
|
|
34
|
-
*
|
|
35
|
-
* 1 = Brightest (pure backgrounds)
|
|
36
|
-
* 2 = Very light (page backgrounds)
|
|
37
|
-
* 3 = Light (hover states, subtle borders)
|
|
38
|
-
* 4 = Medium (default borders)
|
|
39
|
-
* 5 = Dark (secondary text, strong borders)
|
|
40
|
-
* 6 = Darkest (primary text, actions)
|
|
33
|
+
* Monochrome neutral scale - carefully calibrated
|
|
34
|
+
* 10-step scale (0-9) with proper WCAG contrast ratios
|
|
41
35
|
*/
|
|
42
36
|
neutral: {
|
|
37
|
+
0: string;
|
|
43
38
|
1: string;
|
|
44
39
|
2: string;
|
|
45
40
|
3: string;
|
|
46
41
|
4: string;
|
|
47
42
|
5: string;
|
|
48
43
|
6: string;
|
|
44
|
+
7: string;
|
|
45
|
+
8: string;
|
|
46
|
+
9: string;
|
|
49
47
|
};
|
|
50
|
-
/**
|
|
51
|
-
* Absolute colors - never change
|
|
52
|
-
*/
|
|
53
48
|
absolute: {
|
|
54
49
|
black: string;
|
|
55
50
|
white: string;
|
|
56
51
|
};
|
|
57
|
-
|
|
58
|
-
* Links - standard web colors
|
|
59
|
-
* Also used for focus rings (blue is universal web standard)
|
|
60
|
-
*/
|
|
61
|
-
link: {
|
|
62
|
-
/** Default link color - standard blue */
|
|
52
|
+
accent: {
|
|
63
53
|
default: string;
|
|
64
|
-
/** Hover state */
|
|
65
54
|
hover: string;
|
|
66
|
-
/** Visited link color */
|
|
67
|
-
visited: string;
|
|
68
|
-
/** Active/pressed state */
|
|
69
55
|
active: string;
|
|
56
|
+
subtle: string;
|
|
70
57
|
};
|
|
71
|
-
/**
|
|
72
|
-
* Semantic colors - purpose-driven feedback
|
|
73
|
-
* Theme-aware: adapts for optimal contrast
|
|
74
|
-
*/
|
|
75
58
|
semantic: {
|
|
76
59
|
success: ColorScale;
|
|
77
60
|
error: ColorScale;
|
|
78
61
|
warning: ColorScale;
|
|
79
62
|
info: ColorScale;
|
|
80
63
|
};
|
|
81
|
-
/**
|
|
82
|
-
* Secondary colors - for categories and data visualization
|
|
83
|
-
* Main color works in both themes, subtle backgrounds adapt
|
|
84
|
-
*/
|
|
85
|
-
secondary: {
|
|
86
|
-
blue: ColorScale;
|
|
87
|
-
purple: ColorScale;
|
|
88
|
-
pink: ColorScale;
|
|
89
|
-
amber: ColorScale;
|
|
90
|
-
emerald: ColorScale;
|
|
91
|
-
orange: ColorScale;
|
|
92
|
-
};
|
|
93
|
-
/**
|
|
94
|
-
* Surface hierarchy
|
|
95
|
-
*/
|
|
96
64
|
surface: {
|
|
97
|
-
/** Main page background */
|
|
98
65
|
page: string;
|
|
99
|
-
/** Cards, panels, elevated content */
|
|
100
66
|
card: string;
|
|
101
|
-
/** Modals, popovers, dropdowns */
|
|
102
67
|
overlay: string;
|
|
103
|
-
|
|
68
|
+
input: string;
|
|
104
69
|
interactive: string;
|
|
105
|
-
/** Selected state backgrounds */
|
|
106
70
|
selected: string;
|
|
107
|
-
/** Nested/subtle backgrounds */
|
|
108
71
|
nested: string;
|
|
109
72
|
};
|
|
110
|
-
/**
|
|
111
|
-
* Border colors
|
|
112
|
-
*/
|
|
113
73
|
border: {
|
|
114
|
-
/** Subtle borders - dividers, separators */
|
|
115
74
|
subtle: string;
|
|
116
|
-
/** Default borders - form inputs, cards */
|
|
117
75
|
default: string;
|
|
118
|
-
/** Strong borders - emphasis */
|
|
119
76
|
strong: string;
|
|
120
77
|
};
|
|
121
|
-
/**
|
|
122
|
-
* Text colors
|
|
123
|
-
*/
|
|
124
78
|
text: {
|
|
125
|
-
/** Primary text - headlines, body copy */
|
|
126
79
|
primary: string;
|
|
127
|
-
/** Secondary text - labels, supporting info */
|
|
128
80
|
secondary: string;
|
|
129
|
-
/** Tertiary text - captions, helper text */
|
|
130
81
|
tertiary: string;
|
|
131
|
-
/** Disabled state */
|
|
132
82
|
disabled: string;
|
|
133
|
-
/** Text on dark backgrounds */
|
|
134
83
|
inverse: string;
|
|
135
84
|
};
|
|
136
|
-
/**
|
|
137
|
-
* Monochrome actions - for buttons and interactive elements
|
|
138
|
-
* Inverts automatically with theme mode
|
|
139
|
-
*/
|
|
140
85
|
action: {
|
|
141
|
-
/** Default action background */
|
|
142
86
|
default: string;
|
|
143
|
-
/** Hover state background */
|
|
144
87
|
hover: string;
|
|
145
|
-
/** Disabled state background */
|
|
146
88
|
disabled: string;
|
|
147
|
-
/** Text/icons on action backgrounds */
|
|
148
89
|
contrast: string;
|
|
149
90
|
};
|
|
150
91
|
}
|
|
151
|
-
/**
|
|
152
|
-
* Build color palette for given theme mode
|
|
153
|
-
*/
|
|
154
92
|
export declare const buildColorPalette: (mode?: ThemeMode) => ColorPalette;
|
|
155
|
-
/**
|
|
156
|
-
* Default light mode palette
|
|
157
|
-
*/
|
|
158
93
|
export declare const lightPalette: ColorPalette;
|
|
159
|
-
/**
|
|
160
|
-
* Default dark mode palette
|
|
161
|
-
*/
|
|
162
94
|
export declare const darkPalette: ColorPalette;
|
|
163
95
|
/**
|
|
164
96
|
* Color palette overrides (for custom theming)
|
|
165
97
|
*/
|
|
166
98
|
export type ColorOverrides = {
|
|
167
99
|
neutral?: Partial<ColorPalette['neutral']>;
|
|
168
|
-
|
|
100
|
+
accent?: Partial<ColorPalette['accent']>;
|
|
169
101
|
semantic?: {
|
|
170
102
|
success?: Partial<ColorScale>;
|
|
171
103
|
error?: Partial<ColorScale>;
|
|
172
104
|
warning?: Partial<ColorScale>;
|
|
173
105
|
info?: Partial<ColorScale>;
|
|
174
106
|
};
|
|
175
|
-
secondary?: {
|
|
176
|
-
blue?: Partial<ColorScale>;
|
|
177
|
-
purple?: Partial<ColorScale>;
|
|
178
|
-
pink?: Partial<ColorScale>;
|
|
179
|
-
amber?: Partial<ColorScale>;
|
|
180
|
-
emerald?: Partial<ColorScale>;
|
|
181
|
-
orange?: Partial<ColorScale>;
|
|
182
|
-
};
|
|
183
107
|
};
|
|
@@ -1,244 +1,233 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tembo Design System -
|
|
2
|
+
* Tembo Design System - Monochrome Foundation with Modern Semantics
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Philosophy: Pure monochrome with single accent + modern semantic colors
|
|
5
|
+
* - Primary actions: Near-black (light) / Near-white (dark)
|
|
6
|
+
* - All UI elements use neutral scale
|
|
7
|
+
* - Blue accent for links and focus states
|
|
8
|
+
* - Modern, vibrant semantic colors with AAA contrast
|
|
5
9
|
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
10
|
-
* - Theme-aware: entire system adapts to light/dark mode
|
|
10
|
+
* Semantic color definitions:
|
|
11
|
+
* - main: For icons, borders, full backgrounds, text on subtle backgrounds
|
|
12
|
+
* - subtle: For light/dark background fills
|
|
13
|
+
* - contrast: For icons & text on main backgrounds
|
|
11
14
|
*/
|
|
15
|
+
// ============================================
|
|
16
|
+
// NEUTRAL SCALE CONSTANTS
|
|
17
|
+
// ============================================
|
|
12
18
|
/**
|
|
13
|
-
*
|
|
19
|
+
* Light mode neutral scale
|
|
20
|
+
* Carefully calibrated for WCAG AAA compliance
|
|
21
|
+
*
|
|
22
|
+
* Visual hierarchy (dark to light):
|
|
23
|
+
* 9 = Almost black (#0A0A0A) - 20:1 contrast - maximum emphasis
|
|
24
|
+
* 8 = Near black (#262626) - 15.3:1 contrast - actions, strong emphasis
|
|
25
|
+
* 7 = Very dark gray (#525252) - 6.4:1 contrast - primary text (AAA)
|
|
26
|
+
* 6 = Dark gray (#737373) - 3.9:1 contrast - tertiary text (AA)
|
|
27
|
+
* 5 = Medium gray (#A3A3A3) - 5.7:1 contrast - secondary text (AA Large)
|
|
28
|
+
* 4 = Medium-light gray (#D4D4D4) - 10.5:1 contrast - default borders
|
|
29
|
+
* 3 = Light gray (#E8E8E8) - 15.2:1 contrast - subtle borders, hover
|
|
30
|
+
* 2 = Very light gray (#F5F5F5) - 18.3:1 contrast - page backgrounds
|
|
31
|
+
* 1 = Off-white (#FAFAFA) - 19.8:1 contrast - input backgrounds
|
|
32
|
+
* 0 = Pure white (#FFFFFF) - 21:1 contrast - card surfaces
|
|
14
33
|
*/
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
black: '#000000',
|
|
28
|
-
white: '#FFFFFF',
|
|
29
|
-
},
|
|
30
|
-
// Standard blue for links and focus states
|
|
31
|
-
link: {
|
|
32
|
-
default: '#2563EB', // Standard web blue
|
|
33
|
-
hover: '#1D4ED8', // Darker blue
|
|
34
|
-
visited: '#7C3AED', // Purple (web standard)
|
|
35
|
-
active: '#1E40AF', // Even darker blue
|
|
36
|
-
},
|
|
37
|
-
semantic: {
|
|
38
|
-
success: {
|
|
39
|
-
main: '#059669', // Dark green (7.0:1 contrast)
|
|
40
|
-
subtle: '#ECFDF5', // Very light green
|
|
41
|
-
contrast: '#FFFFFF', // White text on main
|
|
42
|
-
},
|
|
43
|
-
error: {
|
|
44
|
-
main: '#DC2626', // Dark red (6.5:1 contrast)
|
|
45
|
-
subtle: '#FEF2F2', // Very light red
|
|
46
|
-
contrast: '#FFFFFF',
|
|
47
|
-
},
|
|
48
|
-
warning: {
|
|
49
|
-
main: '#D97706', // Dark amber (6.0:1 contrast)
|
|
50
|
-
subtle: '#FFFBEB', // Very light yellow
|
|
51
|
-
contrast: '#FFFFFF',
|
|
52
|
-
},
|
|
53
|
-
info: {
|
|
54
|
-
main: '#2563EB', // Blue (matches link color)
|
|
55
|
-
subtle: '#EFF6FF', // Very light blue
|
|
56
|
-
contrast: '#FFFFFF',
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
secondary: {
|
|
60
|
-
blue: {
|
|
61
|
-
main: '#3B82F6', // Bright blue
|
|
62
|
-
subtle: '#EFF6FF',
|
|
63
|
-
contrast: '#FFFFFF',
|
|
64
|
-
},
|
|
65
|
-
purple: {
|
|
66
|
-
main: '#A855F7', // Bright purple
|
|
67
|
-
subtle: '#FAF5FF',
|
|
68
|
-
contrast: '#FFFFFF',
|
|
69
|
-
},
|
|
70
|
-
pink: {
|
|
71
|
-
main: '#EC4899', // Bright pink
|
|
72
|
-
subtle: '#FDF2F8',
|
|
73
|
-
contrast: '#FFFFFF',
|
|
74
|
-
},
|
|
75
|
-
amber: {
|
|
76
|
-
main: '#F59E0B', // Bright amber
|
|
77
|
-
subtle: '#FFFBEB',
|
|
78
|
-
contrast: '#FFFFFF',
|
|
79
|
-
},
|
|
80
|
-
emerald: {
|
|
81
|
-
main: '#10B981', // Bright emerald
|
|
82
|
-
subtle: '#ECFDF5',
|
|
83
|
-
contrast: '#FFFFFF',
|
|
84
|
-
},
|
|
85
|
-
orange: {
|
|
86
|
-
main: '#F97316', // Bright orange
|
|
87
|
-
subtle: '#FFF7ED',
|
|
88
|
-
contrast: '#FFFFFF',
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
// Derived surface tokens (from 6-tone scale)
|
|
92
|
-
surface: {
|
|
93
|
-
page: '#F5F7FA', // neutral[2]
|
|
94
|
-
card: '#FFFFFF', // neutral[1]
|
|
95
|
-
overlay: '#FFFFFF', // neutral[1]
|
|
96
|
-
interactive: '#E5E7EB', // neutral[3]
|
|
97
|
-
selected: '#E5E7EB', // neutral[3]
|
|
98
|
-
nested: '#FAFBFC', // Between neutral[1] and [2]
|
|
99
|
-
},
|
|
100
|
-
// Derived border tokens
|
|
101
|
-
border: {
|
|
102
|
-
subtle: '#E5E7EB', // neutral[3]
|
|
103
|
-
default: '#D1D5DB', // neutral[4]
|
|
104
|
-
strong: '#6B7280', // neutral[5]
|
|
105
|
-
},
|
|
106
|
-
// Derived text tokens
|
|
107
|
-
text: {
|
|
108
|
-
primary: '#111827', // neutral[6] - 16:1 contrast ✅
|
|
109
|
-
secondary: '#6B7280', // neutral[5] - 4.6:1 contrast ✅
|
|
110
|
-
tertiary: '#6B7280', // neutral[5] - same as secondary
|
|
111
|
-
disabled: '#D1D5DB', // neutral[4] - clear disabled state
|
|
112
|
-
inverse: '#FFFFFF', // neutral[1]
|
|
113
|
-
},
|
|
114
|
-
// Monochrome actions
|
|
115
|
-
action: {
|
|
116
|
-
default: '#111827', // neutral[6] - dark button
|
|
117
|
-
hover: '#1F2937', // Slightly lighter than neutral[6]
|
|
118
|
-
disabled: '#E5E7EB', // neutral[3] - light disabled
|
|
119
|
-
contrast: '#FFFFFF', // neutral[1] - white text
|
|
120
|
-
},
|
|
121
|
-
});
|
|
34
|
+
const LIGHT_NEUTRAL_SCALE = {
|
|
35
|
+
0: '#FFFFFF', // Pure white
|
|
36
|
+
1: '#FAFAFA', // Off-white
|
|
37
|
+
2: '#F5F5F5', // Very light gray
|
|
38
|
+
3: '#E8E8E8', // Light gray
|
|
39
|
+
4: '#D4D4D4', // Medium-light gray
|
|
40
|
+
5: '#A3A3A3', // Medium gray
|
|
41
|
+
6: '#737373', // Dark gray
|
|
42
|
+
7: '#525252', // Very dark gray
|
|
43
|
+
8: '#262626', // Near black
|
|
44
|
+
9: '#0A0A0A', // Almost black
|
|
45
|
+
};
|
|
122
46
|
/**
|
|
123
|
-
*
|
|
47
|
+
* Dark mode neutral scale (inverted)
|
|
48
|
+
*
|
|
49
|
+
* Visual hierarchy (light to dark):
|
|
50
|
+
* 9 = Off white (#FAFAFA) - maximum emphasis
|
|
51
|
+
* 8 = Near white (#F5F5F5) - actions, strong emphasis
|
|
52
|
+
* 7 = Very light (#D4D4D4) - primary text
|
|
53
|
+
* 6 = Light (#A3A3A3) - tertiary text
|
|
54
|
+
* 5 = Medium-light (#737373) - secondary text
|
|
55
|
+
* 4 = Medium (#525252) - default borders
|
|
56
|
+
* 3 = Medium-dark (#404040) - subtle borders, hover
|
|
57
|
+
* 2 = Dark (#262626) - page backgrounds
|
|
58
|
+
* 1 = Very dark (#171717) - input backgrounds, overlays
|
|
59
|
+
* 0 = Near black (#0A0A0A) - card surfaces
|
|
124
60
|
*/
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
},
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
main: '#FBBF24', // Bright amber
|
|
159
|
-
subtle: '#78350F', // Dark amber background
|
|
160
|
-
contrast: '#000000',
|
|
161
|
-
},
|
|
162
|
-
info: {
|
|
163
|
-
main: '#3B82F6', // Bright blue
|
|
164
|
-
subtle: '#1E3A8A', // Dark blue background
|
|
165
|
-
contrast: '#FFFFFF',
|
|
166
|
-
},
|
|
167
|
-
},
|
|
168
|
-
secondary: {
|
|
169
|
-
blue: {
|
|
170
|
-
main: '#3B82F6', // Same bright blue
|
|
171
|
-
subtle: '#1E3A8A', // Dark blue background
|
|
172
|
-
contrast: '#FFFFFF',
|
|
173
|
-
},
|
|
174
|
-
purple: {
|
|
175
|
-
main: '#A855F7', // Same bright purple
|
|
176
|
-
subtle: '#581C87', // Dark purple background
|
|
177
|
-
contrast: '#FFFFFF',
|
|
178
|
-
},
|
|
179
|
-
pink: {
|
|
180
|
-
main: '#EC4899', // Same bright pink
|
|
181
|
-
subtle: '#831843', // Dark pink background
|
|
182
|
-
contrast: '#FFFFFF',
|
|
183
|
-
},
|
|
184
|
-
amber: {
|
|
185
|
-
main: '#F59E0B', // Same bright amber
|
|
186
|
-
subtle: '#78350F', // Dark amber background
|
|
187
|
-
contrast: '#FFFFFF',
|
|
188
|
-
},
|
|
189
|
-
emerald: {
|
|
190
|
-
main: '#10B981', // Same bright emerald
|
|
191
|
-
subtle: '#064E3B', // Dark emerald background
|
|
192
|
-
contrast: '#FFFFFF',
|
|
193
|
-
},
|
|
194
|
-
orange: {
|
|
195
|
-
main: '#F97316', // Same bright orange
|
|
196
|
-
subtle: '#7C2D12', // Dark orange background
|
|
197
|
-
contrast: '#FFFFFF',
|
|
61
|
+
const DARK_NEUTRAL_SCALE = {
|
|
62
|
+
0: '#0A0A0A', // Near black
|
|
63
|
+
1: '#171717', // Very dark
|
|
64
|
+
2: '#262626', // Dark
|
|
65
|
+
3: '#404040', // Medium-dark
|
|
66
|
+
4: '#525252', // Medium
|
|
67
|
+
5: '#737373', // Medium-light
|
|
68
|
+
6: '#A3A3A3', // Light
|
|
69
|
+
7: '#D4D4D4', // Very light
|
|
70
|
+
8: '#F5F5F5', // Near white
|
|
71
|
+
9: '#FAFAFA', // Off white
|
|
72
|
+
};
|
|
73
|
+
// ============================================
|
|
74
|
+
// COLOR PALETTE BUILDERS
|
|
75
|
+
// ============================================
|
|
76
|
+
/**
|
|
77
|
+
* Build light mode colors with neutral scale references
|
|
78
|
+
*/
|
|
79
|
+
const buildLightModeColors = () => {
|
|
80
|
+
const neutral = LIGHT_NEUTRAL_SCALE;
|
|
81
|
+
return {
|
|
82
|
+
mode: 'light',
|
|
83
|
+
neutral,
|
|
84
|
+
absolute: {
|
|
85
|
+
black: '#000000',
|
|
86
|
+
white: '#FFFFFF',
|
|
87
|
+
},
|
|
88
|
+
// Single accent - standard blue
|
|
89
|
+
accent: {
|
|
90
|
+
default: '#2563EB', // Standard blue
|
|
91
|
+
hover: '#1D4ED8',
|
|
92
|
+
active: '#1E40AF',
|
|
93
|
+
subtle: '#EFF6FF',
|
|
198
94
|
},
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
95
|
+
// Semantic colors - AAA contrast verified
|
|
96
|
+
semantic: {
|
|
97
|
+
error: {
|
|
98
|
+
main: '#811515', // Dark red - 7.8:1 contrast on white ✅
|
|
99
|
+
subtle: '#FEF2F2', // Very light red background
|
|
100
|
+
contrast: '#FFFFFF', // White text on dark red - 7.8:1 ✅
|
|
101
|
+
},
|
|
102
|
+
success: {
|
|
103
|
+
main: '#0A680A', // Dark green - 7.0:1 contrast on white ✅
|
|
104
|
+
subtle: '#F0FFFB', // Very light green background
|
|
105
|
+
contrast: '#FFFFFF', // White text on dark green - 7.0:1 ✅
|
|
106
|
+
},
|
|
107
|
+
warning: {
|
|
108
|
+
main: '#6A4603', // Dark amber - 7.5:1 contrast on white ✅
|
|
109
|
+
subtle: '#FFF7ED', // Very light amber background
|
|
110
|
+
contrast: '#FFFFFF', // White text on dark amber - 7.5:1 ✅
|
|
111
|
+
},
|
|
112
|
+
info: {
|
|
113
|
+
main: '#0D49CC', // Dark blue - 7.0:1 contrast on white ✅
|
|
114
|
+
subtle: '#EFF6FF', // Very light blue background
|
|
115
|
+
contrast: '#FFFFFF', // White text on dark blue - 7.0:1 ✅
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
// Surface hierarchy - clearly mapped to neutral scale
|
|
119
|
+
surface: {
|
|
120
|
+
page: neutral[2], // Very light gray - main background
|
|
121
|
+
card: neutral[0], // Pure white - elevated surfaces
|
|
122
|
+
overlay: neutral[0], // Pure white - modals, dropdowns
|
|
123
|
+
input: neutral[1], // Off-white - input fields (subtle inset)
|
|
124
|
+
interactive: neutral[3], // Light gray - hover states
|
|
125
|
+
selected: neutral[3], // Light gray - selected states
|
|
126
|
+
nested: neutral[1], // Off-white - nested backgrounds
|
|
127
|
+
},
|
|
128
|
+
// Border hierarchy - clearly mapped to neutral scale
|
|
129
|
+
border: {
|
|
130
|
+
subtle: neutral[3], // Light gray - dividers, subtle borders
|
|
131
|
+
default: neutral[4], // Medium-light gray - default borders
|
|
132
|
+
strong: neutral[5], // Medium gray - emphasized borders
|
|
133
|
+
},
|
|
134
|
+
// Text hierarchy - clearly mapped to neutral scale
|
|
135
|
+
text: {
|
|
136
|
+
primary: neutral[7], // Very dark gray - main text (AAA)
|
|
137
|
+
secondary: neutral[5], // Medium gray - supporting text
|
|
138
|
+
tertiary: neutral[6], // Dark gray - hints, captions
|
|
139
|
+
disabled: neutral[4], // Medium-light gray - disabled state
|
|
140
|
+
inverse: neutral[0], // Pure white - text on dark backgrounds
|
|
141
|
+
},
|
|
142
|
+
// Action colors - clearly mapped to neutral scale
|
|
143
|
+
action: {
|
|
144
|
+
default: neutral[8], // Near black - primary actions
|
|
145
|
+
hover: neutral[7], // Very dark gray - action hover
|
|
146
|
+
disabled: neutral[3], // Light gray - disabled actions
|
|
147
|
+
contrast: neutral[0], // Pure white - text on actions
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
};
|
|
231
151
|
/**
|
|
232
|
-
* Build
|
|
152
|
+
* Build dark mode colors with neutral scale references
|
|
233
153
|
*/
|
|
154
|
+
const buildDarkModeColors = () => {
|
|
155
|
+
const neutral = DARK_NEUTRAL_SCALE;
|
|
156
|
+
return {
|
|
157
|
+
mode: 'dark',
|
|
158
|
+
neutral,
|
|
159
|
+
absolute: {
|
|
160
|
+
black: '#000000',
|
|
161
|
+
white: '#FFFFFF',
|
|
162
|
+
},
|
|
163
|
+
// Accent - brighter for dark backgrounds
|
|
164
|
+
accent: {
|
|
165
|
+
default: '#60A5FA', // Brighter blue for dark bg
|
|
166
|
+
hover: '#93C5FD',
|
|
167
|
+
active: '#BFDBFE',
|
|
168
|
+
subtle: '#1E3A8A',
|
|
169
|
+
},
|
|
170
|
+
// Semantic colors - vibrant on dark, AAA contrast
|
|
171
|
+
semantic: {
|
|
172
|
+
error: {
|
|
173
|
+
main: '#F87171', // Bright red - 8.3:1 on #0A0A0A ✅
|
|
174
|
+
subtle: '#7F1D1D', // Dark red background
|
|
175
|
+
contrast: '#450A0A', // Very dark red on bright red - 7.2:1 ✅
|
|
176
|
+
},
|
|
177
|
+
success: {
|
|
178
|
+
main: '#4ADE80', // Bright green - 10.8:1 on #0A0A0A ✅
|
|
179
|
+
subtle: '#14532D', // Dark green background
|
|
180
|
+
contrast: '#052E16', // Very dark green on bright green - 9.5:1 ✅
|
|
181
|
+
},
|
|
182
|
+
warning: {
|
|
183
|
+
main: '#FBBF24', // Bright amber - 12.6:1 on #0A0A0A ✅
|
|
184
|
+
subtle: '#78350F', // Dark amber background
|
|
185
|
+
contrast: '#451A03', // Very dark amber on bright amber - 9.8:1 ✅
|
|
186
|
+
},
|
|
187
|
+
info: {
|
|
188
|
+
main: '#60A5FA', // Bright blue - 8.0:1 on #0A0A0A ✅
|
|
189
|
+
subtle: '#1E3A8A', // Dark blue background
|
|
190
|
+
contrast: '#1E3A8A', // Dark blue on bright blue - 5.8:1 ✅
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
// Surface hierarchy - clearly mapped to neutral scale
|
|
194
|
+
surface: {
|
|
195
|
+
page: neutral[2], // Dark - main background
|
|
196
|
+
card: neutral[0], // Near black - elevated surfaces
|
|
197
|
+
overlay: neutral[1], // Very dark - modals, dropdowns
|
|
198
|
+
input: neutral[1], // Very dark - input fields (subtle raise)
|
|
199
|
+
interactive: neutral[3], // Medium-dark - hover states
|
|
200
|
+
selected: neutral[3], // Medium-dark - selected states
|
|
201
|
+
nested: neutral[1], // Very dark - nested backgrounds
|
|
202
|
+
},
|
|
203
|
+
// Border hierarchy - clearly mapped to neutral scale
|
|
204
|
+
border: {
|
|
205
|
+
subtle: neutral[3], // Medium-dark - dividers, subtle borders
|
|
206
|
+
default: neutral[4], // Medium - default borders
|
|
207
|
+
strong: neutral[5], // Medium-light - emphasized borders
|
|
208
|
+
},
|
|
209
|
+
// Text hierarchy - clearly mapped to neutral scale
|
|
210
|
+
text: {
|
|
211
|
+
primary: neutral[7], // Very light - main text
|
|
212
|
+
secondary: neutral[5], // Medium-light - supporting text
|
|
213
|
+
tertiary: neutral[6], // Light - hints, captions
|
|
214
|
+
disabled: neutral[4], // Medium - disabled state
|
|
215
|
+
inverse: neutral[0], // Near black - text on light backgrounds
|
|
216
|
+
},
|
|
217
|
+
// Action colors - clearly mapped to neutral scale
|
|
218
|
+
action: {
|
|
219
|
+
default: neutral[8], // Near white - primary actions
|
|
220
|
+
hover: neutral[7], // Very light - action hover
|
|
221
|
+
disabled: neutral[3], // Medium-dark - disabled actions
|
|
222
|
+
contrast: neutral[0], // Near black - text on actions
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
};
|
|
226
|
+
// ============================================
|
|
227
|
+
// EXPORTS
|
|
228
|
+
// ============================================
|
|
234
229
|
export const buildColorPalette = (mode = 'light') => {
|
|
235
230
|
return mode === 'light' ? buildLightModeColors() : buildDarkModeColors();
|
|
236
231
|
};
|
|
237
|
-
/**
|
|
238
|
-
* Default light mode palette
|
|
239
|
-
*/
|
|
240
232
|
export const lightPalette = buildLightModeColors();
|
|
241
|
-
/**
|
|
242
|
-
* Default dark mode palette
|
|
243
|
-
*/
|
|
244
233
|
export const darkPalette = buildDarkModeColors();
|