refactor: Update CreateThemePage component to dynamically generate theme data
This commit is contained in:
@@ -22,6 +22,7 @@ const ThemeFormWrapper = styled.div<{
|
|||||||
secondaryColor: string,
|
secondaryColor: string,
|
||||||
tertiaryColor: string,
|
tertiaryColor: string,
|
||||||
colorsBorder: string,
|
colorsBorder: string,
|
||||||
|
dialogBg: string,
|
||||||
}>`
|
}>`
|
||||||
${({
|
${({
|
||||||
primaryColor,
|
primaryColor,
|
||||||
@@ -29,12 +30,14 @@ const ThemeFormWrapper = styled.div<{
|
|||||||
secondaryColor,
|
secondaryColor,
|
||||||
tertiaryColor,
|
tertiaryColor,
|
||||||
colorsBorder,
|
colorsBorder,
|
||||||
|
dialogBg,
|
||||||
}: {
|
}: {
|
||||||
primaryColor: string;
|
primaryColor: string;
|
||||||
accentColor: string;
|
accentColor: string;
|
||||||
secondaryColor: string;
|
secondaryColor: string;
|
||||||
tertiaryColor: string;
|
tertiaryColor: string;
|
||||||
colorsBorder: string;
|
colorsBorder: string;
|
||||||
|
dialogBg: string;
|
||||||
}) => `
|
}) => `
|
||||||
--zen-primary-color: ${accentColor};
|
--zen-primary-color: ${accentColor};
|
||||||
|
|
||||||
@@ -43,6 +46,7 @@ const ThemeFormWrapper = styled.div<{
|
|||||||
--zen-colors-tertiary: ${tertiaryColor};
|
--zen-colors-tertiary: ${tertiaryColor};
|
||||||
|
|
||||||
--zen-colors-border: ${colorsBorder};
|
--zen-colors-border: ${colorsBorder};
|
||||||
|
--zen-dialog-background: ${dialogBg};
|
||||||
`}
|
`}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
@@ -63,6 +67,10 @@ const defaultStyles = {
|
|||||||
light: "color-mix(in srgb, var(--zen-colors-secondary) 90%, black 10%)",
|
light: "color-mix(in srgb, var(--zen-colors-secondary) 90%, black 10%)",
|
||||||
dark: "color-mix(in srgb, var(--zen-colors-secondary) 80%, black 20%)",
|
dark: "color-mix(in srgb, var(--zen-colors-secondary) 80%, black 20%)",
|
||||||
},
|
},
|
||||||
|
dialogBg: {
|
||||||
|
light: "var(--zen-colors-tertiary)",
|
||||||
|
dark: "color-mix(in srgb, var(--zen-primary-color) 10%, black 90%)",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function CreateThemePage() {
|
export default function CreateThemePage() {
|
||||||
@@ -73,12 +81,14 @@ export default function CreateThemePage() {
|
|||||||
const [secondaryColor, setSecondaryColor] = React.useState(defaultStyles.secondaryColor.dark);
|
const [secondaryColor, setSecondaryColor] = React.useState(defaultStyles.secondaryColor.dark);
|
||||||
const [tertiaryColor, setTertiaryColor] = React.useState(defaultStyles.tertiaryColor.dark);
|
const [tertiaryColor, setTertiaryColor] = React.useState(defaultStyles.tertiaryColor.dark);
|
||||||
const [colorsBorder, setColorsBorder] = React.useState(defaultStyles.colorsBorder.dark);
|
const [colorsBorder, setColorsBorder] = React.useState(defaultStyles.colorsBorder.dark);
|
||||||
|
const [dialogBg, setDialogBg] = React.useState(defaultStyles.dialogBg.dark);
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
setPrimaryColor(isDarkMode ? defaultStyles.primaryColor.dark : defaultStyles.primaryColor.light);
|
setPrimaryColor(isDarkMode ? defaultStyles.primaryColor.dark : defaultStyles.primaryColor.light);
|
||||||
setSecondaryColor(isDarkMode ? defaultStyles.secondaryColor.dark : defaultStyles.secondaryColor.light);
|
setSecondaryColor(isDarkMode ? defaultStyles.secondaryColor.dark : defaultStyles.secondaryColor.light);
|
||||||
setTertiaryColor(isDarkMode ? defaultStyles.tertiaryColor.dark : defaultStyles.tertiaryColor.light);
|
setTertiaryColor(isDarkMode ? defaultStyles.tertiaryColor.dark : defaultStyles.tertiaryColor.light);
|
||||||
setColorsBorder(isDarkMode ? defaultStyles.colorsBorder.dark : defaultStyles.colorsBorder.light);
|
setColorsBorder(isDarkMode ? defaultStyles.colorsBorder.dark : defaultStyles.colorsBorder.light);
|
||||||
|
setDialogBg(isDarkMode ? defaultStyles.dialogBg.dark : defaultStyles.dialogBg.light);
|
||||||
}, [isDarkMode]);
|
}, [isDarkMode]);
|
||||||
|
|
||||||
const generateThemeData = () => {
|
const generateThemeData = () => {
|
||||||
@@ -98,6 +108,9 @@ export default function CreateThemePage() {
|
|||||||
if (colorsBorder !== (isDarkMode ? defaultStyles.colorsBorder.dark : defaultStyles.colorsBorder.light)) {
|
if (colorsBorder !== (isDarkMode ? defaultStyles.colorsBorder.dark : defaultStyles.colorsBorder.light)) {
|
||||||
theme["colorsBorder"] = colorsBorder
|
theme["colorsBorder"] = colorsBorder
|
||||||
}
|
}
|
||||||
|
if (dialogBg !== (isDarkMode ? defaultStyles.dialogBg.dark : defaultStyles.dialogBg.light)) {
|
||||||
|
theme["dialogBg"] = dialogBg
|
||||||
|
}
|
||||||
return JSON.stringify(theme, null, 4);
|
return JSON.stringify(theme, null, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,6 +121,7 @@ export default function CreateThemePage() {
|
|||||||
secondaryColor={secondaryColor}
|
secondaryColor={secondaryColor}
|
||||||
tertiaryColor={tertiaryColor}
|
tertiaryColor={tertiaryColor}
|
||||||
colorsBorder={colorsBorder}
|
colorsBorder={colorsBorder}
|
||||||
|
dialogBg={dialogBg}
|
||||||
className="flex flex-col mt-32 items-center justify-center w-full min-h-screen">
|
className="flex flex-col mt-32 items-center justify-center w-full min-h-screen">
|
||||||
<div className="w-full lg:w-1/2 xl:w-1/2 mx-auto px-2 lg:px-none">
|
<div className="w-full lg:w-1/2 xl:w-1/2 mx-auto px-2 lg:px-none">
|
||||||
<h1 className="text-4xl lg:text-7xl font-bold">Create your theme</h1>
|
<h1 className="text-4xl lg:text-7xl font-bold">Create your theme</h1>
|
||||||
@@ -185,7 +199,7 @@ export default function CreateThemePage() {
|
|||||||
</div>
|
</div>
|
||||||
{/* Preview */}
|
{/* Preview */}
|
||||||
<div className="p-4 pr-0 pb-0 rounded-xl border-2 relative overflow-hidden w-72 h-48 border-[var(--zen-colors-border)] bg-[var(--zen-colors-tertiary)]">
|
<div className="p-4 pr-0 pb-0 rounded-xl border-2 relative overflow-hidden w-72 h-48 border-[var(--zen-colors-border)] bg-[var(--zen-colors-tertiary)]">
|
||||||
<div className="border-2 flex items-center justify-center border-[var(--zen-colors-border)] h-full w-full bg-[var(--zen-colors-tertiary)] rounded-tl-xl p-4 border-b-0 border-r-0">
|
<div className="border-2 flex items-center justify-center border-[var(--zen-colors-border)] h-full w-full bg-[var(--zen-dialog-background)] rounded-tl-xl p-4 border-b-0 border-r-0">
|
||||||
<Button className={ny("bg-[var(--zen-colors-secondary)]", isDarkMode ? "text-white" : "text-black")}>Button</Button>
|
<Button className={ny("bg-[var(--zen-colors-secondary)]", isDarkMode ? "text-white" : "text-black")}>Button</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user