|
| 1 | +/** |
| 2 | + * Asper Beauty Shop — "Nature Meets Science" Category Icon Set |
| 3 | + * |
| 4 | + * Design DNA: |
| 5 | + * - Style: Nano minimalist — 1.2px ultra-thin lines |
| 6 | + * - Primary: Emerald Green (inherits from parent via currentColor) |
| 7 | + * - Accent: Gold highlights on specific elements |
| 8 | + * - Canvas: 24×24 grid |
| 9 | + * - Corners: 2px radius, slightly softened |
| 10 | + */ |
| 11 | + |
| 12 | +import { cn } from "@/lib/utils"; |
| 13 | + |
| 14 | +interface IconProps { |
| 15 | + className?: string; |
| 16 | + size?: number; |
| 17 | + goldAccent?: boolean; |
| 18 | +} |
| 19 | + |
| 20 | +const base = (size: number, className?: string) => ({ |
| 21 | + width: size, |
| 22 | + height: size, |
| 23 | + viewBox: "0 0 24 24", |
| 24 | + fill: "none", |
| 25 | + stroke: "currentColor", |
| 26 | + strokeWidth: 1.2, |
| 27 | + strokeLinecap: "round" as const, |
| 28 | + strokeLinejoin: "round" as const, |
| 29 | + className: cn("shrink-0", className), |
| 30 | +}); |
| 31 | + |
| 32 | +const GOLD = "#C5A028"; |
| 33 | + |
| 34 | +/** Dropper bottle — Skincare */ |
| 35 | +export function IconCatSkincare({ className, size = 24, goldAccent = true }: IconProps) { |
| 36 | + return ( |
| 37 | + <svg {...base(size, className)}> |
| 38 | + <rect x="8" y="10" width="8" height="11" rx="1.5" /> |
| 39 | + <path d="M10 10V8a2 2 0 0 1 4 0v2" /> |
| 40 | + <path d="M12 5V3" /> |
| 41 | + {/* Gold drop highlight */} |
| 42 | + <circle cx="12" cy="6.5" r="1" fill={goldAccent ? GOLD : "none"} stroke={goldAccent ? GOLD : "currentColor"} strokeWidth="0.8" /> |
| 43 | + </svg> |
| 44 | + ); |
| 45 | +} |
| 46 | + |
| 47 | +/** Capsule — Vitamins & Supplements */ |
| 48 | +export function IconCatVitamins({ className, size = 24, goldAccent = true }: IconProps) { |
| 49 | + return ( |
| 50 | + <svg {...base(size, className)}> |
| 51 | + <rect x="8" y="2" width="8" height="20" rx="4" /> |
| 52 | + {/* Gold dividing line */} |
| 53 | + <line x1="8" y1="12" x2="16" y2="12" stroke={goldAccent ? GOLD : "currentColor"} strokeWidth="1" /> |
| 54 | + <circle cx="10.5" cy="15" r="0.5" fill="currentColor" stroke="none" /> |
| 55 | + <circle cx="13.5" cy="15" r="0.5" fill="currentColor" stroke="none" /> |
| 56 | + <circle cx="12" cy="17.5" r="0.5" fill="currentColor" stroke="none" /> |
| 57 | + </svg> |
| 58 | + ); |
| 59 | +} |
| 60 | + |
| 61 | +/** Mortar & Pestle — Prescriptions */ |
| 62 | +export function IconCatPrescriptions({ className, size = 24, goldAccent = true }: IconProps) { |
| 63 | + return ( |
| 64 | + <svg {...base(size, className)}> |
| 65 | + <path d="M4 16c0 2.5 3.5 5 8 5s8-2.5 8-5" /> |
| 66 | + <path d="M4 16c0-1 1-2 3-3l10 0c2 1 3 2 3 3" /> |
| 67 | + {/* Gold pestle */} |
| 68 | + <line x1="12" y1="4" x2="12" y2="13" stroke={goldAccent ? GOLD : "currentColor"} strokeWidth="1.5" strokeLinecap="round" /> |
| 69 | + <circle cx="12" cy="3.5" r="1.5" fill="none" stroke={goldAccent ? GOLD : "currentColor"} /> |
| 70 | + </svg> |
| 71 | + ); |
| 72 | +} |
| 73 | + |
| 74 | +/** Leaf & Drop — Mother & Baby */ |
| 75 | +export function IconCatMomBaby({ className, size = 24, goldAccent = true }: IconProps) { |
| 76 | + return ( |
| 77 | + <svg {...base(size, className)}> |
| 78 | + {/* Leaf */} |
| 79 | + <path d="M6 18C6 12 10 6 17 4c0 0-1 8-5 11s-6 3-6 3z" /> |
| 80 | + <path d="M6 18c2-2 5-4 8-5" /> |
| 81 | + {/* Gold droplet */} |
| 82 | + <path d="M18 14c-1.5 2-2.5 3.5-2.5 5a2.5 2.5 0 0 0 5 0c0-1.5-1-3-2.5-5z" fill={goldAccent ? GOLD : "none"} stroke={goldAccent ? GOLD : "currentColor"} strokeWidth="0.8" /> |
| 83 | + </svg> |
| 84 | + ); |
| 85 | +} |
| 86 | + |
| 87 | +/** Pump Bottle — Personal Care */ |
| 88 | +export function IconCatPersonalCare({ className, size = 24, goldAccent = true }: IconProps) { |
| 89 | + return ( |
| 90 | + <svg {...base(size, className)}> |
| 91 | + <rect x="7" y="10" width="10" height="11" rx="2" /> |
| 92 | + <rect x="9" y="7" width="6" height="3" rx="1" /> |
| 93 | + {/* Gold pump */} |
| 94 | + <path d="M12 7V4h3" stroke={goldAccent ? GOLD : "currentColor"} strokeWidth="1.2" /> |
| 95 | + <rect x="14" y="3" width="3" height="2" rx="0.5" fill={goldAccent ? GOLD : "none"} stroke={goldAccent ? GOLD : "currentColor"} strokeWidth="0.8" /> |
| 96 | + </svg> |
| 97 | + ); |
| 98 | +} |
| 99 | + |
| 100 | +/** Medical Cross — First Aid */ |
| 101 | +export function IconCatFirstAid({ className, size = 24, goldAccent = true }: IconProps) { |
| 102 | + return ( |
| 103 | + <svg {...base(size, className)}> |
| 104 | + <rect x="3" y="3" width="18" height="18" rx="3" /> |
| 105 | + <path d="M12 8v8M8 12h8" strokeWidth="1.5" /> |
| 106 | + {/* Subtle gold glow circle behind cross */} |
| 107 | + <circle cx="12" cy="12" r="5" fill="none" stroke={goldAccent ? GOLD : "currentColor"} strokeWidth="0.4" opacity="0.5" /> |
| 108 | + </svg> |
| 109 | + ); |
| 110 | +} |
| 111 | + |
| 112 | +/** Toothbrush — Oral Care */ |
| 113 | +export function IconCatOralCare({ className, size = 24, goldAccent = true }: IconProps) { |
| 114 | + return ( |
| 115 | + <svg {...base(size, className)}> |
| 116 | + <rect x="10" y="2" width="4" height="6" rx="2" /> |
| 117 | + <rect x="11" y="8" width="2" height="14" rx="1" /> |
| 118 | + {/* Gold sparkle */} |
| 119 | + <path d="M17 4l-1 1M17 4l1 0M17 4l0-1" stroke={goldAccent ? GOLD : "currentColor"} strokeWidth="1" /> |
| 120 | + </svg> |
| 121 | + ); |
| 122 | +} |
| 123 | + |
| 124 | +/** Shield — Men's Health */ |
| 125 | +export function IconCatMensHealth({ className, size = 24, goldAccent = true }: IconProps) { |
| 126 | + return ( |
| 127 | + <svg {...base(size, className)}> |
| 128 | + <path d="M12 3l7 3v5c0 5-3 8-7 10-4-2-7-5-7-10V6l7-3z" /> |
| 129 | + {/* Gold rim line */} |
| 130 | + <path d="M12 5l5 2.2v3.8c0 3.8-2.2 6.2-5 7.8" stroke={goldAccent ? GOLD : "currentColor"} strokeWidth="0.6" fill="none" /> |
| 131 | + </svg> |
| 132 | + ); |
| 133 | +} |
| 134 | + |
| 135 | +/** Floral — Beauty */ |
| 136 | +export function IconCatBeauty({ className, size = 24, goldAccent = true }: IconProps) { |
| 137 | + return ( |
| 138 | + <svg {...base(size, className)}> |
| 139 | + {/* Petals */} |
| 140 | + <path d="M12 4c-2 2-3 4-3 6s1 3 3 3 3-1 3-3-1-4-3-6z" /> |
| 141 | + <path d="M4 12c2-2 4-3 6-3s3 1 3 3-1 3-3 3-4-1-6-3z" /> |
| 142 | + <path d="M20 12c-2-2-4-3-6-3s-3 1-3 3 1 3 3 3 4-1 6-3z" /> |
| 143 | + <path d="M12 20c-2-2-3-4-3-6s1-3 3-3 3 1 3 3-1 4-3 6z" /> |
| 144 | + {/* Gold center pistil */} |
| 145 | + <circle cx="12" cy="12" r="1.5" fill={goldAccent ? GOLD : "none"} stroke={goldAccent ? GOLD : "currentColor"} /> |
| 146 | + </svg> |
| 147 | + ); |
| 148 | +} |
| 149 | + |
| 150 | +/** Zen Stones — Wellness */ |
| 151 | +export function IconCatWellness({ className, size = 24, goldAccent = true }: IconProps) { |
| 152 | + return ( |
| 153 | + <svg {...base(size, className)}> |
| 154 | + {/* Stacked stones */} |
| 155 | + <ellipse cx="12" cy="19" rx="5" ry="2.5" /> |
| 156 | + <ellipse cx="12" cy="14" rx="4" ry="2" /> |
| 157 | + <ellipse cx="12" cy="10" rx="3" ry="1.5" /> |
| 158 | + {/* Gold leaf accent */} |
| 159 | + <path d="M16 6c0 0-1.5 3-4 3s-2-3-2-3c1-1 3-2 4-1.5s2 1.5 2 1.5z" fill={goldAccent ? GOLD : "none"} stroke={goldAccent ? GOLD : "currentColor"} strokeWidth="0.8" /> |
| 160 | + </svg> |
| 161 | + ); |
| 162 | +} |
| 163 | + |
| 164 | +/** Full category list for navigation */ |
| 165 | +export const categoryList = [ |
| 166 | + { key: "skincare", label: "Skincare", labelAr: "العناية بالبشرة", Icon: IconCatSkincare, href: "/products?category=skincare" }, |
| 167 | + { key: "vitamins", label: "Vitamins", labelAr: "فيتامينات", Icon: IconCatVitamins, href: "/products?category=vitamins" }, |
| 168 | + { key: "prescriptions", label: "Prescriptions", labelAr: "وصفات طبية", Icon: IconCatPrescriptions, href: "/products?category=prescriptions" }, |
| 169 | + { key: "mom-baby", label: "Mother & Baby", labelAr: "الأم والطفل", Icon: IconCatMomBaby, href: "/mom-baby" }, |
| 170 | + { key: "personal-care", label: "Personal Care", labelAr: "العناية الشخصية", Icon: IconCatPersonalCare, href: "/products?category=personal-care" }, |
| 171 | + { key: "first-aid", label: "First Aid", labelAr: "إسعافات أولية", Icon: IconCatFirstAid, href: "/products?category=first-aid" }, |
| 172 | + { key: "oral-care", label: "Oral Care", labelAr: "العناية بالفم", Icon: IconCatOralCare, href: "/products?category=oral-care" }, |
| 173 | + { key: "mens-health", label: "Men's Health", labelAr: "صحة الرجل", Icon: IconCatMensHealth, href: "/products?category=mens-health" }, |
| 174 | + { key: "beauty", label: "Beauty", labelAr: "الجمال", Icon: IconCatBeauty, href: "/products?category=beauty" }, |
| 175 | + { key: "wellness", label: "Wellness", labelAr: "العافية", Icon: IconCatWellness, href: "/products?category=wellness" }, |
| 176 | +] as const; |
0 commit comments