{"ast":null,"code":"import * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, EventEmitter, Directive, Output, Input, ContentChildren, ViewChild, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, Attribute, NgModule } from '@angular/core';\nimport * as i3 from '@angular/material/core';\nimport { mixinDisableRipple, mixinTabIndex, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport * as i1 from '@angular/cdk/a11y';\nimport * as i2 from '@angular/cdk/collections';\nconst _c0 = [\"input\"];\n\nconst _c1 = function (a0) {\n  return {\n    enterDuration: a0\n  };\n};\n\nconst _c2 = [\"*\"];\nconst MAT_RADIO_DEFAULT_OPTIONS = new InjectionToken('mat-radio-default-options', {\n  providedIn: 'root',\n  factory: MAT_RADIO_DEFAULT_OPTIONS_FACTORY\n});\n\nfunction MAT_RADIO_DEFAULT_OPTIONS_FACTORY() {\n  return {\n    color: 'accent'\n  };\n} // Increasing integer for generating unique ids for radio components.\n\n\nlet nextUniqueId = 0;\n/**\n * Provider Expression that allows mat-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n * @docs-private\n */\n\nconst MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => MatRadioGroup),\n  multi: true\n};\n/** Change event object emitted by MatRadio and MatRadioGroup. */\n\nclass MatRadioChange {\n  constructor(\n  /** The MatRadioButton that emits the change event. */\n  source,\n  /** The value of the MatRadioButton. */\n  value) {\n    this.source = source;\n    this.value = value;\n  }\n\n}\n/**\n * Injection token that can be used to inject instances of `MatRadioGroup`. It serves as\n * alternative token to the actual `MatRadioGroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\n\n\nconst MAT_RADIO_GROUP = new InjectionToken('MatRadioGroup');\n/**\n * Base class with all of the `MatRadioGroup` functionality.\n * @docs-private\n */\n\nclass _MatRadioGroupBase {\n  constructor(_changeDetector) {\n    this._changeDetector = _changeDetector;\n    /** Selected value for the radio group. */\n\n    this._value = null;\n    /** The HTML name attribute applied to radio buttons in this group. */\n\n    this._name = `mat-radio-group-${nextUniqueId++}`;\n    /** The currently selected radio button. Should match value. */\n\n    this._selected = null;\n    /** Whether the `value` has been set to its initial value. */\n\n    this._isInitialized = false;\n    /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n\n    this._labelPosition = 'after';\n    /** Whether the radio group is disabled. */\n\n    this._disabled = false;\n    /** Whether the radio group is required. */\n\n    this._required = false;\n    /** The method to be called in order to update ngModel */\n\n    this._controlValueAccessorChangeFn = () => {};\n    /**\n     * onTouch function registered via registerOnTouch (ControlValueAccessor).\n     * @docs-private\n     */\n\n\n    this.onTouched = () => {};\n    /**\n     * Event emitted when the group value changes.\n     * Change events are only emitted when the value changes due to user interaction with\n     * a radio button (the same behavior as `<input type-\"radio\">`).\n     */\n\n\n    this.change = new EventEmitter();\n  }\n  /** Name of the radio button group. All radio buttons inside this group will use this name. */\n\n\n  get name() {\n    return this._name;\n  }\n\n  set name(value) {\n    this._name = value;\n\n    this._updateRadioButtonNames();\n  }\n  /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n\n\n  get labelPosition() {\n    return this._labelPosition;\n  }\n\n  set labelPosition(v) {\n    this._labelPosition = v === 'before' ? 'before' : 'after';\n\n    this._markRadiosForCheck();\n  }\n  /**\n   * Value for the radio-group. Should equal the value of the selected radio button if there is\n   * a corresponding radio button with a matching value. If there is not such a corresponding\n   * radio button, this value persists to be applied in case a new radio button is added with a\n   * matching value.\n   */\n\n\n  get value() {\n    return this._value;\n  }\n\n  set value(newValue) {\n    if (this._value !== newValue) {\n      // Set this before proceeding to ensure no circular loop occurs with selection.\n      this._value = newValue;\n\n      this._updateSelectedRadioFromValue();\n\n      this._checkSelectedRadioButton();\n    }\n  }\n\n  _checkSelectedRadioButton() {\n    if (this._selected && !this._selected.checked) {\n      this._selected.checked = true;\n    }\n  }\n  /**\n   * The currently selected radio button. If set to a new radio button, the radio group value\n   * will be updated to match the new selected button.\n   */\n\n\n  get selected() {\n    return this._selected;\n  }\n\n  set selected(selected) {\n    this._selected = selected;\n    this.value = selected ? selected.value : null;\n\n    this._checkSelectedRadioButton();\n  }\n  /** Whether the radio group is disabled */\n\n\n  get disabled() {\n    return this._disabled;\n  }\n\n  set disabled(value) {\n    this._disabled = coerceBooleanProperty(value);\n\n    this._markRadiosForCheck();\n  }\n  /** Whether the radio group is required */\n\n\n  get required() {\n    return this._required;\n  }\n\n  set required(value) {\n    this._required = coerceBooleanProperty(value);\n\n    this._markRadiosForCheck();\n  }\n  /**\n   * Initialize properties once content children are available.\n   * This allows us to propagate relevant attributes to associated buttons.\n   */\n\n\n  ngAfterContentInit() {\n    // Mark this component as initialized in AfterContentInit because the initial value can\n    // possibly be set by NgModel on MatRadioGroup, and it is possible that the OnInit of the\n    // NgModel occurs *after* the OnInit of the MatRadioGroup.\n    this._isInitialized = true;\n  }\n  /**\n   * Mark this group as being \"touched\" (for ngModel). Meant to be called by the contained\n   * radio buttons upon their blur.\n   */\n\n\n  _touch() {\n    if (this.onTouched) {\n      this.onTouched();\n    }\n  }\n\n  _updateRadioButtonNames() {\n    if (this._radios) {\n      this._radios.forEach(radio => {\n        radio.name = this.name;\n\n        radio._markForCheck();\n      });\n    }\n  }\n  /** Updates the `selected` radio button from the internal _value state. */\n\n\n  _updateSelectedRadioFromValue() {\n    // If the value already matches the selected radio, do nothing.\n    const isAlreadySelected = this._selected !== null && this._selected.value === this._value;\n\n    if (this._radios && !isAlreadySelected) {\n      this._selected = null;\n\n      this._radios.forEach(radio => {\n        radio.checked = this.value === radio.value;\n\n        if (radio.checked) {\n          this._selected = radio;\n        }\n      });\n    }\n  }\n  /** Dispatch change event with current selection and group value. */\n\n\n  _emitChangeEvent() {\n    if (this._isInitialized) {\n      this.change.emit(new MatRadioChange(this._selected, this._value));\n    }\n  }\n\n  _markRadiosForCheck() {\n    if (this._radios) {\n      this._radios.forEach(radio => radio._markForCheck());\n    }\n  }\n  /**\n   * Sets the model value. Implemented as part of ControlValueAccessor.\n   * @param value\n   */\n\n\n  writeValue(value) {\n    this.value = value;\n\n    this._changeDetector.markForCheck();\n  }\n  /**\n   * Registers a callback to be triggered when the model value changes.\n   * Implemented as part of ControlValueAccessor.\n   * @param fn Callback to be registered.\n   */\n\n\n  registerOnChange(fn) {\n    this._controlValueAccessorChangeFn = fn;\n  }\n  /**\n   * Registers a callback to be triggered when the control is touched.\n   * Implemented as part of ControlValueAccessor.\n   * @param fn Callback to be registered.\n   */\n\n\n  registerOnTouched(fn) {\n    this.onTouched = fn;\n  }\n  /**\n   * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n   * @param isDisabled Whether the control should be disabled.\n   */\n\n\n  setDisabledState(isDisabled) {\n    this.disabled = isDisabled;\n\n    this._changeDetector.markForCheck();\n  }\n\n}\n\n_MatRadioGroupBase.ɵfac = function _MatRadioGroupBase_Factory(t) {\n  return new (t || _MatRadioGroupBase)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n};\n\n_MatRadioGroupBase.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: _MatRadioGroupBase,\n  inputs: {\n    color: \"color\",\n    name: \"name\",\n    labelPosition: \"labelPosition\",\n    value: \"value\",\n    selected: \"selected\",\n    disabled: \"disabled\",\n    required: \"required\"\n  },\n  outputs: {\n    change: \"change\"\n  }\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(_MatRadioGroupBase, [{\n    type: Directive\n  }], function () {\n    return [{\n      type: i0.ChangeDetectorRef\n    }];\n  }, {\n    change: [{\n      type: Output\n    }],\n    color: [{\n      type: Input\n    }],\n    name: [{\n      type: Input\n    }],\n    labelPosition: [{\n      type: Input\n    }],\n    value: [{\n      type: Input\n    }],\n    selected: [{\n      type: Input\n    }],\n    disabled: [{\n      type: Input\n    }],\n    required: [{\n      type: Input\n    }]\n  });\n})();\n/**\n * A group of radio buttons. May contain one or more `<mat-radio-button>` elements.\n */\n\n\nclass MatRadioGroup extends _MatRadioGroupBase {}\n\nMatRadioGroup.ɵfac = /* @__PURE__ */function () {\n  let ɵMatRadioGroup_BaseFactory;\n  return function MatRadioGroup_Factory(t) {\n    return (ɵMatRadioGroup_BaseFactory || (ɵMatRadioGroup_BaseFactory = i0.ɵɵgetInheritedFactory(MatRadioGroup)))(t || MatRadioGroup);\n  };\n}();\n\nMatRadioGroup.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: MatRadioGroup,\n  selectors: [[\"mat-radio-group\"]],\n  contentQueries: function MatRadioGroup_ContentQueries(rf, ctx, dirIndex) {\n    if (rf & 1) {\n      i0.ɵɵcontentQuery(dirIndex, MatRadioButton, 5);\n    }\n\n    if (rf & 2) {\n      let _t;\n\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._radios = _t);\n    }\n  },\n  hostAttrs: [\"role\", \"radiogroup\", 1, \"mat-radio-group\"],\n  exportAs: [\"matRadioGroup\"],\n  features: [i0.ɵɵProvidersFeature([MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR, {\n    provide: MAT_RADIO_GROUP,\n    useExisting: MatRadioGroup\n  }]), i0.ɵɵInheritDefinitionFeature]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatRadioGroup, [{\n    type: Directive,\n    args: [{\n      selector: 'mat-radio-group',\n      exportAs: 'matRadioGroup',\n      providers: [MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR, {\n        provide: MAT_RADIO_GROUP,\n        useExisting: MatRadioGroup\n      }],\n      host: {\n        'role': 'radiogroup',\n        'class': 'mat-radio-group'\n      }\n    }]\n  }], null, {\n    _radios: [{\n      type: ContentChildren,\n      args: [forwardRef(() => MatRadioButton), {\n        descendants: true\n      }]\n    }]\n  });\n})(); // Boilerplate for applying mixins to MatRadioButton.\n\n/** @docs-private */\n\n\nclass MatRadioButtonBase {\n  constructor(_elementRef) {\n    this._elementRef = _elementRef;\n  }\n\n}\n\nconst _MatRadioButtonMixinBase = mixinDisableRipple(mixinTabIndex(MatRadioButtonBase));\n/**\n * Base class with all of the `MatRadioButton` functionality.\n * @docs-private\n */\n\n\nclass _MatRadioButtonBase extends _MatRadioButtonMixinBase {\n  constructor(radioGroup, elementRef, _changeDetector, _focusMonitor, _radioDispatcher, animationMode, _providerOverride, tabIndex) {\n    super(elementRef);\n    this._changeDetector = _changeDetector;\n    this._focusMonitor = _focusMonitor;\n    this._radioDispatcher = _radioDispatcher;\n    this._providerOverride = _providerOverride;\n    this._uniqueId = `mat-radio-${++nextUniqueId}`;\n    /** The unique ID for the radio button. */\n\n    this.id = this._uniqueId;\n    /**\n     * Event emitted when the checked state of this radio button changes.\n     * Change events are only emitted when the value changes due to user interaction with\n     * the radio button (the same behavior as `<input type-\"radio\">`).\n     */\n\n    this.change = new EventEmitter();\n    /** Whether this radio is checked. */\n\n    this._checked = false;\n    /** Value assigned to this radio. */\n\n    this._value = null;\n    /** Unregister function for _radioDispatcher */\n\n    this._removeUniqueSelectionListener = () => {}; // Assertions. Ideally these should be stripped out by the compiler.\n    // TODO(jelbourn): Assert that there's no name binding AND a parent radio group.\n\n\n    this.radioGroup = radioGroup;\n    this._noopAnimations = animationMode === 'NoopAnimations';\n\n    if (tabIndex) {\n      this.tabIndex = coerceNumberProperty(tabIndex, 0);\n    }\n\n    this._removeUniqueSelectionListener = _radioDispatcher.listen((id, name) => {\n      if (id !== this.id && name === this.name) {\n        this.checked = false;\n      }\n    });\n  }\n  /** Whether this radio button is checked. */\n\n\n  get checked() {\n    return this._checked;\n  }\n\n  set checked(value) {\n    const newCheckedState = coerceBooleanProperty(value);\n\n    if (this._checked !== newCheckedState) {\n      this._checked = newCheckedState;\n\n      if (newCheckedState && this.radioGroup && this.radioGroup.value !== this.value) {\n        this.radioGroup.selected = this;\n      } else if (!newCheckedState && this.radioGroup && this.radioGroup.value === this.value) {\n        // When unchecking the selected radio button, update the selected radio\n        // property on the group.\n        this.radioGroup.selected = null;\n      }\n\n      if (newCheckedState) {\n        // Notify all radio buttons with the same name to un-check.\n        this._radioDispatcher.notify(this.id, this.name);\n      }\n\n      this._changeDetector.markForCheck();\n    }\n  }\n  /** The value of this radio button. */\n\n\n  get value() {\n    return this._value;\n  }\n\n  set value(value) {\n    if (this._value !== value) {\n      this._value = value;\n\n      if (this.radioGroup !== null) {\n        if (!this.checked) {\n          // Update checked when the value changed to match the radio group's value\n          this.checked = this.radioGroup.value === value;\n        }\n\n        if (this.checked) {\n          this.radioGroup.selected = this;\n        }\n      }\n    }\n  }\n  /** Whether the label should appear after or before the radio button. Defaults to 'after' */\n\n\n  get labelPosition() {\n    return this._labelPosition || this.radioGroup && this.radioGroup.labelPosition || 'after';\n  }\n\n  set labelPosition(value) {\n    this._labelPosition = value;\n  }\n  /** Whether the radio button is disabled. */\n\n\n  get disabled() {\n    return this._disabled || this.radioGroup !== null && this.radioGroup.disabled;\n  }\n\n  set disabled(value) {\n    this._setDisabled(coerceBooleanProperty(value));\n  }\n  /** Whether the radio button is required. */\n\n\n  get required() {\n    return this._required || this.radioGroup && this.radioGroup.required;\n  }\n\n  set required(value) {\n    this._required = coerceBooleanProperty(value);\n  }\n  /** Theme color of the radio button. */\n\n\n  get color() {\n    // As per Material design specifications the selection control radio should use the accent color\n    // palette by default. https://material.io/guidelines/components/selection-controls.html\n    return this._color || this.radioGroup && this.radioGroup.color || this._providerOverride && this._providerOverride.color || 'accent';\n  }\n\n  set color(newValue) {\n    this._color = newValue;\n  }\n  /** ID of the native input element inside `<mat-radio-button>` */\n\n\n  get inputId() {\n    return `${this.id || this._uniqueId}-input`;\n  }\n  /** Focuses the radio button. */\n\n\n  focus(options, origin) {\n    if (origin) {\n      this._focusMonitor.focusVia(this._inputElement, origin, options);\n    } else {\n      this._inputElement.nativeElement.focus(options);\n    }\n  }\n  /**\n   * Marks the radio button as needing checking for change detection.\n   * This method is exposed because the parent radio group will directly\n   * update bound properties of the radio button.\n   */\n\n\n  _markForCheck() {\n    // When group value changes, the button will not be notified. Use `markForCheck` to explicit\n    // update radio button's status\n    this._changeDetector.markForCheck();\n  }\n\n  ngOnInit() {\n    if (this.radioGroup) {\n      // If the radio is inside a radio group, determine if it should be checked\n      this.checked = this.radioGroup.value === this._value;\n\n      if (this.checked) {\n        this.radioGroup.selected = this;\n      } // Copy name from parent radio group\n\n\n      this.name = this.radioGroup.name;\n    }\n  }\n\n  ngAfterViewInit() {\n    this._focusMonitor.monitor(this._elementRef, true).subscribe(focusOrigin => {\n      if (!focusOrigin && this.radioGroup) {\n        this.radioGroup._touch();\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    this._focusMonitor.stopMonitoring(this._elementRef);\n\n    this._removeUniqueSelectionListener();\n  }\n  /** Dispatch change event with current value. */\n\n\n  _emitChangeEvent() {\n    this.change.emit(new MatRadioChange(this, this._value));\n  }\n\n  _isRippleDisabled() {\n    return this.disableRipple || this.disabled;\n  }\n\n  _onInputClick(event) {\n    // We have to stop propagation for click events on the visual hidden input element.\n    // By default, when a user clicks on a label element, a generated click event will be\n    // dispatched on the associated input element. Since we are using a label element as our\n    // root container, the click event on the `radio-button` will be executed twice.\n    // The real click event will bubble up, and the generated click event also tries to bubble up.\n    // This will lead to multiple click events.\n    // Preventing bubbling for the second event will solve that issue.\n    event.stopPropagation();\n  }\n  /** Triggered when the radio button receives an interaction from the user. */\n\n\n  _onInputInteraction(event) {\n    // We always have to stop propagation on the change event.\n    // Otherwise the change event, from the input element, will bubble up and\n    // emit its event object to the `change` output.\n    event.stopPropagation();\n\n    if (!this.checked && !this.disabled) {\n      const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n      this.checked = true;\n\n      this._emitChangeEvent();\n\n      if (this.radioGroup) {\n        this.radioGroup._controlValueAccessorChangeFn(this.value);\n\n        if (groupValueChanged) {\n          this.radioGroup._emitChangeEvent();\n        }\n      }\n    }\n  }\n  /** Sets the disabled state and marks for check if a change occurred. */\n\n\n  _setDisabled(value) {\n    if (this._disabled !== value) {\n      this._disabled = value;\n\n      this._changeDetector.markForCheck();\n    }\n  }\n\n}\n\n_MatRadioButtonBase.ɵfac = function _MatRadioButtonBase_Factory(t) {\n  i0.ɵɵinvalidFactory();\n};\n\n_MatRadioButtonBase.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: _MatRadioButtonBase,\n  viewQuery: function _MatRadioButtonBase_Query(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵviewQuery(_c0, 5);\n    }\n\n    if (rf & 2) {\n      let _t;\n\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._inputElement = _t.first);\n    }\n  },\n  inputs: {\n    id: \"id\",\n    name: \"name\",\n    ariaLabel: [\"aria-label\", \"ariaLabel\"],\n    ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"],\n    ariaDescribedby: [\"aria-describedby\", \"ariaDescribedby\"],\n    checked: \"checked\",\n    value: \"value\",\n    labelPosition: \"labelPosition\",\n    disabled: \"disabled\",\n    required: \"required\",\n    color: \"color\"\n  },\n  outputs: {\n    change: \"change\"\n  },\n  features: [i0.ɵɵInheritDefinitionFeature]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(_MatRadioButtonBase, [{\n    type: Directive\n  }], function () {\n    return [{\n      type: _MatRadioGroupBase\n    }, {\n      type: i0.ElementRef\n    }, {\n      type: i0.ChangeDetectorRef\n    }, {\n      type: i1.FocusMonitor\n    }, {\n      type: i2.UniqueSelectionDispatcher\n    }, {\n      type: undefined\n    }, {\n      type: undefined\n    }, {\n      type: undefined\n    }];\n  }, {\n    id: [{\n      type: Input\n    }],\n    name: [{\n      type: Input\n    }],\n    ariaLabel: [{\n      type: Input,\n      args: ['aria-label']\n    }],\n    ariaLabelledby: [{\n      type: Input,\n      args: ['aria-labelledby']\n    }],\n    ariaDescribedby: [{\n      type: Input,\n      args: ['aria-describedby']\n    }],\n    checked: [{\n      type: Input\n    }],\n    value: [{\n      type: Input\n    }],\n    labelPosition: [{\n      type: Input\n    }],\n    disabled: [{\n      type: Input\n    }],\n    required: [{\n      type: Input\n    }],\n    color: [{\n      type: Input\n    }],\n    change: [{\n      type: Output\n    }],\n    _inputElement: [{\n      type: ViewChild,\n      args: ['input']\n    }]\n  });\n})();\n/**\n * A Material design radio-button. Typically placed inside of `<mat-radio-group>` elements.\n */\n\n\nclass MatRadioButton extends _MatRadioButtonBase {\n  constructor(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride, tabIndex) {\n    super(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride, tabIndex);\n  }\n\n}\n\nMatRadioButton.ɵfac = function MatRadioButton_Factory(t) {\n  return new (t || MatRadioButton)(i0.ɵɵdirectiveInject(MAT_RADIO_GROUP, 8), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.FocusMonitor), i0.ɵɵdirectiveInject(i2.UniqueSelectionDispatcher), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵdirectiveInject(MAT_RADIO_DEFAULT_OPTIONS, 8), i0.ɵɵinjectAttribute('tabindex'));\n};\n\nMatRadioButton.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n  type: MatRadioButton,\n  selectors: [[\"mat-radio-button\"]],\n  hostAttrs: [1, \"mat-radio-button\"],\n  hostVars: 17,\n  hostBindings: function MatRadioButton_HostBindings(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵlistener(\"focus\", function MatRadioButton_focus_HostBindingHandler() {\n        return ctx._inputElement.nativeElement.focus();\n      });\n    }\n\n    if (rf & 2) {\n      i0.ɵɵattribute(\"tabindex\", null)(\"id\", ctx.id)(\"aria-label\", null)(\"aria-labelledby\", null)(\"aria-describedby\", null);\n      i0.ɵɵclassProp(\"mat-radio-checked\", ctx.checked)(\"mat-radio-disabled\", ctx.disabled)(\"_mat-animation-noopable\", ctx._noopAnimations)(\"mat-primary\", ctx.color === \"primary\")(\"mat-accent\", ctx.color === \"accent\")(\"mat-warn\", ctx.color === \"warn\");\n    }\n  },\n  inputs: {\n    disableRipple: \"disableRipple\",\n    tabIndex: \"tabIndex\"\n  },\n  exportAs: [\"matRadioButton\"],\n  features: [i0.ɵɵInheritDefinitionFeature],\n  ngContentSelectors: _c2,\n  decls: 13,\n  vars: 20,\n  consts: [[1, \"mat-radio-label\"], [\"label\", \"\"], [1, \"mat-radio-container\"], [1, \"mat-radio-outer-circle\"], [1, \"mat-radio-inner-circle\"], [\"type\", \"radio\", 1, \"mat-radio-input\", \"cdk-visually-hidden\", 3, \"id\", \"checked\", \"disabled\", \"tabIndex\", \"required\", \"change\", \"click\"], [\"input\", \"\"], [\"mat-ripple\", \"\", 1, \"mat-radio-ripple\", \"mat-focus-indicator\", 3, \"matRippleTrigger\", \"matRippleDisabled\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\"], [1, \"mat-ripple-element\", \"mat-radio-persistent-ripple\"], [1, \"mat-radio-label-content\"], [2, \"display\", \"none\"]],\n  template: function MatRadioButton_Template(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵprojectionDef();\n      i0.ɵɵelementStart(0, \"label\", 0, 1);\n      i0.ɵɵelementStart(2, \"span\", 2);\n      i0.ɵɵelement(3, \"span\", 3);\n      i0.ɵɵelement(4, \"span\", 4);\n      i0.ɵɵelementStart(5, \"input\", 5, 6);\n      i0.ɵɵlistener(\"change\", function MatRadioButton_Template_input_change_5_listener($event) {\n        return ctx._onInputInteraction($event);\n      })(\"click\", function MatRadioButton_Template_input_click_5_listener($event) {\n        return ctx._onInputClick($event);\n      });\n      i0.ɵɵelementEnd();\n      i0.ɵɵelementStart(7, \"span\", 7);\n      i0.ɵɵelement(8, \"span\", 8);\n      i0.ɵɵelementEnd();\n      i0.ɵɵelementEnd();\n      i0.ɵɵelementStart(9, \"span\", 9);\n      i0.ɵɵelementStart(10, \"span\", 10);\n      i0.ɵɵtext(11, \"\\xA0\");\n      i0.ɵɵelementEnd();\n      i0.ɵɵprojection(12);\n      i0.ɵɵelementEnd();\n      i0.ɵɵelementEnd();\n    }\n\n    if (rf & 2) {\n      const _r0 = i0.ɵɵreference(1);\n\n      i0.ɵɵattribute(\"for\", ctx.inputId);\n      i0.ɵɵadvance(5);\n      i0.ɵɵproperty(\"id\", ctx.inputId)(\"checked\", ctx.checked)(\"disabled\", ctx.disabled)(\"tabIndex\", ctx.tabIndex)(\"required\", ctx.required);\n      i0.ɵɵattribute(\"name\", ctx.name)(\"value\", ctx.value)(\"aria-label\", ctx.ariaLabel)(\"aria-labelledby\", ctx.ariaLabelledby)(\"aria-describedby\", ctx.ariaDescribedby);\n      i0.ɵɵadvance(2);\n      i0.ɵɵproperty(\"matRippleTrigger\", _r0)(\"matRippleDisabled\", ctx._isRippleDisabled())(\"matRippleCentered\", true)(\"matRippleRadius\", 20)(\"matRippleAnimation\", i0.ɵɵpureFunction1(18, _c1, ctx._noopAnimations ? 0 : 150));\n      i0.ɵɵadvance(2);\n      i0.ɵɵclassProp(\"mat-radio-label-before\", ctx.labelPosition == \"before\");\n    }\n  },\n  directives: [i3.MatRipple],\n  styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;opacity:0;transition:transform ease 280ms,background-color ease 280ms,opacity linear 1ms 280ms;width:20px;transform:scale(0.001);-webkit-print-color-adjust:exact;color-adjust:exact}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5);opacity:1;transition:transform ease 280ms,background-color ease 280ms}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-label-content{-webkit-user-select:auto;-moz-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none;top:0;left:0}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{bottom:0;left:50%}.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-ripple,.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-ripple{outline:solid 3px}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"],\n  encapsulation: 2,\n  changeDetection: 0\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatRadioButton, [{\n    type: Component,\n    args: [{\n      selector: 'mat-radio-button',\n      inputs: ['disableRipple', 'tabIndex'],\n      encapsulation: ViewEncapsulation.None,\n      exportAs: 'matRadioButton',\n      host: {\n        'class': 'mat-radio-button',\n        '[class.mat-radio-checked]': 'checked',\n        '[class.mat-radio-disabled]': 'disabled',\n        '[class._mat-animation-noopable]': '_noopAnimations',\n        '[class.mat-primary]': 'color === \"primary\"',\n        '[class.mat-accent]': 'color === \"accent\"',\n        '[class.mat-warn]': 'color === \"warn\"',\n        // Needs to be removed since it causes some a11y issues (see #21266).\n        '[attr.tabindex]': 'null',\n        '[attr.id]': 'id',\n        '[attr.aria-label]': 'null',\n        '[attr.aria-labelledby]': 'null',\n        '[attr.aria-describedby]': 'null',\n        // Note: under normal conditions focus shouldn't land on this element, however it may be\n        // programmatically set, for example inside of a focus trap, in this case we want to forward\n        // the focus to the native element.\n        '(focus)': '_inputElement.nativeElement.focus()'\n      },\n      changeDetection: ChangeDetectionStrategy.OnPush,\n      template: \"<!-- TODO(jelbourn): render the radio on either side of the content -->\\n<!-- TODO(mtlin): Evaluate trade-offs of using native radio vs. cost of additional bindings. -->\\n<label [attr.for]=\\\"inputId\\\" class=\\\"mat-radio-label\\\" #label>\\n  <!-- The actual 'radio' part of the control. -->\\n  <span class=\\\"mat-radio-container\\\">\\n    <span class=\\\"mat-radio-outer-circle\\\"></span>\\n    <span class=\\\"mat-radio-inner-circle\\\"></span>\\n    <input #input class=\\\"mat-radio-input cdk-visually-hidden\\\" type=\\\"radio\\\"\\n        [id]=\\\"inputId\\\"\\n        [checked]=\\\"checked\\\"\\n        [disabled]=\\\"disabled\\\"\\n        [tabIndex]=\\\"tabIndex\\\"\\n        [attr.name]=\\\"name\\\"\\n        [attr.value]=\\\"value\\\"\\n        [required]=\\\"required\\\"\\n        [attr.aria-label]=\\\"ariaLabel\\\"\\n        [attr.aria-labelledby]=\\\"ariaLabelledby\\\"\\n        [attr.aria-describedby]=\\\"ariaDescribedby\\\"\\n        (change)=\\\"_onInputInteraction($event)\\\"\\n        (click)=\\\"_onInputClick($event)\\\">\\n\\n    <!-- The ripple comes after the input so that we can target it with a CSS\\n         sibling selector when the input is focused. -->\\n    <span mat-ripple class=\\\"mat-radio-ripple mat-focus-indicator\\\"\\n         [matRippleTrigger]=\\\"label\\\"\\n         [matRippleDisabled]=\\\"_isRippleDisabled()\\\"\\n         [matRippleCentered]=\\\"true\\\"\\n         [matRippleRadius]=\\\"20\\\"\\n         [matRippleAnimation]=\\\"{enterDuration: _noopAnimations ? 0 : 150}\\\">\\n\\n      <span class=\\\"mat-ripple-element mat-radio-persistent-ripple\\\"></span>\\n    </span>\\n  </span>\\n\\n  <!-- The label content for radio control. -->\\n  <span class=\\\"mat-radio-label-content\\\" [class.mat-radio-label-before]=\\\"labelPosition == 'before'\\\">\\n    <!-- Add an invisible span so JAWS can read the label -->\\n    <span style=\\\"display:none\\\">&nbsp;</span>\\n    <ng-content></ng-content>\\n  </span>\\n</label>\\n\",\n      styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;opacity:0;transition:transform ease 280ms,background-color ease 280ms,opacity linear 1ms 280ms;width:20px;transform:scale(0.001);-webkit-print-color-adjust:exact;color-adjust:exact}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5);opacity:1;transition:transform ease 280ms,background-color ease 280ms}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-label-content{-webkit-user-select:auto;-moz-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none;top:0;left:0}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{bottom:0;left:50%}.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-ripple,.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-ripple{outline:solid 3px}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"]\n    }]\n  }], function () {\n    return [{\n      type: MatRadioGroup,\n      decorators: [{\n        type: Optional\n      }, {\n        type: Inject,\n        args: [MAT_RADIO_GROUP]\n      }]\n    }, {\n      type: i0.ElementRef\n    }, {\n      type: i0.ChangeDetectorRef\n    }, {\n      type: i1.FocusMonitor\n    }, {\n      type: i2.UniqueSelectionDispatcher\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Optional\n      }, {\n        type: Inject,\n        args: [ANIMATION_MODULE_TYPE]\n      }]\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Optional\n      }, {\n        type: Inject,\n        args: [MAT_RADIO_DEFAULT_OPTIONS]\n      }]\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Attribute,\n        args: ['tabindex']\n      }]\n    }];\n  }, null);\n})();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nclass MatRadioModule {}\n\nMatRadioModule.ɵfac = function MatRadioModule_Factory(t) {\n  return new (t || MatRadioModule)();\n};\n\nMatRadioModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n  type: MatRadioModule\n});\nMatRadioModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n  imports: [[MatRippleModule, MatCommonModule], MatCommonModule]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatRadioModule, [{\n    type: NgModule,\n    args: [{\n      imports: [MatRippleModule, MatCommonModule],\n      exports: [MatRadioGroup, MatRadioButton, MatCommonModule],\n      declarations: [MatRadioGroup, MatRadioButton]\n    }]\n  }], null, null);\n})();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\n\nexport { MAT_RADIO_DEFAULT_OPTIONS, MAT_RADIO_DEFAULT_OPTIONS_FACTORY, MAT_RADIO_GROUP, MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR, MatRadioButton, MatRadioChange, MatRadioGroup, MatRadioModule, _MatRadioButtonBase, _MatRadioGroupBase };","map":{"version":3,"sources":["D:/Development/Work/CENOS/cenos-ui/node_modules/@angular/material/fesm2015/radio.mjs"],"names":["i0","InjectionToken","forwardRef","EventEmitter","Directive","Output","Input","ContentChildren","ViewChild","Component","ViewEncapsulation","ChangeDetectionStrategy","Optional","Inject","Attribute","NgModule","i3","mixinDisableRipple","mixinTabIndex","MatRippleModule","MatCommonModule","coerceBooleanProperty","coerceNumberProperty","NG_VALUE_ACCESSOR","ANIMATION_MODULE_TYPE","i1","i2","MAT_RADIO_DEFAULT_OPTIONS","providedIn","factory","MAT_RADIO_DEFAULT_OPTIONS_FACTORY","color","nextUniqueId","MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","provide","useExisting","MatRadioGroup","multi","MatRadioChange","constructor","source","value","MAT_RADIO_GROUP","_MatRadioGroupBase","_changeDetector","_value","_name","_selected","_isInitialized","_labelPosition","_disabled","_required","_controlValueAccessorChangeFn","onTouched","change","name","_updateRadioButtonNames","labelPosition","v","_markRadiosForCheck","newValue","_updateSelectedRadioFromValue","_checkSelectedRadioButton","checked","selected","disabled","required","ngAfterContentInit","_touch","_radios","forEach","radio","_markForCheck","isAlreadySelected","_emitChangeEvent","emit","writeValue","markForCheck","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","ɵfac","ChangeDetectorRef","ɵdir","type","MatRadioButton","args","selector","exportAs","providers","host","descendants","MatRadioButtonBase","_elementRef","_MatRadioButtonMixinBase","_MatRadioButtonBase","radioGroup","elementRef","_focusMonitor","_radioDispatcher","animationMode","_providerOverride","tabIndex","_uniqueId","id","_checked","_removeUniqueSelectionListener","_noopAnimations","listen","newCheckedState","notify","_setDisabled","_color","inputId","focus","options","origin","focusVia","_inputElement","nativeElement","ngOnInit","ngAfterViewInit","monitor","subscribe","focusOrigin","ngOnDestroy","stopMonitoring","_isRippleDisabled","disableRipple","_onInputClick","event","stopPropagation","_onInputInteraction","groupValueChanged","ElementRef","FocusMonitor","UniqueSelectionDispatcher","undefined","ariaLabel","ariaLabelledby","ariaDescribedby","changeDetector","focusMonitor","radioDispatcher","providerOverride","ɵcmp","MatRipple","inputs","encapsulation","None","changeDetection","OnPush","template","styles","decorators","MatRadioModule","ɵmod","ɵinj","imports","exports","declarations"],"mappings":"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","sourcesContent":["import * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, EventEmitter, Directive, Output, Input, ContentChildren, ViewChild, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, Attribute, NgModule } from '@angular/core';\nimport * as i3 from '@angular/material/core';\nimport { mixinDisableRipple, mixinTabIndex, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport * as i1 from '@angular/cdk/a11y';\nimport * as i2 from '@angular/cdk/collections';\n\nconst MAT_RADIO_DEFAULT_OPTIONS = new InjectionToken('mat-radio-default-options', {\n    providedIn: 'root',\n    factory: MAT_RADIO_DEFAULT_OPTIONS_FACTORY,\n});\nfunction MAT_RADIO_DEFAULT_OPTIONS_FACTORY() {\n    return {\n        color: 'accent',\n    };\n}\n// Increasing integer for generating unique ids for radio components.\nlet nextUniqueId = 0;\n/**\n * Provider Expression that allows mat-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n * @docs-private\n */\nconst MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => MatRadioGroup),\n    multi: true,\n};\n/** Change event object emitted by MatRadio and MatRadioGroup. */\nclass MatRadioChange {\n    constructor(\n    /** The MatRadioButton that emits the change event. */\n    source, \n    /** The value of the MatRadioButton. */\n    value) {\n        this.source = source;\n        this.value = value;\n    }\n}\n/**\n * Injection token that can be used to inject instances of `MatRadioGroup`. It serves as\n * alternative token to the actual `MatRadioGroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_RADIO_GROUP = new InjectionToken('MatRadioGroup');\n/**\n * Base class with all of the `MatRadioGroup` functionality.\n * @docs-private\n */\nclass _MatRadioGroupBase {\n    constructor(_changeDetector) {\n        this._changeDetector = _changeDetector;\n        /** Selected value for the radio group. */\n        this._value = null;\n        /** The HTML name attribute applied to radio buttons in this group. */\n        this._name = `mat-radio-group-${nextUniqueId++}`;\n        /** The currently selected radio button. Should match value. */\n        this._selected = null;\n        /** Whether the `value` has been set to its initial value. */\n        this._isInitialized = false;\n        /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n        this._labelPosition = 'after';\n        /** Whether the radio group is disabled. */\n        this._disabled = false;\n        /** Whether the radio group is required. */\n        this._required = false;\n        /** The method to be called in order to update ngModel */\n        this._controlValueAccessorChangeFn = () => { };\n        /**\n         * onTouch function registered via registerOnTouch (ControlValueAccessor).\n         * @docs-private\n         */\n        this.onTouched = () => { };\n        /**\n         * Event emitted when the group value changes.\n         * Change events are only emitted when the value changes due to user interaction with\n         * a radio button (the same behavior as `<input type-\"radio\">`).\n         */\n        this.change = new EventEmitter();\n    }\n    /** Name of the radio button group. All radio buttons inside this group will use this name. */\n    get name() {\n        return this._name;\n    }\n    set name(value) {\n        this._name = value;\n        this._updateRadioButtonNames();\n    }\n    /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n    get labelPosition() {\n        return this._labelPosition;\n    }\n    set labelPosition(v) {\n        this._labelPosition = v === 'before' ? 'before' : 'after';\n        this._markRadiosForCheck();\n    }\n    /**\n     * Value for the radio-group. Should equal the value of the selected radio button if there is\n     * a corresponding radio button with a matching value. If there is not such a corresponding\n     * radio button, this value persists to be applied in case a new radio button is added with a\n     * matching value.\n     */\n    get value() {\n        return this._value;\n    }\n    set value(newValue) {\n        if (this._value !== newValue) {\n            // Set this before proceeding to ensure no circular loop occurs with selection.\n            this._value = newValue;\n            this._updateSelectedRadioFromValue();\n            this._checkSelectedRadioButton();\n        }\n    }\n    _checkSelectedRadioButton() {\n        if (this._selected && !this._selected.checked) {\n            this._selected.checked = true;\n        }\n    }\n    /**\n     * The currently selected radio button. If set to a new radio button, the radio group value\n     * will be updated to match the new selected button.\n     */\n    get selected() {\n        return this._selected;\n    }\n    set selected(selected) {\n        this._selected = selected;\n        this.value = selected ? selected.value : null;\n        this._checkSelectedRadioButton();\n    }\n    /** Whether the radio group is disabled */\n    get disabled() {\n        return this._disabled;\n    }\n    set disabled(value) {\n        this._disabled = coerceBooleanProperty(value);\n        this._markRadiosForCheck();\n    }\n    /** Whether the radio group is required */\n    get required() {\n        return this._required;\n    }\n    set required(value) {\n        this._required = coerceBooleanProperty(value);\n        this._markRadiosForCheck();\n    }\n    /**\n     * Initialize properties once content children are available.\n     * This allows us to propagate relevant attributes to associated buttons.\n     */\n    ngAfterContentInit() {\n        // Mark this component as initialized in AfterContentInit because the initial value can\n        // possibly be set by NgModel on MatRadioGroup, and it is possible that the OnInit of the\n        // NgModel occurs *after* the OnInit of the MatRadioGroup.\n        this._isInitialized = true;\n    }\n    /**\n     * Mark this group as being \"touched\" (for ngModel). Meant to be called by the contained\n     * radio buttons upon their blur.\n     */\n    _touch() {\n        if (this.onTouched) {\n            this.onTouched();\n        }\n    }\n    _updateRadioButtonNames() {\n        if (this._radios) {\n            this._radios.forEach(radio => {\n                radio.name = this.name;\n                radio._markForCheck();\n            });\n        }\n    }\n    /** Updates the `selected` radio button from the internal _value state. */\n    _updateSelectedRadioFromValue() {\n        // If the value already matches the selected radio, do nothing.\n        const isAlreadySelected = this._selected !== null && this._selected.value === this._value;\n        if (this._radios && !isAlreadySelected) {\n            this._selected = null;\n            this._radios.forEach(radio => {\n                radio.checked = this.value === radio.value;\n                if (radio.checked) {\n                    this._selected = radio;\n                }\n            });\n        }\n    }\n    /** Dispatch change event with current selection and group value. */\n    _emitChangeEvent() {\n        if (this._isInitialized) {\n            this.change.emit(new MatRadioChange(this._selected, this._value));\n        }\n    }\n    _markRadiosForCheck() {\n        if (this._radios) {\n            this._radios.forEach(radio => radio._markForCheck());\n        }\n    }\n    /**\n     * Sets the model value. Implemented as part of ControlValueAccessor.\n     * @param value\n     */\n    writeValue(value) {\n        this.value = value;\n        this._changeDetector.markForCheck();\n    }\n    /**\n     * Registers a callback to be triggered when the model value changes.\n     * Implemented as part of ControlValueAccessor.\n     * @param fn Callback to be registered.\n     */\n    registerOnChange(fn) {\n        this._controlValueAccessorChangeFn = fn;\n    }\n    /**\n     * Registers a callback to be triggered when the control is touched.\n     * Implemented as part of ControlValueAccessor.\n     * @param fn Callback to be registered.\n     */\n    registerOnTouched(fn) {\n        this.onTouched = fn;\n    }\n    /**\n     * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n     * @param isDisabled Whether the control should be disabled.\n     */\n    setDisabledState(isDisabled) {\n        this.disabled = isDisabled;\n        this._changeDetector.markForCheck();\n    }\n}\n_MatRadioGroupBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: _MatRadioGroupBase, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });\n_MatRadioGroupBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: _MatRadioGroupBase, inputs: { color: \"color\", name: \"name\", labelPosition: \"labelPosition\", value: \"value\", selected: \"selected\", disabled: \"disabled\", required: \"required\" }, outputs: { change: \"change\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: _MatRadioGroupBase, decorators: [{\n            type: Directive\n        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { change: [{\n                type: Output\n            }], color: [{\n                type: Input\n            }], name: [{\n                type: Input\n            }], labelPosition: [{\n                type: Input\n            }], value: [{\n                type: Input\n            }], selected: [{\n                type: Input\n            }], disabled: [{\n                type: Input\n            }], required: [{\n                type: Input\n            }] } });\n/**\n * A group of radio buttons. May contain one or more `<mat-radio-button>` elements.\n */\nclass MatRadioGroup extends _MatRadioGroupBase {\n}\nMatRadioGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatRadioGroup, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatRadioGroup.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: MatRadioGroup, selector: \"mat-radio-group\", host: { attributes: { \"role\": \"radiogroup\" }, classAttribute: \"mat-radio-group\" }, providers: [\n        MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n        { provide: MAT_RADIO_GROUP, useExisting: MatRadioGroup },\n    ], queries: [{ propertyName: \"_radios\", predicate: i0.forwardRef(function () { return MatRadioButton; }), descendants: true }], exportAs: [\"matRadioGroup\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatRadioGroup, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'mat-radio-group',\n                    exportAs: 'matRadioGroup',\n                    providers: [\n                        MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n                        { provide: MAT_RADIO_GROUP, useExisting: MatRadioGroup },\n                    ],\n                    host: {\n                        'role': 'radiogroup',\n                        'class': 'mat-radio-group',\n                    },\n                }]\n        }], propDecorators: { _radios: [{\n                type: ContentChildren,\n                args: [forwardRef(() => MatRadioButton), { descendants: true }]\n            }] } });\n// Boilerplate for applying mixins to MatRadioButton.\n/** @docs-private */\nclass MatRadioButtonBase {\n    constructor(_elementRef) {\n        this._elementRef = _elementRef;\n    }\n}\nconst _MatRadioButtonMixinBase = mixinDisableRipple(mixinTabIndex(MatRadioButtonBase));\n/**\n * Base class with all of the `MatRadioButton` functionality.\n * @docs-private\n */\nclass _MatRadioButtonBase extends _MatRadioButtonMixinBase {\n    constructor(radioGroup, elementRef, _changeDetector, _focusMonitor, _radioDispatcher, animationMode, _providerOverride, tabIndex) {\n        super(elementRef);\n        this._changeDetector = _changeDetector;\n        this._focusMonitor = _focusMonitor;\n        this._radioDispatcher = _radioDispatcher;\n        this._providerOverride = _providerOverride;\n        this._uniqueId = `mat-radio-${++nextUniqueId}`;\n        /** The unique ID for the radio button. */\n        this.id = this._uniqueId;\n        /**\n         * Event emitted when the checked state of this radio button changes.\n         * Change events are only emitted when the value changes due to user interaction with\n         * the radio button (the same behavior as `<input type-\"radio\">`).\n         */\n        this.change = new EventEmitter();\n        /** Whether this radio is checked. */\n        this._checked = false;\n        /** Value assigned to this radio. */\n        this._value = null;\n        /** Unregister function for _radioDispatcher */\n        this._removeUniqueSelectionListener = () => { };\n        // Assertions. Ideally these should be stripped out by the compiler.\n        // TODO(jelbourn): Assert that there's no name binding AND a parent radio group.\n        this.radioGroup = radioGroup;\n        this._noopAnimations = animationMode === 'NoopAnimations';\n        if (tabIndex) {\n            this.tabIndex = coerceNumberProperty(tabIndex, 0);\n        }\n        this._removeUniqueSelectionListener = _radioDispatcher.listen((id, name) => {\n            if (id !== this.id && name === this.name) {\n                this.checked = false;\n            }\n        });\n    }\n    /** Whether this radio button is checked. */\n    get checked() {\n        return this._checked;\n    }\n    set checked(value) {\n        const newCheckedState = coerceBooleanProperty(value);\n        if (this._checked !== newCheckedState) {\n            this._checked = newCheckedState;\n            if (newCheckedState && this.radioGroup && this.radioGroup.value !== this.value) {\n                this.radioGroup.selected = this;\n            }\n            else if (!newCheckedState && this.radioGroup && this.radioGroup.value === this.value) {\n                // When unchecking the selected radio button, update the selected radio\n                // property on the group.\n                this.radioGroup.selected = null;\n            }\n            if (newCheckedState) {\n                // Notify all radio buttons with the same name to un-check.\n                this._radioDispatcher.notify(this.id, this.name);\n            }\n            this._changeDetector.markForCheck();\n        }\n    }\n    /** The value of this radio button. */\n    get value() {\n        return this._value;\n    }\n    set value(value) {\n        if (this._value !== value) {\n            this._value = value;\n            if (this.radioGroup !== null) {\n                if (!this.checked) {\n                    // Update checked when the value changed to match the radio group's value\n                    this.checked = this.radioGroup.value === value;\n                }\n                if (this.checked) {\n                    this.radioGroup.selected = this;\n                }\n            }\n        }\n    }\n    /** Whether the label should appear after or before the radio button. Defaults to 'after' */\n    get labelPosition() {\n        return this._labelPosition || (this.radioGroup && this.radioGroup.labelPosition) || 'after';\n    }\n    set labelPosition(value) {\n        this._labelPosition = value;\n    }\n    /** Whether the radio button is disabled. */\n    get disabled() {\n        return this._disabled || (this.radioGroup !== null && this.radioGroup.disabled);\n    }\n    set disabled(value) {\n        this._setDisabled(coerceBooleanProperty(value));\n    }\n    /** Whether the radio button is required. */\n    get required() {\n        return this._required || (this.radioGroup && this.radioGroup.required);\n    }\n    set required(value) {\n        this._required = coerceBooleanProperty(value);\n    }\n    /** Theme color of the radio button. */\n    get color() {\n        // As per Material design specifications the selection control radio should use the accent color\n        // palette by default. https://material.io/guidelines/components/selection-controls.html\n        return (this._color ||\n            (this.radioGroup && this.radioGroup.color) ||\n            (this._providerOverride && this._providerOverride.color) ||\n            'accent');\n    }\n    set color(newValue) {\n        this._color = newValue;\n    }\n    /** ID of the native input element inside `<mat-radio-button>` */\n    get inputId() {\n        return `${this.id || this._uniqueId}-input`;\n    }\n    /** Focuses the radio button. */\n    focus(options, origin) {\n        if (origin) {\n            this._focusMonitor.focusVia(this._inputElement, origin, options);\n        }\n        else {\n            this._inputElement.nativeElement.focus(options);\n        }\n    }\n    /**\n     * Marks the radio button as needing checking for change detection.\n     * This method is exposed because the parent radio group will directly\n     * update bound properties of the radio button.\n     */\n    _markForCheck() {\n        // When group value changes, the button will not be notified. Use `markForCheck` to explicit\n        // update radio button's status\n        this._changeDetector.markForCheck();\n    }\n    ngOnInit() {\n        if (this.radioGroup) {\n            // If the radio is inside a radio group, determine if it should be checked\n            this.checked = this.radioGroup.value === this._value;\n            if (this.checked) {\n                this.radioGroup.selected = this;\n            }\n            // Copy name from parent radio group\n            this.name = this.radioGroup.name;\n        }\n    }\n    ngAfterViewInit() {\n        this._focusMonitor.monitor(this._elementRef, true).subscribe(focusOrigin => {\n            if (!focusOrigin && this.radioGroup) {\n                this.radioGroup._touch();\n            }\n        });\n    }\n    ngOnDestroy() {\n        this._focusMonitor.stopMonitoring(this._elementRef);\n        this._removeUniqueSelectionListener();\n    }\n    /** Dispatch change event with current value. */\n    _emitChangeEvent() {\n        this.change.emit(new MatRadioChange(this, this._value));\n    }\n    _isRippleDisabled() {\n        return this.disableRipple || this.disabled;\n    }\n    _onInputClick(event) {\n        // We have to stop propagation for click events on the visual hidden input element.\n        // By default, when a user clicks on a label element, a generated click event will be\n        // dispatched on the associated input element. Since we are using a label element as our\n        // root container, the click event on the `radio-button` will be executed twice.\n        // The real click event will bubble up, and the generated click event also tries to bubble up.\n        // This will lead to multiple click events.\n        // Preventing bubbling for the second event will solve that issue.\n        event.stopPropagation();\n    }\n    /** Triggered when the radio button receives an interaction from the user. */\n    _onInputInteraction(event) {\n        // We always have to stop propagation on the change event.\n        // Otherwise the change event, from the input element, will bubble up and\n        // emit its event object to the `change` output.\n        event.stopPropagation();\n        if (!this.checked && !this.disabled) {\n            const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n            this.checked = true;\n            this._emitChangeEvent();\n            if (this.radioGroup) {\n                this.radioGroup._controlValueAccessorChangeFn(this.value);\n                if (groupValueChanged) {\n                    this.radioGroup._emitChangeEvent();\n                }\n            }\n        }\n    }\n    /** Sets the disabled state and marks for check if a change occurred. */\n    _setDisabled(value) {\n        if (this._disabled !== value) {\n            this._disabled = value;\n            this._changeDetector.markForCheck();\n        }\n    }\n}\n_MatRadioButtonBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: _MatRadioButtonBase, deps: \"invalid\", target: i0.ɵɵFactoryTarget.Directive });\n_MatRadioButtonBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: _MatRadioButtonBase, inputs: { id: \"id\", name: \"name\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], ariaDescribedby: [\"aria-describedby\", \"ariaDescribedby\"], checked: \"checked\", value: \"value\", labelPosition: \"labelPosition\", disabled: \"disabled\", required: \"required\", color: \"color\" }, outputs: { change: \"change\" }, viewQueries: [{ propertyName: \"_inputElement\", first: true, predicate: [\"input\"], descendants: true }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: _MatRadioButtonBase, decorators: [{\n            type: Directive\n        }], ctorParameters: function () { return [{ type: _MatRadioGroupBase }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.FocusMonitor }, { type: i2.UniqueSelectionDispatcher }, { type: undefined }, { type: undefined }, { type: undefined }]; }, propDecorators: { id: [{\n                type: Input\n            }], name: [{\n                type: Input\n            }], ariaLabel: [{\n                type: Input,\n                args: ['aria-label']\n            }], ariaLabelledby: [{\n                type: Input,\n                args: ['aria-labelledby']\n            }], ariaDescribedby: [{\n                type: Input,\n                args: ['aria-describedby']\n            }], checked: [{\n                type: Input\n            }], value: [{\n                type: Input\n            }], labelPosition: [{\n                type: Input\n            }], disabled: [{\n                type: Input\n            }], required: [{\n                type: Input\n            }], color: [{\n                type: Input\n            }], change: [{\n                type: Output\n            }], _inputElement: [{\n                type: ViewChild,\n                args: ['input']\n            }] } });\n/**\n * A Material design radio-button. Typically placed inside of `<mat-radio-group>` elements.\n */\nclass MatRadioButton extends _MatRadioButtonBase {\n    constructor(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride, tabIndex) {\n        super(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride, tabIndex);\n    }\n}\nMatRadioButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatRadioButton, deps: [{ token: MAT_RADIO_GROUP, optional: true }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.FocusMonitor }, { token: i2.UniqueSelectionDispatcher }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: MAT_RADIO_DEFAULT_OPTIONS, optional: true }, { token: 'tabindex', attribute: true }], target: i0.ɵɵFactoryTarget.Component });\nMatRadioButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.1.0\", type: MatRadioButton, selector: \"mat-radio-button\", inputs: { disableRipple: \"disableRipple\", tabIndex: \"tabIndex\" }, host: { listeners: { \"focus\": \"_inputElement.nativeElement.focus()\" }, properties: { \"class.mat-radio-checked\": \"checked\", \"class.mat-radio-disabled\": \"disabled\", \"class._mat-animation-noopable\": \"_noopAnimations\", \"class.mat-primary\": \"color === \\\"primary\\\"\", \"class.mat-accent\": \"color === \\\"accent\\\"\", \"class.mat-warn\": \"color === \\\"warn\\\"\", \"attr.tabindex\": \"null\", \"attr.id\": \"id\", \"attr.aria-label\": \"null\", \"attr.aria-labelledby\": \"null\", \"attr.aria-describedby\": \"null\" }, classAttribute: \"mat-radio-button\" }, exportAs: [\"matRadioButton\"], usesInheritance: true, ngImport: i0, template: \"<!-- TODO(jelbourn): render the radio on either side of the content -->\\n<!-- TODO(mtlin): Evaluate trade-offs of using native radio vs. cost of additional bindings. -->\\n<label [attr.for]=\\\"inputId\\\" class=\\\"mat-radio-label\\\" #label>\\n  <!-- The actual 'radio' part of the control. -->\\n  <span class=\\\"mat-radio-container\\\">\\n    <span class=\\\"mat-radio-outer-circle\\\"></span>\\n    <span class=\\\"mat-radio-inner-circle\\\"></span>\\n    <input #input class=\\\"mat-radio-input cdk-visually-hidden\\\" type=\\\"radio\\\"\\n        [id]=\\\"inputId\\\"\\n        [checked]=\\\"checked\\\"\\n        [disabled]=\\\"disabled\\\"\\n        [tabIndex]=\\\"tabIndex\\\"\\n        [attr.name]=\\\"name\\\"\\n        [attr.value]=\\\"value\\\"\\n        [required]=\\\"required\\\"\\n        [attr.aria-label]=\\\"ariaLabel\\\"\\n        [attr.aria-labelledby]=\\\"ariaLabelledby\\\"\\n        [attr.aria-describedby]=\\\"ariaDescribedby\\\"\\n        (change)=\\\"_onInputInteraction($event)\\\"\\n        (click)=\\\"_onInputClick($event)\\\">\\n\\n    <!-- The ripple comes after the input so that we can target it with a CSS\\n         sibling selector when the input is focused. -->\\n    <span mat-ripple class=\\\"mat-radio-ripple mat-focus-indicator\\\"\\n         [matRippleTrigger]=\\\"label\\\"\\n         [matRippleDisabled]=\\\"_isRippleDisabled()\\\"\\n         [matRippleCentered]=\\\"true\\\"\\n         [matRippleRadius]=\\\"20\\\"\\n         [matRippleAnimation]=\\\"{enterDuration: _noopAnimations ? 0 : 150}\\\">\\n\\n      <span class=\\\"mat-ripple-element mat-radio-persistent-ripple\\\"></span>\\n    </span>\\n  </span>\\n\\n  <!-- The label content for radio control. -->\\n  <span class=\\\"mat-radio-label-content\\\" [class.mat-radio-label-before]=\\\"labelPosition == 'before'\\\">\\n    <!-- Add an invisible span so JAWS can read the label -->\\n    <span style=\\\"display:none\\\">&nbsp;</span>\\n    <ng-content></ng-content>\\n  </span>\\n</label>\\n\", styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;opacity:0;transition:transform ease 280ms,background-color ease 280ms,opacity linear 1ms 280ms;width:20px;transform:scale(0.001);-webkit-print-color-adjust:exact;color-adjust:exact}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5);opacity:1;transition:transform ease 280ms,background-color ease 280ms}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-label-content{-webkit-user-select:auto;-moz-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none;top:0;left:0}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{bottom:0;left:50%}.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-ripple,.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-ripple{outline:solid 3px}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"], directives: [{ type: i3.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatRadioButton, decorators: [{\n            type: Component,\n            args: [{ selector: 'mat-radio-button', inputs: ['disableRipple', 'tabIndex'], encapsulation: ViewEncapsulation.None, exportAs: 'matRadioButton', host: {\n                        'class': 'mat-radio-button',\n                        '[class.mat-radio-checked]': 'checked',\n                        '[class.mat-radio-disabled]': 'disabled',\n                        '[class._mat-animation-noopable]': '_noopAnimations',\n                        '[class.mat-primary]': 'color === \"primary\"',\n                        '[class.mat-accent]': 'color === \"accent\"',\n                        '[class.mat-warn]': 'color === \"warn\"',\n                        // Needs to be removed since it causes some a11y issues (see #21266).\n                        '[attr.tabindex]': 'null',\n                        '[attr.id]': 'id',\n                        '[attr.aria-label]': 'null',\n                        '[attr.aria-labelledby]': 'null',\n                        '[attr.aria-describedby]': 'null',\n                        // Note: under normal conditions focus shouldn't land on this element, however it may be\n                        // programmatically set, for example inside of a focus trap, in this case we want to forward\n                        // the focus to the native element.\n                        '(focus)': '_inputElement.nativeElement.focus()',\n                    }, changeDetection: ChangeDetectionStrategy.OnPush, template: \"<!-- TODO(jelbourn): render the radio on either side of the content -->\\n<!-- TODO(mtlin): Evaluate trade-offs of using native radio vs. cost of additional bindings. -->\\n<label [attr.for]=\\\"inputId\\\" class=\\\"mat-radio-label\\\" #label>\\n  <!-- The actual 'radio' part of the control. -->\\n  <span class=\\\"mat-radio-container\\\">\\n    <span class=\\\"mat-radio-outer-circle\\\"></span>\\n    <span class=\\\"mat-radio-inner-circle\\\"></span>\\n    <input #input class=\\\"mat-radio-input cdk-visually-hidden\\\" type=\\\"radio\\\"\\n        [id]=\\\"inputId\\\"\\n        [checked]=\\\"checked\\\"\\n        [disabled]=\\\"disabled\\\"\\n        [tabIndex]=\\\"tabIndex\\\"\\n        [attr.name]=\\\"name\\\"\\n        [attr.value]=\\\"value\\\"\\n        [required]=\\\"required\\\"\\n        [attr.aria-label]=\\\"ariaLabel\\\"\\n        [attr.aria-labelledby]=\\\"ariaLabelledby\\\"\\n        [attr.aria-describedby]=\\\"ariaDescribedby\\\"\\n        (change)=\\\"_onInputInteraction($event)\\\"\\n        (click)=\\\"_onInputClick($event)\\\">\\n\\n    <!-- The ripple comes after the input so that we can target it with a CSS\\n         sibling selector when the input is focused. -->\\n    <span mat-ripple class=\\\"mat-radio-ripple mat-focus-indicator\\\"\\n         [matRippleTrigger]=\\\"label\\\"\\n         [matRippleDisabled]=\\\"_isRippleDisabled()\\\"\\n         [matRippleCentered]=\\\"true\\\"\\n         [matRippleRadius]=\\\"20\\\"\\n         [matRippleAnimation]=\\\"{enterDuration: _noopAnimations ? 0 : 150}\\\">\\n\\n      <span class=\\\"mat-ripple-element mat-radio-persistent-ripple\\\"></span>\\n    </span>\\n  </span>\\n\\n  <!-- The label content for radio control. -->\\n  <span class=\\\"mat-radio-label-content\\\" [class.mat-radio-label-before]=\\\"labelPosition == 'before'\\\">\\n    <!-- Add an invisible span so JAWS can read the label -->\\n    <span style=\\\"display:none\\\">&nbsp;</span>\\n    <ng-content></ng-content>\\n  </span>\\n</label>\\n\", styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;opacity:0;transition:transform ease 280ms,background-color ease 280ms,opacity linear 1ms 280ms;width:20px;transform:scale(0.001);-webkit-print-color-adjust:exact;color-adjust:exact}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5);opacity:1;transition:transform ease 280ms,background-color ease 280ms}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-label-content{-webkit-user-select:auto;-moz-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none;top:0;left:0}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{bottom:0;left:50%}.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-ripple,.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-ripple{outline:solid 3px}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"] }]\n        }], ctorParameters: function () {\n        return [{ type: MatRadioGroup, decorators: [{\n                        type: Optional\n                    }, {\n                        type: Inject,\n                        args: [MAT_RADIO_GROUP]\n                    }] }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.FocusMonitor }, { type: i2.UniqueSelectionDispatcher }, { type: undefined, decorators: [{\n                        type: Optional\n                    }, {\n                        type: Inject,\n                        args: [ANIMATION_MODULE_TYPE]\n                    }] }, { type: undefined, decorators: [{\n                        type: Optional\n                    }, {\n                        type: Inject,\n                        args: [MAT_RADIO_DEFAULT_OPTIONS]\n                    }] }, { type: undefined, decorators: [{\n                        type: Attribute,\n                        args: ['tabindex']\n                    }] }];\n    } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatRadioModule {\n}\nMatRadioModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatRadioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatRadioModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatRadioModule, declarations: [MatRadioGroup, MatRadioButton], imports: [MatRippleModule, MatCommonModule], exports: [MatRadioGroup, MatRadioButton, MatCommonModule] });\nMatRadioModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatRadioModule, imports: [[MatRippleModule, MatCommonModule], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatRadioModule, decorators: [{\n            type: NgModule,\n            args: [{\n                    imports: [MatRippleModule, MatCommonModule],\n                    exports: [MatRadioGroup, MatRadioButton, MatCommonModule],\n                    declarations: [MatRadioGroup, MatRadioButton],\n                }]\n        }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_RADIO_DEFAULT_OPTIONS, MAT_RADIO_DEFAULT_OPTIONS_FACTORY, MAT_RADIO_GROUP, MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR, MatRadioButton, MatRadioChange, MatRadioGroup, MatRadioModule, _MatRadioButtonBase, _MatRadioGroupBase };\n"]},"metadata":{},"sourceType":"module"}