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