@sanity/ui 2.0.0-alpha.5 → 2.0.0-alpha.7

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 (115) hide show
  1. package/dist/index.cjs.mjs +3 -1
  2. package/dist/index.d.ts +294 -407
  3. package/dist/index.esm.js +971 -2333
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +972 -2332
  6. package/dist/index.js.map +1 -1
  7. package/package.json +1 -1
  8. package/src/components/dialog/dialog.tsx +3 -3
  9. package/src/components/dialog/styles.ts +3 -4
  10. package/src/components/menu/__workshop__/closableMenuButton.tsx +2 -2
  11. package/src/components/menu/menuDivider.ts +2 -1
  12. package/src/components/menu/menuGroup.tsx +22 -23
  13. package/src/components/menu/menuItem.tsx +30 -36
  14. package/src/components/skeleton/styles.ts +8 -7
  15. package/src/components/tree/style.ts +19 -20
  16. package/src/primitives/_selectable/style.ts +25 -22
  17. package/src/primitives/avatar/avatar.tsx +8 -3
  18. package/src/primitives/avatar/avatarCounter.tsx +5 -4
  19. package/src/primitives/avatar/spotColors.ts +53 -0
  20. package/src/primitives/avatar/styles.ts +5 -7
  21. package/src/primitives/avatar/types.ts +14 -0
  22. package/src/primitives/badge/badge.tsx +4 -2
  23. package/src/primitives/badge/styles.ts +7 -8
  24. package/src/primitives/box/__workshop__/responsive.tsx +2 -2
  25. package/src/primitives/button/button.tsx +2 -2
  26. package/src/primitives/button/styles.ts +82 -16
  27. package/src/primitives/card/__workshop__/selected.tsx +8 -9
  28. package/src/primitives/card/card.tsx +43 -7
  29. package/src/primitives/card/styles.ts +30 -22
  30. package/src/primitives/card/types.ts +3 -1
  31. package/src/primitives/checkbox/styles.ts +20 -20
  32. package/src/primitives/code/code.tsx +15 -3
  33. package/src/primitives/code/styles.ts +51 -42
  34. package/src/primitives/heading/styles.ts +6 -5
  35. package/src/primitives/kbd/kbd.tsx +2 -1
  36. package/src/primitives/label/styles.ts +3 -2
  37. package/src/primitives/popover/popoverArrow.tsx +3 -2
  38. package/src/primitives/popover/popoverCard.tsx +6 -2
  39. package/src/primitives/radio/styles.ts +15 -15
  40. package/src/primitives/select/styles.ts +20 -22
  41. package/src/primitives/switch/styles.ts +13 -13
  42. package/src/primitives/text/__workshop__/colored.tsx +10 -11
  43. package/src/primitives/text/styles.ts +10 -9
  44. package/src/primitives/textArea/textArea.tsx +7 -11
  45. package/src/primitives/textInput/textInput.tsx +12 -12
  46. package/src/primitives/tooltip/__workshop__/props.tsx +20 -3
  47. package/src/primitives/tooltip/tooltipArrow.tsx +3 -2
  48. package/src/styles/border/borderStyle.ts +2 -1
  49. package/src/styles/colorVars/colorVarsStyle.ts +73 -32
  50. package/src/styles/focusRing/index.ts +6 -4
  51. package/src/styles/input/textInputStyle.ts +76 -93
  52. package/src/styles/margin/marginsStyle.test.ts +1 -2
  53. package/src/styles/padding/paddingStyle.test.ts +1 -2
  54. package/src/styles/shadow/shadowStyle.ts +5 -5
  55. package/src/theme/__workshop__/color.tsx +2 -2
  56. package/src/theme/__workshop__/index.ts +0 -5
  57. package/src/theme/lib/color-fns/blend/multiply.ts +2 -2
  58. package/src/theme/lib/color-fns/blend/screen.ts +2 -2
  59. package/src/theme/lib/color-fns/convert.ts +15 -1
  60. package/src/theme/lib/color-fns/parse.ts +7 -3
  61. package/src/theme/lib/color-fns/types.ts +11 -0
  62. package/src/theme/lib/theme/color/cssVariables/cardVariables.ts +92 -0
  63. package/src/theme/lib/theme/color/cssVariables/createCssVars.ts +31 -0
  64. package/src/theme/lib/theme/color/cssVariables/cssVars.test.ts +262 -0
  65. package/src/theme/lib/theme/color/cssVariables/index.ts +1 -0
  66. package/src/theme/lib/theme/color/cssVariables/tints.ts +312 -0
  67. package/src/theme/lib/theme/color/cssVariables/tones.ts +67 -0
  68. package/src/theme/lib/theme/color/cssVariables/utils.test.ts +15 -0
  69. package/src/theme/lib/theme/color/cssVariables/utils.ts +9 -0
  70. package/src/theme/lib/theme/color/index.ts +2 -12
  71. package/src/theme/lib/theme/color/types.ts +6 -37
  72. package/src/theme/studioTheme/color.ts +2 -641
  73. package/src/theme/studioTheme/helpers.ts +15 -1
  74. package/src/theme/studioTheme/theme.ts +9 -3
  75. package/src/theme/themeColorProvider.tsx +2 -0
  76. package/src/theme/themeProvider.tsx +27 -8
  77. package/src/theme/toneContext/toneContext.ts +12 -0
  78. package/src/theme/toneContext/toneProvider.tsx +31 -0
  79. package/src/theme/toneContext/types.ts +10 -0
  80. package/src/theme/toneContext/useToneContext.tsx +26 -0
  81. package/src/theme/types.ts +2 -4
  82. package/src/utils/elementQuery/__workshop__/customMedia.tsx +4 -3
  83. package/src/theme/__workshop__/canvas.tsx +0 -395
  84. package/src/theme/lib/theme/color/_generic/index.ts +0 -1
  85. package/src/theme/lib/theme/color/_generic/types.ts +0 -30
  86. package/src/theme/lib/theme/color/base/index.ts +0 -1
  87. package/src/theme/lib/theme/color/base/types.ts +0 -19
  88. package/src/theme/lib/theme/color/button/createButtonModes.ts +0 -20
  89. package/src/theme/lib/theme/color/button/createButtonTones.ts +0 -52
  90. package/src/theme/lib/theme/color/button/index.ts +0 -1
  91. package/src/theme/lib/theme/color/button/types.ts +0 -44
  92. package/src/theme/lib/theme/color/card/createCardStates.ts +0 -58
  93. package/src/theme/lib/theme/color/card/index.ts +0 -1
  94. package/src/theme/lib/theme/color/card/types.ts +0 -18
  95. package/src/theme/lib/theme/color/color.test.ts +0 -63
  96. package/src/theme/lib/theme/color/defaults.ts +0 -390
  97. package/src/theme/lib/theme/color/factory.ts +0 -138
  98. package/src/theme/lib/theme/color/input/createInputModes.ts +0 -84
  99. package/src/theme/lib/theme/color/input/index.ts +0 -1
  100. package/src/theme/lib/theme/color/input/types.ts +0 -28
  101. package/src/theme/lib/theme/color/muted/createMuted.ts +0 -56
  102. package/src/theme/lib/theme/color/muted/index.ts +0 -1
  103. package/src/theme/lib/theme/color/muted/types.ts +0 -24
  104. package/src/theme/lib/theme/color/selectable/createSelectableTones.ts +0 -73
  105. package/src/theme/lib/theme/color/selectable/index.ts +0 -1
  106. package/src/theme/lib/theme/color/selectable/types.ts +0 -29
  107. package/src/theme/lib/theme/color/solid/createSolidTones.ts +0 -56
  108. package/src/theme/lib/theme/color/solid/index.ts +0 -1
  109. package/src/theme/lib/theme/color/solid/types.ts +0 -24
  110. package/src/theme/lib/theme/color/spot/createSpot.ts +0 -21
  111. package/src/theme/lib/theme/color/spot/index.ts +0 -1
  112. package/src/theme/lib/theme/color/spot/types.ts +0 -28
  113. package/src/theme/lib/theme/color/syntax/index.ts +0 -1
  114. package/src/theme/lib/theme/color/syntax/types.ts +0 -41
  115. package/src/theme/studioTheme/tints.ts +0 -152
@@ -5,11 +5,6 @@ export default defineScope({
5
5
  name: 'theme',
6
6
  title: 'Theme',
7
7
  stories: [
8
- {
9
- name: 'canvas',
10
- title: 'Canvas',
11
- component: lazy(() => import('./canvas')),
12
- },
13
8
  {
14
9
  name: 'nested-provider',
15
10
  title: 'Nested provider',
@@ -1,4 +1,4 @@
1
- import {RGB} from '../types'
1
+ import {RGB, RGBA} from '../types'
2
2
 
3
3
  function multiplyChannel(b: number, s: number) {
4
4
  return b * s
@@ -9,7 +9,7 @@ function multiplyChannel(b: number, s: number) {
9
9
  * Source: https://www.w3.org/TR/compositing-1/#blendingmultiply
10
10
  * @internal
11
11
  */
12
- export function multiply(b: RGB, s: RGB): RGB {
12
+ export function multiply(b: RGB | RGBA, s: RGB | RGBA): RGB {
13
13
  return {
14
14
  r: Math.round(clamp(multiplyChannel(b.r / 255, s.r / 255) * 255)),
15
15
  g: Math.round(clamp(multiplyChannel(b.g / 255, s.g / 255) * 255)),
@@ -1,4 +1,4 @@
1
- import {RGB} from '../types'
1
+ import {RGB, RGBA} from '../types'
2
2
 
3
3
  function screenChannel(b: number, s: number) {
4
4
  return b + s - b * s
@@ -9,7 +9,7 @@ function screenChannel(b: number, s: number) {
9
9
  * Source: https://www.w3.org/TR/compositing-1/#blendingscreen
10
10
  * @internal
11
11
  */
12
- export function screen(b: RGB, s: RGB): RGB {
12
+ export function screen(b: RGB | RGBA, s: RGB | RGBA): RGB {
13
13
  return {
14
14
  r: Math.round(clamp(screenChannel(b.r / 255, s.r / 255) * 255)),
15
15
  g: Math.round(clamp(screenChannel(b.g / 255, s.g / 255) * 255)),
@@ -1,4 +1,4 @@
1
- import {HSL, RGB} from './types'
1
+ import {HSL, RGB, RGBA} from './types'
2
2
 
3
3
  /**
4
4
  * @internal
@@ -23,6 +23,20 @@ export function hexToRgb(hex: string): RGB {
23
23
  }
24
24
  }
25
25
 
26
+ /**
27
+ * @internal
28
+ */
29
+ export function rgbaToRGBA(rgba: string): RGBA {
30
+ const values = rgba.replace(/rgba\(|\)/g, '').split(',')
31
+
32
+ return {
33
+ r: parseInt(values[0]),
34
+ g: parseInt(values[1]),
35
+ b: parseInt(values[2]),
36
+ a: parseFloat(values[3]),
37
+ }
38
+ }
39
+
26
40
  /**
27
41
  * @internal
28
42
  */
@@ -1,5 +1,5 @@
1
- import {hexToRgb, hslToRgb} from './convert'
2
- import {HSL, RGB} from './types'
1
+ import {hexToRgb, hslToRgb, rgbaToRGBA} from './convert'
2
+ import {HSL, RGB, RGBA} from './types'
3
3
 
4
4
  const HEX_CHARS = '0123456789ABCDEFabcdef'
5
5
 
@@ -37,7 +37,7 @@ function parseHsl(str: string): HSL {
37
37
  /**
38
38
  * @internal
39
39
  */
40
- export function parseColor(color: unknown): RGB {
40
+ export function parseColor(color: unknown): RGB | RGBA {
41
41
  if (!color) return {r: 0, g: 0, b: 0}
42
42
 
43
43
  if (typeof color !== 'string') {
@@ -52,5 +52,9 @@ export function parseColor(color: unknown): RGB {
52
52
  return hslToRgb(parseHsl(color))
53
53
  }
54
54
 
55
+ if (color.startsWith('rgba(')) {
56
+ return rgbaToRGBA(color)
57
+ }
58
+
55
59
  throw new Error(`parseColor: unexpected color format: "${color}"`)
56
60
  }
@@ -5,6 +5,17 @@ export interface RGB {
5
5
  r: number
6
6
  g: number
7
7
  b: number
8
+ a?: undefined
9
+ }
10
+
11
+ /**
12
+ * @internal
13
+ */
14
+ export interface RGBA {
15
+ r: number
16
+ g: number
17
+ b: number
18
+ a: number
8
19
  }
9
20
 
10
21
  /**
@@ -0,0 +1,92 @@
1
+ import {tonesCssVariables} from './tones'
2
+
3
+ /**
4
+ * @internal
5
+ * This variables can be changed by other components besides the `Card` component itself.
6
+ */
7
+ export const mutableCardVariables = {
8
+ 'bg-color': '--card-bg-color',
9
+ 'muted-fg-color': '--card-muted-fg-color',
10
+ 'icon-color': '--card-icon-color',
11
+ 'fg-color': '--card-fg-color',
12
+ 'bg-image': '--card-bg-image',
13
+ 'accent-color': '--card-accent-fg-color',
14
+ } as const
15
+
16
+ /**
17
+ * @internal
18
+ * This are the only variables that are exposed, as they can be updated and used by other components.
19
+ */
20
+ export const mutableVariables: Record<keyof typeof mutableCardVariables, string> = Object.keys(
21
+ mutableCardVariables,
22
+ ).reduce(
23
+ (acc, key) => {
24
+ const item = key as keyof typeof mutableCardVariables
25
+
26
+ acc[item] = `var(${mutableCardVariables[item]})`
27
+
28
+ return acc
29
+ },
30
+ {} as Record<keyof typeof mutableCardVariables, string>,
31
+ )
32
+
33
+ /**
34
+ * @internal
35
+ * This variables can not be changed by other components, they are here for backwards compatibility.
36
+ * Shouldn't be used inside any component in @sanity/ui
37
+ */
38
+ const legacyFixedVariables = [
39
+ '--card-shadow-outline-color',
40
+ '--card-shadow-umbra-color',
41
+ '--card-shadow-penumbra-color',
42
+ '--card-shadow-ambient-color',
43
+ '--card-focus-ring-color',
44
+ '--card-link-fg-color',
45
+ '--card-code-bg-color',
46
+ '--card-code-fg-color',
47
+ '--card-skeleton-color-from',
48
+ '--card-skeleton-color-to',
49
+ '--card-link-color',
50
+ '--card-hairline-soft-color',
51
+ '--card-hairline-hard-color',
52
+ '--card-bg2-color',
53
+ ] as const
54
+
55
+ const allVariables = [...Object.values(mutableCardVariables), ...legacyFixedVariables] as const
56
+
57
+ type CardCssVariable = (typeof allVariables)[number]
58
+
59
+ /**
60
+ * @internal
61
+ */
62
+ export const cardVariables: Record<CardCssVariable, string> = {
63
+ '--card-shadow-outline-color': tonesCssVariables.default['base-shadow-outline-color'],
64
+ '--card-shadow-umbra-color': tonesCssVariables.default['base-shadow-umbra-color'],
65
+ '--card-shadow-penumbra-color': tonesCssVariables.default['base-shadow-penumbra-color'],
66
+ '--card-shadow-ambient-color': tonesCssVariables.default['base-shadow-ambient-color'],
67
+ '--card-focus-ring-color': tonesCssVariables.positive['bg-accent'],
68
+ '--card-icon-color': tonesCssVariables.default['icon-default'],
69
+ '--card-bg-image': 'inherit',
70
+
71
+ // Card
72
+ '--card-bg-color': tonesCssVariables.default['bg-base'],
73
+
74
+ '--card-fg-color': tonesCssVariables.default['text-primary'],
75
+
76
+ '--card-muted-fg-color': tonesCssVariables.default['text-secondary'],
77
+ '--card-accent-fg-color': tonesCssVariables.default['text-accent'],
78
+ '--card-link-fg-color': tonesCssVariables.default['text-link'],
79
+ '--card-code-bg-color': tonesCssVariables.default['bg-tint-code'],
80
+ '--card-code-fg-color': tonesCssVariables.default['text-code'],
81
+
82
+ '--card-skeleton-color-from': tonesCssVariables.default['skeleton-from'],
83
+ '--card-skeleton-color-to': tonesCssVariables.default['skeleton-to'],
84
+
85
+ // @todo: deprecate
86
+ '--card-link-color': tonesCssVariables.default['text-link'],
87
+ '--card-hairline-soft-color': tonesCssVariables.default['border-base'],
88
+ '--card-hairline-hard-color': tonesCssVariables.default['border-base'],
89
+
90
+ // Card
91
+ '--card-bg2-color': tonesCssVariables.default['bg-tint'],
92
+ }
@@ -0,0 +1,31 @@
1
+ import {ColorTints} from '@sanity/color'
2
+ import {ThemeColorName, ThemeColorSchemeKey} from '../types'
3
+ import {cardVariables, mutableVariables} from './cardVariables'
4
+ import {getColorHex} from './tints'
5
+ import {createTonesVariables, tonesCssVariables} from './tones'
6
+
7
+ /**
8
+ * @beta
9
+ */
10
+ export const createCssVars = (
11
+ scheme: ThemeColorSchemeKey,
12
+ tones: Record<ThemeColorName, ColorTints>,
13
+ defaultTone: ThemeColorName = 'default',
14
+ ): Record<string, string> => {
15
+ const baseBg = getColorHex(tones[defaultTone], scheme, defaultTone, 'base-bg-card')
16
+ const tonesVars = createTonesVariables(scheme, tones, defaultTone, baseBg)
17
+
18
+ return {...tonesVars, ...cardVariables}
19
+ }
20
+
21
+ /**
22
+ * @beta
23
+ */
24
+ export const cssVars = {
25
+ ...tonesCssVariables,
26
+ /**
27
+ * This variables are mutable, they can be updated by other components.
28
+ * The main component that updates them is the card, these are the only ones that should be exposed for use from the cards.
29
+ */
30
+ mutable: mutableVariables,
31
+ }
@@ -0,0 +1,262 @@
1
+ import {ColorTints, hues} from '@sanity/color'
2
+ import {ThemeColorName} from '../types'
3
+ import {createCssVars} from './createCssVars'
4
+
5
+ export const tones: Record<ThemeColorName, ColorTints> = {
6
+ default: hues.gray,
7
+ transparent: hues.gray,
8
+ primary: hues.gray,
9
+ positive: hues.cyan,
10
+ caution: hues.yellow,
11
+ critical: hues.red,
12
+ } as const
13
+
14
+ describe('css variables', () => {
15
+ it('Should create the variables when no default tone is provided', () => {
16
+ const result = createCssVars('light', tones)
17
+
18
+ const expected = {
19
+ '--default-text-primary': '#1f2228',
20
+ '--default-text-secondary': '#5e6573',
21
+ '--default-text-inactive': '#788191',
22
+ '--default-text-code': '#5e6573',
23
+ '--default-text-muted': '#5e6573',
24
+ '--default-text-link': '#0661fe',
25
+ '--default-text-accent': '#ec4636',
26
+ '--default-bg-base': '#ffffff',
27
+ '--default-bg-base-hover': '#f9f9fa',
28
+ '--default-bg-base-active': '#f3f4f6',
29
+ '--default-bg-accent': '#1f2228',
30
+ '--default-bg-accent-hover': '#17191c',
31
+ '--default-bg-accent-active': '#111213',
32
+ '--default-bg-tint': '#f9f9fa',
33
+ '--default-bg-tint-code': '#f9f9fa',
34
+ '--default-icon-default': '#788191',
35
+ '--default-icon-inverted': '#ffffff',
36
+ '--default-border-base': '#f3f4f6',
37
+ '--default-border-base-hover': '#e2e6e9',
38
+ '--default-border-accent': '#5e6573',
39
+ '--default-border-accent-inverted': '#ffffff',
40
+ '--default-base-bg-card': '#ffffff',
41
+ '--default-base-bg-raw': '#ffffff',
42
+ '--default-base-shadow-outline-color': 'rgba(120,129,145,0.2)',
43
+ '--default-base-shadow-umbra-color': 'rgba(120,129,145,0.1)',
44
+ '--default-base-shadow-penumbra-color': 'rgba(120,129,145,0.07)',
45
+ '--default-base-shadow-ambient-color': 'rgba(120,129,145,0.06)',
46
+ '--default-base-text-color': '#ffffff',
47
+ '--default-skeleton-from': '#f3f4f6',
48
+ '--default-skeleton-to': 'rgba(249,249,250,0.5)',
49
+ '--transparent-text-primary': '#1f2228',
50
+ '--transparent-text-secondary': '#5e6573',
51
+ '--transparent-text-inactive': '#788191',
52
+ '--transparent-text-code': '#5e6573',
53
+ '--transparent-text-muted': '#5e6573',
54
+ '--transparent-text-link': '#0661fe',
55
+ '--transparent-text-accent': '#ec4636',
56
+ '--transparent-bg-base': '#ffffff',
57
+ '--transparent-bg-base-hover': '#f9f9fa',
58
+ '--transparent-bg-base-active': '#f3f4f6',
59
+ '--transparent-bg-accent': '#788191',
60
+ '--transparent-bg-accent-hover': '#5e6573',
61
+ '--transparent-bg-accent-active': '#464c58',
62
+ '--transparent-bg-tint': '#f9f9fa',
63
+ '--transparent-bg-tint-code': '#f9f9fa',
64
+ '--transparent-icon-default': '#788191',
65
+ '--transparent-icon-inverted': '#ffffff',
66
+ '--transparent-border-base': '#f3f4f6',
67
+ '--transparent-border-base-hover': '#e2e6e9',
68
+ '--transparent-border-accent': '#788191',
69
+ '--transparent-border-accent-inverted': '#ffffff',
70
+ '--transparent-base-bg-card': '#f9f9fa',
71
+ '--transparent-base-bg-raw': '#ffffff',
72
+ '--transparent-base-shadow-outline-color': 'rgba(120,129,145,0.2)',
73
+ '--transparent-base-shadow-umbra-color': 'rgba(120,129,145,0.1)',
74
+ '--transparent-base-shadow-penumbra-color': 'rgba(120,129,145,0.07)',
75
+ '--transparent-base-shadow-ambient-color': 'rgba(120,129,145,0.06)',
76
+ '--transparent-base-text-color': '#ffffff',
77
+ '--transparent-skeleton-from': '#f3f4f6',
78
+ '--transparent-skeleton-to': 'rgba(249,249,250,0.5)',
79
+ '--primary-text-primary': '#1f2228',
80
+ '--primary-text-secondary': '#5e6573',
81
+ '--primary-text-inactive': '#788191',
82
+ '--primary-text-code': '#5e6573',
83
+ '--primary-text-muted': '#5e6573',
84
+ '--primary-text-link': '#0661fe',
85
+ '--primary-text-accent': '#ec4636',
86
+ '--primary-bg-base': '#ffffff',
87
+ '--primary-bg-base-hover': '#f9f9fa',
88
+ '--primary-bg-base-active': '#f3f4f6',
89
+ '--primary-bg-accent': '#1f2228',
90
+ '--primary-bg-accent-hover': '#17191c',
91
+ '--primary-bg-accent-active': '#111213',
92
+ '--primary-bg-tint': '#f9f9fa',
93
+ '--primary-bg-tint-code': '#f9f9fa',
94
+ '--primary-icon-default': '#788191',
95
+ '--primary-icon-inverted': '#ffffff',
96
+ '--primary-border-base': '#f3f4f6',
97
+ '--primary-border-base-hover': '#e2e6e9',
98
+ '--primary-border-accent': '#5e6573',
99
+ '--primary-border-accent-inverted': '#ffffff',
100
+ '--primary-base-bg-card': '#f9f9fa',
101
+ '--primary-base-bg-raw': '#ffffff',
102
+ '--primary-base-shadow-outline-color': 'rgba(120,129,145,0.2)',
103
+ '--primary-base-shadow-umbra-color': 'rgba(120,129,145,0.1)',
104
+ '--primary-base-shadow-penumbra-color': 'rgba(120,129,145,0.07)',
105
+ '--primary-base-shadow-ambient-color': 'rgba(120,129,145,0.06)',
106
+ '--primary-base-text-color': '#ffffff',
107
+ '--primary-skeleton-from': '#f3f4f6',
108
+ '--primary-skeleton-to': 'rgba(249,249,250,0.5)',
109
+ '--positive-text-primary': '#0b2a32',
110
+ '--positive-text-secondary': '#0e9ebe',
111
+ '--positive-text-inactive': '#0ecff1',
112
+ '--positive-text-code': '#0e9ebe',
113
+ '--positive-text-muted': '#0e9ebe',
114
+ '--positive-text-link': '#0661fe',
115
+ '--positive-text-accent': '#ec4636',
116
+ '--positive-bg-base': '#ffffff',
117
+ '--positive-bg-base-hover': '#f9f9fa',
118
+ '--positive-bg-base-active': '#ebfdff',
119
+ '--positive-bg-accent': '#41e1f6',
120
+ '--positive-bg-accent-hover': '#0ecff1',
121
+ '--positive-bg-accent-active': '#0e9ebe',
122
+ '--positive-bg-tint': '#ebfdff',
123
+ '--positive-bg-tint-code': '#ebfdff',
124
+ '--positive-icon-default': '#0ecff1',
125
+ '--positive-icon-inverted': '#ffffff',
126
+ '--positive-border-base': '#d2fcfe',
127
+ '--positive-border-base-hover': '#aaf8fd',
128
+ '--positive-border-accent': '#41e1f6',
129
+ '--positive-border-accent-inverted': '#ffffff',
130
+ '--positive-base-bg-card': '#ebfdff',
131
+ '--positive-base-bg-raw': '#ffffff',
132
+ '--positive-base-shadow-outline-color': 'rgba(14,207,241,0.2)',
133
+ '--positive-base-shadow-umbra-color': 'rgba(14,207,241,0.1)',
134
+ '--positive-base-shadow-penumbra-color': 'rgba(14,207,241,0.07)',
135
+ '--positive-base-shadow-ambient-color': 'rgba(14,207,241,0.06)',
136
+ '--positive-base-text-color': '#ffffff',
137
+ '--positive-skeleton-from': '#d2fcfe',
138
+ '--positive-skeleton-to': 'rgba(235,253,255,0.5)',
139
+ '--caution-text-primary': '#331f0a',
140
+ '--caution-text-secondary': '#cb920b',
141
+ '--caution-text-inactive': '#f3bc16',
142
+ '--caution-text-code': '#cb920b',
143
+ '--caution-text-muted': '#cb920b',
144
+ '--caution-text-link': '#0661fe',
145
+ '--caution-text-accent': '#ec4636',
146
+ '--caution-bg-base': '#ffffff',
147
+ '--caution-bg-base-hover': '#fffdf0',
148
+ '--caution-bg-base-active': '#fef7cd',
149
+ '--caution-bg-accent': '#f3bc16',
150
+ '--caution-bg-accent-hover': '#cb920b',
151
+ '--caution-bg-accent-active': '#98670b',
152
+ '--caution-bg-tint': '#fffdf0',
153
+ '--caution-bg-tint-code': '#fffdf0',
154
+ '--caution-icon-default': '#f3bc16',
155
+ '--caution-icon-inverted': '#ffffff',
156
+ '--caution-border-base': '#fef7cd',
157
+ '--caution-border-base-hover': '#fbf1a7',
158
+ '--caution-border-accent': '#f3bc16',
159
+ '--caution-border-accent-inverted': '#ffffff',
160
+ '--caution-base-bg-card': '#fffdf0',
161
+ '--caution-base-bg-raw': '#ffffff',
162
+ '--caution-base-shadow-outline-color': 'rgba(243,188,22,0.2)',
163
+ '--caution-base-shadow-umbra-color': 'rgba(243,188,22,0.1)',
164
+ '--caution-base-shadow-penumbra-color': 'rgba(243,188,22,0.07)',
165
+ '--caution-base-shadow-ambient-color': 'rgba(243,188,22,0.06)',
166
+ '--caution-base-text-color': '#ffffff',
167
+ '--caution-skeleton-from': '#fef7cd',
168
+ '--caution-skeleton-to': 'rgba(255,253,240,0.5)',
169
+ '--critical-text-primary': '#421410',
170
+ '--critical-text-secondary': '#d72414',
171
+ '--critical-text-inactive': '#f6a098',
172
+ '--critical-text-code': '#d72414',
173
+ '--critical-text-muted': '#d72414',
174
+ '--critical-text-link': '#0661fe',
175
+ '--critical-text-accent': '#ec4636',
176
+ '--critical-bg-base': '#ffffff',
177
+ '--critical-bg-base-hover': '#fff5f5',
178
+ '--critical-bg-base-active': '#fee8e7',
179
+ '--critical-bg-accent': '#ec4636',
180
+ '--critical-bg-accent-hover': '#d72414',
181
+ '--critical-bg-accent-active': '#a52112',
182
+ '--critical-bg-tint': '#fff5f5',
183
+ '--critical-bg-tint-code': '#fff5f5',
184
+ '--critical-icon-default': '#ec4636',
185
+ '--critical-icon-inverted': '#ffffff',
186
+ '--critical-border-base': '#fee8e7',
187
+ '--critical-border-base-hover': '#fbccc6',
188
+ '--critical-border-accent': '#ec4636',
189
+ '--critical-border-accent-inverted': '#ffffff',
190
+ '--critical-base-bg-card': '#fff5f5',
191
+ '--critical-base-bg-raw': '#ffffff',
192
+ '--critical-base-shadow-outline-color': 'rgba(236,70,54,0.2)',
193
+ '--critical-base-shadow-umbra-color': 'rgba(236,70,54,0.1)',
194
+ '--critical-base-shadow-penumbra-color': 'rgba(236,70,54,0.07)',
195
+ '--critical-base-shadow-ambient-color': 'rgba(236,70,54,0.06)',
196
+ '--critical-base-text-color': '#ffffff',
197
+ '--critical-skeleton-from': '#fee8e7',
198
+ '--critical-skeleton-to': 'rgba(255,245,245,0.5)',
199
+ '--card-shadow-outline-color': 'var(--default-base-shadow-outline-color)',
200
+ '--card-shadow-umbra-color': 'var(--default-base-shadow-umbra-color)',
201
+ '--card-shadow-penumbra-color': 'var(--default-base-shadow-penumbra-color)',
202
+ '--card-shadow-ambient-color': 'var(--default-base-shadow-ambient-color)',
203
+ '--card-focus-ring-color': 'var(--positive-bg-accent)',
204
+ '--card-icon-color': 'var(--default-icon-default)',
205
+ '--card-bg-image': 'inherit',
206
+ '--card-bg-color': 'var(--default-bg-base)',
207
+ '--card-fg-color': 'var(--default-text-primary)',
208
+ '--card-muted-fg-color': 'var(--default-text-secondary)',
209
+ '--card-accent-fg-color': 'var(--default-text-accent)',
210
+ '--card-link-fg-color': 'var(--default-text-link)',
211
+ '--card-code-bg-color': 'var(--default-bg-tint-code)',
212
+ '--card-code-fg-color': 'var(--default-text-code)',
213
+ '--card-skeleton-color-from': 'var(--default-skeleton-from)',
214
+ '--card-skeleton-color-to': 'var(--default-skeleton-to)',
215
+ '--card-link-color': 'var(--default-text-link)',
216
+ '--card-hairline-soft-color': 'var(--default-border-base)',
217
+ '--card-hairline-hard-color': 'var(--default-border-base)',
218
+ '--card-bg2-color': 'var(--default-bg-tint)',
219
+ }
220
+
221
+ expect(result).toEqual(expected)
222
+ })
223
+ it('Should create the variables when a default tone is provided in light mode', () => {
224
+ const defaultVariables = createCssVars('light', tones)
225
+ const result = createCssVars('light', tones, 'caution')
226
+
227
+ expect(result['--default-text-primary']).toEqual(result['--caution-text-primary'])
228
+ // It's not equal because it has been mixed with the default bg
229
+ expect(result['--default-text-primary']).not.toEqual(defaultVariables['--caution-text-primary'])
230
+
231
+ expect(result['--default-text-secondary']).toEqual(result['--caution-text-secondary'])
232
+ // It's not equal because it has been mixed with the default bg
233
+ expect(result['--default-text-secondary']).not.toEqual(
234
+ defaultVariables['--caution-text-secondary'],
235
+ )
236
+ // The default base bg should not be mixed
237
+ expect(result['--default-bg_base']).toEqual(defaultVariables['--caution-card_base_bg'])
238
+
239
+ expect(result['--default-base-shadow-ambient-color']).toEqual(
240
+ defaultVariables['--caution-base-shadow-ambient-color'],
241
+ )
242
+ expect(result['--default-base-shadow-ambient-color']).not.toEqual(
243
+ defaultVariables['--positive-base-shadow-ambient-color'],
244
+ )
245
+ })
246
+ it('Should create the variables when a default tone is provided in dark mode', () => {
247
+ const defaultVariables = createCssVars('dark', tones)
248
+ const result = createCssVars('dark', tones, 'caution')
249
+
250
+ expect(result['--default-text-primary']).toEqual(result['--caution-text-primary'])
251
+ // It's not equal because it has been mixed with the default bg
252
+ expect(result['--default-text-primary']).not.toEqual(defaultVariables['--caution-text-primary'])
253
+
254
+ expect(result['--default-text-secondary']).toEqual(result['--caution-text-secondary'])
255
+ // It's not equal because it has been mixed with the default bg
256
+ expect(result['--default-text-secondary']).not.toEqual(
257
+ defaultVariables['--caution-text-secondary'],
258
+ )
259
+ // The base bg should not be mixed
260
+ expect(result['--default-bg_base']).toEqual(defaultVariables['--caution-card_base_bg'])
261
+ })
262
+ })
@@ -0,0 +1 @@
1
+ export * from './createCssVars'