From d44fc67057ed3efb3daa2cc383ead67d12e601a3 Mon Sep 17 00:00:00 2001 From: isWittHere <2468221211@qq.com> Date: Fri, 31 Jul 2026 14:07:06 +0800 Subject: [PATCH] Add Catppuccin file icons Use Latte assets in light mode and Mocha assets in dark mode. --- app/globals.css | 9 + components/FileIcons.tsx | 331 ++++++------------ public/icons/catppuccin/LICENSE | 22 ++ public/icons/catppuccin/README.md | 8 + public/icons/catppuccin/latte/_file.svg | 3 + public/icons/catppuccin/latte/_folder.svg | 3 + .../icons/catppuccin/latte/_folder_open.svg | 3 + public/icons/catppuccin/latte/bash.svg | 7 + public/icons/catppuccin/latte/bun-lock.svg | 8 + public/icons/catppuccin/latte/config.svg | 3 + public/icons/catppuccin/latte/css.svg | 6 + public/icons/catppuccin/latte/database.svg | 3 + public/icons/catppuccin/latte/docker.svg | 3 + public/icons/catppuccin/latte/env.svg | 3 + public/icons/catppuccin/latte/eslint.svg | 6 + public/icons/catppuccin/latte/git.svg | 6 + public/icons/catppuccin/latte/go.svg | 3 + public/icons/catppuccin/latte/graphql.svg | 3 + public/icons/catppuccin/latte/html.svg | 6 + .../catppuccin/latte/javascript-react.svg | 8 + public/icons/catppuccin/latte/javascript.svg | 6 + public/icons/catppuccin/latte/json.svg | 3 + public/icons/catppuccin/latte/lock.svg | 3 + public/icons/catppuccin/latte/markdown.svg | 3 + public/icons/catppuccin/latte/ms-word.svg | 6 + public/icons/catppuccin/latte/next.svg | 6 + public/icons/catppuccin/latte/npm-lock.svg | 7 + public/icons/catppuccin/latte/pdf.svg | 3 + public/icons/catppuccin/latte/python.svg | 8 + public/icons/catppuccin/latte/rust.svg | 6 + public/icons/catppuccin/latte/sass.svg | 3 + public/icons/catppuccin/latte/terraform.svg | 3 + public/icons/catppuccin/latte/toml.svg | 3 + .../catppuccin/latte/typescript-react.svg | 8 + public/icons/catppuccin/latte/typescript.svg | 6 + public/icons/catppuccin/latte/yaml.svg | 3 + public/icons/catppuccin/mocha/_file.svg | 3 + public/icons/catppuccin/mocha/_folder.svg | 3 + .../icons/catppuccin/mocha/_folder_open.svg | 3 + public/icons/catppuccin/mocha/bash.svg | 7 + public/icons/catppuccin/mocha/bun-lock.svg | 8 + public/icons/catppuccin/mocha/config.svg | 3 + public/icons/catppuccin/mocha/css.svg | 6 + public/icons/catppuccin/mocha/database.svg | 3 + public/icons/catppuccin/mocha/docker.svg | 3 + public/icons/catppuccin/mocha/env.svg | 3 + public/icons/catppuccin/mocha/eslint.svg | 6 + public/icons/catppuccin/mocha/git.svg | 6 + public/icons/catppuccin/mocha/go.svg | 3 + public/icons/catppuccin/mocha/graphql.svg | 3 + public/icons/catppuccin/mocha/html.svg | 6 + .../catppuccin/mocha/javascript-react.svg | 8 + public/icons/catppuccin/mocha/javascript.svg | 6 + public/icons/catppuccin/mocha/json.svg | 3 + public/icons/catppuccin/mocha/lock.svg | 3 + public/icons/catppuccin/mocha/markdown.svg | 3 + public/icons/catppuccin/mocha/ms-word.svg | 6 + public/icons/catppuccin/mocha/next.svg | 6 + public/icons/catppuccin/mocha/npm-lock.svg | 7 + public/icons/catppuccin/mocha/pdf.svg | 3 + public/icons/catppuccin/mocha/python.svg | 8 + public/icons/catppuccin/mocha/rust.svg | 6 + public/icons/catppuccin/mocha/sass.svg | 3 + public/icons/catppuccin/mocha/terraform.svg | 3 + public/icons/catppuccin/mocha/toml.svg | 3 + .../catppuccin/mocha/typescript-react.svg | 8 + public/icons/catppuccin/mocha/typescript.svg | 6 + public/icons/catppuccin/mocha/yaml.svg | 3 + 68 files changed, 445 insertions(+), 227 deletions(-) create mode 100644 public/icons/catppuccin/LICENSE create mode 100644 public/icons/catppuccin/README.md create mode 100644 public/icons/catppuccin/latte/_file.svg create mode 100644 public/icons/catppuccin/latte/_folder.svg create mode 100644 public/icons/catppuccin/latte/_folder_open.svg create mode 100644 public/icons/catppuccin/latte/bash.svg create mode 100644 public/icons/catppuccin/latte/bun-lock.svg create mode 100644 public/icons/catppuccin/latte/config.svg create mode 100644 public/icons/catppuccin/latte/css.svg create mode 100644 public/icons/catppuccin/latte/database.svg create mode 100644 public/icons/catppuccin/latte/docker.svg create mode 100644 public/icons/catppuccin/latte/env.svg create mode 100644 public/icons/catppuccin/latte/eslint.svg create mode 100644 public/icons/catppuccin/latte/git.svg create mode 100644 public/icons/catppuccin/latte/go.svg create mode 100644 public/icons/catppuccin/latte/graphql.svg create mode 100644 public/icons/catppuccin/latte/html.svg create mode 100644 public/icons/catppuccin/latte/javascript-react.svg create mode 100644 public/icons/catppuccin/latte/javascript.svg create mode 100644 public/icons/catppuccin/latte/json.svg create mode 100644 public/icons/catppuccin/latte/lock.svg create mode 100644 public/icons/catppuccin/latte/markdown.svg create mode 100644 public/icons/catppuccin/latte/ms-word.svg create mode 100644 public/icons/catppuccin/latte/next.svg create mode 100644 public/icons/catppuccin/latte/npm-lock.svg create mode 100644 public/icons/catppuccin/latte/pdf.svg create mode 100644 public/icons/catppuccin/latte/python.svg create mode 100644 public/icons/catppuccin/latte/rust.svg create mode 100644 public/icons/catppuccin/latte/sass.svg create mode 100644 public/icons/catppuccin/latte/terraform.svg create mode 100644 public/icons/catppuccin/latte/toml.svg create mode 100644 public/icons/catppuccin/latte/typescript-react.svg create mode 100644 public/icons/catppuccin/latte/typescript.svg create mode 100644 public/icons/catppuccin/latte/yaml.svg create mode 100644 public/icons/catppuccin/mocha/_file.svg create mode 100644 public/icons/catppuccin/mocha/_folder.svg create mode 100644 public/icons/catppuccin/mocha/_folder_open.svg create mode 100644 public/icons/catppuccin/mocha/bash.svg create mode 100644 public/icons/catppuccin/mocha/bun-lock.svg create mode 100644 public/icons/catppuccin/mocha/config.svg create mode 100644 public/icons/catppuccin/mocha/css.svg create mode 100644 public/icons/catppuccin/mocha/database.svg create mode 100644 public/icons/catppuccin/mocha/docker.svg create mode 100644 public/icons/catppuccin/mocha/env.svg create mode 100644 public/icons/catppuccin/mocha/eslint.svg create mode 100644 public/icons/catppuccin/mocha/git.svg create mode 100644 public/icons/catppuccin/mocha/go.svg create mode 100644 public/icons/catppuccin/mocha/graphql.svg create mode 100644 public/icons/catppuccin/mocha/html.svg create mode 100644 public/icons/catppuccin/mocha/javascript-react.svg create mode 100644 public/icons/catppuccin/mocha/javascript.svg create mode 100644 public/icons/catppuccin/mocha/json.svg create mode 100644 public/icons/catppuccin/mocha/lock.svg create mode 100644 public/icons/catppuccin/mocha/markdown.svg create mode 100644 public/icons/catppuccin/mocha/ms-word.svg create mode 100644 public/icons/catppuccin/mocha/next.svg create mode 100644 public/icons/catppuccin/mocha/npm-lock.svg create mode 100644 public/icons/catppuccin/mocha/pdf.svg create mode 100644 public/icons/catppuccin/mocha/python.svg create mode 100644 public/icons/catppuccin/mocha/rust.svg create mode 100644 public/icons/catppuccin/mocha/sass.svg create mode 100644 public/icons/catppuccin/mocha/terraform.svg create mode 100644 public/icons/catppuccin/mocha/toml.svg create mode 100644 public/icons/catppuccin/mocha/typescript-react.svg create mode 100644 public/icons/catppuccin/mocha/typescript.svg create mode 100644 public/icons/catppuccin/mocha/yaml.svg diff --git a/app/globals.css b/app/globals.css index 6b8508af4..696d0810b 100644 --- a/app/globals.css +++ b/app/globals.css @@ -52,6 +52,15 @@ html.dark { --bg-subtle: rgba(255,255,255,0.04); } +.catppuccin-file-icon { + display: block; + flex-shrink: 0; + background: center / contain no-repeat var(--catppuccin-icon-light); +} +html.dark .catppuccin-file-icon { + background-image: var(--catppuccin-icon-dark); +} + /* Theme toggle: circular wipe via View Transitions API. Disable the UA cross-fade; the actual clip-path animation is driven by Element.animate() in hooks/useTheme.ts after transition.ready resolves. */ diff --git a/components/FileIcons.tsx b/components/FileIcons.tsx index 6ce7a9a64..b46d21a91 100644 --- a/components/FileIcons.tsx +++ b/components/FileIcons.tsx @@ -1,249 +1,126 @@ -// Flat monochrome file & folder icons — all use currentColor / var(--text-dim) +import type { CSSProperties } from "react"; + interface IconProps { size?: number; } -const DIM = "var(--text-dim)"; +type CatppuccinIconName = + | "_file" + | "_folder" + | "_folder_open" + | "bash" + | "config" + | "css" + | "database" + | "docker" + | "env" + | "git" + | "graphql" + | "html" + | "javascript" + | "javascript-react" + | "json" + | "lock" + | "npm-lock" + | "bun-lock" + | "next" + | "eslint" + | "markdown" + | "ms-word" + | "pdf" + | "python" + | "rust" + | "sass" + | "terraform" + | "toml" + | "typescript" + | "typescript-react" + | "yaml" + | "go"; -// ── Folder ──────────────────────────────────────────────────────────────── +const CATPPUCCIN_ICONS_ROOT = "/icons/catppuccin"; -export function FolderIcon({ size = 14, open = false }: IconProps & { open?: boolean }) { - if (open) { - return ( - - - - - ); - } - return ( - - - - ); -} - -// ── Generic file (fallback) ──────────────────────────────────────────────── +function CatppuccinIcon({ name, size = 14 }: IconProps & { name: CatppuccinIconName }) { + const style = { + width: size, + height: size, + "--catppuccin-icon-light": `url(${CATPPUCCIN_ICONS_ROOT}/latte/${name}.svg)`, + "--catppuccin-icon-dark": `url(${CATPPUCCIN_ICONS_ROOT}/mocha/${name}.svg)`, + } as CSSProperties; -export function GenericFileIcon({ size = 14 }: IconProps) { return ( - - - - +