| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- /**
- * @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 { coerceBooleanProperty } from '@angular/cdk/coercion';
- import { Directive, Input, Output, EventEmitter, Optional, ChangeDetectorRef, SkipSelf, NgModule } from '@angular/core';
- import { Subject, Subscription } from 'rxjs';
- import { UniqueSelectionDispatcher } from '@angular/cdk/collections';
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Used to generate unique ID for each accordion.
- * @type {?}
- */
- let nextId = 0;
- /**
- * Directive whose purpose is to manage the expanded state of CdkAccordionItem children.
- */
- class CdkAccordion {
- constructor() {
- /**
- * Emits when the state of the accordion changes
- */
- this._stateChanges = new Subject();
- /**
- * Stream that emits true/false when openAll/closeAll is triggered.
- */
- this._openCloseAllActions = new Subject();
- /**
- * A readonly id value to use for unique selection coordination.
- */
- this.id = `cdk-accordion-${nextId++}`;
- this._multi = false;
- }
- /**
- * Whether the accordion should allow multiple expanded accordion items simultaneously.
- * @return {?}
- */
- get multi() { return this._multi; }
- /**
- * @param {?} multi
- * @return {?}
- */
- set multi(multi) { this._multi = coerceBooleanProperty(multi); }
- /**
- * Opens all enabled accordion items in an accordion where multi is enabled.
- * @return {?}
- */
- openAll() {
- this._openCloseAll(true);
- }
- /**
- * Closes all enabled accordion items in an accordion where multi is enabled.
- * @return {?}
- */
- closeAll() {
- this._openCloseAll(false);
- }
- /**
- * @param {?} changes
- * @return {?}
- */
- ngOnChanges(changes) {
- this._stateChanges.next(changes);
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this._stateChanges.complete();
- }
- /**
- * @private
- * @param {?} expanded
- * @return {?}
- */
- _openCloseAll(expanded) {
- if (this.multi) {
- this._openCloseAllActions.next(expanded);
- }
- }
- }
- CdkAccordion.decorators = [
- { type: Directive, args: [{
- selector: 'cdk-accordion, [cdkAccordion]',
- exportAs: 'cdkAccordion',
- },] },
- ];
- CdkAccordion.propDecorators = {
- multi: [{ type: Input }]
- };
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Used to generate unique ID for each accordion item.
- * @type {?}
- */
- let nextId$1 = 0;
- const ɵ0 = undefined;
- /**
- * An basic directive expected to be extended and decorated as a component. Sets up all
- * events and attributes needed to be managed by a CdkAccordion parent.
- */
- class CdkAccordionItem {
- /**
- * @param {?} accordion
- * @param {?} _changeDetectorRef
- * @param {?} _expansionDispatcher
- */
- constructor(accordion, _changeDetectorRef, _expansionDispatcher) {
- this.accordion = accordion;
- this._changeDetectorRef = _changeDetectorRef;
- this._expansionDispatcher = _expansionDispatcher;
- /**
- * Subscription to openAll/closeAll events.
- */
- this._openCloseAllSubscription = Subscription.EMPTY;
- /**
- * Event emitted every time the AccordionItem is closed.
- */
- this.closed = new EventEmitter();
- /**
- * Event emitted every time the AccordionItem is opened.
- */
- this.opened = new EventEmitter();
- /**
- * Event emitted when the AccordionItem is destroyed.
- */
- this.destroyed = new EventEmitter();
- /**
- * Emits whenever the expanded state of the accordion changes.
- * Primarily used to facilitate two-way binding.
- * \@docs-private
- */
- this.expandedChange = new EventEmitter();
- /**
- * The unique AccordionItem id.
- */
- this.id = `cdk-accordion-child-${nextId$1++}`;
- this._expanded = false;
- this._disabled = false;
- /**
- * Unregister function for _expansionDispatcher.
- */
- this._removeUniqueSelectionListener = (/**
- * @return {?}
- */
- () => { });
- this._removeUniqueSelectionListener =
- _expansionDispatcher.listen((/**
- * @param {?} id
- * @param {?} accordionId
- * @return {?}
- */
- (id, accordionId) => {
- if (this.accordion && !this.accordion.multi &&
- this.accordion.id === accordionId && this.id !== id) {
- this.expanded = false;
- }
- }));
- // When an accordion item is hosted in an accordion, subscribe to open/close events.
- if (this.accordion) {
- this._openCloseAllSubscription = this._subscribeToOpenCloseAllActions();
- }
- }
- /**
- * Whether the AccordionItem is expanded.
- * @return {?}
- */
- get expanded() { return this._expanded; }
- /**
- * @param {?} expanded
- * @return {?}
- */
- set expanded(expanded) {
- expanded = coerceBooleanProperty(expanded);
- // Only emit events and update the internal value if the value changes.
- if (this._expanded !== expanded) {
- this._expanded = expanded;
- this.expandedChange.emit(expanded);
- if (expanded) {
- this.opened.emit();
- /**
- * In the unique selection dispatcher, the id parameter is the id of the CdkAccordionItem,
- * the name value is the id of the accordion.
- * @type {?}
- */
- const accordionId = this.accordion ? this.accordion.id : this.id;
- this._expansionDispatcher.notify(this.id, accordionId);
- }
- else {
- this.closed.emit();
- }
- // Ensures that the animation will run when the value is set outside of an `@Input`.
- // This includes cases like the open, close and toggle methods.
- this._changeDetectorRef.markForCheck();
- }
- }
- /**
- * Whether the AccordionItem is disabled.
- * @return {?}
- */
- get disabled() { return this._disabled; }
- /**
- * @param {?} disabled
- * @return {?}
- */
- set disabled(disabled) { this._disabled = coerceBooleanProperty(disabled); }
- /**
- * Emits an event for the accordion item being destroyed.
- * @return {?}
- */
- ngOnDestroy() {
- this.opened.complete();
- this.closed.complete();
- this.destroyed.emit();
- this.destroyed.complete();
- this._removeUniqueSelectionListener();
- this._openCloseAllSubscription.unsubscribe();
- }
- /**
- * Toggles the expanded state of the accordion item.
- * @return {?}
- */
- toggle() {
- if (!this.disabled) {
- this.expanded = !this.expanded;
- }
- }
- /**
- * Sets the expanded state of the accordion item to false.
- * @return {?}
- */
- close() {
- if (!this.disabled) {
- this.expanded = false;
- }
- }
- /**
- * Sets the expanded state of the accordion item to true.
- * @return {?}
- */
- open() {
- if (!this.disabled) {
- this.expanded = true;
- }
- }
- /**
- * @private
- * @return {?}
- */
- _subscribeToOpenCloseAllActions() {
- return this.accordion._openCloseAllActions.subscribe((/**
- * @param {?} expanded
- * @return {?}
- */
- expanded => {
- // Only change expanded state if item is enabled
- if (!this.disabled) {
- this.expanded = expanded;
- }
- }));
- }
- }
- CdkAccordionItem.decorators = [
- { type: Directive, args: [{
- selector: 'cdk-accordion-item, [cdkAccordionItem]',
- exportAs: 'cdkAccordionItem',
- providers: [
- // Provide CdkAccordion as undefined to prevent nested accordion items from registering
- // to the same accordion.
- { provide: CdkAccordion, useValue: ɵ0 },
- ],
- },] },
- ];
- /** @nocollapse */
- CdkAccordionItem.ctorParameters = () => [
- { type: CdkAccordion, decorators: [{ type: Optional }, { type: SkipSelf }] },
- { type: ChangeDetectorRef },
- { type: UniqueSelectionDispatcher }
- ];
- CdkAccordionItem.propDecorators = {
- closed: [{ type: Output }],
- opened: [{ type: Output }],
- destroyed: [{ type: Output }],
- expandedChange: [{ type: Output }],
- expanded: [{ type: Input }],
- disabled: [{ type: Input }]
- };
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class CdkAccordionModule {
- }
- CdkAccordionModule.decorators = [
- { type: NgModule, args: [{
- exports: [CdkAccordion, CdkAccordionItem],
- declarations: [CdkAccordion, CdkAccordionItem],
- },] },
- ];
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- export { CdkAccordionItem, CdkAccordion, CdkAccordionModule };
- //# sourceMappingURL=accordion.js.map
|