import {
o as o2
} from "./chunk.EPTJRW4G.js";
import {
clamp
} from "./chunk.T56CG5BM.js";
import {
i
} from "./chunk.DA3UDEH5.js";
import {
focusVisible
} from "./chunk.XAZSQ3AT.js";
import {
event,
watch
} from "./chunk.XX234VRK.js";
import {
e as e2
} from "./chunk.YXKHB4AC.js";
import {
T,
e,
h,
n,
o,
r,
r2
} from "./chunk.5PIDMFOE.js";
import {
__decorateClass
} from "./chunk.IHGPZX35.js";
// _uyihdawu1:/Users/claviska/Projects/shoelace/src/components/rating/rating.scss
var rating_default = ":host {\n position: relative;\n box-sizing: border-box;\n}\n:host *, :host *:before, :host *:after {\n box-sizing: inherit;\n}\n\n[hidden] {\n display: none !important;\n}\n\n:host {\n --symbol-color: var(--sl-color-gray-300);\n --symbol-color-active: #ffbe00;\n --symbol-size: 1.2rem;\n --symbol-spacing: var(--sl-spacing-xxx-small);\n display: inline-flex;\n}\n\n.rating {\n position: relative;\n display: inline-flex;\n border-radius: var(--sl-border-radius-medium);\n vertical-align: middle;\n}\n.rating:focus {\n outline: none;\n}\n.rating.focus-visible:focus {\n box-shadow: 0 0 0 var(--sl-focus-ring-width) var(--sl-focus-ring-color-primary);\n}\n\n.rating__symbols {\n display: inline-flex;\n position: relative;\n font-size: var(--symbol-size);\n line-height: 0;\n color: var(--symbol-color);\n white-space: nowrap;\n cursor: pointer;\n}\n.rating__symbols > * {\n padding: var(--symbol-spacing);\n}\n\n.rating__symbols--indicator {\n position: absolute;\n top: 0;\n left: 0;\n color: var(--symbol-color-active);\n pointer-events: none;\n}\n\n.rating__symbol {\n transition: var(--sl-transition-fast) transform;\n}\n\n.rating__symbol--hover {\n transform: scale(1.2);\n}\n\n.rating--disabled .rating__symbols,\n.rating--readonly .rating__symbols {\n cursor: default;\n}\n.rating--disabled .rating__symbol--hover,\n.rating--readonly .rating__symbol--hover {\n transform: none;\n}\n\n.rating--disabled {\n opacity: 0.5;\n}\n.rating--disabled .rating__symbols {\n cursor: not-allowed;\n}";
// src/components/rating/rating.ts
var SlRating = class extends h {
constructor() {
super(...arguments);
this.hoverValue = 0;
this.isHovering = false;
this.value = 0;
this.max = 5;
this.precision = 1;
this.readonly = false;
this.disabled = false;
this.getSymbol = (value) => '';
}
focus(options) {
this.rating.focus(options);
}
blur() {
this.rating.blur();
}
connectedCallback() {
super.connectedCallback();
this.updateComplete.then(() => focusVisible.observe(this.rating));
}
disconnectedCallback() {
super.disconnectedCallback();
focusVisible.unobserve(this.rating);
}
getValueFromMousePosition(event2) {
return this.getValueFromXCoordinate(event2.clientX);
}
getValueFromTouchPosition(event2) {
return this.getValueFromXCoordinate(event2.touches[0].clientX);
}
getValueFromXCoordinate(coordinate) {
const containerLeft = this.rating.getBoundingClientRect().left;
const containerWidth = this.rating.getBoundingClientRect().width;
return clamp(this.roundToPrecision((coordinate - containerLeft) / containerWidth * this.max, this.precision), 0, this.max);
}
handleClick(event2) {
this.setValue(this.getValueFromMousePosition(event2));
}
setValue(newValue) {
if (this.disabled || this.readonly) {
return;
}
this.value = newValue === this.value ? 0 : newValue;
this.isHovering = false;
}
handleKeyDown(event2) {
if (this.disabled || this.readonly) {
return;
}
if (event2.key === "ArrowLeft") {
const decrement = event2.shiftKey ? 1 : this.precision;
this.value = Math.max(0, this.value - decrement);
event2.preventDefault();
}
if (event2.key === "ArrowRight") {
const increment = event2.shiftKey ? 1 : this.precision;
this.value = Math.min(this.max, this.value + increment);
event2.preventDefault();
}
if (event2.key === "Home") {
this.value = 0;
event2.preventDefault();
}
if (event2.key === "End") {
this.value = this.max;
event2.preventDefault();
}
}
handleMouseEnter() {
this.isHovering = true;
}
handleMouseMove(event2) {
this.hoverValue = this.getValueFromMousePosition(event2);
}
handleMouseLeave() {
this.isHovering = false;
}
handleTouchStart(event2) {
this.hoverValue = this.getValueFromTouchPosition(event2);
event2.preventDefault();
}
handleTouchMove(event2) {
this.isHovering = true;
this.hoverValue = this.getValueFromTouchPosition(event2);
}
handleTouchEnd(event2) {
this.isHovering = false;
this.setValue(this.hoverValue);
event2.preventDefault();
}
handleValueChange() {
this.slChange.emit();
}
roundToPrecision(numberToRound, precision = 0.5) {
const multiplier = 1 / precision;
return Math.ceil(numberToRound * multiplier) / multiplier;
}
render() {
const counter = Array.from(Array(this.max).keys());
let displayValue = 0;
if (this.disabled || this.readonly) {
displayValue = this.value;
} else {
displayValue = this.isHovering ? this.hoverValue : this.value;
}
return T`
${counter.map((index) => {
return T`
${o2(this.getSymbol(index + 1))}
`;
})}
${counter.map((index) => {
return T`
index + 1 ? "none" : `inset(0 ${100 - (displayValue - index) / 1 * 100}% 0 0)`
})}
role="presentation"
>
${o2(this.getSymbol(index + 1))}
`;
})}
`;
}
};
SlRating.styles = r(rating_default);
__decorateClass([
o(".rating")
], SlRating.prototype, "rating", 2);
__decorateClass([
r2()
], SlRating.prototype, "hoverValue", 2);
__decorateClass([
r2()
], SlRating.prototype, "isHovering", 2);
__decorateClass([
e({ type: Number })
], SlRating.prototype, "value", 2);
__decorateClass([
e({ type: Number })
], SlRating.prototype, "max", 2);
__decorateClass([
e({ type: Number })
], SlRating.prototype, "precision", 2);
__decorateClass([
e({ type: Boolean, reflect: true })
], SlRating.prototype, "readonly", 2);
__decorateClass([
e({ type: Boolean, reflect: true })
], SlRating.prototype, "disabled", 2);
__decorateClass([
e()
], SlRating.prototype, "getSymbol", 2);
__decorateClass([
event("sl-change")
], SlRating.prototype, "slChange", 2);
__decorateClass([
watch("value")
], SlRating.prototype, "handleValueChange", 1);
SlRating = __decorateClass([
n("sl-rating")
], SlRating);
var rating_default2 = SlRating;
export {
rating_default2 as rating_default
};