// 팔레트 목록 — 클린 블루의 고정 토큰은 derive.ts에서 정의. // 각 swatch는 스크린샷 위→아래 순서. 실제 shadcn 토큰은 derive.ts에서 자동 생성. // 새 팔레트 추가/수정 시 이 배열만 건드리면 됨. export type RawPalette = { id: string name: string swatch: [string, string, string, string] } export const PALETTES: RawPalette[] = [ { id: "samsung", // 고정 토큰(derive.ts SAMSUNG_TOKENS) — 삼성닷컴 공개 웹 실측값. 라이트 전용, 다크는 공통 name: "Samsung", swatch: ["#FFFFFF", "#F7F7F7", "#1428A0", "#000000"], }, { id: "clean-blue", // id 는 저장된 값 호환 위해 유지 — 실제 토큰은 derive.ts 워크스페이스(ABAP_OPENCODE) 값 name: "워크스페이스", swatch: ["#FAFBFC", "#F2F3F5", "#3563E9", "#1A1D22"], }, // Sheet 1 { id: "dark-teal", name: "Dark Teal", swatch: ["#1A222B", "#2D3540", "#009E9F", "#ECECEC"] }, { id: "mint", name: "Mint", swatch: ["#DEF5F4", "#B8DDD8", "#87C5BF", "#5DAEA9"] }, { id: "steel-navy", name: "Steel Navy", swatch: ["#F5F5F7", "#DCE0E8", "#4A6FA5", "#14253E"] }, { id: "coral-cream", name: "Coral Cream", swatch: ["#FCE9D9", "#FBD2C9", "#FBB1AB", "#FA8B85"] }, { id: "dusty-rose", name: "Dusty Rose", swatch: ["#FFCBC9", "#FBE3E1", "#DDDED7", "#837C99"] }, { id: "warm-tan", name: "Warm Tan", swatch: ["#8B7B68", "#A38F7C", "#C9B8A4", "#EFE0CB"] }, { id: "lavender-navy", name: "Lavender Navy", swatch: ["#EDE7F1", "#DBD3F0", "#9E9CC4", "#3F3D6A"], }, { id: "ocean-blue", name: "Ocean Blue", swatch: ["#1B2734", "#114870", "#1F86B6", "#BFDCEB"] }, { id: "steel-slate", name: "Steel Slate", swatch: ["#2D3845", "#4E5B6A", "#8C97A3", "#D7DBE2"] }, { id: "vivid-teal", name: "Vivid Teal", swatch: ["#20D0C7", "#1F2329", "#FF2A55", "#E4E2E0"] }, { id: "sunset", name: "Sunset", swatch: ["#FCE545", "#F4854A", "#BB346E", "#6F215C"] }, // Sheet 2 { id: "tropical", name: "Tropical", swatch: ["#F37873", "#F8DA75", "#D8F39E", "#6BCFAF"] }, { id: "soft-lavender", name: "Soft Lavender", swatch: ["#B0A8FA", "#A6BFFA", "#D8DCFA", "#DBE2EE"], }, { id: "mocha-cream", name: "Mocha Cream", swatch: ["#B5BEC8", "#ECE2CB", "#C7AC93", "#8B7565"] }, { id: "sky-cream", name: "Sky Cream", swatch: ["#6595B5", "#B7CEDC", "#CFD2D6", "#F1ECDF"] }, { id: "bubblegum", name: "Bubblegum", swatch: ["#B6D9EB", "#B2A3D7", "#F8B5CB", "#FAF1AF"] }, { id: "coral-mint", name: "Coral Mint", swatch: ["#F8B0AC", "#FBE3D9", "#C7E8DD", "#4FB6A8"] }, { id: "nude-tan", name: "Nude Tan", swatch: ["#FBE3CF", "#EDC3AC", "#DAA48E", "#B9876C"] }, { id: "mocha-beige", name: "Mocha Beige", swatch: ["#8E7A65", "#B59E84", "#D7C4AC", "#ECE4D5"] }, { id: "mocha-nude", name: "Mocha Nude", swatch: ["#74564A", "#BD8F7A", "#E0BBA5", "#F2D9C9"] }, { id: "sage", name: "Sage", swatch: ["#ECE6D8", "#B8C5A8", "#D7DDC8", "#6F8364"] }, { id: "vivid-navy", name: "Vivid Navy", swatch: ["#2F4660", "#2EBABE", "#F4F4F6", "#F8285E"] }, { id: "mauve", name: "Mauve", swatch: ["#F8EFE5", "#BC9C9F", "#835C66", "#432F3A"] }, // Sheet 3 (2026-05-08 추가) { id: "charcoal-copper", name: "Charcoal Copper", swatch: ["#2C353D", "#3D4C49", "#90704F", "#D2C5AA"], }, { id: "pink-mint-tea", name: "Pink Mint Tea", swatch: ["#F8D5D5", "#E0D5D3", "#D8E1DA", "#9CDFD7"], }, { id: "soft-blush", name: "Soft Blush", swatch: ["#FAE0E0", "#EAC8C7", "#DCE5E8", "#B7CCD1"] }, { id: "mint-lavender", name: "Mint Lavender", swatch: ["#D7F5F0", "#C5D2EC", "#B5A6E0", "#B58CD3"], }, { id: "steel-cream", name: "Steel Cream", swatch: ["#F1EBDB", "#DDD0BC", "#A4B7C3", "#6F8EA8"] }, { id: "forest-sage", name: "Forest Sage", swatch: ["#E0E9C8", "#9FC195", "#5C9362", "#3A4D35"] }, { id: "mauve-blush", name: "Mauve Blush", swatch: ["#866C6E", "#C4A6A8", "#DEC8C8", "#F2DCDB"] }, { id: "cream-rose", name: "Cream Rose", swatch: ["#F5EEE0", "#F0DDDB", "#E9C7C5", "#C68F88"] }, { id: "sky-whisper", name: "Sky Whisper", swatch: ["#F2F5F4", "#D6E5EF", "#B6D6EB", "#5C9CCF"] }, { id: "slate-sand", name: "Slate Sand", swatch: ["#7C98AC", "#A6B7C2", "#DAD7CF", "#E6DAC1"] }, { id: "coral-plum", name: "Coral Plum", swatch: ["#E47077", "#A75873", "#574460", "#1F4E62"] }, { id: "pale-teal", name: "Pale Teal", swatch: ["#B7CFCB", "#CFE0DC", "#E2EBE6", "#E5E5DC"] }, // Sheet 4 (2026-05-08 추가) — Pantone Color of the Year 2021 조합 { id: "pantone-2021", name: "Pantone 2021", swatch: ["#939597", "#F2DD52", "#56585A", "#F2A007"], }, ] export const DEFAULT_THEME = "samsung" export const PALETTE_BY_ID: Record = Object.fromEntries( PALETTES.map((p) => [p.id, p]) ) export function isValidThemeId(id: string | undefined | null): id is string { return !!id && id in PALETTE_BY_ID }