diff --git a/app/lish/[did]/[publication]/dashboard/settings/SettingsContent.tsx b/app/lish/[did]/[publication]/dashboard/settings/SettingsContent.tsx index c248e4dc..f6755931 100644 --- a/app/lish/[did]/[publication]/dashboard/settings/SettingsContent.tsx +++ b/app/lish/[did]/[publication]/dashboard/settings/SettingsContent.tsx @@ -1,7 +1,7 @@ "use client"; import { useState, useEffect } from "react"; -import { ButtonPrimary, ButtonSecondary } from "components/Buttons"; +import { ButtonSecondary } from "components/Buttons"; import { DotLoader } from "components/utils/DotLoader"; import { useToaster } from "components/Toast"; import { mutate } from "swr"; @@ -11,7 +11,6 @@ import { } from "../PublicationSWRProvider"; import { updatePublication } from "app/lish/createPub/updatePublication"; import { PubDomainSettings } from "./PubDomainSettings"; -import { PubThemeSetter } from "components/ThemeManager/PubThemeSetter"; import { GeneralSettings } from "./GeneralSettings"; import { PostSettings } from "./PostSettings"; import { ThemeSettings } from "./ThemeSettings"; diff --git a/components/ThemeManager/PubPickers/PubPresetPicker.tsx b/components/ThemeManager/PubPickers/PubPresetPicker.tsx new file mode 100644 index 00000000..95a8bf05 --- /dev/null +++ b/components/ThemeManager/PubPickers/PubPresetPicker.tsx @@ -0,0 +1,149 @@ +import { useCallback } from "react"; +import { parseColor } from "react-aria-components"; +import { PubThemeEditorState } from "../PubThemeSetter"; + +type PresetTheme = { + name: string; + bgLeaflet: string; + bgPage: string; + showPageBackground: boolean; + primary: string; + accent1: string; + accent2: string; + headingFont: string | undefined; + bodyFont: string | undefined; + pageWidth: number; +}; + +const presetThemes: PresetTheme[] = [ + { + name: "Default", + bgLeaflet: "#FDFCFA", + bgPage: "#FDFCFA", + showPageBackground: false, + primary: "#272727", + accent1: "#57822B", + accent2: "#FFFFFF", + headingFont: undefined, + bodyFont: undefined, + pageWidth: 624, + }, + { + name: "Minimal", + bgLeaflet: "#F0F2F2", + bgPage: "#F0F2F2", + showPageBackground: false, + primary: "#292929", + accent1: "#292929", + accent2: "#F0F2F2", + headingFont: undefined, + bodyFont: "source-sans", + pageWidth: 768, + }, + { + name: "Bookish", + bgLeaflet: "#FFFBEB", + bgPage: "#FFFBEB", + showPageBackground: false, + primary: "#3B3131", + accent1: "#B50000", + accent2: "#F0F2F2", + headingFont: "lora", + bodyFont: "lora", + pageWidth: 768, + }, + { + name: "Dark", + bgLeaflet: "#1A1917", + bgPage: "#1A1917", + showPageBackground: false, + primary: "#FFFFFF", + accent1: "#234D26", + accent2: "#C3D6BC", + headingFont: undefined, + bodyFont: undefined, + pageWidth: 768, + }, + { + name: "Colorful", + bgLeaflet: "#2665C9", + bgPage: "rgba(247, 223, 124, 1)", + showPageBackground: true, + primary: "#363131", + accent1: "#ED3700", + accent2: "#FFFFFF", + headingFont: undefined, + bodyFont: undefined, + pageWidth: 768, + }, + { + name: "Rose", + bgLeaflet: "#FAD2D7", + bgPage: "rgba(252, 246, 245, 0.68)", + showPageBackground: true, + primary: "#613E3E", + accent1: "#74C200", + accent2: "#FFFFFF", + headingFont: "montserrat", + bodyFont: undefined, + pageWidth: 768, + }, +]; + +export function PresetThemePicker(props: { state: PubThemeEditorState }) { + let { + setTheme, + setImage, + setPageWidth, + setHeadingFont, + setBodyFont, + setShowPageBackground, + } = props.state; + + let applyPreset = useCallback( + (preset: PresetTheme) => { + setTheme(() => ({ + bgLeaflet: parseColor(preset.bgLeaflet), + bgPage: parseColor(preset.bgPage), + primary: parseColor(preset.primary), + accent1: parseColor(preset.accent1), + accent2: parseColor(preset.accent2), + })); + setShowPageBackground(preset.showPageBackground); + setPageWidth(preset.pageWidth); + setHeadingFont(preset.headingFont); + setBodyFont(preset.bodyFont); + setImage(null); + }, + [ + setTheme, + setShowPageBackground, + setPageWidth, + setHeadingFont, + setBodyFont, + setImage, + ], + ); + + return ( +