{"version":3,"file":"chips.js","sources":["../../../src/material/chips/chips-module.ts","../../../src/material/chips/chip-input.ts","../../../src/material/chips/chip-list.ts","../../../src/material/chips/chip-default-options.ts","../../../src/material/chips/chip.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ENTER} from '@angular/cdk/keycodes';\nimport {NgModule} from '@angular/core';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {MatChip, MatChipAvatar, MatChipRemove, MatChipTrailingIcon} from './chip';\nimport {MAT_CHIPS_DEFAULT_OPTIONS, MatChipsDefaultOptions} from './chip-default-options';\nimport {MatChipInput} from './chip-input';\nimport {MatChipList} from './chip-list';\n\nconst CHIP_DECLARATIONS = [\n  MatChipList,\n  MatChip,\n  MatChipInput,\n  MatChipRemove,\n  MatChipAvatar,\n  MatChipTrailingIcon,\n];\n\n@NgModule({\n  exports: CHIP_DECLARATIONS,\n  declarations: CHIP_DECLARATIONS,\n  providers: [\n    ErrorStateMatcher,\n    {\n      provide: MAT_CHIPS_DEFAULT_OPTIONS,\n      useValue: {\n        separatorKeyCodes: [ENTER]\n      } as MatChipsDefaultOptions\n    }\n  ]\n})\nexport class MatChipsModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Directive, ElementRef, EventEmitter, Inject, Input, OnChanges, Output} from '@angular/core';\nimport {hasModifierKey, TAB} from '@angular/cdk/keycodes';\nimport {MAT_CHIPS_DEFAULT_OPTIONS, MatChipsDefaultOptions} from './chip-default-options';\nimport {MatChipList} from './chip-list';\nimport {MatChipTextControl} from './chip-text-control';\n\n\n/** Represents an input event on a `matChipInput`. */\nexport interface MatChipInputEvent {\n  /** The native `<input>` element that the event is being fired for. */\n  input: HTMLInputElement;\n\n  /** The value of the input. */\n  value: string;\n}\n\n// Increasing integer for generating unique ids.\nlet nextUniqueId = 0;\n\n/**\n * Directive that adds chip-specific behaviors to an input element inside `<mat-form-field>`.\n * May be placed inside or outside of an `<mat-chip-list>`.\n */\n@Directive({\n  selector: 'input[matChipInputFor]',\n  exportAs: 'matChipInput, matChipInputFor',\n  host: {\n    'class': 'mat-chip-input mat-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  }\n})\nexport class MatChipInput implements MatChipTextControl, OnChanges {\n  /** Whether the control is focused. */\n  focused: boolean = false;\n  _chipList: MatChipList;\n\n  /** Register input for chip list */\n  @Input('matChipInputFor')\n  set chipList(value: MatChipList) {\n    if (value) {\n      this._chipList = value;\n      this._chipList.registerInput(this);\n    }\n  }\n\n  /**\n   * Whether or not the chipEnd event will be emitted when the input is blurred.\n   */\n  @Input('matChipInputAddOnBlur')\n  get addOnBlur(): boolean { return this._addOnBlur; }\n  set addOnBlur(value: boolean) { this._addOnBlur = coerceBooleanProperty(value); }\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('matChipInputSeparatorKeyCodes')\n  separatorKeyCodes: number[] | Set<number> = this._defaultOptions.separatorKeyCodes;\n\n  /** Emitted when a chip is to be added. */\n  @Output('matChipInputTokenEnd')\n  chipEnd: EventEmitter<MatChipInputEvent> = new EventEmitter<MatChipInputEvent>();\n\n  /** The input's placeholder text. */\n  @Input() placeholder: string = '';\n\n  /** Unique id for the input. */\n  @Input() id: string = `mat-chip-list-input-${nextUniqueId++}`;\n\n  /** Whether the input is disabled. */\n  @Input()\n  get disabled(): boolean { return this._disabled || (this._chipList && this._chipList.disabled); }\n  set disabled(value: boolean) { this._disabled = coerceBooleanProperty(value); }\n  private _disabled: boolean = false;\n\n  /** Whether the input is empty. */\n  get empty(): boolean { return !this._inputElement.value; }\n\n  /** The native input element to which this directive is attached. */\n  protected _inputElement: HTMLInputElement;\n\n  constructor(\n    protected _elementRef: ElementRef<HTMLInputElement>,\n    @Inject(MAT_CHIPS_DEFAULT_OPTIONS) private _defaultOptions: MatChipsDefaultOptions) {\n    this._inputElement = this._elementRef.nativeElement as HTMLInputElement;\n  }\n\n  ngOnChanges() {\n    this._chipList.stateChanges.next();\n  }\n\n  /** Utility method to make host definition/tests more clear. */\n  _keydown(event?: KeyboardEvent) {\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 && event.keyCode === TAB && !hasModifierKey(event, 'shiftKey')) {\n      this._chipList._allowFocusEscape();\n    }\n\n    this._emitChipEnd(event);\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    if (!event || this._isSeparatorKey(event)) {\n      this.chipEnd.emit({ input: this._inputElement, value: this._inputElement.value });\n\n      if (event) {\n        event.preventDefault();\n      }\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(): void {\n    this._inputElement.focus();\n  }\n\n  /** Checks whether a keycode is one of the configured separators. */\n  private _isSeparatorKey(event: KeyboardEvent) {\n    if (hasModifierKey(event)) {\n      return false;\n    }\n\n    const separators = this.separatorKeyCodes;\n    const keyCode = event.keyCode;\n    return Array.isArray(separators) ? separators.indexOf(keyCode) > -1 : separators.has(keyCode);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FocusKeyManager} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {BACKSPACE, END, HOME} from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  QueryList,\n  Self,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {\n  CanUpdateErrorState,\n  CanUpdateErrorStateCtor,\n  ErrorStateMatcher,\n  mixinErrorState,\n} from '@angular/material/core';\nimport {MatFormFieldControl} from '@angular/material/form-field';\nimport {merge, Observable, Subject, Subscription} from 'rxjs';\nimport {startWith, takeUntil} from 'rxjs/operators';\nimport {MatChip, MatChipEvent, MatChipSelectionChange} from './chip';\nimport {MatChipTextControl} from './chip-text-control';\n\n\n// Boilerplate for applying mixins to MatChipList.\n/** @docs-private */\nclass MatChipListBase {\n  constructor(public _defaultErrorStateMatcher: ErrorStateMatcher,\n              public _parentForm: NgForm,\n              public _parentFormGroup: FormGroupDirective,\n              /** @docs-private */\n              public ngControl: NgControl) {}\n}\nconst _MatChipListMixinBase: CanUpdateErrorStateCtor & typeof MatChipListBase =\n    mixinErrorState(MatChipListBase);\n\n\n// Increasing integer for generating unique ids for chip-list components.\nlet nextUniqueId = 0;\n\n/** Change event object that is emitted when the chip list value has changed. */\nexport class MatChipListChange {\n  constructor(\n    /** Chip list that emitted the event. */\n    public source: MatChipList,\n    /** Value of the chip list when the event was emitted. */\n    public value: any) { }\n}\n\n\n/**\n * A material design chips component (named ChipList for its similarity to the List component).\n */\n@Component({\n  moduleId: module.id,\n  selector: 'mat-chip-list',\n  template: `<div class=\"mat-chip-list-wrapper\"><ng-content></ng-content></div>`,\n  exportAs: 'matChipList',\n  host: {\n    '[attr.tabindex]': 'disabled ? null : _tabIndex',\n    '[attr.aria-describedby]': '_ariaDescribedby || null',\n    '[attr.aria-required]': 'required.toString()',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[attr.aria-invalid]': 'errorState',\n    '[attr.aria-multiselectable]': 'multiple',\n    '[attr.role]': 'role',\n    '[class.mat-chip-list-disabled]': 'disabled',\n    '[class.mat-chip-list-invalid]': 'errorState',\n    '[class.mat-chip-list-required]': 'required',\n    '[attr.aria-orientation]': 'ariaOrientation',\n    'class': 'mat-chip-list',\n    '(focus)': 'focus()',\n    '(blur)': '_blur()',\n    '(keydown)': '_keydown($event)',\n    '[id]': '_uid',\n  },\n  providers: [{provide: MatFormFieldControl, useExisting: MatChipList}],\n  styleUrls: ['chips.css'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatChipList extends _MatChipListMixinBase implements MatFormFieldControl<any>,\n  ControlValueAccessor, AfterContentInit, DoCheck, OnInit, OnDestroy, CanUpdateErrorState {\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  readonly controlType: string = 'mat-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 _destroyed = new Subject<void>();\n\n  /** Subscription to focus changes in the chips. */\n  private _chipFocusSubscription: Subscription | null;\n\n  /** Subscription to blur changes in the chips. */\n  private _chipBlurSubscription: Subscription | null;\n\n  /** Subscription to selection changes in chips. */\n  private _chipSelectionSubscription: Subscription | null;\n\n  /** Subscription to remove changes in chips. */\n  private _chipRemoveSubscription: Subscription | null;\n\n  /** The chip input to add more chips */\n  protected _chipInput: MatChipTextControl;\n\n  /** Uid of the chip list */\n  _uid: string = `mat-chip-list-${nextUniqueId++}`;\n\n  /** The aria-describedby attribute on the chip list for improved a11y. */\n  _ariaDescribedby: string;\n\n  /** Tab index for the chip list. */\n  _tabIndex = 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<MatChip>;\n\n  /** Function when touched */\n  _onTouched = () => {};\n\n  /** Function when changed */\n  _onChange: (value: any) => void = () => {};\n\n  _selectionModel: SelectionModel<MatChip>;\n\n  /** The array of selected chips inside chip list. */\n  get selected(): MatChip[] | MatChip {\n    return this.multiple ? this._selectionModel.selected : this._selectionModel.selected[0];\n  }\n\n  /** The ARIA role applied to the chip list. */\n  get role(): string | null { return this.empty ? null : 'listbox'; }\n\n  /** An object used to control when error messages are shown. */\n  @Input() errorStateMatcher: ErrorStateMatcher;\n\n  /** Whether the user should be allowed to select multiple chips. */\n  @Input()\n  get multiple(): boolean { return this._multiple; }\n  set multiple(value: boolean) {\n    this._multiple = coerceBooleanProperty(value);\n    this._syncChipsState();\n  }\n  private _multiple: boolean = false;\n\n  /**\n   * A function to compare the option values with the selected values. The first argument\n   * is a value from an option. The second is a value from the selection. A boolean\n   * should be returned.\n   */\n  @Input()\n  get compareWith(): (o1: any, o2: any) => boolean { return this._compareWith; }\n  set compareWith(fn: (o1: any, o2: any) => boolean) {\n    this._compareWith = fn;\n    if (this._selectionModel) {\n      // A different comparator means the selection could change.\n      this._initializeSelection();\n    }\n  }\n  private _compareWith = (o1: any, o2: any) => o1 === o2;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get value(): any { return this._value; }\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 MatFormFieldControl.\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 MatFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get required(): boolean { return this._required; }\n  set required(value: boolean) {\n    this._required = coerceBooleanProperty(value);\n    this.stateChanges.next();\n  }\n  protected _required: boolean = false;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\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 matChipInput 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 MatFormFieldControl.\n   * @docs-private\n   */\n  get empty(): boolean {\n    return (!this._chipInput || this._chipInput.empty) && this.chips.length === 0;\n  }\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  get shouldLabelFloat(): boolean { return !this.empty || this.focused; }\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get disabled(): boolean { return this.ngControl ? !!this.ngControl.disabled : this._disabled; }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(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  /**\n   * Whether or not this chip list is selectable. When a chip list is not selectable,\n   * the selected states for all the chips inside the chip list are always ignored.\n   */\n  @Input()\n  get selectable(): boolean { return this._selectable; }\n  set selectable(value: boolean) {\n    this._selectable = coerceBooleanProperty(value);\n\n    if (this.chips) {\n      this.chips.forEach(chip => chip.chipListSelectable = this._selectable);\n    }\n  }\n  protected _selectable: boolean = true;\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' selection change events. */\n  get chipSelectionChanges(): Observable<MatChipSelectionChange> {\n    return merge(...this.chips.map(chip => chip.selectionChange));\n  }\n\n  /** Combined stream of all of the child chips' focus change events. */\n  get chipFocusChanges(): Observable<MatChipEvent> {\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<MatChipEvent> {\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<MatChipEvent> {\n    return merge(...this.chips.map(chip => chip.destroyed));\n  }\n\n  /** Event emitted when the selected chip list value has been changed by the user. */\n  @Output() readonly change: EventEmitter<MatChipListChange> =\n      new EventEmitter<MatChipListChange>();\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: EventEmitter<any> = new EventEmitter<any>();\n\n  /** The chip components contained within this chip list. */\n  @ContentChildren(MatChip, {\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  }) chips: QueryList<MatChip>;\n\n  constructor(protected _elementRef: ElementRef<HTMLElement>,\n              private _changeDetectorRef: ChangeDetectorRef,\n              @Optional() private _dir: Directionality,\n              @Optional() _parentForm: NgForm,\n              @Optional() _parentFormGroup: FormGroupDirective,\n              _defaultErrorStateMatcher: ErrorStateMatcher,\n              /** @docs-private */\n              @Optional() @Self() public ngControl: NgControl) {\n    super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n    if (this.ngControl) {\n      this.ngControl.valueAccessor = this;\n    }\n  }\n\n  ngAfterContentInit() {\n    this._keyManager = new FocusKeyManager<MatChip>(this.chips)\n      .withWrap()\n      .withVerticalOrientation()\n      .withHorizontalOrientation(this._dir ? this._dir.value : 'ltr');\n\n    if (this._dir) {\n      this._dir.change\n        .pipe(takeUntil(this._destroyed))\n        .subscribe(dir => this._keyManager.withHorizontalOrientation(dir));\n    }\n\n    this._keyManager.tabOut.pipe(takeUntil(this._destroyed)).subscribe(() => {\n      this._allowFocusEscape();\n    });\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      // Reset chips selected/deselected status\n      this._initializeSelection();\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      this.stateChanges.next();\n    });\n  }\n\n  ngOnInit() {\n    this._selectionModel = new SelectionModel<MatChip>(this.multiple, undefined, false);\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  }\n\n  ngOnDestroy() {\n    this._destroyed.next();\n    this._destroyed.complete();\n    this.stateChanges.complete();\n\n    this._dropSubscriptions();\n  }\n\n\n  /** Associates an HTML input element with this chip list. */\n  registerInput(inputElement: MatChipTextControl): void {\n    this._chipInput = inputElement;\n  }\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  setDescribedByIds(ids: string[]) { this._ariaDescribedby = ids.join(' '); }\n\n  // Implemented as part of ControlValueAccessor.\n  writeValue(value: any): void {\n    if (this.chips) {\n      this._setSelectionByValue(value, false);\n    }\n  }\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 MatFormFieldControl.\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(): void {\n    if (this.disabled) {\n      return;\n    }\n\n    // TODO: ARIA says this should focus the first `selected` chip if any are selected.\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();\n      this.stateChanges.next();\n    }\n  }\n\n  /** Attempt to focus an input if we have one. */\n  _focusInput() {\n    if (this._chipInput) {\n      this._chipInput.focus();\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 they are on an empty input and hit backspace, focus the last chip\n    if (event.keyCode === BACKSPACE && this._isInputEmpty(target)) {\n      this._keyManager.setLastItemActive();\n      event.preventDefault();\n    } else if (target && target.classList.contains('mat-chip')) {\n      if (event.keyCode === HOME) {\n        this._keyManager.setFirstItemActive();\n        event.preventDefault();\n      } else if (event.keyCode === END) {\n        this._keyManager.setLastItemActive();\n        event.preventDefault();\n      } else {\n        this._keyManager.onKeydown(event);\n      }\n\n      this.stateChanges.next();\n    }\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  private _isInputEmpty(element: HTMLElement): boolean {\n    if (element && element.nodeName.toLowerCase() === 'input') {\n      let input = element as HTMLInputElement;\n      return !input.value;\n    }\n\n    return false;\n  }\n\n  _setSelectionByValue(value: any, isUserInput: boolean = true) {\n    this._clearSelection();\n    this.chips.forEach(chip => chip.deselect());\n\n    if (Array.isArray(value)) {\n      value.forEach(currentValue => this._selectValue(currentValue, isUserInput));\n      this._sortValues();\n    } else {\n      const correspondingChip = this._selectValue(value, isUserInput);\n\n      // Shift focus to the active item. Note that we shouldn't do this in multiple\n      // mode, because we don't know what chip the user interacted with last.\n      if (correspondingChip) {\n        if (isUserInput) {\n          this._keyManager.setActiveItem(correspondingChip);\n        }\n      }\n    }\n  }\n\n  /**\n   * Finds and selects the chip based on its value.\n   * @returns Chip that has the corresponding value.\n   */\n  private _selectValue(value: any, isUserInput: boolean = true): MatChip | undefined {\n\n    const correspondingChip = this.chips.find(chip => {\n      return chip.value != null && this._compareWith(chip.value,  value);\n    });\n\n    if (correspondingChip) {\n      isUserInput ? correspondingChip.selectViaInteraction() : correspondingChip.select();\n      this._selectionModel.select(correspondingChip);\n    }\n\n    return correspondingChip;\n  }\n\n  private _initializeSelection(): void {\n    // Defer setting the value in order to avoid the \"Expression\n    // has changed after it was checked\" errors from Angular.\n    Promise.resolve().then(() => {\n      if (this.ngControl || this._value) {\n        this._setSelectionByValue(this.ngControl ? this.ngControl.value : this._value, false);\n        this.stateChanges.next();\n      }\n    });\n  }\n\n  /**\n   * Deselects every chip in the list.\n   * @param skip Chip that should not be deselected.\n   */\n  private _clearSelection(skip?: MatChip): void {\n    this._selectionModel.clear();\n    this.chips.forEach(chip => {\n      if (chip !== skip) {\n        chip.deselect();\n      }\n    });\n    this.stateChanges.next();\n  }\n\n  /**\n   * Sorts the model values, ensuring that they keep the same\n   * order that they have in the panel.\n   */\n  private _sortValues(): void {\n    if (this._multiple) {\n      this._selectionModel.clear();\n\n      this.chips.forEach(chip => {\n        if (chip.selected) {\n          this._selectionModel.select(chip);\n        }\n      });\n      this.stateChanges.next();\n    }\n  }\n\n  /** Emits change event to set the model value. */\n  private _propagateChanges(fallbackValue?: any): void {\n    let valueToEmit: any = null;\n\n    if (Array.isArray(this.selected)) {\n      valueToEmit = this.selected.map(chip => chip.value);\n    } else {\n      valueToEmit = this.selected ? this.selected.value : fallbackValue;\n    }\n    this._value = valueToEmit;\n    this.change.emit(new MatChipListChange(this, valueToEmit));\n    this.valueChange.emit(valueToEmit);\n    this._onChange(valueToEmit);\n    this._changeDetectorRef.markForCheck();\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\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._listenToChipsSelection();\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._chipSelectionSubscription) {\n      this._chipSelectionSubscription.unsubscribe();\n      this._chipSelectionSubscription = 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 _listenToChipsSelection(): void {\n    this._chipSelectionSubscription = this.chipSelectionChanges.subscribe(event => {\n      event.source.selected\n        ? this._selectionModel.select(event.source)\n        : this._selectionModel.deselect(event.source);\n\n      // For single selection chip list, make sure the deselected value is unselected.\n      if (!this.multiple) {\n        this.chips.forEach(chip => {\n          if (!this._selectionModel.isSelected(chip) && chip.selected) {\n            chip.deselect();\n          }\n        });\n      }\n\n      if (event.isUserInput) {\n        this._propagateChanges();\n      }\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      let chipIndex: number = this.chips.toArray().indexOf(event.chip);\n\n      if (this._isValidIndex(chipIndex)) {\n        this._keyManager.updateActiveItemIndex(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('mat-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.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.disabled = this._disabled;\n        chip._chipListMultiple = this.multiple;\n      });\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/** Default options, for the chips module, that can be overridden. */\nexport interface MatChipsDefaultOptions {\n  /** The list of key codes that will trigger a chipEnd event. */\n  separatorKeyCodes: number[] | Set<number>;\n}\n\n/** Injection token to be used to override the default options for the chips module. */\nexport const MAT_CHIPS_DEFAULT_OPTIONS =\n    new InjectionToken<MatChipsDefaultOptions>('mat-chips-default-options');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FocusableOption} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {BACKSPACE, DELETE, SPACE} from '@angular/cdk/keycodes';\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  ContentChild,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  Optional,\n  Output,\n} from '@angular/core';\nimport {\n  CanColor,\n  CanColorCtor,\n  CanDisable,\n  CanDisableCtor,\n  CanDisableRipple,\n  CanDisableRippleCtor,\n  MAT_RIPPLE_GLOBAL_OPTIONS,\n  mixinColor,\n  mixinDisabled,\n  mixinDisableRipple,\n  RippleConfig,\n  RippleGlobalOptions,\n  RippleRenderer,\n  RippleTarget,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {take} from 'rxjs/operators';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/** Represents an event fired on an individual `mat-chip`. */\nexport interface MatChipEvent {\n  /** The chip the event was fired on. */\n  chip: MatChip;\n}\n\n/** Event object emitted by MatChip when selected or deselected. */\nexport class MatChipSelectionChange {\n  constructor(\n    /** Reference to the chip that emitted the event. */\n    public source: MatChip,\n    /** Whether the chip that emitted the event is selected. */\n    public selected: boolean,\n    /** Whether the selection change was a result of a user interaction. */\n    public isUserInput = false) { }\n}\n\n\n// Boilerplate for applying mixins to MatChip.\n/** @docs-private */\nclass MatChipBase {\n  constructor(public _elementRef: ElementRef) {}\n}\n\nconst _MatChipMixinBase: CanColorCtor & CanDisableRippleCtor & CanDisableCtor & typeof MatChipBase =\n    mixinColor(mixinDisableRipple(mixinDisabled(MatChipBase)), 'primary');\n\n/**\n * Dummy directive to add CSS class to chip avatar.\n * @docs-private\n */\n@Directive({\n  selector: 'mat-chip-avatar, [matChipAvatar]',\n  host: {'class': 'mat-chip-avatar'}\n})\nexport class MatChipAvatar {}\n\n/**\n * Dummy directive to add CSS class to chip trailing icon.\n * @docs-private\n */\n@Directive({\n  selector: 'mat-chip-trailing-icon, [matChipTrailingIcon]',\n  host: {'class': 'mat-chip-trailing-icon'}\n})\nexport class MatChipTrailingIcon {}\n\n/**\n * Material design styled Chip component. Used inside the MatChipList component.\n */\n@Directive({\n  selector: `mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]`,\n  inputs: ['color', 'disabled', 'disableRipple'],\n  exportAs: 'matChip',\n  host: {\n    'class': 'mat-chip',\n    '[attr.tabindex]': 'disabled ? null : -1',\n    'role': 'option',\n    '[class.mat-chip-selected]': 'selected',\n    '[class.mat-chip-with-avatar]': 'avatar',\n    '[class.mat-chip-with-trailing-icon]': 'trailingIcon || removeIcon',\n    '[class.mat-chip-disabled]': 'disabled',\n    '[class._mat-animation-noopable]': '_animationsDisabled',\n    '[attr.disabled]': 'disabled || null',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[attr.aria-selected]': 'ariaSelected',\n    '(click)': '_handleClick($event)',\n    '(keydown)': '_handleKeydown($event)',\n    '(focus)': 'focus()',\n    '(blur)': '_blur()',\n  },\n})\nexport class MatChip extends _MatChipMixinBase implements FocusableOption, OnDestroy, CanColor,\n    CanDisable, CanDisableRipple, RippleTarget {\n\n  /** Reference to the RippleRenderer for the chip. */\n  private _chipRipple: RippleRenderer;\n\n  /**\n   * Ripple configuration for ripples that are launched on pointer down. The ripple config\n   * is set to the global ripple options since we don't have any configurable options for\n   * the chip ripples.\n   * @docs-private\n   */\n  rippleConfig: RippleConfig & RippleGlobalOptions;\n\n  /**\n   * Whether ripples are disabled on interaction\n   * @docs-private\n   */\n  get rippleDisabled(): boolean {\n    return this.disabled || this.disableRipple || !!this.rippleConfig.disabled;\n  }\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 is selectable */\n  chipListSelectable: boolean = true;\n\n  /** Whether the chip list is in multi-selection mode. */\n  _chipListMultiple: boolean = false;\n\n  /** The chip avatar */\n  @ContentChild(MatChipAvatar, {static: false}) avatar: MatChipAvatar;\n\n  /** The chip's trailing icon. */\n  @ContentChild(MatChipTrailingIcon, {static: false}) trailingIcon: MatChipTrailingIcon;\n\n  /** The chip's remove toggler. */\n  @ContentChild(forwardRef(() => MatChipRemove), {static: false}) removeIcon: MatChipRemove;\n\n  /** Whether the chip is selected. */\n  @Input()\n  get selected(): boolean { return this._selected; }\n  set selected(value: boolean) {\n    const coercedValue = coerceBooleanProperty(value);\n\n    if (coercedValue !== this._selected) {\n      this._selected = coercedValue;\n      this._dispatchSelectionChange();\n    }\n  }\n  protected _selected: boolean = false;\n\n  /** The value of the chip. Defaults to the content inside `<mat-chip>` tags. */\n  @Input()\n  get value(): any {\n    return this._value != undefined\n      ? this._value\n      : this._elementRef.nativeElement.textContent;\n  }\n  set value(value: any) { this._value = value; }\n  protected _value: any;\n\n  /**\n   * Whether or not the chip is selectable. When a chip is not selectable,\n   * changes to its selected state are always ignored. By default a chip is\n   * selectable, and it becomes non-selectable if its parent chip list is\n   * not selectable.\n   */\n  @Input()\n  get selectable(): boolean { return this._selectable && this.chipListSelectable; }\n  set selectable(value: boolean) {\n    this._selectable = coerceBooleanProperty(value);\n  }\n  protected _selectable: boolean = true;\n\n  /**\n   * Determines whether or not the chip displays the remove styling and emits (removed) events.\n   */\n  @Input()\n  get removable(): boolean { return this._removable; }\n  set removable(value: boolean) {\n    this._removable = coerceBooleanProperty(value);\n  }\n  protected _removable: boolean = true;\n\n  /** Emits when the chip is focused. */\n  readonly _onFocus = new Subject<MatChipEvent>();\n\n  /** Emits when the chip is blured. */\n  readonly _onBlur = new Subject<MatChipEvent>();\n\n  /** Emitted when the chip is selected or deselected. */\n  @Output() readonly selectionChange: EventEmitter<MatChipSelectionChange> =\n      new EventEmitter<MatChipSelectionChange>();\n\n  /** Emitted when the chip is destroyed. */\n  @Output() readonly destroyed: EventEmitter<MatChipEvent> = new EventEmitter<MatChipEvent>();\n\n  /** Emitted when a chip is to be removed. */\n  @Output() readonly removed: EventEmitter<MatChipEvent> = new EventEmitter<MatChipEvent>();\n\n  /** The ARIA selected applied to the chip. */\n  get ariaSelected(): string | null {\n    // Remove the `aria-selected` when the chip is deselected in single-selection mode, because\n    // it adds noise to NVDA users where \"not selected\" will be read out for each chip.\n    return this.selectable && (this._chipListMultiple || this.selected) ?\n        this.selected.toString() : null;\n  }\n\n  constructor(public _elementRef: ElementRef<HTMLElement>,\n              private _ngZone: NgZone,\n              platform: Platform,\n              @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS)\n              globalRippleOptions: RippleGlobalOptions | null,\n              // @breaking-change 8.0.0 `animationMode` parameter to become required.\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode?: string) {\n    super(_elementRef);\n\n    this._addHostClassName();\n\n    this._chipRipple = new RippleRenderer(this, _ngZone, _elementRef, platform);\n    this._chipRipple.setupTriggerEvents(_elementRef.nativeElement);\n    this.rippleConfig = globalRippleOptions || {};\n    this._animationsDisabled = animationMode === 'NoopAnimations';\n  }\n\n  _addHostClassName() {\n    const basicChipAttrName = 'mat-basic-chip';\n    const element = this._elementRef.nativeElement as HTMLElement;\n\n    if (element.hasAttribute(basicChipAttrName) ||\n        element.tagName.toLowerCase() === basicChipAttrName) {\n      element.classList.add(basicChipAttrName);\n      return;\n    } else {\n      element.classList.add('mat-standard-chip');\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroyed.emit({chip: this});\n    this._chipRipple._removeTriggerEvents();\n  }\n\n  /** Selects the chip. */\n  select(): void {\n    if (!this._selected) {\n      this._selected = true;\n      this._dispatchSelectionChange();\n    }\n  }\n\n  /** Deselects the chip. */\n  deselect(): void {\n    if (this._selected) {\n      this._selected = false;\n      this._dispatchSelectionChange();\n    }\n  }\n\n  /** Select this chip and emit selected event */\n  selectViaInteraction(): void {\n    if (!this._selected) {\n      this._selected = true;\n      this._dispatchSelectionChange(true);\n    }\n  }\n\n  /** Toggles the current selected state of this chip. */\n  toggleSelected(isUserInput: boolean = false): boolean {\n    this._selected = !this.selected;\n    this._dispatchSelectionChange(isUserInput);\n    return this.selected;\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 MatChipList 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.removed.emit({chip: this});\n    }\n  }\n\n  /** Handles click events on the chip. */\n  _handleClick(event: Event) {\n    if (this.disabled) {\n      event.preventDefault();\n    } else {\n      event.stopPropagation();\n    }\n  }\n\n  /** Handle custom key presses. */\n  _handleKeydown(event: KeyboardEvent): void {\n    if (this.disabled) {\n      return;\n    }\n\n    switch (event.keyCode) {\n      case DELETE:\n      case BACKSPACE:\n        // If we are removable, remove the focused chip\n        this.remove();\n        // Always prevent so page navigation does not occur\n        event.preventDefault();\n        break;\n      case SPACE:\n        // If we are selectable, toggle the focused chip\n        if (this.selectable) {\n          this.toggleSelected(true);\n        }\n\n        // Always prevent space from scrolling the page since the list has focus\n        event.preventDefault();\n        break;\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 the next time the zone stabilizes.\n    this._ngZone.onStable\n      .asObservable()\n      .pipe(take(1))\n      .subscribe(() => {\n        this._ngZone.run(() => {\n          this._hasFocus = false;\n          this._onBlur.next({chip: this});\n        });\n      });\n  }\n\n  private _dispatchSelectionChange(isUserInput = false) {\n    this.selectionChange.emit({\n      source: this,\n      isUserInput,\n      selected: this._selected\n    });\n  }\n}\n\n\n/**\n * Applies proper (click) support and adds styling for use with the Material Design \"cancel\" icon\n * available at https://material.io/icons/#ic_cancel.\n *\n * Example:\n *\n *     `<mat-chip>\n *       <mat-icon matChipRemove>cancel</mat-icon>\n *     </mat-chip>`\n *\n * You *may* use a custom icon, but you may need to override the `mat-chip-remove` positioning\n * styles to properly center the icon within the chip.\n */\n@Directive({\n  selector: '[matChipRemove]',\n  host: {\n    'class': 'mat-chip-remove mat-chip-trailing-icon',\n    '(click)': '_handleClick($event)',\n  }\n})\nexport class MatChipRemove {\n  constructor(protected _parentChip: MatChip) {}\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 `MatChip` would prevent propagation, but it can happen\n    // that the chip is being removed before the event bubbles up.\n    event.stopPropagation();\n  }\n}\n"],"names":["nextUniqueId"],"mappings":"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"}