@sanity/ui 2.1.4-canary.0 → 2.1.5

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.
@@ -1,69 +1,93 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
1
3
  import {CropIcon} from '@sanity/icons'
2
4
  import {
3
5
  THEME_COLOR_BUTTON_MODES,
4
- THEME_COLOR_CARD_TONES,
5
- THEME_COLOR_SCHEMES,
6
6
  THEME_COLOR_STATES,
7
7
  THEME_COLOR_STATE_TONES,
8
+ ThemeColorCardToneKey,
8
9
  ThemeColorCard_v2,
10
+ ThemeColorSchemeKey,
9
11
  ThemeColorScheme_v2,
10
12
  ThemeColorState_v2,
11
13
  } from '@sanity/ui/theme'
12
- import {useBoolean} from '@sanity/ui-workshop'
13
- import {CSSProperties} from 'react'
14
+ import {useBoolean, useSelect} from '@sanity/ui-workshop'
15
+ import {CSSProperties, useMemo} from 'react'
14
16
  import {Badge, Box, Flex, KBD, Stack, Text} from '../../../primitives'
15
17
  import {useRootTheme} from '../../useRootTheme'
16
18
 
19
+ interface Features {
20
+ base: boolean
21
+ button: boolean
22
+ schemes: ThemeColorSchemeKey[]
23
+ selectable: boolean
24
+ tones: ThemeColorCardToneKey[]
25
+ }
26
+
27
+ const SCHEME_OPTIONS: {[key: string]: ThemeColorSchemeKey | 'all'} = {
28
+ All: 'all',
29
+ Dark: 'dark',
30
+ Light: 'light',
31
+ }
32
+
33
+ const TONE_OPTIONS: {[key: string]: ThemeColorCardToneKey | 'all'} = {
34
+ All: 'all',
35
+ Transparent: 'transparent',
36
+ Default: 'default',
37
+ Primary: 'primary',
38
+ Positive: 'positive',
39
+ Caution: 'caution',
40
+ Critical: 'critical',
41
+ }
42
+
17
43
  export default function DebugStory() {
18
44
  const {color} = useRootTheme().theme.v2!
19
45
 
46
+ const scheme = useSelect('Color scheme', SCHEME_OPTIONS, 'all', 'Props') || 'all'
47
+ const tone = useSelect('Tone', TONE_OPTIONS, 'default', 'Props') || 'all'
48
+
49
+ const base = useBoolean('Base', true, 'Props') || false
50
+ const button = useBoolean('Button', false, 'Props') || false
51
+ const selectable = useBoolean('Selectable', false, 'Props') || false
52
+
53
+ const features: Features = useMemo(
54
+ () => ({
55
+ base,
56
+ button,
57
+ schemes: scheme == 'all' ? ['light', 'dark'] : [scheme],
58
+ selectable,
59
+ tones: tone == 'all' ? ['transparent', 'default'] : [tone],
60
+ }),
61
+ [base, button, scheme, selectable, tone],
62
+ )
63
+
20
64
  return (
21
65
  <Flex>
22
- {THEME_COLOR_SCHEMES.map((scheme) => (
23
- <DebugScheme key={scheme} scheme={color[scheme]} />
66
+ {features.schemes.map((scheme) => (
67
+ <DebugScheme features={features} key={scheme} scheme={color[scheme]} />
24
68
  ))}
25
69
  </Flex>
26
70
  )
27
71
  }
28
72
 
29
- function DebugScheme(props: {scheme: ThemeColorScheme_v2}) {
30
- const {scheme} = props
31
-
32
- const button = useBoolean('Button', false, 'Props') || false
33
- const selectable = useBoolean('Selectable', false, 'Props') || false
73
+ function DebugScheme(props: {features: Features; scheme: ThemeColorScheme_v2}) {
74
+ const {features, scheme} = props
34
75
 
35
76
  return (
36
77
  <Box flex={1} style={{backgroundColor: scheme.default.bg}}>
37
- {THEME_COLOR_CARD_TONES.map((tone) => (
38
- <DebugCard card={scheme[tone]} features={{button, selectable}} key={tone} />
78
+ {features.tones.map((tone) => (
79
+ <DebugCard card={scheme[tone]} features={features} key={tone} />
39
80
  ))}
40
81
  </Box>
41
82
  )
42
83
  }
43
84
 
44
- function DebugCard(props: {
45
- card: ThemeColorCard_v2
46
- features: {button: boolean; selectable: boolean}
47
- }) {
85
+ function DebugCard(props: {card: ThemeColorCard_v2; features: Features}) {
48
86
  const {card, features} = props
49
87
 
50
- // card.avatar
51
- // card.backdrop
52
- // card.badge
53
- // card.button
54
- // card.focusRing
55
- // card.icon
56
- // card.input
57
- // card.kbd
58
- // card.link
59
- // card.selectable
60
- // card.shadow
61
- // card.skeleton
62
- // card.syntax
63
-
64
88
  return (
65
89
  <Box style={getStateVars(card)}>
66
- <DebugState />
90
+ {features.base && <DebugState />}
67
91
 
68
92
  {features.button && (
69
93
  <Stack padding={2} space={1}>
@@ -120,12 +144,19 @@ function DebugState() {
120
144
  <CropIcon />
121
145
  </Text>
122
146
  </Flex>
123
- <Text muted size={1}>
124
- Muted
125
- </Text>
147
+ <Box padding={1} style={{backgroundColor: 'var(--card-muted-bg-color)'}}>
148
+ <Text muted size={1}>
149
+ Muted
150
+ </Text>
151
+ </Box>
126
152
  <Text accent size={1}>
127
153
  Accent
128
154
  </Text>
155
+ <Text size={1}>
156
+ <a href="#" style={{color: 'var(--card-link-fg-color)'}}>
157
+ Link
158
+ </a>
159
+ </Text>
129
160
  <Text size={1}>
130
161
  <code>Code</code>
131
162
  </Text>
@@ -140,6 +171,155 @@ function DebugState() {
140
171
  ))}
141
172
  </Flex>
142
173
  <div style={{borderBottom: '1px solid var(--card-border-color)'}} />
174
+ <Flex>
175
+ <Box
176
+ flex={1}
177
+ paddingBottom={3}
178
+ style={{backgroundColor: 'var(--card-skeleton-from-color)'}}
179
+ />
180
+ <Box
181
+ flex={1}
182
+ paddingBottom={3}
183
+ style={{backgroundColor: 'var(--card-skeleton-to-color)'}}
184
+ />
185
+ </Flex>
186
+ <Flex style={{gap: 1}}>
187
+ <Box
188
+ flex={1}
189
+ overflow="hidden"
190
+ padding={1}
191
+ style={
192
+ {
193
+ '--card-fg-color': 'var(--card-avatar-gray-fg-color)',
194
+ backgroundColor: 'var(--card-avatar-gray-bg-color)',
195
+ } as any
196
+ }
197
+ >
198
+ <Text size={1} weight="bold">
199
+ A
200
+ </Text>
201
+ </Box>
202
+ <Box
203
+ flex={1}
204
+ overflow="hidden"
205
+ padding={1}
206
+ style={
207
+ {
208
+ '--card-fg-color': 'var(--card-avatar-red-fg-color)',
209
+ backgroundColor: 'var(--card-avatar-red-bg-color)',
210
+ } as any
211
+ }
212
+ >
213
+ <Text size={1} weight="bold">
214
+ A
215
+ </Text>
216
+ </Box>
217
+ <Box
218
+ flex={1}
219
+ overflow="hidden"
220
+ padding={1}
221
+ style={
222
+ {
223
+ '--card-fg-color': 'var(--card-avatar-orange-fg-color)',
224
+ backgroundColor: 'var(--card-avatar-orange-bg-color)',
225
+ } as any
226
+ }
227
+ >
228
+ <Text size={1} weight="bold">
229
+ A
230
+ </Text>
231
+ </Box>
232
+ <Box
233
+ flex={1}
234
+ overflow="hidden"
235
+ padding={1}
236
+ style={
237
+ {
238
+ '--card-fg-color': 'var(--card-avatar-yellow-fg-color)',
239
+ backgroundColor: 'var(--card-avatar-yellow-bg-color)',
240
+ } as any
241
+ }
242
+ >
243
+ <Text size={1} weight="bold">
244
+ A
245
+ </Text>
246
+ </Box>
247
+ <Box
248
+ flex={1}
249
+ overflow="hidden"
250
+ padding={1}
251
+ style={
252
+ {
253
+ '--card-fg-color': 'var(--card-avatar-green-fg-color)',
254
+ backgroundColor: 'var(--card-avatar-green-bg-color)',
255
+ } as any
256
+ }
257
+ >
258
+ <Text size={1} weight="bold">
259
+ A
260
+ </Text>
261
+ </Box>
262
+ <Box
263
+ flex={1}
264
+ overflow="hidden"
265
+ padding={1}
266
+ style={
267
+ {
268
+ '--card-fg-color': 'var(--card-avatar-cyan-fg-color)',
269
+ backgroundColor: 'var(--card-avatar-cyan-bg-color)',
270
+ } as any
271
+ }
272
+ >
273
+ <Text size={1} weight="bold">
274
+ A
275
+ </Text>
276
+ </Box>
277
+ <Box
278
+ flex={1}
279
+ overflow="hidden"
280
+ padding={1}
281
+ style={
282
+ {
283
+ '--card-fg-color': 'var(--card-avatar-blue-fg-color)',
284
+ backgroundColor: 'var(--card-avatar-blue-bg-color)',
285
+ } as any
286
+ }
287
+ >
288
+ <Text size={1} weight="bold">
289
+ A
290
+ </Text>
291
+ </Box>
292
+ <Box
293
+ flex={1}
294
+ overflow="hidden"
295
+ padding={1}
296
+ style={
297
+ {
298
+ '--card-fg-color': 'var(--card-avatar-purple-fg-color)',
299
+ backgroundColor: 'var(--card-avatar-purple-bg-color)',
300
+ } as any
301
+ }
302
+ >
303
+ <Text size={1} weight="bold">
304
+ A
305
+ </Text>
306
+ </Box>
307
+ <Box
308
+ flex={1}
309
+ overflow="hidden"
310
+ padding={1}
311
+ style={
312
+ {
313
+ '--card-fg-color': 'var(--card-avatar-magenta-fg-color)',
314
+ backgroundColor: 'var(--card-avatar-magenta-bg-color)',
315
+ } as any
316
+ }
317
+ >
318
+ <Text size={1} weight="bold">
319
+ A
320
+ </Text>
321
+ </Box>
322
+ </Flex>
143
323
  </Stack>
144
324
  )
145
325
  }
@@ -148,22 +328,24 @@ function getStateVars(state: ThemeColorState_v2) {
148
328
  return {
149
329
  '--card-accent-fg-color': state.accent.fg,
150
330
 
151
- '--card-code-bg-color': state.code.bg,
152
- '--card-code-fg-color': state.code.fg,
153
-
154
- '--card-bg-color': state.bg,
155
-
156
- '--card-border-color': state.border,
157
-
158
- '--card-fg-color': state.fg,
159
-
160
- '--card-icon-color': state.icon,
161
-
162
- '--card-muted-fg-color': state.muted.fg,
163
-
164
- '--card-kbd-bg-color': state.kbd.bg,
165
- '--card-kbd-border-color': state.kbd.border,
166
- '--card-kbd-fg-color': state.kbd.fg,
331
+ '--card-avatar-gray-bg-color': state.avatar.gray.bg,
332
+ '--card-avatar-gray-fg-color': state.avatar.gray.fg,
333
+ '--card-avatar-red-bg-color': state.avatar.red.bg,
334
+ '--card-avatar-red-fg-color': state.avatar.red.fg,
335
+ '--card-avatar-orange-bg-color': state.avatar.orange.bg,
336
+ '--card-avatar-orange-fg-color': state.avatar.orange.fg,
337
+ '--card-avatar-yellow-bg-color': state.avatar.yellow.bg,
338
+ '--card-avatar-yellow-fg-color': state.avatar.yellow.fg,
339
+ '--card-avatar-green-bg-color': state.avatar.green.bg,
340
+ '--card-avatar-green-fg-color': state.avatar.green.fg,
341
+ '--card-avatar-cyan-bg-color': state.avatar.cyan.bg,
342
+ '--card-avatar-cyan-fg-color': state.avatar.cyan.fg,
343
+ '--card-avatar-blue-bg-color': state.avatar.blue.bg,
344
+ '--card-avatar-blue-fg-color': state.avatar.blue.fg,
345
+ '--card-avatar-purple-bg-color': state.avatar.purple.bg,
346
+ '--card-avatar-purple-fg-color': state.avatar.purple.fg,
347
+ '--card-avatar-magenta-bg-color': state.avatar.magenta.bg,
348
+ '--card-avatar-magenta-fg-color': state.avatar.magenta.fg,
167
349
 
168
350
  '--card-badge-default-bg-color': state.badge.default.bg,
169
351
  '--card-badge-default-dot-color': state.badge.default.dot,
@@ -190,6 +372,29 @@ function getStateVars(state: ThemeColorState_v2) {
190
372
  '--card-badge-critical-fg-color': state.badge.critical.fg,
191
373
  '--card-badge-critical-icon-color': state.badge.critical.icon,
192
374
 
375
+ '--card-bg-color': state.bg,
376
+
377
+ '--card-border-color': state.border,
378
+
379
+ '--card-code-bg-color': state.code.bg,
380
+ '--card-code-fg-color': state.code.fg,
381
+
382
+ '--card-fg-color': state.fg,
383
+
384
+ '--card-icon-color': state.icon,
385
+
386
+ '--card-kbd-bg-color': state.kbd.bg,
387
+ '--card-kbd-border-color': state.kbd.border,
388
+ '--card-kbd-fg-color': state.kbd.fg,
389
+
390
+ '--card-link-fg-color': state.link.fg,
391
+
392
+ '--card-muted-bg-color': state.muted.bg,
393
+ '--card-muted-fg-color': state.muted.fg,
394
+
395
+ '--card-skeleton-from-color': state.skeleton.from,
396
+ '--card-skeleton-to-color': state.skeleton.to,
397
+
193
398
  backgroundColor: 'var(--card-bg-color)',
194
399
  color: 'var(--card-fg-color)',
195
400
  } as CSSProperties
@@ -364,7 +364,7 @@ function renderThemeColorState(
364
364
  accent: {
365
365
  fg: renderColorValue(value.accent.fg, colorOptions),
366
366
  },
367
- avatar: renderThemeColorAvatar(value.avatar, {baseBg, colorPalette, blendMode}),
367
+ avatar: renderThemeColorAvatar(value.avatar, {baseBg: bg, colorPalette, blendMode}),
368
368
  badge: renderThemeColorBadge(value.badge, {baseBg: bg, colorPalette, blendMode}),
369
369
  bg,
370
370
  border: renderColorValue(value.border, colorOptions),
@@ -94,9 +94,9 @@ export const defaultColorTokens: ThemeColorTokens = {
94
94
  },
95
95
  avatar: {
96
96
  '*': {
97
- _blend: ['multiply', 'screen'],
98
- bg: ['white', 'black'],
99
- fg: ['black', 'white'],
97
+ _blend: ['screen', 'multiply'],
98
+ bg: ['500', '400'],
99
+ fg: ['white', 'black'],
100
100
  },
101
101
  },
102
102
  badge: {
@@ -147,6 +147,13 @@ export const defaultColorTokens: ThemeColorTokens = {
147
147
  accent: {
148
148
  fg: ['100 70%', '900 70%'],
149
149
  },
150
+ avatar: {
151
+ '*': {
152
+ _blend: ['screen', 'multiply'],
153
+ bg: ['gray/500', 'gray/400'],
154
+ fg: ['white', 'black'],
155
+ },
156
+ },
150
157
  badge: {
151
158
  '*': {
152
159
  bg: ['gray/700', 'gray/300'],
@@ -156,9 +163,13 @@ export const defaultColorTokens: ThemeColorTokens = {
156
163
  },
157
164
  },
158
165
  bg: ['300', '600'],
166
+ code: {
167
+ bg: ['950', '50'],
168
+ fg: ['300', '600'],
169
+ },
159
170
  fg: ['300', '600'],
160
171
  muted: {
161
- bg: ['300', '600'],
172
+ bg: ['950', '50'],
162
173
  fg: ['300', '600'],
163
174
  },
164
175
  kbd: {
@@ -173,6 +184,13 @@ export const defaultColorTokens: ThemeColorTokens = {
173
184
  },
174
185
  default: {
175
186
  '*': {
187
+ avatar: {
188
+ '*': {
189
+ _blend: ['screen', 'multiply'],
190
+ bg: ['500', '400'],
191
+ fg: ['white', 'black'],
192
+ },
193
+ },
176
194
  bg: ['800', '200'],
177
195
  muted: {
178
196
  bg: ['950', '50'],
@@ -197,6 +215,13 @@ export const defaultColorTokens: ThemeColorTokens = {
197
215
  accent: {
198
216
  fg: ['purple/700 60%', 'purple/300 70%'],
199
217
  },
218
+ avatar: {
219
+ '*': {
220
+ _blend: ['screen', 'multiply'],
221
+ bg: ['500', '400'],
222
+ fg: ['white', 'black'],
223
+ },
224
+ },
200
225
  badge: {
201
226
  '*': {
202
227
  bg: ['100', '900'],
@@ -247,6 +272,13 @@ export const defaultColorTokens: ThemeColorTokens = {
247
272
  accent: {
248
273
  fg: ['200', '800'],
249
274
  },
275
+ avatar: {
276
+ '*': {
277
+ _blend: ['screen', 'multiply'],
278
+ bg: ['gray/100', 'gray/900'],
279
+ fg: ['white', 'black'],
280
+ },
281
+ },
250
282
  badge: {
251
283
  '*': {
252
284
  _hue: 'gray',
@@ -264,7 +296,7 @@ export const defaultColorTokens: ThemeColorTokens = {
264
296
  fg: ['400', '600'],
265
297
  icon: ['300', '700'],
266
298
  muted: {
267
- fg: ['400', '600'],
299
+ fg: ['300', '700'],
268
300
  },
269
301
  kbd: {
270
302
  bg: ['white', 'black'],
@@ -294,6 +326,13 @@ export const defaultColorTokens: ThemeColorTokens = {
294
326
  accent: {
295
327
  fg: ['purple/700 70%', 'purple/300 70%'],
296
328
  },
329
+ avatar: {
330
+ '*': {
331
+ _blend: ['screen', 'multiply'],
332
+ bg: ['500', '400'],
333
+ fg: ['white', 'black'],
334
+ },
335
+ },
297
336
  badge: {
298
337
  '*': {
299
338
  bg: ['100', '900'],
@@ -346,6 +385,13 @@ export const defaultColorTokens: ThemeColorTokens = {
346
385
  accent: {
347
386
  fg: ['200', '800'],
348
387
  },
388
+ avatar: {
389
+ '*': {
390
+ _blend: ['screen', 'multiply'],
391
+ bg: ['gray/100', 'gray/900'],
392
+ fg: ['white', 'black'],
393
+ },
394
+ },
349
395
  badge: {
350
396
  '*': {
351
397
  _hue: 'gray',
@@ -397,8 +443,9 @@ export const defaultColorTokens: ThemeColorTokens = {
397
443
  fg: ['800', '200'],
398
444
  },
399
445
  disabled: {
400
- fg: ['200', '800'],
446
+ fg: ['400', '600'],
401
447
  border: ['100', '900'],
448
+ placeholder: ['200', '800 50%'],
402
449
  },
403
450
  },
404
451
  invalid: {
@@ -415,6 +462,13 @@ export const defaultColorTokens: ThemeColorTokens = {
415
462
  accent: {
416
463
  fg: ['purple/700 70%', 'purple/300 70%'],
417
464
  },
465
+ avatar: {
466
+ '*': {
467
+ _blend: ['screen', 'multiply'],
468
+ bg: ['500', '400'],
469
+ fg: ['white', 'black'],
470
+ },
471
+ },
418
472
  badge: {
419
473
  '*': {
420
474
  bg: ['100', '900'],
@@ -440,7 +494,7 @@ export const defaultColorTokens: ThemeColorTokens = {
440
494
  fg: ['blue/700 70%', 'blue/300 70%'],
441
495
  },
442
496
  muted: {
443
- bg: ['100', '950'],
497
+ bg: ['50', '950'],
444
498
  fg: ['700 75%', '300 75%'],
445
499
  },
446
500
  skeleton: {
@@ -491,7 +545,7 @@ export const defaultColorTokens: ThemeColorTokens = {
491
545
  fg: ['blue/200', 'blue/600'],
492
546
  },
493
547
  muted: {
494
- bg: ['950', '50'],
548
+ bg: ['500 10%', '400 10%'],
495
549
  fg: ['100 70%', '900 70%'],
496
550
  },
497
551
  skeleton: {
@@ -504,6 +558,13 @@ export const defaultColorTokens: ThemeColorTokens = {
504
558
  accent: {
505
559
  fg: ['200', '800'],
506
560
  },
561
+ avatar: {
562
+ '*': {
563
+ _blend: ['screen', 'multiply'],
564
+ bg: ['gray/100', 'gray/900'],
565
+ fg: ['white', 'black'],
566
+ },
567
+ },
507
568
  badge: {
508
569
  '*': {
509
570
  _hue: 'gray',
@@ -529,6 +590,7 @@ export const defaultColorTokens: ThemeColorTokens = {
529
590
  fg: ['200', '800'],
530
591
  },
531
592
  muted: {
593
+ bg: ['50 50%', '950 50%'],
532
594
  fg: ['200', '800'],
533
595
  },
534
596
  },