@fibery/ui-kit 1.1.0 → 1.3.0
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.
- package/package.json +2 -1
- package/src/Pallete.ts +24 -0
- package/src/ThemeProvider.tsx +4 -11
- package/src/create-inline-theme.ts +19 -9
- package/src/designSystem.ts +34 -21
- package/src/loading-sausage.tsx +4 -4
- package/src/theme-styles.ts +18 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fibery/ui-kit",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"main": "index.ts",
|
|
5
5
|
"private": false,
|
|
6
6
|
"files": [
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"src/Button.d.ts",
|
|
9
9
|
"src/Button.js",
|
|
10
10
|
"src/designSystem.ts",
|
|
11
|
+
"src/theme-styles.ts",
|
|
11
12
|
"src/theme-settings.ts",
|
|
12
13
|
"src/media-query-utils.ts",
|
|
13
14
|
"src/create-inline-theme.ts",
|
package/src/Pallete.ts
CHANGED
|
@@ -239,3 +239,27 @@ export const whiteA = {
|
|
|
239
239
|
whiteA11: "hsla(0, 0%, 100%, 0.592)",
|
|
240
240
|
whiteA12: "hsla(0, 0%, 100%, 0.923)",
|
|
241
241
|
} as const;
|
|
242
|
+
|
|
243
|
+
export const opacity = {
|
|
244
|
+
opacity100: 1,
|
|
245
|
+
opacity95: 0.95,
|
|
246
|
+
opacity90: 0.9,
|
|
247
|
+
opacity85: 0.85,
|
|
248
|
+
opacity80: 0.8,
|
|
249
|
+
opacity75: 0.75,
|
|
250
|
+
opacity70: 0.7,
|
|
251
|
+
opacity65: 0.65,
|
|
252
|
+
opacity60: 0.6,
|
|
253
|
+
opacity55: 0.55,
|
|
254
|
+
opacity50: 0.5,
|
|
255
|
+
opacity45: 0.45,
|
|
256
|
+
opacity40: 0.4,
|
|
257
|
+
opacity35: 0.35,
|
|
258
|
+
opacity30: 0.3,
|
|
259
|
+
opacity25: 0.25,
|
|
260
|
+
opacity20: 0.2,
|
|
261
|
+
opacity15: 0.15,
|
|
262
|
+
opacity10: 0.1,
|
|
263
|
+
opacity5: 0.05,
|
|
264
|
+
opacity0: 0,
|
|
265
|
+
} as const;
|
package/src/ThemeProvider.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import invariant from "invariant";
|
|
2
|
+
import {themeStyles} from "@fibery/ui-kit/src/theme-styles";
|
|
2
3
|
import {createContext, ReactNode, useContext, useEffect, useState} from "react";
|
|
3
|
-
import {colors,
|
|
4
|
+
import {colors, getThemeColors, ThemeColors} from "./designSystem";
|
|
4
5
|
import {
|
|
5
6
|
subscribeOnThemeMenuPreferenceChange,
|
|
6
7
|
subscribeOnThemeModeChange,
|
|
@@ -50,13 +51,6 @@ export function useThemeMenuPreference(): ThemeMenuPreference {
|
|
|
50
51
|
return themeMenuPreference;
|
|
51
52
|
}
|
|
52
53
|
|
|
53
|
-
export function applyThemeToRoot(theme: ThemeColors) {
|
|
54
|
-
const inlineTheme = createInlineTheme(theme);
|
|
55
|
-
Object.entries(inlineTheme).forEach(([p, v]) => {
|
|
56
|
-
document.body.style.setProperty(p, v);
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
|
|
60
54
|
export function RootThemeProvider({
|
|
61
55
|
initialThemeMode,
|
|
62
56
|
initialPreference,
|
|
@@ -90,6 +84,7 @@ export function RootThemeProvider({
|
|
|
90
84
|
const documentElement = document.documentElement;
|
|
91
85
|
documentElement.classList.remove(darkThemeClassName);
|
|
92
86
|
documentElement.classList.remove(lightThemeAndDarkMenuClassName);
|
|
87
|
+
documentElement.classList.add(themeStyles);
|
|
93
88
|
if (themeMode === "dark") {
|
|
94
89
|
documentElement.classList.add(darkThemeClassName);
|
|
95
90
|
colorScheme = "dark";
|
|
@@ -105,9 +100,7 @@ export function RootThemeProvider({
|
|
|
105
100
|
documentElement.classList.remove(lightThemeAndDarkMenuClassName);
|
|
106
101
|
};
|
|
107
102
|
}, [themeMode]);
|
|
108
|
-
|
|
109
|
-
applyThemeToRoot(theme);
|
|
110
|
-
}, [theme]);
|
|
103
|
+
|
|
111
104
|
return (
|
|
112
105
|
<FiberyThemePreferenceContext.Provider value={themePreference}>
|
|
113
106
|
<FiberyThemeMenuPreferenceContext.Provider value={themeMenuPreference}>
|
|
@@ -1,55 +1,65 @@
|
|
|
1
|
-
|
|
1
|
+
declare const VAR_THEME_PREFIX: string | undefined;
|
|
2
|
+
export const varPrefix = typeof VAR_THEME_PREFIX === "string" ? VAR_THEME_PREFIX : "fibery";
|
|
3
|
+
|
|
4
|
+
export function createInlineTheme<T extends Record<string, unknown>>(
|
|
5
|
+
themes: T,
|
|
6
|
+
rejectKeys: Array<string>
|
|
7
|
+
): Record<string, string> {
|
|
2
8
|
return Object.entries(themes).reduce<Record<string, string>>((inlineTheme, [key, value]) => {
|
|
9
|
+
if (rejectKeys.includes(key)) {
|
|
10
|
+
return inlineTheme;
|
|
11
|
+
}
|
|
12
|
+
|
|
3
13
|
if (key === "opacity") {
|
|
4
14
|
Object.entries(themes.opacity as Record<string, string>).forEach(([opacityKey, opacityValue]) => {
|
|
5
|
-
inlineTheme[
|
|
15
|
+
inlineTheme[`--${varPrefix}-opacity-${opacityKey}`] = opacityValue;
|
|
6
16
|
}, "");
|
|
7
17
|
|
|
8
18
|
return inlineTheme;
|
|
9
19
|
}
|
|
10
20
|
if (key === "stateColors") {
|
|
11
21
|
Object.entries(themes.stateColors as Record<string, string>).forEach(([stateColorKey, stateColorValue]) => {
|
|
12
|
-
inlineTheme[
|
|
22
|
+
inlineTheme[`--${varPrefix}-state-colors-${stateColorKey}`] = stateColorValue;
|
|
13
23
|
}, "");
|
|
14
24
|
|
|
15
25
|
return inlineTheme;
|
|
16
26
|
}
|
|
17
27
|
if (key === "brandColors") {
|
|
18
28
|
Object.entries(themes.brandColors as Record<string, string>).forEach(([brandColorKey, brandColorValue]) => {
|
|
19
|
-
inlineTheme[
|
|
29
|
+
inlineTheme[`--${varPrefix}-brand-colors-${brandColorKey}`] = brandColorValue;
|
|
20
30
|
}, "");
|
|
21
31
|
|
|
22
32
|
return inlineTheme;
|
|
23
33
|
}
|
|
24
34
|
if (key === "shades") {
|
|
25
35
|
Object.entries(themes.shades as Record<string, string>).forEach(([shadeKey, shadeValue]) => {
|
|
26
|
-
inlineTheme[
|
|
36
|
+
inlineTheme[`--${varPrefix}-shades-${shadeKey}`] = shadeValue;
|
|
27
37
|
}, "");
|
|
28
38
|
|
|
29
39
|
return inlineTheme;
|
|
30
40
|
}
|
|
31
41
|
if (key === "lights") {
|
|
32
42
|
Object.entries(themes.lights as Record<string, string>).forEach(([lightKey, lightValue]) => {
|
|
33
|
-
inlineTheme[
|
|
43
|
+
inlineTheme[`--${varPrefix}-lights-${lightKey}`] = lightValue;
|
|
34
44
|
}, "");
|
|
35
45
|
|
|
36
46
|
return inlineTheme;
|
|
37
47
|
}
|
|
38
48
|
if (key === "separators") {
|
|
39
49
|
Object.entries(themes.separators as Record<string, string>).forEach(([separatorKey, separatorValue]) => {
|
|
40
|
-
inlineTheme[
|
|
50
|
+
inlineTheme[`--${varPrefix}-separator-${separatorKey}`] = separatorValue;
|
|
41
51
|
}, "");
|
|
42
52
|
|
|
43
53
|
return inlineTheme;
|
|
44
54
|
}
|
|
45
55
|
if (key === "inversedSeparators") {
|
|
46
56
|
Object.entries(themes.inversedSeparators as Record<string, string>).forEach(([separatorKey, separatorValue]) => {
|
|
47
|
-
inlineTheme[
|
|
57
|
+
inlineTheme[`--${varPrefix}-inversed-separators-${separatorKey}`] = separatorValue;
|
|
48
58
|
}, "");
|
|
49
59
|
|
|
50
60
|
return inlineTheme;
|
|
51
61
|
}
|
|
52
|
-
inlineTheme[
|
|
62
|
+
inlineTheme[`--${varPrefix}-color-${key}`] = value as string;
|
|
53
63
|
return inlineTheme;
|
|
54
64
|
}, {});
|
|
55
65
|
}
|
package/src/designSystem.ts
CHANGED
|
@@ -4,11 +4,11 @@ import {ThemeMode} from "./theme-settings";
|
|
|
4
4
|
import ColorHash from "color-hash";
|
|
5
5
|
import {
|
|
6
6
|
blackA,
|
|
7
|
+
blue,
|
|
8
|
+
blueDark,
|
|
7
9
|
indigo,
|
|
8
10
|
indigoDark,
|
|
9
11
|
red,
|
|
10
|
-
blue,
|
|
11
|
-
blueDark,
|
|
12
12
|
redDark,
|
|
13
13
|
sage,
|
|
14
14
|
slate,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
yellowDark,
|
|
19
19
|
} from "./Pallete";
|
|
20
20
|
import _ from "lodash";
|
|
21
|
-
import {createInlineTheme as createInlineStyles} from "./create-inline-theme";
|
|
21
|
+
import {createInlineTheme as createInlineStyles, varPrefix} from "./create-inline-theme";
|
|
22
22
|
|
|
23
23
|
export const typeSizes = [28, 24, 18, 16, 14, 12, 10, 8] as const;
|
|
24
24
|
|
|
@@ -149,15 +149,17 @@ const lightColors = {
|
|
|
149
149
|
entityNodeBorder: `1px solid ${getOpacities(slateDark.slate3).opacity30}`,
|
|
150
150
|
entityNodeHoverColor: slateDark.slate7,
|
|
151
151
|
entityNodeBorderHover: `1px solid ${getOpacities(slate.slate11).opacity80}`,
|
|
152
|
-
entityNodeBgColor:
|
|
152
|
+
entityNodeBgColor: slate.slate2,
|
|
153
153
|
shortcutTextColor: slate.slate9,
|
|
154
154
|
shortcutBorderColor: `1px solid ${getOpacities(slate.slate8).opacity20}`,
|
|
155
155
|
inputBgColor: whiteA.whiteA0,
|
|
156
|
-
inputDisabledBgColor: slate.
|
|
156
|
+
inputDisabledBgColor: getOpacities(slate.slate6).opacity30,
|
|
157
157
|
inputDisabledBorderColor: `0 0 0 1px ${getOpacities(slate.slate6).opacity20}`,
|
|
158
158
|
inputCopyBgColor: slate.slate3,
|
|
159
159
|
inputBorderColor: `0 0 0 1px ${getOpacities(slate.slate6).opacity70}`,
|
|
160
|
-
inputBorderHoverColor: `0 0 0 1px ${getOpacities(slate.
|
|
160
|
+
inputBorderHoverColor: `0 0 0 1px ${getOpacities(slate.slate7).opacity100}`,
|
|
161
|
+
inputBorderFocusColor: `0 0 0 1px ${getOpacities(slate.slate8).opacity100}`,
|
|
162
|
+
inputBorderBlendMode: "multiply",
|
|
161
163
|
inputPlaceholderTextColor: slate.slate10,
|
|
162
164
|
buttonColor: slate.slate10,
|
|
163
165
|
buttonPrimaryTextColor: slate.slate2,
|
|
@@ -195,6 +197,7 @@ const lightColors = {
|
|
|
195
197
|
entityCardShadowHover: `0 0 0 1px ${getOpacities(slate.slate10).opacity10}, 0 2px 4px -4px ${
|
|
196
198
|
getOpacities(slate.slate10).opacity20
|
|
197
199
|
}`,
|
|
200
|
+
relationViewBgColor: slate.slate2,
|
|
198
201
|
unitBg: slate.slate3,
|
|
199
202
|
unitBgHover: slate.slate4,
|
|
200
203
|
badgeBgColor: getOpacities(slate.slate10).opacity20,
|
|
@@ -294,15 +297,17 @@ const darkColors = {
|
|
|
294
297
|
entityNodeBorder: `1px solid ${getOpacities(slate.slate8).opacity40}`,
|
|
295
298
|
entityNodeHoverColor: slate.slate7,
|
|
296
299
|
entityNodeBorderHover: `1px solid ${getOpacities(slate.slate7).opacity80}`,
|
|
297
|
-
entityNodeBgColor:
|
|
300
|
+
entityNodeBgColor: slateDark.slate3,
|
|
298
301
|
shortcutTextColor: slateDark.slate11,
|
|
299
302
|
shortcutBorderColor: `1px solid ${getOpacities(slateDark.slate10).opacity20}`,
|
|
300
303
|
inputBgColor: slateDark.slate2,
|
|
301
|
-
inputDisabledBgColor: slateDark.
|
|
304
|
+
inputDisabledBgColor: getOpacities(slateDark.slate6).opacity30,
|
|
302
305
|
inputDisabledBorderColor: `0 0 0 1px ${getOpacities(slateDark.slate8).opacity20}`,
|
|
303
306
|
inputCopyBgColor: slateDark.slate4,
|
|
304
307
|
inputBorderColor: `0 0 0 1px ${getOpacities(slateDark.slate8).opacity70}`,
|
|
305
|
-
inputBorderHoverColor: `0 0 0 1px ${getOpacities(slateDark.slate8).
|
|
308
|
+
inputBorderHoverColor: `0 0 0 1px ${getOpacities(slateDark.slate8).opacity100}`,
|
|
309
|
+
inputBorderFocusColor: `0 0 0 1px ${getOpacities(slateDark.slate9).opacity100}`,
|
|
310
|
+
inputBorderBlendMode: "lighten",
|
|
306
311
|
inputPlaceholderTextColor: slate.slate10,
|
|
307
312
|
buttonColor: slateDark.slate10,
|
|
308
313
|
buttonPrimaryTextColor: slate.slate6,
|
|
@@ -336,6 +341,7 @@ const darkColors = {
|
|
|
336
341
|
entityCardShadowHover: `0 0 0 1px ${getOpacities(slateDark.slate2).opacity10}, 0 2px 4px -4px ${
|
|
337
342
|
getOpacities(slateDark.slate2).opacity20
|
|
338
343
|
}`,
|
|
344
|
+
relationViewBgColor: slateDark.slate3,
|
|
339
345
|
unitBg: slateDark.slate6,
|
|
340
346
|
unitBgHover: slateDark.slate7,
|
|
341
347
|
badgeBgColor: getOpacities(slate.slate10).opacity20,
|
|
@@ -439,7 +445,7 @@ function getTypeColors(themeColor: string, theme: ThemeMode) {
|
|
|
439
445
|
boardBg: boardBg.hex(),
|
|
440
446
|
boardBgOverlay: boardBg.alpha(0.8).css(),
|
|
441
447
|
headerBg: chroma(color).luminance(0.7).desaturate(0.5).set("hsl.h", "+2").css(),
|
|
442
|
-
detailsBg: chroma(color).alpha(0.
|
|
448
|
+
detailsBg: chroma(color).alpha(0.5).luminance(0.85).hex(),
|
|
443
449
|
focus: chroma(color).alpha(0.25).css(),
|
|
444
450
|
separator: chroma(color).alpha(0.3).css(),
|
|
445
451
|
};
|
|
@@ -452,7 +458,7 @@ function getTypeColors(themeColor: string, theme: ThemeMode) {
|
|
|
452
458
|
boardBg: boardBg.hex(),
|
|
453
459
|
boardBgOverlay: boardBg.alpha(0.8).css(),
|
|
454
460
|
headerBg: chroma(color).luminance(0.7).desaturate(0.5).set("hsl.h", "+2").css(),
|
|
455
|
-
detailsBg: chroma(color).alpha(0.03).luminance(0.8).darken(0.1).hex(),
|
|
461
|
+
detailsBg: chroma(color).alpha(0.03).luminance(0.8).desaturate(0.8).darken(0.1).hex(),
|
|
456
462
|
focus: chroma(color).alpha(0.25).css(),
|
|
457
463
|
separator: chroma(color).alpha(0.3).css(),
|
|
458
464
|
};
|
|
@@ -679,45 +685,52 @@ export const getObjectColorMemoized = _.memoize((name) => {
|
|
|
679
685
|
return colorHash.hex(name);
|
|
680
686
|
});
|
|
681
687
|
|
|
682
|
-
export const themeVars = Object.keys(getThemeColors(
|
|
688
|
+
export const themeVars = Object.keys(getThemeColors(brandColors.green, "light")).reduce((vars, key) => {
|
|
683
689
|
if (key === "opacity") {
|
|
684
690
|
vars[key] = Object.fromEntries(
|
|
685
|
-
Object.keys(opacity).map((opacityKey) => [opacityKey, `var(
|
|
691
|
+
Object.keys(opacity).map((opacityKey) => [opacityKey, `var(--${varPrefix}-opacity-${opacityKey})`])
|
|
686
692
|
);
|
|
687
693
|
} else if (key === "stateColors") {
|
|
688
694
|
vars[key] = Object.fromEntries(
|
|
689
|
-
Object.keys(stateColors).map((stateColorKey) => [
|
|
695
|
+
Object.keys(stateColors).map((stateColorKey) => [
|
|
696
|
+
stateColorKey,
|
|
697
|
+
`var(--${varPrefix}-state-colors-${stateColorKey})`,
|
|
698
|
+
])
|
|
690
699
|
);
|
|
691
700
|
} else if (key === "brandColors") {
|
|
692
701
|
vars[key] = Object.fromEntries(
|
|
693
|
-
Object.keys(brandColors).map((brandColorKey) => [
|
|
702
|
+
Object.keys(brandColors).map((brandColorKey) => [
|
|
703
|
+
brandColorKey,
|
|
704
|
+
`var(--${varPrefix}-brand-colors-${brandColorKey})`,
|
|
705
|
+
])
|
|
694
706
|
);
|
|
695
707
|
} else if (key === "shades") {
|
|
696
708
|
vars[key] = Object.fromEntries(
|
|
697
|
-
Object.keys(shades).map((shadeKey) => [shadeKey, `var(
|
|
709
|
+
Object.keys(shades).map((shadeKey) => [shadeKey, `var(--${varPrefix}-shades-${shadeKey})`])
|
|
698
710
|
);
|
|
699
711
|
} else if (key === "lights") {
|
|
700
712
|
vars[key] = Object.fromEntries(
|
|
701
|
-
Object.keys(lights).map((lightKey) => [lightKey, `var(
|
|
713
|
+
Object.keys(lights).map((lightKey) => [lightKey, `var(--${varPrefix}-lights-${lightKey})`])
|
|
702
714
|
);
|
|
703
715
|
} else if (key === "separators") {
|
|
704
716
|
vars[key] = Object.fromEntries(
|
|
705
|
-
Object.keys(separators).map((separatorKey) => [separatorKey, `var(
|
|
717
|
+
Object.keys(separators).map((separatorKey) => [separatorKey, `var(--${varPrefix}-separator-${separatorKey})`])
|
|
706
718
|
);
|
|
707
719
|
} else if (key === "inversedSeparators") {
|
|
708
720
|
vars[key] = Object.fromEntries(
|
|
709
721
|
Object.keys(inversedSeparators).map((separatorKey) => [
|
|
710
722
|
separatorKey,
|
|
711
|
-
`var(
|
|
723
|
+
`var(--${varPrefix}-inversed-separator-${separatorKey})`,
|
|
712
724
|
])
|
|
713
725
|
);
|
|
714
726
|
} else {
|
|
715
|
-
vars[key] = `var(
|
|
727
|
+
vars[key] = `var(--${varPrefix}-color-${key})`;
|
|
716
728
|
}
|
|
717
729
|
return vars;
|
|
718
730
|
}, {} as Record<string, string | {[k: string]: string}>) as ThemeColors;
|
|
719
731
|
|
|
720
|
-
export const createInlineTheme = (theme: ThemeColors
|
|
732
|
+
export const createInlineTheme = (theme: ThemeColors, rejectKeys = Object.keys(lightColors)) =>
|
|
733
|
+
createInlineStyles<ThemeColors>(theme, rejectKeys);
|
|
721
734
|
|
|
722
735
|
export const textStyles = {
|
|
723
736
|
heading1: {
|
package/src/loading-sausage.tsx
CHANGED
|
@@ -2,7 +2,7 @@ import {css} from "@linaria/core";
|
|
|
2
2
|
import {styled} from "@linaria/react";
|
|
3
3
|
import cn from "classnames";
|
|
4
4
|
import _ from "lodash";
|
|
5
|
-
import {
|
|
5
|
+
import {memo, useRef} from "react";
|
|
6
6
|
import {space, themeVars} from "./designSystem";
|
|
7
7
|
|
|
8
8
|
const getRandomWithSeed = _.memoize((seed: number) => {
|
|
@@ -101,7 +101,7 @@ const Container = styled.div<{height: number}>`
|
|
|
101
101
|
}
|
|
102
102
|
`;
|
|
103
103
|
|
|
104
|
-
type
|
|
104
|
+
export type LoadingSausageProps = {
|
|
105
105
|
minWidth?: number;
|
|
106
106
|
maxWidth?: number;
|
|
107
107
|
height?: number;
|
|
@@ -119,7 +119,7 @@ export const LoadingSausage = memo(function LoadingSausage({
|
|
|
119
119
|
inverted = false,
|
|
120
120
|
margins = true,
|
|
121
121
|
animateAppearance = false,
|
|
122
|
-
}:
|
|
122
|
+
}: LoadingSausageProps): JSX.Element {
|
|
123
123
|
const widthRef = useRef(getRandomInt(minWidth, maxWidth, index));
|
|
124
124
|
return (
|
|
125
125
|
<Container
|
|
@@ -140,7 +140,7 @@ type SausageListProps = {
|
|
|
140
140
|
minAmount?: number;
|
|
141
141
|
maxAmount?: number;
|
|
142
142
|
WrapperComponent?: ({children}: {children: JSX.Element}) => JSX.Element | null;
|
|
143
|
-
} & Omit<
|
|
143
|
+
} & Omit<LoadingSausageProps, "index">;
|
|
144
144
|
export const LoadingSausageList = memo<SausageListProps>(function LoadingSausageList({
|
|
145
145
|
amount,
|
|
146
146
|
minAmount = 1,
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {css} from "@linaria/core";
|
|
2
|
+
import {createInlineTheme, getThemeColors, colors} from "./designSystem";
|
|
3
|
+
const lightTheme = getThemeColors(colors.brandColors.blue, "light");
|
|
4
|
+
const darkTheme = getThemeColors(colors.brandColors.blue, "dark");
|
|
5
|
+
const light2Theme = getThemeColors(colors.brandColors.blue, "light2");
|
|
6
|
+
export const themeStyles = css`
|
|
7
|
+
:global(html) {
|
|
8
|
+
&:root {
|
|
9
|
+
${createInlineTheme(lightTheme, [])}
|
|
10
|
+
}
|
|
11
|
+
&.dark-theme:root {
|
|
12
|
+
${createInlineTheme(darkTheme, [])}
|
|
13
|
+
}
|
|
14
|
+
&.light-theme-and-dark-menu:root {
|
|
15
|
+
${createInlineTheme(light2Theme, [])}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
`;
|