{"version":3,"mappings":"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","names":["constructor","t","n","this","ngOnInit","K","e","f","selectors","o","dispatchLoadSubUsersAction","dispatchInitAuthTreeAction","store","dispatch","ve","selectSubUsersObservable","pipe","re","selectSubUsersLoadingObservable","selectAuthTreeLoading","selectInitAuthTree","R","factory","firstName","lastName","title","salutation","userSalutation","toLocaleUpperCase","password","passwordRepeat","Ce","super","id","flatIdfAuthorities","username","Ae","isGranted","Object","keys","find","idf","indexOf","authority","enumName","displayName","authorities","Map","W","push","c","set","ee","authorityGroups","s","r","l","h","d","g","se","b","tn","getAuthoritiesBlueprint","getAuthorityArrayFromAuthorityIds","forEach","get","Q","E","toggle","expand","collapse","isExpanded","toggleDescendants","collapseAll","expandDescendants","collapseDescendants","_trackByValue","getDescendants","expandAll","x","V","type","args","C","when","v","ae","start","dataSource","ngOnDestroy","ngAfterContentChecked","_switchDataSource","_observeRenderChanges","Ee","Array","Qe","I","subscribe","renderNodeChanges","_getNodeDef","insertNode","createEmbeddedView","u","m","viewQuery","hostAttrs","exportAs","directives","treeControl","trackBy","_nodeOutlet","static","_nodeDefs","descendants","role","data","_setExpanded","level","$e","ngDoCheck","focus","_setRoleFromData","ngAfterContentInit","updateChildrenNodes","_clear","_getNodeOutlet","N","inputs","provide","nodeOutlet","indent","_paddingIndent","_setPadding","_setLevelInput","_setIndentInput","S","Se","decorators","recursive","T","_toggle","w","J","L","Z","useExisting","k","features","disabled","tabIndex","A","node","D","M","U","decls","encapsulation","P","G","imports","_flattenNode","_flattenChildren","flattenNodes","expandFlattenedNodes","connect","disconnect","te","oxw","p","nestedNodeMap","label","it","readonly","expandable","children","flatNodeMap","initForm","initTree","checklistSelection","Je","getLevel","isExpandable","treeFlattener","et","transformer","getChildren","tt","assign","authTree","dataNodes","enableTree","subUserForm","formBuilder","group","validator","Ue","ngOnChanges","subUser","currentValue","Me","reset","updateValueAndValidity","setValue","setEditValidators","length","todoItemSelectionToggle","checkRootNodeSelection","isSelected","filter","every","deselect","select","getParentNode","checkAllParentsSelection","descendantsAllSelected","descendantsPartiallySelected","some","setValidators","togglePasswordValidators","srcElement","value","onCancel","submitted","cancel","emit","onSubmit","valid","notificationChange","html","buildRequest","log","info","subUserRestService","create","ngUnsubscribe$","returnObject","newPassword","openPasswordConfirmDialog","subUserService","notify","autoFocus","dialog","open","onUpdate","update","createAuthConfigFromSelectionModel","selected","toString","nt","getLabel","allIdfs","name","next","complete","ie","Ie","ze","fe","subUsers$","setAuthTree","idfs$","loadAllIdfs","authTreeLoading$","subUsersLoading$","cancelSubUserForm","subUser$","showSubUserForm","newSubUserForm","edit","remove","openDeleteConfirmDialog","afterClosed","notification","perform","getAuthorizedIdfs","map","includes","getFormattedIdfs","join","showNotification","setTimeout","oe","Bt","multi","openAll","closeAll","O","Re","Ft","expanded","close","_subscribeToOpenCloseAllActions","Y","de","outputs","closed","opened","destroyed","expandedChange","$","qt","zt","pe","Ye","qe","indicatorRotate","_","transform","bodyExpansion","height","q","$t","hideToggle","togglePosition","_hasSpacing","_getExpandedState","Le","xe","_containsFocus","B","y","ce","ue","ngContentSelectors","styles","animation","changeDetection","afterExpand","afterCollapse","_lazyContent","_body","he","le","Yt","we","_isExpanded","_getPanelId","_getTogglePosition","_showToggle","_getHeaderHeight","_keydown","ye","ngAfterViewInit","F","be","Jt","expandedHeight","collapsedHeight","me","ge","_handleHeaderKeydown","_handleHeaderFocus","H","_headers","displayMode","X","Te","path","component","pathMatch","z","Ot","ne","Ze","Pe","Be","Oe","_e","Fe","Wt","en"],"sources":["webpack:///src/app/modules/account/components/sub-user-management/sub-user-delete-confirm-dialog/sub-user-delete-confirm-dialog.component.ts","webpack:///src/app/modules/account/components/sub-user-management/sub-user-delete-confirm-dialog/sub-user-delete-confirm-dialog.component.html","webpack:///src/app/modules/account/components/sub-user-management/service/sub-user.service.ts","webpack:///src/app/modules/account/components/sub-user-management/model/sub-user-form.model.ts","webpack:///src/app/modules/account/components/sub-user-management/model/sub-user.model.ts","webpack:///src/app/modules/account/components/sub-user-management/repository/sub-user-model.repository.ts","webpack:///src/app/core/models/authority.model.ts","webpack:///src/app/core/models/authority-group.model.ts","webpack:///src/app/core/models/authority-category.model.ts","webpack:///src/app/core/services/authority.service.ts","webpack:///node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/tree.js","webpack:///node_modules/@angular/material/__ivy_ngcc__/fesm2015/tree.js","webpack:///src/app/modules/account/components/sub-user-management/model/flat-idf-authorities.model.ts","webpack:///src/app/modules/account/components/sub-user-management/sub-user-password-confirm-dialog/sub-user-password-confirm-dialog.component.ts","webpack:///src/app/modules/account/components/sub-user-management/sub-user-password-confirm-dialog/sub-user-password-confirm-dialog.component.html","webpack:///src/app/modules/account/components/sub-user-management/sub-user-form/sub-user-form.component.html","webpack:///src/app/modules/account/components/sub-user-management/sub-user-form/sub-user-form.component.ts","webpack:///src/app/modules/account/components/sub-user-management/sub-user-management.component.html","webpack:///src/app/modules/account/components/sub-user-management/sub-user-management.component.ts","webpack:///node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/accordion.js","webpack:///node_modules/@angular/material/__ivy_ngcc__/fesm2015/expansion.js","webpack:///src/app/modules/account/components/sub-user-management/sub-user-management.module.ts"],"sourcesContent":["import {Component, Inject, OnInit} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport {SubUserModel} from '../model/sub-user.model';\nexport interface SubUserDialogData {\n subUser: SubUserModel;\n perform: boolean;\n}\n@Component({\n selector: 'sub-user-delete-confirm-dialog',\n templateUrl: './sub-user-delete-confirm-dialog.component.html',\n styleUrls: ['./sub-user-delete-confirm-dialog.component.scss']\n})\nexport class SubUserDeleteConfirmDialogComponent implements OnInit {\n constructor(@Inject(MAT_DIALOG_DATA) public data: SubUserDialogData,\n public dialogRef: MatDialogRef) {\n }\n\n ngOnInit() {\n }\n}\n","

Mitbenutzer löschen

\n
\n Möchten Sie {{ data.subUser.username }} als Mitbenutzer löschen?\n
\n
\n \n \n
\n","import {select, Store} from '@ngrx/store';\nimport * as fromReducers from '../../../../../core/store/reducers';\nimport {UserRestService} from '../../../../../core/services/api/user.rest-service';\nimport {Observable} from 'rxjs';\nimport {Injectable} from '@angular/core';\nimport {InitAuthTree, LoadSubUsers} from 'app/core/store/actions/sub-user.actions';\nimport {UserService} from '../../../../../core/services/user.service';\nimport {SubUserModelRepository} from 'app/modules/account/components/sub-user-management/repository/sub-user-model.repository';\nimport {AuthorizationNodeModel} from 'app/modules/account/components/sub-user-management/model/authorization-node.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SubUserService {\n /**\n * @param {Store} store\n * @param userRestService\n * @param userService\n */\n constructor(public store: Store,\n public userRestService: UserRestService,\n public userService: UserService) {\n this.dispatchLoadSubUsersAction();\n this.dispatchInitAuthTreeAction();\n }\n\n dispatchLoadSubUsersAction() {\n this.store.dispatch(new LoadSubUsers());\n }\n\n dispatchInitAuthTreeAction() {\n this.store.dispatch(new InitAuthTree());\n }\n\n selectSubUsersObservable(): Observable {\n return this.store.pipe(select(fromReducers.getSubUsers));\n }\n\n selectSubUsersLoadingObservable(): Observable {\n return this.store.pipe(select(fromReducers.getSubUsersLoading));\n }\n\n selectAuthTreeLoading(): Observable {\n return this.store.pipe(select(fromReducers.getAuthTreeLoading));\n }\n\n selectInitAuthTree(): Observable {\n return this.store.pipe(select(fromReducers.getInitAuthTree));\n }\n}\n","export class SubUserFormModel {\n firstName: string;\n lastName: string;\n title: string;\n salutation: string;\n password: string;\n passwordRepeat: string;\n\n constructor(obj) {\n this.firstName = obj && obj.firstName || null;\n this.lastName = obj && obj.lastName || null;\n this.title = obj && obj.title || null;\n this.salutation = obj && obj.userSalutation && obj.userSalutation.toLocaleUpperCase() || null;\n if (this.salutation === null) {\n this.salutation = obj && obj.salutation && obj.salutation.toLocaleUpperCase() || null;\n }\n this.password = obj && obj.password || null;\n this.passwordRepeat = obj && obj.passwordRepeat || null;\n }\n}\n\n","import {SubUserFormModel} from './sub-user-form.model';\nimport {FlatIdfAuthoritiesModel} from './flat-idf-authorities.model';\n\nexport class SubUserModel extends SubUserFormModel {\n id: number;\n flatIdfAuthorities: FlatIdfAuthoritiesModel;\n username: string;\n\n constructor(obj: any = {}) {\n super(obj);\n this.id = obj && obj.id || null;\n this.flatIdfAuthorities = obj && obj.flatIdfAuthorities || null;\n this.username = obj && obj.username || null;\n }\n}\n","import {SubUserModel} from '../model/sub-user.model';\nimport {AuthorizationNodeModel} from '../model/authorization-node.model';\n\nexport class SubUserModelRepository extends SubUserModel {\n isGranted(an: AuthorizationNodeModel) {\n if (Object.keys(this.flatIdfAuthorities)\n && Object.keys(this.flatIdfAuthorities).find(idf => idf === an.idf)) {\n if (this.flatIdfAuthorities[an.idf]) {\n return this.flatIdfAuthorities[an.idf].indexOf(an.authority) !== -1;\n }\n }\n return false;\n }\n}\n\n","export class Authority {\n id: number;\n enumName: string;\n displayName: string;\n\n constructor(obj: any = {}) {\n this.id = obj && obj.id || null;\n this.enumName = obj && obj.enumName || '';\n this.displayName = obj && obj.displayName || '';\n }\n}","import {AuthorityCategory} from \"./authority-category.model\";\nimport {Authority} from \"./authority.model\";\n\nexport class AuthorityGroup {\n displayName: string;\n authorities: any[];\n\n constructor(obj: any = {}) {\n this.displayName = obj && obj.displayName || '';\n this.authorities = obj && obj.authorities || [];\n }\n}","import {Authority} from \"./authority.model\";\n\nexport class AuthorityCategory {\n displayName: string;\n authorities: Authority[];\n\n constructor(obj: any = {}) {\n this.displayName = obj && obj.displayName || [];\n this.authorities = obj && obj.authorities || [];\n }\n}","import {Authority} from \"../models/authority.model\";\nimport {Injectable} from \"@angular/core\";\nimport {AuthorityGroup} from \"../models/authority-group.model\";\nimport {AuthorityCategory} from \"../models/authority-category.model\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthorityService {\n\n public authorityGroups: AuthorityGroup[] = [];\n public authorities: Map = new Map();\n\n /**\n * Mocks authority data structures.\n * TODO: refactor and control the authority structure more efficient\n */\n constructor() {\n let meineDaten = new AuthorityGroup({displayName: \"Meine Daten\"});\n let extendedAuthorities = [];\n extendedAuthorities.push(new Authority({id: 15, enumName: 'BASISLISTE', displayName: 'BASIS'}));\n this.authorities.set(15, {id: 15, enumName: 'BASISLISTE', displayName: 'BASIS'});\n extendedAuthorities.push(new Authority({\n id: 16,\n enumName: 'BULK_BILL_RECEIPT',\n displayName: 'Beleg zur Sammelrechnung'\n }));\n this.authorities.set(16, {id: 16, enumName: 'BULK_BILL_RECEIPT', displayName: 'Beleg zur Sammelrechnung'});\n extendedAuthorities.push(new Authority({id: 17, enumName: 'BULK_BILL', displayName: 'Sammelrechnung'}));\n this.authorities.set(17, {id: 17, enumName: 'BULK_BILL', displayName: 'Sammelrechnung'});\n extendedAuthorities.push(new Authority({id: 18, enumName: 'CREDIT_NOTE', displayName: 'Gutschriften'}));\n this.authorities.set(18, {id: 18, enumName: 'CREDIT_NOTE', displayName: 'Gutschriften'});\n extendedAuthorities.push(new Authority({id: 19, enumName: 'VETERINARY_DRUG', displayName: 'Tierarzneimittel'}));\n this.authorities.set(19, {id: 19, enumName: 'VETERINARY_DRUG', displayName: 'Tierarzneimittel'});\n extendedAuthorities.push(new Authority({id: 20, enumName: 'TRANSFUSION', displayName: 'Transfusionsmittel'}));\n this.authorities.set(20, {id: 20, enumName: 'TRANSFUSION', displayName: 'Transfusionsmittel'});\n extendedAuthorities.push(new Authority({id: 21, enumName: 'REIMPORT', displayName: 'Reimporte'}));\n this.authorities.set(21, {id: 21, enumName: 'REIMPORT', displayName: 'Reimporte'});\n let belegsuche = new AuthorityCategory({authorities: extendedAuthorities, displayName: 'Belegsuche'});\n meineDaten.authorities.push(belegsuche);\n meineDaten.authorities.push(new Authority({\n id: 22,\n enumName: 'EXTENDED_BENEFIT',\n displayName: 'erweiterte Vorteilserläuterung'\n }));\n this.authorities.set(22, {id: 22, enumName: 'EXTENDED_BENEFIT', displayName: 'erweiterte Vorteilserläuterung'});\n meineDaten.authorities.push(new Authority({id: 23, enumName: 'MY_SALES', displayName: 'Mein Umsatz'}));\n this.authorities.set(23, {id: 23, enumName: 'MY_SALES', displayName: 'Mein Umsatz'});\n this.authorityGroups.push(meineDaten);\n let bestellungUndLieferung = new AuthorityGroup({displayName: \"Bestellung & Lieferung\"});\n\n extendedAuthorities = [];\n extendedAuthorities.push(new Authority({id: 24, enumName: 'BARGAIN_OFFERS', displayName: 'Sonderangebote'}));\n this.authorities.set(24, {id: 24, enumName: 'BARGAIN_OFFERS', displayName: 'Sonderangebote'});\n extendedAuthorities.push(new Authority({\n id: 25,\n enumName: 'EXCLUSIVE_OFFERS',\n displayName: 'Exklusivangebote'\n }));\n this.authorities.set(25, {id: 25, enumName: 'EXCLUSIVE_OFFERS', displayName: 'Exklusivangebote'});\n extendedAuthorities.push(new Authority({\n id: 26,\n enumName: 'STOCK_ENQUIRY',\n displayName: 'Lagerbestandsabfrage'\n }));\n this.authorities.set(26, {id: 26, enumName: 'STOCK_ENQUIRY', displayName: 'Lagerbestandsabfrage'});\n extendedAuthorities.push(new Authority({id: 27, enumName: 'TOP_PRISMA', displayName: 'Top-Prisma'}));\n this.authorities.set(27, {id: 27, enumName: 'TOP_PRISMA', displayName: 'Top-Prisma'});\n extendedAuthorities.push(new Authority({id: 28, enumName: 'EXTRA_PRISMA', displayName: 'Extra-Prisma'}));\n this.authorities.set(28, {id: 28, enumName: 'EXTRA_PRISMA', displayName: 'Extra-Prisma'});\n extendedAuthorities.push(new Authority({id: 29, enumName: 'PRO_FAX', displayName: 'ProFax'}));\n this.authorities.set(29, {id: 29, enumName: 'PRO_FAX', displayName: 'ProFax'});\n extendedAuthorities.push(new Authority({id: 30, enumName: 'PARAGRAPH_73_AMG', displayName: '$73 AMG'}));\n this.authorities.set(30, {id: 30, enumName: 'PARAGRAPH_73_AMG', displayName: '$73 AMG'});\n let bs = new AuthorityCategory({authorities: extendedAuthorities});\n\n let trackTrace = new Authority({id: 77, enumName: 'TRACK_TRACE', displayName:'Sendungsnachverfolgung'});\n bestellungUndLieferung.authorities.push(bs);\n bestellungUndLieferung.authorities.push(trackTrace);\n this.authorityGroups.push(bestellungUndLieferung);\n let angeboteUndServices = new AuthorityGroup({displayName: \"Angebote & Services\"});\n\n extendedAuthorities = [];\n extendedAuthorities.push(new Authority({id: 6, enumName: 'MVDA', displayName: 'MVDA'}));\n this.authorities.set(6, {id: 6, enumName: 'MVDA', displayName: 'MVDA'});\n extendedAuthorities.push(new Authority({id: 7, enumName: 'TEAM_FORUM', displayName: 'Teamkunde'}));\n this.authorities.set(7, {id: 7, enumName: 'TEAM_FORUM', displayName: 'Teamkunde'});\n extendedAuthorities.push(new Authority({id: 8, enumName: 'INITIATIVE_DIABETES', displayName: 'Diabetes'}));\n this.authorities.set(8, {id: 8, enumName: 'INITIATIVE_DIABETES', displayName: 'Diabetes'});\n extendedAuthorities.push(new Authority({id: 11, enumName: 'LIVPLUS', displayName: 'LIVPLUS'}));\n this.authorities.set(11, {id: 11, enumName: 'LIVPLUS', displayName: 'LIVPLUS'});\n extendedAuthorities.push(new Authority({id: 12, enumName: 'Payback', displayName: 'Payback'}));\n this.authorities.set(12, {id: 12, enumName: 'Payback', displayName: 'Payback'});\n extendedAuthorities.push(new Authority({id: 31, enumName: 'LIVSANE', displayName: 'LIVSANE'}));\n this.authorities.set(31, {id: 31, enumName: 'LIVSANE', displayName: 'LIVSANE'});\n extendedAuthorities.push(new Authority({id: 32, enumName: 'PCC', displayName: 'PCC'}));\n this.authorities.set(32, {id: 32, enumName: 'PCC', displayName: 'PCC'});\n extendedAuthorities.push(new Authority({\n id: 33,\n enumName: 'SEMINAR_RECOMMENDATIONS',\n displayName: 'Seminarempfehlungen'\n }));\n this.authorities.set(33, {id: 33, enumName: 'SEMINAR_RECOMMENDATIONS', displayName: 'Seminarempfehlungen'});\n let as = new AuthorityCategory({authorities: extendedAuthorities});\n angeboteUndServices.authorities.push(as);\n this.authorityGroups.push(angeboteUndServices);\n let persoenlicheEinstellungen = new AuthorityGroup({displayName: \"Meine persönlichen Einstellungen\"});\n\n extendedAuthorities = [];\n extendedAuthorities.push(new Authority({id: 35, enumName: 'MAILBOX', displayName: 'Postfach'}));\n this.authorities.set(35, {id: 35, enumName: 'MAILBOX', displayName: 'Postfach'});\n let pe = new AuthorityCategory({authorities: extendedAuthorities});\n persoenlicheEinstellungen.authorities.push(pe);\n this.authorityGroups.push(persoenlicheEinstellungen);\n let kontaktUndAnsprechpartner = new AuthorityGroup({displayName: \"Kontakt & Ansprechpartner\"});\n\n extendedAuthorities = [];\n extendedAuthorities.push(new Authority({\n id: 34,\n enumName: 'CONTACT_PERSON',\n displayName: 'Kontakt & Ansprechpartner'\n }));\n this.authorities.set(34, {id: 34, enumName: 'CONTACT_PERSON', displayName: 'Kontakt & Ansprechpartner'});\n let ka = new AuthorityCategory({authorities: extendedAuthorities});\n kontaktUndAnsprechpartner.authorities.push(ka);\n this.authorityGroups.push(kontaktUndAnsprechpartner);\n }\n\n /**\n * Return the structure that we want to display.\n */\n getAuthoritiesBlueprint(): AuthorityGroup[] {\n return this.authorityGroups;\n }\n\n /**\n * Checking the authorities in the form only adds the authority ids to a map but in order to display them in\n * the expansion panel header the displayNames are required, this function extends the simple numeric array\n * to Authority[].\n * @param authorityIds\n */\n getAuthorityArrayFromAuthorityIds(authorityIds): Authority[] {\n let authorities = [];\n authorityIds.forEach(authorityId => {\n authorities.push(this.authorities.get(authorityId));\n });\n return authorities;\n }\n}","import { SelectionModel, isDataSource } from '@angular/cdk/collections';\nimport { isObservable, Subject, BehaviorSubject, of } from 'rxjs';\nimport { take, filter, takeUntil } from 'rxjs/operators';\nimport { InjectionToken, Directive, ViewContainerRef, Inject, Optional, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, IterableDiffers, ChangeDetectorRef, Input, ViewChild, ContentChildren, ElementRef, HostListener, NgModule } from '@angular/core';\nimport { coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Directionality } from '@angular/cdk/bidi';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Base tree control. It has basic toggle/expand/collapse operations on a single data node. */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/bidi';\nclass BaseTreeControl {\n constructor() {\n /** A selection model with multi-selection to track expansion status. */\n this.expansionModel = new SelectionModel(true);\n }\n /** Toggles one single data node's expanded/collapsed state. */\n toggle(dataNode) {\n this.expansionModel.toggle(this._trackByValue(dataNode));\n }\n /** Expands one single data node. */\n expand(dataNode) {\n this.expansionModel.select(this._trackByValue(dataNode));\n }\n /** Collapses one single data node. */\n collapse(dataNode) {\n this.expansionModel.deselect(this._trackByValue(dataNode));\n }\n /** Whether a given data node is expanded or not. Returns true if the data node is expanded. */\n isExpanded(dataNode) {\n return this.expansionModel.isSelected(this._trackByValue(dataNode));\n }\n /** Toggles a subtree rooted at `node` recursively. */\n toggleDescendants(dataNode) {\n this.expansionModel.isSelected(this._trackByValue(dataNode)) ?\n this.collapseDescendants(dataNode) :\n this.expandDescendants(dataNode);\n }\n /** Collapse all dataNodes in the tree. */\n collapseAll() {\n this.expansionModel.clear();\n }\n /** Expands a subtree rooted at given data node recursively. */\n expandDescendants(dataNode) {\n let toBeProcessed = [dataNode];\n toBeProcessed.push(...this.getDescendants(dataNode));\n this.expansionModel.select(...toBeProcessed.map(value => this._trackByValue(value)));\n }\n /** Collapses a subtree rooted at given data node recursively. */\n collapseDescendants(dataNode) {\n let toBeProcessed = [dataNode];\n toBeProcessed.push(...this.getDescendants(dataNode));\n this.expansionModel.deselect(...toBeProcessed.map(value => this._trackByValue(value)));\n }\n _trackByValue(value) {\n return this.trackBy ? this.trackBy(value) : value;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Flat tree control. Able to expand/collapse a subtree recursively for flattened tree. */\nclass FlatTreeControl extends BaseTreeControl {\n /** Construct with flat tree data node functions getLevel and isExpandable. */\n constructor(getLevel, isExpandable, options) {\n super();\n this.getLevel = getLevel;\n this.isExpandable = isExpandable;\n this.options = options;\n if (this.options) {\n this.trackBy = this.options.trackBy;\n }\n }\n /**\n * Gets a list of the data node's subtree of descendent data nodes.\n *\n * To make this working, the `dataNodes` of the TreeControl must be flattened tree nodes\n * with correct levels.\n */\n getDescendants(dataNode) {\n const startIndex = this.dataNodes.indexOf(dataNode);\n const results = [];\n // Goes through flattened tree nodes in the `dataNodes` array, and get all descendants.\n // The level of descendants of a tree node must be greater than the level of the given\n // tree node.\n // If we reach a node whose level is equal to the level of the tree node, we hit a sibling.\n // If we reach a node whose level is greater than the level of the tree node, we hit a\n // sibling of an ancestor.\n for (let i = startIndex + 1; i < this.dataNodes.length && this.getLevel(dataNode) < this.getLevel(this.dataNodes[i]); i++) {\n results.push(this.dataNodes[i]);\n }\n return results;\n }\n /**\n * Expands all data nodes in the tree.\n *\n * To make this working, the `dataNodes` variable of the TreeControl must be set to all flattened\n * data nodes of the tree.\n */\n expandAll() {\n this.expansionModel.select(...this.dataNodes.map(node => this._trackByValue(node)));\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Nested tree control. Able to expand/collapse a subtree recursively for NestedNode type. */\nclass NestedTreeControl extends BaseTreeControl {\n /** Construct with nested tree function getChildren. */\n constructor(getChildren, options) {\n super();\n this.getChildren = getChildren;\n this.options = options;\n if (this.options) {\n this.trackBy = this.options.trackBy;\n }\n }\n /**\n * Expands all dataNodes in the tree.\n *\n * To make this working, the `dataNodes` variable of the TreeControl must be set to all root level\n * data nodes of the tree.\n */\n expandAll() {\n this.expansionModel.clear();\n const allNodes = this.dataNodes.reduce((accumulator, dataNode) => [...accumulator, ...this.getDescendants(dataNode), dataNode], []);\n this.expansionModel.select(...allNodes.map(node => this._trackByValue(node)));\n }\n /** Gets a list of descendant dataNodes of a subtree rooted at given data node recursively. */\n getDescendants(dataNode) {\n const descendants = [];\n this._getDescendants(descendants, dataNode);\n // Remove the node itself\n return descendants.splice(1);\n }\n /** A helper function to get descendants recursively. */\n _getDescendants(descendants, dataNode) {\n descendants.push(dataNode);\n const childrenNodes = this.getChildren(dataNode);\n if (Array.isArray(childrenNodes)) {\n childrenNodes.forEach((child) => this._getDescendants(descendants, child));\n }\n else if (isObservable(childrenNodes)) {\n // TypeScript as of version 3.5 doesn't seem to treat `Boolean` like a function that\n // returns a `boolean` specifically in the context of `filter`, so we manually clarify that.\n childrenNodes.pipe(take(1), filter(Boolean))\n .subscribe(children => {\n for (const child of children) {\n this._getDescendants(descendants, child);\n }\n });\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token used to provide a `CdkTreeNode` to its outlet.\n * Used primarily to avoid circular imports.\n * @docs-private\n */\nconst CDK_TREE_NODE_OUTLET_NODE = new InjectionToken('CDK_TREE_NODE_OUTLET_NODE');\n/**\n * Outlet for nested CdkNode. Put `[cdkTreeNodeOutlet]` on a tag to place children dataNodes\n * inside the outlet.\n */\nclass CdkTreeNodeOutlet {\n constructor(viewContainer, _node) {\n this.viewContainer = viewContainer;\n this._node = _node;\n }\n}\nCdkTreeNodeOutlet.ɵfac = function CdkTreeNodeOutlet_Factory(t) { return new (t || CdkTreeNodeOutlet)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(CDK_TREE_NODE_OUTLET_NODE, 8)); };\nCdkTreeNodeOutlet.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkTreeNodeOutlet, selectors: [[\"\", \"cdkTreeNodeOutlet\", \"\"]] });\nCdkTreeNodeOutlet.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_TREE_NODE_OUTLET_NODE,] }, { type: Optional }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeNodeOutlet, [{\n type: Directive,\n args: [{\n selector: '[cdkTreeNodeOutlet]'\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TREE_NODE_OUTLET_NODE]\n }, {\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Context provided to the tree node component. */\nclass CdkTreeNodeOutletContext {\n constructor(data) {\n this.$implicit = data;\n }\n}\n/**\n * Data node definition for the CdkTree.\n * Captures the node's template and a when predicate that describes when this node should be used.\n */\nclass CdkTreeNodeDef {\n /** @docs-private */\n constructor(template) {\n this.template = template;\n }\n}\nCdkTreeNodeDef.ɵfac = function CdkTreeNodeDef_Factory(t) { return new (t || CdkTreeNodeDef)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCdkTreeNodeDef.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkTreeNodeDef, selectors: [[\"\", \"cdkTreeNodeDef\", \"\"]], inputs: { when: [\"cdkTreeNodeDefWhen\", \"when\"] } });\nCdkTreeNodeDef.ctorParameters = () => [\n { type: TemplateRef }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeNodeDef, [{\n type: Directive,\n args: [{\n selector: '[cdkTreeNodeDef]',\n inputs: [\n 'when: cdkTreeNodeDefWhen'\n ]\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Returns an error to be thrown when there is no usable data.\n * @docs-private\n */\nfunction getTreeNoValidDataSourceError() {\n return Error(`A valid data source must be provided.`);\n}\n/**\n * Returns an error to be thrown when there are multiple nodes that are missing a when function.\n * @docs-private\n */\nfunction getTreeMultipleDefaultNodeDefsError() {\n return Error(`There can only be one default row without a when predicate function.`);\n}\n/**\n * Returns an error to be thrown when there are no matching node defs for a particular set of data.\n * @docs-private\n */\nfunction getTreeMissingMatchingNodeDefError() {\n return Error(`Could not find a matching node definition for the provided node data.`);\n}\n/**\n * Returns an error to be thrown when there are tree control.\n * @docs-private\n */\nfunction getTreeControlMissingError() {\n return Error(`Could not find a tree control for the tree.`);\n}\n/**\n * Returns an error to be thrown when tree control did not implement functions for flat/nested node.\n * @docs-private\n */\nfunction getTreeControlFunctionsMissingError() {\n return Error(`Could not find functions for nested/flat tree in tree control.`);\n}\n\n/**\n * CDK tree component that connects with a data source to retrieve data of type `T` and renders\n * dataNodes with hierarchy. Updates the dataNodes when new data is provided by the data source.\n */\nclass CdkTree {\n constructor(_differs, _changeDetectorRef) {\n this._differs = _differs;\n this._changeDetectorRef = _changeDetectorRef;\n /** Subject that emits when the component has been destroyed. */\n this._onDestroy = new Subject();\n /** Level of nodes */\n this._levels = new Map();\n // TODO(tinayuangao): Setup a listener for scrolling, emit the calculated view to viewChange.\n // Remove the MAX_VALUE in viewChange\n /**\n * Stream containing the latest information on what rows are being displayed on screen.\n * Can be used by the data source to as a heuristic of what data should be provided.\n */\n this.viewChange = new BehaviorSubject({ start: 0, end: Number.MAX_VALUE });\n }\n /**\n * Provides a stream containing the latest data array to render. Influenced by the tree's\n * stream of view window (what dataNodes are currently on screen).\n * Data source can be an observable of data array, or a data array to render.\n */\n get dataSource() { return this._dataSource; }\n set dataSource(dataSource) {\n if (this._dataSource !== dataSource) {\n this._switchDataSource(dataSource);\n }\n }\n ngOnInit() {\n this._dataDiffer = this._differs.find([]).create(this.trackBy);\n if (!this.treeControl && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeControlMissingError();\n }\n }\n ngOnDestroy() {\n this._nodeOutlet.viewContainer.clear();\n this.viewChange.complete();\n this._onDestroy.next();\n this._onDestroy.complete();\n if (this._dataSource && typeof this._dataSource.disconnect === 'function') {\n this.dataSource.disconnect(this);\n }\n if (this._dataSubscription) {\n this._dataSubscription.unsubscribe();\n this._dataSubscription = null;\n }\n }\n ngAfterContentChecked() {\n const defaultNodeDefs = this._nodeDefs.filter(def => !def.when);\n if (defaultNodeDefs.length > 1 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeMultipleDefaultNodeDefsError();\n }\n this._defaultNodeDef = defaultNodeDefs[0];\n if (this.dataSource && this._nodeDefs && !this._dataSubscription) {\n this._observeRenderChanges();\n }\n }\n // TODO(tinayuangao): Work on keyboard traversal and actions, make sure it's working for RTL\n // and nested trees.\n /**\n * Switch to the provided data source by resetting the data and unsubscribing from the current\n * render change subscription if one exists. If the data source is null, interpret this by\n * clearing the node outlet. Otherwise start listening for new data.\n */\n _switchDataSource(dataSource) {\n if (this._dataSource && typeof this._dataSource.disconnect === 'function') {\n this.dataSource.disconnect(this);\n }\n if (this._dataSubscription) {\n this._dataSubscription.unsubscribe();\n this._dataSubscription = null;\n }\n // Remove the all dataNodes if there is now no data source\n if (!dataSource) {\n this._nodeOutlet.viewContainer.clear();\n }\n this._dataSource = dataSource;\n if (this._nodeDefs) {\n this._observeRenderChanges();\n }\n }\n /** Set up a subscription for the data provided by the data source. */\n _observeRenderChanges() {\n let dataStream;\n if (isDataSource(this._dataSource)) {\n dataStream = this._dataSource.connect(this);\n }\n else if (isObservable(this._dataSource)) {\n dataStream = this._dataSource;\n }\n else if (Array.isArray(this._dataSource)) {\n dataStream = of(this._dataSource);\n }\n if (dataStream) {\n this._dataSubscription = dataStream.pipe(takeUntil(this._onDestroy))\n .subscribe(data => this.renderNodeChanges(data));\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getTreeNoValidDataSourceError();\n }\n }\n /** Check for changes made in the data and render each change (node added/removed/moved). */\n renderNodeChanges(data, dataDiffer = this._dataDiffer, viewContainer = this._nodeOutlet.viewContainer, parentData) {\n const changes = dataDiffer.diff(data);\n if (!changes) {\n return;\n }\n changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {\n if (item.previousIndex == null) {\n this.insertNode(data[currentIndex], currentIndex, viewContainer, parentData);\n }\n else if (currentIndex == null) {\n viewContainer.remove(adjustedPreviousIndex);\n this._levels.delete(item.item);\n }\n else {\n const view = viewContainer.get(adjustedPreviousIndex);\n viewContainer.move(view, currentIndex);\n }\n });\n this._changeDetectorRef.detectChanges();\n }\n /**\n * Finds the matching node definition that should be used for this node data. If there is only\n * one node definition, it is returned. Otherwise, find the node definition that has a when\n * predicate that returns true with the data. If none return true, return the default node\n * definition.\n */\n _getNodeDef(data, i) {\n if (this._nodeDefs.length === 1) {\n return this._nodeDefs.first;\n }\n const nodeDef = this._nodeDefs.find(def => def.when && def.when(i, data)) || this._defaultNodeDef;\n if (!nodeDef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeMissingMatchingNodeDefError();\n }\n return nodeDef;\n }\n /**\n * Create the embedded view for the data node template and place it in the correct index location\n * within the data node view container.\n */\n insertNode(nodeData, index, viewContainer, parentData) {\n const node = this._getNodeDef(nodeData, index);\n // Node context that will be provided to created embedded view\n const context = new CdkTreeNodeOutletContext(nodeData);\n // If the tree is flat tree, then use the `getLevel` function in flat tree control\n // Otherwise, use the level of parent node.\n if (this.treeControl.getLevel) {\n context.level = this.treeControl.getLevel(nodeData);\n }\n else if (typeof parentData !== 'undefined' && this._levels.has(parentData)) {\n context.level = this._levels.get(parentData) + 1;\n }\n else {\n context.level = 0;\n }\n this._levels.set(nodeData, context.level);\n // Use default tree nodeOutlet, or nested node's nodeOutlet\n const container = viewContainer ? viewContainer : this._nodeOutlet.viewContainer;\n container.createEmbeddedView(node.template, context, index);\n // Set the data to just created `CdkTreeNode`.\n // The `CdkTreeNode` created from `createEmbeddedView` will be saved in static variable\n // `mostRecentTreeNode`. We get it from static variable and pass the node data to it.\n if (CdkTreeNode.mostRecentTreeNode) {\n CdkTreeNode.mostRecentTreeNode.data = nodeData;\n }\n }\n}\nCdkTree.ɵfac = function CdkTree_Factory(t) { return new (t || CdkTree)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nCdkTree.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CdkTree, selectors: [[\"cdk-tree\"]], contentQueries: function CdkTree_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkTreeNodeDef, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._nodeDefs = _t);\n } }, viewQuery: function CdkTree_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(CdkTreeNodeOutlet, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._nodeOutlet = _t.first);\n } }, hostAttrs: [\"role\", \"tree\", 1, \"cdk-tree\"], inputs: { dataSource: \"dataSource\", treeControl: \"treeControl\", trackBy: \"trackBy\" }, exportAs: [\"cdkTree\"], decls: 1, vars: 0, consts: [[\"cdkTreeNodeOutlet\", \"\"]], template: function CdkTree_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n } }, directives: [CdkTreeNodeOutlet], encapsulation: 2 });\nCdkTree.ctorParameters = () => [\n { type: IterableDiffers },\n { type: ChangeDetectorRef }\n];\nCdkTree.propDecorators = {\n dataSource: [{ type: Input }],\n treeControl: [{ type: Input }],\n trackBy: [{ type: Input }],\n _nodeOutlet: [{ type: ViewChild, args: [CdkTreeNodeOutlet, { static: true },] }],\n _nodeDefs: [{ type: ContentChildren, args: [CdkTreeNodeDef, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n },] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTree, [{\n type: Component,\n args: [{\n selector: 'cdk-tree',\n exportAs: 'cdkTree',\n template: ``,\n host: {\n 'class': 'cdk-tree',\n 'role': 'tree'\n },\n encapsulation: ViewEncapsulation.None,\n // The \"OnPush\" status for the `CdkTree` component is effectively a noop, so we are removing it.\n // The view for `CdkTree` consists entirely of templates declared in other views. As they are\n // declared elsewhere, they are checked when their declaration points are checked.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default\n }]\n }], function () { return [{ type: ɵngcc0.IterableDiffers }, { type: ɵngcc0.ChangeDetectorRef }]; }, { dataSource: [{\n type: Input\n }], treeControl: [{\n type: Input\n }], trackBy: [{\n type: Input\n }], _nodeOutlet: [{\n type: ViewChild,\n args: [CdkTreeNodeOutlet, { static: true }]\n }], _nodeDefs: [{\n type: ContentChildren,\n args: [CdkTreeNodeDef, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }]\n }] }); })();\n/**\n * Tree node for CdkTree. It contains the data in the tree node.\n */\nclass CdkTreeNode {\n constructor(_elementRef, _tree) {\n this._elementRef = _elementRef;\n this._tree = _tree;\n /** Subject that emits when the component has been destroyed. */\n this._destroyed = new Subject();\n /** Emits when the node's data has changed. */\n this._dataChanges = new Subject();\n CdkTreeNode.mostRecentTreeNode = this;\n // The classes are directly added here instead of in the host property because classes on\n // the host property are not inherited with View Engine. It is not set as a @HostBinding because\n // it is not set by the time it's children nodes try to read the class from it.\n // TODO: move to host after View Engine deprecation\n this._elementRef.nativeElement.classList.add('cdk-tree-node');\n this.role = 'treeitem';\n }\n /**\n * The role of the tree node.\n * @deprecated The correct role is 'treeitem', 'group' should not be used. This input will be\n * removed in a future version.\n * @breaking-change 12.0.0 Remove this input\n */\n get role() { return 'treeitem'; }\n set role(_role) {\n // TODO: move to host after View Engine deprecation\n this._elementRef.nativeElement.setAttribute('role', _role);\n }\n /** The tree node's data. */\n get data() { return this._data; }\n set data(value) {\n if (value !== this._data) {\n this._data = value;\n this._setRoleFromData();\n this._dataChanges.next();\n }\n }\n get isExpanded() {\n return this._tree.treeControl.isExpanded(this._data);\n }\n _setExpanded(_expanded) {\n this._isAriaExpanded = _expanded;\n this._elementRef.nativeElement.setAttribute('aria-expanded', `${_expanded}`);\n }\n get level() {\n // If the treeControl has a getLevel method, use it to get the level. Otherwise read the\n // aria-level off the parent node and use it as the level for this node (note aria-level is\n // 1-indexed, while this property is 0-indexed, so we don't need to increment).\n return this._tree.treeControl.getLevel ?\n this._tree.treeControl.getLevel(this._data) : this._parentNodeAriaLevel;\n }\n ngOnInit() {\n this._parentNodeAriaLevel = getParentNodeAriaLevel(this._elementRef.nativeElement);\n this._elementRef.nativeElement.setAttribute('aria-level', `${this.level + 1}`);\n }\n ngDoCheck() {\n // aria-expanded is be set here because the expanded state is stored in the tree control and\n // the node isn't aware when the state is changed.\n // It is not set using a @HostBinding because they sometimes get lost with Mixin based classes.\n // TODO: move to host after View Engine deprecation\n if (this.isExpanded != this._isAriaExpanded) {\n this._setExpanded(this.isExpanded);\n }\n }\n ngOnDestroy() {\n // If this is the last tree node being destroyed,\n // clear out the reference to avoid leaking memory.\n if (CdkTreeNode.mostRecentTreeNode === this) {\n CdkTreeNode.mostRecentTreeNode = null;\n }\n this._dataChanges.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Focuses the menu item. Implements for FocusableOption. */\n focus() {\n this._elementRef.nativeElement.focus();\n }\n // TODO: role should eventually just be set in the component host\n _setRoleFromData() {\n if (!this._tree.treeControl.isExpandable && !this._tree.treeControl.getChildren &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeControlFunctionsMissingError();\n }\n this.role = 'treeitem';\n }\n}\nCdkTreeNode.ɵfac = function CdkTreeNode_Factory(t) { return new (t || CdkTreeNode)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(CdkTree)); };\nCdkTreeNode.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkTreeNode, selectors: [[\"cdk-tree-node\"]], inputs: { role: \"role\" }, exportAs: [\"cdkTreeNode\"] });\n/**\n * The most recently created `CdkTreeNode`. We save it in static variable so we can retrieve it\n * in `CdkTree` and set the data to it.\n */\nCdkTreeNode.mostRecentTreeNode = null;\nCdkTreeNode.ctorParameters = () => [\n { type: ElementRef },\n { type: CdkTree }\n];\nCdkTreeNode.propDecorators = {\n role: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeNode, [{\n type: Directive,\n args: [{\n selector: 'cdk-tree-node',\n exportAs: 'cdkTreeNode'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: CdkTree }]; }, { role: [{\n type: Input\n }] }); })();\nfunction getParentNodeAriaLevel(nodeElement) {\n let parent = nodeElement.parentElement;\n while (parent && !isNodeElement(parent)) {\n parent = parent.parentElement;\n }\n if (!parent) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw Error('Incorrect tree structure containing detached node.');\n }\n else {\n return -1;\n }\n }\n else if (parent.classList.contains('cdk-nested-tree-node')) {\n return coerceNumberProperty(parent.getAttribute('aria-level'));\n }\n else {\n // The ancestor element is the cdk-tree itself\n return 0;\n }\n}\nfunction isNodeElement(element) {\n const classList = element.classList;\n return !!((classList === null || classList === void 0 ? void 0 : classList.contains('cdk-nested-tree-node')) || (classList === null || classList === void 0 ? void 0 : classList.contains('cdk-tree')));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Nested node is a child of ``. It works with nested tree.\n * By using `cdk-nested-tree-node` component in tree node template, children of the parent node will\n * be added in the `cdkTreeNodeOutlet` in tree node template.\n * The children of node will be automatically added to `cdkTreeNodeOutlet`.\n */\nclass CdkNestedTreeNode extends CdkTreeNode {\n constructor(elementRef, tree, _differs) {\n super(elementRef, tree);\n this._differs = _differs;\n // The classes are directly added here instead of in the host property because classes on\n // the host property are not inherited with View Engine. It is not set as a @HostBinding because\n // it is not set by the time it's children nodes try to read the class from it.\n // TODO: move to host after View Engine deprecation\n elementRef.nativeElement.classList.add('cdk-nested-tree-node');\n }\n ngAfterContentInit() {\n this._dataDiffer = this._differs.find([]).create(this._tree.trackBy);\n if (!this._tree.treeControl.getChildren && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeControlFunctionsMissingError();\n }\n const childrenNodes = this._tree.treeControl.getChildren(this.data);\n if (Array.isArray(childrenNodes)) {\n this.updateChildrenNodes(childrenNodes);\n }\n else if (isObservable(childrenNodes)) {\n childrenNodes.pipe(takeUntil(this._destroyed))\n .subscribe(result => this.updateChildrenNodes(result));\n }\n this.nodeOutlet.changes.pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateChildrenNodes());\n }\n // This is a workaround for https://github.com/angular/angular/issues/23091\n // In aot mode, the lifecycle hooks from parent class are not called.\n ngOnInit() {\n super.ngOnInit();\n }\n ngDoCheck() {\n super.ngDoCheck();\n }\n ngOnDestroy() {\n this._clear();\n super.ngOnDestroy();\n }\n /** Add children dataNodes to the NodeOutlet */\n updateChildrenNodes(children) {\n const outlet = this._getNodeOutlet();\n if (children) {\n this._children = children;\n }\n if (outlet && this._children) {\n const viewContainer = outlet.viewContainer;\n this._tree.renderNodeChanges(this._children, this._dataDiffer, viewContainer, this._data);\n }\n else {\n // Reset the data differ if there's no children nodes displayed\n this._dataDiffer.diff([]);\n }\n }\n /** Clear the children dataNodes. */\n _clear() {\n const outlet = this._getNodeOutlet();\n if (outlet) {\n outlet.viewContainer.clear();\n this._dataDiffer.diff([]);\n }\n }\n /** Gets the outlet for the current node. */\n _getNodeOutlet() {\n const outlets = this.nodeOutlet;\n // Note that since we use `descendants: true` on the query, we have to ensure\n // that we don't pick up the outlet of a child node by accident.\n return outlets && outlets.find(outlet => !outlet._node || outlet._node === this);\n }\n}\nCdkNestedTreeNode.ɵfac = function CdkNestedTreeNode_Factory(t) { return new (t || CdkNestedTreeNode)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(CdkTree), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers)); };\nCdkNestedTreeNode.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkNestedTreeNode, selectors: [[\"cdk-nested-tree-node\"]], contentQueries: function CdkNestedTreeNode_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkTreeNodeOutlet, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.nodeOutlet = _t);\n } }, inputs: { role: \"role\", disabled: \"disabled\", tabIndex: \"tabIndex\" }, exportAs: [\"cdkNestedTreeNode\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: CdkTreeNode, useExisting: CdkNestedTreeNode },\n { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: CdkNestedTreeNode }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nCdkNestedTreeNode.ctorParameters = () => [\n { type: ElementRef },\n { type: CdkTree },\n { type: IterableDiffers }\n];\nCdkNestedTreeNode.propDecorators = {\n nodeOutlet: [{ type: ContentChildren, args: [CdkTreeNodeOutlet, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n },] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkNestedTreeNode, [{\n type: Directive,\n args: [{\n selector: 'cdk-nested-tree-node',\n exportAs: 'cdkNestedTreeNode',\n inputs: ['role', 'disabled', 'tabIndex'],\n providers: [\n { provide: CdkTreeNode, useExisting: CdkNestedTreeNode },\n { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: CdkNestedTreeNode }\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: CdkTree }, { type: ɵngcc0.IterableDiffers }]; }, { nodeOutlet: [{\n type: ContentChildren,\n args: [CdkTreeNodeOutlet, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n/**\n * Indent for the children tree dataNodes.\n * This directive will add left-padding to the node to show hierarchy.\n */\nclass CdkTreeNodePadding {\n constructor(_treeNode, _tree, _element, _dir) {\n this._treeNode = _treeNode;\n this._tree = _tree;\n this._element = _element;\n this._dir = _dir;\n /** Subject that emits when the component has been destroyed. */\n this._destroyed = new Subject();\n /** CSS units used for the indentation value. */\n this.indentUnits = 'px';\n this._indent = 40;\n this._setPadding();\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => this._setPadding(true));\n }\n // In Ivy the indentation binding might be set before the tree node's data has been added,\n // which means that we'll miss the first render. We have to subscribe to changes in the\n // data to ensure that everything is up to date.\n _treeNode._dataChanges.subscribe(() => this._setPadding());\n }\n /** The level of depth of the tree node. The padding will be `level * indent` pixels. */\n get level() { return this._level; }\n set level(value) { this._setLevelInput(value); }\n /**\n * The indent for each level. Can be a number or a CSS string.\n * Default number 40px from material design menu sub-menu spec.\n */\n get indent() { return this._indent; }\n set indent(indent) { this._setIndentInput(indent); }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** The padding indent value for the tree node. Returns a string with px numbers if not null. */\n _paddingIndent() {\n const nodeLevel = (this._treeNode.data && this._tree.treeControl.getLevel)\n ? this._tree.treeControl.getLevel(this._treeNode.data)\n : null;\n const level = this._level == null ? nodeLevel : this._level;\n return typeof level === 'number' ? `${level * this._indent}${this.indentUnits}` : null;\n }\n _setPadding(forceChange = false) {\n const padding = this._paddingIndent();\n if (padding !== this._currentPadding || forceChange) {\n const element = this._element.nativeElement;\n const paddingProp = this._dir && this._dir.value === 'rtl' ? 'paddingRight' : 'paddingLeft';\n const resetProp = paddingProp === 'paddingLeft' ? 'paddingRight' : 'paddingLeft';\n element.style[paddingProp] = padding || '';\n element.style[resetProp] = '';\n this._currentPadding = padding;\n }\n }\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n _setLevelInput(value) {\n // Set to null as the fallback value so that _setPadding can fall back to the node level if the\n // consumer set the directive as `cdkTreeNodePadding=\"\"`. We still want to take this value if\n // they set 0 explicitly.\n this._level = coerceNumberProperty(value, null);\n this._setPadding();\n }\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n _setIndentInput(indent) {\n let value = indent;\n let units = 'px';\n if (typeof indent === 'string') {\n const parts = indent.split(cssUnitPattern);\n value = parts[0];\n units = parts[1] || units;\n }\n this.indentUnits = units;\n this._indent = coerceNumberProperty(value);\n this._setPadding();\n }\n}\nCdkTreeNodePadding.ɵfac = function CdkTreeNodePadding_Factory(t) { return new (t || CdkTreeNodePadding)(ɵngcc0.ɵɵdirectiveInject(CdkTreeNode), ɵngcc0.ɵɵdirectiveInject(CdkTree), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Directionality, 8)); };\nCdkTreeNodePadding.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkTreeNodePadding, selectors: [[\"\", \"cdkTreeNodePadding\", \"\"]], inputs: { level: [\"cdkTreeNodePadding\", \"level\"], indent: [\"cdkTreeNodePaddingIndent\", \"indent\"] } });\nCdkTreeNodePadding.ctorParameters = () => [\n { type: CdkTreeNode },\n { type: CdkTree },\n { type: ElementRef },\n { type: Directionality, decorators: [{ type: Optional }] }\n];\nCdkTreeNodePadding.propDecorators = {\n level: [{ type: Input, args: ['cdkTreeNodePadding',] }],\n indent: [{ type: Input, args: ['cdkTreeNodePaddingIndent',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeNodePadding, [{\n type: Directive,\n args: [{\n selector: '[cdkTreeNodePadding]'\n }]\n }], function () { return [{ type: CdkTreeNode }, { type: CdkTree }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.Directionality, decorators: [{\n type: Optional\n }] }]; }, { level: [{\n type: Input,\n args: ['cdkTreeNodePadding']\n }], indent: [{\n type: Input,\n args: ['cdkTreeNodePaddingIndent']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Node toggle to expand/collapse the node.\n */\nclass CdkTreeNodeToggle {\n constructor(_tree, _treeNode) {\n this._tree = _tree;\n this._treeNode = _treeNode;\n this._recursive = false;\n }\n /** Whether expand/collapse the node recursively. */\n get recursive() { return this._recursive; }\n set recursive(value) { this._recursive = coerceBooleanProperty(value); }\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _toggle(event) {\n this.recursive\n ? this._tree.treeControl.toggleDescendants(this._treeNode.data)\n : this._tree.treeControl.toggle(this._treeNode.data);\n event.stopPropagation();\n }\n}\nCdkTreeNodeToggle.ɵfac = function CdkTreeNodeToggle_Factory(t) { return new (t || CdkTreeNodeToggle)(ɵngcc0.ɵɵdirectiveInject(CdkTree), ɵngcc0.ɵɵdirectiveInject(CdkTreeNode)); };\nCdkTreeNodeToggle.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkTreeNodeToggle, selectors: [[\"\", \"cdkTreeNodeToggle\", \"\"]], hostBindings: function CdkTreeNodeToggle_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function CdkTreeNodeToggle_click_HostBindingHandler($event) { return ctx._toggle($event); });\n } }, inputs: { recursive: [\"cdkTreeNodeToggleRecursive\", \"recursive\"] } });\nCdkTreeNodeToggle.ctorParameters = () => [\n { type: CdkTree },\n { type: CdkTreeNode }\n];\nCdkTreeNodeToggle.propDecorators = {\n recursive: [{ type: Input, args: ['cdkTreeNodeToggleRecursive',] }],\n _toggle: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeNodeToggle, [{\n type: Directive,\n args: [{ selector: '[cdkTreeNodeToggle]' }]\n }], function () { return [{ type: CdkTree }, { type: CdkTreeNode }]; }, { recursive: [{\n type: Input,\n args: ['cdkTreeNodeToggleRecursive']\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _toggle: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst EXPORTED_DECLARATIONS = [\n CdkNestedTreeNode,\n CdkTreeNodeDef,\n CdkTreeNodePadding,\n CdkTreeNodeToggle,\n CdkTree,\n CdkTreeNode,\n CdkTreeNodeOutlet,\n];\nclass CdkTreeModule {\n}\nCdkTreeModule.ɵfac = function CdkTreeModule_Factory(t) { return new (t || CdkTreeModule)(); };\nCdkTreeModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CdkTreeModule });\nCdkTreeModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeModule, [{\n type: NgModule,\n args: [{\n exports: EXPORTED_DECLARATIONS,\n declarations: EXPORTED_DECLARATIONS\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CdkTreeModule, { declarations: [CdkNestedTreeNode, CdkTreeNodeDef, CdkTreeNodePadding, CdkTreeNodeToggle, CdkTree, CdkTreeNode, CdkTreeNodeOutlet], exports: [CdkNestedTreeNode, CdkTreeNodeDef, CdkTreeNodePadding, CdkTreeNodeToggle, CdkTree, CdkTreeNode, CdkTreeNodeOutlet] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BaseTreeControl, CDK_TREE_NODE_OUTLET_NODE, CdkNestedTreeNode, CdkTree, CdkTreeModule, CdkTreeNode, CdkTreeNodeDef, CdkTreeNodeOutlet, CdkTreeNodeOutletContext, CdkTreeNodePadding, CdkTreeNodeToggle, FlatTreeControl, NestedTreeControl, getTreeControlFunctionsMissingError, getTreeControlMissingError, getTreeMissingMatchingNodeDefError, getTreeMultipleDefaultNodeDefsError, getTreeNoValidDataSourceError };\n\n","import { CdkTreeNode, CdkTree, CdkTreeNodeDef, CdkNestedTreeNode, CDK_TREE_NODE_OUTLET_NODE, CdkTreeNodePadding, CdkTreeNodeOutlet, CdkTreeNodeToggle, CdkTreeModule } from '@angular/cdk/tree';\nimport { Directive, ElementRef, Attribute, Input, IterableDiffers, ViewContainerRef, Inject, Optional, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, NgModule } from '@angular/core';\nimport { mixinTabIndex, mixinDisabled, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, merge } from 'rxjs';\nimport { take, map } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/tree';\nconst _MatTreeNodeBase = mixinTabIndex(mixinDisabled(CdkTreeNode));\n/**\n * Wrapper for the CdkTree node with Material design styles.\n */\nclass MatTreeNode extends _MatTreeNodeBase {\n constructor(elementRef, tree, tabIndex) {\n super(elementRef, tree);\n this.tabIndex = Number(tabIndex) || 0;\n // The classes are directly added here instead of in the host property because classes on\n // the host property are not inherited with View Engine. It is not set as a @HostBinding because\n // it is not set by the time it's children nodes try to read the class from it.\n // TODO: move to host after View Engine deprecation\n elementRef.nativeElement.classList.add('mat-tree-node');\n }\n // This is a workaround for https://github.com/angular/angular/issues/23091\n // In aot mode, the lifecycle hooks from parent class are not called.\n ngOnInit() {\n super.ngOnInit();\n }\n ngDoCheck() {\n super.ngDoCheck();\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\nMatTreeNode.ɵfac = function MatTreeNode_Factory(t) { return new (t || MatTreeNode)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.CdkTree), ɵngcc0.ɵɵinjectAttribute('tabindex')); };\nMatTreeNode.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatTreeNode, selectors: [[\"mat-tree-node\"]], inputs: { role: \"role\", disabled: \"disabled\", tabIndex: \"tabIndex\" }, exportAs: [\"matTreeNode\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkTreeNode, useExisting: MatTreeNode }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatTreeNode.ctorParameters = () => [\n { type: ElementRef },\n { type: CdkTree },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeNode, [{\n type: Directive,\n args: [{\n selector: 'mat-tree-node',\n exportAs: 'matTreeNode',\n inputs: ['role', 'disabled', 'tabIndex'],\n providers: [{ provide: CdkTreeNode, useExisting: MatTreeNode }]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.CdkTree }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }]; }, null); })();\n/**\n * Wrapper for the CdkTree node definition with Material design styles.\n * Captures the node's template and a when predicate that describes when this node should be used.\n */\nclass MatTreeNodeDef extends CdkTreeNodeDef {\n}\nMatTreeNodeDef.ɵfac = /*@__PURE__*/ function () { let ɵMatTreeNodeDef_BaseFactory; return function MatTreeNodeDef_Factory(t) { return (ɵMatTreeNodeDef_BaseFactory || (ɵMatTreeNodeDef_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatTreeNodeDef)))(t || MatTreeNodeDef); }; }();\nMatTreeNodeDef.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatTreeNodeDef, selectors: [[\"\", \"matTreeNodeDef\", \"\"]], inputs: { when: [\"matTreeNodeDefWhen\", \"when\"], data: [\"matTreeNode\", \"data\"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkTreeNodeDef, useExisting: MatTreeNodeDef }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatTreeNodeDef.propDecorators = {\n data: [{ type: Input, args: ['matTreeNode',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeNodeDef, [{\n type: Directive,\n args: [{\n selector: '[matTreeNodeDef]',\n inputs: [\n 'when: matTreeNodeDefWhen'\n ],\n providers: [{ provide: CdkTreeNodeDef, useExisting: MatTreeNodeDef }]\n }]\n }], null, { data: [{\n type: Input,\n args: ['matTreeNode']\n }] }); })();\n/**\n * Wrapper for the CdkTree nested node with Material design styles.\n */\nclass MatNestedTreeNode extends CdkNestedTreeNode {\n constructor(elementRef, tree, differs, tabIndex) {\n super(elementRef, tree, differs);\n this._disabled = false;\n this.tabIndex = Number(tabIndex) || 0;\n // The classes are directly added here instead of in the host property because classes on\n // the host property are not inherited with View Engine. It is not set as a @HostBinding because\n // it is not set by the time it's children nodes try to read the class from it.\n // TODO: move to host after View Engine deprecation\n elementRef.nativeElement.classList.add('mat-nested-tree-node');\n }\n /** Whether the node is disabled. */\n get disabled() { return this._disabled; }\n set disabled(value) { this._disabled = coerceBooleanProperty(value); }\n /** Tabindex for the node. */\n get tabIndex() { return this.disabled ? -1 : this._tabIndex; }\n set tabIndex(value) {\n // If the specified tabIndex value is null or undefined, fall back to the default value.\n this._tabIndex = value != null ? value : 0;\n }\n // This is a workaround for https://github.com/angular/angular/issues/19145\n // In aot mode, the lifecycle hooks from parent class are not called.\n // TODO(tinayuangao): Remove when the angular issue #19145 is fixed\n ngOnInit() {\n super.ngOnInit();\n }\n ngDoCheck() {\n super.ngDoCheck();\n }\n ngAfterContentInit() {\n super.ngAfterContentInit();\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\nMatNestedTreeNode.ɵfac = function MatNestedTreeNode_Factory(t) { return new (t || MatNestedTreeNode)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.CdkTree), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers), ɵngcc0.ɵɵinjectAttribute('tabindex')); };\nMatNestedTreeNode.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatNestedTreeNode, selectors: [[\"mat-nested-tree-node\"]], inputs: { role: \"role\", disabled: \"disabled\", tabIndex: \"tabIndex\", node: [\"matNestedTreeNode\", \"node\"] }, exportAs: [\"matNestedTreeNode\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: CdkNestedTreeNode, useExisting: MatNestedTreeNode },\n { provide: CdkTreeNode, useExisting: MatNestedTreeNode },\n { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: MatNestedTreeNode }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatNestedTreeNode.ctorParameters = () => [\n { type: ElementRef },\n { type: CdkTree },\n { type: IterableDiffers },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] }\n];\nMatNestedTreeNode.propDecorators = {\n node: [{ type: Input, args: ['matNestedTreeNode',] }],\n disabled: [{ type: Input }],\n tabIndex: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatNestedTreeNode, [{\n type: Directive,\n args: [{\n selector: 'mat-nested-tree-node',\n exportAs: 'matNestedTreeNode',\n inputs: ['role', 'disabled', 'tabIndex'],\n providers: [\n { provide: CdkNestedTreeNode, useExisting: MatNestedTreeNode },\n { provide: CdkTreeNode, useExisting: MatNestedTreeNode },\n { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: MatNestedTreeNode }\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.CdkTree }, { type: ɵngcc0.IterableDiffers }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }]; }, { tabIndex: [{\n type: Input\n }], disabled: [{\n type: Input\n }], node: [{\n type: Input,\n args: ['matNestedTreeNode']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Wrapper for the CdkTree padding with Material design styles.\n */\nclass MatTreeNodePadding extends CdkTreeNodePadding {\n /** The level of depth of the tree node. The padding will be `level * indent` pixels. */\n get level() { return this._level; }\n set level(value) { this._setLevelInput(value); }\n /** The indent for each level. Default number 40px from material design menu sub-menu spec. */\n get indent() { return this._indent; }\n set indent(indent) { this._setIndentInput(indent); }\n}\nMatTreeNodePadding.ɵfac = /*@__PURE__*/ function () { let ɵMatTreeNodePadding_BaseFactory; return function MatTreeNodePadding_Factory(t) { return (ɵMatTreeNodePadding_BaseFactory || (ɵMatTreeNodePadding_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatTreeNodePadding)))(t || MatTreeNodePadding); }; }();\nMatTreeNodePadding.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatTreeNodePadding, selectors: [[\"\", \"matTreeNodePadding\", \"\"]], inputs: { level: [\"matTreeNodePadding\", \"level\"], indent: [\"matTreeNodePaddingIndent\", \"indent\"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkTreeNodePadding, useExisting: MatTreeNodePadding }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatTreeNodePadding.propDecorators = {\n level: [{ type: Input, args: ['matTreeNodePadding',] }],\n indent: [{ type: Input, args: ['matTreeNodePaddingIndent',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeNodePadding, [{\n type: Directive,\n args: [{\n selector: '[matTreeNodePadding]',\n providers: [{ provide: CdkTreeNodePadding, useExisting: MatTreeNodePadding }]\n }]\n }], null, { level: [{\n type: Input,\n args: ['matTreeNodePadding']\n }], indent: [{\n type: Input,\n args: ['matTreeNodePaddingIndent']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Outlet for nested CdkNode. Put `[matTreeNodeOutlet]` on a tag to place children dataNodes\n * inside the outlet.\n */\nclass MatTreeNodeOutlet {\n constructor(viewContainer, _node) {\n this.viewContainer = viewContainer;\n this._node = _node;\n }\n}\nMatTreeNodeOutlet.ɵfac = function MatTreeNodeOutlet_Factory(t) { return new (t || MatTreeNodeOutlet)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(CDK_TREE_NODE_OUTLET_NODE, 8)); };\nMatTreeNodeOutlet.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatTreeNodeOutlet, selectors: [[\"\", \"matTreeNodeOutlet\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: CdkTreeNodeOutlet,\n useExisting: MatTreeNodeOutlet\n }])] });\nMatTreeNodeOutlet.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_TREE_NODE_OUTLET_NODE,] }, { type: Optional }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeNodeOutlet, [{\n type: Directive,\n args: [{\n selector: '[matTreeNodeOutlet]',\n providers: [{\n provide: CdkTreeNodeOutlet,\n useExisting: MatTreeNodeOutlet\n }]\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TREE_NODE_OUTLET_NODE]\n }, {\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Wrapper for the CdkTable with Material design styles.\n */\nclass MatTree extends CdkTree {\n}\nMatTree.ɵfac = /*@__PURE__*/ function () { let ɵMatTree_BaseFactory; return function MatTree_Factory(t) { return (ɵMatTree_BaseFactory || (ɵMatTree_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatTree)))(t || MatTree); }; }();\nMatTree.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatTree, selectors: [[\"mat-tree\"]], viewQuery: function MatTree_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatTreeNodeOutlet, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._nodeOutlet = _t.first);\n } }, hostAttrs: [\"role\", \"tree\", 1, \"mat-tree\", \"cdk-tree\"], exportAs: [\"matTree\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkTree, useExisting: MatTree }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, consts: [[\"matTreeNodeOutlet\", \"\"]], template: function MatTree_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n } }, directives: [MatTreeNodeOutlet], styles: [\".mat-tree{display:block}.mat-tree-node{display:flex;align-items:center;flex:1;word-wrap:break-word}.mat-nested-tree-node{border-bottom-width:0}\\n\"], encapsulation: 2 });\nMatTree.propDecorators = {\n _nodeOutlet: [{ type: ViewChild, args: [MatTreeNodeOutlet, { static: true },] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTree, [{\n type: Component,\n args: [{\n selector: 'mat-tree',\n exportAs: 'matTree',\n template: ``,\n host: {\n // The 'cdk-tree' class needs to be included here because classes set in the host in the\n // parent class are not inherited with View Engine. The 'cdk-tree' class in CdkTreeNode has\n // to be set in the host because:\n // if it is set as a @HostBinding it is not set by the time the tree nodes try to read the\n // class from it.\n // the ElementRef is not available in the constructor so the class can't be applied directly\n // without a breaking constructor change.\n 'class': 'mat-tree cdk-tree',\n 'role': 'tree'\n },\n encapsulation: ViewEncapsulation.None,\n // See note on CdkTree for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [{ provide: CdkTree, useExisting: MatTree }],\n styles: [\".mat-tree{display:block}.mat-tree-node{display:flex;align-items:center;flex:1;word-wrap:break-word}.mat-nested-tree-node{border-bottom-width:0}\\n\"]\n }]\n }], null, { _nodeOutlet: [{\n type: ViewChild,\n args: [MatTreeNodeOutlet, { static: true }]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Wrapper for the CdkTree's toggle with Material design styles.\n */\n// tslint:disable-next-line: coercion-types\nclass MatTreeNodeToggle extends CdkTreeNodeToggle {\n get recursive() { return this._recursive; }\n set recursive(value) {\n // TODO: when we remove support for ViewEngine, change this setter to an input\n // alias in the decorator metadata.\n this._recursive = coerceBooleanProperty(value);\n }\n}\nMatTreeNodeToggle.ɵfac = /*@__PURE__*/ function () { let ɵMatTreeNodeToggle_BaseFactory; return function MatTreeNodeToggle_Factory(t) { return (ɵMatTreeNodeToggle_BaseFactory || (ɵMatTreeNodeToggle_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatTreeNodeToggle)))(t || MatTreeNodeToggle); }; }();\nMatTreeNodeToggle.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatTreeNodeToggle, selectors: [[\"\", \"matTreeNodeToggle\", \"\"]], inputs: { recursive: [\"matTreeNodeToggleRecursive\", \"recursive\"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkTreeNodeToggle, useExisting: MatTreeNodeToggle }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatTreeNodeToggle.propDecorators = {\n recursive: [{ type: Input, args: ['matTreeNodeToggleRecursive',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeNodeToggle, [{\n type: Directive,\n args: [{\n selector: '[matTreeNodeToggle]',\n providers: [{ provide: CdkTreeNodeToggle, useExisting: MatTreeNodeToggle }]\n }]\n }], null, { recursive: [{\n type: Input,\n args: ['matTreeNodeToggleRecursive']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst MAT_TREE_DIRECTIVES = [\n MatNestedTreeNode,\n MatTreeNodeDef,\n MatTreeNodePadding,\n MatTreeNodeToggle,\n MatTree,\n MatTreeNode,\n MatTreeNodeOutlet\n];\nclass MatTreeModule {\n}\nMatTreeModule.ɵfac = function MatTreeModule_Factory(t) { return new (t || MatTreeModule)(); };\nMatTreeModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatTreeModule });\nMatTreeModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CdkTreeModule, MatCommonModule], MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeModule, [{\n type: NgModule,\n args: [{\n imports: [CdkTreeModule, MatCommonModule],\n exports: [MatCommonModule, MAT_TREE_DIRECTIVES],\n declarations: MAT_TREE_DIRECTIVES\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatTreeModule, { declarations: function () { return [MatNestedTreeNode, MatTreeNodeDef, MatTreeNodePadding, MatTreeNodeToggle, MatTree, MatTreeNode, MatTreeNodeOutlet]; }, imports: function () { return [CdkTreeModule, MatCommonModule]; }, exports: function () { return [MatCommonModule, MatNestedTreeNode, MatTreeNodeDef, MatTreeNodePadding, MatTreeNodeToggle, MatTree, MatTreeNode, MatTreeNodeOutlet]; } }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Tree flattener to convert a normal type of node to node with children & level information.\n * Transform nested nodes of type `T` to flattened nodes of type `F`.\n *\n * For example, the input data of type `T` is nested, and contains its children data:\n * SomeNode: {\n * key: 'Fruits',\n * children: [\n * NodeOne: {\n * key: 'Apple',\n * },\n * NodeTwo: {\n * key: 'Pear',\n * }\n * ]\n * }\n * After flattener flatten the tree, the structure will become\n * SomeNode: {\n * key: 'Fruits',\n * expandable: true,\n * level: 1\n * },\n * NodeOne: {\n * key: 'Apple',\n * expandable: false,\n * level: 2\n * },\n * NodeTwo: {\n * key: 'Pear',\n * expandable: false,\n * level: 2\n * }\n * and the output flattened type is `F` with additional information.\n */\nclass MatTreeFlattener {\n constructor(transformFunction, getLevel, isExpandable, getChildren) {\n this.transformFunction = transformFunction;\n this.getLevel = getLevel;\n this.isExpandable = isExpandable;\n this.getChildren = getChildren;\n }\n _flattenNode(node, level, resultNodes, parentMap) {\n const flatNode = this.transformFunction(node, level);\n resultNodes.push(flatNode);\n if (this.isExpandable(flatNode)) {\n const childrenNodes = this.getChildren(node);\n if (childrenNodes) {\n if (Array.isArray(childrenNodes)) {\n this._flattenChildren(childrenNodes, level, resultNodes, parentMap);\n }\n else {\n childrenNodes.pipe(take(1)).subscribe(children => {\n this._flattenChildren(children, level, resultNodes, parentMap);\n });\n }\n }\n }\n return resultNodes;\n }\n _flattenChildren(children, level, resultNodes, parentMap) {\n children.forEach((child, index) => {\n let childParentMap = parentMap.slice();\n childParentMap.push(index != children.length - 1);\n this._flattenNode(child, level + 1, resultNodes, childParentMap);\n });\n }\n /**\n * Flatten a list of node type T to flattened version of node F.\n * Please note that type T may be nested, and the length of `structuredData` may be different\n * from that of returned list `F[]`.\n */\n flattenNodes(structuredData) {\n let resultNodes = [];\n structuredData.forEach(node => this._flattenNode(node, 0, resultNodes, []));\n return resultNodes;\n }\n /**\n * Expand flattened node with current expansion status.\n * The returned list may have different length.\n */\n expandFlattenedNodes(nodes, treeControl) {\n let results = [];\n let currentExpand = [];\n currentExpand[0] = true;\n nodes.forEach(node => {\n let expand = true;\n for (let i = 0; i <= this.getLevel(node); i++) {\n expand = expand && currentExpand[i];\n }\n if (expand) {\n results.push(node);\n }\n if (this.isExpandable(node)) {\n currentExpand[this.getLevel(node) + 1] = treeControl.isExpanded(node);\n }\n });\n return results;\n }\n}\n/**\n * Data source for flat tree.\n * The data source need to handle expansion/collapsion of the tree node and change the data feed\n * to `MatTree`.\n * The nested tree nodes of type `T` are flattened through `MatTreeFlattener`, and converted\n * to type `F` for `MatTree` to consume.\n */\nclass MatTreeFlatDataSource extends DataSource {\n constructor(_treeControl, _treeFlattener, initialData) {\n super();\n this._treeControl = _treeControl;\n this._treeFlattener = _treeFlattener;\n this._flattenedData = new BehaviorSubject([]);\n this._expandedData = new BehaviorSubject([]);\n this._data = new BehaviorSubject([]);\n if (initialData) {\n // Assign the data through the constructor to ensure that all of the logic is executed.\n this.data = initialData;\n }\n }\n get data() { return this._data.value; }\n set data(value) {\n this._data.next(value);\n this._flattenedData.next(this._treeFlattener.flattenNodes(this.data));\n this._treeControl.dataNodes = this._flattenedData.value;\n }\n connect(collectionViewer) {\n return merge(collectionViewer.viewChange, this._treeControl.expansionModel.changed, this._flattenedData).pipe(map(() => {\n this._expandedData.next(this._treeFlattener.expandFlattenedNodes(this._flattenedData.value, this._treeControl));\n return this._expandedData.value;\n }));\n }\n disconnect() {\n // no op\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Data source for nested tree.\n *\n * The data source for nested tree doesn't have to consider node flattener, or the way to expand\n * or collapse. The expansion/collapsion will be handled by TreeControl and each non-leaf node.\n */\nclass MatTreeNestedDataSource extends DataSource {\n constructor() {\n super(...arguments);\n this._data = new BehaviorSubject([]);\n }\n /**\n * Data for the nested tree\n */\n get data() { return this._data.value; }\n set data(value) { this._data.next(value); }\n connect(collectionViewer) {\n return merge(...[collectionViewer.viewChange, this._data])\n .pipe(map(() => this.data));\n }\n disconnect() {\n // no op\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatNestedTreeNode, MatTree, MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule, MatTreeNestedDataSource, MatTreeNode, MatTreeNodeDef, MatTreeNodeOutlet, MatTreeNodePadding, MatTreeNodeToggle };\n\n","export class FlatIdfAuthoritiesModel {\n flatIdfAuthorities: Object;\n\n constructor(obj: any = {}) {\n this.flatIdfAuthorities = obj && obj.flatIdfAuthorities || null;\n }\n}\n","import {Component, Inject, OnInit} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'sub-user-password-confirm-dialog',\n templateUrl: './sub-user-password-confirm-dialog.component.html',\n styleUrls: ['./sub-user-password-confirm-dialog.component.css']\n})\nexport class SubUserPasswordConfirmDialogComponent implements OnInit {\n constructor(@Inject(MAT_DIALOG_DATA) public data,\n public dialogRef: MatDialogRef) {\n }\n\n ngOnInit() {\n }\n}\n","

Wichtige Information!

\n
\n
\n
\n \n
\n","\n
\n
\n
\n \n Anrede\n \n \n {{salutation}}\n \n \n \n Bitte wählen Sie eine Anrede.\n \n \n
\n
\n \n Titel - optional\n \n \n
\n
\n
\n
\n \n Vorname\n \n \n Bitte geben Sie den Vornamen Ihres Mitbenutzers ein.\n \n \n
\n
\n \n Nachname\n \n \n Bitte geben Sie den Nachnamen Ihres Mitbenutzers ein.\n \n \n
\n
\n

Bitte vergeben Sie ein Passwort.

\n
\n
\n \n Neues Passwort\n \n {{hide ? 'visibility_off' : 'visibility'}}\n \n Ihr Passwort muss mindestens 8 Zeichen lang sein.\n \n \n Bitte geben Sie ein neues Passwort ein.\n \n \n Ihr Passwort muss weitere der folgenden Kategorien enthalten:\n \n \n Kleinbuchstabe a-z\n \n \n Großbuchstabe A-Z\n \n \n Zahl 0-9\n \n \n Sonderzeichen ~!@#$%&*_-+=`|(){}[]:;\"'<>,.?/^\\\n \n \n
\n
\n \n Passwort wiederholen\n \n {{hide ? 'visibility_off' : 'visibility'}}\n \n Bitte wiederholen Sie Ihr Passwort.\n \n \n Ihre Passwörter stimmen nicht überein.\n \n \n
\n
\n
\n

\n Bitte wählen Sie die Zugriffsrechte aus, die der Mitbenutzer bekommen soll\n \n \n

\n \n \n \n
\n {{node.label | translate}}\n \n {{node.name | translate}}\n
\n \n \n
\n\n \n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\n \n
\n {{getLabel(node.label) | translate}}\n
\n
\n
\n\n
\n
\n \n \n \n
\n
\n
\n
\n","import {Component, EventEmitter, Inject, Input, OnChanges, OnDestroy, OnInit, Output, ViewChild} from '@angular/core';\nimport {FormControl, FormGroup, Validators, FormBuilder, ValidatorFn} from '@angular/forms';\nimport {SubUserService} from '../service/sub-user.service';\nimport {AuthorityService} from '../../../../../core/services/authority.service';\nimport {LogService} from '../../../../../core/services/utility/log.service';\nimport {FlatTreeControl} from '@angular/cdk/tree';\nimport {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {MustMatch} from '../../../../../core/validators/must-match.validator';\nimport {PasswordValidator} from '../../../../../core/validators/password.validator';\nimport {SubUserModel} from '../model/sub-user.model';\nimport {FlatIdfAuthoritiesModel} from '../model/flat-idf-authorities.model';\nimport {SubUserFormModel} from '../model/sub-user-form.model';\nimport {SubUserModelRepository} from '../repository/sub-user-model.repository';\nimport {SubUserRestService} from '../service/sub-user.rest-service';\nimport {takeUntil} from 'rxjs/operators';\nimport {Subject} from 'rxjs';\nimport {AuthorizationFlatNodeInterface} from '../interface/authorization-flat-node.interface';\nimport {AuthorizationNodeModel} from '../model/authorization-node.model';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport {SubUserDeleteConfirmDialogComponent} from '../sub-user-delete-confirm-dialog/sub-user-delete-confirm-dialog.component';\nimport {UserService} from '../../../../../core/services/user.service';\nimport {SubUserPasswordConfirmDialogComponent} from '../sub-user-password-confirm-dialog/sub-user-password-confirm-dialog.component';\n\n@Component({\n selector: 'sub-user-form',\n templateUrl: './sub-user-form.component.html',\n styleUrls: ['./sub-user-form.component.scss']\n})\nexport class SubUserFormComponent implements OnChanges, OnInit, OnDestroy {\n @Input('subUser') public subUser: SubUserModelRepository;\n @Input('authTree') public authTree: AuthorizationNodeModel[];\n @Input('allIdfs') public allIdfs: any[];\n @Input('notification') public notification: any;\n @Output() public cancel: EventEmitter = new EventEmitter();\n @Output() public notify: EventEmitter = new EventEmitter();\n @Output() public notificationChange: EventEmitter = new EventEmitter();\n @ViewChild('subUserFormChild') public subUserFormChild;\n public enableTree = false;\n public hide = true;\n public subUserForm: FormGroup;\n public salutation: FormControl = new FormControl('', Validators.required);\n public title: FormControl = new FormControl('');\n public firstName: FormControl = new FormControl('', Validators.required);\n public lastName: FormControl = new FormControl('', Validators.required);\n public password: FormControl = new FormControl('', [\n Validators.required,\n Validators.pattern(/.{8}/),\n ]);\n public passwordRepeat: FormControl = new FormControl('', [Validators.required]);\n public submitted = false;\n public checklistSelection = new SelectionModel(true /* multiple */);\n public treeControl: FlatTreeControl;\n /** Map from flat node to nested node. This helps us finding the nested node to be modified */\n public flatNodeMap = new Map();\n /** Map from nested node to flattened node. This helps us to keep the same object for selection */\n public nestedNodeMap = new Map();\n public ngUnsubscribe$ = new Subject();\n public treeFlattener: MatTreeFlattener;\n public dataSource: MatTreeFlatDataSource;\n public transformer = (node: AuthorizationNodeModel, level: number) => {\n const existingNode = this.nestedNodeMap.get(node);\n const flatNode = existingNode && existingNode.label === node.label\n ? existingNode\n : new AuthorizationNodeModel();\n flatNode.label = node.label;\n flatNode.level = level;\n flatNode.idf = node.idf;\n flatNode.authority = node.authority;\n flatNode.readonly = node.readonly;\n flatNode.expandable = !!node.children;\n this.flatNodeMap.set(flatNode, node);\n this.nestedNodeMap.set(node, flatNode);\n return flatNode;\n };\n public getLevel = (node: AuthorizationFlatNodeInterface) =>\n node.level;\n public isExpandable = (node: AuthorizationFlatNodeInterface) =>\n node.expandable;\n public getChildren = (node: AuthorizationNodeModel): AuthorizationNodeModel[] =>\n node.children;\n public hasChild = (_: number, node: AuthorizationFlatNodeInterface) => node.expandable;\n\n constructor(@Inject(SubUserService) public subUserService: SubUserService,\n @Inject(SubUserRestService) public subUserRestService: SubUserRestService,\n @Inject(AuthorityService) public authorityService: AuthorityService,\n @Inject(LogService) public log: LogService,\n @Inject(UserService) public userService: UserService,\n public formBuilder: FormBuilder,\n public dialog: MatDialog) {\n this.initForm();\n }\n\n ngOnInit() {\n this.initTree();\n }\n\n public initTree() {\n this.checklistSelection = new SelectionModel(true /* multiple */);\n this.treeControl = new FlatTreeControl(this.getLevel, this.isExpandable);\n this.treeFlattener = new MatTreeFlattener(this.transformer, this.getLevel,\n this.isExpandable, this.getChildren);\n this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);\n const treeCopy = Object.assign([], this.authTree);\n this.treeControl.dataNodes = treeCopy;\n this.dataSource.data = treeCopy;\n this.enableTree = true;\n }\n\n public initForm() {\n delete this.subUserForm;\n this.subUserForm = this.formBuilder.group({\n salutation: this.salutation,\n title: this.title,\n firstName: this.firstName,\n lastName: this.lastName,\n password: this.password,\n passwordRepeat: this.passwordRepeat,\n }, {\n validator: [\n MustMatch('password', 'passwordRepeat'),\n PasswordValidator('password')\n ]\n });\n }\n\n /**\n * Loads subUser model into form if it is changed.\n * @param {event} e\n */\n ngOnChanges(e) {\n if (e.subUser && e.subUser.currentValue) {\n this.initForm();\n this.initTree();\n this.subUser = new SubUserModelRepository(e.subUser.currentValue);\n const form = new SubUserFormModel(e.subUser.currentValue);\n this.subUserForm.reset();\n this.subUserForm.updateValueAndValidity();\n this.subUserForm.setValue(form);\n if (e.subUser.currentValue.id) {\n this.setEditValidators();\n if (Object.keys(e.subUser.currentValue.flatIdfAuthorities).length > 0) {\n this.treeControl.dataNodes.forEach((an: AuthorizationNodeModel) => {\n if (an.idf && an.authority && this.subUser.isGranted(an)) {\n this.todoItemSelectionToggle(an);\n this.treeControl.expand(an);\n }\n });\n }\n }\n }\n }\n\n\n /** Check root node checked state and change it accordingly */\n checkRootNodeSelection(node: AuthorizationFlatNodeInterface): void {\n const nodeSelected = this.checklistSelection.isSelected(node);\n const descendants = this.treeControl.getDescendants(node).filter(a => !a.readonly);\n const descAllSelected = descendants.every(child =>\n this.checklistSelection.isSelected(child)\n );\n if (nodeSelected && !descAllSelected) {\n this.checklistSelection.deselect(node);\n } else if (!nodeSelected && descAllSelected) {\n this.checklistSelection.select(node);\n }\n // if (!descAllSelected) {\n // this.checklistSelection.deselect(node);\n // } else if (descAllSelected) {\n // this.checklistSelection.select(node);\n // }\n }\n\n /** Get the parent node of a node */\n getParentNode(node: AuthorizationFlatNodeInterface): AuthorizationFlatNodeInterface | null {\n const currentLevel = this.getLevel(node);\n if (currentLevel < 1) {\n return null;\n }\n const startIndex = this.treeControl.dataNodes.indexOf(node) - 1;\n for (let i = startIndex; i >= 0; i--) {\n const currentNode = this.treeControl.dataNodes[i];\n\n if (this.getLevel(currentNode) < currentLevel) {\n return currentNode;\n }\n }\n return null;\n }\n\n /** Checks all the parents when a leaf node is selected/unselected */\n checkAllParentsSelection(node: AuthorizationFlatNodeInterface): void {\n let parent: AuthorizationFlatNodeInterface | null = this.getParentNode(node);\n while (parent) {\n this.checkRootNodeSelection(parent);\n parent = this.getParentNode(parent);\n }\n }\n\n descendantsAllSelected(node: AuthorizationFlatNodeInterface): boolean {\n const descendants = this.treeControl.getDescendants(node).filter(a => !a.readonly);\n const descAllSelected = descendants.every(child =>\n this.checklistSelection.isSelected(child)\n );\n return descAllSelected;\n }\n\n /** Whether part of the descendants are selected */\n descendantsPartiallySelected(node: AuthorizationFlatNodeInterface): boolean {\n const descendants = this.treeControl.getDescendants(node).filter(a => !a.readonly);\n const result = descendants.some(child => this.checklistSelection.isSelected(child));\n return result && !this.descendantsAllSelected(node);\n }\n\n /** Toggle the to-do item selection. Select/deselect all the descendants node */\n todoItemSelectionToggle(node: AuthorizationFlatNodeInterface): void {\n this.checklistSelection.toggle(node);\n const descendants = this.treeControl.getDescendants(node);//.filter(a => !a.readonly);\n const writableDescendants = descendants.filter(a => !a.readonly);\n this.checklistSelection.isSelected(node)\n ? this.checklistSelection.select(...writableDescendants)\n : this.checklistSelection.deselect(...writableDescendants);\n\n // Force update for the parent\n // descendants.every(child =>\n // this.checklistSelection.isSelected(child)\n // );\n this.checkAllParentsSelection(node);\n }\n\n public setEditValidators() {\n this.subUserForm.setValidators(null);\n this.subUserForm.updateValueAndValidity();\n this.password.setValidators(null);\n this.password.updateValueAndValidity();\n this.passwordRepeat.setValidators(null);\n this.passwordRepeat.updateValueAndValidity();\n }\n\n public togglePasswordValidators(e) {\n if (e.srcElement.value !== '') {\n this.subUserForm.setValidators([\n MustMatch('password', 'passwordRepeat') as ValidatorFn,\n PasswordValidator('password') as ValidatorFn\n ]);\n this.subUserForm.updateValueAndValidity();\n this.password.setValidators([Validators.required]);\n this.password.updateValueAndValidity();\n this.passwordRepeat.setValidators([Validators.required]);\n this.passwordRepeat.updateValueAndValidity();\n } else {\n this.setEditValidators();\n }\n }\n\n onCancel() {\n this.submitted = false;\n this.cancel.emit();\n }\n\n onSubmit() {\n this.submitted = true;\n if (this.subUserForm.valid) {\n this.cancel.emit();\n this.notificationChange.emit({\n html: 'Ihr Mitbenutzer ' + this.firstName.value + ' ' + this.lastName.value + ' wird erstellt.',\n type: 'info'\n });\n const request = this.buildRequest(this.checklistSelection, this.subUser, this.subUserForm.value);\n this.log.info('1. SubUserFormComponent:onSubmit:subUserService:createSubUser', request);\n this.subUserRestService.create(request).pipe(takeUntil(this.ngUnsubscribe$)).subscribe(res => {\n const notificationModel = {\n html: 'Ihr Mitbenutzer für ' + this.firstName.value + ' ' + this.lastName.value + ' wurde erfolgreich angelegt.
' +\n 'Bitte teilen Sie Ihrem neuen Mitbenutzer seinen Benutzernamen: ' + res.returnObject.username + ' und sein ' +\n ' Passwort: ' + res.returnObject.newPassword + ' mit.',\n type: 'success'\n };\n this.openPasswordConfirmDialog(notificationModel);\n this.notificationChange.emit(notificationModel);\n this.subUserService.dispatchLoadSubUsersAction();\n this.onCancel();\n }, error => {\n this.notificationChange.emit({\n html: 'Ihr Mitbenutzer für ' + request.firstName + ' ' + request.lastName + ' konnte nicht erstellt werden.',\n type: 'error'\n });\n });\n this.notify.emit();\n }\n }\n\n openPasswordConfirmDialog(notificationModel: any): MatDialogRef {\n const confirmDialogConfig = new MatDialogConfig();\n confirmDialogConfig.autoFocus = true;\n confirmDialogConfig.data = notificationModel;\n return this.dialog.open(SubUserPasswordConfirmDialogComponent, confirmDialogConfig);\n }\n\n onUpdate(): void {\n this.submitted = true;\n if (this.subUserForm.valid) {\n this.cancel.emit();\n this.notificationChange.emit({\n html: 'Der Mitbenutzer für ' + this.subUser.firstName + ' ' + this.subUser.lastName + ' wird bearbeitet.',\n type: 'info'\n });\n const request = this.buildRequest(this.checklistSelection, this.subUser, this.subUserForm.value);\n this.log.info('1. SubUserFormComponent:onSubmit:subUserService:updateSubUser', request);\n this.subUserRestService.update(request).pipe(takeUntil(this.ngUnsubscribe$)).subscribe(res => {\n\n const html = res.returnObject.newPassword\n ? 'Ihr Mitbenutzer ' + res.returnObject.username + ' konnte erfolgreich geändert werden.
' +\n 'Bitte teilen Sie Ihrem Mitbenutzer sein' +\n ' neues Passwort: ' + res.returnObject.newPassword + ' mit.'\n : 'Ihr Mitbenutzer für ' + this.firstName.value + ' '\n + this.lastName.value + ' konnte erfolgreich geändert werden.';\n const notificationModel = {\n html: html,\n type: 'success'\n };\n if (res.returnObject.newPassword) {\n this.openPasswordConfirmDialog(notificationModel);\n }\n this.notificationChange.emit(notificationModel);\n this.subUserService.dispatchLoadSubUsersAction();\n this.onCancel();\n }, error => {\n this.notificationChange.emit({\n html: 'Ihr Mitbenutzer für ' + request.firstName + ' ' + request.lastName + ' konnte nicht bearbeitet werden.',\n type: 'error'\n });\n });\n this.notify.emit();\n }\n }\n\n public buildRequest(pgas, su, fd) {\n const mergeFlatIdfAuthorities = this.createAuthConfigFromSelectionModel(pgas);\n const request = new SubUserModel({...su, ...fd, ...mergeFlatIdfAuthorities});\n return request;\n }\n\n public createAuthConfigFromSelectionModel(pgas: SelectionModel): FlatIdfAuthoritiesModel {\n const flatIdfAuthorities = {};\n pgas.selected.forEach(pga => { // potentially granted authority\n if (pga.idf && pga.authority && !flatIdfAuthorities[pga.idf]) {\n flatIdfAuthorities[pga.idf.toString()] = [];\n }\n if (pga.authority) {\n flatIdfAuthorities[pga.idf.toString()].push(pga.authority);\n }\n });\n return new FlatIdfAuthoritiesModel({flatIdfAuthorities: flatIdfAuthorities});\n }\n\n /** If label is iDF add name with it */\n public getLabel(label: string) {\n let idf;\n if (this.allIdfs) {\n idf = this.allIdfs.find((item) => label === item.idf);\n }\n return idf && idf.name ? idf.idf + ' (' + idf.name + ')' : label;\n }\n\n /**\n * Unsubscribe from all subscriptions.\n */\n public ngOnDestroy() {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n}\n","
\n
\n

Persönliche Angaben

\n \n
\n
\n

Mitbenutzer

\n

Hier können Sie Zugänge für Ihre Mitarbeiter (Mitbenutzer) anlegen und individuelle Zugriffsrechte zu Filialen und Funktionen, z. B. Belegabfrage vergeben.

\n
\n \n
\n Sie haben noch keinen Mitbenutzer angelegt.\n
\n \n
\n
\n \n
0 && !(subUsersLoading$ | async)\">\n
\n
\n {{subUser.userSalutation}} {{subUser.title}} {{subUser.firstName}} {{subUser.lastName}}\n
\n
\n \n IDF: {{ getFormattedIdfs(getAuthorizedIdfs(subUser)) }}\n \n
\n
\n \n \n
\n
\n
\n \n
\n \n \n
\n
\n
\n
\n
\n","import {Component, Inject, OnChanges, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {Observable, of, Subject} from 'rxjs';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport {SubUserDeleteConfirmDialogComponent} from './sub-user-delete-confirm-dialog/sub-user-delete-confirm-dialog.component';\nimport {takeUntil} from 'rxjs/operators';\nimport {SubUserService} from './service/sub-user.service';\nimport {UserService} from '../../../../core/services/user.service';\nimport {SubUserModel} from './model/sub-user.model';\nimport {SubUserModelRepository} from './repository/sub-user-model.repository';\nimport {SubUserRestService} from './service/sub-user.rest-service';\nimport {AuthorizationNodeModel} from './model/authorization-node.model';\n\n@Component({\n selector: 'sub-user-management',\n templateUrl: './sub-user-management.component.html',\n styleUrls: ['./sub-user-management.component.scss']\n})\nexport class SubUserManagementComponent implements OnInit, OnDestroy {\n public idfs$: Observable;\n public showSubUserForm = false;\n public showNotification = false;\n public subUser$: SubUserModelRepository;\n public authTree: AuthorizationNodeModel[];\n public notification: any = null;\n public timeout: any = null;\n public subUsers$: Observable;\n public authTreeLoading$: Observable;\n public subUsersLoading$: Observable;\n public ngUnsubscribe$ = new Subject();\n public allIdfs: any[];\n\n constructor(@Inject(SubUserService) public subUserService: SubUserService,\n @Inject(SubUserRestService) public subUserRestService: SubUserRestService,\n @Inject(UserService) public userService: UserService,\n public dialog: MatDialog) {\n this.subUsers$ = subUserService.selectSubUsersObservable();\n this.subUserService.selectInitAuthTree().subscribe(authTree => this.setAuthTree(authTree));\n this.idfs$ = userService.loadAllIdfs();\n this.idfs$.pipe(takeUntil(this.ngUnsubscribe$)).subscribe(result => {\n if (result !== null) {\n this.allIdfs = result;\n }\n });\n this.authTreeLoading$ = subUserService.selectAuthTreeLoading();\n this.subUsersLoading$ = subUserService.selectSubUsersLoadingObservable();\n }\n\n public setAuthTree(authTree: AuthorizationNodeModel[]): void {\n this.authTree = authTree;\n }\n\n ngOnInit() {\n }\n\n\n /**\n * Hides form and triggers reset.\n */\n cancelSubUserForm(): void {\n this.subUser$ = null;\n this.showSubUserForm = false;\n }\n\n /**\n * Initiates fresh form view for creation.\n */\n newSubUserForm(): void {\n this.subUser$ = new SubUserModelRepository({});\n this.showSubUserForm = true;\n }\n\n /**\n * Shows form and wmits subUser into form for editting.\n * @param {SubUser} subUser\n */\n edit(subUser: SubUserModelRepository): void {\n this.subUser$ = subUser;\n this.showSubUserForm = true;\n }\n\n /**\n * Initiates sub user delete confirm dialog and deletes user from store on confirm.\n * @param subUser\n */\n remove(subUser: SubUserModel): void {\n const dialogRef = this.openDeleteConfirmDialog(subUser);\n dialogRef.afterClosed().pipe(takeUntil(this.ngUnsubscribe$)).subscribe(result => {\n if (result) {\n this.notification = {\n html: 'Der Benutzer ' + subUser.firstName + ' ' + subUser.lastName + ' wird gelöscht.',\n type: 'info'\n };\n this.notify();\n this.subUserRestService.remove(subUser).pipe(takeUntil(this.ngUnsubscribe$)).subscribe(res => {\n this.subUserService.dispatchLoadSubUsersAction();\n this.notification = {\n html: 'Der Benutzer ' + subUser.firstName + ' ' + subUser.lastName + ' konnte erfolgreich gelöscht werden.',\n type: 'success'\n };\n this.notify();\n });\n }\n });\n }\n\n /**\n * Opens the actual sub user delete confirm modal and returns dialog reference to observe user interaction.\n * @param {SubUser} subUser\n * @return {MatDialogRef}\n */\n openDeleteConfirmDialog(subUser: SubUserModel): MatDialogRef {\n const confirmDialogConfig = new MatDialogConfig();\n confirmDialogConfig.autoFocus = true;\n confirmDialogConfig.data = {subUser: subUser, perform: false};\n return this.dialog.open(SubUserDeleteConfirmDialogComponent, confirmDialogConfig);\n }\n\n getAuthorizedIdfs(subUser) {\n let idfsArray = [];\n const subUserIdfs = Object.keys(subUser.flatIdfAuthorities);\n if (this.allIdfs) {\n idfsArray = this.allIdfs.map(item => {\n if (subUserIdfs.includes(item.idf)) {\n return item;\n }\n });\n }\n return idfsArray;\n }\n\n getFormattedIdfs(idfs) {\n return idfs.map( idf => (idf !== undefined) ? idf.idf + ' (' + idf.name + ')' : null).join(', ');\n }\n\n notify() {\n this.showNotification = true;\n setTimeout(() => {\n this.showNotification = false;\n }, 4000);\n }\n\n /**\n * Unsubscribe from all subscriptions.\n */\n ngOnDestroy() {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n}\n","import { InjectionToken, Directive, Input, EventEmitter, Optional, Inject, SkipSelf, ChangeDetectorRef, Output, NgModule } from '@angular/core';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject, Subscription } from 'rxjs';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate unique ID for each accordion. */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/collections';\nlet nextId$1 = 0;\n/**\n * Injection token that can be used to reference instances of `CdkAccordion`. It serves\n * as alternative token to the actual `CdkAccordion` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_ACCORDION = new InjectionToken('CdkAccordion');\n/**\n * Directive whose purpose is to manage the expanded state of CdkAccordionItem children.\n */\nclass CdkAccordion {\n constructor() {\n /** Emits when the state of the accordion changes */\n this._stateChanges = new Subject();\n /** Stream that emits true/false when openAll/closeAll is triggered. */\n this._openCloseAllActions = new Subject();\n /** A readonly id value to use for unique selection coordination. */\n this.id = `cdk-accordion-${nextId$1++}`;\n this._multi = false;\n }\n /** Whether the accordion should allow multiple expanded accordion items simultaneously. */\n get multi() { return this._multi; }\n set multi(multi) { this._multi = coerceBooleanProperty(multi); }\n /** Opens all enabled accordion items in an accordion where multi is enabled. */\n openAll() {\n if (this._multi) {\n this._openCloseAllActions.next(true);\n }\n }\n /** Closes all enabled accordion items in an accordion where multi is enabled. */\n closeAll() {\n this._openCloseAllActions.next(false);\n }\n ngOnChanges(changes) {\n this._stateChanges.next(changes);\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n this._openCloseAllActions.complete();\n }\n}\nCdkAccordion.ɵfac = function CdkAccordion_Factory(t) { return new (t || CdkAccordion)(); };\nCdkAccordion.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkAccordion, selectors: [[\"cdk-accordion\"], [\"\", \"cdkAccordion\", \"\"]], inputs: { multi: \"multi\" }, exportAs: [\"cdkAccordion\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_ACCORDION, useExisting: CdkAccordion }]), ɵngcc0.ɵɵNgOnChangesFeature] });\nCdkAccordion.propDecorators = {\n multi: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkAccordion, [{\n type: Directive,\n args: [{\n selector: 'cdk-accordion, [cdkAccordion]',\n exportAs: 'cdkAccordion',\n providers: [{ provide: CDK_ACCORDION, useExisting: CdkAccordion }]\n }]\n }], function () { return []; }, { multi: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate unique ID for each accordion item. */\nlet nextId = 0;\nconst ɵ0 = undefined;\n/**\n * An basic directive expected to be extended and decorated as a component. Sets up all\n * events and attributes needed to be managed by a CdkAccordion parent.\n */\nclass CdkAccordionItem {\n constructor(accordion, _changeDetectorRef, _expansionDispatcher) {\n this.accordion = accordion;\n this._changeDetectorRef = _changeDetectorRef;\n this._expansionDispatcher = _expansionDispatcher;\n /** Subscription to openAll/closeAll events. */\n this._openCloseAllSubscription = Subscription.EMPTY;\n /** Event emitted every time the AccordionItem is closed. */\n this.closed = new EventEmitter();\n /** Event emitted every time the AccordionItem is opened. */\n this.opened = new EventEmitter();\n /** Event emitted when the AccordionItem is destroyed. */\n this.destroyed = new EventEmitter();\n /**\n * Emits whenever the expanded state of the accordion changes.\n * Primarily used to facilitate two-way binding.\n * @docs-private\n */\n this.expandedChange = new EventEmitter();\n /** The unique AccordionItem id. */\n this.id = `cdk-accordion-child-${nextId++}`;\n this._expanded = false;\n this._disabled = false;\n /** Unregister function for _expansionDispatcher. */\n this._removeUniqueSelectionListener = () => { };\n this._removeUniqueSelectionListener =\n _expansionDispatcher.listen((id, accordionId) => {\n if (this.accordion && !this.accordion.multi &&\n this.accordion.id === accordionId && this.id !== id) {\n this.expanded = false;\n }\n });\n // When an accordion item is hosted in an accordion, subscribe to open/close events.\n if (this.accordion) {\n this._openCloseAllSubscription = this._subscribeToOpenCloseAllActions();\n }\n }\n /** Whether the AccordionItem is expanded. */\n get expanded() { return this._expanded; }\n set expanded(expanded) {\n expanded = coerceBooleanProperty(expanded);\n // Only emit events and update the internal value if the value changes.\n if (this._expanded !== expanded) {\n this._expanded = expanded;\n this.expandedChange.emit(expanded);\n if (expanded) {\n this.opened.emit();\n /**\n * In the unique selection dispatcher, the id parameter is the id of the CdkAccordionItem,\n * the name value is the id of the accordion.\n */\n const accordionId = this.accordion ? this.accordion.id : this.id;\n this._expansionDispatcher.notify(this.id, accordionId);\n }\n else {\n this.closed.emit();\n }\n // Ensures that the animation will run when the value is set outside of an `@Input`.\n // This includes cases like the open, close and toggle methods.\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Whether the AccordionItem is disabled. */\n get disabled() { return this._disabled; }\n set disabled(disabled) { this._disabled = coerceBooleanProperty(disabled); }\n /** Emits an event for the accordion item being destroyed. */\n ngOnDestroy() {\n this.opened.complete();\n this.closed.complete();\n this.destroyed.emit();\n this.destroyed.complete();\n this._removeUniqueSelectionListener();\n this._openCloseAllSubscription.unsubscribe();\n }\n /** Toggles the expanded state of the accordion item. */\n toggle() {\n if (!this.disabled) {\n this.expanded = !this.expanded;\n }\n }\n /** Sets the expanded state of the accordion item to false. */\n close() {\n if (!this.disabled) {\n this.expanded = false;\n }\n }\n /** Sets the expanded state of the accordion item to true. */\n open() {\n if (!this.disabled) {\n this.expanded = true;\n }\n }\n _subscribeToOpenCloseAllActions() {\n return this.accordion._openCloseAllActions.subscribe(expanded => {\n // Only change expanded state if item is enabled\n if (!this.disabled) {\n this.expanded = expanded;\n }\n });\n }\n}\nCdkAccordionItem.ɵfac = function CdkAccordionItem_Factory(t) { return new (t || CdkAccordionItem)(ɵngcc0.ɵɵdirectiveInject(CDK_ACCORDION, 12), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.UniqueSelectionDispatcher)); };\nCdkAccordionItem.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkAccordionItem, selectors: [[\"cdk-accordion-item\"], [\"\", \"cdkAccordionItem\", \"\"]], inputs: { expanded: \"expanded\", disabled: \"disabled\" }, outputs: { closed: \"closed\", opened: \"opened\", destroyed: \"destroyed\", expandedChange: \"expandedChange\" }, exportAs: [\"cdkAccordionItem\"], features: [ɵngcc0.ɵɵProvidersFeature([\n // Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from\n // registering to the same accordion.\n { provide: CDK_ACCORDION, useValue: ɵ0 },\n ])] });\nCdkAccordionItem.ctorParameters = () => [\n { type: CdkAccordion, decorators: [{ type: Optional }, { type: Inject, args: [CDK_ACCORDION,] }, { type: SkipSelf }] },\n { type: ChangeDetectorRef },\n { type: UniqueSelectionDispatcher }\n];\nCdkAccordionItem.propDecorators = {\n closed: [{ type: Output }],\n opened: [{ type: Output }],\n destroyed: [{ type: Output }],\n expandedChange: [{ type: Output }],\n expanded: [{ type: Input }],\n disabled: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkAccordionItem, [{\n type: Directive,\n args: [{\n selector: 'cdk-accordion-item, [cdkAccordionItem]',\n exportAs: 'cdkAccordionItem',\n providers: [\n // Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from\n // registering to the same accordion.\n { provide: CDK_ACCORDION, useValue: ɵ0 },\n ]\n }]\n }], function () { return [{ type: CdkAccordion, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CDK_ACCORDION]\n }, {\n type: SkipSelf\n }] }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.UniqueSelectionDispatcher }]; }, { closed: [{\n type: Output\n }], opened: [{\n type: Output\n }], destroyed: [{\n type: Output\n }], expandedChange: [{\n type: Output\n }], expanded: [{\n type: Input\n }], disabled: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkAccordionModule {\n}\nCdkAccordionModule.ɵfac = function CdkAccordionModule_Factory(t) { return new (t || CdkAccordionModule)(); };\nCdkAccordionModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CdkAccordionModule });\nCdkAccordionModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkAccordionModule, [{\n type: NgModule,\n args: [{\n exports: [CdkAccordion, CdkAccordionItem],\n declarations: [CdkAccordion, CdkAccordionItem]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CdkAccordionModule, { declarations: [CdkAccordion, CdkAccordionItem], exports: [CdkAccordion, CdkAccordionItem] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkAccordion, CdkAccordionItem, CdkAccordionModule, CDK_ACCORDION as ɵangular_material_src_cdk_accordion_accordion_a };\n\n","import { CdkAccordionItem, CdkAccordion, CdkAccordionModule } from '@angular/cdk/accordion';\nimport { TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { InjectionToken, Directive, TemplateRef, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, SkipSelf, Inject, ChangeDetectorRef, ViewContainerRef, Input, Output, ContentChild, ViewChild, Host, ElementRef, Attribute, QueryList, ContentChildren, NgModule } from '@angular/core';\nimport { mixinTabIndex, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { FocusMonitor, FocusKeyManager } from '@angular/cdk/a11y';\nimport { distinctUntilChanged, startWith, filter, take } from 'rxjs/operators';\nimport { ENTER, hasModifierKey, SPACE } from '@angular/cdk/keycodes';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subject, Subscription, EMPTY, merge } from 'rxjs';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Token used to provide a `MatAccordion` to `MatExpansionPanel`.\n * Used primarily to avoid circular imports between `MatAccordion` and `MatExpansionPanel`.\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/collections';\nimport * as ɵngcc2 from '@angular/cdk/portal';\nimport * as ɵngcc3 from '@angular/cdk/a11y';\nimport * as ɵngcc4 from '@angular/common';\n\nconst _c0 = [\"body\"];\nfunction MatExpansionPanel_ng_template_5_Template(rf, ctx) { }\nconst _c1 = [[[\"mat-expansion-panel-header\"]], \"*\", [[\"mat-action-row\"]]];\nconst _c2 = [\"mat-expansion-panel-header\", \"*\", \"mat-action-row\"];\nfunction MatExpansionPanelHeader_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 2);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"@indicatorRotate\", ctx_r0._getExpandedState());\n} }\nconst _c3 = [[[\"mat-panel-title\"]], [[\"mat-panel-description\"]], \"*\"];\nconst _c4 = [\"mat-panel-title\", \"mat-panel-description\", \"*\"];\nconst MAT_ACCORDION = new InjectionToken('MAT_ACCORDION');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Time and timing curve for expansion panel animations. */\n// Note: Keep this in sync with the Sass variable for the panel header animation.\nconst EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';\n/**\n * Animations used by the Material expansion panel.\n *\n * A bug in angular animation's `state` when ViewContainers are moved using ViewContainerRef.move()\n * causes the animation state of moved components to become `void` upon exit, and not update again\n * upon reentry into the DOM. This can lead a to situation for the expansion panel where the state\n * of the panel is `expanded` or `collapsed` but the animation state is `void`.\n *\n * To correctly handle animating to the next state, we animate between `void` and `collapsed` which\n * are defined to have the same styles. Since angular animates from the current styles to the\n * destination state's style definition, in situations where we are moving from `void`'s styles to\n * `collapsed` this acts a noop since no style values change.\n *\n * In the case where angular's animation state is out of sync with the expansion panel's state, the\n * expansion panel being `expanded` and angular animations being `void`, the animation from the\n * `expanded`'s effective styles (though in a `void` animation state) to the collapsed state will\n * occur as expected.\n *\n * Angular Bug: https://github.com/angular/angular/issues/18847\n *\n * @docs-private\n */\nconst matExpansionAnimations = {\n /** Animation that rotates the indicator arrow. */\n indicatorRotate: trigger('indicatorRotate', [\n state('collapsed, void', style({ transform: 'rotate(0deg)' })),\n state('expanded', style({ transform: 'rotate(180deg)' })),\n transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n /** Animation that expands and collapses the panel content. */\n bodyExpansion: trigger('bodyExpansion', [\n state('collapsed, void', style({ height: '0px', visibility: 'hidden' })),\n state('expanded', style({ height: '*', visibility: 'visible' })),\n transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ])\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Expansion panel content that will be rendered lazily\n * after the panel is opened for the first time.\n */\nclass MatExpansionPanelContent {\n constructor(_template) {\n this._template = _template;\n }\n}\nMatExpansionPanelContent.ɵfac = function MatExpansionPanelContent_Factory(t) { return new (t || MatExpansionPanelContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nMatExpansionPanelContent.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelContent, selectors: [[\"ng-template\", \"matExpansionPanelContent\", \"\"]] });\nMatExpansionPanelContent.ctorParameters = () => [\n { type: TemplateRef }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatExpansionPanelContent, [{\n type: Directive,\n args: [{\n selector: 'ng-template[matExpansionPanelContent]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Counter for generating unique element ids. */\nlet uniqueId = 0;\n/**\n * Injection token that can be used to configure the default\n * options for the expansion panel component.\n */\nconst MAT_EXPANSION_PANEL_DEFAULT_OPTIONS = new InjectionToken('MAT_EXPANSION_PANEL_DEFAULT_OPTIONS');\nconst ɵ0 = undefined;\n/**\n * This component can be used as a single element to show expandable content, or as one of\n * multiple children of an element with the MatAccordion directive attached.\n */\nclass MatExpansionPanel extends CdkAccordionItem {\n constructor(accordion, _changeDetectorRef, _uniqueSelectionDispatcher, _viewContainerRef, _document, _animationMode, defaultOptions) {\n super(accordion, _changeDetectorRef, _uniqueSelectionDispatcher);\n this._viewContainerRef = _viewContainerRef;\n this._animationMode = _animationMode;\n this._hideToggle = false;\n /** An event emitted after the body's expansion animation happens. */\n this.afterExpand = new EventEmitter();\n /** An event emitted after the body's collapse animation happens. */\n this.afterCollapse = new EventEmitter();\n /** Stream that emits for changes in `@Input` properties. */\n this._inputChanges = new Subject();\n /** ID for the associated header element. Used for a11y labelling. */\n this._headerId = `mat-expansion-panel-header-${uniqueId++}`;\n /** Stream of body animation done events. */\n this._bodyAnimationDone = new Subject();\n this.accordion = accordion;\n this._document = _document;\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._bodyAnimationDone.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe(event => {\n if (event.fromState !== 'void') {\n if (event.toState === 'expanded') {\n this.afterExpand.emit();\n }\n else if (event.toState === 'collapsed') {\n this.afterCollapse.emit();\n }\n }\n });\n if (defaultOptions) {\n this.hideToggle = defaultOptions.hideToggle;\n }\n }\n /** Whether the toggle indicator should be hidden. */\n get hideToggle() {\n return this._hideToggle || (this.accordion && this.accordion.hideToggle);\n }\n set hideToggle(value) {\n this._hideToggle = coerceBooleanProperty(value);\n }\n /** The position of the expansion indicator. */\n get togglePosition() {\n return this._togglePosition || (this.accordion && this.accordion.togglePosition);\n }\n set togglePosition(value) {\n this._togglePosition = value;\n }\n /** Determines whether the expansion panel should have spacing between it and its siblings. */\n _hasSpacing() {\n if (this.accordion) {\n return this.expanded && this.accordion.displayMode === 'default';\n }\n return false;\n }\n /** Gets the expanded state string. */\n _getExpandedState() {\n return this.expanded ? 'expanded' : 'collapsed';\n }\n /** Toggles the expanded state of the expansion panel. */\n toggle() {\n this.expanded = !this.expanded;\n }\n /** Sets the expanded state of the expansion panel to false. */\n close() {\n this.expanded = false;\n }\n /** Sets the expanded state of the expansion panel to true. */\n open() {\n this.expanded = true;\n }\n ngAfterContentInit() {\n if (this._lazyContent) {\n // Render the content as soon as the panel becomes open.\n this.opened.pipe(startWith(null), filter(() => this.expanded && !this._portal), take(1)).subscribe(() => {\n this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);\n });\n }\n }\n ngOnChanges(changes) {\n this._inputChanges.next(changes);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._bodyAnimationDone.complete();\n this._inputChanges.complete();\n }\n /** Checks whether the expansion panel's content contains the currently-focused element. */\n _containsFocus() {\n if (this._body) {\n const focusedElement = this._document.activeElement;\n const bodyElement = this._body.nativeElement;\n return focusedElement === bodyElement || bodyElement.contains(focusedElement);\n }\n return false;\n }\n}\nMatExpansionPanel.ɵfac = function MatExpansionPanel_Factory(t) { return new (t || MatExpansionPanel)(ɵngcc0.ɵɵdirectiveInject(MAT_ACCORDION, 12), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.UniqueSelectionDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(DOCUMENT), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, 8)); };\nMatExpansionPanel.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatExpansionPanel, selectors: [[\"mat-expansion-panel\"]], contentQueries: function MatExpansionPanel_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatExpansionPanelContent, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._lazyContent = _t.first);\n } }, viewQuery: function MatExpansionPanel_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._body = _t.first);\n } }, hostAttrs: [1, \"mat-expansion-panel\"], hostVars: 6, hostBindings: function MatExpansionPanel_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-expanded\", ctx.expanded)(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\")(\"mat-expansion-panel-spacing\", ctx._hasSpacing());\n } }, inputs: { disabled: \"disabled\", expanded: \"expanded\", hideToggle: \"hideToggle\", togglePosition: \"togglePosition\" }, outputs: { opened: \"opened\", closed: \"closed\", expandedChange: \"expandedChange\", afterExpand: \"afterExpand\", afterCollapse: \"afterCollapse\" }, exportAs: [\"matExpansionPanel\"], features: [ɵngcc0.ɵɵProvidersFeature([\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n { provide: MAT_ACCORDION, useValue: ɵ0 },\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c2, decls: 7, vars: 4, consts: [[\"role\", \"region\", 1, \"mat-expansion-panel-content\", 3, \"id\"], [\"body\", \"\"], [1, \"mat-expansion-panel-body\"], [3, \"cdkPortalOutlet\"]], template: function MatExpansionPanel_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c1);\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 0, 1);\n ɵngcc0.ɵɵlistener(\"@bodyExpansion.done\", function MatExpansionPanel_Template_div_animation_bodyExpansion_done_1_listener($event) { return ctx._bodyAnimationDone.next($event); });\n ɵngcc0.ɵɵelementStart(3, \"div\", 2);\n ɵngcc0.ɵɵprojection(4, 1);\n ɵngcc0.ɵɵtemplate(5, MatExpansionPanel_ng_template_5_Template, 0, 0, \"ng-template\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(6, 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"@bodyExpansion\", ctx._getExpandedState())(\"id\", ctx.id);\n ɵngcc0.ɵɵattribute(\"aria-labelledby\", ctx._headerId);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"cdkPortalOutlet\", ctx._portal);\n } }, directives: [ɵngcc2.CdkPortalOutlet], styles: [\".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;border-radius:4px;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:4px;border-top-left-radius:4px}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.mat-action-row button.mat-button-base,.mat-action-row button.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row button.mat-button-base,[dir=rtl] .mat-action-row button.mat-mdc-button-base{margin-left:0;margin-right:8px}\\n\"], encapsulation: 2, data: { animation: [matExpansionAnimations.bodyExpansion] }, changeDetection: 0 });\nMatExpansionPanel.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Optional }, { type: SkipSelf }, { type: Inject, args: [MAT_ACCORDION,] }] },\n { type: ChangeDetectorRef },\n { type: UniqueSelectionDispatcher },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS,] }, { type: Optional }] }\n];\nMatExpansionPanel.propDecorators = {\n hideToggle: [{ type: Input }],\n togglePosition: [{ type: Input }],\n afterExpand: [{ type: Output }],\n afterCollapse: [{ type: Output }],\n _lazyContent: [{ type: ContentChild, args: [MatExpansionPanelContent,] }],\n _body: [{ type: ViewChild, args: ['body',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatExpansionPanel, [{\n type: Component,\n args: [{\n selector: 'mat-expansion-panel',\n exportAs: 'matExpansionPanel',\n template: \"\\n
\\n
\\n \\n \\n
\\n \\n
\\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['disabled', 'expanded'],\n outputs: ['opened', 'closed', 'expandedChange'],\n animations: [matExpansionAnimations.bodyExpansion],\n providers: [\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n { provide: MAT_ACCORDION, useValue: ɵ0 },\n ],\n host: {\n 'class': 'mat-expansion-panel',\n '[class.mat-expanded]': 'expanded',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[class.mat-expansion-panel-spacing]': '_hasSpacing()'\n },\n styles: [\".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;border-radius:4px;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:4px;border-top-left-radius:4px}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.mat-action-row button.mat-button-base,.mat-action-row button.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row button.mat-button-base,[dir=rtl] .mat-action-row button.mat-mdc-button-base{margin-left:0;margin-right:8px}\\n\"]\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }, {\n type: Inject,\n args: [MAT_ACCORDION]\n }] }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.UniqueSelectionDispatcher }, { type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]\n }, {\n type: Optional\n }] }]; }, { afterExpand: [{\n type: Output\n }], afterCollapse: [{\n type: Output\n }], hideToggle: [{\n type: Input\n }], togglePosition: [{\n type: Input\n }], _lazyContent: [{\n type: ContentChild,\n args: [MatExpansionPanelContent]\n }], _body: [{\n type: ViewChild,\n args: ['body']\n }] }); })();\n/**\n * Actions of a ``.\n */\nclass MatExpansionPanelActionRow {\n}\nMatExpansionPanelActionRow.ɵfac = function MatExpansionPanelActionRow_Factory(t) { return new (t || MatExpansionPanelActionRow)(); };\nMatExpansionPanelActionRow.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelActionRow, selectors: [[\"mat-action-row\"]], hostAttrs: [1, \"mat-action-row\"] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatExpansionPanelActionRow, [{\n type: Directive,\n args: [{\n selector: 'mat-action-row',\n host: {\n class: 'mat-action-row'\n }\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatExpansionPanelHeader.\n/** @docs-private */\nclass MatExpansionPanelHeaderBase {\n}\nconst _MatExpansionPanelHeaderMixinBase = mixinTabIndex(MatExpansionPanelHeaderBase);\n/**\n * Header element of a ``.\n */\nclass MatExpansionPanelHeader extends _MatExpansionPanelHeaderMixinBase {\n constructor(panel, _element, _focusMonitor, _changeDetectorRef, defaultOptions, _animationMode, tabIndex) {\n super();\n this.panel = panel;\n this._element = _element;\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n this._parentChangeSubscription = Subscription.EMPTY;\n const accordionHideToggleChange = panel.accordion ?\n panel.accordion._stateChanges.pipe(filter(changes => !!(changes['hideToggle'] || changes['togglePosition']))) :\n EMPTY;\n this.tabIndex = parseInt(tabIndex || '') || 0;\n // Since the toggle state depends on an @Input on the panel, we\n // need to subscribe and trigger change detection manually.\n this._parentChangeSubscription =\n merge(panel.opened, panel.closed, accordionHideToggleChange, panel._inputChanges.pipe(filter(changes => {\n return !!(changes['hideToggle'] ||\n changes['disabled'] ||\n changes['togglePosition']);\n })))\n .subscribe(() => this._changeDetectorRef.markForCheck());\n // Avoids focus being lost if the panel contained the focused element and was closed.\n panel.closed\n .pipe(filter(() => panel._containsFocus()))\n .subscribe(() => _focusMonitor.focusVia(_element, 'program'));\n if (defaultOptions) {\n this.expandedHeight = defaultOptions.expandedHeight;\n this.collapsedHeight = defaultOptions.collapsedHeight;\n }\n }\n /**\n * Whether the associated panel is disabled. Implemented as a part of `FocusableOption`.\n * @docs-private\n */\n get disabled() {\n return this.panel.disabled;\n }\n /** Toggles the expanded state of the panel. */\n _toggle() {\n if (!this.disabled) {\n this.panel.toggle();\n }\n }\n /** Gets whether the panel is expanded. */\n _isExpanded() {\n return this.panel.expanded;\n }\n /** Gets the expanded state string of the panel. */\n _getExpandedState() {\n return this.panel._getExpandedState();\n }\n /** Gets the panel id. */\n _getPanelId() {\n return this.panel.id;\n }\n /** Gets the toggle position for the header. */\n _getTogglePosition() {\n return this.panel.togglePosition;\n }\n /** Gets whether the expand indicator should be shown. */\n _showToggle() {\n return !this.panel.hideToggle && !this.panel.disabled;\n }\n /**\n * Gets the current height of the header. Null if no custom height has been\n * specified, and if the default height from the stylesheet should be used.\n */\n _getHeaderHeight() {\n const isExpanded = this._isExpanded();\n if (isExpanded && this.expandedHeight) {\n return this.expandedHeight;\n }\n else if (!isExpanded && this.collapsedHeight) {\n return this.collapsedHeight;\n }\n return null;\n }\n /** Handle keydown event calling to toggle() if appropriate. */\n _keydown(event) {\n switch (event.keyCode) {\n // Toggle for space and enter keys.\n case SPACE:\n case ENTER:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this._toggle();\n }\n break;\n default:\n if (this.panel.accordion) {\n this.panel.accordion._handleHeaderKeydown(event);\n }\n return;\n }\n }\n /**\n * Focuses the panel header. Implemented as a part of `FocusableOption`.\n * @param origin Origin of the action that triggered the focus.\n * @docs-private\n */\n focus(origin, options) {\n if (origin) {\n this._focusMonitor.focusVia(this._element, origin, options);\n }\n else {\n this._element.nativeElement.focus(options);\n }\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._element).subscribe(origin => {\n if (origin && this.panel.accordion) {\n this.panel.accordion._handleHeaderFocus(this);\n }\n });\n }\n ngOnDestroy() {\n this._parentChangeSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._element);\n }\n}\nMatExpansionPanelHeader.ɵfac = function MatExpansionPanelHeader_Factory(t) { return new (t || MatExpansionPanelHeader)(ɵngcc0.ɵɵdirectiveInject(MatExpansionPanel, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, 8), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵinjectAttribute('tabindex')); };\nMatExpansionPanelHeader.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatExpansionPanelHeader, selectors: [[\"mat-expansion-panel-header\"]], hostAttrs: [\"role\", \"button\", 1, \"mat-expansion-panel-header\", \"mat-focus-indicator\"], hostVars: 15, hostBindings: function MatExpansionPanelHeader_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function MatExpansionPanelHeader_click_HostBindingHandler() { return ctx._toggle(); })(\"keydown\", function MatExpansionPanelHeader_keydown_HostBindingHandler($event) { return ctx._keydown($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.panel._headerId)(\"tabindex\", ctx.tabIndex)(\"aria-controls\", ctx._getPanelId())(\"aria-expanded\", ctx._isExpanded())(\"aria-disabled\", ctx.panel.disabled);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx._getHeaderHeight());\n ɵngcc0.ɵɵclassProp(\"mat-expanded\", ctx._isExpanded())(\"mat-expansion-toggle-indicator-after\", ctx._getTogglePosition() === \"after\")(\"mat-expansion-toggle-indicator-before\", ctx._getTogglePosition() === \"before\")(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\");\n } }, inputs: { tabIndex: \"tabIndex\", expandedHeight: \"expandedHeight\", collapsedHeight: \"collapsedHeight\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c4, decls: 5, vars: 1, consts: [[1, \"mat-content\"], [\"class\", \"mat-expansion-indicator\", 4, \"ngIf\"], [1, \"mat-expansion-indicator\"]], template: function MatExpansionPanelHeader_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c3);\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵprojection(3, 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(4, MatExpansionPanelHeader_span_4_Template, 1, 1, \"span\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx._showToggle());\n } }, directives: [ɵngcc4.NgIf], styles: [\".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;margin-right:16px}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header-description{flex-grow:2}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\\\"\\\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle}.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true])::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;border:3px solid;border-radius:4px;content:\\\"\\\"}.cdk-high-contrast-active .mat-expansion-panel-content{border-top:1px solid;border-top-left-radius:0;border-top-right-radius:0}\\n\"], encapsulation: 2, data: { animation: [\n matExpansionAnimations.indicatorRotate,\n ] }, changeDetection: 0 });\nMatExpansionPanelHeader.ctorParameters = () => [\n { type: MatExpansionPanel, decorators: [{ type: Host }] },\n { type: ElementRef },\n { type: FocusMonitor },\n { type: ChangeDetectorRef },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS,] }, { type: Optional }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] }\n];\nMatExpansionPanelHeader.propDecorators = {\n expandedHeight: [{ type: Input }],\n collapsedHeight: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatExpansionPanelHeader, [{\n type: Component,\n args: [{\n selector: 'mat-expansion-panel-header',\n template: \"\\n \\n \\n \\n\\n\\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['tabIndex'],\n animations: [\n matExpansionAnimations.indicatorRotate,\n ],\n host: {\n 'class': 'mat-expansion-panel-header mat-focus-indicator',\n 'role': 'button',\n '[attr.id]': 'panel._headerId',\n '[attr.tabindex]': 'tabIndex',\n '[attr.aria-controls]': '_getPanelId()',\n '[attr.aria-expanded]': '_isExpanded()',\n '[attr.aria-disabled]': 'panel.disabled',\n '[class.mat-expanded]': '_isExpanded()',\n '[class.mat-expansion-toggle-indicator-after]': `_getTogglePosition() === 'after'`,\n '[class.mat-expansion-toggle-indicator-before]': `_getTogglePosition() === 'before'`,\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[style.height]': '_getHeaderHeight()',\n '(click)': '_toggle()',\n '(keydown)': '_keydown($event)'\n },\n styles: [\".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;margin-right:16px}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header-description{flex-grow:2}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\\\"\\\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle}.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true])::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;border:3px solid;border-radius:4px;content:\\\"\\\"}.cdk-high-contrast-active .mat-expansion-panel-content{border-top:1px solid;border-top-left-radius:0;border-top-right-radius:0}\\n\"]\n }]\n }], function () { return [{ type: MatExpansionPanel, decorators: [{\n type: Host\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc3.FocusMonitor }, { type: ɵngcc0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]\n }, {\n type: Optional\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }]; }, { expandedHeight: [{\n type: Input\n }], collapsedHeight: [{\n type: Input\n }] }); })();\n/**\n * Description element of a ``.\n */\nclass MatExpansionPanelDescription {\n}\nMatExpansionPanelDescription.ɵfac = function MatExpansionPanelDescription_Factory(t) { return new (t || MatExpansionPanelDescription)(); };\nMatExpansionPanelDescription.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelDescription, selectors: [[\"mat-panel-description\"]], hostAttrs: [1, \"mat-expansion-panel-header-description\"] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatExpansionPanelDescription, [{\n type: Directive,\n args: [{\n selector: 'mat-panel-description',\n host: {\n class: 'mat-expansion-panel-header-description'\n }\n }]\n }], null, null); })();\n/**\n * Title element of a ``.\n */\nclass MatExpansionPanelTitle {\n}\nMatExpansionPanelTitle.ɵfac = function MatExpansionPanelTitle_Factory(t) { return new (t || MatExpansionPanelTitle)(); };\nMatExpansionPanelTitle.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelTitle, selectors: [[\"mat-panel-title\"]], hostAttrs: [1, \"mat-expansion-panel-header-title\"] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatExpansionPanelTitle, [{\n type: Directive,\n args: [{\n selector: 'mat-panel-title',\n host: {\n class: 'mat-expansion-panel-header-title'\n }\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Directive for a Material Design Accordion.\n */\nclass MatAccordion extends CdkAccordion {\n constructor() {\n super(...arguments);\n /** Headers belonging to this accordion. */\n this._ownHeaders = new QueryList();\n this._hideToggle = false;\n /**\n * Display mode used for all expansion panels in the accordion. Currently two display\n * modes exist:\n * default - a gutter-like spacing is placed around any expanded panel, placing the expanded\n * panel at a different elevation from the rest of the accordion.\n * flat - no spacing is placed around expanded panels, showing all panels at the same\n * elevation.\n */\n this.displayMode = 'default';\n /** The position of the expansion indicator. */\n this.togglePosition = 'after';\n }\n /** Whether the expansion indicator should be hidden. */\n get hideToggle() { return this._hideToggle; }\n set hideToggle(show) { this._hideToggle = coerceBooleanProperty(show); }\n ngAfterContentInit() {\n this._headers.changes\n .pipe(startWith(this._headers))\n .subscribe((headers) => {\n this._ownHeaders.reset(headers.filter(header => header.panel.accordion === this));\n this._ownHeaders.notifyOnChanges();\n });\n this._keyManager = new FocusKeyManager(this._ownHeaders).withWrap().withHomeAndEnd();\n }\n /** Handles keyboard events coming in from the panel headers. */\n _handleHeaderKeydown(event) {\n this._keyManager.onKeydown(event);\n }\n _handleHeaderFocus(header) {\n this._keyManager.updateActiveItem(header);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._ownHeaders.destroy();\n }\n}\nMatAccordion.ɵfac = /*@__PURE__*/ function () { let ɵMatAccordion_BaseFactory; return function MatAccordion_Factory(t) { return (ɵMatAccordion_BaseFactory || (ɵMatAccordion_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatAccordion)))(t || MatAccordion); }; }();\nMatAccordion.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatAccordion, selectors: [[\"mat-accordion\"]], contentQueries: function MatAccordion_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatExpansionPanelHeader, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._headers = _t);\n } }, hostAttrs: [1, \"mat-accordion\"], hostVars: 2, hostBindings: function MatAccordion_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-accordion-multi\", ctx.multi);\n } }, inputs: { multi: \"multi\", displayMode: \"displayMode\", togglePosition: \"togglePosition\", hideToggle: \"hideToggle\" }, exportAs: [\"matAccordion\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: MAT_ACCORDION,\n useExisting: MatAccordion\n }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatAccordion.propDecorators = {\n _headers: [{ type: ContentChildren, args: [MatExpansionPanelHeader, { descendants: true },] }],\n hideToggle: [{ type: Input }],\n displayMode: [{ type: Input }],\n togglePosition: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatAccordion, [{\n type: Directive,\n args: [{\n selector: 'mat-accordion',\n exportAs: 'matAccordion',\n inputs: ['multi'],\n providers: [{\n provide: MAT_ACCORDION,\n useExisting: MatAccordion\n }],\n host: {\n class: 'mat-accordion',\n // Class binding which is only used by the test harness as there is no other\n // way for the harness to detect if multiple panel support is enabled.\n '[class.mat-accordion-multi]': 'this.multi'\n }\n }]\n }], null, { displayMode: [{\n type: Input\n }], togglePosition: [{\n type: Input\n }], hideToggle: [{\n type: Input\n }], _headers: [{\n type: ContentChildren,\n args: [MatExpansionPanelHeader, { descendants: true }]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatExpansionModule {\n}\nMatExpansionModule.ɵfac = function MatExpansionModule_Factory(t) { return new (t || MatExpansionModule)(); };\nMatExpansionModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatExpansionModule });\nMatExpansionModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, MatCommonModule, CdkAccordionModule, PortalModule]] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatExpansionModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule, CdkAccordionModule, PortalModule],\n exports: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ],\n declarations: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatExpansionModule, { declarations: function () { return [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent]; }, imports: function () { return [CommonModule, MatCommonModule, CdkAccordionModule, PortalModule]; }, exports: function () { return [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent]; } }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { EXPANSION_PANEL_ANIMATION_TIMING, MAT_ACCORDION, MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, MatAccordion, MatExpansionModule, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelContent, MatExpansionPanelDescription, MatExpansionPanelHeader, MatExpansionPanelTitle, matExpansionAnimations, ɵ0 };\n\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SubUserManagementComponent} from './sub-user-management.component';\nimport {RouterModule} from '@angular/router';\nimport { SubUserFormComponent } from './sub-user-form/sub-user-form.component';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { SubUserDeleteConfirmDialogComponent } from './sub-user-delete-confirm-dialog/sub-user-delete-confirm-dialog.component';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {NotificationModule} from '../../../shared/notification/notification.module';\nimport { SubUserPasswordConfirmDialogComponent } from './sub-user-password-confirm-dialog/sub-user-password-confirm-dialog.component';\nimport {SpinnerModule} from '../../../shared/spinner/spinner.module';\n\nexport const routes = [\n {path: '', component: SubUserManagementComponent, pathMatch: 'full'},\n];\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule.forChild(routes),\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDialogModule,\n MatExpansionModule,\n MatCheckboxModule,\n MatTreeModule,\n MatIconModule,\n MatTooltipModule,\n TranslateModule,\n NotificationModule,\n SpinnerModule\n ],\n declarations: [SubUserManagementComponent, SubUserFormComponent, SubUserDeleteConfirmDialogComponent, SubUserPasswordConfirmDialogComponent],\n entryComponents: [SubUserDeleteConfirmDialogComponent, SubUserPasswordConfirmDialogComponent]\n})\nexport class SubUserManagementModule {\n static routes = routes;\n}\n"]}