import * as React from 'react'; import classNames from 'classnames'; import { classNameModifier } from '../shared/utils'; import { ComponentClassNames } from '../shared/constants'; import { Flex } from '../Flex'; import { IconStar } from '../Icon/internal'; import { isIconFilled, isIconEmpty, isIconMixed } from './utils'; import { RatingIcon } from './RatingIcon'; import { RatingMixedIcon } from './RatingMixedIcon'; import { BaseRatingProps, RatingProps, ForwardRefPrimitive, Primitive, } from '../types'; import { VisuallyHidden } from '../VisuallyHidden'; const RATING_DEFAULT_MAX_VALUE = 5; const RATING_DEFAULT_VALUE = 0; const RatingPrimitive: Primitive = ( { className, emptyColor, emptyIcon, fillColor, icon = , maxValue = RATING_DEFAULT_MAX_VALUE, size, value = RATING_DEFAULT_VALUE, ...rest }, ref ) => { const items = new Array(Math.ceil(maxValue)).fill(1).map((_, index) => { const currentIconIndex = index + 1; if (isIconFilled(currentIconIndex, value)) return ( ); if (isIconEmpty(currentIconIndex, value)) return ( ); if (isIconMixed(currentIconIndex, value)) return ( ); }); return ( {items} {value} out of {maxValue} rating ); }; /** * [📖 Docs](https://ui.docs.amplify.aws/react/components/rating) */ export const Rating: ForwardRefPrimitive = React.forwardRef(RatingPrimitive); Rating.displayName = 'Rating';