UNPKG

@yamada-ui/rating

Version:

Yamada UI rating component

1 lines 5.61 kB
{"version":3,"sources":["../src/rating-item.tsx"],"sourcesContent":["import type { CSSUIObject, FC, HTMLUIProps } from \"@yamada-ui/core\"\nimport type { IconProps } from \"@yamada-ui/icon\"\nimport type { UseRatingItemProps } from \"./use-rating-item\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { Icon } from \"@yamada-ui/icon\"\nimport { cx, getValidChildren, isString, runIfFunc } from \"@yamada-ui/utils\"\nimport { cloneElement } from \"react\"\nimport { useRatingContext } from \"./rating-context\"\nimport { useRatingItem } from \"./use-rating-item\"\n\nexport interface RatingItemProps\n extends Omit<HTMLUIProps<\"label\">, \"value\">,\n UseRatingItemProps {}\n\nexport const RatingItem = forwardRef<RatingItemProps, \"input\">(\n ({ className, color, fractionValue, groupValue, value, ...rest }, ref) => {\n const {\n emptyIcon = <RatingStarIcon />,\n filledIcon = <RatingStarIcon />,\n styles,\n inputProps,\n itemProps,\n } = useRatingContext()\n const { active, filled, getInputProps, getItemProps } = useRatingItem({\n fractionValue,\n groupValue,\n value,\n })\n const computedItemProps = runIfFunc(itemProps, value)\n const computedInputProps = runIfFunc(inputProps, value)\n const customColor = color\n ? {\n _filled: {\n color: isString(color) ? [color, color] : color,\n },\n }\n : {}\n const css: CSSUIObject = {\n display: \"block\",\n lineHeight: \"0\",\n ...styles.item,\n ...customColor,\n }\n\n return (\n <>\n <ui.input {...getInputProps(computedInputProps, ref)} />\n\n <ui.label\n className={cx(\"ui-rating__item\", className)}\n __css={css}\n {...getItemProps({ ...computedItemProps, ...rest })}\n >\n <RatingIcon\n clipPath={\n fractionValue !== 1\n ? `inset(0 ${active ? 100 - fractionValue * 100 : 100}% 0 0)`\n : undefined\n }\n >\n {filled\n ? runIfFunc(filledIcon, groupValue)\n : runIfFunc(emptyIcon, groupValue)}\n </RatingIcon>\n </ui.label>\n </>\n )\n },\n)\n\nRatingItem.displayName = \"RatingItem\"\nRatingItem.__ui__ = \"RatingItem\"\n\ninterface RatingIconProps extends HTMLUIProps {}\n\nconst RatingIcon: FC<RatingIconProps> = ({ className, children, ...rest }) => {\n const { styles } = useRatingContext()\n const validChildren = getValidChildren(children)\n const cloneChildren = validChildren.map((child) =>\n cloneElement(child, {\n style: {\n maxHeight: \"1em\",\n maxWidth: \"1em\",\n },\n \"aria-hidden\": true,\n focusable: false,\n }),\n )\n const css: CSSUIObject = {\n alignItems: \"center\",\n display: \"inline-flex\",\n justifyContent: \"center\",\n ...styles.icon,\n }\n\n return (\n <ui.div\n className={cx(\"ui-rating__item__icon\", className)}\n __css={css}\n {...rest}\n >\n {cloneChildren}\n </ui.div>\n )\n}\n\nRatingIcon.displayName = \"RatingIcon\"\nRatingIcon.__ui__ = \"RatingIcon\"\n\ninterface RatingStarIconProps extends IconProps {}\n\nconst RatingStarIcon: FC<RatingStarIconProps> = ({ ...rest }) => {\n return (\n <Icon\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n viewBox=\"0 0 24 24\"\n {...rest}\n >\n <path d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\" />\n </Icon>\n )\n}\n\nRatingStarIcon.displayName = \"RatingStarIcon\"\nRatingStarIcon.__ui__ = \"RatingStarIcon\"\n"],"mappings":";;;;;;;;;AAGA,SAAS,YAAY,UAAU;AAC/B,SAAS,YAAY;AACrB,SAAS,IAAI,kBAAkB,UAAU,iBAAiB;AAC1D,SAAS,oBAAoB;AAWX,SA4BZ,UA5BY,KA4BZ,YA5BY;AAHX,IAAM,aAAa;AAAA,EACxB,CAAC,EAAE,WAAW,OAAO,eAAe,YAAY,OAAO,GAAG,KAAK,GAAG,QAAQ;AACxE,UAAM;AAAA,MACJ,YAAY,oBAAC,kBAAe;AAAA,MAC5B,aAAa,oBAAC,kBAAe;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,iBAAiB;AACrB,UAAM,EAAE,QAAQ,QAAQ,eAAe,aAAa,IAAI,cAAc;AAAA,MACpE;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,UAAM,oBAAoB,UAAU,WAAW,KAAK;AACpD,UAAM,qBAAqB,UAAU,YAAY,KAAK;AACtD,UAAM,cAAc,QAChB;AAAA,MACE,SAAS;AAAA,QACP,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,KAAK,IAAI;AAAA,MAC5C;AAAA,IACF,IACA,CAAC;AACL,UAAM,MAAmB;AAAA,MACvB,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,GAAG,OAAO;AAAA,MACV,GAAG;AAAA,IACL;AAEA,WACE,iCACE;AAAA,0BAAC,GAAG,OAAH,EAAU,GAAG,cAAc,oBAAoB,GAAG,GAAG;AAAA,MAEtD;AAAA,QAAC,GAAG;AAAA,QAAH;AAAA,UACC,WAAW,GAAG,mBAAmB,SAAS;AAAA,UAC1C,OAAO;AAAA,UACN,GAAG,aAAa,EAAE,GAAG,mBAAmB,GAAG,KAAK,CAAC;AAAA,UAElD;AAAA,YAAC;AAAA;AAAA,cACC,UACE,kBAAkB,IACd,WAAW,SAAS,MAAM,gBAAgB,MAAM,GAAG,WACnD;AAAA,cAGL,mBACG,UAAU,YAAY,UAAU,IAChC,UAAU,WAAW,UAAU;AAAA;AAAA,UACrC;AAAA;AAAA,MACF;AAAA,OACF;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;AACzB,WAAW,SAAS;AAIpB,IAAM,aAAkC,CAAC,EAAE,WAAW,UAAU,GAAG,KAAK,MAAM;AAC5E,QAAM,EAAE,OAAO,IAAI,iBAAiB;AACpC,QAAM,gBAAgB,iBAAiB,QAAQ;AAC/C,QAAM,gBAAgB,cAAc;AAAA,IAAI,CAAC,UACvC,aAAa,OAAO;AAAA,MAClB,OAAO;AAAA,QACL,WAAW;AAAA,QACX,UAAU;AAAA,MACZ;AAAA,MACA,eAAe;AAAA,MACf,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AACA,QAAM,MAAmB;AAAA,IACvB,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,GAAG,OAAO;AAAA,EACZ;AAEA,SACE;AAAA,IAAC,GAAG;AAAA,IAAH;AAAA,MACC,WAAW,GAAG,yBAAyB,SAAS;AAAA,MAChD,OAAO;AAAA,MACN,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;AAEA,WAAW,cAAc;AACzB,WAAW,SAAS;AAIpB,IAAM,iBAA0C,CAAC,EAAE,GAAG,KAAK,MAAM;AAC/D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,SAAQ;AAAA,MACP,GAAG;AAAA,MAEJ,8BAAC,UAAK,GAAE,6GAA4G;AAAA;AAAA,EACtH;AAEJ;AAEA,eAAe,cAAc;AAC7B,eAAe,SAAS;","names":[]}