blob: 5399cdf973bf3cbaa1382369917ee079a32a35f6 [file] [log] [blame]
import { Directive, TemplateRef, ViewContainerRef, Component, EventEmitter, Renderer2, ElementRef, ContentChild, Input, Output, ContentChildren, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { TemplatePortalDirective, PortalModule } from '@angular/cdk/portal';
import { MatRippleModule } from '@angular/material/core';
import { MatIconModule } from '@angular/material/icon';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { mixinDisableRipple, mixinDisabled, tdCollapseAnimation, tdRotateAnimation } from '@covalent/core/common';
import { takeUntil } from 'rxjs/operators';
import { Subject } from 'rxjs';
/**
* @fileoverview added by tsickle
* Generated from: expansion-panel.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class TdExpansionPanelHeaderDirective extends TemplatePortalDirective {
/**
* @param {?} templateRef
* @param {?} viewContainerRef
*/
constructor(templateRef, viewContainerRef) {
super(templateRef, viewContainerRef);
}
}
TdExpansionPanelHeaderDirective.decorators = [
{ type: Directive, args: [{
selector: '[td-expansion-panel-header]ng-template',
},] }
];
/** @nocollapse */
TdExpansionPanelHeaderDirective.ctorParameters = () => [
{ type: TemplateRef },
{ type: ViewContainerRef }
];
class TdExpansionPanelLabelDirective extends TemplatePortalDirective {
/**
* @param {?} templateRef
* @param {?} viewContainerRef
*/
constructor(templateRef, viewContainerRef) {
super(templateRef, viewContainerRef);
}
}
TdExpansionPanelLabelDirective.decorators = [
{ type: Directive, args: [{
selector: '[td-expansion-panel-label]ng-template',
},] }
];
/** @nocollapse */
TdExpansionPanelLabelDirective.ctorParameters = () => [
{ type: TemplateRef },
{ type: ViewContainerRef }
];
class TdExpansionPanelSublabelDirective extends TemplatePortalDirective {
/**
* @param {?} templateRef
* @param {?} viewContainerRef
*/
constructor(templateRef, viewContainerRef) {
super(templateRef, viewContainerRef);
}
}
TdExpansionPanelSublabelDirective.decorators = [
{ type: Directive, args: [{
selector: '[td-expansion-panel-sublabel]ng-template',
},] }
];
/** @nocollapse */
TdExpansionPanelSublabelDirective.ctorParameters = () => [
{ type: TemplateRef },
{ type: ViewContainerRef }
];
class TdExpansionPanelSummaryComponent {
}
TdExpansionPanelSummaryComponent.decorators = [
{ type: Component, args: [{
selector: 'td-expansion-summary',
template: '<ng-content></ng-content>'
}] }
];
class TdExpansionPanelBase {
}
/* tslint:disable-next-line */
/** @type {?} */
const _TdExpansionPanelMixinBase = mixinDisableRipple(mixinDisabled(TdExpansionPanelBase));
class TdExpansionPanelComponent extends _TdExpansionPanelMixinBase {
/**
* @param {?} _renderer
* @param {?} _elementRef
*/
constructor(_renderer, _elementRef) {
super();
this._renderer = _renderer;
this._elementRef = _elementRef;
this._expand = false;
/**
* expanded?: function
* Event emitted when [TdExpansionPanelComponent] is expanded.
*/
this.expanded = new EventEmitter();
/**
* collapsed?: function
* Event emitted when [TdExpansionPanelComponent] is collapsed.
*/
this.collapsed = new EventEmitter();
this._renderer.addClass(this._elementRef.nativeElement, 'td-expansion-panel');
}
/**
* expand?: boolean
* Toggles [TdExpansionPanelComponent] between expand/collapse.
* @param {?} expand
* @return {?}
*/
set expand(expand) {
this._setExpand(coerceBooleanProperty(expand));
}
/**
* @return {?}
*/
get expand() {
return this._expand;
}
/**
* Method executed when [TdExpansionPanelComponent] is clicked.
* @return {?}
*/
clickEvent() {
this._setExpand(!this._expand);
}
/**
* Toggle expand state of [TdExpansionPanelComponent]
* retuns 'true' if successful, else 'false'.
* @return {?}
*/
toggle() {
return this._setExpand(!this._expand);
}
/**
* Opens [TdExpansionPanelComponent]
* retuns 'true' if successful, else 'false'.
* @return {?}
*/
open() {
return this._setExpand(true);
}
/**
* Closes [TdExpansionPanelComponent]
* retuns 'true' if successful, else 'false'.
* @return {?}
*/
close() {
return this._setExpand(false);
}
/**
* Method executed when the disabled value changes
* @param {?} v
* @return {?}
*/
onDisabledChange(v) {
if (v && this._expand) {
this._expand = false;
this._onCollapsed();
}
}
/**
* Method to change expand state internally and emit the [onExpanded] event if 'true' or [onCollapsed]
* event if 'false'. (Blocked if [disabled] is 'true')
* @private
* @param {?} newExpand
* @return {?}
*/
_setExpand(newExpand) {
if (this.disabled) {
return false;
}
if (this._expand !== newExpand) {
this._expand = newExpand;
if (newExpand) {
this._renderer.addClass(this._elementRef.nativeElement, 'td-expanded');
this._onExpanded();
}
else {
this._renderer.removeClass(this._elementRef.nativeElement, 'td-expanded');
this._onCollapsed();
}
return true;
}
return false;
}
/**
* @private
* @return {?}
*/
_onExpanded() {
this.expanded.emit();
}
/**
* @private
* @return {?}
*/
_onCollapsed() {
this.collapsed.emit();
}
}
TdExpansionPanelComponent.decorators = [
{ type: Component, args: [{
selector: 'td-expansion-panel',
template: "<div\n class=\"td-expansion-panel-header\"\n [class.mat-disabled]=\"disabled\"\n matRipple\n [matRippleDisabled]=\"disabled || disableRipple\"\n [tabIndex]=\"disabled ? -1 : 0\"\n (keydown.enter)=\"clickEvent()\"\n (click)=\"clickEvent()\"\n>\n <ng-template [cdkPortalOutlet]=\"expansionPanelHeader\"></ng-template>\n <div class=\"td-expansion-panel-header-content\" [class.mat-disabled]=\"disabled\" *ngIf=\"!expansionPanelHeader\">\n <div *ngIf=\"label || expansionPanelLabel\" class=\"td-expansion-label\">\n <ng-template [cdkPortalOutlet]=\"expansionPanelLabel\"></ng-template>\n <ng-template [ngIf]=\"!expansionPanelLabel\">{{ label }}</ng-template>\n </div>\n <div *ngIf=\"sublabel || expansionPanelSublabel\" class=\"td-expansion-sublabel\">\n <ng-template [cdkPortalOutlet]=\"expansionPanelSublabel\"></ng-template>\n <ng-template [ngIf]=\"!expansionPanelSublabel\">{{ sublabel }}</ng-template>\n </div>\n <mat-icon class=\"td-expand-icon\" *ngIf=\"!disabled\" [@tdRotate]=\"expand\">keyboard_arrow_down</mat-icon>\n </div>\n</div>\n<div class=\"td-expansion-content\" [@tdCollapse]=\"!expand\">\n <ng-content></ng-content>\n</div>\n<div class=\"td-expansion-summary\" [@tdCollapse]=\"expand\">\n <ng-content select=\"td-expansion-summary\"></ng-content>\n</div>\n",
inputs: ['disabled', 'disableRipple'],
animations: [tdCollapseAnimation, tdRotateAnimation],
styles: [":host{display:block}:host .td-expansion-panel-header{outline:none;position:relative}:host .td-expansion-panel-header:focus:not(.mat-disabled),:host .td-expansion-panel-header:hover:not(.mat-disabled){cursor:pointer}:host .td-expansion-panel-header .td-expansion-panel-header-content{-ms-flex:1;-ms-flex-align:center;-ms-flex-direction:row;-ms-flex-line-pack:center;-ms-flex-pack:start;align-content:center;align-items:center;box-sizing:border-box;display:-ms-flexbox;display:flex;flex:1;flex-direction:row;height:48px;justify-content:flex-start;max-width:100%;padding:0 24px}:host .td-expansion-panel-header .td-expansion-panel-header-content .td-expansion-label,:host .td-expansion-panel-header .td-expansion-panel-header-content .td-expansion-sublabel{-ms-flex:1;flex:1}:host .td-expansion-content.ng-animating,:host .td-expansion-summary.ng-animating{overflow:hidden}.td-expansion-label,.td-expansion-sublabel{margin-right:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep [dir=rtl] .td-expansion-label,::ng-deep [dir=rtl] .td-expansion-sublabel{margin-left:16px;margin-right:inherit}"]
}] }
];
/** @nocollapse */
TdExpansionPanelComponent.ctorParameters = () => [
{ type: Renderer2 },
{ type: ElementRef }
];
TdExpansionPanelComponent.propDecorators = {
expansionPanelHeader: [{ type: ContentChild, args: [TdExpansionPanelHeaderDirective,] }],
expansionPanelLabel: [{ type: ContentChild, args: [TdExpansionPanelLabelDirective,] }],
expansionPanelSublabel: [{ type: ContentChild, args: [TdExpansionPanelSublabelDirective,] }],
label: [{ type: Input }],
sublabel: [{ type: Input }],
expand: [{ type: Input, args: ['expand',] }],
expanded: [{ type: Output }],
collapsed: [{ type: Output }]
};
if (false) {
/**
* @type {?}
* @private
*/
TdExpansionPanelComponent.prototype._expand;
/** @type {?} */
TdExpansionPanelComponent.prototype.expansionPanelHeader;
/** @type {?} */
TdExpansionPanelComponent.prototype.expansionPanelLabel;
/** @type {?} */
TdExpansionPanelComponent.prototype.expansionPanelSublabel;
/**
* label?: string
* Sets label of [TdExpansionPanelComponent] header.
* Defaults to 'Click to expand'
* @type {?}
*/
TdExpansionPanelComponent.prototype.label;
/**
* sublabel?: string
* Sets sublabel of [TdExpansionPanelComponent] header.
* @type {?}
*/
TdExpansionPanelComponent.prototype.sublabel;
/**
* expanded?: function
* Event emitted when [TdExpansionPanelComponent] is expanded.
* @type {?}
*/
TdExpansionPanelComponent.prototype.expanded;
/**
* collapsed?: function
* Event emitted when [TdExpansionPanelComponent] is collapsed.
* @type {?}
*/
TdExpansionPanelComponent.prototype.collapsed;
/**
* @type {?}
* @private
*/
TdExpansionPanelComponent.prototype._renderer;
/**
* @type {?}
* @private
*/
TdExpansionPanelComponent.prototype._elementRef;
}
/**
* @fileoverview added by tsickle
* Generated from: expansion-panel-group.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class TdExpansionPanelGroupComponent {
/**
* @param {?} _renderer
* @param {?} _elementRef
*/
constructor(_renderer, _elementRef) {
this._renderer = _renderer;
this._elementRef = _elementRef;
this._multi = false;
this._lastOpenedPanels = [];
this._destroyed = new Subject();
this._stopWatchingPanels = new Subject();
this._renderer.addClass(this._elementRef.nativeElement, 'td-expansion-panel-group');
}
/**
* multi?: boolean
* Sets whether multiple panels can be opened at a given time.
* Set to false for accordion mode.
* Defaults to false.
* @param {?} multi
* @return {?}
*/
set multi(multi) {
this._multi = coerceBooleanProperty(multi);
if (this._multi === false && this._lastOpenedPanels.length > 0) {
this._closeAllExcept(this._lastOpenedPanels[this._lastOpenedPanels.length - 1]);
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this._destroyed.next(true);
this._destroyed.unsubscribe();
this._stopWatchingPanels.next(true);
this._stopWatchingPanels.unsubscribe();
}
/**
* @return {?}
*/
ngAfterContentInit() {
if (!this._multi) {
/** @type {?} */
const openedPanels = this.expansionPanels.filter((/**
* @param {?} expansionPanel
* @return {?}
*/
(expansionPanel) => expansionPanel.expand));
/** @type {?} */
const numOpenedPanels = openedPanels.length;
if (numOpenedPanels > 1) {
this._closeAllExcept(openedPanels[numOpenedPanels - 1]);
}
}
this._attachListeners(this.expansionPanels);
this.expansionPanels.changes
.pipe(takeUntil(this._destroyed))
.subscribe((/**
* @param {?} expansionPanels
* @return {?}
*/
(expansionPanels) => {
this._stopWatchingPanels.next(true);
this._stopWatchingPanels.unsubscribe();
this._stopWatchingPanels = new Subject();
this._attachListeners(expansionPanels);
}));
}
/**
* Opens all expansion panels, only if multi set set to true.
* @return {?}
*/
openAll() {
if (this._multi) {
this.expansionPanels.forEach((/**
* @param {?} expansionPanel
* @return {?}
*/
(expansionPanel) => {
expansionPanel.open();
}));
}
}
/**
* Closes all expansion panels
* @return {?}
*/
closeAll() {
this.expansionPanels.forEach((/**
* @param {?} expansionPanel
* @return {?}
*/
(expansionPanel) => {
expansionPanel.close();
}));
}
/**
* @private
* @param {?} expansionPanels
* @return {?}
*/
_attachListeners(expansionPanels) {
this._lastOpenedPanels = [];
expansionPanels.forEach((/**
* @param {?} expansionPanel
* @return {?}
*/
(expansionPanel) => {
expansionPanel.expanded.pipe(takeUntil(this._stopWatchingPanels)).subscribe((/**
* @return {?}
*/
() => {
/** @type {?} */
const indexOfPanel = this._lastOpenedPanels.indexOf(expansionPanel);
if (indexOfPanel !== -1) {
this._lastOpenedPanels.splice(indexOfPanel, 1);
}
this._lastOpenedPanels.push(expansionPanel);
if (!this._multi) {
this._closeAllExcept(expansionPanel);
}
}));
expansionPanel.collapsed.pipe(takeUntil(this._stopWatchingPanels)).subscribe((/**
* @return {?}
*/
() => {
/** @type {?} */
const indexOfPanel = this._lastOpenedPanels.indexOf(expansionPanel);
if (indexOfPanel !== -1) {
this._lastOpenedPanels.splice(indexOfPanel, 1);
}
}));
}));
}
/**
* @private
* @param {?} expansionPanel
* @return {?}
*/
_closeAllExcept(expansionPanel) {
this.expansionPanels.forEach((/**
* @param {?} panel
* @return {?}
*/
(panel) => {
if (panel !== expansionPanel) {
panel.close();
}
}));
}
}
TdExpansionPanelGroupComponent.decorators = [
{ type: Component, args: [{
selector: 'td-expansion-panel-group',
template: "<ng-content></ng-content>\n",
styles: [""]
}] }
];
/** @nocollapse */
TdExpansionPanelGroupComponent.ctorParameters = () => [
{ type: Renderer2 },
{ type: ElementRef }
];
TdExpansionPanelGroupComponent.propDecorators = {
multi: [{ type: Input, args: ['multi',] }],
expansionPanels: [{ type: ContentChildren, args: [TdExpansionPanelComponent, { descendants: true },] }]
};
if (false) {
/**
* @type {?}
* @private
*/
TdExpansionPanelGroupComponent.prototype._multi;
/**
* @type {?}
* @private
*/
TdExpansionPanelGroupComponent.prototype._lastOpenedPanels;
/**
* @type {?}
* @private
*/
TdExpansionPanelGroupComponent.prototype._destroyed;
/**
* @type {?}
* @private
*/
TdExpansionPanelGroupComponent.prototype._stopWatchingPanels;
/** @type {?} */
TdExpansionPanelGroupComponent.prototype.expansionPanels;
/**
* @type {?}
* @private
*/
TdExpansionPanelGroupComponent.prototype._renderer;
/**
* @type {?}
* @private
*/
TdExpansionPanelGroupComponent.prototype._elementRef;
}
/**
* @fileoverview added by tsickle
* Generated from: expansion-panel.module.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
const TD_EXPANSION_PANEL = [
TdExpansionPanelGroupComponent,
TdExpansionPanelComponent,
TdExpansionPanelHeaderDirective,
TdExpansionPanelLabelDirective,
TdExpansionPanelSublabelDirective,
TdExpansionPanelSummaryComponent,
];
class CovalentExpansionPanelModule {
}
CovalentExpansionPanelModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, MatRippleModule, MatIconModule, PortalModule],
declarations: [TD_EXPANSION_PANEL],
exports: [TD_EXPANSION_PANEL],
},] }
];
/**
* @fileoverview added by tsickle
* Generated from: public-api.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* Generated from: index.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* Generated from: covalent-core-expansion-panel.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export { CovalentExpansionPanelModule, TdExpansionPanelBase, TdExpansionPanelComponent, TdExpansionPanelGroupComponent, TdExpansionPanelHeaderDirective, TdExpansionPanelLabelDirective, TdExpansionPanelSublabelDirective, TdExpansionPanelSummaryComponent, _TdExpansionPanelMixinBase };
//# sourceMappingURL=covalent-core-expansion-panel.js.map