@temboplus/frontend-react-core 0.1.3-beta.1 → 0.1.3-beta.11

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