@chakra-ui/react
Version:
Responsive and accessible React UI components built with React and Emotion
73 lines (69 loc) • 3.28 kB
JavaScript
"use client";
;
var jsxRuntime = require('react/jsx-runtime');
var ratingGroup = require('@ark-ui/react/rating-group');
var React = require('react');
var createSlotRecipeContext = require('../../styled-system/create-slot-recipe-context.cjs');
var factory = require('../../styled-system/factory.cjs');
var icons = require('../icons.cjs');
var _for = require('../for/for.cjs');
const {
withProvider,
withContext,
useStyles: useRatingGroupStyles,
PropsProvider
} = createSlotRecipeContext.createSlotRecipeContext({ key: "ratingGroup" });
const RatingGroupRootProvider = withProvider(ratingGroup.RatingGroup.RootProvider, "root", { forwardAsChild: true });
const RatingGroupRoot = withProvider(ratingGroup.RatingGroup.Root, "root", { forwardAsChild: true });
const RatingGroupPropsProvider = PropsProvider;
const RatingGroupLabel = withContext(ratingGroup.RatingGroup.Label, "label", { forwardAsChild: true });
const RatingGroupItem = withContext(ratingGroup.RatingGroup.Item, "item", { forwardAsChild: true });
function cloneIcon(icon, type) {
if (!React.isValidElement(icon)) return null;
const props = { [`data-${type}`]: "", "aria-hidden": "" };
return React.cloneElement(icon, props);
}
const RatingGroupItemIndicator = React.forwardRef(function RatingGroupItemIndicator2(props, ref) {
const { icon = /* @__PURE__ */ jsxRuntime.jsx(icons.StarIcon, {}), ...rest } = props;
const styles = useRatingGroupStyles();
const itemState = ratingGroup.useRatingGroupItemContext();
return /* @__PURE__ */ jsxRuntime.jsxs(
factory.chakra.span,
{
...rest,
"data-highlighted": itemState.highlighted ? "" : void 0,
"data-checked": itemState.checked ? "" : void 0,
"data-half": itemState.half ? "" : void 0,
css: [styles.itemIndicator, props.css],
ref,
children: [
cloneIcon(icon, "bg"),
cloneIcon(icon, "fg")
]
}
);
});
const RatingGroupItems = (props) => {
const api = ratingGroup.useRatingGroupContext();
return /* @__PURE__ */ jsxRuntime.jsx(_for.For, { each: api.items, children: (index) => /* @__PURE__ */ jsxRuntime.jsx(RatingGroupItem, { index, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(RatingGroupItemIndicator, {}) }, index) });
};
const RatingGroupControl = withContext(ratingGroup.RatingGroup.Control, "control", {
forwardAsChild: true,
defaultProps: { children: /* @__PURE__ */ jsxRuntime.jsx(RatingGroupItems, {}) }
});
const RatingGroupContext = ratingGroup.RatingGroup.Context;
const RatingGroupItemContext = ratingGroup.RatingGroup.ItemContext;
const RatingGroupHiddenInput = ratingGroup.RatingGroup.HiddenInput;
exports.RatingGroupContext = RatingGroupContext;
exports.RatingGroupControl = RatingGroupControl;
exports.RatingGroupHiddenInput = RatingGroupHiddenInput;
exports.RatingGroupItem = RatingGroupItem;
exports.RatingGroupItemContext = RatingGroupItemContext;
exports.RatingGroupItemIndicator = RatingGroupItemIndicator;
exports.RatingGroupItems = RatingGroupItems;
exports.RatingGroupLabel = RatingGroupLabel;
exports.RatingGroupPropsProvider = RatingGroupPropsProvider;
exports.RatingGroupRoot = RatingGroupRoot;
exports.RatingGroupRootProvider = RatingGroupRootProvider;
exports.useRatingGroupStyles = useRatingGroupStyles;
;