UNPKG

@angular/material

Version:
750 lines (741 loc) 42.7 kB
import * as i0 from '@angular/core'; import { InjectionToken, inject, TemplateRef, Directive, ViewContainerRef, DOCUMENT, NgZone, ElementRef, Renderer2, EventEmitter, booleanAttribute, ViewChild, ContentChild, Output, Input, ChangeDetectionStrategy, ViewEncapsulation, Component, ChangeDetectorRef, HostAttributeToken, numberAttribute, QueryList, ContentChildren, NgModule } from '@angular/core'; import { CdkAccordionItem, CdkAccordion, CdkAccordionModule } from '@angular/cdk/accordion'; import { UniqueSelectionDispatcher } from '@angular/cdk/collections'; import { TemplatePortal, CdkPortalOutlet, PortalModule } from '@angular/cdk/portal'; import { _IdGenerator, FocusMonitor, FocusKeyManager } from '@angular/cdk/a11y'; import { Subject, Subscription, EMPTY, merge } from 'rxjs'; import { startWith, filter, take } from 'rxjs/operators'; import { _animationsDisabled } from './_animation-chunk.mjs'; import { ENTER, hasModifierKey, SPACE } from '@angular/cdk/keycodes'; import { _CdkPrivateStyleLoader } from '@angular/cdk/private'; import { _StructuralStylesLoader } from './_structural-styles-chunk.mjs'; import { BidiModule } from '@angular/cdk/bidi'; import '@angular/cdk/layout'; const MAT_ACCORDION = new InjectionToken('MAT_ACCORDION'); const MAT_EXPANSION_PANEL = new InjectionToken('MAT_EXPANSION_PANEL'); class MatExpansionPanelContent { _template = inject(TemplateRef); _expansionPanel = inject(MAT_EXPANSION_PANEL, { optional: true }); constructor() {} static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanelContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.0-next.5", type: MatExpansionPanelContent, isStandalone: true, selector: "ng-template[matExpansionPanelContent]", ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanelContent, decorators: [{ type: Directive, args: [{ selector: 'ng-template[matExpansionPanelContent]' }] }], ctorParameters: () => [] }); const MAT_EXPANSION_PANEL_DEFAULT_OPTIONS = new InjectionToken('MAT_EXPANSION_PANEL_DEFAULT_OPTIONS'); class MatExpansionPanel extends CdkAccordionItem { _viewContainerRef = inject(ViewContainerRef); _animationsDisabled = _animationsDisabled(); _document = inject(DOCUMENT); _ngZone = inject(NgZone); _elementRef = inject(ElementRef); _renderer = inject(Renderer2); _cleanupTransitionEnd; get hideToggle() { return this._hideToggle || this.accordion && this.accordion.hideToggle; } set hideToggle(value) { this._hideToggle = value; } _hideToggle = false; get togglePosition() { return this._togglePosition || this.accordion && this.accordion.togglePosition; } set togglePosition(value) { this._togglePosition = value; } _togglePosition; afterExpand = new EventEmitter(); afterCollapse = new EventEmitter(); _inputChanges = new Subject(); accordion = inject(MAT_ACCORDION, { optional: true, skipSelf: true }); _lazyContent; _body; _bodyWrapper; _portal; _headerId = inject(_IdGenerator).getId('mat-expansion-panel-header-'); constructor() { super(); const defaultOptions = inject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, { optional: true }); this._expansionDispatcher = inject(UniqueSelectionDispatcher); if (defaultOptions) { this.hideToggle = defaultOptions.hideToggle; } } _hasSpacing() { if (this.accordion) { return this.expanded && this.accordion.displayMode === 'default'; } return false; } _getExpandedState() { return this.expanded ? 'expanded' : 'collapsed'; } toggle() { this.expanded = !this.expanded; } close() { this.expanded = false; } open() { this.expanded = true; } ngAfterContentInit() { if (this._lazyContent && this._lazyContent._expansionPanel === this) { this.opened.pipe(startWith(null), filter(() => this.expanded && !this._portal), take(1)).subscribe(() => { this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef); }); } this._setupAnimationEvents(); } ngOnChanges(changes) { this._inputChanges.next(changes); } ngOnDestroy() { super.ngOnDestroy(); this._cleanupTransitionEnd?.(); this._inputChanges.complete(); } _containsFocus() { if (this._body) { const focusedElement = this._document.activeElement; const bodyElement = this._body.nativeElement; return focusedElement === bodyElement || bodyElement.contains(focusedElement); } return false; } _transitionEndListener = ({ target, propertyName }) => { if (target === this._bodyWrapper?.nativeElement && propertyName === 'grid-template-rows') { this._ngZone.run(() => { if (this.expanded) { this.afterExpand.emit(); } else { this.afterCollapse.emit(); } }); } }; _setupAnimationEvents() { this._ngZone.runOutsideAngular(() => { if (this._animationsDisabled) { this.opened.subscribe(() => this._ngZone.run(() => this.afterExpand.emit())); this.closed.subscribe(() => this._ngZone.run(() => this.afterCollapse.emit())); } else { setTimeout(() => { const element = this._elementRef.nativeElement; this._cleanupTransitionEnd = this._renderer.listen(element, 'transitionend', this._transitionEndListener); element.classList.add('mat-expansion-panel-animations-enabled'); }, 200); } }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanel, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "22.0.0-next.5", type: MatExpansionPanel, isStandalone: true, selector: "mat-expansion-panel", inputs: { hideToggle: ["hideToggle", "hideToggle", booleanAttribute], togglePosition: "togglePosition" }, outputs: { afterExpand: "afterExpand", afterCollapse: "afterCollapse" }, host: { properties: { "class.mat-expanded": "expanded", "class.mat-expansion-panel-spacing": "_hasSpacing()" }, classAttribute: "mat-expansion-panel" }, providers: [{ provide: MAT_ACCORDION, useValue: undefined }, { provide: MAT_EXPANSION_PANEL, useExisting: MatExpansionPanel }], queries: [{ propertyName: "_lazyContent", first: true, predicate: MatExpansionPanelContent, descendants: true }], viewQueries: [{ propertyName: "_body", first: true, predicate: ["body"], descendants: true }, { propertyName: "_bodyWrapper", first: true, predicate: ["bodyWrapper"], descendants: true }], exportAs: ["matExpansionPanel"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-content select=\"mat-expansion-panel-header\"></ng-content>\n<div class=\"mat-expansion-panel-content-wrapper\" [attr.inert]=\"expanded ? null : ''\" #bodyWrapper>\n <div class=\"mat-expansion-panel-content\"\n role=\"region\"\n [attr.aria-labelledby]=\"_headerId\"\n [id]=\"id\"\n #body>\n <div class=\"mat-expansion-panel-body\">\n <ng-content></ng-content>\n <ng-template [cdkPortalOutlet]=\"_portal\"></ng-template>\n </div>\n <ng-content select=\"mat-action-row\"></ng-content>\n </div>\n</div>\n", styles: [".mat-expansion-panel {\n box-sizing: content-box;\n display: block;\n margin: 0;\n overflow: hidden;\n}\n.mat-expansion-panel.mat-expansion-panel-animations-enabled {\n transition: margin 225ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.mat-expansion-panel {\n position: relative;\n background: var(--mat-expansion-container-background-color, var(--mat-sys-surface));\n color: var(--mat-expansion-container-text-color, var(--mat-sys-on-surface));\n border-radius: var(--mat-expansion-container-shape, 12px);\n}\n.mat-expansion-panel:not([class*=mat-elevation-z]) {\n box-shadow: var(--mat-expansion-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));\n}\n.mat-accordion .mat-expansion-panel:not(.mat-expanded), .mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing) {\n border-radius: 0;\n}\n.mat-accordion .mat-expansion-panel:first-of-type {\n border-top-right-radius: var(--mat-expansion-container-shape, 12px);\n border-top-left-radius: var(--mat-expansion-container-shape, 12px);\n}\n.mat-accordion .mat-expansion-panel:last-of-type {\n border-bottom-right-radius: var(--mat-expansion-container-shape, 12px);\n border-bottom-left-radius: var(--mat-expansion-container-shape, 12px);\n}\n@media (forced-colors: active) {\n .mat-expansion-panel {\n outline: solid 1px;\n }\n}\n\n.mat-expansion-panel-content-wrapper {\n display: grid;\n grid-template-rows: 0fr;\n grid-template-columns: 100%;\n}\n.mat-expansion-panel-animations-enabled .mat-expansion-panel-content-wrapper {\n transition: grid-template-rows 225ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper {\n grid-template-rows: 1fr;\n}\n@supports not (grid-template-rows: 0fr) {\n .mat-expansion-panel-content-wrapper {\n height: 0;\n }\n .mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper {\n height: auto;\n }\n}\n@media print {\n .mat-expansion-panel-content-wrapper {\n height: 0;\n }\n .mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper {\n height: auto;\n }\n}\n\n.mat-expansion-panel-content {\n display: flex;\n flex-direction: column;\n overflow: visible;\n min-height: 0;\n visibility: hidden;\n}\n.mat-expansion-panel-animations-enabled .mat-expansion-panel-content {\n transition: visibility 190ms linear;\n}\n.mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper > .mat-expansion-panel-content {\n visibility: visible;\n}\n.mat-expansion-panel-content {\n font-family: var(--mat-expansion-container-text-font, var(--mat-sys-body-large-font));\n font-size: var(--mat-expansion-container-text-size, var(--mat-sys-body-large-size));\n font-weight: var(--mat-expansion-container-text-weight, var(--mat-sys-body-large-weight));\n line-height: var(--mat-expansion-container-text-line-height, var(--mat-sys-body-large-line-height));\n letter-spacing: var(--mat-expansion-container-text-tracking, var(--mat-sys-body-large-tracking));\n}\n\n.mat-expansion-panel-body {\n padding: 0 24px 16px;\n}\n\n.mat-expansion-panel-spacing {\n margin: 16px 0;\n}\n.mat-accordion > .mat-expansion-panel-spacing:first-child, .mat-accordion > *:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing {\n margin-top: 0;\n}\n.mat-accordion > .mat-expansion-panel-spacing:last-child, .mat-accordion > *:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing {\n margin-bottom: 0;\n}\n\n.mat-action-row {\n border-top-style: solid;\n border-top-width: 1px;\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n padding: 16px 8px 16px 24px;\n border-top-color: var(--mat-expansion-actions-divider-color, var(--mat-sys-outline));\n}\n.mat-action-row .mat-button-base,\n.mat-action-row .mat-mdc-button-base {\n margin-left: 8px;\n}\n[dir=rtl] .mat-action-row .mat-button-base,\n[dir=rtl] .mat-action-row .mat-mdc-button-base {\n margin-left: 0;\n margin-right: 8px;\n}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanel, decorators: [{ type: Component, args: [{ selector: 'mat-expansion-panel', exportAs: 'matExpansionPanel', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MAT_ACCORDION, useValue: undefined }, { provide: MAT_EXPANSION_PANEL, useExisting: MatExpansionPanel }], host: { 'class': 'mat-expansion-panel', '[class.mat-expanded]': 'expanded', '[class.mat-expansion-panel-spacing]': '_hasSpacing()' }, imports: [CdkPortalOutlet], template: "<ng-content select=\"mat-expansion-panel-header\"></ng-content>\n<div class=\"mat-expansion-panel-content-wrapper\" [attr.inert]=\"expanded ? null : ''\" #bodyWrapper>\n <div class=\"mat-expansion-panel-content\"\n role=\"region\"\n [attr.aria-labelledby]=\"_headerId\"\n [id]=\"id\"\n #body>\n <div class=\"mat-expansion-panel-body\">\n <ng-content></ng-content>\n <ng-template [cdkPortalOutlet]=\"_portal\"></ng-template>\n </div>\n <ng-content select=\"mat-action-row\"></ng-content>\n </div>\n</div>\n", styles: [".mat-expansion-panel {\n box-sizing: content-box;\n display: block;\n margin: 0;\n overflow: hidden;\n}\n.mat-expansion-panel.mat-expansion-panel-animations-enabled {\n transition: margin 225ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.mat-expansion-panel {\n position: relative;\n background: var(--mat-expansion-container-background-color, var(--mat-sys-surface));\n color: var(--mat-expansion-container-text-color, var(--mat-sys-on-surface));\n border-radius: var(--mat-expansion-container-shape, 12px);\n}\n.mat-expansion-panel:not([class*=mat-elevation-z]) {\n box-shadow: var(--mat-expansion-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));\n}\n.mat-accordion .mat-expansion-panel:not(.mat-expanded), .mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing) {\n border-radius: 0;\n}\n.mat-accordion .mat-expansion-panel:first-of-type {\n border-top-right-radius: var(--mat-expansion-container-shape, 12px);\n border-top-left-radius: var(--mat-expansion-container-shape, 12px);\n}\n.mat-accordion .mat-expansion-panel:last-of-type {\n border-bottom-right-radius: var(--mat-expansion-container-shape, 12px);\n border-bottom-left-radius: var(--mat-expansion-container-shape, 12px);\n}\n@media (forced-colors: active) {\n .mat-expansion-panel {\n outline: solid 1px;\n }\n}\n\n.mat-expansion-panel-content-wrapper {\n display: grid;\n grid-template-rows: 0fr;\n grid-template-columns: 100%;\n}\n.mat-expansion-panel-animations-enabled .mat-expansion-panel-content-wrapper {\n transition: grid-template-rows 225ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper {\n grid-template-rows: 1fr;\n}\n@supports not (grid-template-rows: 0fr) {\n .mat-expansion-panel-content-wrapper {\n height: 0;\n }\n .mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper {\n height: auto;\n }\n}\n@media print {\n .mat-expansion-panel-content-wrapper {\n height: 0;\n }\n .mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper {\n height: auto;\n }\n}\n\n.mat-expansion-panel-content {\n display: flex;\n flex-direction: column;\n overflow: visible;\n min-height: 0;\n visibility: hidden;\n}\n.mat-expansion-panel-animations-enabled .mat-expansion-panel-content {\n transition: visibility 190ms linear;\n}\n.mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper > .mat-expansion-panel-content {\n visibility: visible;\n}\n.mat-expansion-panel-content {\n font-family: var(--mat-expansion-container-text-font, var(--mat-sys-body-large-font));\n font-size: var(--mat-expansion-container-text-size, var(--mat-sys-body-large-size));\n font-weight: var(--mat-expansion-container-text-weight, var(--mat-sys-body-large-weight));\n line-height: var(--mat-expansion-container-text-line-height, var(--mat-sys-body-large-line-height));\n letter-spacing: var(--mat-expansion-container-text-tracking, var(--mat-sys-body-large-tracking));\n}\n\n.mat-expansion-panel-body {\n padding: 0 24px 16px;\n}\n\n.mat-expansion-panel-spacing {\n margin: 16px 0;\n}\n.mat-accordion > .mat-expansion-panel-spacing:first-child, .mat-accordion > *:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing {\n margin-top: 0;\n}\n.mat-accordion > .mat-expansion-panel-spacing:last-child, .mat-accordion > *:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing {\n margin-bottom: 0;\n}\n\n.mat-action-row {\n border-top-style: solid;\n border-top-width: 1px;\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n padding: 16px 8px 16px 24px;\n border-top-color: var(--mat-expansion-actions-divider-color, var(--mat-sys-outline));\n}\n.mat-action-row .mat-button-base,\n.mat-action-row .mat-mdc-button-base {\n margin-left: 8px;\n}\n[dir=rtl] .mat-action-row .mat-button-base,\n[dir=rtl] .mat-action-row .mat-mdc-button-base {\n margin-left: 0;\n margin-right: 8px;\n}\n"] }] }], ctorParameters: () => [], propDecorators: { hideToggle: [{ type: Input, args: [{ transform: booleanAttribute }] }], togglePosition: [{ type: Input }], afterExpand: [{ type: Output }], afterCollapse: [{ type: Output }], _lazyContent: [{ type: ContentChild, args: [MatExpansionPanelContent] }], _body: [{ type: ViewChild, args: ['body'] }], _bodyWrapper: [{ type: ViewChild, args: ['bodyWrapper'] }] } }); class MatExpansionPanelActionRow { static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanelActionRow, deps: [], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.0-next.5", type: MatExpansionPanelActionRow, isStandalone: true, selector: "mat-action-row", host: { classAttribute: "mat-action-row" }, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanelActionRow, decorators: [{ type: Directive, args: [{ selector: 'mat-action-row', host: { class: 'mat-action-row' } }] }] }); class MatExpansionPanelHeader { panel = inject(MatExpansionPanel, { host: true }); _element = inject(ElementRef); _focusMonitor = inject(FocusMonitor); _changeDetectorRef = inject(ChangeDetectorRef); _parentChangeSubscription = Subscription.EMPTY; constructor() { inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader); const panel = this.panel; const defaultOptions = inject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, { optional: true }); const tabIndex = inject(new HostAttributeToken('tabindex'), { optional: true }); const accordionHideToggleChange = panel.accordion ? panel.accordion._stateChanges.pipe(filter(changes => !!(changes['hideToggle'] || changes['togglePosition']))) : EMPTY; this.tabIndex = parseInt(tabIndex || '') || 0; this._parentChangeSubscription = merge(panel.opened, panel.closed, accordionHideToggleChange, panel._inputChanges.pipe(filter(changes => { return !!(changes['hideToggle'] || changes['disabled'] || changes['togglePosition']); }))).subscribe(() => this._changeDetectorRef.markForCheck()); panel.closed.pipe(filter(() => panel._containsFocus())).subscribe(() => this._focusMonitor.focusVia(this._element, 'program')); if (defaultOptions) { this.expandedHeight = defaultOptions.expandedHeight; this.collapsedHeight = defaultOptions.collapsedHeight; } } expandedHeight; collapsedHeight; tabIndex = 0; get disabled() { return this.panel.disabled; } _toggle() { if (!this.disabled) { this.panel.toggle(); } } _isExpanded() { return this.panel.expanded; } _getExpandedState() { return this.panel._getExpandedState(); } _getPanelId() { return this.panel.id; } _getTogglePosition() { return this.panel.togglePosition; } _showToggle() { return !this.panel.hideToggle && !this.panel.disabled; } _getHeaderHeight() { const isExpanded = this._isExpanded(); if (isExpanded && this.expandedHeight) { return this.expandedHeight; } else if (!isExpanded && this.collapsedHeight) { return this.collapsedHeight; } return null; } _keydown(event) { switch (event.keyCode) { case SPACE: case ENTER: if (!hasModifierKey(event)) { event.preventDefault(); this._toggle(); } break; default: if (this.panel.accordion) { this.panel.accordion._handleHeaderKeydown(event); } return; } } focus(origin, options) { if (origin) { this._focusMonitor.focusVia(this._element, origin, options); } else { this._element.nativeElement.focus(options); } } ngAfterViewInit() { this._focusMonitor.monitor(this._element).subscribe(origin => { if (origin && this.panel.accordion) { this.panel.accordion._handleHeaderFocus(this); } }); } ngOnDestroy() { this._parentChangeSubscription.unsubscribe(); this._focusMonitor.stopMonitoring(this._element); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanelHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0-next.5", type: MatExpansionPanelHeader, isStandalone: true, selector: "mat-expansion-panel-header", inputs: { expandedHeight: "expandedHeight", collapsedHeight: "collapsedHeight", tabIndex: ["tabIndex", "tabIndex", value => value == null ? 0 : numberAttribute(value)] }, host: { attributes: { "role": "button" }, listeners: { "click": "_toggle()", "keydown": "_keydown($event)" }, properties: { "attr.id": "panel._headerId", "attr.tabindex": "disabled ? -1 : tabIndex", "attr.aria-controls": "_getPanelId()", "attr.aria-expanded": "_isExpanded()", "attr.aria-disabled": "panel.disabled", "class.mat-expanded": "_isExpanded()", "class.mat-expansion-toggle-indicator-after": "_getTogglePosition() === 'after'", "class.mat-expansion-toggle-indicator-before": "_getTogglePosition() === 'before'", "style.height": "_getHeaderHeight()" }, classAttribute: "mat-expansion-panel-header mat-focus-indicator" }, ngImport: i0, template: "<span class=\"mat-content\" [class.mat-content-hide-toggle]=\"!_showToggle()\">\n <ng-content select=\"mat-panel-title\"></ng-content>\n <ng-content select=\"mat-panel-description\"></ng-content>\n <ng-content></ng-content>\n</span>\n\n@if (_showToggle()) {\n <span class=\"mat-expansion-indicator\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 -960 960 960\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path d=\"M480-345 240-585l56-56 184 184 184-184 56 56-240 240Z\"/>\n </svg>\n </span>\n}\n", styles: [".mat-expansion-panel-header {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0 24px;\n border-radius: inherit;\n}\n.mat-expansion-panel-animations-enabled .mat-expansion-panel-header {\n transition: height 225ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.mat-expansion-panel-header::before {\n border-radius: inherit;\n}\n.mat-expansion-panel-header {\n height: var(--mat-expansion-header-collapsed-state-height, 48px);\n font-family: var(--mat-expansion-header-text-font, var(--mat-sys-title-medium-font));\n font-size: var(--mat-expansion-header-text-size, var(--mat-sys-title-medium-size));\n font-weight: var(--mat-expansion-header-text-weight, var(--mat-sys-title-medium-weight));\n line-height: var(--mat-expansion-header-text-line-height, var(--mat-sys-title-medium-line-height));\n letter-spacing: var(--mat-expansion-header-text-tracking, var(--mat-sys-title-medium-tracking));\n}\n.mat-expansion-panel-header.mat-expanded {\n height: var(--mat-expansion-header-expanded-state-height, 64px);\n}\n.mat-expansion-panel-header[aria-disabled=true] {\n color: var(--mat-expansion-header-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));\n}\n.mat-expansion-panel-header:not([aria-disabled=true]) {\n cursor: pointer;\n}\n.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover {\n background: var(--mat-expansion-header-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent));\n}\n@media (hover: none) {\n .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover {\n background: var(--mat-expansion-container-background-color, var(--mat-sys-surface));\n }\n}\n.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused, .mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused {\n background: var(--mat-expansion-header-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));\n}\n.mat-expansion-panel-header._mat-animation-noopable {\n transition: none;\n}\n.mat-expansion-panel-header:focus, .mat-expansion-panel-header:hover {\n outline: none;\n}\n.mat-expansion-panel-header.mat-expanded:focus, .mat-expansion-panel-header.mat-expanded:hover {\n background: inherit;\n}\n.mat-expansion-panel-header.mat-expansion-toggle-indicator-before {\n flex-direction: row-reverse;\n}\n.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator {\n margin: 0 16px 0 0;\n}\n[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator {\n margin: 0 0 0 16px;\n}\n\n.mat-content {\n display: flex;\n flex: 1;\n flex-direction: row;\n overflow: hidden;\n}\n.mat-content.mat-content-hide-toggle {\n margin-right: 8px;\n}\n[dir=rtl] .mat-content.mat-content-hide-toggle {\n margin-right: 0;\n margin-left: 8px;\n}\n.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle {\n margin-left: 24px;\n margin-right: 0;\n}\n[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle {\n margin-right: 24px;\n margin-left: 0;\n}\n\n.mat-expansion-panel-header-title {\n color: var(--mat-expansion-header-text-color, var(--mat-sys-on-surface));\n}\n\n.mat-expansion-panel-header-title,\n.mat-expansion-panel-header-description {\n display: flex;\n flex-grow: 1;\n flex-basis: 0;\n margin-right: 16px;\n align-items: center;\n}\n[dir=rtl] .mat-expansion-panel-header-title,\n[dir=rtl] .mat-expansion-panel-header-description {\n margin-right: 0;\n margin-left: 16px;\n}\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\n color: inherit;\n}\n\n.mat-expansion-panel-header-description {\n flex-grow: 2;\n color: var(--mat-expansion-header-description-color, var(--mat-sys-on-surface-variant));\n}\n\n.mat-expansion-panel-animations-enabled .mat-expansion-indicator {\n transition: transform 225ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.mat-expansion-panel-header.mat-expanded .mat-expansion-indicator {\n transform: rotate(180deg);\n}\n.mat-expansion-indicator::after {\n border-style: solid;\n border-width: 0 2px 2px 0;\n content: \"\";\n padding: 3px;\n transform: rotate(45deg);\n vertical-align: middle;\n color: var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));\n display: var(--mat-expansion-legacy-header-indicator-display, none);\n}\n.mat-expansion-indicator svg {\n width: 24px;\n height: 24px;\n margin: 0 -8px;\n vertical-align: middle;\n fill: var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));\n display: var(--mat-expansion-header-indicator-display, inline-block);\n}\n\n@media (forced-colors: active) {\n .mat-expansion-panel-content {\n border-top: 1px solid;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanelHeader, decorators: [{ type: Component, args: [{ selector: 'mat-expansion-panel-header', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { 'class': 'mat-expansion-panel-header mat-focus-indicator', 'role': 'button', '[attr.id]': 'panel._headerId', '[attr.tabindex]': 'disabled ? -1 : tabIndex', '[attr.aria-controls]': '_getPanelId()', '[attr.aria-expanded]': '_isExpanded()', '[attr.aria-disabled]': 'panel.disabled', '[class.mat-expanded]': '_isExpanded()', '[class.mat-expansion-toggle-indicator-after]': `_getTogglePosition() === 'after'`, '[class.mat-expansion-toggle-indicator-before]': `_getTogglePosition() === 'before'`, '[style.height]': '_getHeaderHeight()', '(click)': '_toggle()', '(keydown)': '_keydown($event)' }, template: "<span class=\"mat-content\" [class.mat-content-hide-toggle]=\"!_showToggle()\">\n <ng-content select=\"mat-panel-title\"></ng-content>\n <ng-content select=\"mat-panel-description\"></ng-content>\n <ng-content></ng-content>\n</span>\n\n@if (_showToggle()) {\n <span class=\"mat-expansion-indicator\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 -960 960 960\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path d=\"M480-345 240-585l56-56 184 184 184-184 56 56-240 240Z\"/>\n </svg>\n </span>\n}\n", styles: [".mat-expansion-panel-header {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0 24px;\n border-radius: inherit;\n}\n.mat-expansion-panel-animations-enabled .mat-expansion-panel-header {\n transition: height 225ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.mat-expansion-panel-header::before {\n border-radius: inherit;\n}\n.mat-expansion-panel-header {\n height: var(--mat-expansion-header-collapsed-state-height, 48px);\n font-family: var(--mat-expansion-header-text-font, var(--mat-sys-title-medium-font));\n font-size: var(--mat-expansion-header-text-size, var(--mat-sys-title-medium-size));\n font-weight: var(--mat-expansion-header-text-weight, var(--mat-sys-title-medium-weight));\n line-height: var(--mat-expansion-header-text-line-height, var(--mat-sys-title-medium-line-height));\n letter-spacing: var(--mat-expansion-header-text-tracking, var(--mat-sys-title-medium-tracking));\n}\n.mat-expansion-panel-header.mat-expanded {\n height: var(--mat-expansion-header-expanded-state-height, 64px);\n}\n.mat-expansion-panel-header[aria-disabled=true] {\n color: var(--mat-expansion-header-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));\n}\n.mat-expansion-panel-header:not([aria-disabled=true]) {\n cursor: pointer;\n}\n.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover {\n background: var(--mat-expansion-header-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent));\n}\n@media (hover: none) {\n .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover {\n background: var(--mat-expansion-container-background-color, var(--mat-sys-surface));\n }\n}\n.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused, .mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused {\n background: var(--mat-expansion-header-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));\n}\n.mat-expansion-panel-header._mat-animation-noopable {\n transition: none;\n}\n.mat-expansion-panel-header:focus, .mat-expansion-panel-header:hover {\n outline: none;\n}\n.mat-expansion-panel-header.mat-expanded:focus, .mat-expansion-panel-header.mat-expanded:hover {\n background: inherit;\n}\n.mat-expansion-panel-header.mat-expansion-toggle-indicator-before {\n flex-direction: row-reverse;\n}\n.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator {\n margin: 0 16px 0 0;\n}\n[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator {\n margin: 0 0 0 16px;\n}\n\n.mat-content {\n display: flex;\n flex: 1;\n flex-direction: row;\n overflow: hidden;\n}\n.mat-content.mat-content-hide-toggle {\n margin-right: 8px;\n}\n[dir=rtl] .mat-content.mat-content-hide-toggle {\n margin-right: 0;\n margin-left: 8px;\n}\n.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle {\n margin-left: 24px;\n margin-right: 0;\n}\n[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle {\n margin-right: 24px;\n margin-left: 0;\n}\n\n.mat-expansion-panel-header-title {\n color: var(--mat-expansion-header-text-color, var(--mat-sys-on-surface));\n}\n\n.mat-expansion-panel-header-title,\n.mat-expansion-panel-header-description {\n display: flex;\n flex-grow: 1;\n flex-basis: 0;\n margin-right: 16px;\n align-items: center;\n}\n[dir=rtl] .mat-expansion-panel-header-title,\n[dir=rtl] .mat-expansion-panel-header-description {\n margin-right: 0;\n margin-left: 16px;\n}\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\n color: inherit;\n}\n\n.mat-expansion-panel-header-description {\n flex-grow: 2;\n color: var(--mat-expansion-header-description-color, var(--mat-sys-on-surface-variant));\n}\n\n.mat-expansion-panel-animations-enabled .mat-expansion-indicator {\n transition: transform 225ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.mat-expansion-panel-header.mat-expanded .mat-expansion-indicator {\n transform: rotate(180deg);\n}\n.mat-expansion-indicator::after {\n border-style: solid;\n border-width: 0 2px 2px 0;\n content: \"\";\n padding: 3px;\n transform: rotate(45deg);\n vertical-align: middle;\n color: var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));\n display: var(--mat-expansion-legacy-header-indicator-display, none);\n}\n.mat-expansion-indicator svg {\n width: 24px;\n height: 24px;\n margin: 0 -8px;\n vertical-align: middle;\n fill: var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));\n display: var(--mat-expansion-header-indicator-display, inline-block);\n}\n\n@media (forced-colors: active) {\n .mat-expansion-panel-content {\n border-top: 1px solid;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n"] }] }], ctorParameters: () => [], propDecorators: { expandedHeight: [{ type: Input }], collapsedHeight: [{ type: Input }], tabIndex: [{ type: Input, args: [{ transform: value => value == null ? 0 : numberAttribute(value) }] }] } }); class MatExpansionPanelDescription { static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanelDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.0-next.5", type: MatExpansionPanelDescription, isStandalone: true, selector: "mat-panel-description", host: { classAttribute: "mat-expansion-panel-header-description" }, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanelDescription, decorators: [{ type: Directive, args: [{ selector: 'mat-panel-description', host: { class: 'mat-expansion-panel-header-description' } }] }] }); class MatExpansionPanelTitle { static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanelTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.0-next.5", type: MatExpansionPanelTitle, isStandalone: true, selector: "mat-panel-title", host: { classAttribute: "mat-expansion-panel-header-title" }, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionPanelTitle, decorators: [{ type: Directive, args: [{ selector: 'mat-panel-title', host: { class: 'mat-expansion-panel-header-title' } }] }] }); class MatAccordion extends CdkAccordion { _keyManager; _ownHeaders = new QueryList(); _headers; hideToggle = false; displayMode = 'default'; togglePosition = 'after'; ngAfterContentInit() { this._headers.changes.pipe(startWith(this._headers)).subscribe(headers => { this._ownHeaders.reset(headers.filter(header => header.panel.accordion === this)); this._ownHeaders.notifyOnChanges(); }); this._keyManager = new FocusKeyManager(this._ownHeaders).withWrap().withHomeAndEnd(); } _handleHeaderKeydown(event) { this._keyManager.onKeydown(event); } _handleHeaderFocus(header) { this._keyManager.updateActiveItem(header); } ngOnDestroy() { super.ngOnDestroy(); this._keyManager?.destroy(); this._ownHeaders.destroy(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatAccordion, deps: null, target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "22.0.0-next.5", type: MatAccordion, isStandalone: true, selector: "mat-accordion", inputs: { hideToggle: ["hideToggle", "hideToggle", booleanAttribute], displayMode: "displayMode", togglePosition: "togglePosition" }, host: { properties: { "class.mat-accordion-multi": "this.multi" }, classAttribute: "mat-accordion" }, providers: [{ provide: MAT_ACCORDION, useExisting: MatAccordion }], queries: [{ propertyName: "_headers", predicate: MatExpansionPanelHeader, descendants: true }], exportAs: ["matAccordion"], usesInheritance: true, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatAccordion, decorators: [{ type: Directive, args: [{ selector: 'mat-accordion', exportAs: 'matAccordion', providers: [{ provide: MAT_ACCORDION, useExisting: MatAccordion }], host: { class: 'mat-accordion', '[class.mat-accordion-multi]': 'this.multi' } }] }], propDecorators: { _headers: [{ type: ContentChildren, args: [MatExpansionPanelHeader, { descendants: true }] }], hideToggle: [{ type: Input, args: [{ transform: booleanAttribute }] }], displayMode: [{ type: Input }], togglePosition: [{ type: Input }] } }); class MatExpansionModule { static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionModule, imports: [CdkAccordionModule, PortalModule, MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent], exports: [BidiModule, MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent] }); static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionModule, imports: [CdkAccordionModule, PortalModule, BidiModule] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0-next.5", ngImport: i0, type: MatExpansionModule, decorators: [{ type: NgModule, args: [{ imports: [CdkAccordionModule, PortalModule, MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent], exports: [BidiModule, MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent] }] }] }); export { MAT_ACCORDION, MAT_EXPANSION_PANEL, MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, MatAccordion, MatExpansionModule, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelContent, MatExpansionPanelDescription, MatExpansionPanelHeader, MatExpansionPanelTitle }; //# sourceMappingURL=expansion.mjs.map