{"version":3,"file":"chips.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chip-tokens.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chip.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chip-default-options.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chip-input.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chip-list.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chips.module.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport type { SbbChip } from './chip';\nimport type { SbbChipList } from './chip-list';\n\n/**\n * Token used to provide a `SbbChipList` to `SbbChip`.\n * Used primarily to avoid circular imports between `SbbChipList` and `SbbChip`.\n */\nexport const SBB_CHIP_LIST = new InjectionToken<SbbChipList>('SBB_CHIP_LIST');\n\n/**\n * Token used to provide a `SbbChip` to `SbbChipList`.\n * Used primarily to avoid circular imports between `SbbChipList` and `SbbChip`.\n */\nexport const SBB_CHIP = new InjectionToken<SbbChip>('SBB_CHIP');\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport { BACKSPACE, DELETE } from '@angular/cdk/keycodes';\nimport {\n  afterNextRender,\n  ANIMATION_MODULE_TYPE,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostAttributeToken,\n  inject,\n  InjectionToken,\n  Injector,\n  Input,\n  NgZone,\n  numberAttribute,\n  OnDestroy,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { TypeRef } from '@sbb-esta/angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\nimport { Subject } from 'rxjs';\n\nimport type { SbbChipList } from './chip-list';\nimport { SBB_CHIP, SBB_CHIP_LIST } from './chip-tokens';\n\n/** Represents an event fired on an individual `sbb-chip`. */\nexport interface SbbChipEvent {\n  /** The chip the event was fired on. */\n  chip: SbbChip;\n}\n\n/**\n * Injection token that can be used to reference instances of `SbbChipRemove`. It serves as\n * alternative token to the actual `SbbChipRemove` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const SBB_CHIP_REMOVE = new InjectionToken<SbbChipRemove>('SbbChipRemove');\n\n/**\n * Injection token that can be used to reference instances of `SbbChipTrailingIcon`. It serves as\n * alternative token to the actual `SbbChipTrailingIcon` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const SBB_CHIP_TRAILING_ICON = new InjectionToken<SbbChipTrailingIcon>(\n  'SbbChipTrailingIcon',\n);\n\n/**\n * Dummy directive to add CSS class to chip trailing icon.\n * @docs-private\n */\n@Directive({\n  selector: 'sbb-chip-trailing-icon, [sbbChipTrailingIcon]',\n  host: { class: 'sbb-chip-trailing-icon' },\n  providers: [{ provide: SBB_CHIP_TRAILING_ICON, useExisting: SbbChipTrailingIcon }],\n})\nexport class SbbChipTrailingIcon {}\n\n/**\n * Design styled Chip component. Used inside the SbbChipList component.\n */\n@Component({\n  selector: `sbb-basic-chip, [sbb-basic-chip], sbb-chip, [sbb-chip]`,\n  exportAs: 'sbbChip',\n  template: ` <ng-content></ng-content>\n    @if (removable && !removeIcon) {\n      <sbb-icon sbbChipRemove svgIcon=\"cross-small\"> </sbb-icon>\n    }`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'sbb-chip sbb-icon-scaled sbb-button-reset-frameless',\n    '[attr.tabindex]': 'disabled ? null : tabIndex',\n    '[attr.role]': 'role',\n    '[class.sbb-chip-with-trailing-icon]': 'trailingIcon || removable',\n    '[class.sbb-chip-disabled]': 'disabled',\n    '[attr.disabled]': 'disabled || null',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '(click)': '_handleClick($event)',\n    '(keydown)': '_handleKeydown($event)',\n    '(focus)': 'focus()',\n    '(blur)': '_blur()',\n  },\n  providers: [{ provide: SBB_CHIP, useExisting: SbbChip }],\n  imports: [SbbIconModule, forwardRef(() => SbbChipRemove)],\n})\nexport class SbbChip implements FocusableOption, OnDestroy {\n  _elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n  _changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef, { optional: true })!;\n  private _ngZone = inject(NgZone);\n  private _chipList = inject<TypeRef<SbbChipList>>(SBB_CHIP_LIST, { optional: true, host: true });\n\n  /** Whether the chip has focus. */\n  _hasFocus: boolean = false;\n\n  /** Whether animations for the chip are enabled. */\n  _animationsDisabled: boolean;\n\n  /** Whether the chip list as a whole is disabled. */\n  _chipListDisabled: boolean = false;\n\n  /** The chip's trailing icon. */\n  @ContentChild(SBB_CHIP_TRAILING_ICON) trailingIcon!: SbbChipTrailingIcon;\n\n  /** The chip's remove toggler. */\n  @ContentChild(SBB_CHIP_REMOVE) removeIcon!: SbbChipRemove;\n\n  /** ARIA role that should be applied to the chip. */\n  @Input() role: string = 'option';\n\n  /** The value of the chip. Defaults to the content inside `<sbb-chip>` tags. */\n  @Input()\n  get value(): any {\n    return this._value !== undefined ? this._value : this._elementRef.nativeElement.textContent;\n  }\n  set value(value: any) {\n    this._value = value;\n  }\n  protected _value: any;\n\n  /** Whether the chip is disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this._chipListDisabled || this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = value;\n  }\n  protected _disabled: boolean = false;\n\n  /**\n   * Determines whether the chip displays the remove styling and emits (removed) events.\n   */\n  @Input({ transform: booleanAttribute }) removable: boolean = true;\n\n  /** Tab index of the chip. */\n  @Input({\n    transform: (value: unknown) => (value == null ? undefined : numberAttribute(value)),\n  })\n  tabIndex: number = -1;\n\n  /** Emits when the chip is focused. */\n  readonly _onFocus = new Subject<SbbChipEvent>();\n\n  /** Emits when the chip is blurred. */\n  readonly _onBlur = new Subject<SbbChipEvent>();\n\n  /** Emitted when the chip is destroyed. */\n  @Output() readonly destroyed: EventEmitter<SbbChipEvent> = new EventEmitter<SbbChipEvent>();\n\n  /**\n   * Emitted when a chip is to be removed.\n   *\n   * If a FormControl (Array or Set) on the sbb-chip-list is present and no subscriber\n   * listens to (removed), the input value will automatically be removed from\n   * the FormControl collection.\n   */\n  @Output() readonly removed: EventEmitter<SbbChipEvent> = new EventEmitter<SbbChipEvent>();\n\n  private _injector = inject(Injector);\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const animationMode = inject(ANIMATION_MODULE_TYPE, { optional: true });\n    const tabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });\n\n    this._addHostClassName();\n\n    this._animationsDisabled = animationMode === 'NoopAnimations';\n    this.tabIndex = tabIndex != null ? parseInt(tabIndex, 10) || -1 : -1;\n  }\n\n  _addHostClassName() {\n    const basicChipAttrName = 'sbb-basic-chip';\n    const element = this._elementRef.nativeElement as HTMLElement;\n\n    if (\n      element.hasAttribute(basicChipAttrName) ||\n      element.tagName.toLowerCase() === basicChipAttrName\n    ) {\n      element.classList.add(basicChipAttrName);\n      return;\n    } else {\n      element.classList.add('sbb-standard-chip');\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroyed.emit({ chip: this });\n  }\n\n  /** Allows for programmatic focusing of the chip. */\n  focus(): void {\n    if (!this._hasFocus) {\n      this._elementRef.nativeElement.focus();\n      this._onFocus.next({ chip: this });\n    }\n    this._hasFocus = true;\n  }\n\n  /**\n   * Allows for programmatic removal of the chip. Called by the SbbChipList when the DELETE or\n   * BACKSPACE keys are pressed.\n   *\n   * Informs any listeners of the removal request. Does not remove the chip from the DOM.\n   */\n  remove(): void {\n    if (this.removable) {\n      this._removeValueFromControl();\n      this.removed.emit({ chip: this });\n    }\n  }\n\n  private _removeValueFromControl() {\n    const control = this._chipList?.ngControl?.control;\n    if (!control || this.removed.observers.length) {\n      return;\n    }\n\n    const currentCollection = control.value;\n    const isArray = Array.isArray(currentCollection);\n    const isSet = currentCollection instanceof Set;\n\n    if (isArray) {\n      if (!currentCollection.includes(this.value)) {\n        return;\n      }\n      const indexInChipList = this._chipList?.chips.toArray().indexOf(this);\n      if (indexInChipList! >= 0 && currentCollection[indexInChipList!] === this.value) {\n        control.patchValue(currentCollection.filter((val, index) => indexInChipList !== index));\n      } else {\n        // Filter by value can delete more than one entry at once, so only use this as a fallback.\n        control.patchValue(currentCollection.filter((val) => val !== this.value));\n      }\n    } else if (isSet) {\n      const newCurrentCollection = new Set(currentCollection);\n      newCurrentCollection.delete(this.value);\n      control.patchValue(newCurrentCollection);\n    }\n\n    if (isArray || isSet) {\n      control.markAsDirty();\n    }\n  }\n\n  /** Handles click events on the chip. */\n  _handleClick(event: Event) {\n    if (this.disabled) {\n      event.preventDefault();\n    }\n  }\n\n  /** Handle custom key presses. */\n  _handleKeydown(event: KeyboardEvent): void {\n    if (this.disabled) {\n      return;\n    }\n\n    // Ignore backspace events where the user is holding down the key\n    // so that we don't accidentally remove too many chips.\n    if ((event.keyCode === BACKSPACE && !event.repeat) || event.keyCode === DELETE) {\n      event.preventDefault();\n      this.remove();\n    }\n  }\n\n  _blur(): void {\n    // When animations are enabled, Angular may end up removing the chip from the DOM a little\n    // earlier than usual, causing it to be blurred and throwing off the logic in the chip list\n    // that moves focus not the next item. To work around the issue, we defer marking the chip\n    // as not focused until after the next render.\n    afterNextRender(\n      () =>\n        this._ngZone.run(() => {\n          this._hasFocus = false;\n          this._onBlur.next({ chip: this });\n        }),\n      { injector: this._injector },\n    );\n  }\n}\n\n/**\n * Applies proper (click) support and adds styling for use with the Sbb Design \"cancel\"\n *\n * You *may* use a custom icon, but you may need to override the `sbb-chip-remove` positioning\n * styles to properly center the icon within the chip.\n */\n@Directive({\n  selector: '[sbbChipRemove]',\n  host: {\n    class: 'sbb-chip-remove sbb-chip-trailing-icon',\n    '(click)': '_handleClick($event)',\n  },\n  providers: [{ provide: SBB_CHIP_REMOVE, useExisting: SbbChipRemove }],\n})\nexport class SbbChipRemove {\n  protected _parentChip: SbbChip = inject(SbbChip);\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    if (elementRef.nativeElement.nodeName === 'BUTTON') {\n      elementRef.nativeElement.setAttribute('type', 'button');\n    }\n  }\n\n  /** Calls the parent chip's public `remove()` method if applicable. */\n  _handleClick(event: Event): void {\n    const parentChip = this._parentChip;\n\n    if (parentChip.removable && !parentChip.disabled) {\n      parentChip.remove();\n    }\n\n    // We need to stop event propagation because otherwise the event will bubble up to the\n    // form field and cause the `onContainerClick` method to be invoked. This method would then\n    // reset the focused chip that has been focused after chip removal. Usually the parent\n    // the parent click listener of the `SbbChip` would prevent propagation, but it can happen\n    // that the chip is being removed before the event bubbles up.\n    event.stopPropagation();\n    event.preventDefault();\n  }\n}\n","import { ENTER } from '@angular/cdk/keycodes';\nimport { InjectionToken } from '@angular/core';\n\n/** Default options, for the chips module, that can be overridden. */\nexport interface SbbChipsDefaultOptions {\n  /** The list of key codes that will trigger a chipEnd event. */\n  separatorKeyCodes: readonly number[] | ReadonlySet<number>;\n}\n\n/** Injection token to be used to override the default options for the chips module. */\nexport const SBB_CHIPS_DEFAULT_OPTIONS = new InjectionToken<SbbChipsDefaultOptions>(\n  'sbb-chips-default-options',\n  {\n    providedIn: 'root',\n    factory: () => ({\n      separatorKeyCodes: [ENTER],\n    }),\n  },\n);\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport { BACKSPACE, hasModifierKey, TAB } from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport {\n  SbbAutocompleteSelectedEvent,\n  SbbAutocompleteTrigger,\n} from '@sbb-esta/angular/autocomplete';\nimport { TypeRef } from '@sbb-esta/angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { SbbChipsDefaultOptions, SBB_CHIPS_DEFAULT_OPTIONS } from './chip-default-options';\nimport type { SbbChipList } from './chip-list';\nimport { SbbChipTextControl } from './chip-text-control';\nimport { SBB_CHIP_LIST } from './chip-tokens';\n\n/** Represents an input event on a `sbbChipInput`. */\nexport interface SbbChipInputEvent {\n  /** The value of the input. */\n  value: string;\n\n  /**\n   * Reference to the chip input that emitted the event.\n   */\n  chipInput: SbbChipInput;\n}\n\n/**\n * Directive that adds chip-specific behaviors to an input element inside `<sbb-form-field>`.\n * May be placed inside or outside of an `<sbb-chip-list>`.\n */\n@Directive({\n  selector: 'input[sbbChipInputFor], input[sbbChipInput]',\n  exportAs: 'sbbChipInput, sbbChipInputFor',\n  host: {\n    class: 'sbb-chip-input sbb-input-element',\n    '(keydown)': '_keydown($event)',\n    '(blur)': '_blur()',\n    '(focus)': '_focus()',\n    '(input)': '_onInput()',\n    '[id]': 'id',\n    '[attr.disabled]': 'disabled || null',\n    '[attr.placeholder]': 'placeholder || null',\n    '[attr.aria-invalid]': '_chipList && _chipList.ngControl ? _chipList.ngControl.invalid : null',\n    '[attr.aria-required]': '_chipList && _chipList.required || null',\n  },\n})\nexport class SbbChipInput implements SbbChipTextControl, OnChanges, OnDestroy, AfterContentInit {\n  protected _elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLInputElement>>(ElementRef);\n  private _defaultOptions = inject<SbbChipsDefaultOptions>(SBB_CHIPS_DEFAULT_OPTIONS);\n  autocompleteTrigger?: SbbAutocompleteTrigger =\n    inject(SbbAutocompleteTrigger, { self: true, optional: true }) || undefined;\n  private _ngControl = inject(NgControl, { self: true, optional: true });\n\n  /** Whether the control is focused. */\n  focused: boolean = false;\n  _chipList!: SbbChipList;\n\n  private _destroyed = new Subject<void>();\n\n  /** Register input for chip list */\n  @Input('sbbChipInputFor')\n  set chipList(value: SbbChipList) {\n    if (value) {\n      this._chipList = value;\n      this._chipList.registerInput(this);\n    }\n  }\n\n  /**\n   * Whether the chipEnd event will be emitted when the input is blurred.\n   */\n  @Input({ alias: 'sbbChipInputAddOnBlur', transform: booleanAttribute })\n  addOnBlur: boolean = false;\n\n  /**\n   * The list of key codes that will trigger a chipEnd event.\n   *\n   * Defaults to `[ENTER]`.\n   */\n  @Input('sbbChipInputSeparatorKeyCodes')\n  separatorKeyCodes: readonly number[] | ReadonlySet<number> =\n    this._defaultOptions.separatorKeyCodes;\n\n  /**\n   * Emitted when a chip is to be added.\n   *\n   * If a FormControl (Array or Set) on the sbb-chip-list is present and no subscriber\n   * listens to (sbbChipInputTokenEnd), the input value will automatically be added to\n   * the FormControl collection.\n   */\n  @Output('sbbChipInputTokenEnd') readonly chipEnd = new EventEmitter<SbbChipInputEvent>();\n\n  /** The input's placeholder text. */\n  @Input() placeholder: string = '';\n\n  /** Unique id for the input. */\n  @Input() id: string = inject(_IdGenerator).getId('sbb-chip-list-input-');\n\n  /** Whether the input is disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this._disabled || (this._chipList && this._chipList.disabled);\n  }\n  set disabled(value: boolean) {\n    this._disabled = value;\n  }\n  private _disabled: boolean = false;\n\n  /** Whether the input is empty. */\n  get empty(): boolean {\n    return !this.inputElement.value;\n  }\n\n  /** The native input element to which this directive is attached. */\n  readonly inputElement!: HTMLInputElement;\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const chipList = inject<TypeRef<SbbChipList>>(SBB_CHIP_LIST, { host: true, optional: true });\n    this.inputElement = this._elementRef.nativeElement as HTMLInputElement;\n\n    if (chipList) {\n      this.chipList = chipList;\n    }\n  }\n\n  ngOnChanges(): void {\n    this._chipList.stateChanges.next();\n  }\n\n  ngOnDestroy(): void {\n    this.chipEnd.complete();\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  ngAfterContentInit(): void {\n    // Try to add autocomplete selected value to FormControl.\n    // Skip this part, if there are already other observers which might have its own logic.\n    if (this.autocompleteTrigger && this.autocompleteTrigger.autocomplete) {\n      this.autocompleteTrigger.autocomplete.optionSelected\n        .pipe(\n          filter(\n            () => this.autocompleteTrigger?.autocomplete.optionSelected.observers.length === 1,\n          ),\n          takeUntil(this._destroyed),\n        )\n        .subscribe((selectedEvent: SbbAutocompleteSelectedEvent) => {\n          this._addValueToControl(selectedEvent.option.viewValue);\n          this.chipEnd.emit({\n            value: selectedEvent.option.viewValue,\n            chipInput: this,\n          });\n        });\n    }\n  }\n\n  /** Utility method to make host definition/tests more clear. */\n  _keydown(event?: KeyboardEvent) {\n    if (event) {\n      // Allow the user's focus to escape when they're tabbing forward. Note that we don't\n      // want to do this when going backwards, because focus should go back to the first chip.\n      if (event.keyCode === TAB && !hasModifierKey(event, 'shiftKey')) {\n        this._chipList._allowFocusEscape();\n      }\n\n      if (this.empty && event.keyCode === BACKSPACE) {\n        // Ignore events where the user is holding down backspace\n        // so that we don't accidentally remove too many chips.\n        if (!event.repeat) {\n          this._chipList._keyManager.setLastItemActive();\n        }\n        event.preventDefault();\n      }\n    }\n\n    // If an autocomplete is open, we have to ensure that the (optionSelected) listener\n    // is called before this._emitChipEnd is called. The (optionSelected) listener clears\n    // the input and therefore we can prevent adding the current chip input value to the formControl.\n    // If not using this logic, the current chip input value will be added together\n    // with the selected autocomplete value.\n    if (this.autocompleteTrigger?.autocomplete.isOpen) {\n      Promise.resolve().then(() => this._emitChipEnd(event));\n    } else {\n      this._emitChipEnd(event);\n    }\n  }\n\n  /** Checks to see if the blur should emit the (chipEnd) event. */\n  _blur() {\n    if (this.addOnBlur) {\n      this._emitChipEnd();\n    }\n    this.focused = false;\n    // Blur the chip list if it is not focused\n    if (!this._chipList.focused) {\n      this._chipList._blur();\n    }\n    this._chipList.stateChanges.next();\n  }\n\n  _focus() {\n    this.focused = true;\n    this._chipList.stateChanges.next();\n  }\n\n  /** Checks to see if the (chipEnd) event needs to be emitted. */\n  _emitChipEnd(event?: KeyboardEvent) {\n    if (!this.inputElement.value && !!event) {\n      this._chipList._keydown(event);\n    }\n\n    if (!event || this._isSeparatorKey(event)) {\n      this._addValueToControl(this.inputElement.value);\n\n      this.chipEnd.emit({\n        value: this.inputElement.value,\n        chipInput: this,\n      });\n\n      event?.preventDefault();\n    }\n  }\n\n  private _addValueToControl(inputValue: string) {\n    if (!this._chipList?.ngControl?.control || inputValue === '' || this.chipEnd.observers.length) {\n      return;\n    }\n    const control = this._chipList.ngControl.control;\n    const currentCollection = control.value;\n    const isArray = Array.isArray(currentCollection);\n    const isSet = currentCollection instanceof Set;\n    if (isArray) {\n      control.patchValue([...currentCollection, inputValue]);\n    } else if (isSet) {\n      control.patchValue(new Set([...currentCollection, inputValue]));\n    }\n    if (isArray || isSet) {\n      this._chipList.ngControl.control.markAsDirty();\n      this.clear();\n    }\n  }\n\n  _onInput() {\n    // Let chip list know whenever the value changes.\n    this._chipList.stateChanges.next();\n  }\n\n  /** Focuses the input. */\n  focus(options?: FocusOptions): void {\n    this.inputElement.focus(options);\n  }\n\n  /** Clears the input */\n  clear(): void {\n    this.inputElement.value = '';\n    this._ngControl?.control?.setValue(null);\n  }\n\n  /** Checks whether a keycode is one of the configured separators. */\n  private _isSeparatorKey(event: KeyboardEvent) {\n    return !hasModifierKey(event) && new Set(this.separatorKeyCodes).has(event.keyCode);\n  }\n}\n","import { FocusKeyManager, _IdGenerator } from '@angular/cdk/a11y';\nimport {\n  AfterContentInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { SbbErrorStateMatcher, _ErrorStateTracker } from '@sbb-esta/angular/core';\nimport { SbbFormFieldControl } from '@sbb-esta/angular/form-field';\nimport { merge, Observable, Subject, Subscription } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\n\nimport type { SbbChip, SbbChipEvent } from './chip';\nimport { SbbChipTextControl } from './chip-text-control';\nimport { SBB_CHIP, SBB_CHIP_LIST } from './chip-tokens';\n\n/**\n * A design chips component (named ChipList for its similarity to the List component).\n */\n@Component({\n  selector: 'sbb-chip-list',\n  template: `<ng-content></ng-content>`,\n  exportAs: 'sbbChipList',\n  host: {\n    class: 'sbb-chip-list',\n    '[attr.tabindex]': 'disabled ? null : _tabIndex',\n    '[attr.aria-required]': 'role ? required : null',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[attr.aria-invalid]': 'errorState',\n    '[attr.role]': 'role',\n    '[class.sbb-chip-list-disabled]': 'disabled',\n    '[class.sbb-disabled]': 'disabled',\n    '[class.sbb-chip-list-invalid]': 'errorState',\n    '[class.sbb-chip-list-required]': 'required',\n    '[class.sbb-expanded]': '_chipInput?.autocompleteTrigger?.autocomplete?.isOpen',\n    '[class.sbb-focused]': 'focused',\n    '[class.sbb-input-element]': '_chipInput',\n    '[attr.aria-orientation]': 'ariaOrientation',\n    '(focus)': 'focus()',\n    '(blur)': '_blur()',\n    '(keydown)': '_keydown($event)',\n    '[id]': '_uid',\n  },\n  providers: [\n    { provide: SbbFormFieldControl, useExisting: SbbChipList },\n    { provide: SBB_CHIP_LIST, useExisting: SbbChipList },\n  ],\n  styleUrls: ['./chips.css'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SbbChipList\n  implements\n    SbbFormFieldControl<any>,\n    ControlValueAccessor,\n    AfterContentInit,\n    DoCheck,\n    OnInit,\n    OnDestroy\n{\n  protected _elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  ngControl: NgControl = inject(NgControl, { optional: true, self: true })!;\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  readonly controlType: string = 'sbb-chip-list';\n\n  /**\n   * When a chip is destroyed, we store the index of the destroyed chip until the chips\n   * query list notifies about the update. This is necessary because we cannot determine an\n   * appropriate chip that should receive focus until the array of chips updated completely.\n   */\n  private _lastDestroyedChipIndex: number | null = null;\n\n  /** Subject that emits when the component has been destroyed. */\n  private readonly _destroyed = new Subject<void>();\n\n  /** Subscription to focus changes in the chips. */\n  private _chipFocusSubscription: Subscription | null = null;\n\n  /** Subscription to blur changes in the chips. */\n  private _chipBlurSubscription: Subscription | null = null;\n\n  /** Subscription to remove changes in chips. */\n  private _chipRemoveSubscription: Subscription | null = null;\n\n  private _errorStateTracker: _ErrorStateTracker;\n\n  /** The chip input to add more chips */\n  _chipInput!: SbbChipTextControl;\n\n  /** Uid of the chip list */\n  _uid: string = inject(_IdGenerator).getId('sbb-chip-list-');\n\n  /** Tab index for the chip list. */\n  _tabIndex: number = 0;\n\n  /**\n   * User defined tab index.\n   * When it is not null, use user defined tab index. Otherwise use _tabIndex\n   */\n  _userTabIndex: number | null = null;\n\n  /** The FocusKeyManager which handles focus. */\n  _keyManager!: FocusKeyManager<SbbChip>;\n\n  /** Function when touched */\n  _onTouched: () => void = () => {};\n\n  /** Function when changed */\n  _onChange: (value: any) => void = () => {};\n\n  /** The ARIA role applied to the chip list. */\n  @Input()\n  get role(): string | null {\n    if (this._explicitRole) {\n      return this._explicitRole;\n    }\n\n    return this.empty ? null : 'listbox';\n  }\n  set role(role: string | null) {\n    this._explicitRole = role;\n  }\n  private _explicitRole?: string | null;\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  @Input('aria-describedby') userAriaDescribedBy!: string;\n\n  /** An object used to control when error messages are shown. */\n  @Input()\n  get errorStateMatcher() {\n    return this._errorStateTracker.matcher;\n  }\n  set errorStateMatcher(value: SbbErrorStateMatcher) {\n    this._errorStateTracker.matcher = value;\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get value(): any {\n    return this._value;\n  }\n  set value(value: any) {\n    this.writeValue(value);\n    this._value = value;\n  }\n  protected _value: any;\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  get id(): string {\n    return this._chipInput ? this._chipInput.id : this._uid;\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  @Input({ transform: booleanAttribute }) required: boolean = false;\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get placeholder(): string {\n    return this._chipInput ? this._chipInput.placeholder : this._placeholder;\n  }\n  set placeholder(value: string) {\n    this._placeholder = value;\n    this.stateChanges.next();\n  }\n  protected _placeholder!: string;\n\n  /** Whether any chips or the sbbChipInput inside of this chip-list has focus. */\n  get focused(): boolean {\n    return (this._chipInput && this._chipInput.focused) || this._hasFocusedChip();\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  get empty(): boolean {\n    return (!this._chipInput || this._chipInput.empty) && (!this.chips || this.chips.length === 0);\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this.ngControl ? !!this.ngControl.disabled : this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = value;\n    this._syncChipsState();\n  }\n  protected _disabled: boolean = false;\n\n  /** Orientation of the chip list. */\n  @Input('aria-orientation') ariaOrientation: 'horizontal' | 'vertical' = 'horizontal';\n\n  @Input()\n  set tabIndex(value: number) {\n    this._userTabIndex = value;\n    this._tabIndex = value;\n  }\n\n  /** Combined stream of all of the child chips' focus change events. */\n  get chipFocusChanges(): Observable<SbbChipEvent> {\n    return merge(...this.chips.map((chip) => chip._onFocus));\n  }\n\n  /** Combined stream of all of the child chips' blur change events. */\n  get chipBlurChanges(): Observable<SbbChipEvent> {\n    return merge(...this.chips.map((chip) => chip._onBlur));\n  }\n\n  /** Combined stream of all of the child chips' remove change events. */\n  get chipRemoveChanges(): Observable<SbbChipEvent> {\n    return merge(...this.chips.map((chip) => chip.destroyed));\n  }\n\n  /**\n   * Event that emits whenever the raw value of the chip-list changes. This is here primarily\n   * to facilitate the two-way binding for the `value` input.\n   * @docs-private\n   */\n  @Output() readonly valueChange = new EventEmitter<any>();\n\n  /** The chip components contained within this chip list. */\n  @ContentChildren(SBB_CHIP, {\n    // We need to use `descendants: true`, because Ivy will no longer match\n    // indirect descendants if it's left as false.\n    descendants: true,\n  })\n  chips!: QueryList<SbbChip>;\n\n  /**\n   * Emits whenever the component state changes and should cause the parent\n   * form-field to update. Implemented as part of `SbbFormFieldControl`.\n   * @docs-private\n   */\n  readonly stateChanges = new Subject<void>();\n\n  /** Whether the chip grid is in an error state. */\n  get errorState() {\n    return this._errorStateTracker.errorState;\n  }\n  set errorState(value: boolean) {\n    this._errorStateTracker.errorState = value;\n  }\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const parentForm = inject(NgForm, { optional: true })!;\n    const parentFormGroup = inject(FormGroupDirective, { optional: true })!;\n    const defaultErrorStateMatcher = inject(SbbErrorStateMatcher);\n    const ngControl = this.ngControl;\n\n    if (this.ngControl) {\n      this.ngControl.valueAccessor = this;\n    }\n\n    this._errorStateTracker = new _ErrorStateTracker(\n      defaultErrorStateMatcher,\n      ngControl,\n      parentFormGroup,\n      parentForm,\n      this.stateChanges,\n    );\n  }\n\n  ngAfterContentInit() {\n    this._keyManager = new FocusKeyManager<SbbChip>(this.chips)\n      .withWrap()\n      .withVerticalOrientation()\n      .withHomeAndEnd()\n      .withHorizontalOrientation('ltr');\n\n    this._keyManager.tabOut.subscribe(() => this._allowFocusEscape());\n\n    // When the list changes, re-subscribe\n    this.chips.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\n      if (this.disabled) {\n        // Since this happens after the content has been\n        // checked, we need to defer it to the next tick.\n        Promise.resolve().then(() => {\n          this._syncChipsState();\n        });\n      }\n\n      this._resetChips();\n\n      // Check to see if we need to update our tab index\n      this._updateTabIndex();\n\n      // Check to see if we have a destroyed chip and need to refocus\n      this._updateFocusForDestroyedChips();\n\n      // Reposition autocomplete if present and open because size of list can be changed\n      if (this._chipInput?.autocompleteTrigger?.autocomplete.isOpen) {\n        // We have to delay position update after DOM is rendered\n        Promise.resolve().then(() => {\n          this._chipInput?.autocompleteTrigger?.updatePosition();\n        });\n      }\n\n      this.stateChanges.next();\n    });\n  }\n\n  ngOnInit() {\n    this.stateChanges.next();\n  }\n\n  ngDoCheck() {\n    if (this.ngControl) {\n      // We need to re-evaluate this on every change detection cycle, because there are some\n      // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n      // that whatever logic is in here has to be super lean or we risk destroying the performance.\n      this.updateErrorState();\n\n      if (this.ngControl.disabled !== this._disabled) {\n        this.disabled = !!this.ngControl.disabled;\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._keyManager?.destroy();\n    this._destroyed.next();\n    this._destroyed.complete();\n    this.stateChanges.complete();\n    this._dropSubscriptions();\n  }\n\n  /** Associates an HTML input element with this chip list. */\n  registerInput(inputElement: SbbChipTextControl): void {\n    this._chipInput = inputElement;\n\n    // We use this attribute to match the chip list to its input in test harnesses.\n    // Set the attribute directly here to avoid \"changed after checked\" errors.\n    this._elementRef.nativeElement.setAttribute('data-sbb-chip-input', inputElement.id);\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  setDescribedByIds(ids: string[]) {\n    if (ids.length) {\n      this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n    } else {\n      this._elementRef.nativeElement.removeAttribute('aria-describedby');\n    }\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  writeValue(value: any): void {}\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnChange(fn: (value: any) => void): void {\n    this._onChange = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    this.stateChanges.next();\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  onContainerClick(event: MouseEvent) {\n    if (!this._originatesFromChip(event)) {\n      this.focus();\n    }\n  }\n\n  /**\n   * Focuses the first non-disabled chip in this chip list, or the associated input when there\n   * are no eligible chips.\n   */\n  focus(options?: FocusOptions): void {\n    if (this.disabled) {\n      return;\n    }\n\n    // Focus on first element if there's no chipInput inside chip-list\n    if (this._chipInput && this._chipInput.focused) {\n      // do nothing\n    } else if (this.chips.length > 0) {\n      this._keyManager.setFirstItemActive();\n      this.stateChanges.next();\n    } else {\n      this._focusInput(options);\n      this.stateChanges.next();\n    }\n  }\n\n  /** Attempt to focus an input if we have one. */\n  _focusInput(options?: FocusOptions) {\n    if (this._chipInput) {\n      this._chipInput.focus(options);\n    }\n  }\n\n  /**\n   * Pass events to the keyboard manager. Available here for tests.\n   */\n  _keydown(event: KeyboardEvent) {\n    const target = event.target as HTMLElement;\n\n    if (target && target.classList.contains('sbb-chip')) {\n      this._keyManager.onKeydown(event);\n      this.stateChanges.next();\n    }\n  }\n\n  /**\n   * Check the tab index as you should not be allowed to focus an empty list.\n   */\n  protected _updateTabIndex(): void {\n    // If we have 0 chips, we should not allow keyboard focus\n    this._tabIndex = this._userTabIndex || (this.chips.length === 0 ? -1 : 0);\n  }\n\n  /**\n   * If the amount of chips changed, we need to update the\n   * key manager state and focus the next closest chip.\n   */\n  protected _updateFocusForDestroyedChips() {\n    // Move focus to the closest chip. If no other chips remain, focus the chip-list itself.\n    if (this._lastDestroyedChipIndex != null) {\n      if (this.chips.length) {\n        const newChipIndex = Math.min(this._lastDestroyedChipIndex, this.chips.length - 1);\n        this._keyManager.setActiveItem(newChipIndex);\n      } else {\n        this.focus();\n      }\n    }\n\n    this._lastDestroyedChipIndex = null;\n  }\n\n  /**\n   * Utility to ensure all indexes are valid.\n   *\n   * @param index The index to be checked.\n   * @returns True if the index is valid for our list of chips.\n   */\n  private _isValidIndex(index: number): boolean {\n    return index >= 0 && index < this.chips.length;\n  }\n\n  /** Refreshes the error state of the chip grid. */\n  updateErrorState() {\n    this._errorStateTracker.updateErrorState();\n  }\n\n  /** When blurred, mark the field as touched when focus moved outside the chip list. */\n  _blur() {\n    if (!this._hasFocusedChip()) {\n      this._keyManager.setActiveItem(-1);\n    }\n\n    if (!this.disabled) {\n      if (this._chipInput) {\n        // If there's a chip input, we should check whether the focus moved to chip input.\n        // If the focus is not moved to chip input, mark the field as touched. If the focus moved\n        // to chip input, do nothing.\n        // Timeout is needed to wait for the focus() event trigger on chip input.\n        setTimeout(() => {\n          if (!this.focused) {\n            this._markAsTouched();\n          }\n        });\n      } else {\n        // If there's no chip input, then mark the field as touched.\n        this._markAsTouched();\n      }\n    }\n  }\n\n  /** Mark the field as touched */\n  _markAsTouched() {\n    this._onTouched();\n    this._changeDetectorRef.markForCheck();\n    this.stateChanges.next();\n  }\n\n  /**\n   * Removes the `tabindex` from the chip list and resets it back afterwards, allowing the\n   * user to tab out of it. This prevents the list from capturing focus and redirecting\n   * it back to the first chip, creating a focus trap, if it user tries to tab away.\n   */\n  _allowFocusEscape() {\n    if (this._tabIndex !== -1) {\n      this._tabIndex = -1;\n      this._changeDetectorRef.markForCheck();\n\n      setTimeout(() => {\n        this._tabIndex = this._userTabIndex || 0;\n        this._changeDetectorRef.markForCheck();\n      });\n    }\n  }\n\n  private _resetChips() {\n    this._dropSubscriptions();\n    this._listenToChipsFocus();\n    this._listenToChipsRemoved();\n  }\n\n  private _dropSubscriptions() {\n    if (this._chipFocusSubscription) {\n      this._chipFocusSubscription.unsubscribe();\n      this._chipFocusSubscription = null;\n    }\n\n    if (this._chipBlurSubscription) {\n      this._chipBlurSubscription.unsubscribe();\n      this._chipBlurSubscription = null;\n    }\n\n    if (this._chipRemoveSubscription) {\n      this._chipRemoveSubscription.unsubscribe();\n      this._chipRemoveSubscription = null;\n    }\n  }\n\n  /** Listens to user-generated selection events on each chip. */\n  private _listenToChipsFocus(): void {\n    this._chipFocusSubscription = this.chipFocusChanges.subscribe((event) => {\n      const chipIndex: number = this.chips.toArray().indexOf(event.chip);\n\n      if (this._isValidIndex(chipIndex)) {\n        this._keyManager.updateActiveItem(chipIndex);\n      }\n      this.stateChanges.next();\n    });\n\n    this._chipBlurSubscription = this.chipBlurChanges.subscribe(() => {\n      this._blur();\n      this.stateChanges.next();\n    });\n  }\n\n  private _listenToChipsRemoved(): void {\n    this._chipRemoveSubscription = this.chipRemoveChanges.subscribe((event) => {\n      const chip = event.chip;\n      const chipIndex = this.chips.toArray().indexOf(event.chip);\n\n      // In case the chip that will be removed is currently focused, we temporarily store\n      // the index in order to be able to determine an appropriate sibling chip that will\n      // receive focus.\n      if (this._isValidIndex(chipIndex) && chip._hasFocus) {\n        this._lastDestroyedChipIndex = chipIndex;\n      }\n    });\n  }\n\n  /** Checks whether an event comes from inside a chip element. */\n  private _originatesFromChip(event: Event): boolean {\n    let currentElement = event.target as HTMLElement | null;\n\n    while (currentElement && currentElement !== this._elementRef.nativeElement) {\n      if (currentElement.classList.contains('sbb-chip')) {\n        return true;\n      }\n\n      currentElement = currentElement.parentElement;\n    }\n\n    return false;\n  }\n\n  /** Checks whether any of the chips is focused. */\n  private _hasFocusedChip() {\n    return this.chips && this.chips.some((chip) => chip._hasFocus);\n  }\n\n  /** Syncs the list's state with the individual chips. */\n  private _syncChipsState() {\n    if (this.chips) {\n      this.chips.forEach((chip) => {\n        chip._chipListDisabled = this._disabled;\n        chip._changeDetectorRef.markForCheck();\n      });\n    }\n  }\n}\n","import { ENTER } from '@angular/cdk/keycodes';\nimport { NgModule } from '@angular/core';\nimport { SbbCommonModule } from '@sbb-esta/angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\n\nimport { SbbChip, SbbChipRemove, SbbChipTrailingIcon } from './chip';\nimport { SbbChipsDefaultOptions, SBB_CHIPS_DEFAULT_OPTIONS } from './chip-default-options';\nimport { SbbChipInput } from './chip-input';\nimport { SbbChipList } from './chip-list';\n\nconst CHIP_DECLARATIONS = [SbbChipList, SbbChip, SbbChipInput, SbbChipRemove, SbbChipTrailingIcon];\n\n@NgModule({\n  imports: [SbbCommonModule, SbbIconModule, ...CHIP_DECLARATIONS],\n  exports: CHIP_DECLARATIONS,\n  providers: [\n    {\n      provide: SBB_CHIPS_DEFAULT_OPTIONS,\n      useValue: {\n        separatorKeyCodes: [ENTER],\n      } as SbbChipsDefaultOptions,\n    },\n  ],\n})\nexport class SbbChipsModule {}\n"],"names":[],"mappings":"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"}