/**
 * @license
 * Copyright 2023 Tyler Technologies, Inc. 
 * License: Apache-2.0
 */
import { __decorate } from "tslib";
import { CustomElement, attachShadowTemplate, FoundationProperty, coerceBoolean } from '@tylertech/forge-core';
import { RADIO_CONSTANTS } from './radio-constants';
import { RadioFoundation } from './radio-foundation';
import { RadioAdapter } from './radio-adapter';
import { BaseComponent } from '../core/base/base-component';
const template = '<template><div class=\"forge-radio-wrapper forge-form-field\" part=\"root\"><div class=\"mdc-radio\" part=\"container\"><slot></slot><div class=\"mdc-radio__background\" part=\"background\"><div class=\"mdc-radio__outer-circle\" part=\"outer-circle\"></div><div class=\"mdc-radio__inner-circle\" part=\"inner-circle\"></div></div><div class=\"mdc-radio__ripple\" part=\"ripple-container\"></div></div><slot name=\"label\"></slot></div></template>';
const styles = '.mdc-radio{padding:10px;display:inline-block;position:relative;-webkit-box-flex:0;flex:0 0 auto;-webkit-box-sizing:content-box;box-sizing:content-box;width:20px;height:20px;cursor:pointer;will-change:opacity,transform,border-color,color}.mdc-radio.forge-radio--enabled .mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0,0,0,.54);border-color:var(--mdc-theme-text-secondary-on-background,rgba(0,0,0,.54))}.mdc-radio.forge-radio--enabled.forge-radio--checked .mdc-radio__background .mdc-radio__outer-circle{border-color:#3d5afe;border-color:var(--forge-theme-tertiary,#3d5afe)}.mdc-radio.forge-radio--enabled .mdc-radio__background .mdc-radio__inner-circle{border-color:#3d5afe;border-color:var(--forge-theme-tertiary,#3d5afe)}.mdc-radio.mdc-radio--disabled .mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0,0,0,.26);border-color:var(--forge-theme-form-field-icon-disabled-on-background,rgba(0,0,0,.26))}.mdc-radio.mdc-radio--disabled.forge-radio--checked .mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0,0,0,.26);border-color:var(--forge-theme-form-field-icon-disabled-on-background,rgba(0,0,0,.26))}.mdc-radio.mdc-radio--disabled .mdc-radio__background .mdc-radio__inner-circle{border-color:rgba(0,0,0,.26);border-color:var(--forge-theme-form-field-icon-disabled-on-background,rgba(0,0,0,.26))}.mdc-radio .mdc-radio__background::before{background-color:#3d5afe;background-color:var(--forge-theme-tertiary,#3d5afe)}.mdc-radio .mdc-radio__background::before{top:-10px;left:-10px;width:40px;height:40px}.mdc-radio .mdc-radio__native-control{top:0;right:0;left:0;width:40px;height:40px}@media screen and (forced-colors:active),(-ms-high-contrast:active){.mdc-radio.mdc-radio--disabled .mdc-radio__background .mdc-radio__outer-circle{border-color:GrayText}.mdc-radio.mdc-radio--disabled.forge-radio--checked .mdc-radio__background .mdc-radio__outer-circle{border-color:GrayText}.mdc-radio.mdc-radio--disabled .mdc-radio__background .mdc-radio__inner-circle{border-color:GrayText}}.mdc-radio__background{display:inline-block;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:20px;height:20px}.mdc-radio__background::before{position:absolute;-webkit-transform:scale(0,0);transform:scale(0,0);border-radius:50%;opacity:0;pointer-events:none;content:\"\";-webkit-transition:opacity 120ms 0s cubic-bezier(.4, 0, .6, 1),-webkit-transform 120ms 0s cubic-bezier(.4, 0, .6, 1);transition:opacity 120ms 0s cubic-bezier(.4, 0, .6, 1),-webkit-transform 120ms 0s cubic-bezier(.4, 0, .6, 1);transition:opacity 120ms 0s cubic-bezier(.4, 0, .6, 1),transform 120ms 0s cubic-bezier(.4, 0, .6, 1);transition:opacity 120ms 0s cubic-bezier(.4, 0, .6, 1),transform 120ms 0s cubic-bezier(.4, 0, .6, 1),-webkit-transform 120ms 0s cubic-bezier(.4, 0, .6, 1)}.mdc-radio__outer-circle{position:absolute;top:0;left:0;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:100%;border-width:2px;border-style:solid;border-radius:50%;-webkit-transition:border-color 120ms 0s cubic-bezier(.4, 0, .6, 1);transition:border-color 120ms 0s cubic-bezier(.4, 0, .6, 1)}.mdc-radio__inner-circle{position:absolute;top:0;left:0;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:100%;-webkit-transform:scale(0,0);transform:scale(0,0);border-width:10px;border-style:solid;border-radius:50%;-webkit-transition:border-color 120ms 0s cubic-bezier(.4, 0, .6, 1),-webkit-transform 120ms 0s cubic-bezier(.4, 0, .6, 1);transition:border-color 120ms 0s cubic-bezier(.4, 0, .6, 1),-webkit-transform 120ms 0s cubic-bezier(.4, 0, .6, 1);transition:transform 120ms 0s cubic-bezier(.4, 0, .6, 1),border-color 120ms 0s cubic-bezier(.4, 0, .6, 1);transition:transform 120ms 0s cubic-bezier(.4, 0, .6, 1),border-color 120ms 0s cubic-bezier(.4, 0, .6, 1),-webkit-transform 120ms 0s cubic-bezier(.4, 0, .6, 1)}.mdc-radio ::slotted(input[type=radio]){position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1;top:0;right:0;left:0;width:40px;height:40px}.mdc-radio.forge-radio--dense{padding:4px;margin:0}.mdc-radio.forge-radio--dense .mdc-radio__background::before{top:-4px;left:-4px;width:28px;height:28px}.mdc-radio.forge-radio--dense .mdc-radio__native-control{top:0;right:0;left:0;width:28px;height:28px}.mdc-radio.forge-radio--dense ::slotted(input[type=radio]){width:28px;height:28px}.mdc-radio--disabled+::slotted(label){color:rgba(0,0,0,.38);color:var(--forge-theme-label-disabled-on-background,rgba(0,0,0,.38))}.forge-radio--checked .mdc-radio__background,.mdc-radio--disabled .mdc-radio__background{-webkit-transition:opacity 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1);transition:opacity 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1);transition:opacity 120ms 0s cubic-bezier(0, 0, .2, 1),transform 120ms 0s cubic-bezier(0, 0, .2, 1);transition:opacity 120ms 0s cubic-bezier(0, 0, .2, 1),transform 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1)}.forge-radio--checked .mdc-radio__background .mdc-radio__outer-circle,.mdc-radio--disabled .mdc-radio__background .mdc-radio__outer-circle{-webkit-transition:border-color 120ms 0s cubic-bezier(0, 0, .2, 1);transition:border-color 120ms 0s cubic-bezier(0, 0, .2, 1)}.forge-radio--checked .mdc-radio__background .mdc-radio__inner-circle,.mdc-radio--disabled .mdc-radio__background .mdc-radio__inner-circle{-webkit-transition:border-color 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1);transition:border-color 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1);transition:transform 120ms 0s cubic-bezier(0, 0, .2, 1),border-color 120ms 0s cubic-bezier(0, 0, .2, 1);transition:transform 120ms 0s cubic-bezier(0, 0, .2, 1),border-color 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1)}.mdc-radio--disabled{cursor:default;pointer-events:none}.forge-radio--checked .mdc-radio__background .mdc-radio__inner-circle{-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition:border-color 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1);transition:border-color 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1);transition:transform 120ms 0s cubic-bezier(0, 0, .2, 1),border-color 120ms 0s cubic-bezier(0, 0, .2, 1);transition:transform 120ms 0s cubic-bezier(0, 0, .2, 1),border-color 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1)}.mdc-radio--disabled .mdc-radio__background{cursor:default}.forge-radio--focused .mdc-radio__background::before{-webkit-transform:scale(1);transform:scale(1);opacity:.12;-webkit-transition:opacity 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1);transition:opacity 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1);transition:opacity 120ms 0s cubic-bezier(0, 0, .2, 1),transform 120ms 0s cubic-bezier(0, 0, .2, 1);transition:opacity 120ms 0s cubic-bezier(0, 0, .2, 1),transform 120ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms 0s cubic-bezier(0, 0, .2, 1)}@-webkit-keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4,0,0.2,1);animation-timing-function:cubic-bezier(0.4,0,0.2,1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}}@keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4,0,0.2,1);animation-timing-function:cubic-bezier(0.4,0,0.2,1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}}@-webkit-keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@-webkit-keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}@keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}.mdc-radio{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:transparent;will-change:transform,opacity}.mdc-radio .mdc-radio__ripple::after,.mdc-radio .mdc-radio__ripple::before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:\"\"}.mdc-radio .mdc-radio__ripple::before{-webkit-transition:opacity 15ms linear,background-color 15ms linear;transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-radio .mdc-radio__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale,1));transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-radio.mdc-ripple-upgraded--unbounded .mdc-radio__ripple::after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-radio.mdc-ripple-upgraded--foreground-activation .mdc-radio__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-radio.mdc-ripple-upgraded--foreground-deactivation .mdc-radio__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-radio .mdc-radio__ripple::after,.mdc-radio .mdc-radio__ripple::before{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after,.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::before{top:var(--mdc-ripple-top,calc(50% - 50%));left:var(--mdc-ripple-left,calc(50% - 50%));width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-radio .mdc-radio__ripple::after,.mdc-radio .mdc-radio__ripple::before{background-color:#3d5afe;background-color:var(--forge-theme-tertiary,#3d5afe)}.mdc-radio.mdc-ripple-surface--hover .mdc-radio__ripple::before,.mdc-radio:hover .mdc-radio__ripple::before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity, .04)}.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__ripple::before,.mdc-radio:not(.mdc-ripple-upgraded):focus .mdc-radio__ripple::before{-webkit-transition-duration:75ms;transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity, .12)}.mdc-radio:not(.mdc-ripple-upgraded) .mdc-radio__ripple::after{-webkit-transition:opacity 150ms linear;transition:opacity 150ms linear}.mdc-radio:not(.mdc-ripple-upgraded):active .mdc-radio__ripple::after{-webkit-transition-duration:75ms;transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity, .12)}.mdc-radio.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-radio.mdc-ripple-upgraded .mdc-radio__background::before,.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__background::before{content:none}.mdc-radio__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.forge-radio-wrapper--disabled{cursor:not-allowed}.forge-radio-wrapper--disabled ::slotted(label){cursor:not-allowed}.forge-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, .875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight,400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, .0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform,inherit);color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87));display:-webkit-inline-box;display:inline-flex;-webkit-box-align:center;align-items:center;vertical-align:middle}.forge-form-field ::slotted([slot=label]){-webkit-box-ordinal-group:1;order:0;margin-right:auto;padding-left:4px}.forge-form-field forge-switch~::slotted([slot=label]){padding-left:8px}.forge-form-field--align-end ::slotted([slot=label]){-webkit-box-ordinal-group:0;order:-1;margin-left:auto;padding-right:4px}:host{display:inline-block}:host([hidden]){display:none}';
/**
 * The custom element class behind the `<forge-radio>` element.
 *
 * @tag forge-radio
 */
let RadioComponent = class RadioComponent extends BaseComponent {
    constructor() {
        super();
        attachShadowTemplate(this, template, styles);
        this._foundation = new RadioFoundation(new RadioAdapter(this));
    }
    static get observedAttributes() {
        return [
            RADIO_CONSTANTS.attributes.DENSE
        ];
    }
    connectedCallback() {
        this._ensureRadioInputElement().then(() => this._foundation.connect());
    }
    disconnectedCallback() {
        this._foundation.disconnect();
    }
    attributeChangedCallback(name, oldValue, newValue) {
        switch (name) {
            case RADIO_CONSTANTS.attributes.DENSE:
                this.dense = coerceBoolean(newValue);
                break;
        }
    }
    _ensureRadioInputElement() {
        // Not using core function ensureChild because it was not selecting the input properly
        return new Promise(resolve => {
            const element = this.querySelector(RADIO_CONSTANTS.selectors.RADIO_INPUT);
            if (element) {
                resolve();
                return;
            }
            const observer = new MutationObserver(changes => {
                const hasAddedNodes = changes.reduce((prev, curr) => prev + curr.addedNodes.length, 0) > 0;
                if (hasAddedNodes) {
                    if (this.querySelector(RADIO_CONSTANTS.selectors.RADIO_INPUT)) {
                        observer.disconnect();
                        resolve();
                    }
                }
            });
            observer.observe(this, { childList: true, subtree: true });
        });
    }
    syncCheckedState() {
        this._foundation.syncCheckedState();
    }
};
__decorate([
    FoundationProperty()
], RadioComponent.prototype, "dense", void 0);
RadioComponent = __decorate([
    CustomElement({
        name: RADIO_CONSTANTS.elementName
    })
], RadioComponent);
export { RadioComponent };
