@sanity/ui 2.0.0-alpha.1 → 2.0.0-alpha.10

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 (120) hide show
  1. package/dist/index.cjs.mjs +3 -0
  2. package/dist/index.d.ts +309 -411
  3. package/dist/index.esm.js +5098 -2428
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +5230 -2557
  6. package/dist/index.js.map +1 -1
  7. package/package.json +2 -2
  8. package/src/components/dialog/constants.ts +4 -0
  9. package/src/components/dialog/dialog.tsx +86 -24
  10. package/src/components/dialog/styles.ts +3 -4
  11. package/src/components/menu/__workshop__/closableMenuButton.tsx +2 -2
  12. package/src/components/menu/menuDivider.ts +2 -1
  13. package/src/components/menu/menuGroup.tsx +22 -23
  14. package/src/components/menu/menuItem.tsx +31 -37
  15. package/src/components/skeleton/styles.ts +8 -7
  16. package/src/components/tree/style.ts +19 -20
  17. package/src/primitives/_selectable/style.ts +25 -22
  18. package/src/primitives/avatar/avatar.tsx +8 -3
  19. package/src/primitives/avatar/avatarCounter.tsx +5 -4
  20. package/src/primitives/avatar/spotColors.ts +53 -0
  21. package/src/primitives/avatar/styles.ts +5 -7
  22. package/src/primitives/avatar/types.ts +14 -0
  23. package/src/primitives/badge/badge.tsx +5 -3
  24. package/src/primitives/badge/styles.ts +7 -8
  25. package/src/primitives/box/__workshop__/responsive.tsx +2 -2
  26. package/src/primitives/button/button.tsx +2 -2
  27. package/src/primitives/button/styles.ts +82 -16
  28. package/src/primitives/card/__workshop__/selected.tsx +8 -9
  29. package/src/primitives/card/card.tsx +43 -7
  30. package/src/primitives/card/styles.ts +30 -22
  31. package/src/primitives/card/types.ts +3 -1
  32. package/src/primitives/checkbox/styles.ts +20 -20
  33. package/src/primitives/code/code.tsx +15 -3
  34. package/src/primitives/code/styles.ts +51 -42
  35. package/src/primitives/heading/styles.ts +6 -5
  36. package/src/primitives/kbd/kbd.tsx +2 -1
  37. package/src/primitives/label/styles.ts +3 -2
  38. package/src/primitives/popover/popoverArrow.tsx +3 -2
  39. package/src/primitives/popover/popoverCard.tsx +6 -2
  40. package/src/primitives/radio/styles.ts +15 -15
  41. package/src/primitives/select/styles.ts +20 -22
  42. package/src/primitives/switch/styles.ts +13 -13
  43. package/src/primitives/text/__workshop__/colored.tsx +10 -11
  44. package/src/primitives/text/styles.ts +10 -9
  45. package/src/primitives/textArea/textArea.tsx +8 -12
  46. package/src/primitives/textInput/textInput.tsx +13 -13
  47. package/src/primitives/tooltip/__workshop__/props.tsx +20 -3
  48. package/src/primitives/tooltip/tooltipArrow.tsx +3 -2
  49. package/src/styles/border/borderStyle.ts +2 -1
  50. package/src/styles/colorVars/colorVarsStyle.ts +73 -32
  51. package/src/styles/focusRing/index.ts +6 -4
  52. package/src/styles/input/textInputStyle.ts +76 -93
  53. package/src/styles/margin/marginsStyle.test.ts +1 -2
  54. package/src/styles/padding/paddingStyle.test.ts +1 -2
  55. package/src/styles/shadow/shadowStyle.ts +5 -5
  56. package/src/theme/__workshop__/color.tsx +2 -2
  57. package/src/theme/__workshop__/index.ts +0 -5
  58. package/src/theme/lib/color-fns/blend/multiply.ts +2 -2
  59. package/src/theme/lib/color-fns/blend/screen.ts +2 -2
  60. package/src/theme/lib/color-fns/convert.ts +15 -1
  61. package/src/theme/lib/color-fns/parse.ts +7 -3
  62. package/src/theme/lib/color-fns/types.ts +11 -0
  63. package/src/theme/lib/theme/color/_legacy/createColorTheme.ts +7 -0
  64. package/src/theme/lib/theme/color/_legacy/index.ts +1 -0
  65. package/src/theme/lib/theme/color/_legacy/legacyColor.ts +3997 -0
  66. package/src/theme/lib/theme/color/cssVariables/cardVariables.ts +88 -0
  67. package/src/theme/lib/theme/color/cssVariables/createCssVars.ts +31 -0
  68. package/src/theme/lib/theme/color/cssVariables/cssVars.test.ts +262 -0
  69. package/src/theme/lib/theme/color/cssVariables/index.ts +1 -0
  70. package/src/theme/lib/theme/color/cssVariables/tints.ts +312 -0
  71. package/src/theme/lib/theme/color/cssVariables/tones.ts +67 -0
  72. package/src/theme/lib/theme/color/cssVariables/utils.test.ts +15 -0
  73. package/src/theme/lib/theme/color/cssVariables/utils.ts +9 -0
  74. package/src/theme/lib/theme/color/index.ts +3 -12
  75. package/src/theme/lib/theme/color/types.ts +6 -37
  76. package/src/theme/lib/theme/theme.ts +9 -4
  77. package/src/theme/studioTheme/color.ts +2 -641
  78. package/src/theme/studioTheme/helpers.ts +15 -1
  79. package/src/theme/studioTheme/theme.ts +13 -3
  80. package/src/theme/themeColorProvider.tsx +2 -0
  81. package/src/theme/themeProvider.tsx +28 -8
  82. package/src/theme/toneContext/toneContext.ts +12 -0
  83. package/src/theme/toneContext/toneProvider.tsx +31 -0
  84. package/src/theme/toneContext/types.ts +10 -0
  85. package/src/theme/toneContext/useToneContext.tsx +26 -0
  86. package/src/theme/types.ts +2 -4
  87. package/src/utils/elementQuery/__workshop__/customMedia.tsx +4 -3
  88. package/src/theme/__workshop__/canvas.tsx +0 -395
  89. package/src/theme/lib/theme/color/_generic/index.ts +0 -1
  90. package/src/theme/lib/theme/color/_generic/types.ts +0 -30
  91. package/src/theme/lib/theme/color/base/index.ts +0 -1
  92. package/src/theme/lib/theme/color/base/types.ts +0 -19
  93. package/src/theme/lib/theme/color/button/createButtonModes.ts +0 -20
  94. package/src/theme/lib/theme/color/button/createButtonTones.ts +0 -52
  95. package/src/theme/lib/theme/color/button/index.ts +0 -1
  96. package/src/theme/lib/theme/color/button/types.ts +0 -44
  97. package/src/theme/lib/theme/color/card/createCardStates.ts +0 -58
  98. package/src/theme/lib/theme/color/card/index.ts +0 -1
  99. package/src/theme/lib/theme/color/card/types.ts +0 -18
  100. package/src/theme/lib/theme/color/color.test.ts +0 -63
  101. package/src/theme/lib/theme/color/defaults.ts +0 -390
  102. package/src/theme/lib/theme/color/factory.ts +0 -138
  103. package/src/theme/lib/theme/color/input/createInputModes.ts +0 -84
  104. package/src/theme/lib/theme/color/input/index.ts +0 -1
  105. package/src/theme/lib/theme/color/input/types.ts +0 -28
  106. package/src/theme/lib/theme/color/muted/createMuted.ts +0 -56
  107. package/src/theme/lib/theme/color/muted/index.ts +0 -1
  108. package/src/theme/lib/theme/color/muted/types.ts +0 -24
  109. package/src/theme/lib/theme/color/selectable/createSelectableTones.ts +0 -73
  110. package/src/theme/lib/theme/color/selectable/index.ts +0 -1
  111. package/src/theme/lib/theme/color/selectable/types.ts +0 -29
  112. package/src/theme/lib/theme/color/solid/createSolidTones.ts +0 -56
  113. package/src/theme/lib/theme/color/solid/index.ts +0 -1
  114. package/src/theme/lib/theme/color/solid/types.ts +0 -24
  115. package/src/theme/lib/theme/color/spot/createSpot.ts +0 -21
  116. package/src/theme/lib/theme/color/spot/index.ts +0 -1
  117. package/src/theme/lib/theme/color/spot/types.ts +0 -28
  118. package/src/theme/lib/theme/color/syntax/index.ts +0 -1
  119. package/src/theme/lib/theme/color/syntax/types.ts +0 -41
  120. package/src/theme/studioTheme/tints.ts +0 -152
@@ -1,6 +1,7 @@
1
1
  import {css} from 'styled-components'
2
- import {ThemeColorSchemeKey, ThemeFontWeightKey} from '../../theme'
3
- import {CardTone} from '../../types'
2
+ import {ThemeColorToneKey, ThemeFontWeightKey} from '../../theme'
3
+ import {mutableCardVariables} from '../../theme/lib/theme/color/cssVariables/cardVariables'
4
+ import {cssVars} from '../../theme/lib/theme/color/cssVariables/createCssVars'
4
5
  import {CSSObject} from '../../types/styled'
5
6
  import {focusRingBorderStyle, focusRingStyle} from '../focusRing'
6
7
  import {rem, _responsive} from '../helpers'
@@ -11,8 +12,7 @@ import {ThemeProps} from '../types'
11
12
  */
12
13
  export interface TextInputInputStyleProps {
13
14
  $fontSize: number[]
14
- $scheme: ThemeColorSchemeKey
15
- $tone: CardTone
15
+ $tone: ThemeColorToneKey
16
16
  $weight?: ThemeFontWeightKey
17
17
  }
18
18
 
@@ -22,8 +22,7 @@ export interface TextInputInputStyleProps {
22
22
  export interface TextInputRepresentationStyleProps {
23
23
  $hasPrefix?: boolean
24
24
  $hasSuffix?: boolean
25
- $scheme: ThemeColorSchemeKey
26
- $tone: CardTone
25
+ $tone: ThemeColorToneKey
27
26
  }
28
27
 
29
28
  const ROOT_STYLE = css`
@@ -41,9 +40,8 @@ export function textInputRootStyle(): ReturnType<typeof css> {
41
40
  export function textInputBaseStyle(
42
41
  props: TextInputInputStyleProps & ThemeProps,
43
42
  ): ReturnType<typeof css> {
44
- const {theme, $scheme, $tone, $weight} = props
43
+ const {theme, $tone, $weight} = props
45
44
  const font = theme.sanity.fonts.text
46
- const color = theme.sanity.color.input
47
45
 
48
46
  return css`
49
47
  appearance: none;
@@ -81,33 +79,31 @@ export function textInputBaseStyle(
81
79
  color: var(--input-placeholder-color);
82
80
  }
83
81
 
84
- &[data-scheme='${$scheme}'][data-tone='${$tone}'] {
85
- --input-fg-color: ${color.default.enabled.fg};
86
- --input-placeholder-color: ${color.default.enabled.placeholder};
82
+ --input-fg-color: ${cssVars[$tone]['text-primary']};
83
+ --input-placeholder-color: ${cssVars[$tone]['text-inactive']};
87
84
 
88
- /* enabled */
89
- &:not(:invalid):not(:disabled):not(:read-only) {
90
- --input-fg-color: ${color.default.enabled.fg};
91
- --input-placeholder-color: ${color.default.enabled.placeholder};
92
- }
85
+ /* enabled */
86
+ &:not(:invalid):not(:disabled):not(:read-only) {
87
+ --input-fg-color: ${cssVars[$tone]['text-primary']};
88
+ --input-placeholder-color: ${cssVars[$tone]['text-inactive']};
89
+ }
93
90
 
94
- /* disabled */
95
- &:not(:invalid):disabled {
96
- --input-fg-color: ${color.default.disabled.fg};
97
- --input-placeholder-color: ${color.default.disabled.placeholder};
98
- }
91
+ /* disabled */
92
+ &:not(:invalid):disabled {
93
+ --input-fg-color: ${cssVars[$tone]['text-primary']};
94
+ --input-placeholder-color: ${cssVars[$tone]['text-inactive']};
95
+ }
99
96
 
100
- /* invalid */
101
- &:invalid {
102
- --input-fg-color: ${color.invalid.enabled.fg};
103
- --input-placeholder-color: ${color.invalid.enabled.placeholder};
104
- }
97
+ /* invalid */
98
+ &:invalid {
99
+ --input-fg-color: ${cssVars.critical['text-primary']};
100
+ --input-placeholder-color: ${cssVars.critical['text-inactive']};
101
+ }
105
102
 
106
- /* readOnly */
107
- &:read-only {
108
- --input-fg-color: ${color.default.readOnly.fg};
109
- --input-placeholder-color: ${color.default.readOnly.placeholder};
110
- }
103
+ /* readOnly */
104
+ &:read-only {
105
+ --input-fg-color: ${cssVars[$tone]['text-primary']};
106
+ --input-placeholder-color: ${cssVars[$tone]['text-inactive']};
111
107
  }
112
108
  `
113
109
  }
@@ -129,10 +125,9 @@ export function textInputFontSizeStyle(props: TextInputInputStyleProps & ThemePr
129
125
  export function textInputRepresentationStyle(
130
126
  props: TextInputRepresentationStyleProps & ThemeProps,
131
127
  ): ReturnType<typeof css> {
132
- const {$hasPrefix, $hasSuffix, $scheme, $tone, theme} = props
128
+ const {$hasPrefix, $hasSuffix, $tone, theme} = props
133
129
  const {input} = theme.sanity
134
130
  const {focusRing} = input.text
135
- const color = theme.sanity.color.input
136
131
 
137
132
  return css`
138
133
  --input-box-shadow: none;
@@ -146,7 +141,7 @@ export function textInputRepresentationStyle(
146
141
  pointer-events: none;
147
142
  z-index: 0;
148
143
 
149
- background-color: var(--card-bg-color);
144
+ background-color: ${cssVars.mutable['bg-color']};
150
145
  box-shadow: var(--input-box-shadow);
151
146
 
152
147
  border-top-left-radius: ${$hasPrefix ? 0 : undefined};
@@ -154,78 +149,66 @@ export function textInputRepresentationStyle(
154
149
  border-top-right-radius: ${$hasSuffix ? 0 : undefined};
155
150
  border-bottom-right-radius: ${$hasSuffix ? 0 : undefined};
156
151
 
157
- &[data-scheme='${$scheme}'][data-tone='${$tone}'] {
158
- --card-bg-color: ${color.default.enabled.bg};
159
- --card-fg-color: ${color.default.enabled.fg};
152
+ ${mutableCardVariables['bg-color']}: ${cssVars[$tone]['bg-base']};
153
+ ${mutableCardVariables['fg-color']}: ${cssVars[$tone]['text-primary']};
154
+
155
+ /* enabled */
156
+ &[data-border] {
157
+ --input-box-shadow: ${focusRingBorderStyle({
158
+ color: cssVars[$tone]['border-base'],
159
+ width: input.border.width,
160
+ })};
161
+ }
160
162
 
161
- /* enabled */
162
- *:not(:disabled) + &[data-border] {
163
+ /* invalid */
164
+ *:not(:disabled):invalid + & {
165
+ ${mutableCardVariables['bg-color']}: ${cssVars.critical['bg-tint']};
166
+ ${mutableCardVariables['fg-color']}: ${cssVars.critical['text-primary']};
167
+
168
+ &[data-border] {
163
169
  --input-box-shadow: ${focusRingBorderStyle({
164
- color: color.default.enabled.border,
170
+ color: cssVars.critical['border-base'],
165
171
  width: input.border.width,
166
172
  })};
167
173
  }
174
+ }
168
175
 
169
- /* invalid */
170
- *:not(:disabled):invalid + & {
171
- --card-bg-color: ${color.invalid.enabled.bg};
172
- --card-fg-color: ${color.invalid.enabled.fg};
173
-
174
- &[data-border] {
175
- --input-box-shadow: ${focusRingBorderStyle({
176
- color: color.invalid.enabled.border,
177
- width: input.border.width,
178
- })};
179
- }
176
+ /* focused */
177
+ *:not(:disabled):focus + & {
178
+ &[data-border] {
179
+ --input-box-shadow: ${focusRingStyle({
180
+ border: {color: cssVars[$tone]['border-base'], width: input.border.width},
181
+ focusRing,
182
+ })};
180
183
  }
181
184
 
182
- /* focused */
183
- *:not(:disabled):focus + & {
184
- &[data-border] {
185
- --input-box-shadow: ${focusRingStyle({
186
- border: {color: color.default.enabled.border, width: input.border.width},
187
- focusRing,
188
- })};
189
- }
190
-
191
- &:not([data-border]) {
192
- --input-box-shadow: ${focusRingStyle({focusRing})};
193
- }
185
+ &:not([data-border]) {
186
+ --input-box-shadow: ${focusRingStyle({focusRing})};
194
187
  }
188
+ }
195
189
 
196
- /* disabled */
197
- *:disabled + & {
198
- --card-bg-color: ${color.default.disabled.bg} !important;
199
- --card-fg-color: ${color.default.disabled.fg} !important;
200
-
201
- &[data-border] {
202
- --input-box-shadow: ${focusRingBorderStyle({
203
- color: color.default.disabled.border,
204
- width: input.border.width,
205
- })};
206
- }
207
- }
190
+ /* disabled */
191
+ *:disabled + & {
192
+ ${mutableCardVariables['bg-color']}: ${cssVars.default['bg-tint']} !important;
193
+ ${mutableCardVariables['fg-color']}: ${cssVars.default['text-primary']} !important;
194
+ }
208
195
 
209
- /* readOnly */
210
- *:read-only + & {
211
- --card-bg-color: ${color.default.readOnly.bg} !important;
212
- --card-fg-color: ${color.default.readOnly.fg} !important;
213
- }
196
+ /* readOnly */
197
+ *:read-only + & {
198
+ ${mutableCardVariables['bg-color']}: ${cssVars.default['bg-tint']} !important;
199
+ ${mutableCardVariables['fg-color']}: ${cssVars.default['text-primary']} !important;
200
+ }
214
201
 
215
- /* hovered */
216
- @media (hover: hover) {
217
- *:not(:disabled):not(:read-only):not(:invalid):hover + & {
218
- --card-bg-color: ${color.default.hovered.bg};
219
- --card-fg-color: ${color.default.hovered.fg};
220
- }
221
-
222
- *:not(:disabled):not(:read-only):not(:invalid):not(:focus):hover + &[data-border] {
223
- --input-box-shadow: ${focusRingBorderStyle({
224
- color: color.default.hovered.border,
225
- width: input.border.width,
226
- })};
227
- }
202
+ /* hovered */
203
+ @media (hover: hover) {
204
+
205
+ *:not(:disabled):not(:read-only):not(:invalid):not(:focus):hover + &[data-border] {
206
+ --input-box-shadow: ${focusRingBorderStyle({
207
+ color: cssVars.default['border-base-hover'],
208
+ width: input.border.width,
209
+ })};
228
210
  }
229
211
  }
212
+ }
230
213
  `
231
214
  }
@@ -3,8 +3,7 @@
3
3
  import {studioTheme, Theme} from '../../theme'
4
4
  import {responsiveMarginStyle} from './marginStyle'
5
5
 
6
- const {color, ...restTheme} = studioTheme
7
- const theme: Theme = {sanity: {...restTheme, color: color.light.default}}
6
+ const theme: Theme = {sanity: studioTheme}
8
7
 
9
8
  describe('styles/margin', () => {
10
9
  it('should 1', () => {
@@ -3,8 +3,7 @@
3
3
  import {studioTheme, Theme} from '../../theme'
4
4
  import {responsivePaddingStyle} from './paddingStyle'
5
5
 
6
- const {color, ...restTheme} = studioTheme
7
- const theme: Theme = {sanity: {...restTheme, color: color.light.default}}
6
+ const theme: Theme = {sanity: studioTheme}
8
7
 
9
8
  describe('styles/padding', () => {
10
9
  it('should 1', () => {
@@ -1,5 +1,5 @@
1
1
  import {EMPTY_RECORD} from '../../constants'
2
- import {BoxShadow, ThemeShadow} from '../../theme'
2
+ import {BoxShadow, ThemeShadow, cssVars} from '../../theme'
3
3
  import {CSSObject} from '../../types/styled'
4
4
  import {rem, _responsive} from '../helpers'
5
5
  import {ThemeProps} from '../types'
@@ -12,10 +12,10 @@ function toBoxShadow(shadow: BoxShadow, color: string) {
12
12
  function shadowStyle(shadow: ThemeShadow | null): CSSObject {
13
13
  if (!shadow) return EMPTY_RECORD
14
14
 
15
- const outline = `0 0 0 ${rem(1)} var(--card-shadow-outline-color)`
16
- const umbra = toBoxShadow(shadow.umbra, 'var(--card-shadow-umbra-color)')
17
- const penumbra = toBoxShadow(shadow.penumbra, 'var(--card-shadow-penumbra-color)')
18
- const ambient = toBoxShadow(shadow.ambient, 'var(--card-shadow-ambient-color)')
15
+ const outline = `0 0 0 ${rem(1)} ${cssVars.default['base-shadow-outline-color']}`
16
+ const umbra = toBoxShadow(shadow.umbra, cssVars.default['base-shadow-umbra-color'])
17
+ const penumbra = toBoxShadow(shadow.penumbra, cssVars.default['base-shadow-penumbra-color'])
18
+ const ambient = toBoxShadow(shadow.ambient, cssVars.default['base-shadow-ambient-color'])
19
19
 
20
20
  return {boxShadow: `${outline}, ${umbra}, ${penumbra}, ${ambient}`}
21
21
  }
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import {Box, Card, Tree, TreeItem, useRootTheme} from '@sanity/ui'
2
+ import {Box, Card, Tree, TreeItem, cssVars, useRootTheme} from '@sanity/ui'
3
3
 
4
4
  export default function ColorStory() {
5
5
  const {theme} = useRootTheme()
@@ -48,7 +48,7 @@ function ColorPreview({name, value}: {name: string; value: string}) {
48
48
  radius={2}
49
49
  style={{
50
50
  backgroundColor: value,
51
- boxShadow: 'inset 0 0 0 1px var(--card-shadow-outline-color)',
51
+ boxShadow: `inset 0 0 0 1px ${cssVars.default['base-shadow-outline-color']}`,
52
52
  display: 'inline-block',
53
53
  height: 17,
54
54
  width: 25,
@@ -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,7 @@
1
+ /**
2
+ * @internal
3
+ * @deprecated Use studioTheme instead.
4
+ */
5
+ export function createColorTheme(): null {
6
+ return null
7
+ }
@@ -0,0 +1 @@
1
+ export * from './createColorTheme'