@angular/material
Version:
Angular Material
750 lines (741 loc) • 42.7 kB
JavaScript
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