@temboplus/frontend-react-core 0.1.3-beta.10 → 0.1.3-beta.12
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/CloseCircleOutlined-CMilRURi.js +3 -0
- package/dist/CloseCircleOutlined-CMilRURi.js.map +1 -0
- package/dist/CloseCircleOutlined-CSHx89Jn.js +3 -0
- package/dist/CloseCircleOutlined-CSHx89Jn.js.map +1 -0
- package/dist/InfoCircleOutlined-DR9DmuN-.js +5 -0
- package/dist/InfoCircleOutlined-DR9DmuN-.js.map +1 -0
- package/dist/InfoCircleOutlined-Hx86sClq.js +5 -0
- package/dist/InfoCircleOutlined-Hx86sClq.js.map +1 -0
- package/dist/alerts/index.cjs.js +1 -1
- package/dist/alerts/index.cjs.js.map +1 -1
- package/dist/alerts/index.js +1 -1
- package/dist/alerts/index.js.map +1 -1
- package/dist/dialogs/index.cjs.js +3 -1
- package/dist/dialogs/index.cjs.js.map +1 -1
- package/dist/dialogs/index.js +3 -1
- package/dist/dialogs/index.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/notifications/index.cjs.js +1 -1
- package/dist/notifications/index.js +1 -1
- package/dist/providers.d.ts +2 -32
- package/dist/providers.js +3 -24
- package/dist/tembo-notify-BUN8_mKb.js +3 -0
- package/dist/tembo-notify-BUN8_mKb.js.map +1 -0
- package/dist/tembo-notify-D0uYvwZP.js +3 -0
- package/dist/tembo-notify-D0uYvwZP.js.map +1 -0
- package/dist/theme/deprecated/theme-provider.d.ts +100 -0
- package/dist/theme/deprecated/theme-provider.js +405 -0
- package/dist/theme/index.cjs.js +1 -1
- package/dist/theme/index.d.ts +3 -2
- package/dist/theme/index.js +1 -1
- package/dist/theme/theme-config.d.ts +6 -0
- package/dist/theme/theme-config.js +781 -0
- package/dist/theme/theme-provider.d.ts +14 -79
- package/dist/theme/theme-provider.js +24 -390
- package/dist/theme/tokens/color.d.ts +168 -0
- package/dist/theme/tokens/color.js +225 -0
- package/dist/theme/tokens/radius.d.ts +26 -0
- package/dist/theme/tokens/radius.js +17 -0
- package/dist/theme/tokens/shadow.d.ts +27 -0
- package/dist/theme/tokens/shadow.js +23 -0
- package/dist/theme/tokens/spacing.d.ts +47 -0
- package/dist/theme/tokens/spacing.js +32 -0
- package/dist/theme/tokens/typography.d.ts +43 -0
- package/dist/theme/tokens/typography.js +33 -0
- package/dist/theme-provider-BsQRkig_.js +11 -0
- package/dist/theme-provider-BsQRkig_.js.map +1 -0
- package/dist/theme-provider-C44BTeC4.js +11 -0
- package/dist/theme-provider-C44BTeC4.js.map +1 -0
- package/dist/validation/index.cjs.js.map +1 -1
- package/dist/validation/index.js.map +1 -1
- package/package.json +15 -16
- package/dist/InfoCircleOutlined-B7d2aRfV.js +0 -7
- package/dist/InfoCircleOutlined-B7d2aRfV.js.map +0 -1
- package/dist/InfoCircleOutlined-DYs90hdV.js +0 -7
- package/dist/InfoCircleOutlined-DYs90hdV.js.map +0 -1
- package/dist/ZoomOutOutlined-CW-jqBMI.js +0 -2
- package/dist/ZoomOutOutlined-CW-jqBMI.js.map +0 -1
- package/dist/ZoomOutOutlined-Pw8hpWWK.js +0 -2
- package/dist/ZoomOutOutlined-Pw8hpWWK.js.map +0 -1
- package/dist/tembo-notify-Bp14qngd.js +0 -2
- package/dist/tembo-notify-Bp14qngd.js.map +0 -1
- package/dist/tembo-notify-h5Xn66oA.js +0 -2
- package/dist/tembo-notify-h5Xn66oA.js.map +0 -1
- package/dist/theme-provider-Ca4P0Hcp.js +0 -11
- package/dist/theme-provider-Ca4P0Hcp.js.map +0 -1
- package/dist/theme-provider-RhAw3jw_.js +0 -11
- package/dist/theme-provider-RhAw3jw_.js.map +0 -1
- /package/dist/theme/{colors.d.ts → deprecated/colors.d.ts} +0 -0
- /package/dist/theme/{colors.js → deprecated/colors.js} +0 -0
- /package/dist/theme/{constants.d.ts → deprecated/constants.d.ts} +0 -0
- /package/dist/theme/{constants.js → deprecated/constants.js} +0 -0
|
@@ -1,99 +1,34 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type
|
|
3
|
-
import {
|
|
4
|
-
import { TemboUIConstants, TemboUIConstantsOverrides } from './constants.js';
|
|
2
|
+
import { type ThemeConfig } from 'antd';
|
|
3
|
+
import { ColorPalette, ThemeMode } from './tokens/color.js';
|
|
5
4
|
/**
|
|
6
|
-
*
|
|
5
|
+
* Theme context value
|
|
7
6
|
*/
|
|
8
|
-
export interface
|
|
9
|
-
colors:
|
|
10
|
-
constants: TemboUIConstants;
|
|
7
|
+
export interface TemboTheme {
|
|
8
|
+
colors: ColorPalette;
|
|
11
9
|
mode: ThemeMode;
|
|
12
10
|
}
|
|
13
11
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* // Basic usage
|
|
18
|
-
* <TemboThemeProvider>
|
|
19
|
-
* <App />
|
|
20
|
-
* </TemboThemeProvider>
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* // With dark mode
|
|
24
|
-
* <TemboThemeProvider mode="dark">
|
|
25
|
-
* <App />
|
|
26
|
-
* </TemboThemeProvider>
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* // With color overrides
|
|
30
|
-
* <TemboThemeProvider
|
|
31
|
-
* colors={{
|
|
32
|
-
* primary: { main: '#007bff' },
|
|
33
|
-
* action: { main: '#28a745' }
|
|
34
|
-
* }}
|
|
35
|
-
* >
|
|
36
|
-
* <App />
|
|
37
|
-
* </TemboThemeProvider>
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* // With all customizations
|
|
41
|
-
* <TemboThemeProvider
|
|
42
|
-
* mode="dark"
|
|
43
|
-
* colors={{ primary: { main: '#007bff' } }}
|
|
44
|
-
* constants={{ radius: { base: 8 } }}
|
|
45
|
-
* themeOverrides={{
|
|
46
|
-
* components: {
|
|
47
|
-
* Button: { controlHeight: 40 }
|
|
48
|
-
* }
|
|
49
|
-
* }}
|
|
50
|
-
* >
|
|
51
|
-
* <App />
|
|
52
|
-
* </TemboThemeProvider>
|
|
12
|
+
* Theme provider props
|
|
53
13
|
*/
|
|
54
14
|
export interface TemboThemeProviderProps {
|
|
55
15
|
children: React.ReactNode;
|
|
56
16
|
/** Theme mode - 'light' or 'dark' */
|
|
57
17
|
mode?: ThemeMode;
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
/** UI constants overrides - supports deep partial overrides */
|
|
61
|
-
constants?: TemboUIConstantsOverrides;
|
|
62
|
-
/** Raw Ant Design ThemeConfig overrides for advanced customization */
|
|
63
|
-
themeOverrides?: Partial<ThemeConfig>;
|
|
18
|
+
/** Raw Ant Design theme overrides (advanced usage) */
|
|
19
|
+
antdThemeOverrides?: Partial<ThemeConfig>;
|
|
64
20
|
}
|
|
65
21
|
/**
|
|
66
22
|
* TemboThemeProvider
|
|
67
23
|
*
|
|
68
|
-
* Wraps your application
|
|
69
|
-
*
|
|
70
|
-
* Supports light and dark mode through the mode prop.
|
|
71
|
-
*
|
|
72
|
-
* All child components can access theme values via the useTemboTheme() hook.
|
|
24
|
+
* Wraps your application with monochrome-first theming system.
|
|
25
|
+
* Supports seamless light/dark mode switching.
|
|
73
26
|
*/
|
|
74
27
|
export declare const TemboThemeProvider: React.FC<TemboThemeProviderProps>;
|
|
75
28
|
/**
|
|
76
|
-
* Hook to access
|
|
77
|
-
*
|
|
78
|
-
* Returns the merged color palette, UI constants, and current theme mode.
|
|
79
|
-
* Components should always use this hook instead of importing defaults directly.
|
|
80
|
-
*
|
|
81
|
-
* @returns Theme context containing colors, constants, and mode
|
|
82
|
-
*
|
|
83
|
-
* @example
|
|
84
|
-
* function MyComponent() {
|
|
85
|
-
* const { colors, constants, mode } = useTemboTheme();
|
|
29
|
+
* Hook to access current theme
|
|
86
30
|
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* color: colors.text.primary,
|
|
90
|
-
* padding: constants.spacing.md,
|
|
91
|
-
* borderRadius: constants.radius.base,
|
|
92
|
-
* backgroundColor: colors.neutral.lightest
|
|
93
|
-
* }}>
|
|
94
|
-
* Current theme: {mode}
|
|
95
|
-
* </div>
|
|
96
|
-
* );
|
|
97
|
-
* }
|
|
31
|
+
* Returns the active color palette and theme mode.
|
|
32
|
+
* Use this in components that need direct access to theme tokens.
|
|
98
33
|
*/
|
|
99
|
-
export declare const
|
|
34
|
+
export declare const useNewTemboTheme: () => TemboTheme;
|
|
@@ -1,404 +1,38 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { ConfigProvider } from 'antd';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
/**
|
|
7
|
-
* Internal React context carrying the active Tembo theme
|
|
8
|
-
*/
|
|
4
|
+
import { buildAntDTheme } from './theme-config.js';
|
|
5
|
+
import { buildColorPalette } from './tokens/color.js';
|
|
9
6
|
const TemboThemeContext = React.createContext({
|
|
10
|
-
colors: buildColorPalette(),
|
|
11
|
-
constants: buildUIConstants(),
|
|
7
|
+
colors: buildColorPalette('light'),
|
|
12
8
|
mode: 'light',
|
|
13
9
|
});
|
|
14
|
-
/**
|
|
15
|
-
* Build Ant Design theme configuration from Tembo tokens
|
|
16
|
-
* Maps semantic Tembo color palette and constants to Ant Design's token system
|
|
17
|
-
*
|
|
18
|
-
* @param palette - Complete Tembo color palette
|
|
19
|
-
* @param constants - Complete Tembo UI constants
|
|
20
|
-
* @param mode - Theme mode
|
|
21
|
-
* @param overrides - Optional raw Ant Design theme overrides
|
|
22
|
-
* @returns Ant Design ThemeConfig
|
|
23
|
-
*/
|
|
24
|
-
const buildAntDThemeConfig = (palette, constants, mode, overrides) => {
|
|
25
|
-
var _a, _b;
|
|
26
|
-
const baseTokens = {
|
|
27
|
-
// Primary colors
|
|
28
|
-
colorPrimary: palette.primary.main,
|
|
29
|
-
colorPrimaryHover: palette.primary.hover,
|
|
30
|
-
colorPrimaryActive: palette.primary.active,
|
|
31
|
-
colorPrimaryBorder: palette.primary.main,
|
|
32
|
-
// Text colors
|
|
33
|
-
colorText: palette.text.primary,
|
|
34
|
-
colorTextSecondary: palette.text.secondary,
|
|
35
|
-
colorTextTertiary: palette.text.tertiary,
|
|
36
|
-
colorTextQuaternary: palette.text.quaternary,
|
|
37
|
-
colorTextDisabled: palette.text.disabled,
|
|
38
|
-
// Background colors
|
|
39
|
-
colorBgBase: palette.surface.background,
|
|
40
|
-
colorBgContainer: palette.surface.main,
|
|
41
|
-
colorBgElevated: palette.surface.elevated,
|
|
42
|
-
colorBgLayout: palette.surface.background,
|
|
43
|
-
colorBgSpotlight: palette.surface.hover,
|
|
44
|
-
// Border colors
|
|
45
|
-
colorBorder: palette.border.main,
|
|
46
|
-
colorBorderSecondary: palette.border.light,
|
|
47
|
-
colorSplit: palette.border.divider,
|
|
48
|
-
// Success colors
|
|
49
|
-
colorSuccess: palette.success.main,
|
|
50
|
-
colorSuccessBg: palette.success.bg,
|
|
51
|
-
colorSuccessBorder: palette.success.border,
|
|
52
|
-
colorSuccessText: palette.success.text,
|
|
53
|
-
// Error colors
|
|
54
|
-
colorError: palette.error.main,
|
|
55
|
-
colorErrorBg: palette.error.bg,
|
|
56
|
-
colorErrorBorder: palette.error.border,
|
|
57
|
-
colorErrorText: palette.error.text,
|
|
58
|
-
// Warning colors
|
|
59
|
-
colorWarning: palette.warning.main,
|
|
60
|
-
colorWarningBg: palette.warning.bg,
|
|
61
|
-
colorWarningBorder: palette.warning.border,
|
|
62
|
-
colorWarningText: palette.warning.text,
|
|
63
|
-
// Info colors
|
|
64
|
-
colorInfo: palette.info.main,
|
|
65
|
-
colorInfoBg: palette.info.bg,
|
|
66
|
-
colorInfoBorder: palette.info.border,
|
|
67
|
-
colorInfoText: palette.info.text,
|
|
68
|
-
// Link colors
|
|
69
|
-
colorLink: palette.utility.link,
|
|
70
|
-
colorLinkHover: palette.utility.linkHover,
|
|
71
|
-
colorLinkActive: palette.utility.linkActive,
|
|
72
|
-
// Border radius
|
|
73
|
-
borderRadius: constants.radius.base,
|
|
74
|
-
borderRadiusLG: constants.radius.lg,
|
|
75
|
-
borderRadiusSM: constants.radius.sm,
|
|
76
|
-
borderRadiusXS: 6,
|
|
77
|
-
// Shadows
|
|
78
|
-
boxShadow: constants.shadow.base,
|
|
79
|
-
boxShadowSecondary: constants.shadow.card,
|
|
80
|
-
boxShadowTertiary: constants.shadow.elevated,
|
|
81
|
-
// Typography
|
|
82
|
-
fontFamily: constants.typography.fontFamily,
|
|
83
|
-
fontSize: constants.typography.fontSize.base,
|
|
84
|
-
fontSizeHeading1: 38,
|
|
85
|
-
fontSizeHeading2: 30,
|
|
86
|
-
fontSizeHeading3: 24,
|
|
87
|
-
fontSizeHeading4: 20,
|
|
88
|
-
fontSizeHeading5: constants.typography.fontSize.lg,
|
|
89
|
-
fontWeightStrong: constants.typography.fontWeight.medium,
|
|
90
|
-
lineHeight: constants.typography.lineHeight.base,
|
|
91
|
-
lineHeightHeading1: 1.21,
|
|
92
|
-
lineHeightHeading2: 1.27,
|
|
93
|
-
lineHeightHeading3: 1.33,
|
|
94
|
-
lineHeightHeading4: 1.4,
|
|
95
|
-
lineHeightHeading5: 1.5,
|
|
96
|
-
};
|
|
97
|
-
const baseTheme = {
|
|
98
|
-
token: baseTokens,
|
|
99
|
-
// algorithm: mode === 'dark' ? 'dark' : undefined,
|
|
100
|
-
components: {
|
|
101
|
-
Button: {
|
|
102
|
-
colorPrimary: palette.components.button.primary.bg,
|
|
103
|
-
colorPrimaryHover: palette.components.button.primary.hover,
|
|
104
|
-
colorPrimaryActive: palette.action.active,
|
|
105
|
-
colorPrimaryBorder: palette.components.button.primary.bg,
|
|
106
|
-
primaryColor: palette.components.button.primary.text,
|
|
107
|
-
colorBorder: palette.components.button.default.border,
|
|
108
|
-
colorBgContainer: palette.components.button.default.bg,
|
|
109
|
-
colorText: palette.components.button.default.text,
|
|
110
|
-
defaultBg: palette.components.button.default.bg,
|
|
111
|
-
defaultBorderColor: palette.components.button.default.border,
|
|
112
|
-
defaultColor: palette.components.button.default.text,
|
|
113
|
-
primaryShadow: 'none',
|
|
114
|
-
defaultShadow: 'none',
|
|
115
|
-
dangerShadow: 'none',
|
|
116
|
-
fontWeight: constants.typography.fontWeight.medium,
|
|
117
|
-
controlHeight: 32,
|
|
118
|
-
paddingContentHorizontal: constants.spacing.lg,
|
|
119
|
-
borderRadius: constants.radius.button,
|
|
120
|
-
borderRadiusLG: constants.radius.button,
|
|
121
|
-
borderRadiusSM: constants.radius.sm + 8,
|
|
122
|
-
},
|
|
123
|
-
Input: {
|
|
124
|
-
colorBgContainer: palette.components.input.bg,
|
|
125
|
-
colorBorder: palette.components.input.border,
|
|
126
|
-
hoverBorderColor: palette.components.input.borderHover,
|
|
127
|
-
activeBorderColor: palette.components.input.borderFocus,
|
|
128
|
-
colorPrimaryHover: palette.components.input.borderFocus,
|
|
129
|
-
colorTextPlaceholder: palette.components.input.placeholder,
|
|
130
|
-
borderRadius: constants.radius.input,
|
|
131
|
-
borderRadiusLG: constants.radius.base,
|
|
132
|
-
borderRadiusSM: constants.radius.sm,
|
|
133
|
-
},
|
|
134
|
-
Select: {
|
|
135
|
-
colorBgContainer: palette.components.input.bg,
|
|
136
|
-
colorBorder: palette.components.input.border,
|
|
137
|
-
colorTextPlaceholder: palette.components.input.placeholder,
|
|
138
|
-
colorPrimaryHover: palette.action.main,
|
|
139
|
-
hoverBorderColor: palette.components.input.borderHover,
|
|
140
|
-
activeBorderColor: palette.components.input.borderFocus,
|
|
141
|
-
optionSelectedBg: palette.action.main,
|
|
142
|
-
optionSelectedColor: palette.action.contrast,
|
|
143
|
-
optionActiveBg: palette.surface.hover,
|
|
144
|
-
colorBgElevated: palette.neutral.brightest,
|
|
145
|
-
controlItemBgHover: palette.surface.hover,
|
|
146
|
-
boxShadowSecondary: constants.shadow.elevated,
|
|
147
|
-
borderRadius: constants.radius.input,
|
|
148
|
-
borderRadiusLG: constants.radius.base,
|
|
149
|
-
borderRadiusSM: constants.radius.sm,
|
|
150
|
-
},
|
|
151
|
-
Checkbox: {
|
|
152
|
-
colorPrimary: palette.action.main,
|
|
153
|
-
colorPrimaryHover: palette.action.hover,
|
|
154
|
-
colorBorder: palette.border.strong,
|
|
155
|
-
borderRadiusSM: 6,
|
|
156
|
-
},
|
|
157
|
-
Radio: {
|
|
158
|
-
colorPrimary: palette.action.main,
|
|
159
|
-
colorPrimaryHover: palette.action.hover,
|
|
160
|
-
colorBorder: palette.border.strong,
|
|
161
|
-
},
|
|
162
|
-
Switch: {
|
|
163
|
-
colorPrimary: palette.action.main,
|
|
164
|
-
colorPrimaryHover: palette.action.hover,
|
|
165
|
-
colorTextQuaternary: palette.text.quaternary,
|
|
166
|
-
},
|
|
167
|
-
Form: {
|
|
168
|
-
labelColor: palette.text.primary,
|
|
169
|
-
labelRequiredMarkColor: palette.error.main,
|
|
170
|
-
labelFontSize: constants.typography.fontSize.base,
|
|
171
|
-
itemMarginBottom: constants.spacing.lg,
|
|
172
|
-
},
|
|
173
|
-
DatePicker: {
|
|
174
|
-
colorBgContainer: palette.components.input.bg,
|
|
175
|
-
colorBorder: palette.components.input.border,
|
|
176
|
-
hoverBorderColor: palette.components.input.borderHover,
|
|
177
|
-
activeBorderColor: palette.components.input.borderFocus,
|
|
178
|
-
colorPrimary: palette.action.main,
|
|
179
|
-
borderRadius: constants.radius.input,
|
|
180
|
-
},
|
|
181
|
-
InputNumber: {
|
|
182
|
-
borderRadius: constants.radius.input,
|
|
183
|
-
},
|
|
184
|
-
Table: {
|
|
185
|
-
colorBgContainer: palette.components.table.bg,
|
|
186
|
-
headerBg: palette.components.table.headerBg,
|
|
187
|
-
headerColor: palette.components.table.headerText,
|
|
188
|
-
borderColor: palette.components.table.border,
|
|
189
|
-
headerSplitColor: palette.components.table.border,
|
|
190
|
-
rowHoverBg: palette.components.table.rowHover,
|
|
191
|
-
rowSelectedBg: palette.action.light,
|
|
192
|
-
rowSelectedHoverBg: palette.action.lighter,
|
|
193
|
-
colorText: palette.text.primary,
|
|
194
|
-
colorTextHeading: palette.text.primary,
|
|
195
|
-
borderRadius: constants.radius.base,
|
|
196
|
-
borderRadiusLG: constants.radius.lg,
|
|
197
|
-
},
|
|
198
|
-
Card: {
|
|
199
|
-
colorBgContainer: palette.surface.main,
|
|
200
|
-
colorBorder: palette.border.main,
|
|
201
|
-
colorBorderSecondary: palette.border.light,
|
|
202
|
-
boxShadowTertiary: constants.shadow.card,
|
|
203
|
-
borderRadius: constants.radius.card,
|
|
204
|
-
borderRadiusLG: constants.radius.lg + 4,
|
|
205
|
-
},
|
|
206
|
-
Statistic: {
|
|
207
|
-
contentFontSize: 24,
|
|
208
|
-
colorTextHeading: palette.text.primary,
|
|
209
|
-
},
|
|
210
|
-
Descriptions: {
|
|
211
|
-
labelBg: palette.surface.hover,
|
|
212
|
-
colorTextSecondary: palette.text.secondary,
|
|
213
|
-
itemPaddingBottom: constants.spacing.md,
|
|
214
|
-
},
|
|
215
|
-
Badge: {
|
|
216
|
-
colorError: palette.error.main,
|
|
217
|
-
colorSuccess: palette.success.main,
|
|
218
|
-
colorInfo: palette.info.main,
|
|
219
|
-
colorInfoBg: palette.info.bg,
|
|
220
|
-
borderRadiusSM: constants.radius.input,
|
|
221
|
-
},
|
|
222
|
-
Tag: {
|
|
223
|
-
colorBorder: palette.border.main,
|
|
224
|
-
defaultBg: palette.surface.hover,
|
|
225
|
-
borderRadiusSM: constants.radius.sm,
|
|
226
|
-
},
|
|
227
|
-
Timeline: {
|
|
228
|
-
dotBg: palette.surface.main,
|
|
229
|
-
tailColor: palette.border.main,
|
|
230
|
-
},
|
|
231
|
-
Alert: {
|
|
232
|
-
colorSuccessBg: palette.success.bg,
|
|
233
|
-
colorSuccessBorder: palette.success.border,
|
|
234
|
-
colorErrorBg: palette.error.bg,
|
|
235
|
-
colorErrorBorder: palette.error.border,
|
|
236
|
-
colorWarningBg: palette.warning.bg,
|
|
237
|
-
colorWarningBorder: palette.warning.border,
|
|
238
|
-
colorInfoBg: palette.info.bg,
|
|
239
|
-
colorInfoBorder: palette.info.border,
|
|
240
|
-
borderRadiusLG: constants.radius.base,
|
|
241
|
-
},
|
|
242
|
-
Modal: {
|
|
243
|
-
contentBg: palette.surface.elevated,
|
|
244
|
-
headerBg: palette.surface.elevated,
|
|
245
|
-
colorBgMask: 'rgba(0, 0, 0, 0.45)',
|
|
246
|
-
borderRadiusLG: constants.radius.lg,
|
|
247
|
-
},
|
|
248
|
-
Drawer: {
|
|
249
|
-
colorBgElevated: palette.surface.elevated,
|
|
250
|
-
colorBgMask: 'rgba(0, 0, 0, 0.45)',
|
|
251
|
-
borderRadiusLG: constants.radius.lg,
|
|
252
|
-
},
|
|
253
|
-
Notification: {
|
|
254
|
-
colorBgElevated: palette.neutral.brightest,
|
|
255
|
-
borderRadiusLG: constants.radius.base,
|
|
256
|
-
},
|
|
257
|
-
Message: {
|
|
258
|
-
contentBg: palette.neutral.brightest,
|
|
259
|
-
borderRadiusLG: constants.radius.base,
|
|
260
|
-
},
|
|
261
|
-
Spin: {
|
|
262
|
-
colorPrimary: palette.primary.main,
|
|
263
|
-
},
|
|
264
|
-
Progress: {
|
|
265
|
-
colorSuccess: palette.success.main,
|
|
266
|
-
colorError: palette.error.main,
|
|
267
|
-
defaultColor: palette.primary.main,
|
|
268
|
-
borderRadius: 100,
|
|
269
|
-
},
|
|
270
|
-
Skeleton: {
|
|
271
|
-
colorFill: palette.neutral[2],
|
|
272
|
-
colorFillContent: palette.neutral[1],
|
|
273
|
-
borderRadiusSM: constants.radius.sm,
|
|
274
|
-
},
|
|
275
|
-
Menu: {
|
|
276
|
-
itemBg: 'transparent',
|
|
277
|
-
itemColor: palette.text.primary,
|
|
278
|
-
itemHoverBg: palette.surface.hover,
|
|
279
|
-
itemSelectedBg: palette.action.lighter,
|
|
280
|
-
itemSelectedColor: palette.action.main,
|
|
281
|
-
itemActiveBg: palette.action.lighter,
|
|
282
|
-
subMenuItemBg: 'transparent',
|
|
283
|
-
darkItemBg: palette.components.sidebar.bg,
|
|
284
|
-
darkSubMenuItemBg: palette.components.sidebar.bg,
|
|
285
|
-
darkItemColor: palette.components.sidebar.text,
|
|
286
|
-
darkItemHoverBg: palette.components.sidebar.hover,
|
|
287
|
-
darkItemSelectedBg: palette.components.sidebar.selected,
|
|
288
|
-
darkItemSelectedColor: palette.primary.contrast,
|
|
289
|
-
borderRadius: constants.radius.input,
|
|
290
|
-
borderRadiusLG: constants.radius.base,
|
|
291
|
-
},
|
|
292
|
-
Breadcrumb: {
|
|
293
|
-
linkColor: palette.utility.link,
|
|
294
|
-
linkHoverColor: palette.utility.linkHover,
|
|
295
|
-
itemColor: palette.text.secondary,
|
|
296
|
-
lastItemColor: palette.text.primary,
|
|
297
|
-
separatorColor: palette.text.tertiary,
|
|
298
|
-
borderRadiusSM: 6,
|
|
299
|
-
},
|
|
300
|
-
Pagination: {
|
|
301
|
-
colorPrimary: palette.primary.main,
|
|
302
|
-
colorPrimaryHover: palette.primary.hover,
|
|
303
|
-
itemActiveBg: palette.primary.main,
|
|
304
|
-
borderRadius: constants.radius.sm,
|
|
305
|
-
},
|
|
306
|
-
Steps: {
|
|
307
|
-
colorPrimary: palette.action.main,
|
|
308
|
-
colorText: palette.text.secondary,
|
|
309
|
-
colorTextDescription: palette.text.tertiary,
|
|
310
|
-
borderRadiusSM: 100,
|
|
311
|
-
},
|
|
312
|
-
Tabs: {
|
|
313
|
-
colorPrimary: palette.action.main,
|
|
314
|
-
colorBorderSecondary: palette.border.main,
|
|
315
|
-
itemColor: palette.text.secondary,
|
|
316
|
-
itemHoverColor: palette.action.hover,
|
|
317
|
-
itemSelectedColor: palette.action.main,
|
|
318
|
-
inkBarColor: palette.action.main,
|
|
319
|
-
borderRadiusSM: constants.radius.sm,
|
|
320
|
-
},
|
|
321
|
-
Layout: {
|
|
322
|
-
colorBgBody: palette.surface.background,
|
|
323
|
-
colorBgHeader: palette.neutral.brightest,
|
|
324
|
-
colorBgTrigger: palette.components.sidebar.bg,
|
|
325
|
-
siderBg: palette.components.sidebar.bg,
|
|
326
|
-
headerBg: palette.neutral.brightest,
|
|
327
|
-
borderRadiusLG: 0,
|
|
328
|
-
},
|
|
329
|
-
Divider: {
|
|
330
|
-
colorSplit: palette.border.divider,
|
|
331
|
-
},
|
|
332
|
-
Typography: {
|
|
333
|
-
colorText: palette.text.primary,
|
|
334
|
-
colorTextSecondary: palette.text.secondary,
|
|
335
|
-
colorTextDescription: palette.text.tertiary,
|
|
336
|
-
},
|
|
337
|
-
Tooltip: {
|
|
338
|
-
colorBgSpotlight: palette.neutral.darkest,
|
|
339
|
-
colorTextLightSolid: palette.neutral.brightest,
|
|
340
|
-
borderRadius: constants.radius.sm,
|
|
341
|
-
},
|
|
342
|
-
Popover: {
|
|
343
|
-
colorBgElevated: palette.neutral.brightest,
|
|
344
|
-
borderRadiusLG: constants.radius.base,
|
|
345
|
-
},
|
|
346
|
-
Dropdown: {
|
|
347
|
-
boxShadowSecondary: constants.shadow.dropdown,
|
|
348
|
-
},
|
|
349
|
-
Calendar: {
|
|
350
|
-
colorBgContainer: palette.neutral.brightest,
|
|
351
|
-
colorPrimary: palette.action.main,
|
|
352
|
-
borderRadiusLG: constants.radius.base,
|
|
353
|
-
},
|
|
354
|
-
},
|
|
355
|
-
};
|
|
356
|
-
if (!overrides)
|
|
357
|
-
return baseTheme;
|
|
358
|
-
return Object.assign(Object.assign({}, baseTheme), { token: Object.assign(Object.assign({}, baseTheme.token), ((_a = overrides.token) !== null && _a !== void 0 ? _a : {})), components: Object.assign(Object.assign({}, baseTheme.components), ((_b = overrides.components) !== null && _b !== void 0 ? _b : {})) });
|
|
359
|
-
};
|
|
360
10
|
/**
|
|
361
11
|
* TemboThemeProvider
|
|
362
12
|
*
|
|
363
|
-
* Wraps your application
|
|
364
|
-
*
|
|
365
|
-
* Supports light and dark mode through the mode prop.
|
|
366
|
-
*
|
|
367
|
-
* All child components can access theme values via the useTemboTheme() hook.
|
|
13
|
+
* Wraps your application with monochrome-first theming system.
|
|
14
|
+
* Supports seamless light/dark mode switching.
|
|
368
15
|
*/
|
|
369
|
-
export const TemboThemeProvider = ({ children, mode = 'light',
|
|
370
|
-
|
|
371
|
-
const
|
|
372
|
-
|
|
373
|
-
const
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
16
|
+
export const TemboThemeProvider = ({ children, mode = 'light', antdThemeOverrides, }) => {
|
|
17
|
+
// Build color palette for current mode
|
|
18
|
+
const colors = React.useMemo(() => buildColorPalette(mode), [mode]);
|
|
19
|
+
// Build Ant Design theme configuration
|
|
20
|
+
const antdTheme = React.useMemo(() => {
|
|
21
|
+
var _a, _b;
|
|
22
|
+
const baseTheme = buildAntDTheme(colors);
|
|
23
|
+
if (!antdThemeOverrides)
|
|
24
|
+
return baseTheme;
|
|
25
|
+
// Deep merge overrides
|
|
26
|
+
return Object.assign(Object.assign({}, baseTheme), { token: Object.assign(Object.assign({}, baseTheme.token), ((_a = antdThemeOverrides.token) !== null && _a !== void 0 ? _a : {})), components: Object.assign(Object.assign({}, baseTheme.components), ((_b = antdThemeOverrides.components) !== null && _b !== void 0 ? _b : {})) });
|
|
27
|
+
}, [colors, antdThemeOverrides]);
|
|
28
|
+
// Build context value
|
|
29
|
+
const contextValue = React.useMemo(() => ({ colors, mode }), [colors, mode]);
|
|
30
|
+
return (_jsx(TemboThemeContext.Provider, { value: contextValue, children: _jsx(ConfigProvider, { theme: antdTheme, children: children }) }));
|
|
379
31
|
};
|
|
380
32
|
/**
|
|
381
|
-
* Hook to access
|
|
382
|
-
*
|
|
383
|
-
* Returns the merged color palette, UI constants, and current theme mode.
|
|
384
|
-
* Components should always use this hook instead of importing defaults directly.
|
|
385
|
-
*
|
|
386
|
-
* @returns Theme context containing colors, constants, and mode
|
|
387
|
-
*
|
|
388
|
-
* @example
|
|
389
|
-
* function MyComponent() {
|
|
390
|
-
* const { colors, constants, mode } = useTemboTheme();
|
|
33
|
+
* Hook to access current theme
|
|
391
34
|
*
|
|
392
|
-
*
|
|
393
|
-
*
|
|
394
|
-
* color: colors.text.primary,
|
|
395
|
-
* padding: constants.spacing.md,
|
|
396
|
-
* borderRadius: constants.radius.base,
|
|
397
|
-
* backgroundColor: colors.neutral.lightest
|
|
398
|
-
* }}>
|
|
399
|
-
* Current theme: {mode}
|
|
400
|
-
* </div>
|
|
401
|
-
* );
|
|
402
|
-
* }
|
|
35
|
+
* Returns the active color palette and theme mode.
|
|
36
|
+
* Use this in components that need direct access to theme tokens.
|
|
403
37
|
*/
|
|
404
|
-
export const
|
|
38
|
+
export const useNewTemboTheme = () => React.useContext(TemboThemeContext);
|