{"version":3,"file":"ngx-sheet-modal.mjs","sources":["../../../projects/ngx-sheet-modal/src/helpers/constants.ts","../../../projects/ngx-sheet-modal/src/helpers/helper.ts","../../../projects/ngx-sheet-modal/src/lib/ngx-sheet-modal.component.ts","../../../projects/ngx-sheet-modal/src/lib/ngx-sheet-modal.component.html","../../../projects/ngx-sheet-modal/src/lib/ngx-sheet-modal.service.ts","../../../projects/ngx-sheet-modal/src/public-api.ts","../../../projects/ngx-sheet-modal/src/ngx-sheet-modal.ts"],"sourcesContent":["\r\n// APP-ROOT CONSTANTS\r\nexport const ROOT_TRANSITION = 'background 200ms, border-radius 400ms cubic-bezier(0.32, 0.72, 0, 1), transform 600ms cubic-bezier(0.32, 0.72, 0, 1)';\r\nexport const ROOT_DISPLAY = 'block';\r\nexport const ROOT_OVERFLOW = 'hidden';\r\nexport const ROOT_HEIGHT = '100%';\r\nexport const ROOT_WIDTH = '100%';\r\nexport const ROOT_TRANSFORM_Y_VALUE = 0.996;\r\nexport const ROOT_BACKGROUND_COLOR = '#FFFFFF';\r\nexport const ROOT_BORDER_RADIUS = '10px 10px 0 0';\r\nexport const ROOT_ANIMATION_DURATION = '600ms';\r\nexport const ROOT_ANIMATION_TIMING_FUNCTION = 'cubic-bezier(0.32, 0.72, 0, 1)';\r\n\r\n// OTHER VALUES\r\nexport const BODY_BACKGROUND_COLOR = '#FFFFFF'\r\nexport const APP_ROOT_SELECTOR = 'app-root'\r\nexport const WINDOW_TOP_OFFSET = 26;\r\nexport const VELOCITY_THRESHOLD = 0.5;\r\nexport const BACKDROP_INTENSITY_REDUCER = 0.30;\r\nexport const MOBILE_BREAKPOINT = 768;\r\nexport const OVERSHOOT_RESISTENCE_MULTIPLIER = 0.05;\r\nexport const MODAL_CONTENT_OFFSET = 45;","import { SheetConfig } from \"../lib/ngx-sheet-modal-config\";\r\nimport { APP_ROOT_SELECTOR, BODY_BACKGROUND_COLOR, MOBILE_BREAKPOINT, ROOT_ANIMATION_DURATION, ROOT_ANIMATION_TIMING_FUNCTION, ROOT_BACKGROUND_COLOR, ROOT_BORDER_RADIUS, ROOT_DISPLAY, ROOT_HEIGHT, ROOT_OVERFLOW, ROOT_TRANSFORM_Y_VALUE, ROOT_TRANSITION, ROOT_WIDTH, WINDOW_TOP_OFFSET } from \"./constants\";\r\n\r\nexport function getScaleValue(): number {\r\n    return (window.innerWidth - WINDOW_TOP_OFFSET) / window.innerWidth || 0.94;\r\n}\r\nexport function scaleBackground(config: SheetConfig) {\r\n    const root = document.querySelector(APP_ROOT_SELECTOR) as HTMLElement;\r\n    document.body.style.background = config.backgroundScale?.bodyBackgroundColor || BODY_BACKGROUND_COLOR;;\r\n    if(root) {\r\n      root.style.transition = ROOT_TRANSITION;\r\n      root.style.display = ROOT_DISPLAY;\r\n      root.style.overflow = ROOT_OVERFLOW;\r\n      root.style.height = ROOT_HEIGHT;\r\n      root.style.width = ROOT_WIDTH;\r\n      root.style.transform = `scale(${getScaleValue()}, ${ROOT_TRANSFORM_Y_VALUE})`;\r\n      root.style.background = config.backgroundScale?.rootBackgroundColor || ROOT_BACKGROUND_COLOR;\r\n      root.style.borderRadius = ROOT_BORDER_RADIUS;\r\n      root.style.animationDuration = ROOT_ANIMATION_DURATION;\r\n      root.style.animationTimingFunction = ROOT_ANIMATION_TIMING_FUNCTION;\r\n    }\r\n  }\r\n\r\n export function unScaleBackground() {\r\n    const root = document.querySelector(APP_ROOT_SELECTOR) as HTMLElement;\r\n    if(root) {\r\n      root.style.transform = 'scale(1, 1)';\r\n      root.style.borderRadius = '0 0 0 0';\r\n      root.style.background = ROOT_BACKGROUND_COLOR;\r\n      root.style.overflow = 'auto';\r\n      setTimeout(() => {\r\n        root.style.display = '';\r\n        root.style.height = '';\r\n        root.style.width = '';\r\n        document.body.style.background = '';\r\n      }, 300);\r\n    }\r\n  }\r\n\r\n  export function existAnInstance() {\r\n    if (document.body.querySelectorAll('ngx-sheet-modal').length > 1) {\r\n      return true;\r\n    } \r\n    else {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  export function isMobileDevice(): boolean {\r\n    // @ts-ignore\r\n    const userAgent = navigator.userAgent || navigator.vendor || window?.opera;\r\n\r\n    // Detects iOS, Android, or Windows Phone\r\n    const isMobile = /android|iphone|ipad|ipod|iemobile|windows phone|opera mini/i.test(userAgent);\r\n\r\n    // Also verifies the screen width to enhance the presition\r\n    const isSmallScreen = window.innerWidth <= MOBILE_BREAKPOINT;\r\n\r\n    return isMobile || isSmallScreen;\r\n  }","import { BACKDROP_INTENSITY_REDUCER, MODAL_CONTENT_OFFSET, OVERSHOOT_RESISTENCE_MULTIPLIER, VELOCITY_THRESHOLD } from './../helpers/constants';\r\nimport { AfterViewInit, Component, ComponentFactoryResolver, ElementRef, EventEmitter, Input, OnDestroy, Output, Type, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { SheetConfig } from './ngx-sheet-modal-config';\r\nimport { existAnInstance, isMobileDevice, scaleBackground, unScaleBackground } from '../helpers/helper';\r\nimport { NgIf } from '@angular/common';\r\n\r\nenum Sizes {\r\n  xs = 75,\r\n  sm = 60,\r\n  md = 40,\r\n  lg = 20,\r\n  xl = 5\r\n}\r\n\r\n@Component({\r\n  selector: 'ngx-sheet-modal',\r\n  standalone: true,\r\n  imports: [NgIf],\r\n  templateUrl: './ngx-sheet-modal.component.html',\r\n  styleUrl: './ngx-sheet-modal.component.css'\r\n})\r\nexport class NgxSheetModalComponent implements AfterViewInit, OnDestroy {\r\n\r\n  @ViewChild('contentHost', { read: ViewContainerRef }) public contentHost!: ViewContainerRef;\r\n  @ViewChild('backdrop') private backdrop!: ElementRef;\r\n  @ViewChild('sheet') private sheet!: ElementRef;\r\n  @ViewChild('sheetContent') private sheetContent!: ElementRef;\r\n  @Input() component!: Type<any>;\r\n  @Output() childInstanceReady = new EventEmitter<any>();\r\n\r\n  public componentInstance!: any;\r\n\r\n  private defaultConfig: SheetConfig = {\r\n    size: 'sm',\r\n    sheetSize: 'lg',\r\n    placement: 'center',\r\n    maxSheetHeight: 'xl',\r\n    backdropClose: true,\r\n    backdropIntensity: 0.7,\r\n    resizable: true,\r\n    dragIndicator: true,\r\n    backgroundScale: {\r\n      enabled: false,\r\n      rootBackgroundColor: 'white',\r\n      bodyBackgroundColor: 'black'\r\n    },\r\n    closeButton: true,\r\n    lockBodyScroll: true,\r\n    styles: {\r\n      allowAnimations: true,\r\n      backdropClasses: '',\r\n      sheetClasses: '',\r\n      closeButtonClasses: ''\r\n    },\r\n    closeOnflickDown: {\r\n      enabled: true,\r\n      flickThreshold: VELOCITY_THRESHOLD\r\n    }\r\n  }\r\n  protected _config!: SheetConfig;\r\n  public initialY = 0;\r\n  private currentY = 0;\r\n  private isDragging = false;\r\n  private startingTranslateY = 0;\r\n  public initialTime: number = 0;\r\n  private backdropIntensity: number = 0.8;\r\n\r\n  // @ts-ignore\r\n  private upperLimit!: number;\r\n\r\n  @Input() set config(value: SheetConfig | null) {\r\n    this._config = { ...this.defaultConfig, ...value };\r\n    // @ts-ignore\r\n    this.backdropIntensity = this._config.backdropIntensity;\r\n    // @ts-ignore\r\n    this.upperLimit = Sizes[this._config.maxSheetHeight]\r\n  }\r\n\r\n  constructor(private elementRef: ElementRef, private componentFactoryResolver: ComponentFactoryResolver) { }\r\n\r\n  ngAfterViewInit() {\r\n    if (this.component) this.loadContent(this.component);\r\n    this.loadSheet();\r\n    this.sheet.nativeElement.addEventListener('mousedown', this.startDrag.bind(this));\r\n    this.sheet.nativeElement.addEventListener('touchstart', this.startDrag.bind(this), { passive: true });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.removeEventListeners();\r\n  }\r\n\r\n  close() {\r\n    if (isMobileDevice()) {\r\n      this.backdrop.nativeElement.style.opacity = '0';\r\n      this.sheet.nativeElement.style.transform = 'translate3d(0, 110%, 0)'\r\n      setTimeout(() => {\r\n        if (!existAnInstance()) {\r\n          if (this._config?.lockBodyScroll) document.body.style.overflow = 'auto';\r\n          unScaleBackground();\r\n        }\r\n        try {\r\n          document.body.removeChild(this.elementRef.nativeElement);\r\n        } catch (error: any) {\r\n          console.warn(error.message)\r\n        }\r\n      }, 400);\r\n    } else {\r\n      this.backdrop.nativeElement.style.opacity = '0';\r\n      this.sheet.nativeElement.classList.remove('show');\r\n      setTimeout(() => {\r\n        if (!existAnInstance()) {\r\n          if (this._config?.lockBodyScroll) document.body.style.overflow = 'auto';\r\n        }\r\n        try {\r\n          document.body.removeChild(this.elementRef.nativeElement);\r\n        } catch (error: any) {\r\n          console.warn(error.message)\r\n        }\r\n      }, 200);\r\n    }\r\n  }\r\n\r\n  private loadContent(component: any) {\r\n    const factory = this.componentFactoryResolver.resolveComponentFactory(component);\r\n    this.contentHost.clear();\r\n    this.componentInstance = this.contentHost.createComponent(factory);\r\n    this.childInstanceReady.emit(this.componentInstance.instance)\r\n  }\r\n\r\n  private loadSheet() {\r\n    if (isMobileDevice()) {\r\n      setTimeout(() => {\r\n        if (!existAnInstance()) {\r\n          if (this._config?.lockBodyScroll) document.body.style.overflow = 'hidden';\r\n          if (this._config.backgroundScale?.enabled) scaleBackground(this._config);\r\n        }\r\n        this.adjustBackdrop(true);\r\n        // @ts-ignore\r\n        this.sheet.nativeElement.style.transform = `translate3d(0, ${Sizes[this._config.sheetSize]}%, 0)`;\r\n        // @ts-ignore\r\n        this.startingTranslateY = Sizes[this._config.sheetSize];\r\n        // @ts-ignore\r\n        this.currentY = Sizes[this._config.sheetSize];\r\n        this.calculateContentHeight();\r\n      }, 10);\r\n    } else {\r\n      setTimeout(() => {\r\n        if (!existAnInstance()) {\r\n          if (this._config?.lockBodyScroll) document.body.style.overflow = 'hidden';\r\n        }\r\n        // @ts-ignore\r\n        this.backdrop.nativeElement.style.opacity = this._config.backdropIntensity - (this._config.backdropIntensity * BACKDROP_INTENSITY_REDUCER);\r\n        this.sheet.nativeElement.classList.add('show');\r\n        this.sheet.nativeElement.classList.add(this._config.placement);\r\n      }, 10);\r\n    }\r\n  }\r\n\r\n  public startDrag(event: MouseEvent | TouchEvent) {\r\n\r\n    if (!this._config?.resizable || !isMobileDevice()) return;\r\n\r\n    this.sheet.nativeElement.classList.remove('sm-sheet-transition');\r\n    this.backdrop.nativeElement.style.transitionDuration = '0ms';\r\n    this.isDragging = true;\r\n    this.initialY = this.getEventY(event);\r\n    this.initialTime = Date.now();\r\n\r\n    window.addEventListener('mousemove', this.drag.bind(this));\r\n    window.addEventListener('mouseup', this.endDrag.bind(this));\r\n    window.addEventListener('touchmove', this.drag.bind(this), { passive: false });\r\n    window.addEventListener('touchend', this.endDrag.bind(this));\r\n  }\r\n\r\n  private drag(event: MouseEvent | TouchEvent) {\r\n    if (!this.isDragging) return;\r\n\r\n    const currentY = this.getEventY(event);\r\n    const deltaY = currentY - this.initialY;\r\n\r\n    const sheetContent = this.sheetContent.nativeElement;\r\n    const isAtTop = sheetContent.scrollTop === 0;\r\n    const isAtBottom = sheetContent.scrollTop === (sheetContent.scrollHeight - sheetContent.clientHeight);\r\n\r\n    // @ts-ignore\r\n    if (!event?.target?.classList?.contains('sm-sheet-drag-container')) {\r\n      if (isAtTop && deltaY > 0) {\r\n        event.preventDefault();\r\n      } else if (isAtBottom && deltaY < 0) {\r\n        event.preventDefault();\r\n      } else {\r\n        this.isDragging = false;\r\n        this.removeEventListeners();\r\n        return;\r\n      }\r\n    }\r\n\r\n    this.currentY = this.startingTranslateY + (deltaY / window.innerHeight) * 100;\r\n\r\n    if (this.currentY < this.upperLimit) {\r\n      const overshoot = this.upperLimit - this.currentY;\r\n      this.currentY = this.upperLimit - overshoot * OVERSHOOT_RESISTENCE_MULTIPLIER;\r\n    }\r\n\r\n    this.sheet.nativeElement.style.transform = `translate3d(0, ${this.currentY}%, 0)`;\r\n    this.calculateContentHeight();\r\n    this.adjustBackdrop();\r\n  }\r\n\r\n  public endDrag(event: MouseEvent | TouchEvent) {\r\n    if (!this.isDragging) return;\r\n\r\n    this.isDragging = false;\r\n    this.sheet.nativeElement.classList.add('sm-sheet-transition');\r\n    this.backdrop.nativeElement.style.transitionDuration = '600ms';\r\n    this.removeEventListeners();\r\n\r\n    const endTime = Date.now();\r\n    const timeElapsed = endTime - this.initialTime;\r\n    const currentY = this.getEventY(event);\r\n    const distanceY = currentY - this.initialY;\r\n\r\n    // Calculate the velocity\r\n    const velocity = distanceY / timeElapsed;\r\n\r\n    // Flick detection\r\n    // @ts-ignore\r\n    if (velocity > this._config.closeOnflickDown?.flickThreshold && this._config.closeOnflickDown?.enabled) {\r\n      this.close();\r\n      return;\r\n    }\r\n\r\n    // Overshoot prevent\r\n    if (this.currentY < this.upperLimit) {\r\n      this.currentY = this.upperLimit;\r\n      this.sheet.nativeElement.style.transform = `translate3d(0, ${this.currentY}%, 0)`;\r\n      this._config.sheetSize = this._config.maxSheetHeight;\r\n      this.startingTranslateY = this.upperLimit;\r\n      return;\r\n    }\r\n    this.snapToNearestPoint();\r\n    this.calculateContentHeight();\r\n    this.adjustBackdrop();\r\n  }\r\n\r\n  private snapToNearestPoint() {\r\n    const snapPoints = [Sizes['xl'], Sizes['lg'], Sizes['md'], Sizes['sm'], Sizes['xs']];\r\n    let closestSnapPoint = snapPoints[0];\r\n\r\n    for (let i = 1; i < snapPoints.length; i++) {\r\n      if (Math.abs(this.currentY - snapPoints[i]) < Math.abs(this.currentY - closestSnapPoint)) {\r\n        closestSnapPoint = snapPoints[i];\r\n      }\r\n    }\r\n\r\n    // Applies the snap to the nearest point\r\n    this.currentY = closestSnapPoint;\r\n    this.sheet.nativeElement.style.transform = `translate3d(0, ${this.currentY}%, 0)`;\r\n\r\n    const sizeKey = Object.keys(Sizes).find(key => Sizes[key as keyof typeof Sizes] === closestSnapPoint);\r\n    if (sizeKey) {\r\n      this._config.sheetSize = sizeKey as keyof typeof Sizes;\r\n      this.startingTranslateY = closestSnapPoint;\r\n    }\r\n  }\r\n\r\n  private calculateContentHeight() {\r\n    const translatePercentage = this.currentY / 100;\r\n    const backdropHeight = this.backdrop.nativeElement.clientHeight;\r\n    const sheetSize = backdropHeight - (backdropHeight * translatePercentage);\r\n    const offset = MODAL_CONTENT_OFFSET;\r\n\r\n    this.sheetContent.nativeElement.style.height = `${sheetSize - offset}px`;\r\n\r\n  }\r\n\r\n  private getEventY(event: MouseEvent | TouchEvent): number {\r\n    if (event instanceof MouseEvent) {\r\n      return event.clientY;\r\n    } else if (event instanceof TouchEvent) {\r\n      return event.touches[0]?.clientY ?? event.changedTouches[0].clientY;\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  private adjustBackdrop(loadSheet: boolean = false) {\r\n    if (loadSheet) {\r\n      if (this._config.backdropIntensity) {\r\n        this.backdropIntensity = this._config.backdropIntensity - Math.abs((Sizes[this._config.sheetSize || 'md'] * this._config.backdropIntensity) / 100);\r\n        this.backdrop.nativeElement.style.opacity = this.backdropIntensity;\r\n      }\r\n    } else {\r\n      if (this._config.backdropIntensity) {\r\n        this.backdropIntensity = this._config.backdropIntensity - Math.abs((this.currentY * this._config.backdropIntensity) / 100);\r\n        this.backdrop.nativeElement.style.opacity = this.backdropIntensity;\r\n      }\r\n    }\r\n  }\r\n  // Removes the event listeners of the window object\r\n  private removeEventListeners() {\r\n    window.removeEventListener('mousemove', this.drag.bind(this));\r\n    window.removeEventListener('mouseup', this.endDrag.bind(this));\r\n    window.removeEventListener('touchmove', this.drag.bind(this));\r\n    window.removeEventListener('touchend', this.endDrag.bind(this));\r\n  }\r\n}\r\n","<div class=\"sm-sheet-wrapper\">\r\n    <div [class]=\"_config?.styles?.backdropClasses\" [class.allow-animations]=\"_config?.styles?.allowAnimations\" class=\"sm-sheet-backdrop backdrop-blur-lg\" #backdrop\r\n        (click)=\"_config?.backdropClose ? close() : ''\"></div>\r\n    <div class=\"sm-sheet sm-sheet-transition\" [class.allow-animations]=\"_config?.styles?.allowAnimations\" [class]=\"_config?.styles?.sheetClasses + ' ' + _config?.size\" #sheet>\r\n        <div class=\"sm-sheet-drag-container\">\r\n            <div class=\"sm-sheet-drag-placeholder\"></div>\r\n            <div *ngIf=\"_config?.dragIndicator == true\" class=\"sm-sheet-drag-indicator\"></div>\r\n            <div *ngIf=\"!_config?.dragIndicator\" class=\"sm-sheet-drag-placeholder\"></div>\r\n            \r\n            <div *ngIf=\"_config?.closeButton == true\" class=\"sm-sheet-close-button\" [class]=\"_config?.styles?.closeButtonClasses\" (click)=\"close()\">\r\n                <svg *ngIf=\"!_config?.closeButtonIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"#00000050\">\r\n                    <path\r\n                        d=\"M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z\">\r\n                    </path>\r\n                </svg>\r\n                <div *ngIf=\"_config?.closeButtonIcon\" class=\"sm-sheet-close-icon\" [innerHTML]=\"_config?.closeButtonIcon\"></div>\r\n            </div>\r\n            \r\n            <div *ngIf=\"!_config?.closeButton\" class=\"sm-sheet-drag-placeholder\"></div>\r\n\r\n        </div>\r\n        <div class=\"sm-sheet-content\" #sheetContent>\r\n            <ng-template #contentHost></ng-template>\r\n        </div>\r\n    </div>\r\n</div>","import { ApplicationRef, ComponentFactoryResolver, EmbeddedViewRef, Injectable, Injector, Type } from '@angular/core';\r\nimport { NgxSheetModalComponent } from './ngx-sheet-modal.component';\r\nimport { SheetConfig } from './ngx-sheet-modal-config';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NgxSheetModalService {\r\n\r\n  constructor(\r\n    private injector: Injector,\r\n    private applicationRef: ApplicationRef,\r\n    private componentFactoryResolver: ComponentFactoryResolver\r\n  ) {}\r\n\r\n  openSheet(content: Type<any>, config?: SheetConfig) {\r\n    const componentFactory = this.componentFactoryResolver.resolveComponentFactory(NgxSheetModalComponent);\r\n    const componentRef = componentFactory.create(this.injector);\r\n\r\n    // Adjust component on the Angular's tree view\r\n    this.applicationRef.attachView(componentRef.hostView);\r\n\r\n    // Insert component in the DOM\r\n    document.body.appendChild((componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement);\r\n\r\n    // Load the dynamic content\r\n    componentRef.instance.component = content;\r\n    if(config) componentRef.instance.config = config;\r\n\r\n    \r\n\r\n    return componentRef.instance;\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of ngx-sheet-modal\r\n */\r\n\r\nexport * from './lib/ngx-sheet-modal.service';\r\nexport * from './lib/ngx-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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"}