@sanity/ui 2.0.0-alpha.34 → 2.0.0-alpha.36

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 -518
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +413 -534
  6. package/dist/index.js.map +1 -1
  7. package/dist/theme.cjs.mjs +10 -4
  8. package/dist/theme.d.ts +489 -201
  9. package/dist/theme.esm.js +2934 -2748
  10. package/dist/theme.esm.js.map +1 -1
  11. package/dist/theme.js +2943 -2751
  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 +7 -11
  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 +128 -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 +38 -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 +72 -0
  153. package/src/theme/versioning/v2_v0.ts +126 -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
@@ -0,0 +1,128 @@
1
+ import {ThemeAvatar} from './avatar'
2
+ import {ThemeColorSchemes_v2, ThemeColorCard_v2} from './color'
3
+ import {ThemeFocusRing} from './focusRing'
4
+ import {ThemeFontWeightKey, ThemeFonts} from './fonts'
5
+ import {ThemeInput} from './input'
6
+ import {ThemeLayer} from './layer'
7
+ import {ThemeShadow} from './shadow'
8
+ import {ThemeStyles} from './styles'
9
+ import {ThemeColor, ThemeColorSchemes} from './v0'
10
+
11
+ /**
12
+ * @public
13
+ */
14
+ export interface RootTheme_v2 {
15
+ _version: 2
16
+ avatar: ThemeAvatar
17
+ button: {
18
+ border: {width: number}
19
+ focusRing: ThemeFocusRing
20
+ textWeight: ThemeFontWeightKey
21
+ }
22
+ card: {
23
+ border: {width: number}
24
+ focusRing: ThemeFocusRing
25
+ shadow: {outline: number}
26
+ }
27
+ color: ThemeColorSchemes_v2
28
+ container: number[]
29
+ font: ThemeFonts
30
+ input: ThemeInput
31
+ layer: ThemeLayer
32
+ media: number[]
33
+ radius: number[]
34
+ shadow: Array<ThemeShadow | null>
35
+ space: number[]
36
+ style?: ThemeStyles
37
+ }
38
+
39
+ /**
40
+ * @public
41
+ */
42
+ export interface BaseTheme {
43
+ _version?: 0
44
+ /**
45
+ * @deprecated Use `v2.avatar` instead
46
+ */
47
+ avatar: ThemeAvatar
48
+ /**
49
+ * @deprecated Use `v2.button` instead
50
+ */
51
+ button: {
52
+ textWeight: ThemeFontWeightKey
53
+ }
54
+ /**
55
+ * @deprecated Use `v2.color` instead
56
+ */
57
+ color: ThemeColorSchemes
58
+ /**
59
+ * @deprecated Use `v2.container` instead
60
+ */
61
+ container: number[]
62
+ /**
63
+ * @deprecated Use component-specific `v2.{button | card | input}.focusRing` values instead
64
+ */
65
+ focusRing: {
66
+ offset: number
67
+ width: number
68
+ }
69
+ /**
70
+ * @deprecated Use `v2.font` instead
71
+ */
72
+ fonts: ThemeFonts
73
+ /**
74
+ * @deprecated Use `v2.input` instead
75
+ */
76
+ input: ThemeInput
77
+ /**
78
+ * THIS API MAY BE UNSTABLE. DO NOT USE IN PRODUCTION.
79
+ * @beta
80
+ * @deprecated Use `v2.layer` instead
81
+ */
82
+ layer?: ThemeLayer
83
+ /**
84
+ * @deprecated Use `v2.media` instead
85
+ */
86
+ media: number[]
87
+ /**
88
+ * @deprecated Use `v2.radius` instead
89
+ */
90
+ radius: number[]
91
+ /**
92
+ * @deprecated Use `v2.shadow` instead
93
+ */
94
+ shadows: Array<ThemeShadow | null>
95
+ /**
96
+ * @deprecated Use `v2.space` instead
97
+ */
98
+ space: number[]
99
+ /**
100
+ * @deprecated Use `v2.style` instead
101
+ */
102
+ styles?: ThemeStyles
103
+
104
+ v2?: RootTheme_v2
105
+ }
106
+
107
+ /**
108
+ * @public
109
+ */
110
+ export type RootTheme = BaseTheme
111
+
112
+ /**
113
+ * @public
114
+ */
115
+ export type Theme_v2 = Omit<RootTheme_v2, 'color'> & {color: ThemeColorCard_v2}
116
+
117
+ /**
118
+ * @public
119
+ */
120
+ export interface Theme {
121
+ sanity: Omit<RootTheme, 'color' | 'v2'> & {
122
+ /**
123
+ * @deprecated Use `v2.color` instead
124
+ */
125
+ color: ThemeColor
126
+ v2?: Theme_v2
127
+ }
128
+ }
@@ -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,38 @@
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: {
19
+ ...defaultThemeConfig.button,
20
+ ...theme.sanity.button,
21
+ },
22
+ card: defaultThemeConfig.card,
23
+ color: themeColor_v0_v2(theme.sanity.color),
24
+ container: theme.sanity.container,
25
+ font: theme.sanity.fonts,
26
+ input: theme.sanity.input,
27
+ layer: theme.sanity.layer ?? defaultThemeConfig.layer,
28
+ media: theme.sanity.media,
29
+ radius: theme.sanity.radius,
30
+ shadow: theme.sanity.shadows,
31
+ space: theme.sanity.space,
32
+ style: theme.sanity.styles,
33
+ }
34
+
35
+ cache.set(theme, v2)
36
+
37
+ return v2
38
+ }
@@ -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
+ }