Skip to content

Commit 6211de7

Browse files
authored
fix(theme): "upgrade" v2 colors to v2.9 format (#1479)
1 parent 9eca14b commit 6211de7

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

src/theme/getScopedTheme.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
ThemeColorSchemeKey,
99
} from './system'
1010
import {is_v2, v0_v2, v2_v0} from './versioning'
11+
import {themeColor_v0_v2_9} from './versioning/themeColor_v2_v2_9'
1112

1213
// cache[scheme][tone][rootTheme] = theme
1314
const cache = new Map<
@@ -34,6 +35,7 @@ export function getScopedTheme(
3435

3536
const colorScheme_v2 = v2.color[scheme] || v2.color.light
3637
const color_v2 = colorScheme_v2[tone] || colorScheme_v2.default
38+
const color_v2_9 = themeColor_v0_v2_9(color_v2)
3739
const layer_v2 = v2.layer || defaultThemeConfig.layer
3840

3941
const theme: Theme = {
@@ -44,7 +46,7 @@ export function getScopedTheme(
4446
v2: {
4547
...v2,
4648
_resolved: true,
47-
color: color_v2,
49+
color: color_v2_9,
4850
layer: layer_v2,
4951
},
5052
},
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import type {ThemeColorCard_v2} from '../system'
2+
3+
/**
4+
* Apply `neutral` and `suggest` if they're not already part of the color object,
5+
* as this was introduced in v2.9, but is not compatible with v2.0.
6+
*
7+
* @param color - The color object to upgrade
8+
* @returns The upgraded color object. Returns as-is if already upgraded.
9+
* @internal
10+
*/
11+
export function themeColor_v0_v2_9(color: ThemeColorCard_v2): ThemeColorCard_v2 {
12+
if ('neutral' in color.badge) {
13+
return color // Already at >= v2.9
14+
}
15+
16+
// TypeScript narrows to `never` because the above should always be true
17+
const colors = color as ThemeColorCard_v2
18+
19+
return {
20+
...colors,
21+
badge: {
22+
...colors.badge,
23+
neutral: colors.badge.default,
24+
suggest: colors.badge.primary,
25+
},
26+
button: {
27+
bleed: {
28+
...colors.button.bleed,
29+
neutral: colors.button.bleed.default,
30+
suggest: colors.button.bleed.primary,
31+
},
32+
default: {
33+
...colors.button.default,
34+
neutral: colors.button.default.default,
35+
suggest: colors.button.default.primary,
36+
},
37+
ghost: {
38+
...colors.button.ghost,
39+
neutral: colors.button.ghost.default,
40+
suggest: colors.button.ghost.primary,
41+
},
42+
},
43+
selectable: {
44+
...colors.selectable,
45+
neutral: colors.selectable.default,
46+
suggest: colors.selectable.primary,
47+
},
48+
}
49+
}

0 commit comments

Comments
 (0)