{"version":3,"file":"ngx-bottom-sheet-modal.mjs","sources":["../../../projects/ngx-bottom-sheet-modal/src/lib/ngx-bottom-sheet-modal.service.ts","../../../projects/ngx-bottom-sheet-modal/src/lib/escape-listener.directive.ts","../../../projects/ngx-bottom-sheet-modal/src/lib/safe-resize-observer.ts","../../../projects/ngx-bottom-sheet-modal/src/lib/ngx-bottom-sheet-modal.component.ts","../../../projects/ngx-bottom-sheet-modal/src/lib/ngx-bottom-sheet-modal.component.html","../../../projects/ngx-bottom-sheet-modal/src/public-api.ts","../../../projects/ngx-bottom-sheet-modal/src/ngx-bottom-sheet-modal.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\r\nimport { Inject, Injectable, Type, computed, signal } from '@angular/core';\r\n\r\nconst configDefaults = {\r\n  contentComponent: null,\r\n  canClose: true,\r\n  showCloseButton: true,\r\n  closeButtonClass: 'text-gray-500 dark:text-gray-300',\r\n};\r\n\r\nexport interface NgxBottomSheetModalConfig {\r\n  /** Content component class */\r\n  contentComponent: Type<any> | null;\r\n  /** An object containing the data. Each property of it can be mapped as an input property in the content component */\r\n  inputs?: Record<string, unknown>;\r\n  /** Callback function to be called when the modal is closed by the user */\r\n  onClose?: () => void;\r\n  /** Enable closing the modal, and shows de close button. Default: true */\r\n  canClose?: boolean;\r\n  /** Show a close icon button in the top-rigth corner of the bottom sheet modal. Default: true */\r\n  showCloseButton?: boolean;\r\n  /** Close icon button class. Default: 'text-gray-500 dark:text-gray-300' */\r\n  closeButtonClass?: string;\r\n}\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class NgxBottomSheetModalService {\r\n  constructor(@Inject(DOCUMENT) private document: Document) {}\r\n\r\n  layers = signal<NgxBottomSheetModalConfig[]>([]);\r\n  currentLayer = computed(() => this.getLast());\r\n\r\n  /**\r\n   * Opens the modal with the given parameters\r\n   * @param config NgxBottomSheetModalConfig\r\n   */\r\n  openBottomSheet(config: NgxBottomSheetModalConfig): void {\r\n    this.document.body.classList.add('overflow-hidden');\r\n    const next = {\r\n      ...configDefaults,\r\n      ...config,\r\n    };\r\n    // We use this instead of 'this.layers().push(next)' in order to 'effects' work\r\n    this.layers.update((value) => [...value, next]);\r\n  }\r\n\r\n  /**\r\n   * Closes the modal with the given parameters\r\n   */\r\n  closeBottomSheet(): void {\r\n    const last = this.getLast();\r\n    if (last) {\r\n      last.onClose?.();\r\n      // We use this instead of 'this.layers().pop()' in order to 'effects' work\r\n      this.layers.update((value) => value.slice(0, value.length - 1));\r\n      if (this.layers.length == 0) {\r\n        this.document.body.classList.remove('overflow-hidden');\r\n      }\r\n    }\r\n  }\r\n\r\n  private getLast() {\r\n    return this.layers().length > 0\r\n      ? this.layers()[this.layers().length - 1]\r\n      : undefined;\r\n  }\r\n}\r\n","import { Directive, HostListener, output } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[listenEscKey]',\r\n})\r\nexport class EscapeListenerDirective {\r\n  esc = output();\r\n\r\n  @HostListener('document:keyup', ['$event']) handleKeyEvent(\r\n    event: KeyboardEvent\r\n  ): void {\r\n    /**\r\n     * Alt+Esc, Shift+Esc or Ctrl+Esc should not be supported\r\n     */\r\n    if (\r\n      !event.altKey &&\r\n      !event.shiftKey &&\r\n      !event.ctrlKey &&\r\n      event.key === 'Escape'\r\n    ) {\r\n      this.esc.emit();\r\n    }\r\n  }\r\n}\r\n","export const SafeResizeObserver =\r\n  typeof ResizeObserver !== 'undefined'\r\n    ? ResizeObserver\r\n    : class implements ResizeObserver {\r\n        public observe(): void {}\r\n        public unobserve(): void {}\r\n        public disconnect(): void {}\r\n      };\r\n","import {\r\n  animate,\r\n  animateChild,\r\n  query,\r\n  style,\r\n  transition,\r\n  trigger,\r\n} from '@angular/animations';\r\nimport { NgComponentOutlet } from '@angular/common';\r\nimport {\r\n  Component,\r\n  ElementRef,\r\n  NgZone,\r\n  QueryList,\r\n  ViewChildren,\r\n  effect,\r\n  inject,\r\n} from '@angular/core';\r\nimport { EscapeListenerDirective } from './escape-listener.directive';\r\nimport { NgxBottomSheetModalService } from './ngx-bottom-sheet-modal.service';\r\nimport { SafeResizeObserver } from './safe-resize-observer';\r\n\r\n@Component({\r\n  selector: 'ngx-bottom-sheet-modal',\r\n  imports: [NgComponentOutlet, EscapeListenerDirective],\r\n  host: { class: 'fixed z-40' },\r\n  templateUrl: './ngx-bottom-sheet-modal.component.html',\r\n  styles: ``,\r\n  animations: [\r\n    trigger('fade', [\r\n      transition(':enter', [\r\n        style({ opacity: 0 }),\r\n        animate('300ms', style({ opacity: 1 })),\r\n      ]),\r\n      transition(':leave', [animate('300ms', style({ opacity: 0 }))]),\r\n    ]),\r\n    trigger('slideUp', [\r\n      transition(':enter', [\r\n        style({ transform: 'translate(0,500px)' }),\r\n        animate(\r\n          '350ms cubic-bezier(0.17, 0.89, 0.24, 1.11)',\r\n          style({ transform: 'translate(0,0)' })\r\n        ),\r\n      ]),\r\n      transition(':leave', [\r\n        animate(\r\n          '300ms ease-in-out',\r\n          style({ transform: 'translate(0,500px)' })\r\n        ),\r\n      ]),\r\n    ]),\r\n    trigger('container', [\r\n      transition(':enter, :leave', [\r\n        query('@*', animateChild(), { optional: true }),\r\n      ]),\r\n    ]),\r\n  ],\r\n})\r\nexport class NgxBottomSheetModalComponent {\r\n  // Services\r\n  protected readonly layersService = inject(NgxBottomSheetModalService);\r\n\r\n  @ViewChildren('bottomSheet') bottomSheets!: QueryList<ElementRef>;\r\n  observer!: ResizeObserver;\r\n  fullScreen: boolean = false;\r\n\r\n  // State\r\n  modals = this.layersService.layers.asReadonly();\r\n\r\n  constructor(private el: ElementRef, private zone: NgZone) {\r\n    // Listen to resize event to check if bottom sheet is full screen and set the fullScreen property. In mobile, fullScreen=true removes round borders of the botton sheet and set the close icon button position to fixed.\r\n    this.observer = new SafeResizeObserver((entries: any) => {\r\n      this.zone.run(() => {\r\n        if (\r\n          entries[0].contentRect.height >= this.el.nativeElement.scrollHeight\r\n        ) {\r\n          this.fullScreen = true;\r\n        } else {\r\n          this.fullScreen = false;\r\n        }\r\n      });\r\n    });\r\n\r\n    // Listen to current layer changes and, as soon as the element reference is available, set the ResizeObserver\r\n    effect(() => {\r\n      if (this.layersService.currentLayer()) {\r\n        let attempts = 0;\r\n        const intervalId = setInterval(() => {\r\n          if (this.bottomSheets) {\r\n            this.observer.observe(this.bottomSheets.last.nativeElement);\r\n          }\r\n          if (this.bottomSheets || attempts > 9) {\r\n            clearInterval(intervalId);\r\n          } else {\r\n            attempts++;\r\n          }\r\n        }, 100);\r\n      } else {\r\n        this.observer?.disconnect();\r\n      }\r\n    });\r\n\r\n    // Sets container required clasess for bottom sheet modal positioning\r\n    this.el.nativeElement.parentNode.classList.add('grid');\r\n    this.el.nativeElement.parentNode.classList.add('grid-cols-1');\r\n    this.el.nativeElement.parentNode.classList.add('grid-rows-1');\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.observer?.disconnect();\r\n  }\r\n\r\n  close(): void {\r\n    this.layersService.closeBottomSheet();\r\n  }\r\n}\r\n","@for (modal of modals(); track modal) { @if (modal.contentComponent) {\r\n<!-- container -->\r\n<div @container class=\"absolute w-svw grid h-dvh grid-cols-1 grid-rows-1\">\r\n  <!-- shade -->\r\n  <div\r\n    @fade\r\n    class=\"col-span-1 col-start-1 row-span-1 row-start-1 w-svw bg-black bg-opacity-60\"\r\n    listenEscKey\r\n    (esc)=\"modal.canClose && close()\"\r\n    (click)=\"modal.canClose && close()\"\r\n    aria-hidden=\"true\"\r\n  ></div>\r\n\r\n  <!-- bottom sheet -->\r\n  <div\r\n    @slideUp\r\n    class=\"col-span-1 col-start-1 row-span-1 row-start-1 self-end md:absolute md:bottom-0 md:left-0 md:right-0 md:top-0 md:m-auto md:rounded-xl relative max-h-screen overflow-hidden md:w-min\"\r\n    [class.rounded-t-none]=\"fullScreen\"\r\n    [class.rounded-t-xl]=\"!fullScreen\"\r\n    #bottomSheet\r\n  >\r\n    <ng-container\r\n      *ngComponentOutlet=\"modal.contentComponent ?? null; inputs: modal.inputs\"\r\n    />\r\n    @if (modal.showCloseButton && modal.canClose) {\r\n    <button\r\n      class=\"top-2 right-2\"\r\n      [class.fixed]=\"fullScreen\"\r\n      [class.absolute]=\"!fullScreen\"\r\n      [class]=\"modal.closeButtonClass ?? 'text-gray-500 dark:text-gray-300'\"\r\n      (click)=\"close()\"\r\n    >\r\n      <svg\r\n        data-testid=\"close\"\r\n        xmlns=\"http://www.w3.org/2000/svg\"\r\n        width=\"24\"\r\n        height=\"24\"\r\n        fill=\"none\"\r\n        viewBox=\"0 0 24 24\"\r\n      >\r\n        <path\r\n          fill=\"currentColor\"\r\n          d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm4.3 14.3a.996.996 0 01-1.41 0L12 13.41 9.11 16.3a.996.996 0 11-1.41-1.41L10.59 12 7.7 9.11A.996.996 0 119.11 7.7L12 10.59l2.89-2.89a.996.996 0 111.41 1.41L13.41 12l2.89 2.89c.38.38.38 1.02 0 1.41z\"\r\n        ></path>\r\n      </svg>\r\n    </button>\r\n    }\r\n  </div>\r\n</div>\r\n}}\r\n","/*\r\n * Public API Surface of ngx-bottom-sheet-modal\r\n */\r\n\r\nexport * from './lib/ngx-bottom-sheet-modal.service';\r\nexport * from './lib/ngx-bottom-sheet-modal.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}