{"version":3,"file":"clr-angular-collapsible-panel.mjs","sources":["../../../projects/angular/collapsible-panel/models/collapsible-panel.model.ts","../../../projects/angular/collapsible-panel/providers/collapsible-panel.service.ts","../../../projects/angular/collapsible-panel/collapsible-panel.ts","../../../projects/angular/collapsible-panel/utils/animation.ts","../../../projects/angular/collapsible-panel/index.ts","../../../projects/angular/collapsible-panel/clr-angular-collapsible-panel.ts"],"sourcesContent":["/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nlet panelGroupCount = 0;\n\nexport class CollapsiblePanelModel {\n  index: number = null;\n  disabled = false;\n  open = false;\n  templateId = `${this.id}-${this.groupId}`;\n  constructor(\n    public id: string,\n    public groupId: number | string\n  ) {}\n}\n\nexport class CollapsiblePanelGroupModel {\n  protected panelGroupCount = panelGroupCount++;\n  protected _panels: { [id: string]: CollapsiblePanelModel } = {};\n\n  get panels(): CollapsiblePanelModel[] {\n    return Object.keys(this._panels).map(id => this._panels[id]);\n  }\n\n  updatePanelOrder(ids: string[]) {\n    ids.forEach((id, index) => {\n      if (this._panels[id]) {\n        this._panels[id].index = index;\n      }\n    });\n    this.removeOldPanels(ids);\n  }\n\n  addPanel(id: string, open = false) {\n    this._panels[id] = new CollapsiblePanelModel(id, this.panelGroupCount);\n    this._panels[id].open = open;\n  }\n\n  togglePanel(panelId: string, open?: boolean) {\n    if (!this._panels[panelId]) {\n      return;\n    }\n\n    const panelIsOpen = this._panels[panelId].open;\n    this._panels[panelId].open = open !== undefined ? open : !panelIsOpen;\n  }\n\n  disablePanel(panelId: string, disabled: boolean) {\n    if (!this._panels[panelId]) {\n      return;\n    }\n\n    this._panels[panelId].disabled = disabled;\n  }\n\n  private removeOldPanels(ids: string[]) {\n    this.panels\n      .filter(panel => ids.find(id => id === panel.id) === undefined)\n      .forEach(panel => delete this._panels[panel.id]);\n  }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { CollapsiblePanelGroupModel, CollapsiblePanelModel } from '../models/collapsible-panel.model';\n\n@Injectable()\nexport class CollapsiblePanelService {\n  protected panelGroup = new CollapsiblePanelGroupModel();\n  protected readonly _panelsChanges = new BehaviorSubject(this.panelGroup.panels);\n\n  getPanelChanges(panelId: string): Observable<CollapsiblePanelModel> {\n    return this._panelsChanges.pipe(map(panels => panels.find(s => s.id === panelId)));\n  }\n\n  addPanel(panelId: string, open = false) {\n    this.panelGroup.addPanel(panelId, open);\n    this.emitUpdatedPanels();\n  }\n\n  togglePanel(panelId: string, open?: boolean) {\n    this.panelGroup.togglePanel(panelId, open);\n    this.emitUpdatedPanels();\n  }\n\n  disablePanel(panelId: string, disabled?: boolean) {\n    this.panelGroup.disablePanel(panelId, disabled);\n    this.emitUpdatedPanels();\n  }\n\n  updatePanelOrder(ids: string[]) {\n    this.panelGroup.updatePanelOrder(ids);\n    this.emitUpdatedPanels();\n  }\n\n  protected emitUpdatedPanels() {\n    this._panelsChanges.next(this.panelGroup.panels);\n  }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ChangeDetectorRef, Directive, EventEmitter, OnInit, SimpleChanges } from '@angular/core';\nimport { IfExpandService, uniqueIdFactory } from '@clr/angular/utils';\nimport { Observable } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { CollapsiblePanelModel } from './models/collapsible-panel.model';\nimport { CollapsiblePanelService } from './providers/collapsible-panel.service';\n\n@Directive()\nexport abstract class CollapsiblePanel implements OnInit {\n  panelOpen = false;\n  panelOpenChange = new EventEmitter<boolean>();\n\n  panel: Observable<CollapsiblePanelModel>;\n\n  protected _panelIndex: number;\n  private _id = uniqueIdFactory();\n\n  constructor(\n    protected panelService: CollapsiblePanelService,\n    protected ifExpandService: IfExpandService,\n    protected cdr: ChangeDetectorRef\n  ) {}\n\n  get id(): string {\n    return this._id;\n  }\n  set id(value: string) {\n    this._id = value;\n  }\n\n  abstract get disabled(): boolean;\n\n  ngOnInit() {\n    this.panelService.addPanel(this.id, this.panelOpen);\n    this.panelService.disablePanel(this.id, this.disabled);\n    this.panel = this.panelService.getPanelChanges(this.id).pipe(\n      filter(panel => !!panel),\n      tap(panel => this.emitPanelChange(panel))\n    );\n  }\n\n  togglePanel() {\n    this.panelService.togglePanel(this.id);\n  }\n\n  collapsePanelOnAnimationDone(panel: CollapsiblePanelModel) {\n    if (!panel.open) {\n      this.ifExpandService.expanded = false;\n    }\n  }\n\n  protected handlePanelInputChanges(changes: SimpleChanges) {\n    if (this.panel && changes.panelOpen && changes.panelOpen.currentValue !== changes.panelOpen.previousValue) {\n      this.panelService.togglePanel(this.id, changes.panelOpen.currentValue);\n    }\n\n    if (this.panel && changes.disabled && changes.disabled.currentValue !== changes.disabled.previousValue) {\n      this.panelService.disablePanel(this.id, changes.disabled.currentValue);\n    }\n  }\n\n  private emitPanelChange(panel: CollapsiblePanelModel) {\n    if (panel.index !== this._panelIndex) {\n      this._panelIndex = panel.index;\n      this.cdr.detectChanges();\n    }\n\n    if (panel.open !== this.panelOpen) {\n      this.panelOpenChange.emit(panel.open);\n      this.panelOpen = panel.open;\n    }\n\n    if (panel.open) {\n      this.ifExpandService.expanded = true;\n    }\n  }\n\n  abstract getPanelStateClasses(panel: CollapsiblePanelModel): string;\n  abstract getContentId(id: string): string;\n  abstract getHeaderId(id: string): string;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { defaultAnimationTiming } from '@clr/angular/utils';\n\nexport const skipInitialRenderTrigger = trigger('skipInitialRender', [transition(':enter', [])]);\n\nexport const panelExpandTransition = transition('void => *', [\n  style({ display: 'block', height: 0 }),\n  animate(defaultAnimationTiming, style({ height: '*' })),\n]);\n\nexport const panelCollapseTransition = transition('* => void', [\n  style({ display: 'block' }),\n  animate(defaultAnimationTiming, style({ height: 0, display: 'none' })),\n]);\n\nexport const collapsiblePanelExpandAnimation = [skipInitialRenderTrigger, trigger('toggle', [panelExpandTransition])];\n\nexport const collapsiblePanelAnimation = [\n  skipInitialRenderTrigger,\n  trigger('toggle', [panelExpandTransition, panelCollapseTransition]),\n];\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './collapsible-panel';\nexport * from './models/collapsible-panel.model';\nexport * from './providers/collapsible-panel.service';\nexport * from './utils/animation';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CollapsiblePanelService"],"mappings":";;;;;;;;AAAA;;;;;AAKG;AAEH,IAAI,eAAe,GAAG,CAAC;MAEV,qBAAqB,CAAA;IAKhC,WAAA,CACS,EAAU,EACV,OAAwB,EAAA;QADxB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,OAAO,GAAP,OAAO;QANhB,IAAA,CAAA,KAAK,GAAW,IAAI;QACpB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,UAAU,GAAG,CAAA,EAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAA,CAAE;IAItC;AACJ;MAEY,0BAA0B,CAAA;AAAvC,IAAA,WAAA,GAAA;QACY,IAAA,CAAA,eAAe,GAAG,eAAe,EAAE;QACnC,IAAA,CAAA,OAAO,GAA4C,EAAE;IA0CjE;AAxCE,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9D;AAEA,IAAA,gBAAgB,CAAC,GAAa,EAAA;QAC5B,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,KAAI;AACxB,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBACpB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK;YAChC;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;IAC3B;AAEA,IAAA,QAAQ,CAAC,EAAU,EAAE,IAAI,GAAG,KAAK,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,qBAAqB,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI;IAC9B;IAEA,WAAW,CAAC,OAAe,EAAE,IAAc,EAAA;QACzC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B;QACF;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI;QAC9C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW;IACvE;IAEA,YAAY,CAAC,OAAe,EAAE,QAAiB,EAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B;QACF;QAEA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,GAAG,QAAQ;IAC3C;AAEQ,IAAA,eAAe,CAAC,GAAa,EAAA;AACnC,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,SAAS;AAC7D,aAAA,OAAO,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpD;AACD;;AChED;;;;;AAKG;MASU,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,0BAA0B,EAAE;QACpC,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AA6BhF,IAAA;AA3BC,IAAA,eAAe,CAAC,OAAe,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC;IACpF;AAEA,IAAA,QAAQ,CAAC,OAAe,EAAE,IAAI,GAAG,KAAK,EAAA;QACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;QACvC,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEA,WAAW,CAAC,OAAe,EAAE,IAAc,EAAA;QACzC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1C,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEA,YAAY,CAAC,OAAe,EAAE,QAAkB,EAAA;QAC9C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC/C,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,GAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC;QACrC,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEU,iBAAiB,GAAA;QACzB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAClD;8GA9BW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAvB,uBAAuB,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACbD;;;;;AAKG;MAWmB,gBAAgB,CAAA;AASpC,IAAA,WAAA,CACY,YAAqC,EACrC,eAAgC,EAChC,GAAsB,EAAA;QAFtB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,GAAG,GAAH,GAAG;QAXf,IAAA,CAAA,SAAS,GAAG,KAAK;AACjB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAW;QAKrC,IAAA,CAAA,GAAG,GAAG,eAAe,EAAE;IAM5B;AAEH,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG;IACjB;IACA,IAAI,EAAE,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK;IAClB;IAIA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;AACnD,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;AACtD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAC1D,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,EACxB,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAC1C;IACH;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IACxC;AAEA,IAAA,4BAA4B,CAAC,KAA4B,EAAA;AACvD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,KAAK;QACvC;IACF;AAEU,IAAA,uBAAuB,CAAC,OAAsB,EAAA;QACtD,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE;AACzG,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC;QACxE;QAEA,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;AACtG,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxE;IACF;AAEQ,IAAA,eAAe,CAAC,KAA4B,EAAA;QAClD,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE;AACpC,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC1B;QAEA,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE;YACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI;QAC7B;AAEA,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,IAAI;QACtC;IACF;8GAnEoB,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;ACfD;;;;;AAKG;AAKI,MAAM,wBAAwB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAExF,MAAM,qBAAqB,GAAG,UAAU,CAAC,WAAW,EAAE;IAC3D,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACtC,OAAO,CAAC,sBAAsB,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACxD,CAAA;AAEM,MAAM,uBAAuB,GAAG,UAAU,CAAC,WAAW,EAAE;AAC7D,IAAA,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC3B,IAAA,OAAO,CAAC,sBAAsB,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACvE,CAAA;AAEM,MAAM,+BAA+B,GAAG,CAAC,wBAAwB,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,qBAAqB,CAAC,CAAC;AAE7G,MAAM,yBAAyB,GAAG;IACvC,wBAAwB;IACxB,OAAO,CAAC,QAAQ,EAAE,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;;;AC1BrE;;;;;AAKG;;ACLH;;AAEG;;;;"}