// components/Rating.js
import { $html } from "sigpro";
import { val, ui, joinClass } from "../core/utils.js";
export const Rating = (props) => {
const { ui: uiProps, class: className, value, count = 5, mask = "mask-star", readonly = false, onchange, ...rest } = props;
const dynamicClasses = [
ui('rating', uiProps),
className
].filter(Boolean).join(' ');
const ratingGroup = `rating-${Math.random().toString(36).slice(2, 7)}`;
return $html(
"div",
{
...rest,
class: () => joinClass(`rating ${val(readonly) ? "pointer-events-none" : ""}`, dynamicClasses),
},
Array.from({ length: val(count) }, (_, i) => {
const starValue = i + 1;
return $html("input", {
type: "radio",
name: ratingGroup,
class: `mask ${mask}`,
checked: () => Math.round(val(value)) === starValue,
onchange: () => {
if (!val(readonly)) {
if (typeof onchange === "function") {
onchange(starValue);
}
else if (typeof value === "function") {
value(starValue);
}
}
},
});
})
);
};