repositories
loading repo index
repositories
loading repo index
repository
loading code, commits, and activity
Fastfood QR
stars
latest
clone command
git clone gitlawb://did:key:z6Mkfh4Y...QBEi/fastfood-qrgit clone gitlawb://did:key:z6Mkfh4Y.../fastfood-qr3042a875sync from playground22h ago| #1 | interface IconProps { |
| #2 | size?: number; |
| #3 | className?: string; |
| #4 | } |
| #5 | |
| #6 | const svgProps = (size: number, className?: string) => ({ |
| #7 | width: size, |
| #8 | height: size, |
| #9 | viewBox: '0 0 24 24', |
| #10 | fill: 'none', |
| #11 | stroke: 'currentColor', |
| #12 | strokeWidth: 1.75, |
| #13 | strokeLinecap: 'round' as const, |
| #14 | strokeLinejoin: 'round' as const, |
| #15 | className, |
| #16 | }); |
| #17 | |
| #18 | export function IconBurger({ size = 24, className }: IconProps) { |
| #19 | return ( |
| #20 | <svg {...svgProps(size, className)}> |
| #21 | <path d="M3 11h18M5 11a7 7 0 0 1 14 0M4 15h16a1 1 0 0 1 1 1v1a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-1a1 1 0 0 1 1-1zM7 11V7a5 5 0 0 1 10 0v4" /> |
| #22 | </svg> |
| #23 | ); |
| #24 | } |
| #25 | |
| #26 | export function IconSmartphone({ size = 24, className }: IconProps) { |
| #27 | return ( |
| #28 | <svg {...svgProps(size, className)}> |
| #29 | <rect x="5" y="2" width="14" height="20" rx="2" ry="2" /> |
| #30 | <line x1="12" y1="18" x2="12" y2="18" /> |
| #31 | </svg> |
| #32 | ); |
| #33 | } |
| #34 | |
| #35 | export function IconMessageCircle({ size = 24, className }: IconProps) { |
| #36 | return ( |
| #37 | <svg {...svgProps(size, className)}> |
| #38 | <path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z" /> |
| #39 | </svg> |
| #40 | ); |
| #41 | } |
| #42 | |
| #43 | export function IconQrCode({ size = 24, className }: IconProps) { |
| #44 | return ( |
| #45 | <svg {...svgProps(size, className)}> |
| #46 | <rect x="2" y="2" width="8" height="8" rx="1" /> |
| #47 | <rect x="14" y="2" width="8" height="8" rx="1" /> |
| #48 | <rect x="2" y="14" width="8" height="8" rx="1" /> |
| #49 | <rect x="14" y="14" width="4" height="4" rx="0.5" /> |
| #50 | <rect x="20" y="14" width="2" height="2" rx="0.25" /> |
| #51 | <rect x="14" y="20" width="2" height="2" rx="0.25" /> |
| #52 | <rect x="20" y="20" width="2" height="2" rx="0.25" /> |
| #53 | </svg> |
| #54 | ); |
| #55 | } |
| #56 | |
| #57 | export function IconZap({ size = 24, className }: IconProps) { |
| #58 | return ( |
| #59 | <svg {...svgProps(size, className)}> |
| #60 | <polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2" /> |
| #61 | </svg> |
| #62 | ); |
| #63 | } |
| #64 | |
| #65 | export function IconMapPin({ size = 24, className }: IconProps) { |
| #66 | return ( |
| #67 | <svg {...svgProps(size, className)}> |
| #68 | <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" /> |
| #69 | <circle cx="12" cy="10" r="3" /> |
| #70 | </svg> |
| #71 | ); |
| #72 | } |
| #73 | |
| #74 | export function IconClock({ size = 24, className }: IconProps) { |
| #75 | return ( |
| #76 | <svg {...svgProps(size, className)}> |
| #77 | <circle cx="12" cy="12" r="10" /> |
| #78 | <polyline points="12 6 12 12 16 14" /> |
| #79 | </svg> |
| #80 | ); |
| #81 | } |
| #82 | |
| #83 | export function IconInstagram({ size = 24, className }: IconProps) { |
| #84 | return ( |
| #85 | <svg {...svgProps(size, className)}> |
| #86 | <rect x="2" y="2" width="20" height="20" rx="5" ry="5" /> |
| #87 | <path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z" /> |
| #88 | <line x1="17.5" y1="6.5" x2="17.51" y2="6.5" /> |
| #89 | </svg> |
| #90 | ); |
| #91 | } |
| #92 | |
| #93 | export function IconCheck({ size = 24, className }: IconProps) { |
| #94 | return ( |
| #95 | <svg {...svgProps(size, className)}> |
| #96 | <polyline points="20 6 9 17 4 12" /> |
| #97 | </svg> |
| #98 | ); |
| #99 | } |
| #100 | |
| #101 | export function IconX({ size = 24, className }: IconProps) { |
| #102 | return ( |
| #103 | <svg {...svgProps(size, className)}> |
| #104 | <line x1="18" y1="6" x2="6" y2="18" /> |
| #105 | <line x1="6" y1="6" x2="18" y2="18" /> |
| #106 | </svg> |
| #107 | ); |
| #108 | } |
| #109 | |
| #110 | export function IconSun({ size = 24, className }: IconProps) { |
| #111 | return ( |
| #112 | <svg {...svgProps(size, className)}> |
| #113 | <circle cx="12" cy="12" r="5" /> |
| #114 | <line x1="12" y1="1" x2="12" y2="3" /> |
| #115 | <line x1="12" y1="21" x2="12" y2="23" /> |
| #116 | <line x1="4.22" y1="4.22" x2="5.64" y2="5.64" /> |
| #117 | <line x1="18.36" y1="18.36" x2="19.78" y2="19.78" /> |
| #118 | <line x1="1" y1="12" x2="3" y2="12" /> |
| #119 | <line x1="21" y1="12" x2="23" y2="12" /> |
| #120 | <line x1="4.22" y1="19.78" x2="5.64" y2="18.36" /> |
| #121 | <line x1="18.36" y1="5.64" x2="19.78" y2="4.22" /> |
| #122 | </svg> |
| #123 | ); |
| #124 | } |
| #125 | |
| #126 | export function IconMoon({ size = 24, className }: IconProps) { |
| #127 | return ( |
| #128 | <svg {...svgProps(size, className)}> |
| #129 | <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" /> |
| #130 | </svg> |
| #131 | ); |
| #132 | } |
| #133 | |
| #134 | export function IconUtensils({ size = 24, className }: IconProps) { |
| #135 | return ( |
| #136 | <svg {...svgProps(size, className)}> |
| #137 | <path d="M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2" /> |
| #138 | <path d="M7 2v20" /> |
| #139 | <path d="M21 15V2v0a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3zm0 0v7" /> |
| #140 | </svg> |
| #141 | ); |
| #142 | } |
| #143 | |
| #144 | export function IconFries({ size = 24, className }: IconProps) { |
| #145 | return ( |
| #146 | <svg {...svgProps(size, className)}> |
| #147 | <path d="M5 18h14" /> |
| #148 | <path d="M6 18V8a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v10" /> |
| #149 | <path d="M9 7V3" /> |
| #150 | <path d="M12 7V2" /> |
| #151 | <path d="M15 7V4" /> |
| #152 | <path d="M8 12h8" /> |
| #153 | </svg> |
| #154 | ); |
| #155 | } |
| #156 | |
| #157 | export function IconCoffee({ size = 24, className }: IconProps) { |
| #158 | return ( |
| #159 | <svg {...svgProps(size, className)}> |
| #160 | <path d="M18 8h1a4 4 0 0 1 0 8h-1" /> |
| #161 | <path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z" /> |
| #162 | <line x1="6" y1="1" x2="6" y2="4" /> |
| #163 | <line x1="10" y1="1" x2="10" y2="4" /> |
| #164 | <line x1="14" y1="1" x2="14" y2="4" /> |
| #165 | </svg> |
| #166 | ); |
| #167 | } |
| #168 | |
| #169 | export function IconCake({ size = 24, className }: IconProps) { |
| #170 | return ( |
| #171 | <svg {...svgProps(size, className)}> |
| #172 | <path d="M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8" /> |
| #173 | <path d="M4 16s.5-1 2-1 2.5 2 4 2 2.5-2 4-2 2.5 2 4 2 2-1 2-1" /> |
| #174 | <path d="M2 21h20" /> |
| #175 | <path d="M7 8v3" /> |
| #176 | <path d="M12 8v3" /> |
| #177 | <path d="M17 8v3" /> |
| #178 | <path d="M7 4h.01" /> |
| #179 | <path d="M12 4h.01" /> |
| #180 | <path d="M17 4h.01" /> |
| #181 | </svg> |
| #182 | ); |
| #183 | } |
| #184 | |
| #185 | export function IconPizza({ size = 24, className }: IconProps) { |
| #186 | return ( |
| #187 | <svg {...svgProps(size, className)}> |
| #188 | <path d="M12 2C7.03 2 2.73 5.11 1 9.5l11 12.5 11-12.5C21.27 5.11 16.97 2 12 2z" /> |
| #189 | <circle cx="10" cy="9" r="1" fill="currentColor" stroke="none" /> |
| #190 | <circle cx="14" cy="12" r="1" fill="currentColor" stroke="none" /> |
| #191 | <circle cx="11" cy="14" r="1" fill="currentColor" stroke="none" /> |
| #192 | </svg> |
| #193 | ); |
| #194 | } |
| #195 | |
| #196 | export function IconStore({ size = 24, className }: IconProps) { |
| #197 | return ( |
| #198 | <svg {...svgProps(size, className)}> |
| #199 | <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" /> |
| #200 | <polyline points="9 22 9 12 15 12 15 22" /> |
| #201 | </svg> |
| #202 | ); |
| #203 | } |
| #204 | |
| #205 | export function IconWhatsapp({ size = 24, className }: IconProps) { |
| #206 | return ( |
| #207 | <svg {...svgProps(size, className)}> |
| #208 | <path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z" /> |
| #209 | </svg> |
| #210 | ); |
| #211 | } |
| #212 | |
| #213 | export function IconShoppingCart({ size = 24, className }: IconProps) { |
| #214 | return ( |
| #215 | <svg {...svgProps(size, className)}> |
| #216 | <circle cx="9" cy="21" r="1" /> |
| #217 | <circle cx="20" cy="21" r="1" /> |
| #218 | <path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6" /> |
| #219 | </svg> |
| #220 | ); |
| #221 | } |
| #222 | |
| #223 | export function IconPlus({ size = 24, className }: IconProps) { |
| #224 | return ( |
| #225 | <svg {...svgProps(size, className)}> |
| #226 | <line x1="12" y1="5" x2="12" y2="19" /> |
| #227 | <line x1="5" y1="12" x2="19" y2="12" /> |
| #228 | </svg> |
| #229 | ); |
| #230 | } |
| #231 | |
| #232 | export function IconMinus({ size = 24, className }: IconProps) { |
| #233 | return ( |
| #234 | <svg {...svgProps(size, className)}> |
| #235 | <line x1="5" y1="12" x2="19" y2="12" /> |
| #236 | </svg> |
| #237 | ); |
| #238 | } |
| #239 | |
| #240 | export function IconTrash({ size = 24, className }: IconProps) { |
| #241 | return ( |
| #242 | <svg {...svgProps(size, className)}> |
| #243 | <polyline points="3 6 5 6 21 6" /> |
| #244 | <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" /> |
| #245 | <line x1="10" y1="11" x2="10" y2="17" /> |
| #246 | <line x1="14" y1="11" x2="14" y2="17" /> |
| #247 | </svg> |
| #248 | ); |
| #249 | } |
| #250 | |
| #251 | export function IconEdit({ size = 24, className }: IconProps) { |
| #252 | return ( |
| #253 | <svg {...svgProps(size, className)}> |
| #254 | <path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" /> |
| #255 | <path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" /> |
| #256 | </svg> |
| #257 | ); |
| #258 | } |
| #259 | |
| #260 | export function IconDownload({ size = 24, className }: IconProps) { |
| #261 | return ( |
| #262 | <svg {...svgProps(size, className)}> |
| #263 | <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" /> |
| #264 | <polyline points="7 10 12 15 17 10" /> |
| #265 | <line x1="12" y1="15" x2="12" y2="3" /> |
| #266 | </svg> |
| #267 | ); |
| #268 | } |
| #269 | |
| #270 | export function IconCopy({ size = 24, className }: IconProps) { |
| #271 | return ( |
| #272 | <svg {...svgProps(size, className)}> |
| #273 | <rect x="9" y="9" width="13" height="13" rx="2" ry="2" /> |
| #274 | <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" /> |
| #275 | </svg> |
| #276 | ); |
| #277 | } |
| #278 | |
| #279 | export function IconLogout({ size = 24, className }: IconProps) { |
| #280 | return ( |
| #281 | <svg {...svgProps(size, className)}> |
| #282 | <path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" /> |
| #283 | <polyline points="16 17 21 12 16 7" /> |
| #284 | <line x1="21" y1="12" x2="9" y2="12" /> |
| #285 | </svg> |
| #286 | ); |
| #287 | } |
| #288 | |
| #289 | export function IconEye({ size = 24, className }: IconProps) { |
| #290 | return ( |
| #291 | <svg {...svgProps(size, className)}> |
| #292 | <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" /> |
| #293 | <circle cx="12" cy="12" r="3" /> |
| #294 | </svg> |
| #295 | ); |
| #296 | } |
| #297 | |
| #298 | export function IconChevronDown({ size = 24, className }: IconProps) { |
| #299 | return ( |
| #300 | <svg {...svgProps(size, className)}> |
| #301 | <polyline points="6 9 12 15 18 9" /> |
| #302 | </svg> |
| #303 | ); |
| #304 | } |
| #305 | |
| #306 | export function IconArrowRight({ size = 24, className }: IconProps) { |
| #307 | return ( |
| #308 | <svg {...svgProps(size, className)}> |
| #309 | <line x1="5" y1="12" x2="19" y2="12" /> |
| #310 | <polyline points="12 5 19 12 12 19" /> |
| #311 | </svg> |
| #312 | ); |
| #313 | } |
| #314 | |
| #315 | export function getCategoryIcon(categoryId: string, categories: { id: string; name: string }[]): JSX.Element { |
| #316 | const cat = categories.find((c) => c.id === categoryId); |
| #317 | const name = cat?.name.toLowerCase() ?? ''; |
| #318 | const size = 24; |
| #319 | if (name.includes('burger')) return <IconBurger size={size} />; |
| #320 | if (name.includes('side') || name.includes('fries')) return <IconFries size={size} />; |
| #321 | if (name.includes('drink') || name.includes('beverage')) return <IconCoffee size={size} />; |
| #322 | if (name.includes('dessert') || name.includes('sweet')) return <IconCake size={size} />; |
| #323 | if (name.includes('pizza')) return <IconPizza size={size} />; |
| #324 | return <IconUtensils size={size} />; |
| #325 | } |
| #326 |