From d1776c622f4d8ed29d3967a987990bde310e8bb1 Mon Sep 17 00:00:00 2001 From: Jordan Roher Date: Wed, 19 Apr 2023 18:10:21 -0700 Subject: [PATCH] Icon background colors --- public/icons/gitea.png | Bin 0 -> 16840 bytes src/components/icon.tsx | 69 +++++++++++++++++++++++++++++------- src/components/services.tsx | 17 ++++++--- src/shared/types.ts | 5 +++ tailwind.config.js | 18 ++++++++++ 5 files changed, 92 insertions(+), 17 deletions(-) create mode 100644 public/icons/gitea.png diff --git a/public/icons/gitea.png b/public/icons/gitea.png new file mode 100644 index 0000000000000000000000000000000000000000..ad1abe240926cd128925a593a0f04a75572abcd8 GIT binary patch literal 16840 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 `bg-${iconColors[iconColors.length % index]}-${iconLevel}`; + interface IProps { + index: number; icon?: IIcon; uri?: string; } -export const Icon: React.FunctionComponent = ({ uri, icon }) => { +export const Icon: React.FunctionComponent = ({ uri, icon, index }) => { if (is.null(icon)) { - return null; + return ; } if (!is.null(uri)) { return ( - + ); } - return ; + return ; }; -const IconBase: React.FunctionComponent = ({ href, alt, title }) => ( - {alt} -); +interface IIconBlankProps { + index: number; +} + +const IconBlank: React.FunctionComponent = ({ index }) => { + return ( + + ); +}; + +interface IIconBaseProps { + icon: IIcon; + index: number; +} + +const IconBase: React.FunctionComponent = ({ icon, index }) => { + const { href, alt, title } = icon; + + return ( + {alt} + ); +}; diff --git a/src/components/services.tsx b/src/components/services.tsx index 1063e00..e04d4fd 100644 --- a/src/components/services.tsx +++ b/src/components/services.tsx @@ -3,24 +3,31 @@ import { is } from "../shared/is"; import { IService } from "../shared/types"; import { Icon } from "./icon"; -interface IProps { +interface IServicesProps { services: IService[]; } -export const Services: React.FunctionComponent = ({ services }) => { +export const Services: React.FunctionComponent = ({ services }) => { return (
    {services.map((service, index) => ( - + ))}
); }; -const Service: React.FunctionComponent = ({ name, uri, description, icon }) => { +interface IServiceProps { + service: IService; + index: number; +} + +const Service: React.FunctionComponent = ({ service, index }) => { + const { name, uri, description, icon } = service; + return (
  • - {!is.null(icon) && } +

    {name}

    diff --git a/src/shared/types.ts b/src/shared/types.ts index 93bb970..bf885eb 100644 --- a/src/shared/types.ts +++ b/src/shared/types.ts @@ -24,9 +24,14 @@ export const FAKE_SERVICES: IService[] = [ { name: "Calibre", uri: "https://calibre.starbase80.dev", + description: "eBook library", }, { name: "Gitea", uri: "https://git.starbase80.dev", + description: "Code hosting", + icon: { + href: "/icons/gitea.png", + }, }, ]; diff --git a/tailwind.config.js b/tailwind.config.js index b77c554..64046fe 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,6 +1,24 @@ /** @type {import('tailwindcss').Config} */ export default { content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], + safelist: [ + /* Built from icon.tsx */ + "bg-blue-300", + "bg-rose-300", + "bg-green-300", + "bg-red-300", + "bg-yellow-300", + "bg-cyan-300", + "bg-pink-300", + "bg-orange-300", + "bg-sky-300", + "bg-slate-300", + "bg-emerald-300", + "bg-zinc-300", + "bg-neutral-300", + "bg-amber-300", + "bg-violet-300", + ], theme: { extend: { colors: {