import * as i1 from '@angular/common';
import { CommonModule } from '@angular/common';
import * as i0 from '@angular/core';
import { inject, ChangeDetectorRef, input, booleanAttribute, model, contentChild, output, computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';
import * as i2 from '@angular/forms';
import { NgForm, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';
import * as i3 from '@angular/material/form-field';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import * as i4 from '@angular/material/radio';
import { MatRadioModule } from '@angular/material/radio';
import { MatTooltipModule } from '@angular/material/tooltip';
import { Subscription } from 'rxjs';
import * as uuid from 'uuid';
import { SdSuffixDefDirective, SdLabelDefDirective, SdViewDefDirective } from '@sdcorejs/angular/forms/directives';
import { SdFormControl, sdViewedTransform, sdViewedInline, sdFormControlState, SdInlineErrorValidator } from '@sdcorejs/angular/forms/models';
import { sdIsEmpty, sdSerializeDataValue } from '@sdcorejs/angular/utilities/data-state';
import { TranslatePipe } from '@sdcorejs/angular/i18n';
import { SdEmptyPipe } from '@sdcorejs/angular/pipes';
import { SdLabel } from '@sdcorejs/angular/forms/label';
import { SdHrefDirective } from '@sdcorejs/angular/directives';

/* eslint-disable @typescript-eslint/no-explicit-any */
// eslint-disable-next-line @angular-eslint/component-class-suffix
class SdRadio {
    #ref = inject(ChangeDetectorRef);
    id = `I${uuid.v4()}`;
    #name = uuid.v4();
    formControl = new SdFormControl();
    #subscription = new Subscription();
    // Inputs — accept null|undefined at boundary, transform to canonical
    autoIdInput = input(undefined, { ...(ngDevMode ? { debugName: "autoIdInput" } : /* istanbul ignore next */ {}), alias: 'autoId',
        transform: (v) => v ?? undefined });
    name = input(undefined, { ...(ngDevMode ? { debugName: "name" } : /* istanbul ignore next */ {}), transform: (v) => v ?? undefined });
    // why: parent may bind NgForm (template-driven), FormGroup (reactive), or a wrapper with `.form`.
    // Transform once at the input boundary so the rest of the component only deals with FormGroup.
    form = input(undefined, { ...(ngDevMode ? { debugName: "form" } : /* istanbul ignore next */ {}), transform: (val) => {
            if (!val)
                return undefined;
            if (val instanceof NgForm)
                return val.form;
            if (val instanceof FormGroup)
                return val;
            if (val?.form instanceof FormGroup)
                return val.form;
            return undefined;
        } });
    label = input(undefined, { ...(ngDevMode ? { debugName: "label" } : /* istanbul ignore next */ {}), transform: (v) => v ?? undefined });
    placeholder = input(undefined, { ...(ngDevMode ? { debugName: "placeholder" } : /* istanbul ignore next */ {}), transform: (v) => v ?? undefined });
    display = input('row', { ...(ngDevMode ? { debugName: "display" } : /* istanbul ignore next */ {}), transform: (v) => v || 'row' });
    items = input([], { ...(ngDevMode ? { debugName: "items" } : /* istanbul ignore next */ {}), transform: (v) => (Array.isArray(v) ? v : []) });
    valueField = input.required(...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
    displayField = input.required(...(ngDevMode ? [{ debugName: "displayField" }] : /* istanbul ignore next */ []));
    required = input(false, { ...(ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
    inlineError = input(undefined, { ...(ngDevMode ? { debugName: "inlineError" } : /* istanbul ignore next */ {}), transform: (v) => v ?? undefined });
    disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
    /** Display mode: `false` edit · `true` static view · `'inline'` interactive (disabled `'inline'` → static). */
    viewed = input(false, { ...(ngDevMode ? { debugName: "viewed" } : /* istanbul ignore next */ {}), transform: sdViewedTransform });
    // why: tri-state viewed — `'inline'` keeps the radio group interactive; disabled `'inline'` → static.
    #viewedState = sdViewedInline(this.viewed, undefined, this.disabled);
    /** `true` when the static read-only view should render. */
    isViewed = this.#viewedState.isViewed;
    // why: legacy callers pass `null` → fallback to 'primary'. Color enum mở rộng hơn ThemePalette,
    // áp dụng qua host attr [data-sd-color] + SCSS override MDC token vars (mat [color] không nhận 'success'/'info'/...).
    color = input('primary', { ...(ngDevMode ? { debugName: "color" } : /* istanbul ignore next */ {}), transform: (v) => v || 'primary' });
    hyperlink = input(undefined, { ...(ngDevMode ? { debugName: "hyperlink" } : /* istanbul ignore next */ {}), transform: (v) => v ?? undefined });
    // Two-way model
    model = model(undefined, ...(ngDevMode ? [{ debugName: "model" }] : /* istanbul ignore next */ []));
    // Content children
    sdSuffixDef = contentChild(SdSuffixDefDirective, ...(ngDevMode ? [{ debugName: "sdSuffixDef" }] : /* istanbul ignore next */ []));
    sdLabelDef = contentChild(SdLabelDefDirective, ...(ngDevMode ? [{ debugName: "sdLabelDef" }] : /* istanbul ignore next */ []));
    sdViewDef = contentChild(SdViewDefDirective, ...(ngDevMode ? [{ debugName: "sdViewDef" }] : /* istanbul ignore next */ []));
    // Outputs (modelChange auto-generated by model() signal)
    sdChange = output();
    sdSelection = output();
    // Computed (template bindings)
    autoId = computed(() => (this.autoIdInput() ? `forms-radio-${this.autoIdInput()}` : undefined), ...(ngDevMode ? [{ debugName: "autoId" }] : /* istanbul ignore next */ []));
    // Kept for back-compat with templates that read `normalizedItems()` — alias of items()
    normalizedItems = computed(() => this.items(), ...(ngDevMode ? [{ debugName: "normalizedItems" }] : /* istanbul ignore next */ []));
    #state = sdFormControlState(computed(() => this.formControl));
    dataDisabled = computed(() => (this.#state().disabled ? 'true' : 'false'), ...(ngDevMode ? [{ debugName: "dataDisabled" }] : /* istanbul ignore next */ []));
    dataEmpty = computed(() => (sdIsEmpty(this.#state().value) ? 'true' : 'false'), ...(ngDevMode ? [{ debugName: "dataEmpty" }] : /* istanbul ignore next */ []));
    dataValue = computed(() => sdSerializeDataValue(this.#state().value), ...(ngDevMode ? [{ debugName: "dataValue" }] : /* istanbul ignore next */ []));
    dataRequired = computed(() => (this.required() ? 'true' : 'false'), ...(ngDevMode ? [{ debugName: "dataRequired" }] : /* istanbul ignore next */ []));
    viewedText = computed(() => {
        const items = this.items();
        const vField = this.valueField();
        const dField = this.displayField();
        // why: tìm item match value rồi trả về string ở `displayField`, không trả nguyên object (sẽ in [object Object]).
        const match = items.find(e => this.formControl?.value?.toString() === e?.[vField]?.toString());
        return match?.[dField] ?? '';
    }, ...(ngDevMode ? [{ debugName: "viewedText" }] : /* istanbul ignore next */ []));
    constructor() {
        effect(() => {
            const val = this.name();
            if (val)
                this.#name = val;
        });
        effect(() => {
            const value = this.model();
            if (value !== this.formControl.value) {
                this.formControl.setValue(value, { emitEvent: false });
            }
        });
        effect(() => {
            if (this.disabled())
                this.formControl.disable();
            else
                this.formControl.enable();
        });
        effect(() => {
            this.required();
            this.inlineError();
            this.#updateValidator();
        });
    }
    ngOnInit() {
        this.#subscription.add(this.formControl.sdChanges.subscribe(() => {
            this.#ref.markForCheck();
        }));
    }
    ngAfterViewInit() {
        this.#subscription.add(this.formControl.valueChanges.subscribe(value => {
            const vField = this.valueField();
            this.model.set(value);
            this.sdChange.emit(value);
            this.sdSelection.emit({
                value,
                item: this.items().find(e => value?.toString() === e?.[vField]?.toString()),
            });
        }));
        this.form()?.addControl(this.#name, this.formControl);
    }
    ngOnDestroy() {
        this.#subscription.unsubscribe();
        this.form()?.removeControl(this.#name);
    }
    #updateValidator = () => {
        this.formControl.clearValidators();
        const validators = [];
        if (this.required()) {
            validators.push(Validators.required);
        }
        if (this.inlineError()) {
            validators.push(SdInlineErrorValidator);
        }
        this.formControl.setValidators(validators);
        this.formControl.updateValueAndValidity();
    };
    reValidate = () => {
        this.formControl.updateValueAndValidity({ emitEvent: true });
    };
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SdRadio, deps: [], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: SdRadio, isStandalone: true, selector: "sd-radio", inputs: { autoIdInput: { classPropertyName: "autoIdInput", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, display: { classPropertyName: "display", publicName: "display", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: true, transformFunction: null }, displayField: { classPropertyName: "displayField", publicName: "displayField", isSignal: true, isRequired: true, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, inlineError: { classPropertyName: "inlineError", publicName: "inlineError", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, viewed: { classPropertyName: "viewed", publicName: "viewed", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, hyperlink: { classPropertyName: "hyperlink", publicName: "hyperlink", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { model: "modelChange", sdChange: "sdChange", sdSelection: "sdSelection" }, host: { properties: { "class.sd-c-primary": "color() === 'primary'", "class.sd-c-secondary": "color() === 'secondary'", "class.sd-c-info": "color() === 'info'", "class.sd-c-success": "color() === 'success'", "class.sd-c-warning": "color() === 'warning'", "class.sd-c-error": "color() === 'error'" } }, queries: [{ propertyName: "sdSuffixDef", first: true, predicate: SdSuffixDefDirective, descendants: true, isSignal: true }, { propertyName: "sdLabelDef", first: true, predicate: SdLabelDefDirective, descendants: true, isSignal: true }, { propertyName: "sdViewDef", first: true, predicate: SdViewDefDirective, descendants: true, isSignal: true }], ngImport: i0, template: "@let _sdLabelDef = sdLabelDef();\n@let _label = label();\n@let _display = display();\n@let _valueField = valueField();\n@let _hyperlink = hyperlink();\n\n@if (isViewed()) {\n  @if (_sdLabelDef?.templateRef) {\n    <ng-container *ngTemplateOutlet=\"_sdLabelDef!.templateRef\"> </ng-container>\n  } @else if (_label) {\n    <div class=\"T14R text-black400\">{{ _label }}</div>\n  }\n  @if (_hyperlink) {\n    <!-- N\u1EBFu c\u00F3 hyperlink th\u00EC d\u00F9ng th\u1EBB a -->\n    <a [sdHref]=\"_hyperlink!\">{{ viewedText() }}</a>\n  } @else {\n    <!-- Ngo\u00E0i ra d\u00F9ng th\u1EBB m\u1EB7c \u0111\u1ECBnh -->\n    <div class=\"T14M\">{{ viewedText() | sdEmpty }}</div>\n  }\n} @else {\n  <section [ngClass]=\"{ 'c-section': _display === 'row' }\">\n    @if (_sdLabelDef?.templateRef) {\n      <ng-container *ngTemplateOutlet=\"_sdLabelDef!.templateRef\"> </ng-container>\n    } @else if (_label) {\n      <sd-label [label]=\"_label!\" [required]=\"required()\"></sd-label>\n    }\n    <mat-radio-group\n      [class.c-radio-group-column]=\"_display === 'column'\"\n      [class.c-radio-group-row]=\"_display === 'row'\"\n      [formControl]=\"formControl\"\n      [attr.data-autoId]=\"autoId()\"\n      [attr.data-disabled]=\"dataDisabled()\"\n      [attr.data-empty]=\"dataEmpty()\"\n      [attr.data-value]=\"dataValue()\"\n      [attr.data-required]=\"dataRequired()\">\n      @for (item of normalizedItems(); track item[valueField()]) {\n        <mat-radio-button [class.m-0]=\"_display === 'column'\" [class.mr-16]=\"_display === 'row'\" [value]=\"item[_valueField]\">\n          {{ item[displayField()] }}\n        </mat-radio-button>\n      }\n    </mat-radio-group>\n\n    @if (formControl.errors?.['required'] && formControl.touched) {\n      <mat-error>\n        {{ 'core.form.radio.required' | translate }}\n      </mat-error>\n    } @else if (formControl.errors?.['inlineError'] && formControl.touched) {\n      <mat-error>\n        {{ inlineError() }}\n      </mat-error>\n    }\n  </section>\n}\n", styles: [":host{height:100%;display:flex;flex-direction:column}:host ::ng-deep label.mdc-label{margin-bottom:0}:host{--sd-c: var(--sd-primary)}:host(.sd-c-secondary){--sd-c: var(--sd-secondary)}:host(.sd-c-info){--sd-c: var(--sd-info)}:host(.sd-c-success){--sd-c: var(--sd-success)}:host(.sd-c-warning){--sd-c: var(--sd-warning)}:host(.sd-c-error){--sd-c: var(--sd-error)}:host ::ng-deep .mat-mdc-radio-button,:host ::ng-deep .mat-mdc-radio-group,:host ::ng-deep .mdc-radio{--mdc-radio-selected-icon-color: var(--sd-c) !important;--mdc-radio-selected-focus-icon-color: var(--sd-c) !important;--mdc-radio-selected-hover-icon-color: var(--sd-c) !important;--mdc-radio-selected-pressed-icon-color: var(--sd-c) !important;--mdc-radio-selected-focus-state-layer-color: var(--sd-c) !important;--mdc-radio-selected-hover-state-layer-color: var(--sd-c) !important;--mat-radio-selected-icon-color: var(--sd-c) !important;--mat-radio-selected-focus-icon-color: var(--sd-c) !important;--mat-radio-selected-hover-icon-color: var(--sd-c) !important;--mat-radio-selected-pressed-icon-color: var(--sd-c) !important;--mat-radio-checked-ripple-color: var(--sd-c) !important;--mat-radio-checked-state-layer-color: var(--sd-c) !important}.c-section{align-content:center;align-items:center}.c-radio-group-column{flex:1;display:flex;flex-direction:column;align-items:flex-start}.c-radio-group-row{flex:1;display:flex;flex-direction:row;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i4.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i4.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: SdLabel, selector: "sd-label", inputs: ["label", "description", "required", "helperText"] }, { kind: "directive", type: SdHrefDirective, selector: "a[sdHref]", inputs: ["sdHref"] }, { kind: "pipe", type: SdEmptyPipe, name: "sdEmpty" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SdRadio, decorators: [{
            type: Component,
            args: [{ selector: 'sd-radio', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, host: {
                        // why: host class .sd-c-<x> + default sd-c-primary cho fallback. Thay data-sd-color
                        // để tránh edge case host-attr-binding không reactive trong vài cảnh build pipeline.
                        '[class.sd-c-primary]': "color() === 'primary'",
                        '[class.sd-c-secondary]': "color() === 'secondary'",
                        '[class.sd-c-info]': "color() === 'info'",
                        '[class.sd-c-success]': "color() === 'success'",
                        '[class.sd-c-warning]': "color() === 'warning'",
                        '[class.sd-c-error]': "color() === 'error'",
                    }, imports: [CommonModule, ReactiveFormsModule, MatTooltipModule, MatFormFieldModule, MatIconModule, MatRadioModule, SdLabel, SdEmptyPipe, SdHrefDirective, TranslatePipe], template: "@let _sdLabelDef = sdLabelDef();\n@let _label = label();\n@let _display = display();\n@let _valueField = valueField();\n@let _hyperlink = hyperlink();\n\n@if (isViewed()) {\n  @if (_sdLabelDef?.templateRef) {\n    <ng-container *ngTemplateOutlet=\"_sdLabelDef!.templateRef\"> </ng-container>\n  } @else if (_label) {\n    <div class=\"T14R text-black400\">{{ _label }}</div>\n  }\n  @if (_hyperlink) {\n    <!-- N\u1EBFu c\u00F3 hyperlink th\u00EC d\u00F9ng th\u1EBB a -->\n    <a [sdHref]=\"_hyperlink!\">{{ viewedText() }}</a>\n  } @else {\n    <!-- Ngo\u00E0i ra d\u00F9ng th\u1EBB m\u1EB7c \u0111\u1ECBnh -->\n    <div class=\"T14M\">{{ viewedText() | sdEmpty }}</div>\n  }\n} @else {\n  <section [ngClass]=\"{ 'c-section': _display === 'row' }\">\n    @if (_sdLabelDef?.templateRef) {\n      <ng-container *ngTemplateOutlet=\"_sdLabelDef!.templateRef\"> </ng-container>\n    } @else if (_label) {\n      <sd-label [label]=\"_label!\" [required]=\"required()\"></sd-label>\n    }\n    <mat-radio-group\n      [class.c-radio-group-column]=\"_display === 'column'\"\n      [class.c-radio-group-row]=\"_display === 'row'\"\n      [formControl]=\"formControl\"\n      [attr.data-autoId]=\"autoId()\"\n      [attr.data-disabled]=\"dataDisabled()\"\n      [attr.data-empty]=\"dataEmpty()\"\n      [attr.data-value]=\"dataValue()\"\n      [attr.data-required]=\"dataRequired()\">\n      @for (item of normalizedItems(); track item[valueField()]) {\n        <mat-radio-button [class.m-0]=\"_display === 'column'\" [class.mr-16]=\"_display === 'row'\" [value]=\"item[_valueField]\">\n          {{ item[displayField()] }}\n        </mat-radio-button>\n      }\n    </mat-radio-group>\n\n    @if (formControl.errors?.['required'] && formControl.touched) {\n      <mat-error>\n        {{ 'core.form.radio.required' | translate }}\n      </mat-error>\n    } @else if (formControl.errors?.['inlineError'] && formControl.touched) {\n      <mat-error>\n        {{ inlineError() }}\n      </mat-error>\n    }\n  </section>\n}\n", styles: [":host{height:100%;display:flex;flex-direction:column}:host ::ng-deep label.mdc-label{margin-bottom:0}:host{--sd-c: var(--sd-primary)}:host(.sd-c-secondary){--sd-c: var(--sd-secondary)}:host(.sd-c-info){--sd-c: var(--sd-info)}:host(.sd-c-success){--sd-c: var(--sd-success)}:host(.sd-c-warning){--sd-c: var(--sd-warning)}:host(.sd-c-error){--sd-c: var(--sd-error)}:host ::ng-deep .mat-mdc-radio-button,:host ::ng-deep .mat-mdc-radio-group,:host ::ng-deep .mdc-radio{--mdc-radio-selected-icon-color: var(--sd-c) !important;--mdc-radio-selected-focus-icon-color: var(--sd-c) !important;--mdc-radio-selected-hover-icon-color: var(--sd-c) !important;--mdc-radio-selected-pressed-icon-color: var(--sd-c) !important;--mdc-radio-selected-focus-state-layer-color: var(--sd-c) !important;--mdc-radio-selected-hover-state-layer-color: var(--sd-c) !important;--mat-radio-selected-icon-color: var(--sd-c) !important;--mat-radio-selected-focus-icon-color: var(--sd-c) !important;--mat-radio-selected-hover-icon-color: var(--sd-c) !important;--mat-radio-selected-pressed-icon-color: var(--sd-c) !important;--mat-radio-checked-ripple-color: var(--sd-c) !important;--mat-radio-checked-state-layer-color: var(--sd-c) !important}.c-section{align-content:center;align-items:center}.c-radio-group-column{flex:1;display:flex;flex-direction:column;align-items:flex-start}.c-radio-group-row{flex:1;display:flex;flex-direction:row;align-items:center}\n"] }]
        }], ctorParameters: () => [], propDecorators: { autoIdInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoId", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], display: [{ type: i0.Input, args: [{ isSignal: true, alias: "display", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: true }] }], displayField: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayField", required: true }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], inlineError: [{ type: i0.Input, args: [{ isSignal: true, alias: "inlineError", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], viewed: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewed", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], hyperlink: [{ type: i0.Input, args: [{ isSignal: true, alias: "hyperlink", required: false }] }], model: [{ type: i0.Input, args: [{ isSignal: true, alias: "model", required: false }] }, { type: i0.Output, args: ["modelChange"] }], sdSuffixDef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SdSuffixDefDirective), { isSignal: true }] }], sdLabelDef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SdLabelDefDirective), { isSignal: true }] }], sdViewDef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SdViewDefDirective), { isSignal: true }] }], sdChange: [{ type: i0.Output, args: ["sdChange"] }], sdSelection: [{ type: i0.Output, args: ["sdSelection"] }] } });

/**
 * Generated bundle index. Do not edit.
 */

export { SdRadio };
//# sourceMappingURL=sdcorejs-angular-forms-radio.mjs.map
