{"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 = false;\n\n  /** Whether this radio is required. */\n  private _required: boolean = false;\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":[],"mappings":"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"}