@sanity/ui 2.6.4-canary.0 → 2.6.4-canary.2

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 (55) hide show
  1. package/dist/index.d.mts +51 -15
  2. package/dist/index.d.ts +51 -15
  3. package/dist/index.esm.js +103 -167
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +102 -167
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +103 -167
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/theme.d.mts +14 -14
  10. package/dist/theme.d.ts +14 -14
  11. package/dist/theme.esm.js.map +1 -1
  12. package/dist/theme.js.map +1 -1
  13. package/dist/theme.mjs.map +1 -1
  14. package/package.json +28 -27
  15. package/src/core/__workshop__/constants.ts +36 -36
  16. package/src/core/components/autocomplete/autocomplete.tsx +1 -1
  17. package/src/core/components/breadcrumbs/breadcrumbs.tsx +15 -6
  18. package/src/core/components/dialog/dialog.tsx +12 -21
  19. package/src/core/components/dialog/styles.ts +8 -8
  20. package/src/core/components/menu/menu.tsx +11 -18
  21. package/src/core/components/menu/menuButton.tsx +11 -11
  22. package/src/core/components/menu/menuContext.ts +1 -1
  23. package/src/core/components/menu/useMenuController.ts +11 -18
  24. package/src/core/components/tab/tab.tsx +8 -8
  25. package/src/core/components/tab/tabPanel.tsx +1 -1
  26. package/src/core/components/toast/useToast.ts +1 -0
  27. package/src/core/components/tree/tree.tsx +1 -0
  28. package/src/core/components/tree/treeItem.tsx +1 -0
  29. package/src/core/hooks/index.ts +3 -2
  30. package/src/core/hooks/useClickOutside.ts +37 -74
  31. package/src/core/hooks/useMatchMedia.ts +46 -0
  32. package/src/core/hooks/useMediaIndex/useMediaIndex.ts +2 -11
  33. package/src/core/hooks/usePrefersDark.ts +10 -58
  34. package/src/core/hooks/usePrefersReducedMotion.ts +10 -58
  35. package/src/core/primitives/avatar/styles.ts +42 -42
  36. package/src/core/primitives/badge/styles.ts +2 -2
  37. package/src/core/primitives/button/styles.ts +4 -4
  38. package/src/core/primitives/inline/styles.ts +2 -2
  39. package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +9 -7
  40. package/src/core/primitives/popover/constants.ts +4 -4
  41. package/src/core/primitives/stack/styles.ts +2 -2
  42. package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +9 -7
  43. package/src/core/primitives/tooltip/constants.ts +4 -4
  44. package/src/core/primitives/tooltip/tooltip.tsx +45 -27
  45. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +1 -0
  46. package/src/core/styles/font/responsiveFont.ts +8 -8
  47. package/src/core/theme/__workshop__/debug/story.tsx +11 -11
  48. package/src/core/utils/layer/layerProvider.tsx +1 -0
  49. package/src/core/utils/portal/__workshop__/named.tsx +10 -8
  50. package/src/core/utils/portal/portalProvider.tsx +7 -14
  51. package/src/theme/build/buildColorTheme.test.ts +13 -13
  52. package/src/theme/config/tokens/color/types.ts +14 -14
  53. package/src/theme/defaults/colorTokens.ts +36 -36
  54. package/src/core/hooks/_internal/index.ts +0 -1
  55. package/src/core/hooks/_internal/useUnique.ts +0 -34
@@ -10,13 +10,13 @@ import {
10
10
  Tooltip,
11
11
  } from '@sanity/ui'
12
12
  import {useBoolean, useSelect, useText} from '@sanity/ui-workshop'
13
- import {useState} from 'react'
13
+ import {useMemo, useState} from 'react'
14
14
  import {WORKSHOP_PLACEMENT_OPTIONS} from '../../../__workshop__/constants'
15
15
 
16
16
  const PORTAL_OPTIONS = {
17
17
  '(true)': true,
18
18
  '(false)': false,
19
- portal1: 'portal1',
19
+ 'portal1': 'portal1',
20
20
  }
21
21
 
22
22
  export default function CustomPortalStory() {
@@ -30,13 +30,15 @@ export default function CustomPortalStory() {
30
30
 
31
31
  const [portal1Element, setPortal1Element] = useState<HTMLDivElement | null>(null)
32
32
  const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)
33
+ const __unstable_elements = useMemo(
34
+ () => ({
35
+ portal1: portal1Element,
36
+ }),
37
+ [portal1Element],
38
+ )
33
39
 
34
40
  return (
35
- <PortalProvider
36
- __unstable_elements={{
37
- portal1: portal1Element,
38
- }}
39
- >
41
+ <PortalProvider __unstable_elements={__unstable_elements}>
40
42
  <Flex align="center" height="fill" justify="center">
41
43
  <BoundaryElementProvider element={useBoundaryElement ? boundaryElement : null}>
42
44
  <Card
@@ -8,16 +8,16 @@ export const DEFAULT_TOOLTIP_DISTANCE = 4
8
8
  export const DEFAULT_TOOLTIP_PADDING = 4
9
9
 
10
10
  export const DEFAULT_FALLBACK_PLACEMENTS: Record<Placement, Placement[]> = {
11
- top: ['top-end', 'top-start', 'bottom', 'left', 'right'],
11
+ 'top': ['top-end', 'top-start', 'bottom', 'left', 'right'],
12
12
  'top-start': ['top', 'top-end', 'bottom-start', 'left-start', 'right-start'],
13
13
  'top-end': ['top', 'top-start', 'bottom-end', 'left-end', 'right-end'],
14
- bottom: ['bottom-end', 'bottom-start', 'top', 'left', 'right'],
14
+ 'bottom': ['bottom-end', 'bottom-start', 'top', 'left', 'right'],
15
15
  'bottom-start': ['bottom', 'bottom-end', 'top-start', 'left-start', 'right-start'],
16
16
  'bottom-end': ['bottom', 'bottom-start', 'top-end', 'left-end', 'right-end'],
17
- left: ['left-end', 'left-start', 'right', 'top', 'bottom'],
17
+ 'left': ['left-end', 'left-start', 'right', 'top', 'bottom'],
18
18
  'left-start': ['left', 'left-end', 'right-start', 'top-start', 'bottom-start'],
19
19
  'left-end': ['left', 'left-start', 'right-end', 'top-end', 'bottom-end'],
20
- right: ['right-end', 'right-start', 'left', 'top', 'bottom'],
20
+ 'right': ['right-end', 'right-start', 'left', 'top', 'bottom'],
21
21
  'right-start': ['right', 'right-end', 'left-start', 'top-start', 'bottom-start'],
22
22
  'right-end': ['right', 'right-start', 'left-end', 'top-end', 'bottom-end'],
23
23
  }
@@ -24,6 +24,7 @@ import {
24
24
  useImperativeHandle,
25
25
  } from 'react'
26
26
  import {styled} from 'styled-components'
27
+ import {useEffectEvent} from 'use-effect-event'
27
28
  import {useArrayProp, usePrefersReducedMotion} from '../../hooks'
28
29
  import {useDelayedState} from '../../hooks/useDelayedState'
29
30
  import {origin} from '../../middleware/origin'
@@ -288,33 +289,6 @@ export const Tooltip = forwardRef(function Tooltip(
288
289
  [childProp?.props, handleIsOpenChange],
289
290
  )
290
291
 
291
- // Detect whether the mouse is moving outside of the reference element. This is sometimes
292
- // necessary, because the tooltip might not always close as it should (e.g. when clicking
293
- // the reference element triggers a CPU-heavy operation.)
294
- // @TODO is this necessary?
295
- useEffect(() => {
296
- if (!showTooltip) return
297
-
298
- function handleWindowMouseMove(event: MouseEvent) {
299
- if (!referenceElement) return
300
-
301
- const isHoveringReference =
302
- referenceElement === event.target ||
303
- (event.target instanceof Node && referenceElement.contains(event.target))
304
-
305
- if (!isHoveringReference) {
306
- handleIsOpenChange(false)
307
- window.removeEventListener('mousemove', handleWindowMouseMove)
308
- }
309
- }
310
-
311
- window.addEventListener('mousemove', handleWindowMouseMove)
312
-
313
- return () => {
314
- window.removeEventListener('mousemove', handleWindowMouseMove)
315
- }
316
- }, [showTooltip, referenceElement, handleIsOpenChange])
317
-
318
292
  // Close when `disabled` changes to `true`
319
293
  useEffect(() => {
320
294
  if (disabled && showTooltip) handleIsOpenChange(false)
@@ -344,6 +318,10 @@ export const Tooltip = forwardRef(function Tooltip(
344
318
  window.removeEventListener('keydown', handleWindowKeyDown)
345
319
  }
346
320
  }, [handleIsOpenChange, showTooltip])
321
+
322
+ // Handle closing the tooltip when the mouse leaves the referenceElement
323
+ useCloseOnMouseLeave({handleIsOpenChange, referenceElement, showTooltip})
324
+
347
325
  const setArrow = useCallback(
348
326
  (arrowEl: HTMLDivElement | null) => {
349
327
  arrowRef.current = arrowEl
@@ -456,3 +434,43 @@ export const Tooltip = forwardRef(function Tooltip(
456
434
  </>
457
435
  )
458
436
  })
437
+
438
+ /**
439
+ * As `useEffectEvent` should never be passed to other components or hooks, this custom hook groups together the `useEffectEvent` and the `useEffect` hook using it.
440
+ * @see https://19.react.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events:~:text=Never%20pass%20them%20to%20other%20components%20or%20Hooks
441
+ */
442
+ function useCloseOnMouseLeave({
443
+ handleIsOpenChange,
444
+ referenceElement,
445
+ showTooltip,
446
+ }: {
447
+ handleIsOpenChange: (open: boolean, immediate?: boolean) => void
448
+ referenceElement: HTMLElement | null
449
+ showTooltip: boolean
450
+ }) {
451
+ // Since we don't want the `mouseevent` events to be attached and removed if the `referenceElement` is changed
452
+ // we use a "effect event" (https://19.react.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events)
453
+ // in order to always see the latest `referenceElement` value inside the event handler itself.
454
+ const handleWindowMouseMove = useEffectEvent((event: MouseEvent) => {
455
+ if (!referenceElement) return
456
+
457
+ const isHoveringReference =
458
+ referenceElement === event.target ||
459
+ (event.target instanceof Node && referenceElement.contains(event.target))
460
+
461
+ if (!isHoveringReference) {
462
+ handleIsOpenChange(false)
463
+ }
464
+ })
465
+
466
+ // Detect whether the mouse is moving outside of the reference element. This is sometimes
467
+ // necessary, because the tooltip might not always close as it should (e.g. when clicking
468
+ // the reference element triggers a CPU-heavy operation.)
469
+ useEffect(() => {
470
+ if (!showTooltip) return
471
+
472
+ window.addEventListener('mousemove', handleWindowMouseMove)
473
+
474
+ return () => window.removeEventListener('mousemove', handleWindowMouseMove)
475
+ }, [handleWindowMouseMove, showTooltip])
476
+ }
@@ -36,6 +36,7 @@ export function TooltipDelayGroupProvider(
36
36
  const openDelay = typeof delay === 'number' ? delay : delay?.open || 0
37
37
  const closeDelay = typeof delay === 'number' ? delay : delay?.close || 0
38
38
 
39
+ // @TODO split out into separate contexts
39
40
  const value: TooltipDelayGroupContextValue = useMemo(
40
41
  () => ({
41
42
  isGroupActive: isGroupActive,
@@ -21,11 +21,11 @@ export function responsiveFont(
21
21
  const defaultSize = sizes[2]
22
22
 
23
23
  const base: CSSObject = {
24
- position: 'relative',
25
- fontFamily: family,
24
+ 'position': 'relative',
25
+ 'fontFamily': family,
26
26
  fontWeight,
27
- padding: '1px 0',
28
- margin: 0,
27
+ 'padding': '1px 0',
28
+ 'margin': 0,
29
29
 
30
30
  '&:before': {
31
31
  content: '""',
@@ -75,10 +75,10 @@ export function fontSize(size: ThemeFontSize): CSSObject {
75
75
  const customIconOffset = (capHeight - customIconSize) / 2
76
76
 
77
77
  return {
78
- fontSize: rem(fontSize),
79
- lineHeight: `calc(${lineHeight} / ${fontSize})`,
80
- letterSpacing: rem(letterSpacing),
81
- transform: `translateY(${rem(descenderHeight)})`,
78
+ 'fontSize': rem(fontSize),
79
+ 'lineHeight': `calc(${lineHeight} / ${fontSize})`,
80
+ 'letterSpacing': rem(letterSpacing),
81
+ 'transform': `translateY(${rem(descenderHeight)})`,
82
82
 
83
83
  '&:before': {
84
84
  marginTop: `calc(${rem(0 - negHeight)} - 1px)`,
@@ -191,7 +191,7 @@ function DebugState() {
191
191
  style={
192
192
  {
193
193
  '--card-fg-color': 'var(--card-avatar-gray-fg-color)',
194
- backgroundColor: 'var(--card-avatar-gray-bg-color)',
194
+ 'backgroundColor': 'var(--card-avatar-gray-bg-color)',
195
195
  } as any
196
196
  }
197
197
  >
@@ -206,7 +206,7 @@ function DebugState() {
206
206
  style={
207
207
  {
208
208
  '--card-fg-color': 'var(--card-avatar-red-fg-color)',
209
- backgroundColor: 'var(--card-avatar-red-bg-color)',
209
+ 'backgroundColor': 'var(--card-avatar-red-bg-color)',
210
210
  } as any
211
211
  }
212
212
  >
@@ -221,7 +221,7 @@ function DebugState() {
221
221
  style={
222
222
  {
223
223
  '--card-fg-color': 'var(--card-avatar-orange-fg-color)',
224
- backgroundColor: 'var(--card-avatar-orange-bg-color)',
224
+ 'backgroundColor': 'var(--card-avatar-orange-bg-color)',
225
225
  } as any
226
226
  }
227
227
  >
@@ -236,7 +236,7 @@ function DebugState() {
236
236
  style={
237
237
  {
238
238
  '--card-fg-color': 'var(--card-avatar-yellow-fg-color)',
239
- backgroundColor: 'var(--card-avatar-yellow-bg-color)',
239
+ 'backgroundColor': 'var(--card-avatar-yellow-bg-color)',
240
240
  } as any
241
241
  }
242
242
  >
@@ -251,7 +251,7 @@ function DebugState() {
251
251
  style={
252
252
  {
253
253
  '--card-fg-color': 'var(--card-avatar-green-fg-color)',
254
- backgroundColor: 'var(--card-avatar-green-bg-color)',
254
+ 'backgroundColor': 'var(--card-avatar-green-bg-color)',
255
255
  } as any
256
256
  }
257
257
  >
@@ -266,7 +266,7 @@ function DebugState() {
266
266
  style={
267
267
  {
268
268
  '--card-fg-color': 'var(--card-avatar-cyan-fg-color)',
269
- backgroundColor: 'var(--card-avatar-cyan-bg-color)',
269
+ 'backgroundColor': 'var(--card-avatar-cyan-bg-color)',
270
270
  } as any
271
271
  }
272
272
  >
@@ -281,7 +281,7 @@ function DebugState() {
281
281
  style={
282
282
  {
283
283
  '--card-fg-color': 'var(--card-avatar-blue-fg-color)',
284
- backgroundColor: 'var(--card-avatar-blue-bg-color)',
284
+ 'backgroundColor': 'var(--card-avatar-blue-bg-color)',
285
285
  } as any
286
286
  }
287
287
  >
@@ -296,7 +296,7 @@ function DebugState() {
296
296
  style={
297
297
  {
298
298
  '--card-fg-color': 'var(--card-avatar-purple-fg-color)',
299
- backgroundColor: 'var(--card-avatar-purple-bg-color)',
299
+ 'backgroundColor': 'var(--card-avatar-purple-bg-color)',
300
300
  } as any
301
301
  }
302
302
  >
@@ -311,7 +311,7 @@ function DebugState() {
311
311
  style={
312
312
  {
313
313
  '--card-fg-color': 'var(--card-avatar-magenta-fg-color)',
314
- backgroundColor: 'var(--card-avatar-magenta-bg-color)',
314
+ 'backgroundColor': 'var(--card-avatar-magenta-bg-color)',
315
315
  } as any
316
316
  }
317
317
  >
@@ -395,7 +395,7 @@ function getStateVars(state: ThemeColorState_v2) {
395
395
  '--card-skeleton-from-color': state.skeleton.from,
396
396
  '--card-skeleton-to-color': state.skeleton.to,
397
397
 
398
- backgroundColor: 'var(--card-bg-color)',
399
- color: 'var(--card-fg-color)',
398
+ 'backgroundColor': 'var(--card-bg-color)',
399
+ 'color': 'var(--card-fg-color)',
400
400
  } as CSSProperties
401
401
  }
@@ -91,6 +91,7 @@ export function LayerProvider(props: LayerProviderProps): React.ReactElement {
91
91
  // Register this layer on mount
92
92
  useEffect(() => parentRegisterChild?.(level), [level, parentRegisterChild])
93
93
 
94
+ // @TODO split out into separate contexts
94
95
  const value: LayerContextValue = useMemo(
95
96
  () => ({
96
97
  version: 0.0,
@@ -1,19 +1,21 @@
1
1
  import {Card, Container, Portal, PortalProvider, Stack, Text} from '@sanity/ui'
2
- import {useState} from 'react'
2
+ import {useMemo, useState} from 'react'
3
3
 
4
4
  export default function NamedStory() {
5
5
  const [portal1Element, setPortal1Element] = useState<HTMLDivElement | null>(null)
6
6
  const [portal2Element, setPortal2Element] = useState<HTMLDivElement | null>(null)
7
7
  const [portal3Element, setPortal3Element] = useState<HTMLDivElement | null>(null)
8
+ const __unstable_elements = useMemo(
9
+ () => ({
10
+ portal1: portal1Element,
11
+ portal2: portal2Element,
12
+ portal3: portal3Element,
13
+ }),
14
+ [portal1Element, portal2Element, portal3Element],
15
+ )
8
16
 
9
17
  return (
10
- <PortalProvider
11
- __unstable_elements={{
12
- portal1: portal1Element,
13
- portal2: portal2Element,
14
- portal3: portal3Element,
15
- }}
16
- >
18
+ <PortalProvider __unstable_elements={__unstable_elements}>
17
19
  <Container width={1}>
18
20
  <Card height="fill" padding={4}>
19
21
  <Stack space={2}>
@@ -1,5 +1,5 @@
1
- import {useMemo, useSyncExternalStore} from 'react'
2
- import {useUnique} from '../../hooks/_internal'
1
+ import {useMemo} from 'react'
2
+ import {useMounted} from '../../hooks/useMounted'
3
3
  import {PortalContext} from './portalContext'
4
4
  import {PortalContextValue} from './types'
5
5
 
@@ -23,25 +23,18 @@ export interface PortalProviderProps {
23
23
  * @public
24
24
  */
25
25
  export function PortalProvider(props: PortalProviderProps): React.ReactElement {
26
- const {boundaryElement, children, element, __unstable_elements: elementsProp} = props
27
- const elements = useUnique(elementsProp)
28
- // @TODO check up sebmarkbage tweet on useSyncExternalStore that detects if it was hydrated instead of skipping getServerSnapshot
29
- const fallbackElement = useSyncExternalStore(
30
- emptySubscribe,
31
- () => document.body,
32
- () => null,
33
- )
26
+ const {boundaryElement, children, element, __unstable_elements: elements} = props
27
+ const mounted = useMounted()
34
28
 
29
+ // @TODO split out into separate contexts
35
30
  const value: PortalContextValue = useMemo(() => {
36
31
  return {
37
32
  version: 0.0,
38
33
  boundaryElement: boundaryElement || null,
39
- element: element || fallbackElement,
34
+ element: element || mounted ? document.body : null,
40
35
  elements,
41
36
  }
42
- }, [boundaryElement, element, elements, fallbackElement])
37
+ }, [boundaryElement, element, elements, mounted])
43
38
 
44
39
  return <PortalContext.Provider value={value}>{children}</PortalContext.Provider>
45
40
  }
46
-
47
- const emptySubscribe = () => () => {}
@@ -9,23 +9,23 @@ test('buildColorTheme: base', () => {
9
9
  bg: ['50', '900'],
10
10
  fg: ['800', '200'],
11
11
  },
12
- transparent: {
12
+ 'transparent': {
13
13
  bg: ['50', 'black'],
14
14
  },
15
- default: {
15
+ 'default': {
16
16
  bg: ['white', '950'],
17
17
  fg: ['black', '200'],
18
18
  },
19
- primary: {
19
+ 'primary': {
20
20
  _hue: 'purple',
21
21
  },
22
- positive: {
22
+ 'positive': {
23
23
  _hue: 'cyan',
24
24
  },
25
- caution: {
25
+ 'caution': {
26
26
  _hue: 'yellow',
27
27
  },
28
- critical: {
28
+ 'critical': {
29
29
  _hue: 'red',
30
30
  },
31
31
  },
@@ -100,23 +100,23 @@ test('buildColorTheme: button', () => {
100
100
  bg: ['50', '900'],
101
101
  fg: ['800', '200'],
102
102
  },
103
- transparent: {
103
+ 'transparent': {
104
104
  bg: ['50', 'black'],
105
105
  },
106
- default: {
106
+ 'default': {
107
107
  bg: ['white', '950'],
108
108
  fg: ['black', '200'],
109
109
  },
110
- primary: {
110
+ 'primary': {
111
111
  _hue: 'purple',
112
112
  },
113
- positive: {
113
+ 'positive': {
114
114
  _hue: 'cyan',
115
115
  },
116
- caution: {
116
+ 'caution': {
117
117
  _hue: 'yellow',
118
118
  },
119
- critical: {
119
+ 'critical': {
120
120
  _hue: 'red',
121
121
  },
122
122
  },
@@ -127,7 +127,7 @@ test('buildColorTheme: button', () => {
127
127
  bg: ['500', '400'],
128
128
  fg: ['white', 'black'],
129
129
  },
130
- hovered: {
130
+ 'hovered': {
131
131
  bg: ['600', '300'],
132
132
  },
133
133
  },
@@ -21,15 +21,15 @@ export interface ThemeColorAvatarHueTokens {
21
21
  /** @public */
22
22
  export interface ThemeColorAvatarTokens {
23
23
  '*'?: ThemeColorAvatarHueTokens
24
- gray?: ThemeColorAvatarHueTokens
25
- blue?: ThemeColorAvatarHueTokens
26
- purple?: ThemeColorAvatarHueTokens
27
- magenta?: ThemeColorAvatarHueTokens
28
- red?: ThemeColorAvatarHueTokens
29
- orange?: ThemeColorAvatarHueTokens
30
- yellow?: ThemeColorAvatarHueTokens
31
- green?: ThemeColorAvatarHueTokens
32
- cyan?: ThemeColorAvatarHueTokens
24
+ 'gray'?: ThemeColorAvatarHueTokens
25
+ 'blue'?: ThemeColorAvatarHueTokens
26
+ 'purple'?: ThemeColorAvatarHueTokens
27
+ 'magenta'?: ThemeColorAvatarHueTokens
28
+ 'red'?: ThemeColorAvatarHueTokens
29
+ 'orange'?: ThemeColorAvatarHueTokens
30
+ 'yellow'?: ThemeColorAvatarHueTokens
31
+ 'green'?: ThemeColorAvatarHueTokens
32
+ 'cyan'?: ThemeColorAvatarHueTokens
33
33
  }
34
34
 
35
35
  /** @public */
@@ -66,11 +66,11 @@ export interface ThemeColorBadgeToneTokens {
66
66
  /** @public */
67
67
  export interface ThemeColorBadgeTokens {
68
68
  '*'?: ThemeColorBadgeToneTokens
69
- default?: ThemeColorBadgeToneTokens
70
- primary?: ThemeColorBadgeToneTokens
71
- positive?: ThemeColorBadgeToneTokens
72
- caution?: ThemeColorBadgeToneTokens
73
- critical?: ThemeColorBadgeToneTokens
69
+ 'default'?: ThemeColorBadgeToneTokens
70
+ 'primary'?: ThemeColorBadgeToneTokens
71
+ 'positive'?: ThemeColorBadgeToneTokens
72
+ 'caution'?: ThemeColorBadgeToneTokens
73
+ 'critical'?: ThemeColorBadgeToneTokens
74
74
  }
75
75
 
76
76
  /** @public */