diff --git a/app/page.tsx b/app/page.tsx index 258c0d1..1525f01 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -60,4 +60,4 @@ export default function Home() { ); } -const TAGS = [{ label: "hair" }, { label: "fire" }]; +const TAGS = [{ label: "hair" }, { label: "fire" }, { label: "plant" }]; diff --git a/lib/svg-generator.ts b/lib/svg-generator.ts index 91e2bfb..eed95ee 100644 --- a/lib/svg-generator.ts +++ b/lib/svg-generator.ts @@ -10,6 +10,9 @@ export async function generateThemedSVG(username: string, themeKey: string) { const cellSize = 14; const background = theme.background || "#ffffff"; + const backgroundPattern = theme.backgroundPattern; + const patternId = `pattern_${themeKey}`; + const baseDot = theme.showBaseDot ?? false; const elements = weeks.flatMap((week, weekIndex) => @@ -44,9 +47,18 @@ export async function generateThemedSVG(username: string, themeKey: string) { }), ); + const defs = backgroundPattern + ? `${backgroundPattern.replace( + /]*?)>/g, + `` + )}` + : ""; + const fillValue = backgroundPattern ? `url(#${patternId})` : background; + const svg = ` - + ${defs} + ${theme.emoji || ""} ${username}'s ${theme.label} ${elements.join("\n")} diff --git a/lib/themes.ts b/lib/themes.ts index dfa7973..76b750b 100644 --- a/lib/themes.ts +++ b/lib/themes.ts @@ -7,6 +7,7 @@ export interface ThemeStyle { label: string; emoji?: string; background?: string; + backgroundPattern?: string; showBaseDot?: boolean; } @@ -61,9 +62,47 @@ export const FireTheme: ThemeStyle = { }, }; +export const PlantTheme: ThemeStyle = { + label: "Plant", + emoji: "🌿", + background: "#f0fdf4", + backgroundPattern: ` + + + + + + + + + + + + + `, + showBaseDot: true, + getEmoji: (level: CommitLevel): string | null => { + switch (level) { + case "none": + return null; + case "low": + return "🫘"; // 씨앗 + case "medium": + return "🌱"; // 새싹 + case "high": + return "🌿"; // 풀잎 + case "max": + return "🌻"; // 꽃 + default: + return null; + } + }, +}; + export const themes: Record = { hair: HairTheme, fire: FireTheme, + plant: PlantTheme, }; export function getCommitLevel(commitCount: number): CommitLevel {