@sanity/ui 2.0.0-alpha.14 → 2.0.0-alpha.16
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.
- package/dist/index.d.ts +22 -0
- package/dist/index.esm.js +256 -142
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +256 -142
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/dialog/dialog.tsx +10 -10
- package/src/theme/_internal/__workshop__/build/story.tsx +141 -31
- package/src/theme/_internal/build/buildTheme.ts +6 -5
- package/src/theme/_internal/build/colorTheme/buildColorTheme.ts +49 -107
- package/src/theme/_internal/build/colorTheme/renderColorTheme.ts +51 -35
- package/src/theme/_internal/build/colorTheme/resolveColorTokens.ts +121 -0
- package/src/theme/_internal/build/defaults/colorTokens.ts +28 -5
- package/src/theme/_internal/build/helpers.ts +5 -4
- package/src/theme/_internal/config/types.ts +11 -0
- package/src/theme/_internal/types.ts +19 -0
package/package.json
CHANGED
|
@@ -309,10 +309,9 @@ const DialogCard = forwardRef(function DialogCard(
|
|
|
309
309
|
<DialogHeader
|
|
310
310
|
$isContentScrollable={isContentScrollable}
|
|
311
311
|
$hasScrolledFromTop={hasScrolledFromTop}
|
|
312
|
-
padding={3}
|
|
313
312
|
>
|
|
314
313
|
<Flex align="center">
|
|
315
|
-
<Box flex={1} padding={
|
|
314
|
+
<Box flex={1} margin={1} padding={4}>
|
|
316
315
|
{header && (
|
|
317
316
|
<Text id={labelId} size={1} weight="medium">
|
|
318
317
|
{header}
|
|
@@ -320,14 +319,15 @@ const DialogCard = forwardRef(function DialogCard(
|
|
|
320
319
|
)}
|
|
321
320
|
</Box>
|
|
322
321
|
{showCloseButton && (
|
|
323
|
-
<
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
322
|
+
<Box padding={3}>
|
|
323
|
+
<Button
|
|
324
|
+
aria-label="Close dialog"
|
|
325
|
+
disabled={!onClose}
|
|
326
|
+
icon={CloseIcon}
|
|
327
|
+
mode="bleed"
|
|
328
|
+
onClick={onClose}
|
|
329
|
+
/>
|
|
330
|
+
</Box>
|
|
331
331
|
)}
|
|
332
332
|
</Flex>
|
|
333
333
|
</DialogHeader>
|
|
@@ -34,45 +34,71 @@ const Root = styled.div`
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
.button {
|
|
37
|
-
background-color: var(--
|
|
38
|
-
color: var(--
|
|
37
|
+
background-color: var(--bg);
|
|
38
|
+
color: var(--fg);
|
|
39
39
|
box-shadow:
|
|
40
|
-
inset 0 0 0 1px var(--border
|
|
41
|
-
0 1px 0 0 color-mix(in srgb, var(--border
|
|
40
|
+
inset 0 0 0 1px var(--border),
|
|
41
|
+
0 1px 0 0 color-mix(in srgb, var(--border), transparent 75%);
|
|
42
42
|
text-align: center;
|
|
43
43
|
border-radius: 3px;
|
|
44
44
|
font-weight: 500;
|
|
45
45
|
cursor: default;
|
|
46
|
-
transition: box-shadow
|
|
46
|
+
transition: box-shadow 50ms ease-in-out;
|
|
47
47
|
|
|
48
|
-
--
|
|
48
|
+
--bg: var(--button-enabled-bg);
|
|
49
|
+
--fg: var(--button-enabled-fg);
|
|
50
|
+
--border: var(--button-enabled-border);
|
|
51
|
+
--bg2: var(--button-enabled-bg2);
|
|
52
|
+
--muted-fg: var(--button-enabled-muted-fg);
|
|
49
53
|
}
|
|
50
54
|
|
|
51
55
|
.button:hover {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
--border
|
|
56
|
+
--bg: var(--button-hovered-bg);
|
|
57
|
+
--fg: var(--button-hovered-fg);
|
|
58
|
+
--border: var(--button-hovered-border);
|
|
59
|
+
--bg2: var(--button-hovered-bg2);
|
|
60
|
+
--muted-fg: var(--button-hovered-muted-fg);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.button:focus {
|
|
64
|
+
outline: none;
|
|
65
|
+
box-shadow:
|
|
66
|
+
inset 0 0 0 1px var(--border),
|
|
67
|
+
0 0 0 1px var(--base-bg),
|
|
68
|
+
0 0 0 3px var(--focus-ring);
|
|
69
|
+
|
|
70
|
+
--bg: var(--button-hovered-bg);
|
|
71
|
+
--fg: var(--button-hovered-fg);
|
|
72
|
+
--border: var(--button-hovered-border);
|
|
73
|
+
--bg2: var(--button-hovered-bg2);
|
|
74
|
+
--muted-fg: var(--button-hovered-muted-fg);
|
|
55
75
|
}
|
|
56
76
|
|
|
57
77
|
.button:active {
|
|
58
78
|
background-color: var(--button-pressed-bg);
|
|
59
79
|
color: var(--button-pressed-fg);
|
|
60
|
-
|
|
61
|
-
|
|
80
|
+
box-shadow: inset 0 0 0 1px var(--border);
|
|
81
|
+
--border: var(--button-pressed-border);
|
|
82
|
+
--bg2: var(--button-pressed-bg2);
|
|
83
|
+
--muted-fg: var(--button-pressed-muted-fg);
|
|
62
84
|
}
|
|
63
85
|
|
|
64
86
|
.button.selected {
|
|
65
87
|
background-color: var(--button-selected-bg);
|
|
66
88
|
color: var(--button-selected-fg);
|
|
67
|
-
|
|
68
|
-
|
|
89
|
+
box-shadow: inset 0 0 0 1px var(--border);
|
|
90
|
+
--border: var(--button-selected-border);
|
|
91
|
+
--bg2: var(--button-selected-bg2);
|
|
92
|
+
--muted-fg: var(--button-selected-muted-fg);
|
|
69
93
|
}
|
|
70
94
|
|
|
71
95
|
.button.disabled {
|
|
72
96
|
background-color: var(--button-disabled-bg);
|
|
73
97
|
color: var(--button-disabled-fg);
|
|
74
|
-
|
|
75
|
-
|
|
98
|
+
box-shadow: inset 0 0 0 1px var(--border);
|
|
99
|
+
--border: var(--button-disabled-border);
|
|
100
|
+
--bg2: var(--button-disabled-bg2);
|
|
101
|
+
--muted-fg: var(--button-disabled-muted-fg);
|
|
76
102
|
}
|
|
77
103
|
`
|
|
78
104
|
|
|
@@ -107,17 +133,44 @@ function BaseTonePreview(props: {
|
|
|
107
133
|
<div
|
|
108
134
|
style={
|
|
109
135
|
{
|
|
110
|
-
backgroundColor:
|
|
111
|
-
color:
|
|
112
|
-
|
|
136
|
+
backgroundColor: 'var(--bg)',
|
|
137
|
+
color: 'var(--fg)',
|
|
138
|
+
|
|
139
|
+
'--base-bg': color[baseTone].base.bg,
|
|
140
|
+
'--bg': 'var(--base-bg)',
|
|
141
|
+
'--fg': color[baseTone].base.fg,
|
|
142
|
+
'--border': color[baseTone].base.border,
|
|
143
|
+
'--focus-ring': color[baseTone].base.focusRing,
|
|
144
|
+
'--shadow-outline': color[baseTone].base.shadow.outline,
|
|
145
|
+
'--shadow-umbra': color[baseTone].base.shadow.umbra,
|
|
146
|
+
'--shadow-penumbra': color[baseTone].base.shadow.penumbra,
|
|
147
|
+
'--shadow-ambient': color[baseTone].base.shadow.ambient,
|
|
148
|
+
'--skeleton-from': color[baseTone].base.skeleton.from,
|
|
149
|
+
'--skeleton-to': color[baseTone].base.skeleton.to,
|
|
113
150
|
} as any
|
|
114
151
|
}
|
|
115
152
|
>
|
|
116
|
-
<div style={{maxWidth:
|
|
153
|
+
<div style={{maxWidth: 320, margin: 'auto', padding: '20px 0'}}>
|
|
117
154
|
<pre style={{padding: 12}}>
|
|
118
155
|
color/{scheme}/{baseTone}
|
|
119
156
|
</pre>
|
|
120
|
-
<div style={{padding:
|
|
157
|
+
<div style={{padding: 12}}>
|
|
158
|
+
<div
|
|
159
|
+
style={{
|
|
160
|
+
boxShadow: [
|
|
161
|
+
`0 0 0 1px var(--shadow-outline)`,
|
|
162
|
+
`0 6px 8px -4px var(--shadow-umbra)`,
|
|
163
|
+
`0 12px 17px 2px var(--shadow-penumbra)`,
|
|
164
|
+
`0 5px 22px 4px var(--shadow-ambient)`,
|
|
165
|
+
].join(', '),
|
|
166
|
+
padding: 12,
|
|
167
|
+
borderRadius: 3,
|
|
168
|
+
}}
|
|
169
|
+
>
|
|
170
|
+
Shadow
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
<div style={{marginTop: 20, padding: '1px 12px 12px 12px'}}>
|
|
121
174
|
{COLOR_BUTTON_MODES.map((mode) => (
|
|
122
175
|
<div key={mode} style={{display: 'flex', flexDirection: 'column'}}>
|
|
123
176
|
{COLOR_STATE_TONES.map((tone) => {
|
|
@@ -128,43 +181,100 @@ function BaseTonePreview(props: {
|
|
|
128
181
|
key={tone}
|
|
129
182
|
style={
|
|
130
183
|
{
|
|
131
|
-
border: '1px solid var(--border
|
|
184
|
+
border: '1px solid var(--border)',
|
|
132
185
|
padding: 4,
|
|
133
186
|
display: 'flex',
|
|
187
|
+
flexDirection: 'column',
|
|
134
188
|
marginTop: -1,
|
|
135
|
-
gap: 4,
|
|
136
189
|
|
|
137
190
|
'--button-enabled-bg': button.enabled.bg,
|
|
191
|
+
'--button-enabled-bg2': button.enabled.bg2,
|
|
138
192
|
'--button-enabled-fg': button.enabled.fg,
|
|
139
193
|
'--button-enabled-border': button.enabled.border,
|
|
194
|
+
'--button-enabled-muted-fg': button.enabled.muted.fg,
|
|
140
195
|
|
|
141
196
|
'--button-hovered-bg': button.hovered.bg,
|
|
197
|
+
'--button-hovered-bg2': button.hovered.bg2,
|
|
142
198
|
'--button-hovered-fg': button.hovered.fg,
|
|
143
199
|
'--button-hovered-border': button.hovered.border,
|
|
200
|
+
'--button-hovered-muted-fg': button.hovered.muted.fg,
|
|
144
201
|
|
|
145
202
|
'--button-pressed-bg': button.pressed.bg,
|
|
203
|
+
'--button-pressed-bg2': button.pressed.bg2,
|
|
146
204
|
'--button-pressed-fg': button.pressed.fg,
|
|
147
205
|
'--button-pressed-border': button.pressed.border,
|
|
206
|
+
'--button-pressed-muted-fg': button.pressed.muted.fg,
|
|
148
207
|
|
|
149
208
|
'--button-selected-bg': button.selected.bg,
|
|
209
|
+
'--button-selected-bg2': button.selected.bg2,
|
|
150
210
|
'--button-selected-fg': button.selected.fg,
|
|
151
211
|
'--button-selected-border': button.selected.border,
|
|
212
|
+
'--button-selected-muted-fg': button.selected.muted.fg,
|
|
152
213
|
|
|
153
214
|
'--button-disabled-bg': button.disabled.bg,
|
|
215
|
+
'--button-disabled-bg2': button.disabled.bg2,
|
|
154
216
|
'--button-disabled-fg': button.disabled.fg,
|
|
155
217
|
'--button-disabled-border': button.disabled.border,
|
|
218
|
+
'--button-disabled-muted-fg': button.disabled.muted.fg,
|
|
156
219
|
} as any
|
|
157
220
|
}
|
|
158
221
|
>
|
|
159
|
-
<pre style={{
|
|
160
|
-
<div
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
222
|
+
<pre style={{padding: 8}}>{`mode="${mode}" tone="${tone}"`}</pre>
|
|
223
|
+
<div
|
|
224
|
+
style={{
|
|
225
|
+
display: 'flex',
|
|
226
|
+
gap: 4,
|
|
227
|
+
}}
|
|
228
|
+
>
|
|
229
|
+
<div
|
|
230
|
+
className="button"
|
|
231
|
+
style={{flex: 'none', padding: 8, display: 'flex', gap: 4}}
|
|
232
|
+
tabIndex={0}
|
|
233
|
+
>
|
|
234
|
+
<div style={{flex: 'none'}}>Button</div>
|
|
235
|
+
<div style={{flex: 'none', color: 'var(--muted-fg)'}}>m</div>
|
|
236
|
+
<div style={{flex: 'none'}}>
|
|
237
|
+
<div
|
|
238
|
+
style={{
|
|
239
|
+
width: 4,
|
|
240
|
+
height: 9,
|
|
241
|
+
backgroundColor: 'var(--button-enabled-bg2)',
|
|
242
|
+
}}
|
|
243
|
+
/>
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
<div
|
|
247
|
+
className="button selected"
|
|
248
|
+
style={{flex: 'none', padding: 8, display: 'flex', gap: 4}}
|
|
249
|
+
>
|
|
250
|
+
<div style={{flex: 'none'}}>Button</div>
|
|
251
|
+
<div style={{flex: 'none', color: 'var(--muted-fg)'}}>m</div>
|
|
252
|
+
<div style={{flex: 'none'}}>
|
|
253
|
+
<div
|
|
254
|
+
style={{
|
|
255
|
+
width: 4,
|
|
256
|
+
height: 9,
|
|
257
|
+
backgroundColor: 'var(--bg2)',
|
|
258
|
+
}}
|
|
259
|
+
/>
|
|
260
|
+
</div>
|
|
261
|
+
</div>
|
|
262
|
+
<div
|
|
263
|
+
className="button disabled"
|
|
264
|
+
style={{flex: 'none', padding: 8, display: 'flex', gap: 4}}
|
|
265
|
+
>
|
|
266
|
+
<div style={{flex: 'none'}}>Button</div>
|
|
267
|
+
<div style={{flex: 'none', color: 'var(--muted-fg)'}}>m</div>
|
|
268
|
+
<div style={{flex: 'none'}}>
|
|
269
|
+
<div
|
|
270
|
+
style={{
|
|
271
|
+
width: 4,
|
|
272
|
+
height: 9,
|
|
273
|
+
backgroundColor: 'var(--bg2)',
|
|
274
|
+
}}
|
|
275
|
+
/>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
168
278
|
</div>
|
|
169
279
|
</div>
|
|
170
280
|
)
|
|
@@ -2,14 +2,15 @@ import {ThemeConfig} from '../config'
|
|
|
2
2
|
import {TMP_Theme} from '../types'
|
|
3
3
|
import {buildColorTheme} from './colorTheme/buildColorTheme'
|
|
4
4
|
import {renderColorTheme} from './colorTheme/renderColorTheme'
|
|
5
|
-
import {defaultColorPalette} from './defaults/colorPalette'
|
|
6
5
|
|
|
7
6
|
/** @internal */
|
|
8
7
|
export function buildTheme(config?: ThemeConfig): TMP_Theme {
|
|
8
|
+
const color: TMP_Theme['color'] = {
|
|
9
|
+
light: buildColorTheme({scheme: 'light'}, config),
|
|
10
|
+
dark: buildColorTheme({scheme: 'dark'}, config),
|
|
11
|
+
}
|
|
12
|
+
|
|
9
13
|
return {
|
|
10
|
-
color: renderColorTheme(
|
|
11
|
-
light: buildColorTheme({scheme: 'light'}, config),
|
|
12
|
-
dark: buildColorTheme({scheme: 'dark'}, config),
|
|
13
|
-
}),
|
|
14
|
+
color: renderColorTheme(color, config),
|
|
14
15
|
}
|
|
15
16
|
}
|
|
@@ -13,7 +13,8 @@ import {
|
|
|
13
13
|
TMP_StateColorTheme,
|
|
14
14
|
} from '../../types'
|
|
15
15
|
import {defaultColorTokens} from '../defaults/colorTokens'
|
|
16
|
-
import {resolveColorTokenValue} from '../helpers'
|
|
16
|
+
import {ColorTokenContext, resolveColorTokenValue as _color} from '../helpers'
|
|
17
|
+
import {resolveColorTokens} from './resolveColorTokens'
|
|
17
18
|
|
|
18
19
|
export function buildColorTheme(
|
|
19
20
|
options: {scheme: 'light' | 'dark'},
|
|
@@ -21,13 +22,21 @@ export function buildColorTheme(
|
|
|
21
22
|
): TMP_ColorTheme {
|
|
22
23
|
const {scheme} = options
|
|
23
24
|
|
|
25
|
+
const resolvedConfig = {
|
|
26
|
+
...config,
|
|
27
|
+
color: {
|
|
28
|
+
...config?.color,
|
|
29
|
+
tokens: resolveColorTokens(config?.color?.tokens ?? defaultColorTokens),
|
|
30
|
+
},
|
|
31
|
+
}
|
|
32
|
+
|
|
24
33
|
return {
|
|
25
|
-
transparent: buildBaseColorTheme({scheme, tone: 'transparent'},
|
|
26
|
-
default: buildBaseColorTheme({scheme, tone: 'default'},
|
|
27
|
-
primary: buildBaseColorTheme({scheme, tone: 'primary'},
|
|
28
|
-
positive: buildBaseColorTheme({scheme, tone: 'positive'},
|
|
29
|
-
caution: buildBaseColorTheme({scheme, tone: 'caution'},
|
|
30
|
-
critical: buildBaseColorTheme({scheme, tone: 'critical'},
|
|
34
|
+
transparent: buildBaseColorTheme({scheme, tone: 'transparent'}, resolvedConfig),
|
|
35
|
+
default: buildBaseColorTheme({scheme, tone: 'default'}, resolvedConfig),
|
|
36
|
+
primary: buildBaseColorTheme({scheme, tone: 'primary'}, resolvedConfig),
|
|
37
|
+
positive: buildBaseColorTheme({scheme, tone: 'positive'}, resolvedConfig),
|
|
38
|
+
caution: buildBaseColorTheme({scheme, tone: 'caution'}, resolvedConfig),
|
|
39
|
+
critical: buildBaseColorTheme({scheme, tone: 'critical'}, resolvedConfig),
|
|
31
40
|
}
|
|
32
41
|
}
|
|
33
42
|
|
|
@@ -36,34 +45,30 @@ export function buildBaseColorTheme(
|
|
|
36
45
|
config?: ThemeConfig,
|
|
37
46
|
): TMP_BaseColorTheme {
|
|
38
47
|
const {scheme, tone} = options
|
|
39
|
-
const tokens = config?.color?.tokens
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
const bg = resolveColorTokenValue({
|
|
45
|
-
hue,
|
|
46
|
-
scheme,
|
|
47
|
-
value: toneTokens?.bg || any?.bg || ['gray/50', 'black'],
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
const _blend = toneTokens?._blend || any?._blend || ['screen', 'multiply']
|
|
48
|
+
const tokens = config?.color?.tokens?.[tone]
|
|
49
|
+
const hue = tokens?._hue || 'gray'
|
|
50
|
+
const context: ColorTokenContext = {hue, scheme}
|
|
51
|
+
const bg = _color(context, tokens?.bg || ['gray/50', 'black'])
|
|
52
|
+
const blendMode = tokens?._blend || ['screen', 'multiply']
|
|
51
53
|
|
|
52
54
|
return {
|
|
53
|
-
_blend:
|
|
55
|
+
_blend: blendMode[scheme === 'light' ? 0 : 1],
|
|
54
56
|
dark: scheme === 'dark',
|
|
55
57
|
base: {
|
|
56
58
|
bg,
|
|
57
|
-
fg:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
59
|
+
fg: _color(context, tokens?.fg || ['black', 'white']),
|
|
60
|
+
border: _color(context, tokens?.border || ['black', 'white']),
|
|
61
|
+
focusRing: _color(context, tokens?.focusRing || ['black', 'white']),
|
|
62
|
+
shadow: {
|
|
63
|
+
outline: _color(context, tokens?.shadow?.outline || ['500/0.2', '500/0.2']),
|
|
64
|
+
umbra: _color(context, tokens?.shadow?.umbra || ['500/0.2', '500/0.2']),
|
|
65
|
+
penumbra: _color(context, tokens?.shadow?.penumbra || ['500/0.2', '500/0.2']),
|
|
66
|
+
ambient: _color(context, tokens?.shadow?.ambient || ['500/0.2', '500/0.2']),
|
|
67
|
+
},
|
|
68
|
+
skeleton: {
|
|
69
|
+
from: _color(context, tokens?.skeleton?.from || ['500/0.2', '500/0.2']),
|
|
70
|
+
to: _color(context, tokens?.skeleton?.to || ['500/0.2', '500/0.2']),
|
|
71
|
+
},
|
|
67
72
|
},
|
|
68
73
|
button: buildButtonColorTheme({scheme}, config),
|
|
69
74
|
}
|
|
@@ -131,92 +136,29 @@ function buildButtonStateColorTheme(
|
|
|
131
136
|
config?: ThemeConfig,
|
|
132
137
|
): TMP_StateColorTheme {
|
|
133
138
|
const {mode, tone, scheme, state} = options
|
|
134
|
-
const tokens = config?.color?.tokens
|
|
135
|
-
const hue =
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
tokens?.button?.[tone]?._hue ||
|
|
139
|
-
tokens?.[tone]?._hue ||
|
|
140
|
-
'gray'
|
|
141
|
-
const spec3 = tokens?.button?.['*']?.[mode]?.['*']
|
|
142
|
-
const spec2 = tokens?.button?.['*']?.[mode]?.[state]
|
|
143
|
-
const spec1 = tokens?.button?.[tone]?.[mode]?.['*']
|
|
144
|
-
const spec0 = tokens?.button?.[tone]?.[mode]?.[state]
|
|
145
|
-
|
|
146
|
-
const _blend = spec0?._blend ||
|
|
147
|
-
spec1?._blend ||
|
|
148
|
-
spec2?._blend ||
|
|
149
|
-
spec3?._blend || ['screen', 'multiply']
|
|
139
|
+
const tokens = config?.color?.tokens?.button?.[tone]?.[mode]?.[state]
|
|
140
|
+
const hue = tokens?._hue || 'gray'
|
|
141
|
+
const blendMode = tokens?._blend || ['screen', 'multiply']
|
|
142
|
+
const context: ColorTokenContext = {hue, scheme}
|
|
150
143
|
|
|
151
144
|
return {
|
|
152
|
-
_blend:
|
|
153
|
-
bg:
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}),
|
|
158
|
-
bg2: resolveColorTokenValue({
|
|
159
|
-
hue,
|
|
160
|
-
scheme,
|
|
161
|
-
value: spec0?.bg2 || spec1?.bg2 || spec2?.bg2 || spec3?.bg2 || ['500', '400'],
|
|
162
|
-
}),
|
|
163
|
-
fg: resolveColorTokenValue({
|
|
164
|
-
hue,
|
|
165
|
-
scheme,
|
|
166
|
-
value: spec0?.fg || spec1?.fg || spec2?.fg || spec3?.fg || ['white', 'black'],
|
|
167
|
-
}),
|
|
168
|
-
border: resolveColorTokenValue({
|
|
169
|
-
hue,
|
|
170
|
-
scheme,
|
|
171
|
-
value: spec0?.border || spec1?.border || spec2?.border || spec3?.border || ['500', '400'],
|
|
172
|
-
}),
|
|
145
|
+
_blend: blendMode[scheme === 'light' ? 0 : 1],
|
|
146
|
+
bg: _color(context, tokens?.bg || ['500', '400']),
|
|
147
|
+
bg2: _color(context, tokens?.bg2 || ['500', '400']),
|
|
148
|
+
fg: _color(context, tokens?.fg || ['white', 'black']),
|
|
149
|
+
border: _color(context, tokens?.border || ['500', '400']),
|
|
173
150
|
muted: {
|
|
174
|
-
fg:
|
|
175
|
-
hue,
|
|
176
|
-
scheme,
|
|
177
|
-
value: spec0?.muted?.fg ||
|
|
178
|
-
spec1?.muted?.fg ||
|
|
179
|
-
spec2?.muted?.fg ||
|
|
180
|
-
spec3?.muted?.fg || ['500', '400'],
|
|
181
|
-
}),
|
|
151
|
+
fg: _color(context, tokens?.fg || ['500', '400']),
|
|
182
152
|
},
|
|
183
153
|
accent: {
|
|
184
|
-
fg:
|
|
185
|
-
hue,
|
|
186
|
-
scheme,
|
|
187
|
-
value: spec0?.accent?.fg ||
|
|
188
|
-
spec1?.accent?.fg ||
|
|
189
|
-
spec2?.accent?.fg ||
|
|
190
|
-
spec3?.accent?.fg || ['500', '400'],
|
|
191
|
-
}),
|
|
154
|
+
fg: _color(context, tokens?.fg || ['500', '400']),
|
|
192
155
|
},
|
|
193
156
|
link: {
|
|
194
|
-
fg:
|
|
195
|
-
hue,
|
|
196
|
-
scheme,
|
|
197
|
-
value: spec0?.link?.fg ||
|
|
198
|
-
spec1?.link?.fg ||
|
|
199
|
-
spec2?.link?.fg ||
|
|
200
|
-
spec3?.link?.fg || ['500', '400'],
|
|
201
|
-
}),
|
|
157
|
+
fg: _color(context, tokens?.fg || ['500', '400']),
|
|
202
158
|
},
|
|
203
159
|
code: {
|
|
204
|
-
bg:
|
|
205
|
-
|
|
206
|
-
scheme,
|
|
207
|
-
value: spec0?.code?.bg ||
|
|
208
|
-
spec1?.code?.bg ||
|
|
209
|
-
spec2?.code?.bg ||
|
|
210
|
-
spec3?.code?.bg || ['500', '400'],
|
|
211
|
-
}),
|
|
212
|
-
fg: resolveColorTokenValue({
|
|
213
|
-
hue,
|
|
214
|
-
scheme,
|
|
215
|
-
value: spec0?.code?.fg ||
|
|
216
|
-
spec1?.code?.fg ||
|
|
217
|
-
spec2?.code?.fg ||
|
|
218
|
-
spec3?.code?.fg || ['500', '400'],
|
|
219
|
-
}),
|
|
160
|
+
bg: _color(context, tokens?.bg || ['500', '400']),
|
|
161
|
+
fg: _color(context, tokens?.fg || ['500', '400']),
|
|
220
162
|
},
|
|
221
163
|
}
|
|
222
164
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {ColorTint as ColorPaletteValue} from '@sanity/color'
|
|
2
2
|
import {rgba} from '../../../lib/color-fns'
|
|
3
|
-
import {ColorBlendModeValue, parseTokenValue, TMP_ColorPalette} from '../../config'
|
|
3
|
+
import {ColorBlendModeValue, parseTokenValue, ThemeConfig, TMP_ColorPalette} from '../../config'
|
|
4
4
|
import {
|
|
5
5
|
TMP_BaseColorTheme,
|
|
6
6
|
TMP_ButtonColorTheme,
|
|
@@ -8,19 +8,17 @@ import {
|
|
|
8
8
|
TMP_ButtonStatesColorTheme,
|
|
9
9
|
TMP_ColorTheme,
|
|
10
10
|
TMP_StateColorTheme,
|
|
11
|
+
TMP_Theme,
|
|
11
12
|
} from '../../types'
|
|
13
|
+
import {defaultColorPalette} from '../defaults/colorPalette'
|
|
12
14
|
import {multiply, screen} from '../helpers'
|
|
13
15
|
|
|
14
16
|
export function renderColorTheme(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
): {
|
|
21
|
-
light: TMP_ColorTheme
|
|
22
|
-
dark: TMP_ColorTheme
|
|
23
|
-
} {
|
|
17
|
+
value: TMP_Theme['color'],
|
|
18
|
+
config?: ThemeConfig,
|
|
19
|
+
): TMP_Theme['color'] {
|
|
20
|
+
const colorPalette = config?.color?.palette ?? defaultColorPalette
|
|
21
|
+
|
|
24
22
|
return {
|
|
25
23
|
light: renderColorScheme(colorPalette, value.light),
|
|
26
24
|
dark: renderColorScheme(colorPalette, value.dark),
|
|
@@ -67,6 +65,22 @@ function renderColorBase(
|
|
|
67
65
|
bg: nestedBg,
|
|
68
66
|
fg: renderColorValue(colorPalette, nestedBg, value._blend, value.base.fg),
|
|
69
67
|
border: renderColorValue(colorPalette, nestedBg, value._blend, value.base.border),
|
|
68
|
+
focusRing: renderColorValue(colorPalette, nestedBg, value._blend, value.base.focusRing),
|
|
69
|
+
shadow: {
|
|
70
|
+
outline: renderColorValue(colorPalette, nestedBg, value._blend, value.base.shadow.outline),
|
|
71
|
+
umbra: renderColorValue(colorPalette, nestedBg, value._blend, value.base.shadow.umbra),
|
|
72
|
+
penumbra: renderColorValue(
|
|
73
|
+
colorPalette,
|
|
74
|
+
nestedBg,
|
|
75
|
+
value._blend,
|
|
76
|
+
value.base.shadow.penumbra,
|
|
77
|
+
),
|
|
78
|
+
ambient: renderColorValue(colorPalette, nestedBg, value._blend, value.base.shadow.ambient),
|
|
79
|
+
},
|
|
80
|
+
skeleton: {
|
|
81
|
+
from: renderColorValue(colorPalette, nestedBg, value._blend, value.base.skeleton.from),
|
|
82
|
+
to: renderColorValue(colorPalette, nestedBg, value._blend, value.base.skeleton.to),
|
|
83
|
+
},
|
|
70
84
|
},
|
|
71
85
|
button: renderButtonColorTheme(colorPalette, nestedBg, value._blend, value.button),
|
|
72
86
|
}
|
|
@@ -135,43 +149,45 @@ function renderStateColorTheme(
|
|
|
135
149
|
value.bg,
|
|
136
150
|
)
|
|
137
151
|
|
|
138
|
-
const bg2 = renderColorValue(colorPalette, bg, blendMode, value.bg2 || value.bg)
|
|
139
|
-
const fg = renderColorValue(colorPalette, bg, blendMode, value.fg)
|
|
140
|
-
const border = renderColorValue(colorPalette, bg, blendMode, value.border)
|
|
141
|
-
const muted = {
|
|
142
|
-
fg: renderColorValue(colorPalette, bg, blendMode, value.muted.fg),
|
|
143
|
-
}
|
|
144
|
-
const accent = {
|
|
145
|
-
fg: renderColorValue(colorPalette, bg, blendMode, value.accent.fg),
|
|
146
|
-
}
|
|
147
|
-
const link = {
|
|
148
|
-
fg: renderColorValue(colorPalette, bg, blendMode, value.link.fg),
|
|
149
|
-
}
|
|
150
|
-
const code = {
|
|
151
|
-
bg: renderColorValue(colorPalette, bg, blendMode, value.code.bg),
|
|
152
|
-
fg: renderColorValue(colorPalette, bg, blendMode, value.code.fg),
|
|
153
|
-
}
|
|
154
|
-
|
|
155
152
|
const blend = rootBlendMode === 'multiply' ? multiply : screen
|
|
156
153
|
|
|
154
|
+
const unmixed = {
|
|
155
|
+
bg2: renderColorValue(colorPalette, bg, blendMode, value.bg2 || value.bg),
|
|
156
|
+
fg: renderColorValue(colorPalette, bg, blendMode, value.fg),
|
|
157
|
+
border: renderColorValue(colorPalette, bg, blendMode, value.border),
|
|
158
|
+
muted: {
|
|
159
|
+
fg: renderColorValue(colorPalette, bg, blendMode, value.muted.fg),
|
|
160
|
+
},
|
|
161
|
+
accent: {
|
|
162
|
+
fg: renderColorValue(colorPalette, bg, blendMode, value.accent.fg),
|
|
163
|
+
},
|
|
164
|
+
link: {
|
|
165
|
+
fg: renderColorValue(colorPalette, bg, blendMode, value.link.fg),
|
|
166
|
+
},
|
|
167
|
+
code: {
|
|
168
|
+
bg: renderColorValue(colorPalette, bg, blendMode, value.code.bg),
|
|
169
|
+
fg: renderColorValue(colorPalette, bg, blendMode, value.code.fg),
|
|
170
|
+
},
|
|
171
|
+
}
|
|
172
|
+
|
|
157
173
|
return {
|
|
158
174
|
_blend: blendMode,
|
|
159
175
|
bg: blend(baseBg, bg),
|
|
160
|
-
bg2: blend(baseBg, bg2),
|
|
161
|
-
fg: blend(baseBg, fg),
|
|
162
|
-
border: blend(baseBg, border),
|
|
176
|
+
bg2: blend(baseBg, unmixed.bg2),
|
|
177
|
+
fg: blend(baseBg, unmixed.fg),
|
|
178
|
+
border: blend(baseBg, unmixed.border),
|
|
163
179
|
muted: {
|
|
164
|
-
fg: blend(baseBg, muted.fg),
|
|
180
|
+
fg: blend(baseBg, unmixed.muted.fg),
|
|
165
181
|
},
|
|
166
182
|
accent: {
|
|
167
|
-
fg: blend(baseBg, accent.fg),
|
|
183
|
+
fg: blend(baseBg, unmixed.accent.fg),
|
|
168
184
|
},
|
|
169
185
|
link: {
|
|
170
|
-
fg: blend(baseBg, link.fg),
|
|
186
|
+
fg: blend(baseBg, unmixed.link.fg),
|
|
171
187
|
},
|
|
172
188
|
code: {
|
|
173
|
-
bg: blend(baseBg, code.bg),
|
|
174
|
-
fg: blend(baseBg, code.fg),
|
|
189
|
+
bg: blend(baseBg, unmixed.code.bg),
|
|
190
|
+
fg: blend(baseBg, unmixed.code.fg),
|
|
175
191
|
},
|
|
176
192
|
}
|
|
177
193
|
}
|