@angular/material
Version:
Angular Material
1 lines • 96 kB
Source Map (JSON)
{"version":3,"file":"list.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/list-option-types.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/list-item-sections.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/tokens.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/list-base.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/action-list.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/list.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/list-item.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/list-option.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/list-option.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/subheader.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/nav-list.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/selection-list.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/list-module.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.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Type describing possible positions of a checkbox or radio in a list option\n * with respect to the list item's text.\n */\nexport type MatListOptionTogglePosition = 'before' | 'after';\n\n/**\n * Interface describing a list option. This is used to avoid circular\n * dependencies between the list-option and the styler directives.\n * @docs-private\n */\nexport interface ListOption {\n _getTogglePosition(): MatListOptionTogglePosition;\n}\n\n/**\n * Injection token that can be used to reference instances of an `ListOption`. It serves\n * as alternative token to an actual implementation which could result in undesired\n * retention of the class or circular references breaking runtime execution.\n * @docs-private\n */\nexport const LIST_OPTION = new InjectionToken<ListOption>('ListOption');\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.dev/license\n */\n\nimport {Directive, ElementRef, inject} from '@angular/core';\nimport {LIST_OPTION, ListOption} from './list-option-types';\n\n/**\n * Directive capturing the title of a list item. A list item usually consists of a\n * title and optional secondary or tertiary lines.\n *\n * Text content for the title never wraps. There can only be a single title per list item.\n */\n@Directive({\n selector: '[matListItemTitle]',\n host: {'class': 'mat-mdc-list-item-title mdc-list-item__primary-text'},\n})\nexport class MatListItemTitle {\n _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n}\n\n/**\n * Directive capturing a line in a list item. A list item usually consists of a\n * title and optional secondary or tertiary lines.\n *\n * Text content inside a line never wraps. There can be at maximum two lines per list item.\n */\n@Directive({\n selector: '[matListItemLine]',\n host: {'class': 'mat-mdc-list-item-line mdc-list-item__secondary-text'},\n})\nexport class MatListItemLine {\n _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n}\n\n/**\n * Directive matching an optional meta section for list items.\n *\n * List items can reserve space at the end of an item to display a control,\n * button or additional text content.\n */\n@Directive({\n selector: '[matListItemMeta]',\n host: {'class': 'mat-mdc-list-item-meta mdc-list-item__end'},\n})\nexport class MatListItemMeta {}\n\n/**\n * @docs-private\n *\n * MDC uses the very intuitively named classes `.mdc-list-item__start` and `.mat-list-item__end` to\n * position content such as icons or checkboxes/radios that comes either before or after the text\n * content respectively. This directive detects the placement of the checkbox/radio and applies the\n * correct MDC class to position the icon/avatar on the opposite side.\n */\n@Directive({\n host: {\n // MDC uses intuitively named classes `.mdc-list-item__start` and `.mat-list-item__end` to\n // position content such as icons or checkboxes/radios that comes either before or after the\n // text content respectively. This directive detects the placement of the checkbox/radio and\n // applies the correct MDC class to position the icon/avatar on the opposite side.\n '[class.mdc-list-item__start]': '_isAlignedAtStart()',\n '[class.mdc-list-item__end]': '!_isAlignedAtStart()',\n },\n})\nexport class _MatListItemGraphicBase {\n _listOption = inject<ListOption>(LIST_OPTION, {optional: true});\n\n _isAlignedAtStart() {\n // By default, in all list items the graphic is aligned at start. In list options,\n // the graphic is only aligned at start if the checkbox/radio is at the end.\n return !this._listOption || this._listOption?._getTogglePosition() === 'after';\n }\n}\n\n/**\n * Directive matching an optional avatar within a list item.\n *\n * List items can reserve space at the beginning of an item to display an avatar.\n */\n@Directive({\n selector: '[matListItemAvatar]',\n host: {'class': 'mat-mdc-list-item-avatar'},\n})\nexport class MatListItemAvatar extends _MatListItemGraphicBase {}\n\n/**\n * Directive matching an optional icon within a list item.\n *\n * List items can reserve space at the beginning of an item to display an icon.\n */\n@Directive({\n selector: '[matListItemIcon]',\n host: {'class': 'mat-mdc-list-item-icon'},\n})\nexport class MatListItemIcon extends _MatListItemGraphicBase {}\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.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/** Object that can be used to configure the default options for the list module. */\nexport interface MatListConfig {\n /** Whether icon indicators should be hidden for single-selection. */\n hideSingleSelectionIndicator?: boolean;\n}\n\n/** Injection token that can be used to provide the default options for the list module. */\nexport const MAT_LIST_CONFIG = new InjectionToken<MatListConfig>('MAT_LIST_CONFIG');\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.dev/license\n */\n\nimport {BooleanInput, coerceBooleanProperty, coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Platform} from '@angular/cdk/platform';\nimport {\n AfterViewInit,\n ContentChildren,\n Directive,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnDestroy,\n QueryList,\n Injector,\n signal,\n} from '@angular/core';\nimport {\n _animationsDisabled,\n _StructuralStylesLoader,\n MAT_RIPPLE_GLOBAL_OPTIONS,\n RippleConfig,\n RippleGlobalOptions,\n RippleRenderer,\n RippleTarget,\n} from '../core';\nimport {_CdkPrivateStyleLoader} from '@angular/cdk/private';\nimport {Subscription, merge} from 'rxjs';\nimport {\n MatListItemLine,\n MatListItemTitle,\n MatListItemIcon,\n MatListItemAvatar,\n} from './list-item-sections';\nimport {MAT_LIST_CONFIG} from './tokens';\n\n@Directive({\n host: {\n '[attr.aria-disabled]': 'disabled',\n },\n})\n/** @docs-private */\nexport abstract class MatListBase {\n _isNonInteractive: boolean = true;\n\n /** Whether ripples for all list items is disabled. */\n @Input()\n get disableRipple(): boolean {\n return this._disableRipple;\n }\n set disableRipple(value: BooleanInput) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n private _disableRipple: boolean = false;\n\n /**\n * Whether the entire list is disabled. When disabled, the list itself and each of its list items\n * are disabled.\n */\n @Input()\n get disabled(): boolean {\n return this._disabled();\n }\n set disabled(value: BooleanInput) {\n this._disabled.set(coerceBooleanProperty(value));\n }\n private _disabled = signal(false);\n\n protected _defaultOptions = inject(MAT_LIST_CONFIG, {optional: true});\n}\n\n@Directive({\n host: {\n '[class.mdc-list-item--disabled]': 'disabled',\n '[attr.aria-disabled]': 'disabled',\n '[attr.disabled]': '(_isButtonElement && disabled) || null',\n },\n})\n/** @docs-private */\nexport abstract class MatListItemBase implements AfterViewInit, OnDestroy, RippleTarget {\n _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected _ngZone = inject(NgZone);\n private _listBase = inject(MatListBase, {optional: true});\n private _platform = inject(Platform);\n\n /** Query list matching list-item line elements. */\n abstract _lines: QueryList<MatListItemLine> | undefined;\n\n /** Query list matching list-item title elements. */\n abstract _titles: QueryList<MatListItemTitle> | undefined;\n\n /**\n * Element reference to the unscoped content in a list item.\n *\n * Unscoped content is user-projected text content in a list item that is\n * not part of an explicit line or title.\n */\n abstract _unscopedContent: ElementRef<HTMLSpanElement> | undefined;\n\n /** Host element for the list item. */\n _hostElement: HTMLElement;\n\n /** indicate whether the host element is a button or not */\n _isButtonElement: boolean;\n\n /** Whether animations are disabled. */\n _noopAnimations = _animationsDisabled();\n\n @ContentChildren(MatListItemAvatar, {descendants: false}) _avatars!: QueryList<never>;\n @ContentChildren(MatListItemIcon, {descendants: false}) _icons!: QueryList<never>;\n\n /**\n * The number of lines this list item should reserve space for. If not specified,\n * lines are inferred based on the projected content.\n *\n * Explicitly specifying the number of lines is useful if you want to acquire additional\n * space and enable the wrapping of text. The unscoped text content of a list item will\n * always be able to take up the remaining space of the item, unless it represents the title.\n *\n * A maximum of three lines is supported as per the Material Design specification.\n */\n @Input()\n set lines(lines: number | string | null) {\n this._explicitLines = coerceNumberProperty(lines, null);\n this._updateItemLines(false);\n }\n _explicitLines: number | null = null;\n\n /** Whether ripples for list items are disabled. */\n @Input()\n get disableRipple(): boolean {\n return (\n this.disabled ||\n this._disableRipple ||\n this._noopAnimations ||\n !!this._listBase?.disableRipple\n );\n }\n set disableRipple(value: BooleanInput) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n private _disableRipple: boolean = false;\n\n /** Whether the list-item is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled() || !!this._listBase?.disabled;\n }\n set disabled(value: BooleanInput) {\n this._disabled.set(coerceBooleanProperty(value));\n }\n private _disabled = signal(false);\n\n private _subscriptions = new Subscription();\n private _rippleRenderer: RippleRenderer | null = null;\n\n /** Whether the list item has unscoped text content. */\n _hasUnscopedTextContent: boolean = false;\n\n /**\n * Implemented as part of `RippleTarget`.\n * @docs-private\n */\n rippleConfig: RippleConfig & RippleGlobalOptions;\n\n /**\n * Implemented as part of `RippleTarget`.\n * @docs-private\n */\n get rippleDisabled(): boolean {\n return this.disableRipple || !!this.rippleConfig.disabled;\n }\n\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);\n const globalRippleOptions = inject<RippleGlobalOptions>(MAT_RIPPLE_GLOBAL_OPTIONS, {\n optional: true,\n });\n this.rippleConfig = globalRippleOptions || {};\n this._hostElement = this._elementRef.nativeElement;\n this._isButtonElement = this._hostElement.nodeName.toLowerCase() === 'button';\n\n if (this._listBase && !this._listBase._isNonInteractive) {\n this._initInteractiveListItem();\n }\n\n // If no type attribute is specified for a host `<button>` element, set it to `button`. If a\n // type attribute is already specified, we do nothing. We do this for backwards compatibility.\n // TODO: Determine if we intend to continue doing this for the MDC-based list.\n if (this._isButtonElement && !this._hostElement.hasAttribute('type')) {\n this._hostElement.setAttribute('type', 'button');\n }\n }\n\n ngAfterViewInit() {\n this._monitorProjectedLinesAndTitle();\n this._updateItemLines(true);\n }\n\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n if (this._rippleRenderer !== null) {\n this._rippleRenderer._removeTriggerEvents();\n }\n }\n\n /** Whether the list item has icons or avatars. */\n _hasIconOrAvatar() {\n return !!(this._avatars.length || this._icons.length);\n }\n\n private _initInteractiveListItem() {\n this._hostElement.classList.add('mat-mdc-list-item-interactive');\n this._rippleRenderer = new RippleRenderer(\n this,\n this._ngZone,\n this._hostElement,\n this._platform,\n inject(Injector),\n );\n this._rippleRenderer.setupTriggerEvents(this._hostElement);\n }\n\n /**\n * Subscribes to changes in the projected title and lines. Triggers a\n * item lines update whenever a change occurs.\n */\n private _monitorProjectedLinesAndTitle() {\n this._ngZone.runOutsideAngular(() => {\n this._subscriptions.add(\n merge(this._lines!.changes, this._titles!.changes).subscribe(() =>\n this._updateItemLines(false),\n ),\n );\n });\n }\n\n /**\n * Updates the lines of the list item. Based on the projected user content and optional\n * explicit lines setting, the visual appearance of the list item is determined.\n *\n * This method should be invoked whenever the projected user content changes, or\n * when the explicit lines have been updated.\n *\n * @param recheckUnscopedContent Whether the projected unscoped content should be re-checked.\n * The unscoped content is not re-checked for every update as it is a rather expensive check\n * for content that is expected to not change very often.\n */\n _updateItemLines(recheckUnscopedContent: boolean) {\n // If the updated is triggered too early before the view and content is initialized,\n // we just skip the update. After view initialization the update is triggered again.\n if (!this._lines || !this._titles || !this._unscopedContent) {\n return;\n }\n\n // Re-check the DOM for unscoped text content if requested. This needs to\n // happen before any computation or sanity checks run as these rely on the\n // result of whether there is unscoped text content or not.\n if (recheckUnscopedContent) {\n this._checkDomForUnscopedTextContent();\n }\n\n // Sanity check the list item lines and title in the content. This is a dev-mode only\n // check that can be dead-code eliminated by Terser in production.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n sanityCheckListItemContent(this);\n }\n\n const numberOfLines = this._explicitLines ?? this._inferLinesFromContent();\n const unscopedContentEl = this._unscopedContent.nativeElement;\n\n // Update the list item element to reflect the number of lines.\n this._hostElement.classList.toggle('mat-mdc-list-item-single-line', numberOfLines <= 1);\n this._hostElement.classList.toggle('mdc-list-item--with-one-line', numberOfLines <= 1);\n this._hostElement.classList.toggle('mdc-list-item--with-two-lines', numberOfLines === 2);\n this._hostElement.classList.toggle('mdc-list-item--with-three-lines', numberOfLines === 3);\n\n // If there is no title and the unscoped content is the is the only line, the\n // unscoped text content will be treated as the title of the list-item.\n if (this._hasUnscopedTextContent) {\n const treatAsTitle = this._titles.length === 0 && numberOfLines === 1;\n unscopedContentEl.classList.toggle('mdc-list-item__primary-text', treatAsTitle);\n unscopedContentEl.classList.toggle('mdc-list-item__secondary-text', !treatAsTitle);\n } else {\n unscopedContentEl.classList.remove('mdc-list-item__primary-text');\n unscopedContentEl.classList.remove('mdc-list-item__secondary-text');\n }\n }\n\n /**\n * Infers the number of lines based on the projected user content. This is useful\n * if no explicit number of lines has been specified on the list item.\n *\n * The number of lines is inferred based on whether there is a title, the number of\n * additional lines (secondary/tertiary). An additional line is acquired if there is\n * unscoped text content.\n */\n private _inferLinesFromContent() {\n let numOfLines = this._titles!.length + this._lines!.length;\n if (this._hasUnscopedTextContent) {\n numOfLines += 1;\n }\n return numOfLines;\n }\n\n /** Checks whether the list item has unscoped text content. */\n private _checkDomForUnscopedTextContent() {\n this._hasUnscopedTextContent = Array.from<ChildNode>(\n this._unscopedContent!.nativeElement.childNodes,\n )\n .filter(node => node.nodeType !== node.COMMENT_NODE)\n .some(node => !!(node.textContent && node.textContent.trim()));\n }\n}\n\n/**\n * Sanity checks the configuration of the list item with respect to the amount\n * of lines, whether there is a title, or if there is unscoped text content.\n *\n * The checks are extracted into a top-level function that can be dead-code\n * eliminated by Terser or other optimizers in production mode.\n */\nfunction sanityCheckListItemContent(item: MatListItemBase) {\n const numTitles = item._titles!.length;\n const numLines = item._lines!.length;\n\n if (numTitles > 1) {\n console.warn('A list item cannot have multiple titles.');\n }\n if (numTitles === 0 && numLines > 0) {\n console.warn('A list item line can only be used if there is a list item title.');\n }\n if (\n numTitles === 0 &&\n item._hasUnscopedTextContent &&\n item._explicitLines !== null &&\n item._explicitLines > 1\n ) {\n console.warn('A list item cannot have wrapping content without a title.');\n }\n if (numLines > 2 || (numLines === 2 && item._hasUnscopedTextContent)) {\n console.warn('A list item can have at maximum three lines.');\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.dev/license\n */\n\nimport {Component, ViewEncapsulation} from '@angular/core';\nimport {MatListBase} from './list-base';\n\n@Component({\n selector: 'mat-action-list',\n exportAs: 'matActionList',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-mdc-action-list mat-mdc-list-base mdc-list',\n 'role': 'group',\n },\n styleUrl: 'list.css',\n encapsulation: ViewEncapsulation.None,\n providers: [{provide: MatListBase, useExisting: MatActionList}],\n})\nexport class MatActionList extends MatListBase {\n // An navigation list is considered interactive, but does not extend the interactive list\n // base class. We do this because as per MDC, items of interactive lists are only reachable\n // through keyboard shortcuts. We want all items for the navigation list to be reachable\n // through tab key as we do not intend to provide any special accessibility treatment. The\n // accessibility treatment depends on how the end-user will interact with it.\n override _isNonInteractive = false;\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.dev/license\n */\n\nimport {\n Component,\n Input,\n ContentChildren,\n ElementRef,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n InjectionToken,\n} from '@angular/core';\nimport {MatListBase, MatListItemBase} from './list-base';\nimport {MatListItemLine, MatListItemMeta, MatListItemTitle} from './list-item-sections';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {CdkObserveContent} from '@angular/cdk/observers';\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@Component({\n selector: 'mat-list',\n exportAs: 'matList',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-mdc-list mat-mdc-list-base mdc-list',\n },\n styleUrl: 'list.css',\n encapsulation: ViewEncapsulation.None,\n providers: [{provide: MatListBase, useExisting: MatList}],\n})\nexport class MatList extends MatListBase {}\n\n@Component({\n selector: 'mat-list-item, a[mat-list-item], button[mat-list-item]',\n exportAs: 'matListItem',\n host: {\n 'class': 'mat-mdc-list-item mdc-list-item',\n '[class.mdc-list-item--activated]': 'activated',\n '[class.mdc-list-item--with-leading-avatar]': '_avatars.length !== 0',\n '[class.mdc-list-item--with-leading-icon]': '_icons.length !== 0',\n '[class.mdc-list-item--with-trailing-meta]': '_meta.length !== 0',\n // Utility class that makes it easier to target the case where there's both a leading\n // and a trailing icon. Avoids having to write out all the combinations.\n '[class.mat-mdc-list-item-both-leading-and-trailing]': '_hasBothLeadingAndTrailing()',\n '[class._mat-animation-noopable]': '_noopAnimations',\n '[attr.aria-current]': '_getAriaCurrent()',\n },\n templateUrl: 'list-item.html',\n encapsulation: ViewEncapsulation.None,\n imports: [CdkObserveContent],\n})\nexport class MatListItem extends MatListItemBase {\n @ContentChildren(MatListItemLine, {descendants: true}) _lines!: QueryList<MatListItemLine>;\n @ContentChildren(MatListItemTitle, {descendants: true}) _titles!: QueryList<MatListItemTitle>;\n @ContentChildren(MatListItemMeta, {descendants: true}) _meta!: QueryList<MatListItemMeta>;\n @ViewChild('unscopedContent') _unscopedContent!: ElementRef<HTMLSpanElement>;\n @ViewChild('text') _itemText!: ElementRef<HTMLElement>;\n\n /** Indicates whether an item in a `<mat-nav-list>` is the currently active page. */\n @Input()\n get activated(): boolean {\n return this._activated;\n }\n set activated(activated) {\n this._activated = coerceBooleanProperty(activated);\n }\n _activated = false;\n\n /**\n * Determine the value of `aria-current`. Return 'page' if this item is an activated anchor tag.\n * Otherwise, return `null`. This method is safe to use with server-side rendering.\n */\n _getAriaCurrent(): string | null {\n return this._hostElement.nodeName === 'A' && this._activated ? 'page' : null;\n }\n\n protected _hasBothLeadingAndTrailing(): boolean {\n return this._meta.length !== 0 && (this._avatars.length !== 0 || this._icons.length !== 0);\n }\n}\n","<ng-content select=\"[matListItemAvatar],[matListItemIcon]\"></ng-content>\n\n<span class=\"mdc-list-item__content\">\n <ng-content select=\"[matListItemTitle]\"></ng-content>\n <ng-content select=\"[matListItemLine]\"></ng-content>\n <span #unscopedContent class=\"mat-mdc-list-item-unscoped-content\"\n (cdkObserveContent)=\"_updateItemLines(true)\">\n <ng-content></ng-content>\n </span>\n</span>\n\n<ng-content select=\"[matListItemMeta]\"></ng-content>\n\n<ng-content select=\"mat-divider\"></ng-content>\n\n<!--\n Strong focus indicator element. MDC uses the `::before` pseudo element for the default\n focus/hover/selected state, so we need a separate element.\n-->\n<div class=\"mat-focus-indicator\"></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.dev/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {ThemePalette} from '../core';\nimport {MatListBase, MatListItemBase} from './list-base';\nimport {LIST_OPTION, ListOption, MatListOptionTogglePosition} from './list-option-types';\nimport {MatListItemLine, MatListItemTitle} from './list-item-sections';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {CdkObserveContent} from '@angular/cdk/observers';\n\n/**\n * Injection token that can be used to reference instances of an `SelectionList`. It serves\n * as alternative token to an actual implementation which would result in circular references.\n * @docs-private\n */\nexport const SELECTION_LIST = new InjectionToken<SelectionList>('SelectionList');\n\n/**\n * Interface describing the containing list of a list option. This is used to avoid\n * circular dependencies between the list-option and the selection list.\n * @docs-private\n */\nexport interface SelectionList extends MatListBase {\n multiple: boolean;\n color: ThemePalette;\n selectedOptions: SelectionModel<MatListOption>;\n hideSingleSelectionIndicator: boolean;\n compareWith: (o1: any, o2: any) => boolean;\n _value: string[] | null;\n _reportValueChange(): void;\n _emitChangeEvent(options: MatListOption[]): void;\n _onTouched(): void;\n}\n\n@Component({\n selector: 'mat-list-option',\n exportAs: 'matListOption',\n styleUrl: 'list-option.css',\n host: {\n 'class': 'mat-mdc-list-item mat-mdc-list-option mdc-list-item',\n 'role': 'option',\n // As per MDC, only list items without checkbox or radio indicator should receive the\n // `--selected` class.\n '[class.mdc-list-item--selected]':\n 'selected && !_selectionList.multiple && _selectionList.hideSingleSelectionIndicator',\n // Based on the checkbox/radio position and whether there are icons or avatars, we apply MDC's\n // list-item `--leading` and `--trailing` classes.\n '[class.mdc-list-item--with-leading-avatar]': '_hasProjected(\"avatars\", \"before\")',\n '[class.mdc-list-item--with-leading-icon]': '_hasProjected(\"icons\", \"before\")',\n '[class.mdc-list-item--with-trailing-icon]': '_hasProjected(\"icons\", \"after\")',\n '[class.mat-mdc-list-option-with-trailing-avatar]': '_hasProjected(\"avatars\", \"after\")',\n // Based on the checkbox/radio position, we apply the `--leading` or `--trailing` MDC classes\n // which ensure that the checkbox/radio is positioned correctly within the list item.\n '[class.mdc-list-item--with-leading-checkbox]': '_hasCheckboxAt(\"before\")',\n '[class.mdc-list-item--with-trailing-checkbox]': '_hasCheckboxAt(\"after\")',\n '[class.mdc-list-item--with-leading-radio]': '_hasRadioAt(\"before\")',\n '[class.mdc-list-item--with-trailing-radio]': '_hasRadioAt(\"after\")',\n\n // Utility class that makes it easier to target the case where there's both a leading\n // and a trailing icon. Avoids having to write out all the combinations.\n '[class.mat-mdc-list-item-both-leading-and-trailing]': '_hasBothLeadingAndTrailing()',\n '[class.mat-accent]': 'color !== \"primary\" && color !== \"warn\"',\n '[class.mat-warn]': 'color === \"warn\"',\n '[class._mat-animation-noopable]': '_noopAnimations',\n '[attr.aria-selected]': 'selected',\n '(blur)': '_handleBlur()',\n '(click)': '_toggleOnInteraction()',\n },\n templateUrl: 'list-option.html',\n encapsulation: ViewEncapsulation.None,\n providers: [\n {provide: MatListItemBase, useExisting: MatListOption},\n {provide: LIST_OPTION, useExisting: MatListOption},\n ],\n imports: [NgTemplateOutlet, CdkObserveContent],\n})\nexport class MatListOption extends MatListItemBase implements ListOption, OnInit, OnDestroy {\n protected _selectionList = inject<SelectionList>(SELECTION_LIST);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n @ContentChildren(MatListItemLine, {descendants: true}) _lines!: QueryList<MatListItemLine>;\n @ContentChildren(MatListItemTitle, {descendants: true}) _titles!: QueryList<MatListItemTitle>;\n @ViewChild('unscopedContent') _unscopedContent!: ElementRef<HTMLSpanElement>;\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 /** Whether the label should appear before or after the checkbox/radio. Defaults to 'after' */\n @Input() togglePosition: MatListOptionTogglePosition = 'after';\n\n /**\n * Theme color of the list option. This sets the color of the checkbox/radio.\n * This API is supported in M2 themes only, it has no effect in M3 themes. For color customization\n * in M3, see https://material.angular.dev/components/list/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n */\n @Input()\n get color(): ThemePalette {\n return this._color || this._selectionList.color;\n }\n set color(newValue: ThemePalette) {\n this._color = newValue;\n }\n private _color: ThemePalette;\n\n /** Value of the option */\n @Input()\n get value(): any {\n return this._value;\n }\n set value(newValue: any) {\n if (this.selected && newValue !== this.value && this._inputsInitialized) {\n this.selected = false;\n }\n\n this._value = newValue;\n }\n private _value: any;\n\n /** Whether the option is selected. */\n @Input()\n get selected(): boolean {\n return this._selectionList.selectedOptions.isSelected(this);\n }\n set selected(value: BooleanInput) {\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 private _selected = false;\n\n /**\n * This is set to true after the first OnChanges cycle so we don't\n * clear the value of `selected` in the first cycle.\n */\n private _inputsInitialized = false;\n\n ngOnInit() {\n const list = this._selectionList;\n\n if (list._value && list._value.some(value => list.compareWith(this._value, 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._changeDetectorRef.markForCheck();\n }\n });\n this._inputsInitialized = true;\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n\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\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._hostElement.focus();\n }\n\n /** Gets the text label of the list option. Used for the typeahead functionality in the list. */\n getLabel() {\n const titleElement = this._titles?.get(0)?._elementRef.nativeElement;\n // If there is no explicit title element, the unscoped text content\n // is treated as the list item title.\n const labelEl = titleElement || this._unscopedContent?.nativeElement;\n return labelEl?.textContent || '';\n }\n\n /** Whether a checkbox is shown at the given position. */\n _hasCheckboxAt(position: MatListOptionTogglePosition): boolean {\n return this._selectionList.multiple && this._getTogglePosition() === position;\n }\n\n /** Where a radio indicator is shown at the given position. */\n _hasRadioAt(position: MatListOptionTogglePosition): boolean {\n return (\n !this._selectionList.multiple &&\n this._getTogglePosition() === position &&\n !this._selectionList.hideSingleSelectionIndicator\n );\n }\n\n /** Whether icons or avatars are shown at the given position. */\n _hasIconsOrAvatarsAt(position: 'before' | 'after'): boolean {\n return this._hasProjected('icons', position) || this._hasProjected('avatars', position);\n }\n\n /** Gets whether the given type of element is projected at the specified position. */\n _hasProjected(type: 'icons' | 'avatars', position: 'before' | 'after'): boolean {\n // If the checkbox/radio is shown at the specified position, neither icons or\n // avatars can be shown at the position.\n return (\n this._getTogglePosition() !== position &&\n (type === 'avatars' ? this._avatars.length !== 0 : this._icons.length !== 0)\n );\n }\n\n _handleBlur() {\n this._selectionList._onTouched();\n }\n\n /** Gets the current position of the checkbox/radio. */\n _getTogglePosition() {\n return this.togglePosition || 'after';\n }\n\n /**\n * Sets the selected state of the option.\n * @returns Whether the value has changed.\n */\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._changeDetectorRef.markForCheck();\n return true;\n }\n\n /**\n * Notifies Angular that the option needs to be checked in the next change detection run.\n * Mainly used to trigger an update of the list option if the disabled state of the selection\n * list changed.\n */\n _markForCheck() {\n this._changeDetectorRef.markForCheck();\n }\n\n /** Toggles the option's value based on a user interaction. */\n _toggleOnInteraction() {\n if (!this.disabled) {\n if (this._selectionList.multiple) {\n this.selected = !this.selected;\n this._selectionList._emitChangeEvent([this]);\n } else if (!this.selected) {\n this.selected = true;\n this._selectionList._emitChangeEvent([this]);\n }\n }\n }\n\n /** Sets the tabindex of the list option. */\n _setTabindex(value: number) {\n this._hostElement.setAttribute('tabindex', value + '');\n }\n\n protected _hasBothLeadingAndTrailing(): boolean {\n const hasLeading =\n this._hasProjected('avatars', 'before') ||\n this._hasProjected('icons', 'before') ||\n this._hasCheckboxAt('before') ||\n this._hasRadioAt('before');\n const hasTrailing =\n this._hasProjected('icons', 'after') ||\n this._hasProjected('avatars', 'after') ||\n this._hasCheckboxAt('after') ||\n this._hasRadioAt('after');\n return hasLeading && hasTrailing;\n }\n}\n","<!--\n Save icons and the pseudo checkbox/radio so that they can be re-used in the template without\n duplication. Also content can only be injected once so we need to extract icons/avatars\n into a template since we use it in multiple places.\n-->\n<ng-template #icons>\n <ng-content select=\"[matListItemAvatar],[matListItemIcon]\">\n </ng-content>\n</ng-template>\n\n<ng-template #checkbox>\n <div class=\"mdc-checkbox\" [class.mdc-checkbox--disabled]=\"disabled\">\n <input type=\"checkbox\" class=\"mdc-checkbox__native-control\"\n [checked]=\"selected\" [disabled]=\"disabled\"/>\n <div class=\"mdc-checkbox__background\">\n <svg class=\"mdc-checkbox__checkmark\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\">\n <path class=\"mdc-checkbox__checkmark-path\"\n fill=\"none\"\n d=\"M1.73,12.91 8.1,19.28 22.79,4.59\"/>\n </svg>\n <div class=\"mdc-checkbox__mixedmark\"></div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #radio>\n <div class=\"mdc-radio\" [class.mdc-radio--disabled]=\"disabled\">\n <input type=\"radio\" class=\"mdc-radio__native-control\"\n [checked]=\"selected\" [disabled]=\"disabled\"/>\n <div class=\"mdc-radio__background\">\n <div class=\"mdc-radio__outer-circle\"></div>\n <div class=\"mdc-radio__inner-circle\"></div>\n </div>\n </div>\n</ng-template>\n\n@if (_hasCheckboxAt('before')) {\n <!-- Container for the checkbox at start. -->\n <span class=\"mdc-list-item__start mat-mdc-list-option-checkbox-before\">\n <ng-template [ngTemplateOutlet]=\"checkbox\"></ng-template>\n </span>\n} @else if (_hasRadioAt('before')) {\n <!-- Container for the radio at the start. -->\n <span class=\"mdc-list-item__start mat-mdc-list-option-radio-before\">\n <ng-template [ngTemplateOutlet]=\"radio\"></ng-template>\n </span>\n}\n<!-- Conditionally renders icons/avatars before the list item text. -->\n@if (_hasIconsOrAvatarsAt('before')) {\n <ng-template [ngTemplateOutlet]=\"icons\"></ng-template>\n}\n\n<!-- Text -->\n<span class=\"mdc-list-item__content\">\n <ng-content select=\"[matListItemTitle]\"></ng-content>\n <ng-content select=\"[matListItemLine]\"></ng-content>\n <span #unscopedContent class=\"mat-mdc-list-item-unscoped-content\"\n (cdkObserveContent)=\"_updateItemLines(true)\">\n <ng-content></ng-content>\n </span>\n</span>\n\n@if (_hasCheckboxAt('after')) {\n <!-- Container for the checkbox at the end. -->\n <span class=\"mdc-list-item__end\">\n <ng-template [ngTemplateOutlet]=\"checkbox\"></ng-template>\n </span>\n} @else if (_hasRadioAt('after')) {\n <!-- Container for the radio at the end. -->\n <span class=\"mdc-list-item__end\">\n <ng-template [ngTemplateOutlet]=\"radio\"></ng-template>\n </span>\n}\n\n<!-- Conditionally renders icons/avatars after the list item text. -->\n@if (_hasIconsOrAvatarsAt('after')) {\n <ng-template [ngTemplateOutlet]=\"icons\"></ng-template>\n}\n\n<!-- Divider -->\n<ng-content select=\"mat-divider\"></ng-content>\n\n<!--\n Strong focus indicator element. MDC uses the `::before` pseudo element for the default\n focus/hover/selected state, so we need a separate element.\n-->\n<div class=\"mat-focus-indicator\"></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.dev/license\n */\n\nimport {Directive} from '@angular/core';\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 // TODO(mmalerba): MDC's subheader font looks identical to the list item font, figure out why and\n // make a change in one of the repos to visually distinguish.\n host: {'class': 'mat-mdc-subheader mdc-list-group__subheader'},\n})\nexport class MatListSubheaderCssMatStyler {}\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.dev/license\n */\n\nimport {Component, InjectionToken, ViewEncapsulation} from '@angular/core';\nimport {MatListBase} from './list-base';\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 template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-mdc-nav-list mat-mdc-list-base mdc-list',\n 'role': 'navigation',\n },\n styleUrl: 'list.css',\n encapsulation: ViewEncapsulation.None,\n providers: [{provide: MatListBase, useExisting: MatNavList}],\n})\nexport class MatNavList extends MatListBase {\n // An navigation list is considered interactive, but does not extend the interactive list\n // base class. We do this because as per MDC, items of interactive lists are only reachable\n // through keyboard shortcuts. We want all items for the navigation list to be reachable\n // through tab key as we do not intend to provide any special accessibility treatment. The\n // accessibility treatment depends on how the end-user will interact with it.\n override _isNonInteractive = false;\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.dev/license\n */\n\nimport {FocusKeyManager} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {A, ENTER, SPACE, DOWN_ARROW, UP_ARROW, hasModifierKey} from '@angular/cdk/keycodes';\nimport {_getFocusedElementPierceShadowDom} from '@angular/cdk/platform';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation,\n forwardRef,\n inject,\n signal,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {ThemePalette} from '../core';\nimport {Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {MatListBase} from './list-base';\nimport {MatListOption, SELECTION_LIST, SelectionList} from './list-option';\n\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 /** Reference to the options that have been changed. */\n public options: MatListOption[],\n ) {}\n}\n\n@Component({\n selector: 'mat-selection-list',\n exportAs: 'matSelectionList',\n host: {\n 'class': 'mat-mdc-selection-list mat-mdc-list-base mdc-list',\n 'role': 'listbox',\n '[attr.aria-multiselectable]': 'multiple',\n '(keydown)': '_handleKeydown($event)',\n },\n template: '<ng-content></ng-content>',\n styleUrl: 'list.css',\n encapsulation: ViewEncapsulation.None,\n providers: [\n MAT_SELECTION_LIST_VALUE_ACCESSOR,\n {provide: MatListBase, useExisting: MatSelectionList},\n {provide: SELECTION_LIST, useExisting: MatSelectionList},\n ],\n})\nexport class MatSelectionList\n extends MatListBase\n implements SelectionList, ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy\n{\n _element = inject<ElementRef<HTMLElement>>(ElementRef);\n private _ngZone = inject(NgZone);\n private _renderer = inject(Renderer2);\n\n private _initialized = false;\n private _keyManager!: FocusKeyManager<MatListOption>;\n private _listenerCleanups: (() => void)[] | undefined;\n\n /** Emits when the list has been destroyed. */\n private _destroyed = new Subject<void>();\n\n /** Whether the list has been destroyed. */\n private _isDestroyed = false;\n\n /** View to model callback that should be called whenever the selected options change. */\n private _onChange: (value: any) => void = (_: any) => {};\n\n @ContentChildren(MatListOption, {descendants: true}) _items!: 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 * Theme color of the selection list. This sets the checkbox color for all\n * list options. This API is supported in M2 themes only, it has no effect in\n * M3 themes. For color customization in M3, see https://material.angular.dev/components/list/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n */\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 selection is limited to one or multiple items (default multiple). */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n set multiple(value: BooleanInput) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._multiple) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && this._initialized) {\n throw new Error(\n 'Cannot change `multiple` mode of mat-selection-list after initialization.',\n );\n }\n\n this._multiple = newValue;\n this.selectedOptions = new SelectionModel(this._multiple, this.selectedOptions.selected);\n }\n }\n private _multiple = true;\n\n /** Whether radio indicator for all list items is hidden. */\n @Input()\n get hideSingleSelectionIndicator(): boolean {\n return this._hideSingleSelectionIndicator;\n }\n set hideSingleSelectionIndicator(value: BooleanInput) {\n this._hideSingleSelectionIndicator = coerceBooleanProperty(value);\n }\n private _hideSingleSelectionIndicator: boolean =\n this._defaultOptions?.hideSingleSelectionIndicator ?? false;\n\n /** The currently selected options. */\n selectedOptions = new SelectionModel<MatListOption>(this._multiple);\n\n /** Keeps track of the currently-selected value. */\n _value: string[] | null = null;\n\n /** View to model callback that should be called if the list or its options lost focus. */\n _onTouched: () => void = () => {};\n\n private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n\n constructor() {\n super();\n this._isNonInteractive = false;\n }\n\n ngAfterViewInit() {\n // Mark the selection list as initialized so that the `multiple`\n // binding can no longer be changed.\n this._initialized = true;\n this._setupRovingTabindex();\n\n // These events are bound outside the zone, because they don't change\n // any change-detected properties and they can trigger timeouts.\n this._ngZone.runOutsideAngular(() => {\n this._listenerCleanups = [\n this._renderer.listen(this._element.nativeElement, 'focusin', this._handleFocusin),\n this._renderer.listen(this._element.nativeElement, 'focusout', this._handleFocusout),\n ];\n });\n\n if (this._value) {\n this._setOptionsFromValues(this._value);\n }\n\n this._watchForSelectionChange();\n }\n\n ngOnChanges(changes: SimpleChanges<this>) {\n const disabledChanges = changes['disabled'];\n const disableRippleChanges = changes['disableRipple'];\n const hideSingleSelectionIndicatorChanges = changes['hideSingleSelectionIndicator'];\n\n if (\n (disableRippleChanges && !disableRippleChanges.firstChange) ||\n (disabledChanges && !disabledChanges.firstChange) ||\n (hideSingleSelectionIndicatorChanges && !hideSingleSelectionIndicatorChanges.firstChange)\n ) {\n this._markOptionsForCheck();\n }\n }\n\n ngOnDestroy() {\n this._keyManager?.destroy();\n this._listenerCleanups?.forEach(current => current());\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 /** 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));\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 this._changeDetectorRef.markForCheck();\n this._markOptionsForCheck();\n }\n\n /**\n * Whether the *entire* selection list is disabled. When true, each list item is also disabled\n * and each list item is removed from the tab order (has tabindex=\"-1\").\n */\n @Input()\n override get disabled(): boolean {\n return this._selectionListDisabled();\n }\n override set disabled(value: BooleanInput) {\n // Update the disabled state of this list. Write to `this._selectionListDisabled` instead of\n // `super.disabled`. That is to avoid closure compiler compatibility issues with assigning to\n // a super property.\n this._selectionListDisabled.set(coerceBooleanProperty(value));\n if (this._selectionListDisabled()) {\n this._keyManager?.setActiveItem(-1);\n }\n }\n private _selectionListDisabled = signal(false);\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 /** Watches for changes in the selected state of the options and updates the list accordingly. */\n private _watchForSelectionChange() {\n this.selectedOptions.changed.pipe(takeUntil(this._destroyed)).subscribe(event => {\n // Sync external changes to the model back to the options.\n for (let item of event.added) {\n item.selected = true;\n }\n\n for (let item of event.removed) {\n item.selected = false;\n }\n\n if (!this._containsFocus()) {\n this._resetActiveOption();\n }\n });\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 /** 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 * Sets the selected state on all of the options\n * and emits an event if anything changed.\n */\n private _setAllOptionsSelected(isSelected: boolean, skipDisabled?: 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\n return changedOptions;\n }\n\n // Note: This getter exists for backwards compatibility. The `_items` query list\n // cannot be named `options` as it will be picked up by the interactive list base.\n /** The option components contained within this selection-list. */\n get options(): QueryList<MatListOption> {\n return this._items;\n }\n\n /** Handles keydown events within the list. */\n _handleKeydown(event: KeyboardEvent) {\n const activeItem = this._keyManager.activeItem;\n\n if (activeItem && (event.keyCode === DOWN_ARROW || event.keyCode === UP_ARROW)) {\n const focusedElement = _getFocusedElementPierceShadowDom();\n const isOptionFocused = this._items\n .toArray()\n .some(item => item._elementRef.nativeElement === focusedElement);\n if (!isOptionFocused) {\n event.preventDefault();\n activeItem.focus();\n return;\n }\n }\n\n if (\n (event.keyCode === ENTER || event.keyCode === SPACE) &&\n !this._keyManager.isTyping() &&\n activeItem &&\n !activeItem.disabled\n ) {\n event.preventDefault();\n activeItem._toggleOnInteraction();\n } else if (\n event.keyCode === A &&\n this.multiple &&\n !this._keyManager.isTyping() &&\n hasModifierKey(event, 'ctrlKey', 'metaKey')\n ) {\n const shouldSelect = this.options.some(option => !option.disabled && !option.selected);\n event.preventDefault();\n this._emitChangeEvent(this._setAllOptionsSelected(shouldSelect, true));\n } else {\n this._keyManager.onKeydown(event);\n }\n }\n\n /** Handles focusout events within the list. */\n private _handleFocusout = () => {\n // Focus takes a while to update so we have to wrap our call in a timeout.\n setTimeout(() => {\n if (!this._containsFocus()) {\n this._resetActiveOption();\n }\n });\n };\n\n /** Handles focusin events within the list. */\n private _handleFocusin = (event: FocusEvent) => {\n const activeIndex = this._items\n .toArray()\n .findIndex(item => item._elementRef.nativeElement.contains(event.target as HTMLElement));\n\n if (activeIndex > -1) {\n this._setActiveOption(activeIndex);\n } else {\n this._resetActiveOption();\n }\n };\n\n /**\n * Sets up the logic for maintaining the roving tabindex.\n *\n * `skipPredicate` determines if key manager should avoid putting a given list item in the tab\n * index. Allow disabled list items to receive focus to align with WAI ARIA recommendation.\n * Normally WAI ARIA's instructions are to exclude disabled items from the tab order, but it\n * makes a few exceptions for compound widgets.\n *\n * From [Developing a Keyboard Interface](\n * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/):\n * \"For the following composite widget elements, keep them focusable when disabled: Options in a\n * Listbox...\"\n */\n private _setupRovingTabindex() {\n this._keyManager = new FocusKeyManager(this._items)\n .withHomeAndEnd()\n .withTypeAhead()\n .withWrap()\n .skipPredicate(() => false);\n\n // Set the initial focus.\n this._resetActiveOption();\n\n // Move the tabindex to the currently-focused list item.\n this._keyManager.change.subscribe(activeItemIndex => this._setActiveOption(activeItemIndex));\n\n // If the active item is removed from the list, reset back to the first one.\n this._items.changes.pipe(takeUntil(this._destroyed)).subscribe(() => {\n const activeItem = this._keyManager.activeItem;\n\n if (!activeItem || this._items.toArray().indexOf(activeItem) === -1) {\n this._resetActiveOption();\n }\n });\n }\n\n /**\n * Sets an option as active.\n * @param index Index of the active option. If set to -1, no option will be active.\n */\n private _setActiveOption(index: number) {\n this._items.forEach((item, itemIndex) => {\n let tabindex = -1;\n\n if (!this.disabled && itemIndex === index) {\n tabindex = 0;\n }\n\n item._setTabindex(tabindex);\n });\n this._keyManager.updateActiveItem(index);\n }\n\n /**\n * Resets the active option. When the list is disabled, remove all options from to the tab order.\n * Otherwise, focus the first selected option.\n */\n private _resetActiveOption() {\n if (this.disabled) {\n const activeItem = this._items.find(item => item.selected) || this._items.first;\n const index = activeItem ? this._items.toArray().indexOf(activeItem) : -1;\n this._setActiveOption(index);\n return;\n }\n\n const activeItem =\n this._items.find(item => item.selected && !item.disabled) || this._items.first;\n this._setActiveOption(activeItem ? this._items.toArray().indexOf(activeItem) : -1);\n }\n\n /** Returns whether the focus is currently within the list. */\n private _containsFocus() {\n const activeElement = _getFocusedElementPierceShadowDom();\n return activeElement && this._element.nativeElement.contains(activeElement);\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.dev/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatPseudoCheckboxModule, MatRippleModule} from '../core';\nimport {MatDividerModule, MatDivider} from '../divider';\nimport {MatActionList} from './action-list';\nimport {MatList, MatListItem} from './list';\nimport {MatListOption} from './list-option';\nimport {MatListSubheaderCssMatStyler} from './subheader';\nimport {\n MatListItemLine,\n MatListItemTitle,\n MatListItemMeta,\n MatListItemAvatar,\n MatListItemIcon,\n} from './list-item-sections';\nimport {MatNavList} from './nav-list';\nimport {MatSelectionList} from './selection-list';\nimport {ObserversModule} from '@angular/cdk/observers';\nimport {BidiModule} from '@angular/cdk/bidi';\n\n// Export required to fix compiler confusion about import module paths\nexport {MatDivider};\n\n@NgModule({\n imports: [\n ObserversModule,\n MatRippleModule,\n MatPseudoCheckboxModule,\n MatList,\n MatActionList,\n MatNavList,\n MatSelectionList,\n MatListItem,\n MatListOption,\n MatListSubheaderCssMatStyler,\n MatListItemAvatar,\n MatListItemIcon,\n MatListItemLine,\n MatListItemTitle,\n MatListItemMeta,\n ],\n exports: [\n BidiModule,\n MatList,\n MatActionList,\n MatNavList,\n MatSelectionList,\n MatListItem,\n MatListOption,\n MatListItemAvatar,\n MatListItemIcon,\n MatListSubheaderCssMatStyler,\n MatDividerModule,\n MatListItemLine,\n MatListItemTitle,\n MatListItemMeta,\n ],\n})\nexport class MatListModule {}\n"],"names":[],"mappings":"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"}