{"version":3,"file":"mdb-angular-ui-kit-collapse.mjs","sources":["../../../projects/mdb-angular-ui-kit/collapse/collapse.directive.ts","../../../projects/mdb-angular-ui-kit/collapse/collapse.module.ts","../../../projects/mdb-angular-ui-kit/collapse/mdb-angular-ui-kit-collapse.ts"],"sourcesContent":["import {\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  Output,\n  Renderer2,\n  inject,\n} from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nconst TRANSITION_TIME = 350;\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: '[mdbCollapse]',\n  exportAs: 'mdbCollapse',\n  standalone: false,\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class MdbCollapseDirective {\n  private _cdRef = inject(ChangeDetectorRef);\n\n  constructor(private _elementRef: ElementRef, private _renderer: Renderer2) {}\n\n  @HostBinding('class.collapse') collapseClass = true;\n\n  @Output() collapseShow: EventEmitter<MdbCollapseDirective> = new EventEmitter();\n  @Output() collapseShown: EventEmitter<MdbCollapseDirective> = new EventEmitter();\n  @Output() collapseHide: EventEmitter<MdbCollapseDirective> = new EventEmitter();\n  @Output() collapseHidden: EventEmitter<MdbCollapseDirective> = new EventEmitter();\n\n  @Input()\n  set collapsed(collapsed: boolean) {\n    if (collapsed !== this._collapsed) {\n      collapsed ? this.hide() : this.show();\n      this._collapsed = collapsed;\n    }\n  }\n  get collapsed(): boolean {\n    return this._collapsed;\n  }\n  private _collapsed = true;\n\n  get host(): HTMLElement {\n    return this._elementRef.nativeElement;\n  }\n\n  private _isTransitioning = false;\n\n  show(): void {\n    if (this._isTransitioning || !this.collapsed) {\n      return;\n    }\n\n    this.collapseShow.emit(this);\n\n    this._renderer.removeClass(this.host, 'collapse');\n    this._renderer.addClass(this.host, 'collapsing');\n\n    this._renderer.setStyle(this.host, 'height', '0px');\n\n    this._isTransitioning = true;\n\n    const scrollHeight = this.host.scrollHeight;\n\n    fromEvent(this.host, 'transitionend')\n      .pipe(take(1))\n      .subscribe(() => {\n        this._isTransitioning = false;\n        this.collapsed = false;\n        this._renderer.removeClass(this.host, 'collapsing');\n        this._renderer.addClass(this.host, 'collapse');\n        this._renderer.addClass(this.host, 'show');\n\n        this._renderer.removeStyle(this.host, 'height');\n\n        this.collapseShown.emit(this);\n        this._cdRef.markForCheck();\n      });\n\n    this._emulateTransitionEnd(this.host, TRANSITION_TIME);\n\n    this._renderer.setStyle(this.host, 'height', `${scrollHeight}px`);\n  }\n\n  hide(): void {\n    if (this._isTransitioning || this.collapsed) {\n      return;\n    }\n\n    this.collapseHide.emit(this);\n\n    const hostHeight = this.host.getBoundingClientRect().height;\n\n    this._renderer.setStyle(this.host, 'height', `${hostHeight}px`);\n\n    this._reflow(this.host);\n\n    this._renderer.addClass(this.host, 'collapsing');\n    this._renderer.removeClass(this.host, 'collapse');\n    this._renderer.removeClass(this.host, 'show');\n\n    this._isTransitioning = true;\n\n    fromEvent(this.host, 'transitionend')\n      .pipe(take(1))\n      .subscribe(() => {\n        this._renderer.removeClass(this.host, 'collapsing');\n        this._renderer.addClass(this.host, 'collapse');\n        this._isTransitioning = false;\n        this.collapsed = true;\n\n        this.collapseHidden.emit(this);\n        this._cdRef.markForCheck();\n      });\n\n    this._renderer.removeStyle(this.host, 'height');\n    this._emulateTransitionEnd(this.host, TRANSITION_TIME);\n  }\n\n  toggle(): void {\n    if (this._isTransitioning) {\n      return;\n    }\n\n    this.collapsed = !this.collapsed;\n    this.collapsed ? this.hide() : this.show();\n  }\n\n  private _reflow(element: HTMLElement): number {\n    return element.offsetHeight;\n  }\n\n  private _emulateTransitionEnd(element: HTMLElement, duration: number): void {\n    let eventEmitted = false;\n    const durationPadding = 5;\n    const emulatedDuration = duration + durationPadding;\n\n    fromEvent(element, 'transitionend')\n      .pipe(take(1))\n      .subscribe(() => {\n        eventEmitted = true;\n      });\n\n    setTimeout(() => {\n      if (!eventEmitted) {\n        element.dispatchEvent(new Event('transitionend'));\n      }\n    }, emulatedDuration);\n  }\n}\n","import { MdbCollapseDirective } from './collapse.directive';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n  declarations: [MdbCollapseDirective],\n  exports: [MdbCollapseDirective],\n})\nexport class MdbCollapseModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}