1import { Rating } from "@/components/ui/pxl/rating"2
3export default function RatingDemo() {4 return <Rating rating={4} />5}Installation
Section titled “Installation”pnpm dlx shadcn@latest add pxl-ui/registry/rating
Copy and paste the following code into your project.
1import { cva, type VariantProps } from "class-variance-authority";2import { type ComponentType, type SVGProps, useMemo, useState } from "react";3
4import { cn } from "@/lib/utils";5
6const ratingVariants = cva("flex items-center", {7 variants: {8 size: {9 sm: "gap-2",10 default: "gap-2.5",11 lg: "gap-3",12 },13 border: {14 none: "",15 solid: "",16 },17 variant: {18 default: "",19 blue: "",20 yellow: "",21 pink: "",22 green: "",23 },24 },25 defaultVariants: {26 size: "default",27 border: "solid",28 variant: "default",29 },30});31
32const iconVariants = cva("group/icon", {33 variants: {34 size: {35 sm: "w-4 h-4",36 default: "w-5 h-5",37 lg: "w-6 h-6",38 },39 border: {40 none: "",41 solid: "",42 },43 variant: {44 default: "fill-muted-foreground/10 data-[filled=true]:fill-yellow-400",45 blue: "fill-blue-100 data-[filled=true]:fill-blue-400 dark:fill-blue-950",46 yellow:47 "fill-yellow-100 data-[filled=true]:fill-yellow-400 dark:fill-yellow-950",48 pink: "fill-pink-100 data-[filled=true]:fill-pink-400 dark:fill-pink-950",49 green:50 "fill-green-100 data-[filled=true]:fill-green-400 dark:fill-green-950",51 },52 },53 defaultVariants: {54 size: "default",55 border: "solid",56 variant: "default",57 },58 compoundVariants: [59 {60 variant: "default",61 border: "solid",62 className:63 "[&>path:nth-child(2)]:fill-muted-foreground/30 data-[filled=true]:[&>path:nth-child(2)]:fill-yellow-600",64 },65 {66 variant: "blue",67 border: "solid",68 className:69 "[&>path:nth-child(2)]:fill-blue-200 data-[filled=true]:[&>path:nth-child(2)]:fill-blue-600 dark:[&>path:nth-child(2)]:fill-blue-800",70 },71 {72 variant: "green",73 border: "solid",74 className:75 "[&>path:nth-child(2)]:fill-green-200 data-[filled=true]:[&>path:nth-child(2)]:fill-green-600 dark:[&>path:nth-child(2)]:fill-green-800",76 },77 {78 variant: "pink",79 border: "solid",80 className:81 "[&>path:nth-child(2)]:fill-pink-200 data-[filled=true]:[&>path:nth-child(2)]:fill-pink-600 dark:[&>path:nth-child(2)]:fill-pink-800",82 },83 {84 variant: "yellow",85 border: "solid",86 className:87 "[&>path:nth-child(2)]:fill-yellow-200 data-[filled=true]:[&>path:nth-child(2)]:fill-yellow-600 dark:[&>path:nth-child(2)]:fill-yellow-800",88 },89 ],90});91
92const valueVariants = cva("text-muted-foreground w-5", {93 variants: {94 size: {95 sm: "text-xs",96 default: "text-sm",97 lg: "text-base",98 },99 },100 defaultVariants: {101 size: "default",102 },103});104
105const RatingIcon = {106 Emoji({107 className,108 filled = false,109 value = 0,110 ...props111 }: SVGProps<SVGSVGElement> & {112 filled?: boolean;113 value?: number;114 }) {115 if (value <= 1) {116 return (117 <svg118 className={cn(className, !filled && "grayscale-80")}119 viewBox="0 0 16 16"120 xmlns="http://www.w3.org/2000/svg"121 {...props}122 >123 <rect x="6" y="1" width="1" height="1" fill="#0E0C0C" />124 <rect x="7" y="1" width="1" height="1" fill="#0E0C0C" />125 <rect x="8" y="1" width="1" height="1" fill="#0E0C0C" />126 <rect x="9" y="1" width="1" height="1" fill="#0E0C0C" />127 <rect x="4" y="2" width="1" height="1" fill="#0E0C0C" />128 <rect x="5" y="2" width="1" height="1" fill="#0E0C0C" />129 <rect x="6" y="2" width="1" height="1" fill="#FA8070" />130 <rect x="7" y="2" width="1" height="1" fill="#F03E1F" />131 <rect x="8" y="2" width="1" height="1" fill="#F03E1F" />132 <rect x="9" y="2" width="1" height="1" fill="#F03E1F" />133 <rect x="10" y="2" width="1" height="1" fill="#0E0C0C" />134 <rect x="11" y="2" width="1" height="1" fill="#0E0C0C" />135 <rect x="3" y="3" width="1" height="1" fill="#0E0C0C" />136 <rect x="4" y="3" width="1" height="1" fill="#FA8070" />137 <rect x="5" y="3" width="1" height="1" fill="#FA8070" />138 <rect x="6" y="3" width="1" height="1" fill="#F03E1F" />139 <rect x="7" y="3" width="1" height="1" fill="#F03E1F" />140 <rect x="8" y="3" width="1" height="1" fill="#F03E1F" />141 <rect x="9" y="3" width="1" height="1" fill="#F03E1F" />142 <rect x="10" y="3" width="1" height="1" fill="#F03E1F" />143 <rect x="11" y="3" width="1" height="1" fill="#F03E1F" />144 <rect x="12" y="3" width="1" height="1" fill="#0E0C0C" />145 <rect x="2" y="4" width="1" height="1" fill="#0E0C0C" />146 <rect x="3" y="4" width="1" height="1" fill="#FA8070" />147 <rect x="4" y="4" width="1" height="1" fill="#F03E1F" />148 <rect x="5" y="4" width="1" height="1" fill="#F03E1F" />149 <rect x="6" y="4" width="1" height="1" fill="#F03E1F" />150 <rect x="7" y="4" width="1" height="1" fill="#F03E1F" />151 <rect x="8" y="4" width="1" height="1" fill="#F03E1F" />152 <rect x="9" y="4" width="1" height="1" fill="#F03E1F" />153 <rect x="10" y="4" width="1" height="1" fill="#F03E1F" />154 <rect x="11" y="4" width="1" height="1" fill="#F03E1F" />155 <rect x="12" y="4" width="1" height="1" fill="#F03E1F" />156 <rect x="13" y="4" width="1" height="1" fill="#0E0C0C" />157 <rect x="2" y="5" width="1" height="1" fill="#0E0C0C" />158 <rect x="3" y="5" width="1" height="1" fill="#F03E1F" />159 <rect x="4" y="5" width="1" height="1" fill="#0E0C0C" />160 <rect x="5" y="5" width="1" height="1" fill="#0E0C0C" />161 <rect x="6" y="5" width="1" height="1" fill="#F03E1F" />162 <rect x="7" y="5" width="1" height="1" fill="#F03E1F" />163 <rect x="8" y="5" width="1" height="1" fill="#F03E1F" />164 <rect x="9" y="5" width="1" height="1" fill="#F03E1F" />165 <rect x="10" y="5" width="1" height="1" fill="#0E0C0C" />166 <rect x="11" y="5" width="1" height="1" fill="#0E0C0C" />167 <rect x="12" y="5" width="1" height="1" fill="#F03E1F" />168 <rect x="13" y="5" width="1" height="1" fill="#0E0C0C" />169 <rect x="1" y="6" width="1" height="1" fill="#0E0C0C" />170 <rect x="2" y="6" width="1" height="1" fill="#F03E1F" />171 <rect x="3" y="6" width="1" height="1" fill="#F03E1F" />172 <rect x="4" y="6" width="1" height="1" fill="#F03E1F" />173 <rect x="5" y="6" width="1" height="1" fill="#F03E1F" />174 <rect x="6" y="6" width="1" height="1" fill="#0E0C0C" />175 <rect x="7" y="6" width="1" height="1" fill="#F03E1F" />176 <rect x="8" y="6" width="1" height="1" fill="#F03E1F" />177 <rect x="9" y="6" width="1" height="1" fill="#0E0C0C" />178 <rect x="10" y="6" width="1" height="1" fill="#F03E1F" />179 <rect x="11" y="6" width="1" height="1" fill="#F03E1F" />180 <rect x="12" y="6" width="1" height="1" fill="#F03E1F" />181 <rect x="13" y="6" width="1" height="1" fill="#B82F1D" />182 <rect x="14" y="6" width="1" height="1" fill="#0E0C0C" />183 <rect x="1" y="7" width="1" height="1" fill="#0E0C0C" />184 <rect x="2" y="7" width="1" height="1" fill="#F03E1F" />185 <rect x="3" y="7" width="1" height="1" fill="#F03E1F" />186 <rect x="4" y="7" width="1" height="1" fill="#F03E1F" />187 <rect x="5" y="7" width="1" height="1" fill="#F03E1F" />188 <rect x="6" y="7" width="1" height="1" fill="#0E0C0C" />189 <rect x="7" y="7" width="1" height="1" fill="#F03E1F" />190 <rect x="8" y="7" width="1" height="1" fill="#F03E1F" />191 <rect x="9" y="7" width="1" height="1" fill="#0E0C0C" />192 <rect x="10" y="7" width="1" height="1" fill="#F03E1F" />193 <rect x="11" y="7" width="1" height="1" fill="#F03E1F" />194 <rect x="12" y="7" width="1" height="1" fill="#F03E1F" />195 <rect x="13" y="7" width="1" height="1" fill="#B82F1D" />196 <rect x="14" y="7" width="1" height="1" fill="#0E0C0C" />197 <rect x="1" y="8" width="1" height="1" fill="#0E0C0C" />198 <rect x="2" y="8" width="1" height="1" fill="#F03E1F" />199 <rect x="3" y="8" width="1" height="1" fill="#F03E1F" />200 <rect x="4" y="8" width="1" height="1" fill="#F03E1F" />201 <rect x="5" y="8" width="1" height="1" fill="#F03E1F" />202 <rect x="6" y="8" width="1" height="1" fill="#F03E1F" />203 <rect x="7" y="8" width="1" height="1" fill="#F03E1F" />204 <rect x="8" y="8" width="1" height="1" fill="#F03E1F" />205 <rect x="9" y="8" width="1" height="1" fill="#F03E1F" />206 <rect x="10" y="8" width="1" height="1" fill="#F03E1F" />207 <rect x="11" y="8" width="1" height="1" fill="#F03E1F" />208 <rect x="12" y="8" width="1" height="1" fill="#F03E1F" />209 <rect x="13" y="8" width="1" height="1" fill="#B82F1D" />210 <rect x="14" y="8" width="1" height="1" fill="#0E0C0C" />211 <rect x="1" y="9" width="1" height="1" fill="#0E0C0C" />212 <rect x="2" y="9" width="1" height="1" fill="#F03E1F" />213 <rect x="3" y="9" width="1" height="1" fill="#F03E1F" />214 <rect x="4" y="9" width="1" height="1" fill="#F03E1F" />215 <rect x="5" y="9" width="1" height="1" fill="#0E0C0C" />216 <rect x="6" y="9" width="1" height="1" fill="#0E0C0C" />217 <rect x="7" y="9" width="1" height="1" fill="#0E0C0C" />218 <rect x="8" y="9" width="1" height="1" fill="#0E0C0C" />219 <rect x="9" y="9" width="1" height="1" fill="#0E0C0C" />220 <rect x="10" y="9" width="1" height="1" fill="#0E0C0C" />221 <rect x="11" y="9" width="1" height="1" fill="#F03E1F" />222 <rect x="12" y="9" width="1" height="1" fill="#F03E1F" />223 <rect x="13" y="9" width="1" height="1" fill="#B82F1D" />224 <rect x="14" y="9" width="1" height="1" fill="#0E0C0C" />225 <rect x="2" y="10" width="1" height="1" fill="#0E0C0C" />226 <rect x="3" y="10" width="1" height="1" fill="#F03E1F" />227 <rect x="4" y="10" width="1" height="1" fill="#0E0C0C" />228 <rect x="5" y="10" width="1" height="1" fill="#F03E1F" />229 <rect x="6" y="10" width="1" height="1" fill="#F03E1F" />230 <rect x="7" y="10" width="1" height="1" fill="#F03E1F" />231 <rect x="8" y="10" width="1" height="1" fill="#F03E1F" />232 <rect x="9" y="10" width="1" height="1" fill="#F03E1F" />233 <rect x="10" y="10" width="1" height="1" fill="#F03E1F" />234 <rect x="11" y="10" width="1" height="1" fill="#0E0C0C" />235 <rect x="12" y="10" width="1" height="1" fill="#B82F1D" />236 <rect x="13" y="10" width="1" height="1" fill="#0E0C0C" />237 <rect x="2" y="11" width="1" height="1" fill="#0E0C0C" />238 <rect x="3" y="11" width="1" height="1" fill="#F03E1F" />239 <rect x="4" y="11" width="1" height="1" fill="#F03E1F" />240 <rect x="5" y="11" width="1" height="1" fill="#F03E1F" />241 <rect x="6" y="11" width="1" height="1" fill="#F03E1F" />242 <rect x="7" y="11" width="1" height="1" fill="#F03E1F" />243 <rect x="8" y="11" width="1" height="1" fill="#F03E1F" />244 <rect x="9" y="11" width="1" height="1" fill="#F03E1F" />245 <rect x="10" y="11" width="1" height="1" fill="#F03E1F" />246 <rect x="11" y="11" width="1" height="1" fill="#F03E1F" />247 <rect x="12" y="11" width="1" height="1" fill="#B82F1D" />248 <rect x="13" y="11" width="1" height="1" fill="#0E0C0C" />249 <rect x="3" y="12" width="1" height="1" fill="#0E0C0C" />250 <rect x="4" y="12" width="1" height="1" fill="#F03E1F" />251 <rect x="5" y="12" width="1" height="1" fill="#F03E1F" />252 <rect x="6" y="12" width="1" height="1" fill="#F03E1F" />253 <rect x="7" y="12" width="1" height="1" fill="#F03E1F" />254 <rect x="8" y="12" width="1" height="1" fill="#F03E1F" />255 <rect x="9" y="12" width="1" height="1" fill="#F03E1F" />256 <rect x="10" y="12" width="1" height="1" fill="#F03E1F" />257 <rect x="11" y="12" width="1" height="1" fill="#B82F1D" />258 <rect x="12" y="12" width="1" height="1" fill="#0E0C0C" />259 <rect x="4" y="13" width="1" height="1" fill="#0E0C0C" />260 <rect x="5" y="13" width="1" height="1" fill="#0E0C0C" />261 <rect x="6" y="13" width="1" height="1" fill="#F03E1F" />262 <rect x="7" y="13" width="1" height="1" fill="#F03E1F" />263 <rect x="8" y="13" width="1" height="1" fill="#F03E1F" />264 <rect x="9" y="13" width="1" height="1" fill="#B82F1D" />265 <rect x="10" y="13" width="1" height="1" fill="#0E0C0C" />266 <rect x="11" y="13" width="1" height="1" fill="#0E0C0C" />267 <rect x="6" y="14" width="1" height="1" fill="#0E0C0C" />268 <rect x="7" y="14" width="1" height="1" fill="#0E0C0C" />269 <rect x="8" y="14" width="1" height="1" fill="#0E0C0C" />270 <rect x="9" y="14" width="1" height="1" fill="#0E0C0C" />271 </svg>272 );273 }274 if (value <= 2) {275 return (276 <svg277 className={cn(className, !filled && "grayscale-80")}278 viewBox="0 0 16 16"279 xmlns="http://www.w3.org/2000/svg"280 {...props}281 >282 <rect x="6" y="1" width="1" height="1" fill="#0E0C0C" />283 <rect x="7" y="1" width="1" height="1" fill="#0E0C0C" />284 <rect x="8" y="1" width="1" height="1" fill="#0E0C0C" />285 <rect x="9" y="1" width="1" height="1" fill="#0E0C0C" />286 <rect x="4" y="2" width="1" height="1" fill="#0E0C0C" />287 <rect x="5" y="2" width="1" height="1" fill="#0E0C0C" />288 <rect x="6" y="2" width="1" height="1" fill="#FFF089" />289 <rect x="7" y="2" width="1" height="1" fill="#F8C53A" />290 <rect x="8" y="2" width="1" height="1" fill="#F8C53A" />291 <rect x="9" y="2" width="1" height="1" fill="#F8C53A" />292 <rect x="10" y="2" width="1" height="1" fill="#0E0C0C" />293 <rect x="11" y="2" width="1" height="1" fill="#0E0C0C" />294 <rect x="3" y="3" width="1" height="1" fill="#0E0C0C" />295 <rect x="4" y="3" width="1" height="1" fill="#FFF089" />296 <rect x="5" y="3" width="1" height="1" fill="#FFF089" />297 <rect x="6" y="3" width="1" height="1" fill="#F8C53A" />298 <rect x="7" y="3" width="1" height="1" fill="#F8C53A" />299 <rect x="8" y="3" width="1" height="1" fill="#F8C53A" />300 <rect x="9" y="3" width="1" height="1" fill="#F8C53A" />301 <rect x="10" y="3" width="1" height="1" fill="#F8C53A" />302 <rect x="11" y="3" width="1" height="1" fill="#F8C53A" />303 <rect x="12" y="3" width="1" height="1" fill="#0E0C0C" />304 <rect x="2" y="4" width="1" height="1" fill="#0E0C0C" />305 <rect x="3" y="4" width="1" height="1" fill="#FFF089" />306 <rect x="4" y="4" width="1" height="1" fill="#F8C53A" />307 <rect x="5" y="4" width="1" height="1" fill="#F8C53A" />308 <rect x="6" y="4" width="1" height="1" fill="#F8C53A" />309 <rect x="7" y="4" width="1" height="1" fill="#F8C53A" />310 <rect x="8" y="4" width="1" height="1" fill="#F8C53A" />311 <rect x="9" y="4" width="1" height="1" fill="#F8C53A" />312 <rect x="10" y="4" width="1" height="1" fill="#F8C53A" />313 <rect x="11" y="4" width="1" height="1" fill="#F8C53A" />314 <rect x="12" y="4" width="1" height="1" fill="#F8C53A" />315 <rect x="13" y="4" width="1" height="1" fill="#0E0C0C" />316 <rect x="2" y="5" width="1" height="1" fill="#0E0C0C" />317 <rect x="3" y="5" width="1" height="1" fill="#F8C53A" />318 <rect x="4" y="5" width="1" height="1" fill="#F8C53A" />319 <rect x="5" y="5" width="1" height="1" fill="#F8C53A" />320 <rect x="6" y="5" width="1" height="1" fill="#0E0C0C" />321 <rect x="7" y="5" width="1" height="1" fill="#F8C53A" />322 <rect x="8" y="5" width="1" height="1" fill="#F8C53A" />323 <rect x="9" y="5" width="1" height="1" fill="#0E0C0C" />324 <rect x="10" y="5" width="1" height="1" fill="#F8C53A" />325 <rect x="11" y="5" width="1" height="1" fill="#F8C53A" />326 <rect x="12" y="5" width="1" height="1" fill="#F8C53A" />327 <rect x="13" y="5" width="1" height="1" fill="#0E0C0C" />328 <rect x="1" y="6" width="1" height="1" fill="#0E0C0C" />329 <rect x="2" y="6" width="1" height="1" fill="#F8C53A" />330 <rect x="3" y="6" width="1" height="1" fill="#F8C53A" />331 <rect x="4" y="6" width="1" height="1" fill="#F8C53A" />332 <rect x="5" y="6" width="1" height="1" fill="#F8C53A" />333 <rect x="6" y="6" width="1" height="1" fill="#0E0C0C" />334 <rect x="7" y="6" width="1" height="1" fill="#F8C53A" />335 <rect x="8" y="6" width="1" height="1" fill="#F8C53A" />336 <rect x="9" y="6" width="1" height="1" fill="#0E0C0C" />337 <rect x="10" y="6" width="1" height="1" fill="#F8C53A" />338 <rect x="11" y="6" width="1" height="1" fill="#F8C53A" />339 <rect x="12" y="6" width="1" height="1" fill="#F8C53A" />340 <rect x="13" y="6" width="1" height="1" fill="#E88A36" />341 <rect x="14" y="6" width="1" height="1" fill="#0E0C0C" />342 <rect x="1" y="7" width="1" height="1" fill="#0E0C0C" />343 <rect x="2" y="7" width="1" height="1" fill="#F8C53A" />344 <rect x="3" y="7" width="1" height="1" fill="#F8C53A" />345 <rect x="4" y="7" width="1" height="1" fill="#F8C53A" />346 <rect x="5" y="7" width="1" height="1" fill="#F8C53A" />347 <rect x="6" y="7" width="1" height="1" fill="#F8C53A" />348 <rect x="7" y="7" width="1" height="1" fill="#F8C53A" />349 <rect x="8" y="7" width="1" height="1" fill="#F8C53A" />350 <rect x="9" y="7" width="1" height="1" fill="#F8C53A" />351 <rect x="10" y="7" width="1" height="1" fill="#F8C53A" />352 <rect x="11" y="7" width="1" height="1" fill="#F8C53A" />353 <rect x="12" y="7" width="1" height="1" fill="#F8C53A" />354 <rect x="13" y="7" width="1" height="1" fill="#E88A36" />355 <rect x="14" y="7" width="1" height="1" fill="#0E0C0C" />356 <rect x="1" y="8" width="1" height="1" fill="#0E0C0C" />357 <rect x="2" y="8" width="1" height="1" fill="#F8C53A" />358 <rect x="3" y="8" width="1" height="1" fill="#F8C53A" />359 <rect x="4" y="8" width="1" height="1" fill="#F8C53A" />360 <rect x="5" y="8" width="1" height="1" fill="#F8C53A" />361 <rect x="6" y="8" width="1" height="1" fill="#F8C53A" />362 <rect x="7" y="8" width="1" height="1" fill="#F8C53A" />363 <rect x="8" y="8" width="1" height="1" fill="#F8C53A" />364 <rect x="9" y="8" width="1" height="1" fill="#F8C53A" />365 <rect x="10" y="8" width="1" height="1" fill="#F8C53A" />366 <rect x="11" y="8" width="1" height="1" fill="#F8C53A" />367 <rect x="12" y="8" width="1" height="1" fill="#F8C53A" />368 <rect x="13" y="8" width="1" height="1" fill="#E88A36" />369 <rect x="14" y="8" width="1" height="1" fill="#0E0C0C" />370 <rect x="1" y="9" width="1" height="1" fill="#0E0C0C" />371 <rect x="2" y="9" width="1" height="1" fill="#F8C53A" />372 <rect x="3" y="9" width="1" height="1" fill="#F8C53A" />373 <rect x="4" y="9" width="1" height="1" fill="#F8C53A" />374 <rect x="5" y="9" width="1" height="1" fill="#F8C53A" />375 <rect x="6" y="9" width="1" height="1" fill="#0E0C0C" />376 <rect x="7" y="9" width="1" height="1" fill="#0E0C0C" />377 <rect x="8" y="9" width="1" height="1" fill="#0E0C0C" />378 <rect x="9" y="9" width="1" height="1" fill="#0E0C0C" />379 <rect x="10" y="9" width="1" height="1" fill="#F8C53A" />380 <rect x="11" y="9" width="1" height="1" fill="#F8C53A" />381 <rect x="12" y="9" width="1" height="1" fill="#F8C53A" />382 <rect x="13" y="9" width="1" height="1" fill="#E88A36" />383 <rect x="14" y="9" width="1" height="1" fill="#0E0C0C" />384 <rect x="2" y="10" width="1" height="1" fill="#0E0C0C" />385 <rect x="3" y="10" width="1" height="1" fill="#F8C53A" />386 <rect x="4" y="10" width="1" height="1" fill="#F8C53A" />387 <rect x="5" y="10" width="1" height="1" fill="#0E0C0C" />388 <rect x="6" y="10" width="1" height="1" fill="#F8C53A" />389 <rect x="7" y="10" width="1" height="1" fill="#F8C53A" />390 <rect x="8" y="10" width="1" height="1" fill="#F8C53A" />391 <rect x="9" y="10" width="1" height="1" fill="#F8C53A" />392 <rect x="10" y="10" width="1" height="1" fill="#0E0C0C" />393 <rect x="11" y="10" width="1" height="1" fill="#F8C53A" />394 <rect x="12" y="10" width="1" height="1" fill="#E88A36" />395 <rect x="13" y="10" width="1" height="1" fill="#0E0C0C" />396 <rect x="2" y="11" width="1" height="1" fill="#0E0C0C" />397 <rect x="3" y="11" width="1" height="1" fill="#F8C53A" />398 <rect x="4" y="11" width="1" height="1" fill="#0E0C0C" />399 <rect x="5" y="11" width="1" height="1" fill="#F8C53A" />400 <rect x="6" y="11" width="1" height="1" fill="#F8C53A" />401 <rect x="7" y="11" width="1" height="1" fill="#F8C53A" />402 <rect x="8" y="11" width="1" height="1" fill="#F8C53A" />403 <rect x="9" y="11" width="1" height="1" fill="#F8C53A" />404 <rect x="10" y="11" width="1" height="1" fill="#F8C53A" />405 <rect x="11" y="11" width="1" height="1" fill="#0E0C0C" />406 <rect x="12" y="11" width="1" height="1" fill="#E88A36" />407 <rect x="13" y="11" width="1" height="1" fill="#0E0C0C" />408 <rect x="3" y="12" width="1" height="1" fill="#0E0C0C" />409 <rect x="4" y="12" width="1" height="1" fill="#F8C53A" />410 <rect x="5" y="12" width="1" height="1" fill="#F8C53A" />411 <rect x="6" y="12" width="1" height="1" fill="#F8C53A" />412 <rect x="7" y="12" width="1" height="1" fill="#F8C53A" />413 <rect x="8" y="12" width="1" height="1" fill="#F8C53A" />414 <rect x="9" y="12" width="1" height="1" fill="#F8C53A" />415 <rect x="10" y="12" width="1" height="1" fill="#F8C53A" />416 <rect x="11" y="12" width="1" height="1" fill="#E88A36" />417 <rect x="12" y="12" width="1" height="1" fill="#0E0C0C" />418 <rect x="4" y="13" width="1" height="1" fill="#0E0C0C" />419 <rect x="5" y="13" width="1" height="1" fill="#0E0C0C" />420 <rect x="6" y="13" width="1" height="1" fill="#F8C53A" />421 <rect x="7" y="13" width="1" height="1" fill="#F8C53A" />422 <rect x="8" y="13" width="1" height="1" fill="#F8C53A" />423 <rect x="9" y="13" width="1" height="1" fill="#E88A36" />424 <rect x="10" y="13" width="1" height="1" fill="#0E0C0C" />425 <rect x="11" y="13" width="1" height="1" fill="#0E0C0C" />426 <rect x="6" y="14" width="1" height="1" fill="#0E0C0C" />427 <rect x="7" y="14" width="1" height="1" fill="#0E0C0C" />428 <rect x="8" y="14" width="1" height="1" fill="#0E0C0C" />429 <rect x="9" y="14" width="1" height="1" fill="#0E0C0C" />430 </svg>431 );432 }433 if (value <= 3) {434 return (435 <svg436 className={cn(className, !filled && "grayscale-80")}437 viewBox="0 0 16 16"438 xmlns="http://www.w3.org/2000/svg"439 {...props}440 >441 <rect x="6" y="1" width="1" height="1" fill="#0E0C0C" />442 <rect x="7" y="1" width="1" height="1" fill="#0E0C0C" />443 <rect x="8" y="1" width="1" height="1" fill="#0E0C0C" />444 <rect x="9" y="1" width="1" height="1" fill="#0E0C0C" />445 <rect x="4" y="2" width="1" height="1" fill="#0E0C0C" />446 <rect x="5" y="2" width="1" height="1" fill="#0E0C0C" />447 <rect x="6" y="2" width="1" height="1" fill="#FFF089" />448 <rect x="7" y="2" width="1" height="1" fill="#F8C53A" />449 <rect x="8" y="2" width="1" height="1" fill="#F8C53A" />450 <rect x="9" y="2" width="1" height="1" fill="#F8C53A" />451 <rect x="10" y="2" width="1" height="1" fill="#0E0C0C" />452 <rect x="11" y="2" width="1" height="1" fill="#0E0C0C" />453 <rect x="3" y="3" width="1" height="1" fill="#0E0C0C" />454 <rect x="4" y="3" width="1" height="1" fill="#FFF089" />455 <rect x="5" y="3" width="1" height="1" fill="#FFF089" />456 <rect x="6" y="3" width="1" height="1" fill="#F8C53A" />457 <rect x="7" y="3" width="1" height="1" fill="#F8C53A" />458 <rect x="8" y="3" width="1" height="1" fill="#F8C53A" />459 <rect x="9" y="3" width="1" height="1" fill="#F8C53A" />460 <rect x="10" y="3" width="1" height="1" fill="#F8C53A" />461 <rect x="11" y="3" width="1" height="1" fill="#F8C53A" />462 <rect x="12" y="3" width="1" height="1" fill="#0E0C0C" />463 <rect x="2" y="4" width="1" height="1" fill="#0E0C0C" />464 <rect x="3" y="4" width="1" height="1" fill="#FFF089" />465 <rect x="4" y="4" width="1" height="1" fill="#F8C53A" />466 <rect x="5" y="4" width="1" height="1" fill="#F8C53A" />467 <rect x="6" y="4" width="1" height="1" fill="#F8C53A" />468 <rect x="7" y="4" width="1" height="1" fill="#F8C53A" />469 <rect x="8" y="4" width="1" height="1" fill="#F8C53A" />470 <rect x="9" y="4" width="1" height="1" fill="#F8C53A" />471 <rect x="10" y="4" width="1" height="1" fill="#F8C53A" />472 <rect x="11" y="4" width="1" height="1" fill="#F8C53A" />473 <rect x="12" y="4" width="1" height="1" fill="#F8C53A" />474 <rect x="13" y="4" width="1" height="1" fill="#0E0C0C" />475 <rect x="2" y="5" width="1" height="1" fill="#0E0C0C" />476 <rect x="3" y="5" width="1" height="1" fill="#F8C53A" />477 <rect x="4" y="5" width="1" height="1" fill="#F8C53A" />478 <rect x="5" y="5" width="1" height="1" fill="#F8C53A" />479 <rect x="6" y="5" width="1" height="1" fill="#0E0C0C" />480 <rect x="7" y="5" width="1" height="1" fill="#F8C53A" />481 <rect x="8" y="5" width="1" height="1" fill="#F8C53A" />482 <rect x="9" y="5" width="1" height="1" fill="#0E0C0C" />483 <rect x="10" y="5" width="1" height="1" fill="#F8C53A" />484 <rect x="11" y="5" width="1" height="1" fill="#F8C53A" />485 <rect x="12" y="5" width="1" height="1" fill="#F8C53A" />486 <rect x="13" y="5" width="1" height="1" fill="#0E0C0C" />487 <rect x="1" y="6" width="1" height="1" fill="#0E0C0C" />488 <rect x="2" y="6" width="1" height="1" fill="#F8C53A" />489 <rect x="3" y="6" width="1" height="1" fill="#F8C53A" />490 <rect x="4" y="6" width="1" height="1" fill="#F8C53A" />491 <rect x="5" y="6" width="1" height="1" fill="#F8C53A" />492 <rect x="6" y="6" width="1" height="1" fill="#0E0C0C" />493 <rect x="7" y="6" width="1" height="1" fill="#F8C53A" />494 <rect x="8" y="6" width="1" height="1" fill="#F8C53A" />495 <rect x="9" y="6" width="1" height="1" fill="#0E0C0C" />496 <rect x="10" y="6" width="1" height="1" fill="#F8C53A" />497 <rect x="11" y="6" width="1" height="1" fill="#F8C53A" />498 <rect x="12" y="6" width="1" height="1" fill="#F8C53A" />499 <rect x="13" y="6" width="1" height="1" fill="#E88A36" />500 <rect x="14" y="6" width="1" height="1" fill="#0E0C0C" />501 <rect x="1" y="7" width="1" height="1" fill="#0E0C0C" />502 <rect x="2" y="7" width="1" height="1" fill="#F8C53A" />503 <rect x="3" y="7" width="1" height="1" fill="#F8C53A" />504 <rect x="4" y="7" width="1" height="1" fill="#F8C53A" />505 <rect x="5" y="7" width="1" height="1" fill="#F8C53A" />506 <rect x="6" y="7" width="1" height="1" fill="#F8C53A" />507 <rect x="7" y="7" width="1" height="1" fill="#F8C53A" />508 <rect x="8" y="7" width="1" height="1" fill="#F8C53A" />509 <rect x="9" y="7" width="1" height="1" fill="#F8C53A" />510 <rect x="10" y="7" width="1" height="1" fill="#F8C53A" />511 <rect x="11" y="7" width="1" height="1" fill="#F8C53A" />512 <rect x="12" y="7" width="1" height="1" fill="#F8C53A" />513 <rect x="13" y="7" width="1" height="1" fill="#E88A36" />514 <rect x="14" y="7" width="1" height="1" fill="#0E0C0C" />515 <rect x="1" y="8" width="1" height="1" fill="#0E0C0C" />516 <rect x="2" y="8" width="1" height="1" fill="#F8C53A" />517 <rect x="3" y="8" width="1" height="1" fill="#F8C53A" />518 <rect x="4" y="8" width="1" height="1" fill="#F8C53A" />519 <rect x="5" y="8" width="1" height="1" fill="#F8C53A" />520 <rect x="6" y="8" width="1" height="1" fill="#F8C53A" />521 <rect x="7" y="8" width="1" height="1" fill="#F8C53A" />522 <rect x="8" y="8" width="1" height="1" fill="#F8C53A" />523 <rect x="9" y="8" width="1" height="1" fill="#F8C53A" />524 <rect x="10" y="8" width="1" height="1" fill="#F8C53A" />525 <rect x="11" y="8" width="1" height="1" fill="#F8C53A" />526 <rect x="12" y="8" width="1" height="1" fill="#F8C53A" />527 <rect x="13" y="8" width="1" height="1" fill="#E88A36" />528 <rect x="14" y="8" width="1" height="1" fill="#0E0C0C" />529 <rect x="1" y="9" width="1" height="1" fill="#0E0C0C" />530 <rect x="2" y="9" width="1" height="1" fill="#F8C53A" />531 <rect x="3" y="9" width="1" height="1" fill="#F8C53A" />532 <rect x="4" y="9" width="1" height="1" fill="#F8C53A" />533 <rect x="5" y="9" width="1" height="1" fill="#0E0C0C" />534 <rect x="6" y="9" width="1" height="1" fill="#0E0C0C" />535 <rect x="7" y="9" width="1" height="1" fill="#0E0C0C" />536 <rect x="8" y="9" width="1" height="1" fill="#0E0C0C" />537 <rect x="9" y="9" width="1" height="1" fill="#0E0C0C" />538 <rect x="10" y="9" width="1" height="1" fill="#0E0C0C" />539 <rect x="11" y="9" width="1" height="1" fill="#F8C53A" />540 <rect x="12" y="9" width="1" height="1" fill="#F8C53A" />541 <rect x="13" y="9" width="1" height="1" fill="#E88A36" />542 <rect x="14" y="9" width="1" height="1" fill="#0E0C0C" />543 <rect x="2" y="10" width="1" height="1" fill="#0E0C0C" />544 <rect x="3" y="10" width="1" height="1" fill="#F8C53A" />545 <rect x="4" y="10" width="1" height="1" fill="#F8C53A" />546 <rect x="5" y="10" width="1" height="1" fill="#F8C53A" />547 <rect x="6" y="10" width="1" height="1" fill="#F8C53A" />548 <rect x="7" y="10" width="1" height="1" fill="#F8C53A" />549 <rect x="8" y="10" width="1" height="1" fill="#F8C53A" />550 <rect x="9" y="10" width="1" height="1" fill="#F8C53A" />551 <rect x="10" y="10" width="1" height="1" fill="#F8C53A" />552 <rect x="11" y="10" width="1" height="1" fill="#F8C53A" />553 <rect x="12" y="10" width="1" height="1" fill="#E88A36" />554 <rect x="13" y="10" width="1" height="1" fill="#0E0C0C" />555 <rect x="2" y="11" width="1" height="1" fill="#0E0C0C" />556 <rect x="3" y="11" width="1" height="1" fill="#F8C53A" />557 <rect x="4" y="11" width="1" height="1" fill="#F8C53A" />558 <rect x="5" y="11" width="1" height="1" fill="#F8C53A" />559 <rect x="6" y="11" width="1" height="1" fill="#F8C53A" />560 <rect x="7" y="11" width="1" height="1" fill="#F8C53A" />561 <rect x="8" y="11" width="1" height="1" fill="#F8C53A" />562 <rect x="9" y="11" width="1" height="1" fill="#F8C53A" />563 <rect x="10" y="11" width="1" height="1" fill="#F8C53A" />564 <rect x="11" y="11" width="1" height="1" fill="#F8C53A" />565 <rect x="12" y="11" width="1" height="1" fill="#E88A36" />566 <rect x="13" y="11" width="1" height="1" fill="#0E0C0C" />567 <rect x="3" y="12" width="1" height="1" fill="#0E0C0C" />568 <rect x="4" y="12" width="1" height="1" fill="#F8C53A" />569 <rect x="5" y="12" width="1" height="1" fill="#F8C53A" />570 <rect x="6" y="12" width="1" height="1" fill="#F8C53A" />571 <rect x="7" y="12" width="1" height="1" fill="#F8C53A" />572 <rect x="8" y="12" width="1" height="1" fill="#F8C53A" />573 <rect x="9" y="12" width="1" height="1" fill="#F8C53A" />574 <rect x="10" y="12" width="1" height="1" fill="#F8C53A" />575 <rect x="11" y="12" width="1" height="1" fill="#E88A36" />576 <rect x="12" y="12" width="1" height="1" fill="#0E0C0C" />577 <rect x="4" y="13" width="1" height="1" fill="#0E0C0C" />578 <rect x="5" y="13" width="1" height="1" fill="#0E0C0C" />579 <rect x="6" y="13" width="1" height="1" fill="#F8C53A" />580 <rect x="7" y="13" width="1" height="1" fill="#F8C53A" />581 <rect x="8" y="13" width="1" height="1" fill="#F8C53A" />582 <rect x="9" y="13" width="1" height="1" fill="#E88A36" />583 <rect x="10" y="13" width="1" height="1" fill="#0E0C0C" />584 <rect x="11" y="13" width="1" height="1" fill="#0E0C0C" />585 <rect x="6" y="14" width="1" height="1" fill="#0E0C0C" />586 <rect x="7" y="14" width="1" height="1" fill="#0E0C0C" />587 <rect x="8" y="14" width="1" height="1" fill="#0E0C0C" />588 <rect x="9" y="14" width="1" height="1" fill="#0E0C0C" />589 </svg>590 );591 }592 if (value <= 4) {593 return (594 <svg595 className={cn(className, !filled && "grayscale-80")}596 viewBox="0 0 16 16"597 xmlns="http://www.w3.org/2000/svg"598 {...props}599 >600 <rect x="6" y="1" width="1" height="1" fill="#0E0C0C" />601 <rect x="7" y="1" width="1" height="1" fill="#0E0C0C" />602 <rect x="8" y="1" width="1" height="1" fill="#0E0C0C" />603 <rect x="9" y="1" width="1" height="1" fill="#0E0C0C" />604 <rect x="4" y="2" width="1" height="1" fill="#0E0C0C" />605 <rect x="5" y="2" width="1" height="1" fill="#0E0C0C" />606 <rect x="6" y="2" width="1" height="1" fill="#FFF089" />607 <rect x="7" y="2" width="1" height="1" fill="#F8C53A" />608 <rect x="8" y="2" width="1" height="1" fill="#F8C53A" />609 <rect x="9" y="2" width="1" height="1" fill="#F8C53A" />610 <rect x="10" y="2" width="1" height="1" fill="#0E0C0C" />611 <rect x="11" y="2" width="1" height="1" fill="#0E0C0C" />612 <rect x="3" y="3" width="1" height="1" fill="#0E0C0C" />613 <rect x="4" y="3" width="1" height="1" fill="#FFF089" />614 <rect x="5" y="3" width="1" height="1" fill="#FFF089" />615 <rect x="6" y="3" width="1" height="1" fill="#F8C53A" />616 <rect x="7" y="3" width="1" height="1" fill="#F8C53A" />617 <rect x="8" y="3" width="1" height="1" fill="#F8C53A" />618 <rect x="9" y="3" width="1" height="1" fill="#F8C53A" />619 <rect x="10" y="3" width="1" height="1" fill="#F8C53A" />620 <rect x="11" y="3" width="1" height="1" fill="#F8C53A" />621 <rect x="12" y="3" width="1" height="1" fill="#0E0C0C" />622 <rect x="2" y="4" width="1" height="1" fill="#0E0C0C" />623 <rect x="3" y="4" width="1" height="1" fill="#FFF089" />624 <rect x="4" y="4" width="1" height="1" fill="#F8C53A" />625 <rect x="5" y="4" width="1" height="1" fill="#F8C53A" />626 <rect x="6" y="4" width="1" height="1" fill="#F8C53A" />627 <rect x="7" y="4" width="1" height="1" fill="#F8C53A" />628 <rect x="8" y="4" width="1" height="1" fill="#F8C53A" />629 <rect x="9" y="4" width="1" height="1" fill="#F8C53A" />630 <rect x="10" y="4" width="1" height="1" fill="#F8C53A" />631 <rect x="11" y="4" width="1" height="1" fill="#F8C53A" />632 <rect x="12" y="4" width="1" height="1" fill="#F8C53A" />633 <rect x="13" y="4" width="1" height="1" fill="#0E0C0C" />634 <rect x="2" y="5" width="1" height="1" fill="#0E0C0C" />635 <rect x="3" y="5" width="1" height="1" fill="#F8C53A" />636 <rect x="4" y="5" width="1" height="1" fill="#F8C53A" />637 <rect x="5" y="5" width="1" height="1" fill="#F8C53A" />638 <rect x="6" y="5" width="1" height="1" fill="#0E0C0C" />639 <rect x="7" y="5" width="1" height="1" fill="#F8C53A" />640 <rect x="8" y="5" width="1" height="1" fill="#F8C53A" />641 <rect x="9" y="5" width="1" height="1" fill="#0E0C0C" />642 <rect x="10" y="5" width="1" height="1" fill="#F8C53A" />643 <rect x="11" y="5" width="1" height="1" fill="#F8C53A" />644 <rect x="12" y="5" width="1" height="1" fill="#F8C53A" />645 <rect x="13" y="5" width="1" height="1" fill="#0E0C0C" />646 <rect x="1" y="6" width="1" height="1" fill="#0E0C0C" />647 <rect x="2" y="6" width="1" height="1" fill="#F8C53A" />648 <rect x="3" y="6" width="1" height="1" fill="#F8C53A" />649 <rect x="4" y="6" width="1" height="1" fill="#F8C53A" />650 <rect x="5" y="6" width="1" height="1" fill="#F8C53A" />651 <rect x="6" y="6" width="1" height="1" fill="#0E0C0C" />652 <rect x="7" y="6" width="1" height="1" fill="#F8C53A" />653 <rect x="8" y="6" width="1" height="1" fill="#F8C53A" />654 <rect x="9" y="6" width="1" height="1" fill="#0E0C0C" />655 <rect x="10" y="6" width="1" height="1" fill="#F8C53A" />656 <rect x="11" y="6" width="1" height="1" fill="#F8C53A" />657 <rect x="12" y="6" width="1" height="1" fill="#F8C53A" />658 <rect x="13" y="6" width="1" height="1" fill="#E88A36" />659 <rect x="14" y="6" width="1" height="1" fill="#0E0C0C" />660 <rect x="1" y="7" width="1" height="1" fill="#0E0C0C" />661 <rect x="2" y="7" width="1" height="1" fill="#F8C53A" />662 <rect x="3" y="7" width="1" height="1" fill="#F8C53A" />663 <rect x="4" y="7" width="1" height="1" fill="#F8C53A" />664 <rect x="5" y="7" width="1" height="1" fill="#F8C53A" />665 <rect x="6" y="7" width="1" height="1" fill="#0E0C0C" />666 <rect x="7" y="7" width="1" height="1" fill="#F8C53A" />667 <rect x="8" y="7" width="1" height="1" fill="#F8C53A" />668 <rect x="9" y="7" width="1" height="1" fill="#0E0C0C" />669 <rect x="10" y="7" width="1" height="1" fill="#F8C53A" />670 <rect x="11" y="7" width="1" height="1" fill="#F8C53A" />671 <rect x="12" y="7" width="1" height="1" fill="#F8C53A" />672 <rect x="13" y="7" width="1" height="1" fill="#E88A36" />673 <rect x="14" y="7" width="1" height="1" fill="#0E0C0C" />674 <rect x="1" y="8" width="1" height="1" fill="#0E0C0C" />675 <rect x="2" y="8" width="1" height="1" fill="#F8C53A" />676 <rect x="3" y="8" width="1" height="1" fill="#F8C53A" />677 <rect x="4" y="8" width="1" height="1" fill="#0E0C0C" />678 <rect x="5" y="8" width="1" height="1" fill="#F8C53A" />679 <rect x="6" y="8" width="1" height="1" fill="#F8C53A" />680 <rect x="7" y="8" width="1" height="1" fill="#F8C53A" />681 <rect x="8" y="8" width="1" height="1" fill="#F8C53A" />682 <rect x="9" y="8" width="1" height="1" fill="#F8C53A" />683 <rect x="10" y="8" width="1" height="1" fill="#F8C53A" />684 <rect x="11" y="8" width="1" height="1" fill="#0E0C0C" />685 <rect x="12" y="8" width="1" height="1" fill="#F8C53A" />686 <rect x="13" y="8" width="1" height="1" fill="#E88A36" />687 <rect x="14" y="8" width="1" height="1" fill="#0E0C0C" />688 <rect x="1" y="9" width="1" height="1" fill="#0E0C0C" />689 <rect x="2" y="9" width="1" height="1" fill="#F8C53A" />690 <rect x="3" y="9" width="1" height="1" fill="#F8C53A" />691 <rect x="4" y="9" width="1" height="1" fill="#F8C53A" />692 <rect x="5" y="9" width="1" height="1" fill="#0E0C0C" />693 <rect x="6" y="9" width="1" height="1" fill="#F8C53A" />694 <rect x="7" y="9" width="1" height="1" fill="#F8C53A" />695 <rect x="8" y="9" width="1" height="1" fill="#F8C53A" />696 <rect x="9" y="9" width="1" height="1" fill="#F8C53A" />697 <rect x="10" y="9" width="1" height="1" fill="#0E0C0C" />698 <rect x="11" y="9" width="1" height="1" fill="#F8C53A" />699 <rect x="12" y="9" width="1" height="1" fill="#F8C53A" />700 <rect x="13" y="9" width="1" height="1" fill="#E88A36" />701 <rect x="14" y="9" width="1" height="1" fill="#0E0C0C" />702 <rect x="2" y="10" width="1" height="1" fill="#0E0C0C" />703 <rect x="3" y="10" width="1" height="1" fill="#F8C53A" />704 <rect x="4" y="10" width="1" height="1" fill="#F8C53A" />705 <rect x="5" y="10" width="1" height="1" fill="#F8C53A" />706 <rect x="6" y="10" width="1" height="1" fill="#0E0C0C" />707 <rect x="7" y="10" width="1" height="1" fill="#0E0C0C" />708 <rect x="8" y="10" width="1" height="1" fill="#0E0C0C" />709 <rect x="9" y="10" width="1" height="1" fill="#0E0C0C" />710 <rect x="10" y="10" width="1" height="1" fill="#F8C53A" />711 <rect x="11" y="10" width="1" height="1" fill="#F8C53A" />712 <rect x="12" y="10" width="1" height="1" fill="#E88A36" />713 <rect x="13" y="10" width="1" height="1" fill="#0E0C0C" />714 <rect x="2" y="11" width="1" height="1" fill="#0E0C0C" />715 <rect x="3" y="11" width="1" height="1" fill="#F8C53A" />716 <rect x="4" y="11" width="1" height="1" fill="#F8C53A" />717 <rect x="5" y="11" width="1" height="1" fill="#F8C53A" />718 <rect x="6" y="11" width="1" height="1" fill="#F8C53A" />719 <rect x="7" y="11" width="1" height="1" fill="#F8C53A" />720 <rect x="8" y="11" width="1" height="1" fill="#F8C53A" />721 <rect x="9" y="11" width="1" height="1" fill="#F8C53A" />722 <rect x="10" y="11" width="1" height="1" fill="#F8C53A" />723 <rect x="11" y="11" width="1" height="1" fill="#F8C53A" />724 <rect x="12" y="11" width="1" height="1" fill="#E88A36" />725 <rect x="13" y="11" width="1" height="1" fill="#0E0C0C" />726 <rect x="3" y="12" width="1" height="1" fill="#0E0C0C" />727 <rect x="4" y="12" width="1" height="1" fill="#F8C53A" />728 <rect x="5" y="12" width="1" height="1" fill="#F8C53A" />729 <rect x="6" y="12" width="1" height="1" fill="#F8C53A" />730 <rect x="7" y="12" width="1" height="1" fill="#F8C53A" />731 <rect x="8" y="12" width="1" height="1" fill="#F8C53A" />732 <rect x="9" y="12" width="1" height="1" fill="#F8C53A" />733 <rect x="10" y="12" width="1" height="1" fill="#F8C53A" />734 <rect x="11" y="12" width="1" height="1" fill="#E88A36" />735 <rect x="12" y="12" width="1" height="1" fill="#0E0C0C" />736 <rect x="4" y="13" width="1" height="1" fill="#0E0C0C" />737 <rect x="5" y="13" width="1" height="1" fill="#0E0C0C" />738 <rect x="6" y="13" width="1" height="1" fill="#F8C53A" />739 <rect x="7" y="13" width="1" height="1" fill="#F8C53A" />740 <rect x="8" y="13" width="1" height="1" fill="#F8C53A" />741 <rect x="9" y="13" width="1" height="1" fill="#E88A36" />742 <rect x="10" y="13" width="1" height="1" fill="#0E0C0C" />743 <rect x="11" y="13" width="1" height="1" fill="#0E0C0C" />744 <rect x="6" y="14" width="1" height="1" fill="#0E0C0C" />745 <rect x="7" y="14" width="1" height="1" fill="#0E0C0C" />746 <rect x="8" y="14" width="1" height="1" fill="#0E0C0C" />747 <rect x="9" y="14" width="1" height="1" fill="#0E0C0C" />748 </svg>749 );750 }751 return (752 <svg753 className={cn(className, !filled && "grayscale-80")}754 viewBox="0 0 16 16"755 xmlns="http://www.w3.org/2000/svg"756 {...props}757 >758 <rect x="6" y="1" width="1" height="1" fill="#0E0C0C" />759 <rect x="7" y="1" width="1" height="1" fill="#0E0C0C" />760 <rect x="8" y="1" width="1" height="1" fill="#0E0C0C" />761 <rect x="9" y="1" width="1" height="1" fill="#0E0C0C" />762 <rect x="3" y="2" width="1" height="1" fill="#0E0C0C" />763 <rect x="4" y="2" width="1" height="1" fill="#0E0C0C" />764 <rect x="5" y="2" width="1" height="1" fill="#0E0C0C" />765 <rect x="6" y="2" width="1" height="1" fill="#FFF089" />766 <rect x="7" y="2" width="1" height="1" fill="#F8C53A" />767 <rect x="8" y="2" width="1" height="1" fill="#F8C53A" />768 <rect x="9" y="2" width="1" height="1" fill="#F8C53A" />769 <rect x="10" y="2" width="1" height="1" fill="#0E0C0C" />770 <rect x="11" y="2" width="1" height="1" fill="#0E0C0C" />771 <rect x="12" y="2" width="1" height="1" fill="#0E0C0C" />772 <rect x="2" y="3" width="1" height="1" fill="#0E0C0C" />773 <rect x="3" y="3" width="1" height="1" fill="#F03E1F" />774 <rect x="4" y="3" width="1" height="1" fill="#FFF089" />775 <rect x="5" y="3" width="1" height="1" fill="#F03E1F" />776 <rect x="6" y="3" width="1" height="1" fill="#F8C53A" />777 <rect x="7" y="3" width="1" height="1" fill="#F8C53A" />778 <rect x="8" y="3" width="1" height="1" fill="#F8C53A" />779 <rect x="9" y="3" width="1" height="1" fill="#F8C53A" />780 <rect x="10" y="3" width="1" height="1" fill="#F03E1F" />781 <rect x="11" y="3" width="1" height="1" fill="#F8C53A" />782 <rect x="12" y="3" width="1" height="1" fill="#F03E1F" />783 <rect x="13" y="3" width="1" height="1" fill="#0E0C0C" />784 <rect x="1" y="4" width="1" height="1" fill="#0E0C0C" />785 <rect x="2" y="4" width="1" height="1" fill="#F03E1F" />786 <rect x="3" y="4" width="1" height="1" fill="#B82F1D" />787 <rect x="4" y="4" width="1" height="1" fill="#B82F1D" />788 <rect x="5" y="4" width="1" height="1" fill="#B82F1D" />789 <rect x="6" y="4" width="1" height="1" fill="#612622" />790 <rect x="7" y="4" width="1" height="1" fill="#F8C53A" />791 <rect x="8" y="4" width="1" height="1" fill="#F8C53A" />792 <rect x="9" y="4" width="1" height="1" fill="#F03E1F" />793 <rect x="10" y="4" width="1" height="1" fill="#B82F1D" />794 <rect x="11" y="4" width="1" height="1" fill="#B82F1D" />795 <rect x="12" y="4" width="1" height="1" fill="#B82F1D" />796 <rect x="13" y="4" width="1" height="1" fill="#612622" />797 <rect x="14" y="4" width="1" height="1" fill="#0E0C0C" />798 <rect x="1" y="5" width="1" height="1" fill="#0E0C0C" />799 <rect x="2" y="5" width="1" height="1" fill="#F03E1F" />800 <rect x="3" y="5" width="1" height="1" fill="#B82F1D" />801 <rect x="4" y="5" width="1" height="1" fill="#B82F1D" />802 <rect x="5" y="5" width="1" height="1" fill="#B82F1D" />803 <rect x="6" y="5" width="1" height="1" fill="#612622" />804 <rect x="7" y="5" width="1" height="1" fill="#F8C53A" />805 <rect x="8" y="5" width="1" height="1" fill="#F8C53A" />806 <rect x="9" y="5" width="1" height="1" fill="#F03E1F" />807 <rect x="10" y="5" width="1" height="1" fill="#B82F1D" />808 <rect x="11" y="5" width="1" height="1" fill="#B82F1D" />809 <rect x="12" y="5" width="1" height="1" fill="#B82F1D" />810 <rect x="13" y="5" width="1" height="1" fill="#612622" />811 <rect x="14" y="5" width="1" height="1" fill="#0E0C0C" />812 <rect x="1" y="6" width="1" height="1" fill="#0E0C0C" />813 <rect x="2" y="6" width="1" height="1" fill="#F8C53A" />814 <rect x="3" y="6" width="1" height="1" fill="#B82F1D" />815 <rect x="4" y="6" width="1" height="1" fill="#B82F1D" />816 <rect x="5" y="6" width="1" height="1" fill="#612622" />817 <rect x="6" y="6" width="1" height="1" fill="#F8C53A" />818 <rect x="7" y="6" width="1" height="1" fill="#F8C53A" />819 <rect x="8" y="6" width="1" height="1" fill="#F8C53A" />820 <rect x="9" y="6" width="1" height="1" fill="#F8C53A" />821 <rect x="10" y="6" width="1" height="1" fill="#B82F1D" />822 <rect x="11" y="6" width="1" height="1" fill="#B82F1D" />823 <rect x="12" y="6" width="1" height="1" fill="#612622" />824 <rect x="13" y="6" width="1" height="1" fill="#E88A36" />825 <rect x="14" y="6" width="1" height="1" fill="#0E0C0C" />826 <rect x="1" y="7" width="1" height="1" fill="#0E0C0C" />827 <rect x="2" y="7" width="1" height="1" fill="#F8C53A" />828 <rect x="3" y="7" width="1" height="1" fill="#F8C53A" />829 <rect x="4" y="7" width="1" height="1" fill="#612622" />830 <rect x="5" y="7" width="1" height="1" fill="#F8C53A" />831 <rect x="6" y="7" width="1" height="1" fill="#F8C53A" />832 <rect x="7" y="7" width="1" height="1" fill="#F8C53A" />833 <rect x="8" y="7" width="1" height="1" fill="#F8C53A" />834 <rect x="9" y="7" width="1" height="1" fill="#F8C53A" />835 <rect x="10" y="7" width="1" height="1" fill="#F8C53A" />836 <rect x="11" y="7" width="1" height="1" fill="#612622" />837 <rect x="12" y="7" width="1" height="1" fill="#F8C53A" />838 <rect x="13" y="7" width="1" height="1" fill="#E88A36" />839 <rect x="14" y="7" width="1" height="1" fill="#0E0C0C" />840 <rect x="1" y="8" width="1" height="1" fill="#0E0C0C" />841 <rect x="2" y="8" width="1" height="1" fill="#F8C53A" />842 <rect x="3" y="8" width="1" height="1" fill="#F8C53A" />843 <rect x="4" y="8" width="1" height="1" fill="#0E0C0C" />844 <rect x="5" y="8" width="1" height="1" fill="#0E0C0C" />845 <rect x="6" y="8" width="1" height="1" fill="#0E0C0C" />846 <rect x="7" y="8" width="1" height="1" fill="#0E0C0C" />847 <rect x="8" y="8" width="1" height="1" fill="#0E0C0C" />848 <rect x="9" y="8" width="1" height="1" fill="#0E0C0C" />849 <rect x="10" y="8" width="1" height="1" fill="#0E0C0C" />850 <rect x="11" y="8" width="1" height="1" fill="#0E0C0C" />851 <rect x="12" y="8" width="1" height="1" fill="#F8C53A" />852 <rect x="13" y="8" width="1" height="1" fill="#E88A36" />853 <rect x="14" y="8" width="1" height="1" fill="#0E0C0C" />854 <rect x="1" y="9" width="1" height="1" fill="#0E0C0C" />855 <rect x="2" y="9" width="1" height="1" fill="#F8C53A" />856 <rect x="3" y="9" width="1" height="1" fill="#F8C53A" />857 <rect x="4" y="9" width="1" height="1" fill="#0E0C0C" />858 <rect x="5" y="9" width="1" height="1" fill="#FFFFFF" />859 <rect x="6" y="9" width="1" height="1" fill="#FFFFFF" />860 <rect x="7" y="9" width="1" height="1" fill="#FFFFFF" />861 <rect x="8" y="9" width="1" height="1" fill="#FFFFFF" />862 <rect x="9" y="9" width="1" height="1" fill="#FFFFFF" />863 <rect x="10" y="9" width="1" height="1" fill="#FFFFFF" />864 <rect x="11" y="9" width="1" height="1" fill="#0E0C0C" />865 <rect x="12" y="9" width="1" height="1" fill="#F8C53A" />866 <rect x="13" y="9" width="1" height="1" fill="#E88A36" />867 <rect x="14" y="9" width="1" height="1" fill="#0E0C0C" />868 <rect x="2" y="10" width="1" height="1" fill="#0E0C0C" />869 <rect x="3" y="10" width="1" height="1" fill="#F8C53A" />870 <rect x="4" y="10" width="1" height="1" fill="#F8C53A" />871 <rect x="5" y="10" width="1" height="1" fill="#0E0C0C" />872 <rect x="6" y="10" width="1" height="1" fill="#0E0C0C" />873 <rect x="7" y="10" width="1" height="1" fill="#0E0C0C" />874 <rect x="8" y="10" width="1" height="1" fill="#0E0C0C" />875 <rect x="9" y="10" width="1" height="1" fill="#0E0C0C" />876 <rect x="10" y="10" width="1" height="1" fill="#0E0C0C" />877 <rect x="11" y="10" width="1" height="1" fill="#F8C53A" />878 <rect x="12" y="10" width="1" height="1" fill="#E88A36" />879 <rect x="13" y="10" width="1" height="1" fill="#0E0C0C" />880 <rect x="2" y="11" width="1" height="1" fill="#0E0C0C" />881 <rect x="3" y="11" width="1" height="1" fill="#F8C53A" />882 <rect x="4" y="11" width="1" height="1" fill="#F8C53A" />883 <rect x="5" y="11" width="1" height="1" fill="#F8C53A" />884 <rect x="6" y="11" width="1" height="1" fill="#0E0C0C" />885 <rect x="7" y="11" width="1" height="1" fill="#0E0C0C" />886 <rect x="8" y="11" width="1" height="1" fill="#0E0C0C" />887 <rect x="9" y="11" width="1" height="1" fill="#0E0C0C" />888 <rect x="10" y="11" width="1" height="1" fill="#F8C53A" />889 <rect x="11" y="11" width="1" height="1" fill="#F8C53A" />890 <rect x="12" y="11" width="1" height="1" fill="#E88A36" />891 <rect x="13" y="11" width="1" height="1" fill="#0E0C0C" />892 <rect x="3" y="12" width="1" height="1" fill="#0E0C0C" />893 <rect x="4" y="12" width="1" height="1" fill="#F8C53A" />894 <rect x="5" y="12" width="1" height="1" fill="#F8C53A" />895 <rect x="6" y="12" width="1" height="1" fill="#F8C53A" />896 <rect x="7" y="12" width="1" height="1" fill="#F8C53A" />897 <rect x="8" y="12" width="1" height="1" fill="#F8C53A" />898 <rect x="9" y="12" width="1" height="1" fill="#F8C53A" />899 <rect x="10" y="12" width="1" height="1" fill="#F8C53A" />900 <rect x="11" y="12" width="1" height="1" fill="#E88A36" />901 <rect x="12" y="12" width="1" height="1" fill="#0E0C0C" />902 <rect x="4" y="13" width="1" height="1" fill="#0E0C0C" />903 <rect x="5" y="13" width="1" height="1" fill="#0E0C0C" />904 <rect x="6" y="13" width="1" height="1" fill="#F8C53A" />905 <rect x="7" y="13" width="1" height="1" fill="#F8C53A" />906 <rect x="8" y="13" width="1" height="1" fill="#F8C53A" />907 <rect x="9" y="13" width="1" height="1" fill="#E88A36" />908 <rect x="10" y="13" width="1" height="1" fill="#0E0C0C" />909 <rect x="11" y="13" width="1" height="1" fill="#0E0C0C" />910 <rect x="6" y="14" width="1" height="1" fill="#0E0C0C" />911 <rect x="7" y="14" width="1" height="1" fill="#0E0C0C" />912 <rect x="8" y="14" width="1" height="1" fill="#0E0C0C" />913 <rect x="9" y="14" width="1" height="1" fill="#0E0C0C" />914 </svg>915 );916 },917 Star({918 filled = false,919 value,920 ...props921 }: SVGProps<SVGSVGElement> & {922 filled?: boolean;923 value?: number;924 }) {925 return (926 <svg927 xmlns="http://www.w3.org/2000/svg"928 viewBox="0 0 24 24"929 fill="currentColor"930 data-filled={filled}931 data-value={value}932 {...props}933 >934 <path d="M13 3h2v4h8v4h-2v2h-2v3h2v6h-5v-2h-2v-2h-4v2H8v2H3v-6h2v-3H3v-2H1V7h8V3h2V1h2v2Z"></path>935 <path d="M5 20h3v2H3v-6h2v4Zm16 2h-5v-2h3v-4h2v6Zm-11-2H8v-2h2v2Zm6 0h-2v-2h2v2Zm-2-2h-4v-2h4v2Zm-7-2H5v-3h2v3Zm12 0h-2v-3h2v3ZM5 13H3v-2h2v2Zm16 0h-2v-2h2v2ZM9 9H3v2H1V7h8v2Zm14 2h-2V9h-6V7h8v4ZM11 7H9V3h2v4Zm4 0h-2V3h2v4Zm-2-4h-2V1h2v2Z"></path>936 </svg>937 );938 },939 Heart({940 filled = false,941 value,942 ...props943 }: SVGProps<SVGSVGElement> & {944 filled?: boolean;945 value?: number;946 }) {947 return (948 <svg949 xmlns="http://www.w3.org/2000/svg"950 viewBox="0 0 24 24"951 fill="currentColor"952 data-filled={filled}953 data-value={value}954 {...props}955 >956 <path d="M9 4h2v2h2V4h2V2h4v2h2v2h2v6h-2v2h-2v2h-2v2h-2v2h-2v2h-2v-2H9v-2H7v-2H5v-2H3v-2H1V6h2V4h2V2h4v2Z"></path>957 <path d="M13 22h-2v-2h2v2Zm-2-2H9v-2h2v2Zm4 0h-2v-2h2v2Zm-6-2H7v-2h2v2Zm8 0h-2v-2h2v2ZM7 16H5v-2h2v2Zm12 0h-2v-2h2v2ZM5 14H3v-2h2v2Zm16 0h-2v-2h2v2ZM3 12H1V6h2v6Zm20 0h-2V6h2v6ZM13 8h-2V6h2v2ZM5 6H3V4h2v2Zm6 0H9V4h2v2Zm4 0h-2V4h2v2Zm6 0h-2V4h2v2ZM9 4H5V2h4v2Zm10 0h-4V2h4v2Z"></path>958 </svg>959 );960 },961 Energy({962 filled = false,963 value,964 ...props965 }: SVGProps<SVGSVGElement> & {966 filled?: boolean;967 value?: number;968 }) {969 return (970 <svg971 xmlns="http://www.w3.org/2000/svg"972 viewBox="0 0 24 24"973 fill="currentColor"974 data-filled={filled}975 data-value={value}976 {...props}977 >978 <path d="M14 9h8v4h-2v2h-2v2h-2v2h-2v2h-2v2h-2v-8H2v-4h2V9h2V7h2V5h2V3h2V1h2v8Z"></path>979 <path d="M4 13h8v6h2v2h-2v2h-2v-8H2v-4h2v2Zm12 6h-2v-2h2v2Zm2-2h-2v-2h2v2Zm2-2h-2v-2h2v2Zm-6-6h8v4h-2v-2h-8V5h-2V3h2V1h2v8Zm-8 2H4V9h2v2Zm2-2H6V7h2v2Zm2-2H8V5h2v2Z"></path>980 </svg>981 );982 },983 Sparkle({984 filled = false,985 value,986 ...props987 }: SVGProps<SVGSVGElement> & {988 filled?: boolean;989 value?: number;990 }) {991 return (992 <svg993 xmlns="http://www.w3.org/2000/svg"994 viewBox="0 0 24 24"995 fill="currentColor"996 data-filled={filled}997 data-value={value}998 {...props}999 >1000 <path d="M13 5h2v4h4v2h4v2h-4v2h-4v4h-2v4h-2v-4H9v-4H5v-2H1v-2h4V9h4V5h2V1h2v4Z"></path>1001 <path d="M13 23h-2v-4h2v4Zm-2-4H9v-4h2v4Zm4 0h-2v-4h2v4Zm-6-4H5v-2h4v2Zm10-2v2h-4v-2h4ZM5 13H1v-2h4v2Zm18 0h-4v-2h4v2ZM9 11H5V9h4v2Zm10 0h-4V9h4v2Zm-8-2H9V5h2v4Zm4 0h-2V5h2v4Zm-2-4h-2V1h2v4Z"></path>1002 </svg>1003 );1004 },1005};1006
1007function Rating({1008 className,1009 editable = false,1010 maxRating = 5,1011 showValue = false,1012 rating,1013 size,1014 icon: Icon = RatingIcon.Star,1015 iconClassName,1016 onRatingChange,1017 variant = "default",1018 ...props1019}: React.ComponentProps<"div"> &1020 VariantProps<typeof ratingVariants> & {1021 /**1022 * Current rating value (supports decimal values for partial stars)1023 */1024 rating: number;1025 /**1026 * Maximum rating value (number of stars to show)1027 */1028 maxRating?: number;1029 /**1030 * Whether to show the numeric rating value1031 */1032 showValue?: boolean;1033 /**1034 * Icon component1035 */1036 icon?: ComponentType<1037 SVGProps<SVGSVGElement> & { filled?: boolean; value?: number }1038 >;1039 /**1040 * Class name for the value span1041 */1042 iconClassName?: string;1043 /**1044 * Whether the rating is editable (clickable)1045 */1046 editable?: boolean;1047 /**1048 * Callback function called when rating changes1049 */1050 onRatingChange?: (rating: number) => void;1051 }) {1052 const [hoveredRating, setHoveredRating] = useState<number | null>(null);1053 const displayRating =1054 editable && hoveredRating !== null ? hoveredRating : rating;1055
1056 const handleStarClick = (starRating: number) => {1057 if (editable && onRatingChange) {1058 onRatingChange(starRating);1059 }1060 };1061
1062 const handleStarMouseEnter = (starRating: number) => {1063 if (editable) {1064 setHoveredRating(starRating);1065 }1066 };1067
1068 const handleStarMouseLeave = () => {1069 if (editable) {1070 setHoveredRating(null);1071 }1072 };1073
1074 const values = useMemo(() => {1075 const result = [];1076
1077 for (let i = 1; i <= maxRating; i++) {1078 const filled = displayRating >= i;1079 const partiallyFilled = displayRating > i - 1 && displayRating < i;1080 const fillPercentage = partiallyFilled1081 ? (displayRating - (i - 1)) * 1001082 : 0;1083
1084 result.push({1085 filled,1086 partiallyFilled,1087 fillPercentage,1088 value: Math.floor((i / maxRating) * 5),1089 });1090 }1091
1092 return result;1093 }, [displayRating, maxRating]);1094
1095 return (1096 <div1097 data-slot="rating"1098 className={cn(ratingVariants({ size }), className)}1099 {...props}1100 >1101 <div className="flex items-center">1102 {values.map(({ filled, fillPercentage, value }, i) => (1103 <div1104 key={i.toString()}1105 className={cn("relative", editable && "cursor-pointer")}1106 onClick={() => handleStarClick(i)}1107 onMouseEnter={() => handleStarMouseEnter(i)}1108 onMouseLeave={handleStarMouseLeave}1109 >1110 {/* Background icon (empty) */}1111 <Icon1112 data-slot="rating-icon-empty"1113 className={cn(iconVariants({ size, variant }))}1114 value={value}1115 />1116
1117 {/* Filled icon */}1118 <div1119 className="absolute inset-0 overflow-hidden"1120 style={{1121 width: filled ? "100%" : `${fillPercentage}%`,1122 }}1123 >1124 <Icon1125 data-slot="rating-icon-filled"1126 filled1127 className={cn(iconVariants({ size, variant }))}1128 value={value}1129 />1130 </div>1131 </div>1132 ))}1133 </div>1134 {showValue && (1135 <span1136 data-slot="rating-value"1137 className={cn(valueVariants({ size }), iconClassName)}1138 >1139 {displayRating.toFixed(1)}1140 </span>1141 )}1142 </div>1143 );1144}1145
1146export { Rating, RatingIcon };Update the import paths to match your project setup.
import { Rating } from "@/components/ui/pxl/rating"<Rating rating={4.5} showValue editable />Examples
Section titled “Examples”Decimal
Section titled “Decimal”1import { Rating } from "@/components/ui/pxl/rating"2
3export default function RatingDecimalExample() {4 return <Rating rating={4.5} showValue={true} />5}Editable
Section titled “Editable”1"use client";2
3import { useState } from "react";4import { toast } from "sonner";5
6import { Rating } from "@/components/ui/pxl/rating";7
8export default function RatingEditableExample() {9 const [productRating, setProductRating] = useState(0);10
11 const handleRatingChange = (rating: number) => {12 setProductRating(rating);13
14 toast.success("Rated {rating} out of 5", {15 description: `Rated ${rating} out of 5`,16 });17 };18
19 return (20 <div className="space-y-8">21 <Rating22 rating={productRating}23 editable={true}24 onRatingChange={handleRatingChange}25 showValue={true}26 />27 </div>28 );29}Custom Icons
Section titled “Custom Icons”1import { Rating, RatingIcon } from "@/components/ui/pxl/rating"2
3export default function CustomIconsExample() {4 return (5 <div className="flex flex-col items-center gap-4">6 <Rating icon={RatingIcon.Star} rating={1.5} />7 <Rating icon={RatingIcon.Heart} rating={1.5} variant="pink" />8 <Rating icon={RatingIcon.Energy} rating={1.5} variant="green" />9 <Rating icon={RatingIcon.Sparkle} rating={1.5} variant="blue" />10 <Rating icon={RatingIcon.Emoji} rating={1.5} />11 </div>12 )13}1import { Rating } from "@/components/ui/pxl/rating"2
3export default function RatingSizeExample() {4 return (5 <div className="flex flex-col items-center gap-4">6 <Rating rating={4} size="sm" />7 <Rating rating={4} />8 <Rating rating={4} size="lg" />9 </div>10 )11}API Reference
Section titled “API Reference”Rating
Section titled “Rating”The main component for displaying and editing star ratings.
| Prop | Type | Default | Description |
|---|---|---|---|
rating |
number |
- | Required. The current rating value. Supports decimal values for partial stars. |
maxRating |
number |
5 |
Total number of stars to display. |
size |
"sm" | "default" | "lg" |
"md" |
The size of the stars and spacing. |
showValue |
boolean |
false |
Whether to show the numeric rating value next to the stars. |
editable |
boolean |
false |
Whether the rating can be changed by clicking on stars. |
onRatingChange |
(rating: number) => void |
- | Callback fired when a star is clicked (if editable is true). |
starClassName |
string |
- | Additional CSS classes for the numeric value container. |
className |
string |
- | Additional CSS classes for the root container. |