{"version":3,"file":"list.mjs","sources":["../../../../../../src/material/list/list.ts","../../../../../../src/material/list/list.html","../../../../../../src/material/list/list-item.html","../../../../../../src/material/list/selection-list.ts","../../../../../../src/material/list/list-option.html","../../../../../../src/material/list/list-module.ts","../../../../../../src/material/list/public-api.ts","../../../../../../src/material/list/index.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 {coerceBooleanProperty, BooleanInput} from '@angular/cdk/coercion';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  ContentChildren,\n  Directive,\n  ElementRef,\n  Optional,\n  QueryList,\n  ViewEncapsulation,\n  OnChanges,\n  OnDestroy,\n  ChangeDetectorRef,\n  Input,\n  InjectionToken,\n  Inject,\n} from '@angular/core';\nimport {\n  CanDisable,\n  CanDisableRipple,\n  MatLine,\n  setLines,\n  mixinDisableRipple,\n  mixinDisabled,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\n// Boilerplate for applying mixins to MatList.\n/** @docs-private */\nconst _MatListBase = mixinDisabled(mixinDisableRipple(class {}));\n\n// Boilerplate for applying mixins to MatListItem.\n/** @docs-private */\nconst _MatListItemMixinBase = mixinDisableRipple(class {});\n\n/**\n * Injection token that can be used to inject instances of `MatList`. It serves as\n * alternative token to the actual `MatList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_LIST = new InjectionToken<MatList>('MatList');\n\n/**\n * Injection token that can be used to inject instances of `MatNavList`. It serves as\n * alternative token to the actual `MatNavList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_NAV_LIST = new InjectionToken<MatNavList>('MatNavList');\n\n@Component({\n  selector: 'mat-nav-list',\n  exportAs: 'matNavList',\n  host: {\n    'role': 'navigation',\n    'class': 'mat-nav-list mat-list-base'\n  },\n  templateUrl: 'list.html',\n  styleUrls: ['list.css'],\n  inputs: ['disableRipple', 'disabled'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: MAT_NAV_LIST, useExisting: MatNavList}],\n})\nexport class MatNavList extends _MatListBase implements CanDisable, CanDisableRipple,\n  OnChanges, OnDestroy {\n  /** Emits when the state of the list changes. */\n  readonly _stateChanges = new Subject<void>();\n\n  ngOnChanges() {\n    this._stateChanges.next();\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  static ngAcceptInputType_disableRipple: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n@Component({\n  selector: 'mat-list, mat-action-list',\n  exportAs: 'matList',\n  templateUrl: 'list.html',\n  host: {\n    'class': 'mat-list mat-list-base'\n  },\n  styleUrls: ['list.css'],\n  inputs: ['disableRipple', 'disabled'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: MAT_LIST, useExisting: MatList}],\n})\nexport class MatList extends _MatListBase implements CanDisable, CanDisableRipple, OnChanges,\n  OnDestroy {\n  /** Emits when the state of the list changes. */\n  readonly _stateChanges = new Subject<void>();\n\n  constructor(private _elementRef: ElementRef<HTMLElement>) {\n    super();\n\n    if (this._getListType() === 'action-list') {\n      _elementRef.nativeElement.classList.add('mat-action-list');\n    }\n  }\n\n  _getListType(): 'list' | 'action-list' | null {\n    const nodeName = this._elementRef.nativeElement.nodeName.toLowerCase();\n\n    if (nodeName === 'mat-list') {\n      return 'list';\n    }\n\n    if (nodeName === 'mat-action-list') {\n      return 'action-list';\n    }\n\n    return null;\n  }\n\n  ngOnChanges() {\n    this._stateChanges.next();\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  static ngAcceptInputType_disableRipple: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n  selector: '[mat-list-avatar], [matListAvatar]',\n  host: {'class': 'mat-list-avatar'}\n})\nexport class MatListAvatarCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n  selector: '[mat-list-icon], [matListIcon]',\n  host: {'class': 'mat-list-icon'}\n})\nexport class MatListIconCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n  selector: '[mat-subheader], [matSubheader]',\n  host: {'class': 'mat-subheader'}\n})\nexport class MatListSubheaderCssMatStyler {}\n\n/** An item within a Material Design list. */\n@Component({\n  selector: 'mat-list-item, a[mat-list-item], button[mat-list-item]',\n  exportAs: 'matListItem',\n  host: {\n    'class': 'mat-list-item mat-focus-indicator',\n    '[class.mat-list-item-disabled]': 'disabled',\n    // @breaking-change 8.0.0 Remove `mat-list-item-avatar` in favor of `mat-list-item-with-avatar`.\n    '[class.mat-list-item-avatar]': '_avatar || _icon',\n    '[class.mat-list-item-with-avatar]': '_avatar || _icon',\n  },\n  inputs: ['disableRipple'],\n  templateUrl: 'list-item.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatListItem extends _MatListItemMixinBase implements AfterContentInit,\n    CanDisableRipple, OnDestroy {\n  private _isInteractiveList: boolean = false;\n  private _list?: MatNavList | MatList;\n  private readonly _destroyed = new Subject<void>();\n\n  @ContentChildren(MatLine, {descendants: true}) _lines: QueryList<MatLine>;\n  @ContentChild(MatListAvatarCssMatStyler) _avatar: MatListAvatarCssMatStyler;\n  @ContentChild(MatListIconCssMatStyler) _icon: MatListIconCssMatStyler;\n\n  constructor(private _element: ElementRef<HTMLElement>,\n              _changeDetectorRef: ChangeDetectorRef,\n              @Optional() @Inject(MAT_NAV_LIST) navList?: MatNavList,\n              @Optional() @Inject(MAT_LIST) list?: MatList) {\n    super();\n    this._isInteractiveList = !!(navList || (list && list._getListType() === 'action-list'));\n    this._list = navList || list;\n\n    // If no type attribute is specified for <button>, set it to \"button\".\n    // If a type attribute is already specified, do nothing.\n    const element = this._getHostElement();\n\n    if (element.nodeName.toLowerCase() === 'button' && !element.hasAttribute('type')) {\n      element.setAttribute('type', 'button');\n    }\n\n    if (this._list) {\n      // React to changes in the state of the parent list since\n      // some of the item's properties depend on it (e.g. `disableRipple`).\n      this._list._stateChanges.pipe(takeUntil(this._destroyed)).subscribe(() => {\n        _changeDetectorRef.markForCheck();\n      });\n    }\n  }\n\n  /** Whether the option is disabled. */\n  @Input()\n  get disabled() { return this._disabled || !!(this._list && this._list.disabled); }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n  }\n  private _disabled = false;\n\n  ngAfterContentInit() {\n    setLines(this._lines, this._element);\n  }\n\n  ngOnDestroy() {\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  /** Whether this list item should show a ripple effect when clicked. */\n  _isRippleDisabled() {\n    return !this._isInteractiveList || this.disableRipple ||\n           !!(this._list && this._list.disableRipple);\n  }\n\n  /** Retrieves the DOM element of the component host. */\n  _getHostElement(): HTMLElement {\n    return this._element.nativeElement;\n  }\n\n  static ngAcceptInputType_disableRipple: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n","<ng-content></ng-content>\n\n","<div class=\"mat-list-item-content\">\n  <div class=\"mat-list-item-ripple\" mat-ripple\n       [matRippleTrigger]=\"_getHostElement()\"\n       [matRippleDisabled]=\"_isRippleDisabled()\">\n  </div>\n\n  <ng-content select=\"[mat-list-avatar], [mat-list-icon], [matListAvatar], [matListIcon]\">\n  </ng-content>\n\n  <div class=\"mat-list-text\"><ng-content select=\"[mat-line], [matLine]\"></ng-content></div>\n\n  <ng-content></ng-content>\n</div>\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, FocusKeyManager, FocusMonitor} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {\n  A,\n  DOWN_ARROW,\n  ENTER,\n  hasModifierKey,\n  SPACE,\n  UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  Attribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n  CanDisableRipple,\n  MatLine,\n  mixinDisableRipple,\n  setLines,\n  ThemePalette,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {startWith, takeUntil} from 'rxjs/operators';\nimport {MatListAvatarCssMatStyler, MatListIconCssMatStyler} from './list';\n\nconst _MatSelectionListBase = mixinDisableRipple(class {});\nconst _MatListOptionBase = mixinDisableRipple(class {});\n\n/** @docs-private */\nexport const MAT_SELECTION_LIST_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => MatSelectionList),\n  multi: true\n};\n\n/** Change event that is being fired whenever the selected state of an option changes. */\nexport class MatSelectionListChange {\n  constructor(\n    /** Reference to the selection list that emitted the event. */\n    public source: MatSelectionList,\n    /**\n     * Reference to the option that has been changed.\n     * @deprecated Use `options` instead, because some events may change more than one option.\n     * @breaking-change 12.0.0\n     */\n    public option: MatListOption,\n    /** Reference to the options that have been changed. */\n    public options: MatListOption[]) {}\n}\n\n/**\n * Type describing possible positions of a checkbox in a list option\n * with respect to the list item's text.\n */\nexport type MatListOptionCheckboxPosition = 'before'|'after';\n\n/**\n * Component for list-options of selection-list. Each list-option can automatically\n * generate a checkbox and can put current item into the selectionModel of selection-list\n * if the current item is selected.\n */\n@Component({\n  selector: 'mat-list-option',\n  exportAs: 'matListOption',\n  inputs: ['disableRipple'],\n  host: {\n    'role': 'option',\n    'class': 'mat-list-item mat-list-option mat-focus-indicator',\n    '(focus)': '_handleFocus()',\n    '(blur)': '_handleBlur()',\n    '(click)': '_handleClick()',\n    '[class.mat-list-item-disabled]': 'disabled',\n    '[class.mat-list-item-with-avatar]': '_avatar || _icon',\n    // Manually set the \"primary\" or \"warn\" class if the color has been explicitly\n    // set to \"primary\" or \"warn\". The pseudo checkbox picks up these classes for\n    // its theme.\n    '[class.mat-primary]': 'color === \"primary\"',\n    // Even though accent is the default, we need to set this class anyway, because the  list might\n    // be placed inside a parent that has one of the other colors with a higher specificity.\n    '[class.mat-accent]': 'color !== \"primary\" && color !== \"warn\"',\n    '[class.mat-warn]': 'color === \"warn\"',\n    '[class.mat-list-single-selected-option]': 'selected && !selectionList.multiple',\n    '[attr.aria-selected]': 'selected',\n    '[attr.aria-disabled]': 'disabled',\n    '[attr.tabindex]': '-1',\n  },\n  templateUrl: 'list-option.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatListOption extends _MatListOptionBase implements AfterContentInit, OnDestroy,\n                                                                      OnInit, FocusableOption,\n                                                                      CanDisableRipple {\n  private _selected = false;\n  private _disabled = false;\n  private _hasFocus = false;\n\n  @ContentChild(MatListAvatarCssMatStyler) _avatar: MatListAvatarCssMatStyler;\n  @ContentChild(MatListIconCssMatStyler) _icon: MatListIconCssMatStyler;\n  @ContentChildren(MatLine, {descendants: true}) _lines: QueryList<MatLine>;\n\n  /**\n   * Emits when the selected state of the option has changed.\n   * Use to facilitate two-data binding to the `selected` property.\n   * @docs-private\n   */\n  @Output()\n  readonly selectedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  /** DOM element containing the item's text. */\n  @ViewChild('text') _text: ElementRef;\n\n  /** Whether the label should appear before or after the checkbox. Defaults to 'after' */\n  @Input() checkboxPosition: MatListOptionCheckboxPosition = 'after';\n\n  /** Theme color of the list option. This sets the color of the checkbox. */\n  @Input()\n  get color(): ThemePalette { return this._color || this.selectionList.color; }\n  set color(newValue: ThemePalette) { this._color = newValue; }\n  private _color: ThemePalette;\n\n  /**\n   * This is set to true after the first OnChanges cycle so we don't clear the value of `selected`\n   * in the first cycle.\n   */\n  private _inputsInitialized = false;\n  /** Value of the option */\n  @Input()\n  get value(): any { return this._value; }\n  set value(newValue: any) {\n    if (\n      this.selected &&\n      !this.selectionList.compareWith(newValue, this.value) &&\n      this._inputsInitialized\n    ) {\n      this.selected = false;\n    }\n\n    this._value = newValue;\n  }\n  private _value: any;\n\n  /** Whether the option is disabled. */\n  @Input()\n  get disabled() { return this._disabled || (this.selectionList && this.selectionList.disabled); }\n  set disabled(value: any) {\n    const newValue = coerceBooleanProperty(value);\n\n    if (newValue !== this._disabled) {\n      this._disabled = newValue;\n      this._changeDetector.markForCheck();\n    }\n  }\n\n  /** Whether the option is selected. */\n  @Input()\n  get selected(): boolean { return this.selectionList.selectedOptions.isSelected(this); }\n  set selected(value: boolean) {\n    const isSelected = coerceBooleanProperty(value);\n\n    if (isSelected !== this._selected) {\n      this._setSelected(isSelected);\n\n      if (isSelected || this.selectionList.multiple) {\n        this.selectionList._reportValueChange();\n      }\n    }\n  }\n\n  constructor(private _element: ElementRef<HTMLElement>,\n              private _changeDetector: ChangeDetectorRef,\n              /** @docs-private */\n              @Inject(forwardRef(() => MatSelectionList)) public selectionList: MatSelectionList) {\n    super();\n  }\n\n  ngOnInit() {\n    const list = this.selectionList;\n\n    if (list._value && list._value.some(value => list.compareWith(value, this._value))) {\n      this._setSelected(true);\n    }\n\n    const wasSelected = this._selected;\n\n    // List options that are selected at initialization can't be reported properly to the form\n    // control. This is because it takes some time until the selection-list knows about all\n    // available options. Also it can happen that the ControlValueAccessor has an initial value\n    // that should be used instead. Deferring the value change report to the next tick ensures\n    // that the form control value is not being overwritten.\n    Promise.resolve().then(() => {\n      if (this._selected || wasSelected) {\n        this.selected = true;\n        this._changeDetector.markForCheck();\n      }\n    });\n    this._inputsInitialized = true;\n  }\n\n  ngAfterContentInit() {\n    setLines(this._lines, this._element);\n  }\n\n  ngOnDestroy(): void {\n    if (this.selected) {\n      // We have to delay this until the next tick in order\n      // to avoid changed after checked errors.\n      Promise.resolve().then(() => {\n        this.selected = false;\n      });\n    }\n\n    const hadFocus = this._hasFocus;\n    const newActiveItem = this.selectionList._removeOptionFromList(this);\n\n    // Only move focus if this option was focused at the time it was destroyed.\n    if (hadFocus && newActiveItem) {\n      newActiveItem.focus();\n    }\n  }\n\n  /** Toggles the selection state of the option. */\n  toggle(): void {\n    this.selected = !this.selected;\n  }\n\n  /** Allows for programmatic focusing of the option. */\n  focus(): void {\n    this._element.nativeElement.focus();\n  }\n\n  /**\n   * Returns the list item's text label. Implemented as a part of the FocusKeyManager.\n   * @docs-private\n   */\n  getLabel() {\n    return this._text ? (this._text.nativeElement.textContent || '') : '';\n  }\n\n  /** Whether this list item should show a ripple effect when clicked. */\n  _isRippleDisabled() {\n    return this.disabled || this.disableRipple || this.selectionList.disableRipple;\n  }\n\n  _handleClick() {\n    if (!this.disabled && (this.selectionList.multiple || !this.selected)) {\n      this.toggle();\n\n      // Emit a change event if the selected state of the option changed through user interaction.\n      this.selectionList._emitChangeEvent([this]);\n    }\n  }\n\n  _handleFocus() {\n    this.selectionList._setFocusedOption(this);\n    this._hasFocus = true;\n  }\n\n  _handleBlur() {\n    this.selectionList._onTouched();\n    this._hasFocus = false;\n  }\n\n  /** Retrieves the DOM element of the component host. */\n  _getHostElement(): HTMLElement {\n    return this._element.nativeElement;\n  }\n\n  /** Sets the selected state of the option. Returns whether the value has changed. */\n  _setSelected(selected: boolean): boolean {\n    if (selected === this._selected) {\n      return false;\n    }\n\n    this._selected = selected;\n\n    if (selected) {\n      this.selectionList.selectedOptions.select(this);\n    } else {\n      this.selectionList.selectedOptions.deselect(this);\n    }\n\n    this.selectedChange.emit(selected);\n    this._changeDetector.markForCheck();\n    return true;\n  }\n\n  /**\n   * Notifies Angular that the option needs to be checked in the next change detection run. Mainly\n   * used to trigger an update of the list option if the disabled state of the selection list\n   * changed.\n   */\n  _markForCheck() {\n    this._changeDetector.markForCheck();\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_selected: BooleanInput;\n  static ngAcceptInputType_disableRipple: BooleanInput;\n}\n\n\n/**\n * Material Design list component where each item is a selectable option. Behaves as a listbox.\n */\n@Component({\n  selector: 'mat-selection-list',\n  exportAs: 'matSelectionList',\n  inputs: ['disableRipple'],\n  host: {\n    'role': 'listbox',\n    'class': 'mat-selection-list mat-list-base',\n    '(keydown)': '_keydown($event)',\n    '[attr.aria-multiselectable]': 'multiple',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[attr.tabindex]': '_tabIndex',\n  },\n  template: '<ng-content></ng-content>',\n  styleUrls: ['list.css'],\n  encapsulation: ViewEncapsulation.None,\n  providers: [MAT_SELECTION_LIST_VALUE_ACCESSOR],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatSelectionList extends _MatSelectionListBase implements CanDisableRipple,\n  AfterContentInit, ControlValueAccessor, OnDestroy, OnChanges {\n  private _multiple = true;\n  private _contentInitialized = false;\n\n  /** The FocusKeyManager which handles focus. */\n  _keyManager: FocusKeyManager<MatListOption>;\n\n  /** The option components contained within this selection-list. */\n  @ContentChildren(MatListOption, {descendants: true}) options: QueryList<MatListOption>;\n\n  /** Emits a change event whenever the selected state of an option changes. */\n  @Output() readonly selectionChange: EventEmitter<MatSelectionListChange> =\n      new EventEmitter<MatSelectionListChange>();\n\n  /**\n   * Tabindex of the selection list.\n   * @breaking-change 11.0.0 Remove `tabIndex` input.\n   */\n  @Input() tabIndex: number = 0;\n\n  /** Theme color of the selection list. This sets the checkbox color for all list options. */\n  @Input() color: ThemePalette = 'accent';\n\n  /**\n   * Function used for comparing an option against the selected value when determining which\n   * options should appear as selected. The first argument is the value of an options. The second\n   * one is a value from the selected value. A boolean must be returned.\n   */\n  @Input() compareWith: (o1: any, o2: any) => boolean = (a1, a2) => a1 === a2;\n\n  /** Whether the selection list is disabled. */\n  @Input()\n  get disabled(): boolean { return this._disabled; }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n\n    // The `MatSelectionList` and `MatListOption` are using the `OnPush` change detection\n    // strategy. Therefore the options will not check for any changes if the `MatSelectionList`\n    // changed its state. Since we know that a change to `disabled` property of the list affects\n    // the state of the options, we manually mark each option for check.\n    this._markOptionsForCheck();\n  }\n  private _disabled: boolean = false;\n\n  /** Whether selection is limited to one or multiple items (default multiple). */\n  @Input()\n  get multiple(): boolean { return this._multiple; }\n  set multiple(value: boolean) {\n    const newValue = coerceBooleanProperty(value);\n\n    if (newValue !== this._multiple) {\n      if (this._contentInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw new Error(\n            'Cannot change `multiple` mode of mat-selection-list after initialization.');\n      }\n\n      this._multiple = newValue;\n      this.selectedOptions = new SelectionModel(this._multiple, this.selectedOptions.selected);\n    }\n  }\n\n  /** The currently selected options. */\n  selectedOptions = new SelectionModel<MatListOption>(this._multiple);\n\n  /** The tabindex of the selection list. */\n  _tabIndex = -1;\n\n  /** View to model callback that should be called whenever the selected options change. */\n  private _onChange: (value: any) => void = (_: any) => {};\n\n  /** Keeps track of the currently-selected value. */\n  _value: string[]|null;\n\n  /** Emits when the list has been destroyed. */\n  private readonly _destroyed = new Subject<void>();\n\n  /** View to model callback that should be called if the list or its options lost focus. */\n  _onTouched: () => void = () => {};\n\n  /** Whether the list has been destroyed. */\n  private _isDestroyed: boolean;\n\n  constructor(private _element: ElementRef<HTMLElement>,\n    // @breaking-change 11.0.0 Remove `tabIndex` parameter.\n    @Attribute('tabindex') tabIndex: string,\n    private _changeDetector: ChangeDetectorRef,\n    // @breaking-change 11.0.0 `_focusMonitor` parameter to become required.\n    private _focusMonitor?: FocusMonitor) {\n    super();\n  }\n\n  ngAfterContentInit(): void {\n    this._contentInitialized = true;\n\n    this._keyManager = new FocusKeyManager<MatListOption>(this.options)\n      .withWrap()\n      .withTypeAhead()\n      .withHomeAndEnd()\n      // Allow disabled items to be focusable. For accessibility reasons, there must be a way for\n      // screenreader users, that allows reading the different options of the list.\n      .skipPredicate(() => false)\n      .withAllowedModifierKeys(['shiftKey']);\n\n    if (this._value) {\n      this._setOptionsFromValues(this._value);\n    }\n\n    // If the user attempts to tab out of the selection list, allow focus to escape.\n    this._keyManager.tabOut.pipe(takeUntil(this._destroyed)).subscribe(() => {\n      this._allowFocusEscape();\n    });\n\n    // When the number of options change, update the tabindex of the selection list.\n    this.options.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\n      this._updateTabIndex();\n    });\n\n    // Sync external changes to the model back to the options.\n    this.selectedOptions.changed.pipe(takeUntil(this._destroyed)).subscribe(event => {\n      if (event.added) {\n        for (let item of event.added) {\n          item.selected = true;\n        }\n      }\n\n      if (event.removed) {\n        for (let item of event.removed) {\n          item.selected = false;\n        }\n      }\n    });\n\n    // @breaking-change 11.0.0 Remove null assertion once _focusMonitor is required.\n    this._focusMonitor?.monitor(this._element)\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(origin => {\n        if (origin === 'keyboard' || origin === 'program') {\n          let toFocus = 0;\n          for (let i = 0; i < this.options.length; i++) {\n            if (this.options.get(i)?.selected) {\n              toFocus = i;\n              break;\n            }\n          }\n          this._keyManager.setActiveItem(toFocus);\n        }\n      });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const disableRippleChanges = changes['disableRipple'];\n    const colorChanges = changes['color'];\n\n    if ((disableRippleChanges && !disableRippleChanges.firstChange) ||\n        (colorChanges && !colorChanges.firstChange)) {\n      this._markOptionsForCheck();\n    }\n  }\n\n  ngOnDestroy() {\n    // @breaking-change 11.0.0 Remove null assertion once _focusMonitor is required.\n    this._focusMonitor?.stopMonitoring(this._element);\n    this._destroyed.next();\n    this._destroyed.complete();\n    this._isDestroyed = true;\n  }\n\n  /** Focuses the selection list. */\n  focus(options?: FocusOptions) {\n    this._element.nativeElement.focus(options);\n  }\n\n  /** Selects all of the options. Returns the options that changed as a result. */\n  selectAll(): MatListOption[] {\n    return this._setAllOptionsSelected(true);\n  }\n\n  /** Deselects all of the options. Returns the options that changed as a result. */\n  deselectAll(): MatListOption[] {\n    return this._setAllOptionsSelected(false);\n  }\n\n  /** Sets the focused option of the selection-list. */\n  _setFocusedOption(option: MatListOption) {\n    this._keyManager.updateActiveItem(option);\n  }\n\n  /**\n   * Removes an option from the selection list and updates the active item.\n   * @returns Currently-active item.\n   */\n  _removeOptionFromList(option: MatListOption): MatListOption | null {\n    const optionIndex = this._getOptionIndex(option);\n\n    if (optionIndex > -1 && this._keyManager.activeItemIndex === optionIndex) {\n      // Check whether the option is the last item\n      if (optionIndex > 0) {\n        this._keyManager.updateActiveItem(optionIndex - 1);\n      } else if (optionIndex === 0 && this.options.length > 1) {\n        this._keyManager.updateActiveItem(Math.min(optionIndex + 1, this.options.length - 1));\n      }\n    }\n\n    return this._keyManager.activeItem;\n  }\n\n  /** Passes relevant key presses to our key manager. */\n  _keydown(event: KeyboardEvent) {\n    const keyCode = event.keyCode;\n    const manager = this._keyManager;\n    const previousFocusIndex = manager.activeItemIndex;\n    const hasModifier = hasModifierKey(event);\n\n    switch (keyCode) {\n      case SPACE:\n      case ENTER:\n        if (!hasModifier && !manager.isTyping()) {\n          this._toggleFocusedOption();\n          // Always prevent space from scrolling the page since the list has focus\n          event.preventDefault();\n        }\n        break;\n      default:\n        // The \"A\" key gets special treatment, because it's used for the \"select all\" functionality.\n        if (keyCode === A && this.multiple && hasModifierKey(event, 'ctrlKey') &&\n            !manager.isTyping()) {\n          const shouldSelect = this.options.some(option => !option.disabled && !option.selected);\n          this._setAllOptionsSelected(shouldSelect, true, true);\n          event.preventDefault();\n        } else {\n          manager.onKeydown(event);\n        }\n    }\n\n    if (this.multiple && (keyCode === UP_ARROW || keyCode === DOWN_ARROW) && event.shiftKey &&\n        manager.activeItemIndex !== previousFocusIndex) {\n      this._toggleFocusedOption();\n    }\n  }\n\n  /** Reports a value change to the ControlValueAccessor */\n  _reportValueChange() {\n    // Stop reporting value changes after the list has been destroyed. This avoids\n    // cases where the list might wrongly reset its value once it is removed, but\n    // the form control is still live.\n    if (this.options && !this._isDestroyed) {\n      const value = this._getSelectedOptionValues();\n      this._onChange(value);\n      this._value = value;\n    }\n  }\n\n  /** Emits a change event if the selected state of an option changed. */\n  _emitChangeEvent(options: MatListOption[]) {\n    this.selectionChange.emit(new MatSelectionListChange(this, options[0], options));\n  }\n\n  /** Implemented as part of ControlValueAccessor. */\n  writeValue(values: string[]): void {\n    this._value = values;\n\n    if (this.options) {\n      this._setOptionsFromValues(values || []);\n    }\n  }\n\n  /** Implemented as a part of ControlValueAccessor. */\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\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  /** Sets the selected options based on the specified values. */\n  private _setOptionsFromValues(values: string[]) {\n    this.options.forEach(option => option._setSelected(false));\n\n    values.forEach(value => {\n      const correspondingOption = this.options.find(option => {\n        // Skip options that are already in the model. This allows us to handle cases\n        // where the same primitive value is selected multiple times.\n        return option.selected ? false : this.compareWith(option.value, value);\n      });\n\n      if (correspondingOption) {\n        correspondingOption._setSelected(true);\n      }\n    });\n  }\n\n  /** Returns the values of the selected options. */\n  private _getSelectedOptionValues(): string[] {\n    return this.options.filter(option => option.selected).map(option => option.value);\n  }\n\n  /** Toggles the state of the currently focused option if enabled. */\n  private _toggleFocusedOption(): void {\n    let focusedIndex = this._keyManager.activeItemIndex;\n\n    if (focusedIndex != null && this._isValidIndex(focusedIndex)) {\n      let focusedOption: MatListOption = this.options.toArray()[focusedIndex];\n\n      if (focusedOption && !focusedOption.disabled && (this._multiple || !focusedOption.selected)) {\n        focusedOption.toggle();\n\n        // Emit a change event because the focused option changed its state through user\n        // interaction.\n        this._emitChangeEvent([focusedOption]);\n      }\n    }\n  }\n\n  /**\n   * Sets the selected state on all of the options\n   * and emits an event if anything changed.\n   */\n  private _setAllOptionsSelected(\n    isSelected: boolean,\n    skipDisabled?: boolean,\n    isUserInput?: boolean): MatListOption[] {\n    // Keep track of whether anything changed, because we only want to\n    // emit the changed event when something actually changed.\n    const changedOptions: MatListOption[] = [];\n\n    this.options.forEach(option => {\n      if ((!skipDisabled || !option.disabled) && option._setSelected(isSelected)) {\n        changedOptions.push(option);\n      }\n    });\n\n    if (changedOptions.length) {\n      this._reportValueChange();\n\n      if (isUserInput) {\n        this._emitChangeEvent(changedOptions);\n      }\n    }\n\n    return changedOptions;\n  }\n\n  /**\n   * Utility to ensure all indexes are valid.\n   * @param index The index to be checked.\n   * @returns True if the index is valid for our list of options.\n   */\n  private _isValidIndex(index: number): boolean {\n    return index >= 0 && index < this.options.length;\n  }\n\n  /** Returns the index of the specified list option. */\n  private _getOptionIndex(option: MatListOption): number {\n    return this.options.toArray().indexOf(option);\n  }\n\n  /** Marks all the options to be checked in the next change detection run. */\n  private _markOptionsForCheck() {\n    if (this.options) {\n      this.options.forEach(option => option._markForCheck());\n    }\n  }\n\n  /**\n   * Removes the tabindex from the selection list and resets it back afterwards, allowing the user\n   * to tab out of it. This prevents the list from capturing focus and redirecting it back within\n   * the list, creating a focus trap if it user tries to tab away.\n   */\n  private _allowFocusEscape() {\n    this._tabIndex = -1;\n\n    setTimeout(() => {\n      this._tabIndex = 0;\n      this._changeDetector.markForCheck();\n    });\n  }\n\n  /** Updates the tabindex based upon if the selection list is empty. */\n  private _updateTabIndex(): void {\n    this._tabIndex = (this.options.length === 0) ? -1 : 0;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_disableRipple: BooleanInput;\n  static ngAcceptInputType_multiple: BooleanInput;\n}\n","<div class=\"mat-list-item-content\"\n  [class.mat-list-item-content-reverse]=\"checkboxPosition == 'after'\">\n\n  <div mat-ripple\n    class=\"mat-list-item-ripple\"\n    [matRippleTrigger]=\"_getHostElement()\"\n    [matRippleDisabled]=\"_isRippleDisabled()\"></div>\n\n  <mat-pseudo-checkbox\n    *ngIf=\"selectionList.multiple\"\n    [state]=\"selected ? 'checked' : 'unchecked'\"\n    [disabled]=\"disabled\"></mat-pseudo-checkbox>\n\n  <div class=\"mat-list-text\" #text><ng-content></ng-content></div>\n\n  <ng-content select=\"[mat-list-avatar], [mat-list-icon], [matListAvatar], [matListIcon]\">\n  </ng-content>\n\n</div>\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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {\n  MatCommonModule,\n  MatLineModule,\n  MatPseudoCheckboxModule,\n  MatRippleModule,\n} from '@angular/material/core';\nimport {\n  MatList,\n  MatNavList,\n  MatListAvatarCssMatStyler,\n  MatListIconCssMatStyler,\n  MatListItem,\n  MatListSubheaderCssMatStyler,\n} from './list';\nimport {MatListOption, MatSelectionList} from './selection-list';\nimport {MatDividerModule} from '@angular/material/divider';\n\n\n@NgModule({\n  imports: [MatLineModule, MatRippleModule, MatCommonModule, MatPseudoCheckboxModule, CommonModule],\n  exports: [\n    MatList,\n    MatNavList,\n    MatListItem,\n    MatListAvatarCssMatStyler,\n    MatLineModule,\n    MatCommonModule,\n    MatListIconCssMatStyler,\n    MatListSubheaderCssMatStyler,\n    MatPseudoCheckboxModule,\n    MatSelectionList,\n    MatListOption,\n    MatDividerModule\n  ],\n  declarations: [\n    MatList,\n    MatNavList,\n    MatListItem,\n    MatListAvatarCssMatStyler,\n    MatListIconCssMatStyler,\n    MatListSubheaderCssMatStyler,\n    MatSelectionList,\n    MatListOption\n  ],\n})\nexport class MatListModule {}\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\nexport * from './list-module';\nexport * from './list';\nexport * from './selection-list';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}