@sanity/ui 2.0.0-alpha.33 → 2.0.0-alpha.35

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 (163) hide show
  1. package/dist/index.cjs.mjs +4 -3
  2. package/dist/index.d.ts +29 -22
  3. package/dist/index.esm.js +397 -515
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +413 -531
  6. package/dist/index.js.map +1 -1
  7. package/dist/theme.cjs.mjs +10 -4
  8. package/dist/theme.d.ts +450 -187
  9. package/dist/theme.esm.js +2933 -2750
  10. package/dist/theme.esm.js.map +1 -1
  11. package/dist/theme.js +2942 -2753
  12. package/dist/theme.js.map +1 -1
  13. package/package.json +3 -3
  14. package/src/core/_compat.ts +7 -7
  15. package/src/core/components/dialog/dialog.tsx +5 -5
  16. package/src/core/components/dialog/styles.ts +4 -5
  17. package/src/core/components/hotkeys/hotkeys.tsx +4 -2
  18. package/src/core/components/menu/__workshop__/avatarMenu.tsx +50 -0
  19. package/src/core/components/menu/__workshop__/index.ts +5 -0
  20. package/src/core/components/menu/menuItem.tsx +7 -1
  21. package/src/core/components/skeleton/textSkeleton.tsx +12 -14
  22. package/src/core/components/tree/style.ts +14 -17
  23. package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +3 -3
  24. package/src/core/hooks/useMediaIndex/useMediaIndex.ts +2 -3
  25. package/src/core/primitives/_selectable/style.ts +18 -18
  26. package/src/core/primitives/avatar/avatar.tsx +3 -3
  27. package/src/core/primitives/avatar/avatarCounter.tsx +4 -4
  28. package/src/core/primitives/avatar/avatarStack.tsx +2 -2
  29. package/src/core/primitives/avatar/styles.ts +7 -8
  30. package/src/core/primitives/avatar/types.ts +2 -2
  31. package/src/core/primitives/badge/__workshop__/props.tsx +1 -1
  32. package/src/core/primitives/badge/__workshop__/tones.tsx +1 -1
  33. package/src/core/primitives/badge/badge.tsx +1 -1
  34. package/src/core/primitives/badge/styles.ts +5 -6
  35. package/src/core/primitives/button/button.tsx +3 -4
  36. package/src/core/primitives/button/styles.ts +22 -23
  37. package/src/core/primitives/card/__workshop__/selected.tsx +15 -15
  38. package/src/core/primitives/card/card.tsx +1 -1
  39. package/src/core/primitives/card/styles.ts +22 -22
  40. package/src/core/primitives/checkbox/styles.ts +21 -22
  41. package/src/core/primitives/code/styles.ts +4 -1
  42. package/src/core/primitives/container/styles.ts +2 -3
  43. package/src/core/primitives/heading/styles.ts +4 -2
  44. package/src/core/primitives/inline/styles.ts +6 -6
  45. package/src/core/primitives/kbd/kbd.tsx +8 -3
  46. package/src/core/primitives/label/styles.ts +4 -3
  47. package/src/core/primitives/popover/helpers.ts +3 -4
  48. package/src/core/primitives/popover/popover.tsx +8 -4
  49. package/src/core/primitives/popover/types.ts +1 -1
  50. package/src/core/primitives/radio/styles.ts +17 -19
  51. package/src/core/primitives/select/styles.ts +27 -32
  52. package/src/core/primitives/stack/styles.ts +2 -3
  53. package/src/core/primitives/switch/__workshop__/props.tsx +11 -31
  54. package/src/core/primitives/switch/styles.ts +18 -21
  55. package/src/core/primitives/text/__workshop__/colored.tsx +10 -10
  56. package/src/core/primitives/text/styles.ts +9 -4
  57. package/src/core/primitives/tooltip/tooltip.tsx +3 -3
  58. package/src/core/styles/border/borderStyle.ts +6 -11
  59. package/src/core/styles/box/boxStyle.ts +5 -9
  60. package/src/core/styles/card/_cardColorStyle.ts +99 -0
  61. package/src/core/styles/card/index.ts +1 -0
  62. package/src/core/styles/flex/flexItemStyle.ts +2 -3
  63. package/src/core/styles/flex/flexStyle.ts +6 -11
  64. package/src/core/styles/font/responsiveFont.ts +4 -4
  65. package/src/core/styles/font/textAlignStyle.ts +3 -3
  66. package/src/core/styles/grid/gridItemStyle.ts +7 -13
  67. package/src/core/styles/grid/gridStyle.ts +9 -17
  68. package/src/core/styles/helpers.ts +5 -3
  69. package/src/core/styles/input/responsiveInputPaddingStyle.ts +6 -6
  70. package/src/core/styles/input/textInputStyle.ts +36 -40
  71. package/src/core/styles/margin/marginsStyle.test.ts +2 -3
  72. package/src/core/styles/padding/paddingStyle.test.ts +2 -3
  73. package/src/core/styles/radius/radiusStyle.ts +2 -3
  74. package/src/core/styles/shadow/shadowStyle.ts +4 -5
  75. package/src/core/theme/__workshop__/build/Root.tsx +24 -20
  76. package/src/core/theme/__workshop__/build/story.tsx +22 -26
  77. package/src/core/theme/__workshop__/canvas.tsx +21 -40
  78. package/src/core/theme/theme.test.tsx +2 -35
  79. package/src/core/theme/themeColorProvider.tsx +2 -2
  80. package/src/core/theme/themeContext.ts +2 -2
  81. package/src/core/theme/themeProvider.tsx +25 -25
  82. package/src/core/theme/types.ts +3 -2
  83. package/src/core/theme/useRootTheme.ts +1 -9
  84. package/src/core/theme/useTheme.ts +8 -1
  85. package/src/core/types/card.ts +2 -2
  86. package/src/core/utils/arrow/arrow.tsx +3 -3
  87. package/src/core/utils/elementQuery/elementQuery.tsx +3 -3
  88. package/src/core/utils/virtualList/virtualList.tsx +2 -2
  89. package/src/theme/build/_deprecated/color/muted/createMuted.ts +2 -2
  90. package/src/theme/build/buildColorTheme.test.ts +14 -15
  91. package/src/theme/build/buildColorTheme.ts +239 -292
  92. package/src/theme/build/buildTheme.test.ts +9 -7
  93. package/src/theme/build/buildTheme.ts +12 -9
  94. package/src/theme/build/colorToken.ts +3 -1
  95. package/src/theme/build/lib/color-fns/contrastRatio.ts +1 -0
  96. package/src/theme/build/lib/isRecord.ts +3 -0
  97. package/src/theme/build/merge.ts +18 -13
  98. package/src/theme/build/renderColorTheme.ts +205 -213
  99. package/src/theme/build/renderColorValue.ts +15 -8
  100. package/src/theme/build/resolveColorTokens.ts +177 -198
  101. package/src/theme/build/theme.test.ts +27 -0
  102. package/src/theme/config/helpers.ts +16 -8
  103. package/src/theme/config/system.ts +46 -17
  104. package/src/theme/config/tokens/color/types.ts +55 -32
  105. package/src/theme/config/tokens/types.ts +11 -4
  106. package/src/theme/config/types.ts +5 -11
  107. package/src/theme/{build/defaults → defaults}/colorPalette.ts +1 -1
  108. package/src/theme/{build/defaults → defaults}/colorTokens.ts +189 -136
  109. package/src/theme/{build/defaults → defaults}/config.ts +14 -12
  110. package/src/theme/{build/defaults → defaults}/fonts.ts +6 -6
  111. package/src/theme/getScopedTheme.ts +81 -0
  112. package/src/theme/index.ts +9 -1
  113. package/src/theme/system/avatar.ts +1 -1
  114. package/src/theme/system/color/_constants.ts +11 -11
  115. package/src/theme/system/color/_system.ts +10 -71
  116. package/src/theme/system/color/avatar.ts +22 -10
  117. package/src/theme/system/color/badge.ts +18 -7
  118. package/src/theme/system/color/button.ts +17 -23
  119. package/src/theme/system/color/color.ts +34 -0
  120. package/src/theme/system/color/index.ts +3 -10
  121. package/src/theme/system/color/input.ts +13 -11
  122. package/src/theme/system/color/kbd.ts +3 -3
  123. package/src/theme/system/color/selectable.ts +13 -19
  124. package/src/theme/system/color/shadow.ts +7 -0
  125. package/src/theme/system/color/state.ts +37 -0
  126. package/src/theme/system/css.ts +9 -0
  127. package/src/theme/system/focusRing.ts +7 -0
  128. package/src/theme/system/index.ts +5 -1
  129. package/src/theme/system/input.ts +1 -1
  130. package/src/theme/system/layer.ts +1 -2
  131. package/src/theme/system/shadow.ts +1 -0
  132. package/src/theme/system/styles.ts +19 -0
  133. package/src/theme/system/theme.ts +97 -0
  134. package/src/theme/system/{color → v0/color}/_generic.ts +2 -1
  135. package/src/theme/system/v0/color/_system.ts +13 -0
  136. package/src/theme/system/{color → v0/color}/base.ts +2 -0
  137. package/src/theme/system/v0/color/button.ts +42 -0
  138. package/src/theme/system/{color → v0/color}/card.ts +2 -1
  139. package/src/theme/system/v0/color/color.ts +40 -0
  140. package/src/theme/system/v0/color/index.ts +11 -0
  141. package/src/theme/system/v0/color/input.ts +34 -0
  142. package/src/theme/system/{color/_deprecated → v0/color}/muted.ts +1 -1
  143. package/src/theme/system/v0/color/selectable.ts +31 -0
  144. package/src/theme/system/{color/_deprecated → v0/color}/solid.ts +1 -1
  145. package/src/theme/system/v0/color/spot.ts +13 -0
  146. package/src/theme/system/v0/index.ts +1 -0
  147. package/src/theme/versioning/getTheme_v2.ts +35 -0
  148. package/src/theme/versioning/index.ts +5 -0
  149. package/src/theme/versioning/is_v0.ts +6 -0
  150. package/src/theme/versioning/is_v2.ts +6 -0
  151. package/src/theme/versioning/themeColor_v0_v2.ts +217 -0
  152. package/src/theme/versioning/v0_v2.ts +70 -0
  153. package/src/theme/versioning/v2_v0.ts +128 -0
  154. package/src/core/styles/colorVars/colorVarsStyle.ts +0 -43
  155. package/src/core/styles/colorVars/index.ts +0 -1
  156. package/src/core/theme/defaults.ts +0 -7
  157. package/src/theme/system/_system.ts +0 -95
  158. package/src/theme/system/color/_deprecated/spot.ts +0 -13
  159. package/src/theme/themes/studio/config.ts +0 -69
  160. package/src/theme/themes/studio/fonts.ts +0 -219
  161. package/src/theme/themes/studio/index.ts +0 -1
  162. package/src/theme/themes/studio/studioTheme.test.ts +0 -27
  163. package/src/theme/themes/studio/studioTheme.ts +0 -8
@@ -1,7 +1,8 @@
1
- import {ThemeColorBlendModeKey} from './_system'
1
+ import {ThemeColorBlendModeKey} from '../../color/_system'
2
2
 
3
3
  /**
4
4
  * @public
5
+ * @deprecated Use `ThemeColorState_v2` instead.
5
6
  */
6
7
  export interface ThemeColorGenericState {
7
8
  /** @internal */
@@ -0,0 +1,13 @@
1
+ import {ThemeColorCardToneKey} from '../../color/_system'
2
+
3
+ /**
4
+ * @public
5
+ * @deprecated Use `ThemeColorBaseToneKey` instead.
6
+ */
7
+ export type ThemeColorName = ThemeColorCardToneKey
8
+
9
+ /**
10
+ * @public
11
+ * @deprecated Use `ThemeColorBaseToneKey` instead.
12
+ */
13
+ export type ThemeColorToneKey = ThemeColorCardToneKey
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * @public
3
+ * @deprecated Use `ThemeColorCard_v2` instead.
3
4
  */
4
5
  export interface ThemeColorBase {
5
6
  bg: string
6
7
  fg: string
7
8
  border: string
8
9
  focusRing: string
10
+ backdrop?: string
9
11
  shadow: {
10
12
  outline: string
11
13
  umbra: string
@@ -0,0 +1,42 @@
1
+ import {ThemeColorGenericState} from './_generic'
2
+
3
+ /**
4
+ * @public
5
+ * @deprecated Use `ThemeColorGenericState` instead.
6
+ */
7
+ export type ThemeColorButtonState = ThemeColorGenericState
8
+
9
+ /**
10
+ * @public
11
+ * @deprecated
12
+ */
13
+ export interface ThemeColorButtonStates {
14
+ enabled: ThemeColorGenericState
15
+ hovered: ThemeColorGenericState
16
+ pressed: ThemeColorGenericState
17
+ selected: ThemeColorGenericState
18
+ disabled: ThemeColorGenericState
19
+ }
20
+
21
+ /**
22
+ * TODO: Rename to `ThemeColorButtonMode`.
23
+ * @public
24
+ * @deprecated
25
+ */
26
+ export interface ThemeColorButtonTones {
27
+ default: ThemeColorButtonStates
28
+ primary: ThemeColorButtonStates
29
+ positive: ThemeColorButtonStates
30
+ caution: ThemeColorButtonStates
31
+ critical: ThemeColorButtonStates
32
+ }
33
+
34
+ /**
35
+ * @public
36
+ * @deprecated
37
+ */
38
+ export interface ThemeColorButton {
39
+ default: ThemeColorButtonTones
40
+ ghost: ThemeColorButtonTones
41
+ bleed: ThemeColorButtonTones
42
+ }
@@ -1,13 +1,14 @@
1
1
  import {ThemeColorGenericState} from './_generic'
2
2
 
3
3
  /**
4
- * @deprecated Use `ThemeColorGenericState` instead.
5
4
  * @public
5
+ * @deprecated Use `ThemeColorGenericState` instead.
6
6
  */
7
7
  export type ThemeColorCardState = ThemeColorGenericState
8
8
 
9
9
  /**
10
10
  * @public
11
+ * @deprecated
11
12
  */
12
13
  export interface ThemeColorCard {
13
14
  enabled: ThemeColorGenericState
@@ -0,0 +1,40 @@
1
+ import {ThemeColorCardToneKey, ThemeColorSchemeKey, ThemeColorSyntax} from '../../color'
2
+ import {ThemeColorGenericState} from './_generic'
3
+ import {ThemeColorBase} from './base'
4
+ import {ThemeColorButton} from './button'
5
+ import {ThemeColorCard} from './card'
6
+ import {ThemeColorInput} from './input'
7
+ import {ThemeColorMuted} from './muted'
8
+ import {ThemeColorSelectable} from './selectable'
9
+ import {ThemeColorSolid} from './solid'
10
+ import {ThemeColorSpot} from './spot'
11
+
12
+ /**
13
+ * @public
14
+ * @deprecated Use `ThemeColor_v2` instead.
15
+ */
16
+ export interface ThemeColor extends Partial<Omit<ThemeColorGenericState, 'muted'>> {
17
+ base: ThemeColorBase
18
+ button: ThemeColorButton
19
+ card: ThemeColorCard
20
+ dark: boolean
21
+ focusRing?: string
22
+ input: ThemeColorInput
23
+ muted: ThemeColorMuted
24
+ selectable?: ThemeColorSelectable
25
+ solid: ThemeColorSolid
26
+ spot: ThemeColorSpot
27
+ syntax: ThemeColorSyntax
28
+ }
29
+
30
+ /**
31
+ * @public
32
+ * @deprecated Use `ThemeColorScheme_v2` instead.
33
+ */
34
+ export type ThemeColorScheme = Record<ThemeColorCardToneKey, ThemeColor>
35
+
36
+ /**
37
+ * @public
38
+ * @deprecated Use `ThemeColorSchemes_v2` instead.
39
+ */
40
+ export type ThemeColorSchemes = Record<ThemeColorSchemeKey, ThemeColorScheme>
@@ -0,0 +1,11 @@
1
+ export * from './_generic'
2
+ export * from './_system'
3
+ export * from './base'
4
+ export * from './button'
5
+ export * from './card'
6
+ export * from './input'
7
+ export * from './muted'
8
+ export * from './selectable'
9
+ export * from './solid'
10
+ export * from './spot'
11
+ export * from './color'
@@ -0,0 +1,34 @@
1
+ import {ThemeColorBlendModeKey} from '../../color/_system'
2
+
3
+ /**
4
+ * @public
5
+ * @deprecated
6
+ */
7
+ export interface ThemeColorInputState {
8
+ _blend?: ThemeColorBlendModeKey
9
+ bg: string
10
+ bg2: string
11
+ border: string
12
+ fg: string
13
+ placeholder: string
14
+ }
15
+
16
+ /**
17
+ * @public
18
+ * @deprecated
19
+ */
20
+ export interface ThemeColorInputStates {
21
+ enabled: ThemeColorInputState
22
+ disabled: ThemeColorInputState
23
+ hovered: ThemeColorInputState
24
+ readOnly: ThemeColorInputState
25
+ }
26
+
27
+ /**
28
+ * @public
29
+ * @deprecated
30
+ */
31
+ export interface ThemeColorInput {
32
+ default: ThemeColorInputStates
33
+ invalid: ThemeColorInputStates
34
+ }
@@ -1,4 +1,4 @@
1
- import {ThemeColorGenericState} from '../_generic'
1
+ import {ThemeColorGenericState} from './_generic'
2
2
 
3
3
  /**
4
4
  * @public
@@ -0,0 +1,31 @@
1
+ import {ThemeColorGenericState} from './_generic'
2
+
3
+ /**
4
+ * @public
5
+ * @deprecated Use `ThemeColorState_v2` instead.
6
+ */
7
+ export type ThemeColorSelectableState = ThemeColorGenericState
8
+
9
+ /**
10
+ * @public
11
+ * @deprecated Use `ThemeColorSelectableStates_v2` instead.
12
+ */
13
+ export interface ThemeColorSelectableStates {
14
+ enabled: ThemeColorSelectableState
15
+ hovered: ThemeColorSelectableState
16
+ pressed: ThemeColorSelectableState
17
+ selected: ThemeColorSelectableState
18
+ disabled: ThemeColorSelectableState
19
+ }
20
+
21
+ /**
22
+ * @public
23
+ * @deprecated Use `ThemeColorSelectable_v2` instead.
24
+ */
25
+ export interface ThemeColorSelectable {
26
+ default: ThemeColorSelectableStates
27
+ primary: ThemeColorSelectableStates
28
+ positive: ThemeColorSelectableStates
29
+ caution: ThemeColorSelectableStates
30
+ critical: ThemeColorSelectableStates
31
+ }
@@ -1,4 +1,4 @@
1
- import {ThemeColorGenericState} from '../_generic'
1
+ import {ThemeColorGenericState} from './_generic'
2
2
 
3
3
  /**
4
4
  * @public
@@ -0,0 +1,13 @@
1
+ import {ThemeColorAvatarColorKey} from '../../color/_system'
2
+
3
+ /**
4
+ * @public
5
+ * @deprecated Use `ThemeColorAvatarColorKey` instead
6
+ */
7
+ export type ThemeColorSpotKey = ThemeColorAvatarColorKey
8
+
9
+ /**
10
+ * @public
11
+ * @deprecated Use `ThemeColorAvatar_v2` instead
12
+ */
13
+ export type ThemeColorSpot = Record<ThemeColorSpotKey, string>
@@ -0,0 +1 @@
1
+ export * from './color'
@@ -0,0 +1,35 @@
1
+ import {defaultThemeConfig} from '../defaults/config'
2
+ import {Theme, Theme_v2} from '../system'
3
+ import {themeColor_v0_v2} from './themeColor_v0_v2'
4
+
5
+ const cache = new WeakMap<Theme, Theme_v2>()
6
+
7
+ /** @public */
8
+ export function getTheme_v2(theme: Theme): Theme_v2 {
9
+ if (theme.sanity.v2) return theme.sanity.v2
10
+
11
+ const cached_v2 = cache.get(theme)
12
+
13
+ if (cached_v2) return cached_v2
14
+
15
+ const v2: Theme_v2 = {
16
+ _version: 2,
17
+ avatar: theme.sanity.avatar,
18
+ button: theme.sanity.button,
19
+ card: theme.sanity.card,
20
+ color: themeColor_v0_v2(theme.sanity.color),
21
+ container: theme.sanity.container,
22
+ font: theme.sanity.fonts,
23
+ input: theme.sanity.input,
24
+ layer: theme.sanity.layer ?? defaultThemeConfig.layer,
25
+ media: theme.sanity.media,
26
+ radius: theme.sanity.radius,
27
+ shadow: theme.sanity.shadows,
28
+ space: theme.sanity.space,
29
+ style: theme.sanity.styles,
30
+ }
31
+
32
+ cache.set(theme, v2)
33
+
34
+ return v2
35
+ }
@@ -0,0 +1,5 @@
1
+ export * from './getTheme_v2'
2
+ export * from './is_v0'
3
+ export * from './is_v2'
4
+ export * from './v0_v2'
5
+ export * from './v2_v0'
@@ -0,0 +1,6 @@
1
+ import {RootTheme, RootTheme_v2} from '../system'
2
+
3
+ /** @internal */
4
+ export function is_v0(themeProp: RootTheme | RootTheme_v2): themeProp is RootTheme {
5
+ return themeProp._version === 0
6
+ }
@@ -0,0 +1,6 @@
1
+ import {RootTheme, RootTheme_v2} from '../system'
2
+
3
+ /** @internal */
4
+ export function is_v2(themeProp: RootTheme | RootTheme_v2): themeProp is RootTheme_v2 {
5
+ return themeProp._version === 2
6
+ }
@@ -0,0 +1,217 @@
1
+ import {
2
+ ThemeColor,
3
+ ThemeColorGenericState,
4
+ ThemeColorMuted,
5
+ ThemeColorSelectable_v2,
6
+ ThemeColorState_v2,
7
+ ThemeColorCard_v2,
8
+ ThemeColorInputStates,
9
+ ThemeColorInputStates_v2,
10
+ ThemeColorInputState,
11
+ ThemeColorInputState_v2,
12
+ } from '../system'
13
+
14
+ const cache = new WeakMap<ThemeColor, ThemeColorCard_v2>()
15
+
16
+ /** @internal */
17
+ export function themeColor_v0_v2(color_v0: ThemeColor): ThemeColorCard_v2 {
18
+ const cached_v2 = cache.get(color_v0)
19
+
20
+ if (cached_v2) return cached_v2
21
+
22
+ const base = stateThemeColor_v0_v2(color_v0, color_v0.card.enabled)
23
+
24
+ const color_v2: ThemeColorCard_v2 = {
25
+ _blend: color_v0._blend || (color_v0.dark ? 'screen' : 'multiply'),
26
+ _dark: color_v0.dark,
27
+ accent: base.accent,
28
+ avatar: base.avatar,
29
+ backdrop: color_v0.base.shadow.ambient,
30
+ badge: base.badge,
31
+ bg: color_v0.base.bg,
32
+ border: color_v0.base.border,
33
+ button: {
34
+ default: stateTonesThemeColor_v0_v2(color_v0, color_v0.button.default),
35
+ ghost: stateTonesThemeColor_v0_v2(color_v0, color_v0.button.ghost),
36
+ bleed: stateTonesThemeColor_v0_v2(color_v0, color_v0.button.bleed),
37
+ },
38
+ code: base.code,
39
+ fg: color_v0.base.fg,
40
+ focusRing: color_v0.base.focusRing,
41
+ icon: base.muted.fg,
42
+ input: {
43
+ default: inputStatesThemeColor_v0_v2(color_v0.input.default),
44
+ invalid: inputStatesThemeColor_v0_v2(color_v0.input.invalid),
45
+ },
46
+ kbd: base.kbd,
47
+ link: base.link,
48
+ muted: {
49
+ ...base.muted,
50
+ bg: color_v0.selectable?.default.enabled.bg2 || color_v0.base.bg,
51
+ },
52
+ selectable: stateTonesThemeColor_v0_v2(color_v0, color_v0.selectable || color_v0.muted),
53
+ shadow: color_v0.base.shadow,
54
+ skeleton: {
55
+ from: color_v0.skeleton?.from || color_v0.base.border,
56
+ to: color_v0.skeleton?.to || color_v0.base.border,
57
+ },
58
+ syntax: color_v0.syntax,
59
+ }
60
+
61
+ cache.set(color_v0, color_v2)
62
+
63
+ return color_v2
64
+ }
65
+
66
+ function stateTonesThemeColor_v0_v2(
67
+ v0: ThemeColor,
68
+ t: Omit<ThemeColorMuted, 'transparent'>,
69
+ ): ThemeColorSelectable_v2 {
70
+ return {
71
+ default: {
72
+ enabled: stateThemeColor_v0_v2(v0, t.default.enabled),
73
+ hovered: stateThemeColor_v0_v2(v0, t.default.hovered),
74
+ pressed: stateThemeColor_v0_v2(v0, t.default.pressed),
75
+ selected: stateThemeColor_v0_v2(v0, t.default.selected),
76
+ disabled: stateThemeColor_v0_v2(v0, t.default.disabled),
77
+ },
78
+ primary: {
79
+ enabled: stateThemeColor_v0_v2(v0, t.primary.enabled),
80
+ hovered: stateThemeColor_v0_v2(v0, t.primary.hovered),
81
+ pressed: stateThemeColor_v0_v2(v0, t.primary.pressed),
82
+ selected: stateThemeColor_v0_v2(v0, t.primary.selected),
83
+ disabled: stateThemeColor_v0_v2(v0, t.primary.disabled),
84
+ },
85
+ positive: {
86
+ enabled: stateThemeColor_v0_v2(v0, t.positive.enabled),
87
+ hovered: stateThemeColor_v0_v2(v0, t.positive.hovered),
88
+ pressed: stateThemeColor_v0_v2(v0, t.positive.pressed),
89
+ selected: stateThemeColor_v0_v2(v0, t.positive.selected),
90
+ disabled: stateThemeColor_v0_v2(v0, t.positive.disabled),
91
+ },
92
+ caution: {
93
+ enabled: stateThemeColor_v0_v2(v0, t.caution.enabled),
94
+ hovered: stateThemeColor_v0_v2(v0, t.caution.hovered),
95
+ pressed: stateThemeColor_v0_v2(v0, t.caution.pressed),
96
+ selected: stateThemeColor_v0_v2(v0, t.caution.selected),
97
+ disabled: stateThemeColor_v0_v2(v0, t.caution.disabled),
98
+ },
99
+ critical: {
100
+ enabled: stateThemeColor_v0_v2(v0, t.critical.enabled),
101
+ hovered: stateThemeColor_v0_v2(v0, t.critical.hovered),
102
+ pressed: stateThemeColor_v0_v2(v0, t.critical.pressed),
103
+ selected: stateThemeColor_v0_v2(v0, t.critical.selected),
104
+ disabled: stateThemeColor_v0_v2(v0, t.critical.disabled),
105
+ },
106
+ }
107
+ }
108
+
109
+ function stateThemeColor_v0_v2(v0: ThemeColor, state: ThemeColorGenericState): ThemeColorState_v2 {
110
+ return {
111
+ ...state,
112
+ avatar: {
113
+ gray: {
114
+ bg: v0.spot.gray,
115
+ fg: v0.base.bg,
116
+ },
117
+ blue: {
118
+ bg: v0.spot.blue,
119
+ fg: v0.base.bg,
120
+ },
121
+ purple: {
122
+ bg: v0.spot.purple,
123
+ fg: v0.base.bg,
124
+ },
125
+ magenta: {
126
+ bg: v0.spot.magenta,
127
+ fg: v0.base.bg,
128
+ },
129
+ red: {
130
+ bg: v0.spot.red,
131
+ fg: v0.base.bg,
132
+ },
133
+ orange: {
134
+ bg: v0.spot.orange,
135
+ fg: v0.base.bg,
136
+ },
137
+ yellow: {
138
+ bg: v0.spot.yellow,
139
+ fg: v0.base.bg,
140
+ },
141
+ green: {
142
+ bg: v0.spot.green,
143
+ fg: v0.base.bg,
144
+ },
145
+ cyan: {
146
+ bg: v0.spot.cyan,
147
+ fg: v0.base.bg,
148
+ },
149
+ },
150
+ badge: {
151
+ default: {
152
+ bg: v0.muted.default.enabled.bg,
153
+ fg: v0.muted.default.enabled.fg,
154
+ dot: v0.muted.default.enabled.muted.fg,
155
+ icon: v0.muted.default.enabled.muted.fg,
156
+ },
157
+ primary: {
158
+ bg: v0.muted.primary.enabled.bg,
159
+ fg: v0.muted.primary.enabled.fg,
160
+ dot: v0.muted.primary.enabled.muted.fg,
161
+ icon: v0.muted.primary.enabled.muted.fg,
162
+ },
163
+ positive: {
164
+ bg: v0.muted.positive.enabled.bg,
165
+ fg: v0.muted.positive.enabled.fg,
166
+ dot: v0.muted.positive.enabled.muted.fg,
167
+ icon: v0.muted.positive.enabled.muted.fg,
168
+ },
169
+ caution: {
170
+ bg: v0.muted.caution.enabled.bg,
171
+ fg: v0.muted.caution.enabled.fg,
172
+ dot: v0.muted.caution.enabled.muted.fg,
173
+ icon: v0.muted.caution.enabled.muted.fg,
174
+ },
175
+ critical: {
176
+ bg: v0.muted.critical.enabled.bg,
177
+ fg: v0.muted.critical.enabled.fg,
178
+ dot: v0.muted.critical.enabled.muted.fg,
179
+ icon: v0.muted.critical.enabled.muted.fg,
180
+ },
181
+ },
182
+ kbd: {
183
+ bg: v0.muted.default.enabled.bg,
184
+ fg: v0.muted.default.enabled.fg,
185
+ border: v0.muted.default.enabled.border,
186
+ },
187
+ muted: {
188
+ ...v0.muted.default.enabled.muted,
189
+ bg: state.bg2 || state.bg,
190
+ },
191
+ skeleton: {
192
+ from: state.skeleton?.from || state.border,
193
+ to: state.skeleton?.to || state.border,
194
+ },
195
+ }
196
+ }
197
+
198
+ function inputStatesThemeColor_v0_v2(states: ThemeColorInputStates): ThemeColorInputStates_v2 {
199
+ return {
200
+ enabled: inputStateThemeColor_v0_v2(states.enabled),
201
+ disabled: inputStateThemeColor_v0_v2(states.disabled),
202
+ readOnly: inputStateThemeColor_v0_v2(states.readOnly),
203
+ hovered: inputStateThemeColor_v0_v2(states.hovered),
204
+ }
205
+ }
206
+
207
+ function inputStateThemeColor_v0_v2(state: ThemeColorInputState): ThemeColorInputState_v2 {
208
+ return {
209
+ bg: state.bg,
210
+ border: state.border,
211
+ fg: state.fg,
212
+ muted: {
213
+ bg: state.bg2,
214
+ },
215
+ placeholder: state.placeholder,
216
+ }
217
+ }
@@ -0,0 +1,70 @@
1
+ import {defaultThemeConfig} from '../defaults/config'
2
+ import {RootTheme, RootTheme_v2} from '../system'
3
+ import {themeColor_v0_v2} from './themeColor_v0_v2'
4
+
5
+ const cache = new WeakMap<RootTheme, RootTheme_v2>()
6
+
7
+ /** @internal */
8
+ export function v0_v2(v0: RootTheme): RootTheme_v2 {
9
+ if (v0.v2) return v0.v2
10
+
11
+ const cached_v2 = cache.get(v0)
12
+
13
+ if (cached_v2) return cached_v2
14
+
15
+ const {
16
+ avatar,
17
+ button,
18
+ card,
19
+ color,
20
+ container,
21
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
22
+ focusRing: _unused_focusRing,
23
+ fonts: font,
24
+ input,
25
+ layer,
26
+ media,
27
+ radius,
28
+ shadows: shadow,
29
+ space,
30
+ styles: style,
31
+ } = v0
32
+
33
+ const v2: RootTheme_v2 = {
34
+ _version: 2,
35
+ avatar,
36
+ button,
37
+ card,
38
+ color: {
39
+ light: {
40
+ transparent: themeColor_v0_v2(color.light.transparent),
41
+ default: themeColor_v0_v2(color.light.default),
42
+ primary: themeColor_v0_v2(color.light.primary),
43
+ positive: themeColor_v0_v2(color.light.positive),
44
+ caution: themeColor_v0_v2(color.light.caution),
45
+ critical: themeColor_v0_v2(color.light.critical),
46
+ },
47
+ dark: {
48
+ transparent: themeColor_v0_v2(color.dark.transparent),
49
+ default: themeColor_v0_v2(color.dark.default),
50
+ primary: themeColor_v0_v2(color.dark.primary),
51
+ positive: themeColor_v0_v2(color.dark.positive),
52
+ caution: themeColor_v0_v2(color.dark.caution),
53
+ critical: themeColor_v0_v2(color.dark.critical),
54
+ },
55
+ },
56
+ container,
57
+ font,
58
+ input,
59
+ layer: layer ?? defaultThemeConfig.layer,
60
+ media,
61
+ radius,
62
+ shadow,
63
+ space,
64
+ style,
65
+ }
66
+
67
+ cache.set(v0, v2)
68
+
69
+ return v2
70
+ }