@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,638 +1,11 @@
1
- import {black, ColorTints, hues, white} from '@sanity/color'
2
- import {rgba} from '../lib/color-fns'
3
- import {createColorTheme} from '../lib/theme'
4
- import {multiply, screen} from './helpers'
1
+ import {ColorTints, hues} from '@sanity/color'
2
+ import {ThemeColorName} from '../lib/theme'
5
3
 
6
- const tones: {[key: string]: ColorTints} = {
4
+ export const tones: Record<ThemeColorName, ColorTints> = {
7
5
  default: hues.gray,
8
6
  transparent: hues.gray,
9
- primary: hues.blue,
10
- positive: hues.green,
7
+ primary: hues.gray,
8
+ positive: hues.cyan,
11
9
  caution: hues.yellow,
12
10
  critical: hues.red,
13
- }
14
-
15
- const NEUTRAL_TONES = ['default', 'transparent']
16
-
17
- export const color = createColorTheme({
18
- base: ({dark, name}) => {
19
- if (name === 'default') {
20
- const tints = hues.gray
21
- const skeletonFrom = dark ? tints[900].hex : tints[100].hex
22
-
23
- return {
24
- fg: dark ? white.hex : black.hex,
25
- bg: dark ? black.hex : white.hex,
26
- border: tints[dark ? 800 : 200].hex,
27
- focusRing: hues.blue[dark ? 500 : 500].hex,
28
- shadow: {
29
- outline: rgba(tints[500].hex, 0.4),
30
- umbra: dark ? rgba(tints[950].hex, 0.4) : rgba(tints[500].hex, 0.2),
31
- penumbra: dark ? rgba(tints[950].hex, 0.28) : rgba(tints[500].hex, 0.14),
32
- ambient: dark ? rgba(tints[950].hex, 0.24) : rgba(tints[500].hex, 0.12),
33
- },
34
- skeleton: {
35
- from: skeletonFrom,
36
- to: rgba(skeletonFrom, 0.5),
37
- },
38
- }
39
- }
40
-
41
- if (name === 'transparent') {
42
- const tints = tones.default
43
- const skeletonFrom = tints[dark ? 800 : 200].hex
44
-
45
- return {
46
- fg: tints[dark ? 100 : 900].hex,
47
- bg: tints[dark ? 950 : 50].hex,
48
- border: tints[dark ? 800 : 300].hex,
49
- focusRing: hues.blue[500].hex,
50
- shadow: {
51
- outline: rgba(tints[500].hex, 0.4),
52
- umbra: dark ? rgba(tints[900].hex, 0.4) : rgba(tints[500].hex, 0.2),
53
- penumbra: dark ? rgba(tints[900].hex, 0.28) : rgba(tints[500].hex, 0.14),
54
- ambient: dark ? rgba(tints[900].hex, 0.24) : rgba(tints[500].hex, 0.12),
55
- },
56
- skeleton: {
57
- from: skeletonFrom,
58
- to: rgba(skeletonFrom, 0.5),
59
- },
60
- }
61
- }
62
-
63
- const tints = tones[name] || tones.default
64
- const skeletonFrom = tints[dark ? 800 : 200].hex
65
-
66
- return {
67
- fg: tints[dark ? 100 : 900].hex,
68
- bg: tints[dark ? 950 : 50].hex,
69
- border: tints[dark ? 800 : 200].hex,
70
- focusRing: tints[500].hex,
71
- shadow: {
72
- outline: rgba(tints[500].hex, 0.4),
73
- umbra: dark ? rgba(tints[900].hex, 0.4) : rgba(tints[500].hex, 0.2),
74
- penumbra: dark ? rgba(tints[900].hex, 0.28) : rgba(tints[500].hex, 0.14),
75
- ambient: dark ? rgba(tints[900].hex, 0.24) : rgba(tints[500].hex, 0.12),
76
- },
77
- skeleton: {
78
- from: skeletonFrom,
79
- to: rgba(skeletonFrom, 0.5),
80
- },
81
- }
82
- },
83
-
84
- solid: ({base, dark, name, state, tone}) => {
85
- const mix = dark ? screen : multiply
86
- const mix2 = dark ? multiply : screen
87
- const defaultTints = tones[name] || tones.default
88
- const isNeutral = NEUTRAL_TONES.includes(name) && NEUTRAL_TONES.includes(tone)
89
-
90
- let tints = tones[tone === 'default' ? name : tone] || defaultTints
91
-
92
- if (state === 'disabled') {
93
- tints = defaultTints
94
-
95
- const bg = mix(base.bg, tints[dark ? 800 : 200].hex)
96
- const skeletonFrom = mix2(bg, tints[dark ? 200 : 800].hex)
97
-
98
- return {
99
- bg,
100
- bg2: mix2(bg, tints[dark ? 50 : 950].hex),
101
- border: mix(base.bg, tints[dark ? 800 : 200].hex),
102
- fg: mix(base.bg, dark ? black.hex : white.hex),
103
- muted: {
104
- fg: mix(base.bg, tints[dark ? 950 : 50].hex),
105
- },
106
- accent: {
107
- fg: mix(base.bg, tints[dark ? 950 : 50].hex),
108
- },
109
- link: {
110
- fg: mix(base.bg, tints[dark ? 950 : 50].hex),
111
- },
112
- code: {
113
- bg,
114
- fg: mix(base.bg, tints[dark ? 950 : 50].hex),
115
- },
116
- skeleton: {
117
- from: skeletonFrom,
118
- to: rgba(skeletonFrom, 0.5),
119
- },
120
- }
121
- }
122
-
123
- if (state === 'hovered') {
124
- const bg = mix(base.bg, tints[dark ? 300 : 600].hex)
125
- const skeletonFrom = mix2(bg, tints[dark ? 200 : 800].hex)
126
-
127
- return {
128
- bg,
129
- bg2: mix2(bg, tints[dark ? 50 : 950].hex),
130
- border: mix(base.bg, tints[dark ? 300 : 600].hex),
131
- fg: mix(base.bg, dark ? black.hex : white.hex),
132
- muted: {
133
- fg: mix(base.bg, tints[dark ? 800 : 200].hex),
134
- },
135
- accent: {
136
- fg: mix2(bg, hues.red[dark ? 800 : 200].hex),
137
- },
138
- link: {
139
- fg: mix2(bg, hues.blue[dark ? 800 : 200].hex),
140
- },
141
- code: {
142
- bg: mix(bg, tints[dark ? 950 : 50].hex),
143
- fg: mix(base.bg, tints[dark ? 800 : 200].hex),
144
- },
145
- skeleton: {
146
- from: skeletonFrom,
147
- to: rgba(skeletonFrom, 0.5),
148
- },
149
- }
150
- }
151
-
152
- if (state === 'pressed') {
153
- const bg = mix(base.bg, tints[dark ? 200 : 800].hex)
154
- const skeletonFrom = mix2(bg, tints[dark ? 200 : 800].hex)
155
-
156
- return {
157
- bg: mix(base.bg, tints[dark ? 200 : 800].hex),
158
- bg2: mix2(bg, tints[dark ? 50 : 950].hex),
159
- border: mix(base.bg, tints[dark ? 200 : 800].hex),
160
- fg: mix(base.bg, dark ? black.hex : white.hex),
161
- muted: {
162
- fg: mix(base.bg, tints[dark ? 800 : 200].hex),
163
- },
164
- accent: {
165
- fg: mix2(bg, hues.red[dark ? 800 : 200].hex),
166
- },
167
- link: {
168
- fg: mix2(bg, hues.blue[dark ? 800 : 200].hex),
169
- },
170
- code: {
171
- bg: mix(bg, tints[dark ? 950 : 50].hex),
172
- fg: mix(base.bg, tints[dark ? 800 : 200].hex),
173
- },
174
- skeleton: {
175
- from: skeletonFrom,
176
- to: rgba(skeletonFrom, 0.5),
177
- },
178
- }
179
- }
180
-
181
- if (state === 'selected') {
182
- if (isNeutral) {
183
- tints = tones.primary
184
- }
185
-
186
- const bg = mix(base.bg, tints[dark ? 200 : 800].hex)
187
- const skeletonFrom = mix2(bg, tints[dark ? 200 : 800].hex)
188
-
189
- return {
190
- bg,
191
- bg2: mix2(bg, tints[dark ? 50 : 950].hex),
192
- border: mix(base.bg, tints[dark ? 200 : 800].hex),
193
- fg: mix(base.bg, dark ? black.hex : white.hex),
194
- muted: {
195
- fg: mix(base.bg, tints[dark ? 800 : 200].hex),
196
- },
197
- accent: {
198
- fg: mix2(bg, hues.red[dark ? 800 : 200].hex),
199
- },
200
- link: {
201
- fg: mix2(bg, hues.blue[dark ? 800 : 200].hex),
202
- },
203
- code: {
204
- bg: mix(bg, tints[dark ? 950 : 50].hex),
205
- fg: mix(base.bg, tints[dark ? 800 : 200].hex),
206
- },
207
- skeleton: {
208
- from: skeletonFrom,
209
- to: rgba(skeletonFrom, 0.5),
210
- },
211
- }
212
- }
213
-
214
- // state: "enabled" | unknown
215
- const bg = mix(base.bg, tints[dark ? 400 : 500].hex)
216
- const skeletonFrom = mix2(bg, tints[dark ? 200 : 800].hex)
217
-
218
- return {
219
- bg,
220
- bg2: mix2(bg, tints[dark ? 50 : 950].hex),
221
- border: mix(base.bg, tints[dark ? 400 : 500].hex),
222
- fg: mix(base.bg, dark ? black.hex : white.hex),
223
- muted: {
224
- fg: mix(base.bg, tints[dark ? 900 : 100].hex),
225
- },
226
- accent: {
227
- fg: mix2(bg, hues.red[dark ? 900 : 100].hex),
228
- },
229
- link: {
230
- fg: mix2(bg, hues.blue[dark ? 900 : 100].hex),
231
- },
232
- code: {
233
- bg: mix(bg, tints[dark ? 950 : 50].hex),
234
- fg: mix(base.bg, tints[dark ? 900 : 100].hex),
235
- },
236
- skeleton: {
237
- from: skeletonFrom,
238
- to: rgba(skeletonFrom, 0.5),
239
- },
240
- }
241
- },
242
-
243
- muted: ({base, dark, name, state, tone}) => {
244
- const mix = dark ? screen : multiply
245
- const defaultTints = tones[name] || tones.default
246
- const isNeutral = NEUTRAL_TONES.includes(name) && NEUTRAL_TONES.includes(tone)
247
-
248
- let tints = tones[tone === 'default' ? name : tone] || defaultTints
249
-
250
- if (state === 'disabled') {
251
- tints = defaultTints
252
-
253
- const bg = base.bg
254
- const skeletonFrom = mix(bg, tints[dark ? 900 : 100].hex)
255
-
256
- return {
257
- bg,
258
- bg2: mix(bg, tints[dark ? 950 : 50].hex),
259
- border: mix(bg, tints[dark ? 950 : 50].hex),
260
- fg: mix(bg, tints[dark ? 800 : 200].hex),
261
- muted: {
262
- fg: mix(bg, tints[dark ? 900 : 100].hex),
263
- },
264
- accent: {
265
- fg: mix(bg, tints[dark ? 900 : 100].hex),
266
- },
267
- link: {
268
- fg: mix(bg, tints[dark ? 900 : 100].hex),
269
- },
270
- code: {
271
- bg,
272
- fg: mix(bg, tints[dark ? 900 : 100].hex),
273
- },
274
- skeleton: {
275
- from: rgba(skeletonFrom, 0.5),
276
- to: rgba(skeletonFrom, 0.25),
277
- },
278
- }
279
- }
280
-
281
- if (state === 'hovered') {
282
- // if (isNeutral) {
283
- // tints = tones.primary
284
- // }
285
-
286
- const bg = mix(base.bg, tints[dark ? 950 : 50].hex)
287
- const skeletonFrom = mix(bg, tints[dark ? 900 : 100].hex)
288
-
289
- return {
290
- bg,
291
- bg2: mix(bg, tints[dark ? 950 : 50].hex),
292
- border: mix(bg, tints[dark ? 900 : 100].hex),
293
- fg: mix(base.bg, tints[dark ? 200 : 800].hex),
294
- muted: {
295
- fg: mix(base.bg, tints[dark ? 400 : 600].hex),
296
- },
297
- accent: {
298
- fg: mix(base.bg, hues.red[dark ? 400 : 500].hex),
299
- },
300
- link: {
301
- fg: mix(base.bg, hues.blue[dark ? 400 : 600].hex),
302
- },
303
- code: {
304
- bg: mix(bg, tints[dark ? 950 : 50].hex),
305
- fg: mix(base.bg, tints[dark ? 400 : 600].hex),
306
- },
307
- skeleton: {
308
- from: skeletonFrom,
309
- to: rgba(skeletonFrom, 0.5),
310
- },
311
- }
312
- }
313
-
314
- if (state === 'pressed') {
315
- if (isNeutral) {
316
- tints = tones.primary
317
- }
318
-
319
- const bg = mix(base.bg, tints[dark ? 900 : 100].hex)
320
- const skeletonFrom = mix(bg, tints[dark ? 900 : 100].hex)
321
-
322
- return {
323
- bg,
324
- bg2: mix(bg, tints[dark ? 950 : 50].hex),
325
- border: mix(bg, tints[dark ? 900 : 100].hex),
326
- fg: mix(base.bg, tints[dark ? 200 : 800].hex),
327
- muted: {
328
- fg: mix(base.bg, tints[dark ? 400 : 600].hex),
329
- },
330
- accent: {
331
- fg: mix(bg, hues.red[dark ? 400 : 500].hex),
332
- },
333
- link: {
334
- fg: mix(bg, hues.blue[dark ? 400 : 600].hex),
335
- },
336
- code: {
337
- bg: mix(bg, tints[dark ? 950 : 50].hex),
338
- fg: mix(base.bg, tints[dark ? 400 : 600].hex),
339
- },
340
- skeleton: {
341
- from: skeletonFrom,
342
- to: rgba(skeletonFrom, 0.5),
343
- },
344
- }
345
- }
346
-
347
- if (state === 'selected') {
348
- if (isNeutral) {
349
- tints = tones.primary
350
- }
351
-
352
- const bg = mix(base.bg, tints[dark ? 900 : 100].hex)
353
- const skeletonFrom = mix(bg, tints[dark ? 900 : 100].hex)
354
-
355
- return {
356
- bg,
357
- bg2: mix(bg, tints[dark ? 950 : 50].hex),
358
- border: mix(bg, tints[dark ? 900 : 100].hex),
359
- fg: mix(base.bg, tints[dark ? 200 : 800].hex),
360
- muted: {
361
- fg: mix(base.bg, tints[dark ? 400 : 600].hex),
362
- },
363
- accent: {
364
- fg: mix(bg, hues.red[dark ? 400 : 500].hex),
365
- },
366
- link: {
367
- fg: mix(bg, hues.blue[dark ? 400 : 600].hex),
368
- },
369
- code: {
370
- bg: mix(bg, tints[dark ? 950 : 50].hex),
371
- fg: mix(base.bg, tints[dark ? 400 : 600].hex),
372
- },
373
- skeleton: {
374
- from: skeletonFrom,
375
- to: rgba(skeletonFrom, 0.5),
376
- },
377
- }
378
- }
379
-
380
- const bg = base.bg
381
- const skeletonFrom = mix(bg, tints[dark ? 900 : 100].hex)
382
-
383
- return {
384
- bg,
385
- bg2: mix(bg, tints[dark ? 950 : 50].hex),
386
- border: mix(bg, tints[dark ? 900 : 100].hex),
387
- fg: mix(base.bg, tints[dark ? 300 : 700].hex),
388
- muted: {
389
- fg: mix(base.bg, tints[dark ? 400 : 600].hex),
390
- },
391
- accent: {
392
- fg: mix(base.bg, hues.red[dark ? 400 : 500].hex),
393
- },
394
- link: {
395
- fg: mix(base.bg, hues.blue[dark ? 400 : 600].hex),
396
- },
397
- code: {
398
- bg: mix(base.bg, tints[dark ? 950 : 50].hex),
399
- fg: mix(base.bg, tints[dark ? 400 : 600].hex),
400
- },
401
- skeleton: {
402
- from: skeletonFrom,
403
- to: rgba(skeletonFrom, 0.5),
404
- },
405
- }
406
- },
407
-
408
- button: ({base, mode, muted, solid}) => {
409
- if (mode === 'bleed') {
410
- return {
411
- enabled: {
412
- ...muted.enabled,
413
- border: muted.enabled.bg,
414
- },
415
- hovered: {
416
- ...muted.hovered,
417
- border: muted.hovered.bg,
418
- },
419
- pressed: {
420
- ...muted.pressed,
421
- border: muted.pressed.bg,
422
- },
423
- selected: {
424
- ...muted.selected,
425
- border: muted.selected.bg,
426
- },
427
- disabled: {
428
- ...muted.disabled,
429
- border: muted.disabled.bg,
430
- },
431
- }
432
- }
433
-
434
- if (mode === 'ghost') {
435
- return {
436
- ...solid,
437
- enabled: {
438
- ...muted.enabled,
439
- border: base.border,
440
- },
441
- disabled: muted.disabled,
442
- }
443
- }
444
-
445
- return solid
446
- },
447
-
448
- card: ({base, dark, muted, name, solid, state}) => {
449
- if (state === 'hovered') {
450
- return muted[name].hovered
451
- }
452
-
453
- if (state === 'disabled') {
454
- return muted[name].disabled
455
- }
456
-
457
- const isNeutral = NEUTRAL_TONES.includes(name)
458
- const tints = tones[name] || tones.default
459
- const mix = dark ? screen : multiply
460
-
461
- if (state === 'pressed') {
462
- if (isNeutral) {
463
- return muted.primary.pressed
464
- }
465
-
466
- return muted[name].pressed
467
- }
468
-
469
- if (state === 'selected') {
470
- if (isNeutral) {
471
- return solid.primary.enabled
472
- }
473
-
474
- return solid[name].enabled
475
- }
476
-
477
- const bg = base.bg
478
- const skeletonFrom = mix(base.bg, tints[dark ? 900 : 100].hex)
479
-
480
- return {
481
- bg,
482
- bg2: mix(bg, tints[dark ? 950 : 50].hex),
483
- fg: base.fg,
484
- border: base.border,
485
- muted: {
486
- fg: mix(base.bg, tints[dark ? 400 : 600].hex),
487
- },
488
- accent: {
489
- fg: mix(base.bg, hues.red[dark ? 400 : 500].hex),
490
- },
491
- link: {
492
- fg: mix(base.bg, hues.blue[dark ? 400 : 600].hex),
493
- },
494
- code: {
495
- bg: mix(base.bg, tints[dark ? 950 : 50].hex),
496
- fg: tints[dark ? 400 : 600].hex,
497
- },
498
- skeleton: {
499
- from: skeletonFrom,
500
- to: rgba(skeletonFrom, 0.5),
501
- },
502
- }
503
- },
504
-
505
- input: ({base, dark, mode, state}) => {
506
- const mix = dark ? screen : multiply
507
-
508
- if (mode === 'invalid') {
509
- const tints = tones.critical
510
-
511
- return {
512
- bg: mix(base.bg, tints[dark ? 950 : 50].hex),
513
- fg: mix(base.bg, tints[dark ? 400 : 600].hex),
514
- border: mix(base.bg, tints[dark ? 800 : 200].hex),
515
- placeholder: mix(base.bg, tints[dark ? 600 : 400].hex),
516
- }
517
- }
518
-
519
- if (state === 'hovered') {
520
- return {
521
- bg: base.bg,
522
- fg: base.fg,
523
- border: mix(base.bg, hues.gray[dark ? 700 : 300].hex),
524
- placeholder: mix(base.bg, hues.gray[dark ? 600 : 400].hex),
525
- }
526
- }
527
-
528
- if (state === 'disabled') {
529
- return {
530
- bg: mix(base.bg, hues.gray[dark ? 950 : 50].hex),
531
- fg: mix(base.bg, hues.gray[dark ? 700 : 300].hex),
532
- border: mix(base.bg, hues.gray[dark ? 900 : 100].hex),
533
- placeholder: mix(base.bg, hues.gray[dark ? 800 : 200].hex),
534
- }
535
- }
536
-
537
- if (state === 'readOnly') {
538
- return {
539
- bg: mix(base.bg, hues.gray[dark ? 950 : 50].hex),
540
- fg: mix(base.bg, hues.gray[dark ? 200 : 800].hex),
541
- border: mix(base.bg, hues.gray[dark ? 800 : 200].hex),
542
- placeholder: mix(base.bg, hues.gray[dark ? 600 : 400].hex),
543
- }
544
- }
545
-
546
- return {
547
- bg: base.bg,
548
- fg: base.fg,
549
- border: base.border,
550
- placeholder: mix(base.bg, hues.gray[dark ? 600 : 400].hex),
551
- }
552
- },
553
-
554
- selectable: ({base, muted, tone, solid, state}) => {
555
- if (state === 'enabled') {
556
- return {
557
- ...muted[tone].enabled,
558
- bg: base.bg,
559
- }
560
- }
561
-
562
- if (state === 'pressed') {
563
- if (tone === 'default') {
564
- return muted.primary.pressed
565
- }
566
-
567
- return muted[tone].pressed
568
- }
569
-
570
- if (state === 'selected') {
571
- if (tone === 'default') {
572
- return solid.primary.enabled
573
- }
574
-
575
- return solid[tone].enabled
576
- }
577
-
578
- if (state === 'disabled') {
579
- return {
580
- ...muted[tone].disabled,
581
- bg: base.bg,
582
- }
583
- }
584
-
585
- return muted[tone][state]
586
- },
587
-
588
- spot: ({base, dark, key}) => {
589
- const mix = dark ? screen : multiply
590
-
591
- return mix(base.bg, hues[key][dark ? 400 : 500].hex)
592
- },
593
-
594
- syntax: ({base, dark}) => {
595
- const mix = dark ? screen : multiply
596
- const mainShade = dark ? 400 : 600
597
- const secondaryShade = dark ? 600 : 400
598
-
599
- return {
600
- atrule: mix(base.bg, hues.purple[mainShade].hex),
601
- attrName: mix(base.bg, hues.green[mainShade].hex),
602
- attrValue: mix(base.bg, hues.yellow[mainShade].hex),
603
- attribute: mix(base.bg, hues.yellow[mainShade].hex),
604
- boolean: mix(base.bg, hues.purple[mainShade].hex),
605
- builtin: mix(base.bg, hues.purple[mainShade].hex),
606
- cdata: mix(base.bg, hues.yellow[mainShade].hex),
607
- char: mix(base.bg, hues.yellow[mainShade].hex),
608
- class: mix(base.bg, hues.orange[mainShade].hex),
609
- className: mix(base.bg, hues.cyan[mainShade].hex),
610
- comment: mix(base.bg, hues.gray[secondaryShade].hex),
611
- constant: mix(base.bg, hues.purple[mainShade].hex),
612
- deleted: mix(base.bg, hues.red[mainShade].hex),
613
- doctype: mix(base.bg, hues.gray[secondaryShade].hex),
614
- entity: mix(base.bg, hues.red[mainShade].hex),
615
- function: mix(base.bg, hues.green[mainShade].hex),
616
- hexcode: mix(base.bg, hues.blue[mainShade].hex),
617
- id: mix(base.bg, hues.purple[mainShade].hex),
618
- important: mix(base.bg, hues.purple[mainShade].hex),
619
- inserted: mix(base.bg, hues.yellow[mainShade].hex),
620
- keyword: mix(base.bg, hues.magenta[mainShade].hex),
621
- number: mix(base.bg, hues.purple[mainShade].hex),
622
- operator: mix(base.bg, hues.magenta[mainShade].hex),
623
- prolog: mix(base.bg, hues.gray[secondaryShade].hex),
624
- property: mix(base.bg, hues.blue[mainShade].hex),
625
- pseudoClass: mix(base.bg, hues.yellow[mainShade].hex),
626
- pseudoElement: mix(base.bg, hues.yellow[mainShade].hex),
627
- punctuation: mix(base.bg, hues.gray[mainShade].hex),
628
- regex: mix(base.bg, hues.blue[mainShade].hex),
629
- selector: mix(base.bg, hues.red[mainShade].hex),
630
- string: mix(base.bg, hues.yellow[mainShade].hex),
631
- symbol: mix(base.bg, hues.purple[mainShade].hex),
632
- tag: mix(base.bg, hues.red[mainShade].hex),
633
- unit: mix(base.bg, hues.orange[mainShade].hex),
634
- url: mix(base.bg, hues.red[mainShade].hex),
635
- variable: mix(base.bg, hues.red[mainShade].hex),
636
- }
637
- },
638
- })
11
+ } as const
@@ -54,7 +54,7 @@ export const fonts: ThemeFonts = {
54
54
  },
55
55
  heading: {
56
56
  family:
57
- '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Liberation Sans", Helvetica, Arial, system-ui, sans-serif',
57
+ 'Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Liberation Sans", Helvetica, Arial, system-ui, sans-serif',
58
58
  weights: {
59
59
  regular: 700,
60
60
  medium: 800,
@@ -114,7 +114,7 @@ export const fonts: ThemeFonts = {
114
114
  },
115
115
  label: {
116
116
  family:
117
- '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Liberation Sans", system-ui, sans-serif',
117
+ 'Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Liberation Sans", system-ui, sans-serif',
118
118
  weights: {
119
119
  regular: 600,
120
120
  medium: 700,
@@ -166,7 +166,7 @@ export const fonts: ThemeFonts = {
166
166
  },
167
167
  text: {
168
168
  family:
169
- '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Liberation Sans", Helvetica, Arial, system-ui, sans-serif',
169
+ 'Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Liberation Sans", Helvetica, Arial, system-ui, sans-serif',
170
170
  weights: {
171
171
  regular: 400,
172
172
  medium: 500,
@@ -1,10 +1,20 @@
1
- import {parseColor, rgbToHex, screen as _screen, multiply as _multiply} from '../lib/color-fns'
1
+ import {
2
+ parseColor,
3
+ rgbToHex,
4
+ screen as _screen,
5
+ multiply as _multiply,
6
+ rgba,
7
+ } from '../lib/color-fns'
2
8
 
3
9
  export function multiply(bg: string, fg: string): string {
4
10
  const b = parseColor(bg)
5
11
  const s = parseColor(fg)
6
12
  const hex = rgbToHex(_multiply(b, s))
7
13
 
14
+ if (s.a) {
15
+ return rgba(hex, s.a)
16
+ }
17
+
8
18
  return hex
9
19
  }
10
20
 
@@ -13,5 +23,9 @@ export function screen(bg: string, fg: string): string {
13
23
  const s = parseColor(fg)
14
24
  const hex = rgbToHex(_screen(b, s))
15
25
 
26
+ if (s.a) {
27
+ return rgba(hex, s.a)
28
+ }
29
+
16
30
  return hex
17
31
  }