{"version":3,"file":"radio-button.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/radio-button/radio-button.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/radio-button/radio-button.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/radio-button/radio-button.module.ts"],"sourcesContent":["import { FocusMonitor, FocusOrigin, _IdGenerator } from '@angular/cdk/a11y';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport {\n  AfterContentInit,\n  afterNextRender,\n  AfterViewInit,\n  Attribute,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  Directive,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostBinding,\n  inject,\n  Inject,\n  InjectionToken,\n  Injector,\n  Input,\n  numberAttribute,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  QueryList,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TypeRef } from '@sbb-esta/angular/core';\nimport { Subscription } from 'rxjs';\n\n/**\n * Provider Expression that allows sbb-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n * @docs-private\n */\nexport const SBB_RADIO_GROUP_CONTROL_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => SbbRadioGroup),\n  multi: true,\n};\n\n/** Change event object emitted by SbbRadio and SbbRadioGroup. */\nexport class SbbRadioChange<T = any> {\n  constructor(\n    /** The SbbRadioButton that emits the change event. */\n    public source: _SbbRadioButtonBase,\n    /** The value of the SbbRadioButton. */\n    public value: T,\n  ) {}\n}\n\n/**\n * Injection token that can be used to inject instances of `SbbRadioGroup`. It serves as\n * alternative token to the actual `SbbRadioGroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const SBB_RADIO_GROUP = new InjectionToken<_SbbRadioGroupBase<_SbbRadioButtonBase>>(\n  'SbbRadioGroup',\n);\n\n/**\n * Injection token that can be used to inject instances of `_SbbRadioButtonBase`\n * implementations. It serves as alternative token to the actual `_SbbRadioButtonBase`\n * class which could cause unnecessary retention of the class and its component metadata.\n */\nexport const SBB_RADIO_BUTTON = new InjectionToken<_SbbRadioButtonBase>('SbbRadioButton');\n\n@Directive({\n  host: {\n    class: 'sbb-radio-group-base',\n  },\n})\n// tslint:disable-next-line: naming-convention class-name\nexport abstract class _SbbRadioGroupBase<TRadio extends _SbbRadioButtonBase>\n  implements AfterContentInit, OnDestroy, ControlValueAccessor\n{\n  /** Name of the radio button group. All radio buttons inside this group will use this name. */\n  @Input()\n  get name(): string {\n    return this._name;\n  }\n  set name(value: string) {\n    this._name = value;\n    this._updateRadioButtonNames();\n  }\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  @Input()\n  get value(): any {\n    return this._value;\n  }\n  set value(newValue: any) {\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      this._checkSelectedRadioButton();\n    }\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  @Input()\n  get selected(): TRadio | null {\n    return this._selected;\n  }\n  set selected(selected: TRadio | null) {\n    this._selected = selected;\n    this.value = selected ? selected.value : null;\n    this._checkSelectedRadioButton();\n  }\n\n  /** Whether the radio group is disabled */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this._disabled;\n  }\n  set disabled(value) {\n    this._disabled = value;\n    this._markRadiosForCheck();\n  }\n\n  /** Whether the radio group is required */\n  @Input({ transform: booleanAttribute })\n  get required(): boolean {\n    return this._required;\n  }\n  set required(value: boolean) {\n    this._required = value;\n    this._markRadiosForCheck();\n  }\n\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  @Output() readonly change: EventEmitter<SbbRadioChange> = new EventEmitter<SbbRadioChange>();\n\n  /** Child radio buttons. */\n  @ContentChildren(forwardRef(() => SBB_RADIO_BUTTON), { descendants: true })\n  _radios: QueryList<TRadio>;\n\n  /** Selected value for the radio group. */\n  private _value: any = null;\n\n  /** The HTML name attribute applied to radio buttons in this group. */\n  private _name = inject(_IdGenerator).getId('sbb-radio-group-');\n\n  /** The currently selected radio button. Should match value. */\n  private _selected: TRadio | null = null;\n\n  /** Whether the `value` has been set to its initial value. */\n  private _isInitialized = false;\n\n  /** Whether the radio group is disabled. */\n  private _disabled = false;\n\n  /** Whether the radio group is required. */\n  private _required = false;\n\n  /** Subscription to changes in amount of radio buttons. */\n  private _buttonChanges: Subscription;\n\n  /** `View -> model callback called when value changes` */\n  _controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n  /** `View -> model callback called when radio group has been touched` */\n  _onTouched: () => any = () => {};\n\n  constructor(protected _changeDetector: ChangeDetectorRef) {}\n\n  _checkSelectedRadioButton() {\n    if (this._selected && !this._selected.checked) {\n      this._selected.checked = true;\n    }\n  }\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 RadioGroup, and it is possible that the OnInit of the\n    // NgModel occurs *after* the OnInit of the RadioGroup.\n    this._isInitialized = true;\n\n    // Clear the `selected` button when it's destroyed since the tabindex of the rest of the\n    // buttons depends on it. Note that we don't clear the `value`, because the radio button\n    // may be swapped out with a similar one and there are some internal apps that depend on\n    // that behavior.\n    this._buttonChanges = this._radios.changes.subscribe(() => {\n      if (this.selected && !this._radios.find((radio) => radio === this.selected)) {\n        this._selected = null;\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    this._buttonChanges?.unsubscribe();\n  }\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      this._changeDetector.markForCheck();\n    }\n  }\n\n  /** Dispatch change event with current selection and group value. */\n  _emitChangeEvent(): void {\n    if (this._isInitialized) {\n      // tslint:disable-next-line: no-non-null-assertion\n      this.change.emit(new SbbRadioChange(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  writeValue(value: any) {\n    this.value = value;\n    this._changeDetector.markForCheck();\n  }\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: (value: any) => void) {\n    this._controlValueAccessorChangeFn = fn;\n  }\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: any) {\n    this._onTouched = fn;\n  }\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: boolean) {\n    this.disabled = isDisabled;\n    this._changeDetector.markForCheck();\n  }\n\n  private _updateRadioButtonNames(): void {\n    if (this._radios) {\n      this._radios.forEach((radio) => {\n        radio.name = this.name;\n        radio._markForCheck();\n      });\n    }\n  }\n\n  /** Updates the `selected` radio button from the internal _value state. */\n  private _updateSelectedRadioFromValue(): void {\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      this._radios.forEach((radio) => {\n        radio.checked = this.value === radio.value;\n        if (radio.checked) {\n          this._selected = radio;\n        }\n      });\n    }\n  }\n}\n\n@Directive({\n  selector: 'sbb-radio-group',\n  exportAs: 'sbbRadioGroup',\n  providers: [\n    SBB_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n    { provide: SBB_RADIO_GROUP, useExisting: SbbRadioGroup },\n  ],\n  host: {\n    class: 'sbb-radio-group',\n    role: 'radiogroup',\n  },\n})\nexport class SbbRadioGroup<\n  TRadio extends _SbbRadioButtonBase = SbbRadioButton,\n> extends _SbbRadioGroupBase<TRadio> {\n  @ContentChildren(forwardRef(() => SBB_RADIO_BUTTON), { descendants: true })\n  // We need an initializer here to avoid a TS error.\n  override _radios: QueryList<TRadio> = undefined!;\n}\n\nlet nextId = 0;\n\n@Directive()\n// tslint:disable-next-line: naming-convention class-name\nexport class _SbbRadioButtonBase implements OnInit, AfterViewInit, DoCheck, OnDestroy {\n  private _uniqueId = `sbb-radio-button-${++nextId}`;\n\n  /** The id of this component. */\n  @Input() @HostBinding('attr.id') id: string = this._uniqueId;\n\n  /** Analog to HTML 'name' attribute used to group radios for unique selection. */\n  @Input() name: string;\n\n  /** Used to set the 'aria-label' attribute on the underlying input element. */\n  @Input('aria-label') ariaLabel: string;\n\n  /** The 'aria-labelledby' attribute takes precedence as the element's text alternative. */\n  @Input('aria-labelledby') ariaLabelledby: string;\n\n  /** The 'aria-describedby' attribute is read after the element's label and field type. */\n  @Input('aria-describedby') ariaDescribedby: string;\n\n  /** Tabindex of the radio button. */\n  @Input({ transform: (value: unknown) => (value == null ? 0 : numberAttribute(value)) })\n  tabIndex: number = 0;\n\n  /** Whether this radio button is checked. */\n  @Input({ transform: booleanAttribute })\n  get checked(): boolean {\n    return this._checked;\n  }\n  set checked(value: boolean) {\n    if (this._checked !== value) {\n      this._checked = value;\n      if (value && this.radioGroup && this.radioGroup.value !== this.value) {\n        this.radioGroup.selected = this;\n      } else if (!value && 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 (value) {\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\n  /** The value of this radio button. */\n  @Input()\n  get value(): any {\n    return this._value;\n  }\n  set value(value: any) {\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\n  /** Whether the radio button is disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this._disabled || (this.radioGroup !== null && this.radioGroup.disabled);\n  }\n  set disabled(value: boolean) {\n    this._setDisabled(value);\n  }\n\n  /** Whether the radio button is required. */\n  @Input({ transform: booleanAttribute })\n  get required(): boolean {\n    return this._required || (this.radioGroup && this.radioGroup.required);\n  }\n  set required(value: boolean) {\n    if (value !== this._required) {\n      this._changeDetector.markForCheck();\n    }\n    this._required = value;\n  }\n\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  @Output() readonly change: EventEmitter<SbbRadioChange> = new EventEmitter<SbbRadioChange>();\n\n  /** The parent radio group. May or may not be present. */\n  radioGroup: _SbbRadioGroupBase<_SbbRadioButtonBase>;\n\n  /** Id for the inner input field. */\n  get inputId() {\n    return `${this.id || this._uniqueId}-input`;\n  }\n\n  /** Whether this radio is checked. */\n  private _checked: boolean = false;\n\n  /** Whether this radio is disabled. */\n  private _disabled: boolean;\n\n  /** Whether this radio is required. */\n  private _required: boolean;\n\n  /** Value assigned to this radio. */\n  private _value: any = null;\n\n  /** Unregister function for _radioDispatcher */\n  private _removeUniqueSelectionListener: () => void = () => {};\n\n  /** Previous value of the input's tabindex. */\n  private _previousTabIndex: number | undefined;\n\n  /** The native `<input type=radio>` element */\n  @ViewChild('input') _inputElement: ElementRef<HTMLInputElement>;\n\n  private _injector = inject(Injector);\n\n  constructor(\n    radioGroup: TypeRef<_SbbRadioGroupBase<_SbbRadioButtonBase>>,\n    private _elementRef: ElementRef,\n    protected readonly _changeDetector: ChangeDetectorRef,\n    private _focusMonitor: FocusMonitor,\n    private _radioDispatcher: UniqueSelectionDispatcher,\n    tabIndex?: string,\n  ) {\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\n    if (tabIndex) {\n      this.tabIndex = numberAttribute(tabIndex, 0);\n    }\n  }\n\n  /** Focuses the radio button. */\n  focus(options?: FocusOptions, origin?: FocusOrigin): void {\n    if (origin) {\n      this._focusMonitor.focusVia(this._inputElement, origin, options);\n    } else {\n      this._inputElement.nativeElement.focus(options);\n    }\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   * @docs-private\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(): void {\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      }\n\n      // Copy name from parent radio group\n      this.name = this.radioGroup.name;\n    }\n\n    this._removeUniqueSelectionListener = this._radioDispatcher.listen((id, name) => {\n      if (id !== this.id && name === this.name) {\n        this.checked = false;\n      }\n    });\n  }\n\n  ngDoCheck(): void {\n    this._updateTabIndex();\n  }\n\n  ngAfterViewInit() {\n    this._updateTabIndex();\n    this._focusMonitor.monitor(this._elementRef, true).subscribe((focusOrigin) => {\n      if (!focusOrigin && this.radioGroup) {\n        this.radioGroup._touch();\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._focusMonitor.stopMonitoring(this._elementRef);\n    this._removeUniqueSelectionListener();\n  }\n\n  /** Dispatch change event with current value. */\n  private _emitChangeEvent(): void {\n    this.change.emit(new SbbRadioChange(this, this._value));\n  }\n\n  /** @docs-private */\n  _onInputClick(event: 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\n  /**\n   * Triggered when the radio button received a click or the input recognized any change.\n   * Clicking on a label element, will trigger a change event on the associated input.\n   * @docs-private\n   */\n  _onInputChange(event?: 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    const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n    this.checked = true;\n    this._emitChangeEvent();\n\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  protected _setDisabled(value: boolean) {\n    if (this._disabled !== value) {\n      this._disabled = value;\n      this._changeDetector.markForCheck();\n    }\n  }\n\n  /** Gets the tabindex for the underlying input element. */\n  private _updateTabIndex() {\n    const group = this.radioGroup;\n    let value: number;\n\n    // Implement a roving tabindex if the button is inside a group. For most cases this isn't\n    // necessary, because the browser handles the tab order for inputs inside a group automatically,\n    // but we need an explicitly higher tabindex for the selected button in order for things like\n    // the focus trap to pick it up correctly.\n    if (!group || !group.selected || this.disabled) {\n      value = this.tabIndex;\n    } else {\n      value = group.selected === this ? this.tabIndex : -1;\n    }\n\n    if (value !== this._previousTabIndex) {\n      // We have to set the tabindex directly on the DOM node, because it depends on\n      // the selected state which is prone to \"changed after checked errors\".\n      const input: HTMLInputElement | undefined = this._inputElement?.nativeElement;\n\n      if (input) {\n        input.setAttribute('tabindex', value + '');\n        this._previousTabIndex = value;\n        // Wait for any pending tabindex changes to be applied\n        afterNextRender(\n          () => {\n            queueMicrotask(() => {\n              // The radio group uses a \"selection follows focus\" pattern for tab management, so if this\n              // radio button is currently focused and another radio button in the group becomes\n              // selected, we should move focus to the newly selected radio button to maintain\n              // consistency between the focused and selected states.\n              if (\n                group &&\n                group.selected &&\n                group.selected !== this &&\n                document.activeElement === input\n              ) {\n                group.selected?._inputElement.nativeElement.focus();\n                // If this radio button still has focus, the selected one must be disabled. In this\n                // case the radio group as a whole should lose focus.\n                if (document.activeElement === input) {\n                  this._inputElement.nativeElement.blur();\n                }\n              }\n            });\n          },\n          { injector: this._injector },\n        );\n      }\n    }\n  }\n}\n\n@Component({\n  selector: 'sbb-radio-button',\n  templateUrl: './radio-button.html',\n  inputs: ['tabIndex'],\n  encapsulation: ViewEncapsulation.None,\n  exportAs: 'sbbRadioButton',\n  host: {\n    class: 'sbb-radio-button sbb-selection-item',\n    '[class.sbb-selection-checked]': 'checked',\n    '[class.sbb-selection-disabled]': 'disabled',\n    // Needs to be removed since it causes some a11y issues (see angular/components#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  providers: [{ provide: SBB_RADIO_BUTTON, useExisting: SbbRadioButton }],\n})\nexport class SbbRadioButton extends _SbbRadioButtonBase {\n  constructor(\n    @Optional() @Inject(SBB_RADIO_GROUP) radioGroup: SbbRadioGroup,\n    elementRef: ElementRef,\n    changeDetector: ChangeDetectorRef,\n    focusMonitor: FocusMonitor,\n    radioDispatcher: UniqueSelectionDispatcher,\n    @Attribute('tabindex') tabIndex?: string,\n  ) {\n    super(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, tabIndex);\n  }\n}\n","<label [attr.for]=\"inputId\" class=\"sbb-selection-item-label\">\n  <!--\n  Note that we set `aria-invalid=\"false\"` on the input, because otherwise some screen readers\n  will read out \"required, invalid data\" for each radio button that hasn't been checked.\n  An alternate approach is to use `aria-required` instead of `required`, however we have an\n  internal check which enforces that elements marked as `aria-required` also have the `required`\n  attribute which ends up re-introducing the issue for us.\n  -->\n  <input\n    #input\n    type=\"radio\"\n    class=\"sbb-selection-input sbb-radio-input sbb-transparent-parent-overlay\"\n    [id]=\"inputId\"\n    [checked]=\"checked\"\n    [disabled]=\"disabled\"\n    [tabIndex]=\"tabIndex\"\n    [attr.name]=\"name\"\n    [attr.value]=\"value\"\n    [required]=\"required\"\n    aria-invalid=\"false\"\n    [attr.aria-label]=\"ariaLabel\"\n    [attr.aria-labelledby]=\"ariaLabelledby\"\n    [attr.aria-describedby]=\"ariaDescribedby\"\n    (change)=\"_onInputChange($event)\"\n    (click)=\"_onInputClick($event)\"\n  />\n\n  <div class=\"sbb-selection-container\">\n    <div class=\"sbb-selection-container-checked\"></div>\n  </div>\n\n  <div class=\"sbb-selection-content\">\n    <!-- Add an invisible span so JAWS can read the label -->\n    <span hidden>&nbsp;</span>\n    <ng-content></ng-content>\n  </div>\n</label>\n","import { NgModule } from '@angular/core';\nimport { SbbCommonModule } from '@sbb-esta/angular/core';\n\nimport { SbbRadioButton, SbbRadioGroup } from './radio-button';\n\n@NgModule({\n  imports: [SbbCommonModule, SbbRadioButton, SbbRadioGroup],\n  exports: [SbbRadioButton, SbbRadioGroup],\n})\nexport class SbbRadioButtonModule {}\n"],"names":["SBB_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","SbbRadioGroup","multi","SbbRadioChange","source","value","constructor","SBB_RADIO_GROUP","InjectionToken","SBB_RADIO_BUTTON","_SbbRadioGroupBase","_changeDetector","name","_name","_updateRadioButtonNames","_value","newValue","_updateSelectedRadioFromValue","_checkSelectedRadioButton","selected","_selected","disabled","_disabled","_markRadiosForCheck","required","_required","change","EventEmitter","_radios","inject","_IdGenerator","getId","_isInitialized","_buttonChanges","_controlValueAccessorChangeFn","_onTouched","checked","ngAfterContentInit","changes","subscribe","find","radio","ngOnDestroy","unsubscribe","_touch","markForCheck","_emitChangeEvent","emit","forEach","_markForCheck","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","isAlreadySelected","deps","token","i0","ChangeDetectorRef","target","ɵɵFactoryTarget","Directive","ɵdir","ɵɵngDeclareDirective","minVersion","version","type","isStandalone","inputs","booleanAttribute","descendants","ngImport","decorators","args","host","class","Input","transform","Output","ContentChildren","undefined","selector","attributes","classAttribute","providers","queries","propertyName","predicate","exportAs","usesInheritance","role","nextId","_SbbRadioButtonBase","_elementRef","_focusMonitor","_radioDispatcher","_uniqueId","id","ariaLabel","ariaLabelledby","ariaDescribedby","tabIndex","_checked","radioGroup","notify","_setDisabled","inputId","_removeUniqueSelectionListener","_previousTabIndex","_inputElement","_injector","Injector","numberAttribute","focus","options","origin","focusVia","nativeElement","ngOnInit","listen","ngDoCheck","_updateTabIndex","ngAfterViewInit","monitor","focusOrigin","stopMonitoring","_onInputClick","event","stopPropagation","_onInputChange","groupValueChanged","group","input","setAttribute","afterNextRender","queueMicrotask","document","activeElement","blur","injector","outputs","properties","viewQueries","first","HostBinding","ViewChild","SbbRadioButton","elementRef","changeDetector","focusMonitor","radioDispatcher","optional","ElementRef","i1","FocusMonitor","i2","UniqueSelectionDispatcher","attribute","Component","ɵcmp","ɵɵngDeclareComponent","listeners","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","template","Optional","Inject","Attribute","SbbRadioButtonModule","NgModule","imports","SbbCommonModule","exports","ɵinj","ɵɵngDeclareInjector"],"mappings":";;;;;;;;AAyCO,MAAMA,sCAAsC,GAAQ;AACzDC,EAAAA,OAAO,EAAEC,iBAAiB;AAC1BC,EAAAA,WAAW,EAAEC,UAAU,CAAC,MAAMC,aAAa,CAAC;AAC5CC,EAAAA,KAAK,EAAE;;MAIIC,cAAc,CAAA;EAGhBC,MAAA;EAEAC,KAAA;AAJTC,EAAAA,WAAAA,CAESF,MAA2B,EAE3BC,KAAQ,EAAA;IAFR,IAAM,CAAAD,MAAA,GAANA,MAAM;IAEN,IAAK,CAAAC,KAAA,GAALA,KAAK;AACX;AACJ;MAOYE,eAAe,GAAG,IAAIC,cAAc,CAC/C,eAAe;MAQJC,gBAAgB,GAAG,IAAID,cAAc,CAAsB,gBAAgB;MAQlEE,kBAAkB,CAAA;EAyGhBC,eAAA;EArGtB,IACIC,IAAIA,GAAA;IACN,OAAO,IAAI,CAACC,KAAK;AACnB;EACA,IAAID,IAAIA,CAACP,KAAa,EAAA;IACpB,IAAI,CAACQ,KAAK,GAAGR,KAAK;IAClB,IAAI,CAACS,uBAAuB,EAAE;AAChC;EAQA,IACIT,KAAKA,GAAA;IACP,OAAO,IAAI,CAACU,MAAM;AACpB;EACA,IAAIV,KAAKA,CAACW,QAAa,EAAA;AACrB,IAAA,IAAI,IAAI,CAACD,MAAM,KAAKC,QAAQ,EAAE;MAE5B,IAAI,CAACD,MAAM,GAAGC,QAAQ;MAEtB,IAAI,CAACC,6BAA6B,EAAE;MACpC,IAAI,CAACC,yBAAyB,EAAE;AAClC;AACF;EAMA,IACIC,QAAQA,GAAA;IACV,OAAO,IAAI,CAACC,SAAS;AACvB;EACA,IAAID,QAAQA,CAACA,QAAuB,EAAA;IAClC,IAAI,CAACC,SAAS,GAAGD,QAAQ;IACzB,IAAI,CAACd,KAAK,GAAGc,QAAQ,GAAGA,QAAQ,CAACd,KAAK,GAAG,IAAI;IAC7C,IAAI,CAACa,yBAAyB,EAAE;AAClC;EAGA,IACIG,QAAQA,GAAA;IACV,OAAO,IAAI,CAACC,SAAS;AACvB;EACA,IAAID,QAAQA,CAAChB,KAAK,EAAA;IAChB,IAAI,CAACiB,SAAS,GAAGjB,KAAK;IACtB,IAAI,CAACkB,mBAAmB,EAAE;AAC5B;EAGA,IACIC,QAAQA,GAAA;IACV,OAAO,IAAI,CAACC,SAAS;AACvB;EACA,IAAID,QAAQA,CAACnB,KAAc,EAAA;IACzB,IAAI,CAACoB,SAAS,GAAGpB,KAAK;IACtB,IAAI,CAACkB,mBAAmB,EAAE;AAC5B;AAOmBG,EAAAA,MAAM,GAAiC,IAAIC,YAAY,EAAkB;EAI5FC,OAAO;AAGCb,EAAAA,MAAM,GAAQ,IAAI;EAGlBF,KAAK,GAAGgB,MAAM,CAACC,YAAY,CAAC,CAACC,KAAK,CAAC,kBAAkB,CAAC;AAGtDX,EAAAA,SAAS,GAAkB,IAAI;AAG/BY,EAAAA,cAAc,GAAG,KAAK;AAGtBV,EAAAA,SAAS,GAAG,KAAK;AAGjBG,EAAAA,SAAS,GAAG,KAAK;EAGjBQ,cAAc;AAGtBC,EAAAA,6BAA6B,GAAyBA,MAAK,EAAG;AAG9DC,EAAAA,UAAU,GAAcA,MAAK,EAAG;EAEhC7B,WAAAA,CAAsBK,eAAkC,EAAA;IAAlC,IAAe,CAAAA,eAAA,GAAfA,eAAe;AAAsB;AAE3DO,EAAAA,yBAAyBA,GAAA;IACvB,IAAI,IAAI,CAACE,SAAS,IAAI,CAAC,IAAI,CAACA,SAAS,CAACgB,OAAO,EAAE;AAC7C,MAAA,IAAI,CAAChB,SAAS,CAACgB,OAAO,GAAG,IAAI;AAC/B;AACF;AAMAC,EAAAA,kBAAkBA,GAAA;IAIhB,IAAI,CAACL,cAAc,GAAG,IAAI;IAM1B,IAAI,CAACC,cAAc,GAAG,IAAI,CAACL,OAAO,CAACU,OAAO,CAACC,SAAS,CAAC,MAAK;AACxD,MAAA,IAAI,IAAI,CAACpB,QAAQ,IAAI,CAAC,IAAI,CAACS,OAAO,CAACY,IAAI,CAAEC,KAAK,IAAKA,KAAK,KAAK,IAAI,CAACtB,QAAQ,CAAC,EAAE;QAC3E,IAAI,CAACC,SAAS,GAAG,IAAI;AACvB;AACF,KAAC,CAAC;AACJ;AAEAsB,EAAAA,WAAWA,GAAA;AACT,IAAA,IAAI,CAACT,cAAc,EAAEU,WAAW,EAAE;AACpC;AAMAC,EAAAA,MAAMA,GAAA;IACJ,IAAI,IAAI,CAACT,UAAU,EAAE;MACnB,IAAI,CAACA,UAAU,EAAE;AACjB,MAAA,IAAI,CAACxB,eAAe,CAACkC,YAAY,EAAE;AACrC;AACF;AAGAC,EAAAA,gBAAgBA,GAAA;IACd,IAAI,IAAI,CAACd,cAAc,EAAE;AAEvB,MAAA,IAAI,CAACN,MAAM,CAACqB,IAAI,CAAC,IAAI5C,cAAc,CAAC,IAAI,CAACiB,SAAU,EAAE,IAAI,CAACL,MAAM,CAAC,CAAC;AACpE;AACF;AAEAQ,EAAAA,mBAAmBA,GAAA;IACjB,IAAI,IAAI,CAACK,OAAO,EAAE;AAChB,MAAA,IAAI,CAACA,OAAO,CAACoB,OAAO,CAAEP,KAAK,IAAKA,KAAK,CAACQ,aAAa,EAAE,CAAC;AACxD;AACF;EAGAC,UAAUA,CAAC7C,KAAU,EAAA;IACnB,IAAI,CAACA,KAAK,GAAGA,KAAK;AAClB,IAAA,IAAI,CAACM,eAAe,CAACkC,YAAY,EAAE;AACrC;EAOAM,gBAAgBA,CAACC,EAAwB,EAAA;IACvC,IAAI,CAAClB,6BAA6B,GAAGkB,EAAE;AACzC;EAOAC,iBAAiBA,CAACD,EAAO,EAAA;IACvB,IAAI,CAACjB,UAAU,GAAGiB,EAAE;AACtB;EAMAE,gBAAgBA,CAACC,UAAmB,EAAA;IAClC,IAAI,CAAClC,QAAQ,GAAGkC,UAAU;AAC1B,IAAA,IAAI,CAAC5C,eAAe,CAACkC,YAAY,EAAE;AACrC;AAEQ/B,EAAAA,uBAAuBA,GAAA;IAC7B,IAAI,IAAI,CAACc,OAAO,EAAE;AAChB,MAAA,IAAI,CAACA,OAAO,CAACoB,OAAO,CAAEP,KAAK,IAAI;AAC7BA,QAAAA,KAAK,CAAC7B,IAAI,GAAG,IAAI,CAACA,IAAI;QACtB6B,KAAK,CAACQ,aAAa,EAAE;AACvB,OAAC,CAAC;AACJ;AACF;AAGQhC,EAAAA,6BAA6BA,GAAA;AAEnC,IAAA,MAAMuC,iBAAiB,GAAG,IAAI,CAACpC,SAAS,KAAK,IAAI,IAAI,IAAI,CAACA,SAAS,CAACf,KAAK,KAAK,IAAI,CAACU,MAAM;AAEzF,IAAA,IAAI,IAAI,CAACa,OAAO,IAAI,CAAC4B,iBAAiB,EAAE;MACtC,IAAI,CAACpC,SAAS,GAAG,IAAI;AACrB,MAAA,IAAI,CAACQ,OAAO,CAACoB,OAAO,CAAEP,KAAK,IAAI;QAC7BA,KAAK,CAACL,OAAO,GAAG,IAAI,CAAC/B,KAAK,KAAKoC,KAAK,CAACpC,KAAK;QAC1C,IAAIoC,KAAK,CAACL,OAAO,EAAE;UACjB,IAAI,CAAChB,SAAS,GAAGqB,KAAK;AACxB;AACF,OAAC,CAAC;AACJ;AACF;;;;;UA3NoB/B,kBAAkB;AAAA+C,IAAAA,IAAA,EAAA,CAAA;MAAAC,KAAA,EAAAC,EAAA,CAAAC;AAAA,KAAA,CAAA;AAAAC,IAAAA,MAAA,EAAAF,EAAA,CAAAG,eAAA,CAAAC;AAAA,GAAA,CAAA;AAAlB,EAAA,OAAAC,IAAA,GAAAL,EAAA,CAAAM,oBAAA,CAAA;AAAAC,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAC,IAAAA,IAAA,EAAA1D,kBAAkB;AAgDlB2D,IAAAA,YAAA,EAAA,IAAA;AAAAC,IAAAA,MAAA,EAAA;AAAA1D,MAAAA,IAAA,EAAA,MAAA;AAAAP,MAAAA,KAAA,EAAA,OAAA;AAAAc,MAAAA,QAAA,EAAA,UAAA;AAAAE,MAAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAAkD,gBAAgB,CAUhB;AAAA/C,MAAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA+C,gBAAgB;;;;;;;;;;qCAiBF9D,gBAAgB,CAAA;AAAA+D,MAAAA,WAAA,EAAA;AAAA,KAAA,CAAA;AAAAC,IAAAA,QAAA,EAAAd;AAAA,GAAA,CAAA;;;;;;QA3E9BjD,kBAAkB;AAAAgE,EAAAA,UAAA,EAAA,CAAA;UANvCX,SAAS;AAACY,IAAAA,IAAA,EAAA,CAAA;AACTC,MAAAA,IAAI,EAAE;AACJC,QAAAA,KAAK,EAAE;AACR;KACF;;;;;;;YAMEC;;;YAeAA;;;YAkBAA;;;YAWAA,KAAK;aAAC;AAAEC,QAAAA,SAAS,EAAER;OAAkB;;;YAUrCO,KAAK;aAAC;AAAEC,QAAAA,SAAS,EAAER;OAAkB;;;YAcrCS;;;YAGAC,eAAe;aAACjF,UAAU,CAAC,MAAMS,gBAAgB,CAAC,EAAE;AAAE+D,QAAAA,WAAW,EAAE;OAAM;;;;AA+JtE,MAAOvE,aAEX,SAAQS,kBAA0B,CAAA;AAGzBkB,EAAAA,OAAO,GAAsBsD,SAAU;;;;;UALrCjF,aAAa;AAAAwD,IAAAA,IAAA,EAAA,IAAA;AAAAI,IAAAA,MAAA,EAAAF,EAAA,CAAAG,eAAA,CAAAC;AAAA,GAAA,CAAA;AAAb,EAAA,OAAAC,IAAA,GAAAL,EAAA,CAAAM,oBAAA,CAAA;AAAAC,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAC,IAAAA,IAAA,EAAAnE,aAAa;AATboE,IAAAA,YAAA,EAAA,IAAA;AAAAc,IAAAA,QAAA,EAAA,iBAAA;AAAAP,IAAAA,IAAA,EAAA;AAAAQ,MAAAA,UAAA,EAAA;AAAA,QAAA,MAAA,EAAA;OAAA;AAAAC,MAAAA,cAAA,EAAA;KAAA;IAAAC,SAAA,EAAA,CACT1F,sCAAsC,EACtC;AAAEC,MAAAA,OAAO,EAAEU,eAAe;AAAER,MAAAA,WAAW,EAAEE;AAAe,KAAA,CACzD;AAAAsF,IAAAA,OAAA,EAAA,CAAA;AAAAC,MAAAA,YAAA,EAAA,SAAA;AAAAC,MAAAA,SAAA,EAAA9B,EAAA,CAAA3D,UAAA,CAAA,MASiCS,gBAAgB,CAAA;AAAA+D,MAAAA,WAAA,EAAA;AAAA,KAAA,CAAA;IAAAkB,QAAA,EAAA,CAAA,eAAA,CAAA;AAAAC,IAAAA,eAAA,EAAA,IAAA;AAAAlB,IAAAA,QAAA,EAAAd;AAAA,GAAA,CAAA;;;;;;QAHvC1D,aAAa;AAAAyE,EAAAA,UAAA,EAAA,CAAA;UAZzBX,SAAS;AAACY,IAAAA,IAAA,EAAA,CAAA;AACTQ,MAAAA,QAAQ,EAAE,iBAAiB;AAC3BO,MAAAA,QAAQ,EAAE,eAAe;MACzBJ,SAAS,EAAE,CACT1F,sCAAsC,EACtC;AAAEC,QAAAA,OAAO,EAAEU,eAAe;AAAER,QAAAA,WAAW;AAAiB,OAAA,CACzD;AACD6E,MAAAA,IAAI,EAAE;AACJC,QAAAA,KAAK,EAAE,iBAAiB;AACxBe,QAAAA,IAAI,EAAE;AACP;KACF;;;;YAIEX,eAAe;aAACjF,UAAU,CAAC,MAAMS,gBAAgB,CAAC,EAAE;AAAE+D,QAAAA,WAAW,EAAE;OAAM;;;;AAK5E,IAAIqB,MAAM,GAAG,CAAC;MAIDC,mBAAmB,CAAA;EA+HpBC,WAAA;EACWpF,eAAA;EACXqF,aAAA;EACAC,gBAAA;AAjIFC,EAAAA,SAAS,GAAG,CAAA,iBAAA,EAAoB,EAAEL,MAAM,CAAE,CAAA;EAGjBM,EAAE,GAAW,IAAI,CAACD,SAAS;EAGnDtF,IAAI;EAGQwF,SAAS;EAGJC,cAAc;EAGbC,eAAe;AAI1CC,EAAAA,QAAQ,GAAW,CAAC;EAGpB,IACInE,OAAOA,GAAA;IACT,OAAO,IAAI,CAACoE,QAAQ;AACtB;EACA,IAAIpE,OAAOA,CAAC/B,KAAc,EAAA;AACxB,IAAA,IAAI,IAAI,CAACmG,QAAQ,KAAKnG,KAAK,EAAE;MAC3B,IAAI,CAACmG,QAAQ,GAAGnG,KAAK;AACrB,MAAA,IAAIA,KAAK,IAAI,IAAI,CAACoG,UAAU,IAAI,IAAI,CAACA,UAAU,CAACpG,KAAK,KAAK,IAAI,CAACA,KAAK,EAAE;AACpE,QAAA,IAAI,CAACoG,UAAU,CAACtF,QAAQ,GAAG,IAAI;AACjC,OAAC,MAAM,IAAI,CAACd,KAAK,IAAI,IAAI,CAACoG,UAAU,IAAI,IAAI,CAACA,UAAU,CAACpG,KAAK,KAAK,IAAI,CAACA,KAAK,EAAE;AAG5E,QAAA,IAAI,CAACoG,UAAU,CAACtF,QAAQ,GAAG,IAAI;AACjC;AAEA,MAAA,IAAId,KAAK,EAAE;AAET,QAAA,IAAI,CAAC4F,gBAAgB,CAACS,MAAM,CAAC,IAAI,CAACP,EAAE,EAAE,IAAI,CAACvF,IAAI,CAAC;AAClD;AACA,MAAA,IAAI,CAACD,eAAe,CAACkC,YAAY,EAAE;AACrC;AACF;EAGA,IACIxC,KAAKA,GAAA;IACP,OAAO,IAAI,CAACU,MAAM;AACpB;EACA,IAAIV,KAAKA,CAACA,KAAU,EAAA;AAClB,IAAA,IAAI,IAAI,CAACU,MAAM,KAAKV,KAAK,EAAE;MACzB,IAAI,CAACU,MAAM,GAAGV,KAAK;AACnB,MAAA,IAAI,IAAI,CAACoG,UAAU,KAAK,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,IAAI,CAACrE,OAAO,EAAE;UAEjB,IAAI,CAACA,OAAO,GAAG,IAAI,CAACqE,UAAU,CAACpG,KAAK,KAAKA,KAAK;AAChD;QACA,IAAI,IAAI,CAAC+B,OAAO,EAAE;AAChB,UAAA,IAAI,CAACqE,UAAU,CAACtF,QAAQ,GAAG,IAAI;AACjC;AACF;AACF;AACF;EAGA,IACIE,QAAQA,GAAA;AACV,IAAA,OAAO,IAAI,CAACC,SAAS,IAAK,IAAI,CAACmF,UAAU,KAAK,IAAI,IAAI,IAAI,CAACA,UAAU,CAACpF,QAAS;AACjF;EACA,IAAIA,QAAQA,CAAChB,KAAc,EAAA;AACzB,IAAA,IAAI,CAACsG,YAAY,CAACtG,KAAK,CAAC;AAC1B;EAGA,IACImB,QAAQA,GAAA;AACV,IAAA,OAAO,IAAI,CAACC,SAAS,IAAK,IAAI,CAACgF,UAAU,IAAI,IAAI,CAACA,UAAU,CAACjF,QAAS;AACxE;EACA,IAAIA,QAAQA,CAACnB,KAAc,EAAA;AACzB,IAAA,IAAIA,KAAK,KAAK,IAAI,CAACoB,SAAS,EAAE;AAC5B,MAAA,IAAI,CAACd,eAAe,CAACkC,YAAY,EAAE;AACrC;IACA,IAAI,CAACpB,SAAS,GAAGpB,KAAK;AACxB;AAOmBqB,EAAAA,MAAM,GAAiC,IAAIC,YAAY,EAAkB;EAG5F8E,UAAU;EAGV,IAAIG,OAAOA,GAAA;IACT,OAAO,CAAA,EAAG,IAAI,CAACT,EAAE,IAAI,IAAI,CAACD,SAAS,CAAQ,MAAA,CAAA;AAC7C;AAGQM,EAAAA,QAAQ,GAAY,KAAK;EAGzBlF,SAAS;EAGTG,SAAS;AAGTV,EAAAA,MAAM,GAAQ,IAAI;AAGlB8F,EAAAA,8BAA8B,GAAeA,MAAK,EAAG;EAGrDC,iBAAiB;EAGLC,aAAa;AAEzBC,EAAAA,SAAS,GAAGnF,MAAM,CAACoF,QAAQ,CAAC;AAEpC3G,EAAAA,WACEA,CAAAmG,UAA4D,EACpDV,WAAuB,EACZpF,eAAkC,EAC7CqF,aAA2B,EAC3BC,gBAA2C,EACnDM,QAAiB,EAAA;IAJT,IAAW,CAAAR,WAAA,GAAXA,WAAW;IACA,IAAe,CAAApF,eAAA,GAAfA,eAAe;IAC1B,IAAa,CAAAqF,aAAA,GAAbA,aAAa;IACb,IAAgB,CAAAC,gBAAA,GAAhBA,gBAAgB;IAKxB,IAAI,CAACQ,UAAU,GAAGA,UAAU;AAE5B,IAAA,IAAIF,QAAQ,EAAE;MACZ,IAAI,CAACA,QAAQ,GAAGW,eAAe,CAACX,QAAQ,EAAE,CAAC,CAAC;AAC9C;AACF;AAGAY,EAAAA,KAAKA,CAACC,OAAsB,EAAEC,MAAoB,EAAA;AAChD,IAAA,IAAIA,MAAM,EAAE;AACV,MAAA,IAAI,CAACrB,aAAa,CAACsB,QAAQ,CAAC,IAAI,CAACP,aAAa,EAAEM,MAAM,EAAED,OAAO,CAAC;AAClE,KAAC,MAAM;MACL,IAAI,CAACL,aAAa,CAACQ,aAAa,CAACJ,KAAK,CAACC,OAAO,CAAC;AACjD;AACF;AAQAnE,EAAAA,aAAaA,GAAA;AAGX,IAAA,IAAI,CAACtC,eAAe,CAACkC,YAAY,EAAE;AACrC;AAEA2E,EAAAA,QAAQA,GAAA;IACN,IAAI,IAAI,CAACf,UAAU,EAAE;MAEnB,IAAI,CAACrE,OAAO,GAAG,IAAI,CAACqE,UAAU,CAACpG,KAAK,KAAK,IAAI,CAACU,MAAM;MAEpD,IAAI,IAAI,CAACqB,OAAO,EAAE;AAChB,QAAA,IAAI,CAACqE,UAAU,CAACtF,QAAQ,GAAG,IAAI;AACjC;AAGA,MAAA,IAAI,CAACP,IAAI,GAAG,IAAI,CAAC6F,UAAU,CAAC7F,IAAI;AAClC;AAEA,IAAA,IAAI,CAACiG,8BAA8B,GAAG,IAAI,CAACZ,gBAAgB,CAACwB,MAAM,CAAC,CAACtB,EAAE,EAAEvF,IAAI,KAAI;MAC9E,IAAIuF,EAAE,KAAK,IAAI,CAACA,EAAE,IAAIvF,IAAI,KAAK,IAAI,CAACA,IAAI,EAAE;QACxC,IAAI,CAACwB,OAAO,GAAG,KAAK;AACtB;AACF,KAAC,CAAC;AACJ;AAEAsF,EAAAA,SAASA,GAAA;IACP,IAAI,CAACC,eAAe,EAAE;AACxB;AAEAC,EAAAA,eAAeA,GAAA;IACb,IAAI,CAACD,eAAe,EAAE;AACtB,IAAA,IAAI,CAAC3B,aAAa,CAAC6B,OAAO,CAAC,IAAI,CAAC9B,WAAW,EAAE,IAAI,CAAC,CAACxD,SAAS,CAAEuF,WAAW,IAAI;AAC3E,MAAA,IAAI,CAACA,WAAW,IAAI,IAAI,CAACrB,UAAU,EAAE;AACnC,QAAA,IAAI,CAACA,UAAU,CAAC7D,MAAM,EAAE;AAC1B;AACF,KAAC,CAAC;AACJ;AAEAF,EAAAA,WAAWA,GAAA;IACT,IAAI,CAACsD,aAAa,CAAC+B,cAAc,CAAC,IAAI,CAAChC,WAAW,CAAC;IACnD,IAAI,CAACc,8BAA8B,EAAE;AACvC;AAGQ/D,EAAAA,gBAAgBA,GAAA;AACtB,IAAA,IAAI,CAACpB,MAAM,CAACqB,IAAI,CAAC,IAAI5C,cAAc,CAAC,IAAI,EAAE,IAAI,CAACY,MAAM,CAAC,CAAC;AACzD;EAGAiH,aAAaA,CAACC,KAAY,EAAA;IAQxBA,KAAK,CAACC,eAAe,EAAE;AACzB;EAOAC,cAAcA,CAACF,KAAa,EAAA;IAI1BA,KAAK,EAAEC,eAAe,EAAE;AAExB,IAAA,MAAME,iBAAiB,GAAG,IAAI,CAAC3B,UAAU,IAAI,IAAI,CAACpG,KAAK,KAAK,IAAI,CAACoG,UAAU,CAACpG,KAAK;IACjF,IAAI,CAAC+B,OAAO,GAAG,IAAI;IACnB,IAAI,CAACU,gBAAgB,EAAE;IAEvB,IAAI,IAAI,CAAC2D,UAAU,EAAE;MACnB,IAAI,CAACA,UAAU,CAACvE,6BAA6B,CAAC,IAAI,CAAC7B,KAAK,CAAC;AACzD,MAAA,IAAI+H,iBAAiB,EAAE;AACrB,QAAA,IAAI,CAAC3B,UAAU,CAAC3D,gBAAgB,EAAE;AACpC;AACF;AACF;EAGU6D,YAAYA,CAACtG,KAAc,EAAA;AACnC,IAAA,IAAI,IAAI,CAACiB,SAAS,KAAKjB,KAAK,EAAE;MAC5B,IAAI,CAACiB,SAAS,GAAGjB,KAAK;AACtB,MAAA,IAAI,CAACM,eAAe,CAACkC,YAAY,EAAE;AACrC;AACF;AAGQ8E,EAAAA,eAAeA,GAAA;AACrB,IAAA,MAAMU,KAAK,GAAG,IAAI,CAAC5B,UAAU;AAC7B,IAAA,IAAIpG,KAAa;IAMjB,IAAI,CAACgI,KAAK,IAAI,CAACA,KAAK,CAAClH,QAAQ,IAAI,IAAI,CAACE,QAAQ,EAAE;MAC9ChB,KAAK,GAAG,IAAI,CAACkG,QAAQ;AACvB,KAAC,MAAM;AACLlG,MAAAA,KAAK,GAAGgI,KAAK,CAAClH,QAAQ,KAAK,IAAI,GAAG,IAAI,CAACoF,QAAQ,GAAG,CAAC,CAAC;AACtD;AAEA,IAAA,IAAIlG,KAAK,KAAK,IAAI,CAACyG,iBAAiB,EAAE;AAGpC,MAAA,MAAMwB,KAAK,GAAiC,IAAI,CAACvB,aAAa,EAAEQ,aAAa;AAE7E,MAAA,IAAIe,KAAK,EAAE;QACTA,KAAK,CAACC,YAAY,CAAC,UAAU,EAAElI,KAAK,GAAG,EAAE,CAAC;QAC1C,IAAI,CAACyG,iBAAiB,GAAGzG,KAAK;AAE9BmI,QAAAA,eAAe,CACb,MAAK;AACHC,UAAAA,cAAc,CAAC,MAAK;AAKlB,YAAA,IACEJ,KAAK,IACLA,KAAK,CAAClH,QAAQ,IACdkH,KAAK,CAAClH,QAAQ,KAAK,IAAI,IACvBuH,QAAQ,CAACC,aAAa,KAAKL,KAAK,EAChC;cACAD,KAAK,CAAClH,QAAQ,EAAE4F,aAAa,CAACQ,aAAa,CAACJ,KAAK,EAAE;AAGnD,cAAA,IAAIuB,QAAQ,CAACC,aAAa,KAAKL,KAAK,EAAE;AACpC,gBAAA,IAAI,CAACvB,aAAa,CAACQ,aAAa,CAACqB,IAAI,EAAE;AACzC;AACF;AACF,WAAC,CAAC;AACJ,SAAC,EACD;UAAEC,QAAQ,EAAE,IAAI,CAAC7B;AAAW,SAAA,CAC7B;AACH;AACF;AACF;;;;;UA3SWlB,mBAAmB;AAAArC,IAAAA,IAAA,EAAA,SAAA;AAAAI,IAAAA,MAAA,EAAAF,EAAA,CAAAG,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;UAAnB+B,mBAAmB;AAAAzB,IAAAA,YAAA,EAAA,IAAA;AAAAC,IAAAA,MAAA,EAAA;AAAA6B,MAAAA,EAAA,EAAA,IAAA;AAAAvF,MAAAA,IAAA,EAAA,MAAA;AAAAwF,MAAAA,SAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA;AAAAC,MAAAA,cAAA,EAAA,CAAA,iBAAA,EAAA,gBAAA,CAAA;AAAAC,MAAAA,eAAA,EAAA,CAAA,kBAAA,EAAA,iBAAA,CAAA;AAAAC,MAAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAmBTlG,KAAc,IAAMA,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG6G,eAAe,CAAC7G,KAAK,CAAE,CAAA;AAAA+B,MAAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAIhEmC,gBAAgB,CAAA;AAAAlE,MAAAA,KAAA,EAAA,OAAA;AAAAgB,MAAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EA4ChBkD,gBAAgB,CAAA;AAAA/C,MAAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAShB+C,gBAAgB;KAAA;AAAAuE,IAAAA,OAAA,EAAA;AAAApH,MAAAA,MAAA,EAAA;KAAA;AAAAkD,IAAAA,IAAA,EAAA;AAAAmE,MAAAA,UAAA,EAAA;AAAA,QAAA,SAAA,EAAA;AAAA;KAAA;AAAAC,IAAAA,WAAA,EAAA,CAAA;AAAAxD,MAAAA,YAAA,EAAA,eAAA;AAAAyD,MAAAA,KAAA,EAAA,IAAA;MAAAxD,SAAA,EAAA,CAAA,OAAA,CAAA;AAAAjB,MAAAA,WAAA,EAAA;AAAA,KAAA,CAAA;AAAAC,IAAAA,QAAA,EAAAd;AAAA,GAAA,CAAA;;;;;;QA5EzBmC,mBAAmB;AAAApB,EAAAA,UAAA,EAAA,CAAA;UAF/BX;;;;;;;;;;;;;;;;;YAMEe;;YAASoE,WAAW;aAAC,SAAS;;;YAG9BpE;;;YAGAA,KAAK;aAAC,YAAY;;;YAGlBA,KAAK;aAAC,iBAAiB;;;YAGvBA,KAAK;aAAC,kBAAkB;;;YAGxBA,KAAK;aAAC;QAAEC,SAAS,EAAG1E,KAAc,IAAMA,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG6G,eAAe,CAAC7G,KAAK;OAAI;;;YAIrFyE,KAAK;aAAC;AAAEC,QAAAA,SAAS,EAAER;OAAkB;;;YAwBrCO;;;YAoBAA,KAAK;aAAC;AAAEC,QAAAA,SAAS,EAAER;OAAkB;;;YASrCO,KAAK;aAAC;AAAEC,QAAAA,SAAS,EAAER;OAAkB;;;YAgBrCS;;;YA6BAmE,SAAS;aAAC,OAAO;;;;AA6Md,MAAOC,cAAe,SAAQtD,mBAAmB,CAAA;AACrDxF,EAAAA,WACuCA,CAAAmG,UAAyB,EAC9D4C,UAAsB,EACtBC,cAAiC,EACjCC,YAA0B,EAC1BC,eAA0C,EACnBjD,QAAiB,EAAA;AAExC,IAAA,KAAK,CAACE,UAAU,EAAE4C,UAAU,EAAEC,cAAc,EAAEC,YAAY,EAAEC,eAAe,EAAEjD,QAAQ,CAAC;AACxF;;;;;UAVW6C,cAAc;AAAA3F,IAAAA,IAAA,EAAA,CAAA;AAAAC,MAAAA,KAAA,EAEHnD,eAAe;AAAAkJ,MAAAA,QAAA,EAAA;AAAA,KAAA,EAAA;MAAA/F,KAAA,EAAAC,EAAA,CAAA+F;AAAA,KAAA,EAAA;MAAAhG,KAAA,EAAAC,EAAA,CAAAC;AAAA,KAAA,EAAA;MAAAF,KAAA,EAAAiG,EAAA,CAAAC;AAAA,KAAA,EAAA;MAAAlG,KAAA,EAAAmG,EAAA,CAAAC;AAAA,KAAA,EAAA;AAAApG,MAAAA,KAAA,EAKxB,UAAU;AAAAqG,MAAAA,SAAA,EAAA;AAAA,KAAA,CAAA;AAAAlG,IAAAA,MAAA,EAAAF,EAAA,CAAAG,eAAA,CAAAkG;AAAA,GAAA,CAAA;AAPZ,EAAA,OAAAC,IAAA,GAAAtG,EAAA,CAAAuG,oBAAA,CAAA;AAAAhG,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAC,IAAAA,IAAA,EAAAgF,cAAc;AAFd/E,IAAAA,YAAA,EAAA,IAAA;AAAAc,IAAAA,QAAA,EAAA,kBAAA;AAAAb,IAAAA,MAAA,EAAA;AAAAiC,MAAAA,QAAA,EAAA;KAAA;AAAA3B,IAAAA,IAAA,EAAA;AAAAuF,MAAAA,SAAA,EAAA;AAAA,QAAA,OAAA,EAAA;OAAA;AAAApB,MAAAA,UAAA,EAAA;AAAA,QAAA,6BAAA,EAAA,SAAA;AAAA,QAAA,8BAAA,EAAA,UAAA;AAAA,QAAA,eAAA,EAAA,MAAA;AAAA,QAAA,SAAA,EAAA,IAAA;AAAA,QAAA,iBAAA,EAAA,MAAA;AAAA,QAAA,sBAAA,EAAA,MAAA;AAAA,QAAA,uBAAA,EAAA;OAAA;AAAA1D,MAAAA,cAAA,EAAA;KAAA;AAAAC,IAAAA,SAAA,EAAA,CAAC;AAAEzF,MAAAA,OAAO,EAAEY,gBAAgB;AAAEV,MAAAA,WAAW,EAAEqJ;AAAgB,KAAA,CAAC;;;;cCzoBzE,42CAqCA;AAAAgB,IAAAA,eAAA,EAAAzG,EAAA,CAAA0G,uBAAA,CAAAC,MAAA;AAAAC,IAAAA,aAAA,EAAA5G,EAAA,CAAA6G,iBAAA,CAAAC;AAAA,GAAA,CAAA;;;;;;QDsmBarB,cAAc;AAAA1E,EAAAA,UAAA,EAAA,CAAA;UAxB1BsF,SAAS;;gBACE,kBAAkB;MAAA1F,MAAA,EAEpB,CAAC,UAAU,CAAC;MAAAiG,aAAA,EACLC,iBAAiB,CAACC,IAAI;AAC3B/E,MAAAA,QAAA,EAAA,gBAAgB;AACpBd,MAAAA,IAAA,EAAA;AACJC,QAAAA,KAAK,EAAE,qCAAqC;AAC5C,QAAA,+BAA+B,EAAE,SAAS;AAC1C,QAAA,gCAAgC,EAAE,UAAU;AAE5C,QAAA,iBAAiB,EAAE,MAAM;AACzB,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,mBAAmB,EAAE,MAAM;AAC3B,QAAA,wBAAwB,EAAE,MAAM;AAChC,QAAA,yBAAyB,EAAE,MAAM;AAIjC,QAAA,SAAS,EAAE;OACZ;MAAAuF,eAAA,EACgBC,uBAAuB,CAACC,MAAM;AAAAhF,MAAAA,SAAA,EACpC,CAAC;AAAEzF,QAAAA,OAAO,EAAEY,gBAAgB;AAAEV,QAAAA,WAAW,EAAAqJ;OAAkB,CAAC;AAAAsB,MAAAA,QAAA,EAAA;KAAA;;;;;YAIpEC;;YAAYC,MAAM;aAACrK,eAAe;;;;;;;;;;;;;YAKlCsK,SAAS;aAAC,UAAU;;;;;MEzoBZC,oBAAoB,CAAA;;;;;UAApBA,oBAAoB;AAAArH,IAAAA,IAAA,EAAA,EAAA;AAAAI,IAAAA,MAAA,EAAAF,EAAA,CAAAG,eAAA,CAAAiH;AAAA,GAAA,CAAA;;;;;UAApBD,oBAAoB;AAAAE,IAAAA,OAAA,EAAA,CAHrBC,eAAe,EAAE7B,cAAc,EAAEnJ,aAAa,CAAA;AAAAiL,IAAAA,OAAA,EAAA,CAC9C9B,cAAc,EAAEnJ,aAAa;AAAA,GAAA,CAAA;AAE5B,EAAA,OAAAkL,IAAA,GAAAxH,EAAA,CAAAyH,mBAAA,CAAA;AAAAlH,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAM,IAAAA,QAAA,EAAAd,EAAA;AAAAS,IAAAA,IAAA,EAAA0G,oBAAoB;cAHrBG,eAAe;AAAA,GAAA,CAAA;;;;;;QAGdH,oBAAoB;AAAApG,EAAAA,UAAA,EAAA,CAAA;UAJhCqG,QAAQ;AAACpG,IAAAA,IAAA,EAAA,CAAA;AACRqG,MAAAA,OAAO,EAAE,CAACC,eAAe,EAAE7B,cAAc,EAAEnJ,aAAa,CAAC;AACzDiL,MAAAA,OAAO,EAAE,CAAC9B,cAAc,EAAEnJ,aAAa;KACxC;;;;;;"}