@temboplus/frontend-react-core 0.1.3-beta.2 → 0.1.3-beta.20

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.
Files changed (81) hide show
  1. package/dist/CloseCircleOutlined-CMilRURi.js +3 -0
  2. package/dist/CloseCircleOutlined-CMilRURi.js.map +1 -0
  3. package/dist/CloseCircleOutlined-CSHx89Jn.js +3 -0
  4. package/dist/CloseCircleOutlined-CSHx89Jn.js.map +1 -0
  5. package/dist/InfoCircleOutlined-DR9DmuN-.js +5 -0
  6. package/dist/InfoCircleOutlined-DR9DmuN-.js.map +1 -0
  7. package/dist/InfoCircleOutlined-Hx86sClq.js +5 -0
  8. package/dist/InfoCircleOutlined-Hx86sClq.js.map +1 -0
  9. package/dist/alerts/index.cjs.js +1 -1
  10. package/dist/alerts/index.cjs.js.map +1 -1
  11. package/dist/alerts/index.js +1 -1
  12. package/dist/alerts/index.js.map +1 -1
  13. package/dist/dialogs/index.cjs.js +3 -1
  14. package/dist/dialogs/index.cjs.js.map +1 -1
  15. package/dist/dialogs/index.js +3 -1
  16. package/dist/dialogs/index.js.map +1 -1
  17. package/dist/features/alerts/alert.js +18 -18
  18. package/dist/features/dialogs/tembo-confirm.js +11 -11
  19. package/dist/features/notifications/tembo-notify.d.ts +32 -105
  20. package/dist/features/notifications/tembo-notify.js +102 -111
  21. package/dist/features/notifications/toast-config.d.ts +4 -6
  22. package/dist/features/notifications/toast-config.js +28 -21
  23. package/dist/features/notifications/toast-container.d.ts +13 -3
  24. package/dist/features/notifications/toast-container.js +80 -9
  25. package/dist/index.cjs.js +1 -1
  26. package/dist/index.cjs.js.map +1 -1
  27. package/dist/index.esm.js +1 -1
  28. package/dist/index.esm.js.map +1 -1
  29. package/dist/notifications/index.cjs.js +1 -1
  30. package/dist/notifications/index.js +1 -1
  31. package/dist/providers.d.ts +2 -32
  32. package/dist/providers.js +3 -24
  33. package/dist/tembo-notify-BSIZkV5f.js +3 -0
  34. package/dist/tembo-notify-BSIZkV5f.js.map +1 -0
  35. package/dist/tembo-notify-ZYud9J7B.js +3 -0
  36. package/dist/tembo-notify-ZYud9J7B.js.map +1 -0
  37. package/dist/theme/{colors.d.ts → deprecated/colors.d.ts} +55 -23
  38. package/dist/theme/deprecated/colors.js +212 -0
  39. package/dist/theme/deprecated/theme-provider.d.ts +100 -0
  40. package/dist/theme/deprecated/theme-provider.js +405 -0
  41. package/dist/theme/index.cjs.js +1 -1
  42. package/dist/theme/index.d.ts +3 -2
  43. package/dist/theme/index.js +1 -1
  44. package/dist/theme/theme-config.d.ts +15 -0
  45. package/dist/theme/theme-config.js +735 -0
  46. package/dist/theme/theme-provider.d.ts +13 -71
  47. package/dist/theme/theme-provider.js +21 -387
  48. package/dist/theme/tokens/colors.d.ts +108 -0
  49. package/dist/theme/tokens/colors.js +236 -0
  50. package/dist/theme/tokens/constants.d.ts +126 -0
  51. package/dist/theme/tokens/constants.js +126 -0
  52. package/dist/theme-provider-CCkR2IcZ.js +11 -0
  53. package/dist/theme-provider-CCkR2IcZ.js.map +1 -0
  54. package/dist/theme-provider-CCwq2x0C.js +2 -0
  55. package/dist/theme-provider-CCwq2x0C.js.map +1 -0
  56. package/dist/theme-provider-D2HR_D4s.js +11 -0
  57. package/dist/theme-provider-D2HR_D4s.js.map +1 -0
  58. package/dist/theme-provider-dbj9jb7X.js +2 -0
  59. package/dist/theme-provider-dbj9jb7X.js.map +1 -0
  60. package/dist/validation/index.cjs.js.map +1 -1
  61. package/dist/validation/index.js.map +1 -1
  62. package/package.json +17 -18
  63. package/dist/InfoCircleOutlined-B7d2aRfV.js +0 -7
  64. package/dist/InfoCircleOutlined-B7d2aRfV.js.map +0 -1
  65. package/dist/InfoCircleOutlined-DYs90hdV.js +0 -7
  66. package/dist/InfoCircleOutlined-DYs90hdV.js.map +0 -1
  67. package/dist/ZoomOutOutlined-BL6A5RSq.js +0 -2
  68. package/dist/ZoomOutOutlined-BL6A5RSq.js.map +0 -1
  69. package/dist/ZoomOutOutlined-BY_CCwq7.js +0 -2
  70. package/dist/ZoomOutOutlined-BY_CCwq7.js.map +0 -1
  71. package/dist/tembo-notify-C-QGduBt.js +0 -2
  72. package/dist/tembo-notify-C-QGduBt.js.map +0 -1
  73. package/dist/tembo-notify-D-uOV3t0.js +0 -2
  74. package/dist/tembo-notify-D-uOV3t0.js.map +0 -1
  75. package/dist/theme/colors.js +0 -138
  76. package/dist/theme-provider-D_oV1J_K.js +0 -11
  77. package/dist/theme-provider-D_oV1J_K.js.map +0 -1
  78. package/dist/theme-provider-Dqvy24OD.js +0 -11
  79. package/dist/theme-provider-Dqvy24OD.js.map +0 -1
  80. /package/dist/theme/{constants.d.ts → deprecated/constants.d.ts} +0 -0
  81. /package/dist/theme/{constants.js → deprecated/constants.js} +0 -0
@@ -0,0 +1,735 @@
1
+ /**
2
+ * Build comprehensive Ant Design theme from Tembo tokens
3
+ *
4
+ * Design principles:
5
+ * - Monochrome-first: Primary actions use neutral[8] (near-black/near-white)
6
+ * - Single accent: Blue for links, focus states, and interactive feedback
7
+ * - Semantic colors: Only for critical feedback (success, error, warning)
8
+ * - Consistent spacing: Set once at token level, inherited by components
9
+ * - Bold rounded corners: 24px inputs/buttons, 28px cards, 32px modals
10
+ * - Smart shadows: None on flat elements, subtle on elevated surfaces
11
+ */
12
+ export const buildAntDTheme = (colors, constants) => {
13
+ const isDark = colors.mode === 'dark';
14
+ return {
15
+ token: {
16
+ // ============================================
17
+ // COLOR SYSTEM
18
+ // ============================================
19
+ // Primary = Monochrome actions (near-black/near-white)
20
+ colorPrimary: colors.action.default,
21
+ colorPrimaryHover: colors.action.hover,
22
+ colorPrimaryActive: colors.action.default,
23
+ colorPrimaryBg: colors.neutral[3],
24
+ colorPrimaryBgHover: colors.surface.interactive,
25
+ colorPrimaryBorder: colors.action.default,
26
+ colorPrimaryBorderHover: colors.action.hover,
27
+ colorPrimaryText: colors.action.default,
28
+ colorPrimaryTextHover: colors.action.hover,
29
+ colorPrimaryTextActive: colors.action.default,
30
+ // Links = Accent blue (only color in monochrome system)
31
+ colorLink: colors.accent.default,
32
+ colorLinkHover: colors.accent.hover,
33
+ colorLinkActive: colors.accent.active,
34
+ // Text hierarchy
35
+ colorText: colors.text.primary,
36
+ colorTextSecondary: colors.text.secondary,
37
+ colorTextTertiary: colors.text.tertiary,
38
+ colorTextQuaternary: colors.text.tertiary,
39
+ colorTextDescription: colors.text.secondary,
40
+ colorTextDisabled: colors.text.disabled,
41
+ colorTextHeading: colors.text.primary,
42
+ colorTextLabel: colors.text.secondary,
43
+ colorTextPlaceholder: colors.text.tertiary,
44
+ colorTextLightSolid: colors.text.inverse,
45
+ // Backgrounds
46
+ colorBgBase: colors.surface.page,
47
+ colorBgContainer: colors.surface.card,
48
+ colorBgElevated: colors.surface.overlay,
49
+ colorBgLayout: colors.surface.page,
50
+ colorBgSpotlight: colors.surface.interactive,
51
+ colorBgMask: isDark ? 'rgba(0, 0, 0, 0.65)' : 'rgba(0, 0, 0, 0.45)',
52
+ colorBgTextHover: colors.surface.interactive,
53
+ colorBgTextActive: colors.surface.selected,
54
+ colorBgContainerDisabled: colors.action.disabled,
55
+ // Borders
56
+ colorBorder: colors.border.default,
57
+ colorBorderBg: colors.surface.card,
58
+ colorBorderSecondary: colors.border.subtle,
59
+ colorSplit: colors.border.subtle,
60
+ // Fill colors (for backgrounds, progress bars, etc.)
61
+ colorFill: colors.neutral[3],
62
+ colorFillSecondary: colors.neutral[3],
63
+ colorFillTertiary: colors.neutral[2],
64
+ colorFillQuaternary: colors.surface.interactive,
65
+ // Semantic colors - modern, vibrant
66
+ colorSuccess: colors.semantic.success.main,
67
+ colorSuccessBg: colors.semantic.success.subtle,
68
+ colorSuccessBgHover: colors.semantic.success.subtle,
69
+ colorSuccessBorder: colors.semantic.success.main,
70
+ colorSuccessBorderHover: colors.semantic.success.main,
71
+ colorSuccessText: colors.semantic.success.main,
72
+ colorSuccessTextHover: colors.semantic.success.main,
73
+ colorSuccessTextActive: colors.semantic.success.main,
74
+ colorError: colors.semantic.error.main,
75
+ colorErrorBg: colors.semantic.error.subtle,
76
+ colorErrorBgHover: colors.semantic.error.subtle,
77
+ colorErrorBorder: colors.semantic.error.main,
78
+ colorErrorBorderHover: colors.semantic.error.main,
79
+ colorErrorText: colors.semantic.error.main,
80
+ colorErrorTextHover: colors.semantic.error.main,
81
+ colorErrorTextActive: colors.semantic.error.main,
82
+ colorWarning: colors.semantic.warning.main,
83
+ colorWarningBg: colors.semantic.warning.subtle,
84
+ colorWarningBgHover: colors.semantic.warning.subtle,
85
+ colorWarningBorder: colors.semantic.warning.main,
86
+ colorWarningBorderHover: colors.semantic.warning.main,
87
+ colorWarningText: colors.semantic.warning.main,
88
+ colorWarningTextHover: colors.semantic.warning.main,
89
+ colorWarningTextActive: colors.semantic.warning.main,
90
+ colorInfo: colors.semantic.info.main,
91
+ colorInfoBg: colors.semantic.info.subtle,
92
+ colorInfoBgHover: colors.semantic.info.subtle,
93
+ colorInfoBorder: colors.semantic.info.main,
94
+ colorInfoBorderHover: colors.semantic.info.main,
95
+ colorInfoText: colors.semantic.info.main,
96
+ colorInfoTextHover: colors.semantic.info.main,
97
+ colorInfoTextActive: colors.semantic.info.main,
98
+ // ============================================
99
+ // TYPOGRAPHY
100
+ // ============================================
101
+ fontFamily: constants.typography.fontFamily.base,
102
+ fontFamilyCode: constants.typography.fontFamily.mono,
103
+ fontSize: constants.typography.fontSize.base,
104
+ fontSizeSM: constants.typography.fontSize.sm,
105
+ fontSizeLG: constants.typography.fontSize.lg,
106
+ fontSizeXL: constants.typography.fontSize.xl,
107
+ fontSizeHeading1: constants.typography.fontSize['5xl'],
108
+ fontSizeHeading2: constants.typography.fontSize['4xl'],
109
+ fontSizeHeading3: constants.typography.fontSize['3xl'],
110
+ fontSizeHeading4: constants.typography.fontSize['2xl'],
111
+ fontSizeHeading5: constants.typography.fontSize.xl,
112
+ fontWeightStrong: constants.typography.fontWeight.semibold,
113
+ lineHeight: constants.typography.lineHeight.base,
114
+ lineHeightSM: constants.typography.lineHeight.base,
115
+ lineHeightLG: constants.typography.lineHeight.relaxed,
116
+ lineHeightHeading1: constants.typography.lineHeight.tight,
117
+ lineHeightHeading2: constants.typography.lineHeight.tight,
118
+ lineHeightHeading3: constants.typography.lineHeight.tight,
119
+ lineHeightHeading4: constants.typography.lineHeight.tight,
120
+ lineHeightHeading5: constants.typography.lineHeight.tight,
121
+ // ============================================
122
+ // SPACING & SIZING
123
+ // ============================================
124
+ padding: constants.spacing[4],
125
+ paddingXS: constants.spacing[2],
126
+ paddingSM: constants.spacing[3],
127
+ paddingLG: constants.spacing[5],
128
+ paddingXL: constants.spacing[6],
129
+ margin: constants.spacing[4],
130
+ marginXS: constants.spacing[2],
131
+ marginSM: constants.spacing[3],
132
+ marginLG: constants.spacing[5],
133
+ marginXL: constants.spacing[6],
134
+ marginXXL: constants.spacing[8],
135
+ // Control heights - consistent across all inputs
136
+ controlHeight: 40,
137
+ controlHeightLG: 48,
138
+ controlHeightSM: 32,
139
+ controlHeightXS: 24,
140
+ // ============================================
141
+ // BORDER RADIUS - Bold rounded corners
142
+ // ============================================
143
+ borderRadius: constants.radius.base,
144
+ borderRadiusLG: constants.radius.md,
145
+ borderRadiusSM: constants.radius.base,
146
+ borderRadiusXS: constants.radius.base,
147
+ // ============================================
148
+ // SHADOWS - Flat elements have none
149
+ // ============================================
150
+ boxShadow: constants.shadow.none,
151
+ boxShadowSecondary: constants.shadow.none,
152
+ boxShadowTertiary: constants.shadow.card,
153
+ // ============================================
154
+ // MOTION
155
+ // ============================================
156
+ motionUnit: 0.1,
157
+ motionBase: 0,
158
+ motionEaseInOut: constants.transition.base,
159
+ motionEaseOut: constants.transition.base,
160
+ motionEaseInBack: constants.transition.base,
161
+ // ============================================
162
+ // Z-INDEX
163
+ // ============================================
164
+ zIndexBase: 0,
165
+ zIndexPopupBase: constants.zIndex.dropdown,
166
+ },
167
+ components: {
168
+ // ========================================
169
+ // BUTTONS - Monochrome actions
170
+ // ========================================
171
+ Button: {
172
+ // Monochrome primary button (near-black/near-white)
173
+ colorPrimary: colors.action.default,
174
+ colorPrimaryHover: colors.action.hover,
175
+ colorPrimaryActive: colors.action.default,
176
+ colorPrimaryBorder: colors.action.default,
177
+ primaryColor: colors.action.contrast,
178
+ // Default button (outlined)
179
+ defaultBg: colors.surface.card,
180
+ defaultBorderColor: colors.border.default,
181
+ defaultColor: colors.text.primary,
182
+ defaultHoverBg: colors.surface.interactive,
183
+ defaultHoverBorderColor: colors.border.strong,
184
+ defaultHoverColor: colors.text.primary,
185
+ defaultActiveBg: colors.surface.selected,
186
+ defaultActiveBorderColor: colors.action.default,
187
+ defaultActiveColor: colors.action.default,
188
+ // Link button (uses accent color)
189
+ colorLink: colors.accent.default,
190
+ colorLinkHover: colors.accent.hover,
191
+ colorLinkActive: colors.accent.active,
192
+ // Text button
193
+ textHoverBg: colors.surface.interactive,
194
+ // Danger button (uses semantic red)
195
+ dangerColor: colors.semantic.error.main,
196
+ colorErrorHover: colors.semantic.error.main,
197
+ colorErrorActive: colors.semantic.error.main,
198
+ // Disabled state
199
+ colorBgContainerDisabled: colors.action.disabled,
200
+ colorTextDisabled: colors.text.disabled,
201
+ borderColorDisabled: colors.action.disabled,
202
+ // No shadows on buttons (flat design)
203
+ primaryShadow: 'none',
204
+ defaultShadow: 'none',
205
+ dangerShadow: 'none',
206
+ // Bold rounded corners
207
+ borderRadius: constants.radius.button,
208
+ borderRadiusLG: constants.radius.button,
209
+ borderRadiusSM: constants.radius.button,
210
+ // Typography
211
+ fontWeight: constants.typography.fontWeight.medium,
212
+ // Padding
213
+ paddingContentHorizontal: constants.spacing[4],
214
+ paddingContentVertical: constants.spacing[2],
215
+ // Heights inherited from token.controlHeight ✅
216
+ },
217
+ // ========================================
218
+ // INPUTS - Blue accent for focus states
219
+ // ========================================
220
+ Input: {
221
+ colorBgContainer: colors.surface.input,
222
+ colorBorder: colors.border.default,
223
+ colorText: colors.text.input,
224
+ colorTextPlaceholder: colors.text.tertiary,
225
+ // Icons
226
+ colorIcon: colors.text.tertiary,
227
+ colorIconHover: colors.text.secondary,
228
+ // Hover state
229
+ hoverBg: colors.surface.card,
230
+ hoverBorderColor: colors.border.strong,
231
+ // Focus state - blue accent ring
232
+ activeBg: colors.surface.card,
233
+ activeBorderColor: colors.accent.default,
234
+ activeShadow: `0 0 0 2px ${colors.accent.subtle}`,
235
+ // Error/warning focus rings
236
+ errorActiveShadow: `0 0 0 2px ${colors.semantic.error.subtle}`,
237
+ warningActiveShadow: `0 0 0 2px ${colors.semantic.warning.subtle}`,
238
+ // Disabled
239
+ colorBgContainerDisabled: colors.surface.nested,
240
+ colorTextDisabled: colors.text.disabled,
241
+ // Bold rounded
242
+ borderRadius: constants.radius.input,
243
+ borderRadiusLG: constants.radius.input,
244
+ borderRadiusSM: constants.radius.input,
245
+ // Padding
246
+ paddingBlock: constants.spacing[2],
247
+ paddingInline: constants.spacing[3],
248
+ paddingInlineLG: constants.spacing[4],
249
+ // Font weight - 500 for input text
250
+ fontWeightStrong: constants.typography.fontWeight.medium,
251
+ },
252
+ InputNumber: {
253
+ colorBgContainer: colors.surface.input,
254
+ colorText: colors.text.input,
255
+ colorTextPlaceholder: colors.text.tertiary,
256
+ colorIcon: colors.text.tertiary,
257
+ colorIconHover: colors.text.secondary,
258
+ activeBorderColor: colors.accent.default,
259
+ activeShadow: `0 0 0 2px ${colors.accent.subtle}`,
260
+ borderRadius: constants.radius.input,
261
+ handleVisible: true,
262
+ fontWeightStrong: constants.typography.fontWeight.medium,
263
+ },
264
+ Select: {
265
+ colorBgContainer: colors.surface.input,
266
+ colorBgElevated: colors.surface.overlay,
267
+ colorText: colors.text.input,
268
+ colorTextPlaceholder: colors.text.tertiary,
269
+ colorIcon: colors.text.tertiary,
270
+ colorIconHover: colors.text.secondary,
271
+ // Focus - blue accent
272
+ activeBorderColor: colors.accent.default,
273
+ boxShadow: `0 0 0 2px ${colors.accent.subtle}`,
274
+ // Options
275
+ optionSelectedBg: colors.surface.selected,
276
+ optionActiveBg: colors.surface.interactive,
277
+ controlItemBgHover: colors.surface.interactive,
278
+ controlItemBgActive: colors.surface.selected,
279
+ borderRadius: constants.radius.input,
280
+ borderRadiusLG: constants.radius.input,
281
+ borderRadiusSM: constants.radius.input,
282
+ // Dropdown has shadow
283
+ boxShadowSecondary: constants.shadow.popover,
284
+ fontWeightStrong: constants.typography.fontWeight.medium,
285
+ },
286
+ DatePicker: {
287
+ colorBgContainer: colors.surface.input,
288
+ colorText: colors.text.input,
289
+ colorTextPlaceholder: colors.text.tertiary,
290
+ colorIcon: colors.text.tertiary,
291
+ colorIconHover: colors.text.secondary,
292
+ activeBorderColor: colors.accent.default,
293
+ activeShadow: `0 0 0 2px ${colors.accent.subtle}`,
294
+ cellHoverBg: colors.surface.interactive,
295
+ cellActiveWithRangeBg: colors.accent.subtle,
296
+ colorPrimary: colors.accent.default,
297
+ borderRadius: constants.radius.input,
298
+ fontWeightStrong: constants.typography.fontWeight.medium,
299
+ },
300
+ // ========================================
301
+ // FORM CONTROLS - Use accent for selected state
302
+ // ========================================
303
+ Checkbox: {
304
+ colorPrimary: colors.accent.default,
305
+ colorPrimaryHover: colors.accent.hover,
306
+ colorPrimaryBorder: colors.border.default,
307
+ borderRadiusSM: constants.radius.sm,
308
+ },
309
+ Radio: {
310
+ colorPrimary: colors.accent.default,
311
+ colorPrimaryHover: colors.accent.hover,
312
+ colorBorder: colors.border.default,
313
+ },
314
+ Switch: {
315
+ colorPrimary: colors.accent.default,
316
+ colorPrimaryHover: colors.accent.hover,
317
+ colorTextQuaternary: colors.neutral[4],
318
+ colorTextTertiary: colors.neutral[5],
319
+ handleSize: 18,
320
+ },
321
+ Slider: {
322
+ colorPrimary: colors.accent.default,
323
+ colorPrimaryBorder: colors.accent.default,
324
+ colorPrimaryBorderHover: colors.accent.hover,
325
+ handleColor: colors.surface.card,
326
+ handleActiveColor: colors.surface.card,
327
+ railBg: colors.neutral[3],
328
+ railHoverBg: colors.neutral[4],
329
+ trackBg: colors.accent.default,
330
+ trackHoverBg: colors.accent.hover,
331
+ dotBorderColor: colors.border.default,
332
+ dotActiveBorderColor: colors.accent.default,
333
+ },
334
+ // ========================================
335
+ // FORM LAYOUT
336
+ // ========================================
337
+ Form: {
338
+ labelColor: colors.text.primary,
339
+ labelFontSize: constants.typography.fontSize.base,
340
+ labelRequiredMarkColor: colors.semantic.error.main,
341
+ itemMarginBottom: constants.spacing[4],
342
+ verticalLabelPadding: `0 0 ${constants.spacing[2]}px`,
343
+ },
344
+ // ========================================
345
+ // DATA DISPLAY
346
+ // ========================================
347
+ Table: {
348
+ colorBgContainer: colors.surface.card,
349
+ headerBg: colors.surface.page,
350
+ headerColor: colors.text.secondary,
351
+ colorText: colors.text.primary,
352
+ colorTextHeading: colors.text.secondary,
353
+ borderColor: colors.border.subtle,
354
+ // Interactive states
355
+ rowHoverBg: colors.surface.interactive,
356
+ rowSelectedBg: colors.surface.selected,
357
+ rowExpandedBg: colors.surface.nested,
358
+ // Smooth rounded
359
+ borderRadius: constants.radius.card,
360
+ borderRadiusLG: constants.radius.card,
361
+ headerBorderRadius: constants.radius.card,
362
+ // Padding
363
+ cellPaddingBlock: constants.spacing[3],
364
+ cellPaddingInline: constants.spacing[4],
365
+ cellPaddingBlockSM: constants.spacing[2],
366
+ cellPaddingInlineSM: constants.spacing[3],
367
+ // Typography
368
+ cellFontSize: constants.typography.fontSize.base,
369
+ headerSortActiveBg: colors.surface.interactive,
370
+ },
371
+ Descriptions: {
372
+ labelBg: colors.surface.page,
373
+ titleColor: colors.text.primary,
374
+ contentColor: colors.text.primary,
375
+ extraColor: colors.text.secondary,
376
+ colorSplit: colors.border.subtle,
377
+ itemPaddingBottom: constants.spacing[3],
378
+ },
379
+ Card: {
380
+ colorBgContainer: colors.surface.card,
381
+ colorBorderSecondary: colors.border.default,
382
+ colorTextHeading: colors.text.primary,
383
+ colorTextDescription: colors.text.secondary,
384
+ // Gentle shadow on cards
385
+ boxShadowTertiary: constants.shadow.card,
386
+ // Smooth rounded
387
+ borderRadius: constants.radius.card,
388
+ borderRadiusLG: constants.radius.card,
389
+ padding: constants.spacing[4],
390
+ paddingLG: constants.spacing[6],
391
+ },
392
+ Statistic: {
393
+ titleFontSize: constants.typography.fontSize.sm,
394
+ contentFontSize: constants.typography.fontSize['4xl'],
395
+ },
396
+ Timeline: {
397
+ tailColor: colors.border.default,
398
+ tailWidth: 2,
399
+ dotBg: colors.surface.card,
400
+ dotBorderWidth: 2,
401
+ itemPaddingBottom: constants.spacing[4],
402
+ },
403
+ Tag: {
404
+ defaultBg: colors.neutral[2],
405
+ defaultColor: colors.text.primary,
406
+ borderRadiusSM: constants.radius.sm,
407
+ fontSize: constants.typography.fontSize.sm,
408
+ fontSizeSM: constants.typography.fontSize.xs,
409
+ },
410
+ Badge: {
411
+ colorBorderBg: colors.surface.card,
412
+ colorError: colors.semantic.error.main,
413
+ colorSuccess: colors.semantic.success.main,
414
+ colorInfo: colors.accent.default,
415
+ colorWarning: colors.semantic.warning.main,
416
+ textFontSize: constants.typography.fontSize.xs,
417
+ textFontWeight: constants.typography.fontWeight.medium,
418
+ },
419
+ Avatar: {
420
+ colorBgContainer: colors.neutral[3],
421
+ colorTextPlaceholder: colors.text.secondary,
422
+ borderRadius: constants.radius.avatar,
423
+ groupOverlapping: -8,
424
+ groupSpace: constants.spacing[1],
425
+ },
426
+ Calendar: {
427
+ colorBgContainer: colors.surface.card,
428
+ colorPrimary: colors.accent.default,
429
+ itemActiveBg: colors.accent.subtle,
430
+ borderRadius: constants.radius.card,
431
+ },
432
+ Collapse: {
433
+ colorBgContainer: colors.surface.card,
434
+ headerBg: colors.surface.page,
435
+ headerPadding: `${constants.spacing[3]}px ${constants.spacing[4]}px`,
436
+ contentPadding: `${constants.spacing[4]}px ${constants.spacing[4]}px`,
437
+ borderRadiusLG: constants.radius.card,
438
+ },
439
+ Tree: {
440
+ nodeHoverBg: colors.surface.interactive,
441
+ nodeSelectedBg: colors.surface.selected,
442
+ directoryNodeSelectedBg: colors.surface.selected,
443
+ borderRadius: constants.radius.sm,
444
+ },
445
+ // ========================================
446
+ // FEEDBACK - Elevated with shadows
447
+ // ========================================
448
+ Alert: {
449
+ colorSuccessBg: colors.semantic.success.subtle,
450
+ colorSuccessBorder: colors.semantic.success.main,
451
+ colorSuccessText: colors.semantic.success.main,
452
+ colorErrorBg: colors.semantic.error.subtle,
453
+ colorErrorBorder: colors.semantic.error.main,
454
+ colorErrorText: colors.semantic.error.main,
455
+ colorWarningBg: colors.semantic.warning.subtle,
456
+ colorWarningBorder: colors.semantic.warning.main,
457
+ colorWarningText: colors.semantic.warning.main,
458
+ colorInfoBg: colors.semantic.info.subtle,
459
+ colorInfoBorder: colors.semantic.info.main,
460
+ colorInfoText: colors.semantic.info.main,
461
+ defaultPadding: `${constants.spacing[3]}px ${constants.spacing[4]}px`,
462
+ borderRadiusLG: constants.radius.card,
463
+ withDescriptionPadding: `${constants.spacing[4]}px ${constants.spacing[5]}px`,
464
+ },
465
+ Modal: {
466
+ contentBg: colors.surface.overlay,
467
+ headerBg: colors.surface.overlay,
468
+ footerBg: colors.surface.overlay,
469
+ titleColor: colors.text.primary,
470
+ titleFontSize: constants.typography.fontSize.xl,
471
+ colorBgMask: isDark ? 'rgba(0, 0, 0, 0.65)' : 'rgba(0, 0, 0, 0.45)',
472
+ // Prominent shadow
473
+ boxShadow: constants.shadow.modal,
474
+ // Generous rounding
475
+ borderRadiusLG: constants.radius.modal,
476
+ },
477
+ Drawer: {
478
+ colorBgElevated: colors.surface.overlay,
479
+ colorText: colors.text.primary,
480
+ colorBgMask: isDark ? 'rgba(0, 0, 0, 0.65)' : 'rgba(0, 0, 0, 0.45)',
481
+ borderRadiusLG: constants.radius.modal,
482
+ footerPaddingBlock: constants.spacing[4],
483
+ footerPaddingInline: constants.spacing[6],
484
+ },
485
+ Notification: {
486
+ colorBgElevated: colors.surface.overlay,
487
+ colorText: colors.text.primary,
488
+ colorTextHeading: colors.text.primary,
489
+ // Shadow on notification
490
+ boxShadow: constants.shadow.popover,
491
+ borderRadiusLG: constants.radius.card,
492
+ padding: constants.spacing[4],
493
+ },
494
+ Message: {
495
+ contentBg: colors.surface.overlay,
496
+ contentPadding: `${constants.spacing[2]}px ${constants.spacing[4]}px`,
497
+ // Shadow on message
498
+ boxShadow: constants.shadow.popover,
499
+ borderRadiusLG: constants.radius.card,
500
+ },
501
+ Popconfirm: {
502
+ colorBgElevated: colors.surface.overlay,
503
+ colorText: colors.text.primary,
504
+ colorTextHeading: colors.text.primary,
505
+ boxShadowSecondary: constants.shadow.popover,
506
+ borderRadiusLG: constants.radius.card,
507
+ },
508
+ Progress: {
509
+ defaultColor: colors.accent.default,
510
+ colorSuccess: colors.semantic.success.main,
511
+ colorError: colors.semantic.error.main,
512
+ remainingColor: colors.neutral[3],
513
+ borderRadius: 100,
514
+ lineBorderRadius: 100,
515
+ },
516
+ Result: {
517
+ titleFontSize: constants.typography.fontSize['3xl'],
518
+ subtitleFontSize: constants.typography.fontSize.base,
519
+ iconFontSize: constants.typography.fontSize['5xl'],
520
+ colorSuccess: colors.semantic.success.main,
521
+ colorError: colors.semantic.error.main,
522
+ colorInfo: colors.accent.default,
523
+ colorWarning: colors.semantic.warning.main,
524
+ },
525
+ Skeleton: {
526
+ colorFill: colors.neutral[2],
527
+ colorFillContent: colors.neutral[3],
528
+ borderRadiusSM: constants.radius.sm,
529
+ },
530
+ Spin: {
531
+ colorPrimary: colors.accent.default,
532
+ },
533
+ // ========================================
534
+ // NAVIGATION - Accent for active states
535
+ // ========================================
536
+ Menu: {
537
+ itemBg: 'transparent',
538
+ itemColor: colors.text.primary,
539
+ itemHoverBg: colors.surface.interactive,
540
+ itemHoverColor: colors.text.primary,
541
+ itemSelectedBg: colors.surface.selected,
542
+ itemSelectedColor: colors.accent.default,
543
+ itemActiveBg: colors.surface.selected,
544
+ // Dark sidebar
545
+ darkItemBg: colors.absolute.black,
546
+ darkSubMenuItemBg: colors.absolute.black,
547
+ darkItemColor: colors.absolute.white,
548
+ darkItemHoverBg: 'rgba(255, 255, 255, 0.08)',
549
+ darkItemSelectedBg: colors.accent.default,
550
+ darkItemSelectedColor: colors.absolute.white,
551
+ itemBorderRadius: constants.radius.sm,
552
+ itemMarginInline: constants.spacing[1],
553
+ itemPaddingInline: constants.spacing[3],
554
+ },
555
+ Breadcrumb: {
556
+ itemColor: colors.text.secondary,
557
+ lastItemColor: colors.text.primary,
558
+ linkColor: colors.accent.default,
559
+ linkHoverColor: colors.accent.hover,
560
+ separatorColor: colors.text.tertiary,
561
+ separatorMargin: constants.spacing[2],
562
+ fontSize: constants.typography.fontSize.sm,
563
+ },
564
+ Pagination: {
565
+ colorPrimary: colors.accent.default,
566
+ colorPrimaryHover: colors.accent.hover,
567
+ itemActiveBg: colors.accent.default,
568
+ itemBg: colors.surface.card,
569
+ itemLinkBg: colors.surface.card,
570
+ itemInputBg: colors.surface.card,
571
+ borderRadius: constants.radius.sm,
572
+ },
573
+ Steps: {
574
+ colorPrimary: colors.accent.default,
575
+ colorText: colors.text.secondary,
576
+ colorTextDescription: colors.text.tertiary,
577
+ colorFillContent: colors.neutral[3],
578
+ },
579
+ Tabs: {
580
+ colorPrimary: colors.accent.default,
581
+ itemColor: colors.text.secondary,
582
+ itemHoverColor: colors.accent.hover,
583
+ itemSelectedColor: colors.accent.default,
584
+ itemActiveColor: colors.accent.default,
585
+ inkBarColor: colors.accent.default,
586
+ colorBgContainer: colors.surface.card,
587
+ cardPadding: `${constants.spacing[2]}px ${constants.spacing[4]}px`,
588
+ horizontalItemPadding: `${constants.spacing[3]}px 0`,
589
+ horizontalItemGutter: constants.spacing[8],
590
+ },
591
+ Anchor: {
592
+ colorPrimary: colors.accent.default,
593
+ linkPaddingBlock: constants.spacing[1],
594
+ linkPaddingInlineStart: constants.spacing[4],
595
+ },
596
+ Dropdown: {
597
+ colorBgElevated: colors.surface.overlay,
598
+ colorText: colors.text.primary,
599
+ controlItemBgHover: colors.surface.interactive,
600
+ controlItemBgActive: colors.surface.selected,
601
+ // Shadow on dropdown
602
+ boxShadowSecondary: constants.shadow.popover,
603
+ borderRadiusLG: constants.radius.card,
604
+ paddingBlock: constants.spacing[1],
605
+ },
606
+ // ========================================
607
+ // LAYOUT
608
+ // ========================================
609
+ Layout: {
610
+ colorBgBody: colors.surface.page,
611
+ colorBgHeader: colors.surface.card,
612
+ colorBgTrigger: colors.surface.interactive,
613
+ headerBg: colors.surface.card,
614
+ headerColor: colors.text.primary,
615
+ siderBg: colors.absolute.black,
616
+ triggerBg: colors.surface.interactive,
617
+ triggerColor: colors.text.primary,
618
+ headerPadding: `0 ${constants.spacing[6]}px`,
619
+ footerPadding: `${constants.spacing[6]}px ${constants.spacing[12]}px`,
620
+ },
621
+ Divider: {
622
+ colorSplit: colors.border.subtle,
623
+ colorText: colors.text.tertiary,
624
+ colorTextHeading: colors.text.secondary,
625
+ verticalMarginInline: constants.spacing[2],
626
+ },
627
+ // ========================================
628
+ // OVERLAYS
629
+ // ========================================
630
+ Typography: {
631
+ colorText: colors.text.primary,
632
+ colorTextSecondary: colors.text.secondary,
633
+ colorLink: colors.accent.default,
634
+ colorLinkHover: colors.accent.hover,
635
+ colorLinkActive: colors.accent.active,
636
+ titleMarginBottom: constants.spacing[2],
637
+ titleMarginTop: constants.spacing[4],
638
+ },
639
+ Tooltip: {
640
+ colorBgSpotlight: colors.neutral[8],
641
+ colorTextLightSolid: colors.text.inverse,
642
+ // Subtle shadow
643
+ boxShadowSecondary: constants.shadow.tooltip,
644
+ borderRadius: constants.radius.sm,
645
+ },
646
+ Popover: {
647
+ colorBgElevated: colors.surface.overlay,
648
+ colorText: colors.text.primary,
649
+ colorTextHeading: colors.text.primary,
650
+ // Shadow on popover
651
+ boxShadowSecondary: constants.shadow.popover,
652
+ borderRadiusLG: constants.radius.card,
653
+ padding: constants.spacing[3],
654
+ },
655
+ // ========================================
656
+ // OTHER COMPONENTS
657
+ // ========================================
658
+ Upload: {
659
+ colorFillAlter: colors.surface.interactive,
660
+ colorBorder: colors.border.default,
661
+ actionsColor: colors.accent.default,
662
+ },
663
+ Tour: {
664
+ colorBgElevated: colors.surface.overlay,
665
+ colorPrimary: colors.accent.default,
666
+ colorText: colors.text.primary,
667
+ boxShadowSecondary: constants.shadow.popover,
668
+ borderRadius: constants.radius.card,
669
+ },
670
+ FloatButton: {
671
+ colorBgElevated: colors.surface.overlay,
672
+ colorPrimary: colors.accent.default,
673
+ colorText: colors.text.primary,
674
+ boxShadow: constants.shadow.popover,
675
+ borderRadiusLG: constants.radius.avatar,
676
+ },
677
+ Segmented: {
678
+ colorBgLayout: colors.neutral[2],
679
+ itemColor: colors.text.secondary,
680
+ itemHoverColor: colors.text.primary,
681
+ itemHoverBg: colors.surface.interactive,
682
+ itemSelectedBg: colors.surface.card,
683
+ itemSelectedColor: colors.text.primary,
684
+ itemActiveBg: colors.surface.card,
685
+ borderRadius: constants.radius.base,
686
+ borderRadiusSM: constants.radius.sm,
687
+ borderRadiusLG: constants.radius.lg,
688
+ fontWeightStrong: constants.typography.fontWeight.medium,
689
+ },
690
+ Mentions: {
691
+ colorBgElevated: colors.surface.overlay,
692
+ controlItemBgHover: colors.surface.interactive,
693
+ controlItemBgActive: colors.surface.selected,
694
+ boxShadowSecondary: constants.shadow.popover,
695
+ },
696
+ Cascader: {
697
+ colorBgElevated: colors.surface.overlay,
698
+ controlItemBgHover: colors.surface.interactive,
699
+ optionSelectedBg: colors.surface.selected,
700
+ colorPrimary: colors.accent.default,
701
+ },
702
+ TreeSelect: {
703
+ colorBgElevated: colors.surface.overlay,
704
+ nodeHoverBg: colors.surface.interactive,
705
+ nodeSelectedBg: colors.surface.selected,
706
+ },
707
+ Transfer: {
708
+ colorBgContainer: colors.surface.card,
709
+ controlItemBgHover: colors.surface.interactive,
710
+ controlItemBgActive: colors.surface.selected,
711
+ },
712
+ Rate: {
713
+ colorFillContent: colors.neutral[3],
714
+ starColor: '#FADB14',
715
+ starBg: colors.neutral[3],
716
+ },
717
+ Empty: {
718
+ colorText: colors.text.secondary,
719
+ colorTextDescription: colors.text.tertiary,
720
+ colorTextDisabled: colors.text.disabled,
721
+ },
722
+ List: {
723
+ colorBorder: colors.border.subtle,
724
+ colorText: colors.text.primary,
725
+ colorTextDescription: colors.text.secondary,
726
+ itemPadding: `${constants.spacing[3]}px 0`,
727
+ itemPaddingSM: `${constants.spacing[2]}px ${constants.spacing[3]}px`,
728
+ itemPaddingLG: `${constants.spacing[4]}px ${constants.spacing[6]}px`,
729
+ metaMarginBottom: constants.spacing[2],
730
+ avatarMarginRight: constants.spacing[4],
731
+ titleMarginBottom: constants.spacing[1],
732
+ },
733
+ },
734
+ };
735
+ };