@synergy-design-system/components
Version:
130 lines (126 loc) • 3.63 kB
JavaScript
import {
radio_styles_default
} from "./chunk.432DTUIX.js";
import {
SynIcon
} from "./chunk.KODS2CCZ.js";
import {
enableDefaultSettings
} from "./chunk.WYMKPLYK.js";
import {
watch
} from "./chunk.UR2E7Y2Q.js";
import {
component_styles_default
} from "./chunk.2NT3B5WJ.js";
import {
SynergyElement
} from "./chunk.L2IYPRPF.js";
import {
__decorateClass
} from "./chunk.VK2FVWOF.js";
// src/components/radio/radio.component.ts
import { classMap } from "lit/directives/class-map.js";
import { html } from "lit";
import { property, state } from "lit/decorators.js";
var SynRadio = class extends SynergyElement {
constructor() {
super();
this.checked = false;
this.hasFocus = false;
this.size = "medium";
this.disabled = false;
this.readonly = false;
this.handleBlur = () => {
this.hasFocus = false;
this.emit("syn-blur");
};
this.handleClick = () => {
if (this.readonly) {
this.focus();
return;
}
if (!this.disabled) {
this.checked = true;
}
};
this.handleFocus = () => {
this.hasFocus = true;
this.emit("syn-focus");
};
this.addEventListener("blur", this.handleBlur);
this.addEventListener("click", this.handleClick);
this.addEventListener("focus", this.handleFocus);
}
connectedCallback() {
super.connectedCallback();
this.setInitialAttributes();
}
setInitialAttributes() {
this.setAttribute("role", "radio");
this.setAttribute("tabindex", "-1");
this.setAttribute("aria-disabled", this.disabled || this.readonly ? "true" : "false");
}
handleCheckedChange() {
this.setAttribute("aria-checked", this.checked ? "true" : "false");
this.setAttribute("tabindex", this.checked ? "0" : "-1");
}
handleDisabledChange() {
this.setAttribute("aria-disabled", this.disabled || this.readonly ? "true" : "false");
}
render() {
return html`
<span
part="base"
class=${classMap({
radio: true,
"radio--checked": this.checked,
"radio--disabled": this.disabled,
"radio--focused": this.hasFocus,
"radio--large": this.size === "large",
"radio--medium": this.size === "medium",
"radio--readonly": this.readonly,
"radio--small": this.size === "small"
})}
>
<span part="${`control${this.checked ? " control--checked" : ""}`}" class="radio__control">
${this.checked ? html` <syn-icon part="checked-icon" class="radio__checked-icon" library="system" name="radio"></syn-icon> ` : ""}
</span>
<slot part="label" class="radio__label"></slot>
</span>
`;
}
};
SynRadio.styles = [component_styles_default, radio_styles_default];
SynRadio.dependencies = { "syn-icon": SynIcon };
__decorateClass([
state()
], SynRadio.prototype, "checked", 2);
__decorateClass([
state()
], SynRadio.prototype, "hasFocus", 2);
__decorateClass([
property()
], SynRadio.prototype, "value", 2);
__decorateClass([
property({ reflect: true })
], SynRadio.prototype, "size", 2);
__decorateClass([
property({ reflect: true, type: Boolean })
], SynRadio.prototype, "disabled", 2);
__decorateClass([
property({ reflect: true, type: Boolean })
], SynRadio.prototype, "readonly", 2);
__decorateClass([
watch("checked")
], SynRadio.prototype, "handleCheckedChange", 1);
__decorateClass([
watch(["disabled", "readonly"], { waitUntilFirstUpdate: true })
], SynRadio.prototype, "handleDisabledChange", 1);
SynRadio = __decorateClass([
enableDefaultSettings("SynRadio")
], SynRadio);
export {
SynRadio
};
//# sourceMappingURL=chunk.DIMOR6KY.js.map