UNPKG

@synergy-design-system/components

Version:
130 lines (126 loc) 3.63 kB
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