ipsos-components
Version:
Material Design components for Angular
154 lines (138 loc) • 4.87 kB
text/typescript
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {animate, state, style, transition, trigger} from '@angular/animations';
import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
Directive,
forwardRef,
Host,
Input,
OnChanges,
OnDestroy,
Optional,
SimpleChanges,
ViewEncapsulation,
} from '@angular/core';
import {CdkAccordionItem} from '@angular/cdk/accordion';
import {UniqueSelectionDispatcher} from '@angular/cdk/collections';
import {CanDisable, mixinDisabled} from '@angular/material/core';
import {Subject} from 'rxjs/Subject';
import {MatAccordion} from './accordion';
import {coerceBooleanProperty} from '@angular/cdk/coercion';
/** Time and timing curve for expansion panel animations. */
export const EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';
// Boilerplate for applying mixins to MatExpansionPanel.
/** @docs-private */
export class MatExpansionPanelBase extends CdkAccordionItem {
constructor(accordion: MatAccordion,
_changeDetectorRef: ChangeDetectorRef,
_uniqueSelectionDispatcher: UniqueSelectionDispatcher) {
super(accordion, _changeDetectorRef, _uniqueSelectionDispatcher);
}
}
export const _MatExpansionPanelMixinBase = mixinDisabled(MatExpansionPanelBase);
/** MatExpansionPanel's states. */
export type MatExpansionPanelState = 'expanded' | 'collapsed';
/**
* <mat-expansion-panel> component.
*
* This component can be used as a single element to show expandable content, or as one of
* multiple children of an element with the MdAccordion directive attached.
*
* Please refer to README.md for examples on how to use it.
*/
export class MatExpansionPanel extends _MatExpansionPanelMixinBase
implements CanDisable, OnChanges, OnDestroy {
/** Whether the toggle indicator should be hidden. */
get hideToggle(): boolean {
return this._hideToggle;
}
set hideToggle(value: boolean) {
this._hideToggle = coerceBooleanProperty(value);
}
private _hideToggle = false;
/** Stream that emits for changes in `@Input` properties. */
_inputChanges = new Subject<SimpleChanges>();
/** Optionally defined accordion the expansion panel belongs to. */
accordion: MatAccordion;
constructor( accordion: MatAccordion,
_changeDetectorRef: ChangeDetectorRef,
_uniqueSelectionDispatcher: UniqueSelectionDispatcher) {
super(accordion, _changeDetectorRef, _uniqueSelectionDispatcher);
this.accordion = accordion;
}
/** Whether the expansion indicator should be hidden. */
_getHideToggle(): boolean {
if (this.accordion) {
return this.accordion.hideToggle;
}
return this.hideToggle;
}
/** Determines whether the expansion panel should have spacing between it and its siblings. */
_hasSpacing(): boolean {
if (this.accordion) {
return (this.expanded ? this.accordion.displayMode : this._getExpandedState()) === 'default';
}
return false;
}
/** Gets the expanded state string. */
_getExpandedState(): MatExpansionPanelState {
return this.expanded ? 'expanded' : 'collapsed';
}
ngOnChanges(changes: SimpleChanges) {
this._inputChanges.next(changes);
}
ngOnDestroy() {
super.ngOnDestroy();
this._inputChanges.complete();
}
}
export class MatExpansionPanelActionRow {}