UNPKG

@scania/tegel

Version:
59 lines (55 loc) 8.08 kB
import { r as registerInstance, c as createEvent, h, a as getElement } from './index-9xxNGlso.js'; import { g as generateUniqueId } from './generateUniqueId-Cn4f8w1e.js'; const toggleCss = () => `.tds-toggle.sc-tds-toggle .disabled.sc-tds-toggle{cursor:not-allowed}.tds-toggle.sc-tds-toggle .toggle-headline.sc-tds-toggle{font:var(--tds-detail-02);letter-spacing:var(--tds-detail-02-ls);color:var(--tds-toggle-headline);margin-bottom:12px}.tds-toggle.sc-tds-toggle .toggle-headline.disabled.sc-tds-toggle{color:var(--tds-toggle-headline-disabled)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle{appearance:initial;margin:0;width:44px;height:24px;position:relative;display:inline-block;vertical-align:middle;cursor:pointer}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle::after,.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle::before{content:"";position:absolute;box-sizing:border-box;transition:all var(--tds-motion-duration-moderate-01) var(--tds-motion-easing-scania)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle::before{width:44px;height:24px;border-radius:16px;background-color:var(--tds-toggle-off-slider);left:0;border:1px solid transparent}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle::after{width:16px;height:16px;background-color:var(--tds-toggle-switch);border-radius:50%;left:4px;top:4px}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:focus-visible{outline:none;outline:2px solid var(--tds-toggle-border-outline);border-radius:16px;outline-offset:-2px}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:focus-visible::before{width:40px;height:20px;left:2px;top:2px;background-color:var(--tds-toggle-off-slider-focus);border:1px solid var(--tds-toggle-off-border-focus)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:hover::before{background-color:var(--tds-toggle-off-slider-hover)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:active::before{background-color:var(--tds-toggle-off-slider-pressed)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:checked::before{background-color:var(--tds-toggle-on-slider)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:checked:focus-visible::before{background-color:var(--tds-toggle-on-slider-focus);border:1px solid var(--tds-toggle-on-border-focus)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:checked:hover::before{background-color:var(--tds-toggle-on-slider-hover)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:checked:active::before{background-color:var(--tds-toggle-on-slider-pressed)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:checked::after{left:24px}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:disabled{cursor:not-allowed}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:disabled::before{background-color:var(--tds-toggle-slider-disabled);border:1px solid var(--tds-toggle-slider-disabled)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:disabled::after{background-color:var(--tds-toggle-switch-disabled)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:disabled:checked::before{background-color:var(--tds-toggle-on-slider-disabled);border:1px solid var(--tds-toggle-on-slider-disabled)}.tds-toggle.sc-tds-toggle input[type=checkbox].sc-tds-toggle:disabled:checked::after{background-color:var(--tds-toggle-switch-disabled)}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle{width:28px;height:16px}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle::before{width:28px;height:16px}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle::after{width:8px;height:8px}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle:focus-visible::before{width:24px;height:12px;left:2px;top:2px;background-color:var(--tds-toggle-off-slider-focus);border:1px solid var(--tds-toggle-off-border-focus)}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle:focus-visible:active::before{background-color:var(--tds-toggle-off-slider-pressed)}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle:active::before{background-color:var(--tds-toggle-off-slider-pressed)}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle:checked::before{background-color:var(--tds-toggle-on-slider)}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle:checked:focus-visible::before{background-color:var(--tds-toggle-on-slider-focus);border:1px solid var(--tds-toggle-on-border-focus)}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle:checked:hover::before{background-color:var(--tds-toggle-on-slider-hover)}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle:checked:active::before{background-color:var(--tds-toggle-on-slider-pressed)}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle:checked::after{left:16px}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle:disabled::before{background-color:var(--tds-toggle-slider-disabled);border:1px solid var(--tds-toggle-slider-disabled)}.tds-toggle.sc-tds-toggle input[type=checkbox].sm.sc-tds-toggle:disabled::after{background-color:var(--tds-toggle-switch-disabled)}.tds-toggle.sc-tds-toggle label.sc-tds-toggle{display:inline-block;vertical-align:middle;font:var(--tds-detail-01);letter-spacing:var(--tds-detail-01-ls);color:var(--tds-toggle-label-color);padding-left:8px;cursor:pointer}.tds-toggle.sc-tds-toggle label.disabled.sc-tds-toggle{color:var(--tds-toggle-label-color-disabled)}`; const TdsToggle = class { constructor(hostRef) { registerInstance(this, hostRef); this.tdsToggle = createEvent(this, "tdsToggle", 6); /** Sets the Toggle as checked */ this.checked = false; /** Make the Toggle required */ this.required = false; /** Size of the Toggle */ this.size = 'lg'; /** Sets the Toggle in a disabled state */ this.disabled = false; /** ID of the Toggle's input element, if not specified, it's randomly generated */ this.toggleId = generateUniqueId(); this.handleToggle = () => { this.checked = !this.checked; this.tdsToggle.emit({ toggleId: this.toggleId, checked: this.checked, }); }; } /** Toggles the Toggle. */ async toggle() { this.checked = !this.checked; return { toggleId: this.toggleId, checked: this.checked, }; } /** Method to programmatically focus the toggle element */ async focusElement() { if (this.inputElement) { this.inputElement.focus(); } } componentWillLoad() { this.labelSlot = this.host.querySelector("[slot='label']"); } render() { return (h("div", { key: 'c1aa9475d114ceed43404e5782281f8890b98722', class: "tds-toggle" }, this.headline && (h("div", { key: '7734e6fec341d4b89857ad6d7d114c57684e7730', class: { 'toggle-headline': true, 'disabled': this.disabled, } }, this.headline)), h("input", { key: '6a6420579c616daea95b0b07a194a0e4cc206c47', ref: (inputEl) => { if (inputEl) this.inputElement = inputEl; }, "aria-label": this.tdsAriaLabel, "aria-describedby": this.host.getAttribute('aria-describedby'), "aria-labelledby": this.host.getAttribute('aria-labelledby'), "aria-checked": this.checked, "aria-required": this.required, onChange: () => this.handleToggle(), class: `${this.size}`, checked: this.checked, disabled: this.disabled, required: this.required, type: "checkbox", name: this.name, id: this.toggleId, role: "switch" }), this.labelSlot && (h("label", { key: 'f6120cfbd981949507274eb628b6c84af4fecfd1', class: { disabled: this.disabled }, htmlFor: this.toggleId }, h("slot", { key: '0998bb02cf4626f7589556c4bb2ce9846e4028de', name: "label" }))))); } get host() { return getElement(this); } }; TdsToggle.style = toggleCss(); export { TdsToggle as tds_toggle };