@basic-ui/material 1.0.0-alpha.14 → 1.0.0-alpha.17

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/build/cjs/index.js +298 -56
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/Alert/Alert.d.ts +1 -1
  4. package/build/esm/AppBar/AppBarButton.d.ts +1 -1
  5. package/build/esm/BottomSheet/BottomSheet.d.ts +1 -1
  6. package/build/esm/BottomSheet/BottomSheetSurface.d.ts +1 -1
  7. package/build/esm/Button/Button.d.ts +1 -1
  8. package/build/esm/Button/ButtonGroup.d.ts +1 -1
  9. package/build/esm/Button/FilledButton.d.ts +1 -1
  10. package/build/esm/Button/OutlinedButton.d.ts +1 -1
  11. package/build/esm/Button/TransparentButton.d.ts +1 -1
  12. package/build/esm/CheckBox/CheckBox.d.ts +1 -1
  13. package/build/esm/Chip/ButtonChip.d.ts +1 -1
  14. package/build/esm/Chip/ChipBase.d.ts +1 -1
  15. package/build/esm/Chip/ChoiceChip.d.ts +1 -1
  16. package/build/esm/Combobox/Combobox.d.ts +7 -7
  17. package/build/esm/Combobox/Combobox.js +4 -3
  18. package/build/esm/Combobox/Combobox.js.map +1 -1
  19. package/build/esm/Dialog/Dialog.d.ts +1 -1
  20. package/build/esm/Dialog/DialogBackdrop.d.ts +1 -1
  21. package/build/esm/Dialog/DialogSurface.d.ts +1 -1
  22. package/build/esm/Dialog/Scrim.d.ts +1 -1
  23. package/build/esm/Divider/Divider.d.ts +1 -1
  24. package/build/esm/Link/Link.d.ts +1 -1
  25. package/build/esm/Link/Link.js +12 -0
  26. package/build/esm/Link/Link.js.map +1 -1
  27. package/build/esm/ListItem/ListItem.d.ts +3 -1
  28. package/build/esm/ListItem/ListItem.js +46 -43
  29. package/build/esm/ListItem/ListItem.js.map +1 -1
  30. package/build/esm/Menu/Menu.d.ts +4 -4
  31. package/build/esm/NavRail/NavRailItem.d.ts +3 -3
  32. package/build/esm/Paper/Paper.d.ts +1 -1
  33. package/build/esm/RadioButton/RadioGroup.d.ts +1 -1
  34. package/build/esm/Ripple/useRippleSurface.d.ts +1 -0
  35. package/build/esm/Ripple/useRippleSurface.js +17 -16
  36. package/build/esm/Ripple/useRippleSurface.js.map +1 -1
  37. package/build/esm/Select/Select.d.ts +1 -1
  38. package/build/esm/Select/Select.js +4 -0
  39. package/build/esm/Select/Select.js.map +1 -1
  40. package/build/esm/Select/SelectIcon.d.ts +1 -1
  41. package/build/esm/SelectItem/SelectItem.d.ts +5 -2
  42. package/build/esm/SelectItem/SelectItem.js +17 -4
  43. package/build/esm/SelectItem/SelectItem.js.map +1 -1
  44. package/build/esm/SelectionControl/SelectionControlText.d.ts +1 -1
  45. package/build/esm/Skeleton/Skeleton.d.ts +1 -1
  46. package/build/esm/Slider/Slider.d.ts +17 -0
  47. package/build/esm/Slider/Slider.js +224 -0
  48. package/build/esm/Slider/Slider.js.map +1 -0
  49. package/build/esm/Slider/index.d.ts +1 -0
  50. package/build/esm/Slider/index.js +2 -0
  51. package/build/esm/Slider/index.js.map +1 -0
  52. package/build/esm/Snackbar/Snackbar.d.ts +1 -1
  53. package/build/esm/Snackbar/Snackbar.js +4 -4
  54. package/build/esm/Snackbar/Snackbar.js.map +1 -1
  55. package/build/esm/Switch/Switch.d.ts +1 -1
  56. package/build/esm/Tab/Tab.d.ts +1 -1
  57. package/build/esm/Tab/TabList.d.ts +1 -1
  58. package/build/esm/Tab/TabPanel.d.ts +1 -1
  59. package/build/esm/TabIndicator/TabIndicator.d.ts +1 -1
  60. package/build/esm/Table/TableHead.d.ts +1 -1
  61. package/build/esm/Table/TableRow.d.ts +1 -1
  62. package/build/esm/TextField/FilledContainer.d.ts +1 -1
  63. package/build/esm/TextField/HelperText.d.ts +1 -1
  64. package/build/esm/TextField/Input.d.ts +1 -1
  65. package/build/esm/TextField/OutlinedContainer.d.ts +1 -1
  66. package/build/esm/TextField/OutlinedContainer.js +13 -5
  67. package/build/esm/TextField/OutlinedContainer.js.map +1 -1
  68. package/build/esm/TextField/TextField.d.ts +1 -1
  69. package/build/esm/ThemeExplorer/BorderSlider.d.ts +7 -0
  70. package/build/esm/ThemeExplorer/BorderSlider.js +78 -0
  71. package/build/esm/ThemeExplorer/BorderSlider.js.map +1 -0
  72. package/build/esm/ThemeExplorer/ColorSchemePicker.d.ts +10 -0
  73. package/build/esm/ThemeExplorer/ColorSchemePicker.js +54 -0
  74. package/build/esm/ThemeExplorer/ColorSchemePicker.js.map +1 -0
  75. package/build/esm/ThemeExplorer/FontAutoComplete.d.ts +9 -0
  76. package/build/esm/ThemeExplorer/FontAutoComplete.js +128 -0
  77. package/build/esm/ThemeExplorer/FontAutoComplete.js.map +1 -0
  78. package/build/esm/ThemeExplorer/ThemeBuilder.d.ts +2 -0
  79. package/build/esm/ThemeExplorer/ThemeBuilder.js +232 -94
  80. package/build/esm/ThemeExplorer/ThemeBuilder.js.map +1 -1
  81. package/build/esm/ThemeExplorer/components.js +4 -4
  82. package/build/esm/ThemeExplorer/components.js.map +1 -1
  83. package/build/esm/ThemeExplorer/googleFonts.d.ts +1 -0
  84. package/build/esm/ThemeExplorer/googleFonts.js +7 -0
  85. package/build/esm/ThemeExplorer/googleFonts.js.map +1 -0
  86. package/build/esm/ThemeExplorer/updateGoogleFonts.js +70 -0
  87. package/build/esm/ThemeExplorer/updateGoogleFonts.js.map +1 -0
  88. package/build/esm/ThemeExplorer/useDeferredColor.js +3 -4
  89. package/build/esm/ThemeExplorer/useDeferredColor.js.map +1 -1
  90. package/build/esm/Tooltip/Tooltip.d.ts +1 -1
  91. package/build/esm/color.js +2 -2
  92. package/build/esm/color.js.map +1 -1
  93. package/build/esm/index.d.ts +1 -0
  94. package/build/esm/index.js +1 -0
  95. package/build/esm/index.js.map +1 -1
  96. package/build/tsconfig-build.tsbuildinfo +1 -1
  97. package/package.json +6 -6
  98. package/src/Combobox/Combobox.tsx +5 -2
  99. package/src/Link/Link.tsx +12 -0
  100. package/src/ListItem/ListItem.tsx +48 -42
  101. package/src/Ripple/useRippleSurface.ts +8 -2
  102. package/src/Select/PaymentMethodSelect.story.tsx +17 -24
  103. package/src/Select/Select.tsx +6 -0
  104. package/src/SelectItem/SelectItem.tsx +13 -3
  105. package/src/Slider/Slider.story.tsx +36 -0
  106. package/src/Slider/Slider.tsx +275 -0
  107. package/src/Slider/index.ts +1 -0
  108. package/src/Snackbar/Snackbar.tsx +5 -5
  109. package/src/TextField/OutlinedContainer.tsx +8 -3
  110. package/src/ThemeExplorer/BorderSlider.tsx +73 -0
  111. package/src/ThemeExplorer/ColorSchemePicker.tsx +55 -0
  112. package/src/ThemeExplorer/FontAutoComplete.tsx +139 -0
  113. package/src/ThemeExplorer/ThemeBuilder.story.tsx +2 -1
  114. package/src/ThemeExplorer/ThemeBuilder.tsx +223 -84
  115. package/src/ThemeExplorer/components.tsx +4 -4
  116. package/src/ThemeExplorer/googleFonts.ts +1436 -0
  117. package/src/ThemeExplorer/updateGoogleFonts.js +33 -0
  118. package/src/ThemeExplorer/useDeferredColor.tsx +3 -6
  119. package/src/color.ts +2 -2
  120. package/src/index.ts +1 -0
@@ -1,5 +1,5 @@
1
1
  import type { ComponentType } from 'react';
2
- import { useState, useMemo, useDeferredValue, useEffect } from 'react';
2
+ import { useState, useMemo, useEffect } from 'react';
3
3
  import {
4
4
  CorePalette,
5
5
  argbFromHex,
@@ -8,21 +8,25 @@ import {
8
8
  import type { Color } from '@basic-ui/color-picker';
9
9
  import { toColor } from '@basic-ui/color-picker';
10
10
  import {
11
- THEME_OVERRIDE_KEY,
11
+ THEME_OVERRIDE_STORAGE_KEY,
12
12
  injectThemeOverride,
13
13
  transformTheme,
14
+ loadGoogleFont,
14
15
  } from '@basic-ui/dynamic-theme';
16
+ import { rem } from 'polished';
17
+ import remToPx from 'polished/lib/helpers/remToPx';
15
18
 
16
19
  import { Box } from '../Box';
17
20
  import { TonalColors } from './components';
18
- import { TextFieldColorPicker } from './TextFieldColorPicker';
19
21
  import { ThemeColors } from './ThemeColors';
20
22
  import { makeColorScheme } from './makeColorScheme';
21
- import { theme } from '../theme';
22
23
  import { Text } from '../Text';
23
- import { Button } from '../Button';
24
24
  import { useLocalStorageCachedState } from './useLocalStorageCachedState';
25
25
  import { useDeferredColor } from './useDeferredColor';
26
+ import { FontAutoComplete, parseMainFont } from './FontAutoComplete';
27
+ import type { Theme } from '../theme/theme';
28
+ import { BorderSlider } from './BorderSlider';
29
+ import { ColorSchemePicker } from './ColorSchemePicker';
26
30
 
27
31
  export interface ThemeBuilderProps {
28
32
  CodeHighlightingComponent?: ComponentType<{
@@ -30,6 +34,7 @@ export interface ThemeBuilderProps {
30
34
  className: string;
31
35
  showButtons?: boolean;
32
36
  }>;
37
+ baseTheme: Theme;
33
38
  }
34
39
 
35
40
  function DefaultHighlighter(props: { children: string }) {
@@ -50,16 +55,52 @@ export const ThemeBuilder = (props: ThemeBuilderProps) => {
50
55
  };
51
56
 
52
57
  const ThemeBuilderImpl = (props: ThemeBuilderProps) => {
53
- const { CodeHighlightingComponent = DefaultHighlighter } = props;
58
+ const { baseTheme: theme, CodeHighlightingComponent = DefaultHighlighter } =
59
+ props;
60
+ const [plainFont, setPlainFont] = useLocalStorageCachedState(
61
+ parseMainFont(theme.fonts.plain),
62
+ 'fontFamily.plain'
63
+ );
64
+ const [brandFont, setBrandFont] = useLocalStorageCachedState(
65
+ parseMainFont(theme.fonts.brand),
66
+ 'fontFamily.brand'
67
+ );
68
+
69
+ const [radiusExtraSmall, setRadiusExtraSmall] =
70
+ useLocalStorageCachedState<number>(
71
+ parseInt(remToPx(theme.radii['extra-small'])),
72
+ 'radii.extra-small'
73
+ );
74
+
75
+ const [radiusSmall, setRadiusSmall] = useLocalStorageCachedState<number>(
76
+ parseInt(remToPx(theme.radii['small'])),
77
+ 'radii.small'
78
+ );
79
+
80
+ const [radiusMedium, setRadiusMedium] = useLocalStorageCachedState<number>(
81
+ parseInt(remToPx(theme.radii['medium'])),
82
+ 'radii.medium'
83
+ );
84
+
85
+ const [radiusLarge, setRadiusLarge] = useLocalStorageCachedState<number>(
86
+ parseInt(remToPx(theme.radii['large'])),
87
+ 'radii.large'
88
+ );
89
+
90
+ const [radiusExtraLarge, setRadiusExtraLarge] =
91
+ useLocalStorageCachedState<number>(
92
+ parseInt(remToPx(theme.radii['extra-large'])),
93
+ 'radii.extra-large'
94
+ );
95
+
54
96
  const [primaryColor, setPrimaryColor] = useLocalStorageCachedState<Color>(
55
97
  toColor('hex', theme.colors.primary),
56
98
  'primary'
57
99
  );
58
- const deferredPrimaryColor = useDeferredValue(primaryColor);
59
100
 
60
101
  const { a1, a2, a3, error, n1, n2 } = useMemo(
61
- () => CorePalette.of(argbFromHex(deferredPrimaryColor.hex)),
62
- [deferredPrimaryColor.hex]
102
+ () => CorePalette.of(argbFromHex(primaryColor.hex)),
103
+ [primaryColor.hex]
63
104
  );
64
105
 
65
106
  const [secondaryColor, secondaryColorTonal, setSecondaryColor] =
@@ -84,104 +125,200 @@ const ThemeBuilderImpl = (props: ThemeBuilderProps) => {
84
125
  [a1, secondaryColorTonal, tertiaryColorTonal, error, neutralColorTonal, n2]
85
126
  );
86
127
 
128
+ const newTheme = useMemo(
129
+ () => ({
130
+ colors: scheme,
131
+ fonts: { plain: `"${plainFont}"`, brand: `"${brandFont}"` },
132
+ radii: {
133
+ 'extra-small': rem(radiusExtraSmall),
134
+ 'extra-small_top': `${rem(radiusExtraSmall)} ${rem(
135
+ radiusExtraSmall
136
+ )} 0 0`,
137
+ small: rem(radiusSmall),
138
+ medium: rem(radiusMedium),
139
+ large: rem(radiusLarge),
140
+ large_end: `0 ${rem(radiusLarge)} ${rem(radiusLarge)} 0`,
141
+ large_top: `${rem(radiusLarge)} ${rem(radiusLarge)} 0 0`,
142
+ 'extra-large': rem(radiusExtraLarge),
143
+ 'extra-large_top': `${rem(radiusExtraLarge)} ${rem(
144
+ radiusExtraLarge
145
+ )} 0 0`,
146
+ },
147
+ }),
148
+ [
149
+ scheme,
150
+ plainFont,
151
+ brandFont,
152
+ radiusExtraSmall,
153
+ radiusSmall,
154
+ radiusMedium,
155
+ radiusLarge,
156
+ radiusExtraLarge,
157
+ ]
158
+ );
159
+
87
160
  const colorModes = useMemo(
88
- () => transformTheme({ colors: scheme }, []).colorModes,
89
- [scheme]
161
+ () => transformTheme(newTheme, ['fonts', 'radii']).colorModes,
162
+ [newTheme]
90
163
  );
164
+
91
165
  useEffect(() => {
92
- localStorage.setItem(THEME_OVERRIDE_KEY, JSON.stringify({ colorModes }));
166
+ localStorage.setItem(
167
+ THEME_OVERRIDE_STORAGE_KEY,
168
+ JSON.stringify({ colorModes })
169
+ );
93
170
  injectThemeOverride({ colorModes });
94
171
  }, [colorModes]);
95
172
 
96
173
  return (
97
174
  <>
175
+ {/* Shape */}
176
+ <Text variant="headline-small">Shape</Text>
98
177
  <Box display="flex" my={3} sx={{ gap: 3, flexWrap: 'wrap' }}>
99
- <Box display="flex" minWidth="300px" flex="1">
100
- <TextFieldColorPicker
101
- label="Primary color"
102
- value={primaryColor}
103
- onChange={(c) => setPrimaryColor(c)}
104
- />
105
- <Button
106
- variant="text"
107
- disabled={
108
- primaryColor.hex === toColor('hex', theme.colors.primary).hex
109
- }
110
- onClick={() =>
111
- setPrimaryColor(toColor('hex', theme.colors.primary))
112
- }
113
- >
114
- Reset
115
- </Button>
116
- </Box>
117
- <Box display="flex" minWidth="300px" flex="1">
118
- <TextFieldColorPicker
119
- label="Secondary color"
120
- value={
121
- secondaryColor ||
122
- toColor('hex', hexFromArgb(secondaryColorTonal.tone(40)))
123
- }
124
- onChange={(c) => setSecondaryColor(c)}
125
- />
126
- <Button
127
- variant="text"
128
- onClick={() => setSecondaryColor(null)}
129
- disabled={secondaryColor === null}
130
- >
131
- Reset
132
- </Button>
133
- </Box>
134
- <Box display="flex" minWidth="300px" flex="1">
135
- <TextFieldColorPicker
136
- label="Tertiary color"
137
- value={
138
- tertiaryColor ||
139
- toColor('hex', hexFromArgb(tertiaryColorTonal.tone(40)))
178
+ <BorderSlider
179
+ label="Extra small"
180
+ defaultValue={radiusExtraSmall}
181
+ onChange={(v) => setRadiusExtraSmall(v)}
182
+ onReset={() => {
183
+ setRadiusExtraSmall(parseInt(remToPx(theme.radii['extra-small'])));
184
+ }}
185
+ resetDisabled={rem(radiusExtraSmall) === theme.radii['extra-small']}
186
+ />
187
+ <BorderSlider
188
+ label="Small"
189
+ defaultValue={radiusSmall}
190
+ onChange={(v) => setRadiusSmall(v)}
191
+ onReset={() => {
192
+ setRadiusSmall(parseInt(remToPx(theme.radii['small'])));
193
+ }}
194
+ resetDisabled={rem(radiusSmall) === theme.radii.small}
195
+ />
196
+ <BorderSlider
197
+ label="Medium"
198
+ defaultValue={radiusMedium}
199
+ onChange={(v) => setRadiusMedium(v)}
200
+ onReset={() => {
201
+ setRadiusMedium(parseInt(remToPx(theme.radii['medium'])));
202
+ }}
203
+ resetDisabled={rem(radiusMedium) === theme.radii['medium']}
204
+ />
205
+ <BorderSlider
206
+ label="Large"
207
+ defaultValue={radiusLarge}
208
+ onChange={(v) => setRadiusLarge(v)}
209
+ onReset={() => {
210
+ setRadiusLarge(parseInt(remToPx(theme.radii['large'])));
211
+ }}
212
+ resetDisabled={rem(radiusLarge) === theme.radii['large']}
213
+ />
214
+ <BorderSlider
215
+ label="Extra large"
216
+ defaultValue={radiusExtraLarge}
217
+ onChange={(v) => setRadiusExtraLarge(v)}
218
+ onReset={() => {
219
+ setRadiusExtraLarge(parseInt(remToPx(theme.radii['extra-large'])));
220
+ }}
221
+ resetDisabled={rem(radiusExtraLarge) === theme.radii['extra-large']}
222
+ />
223
+ </Box>
224
+ {/* Font pickers */}
225
+ <Text variant="headline-small">Typography</Text>
226
+ <Box display="flex" my={3} sx={{ gap: 3, flexWrap: 'wrap' }}>
227
+ <FontAutoComplete
228
+ label="Brand"
229
+ initialValue={brandFont}
230
+ onSelect={(f) => {
231
+ if (f) {
232
+ setBrandFont(f);
233
+ loadGoogleFont([
234
+ { family: f, weights: [300, 400, 500, 600, 700] },
235
+ ]);
140
236
  }
141
- onChange={(c) => setTertiaryColor(c)}
142
- />
143
- <Button
144
- variant="text"
145
- onClick={() => setTertiaryColor(null)}
146
- disabled={tertiaryColor === null}
147
- >
148
- Reset
149
- </Button>
150
- </Box>
151
- <Box display="flex" minWidth="300px" flex="1">
152
- <TextFieldColorPicker
153
- label="Neutral color"
154
- value={
155
- neutralColor ||
156
- toColor('hex', hexFromArgb(neutralColorTonal.tone(40)))
237
+ }}
238
+ onReset={() => {
239
+ setBrandFont(parseMainFont(theme.fonts.brand));
240
+ }}
241
+ resetDisabled={brandFont === parseMainFont(theme.fonts.brand)}
242
+ />
243
+ <FontAutoComplete
244
+ label="Plain"
245
+ initialValue={plainFont}
246
+ onSelect={(f) => {
247
+ if (f) {
248
+ setPlainFont(f);
249
+ loadGoogleFont([
250
+ { family: f, weights: [300, 400, 500, 600, 700] },
251
+ ]);
157
252
  }
158
- onChange={(c) => setNeutralColor(c)}
159
- />
160
- <Button
161
- variant="text"
162
- onClick={() => setNeutralColor(null)}
163
- disabled={neutralColor === null}
164
- >
165
- Reset
166
- </Button>
167
- </Box>
253
+ }}
254
+ onReset={() => {
255
+ setPlainFont(parseMainFont(theme.fonts.plain));
256
+ }}
257
+ resetDisabled={plainFont === parseMainFont(theme.fonts.plain)}
258
+ />
259
+ </Box>
260
+ {/* Color pickers */}
261
+ <Text variant="headline-small">Color schemes</Text>
262
+ <Box display="flex" my={3} sx={{ gap: 3, flexWrap: 'wrap' }}>
263
+ <ColorSchemePicker
264
+ label="Primary color"
265
+ initialValue={primaryColor}
266
+ onChange={(c) => setPrimaryColor(c)}
267
+ onReset={() => setPrimaryColor(toColor('hex', theme.colors.primary))}
268
+ resetDisabled={
269
+ primaryColor.hex === toColor('hex', theme.colors.primary).hex
270
+ }
271
+ />
272
+ <ColorSchemePicker
273
+ label="Secondary color"
274
+ initialValue={
275
+ secondaryColor ||
276
+ toColor('hex', hexFromArgb(secondaryColorTonal.tone(40)))
277
+ }
278
+ onChange={(c) => setSecondaryColor(c)}
279
+ onReset={() => setSecondaryColor(null)}
280
+ resetDisabled={secondaryColor === null}
281
+ />
282
+ <ColorSchemePicker
283
+ label="Tertiary color"
284
+ initialValue={
285
+ tertiaryColor ||
286
+ toColor('hex', hexFromArgb(tertiaryColorTonal.tone(40)))
287
+ }
288
+ onChange={(c) => setTertiaryColor(c)}
289
+ onReset={() => setTertiaryColor(null)}
290
+ resetDisabled={tertiaryColor === null}
291
+ />
292
+ <ColorSchemePicker
293
+ label="Neutral color"
294
+ initialValue={
295
+ neutralColor ||
296
+ toColor('hex', hexFromArgb(neutralColorTonal.tone(40)))
297
+ }
298
+ onChange={(c) => setNeutralColor(c)}
299
+ onReset={() => setNeutralColor(null)}
300
+ resetDisabled={neutralColor === null}
301
+ />
168
302
  </Box>
169
303
  <Box width="100%">
170
304
  <Box display="flex" flexDirection="column" sx={{ gap: 4 }}>
171
305
  <Box flex="1">
172
- <Text variant="title-medium" as="h1" pb={'0.3em'}>
306
+ <Text variant="title-medium" as="h1" pb={'0.3em'} pt={3}>
173
307
  Light theme
174
308
  </Text>
175
309
  <ThemeColors scheme={scheme} />
176
310
  </Box>
177
311
  <Box flex="1">
178
- <Text variant="title-medium" as="h1" pb={'0.3em'}>
312
+ <Text variant="title-medium" as="h1" pb={'0.3em'} pt={3}>
179
313
  Dark theme
180
314
  </Text>
181
315
  <ThemeColors scheme={scheme.modes.dark} />
182
316
  </Box>
183
317
  </Box>
184
318
  <Box my={4} display="flex" sx={{ gap: 3 }} flexDirection="column">
319
+ <Text variant="title-medium" as="h1" pb={'0.3em'} pt={3}>
320
+ Palettes
321
+ </Text>
185
322
  <TonalColors palette={a1} />
186
323
  <TonalColors palette={secondaryColorTonal} />
187
324
  <TonalColors palette={tertiaryColorTonal} />
@@ -189,10 +326,12 @@ const ThemeBuilderImpl = (props: ThemeBuilderProps) => {
189
326
  <TonalColors palette={neutralColorTonal} />
190
327
  <TonalColors palette={n2} />
191
328
  </Box>
192
- <CodeHighlightingComponent className={`language-json`}>
193
- {JSON.stringify({ colors: scheme }, null, 2)}
194
- </CodeHighlightingComponent>
195
329
  </Box>
330
+ {/* Color pickers */}
331
+ <Text variant="headline-small">Theme</Text>
332
+ <CodeHighlightingComponent className={`language-json`}>
333
+ {JSON.stringify(newTheme, null, 2)}
334
+ </CodeHighlightingComponent>
196
335
  </>
197
336
  );
198
337
  };
@@ -80,13 +80,13 @@ export const ColorRow = memo(
80
80
  display="flex"
81
81
  sx={{
82
82
  ':first-of-type': {
83
- borderTopLeftRadius: 24,
84
- borderTopRightRadius: 24,
83
+ borderTopLeftRadius: 'extra-large',
84
+ borderTopRightRadius: 'extra-large',
85
85
  overflow: 'hidden',
86
86
  },
87
87
  ':last-of-type': {
88
- borderBottomLeftRadius: 24,
89
- borderBottomRightRadius: 24,
88
+ borderBottomLeftRadius: 'extra-large',
89
+ borderBottomRightRadius: 'extra-large',
90
90
  overflow: 'hidden',
91
91
  },
92
92
  height,