@filip.mazev/modal 0.1.24 → 0.1.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { NgClass, NgTemplateOutlet } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { inject, Injectable, InjectionToken, Injector, input, output, Component, ViewChild, ViewChildren, effect, signal, ViewContainerRef, TemplateRef, Directive } from '@angular/core';
3
+ import { inject, Injectable, InjectionToken, Injector, input, output, Component, ViewChild, computed, ViewChildren, signal, effect, ViewContainerRef, TemplateRef, Directive } from '@angular/core';
4
4
  import { BehaviorSubject, Subject, takeUntil, filter, skip, map, take, fromEvent } from 'rxjs';
5
5
  import { Router, NavigationEnd } from '@angular/router';
6
6
  import { uuidv4, WindowDimensionsService, ScrollLockService, DeviceTypeService } from '@filip.mazev/blocks-core';
@@ -284,19 +284,14 @@ class GenericModalService {
284
284
  modalsSubject = new BehaviorSubject(this.modals);
285
285
  viewContainer;
286
286
  renderer;
287
- unsubscribe$ = new Subject();
288
287
  //#endregion
289
288
  constructor() {
290
289
  this.createSubscriptions();
291
290
  }
292
- ngOnDestroy() {
293
- this.unsubscribe$.next();
294
- this.unsubscribe$.complete();
295
- }
296
291
  //#region Private Methods
297
292
  createSubscriptions() {
298
293
  this.router.events
299
- .pipe(filter((event) => event instanceof NavigationEnd), skip(1), takeUntil(this.unsubscribe$))
294
+ .pipe(filter((event) => event instanceof NavigationEnd), skip(1), takeUntilDestroyed())
300
295
  .subscribe(() => {
301
296
  if (this.modalsCount() > 0) {
302
297
  this.closeAll(true);
@@ -598,16 +593,16 @@ class ModalCentered {
598
593
  close = output();
599
594
  onBackdropClick = output();
600
595
  swipeableComponents;
601
- get modalClasses() {
596
+ modalClasses = computed(() => {
602
597
  return {
603
598
  'centered-modal-content-wrapper': true,
604
599
  'centered-modal-default-style': this.hasDefaultContentWrapperClass() || this.hasBanner(),
605
600
  'centered-modal-animate-in': this.isAnimated() && this.isOpen(),
606
601
  'centered-modal-animate-out': this.isAnimated() && !this.isOpen(),
607
602
  };
608
- }
603
+ }, ...(ngDevMode ? [{ debugName: "modalClasses" }] : []));
609
604
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ModalCentered, deps: [], target: i0.ɵɵFactoryTarget.Component });
610
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ModalCentered, isStandalone: true, selector: "modal-centered", inputs: { headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: true, transformFunction: null }, footerTemplate: { classPropertyName: "footerTemplate", publicName: "footerTemplate", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: true, transformFunction: null }, isAnimated: { classPropertyName: "isAnimated", publicName: "isAnimated", isSignal: true, isRequired: true, transformFunction: null }, isSwipeableModalActive: { classPropertyName: "isSwipeableModalActive", publicName: "isSwipeableModalActive", isSignal: true, isRequired: true, transformFunction: null }, animationDuration: { classPropertyName: "animationDuration", publicName: "animationDuration", isSignal: true, isRequired: true, transformFunction: null }, hasDefaultContentWrapperClass: { classPropertyName: "hasDefaultContentWrapperClass", publicName: "hasDefaultContentWrapperClass", isSignal: true, isRequired: true, transformFunction: null }, hasBanner: { classPropertyName: "hasBanner", publicName: "hasBanner", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { close: "close", onBackdropClick: "onBackdropClick" }, viewQueries: [{ propertyName: "swipeableComponents", predicate: ModalSwipeable, descendants: true }], ngImport: i0, template: "@if(!isSwipeableModalActive()) {\n<div class=\"modal-overlay\" [ngClass]=\"{'modal-backdrop': config()?.style?.hasBackdrop}\" (click)=\"\n config()?.style?.hasBackdrop ? onBackdropClick.emit($event) : null\">\n <div class=\"modal-overlay-wrapper\">\n <div [ngClass]=\"modalClasses\" (click)=\"$event.stopPropagation()\">\n <div class=\"centered-modal-inner-content-container\"\n [class]=\"config()?.style?.wrapperClasses ?? ''\"\n [style]=\"config()?.style?.wrapperStyles ?? ''\">\n \n <div class=\"centered-modal-top-group\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"centered-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"centered-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n\n @if (footerTemplate()) {\n <div class=\"centered-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>", styles: [".modal-overlay-wrapper{display:flex;position:absolute;z-index:3;justify-content:center;align-items:center;width:100%;height:100%}.modal-overlay{position:absolute;inset:0;z-index:2}.modal-backdrop{position:absolute;inset:0;z-index:3;pointer-events:auto;-webkit-tap-highlight-color:transparent;background:#00000040;backface-visibility:hidden;-webkit-font-smoothing:subpixel-antialiased;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;transform-origin:center}.centered-modal-content-wrapper{display:flex;flex-direction:column;max-width:90vw;max-width:90dvw;max-height:95vh;max-height:95dvh;overflow:hidden}.centered-modal-default-style{border-radius:.75rem;box-shadow:0 8px 20px #0000001f;color:var(--modal-text, #000000);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid transparent;background-color:var(--modal-bg, #ffffff)}.centered-modal-default-content-container{padding:1rem 1.5rem;max-height:85vh;max-height:85dvh;overflow-y:auto}.centered-modal-inner-content-container{display:flex;flex-direction:column;height:100%;padding:1rem 1.5rem;gap:1.5rem;box-sizing:border-box}.centered-modal-top-group{display:flex;flex-direction:column;gap:1rem;flex-grow:1;min-height:0}.centered-modal-main-content-container{flex-grow:1;overflow-y:auto;min-height:0}.centered-modal-header{flex-shrink:0;width:100%;display:flex;justify-content:space-between;gap:.5rem}.centered-modal-footer{flex-shrink:0;width:100%;display:flex;justify-content:center;gap:.5rem}.centered-modal-animate-in{scale:0;animation:centered-modal-animate-in .15s ease-in-out forwards}.centered-modal-animate-out{animation:centered-modal-animate-out .15s ease-in-out forwards}@keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@-webkit-keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@-moz-keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}@-webkit-keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}@-moz-keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ModalSwipeable, selector: "modal-swipeable", inputs: ["headerTemplate", "footerTemplate", "config", "isOpen", "isAnimated", "animationDuration"], outputs: ["close"] }, { kind: "component", type: ModalBanner, selector: "modal-banner", inputs: ["config"], outputs: ["close"] }, { kind: "component", type: ModalDefaultCloseButton, selector: "modal-default-close-button", inputs: ["config"], outputs: ["close"] }] });
605
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ModalCentered, isStandalone: true, selector: "modal-centered", inputs: { headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: true, transformFunction: null }, footerTemplate: { classPropertyName: "footerTemplate", publicName: "footerTemplate", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: true, transformFunction: null }, isAnimated: { classPropertyName: "isAnimated", publicName: "isAnimated", isSignal: true, isRequired: true, transformFunction: null }, isSwipeableModalActive: { classPropertyName: "isSwipeableModalActive", publicName: "isSwipeableModalActive", isSignal: true, isRequired: true, transformFunction: null }, animationDuration: { classPropertyName: "animationDuration", publicName: "animationDuration", isSignal: true, isRequired: true, transformFunction: null }, hasDefaultContentWrapperClass: { classPropertyName: "hasDefaultContentWrapperClass", publicName: "hasDefaultContentWrapperClass", isSignal: true, isRequired: true, transformFunction: null }, hasBanner: { classPropertyName: "hasBanner", publicName: "hasBanner", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { close: "close", onBackdropClick: "onBackdropClick" }, viewQueries: [{ propertyName: "swipeableComponents", predicate: ModalSwipeable, descendants: true }], ngImport: i0, template: "@if(!isSwipeableModalActive()) {\n<div class=\"modal-overlay\" [ngClass]=\"{'modal-backdrop': config()?.style?.hasBackdrop}\" (click)=\"\n config()?.style?.hasBackdrop ? onBackdropClick.emit($event) : null\">\n <div class=\"modal-overlay-wrapper\">\n <div [ngClass]=\"modalClasses()\" (click)=\"$event.stopPropagation()\">\n <div class=\"centered-modal-inner-content-container\"\n [class]=\"config()?.style?.wrapperClasses ?? ''\"\n [style]=\"config()?.style?.wrapperStyles ?? ''\">\n \n <div class=\"centered-modal-top-group\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"centered-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"centered-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n\n @if (footerTemplate()) {\n <div class=\"centered-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>", styles: [".modal-overlay-wrapper{display:flex;position:absolute;z-index:3;justify-content:center;align-items:center;width:100%;height:100%}.modal-overlay{position:absolute;inset:0;z-index:2}.modal-backdrop{position:absolute;inset:0;z-index:3;pointer-events:auto;-webkit-tap-highlight-color:transparent;background:#00000040;backface-visibility:hidden;-webkit-font-smoothing:subpixel-antialiased;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;transform-origin:center}.centered-modal-content-wrapper{display:flex;flex-direction:column;max-width:90vw;max-width:90dvw;max-height:95vh;max-height:95dvh;overflow:hidden}.centered-modal-default-style{border-radius:.75rem;box-shadow:0 8px 20px #0000001f;color:var(--modal-text, #000000);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid transparent;background-color:var(--modal-bg, #ffffff)}.centered-modal-default-content-container{padding:1rem 1.5rem;max-height:85vh;max-height:85dvh;overflow-y:auto}.centered-modal-inner-content-container{display:flex;flex-direction:column;height:100%;padding:1rem 1.5rem;gap:1.5rem;box-sizing:border-box}.centered-modal-top-group{display:flex;flex-direction:column;gap:1rem;flex-grow:1;min-height:0}.centered-modal-main-content-container{flex-grow:1;overflow-y:auto;min-height:0}.centered-modal-header{flex-shrink:0;width:100%;display:flex;justify-content:space-between;gap:.5rem}.centered-modal-footer{flex-shrink:0;width:100%;display:flex;justify-content:center;gap:.5rem}.centered-modal-animate-in{scale:0;animation:centered-modal-animate-in .15s ease-in-out forwards}.centered-modal-animate-out{animation:centered-modal-animate-out .15s ease-in-out forwards}@keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@-webkit-keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@-moz-keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}@-webkit-keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}@-moz-keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ModalSwipeable, selector: "modal-swipeable", inputs: ["headerTemplate", "footerTemplate", "config", "isOpen", "isAnimated", "animationDuration"], outputs: ["close"] }, { kind: "component", type: ModalBanner, selector: "modal-banner", inputs: ["config"], outputs: ["close"] }, { kind: "component", type: ModalDefaultCloseButton, selector: "modal-default-close-button", inputs: ["config"], outputs: ["close"] }] });
611
606
  }
612
607
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ModalCentered, decorators: [{
613
608
  type: Component,
@@ -617,23 +612,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
617
612
  ModalSwipeable,
618
613
  ModalBanner,
619
614
  ModalDefaultCloseButton
620
- ], template: "@if(!isSwipeableModalActive()) {\n<div class=\"modal-overlay\" [ngClass]=\"{'modal-backdrop': config()?.style?.hasBackdrop}\" (click)=\"\n config()?.style?.hasBackdrop ? onBackdropClick.emit($event) : null\">\n <div class=\"modal-overlay-wrapper\">\n <div [ngClass]=\"modalClasses\" (click)=\"$event.stopPropagation()\">\n <div class=\"centered-modal-inner-content-container\"\n [class]=\"config()?.style?.wrapperClasses ?? ''\"\n [style]=\"config()?.style?.wrapperStyles ?? ''\">\n \n <div class=\"centered-modal-top-group\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"centered-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"centered-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n\n @if (footerTemplate()) {\n <div class=\"centered-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>", styles: [".modal-overlay-wrapper{display:flex;position:absolute;z-index:3;justify-content:center;align-items:center;width:100%;height:100%}.modal-overlay{position:absolute;inset:0;z-index:2}.modal-backdrop{position:absolute;inset:0;z-index:3;pointer-events:auto;-webkit-tap-highlight-color:transparent;background:#00000040;backface-visibility:hidden;-webkit-font-smoothing:subpixel-antialiased;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;transform-origin:center}.centered-modal-content-wrapper{display:flex;flex-direction:column;max-width:90vw;max-width:90dvw;max-height:95vh;max-height:95dvh;overflow:hidden}.centered-modal-default-style{border-radius:.75rem;box-shadow:0 8px 20px #0000001f;color:var(--modal-text, #000000);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid transparent;background-color:var(--modal-bg, #ffffff)}.centered-modal-default-content-container{padding:1rem 1.5rem;max-height:85vh;max-height:85dvh;overflow-y:auto}.centered-modal-inner-content-container{display:flex;flex-direction:column;height:100%;padding:1rem 1.5rem;gap:1.5rem;box-sizing:border-box}.centered-modal-top-group{display:flex;flex-direction:column;gap:1rem;flex-grow:1;min-height:0}.centered-modal-main-content-container{flex-grow:1;overflow-y:auto;min-height:0}.centered-modal-header{flex-shrink:0;width:100%;display:flex;justify-content:space-between;gap:.5rem}.centered-modal-footer{flex-shrink:0;width:100%;display:flex;justify-content:center;gap:.5rem}.centered-modal-animate-in{scale:0;animation:centered-modal-animate-in .15s ease-in-out forwards}.centered-modal-animate-out{animation:centered-modal-animate-out .15s ease-in-out forwards}@keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@-webkit-keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@-moz-keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}@-webkit-keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}@-moz-keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}\n"] }]
615
+ ], template: "@if(!isSwipeableModalActive()) {\n<div class=\"modal-overlay\" [ngClass]=\"{'modal-backdrop': config()?.style?.hasBackdrop}\" (click)=\"\n config()?.style?.hasBackdrop ? onBackdropClick.emit($event) : null\">\n <div class=\"modal-overlay-wrapper\">\n <div [ngClass]=\"modalClasses()\" (click)=\"$event.stopPropagation()\">\n <div class=\"centered-modal-inner-content-container\"\n [class]=\"config()?.style?.wrapperClasses ?? ''\"\n [style]=\"config()?.style?.wrapperStyles ?? ''\">\n \n <div class=\"centered-modal-top-group\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"centered-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"centered-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n\n @if (footerTemplate()) {\n <div class=\"centered-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>", styles: [".modal-overlay-wrapper{display:flex;position:absolute;z-index:3;justify-content:center;align-items:center;width:100%;height:100%}.modal-overlay{position:absolute;inset:0;z-index:2}.modal-backdrop{position:absolute;inset:0;z-index:3;pointer-events:auto;-webkit-tap-highlight-color:transparent;background:#00000040;backface-visibility:hidden;-webkit-font-smoothing:subpixel-antialiased;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;transform-origin:center}.centered-modal-content-wrapper{display:flex;flex-direction:column;max-width:90vw;max-width:90dvw;max-height:95vh;max-height:95dvh;overflow:hidden}.centered-modal-default-style{border-radius:.75rem;box-shadow:0 8px 20px #0000001f;color:var(--modal-text, #000000);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid transparent;background-color:var(--modal-bg, #ffffff)}.centered-modal-default-content-container{padding:1rem 1.5rem;max-height:85vh;max-height:85dvh;overflow-y:auto}.centered-modal-inner-content-container{display:flex;flex-direction:column;height:100%;padding:1rem 1.5rem;gap:1.5rem;box-sizing:border-box}.centered-modal-top-group{display:flex;flex-direction:column;gap:1rem;flex-grow:1;min-height:0}.centered-modal-main-content-container{flex-grow:1;overflow-y:auto;min-height:0}.centered-modal-header{flex-shrink:0;width:100%;display:flex;justify-content:space-between;gap:.5rem}.centered-modal-footer{flex-shrink:0;width:100%;display:flex;justify-content:center;gap:.5rem}.centered-modal-animate-in{scale:0;animation:centered-modal-animate-in .15s ease-in-out forwards}.centered-modal-animate-out{animation:centered-modal-animate-out .15s ease-in-out forwards}@keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@-webkit-keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@-moz-keyframes centered-modal-animate-in{0%{scale:0}to{scale:1}}@keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}@-webkit-keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}@-moz-keyframes centered-modal-animate-out{0%{scale:1}to{scale:0}}\n"] }]
621
616
  }], propDecorators: { headerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTemplate", required: true }] }], footerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerTemplate", required: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], isOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpen", required: true }] }], isAnimated: [{ type: i0.Input, args: [{ isSignal: true, alias: "isAnimated", required: true }] }], isSwipeableModalActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSwipeableModalActive", required: true }] }], animationDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "animationDuration", required: true }] }], hasDefaultContentWrapperClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasDefaultContentWrapperClass", required: true }] }], hasBanner: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBanner", required: true }] }], close: [{ type: i0.Output, args: ["close"] }], onBackdropClick: [{ type: i0.Output, args: ["onBackdropClick"] }], swipeableComponents: [{
622
617
  type: ViewChildren,
623
618
  args: [ModalSwipeable]
624
619
  }] } });
625
620
 
626
- const GENERIC_MODAL_DEFAULT_ANIM_DURATION = 175;
627
- const GENERIC_MODAL_DEFAULT_INTERNAL_ANIM_DURATION = 350;
628
- const GENERIC_MODAL_DEFAULT_ANIM_DURATION_MULTIPLIER_SMALL = 0.65;
629
- const GENERIC_MODAL_DEFAULT_ANIM_DURATION_MULTIPLIER_LARGE = 0.85;
630
-
631
621
  class ModalSide {
632
622
  headerTemplate = input.required(...(ngDevMode ? [{ debugName: "headerTemplate" }] : []));
633
623
  footerTemplate = input.required(...(ngDevMode ? [{ debugName: "footerTemplate" }] : []));
634
624
  config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
635
625
  isOpen = input.required(...(ngDevMode ? [{ debugName: "isOpen" }] : []));
636
- renderOpenClass = false;
637
626
  isAnimated = input.required(...(ngDevMode ? [{ debugName: "isAnimated" }] : []));
638
627
  isSwipeableModalActive = input.required(...(ngDevMode ? [{ debugName: "isSwipeableModalActive" }] : []));
639
628
  animationDuration = input.required(...(ngDevMode ? [{ debugName: "animationDuration" }] : []));
@@ -641,37 +630,39 @@ class ModalSide {
641
630
  hasBanner = input.required(...(ngDevMode ? [{ debugName: "hasBanner" }] : []));
642
631
  close = output();
643
632
  swipeableComponents;
644
- constructor() {
645
- effect(() => {
646
- const isOpen = this.isOpen();
647
- if (isOpen) {
648
- this.renderOpenClass = false;
649
- setTimeout(() => {
650
- this.renderOpenClass = true;
651
- }, GENERIC_MODAL_DEFAULT_ANIM_DURATION);
652
- }
653
- else {
654
- this.renderOpenClass = false;
655
- }
656
- });
657
- }
658
- get modalClasses() {
633
+ renderOpenClass = signal(false, ...(ngDevMode ? [{ debugName: "renderOpenClass" }] : []));
634
+ modalClasses = computed(() => {
659
635
  const config = this.config();
660
636
  const positionLeft = config?.style?.position === 'left';
661
637
  const positionRight = config?.style?.position === 'right';
662
638
  const shouldAnimate = this.isAnimated();
639
+ const isRenderedOpen = this.renderOpenClass();
663
640
  return {
664
641
  'side-modal-content-wrapper': true,
665
642
  'side-modal-default-style': this.hasDefaultContentWrapperClass() || this.hasBanner(),
666
643
  'with-footer': this.footerTemplate() !== null,
667
644
  'left': positionLeft,
668
645
  'right': positionRight,
669
- 'side-modal-animate-in': shouldAnimate ? this.renderOpenClass : true,
670
- 'side-modal-animate-out': shouldAnimate ? !this.renderOpenClass : false,
646
+ 'side-modal-animate-in': shouldAnimate ? isRenderedOpen : true,
647
+ 'side-modal-animate-out': shouldAnimate ? !isRenderedOpen : false,
671
648
  };
649
+ }, ...(ngDevMode ? [{ debugName: "modalClasses" }] : []));
650
+ constructor() {
651
+ effect(() => {
652
+ const isOpen = this.isOpen();
653
+ if (isOpen) {
654
+ this.renderOpenClass.set(false);
655
+ setTimeout(() => {
656
+ this.renderOpenClass.set(true);
657
+ }, 50);
658
+ }
659
+ else {
660
+ this.renderOpenClass.set(false);
661
+ }
662
+ });
672
663
  }
673
664
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ModalSide, deps: [], target: i0.ɵɵFactoryTarget.Component });
674
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ModalSide, isStandalone: true, selector: "modal-side", inputs: { headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: true, transformFunction: null }, footerTemplate: { classPropertyName: "footerTemplate", publicName: "footerTemplate", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: true, transformFunction: null }, isAnimated: { classPropertyName: "isAnimated", publicName: "isAnimated", isSignal: true, isRequired: true, transformFunction: null }, isSwipeableModalActive: { classPropertyName: "isSwipeableModalActive", publicName: "isSwipeableModalActive", isSignal: true, isRequired: true, transformFunction: null }, animationDuration: { classPropertyName: "animationDuration", publicName: "animationDuration", isSignal: true, isRequired: true, transformFunction: null }, hasDefaultContentWrapperClass: { classPropertyName: "hasDefaultContentWrapperClass", publicName: "hasDefaultContentWrapperClass", isSignal: true, isRequired: true, transformFunction: null }, hasBanner: { classPropertyName: "hasBanner", publicName: "hasBanner", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { close: "close" }, viewQueries: [{ propertyName: "swipeableComponents", predicate: ModalSwipeable, descendants: true }], ngImport: i0, template: "@if(!isSwipeableModalActive()) {\n<div [ngClass]=\"modalClasses\" (click)=\"$event.stopPropagation()\">\n <div class=\"side-modal-inner-content-container\"\n [class]=\"config() && config()?.style?.wrapperClasses ? config()?.style?.wrapperClasses : ''\"\n [style]=\"config() && config()?.style?.wrapperStyles ? config()?.style?.wrapperStyles : ''\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"side-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"side-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n \n @if (footerTemplate()) {\n <div class=\"side-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>", styles: [".side-modal-content-wrapper{position:fixed;top:0;height:100vh;height:100dvh;z-index:3;display:flex;flex-direction:column;padding:1rem;gap:1rem;box-sizing:border-box;overflow:hidden;transition:transform 175ms ease-in-out}.side-modal-content-wrapper.left{left:0;transform:translate(-100%)}.side-modal-content-wrapper.right{right:0;transform:translate(100%)}.side-modal-content-wrapper.side-modal-animate-in{transform:translate(0)!important}.side-modal-content-wrapper.side-modal-animate-out.left{transform:translate(-100%)}.side-modal-content-wrapper.side-modal-animate-out.right{transform:translate(100%)}.side-modal-content-wrapper.with-footer{justify-content:space-between}.side-modal-content-wrapper .side-modal-inner-content-container{flex-grow:1;display:flex;flex-direction:column;gap:1rem;min-height:0}@media(max-width:768px){.side-modal-content-wrapper{max-width:90vw;max-width:95dvw}}.side-modal-default-style{background:var(--modal-bg, #ffffff);box-shadow:0 0 15px #0000004d;max-width:85vw;max-width:85dvw}.side-modal-main-content-container{flex-grow:1;overflow-y:auto;min-height:0;max-height:none}.side-modal-header{flex-shrink:0;width:100%;display:flex;justify-content:space-between;gap:.5rem;padding-top:.75rem}.side-modal-footer{flex-shrink:0;width:100%;display:flex;justify-content:flex-end;gap:.5rem;padding-bottom:.75rem}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ModalSwipeable, selector: "modal-swipeable", inputs: ["headerTemplate", "footerTemplate", "config", "isOpen", "isAnimated", "animationDuration"], outputs: ["close"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ModalBanner, selector: "modal-banner", inputs: ["config"], outputs: ["close"] }, { kind: "component", type: ModalDefaultCloseButton, selector: "modal-default-close-button", inputs: ["config"], outputs: ["close"] }] });
665
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ModalSide, isStandalone: true, selector: "modal-side", inputs: { headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: true, transformFunction: null }, footerTemplate: { classPropertyName: "footerTemplate", publicName: "footerTemplate", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: true, transformFunction: null }, isAnimated: { classPropertyName: "isAnimated", publicName: "isAnimated", isSignal: true, isRequired: true, transformFunction: null }, isSwipeableModalActive: { classPropertyName: "isSwipeableModalActive", publicName: "isSwipeableModalActive", isSignal: true, isRequired: true, transformFunction: null }, animationDuration: { classPropertyName: "animationDuration", publicName: "animationDuration", isSignal: true, isRequired: true, transformFunction: null }, hasDefaultContentWrapperClass: { classPropertyName: "hasDefaultContentWrapperClass", publicName: "hasDefaultContentWrapperClass", isSignal: true, isRequired: true, transformFunction: null }, hasBanner: { classPropertyName: "hasBanner", publicName: "hasBanner", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { close: "close" }, viewQueries: [{ propertyName: "swipeableComponents", predicate: ModalSwipeable, descendants: true }], ngImport: i0, template: "@if(!isSwipeableModalActive()) {\n<div [ngClass]=\"modalClasses()\" (click)=\"$event.stopPropagation()\"\n [style.--anim-duration.ms]=\"animationDuration()\">\n <div class=\"side-modal-inner-content-container\"\n [class]=\"config() && config()?.style?.wrapperClasses ? config()?.style?.wrapperClasses : ''\"\n [style]=\"config() && config()?.style?.wrapperStyles ? config()?.style?.wrapperStyles : ''\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"side-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"side-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n \n @if (footerTemplate()) {\n <div class=\"side-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>", styles: [".side-modal-content-wrapper{position:fixed;top:0;height:100vh;height:100dvh;z-index:3;display:flex;flex-direction:column;padding:1rem;gap:1rem;box-sizing:border-box;overflow:hidden;transition:transform var(--anim-duration, 175ms) ease-in-out}.side-modal-content-wrapper.left{left:0}.side-modal-content-wrapper.right{right:0}.side-modal-content-wrapper.side-modal-animate-in{transform:translate(0)!important}.side-modal-content-wrapper.side-modal-animate-out.left{transform:translate(-100%)}.side-modal-content-wrapper.side-modal-animate-out.right{transform:translate(100%)}.side-modal-content-wrapper.with-footer{justify-content:space-between}.side-modal-content-wrapper .side-modal-inner-content-container{flex-grow:1;display:flex;flex-direction:column;gap:1rem;min-height:0}@media(max-width:768px){.side-modal-content-wrapper{max-width:90vw;max-width:95dvw}}.side-modal-default-style{background:var(--modal-bg, #ffffff);box-shadow:0 0 15px #0000004d;max-width:85vw;max-width:85dvw}.side-modal-main-content-container{flex-grow:1;overflow-y:auto;min-height:0;max-height:none}.side-modal-header{flex-shrink:0;width:100%;display:flex;justify-content:space-between;gap:.5rem;padding-top:.75rem}.side-modal-footer{flex-shrink:0;width:100%;display:flex;justify-content:flex-end;gap:.5rem;padding-bottom:.75rem}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ModalSwipeable, selector: "modal-swipeable", inputs: ["headerTemplate", "footerTemplate", "config", "isOpen", "isAnimated", "animationDuration"], outputs: ["close"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ModalBanner, selector: "modal-banner", inputs: ["config"], outputs: ["close"] }, { kind: "component", type: ModalDefaultCloseButton, selector: "modal-default-close-button", inputs: ["config"], outputs: ["close"] }] });
675
666
  }
676
667
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ModalSide, decorators: [{
677
668
  type: Component,
@@ -681,12 +672,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
681
672
  NgClass,
682
673
  ModalBanner,
683
674
  ModalDefaultCloseButton
684
- ], template: "@if(!isSwipeableModalActive()) {\n<div [ngClass]=\"modalClasses\" (click)=\"$event.stopPropagation()\">\n <div class=\"side-modal-inner-content-container\"\n [class]=\"config() && config()?.style?.wrapperClasses ? config()?.style?.wrapperClasses : ''\"\n [style]=\"config() && config()?.style?.wrapperStyles ? config()?.style?.wrapperStyles : ''\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"side-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"side-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n \n @if (footerTemplate()) {\n <div class=\"side-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>", styles: [".side-modal-content-wrapper{position:fixed;top:0;height:100vh;height:100dvh;z-index:3;display:flex;flex-direction:column;padding:1rem;gap:1rem;box-sizing:border-box;overflow:hidden;transition:transform 175ms ease-in-out}.side-modal-content-wrapper.left{left:0;transform:translate(-100%)}.side-modal-content-wrapper.right{right:0;transform:translate(100%)}.side-modal-content-wrapper.side-modal-animate-in{transform:translate(0)!important}.side-modal-content-wrapper.side-modal-animate-out.left{transform:translate(-100%)}.side-modal-content-wrapper.side-modal-animate-out.right{transform:translate(100%)}.side-modal-content-wrapper.with-footer{justify-content:space-between}.side-modal-content-wrapper .side-modal-inner-content-container{flex-grow:1;display:flex;flex-direction:column;gap:1rem;min-height:0}@media(max-width:768px){.side-modal-content-wrapper{max-width:90vw;max-width:95dvw}}.side-modal-default-style{background:var(--modal-bg, #ffffff);box-shadow:0 0 15px #0000004d;max-width:85vw;max-width:85dvw}.side-modal-main-content-container{flex-grow:1;overflow-y:auto;min-height:0;max-height:none}.side-modal-header{flex-shrink:0;width:100%;display:flex;justify-content:space-between;gap:.5rem;padding-top:.75rem}.side-modal-footer{flex-shrink:0;width:100%;display:flex;justify-content:flex-end;gap:.5rem;padding-bottom:.75rem}\n"] }]
675
+ ], template: "@if(!isSwipeableModalActive()) {\n<div [ngClass]=\"modalClasses()\" (click)=\"$event.stopPropagation()\"\n [style.--anim-duration.ms]=\"animationDuration()\">\n <div class=\"side-modal-inner-content-container\"\n [class]=\"config() && config()?.style?.wrapperClasses ? config()?.style?.wrapperClasses : ''\"\n [style]=\"config() && config()?.style?.wrapperStyles ? config()?.style?.wrapperStyles : ''\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"side-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"side-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n \n @if (footerTemplate()) {\n <div class=\"side-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>", styles: [".side-modal-content-wrapper{position:fixed;top:0;height:100vh;height:100dvh;z-index:3;display:flex;flex-direction:column;padding:1rem;gap:1rem;box-sizing:border-box;overflow:hidden;transition:transform var(--anim-duration, 175ms) ease-in-out}.side-modal-content-wrapper.left{left:0}.side-modal-content-wrapper.right{right:0}.side-modal-content-wrapper.side-modal-animate-in{transform:translate(0)!important}.side-modal-content-wrapper.side-modal-animate-out.left{transform:translate(-100%)}.side-modal-content-wrapper.side-modal-animate-out.right{transform:translate(100%)}.side-modal-content-wrapper.with-footer{justify-content:space-between}.side-modal-content-wrapper .side-modal-inner-content-container{flex-grow:1;display:flex;flex-direction:column;gap:1rem;min-height:0}@media(max-width:768px){.side-modal-content-wrapper{max-width:90vw;max-width:95dvw}}.side-modal-default-style{background:var(--modal-bg, #ffffff);box-shadow:0 0 15px #0000004d;max-width:85vw;max-width:85dvw}.side-modal-main-content-container{flex-grow:1;overflow-y:auto;min-height:0;max-height:none}.side-modal-header{flex-shrink:0;width:100%;display:flex;justify-content:space-between;gap:.5rem;padding-top:.75rem}.side-modal-footer{flex-shrink:0;width:100%;display:flex;justify-content:flex-end;gap:.5rem;padding-bottom:.75rem}\n"] }]
685
676
  }], ctorParameters: () => [], propDecorators: { headerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTemplate", required: true }] }], footerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerTemplate", required: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], isOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpen", required: true }] }], isAnimated: [{ type: i0.Input, args: [{ isSignal: true, alias: "isAnimated", required: true }] }], isSwipeableModalActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSwipeableModalActive", required: true }] }], animationDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "animationDuration", required: true }] }], hasDefaultContentWrapperClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasDefaultContentWrapperClass", required: true }] }], hasBanner: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBanner", required: true }] }], close: [{ type: i0.Output, args: ["close"] }], swipeableComponents: [{
686
677
  type: ViewChildren,
687
678
  args: [ModalSwipeable]
688
679
  }] } });
689
680
 
681
+ const GENERIC_MODAL_DEFAULT_ANIM_DURATION = 175;
682
+ const GENERIC_MODAL_DEFAULT_INTERNAL_ANIM_DURATION = 350;
683
+ const GENERIC_MODAL_DEFAULT_ANIM_DURATION_MULTIPLIER_SMALL = 0.65;
684
+ const GENERIC_MODAL_DEFAULT_ANIM_DURATION_MULTIPLIER_LARGE = 0.85;
685
+
690
686
  class GenericModalComponent {
691
687
  modalService = inject(GenericModalService);
692
688
  windowDimensionService = inject(WindowDimensionsService);
@@ -1 +1 @@
1
- {"version":3,"file":"filip.mazev-modal.mjs","sources":["../../../projects/modal/src/lib/constants/generic-modal-common.constants.ts","../../../projects/modal/src/lib/enums/generic-modal-warnings.enum.ts","../../../projects/modal/src/lib/classes/generic-modal-style.config.ts","../../../projects/modal/src/lib/classes/generic-modal-config.ts","../../../projects/modal/src/lib/enums/generic-modal-state.enum.ts","../../../projects/modal/src/lib/classes/generic-modal-ref.ts","../../../projects/modal/src/lib/classes/generic-modal.ts","../../../projects/modal/src/lib/enums/generic-modal-errors.enum.ts","../../../projects/modal/src/lib/tokens/generic-modal-data.token.ts","../../../projects/modal/src/lib/services/generic-modal.service.ts","../../../projects/modal/src/lib/components/shared/ui/backdrop/modal-backdrop.ts","../../../projects/modal/src/lib/components/shared/ui/backdrop/modal-backdrop.html","../../../projects/modal/src/lib/components/shared/ui/default-close-button/default-close-button.ts","../../../projects/modal/src/lib/components/shared/ui/default-close-button/default-close-button.html","../../../projects/modal/src/lib/components/shared/ui/banner/modal-banner.ts","../../../projects/modal/src/lib/components/shared/ui/banner/modal-banner.html","../../../projects/modal/src/lib/constants/generic-modal-swipe.constants.ts","../../../projects/modal/src/lib/components/views/swipeable/modal-swipeable.ts","../../../projects/modal/src/lib/components/views/swipeable/modal-swipeable.html","../../../projects/modal/src/lib/components/views/centered/modal-centered.ts","../../../projects/modal/src/lib/components/views/centered/modal-centered.html","../../../projects/modal/src/lib/constants/generic-modal-animation.constants.ts","../../../projects/modal/src/lib/components/views/side/modal-side.ts","../../../projects/modal/src/lib/components/views/side/modal-side.html","../../../projects/modal/src/lib/components/generic-modal.ts","../../../projects/modal/src/lib/components/generic-modal.html","../../../projects/modal/src/lib/constants/generic-modal-text.constants.ts","../../../projects/modal/src/lib/directives/modal-footer.directive.ts","../../../projects/modal/src/public-api.ts","../../../projects/modal/src/filip.mazev-modal.ts"],"sourcesContent":["export const EMPTY_STRING = '';","export enum GenericModalWarnings {\n //#region Multi-level modals\n NO_PARENT_PROVIDED = \"No parent modal provided for multilevel modal. Please provide a parent modal or set openAsMultilevel to false.\",\n MULTILEVEL_INLINE_NOT_SUPPORTED = \"As of this version, opening a multi-level modal from inline HTML is not possible. Please set openAsMultilevel to false or open your modal through the GenericModalService! Opening modal as normal modal.\",\n MULTILEVEL_NO_PARENT = \"Cannot open a multilevel modal with only one modal open. Please open another modal before opening a multilevel modal or set openAsMultilevel to false.\",\n PARENT_MODAL_NOT_SET = \"Error setting parent modal. Opening modal as normal modal\",\n //#endregion\n\n //#region Confirm close\n CONFIRM_MODAL_NESTING_NOT_SUPPORTED = \"Cannot open a confirm modal from within a confirm modal. If you want to allow this behaviour, set bypassSelfCheck to true in the confirmCloseConfig.\",\n //#endregion\n\n //#region Directive usage\n FOOTER_DIRECTIVE_OUTSIDE_MODAL = \"[ModalFooter] Directive used outside of a GenericModalComponent.\",\n HEADER_DIRECTIVE_OUTSIDE_MODAL = \"[ModalHeader] Directive used outside of a GenericModalComponent.\",\n //#endregion\n}","import { EMPTY_STRING } from \"../constants/generic-modal-common.constants\";\nimport { IGenericModalStyleConfig } from \"../interfaces/igeneric-modal-style-config.interface\";\nimport { IGenericSwipeableModalConfig } from \"../interfaces/igeneric-swipeable-modal-config\";\nimport { ModalPoistion } from \"../types/modal.types\";\n\nexport class GenericModalStyleConfig implements IGenericModalStyleConfig {\n position: ModalPoistion;\n handleMobile: boolean;\n\n animate: boolean;\n hasBackdrop: boolean;\n closeDelay?: number;\n showCloseButton?: boolean;\n\n mobileConfig: IGenericSwipeableModalConfig;\n\n contentWrapper: boolean;\n\n wrapperClasses: string;\n wrapperStyles: string;\n\n overrideFullHeight: boolean;\n\n constructor(config?: IGenericModalStyleConfig) {\n this.position = config?.position ?? \"center\";\n this.handleMobile = config?.handleMobile ?? true;\n\n this.animate = config?.animate ?? true;\n this.hasBackdrop = config?.hasBackdrop ?? true;\n this.closeDelay = config?.closeDelay;\n this.showCloseButton = config?.showCloseButton ?? true;\n\n this.mobileConfig = config?.mobileConfig ?? {};\n\n this.contentWrapper = config?.contentWrapper ?? true;\n\n this.wrapperClasses = config?.wrapperClasses ?? EMPTY_STRING;\n this.wrapperStyles = config?.wrapperStyles ?? EMPTY_STRING;\n\n this.overrideFullHeight = config?.overrideFullHeight ?? false;\n }\n}\n","import { EMPTY_STRING } from \"../constants/generic-modal-common.constants\";\nimport { IGenericConfirmCloseConfig } from \"../interfaces/igeneric-confirm-close.interface\";\nimport { IGenericModalConfig } from \"../interfaces/igeneric-modal-config.interface\";\nimport { IGenericModalStyleConfig } from \"../interfaces/igeneric-modal-style-config.interface\";\nimport { GenericModal } from \"./generic-modal\";\nimport { GenericModalStyleConfig } from \"./generic-modal-style.config\";\nimport { uuidv4 } from \"@filip.mazev/blocks-core\";\n\nexport class GenericModalConfig<\n D = unknown,\n ConfirmComponentData = any,\n ConfirmComponent extends GenericModal<ConfirmComponentData, undefined> = GenericModal<ConfirmComponentData, undefined>> {\n public open: boolean;\n\n public afterClose?: Function;\n public confirmCloseConfig?: IGenericConfirmCloseConfig<ConfirmComponentData, ConfirmComponent>;\n\n public disableClose: boolean;\n public disableCloseOnBackdropClick: boolean;\n public disableCloseOnNavigation: boolean;\n\n public enableExtremeOverflowHandling?: boolean;\n public webkitOnlyOverflowMobileHandling?: boolean;\n\n public data: D | null;\n\n public style: IGenericModalStyleConfig;\n\n public bannerText: string;\n\n public contentClasses: string;\n public contentStyles: string;\n\n public disableConsoleWarnings: boolean;\n public disableConsoleInfo: boolean;\n\n public id: string;\n\n constructor(config?: IGenericModalConfig<D, ConfirmComponentData, ConfirmComponent>) {\n this.open = config?.open ?? true;\n\n this.afterClose = config?.afterClose;\n\n this.confirmCloseConfig = config?.confirmCloseConfig;\n\n this.disableClose = config?.disableClose ?? false;\n this.disableCloseOnBackdropClick = config?.disableCloseOnBackdropClick ?? false;\n this.disableCloseOnNavigation = config?.disableCloseOnNavigation ?? false;\n\n this.enableExtremeOverflowHandling = config?.enableExtremeOverflowHandling ?? false;\n this.webkitOnlyOverflowMobileHandling = config?.webkitOnlyOverflowMobileHandling ?? true;\n\n this.data = config?.data ?? null;\n this.style = new GenericModalStyleConfig(config?.style);\n\n this.bannerText = config?.bannerText ?? EMPTY_STRING;\n\n this.contentClasses = config?.contentClasses ?? EMPTY_STRING;\n this.contentStyles = config?.contentStyles ?? EMPTY_STRING;\n\n this.disableConsoleWarnings = config?.disableConsoleWarnings ?? false;\n this.disableConsoleInfo = config?.disableConsoleInfo ?? false;\n\n this.id = config?.id ?? uuidv4();\n }\n}\n","export enum GenericModalState {\n OPEN = \"open\",\n OPENING = \"opening\",\n CLOSED = \"closed\",\n CLOSING = \"closing\",\n}\n","import { ComponentRef, Type } from \"@angular/core\";\nimport { BehaviorSubject, Observable, Subject } from \"rxjs\";\nimport { GenericModalConfig } from \"./generic-modal-config\";\nimport { GenericModalComponent } from \"../components/generic-modal\";\nimport { GenericModalState } from \"../enums/generic-modal-state.enum\";\nimport { IGenericCloseResult } from \"../interfaces/igeneric-close-result.interface\";\nimport { IGenericModalRef } from \"../interfaces/igeneric-modal-ref.interface\";\nimport { GenericModalService } from \"../services/generic-modal.service\";\nimport { ModalCloseMode } from \"../types/modal.types\";\nimport { GenericModal } from \"./generic-modal\";\n\nexport class GenericModalRef<\n D = unknown,\n R = any,\n C extends GenericModal<D, R> = GenericModal<D, R>> implements IGenericModalRef<D, R, C> {\n\n //#region Modal Container\n\n private _modalContainer: Type<GenericModalComponent<D, R, C>> = {} as Type<GenericModalComponent<D, R, C>>;\n\n private set modalContainer(modalContainer: Type<GenericModalComponent<D, R, C>>) {\n this._modalContainer = modalContainer;\n }\n\n public get modalContainer(): Type<GenericModalComponent<D, R, C>> {\n return this._modalContainer;\n }\n\n private _modalContainerRef: ComponentRef<GenericModalComponent<D, R, C>> = {} as ComponentRef<GenericModalComponent<D, R, C>>;\n\n private set modalContainerRef(modalContainerRef: ComponentRef<GenericModalComponent<D, R, C>>) {\n this._modalContainerRef = modalContainerRef;\n }\n\n public get modalContainerRef(): ComponentRef<GenericModalComponent<D, R, C>> {\n return this._modalContainerRef;\n }\n\n private _modalContainerElement: HTMLElement = {} as HTMLElement;\n\n private set modalContainerElement(modalContainerElement: HTMLElement) {\n this._modalContainerElement = modalContainerElement;\n }\n\n public get modalContainerElement(): HTMLElement {\n return this._modalContainerElement;\n }\n\n private _parentElement: HTMLElement | undefined = undefined;\n\n private set parentElement(parentElement: HTMLElement | undefined) {\n this._parentElement = parentElement;\n }\n\n public get parentElement(): HTMLElement | undefined {\n return this._parentElement;\n }\n\n //#endregion\n\n //#region Component\n\n private _componentRef: ComponentRef<C> = {} as ComponentRef<C>;\n\n private set componentRef(componentRef: ComponentRef<C>) {\n this._componentRef = componentRef;\n }\n\n public get componentRef(): ComponentRef<C> {\n return this._componentRef;\n }\n\n //#endregion\n\n //#region Self\n\n private _modalState: GenericModalState = GenericModalState.CLOSED;\n\n private modalState = new BehaviorSubject<GenericModalState>(this.getStatus());\n\n public modalState$(): Observable<GenericModalState> {\n return this.modalState.asObservable();\n }\n\n private getStatus(): GenericModalState {\n return this._modalState;\n }\n\n private _selfIdentifier: { constructor: Function } = {} as {\n constructor: Function;\n };\n\n private set selfIdentifier(selfIdentifier: { constructor: Function }) {\n this._selfIdentifier = selfIdentifier;\n }\n\n public get selfIdentifier(): { constructor: Function } {\n return this._selfIdentifier;\n }\n\n private _modalConfig?: GenericModalConfig<D> = undefined;\n\n private set modalConfig(modalConfig: GenericModalConfig<D> | undefined) {\n this._modalConfig = modalConfig;\n }\n\n public get modalConfig(): GenericModalConfig<D> | undefined {\n return this._modalConfig;\n }\n //#endregion\n\n //#region Observables\n\n private backdropClickSubject: Subject<MouseEvent> = new Subject<MouseEvent>();\n\n public backdropClick(): Observable<MouseEvent> {\n return this.backdropClickSubject.asObservable();\n }\n\n private backdropClicked(event: MouseEvent) {\n this.backdropClickSubject.next(event);\n }\n\n private afterCloseSubject: Subject<IGenericCloseResult<R>> = new Subject<IGenericCloseResult<R>>();\n\n public afterClosed(): Observable<IGenericCloseResult<R>> {\n return this.afterCloseSubject.asObservable();\n }\n\n private afterClose(result: IGenericCloseResult<R>) {\n this.afterCloseSubject.next(result);\n }\n\n //#endregion\n\n constructor(\n componentRef: ComponentRef<C>,\n selfIdentifier: { constructor: Function },\n modalContainerRef: ComponentRef<GenericModalComponent<D, R, C>>,\n private modalService: GenericModalService,\n modalConfig?: GenericModalConfig<D>,\n ) {\n this.modalConfig = modalConfig;\n this.modalContainerRef = modalContainerRef;\n this.modalContainerElement = modalContainerRef.location.nativeElement;\n\n this.componentRef = componentRef;\n this.selfIdentifier = selfIdentifier;\n }\n\n //#region Public Methods\n\n public async open(): Promise<void> {\n this._modalState = GenericModalState.OPENING;\n this.modalState.next(GenericModalState.OPENING);\n\n this.modalContainerRef.instance.componentRef = this._componentRef;\n\n const config = new GenericModalConfig(this.modalConfig);\n\n this.modalContainerRef.instance.config = config;\n\n this.modalContainerRef.instance.closeFunction = this.handleClose.bind(this);\n\n this.parentElement?.appendChild(this.modalContainerElement);\n\n this.modalContainerRef.instance.backdropClick.subscribe((event) => {\n this.backdropClicked(event);\n });\n\n this._modalState = GenericModalState.OPEN;\n this.modalState.next(GenericModalState.OPEN);\n }\n\n public close(state: ModalCloseMode = \"cancel\", result: R | undefined = undefined, forceClose: boolean = false): void {\n this.modalContainerRef.instance.close(state, result, false, forceClose);\n }\n\n //#endregion\n\n //#region Private Methods\n\n private handleClose(result: IGenericCloseResult<R>): void {\n this._modalState = GenericModalState.CLOSING;\n this.modalState.next(GenericModalState.CLOSING);\n\n setTimeout(\n () => {\n if (this.modalConfig?.afterClose) {\n this.modalConfig.afterClose();\n }\n\n this.modalContainerRef.destroy();\n\n this._modalState = GenericModalState.CLOSED;\n this.modalState.next(GenericModalState.CLOSED);\n\n this.afterClose(result);\n this.modalService?.close(this.selfIdentifier, true);\n }, this.modalContainerRef.instance.animationDuration);\n }\n //#endregion\n}\n","import { Injectable, OnDestroy, inject } from \"@angular/core\";\nimport { GenericModalRef } from \"./generic-modal-ref\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { GenericModalService } from \"../services/generic-modal.service\";\n\n@Injectable()\nexport abstract class GenericModal<D, R> implements OnDestroy {\n protected genericModalService = inject(GenericModalService);\n\n modal?: GenericModalRef<D, R>;\n\n protected modalGetSubscription$ = new Subject<void>();\n\n constructor() {\n this.createModalSubscription();\n }\n\n ngOnDestroy(): void {\n this.onDestroy();\n this.unsubscribeModalGet();\n }\n\n protected createModalSubscription() {\n this.modalGetSubscription$ = new Subject<void>();\n\n this.genericModalService\n .getSubscribe<D, R>(this.constructor)\n .pipe(takeUntil(this.modalGetSubscription$))\n .subscribe((modal) => {\n if (modal instanceof GenericModalRef) {\n this.modal = modal;\n this.afterModalGet();\n this.modalGetSubscription$.next();\n this.modalGetSubscription$.complete();\n }\n });\n }\n\n protected unsubscribeModalGet() {\n this.modalGetSubscription$.next();\n this.modalGetSubscription$.complete();\n }\n\n abstract afterModalGet(): void;\n abstract onDestroy(): void;\n\n public close() {\n this.modal?.close();\n }\n}\n","export enum GenericModalErrors {\n //#region General\n MODAL_DOESNT_MATCH_THE_REQUESTED_TYPES = \"The modal doesn't match the requested types.\",\n GENERIC_MODAL_SERVICE_RENDERER_NOT_SET = \"ViewContainer and Renderer not set, please set the view container in the constructor of app.module.ts / app.ts (by calling register), before opening a modal\",\n //#endregion\n\n //#region Multi-level modals\n PARENT_MODAL_CANT_BE_THE_SAME_AS_CHILD = \"Parent modal cannot be the same as the child modal\",\n PARENT_MODAL_NOT_FOUND = \"Parent modal does not exist\",\n PARENT_MODAL_NOT_PROVIDED = \"No parent modal provided for multilevel modal\",\n //#endregion\n}","import { InjectionToken } from \"@angular/core\";\n\nexport const GENERIC_MODAL_DATA: InjectionToken<any> = new InjectionToken<any>(\"GENERIC_MODAL_DATA\");\n","import { Injectable, inject, Injector, ViewContainerRef, Renderer2 } from \"@angular/core\";\nimport { Router, NavigationEnd } from \"@angular/router\";\nimport { BehaviorSubject, Subject, filter, takeUntil, Observable, map, skip } from \"rxjs\";\nimport { GenericModal } from \"../classes/generic-modal\";\nimport { GenericModalConfig } from \"../classes/generic-modal-config\";\nimport { GenericModalRef } from \"../classes/generic-modal-ref\";\nimport { GenericModalComponent } from \"../components/generic-modal\";\nimport { GenericModalErrors } from \"../enums/generic-modal-errors.enum\";\nimport { IGenericModalConfig } from \"../interfaces/igeneric-modal-config.interface\";\nimport { IGenericModalService } from \"../interfaces/igeneric-modal-service.interface\";\nimport { GENERIC_MODAL_DATA } from \"../tokens/generic-modal-data.token\";\nimport { ComponentType } from \"@angular/cdk/portal\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class GenericModalService implements IGenericModalService {\n private router = inject(Router);\n protected injector = inject(Injector);\n\n //#region Properties\n\n private modals: Map<{ constructor: Function }, GenericModalRef | GenericModalComponent> = new Map();\n private modalsSubject = new BehaviorSubject<Map<{ constructor: Function }, GenericModalRef | GenericModalComponent>>(this.modals);\n\n public viewContainer?: ViewContainerRef;\n public renderer?: Renderer2;\n\n private unsubscribe$ = new Subject<void>();\n\n //#endregion\n\n constructor() {\n this.createSubscriptions();\n }\n\n ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n //#region Private Methods\n\n private createSubscriptions(): void {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n skip(1), \n takeUntil(this.unsubscribe$)\n )\n .subscribe(() => {\n if (this.modalsCount() > 0) {\n this.closeAll(true);\n }\n });\n }\n\n //#endregion\n\n //#region Public Methods\n\n public register(viewContainer: ViewContainerRef, renderer: Renderer2): void {\n this.viewContainer = viewContainer;\n this.renderer = renderer;\n }\n\n public open<D, R, C extends GenericModal<D, R> = GenericModal<D, R>>(component: ComponentType<C>, config?: IGenericModalConfig<D>): GenericModalRef<D, R, C> {\n if (!this.viewContainer || !this.renderer) {\n throw new Error(GenericModalErrors.GENERIC_MODAL_SERVICE_RENDERER_NOT_SET);\n }\n\n const dataInjector = Injector.create({\n providers: [{ provide: GENERIC_MODAL_DATA, useValue: config?.data }],\n parent: this.injector,\n });\n\n const wrapperRef = this.viewContainer.createComponent(GenericModalComponent<D, R, C>, {\n injector: dataInjector,\n });\n\n const contentInjector = Injector.create({\n providers: [\n { provide: GenericModalComponent, useValue: wrapperRef.instance }\n ],\n parent: wrapperRef.injector,\n });\n\n const contentRef = this.viewContainer.createComponent(component, {\n injector: contentInjector,\n });\n\n const modal = new GenericModalRef<D, R, C>(\n contentRef,\n component,\n wrapperRef,\n this,\n new GenericModalConfig(config),\n );\n\n const modalElement = modal.componentRef.location.nativeElement;\n this.renderer.setStyle(modalElement, 'height', '97%');\n this.renderer.setStyle(modalElement, 'width', '100%');\n this.renderer.setStyle(modalElement, 'display', 'flex');\n this.renderer.setStyle(modalElement, 'flex-grow', '1');\n\n this.modals.set(modal.selfIdentifier, modal);\n this.modalsSubject.next(this.modals);\n\n modal.open();\n\n return modal;\n }\n\n public close(self: { constructor: Function }, fromCloseFunction: boolean | undefined = false): void {\n if (this.modals.has(self)) {\n if (fromCloseFunction !== true) {\n\n const modal = this.modals.get(self);\n if (modal && modal instanceof GenericModalRef) {\n modal.close();\n }\n }\n this.modals.delete(self);\n this.modalsSubject.next(this.modals);\n }\n }\n\n public closeAll(onNavigate: boolean = false): void {\n this.modals.forEach((modal) => {\n if (modal instanceof GenericModalRef) {\n if (modal.modalConfig?.disableCloseOnNavigation !== true || !onNavigate) {\n modal.close(\"cancel\", undefined, true);\n }\n }\n });\n\n this.modals.clear();\n this.modalsSubject.next(this.modals);\n }\n\n public get<D, R, C extends GenericModal<D, R> = GenericModal<D, R>>(self: { constructor: Function }): GenericModalRef<D, R, C> | GenericModalComponent<D, R, C> | undefined {\n const modal = this.modals.get(self);\n this.modalRequestedTypeCheck(modal);\n return modal as GenericModalRef<D, R, C> | GenericModalComponent<D, R, C> | undefined;\n }\n\n public getSubscribe<D, R, C extends GenericModal<D, R> = GenericModal<D, R>>(self: { constructor: Function }): Observable<GenericModalRef<D, R, C> | GenericModalComponent<D, R, C> | undefined> {\n return this.modalsSubject.asObservable().pipe(map((modals) => {\n const modal = modals.get(self);\n this.modalRequestedTypeCheck(modal);\n return modal as GenericModalRef<D, R, C> | GenericModalComponent<D, R, C> | undefined;\n }));\n }\n\n public modalsCount(): number {\n return this.modals.size;\n }\n\n public find(self: { constructor: Function }): boolean {\n return this.modals.has(self);\n }\n\n //#endregion\n\n //#region Helper Methods\n\n public modalRequestedTypeCheck(modal: GenericModalRef | GenericModalComponent | undefined): boolean {\n if (modal) {\n if (modal instanceof GenericModalRef) {\n if (!(modal.componentRef.instance instanceof GenericModal)) {\n throw new Error(GenericModalErrors.MODAL_DOESNT_MATCH_THE_REQUESTED_TYPES);\n }\n } else if (!(modal instanceof GenericModalComponent)) {\n throw new Error(GenericModalErrors.MODAL_DOESNT_MATCH_THE_REQUESTED_TYPES);\n }\n }\n\n return true;\n }\n\n //#endregion\n}\n","import { Component, input, output } from \"@angular/core\";\n\n@Component({\n selector: 'modal-backdrop',\n imports: [],\n templateUrl: './modal-backdrop.html',\n styleUrls: ['./modal-backdrop.scss']\n})\nexport class ModalBackdrop {\n readonly isAnimated = input(false);\n readonly isOpen = input(false);\n \n readonly click = output<MouseEvent>();\n}","<div class=\"modal-backdrop\" [class.backdrop-fade-in]=\"isAnimated() && isOpen()\"\n [class.backdrop-fade-out]=\"isAnimated() && !isOpen()\" (click)=\"click.emit($event)\">\n</div>","import { Component, input, output } from '@angular/core';\nimport { GenericModalConfig, ModalCloseMode } from '../../../../../public-api';\n\n@Component({\n selector: 'modal-default-close-button',\n imports: [],\n templateUrl: './default-close-button.html',\n styleUrl: './default-close-button.scss',\n})\nexport class ModalDefaultCloseButton<D = unknown> {\n readonly config = input.required<GenericModalConfig<D> | undefined>();\n\n readonly close = output<ModalCloseMode | undefined>();\n}"," @if (config()?.disableClose !== true && config()?.style?.showCloseButton !== false) {\n <svg (click)=\"close.emit('cancel')\" aria-label=\"Close\" class=\"default-close-button\" viewBox=\"0 0 24 24\"\n fill=\"#ffffff\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.4 24L0 21.6L9.6 12L0 2.4L2.4 0L12 9.6L21.6 0L24 2.4L14.4 12L24 21.6L21.6 24L12 14.4L2.4 24Z\"\n fill=\"#ffffff\" />\n </svg>\n }","import { Component, input, output } from \"@angular/core\";\nimport { GenericModalConfig } from \"../../../../classes/generic-modal-config\";\nimport { ModalCloseMode } from \"../../../../types/modal.types\";\nimport { ModalDefaultCloseButton } from \"../default-close-button/default-close-button\";\n\n@Component({\n selector: 'modal-banner',\n imports: [\n ModalDefaultCloseButton\n ],\n templateUrl: './modal-banner.html',\n styleUrl: './modal-banner.scss',\n})\nexport class ModalBanner<D = unknown> {\n readonly config = input.required<GenericModalConfig<D> | undefined>();\n\n readonly close = output<ModalCloseMode | undefined>();\n}","<div class=\"modal-top-banner-container\">\n <div class=\"modal-top-banner-title-container\">\n @if (config() && config()?.bannerText && (config() && config()!.bannerText.length > 0)) {\n <div class=\"modal-banner-default-style\">\n <div class=\"generic-modal-banner-text\">\n <div>\n {{ config()?.bannerText }}\n </div>\n </div>\n </div>\n }\n </div>\n \n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n</div>","export const GENERIC_MODAL_DOWN_SWIPE_LIMIT = 2;\nexport const GENERIC_MODAL_UP_SWIPE_LIMIT = 1;\nexport const GENERIC_MODAL_SWIPE_VELOCITY_THRESHOLD = 80; ","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, ElementRef, OnDestroy, OnInit, TemplateRef, ViewChild, input, output } from '@angular/core';\nimport { Subject, take } from 'rxjs';\nimport { GenericModalConfig } from '../../../classes/generic-modal-config';\nimport { ModalCloseMode } from '../../../types/modal.types';\nimport * as swipeConst from '../../../constants/generic-modal-swipe.constants';\n\n@Component({\n selector: 'modal-swipeable',\n imports: [\n NgClass,\n NgTemplateOutlet\n ],\n templateUrl: './modal-swipeable.html',\n styleUrl: './modal-swipeable.scss',\n})\nexport class ModalSwipeable implements OnInit, OnDestroy {\n readonly headerTemplate = input.required<TemplateRef<any> | null>();\n readonly footerTemplate = input.required<TemplateRef<any> | null>();\n \n readonly config = input.required<GenericModalConfig<any> | undefined>();\n readonly isOpen = input.required<boolean>();\n readonly isAnimated = input.required<boolean>();\n readonly animationDuration = input.required<number>();\n\n readonly close = output<ModalCloseMode | undefined>();\n\n public currentTranslateY: number = 0;\n public isSwipingVerticallyFinished: boolean = false;\n\n protected isSwipingVertically: boolean = false;\n\n protected downSwipeLimit: number = 0;\n protected upSwipeLimit: number = 0;\n\n protected windowInnerHeight: number = window.innerHeight;\n\n protected isTrackingSwipe: boolean = false;\n\n private isTouchActive = false;\n private swipeableModalInitiated: boolean = false;\n private globalPointerListenerAdded = false;\n\n private touchDetectionUnsubscribe$ = new Subject<void>();\n\n @ViewChild(\"verticalSwipeTarget\", { static: true }) verticalSwipeTarget?: ElementRef;\n @ViewChild(\"modalContent\", { static: true }) modalContent?: ElementRef;\n\n public ngOnInit(): void {\n this.startVerticalSwipeDetection();\n this.monitorInputType();\n }\n\n public ngOnDestroy(): void {\n this.stopVerticalSwipeDetection();\n }\n\n //#region Swipe Methods\n\n private startVerticalSwipeDetection(): void {\n if (this.isTrackingSwipe) return;\n\n const hasTouch = window.matchMedia('(pointer: coarse)').matches || navigator.maxTouchPoints > 0;\n if (!hasTouch) return;\n\n this.initSwipeableModalParams();\n\n this.touchDetectionUnsubscribe$ = new Subject<void>();\n this.isTrackingSwipe = true;\n\n const target = this.verticalSwipeTarget?.nativeElement;\n if (!target) return;\n\n const limit = document.body.offsetHeight / this.downSwipeLimit;\n\n let startY = 0;\n let currentY = 0;\n let isPointerDown = false;\n\n const pointerDown = (event: PointerEvent) => {\n isPointerDown = true;\n startY = event.clientY;\n this.isSwipingVertically = true;\n };\n\n const pointerMove = (event: PointerEvent) => {\n if (!isPointerDown) return;\n currentY = event.clientY - startY;\n\n event.preventDefault();\n this.currentTranslateY = currentY;\n };\n\n const pointerUp = (event: PointerEvent) => {\n if (!isPointerDown) return;\n isPointerDown = false;\n this.isSwipingVertically = false;\n\n const deltaY = event.clientY - startY;\n const velocityY = (event.clientY - startY) / (event.timeStamp - (event as any).startTime || 1);\n\n if (Math.abs(deltaY) > limit || velocityY > swipeConst.GENERIC_MODAL_SWIPE_VELOCITY_THRESHOLD) {\n this.close.emit('cancel');\n } else {\n this.currentTranslateY = 0;\n }\n };\n\n target.addEventListener('pointerdown', pointerDown);\n target.addEventListener('pointermove', pointerMove);\n target.addEventListener('pointerup', pointerUp);\n target.addEventListener('pointercancel', pointerUp);\n\n this.touchDetectionUnsubscribe$.pipe(take(1)).subscribe(() => {\n target.removeEventListener('pointerdown', pointerDown);\n target.removeEventListener('pointermove', pointerMove);\n target.removeEventListener('pointerup', pointerUp);\n target.removeEventListener('pointercancel', pointerUp);\n });\n }\n\n private stopVerticalSwipeDetection(): void {\n if (!this.isTrackingSwipe) return;\n\n this.isTrackingSwipe = false;\n\n this.touchDetectionUnsubscribe$.next();\n this.touchDetectionUnsubscribe$.complete();\n }\n\n private initSwipeableModalParams(): void {\n if (!this.swipeableModalInitiated) {\n this.swipeableModalInitiated = true;\n\n const config = this.config();\n this.downSwipeLimit = config?.style.mobileConfig?.downSwipeLimit\n ? config.style.mobileConfig.downSwipeLimit > 0\n ? config.style.mobileConfig.downSwipeLimit\n : 1\n : swipeConst.GENERIC_MODAL_DOWN_SWIPE_LIMIT;\n\n const configValue = this.config();\n this.upSwipeLimit = configValue?.style.mobileConfig?.upSwipeLimit\n ? configValue.style.mobileConfig.upSwipeLimit > 0\n ? configValue.style.mobileConfig.upSwipeLimit\n : swipeConst.GENERIC_MODAL_UP_SWIPE_LIMIT\n : window.innerHeight;\n }\n }\n\n private monitorInputType(): void {\n if (this.globalPointerListenerAdded) return;\n this.globalPointerListenerAdded = true;\n\n window.addEventListener('pointerdown', (event: PointerEvent) => {\n const isTouch = event.pointerType === 'touch';\n\n if (isTouch && !this.isTouchActive) {\n this.isTouchActive = true;\n this.startVerticalSwipeDetection();\n } else if (!isTouch && this.isTouchActive) {\n this.isTouchActive = false;\n this.stopVerticalSwipeDetection();\n }\n });\n }\n\n //#endregion\n}\n","<div (click)=\"$event.stopPropagation()\" [id]=\"config()?.id ?? ''\"\n [class]=\"config()?.style?.wrapperClasses !== undefined ? config()!.style.wrapperClasses! : ''\"\n [style]=\"config()?.style?.wrapperStyles !== undefined ? config()!.style.wrapperStyles! : ''\"\n [style.max-height]=\"config() && config()?.style?.mobileConfig && config()?.style?.mobileConfig?.customHeight ? config()?.style?.mobileConfig?.customHeight : ''\"\n [style.transform]=\"!isSwipingVerticallyFinished\n ? 'translateY(' + (currentTranslateY * -1 > windowInnerHeight / upSwipeLimit ? (windowInnerHeight / upSwipeLimit) * -1 : currentTranslateY) + 'px)'\n : 'translateY(100%)'\"\n [style.transition]=\"isAnimated() && !isSwipingVertically ? '300ms ease-in-out' : ''\" [ngClass]=\"{\n 'opened-swipeable-modal': isAnimated()\n }\" data-horizontal-swipe-target=\"swipeable-modal\" class=\"swipeable-modal-style\">\n \n <div #verticalSwipeTarget class=\"touch-hitbox\" class=\"swipeable-modal-top-bar\"\n (click)=\"isTrackingSwipe ? null : close.emit('cancel')\">\n <div class=\"swipe-line\"></div>\n </div>\n\n <div class=\"swipeable-modal-inner-content-container\">\n <div class=\"swipeable-modal-top-group\">\n @if (headerTemplate()) {\n <div class=\"swipeable-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n </div>\n }\n\n <div class=\"swipeable-modal-main-content-container\"\n [style.animationDuration]=\"isAnimated() ? animationDuration().toString() + 'ms' : '0ms'\">\n <ng-content></ng-content>\n </div>\n </div>\n\n @if (footerTemplate()) {\n <div class=\"swipeable-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n </div>\n</div>","import { NgTemplateOutlet, NgClass } from \"@angular/common\";\nimport { Component, input, output, ViewChildren, QueryList, TemplateRef } from \"@angular/core\";\nimport { GenericModalConfig } from \"../../../classes/generic-modal-config\";\nimport { IGenericModalView } from \"../../../interfaces/igeneric-modal-view.interface\";\nimport { ModalCloseMode } from \"../../../types/modal.types\";\nimport { ModalBanner } from \"../../shared/ui/banner/modal-banner\";\nimport { ModalSwipeable } from \"../swipeable/modal-swipeable\";\nimport { ModalDefaultCloseButton } from \"../../shared/ui/default-close-button/default-close-button\";\n\n@Component({\n selector: 'modal-centered',\n imports: [\n NgTemplateOutlet,\n NgClass,\n ModalSwipeable,\n ModalBanner,\n ModalDefaultCloseButton\n ],\n templateUrl: './modal-centered.html',\n styleUrl: './modal-centered.scss'\n})\nexport class ModalCentered<D = unknown> implements IGenericModalView<D> {\n readonly headerTemplate = input.required<TemplateRef<any> | null>();\n readonly footerTemplate = input.required<TemplateRef<any> | null>();\n \n readonly config = input.required<GenericModalConfig<D> | undefined>();\n readonly isOpen = input.required<boolean>();\n readonly isAnimated = input.required<boolean>();\n readonly isSwipeableModalActive = input.required<boolean>();\n readonly animationDuration = input.required<number>();\n readonly hasDefaultContentWrapperClass = input.required<boolean>();\n readonly hasBanner = input.required<boolean>();\n\n readonly close = output<ModalCloseMode | undefined>();\n readonly onBackdropClick = output<MouseEvent>();\n\n @ViewChildren(ModalSwipeable) swipeableComponents!: QueryList<ModalSwipeable>;\n\n public get modalClasses(): { [key: string]: boolean } {\n return {\n 'centered-modal-content-wrapper': true,\n 'centered-modal-default-style': this.hasDefaultContentWrapperClass() || this.hasBanner(),\n\n 'centered-modal-animate-in': this.isAnimated() && this.isOpen(),\n 'centered-modal-animate-out': this.isAnimated() && !this.isOpen(),\n };\n }\n}","@if(!isSwipeableModalActive()) {\n<div class=\"modal-overlay\" [ngClass]=\"{'modal-backdrop': config()?.style?.hasBackdrop}\" (click)=\"\n config()?.style?.hasBackdrop ? onBackdropClick.emit($event) : null\">\n <div class=\"modal-overlay-wrapper\">\n <div [ngClass]=\"modalClasses\" (click)=\"$event.stopPropagation()\">\n <div class=\"centered-modal-inner-content-container\"\n [class]=\"config()?.style?.wrapperClasses ?? ''\"\n [style]=\"config()?.style?.wrapperStyles ?? ''\">\n \n <div class=\"centered-modal-top-group\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"centered-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"centered-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n\n @if (footerTemplate()) {\n <div class=\"centered-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>","export const GENERIC_MODAL_DEFAULT_ANIM_DURATION = 175;\nexport const GENERIC_MODAL_DEFAULT_INTERNAL_ANIM_DURATION = 350;\n\nexport const GENERIC_MODAL_DEFAULT_ANIM_DURATION_MULTIPLIER_SMALL = 0.65;\nexport const GENERIC_MODAL_DEFAULT_ANIM_DURATION_MULTIPLIER_LARGE = 0.85;","import { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { Component, QueryList, TemplateRef, ViewChildren, effect, input, output } from '@angular/core';\nimport { GenericModalConfig } from '../../../classes/generic-modal-config';\nimport { IGenericModalView } from '../../../interfaces/igeneric-modal-view.interface';\nimport { ModalCloseMode } from '../../../types/modal.types';\nimport { ModalBanner } from '../../shared/ui/banner/modal-banner';\nimport { ModalSwipeable } from '../swipeable/modal-swipeable';\nimport { ModalDefaultCloseButton } from '../../shared/ui/default-close-button/default-close-button';\nimport * as animConst from '../../../constants/generic-modal-animation.constants';\n\n@Component({\n selector: 'modal-side',\n imports: [\n NgTemplateOutlet,\n ModalSwipeable,\n NgClass,\n ModalBanner,\n ModalDefaultCloseButton\n ],\n templateUrl: './modal-side.html',\n styleUrl: './modal-side.scss',\n})\nexport class ModalSide<D = unknown> implements IGenericModalView<D> {\n readonly headerTemplate = input.required<TemplateRef<any> | null>();\n readonly footerTemplate = input.required<TemplateRef<any> | null>();\n \n readonly config = input.required<GenericModalConfig<D> | undefined>();\n readonly isOpen = input.required<boolean>();\n\n protected renderOpenClass = false;\n\n readonly isAnimated = input.required<boolean>();\n readonly isSwipeableModalActive = input.required<boolean>();\n readonly animationDuration = input.required<number>();\n readonly hasDefaultContentWrapperClass = input.required<boolean>();\n readonly hasBanner = input.required<boolean>();\n\n readonly close = output<ModalCloseMode | undefined>();\n\n @ViewChildren(ModalSwipeable) swipeableComponents!: QueryList<ModalSwipeable>;\n \n constructor() {\n effect(() => {\n const isOpen = this.isOpen();\n \n if (isOpen) {\n this.renderOpenClass = false;\n\n setTimeout(() => {\n this.renderOpenClass = true; \n }, animConst.GENERIC_MODAL_DEFAULT_ANIM_DURATION); \n\n } else {\n this.renderOpenClass = false;\n }\n });\n }\n\n public get modalClasses(): { [key: string]: boolean } {\n const config = this.config();\n const positionLeft = config?.style?.position === 'left';\n const positionRight = config?.style?.position === 'right';\n\n const shouldAnimate = this.isAnimated();\n\n return {\n 'side-modal-content-wrapper': true,\n 'side-modal-default-style': this.hasDefaultContentWrapperClass() || this.hasBanner(),\n 'with-footer': this.footerTemplate() !== null,\n\n 'left': positionLeft,\n 'right': positionRight,\n\n 'side-modal-animate-in': shouldAnimate ? this.renderOpenClass : true, \n \n 'side-modal-animate-out': shouldAnimate ? !this.renderOpenClass : false,\n };\n }\n}","@if(!isSwipeableModalActive()) {\n<div [ngClass]=\"modalClasses\" (click)=\"$event.stopPropagation()\">\n <div class=\"side-modal-inner-content-container\"\n [class]=\"config() && config()?.style?.wrapperClasses ? config()?.style?.wrapperClasses : ''\"\n [style]=\"config() && config()?.style?.wrapperStyles ? config()?.style?.wrapperStyles : ''\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"side-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"side-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n \n @if (footerTemplate()) {\n <div class=\"side-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>","import { NgTemplateOutlet } from \"@angular/common\";\nimport { Component, inject, output, ComponentRef, ViewChild, ElementRef, ViewChildren, QueryList, TemplateRef, ViewContainerRef, signal, effect } from \"@angular/core\";\nimport { Subject, Observable, fromEvent, filter, take } from \"rxjs\";\nimport { GenericModal } from \"../classes/generic-modal\";\nimport { GenericModalConfig } from \"../classes/generic-modal-config\";\nimport { EMPTY_STRING } from \"../constants/generic-modal-common.constants\";\nimport { GenericModalWarnings } from \"../enums/generic-modal-warnings.enum\";\nimport { IGenericModalComponenet } from \"../interfaces/igeneric-modal-component.interface\";\nimport { GenericModalService } from \"../services/generic-modal.service\";\nimport { ModalBackdrop } from \"./shared/ui/backdrop/modal-backdrop\";\nimport { ModalCentered } from \"./views/centered/modal-centered\";\nimport { ModalSide } from \"./views/side/modal-side\";\nimport { ModalSwipeable } from \"./views/swipeable/modal-swipeable\";\nimport { ModalCloseMode } from \"../types/modal.types\";\nimport { IGenericCloseResult } from \"../interfaces/igeneric-close-result.interface\";\nimport { DeviceTypeService, ScrollLockService, WindowDimensionsService } from \"@filip.mazev/blocks-core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport * as animConst from \"../constants/generic-modal-animation.constants\";\n\n@Component({\n selector: \"generic-modal\",\n imports: [\n NgTemplateOutlet,\n ModalCentered,\n ModalSide,\n ModalBackdrop\n ],\n templateUrl: \"./generic-modal.html\",\n styleUrl: \"./generic-modal.scss\",\n})\nexport class GenericModalComponent<\n D = unknown,\n R = any,\n C extends GenericModal<D, R> = GenericModal<D, R>>\n implements IGenericModalComponenet<D, R, C> {\n\n private modalService = inject(GenericModalService);\n private windowDimensionService = inject(WindowDimensionsService);\n private scrollLockService = inject(ScrollLockService);\n private deviceTypeService = inject(DeviceTypeService);\n\n readonly afterClose = output<void>();\n\n readonly animationDuration: number = animConst.GENERIC_MODAL_DEFAULT_ANIM_DURATION;\n\n public componentRef: ComponentRef<C> = {} as ComponentRef<C>;\n public config?: GenericModalConfig<D>;\n public closeFunction?: Function;\n\n public backdropClickSubject = new Subject<MouseEvent>();\n public backdropClick: Observable<MouseEvent> = this.backdropClickSubject.asObservable();\n\n public isOpen = signal<boolean>(true);\n public isSwipeableModalActive = signal<boolean>(false);\n\n protected headerTemplate = signal<TemplateRef<any> | null>(null);\n protected footerTemplate = signal<TemplateRef<any> | null>(null);\n\n public isAnimated: boolean = false;\n public isCentered: boolean = false;\n public isSide: boolean = false;\n protected hasBanner: boolean = false;\n protected hasDefaultContentWrapperClass: boolean = false;\n\n private isConfirmCloseModalOpen: boolean = false;\n private isSpecialMobileOverflowHandlingEnabled: boolean = false;\n private isScrollDisabled: boolean = false;\n\n protected windowDimensions = this.windowDimensionService.dimensions;\n\n @ViewChild(\"modalContainer\", { static: true }) modalContainer?: ElementRef;\n\n @ViewChildren(ModalSide) sideModalComponents?: QueryList<ModalSide>;\n @ViewChildren(ModalCentered) centeredModalComponents?: QueryList<ModalCentered>;\n\n @ViewChild(\"contentTemplate\") contentTemplate?: TemplateRef<HTMLElement>;\n @ViewChild(\"dynamicContainer\", { read: ViewContainerRef }) dynamicContainer?: ViewContainerRef;\n\n constructor() {\n this.initKeyboardSubscription();\n\n effect(() => {\n const width = this.windowDimensions().width;\n this.handleWindowDimensionChange(width);\n });\n }\n\n public ngOnInit() {\n this.initParamsFromConfig();\n\n if (this.config?.style.handleMobile !== false && this.windowDimensionService.isMobile()) {\n this.isSwipeableModalActive.set(true);\n } else {\n this.isSwipeableModalActive.set(false);\n }\n }\n\n public ngAfterViewInit(): void {\n if (!this.componentRef) return;\n this.dynamicContainer?.insert(this.componentRef.hostView);\n }\n\n public ngOnDestroy(): void {\n this.componentRef?.destroy();\n this.dynamicContainer?.clear();\n }\n\n //#region Subscription Methods\n\n private initKeyboardSubscription(): void {\n fromEvent<KeyboardEvent>(document, \"keydown\")\n .pipe(\n filter((event: KeyboardEvent) => event.key === \"Escape\"),\n takeUntilDestroyed(),\n )\n .subscribe(() => {\n if (!this.isConfirmCloseModalOpen) {\n this.close(\"cancel\", undefined, true);\n }\n });\n }\n\n private handleWindowDimensionChange(width: number): void {\n if (this.config?.style.handleMobile === false) return;\n\n const smBreakpoint = this.windowDimensionService.breakpoints.sm;\n const currentSwipeState = this.isSwipeableModalActive(); \n\n if (width < smBreakpoint && !currentSwipeState) {\n this.isSwipeableModalActive.set(true);\n\n if (this.isOpen() && this.isSpecialMobileOverflowHandlingEnabled) {\n this.scrollLockService.disableScroll({\n mainContainer: this.modalContainer?.nativeElement,\n handleExtremeOverflow: this.config?.enableExtremeOverflowHandling ?? false,\n animationDuration: this.animationDuration,\n handleTouchInput: true,\n mobileOnlyTouchPrevention: true,\n });\n\n this.isScrollDisabled = true;\n }\n }\n\n if (width >= smBreakpoint && currentSwipeState) {\n this.isSwipeableModalActive.set(false);\n\n if (this.isOpen() && this.isSpecialMobileOverflowHandlingEnabled) {\n this.scrollLockService.enableScroll(this.config?.enableExtremeOverflowHandling ?? false);\n this.isScrollDisabled = false;\n }\n }\n }\n\n //#endregion\n\n //#region Initialization Methods\n\n private initParamsFromConfig() {\n this.isSpecialMobileOverflowHandlingEnabled = (this.deviceTypeService.getDeviceState().isAppleDevice || this.config?.webkitOnlyOverflowMobileHandling === false);\n\n this.hasBanner =\n this.config !== undefined &&\n ((this.config.bannerText !== undefined && this.config.bannerText.length > 0) ||\n (this.config.disableClose !== true && this.config.style.showCloseButton !== false && this.headerTemplate() === null));\n\n this.hasDefaultContentWrapperClass = this.config?.style.contentWrapper !== false;\n\n this.isAnimated = this.config?.style.animate === true;\n this.isCentered = this.config?.style.position === \"center\";\n this.isSide = this.config?.style.position === \"left\" || this.config?.style.position === \"right\";\n }\n\n //#endregion\n\n //#region Public Template Methods\n\n public setHeaderTemplate(template: TemplateRef<any>) {\n this.headerTemplate.set(template);\n }\n\n public setFooterTemplate(template: TemplateRef<any>) {\n this.footerTemplate.set(template);\n }\n\n //#endregion\n\n //#region Closing Methods\n\n public close(state: ModalCloseMode = \"cancel\", result: R | undefined = undefined, fromInsideInteraction: boolean = false, forceClose: boolean = false): void {\n if (this.isConfirmCloseModalOpen) return;\n\n if (this.isScrollDisabled) {\n this.scrollLockService.enableScroll(this.config?.enableExtremeOverflowHandling ?? false);\n }\n\n if ((this.config && this.config?.disableClose !== true) || !fromInsideInteraction || forceClose) {\n if (this.config?.confirmCloseConfig && this.shouldOpenConfirmCloseModal(forceClose, state)) {\n if (this.shouldOpenConfirmCloseModalSelfCheck()) {\n const modal = this.modalService.open<IGenericCloseResult, any>(this.config.confirmCloseConfig.confirmModalComponent, {\n style: this.config.confirmCloseConfig.style ?? {\n handleMobile: false,\n },\n disableClose: true,\n bannerText: this.config.confirmCloseConfig.bannerText ?? EMPTY_STRING,\n data: this.config.confirmCloseConfig.data ?? null,\n });\n\n this.isConfirmCloseModalOpen = true;\n\n if (this.isSwipeableModalActive()) {\n this.resetSwipeableModalPosition();\n }\n\n modal.afterClosed()\n .pipe(take(1))\n .subscribe((_result: IGenericCloseResult) => {\n this.isConfirmCloseModalOpen = false;\n if (_result.state === 'confirm') {\n this.handleClose(state, result);\n }\n });\n } else {\n if (this.config?.disableConsoleWarnings !== true) {\n console.warn(GenericModalWarnings.CONFIRM_MODAL_NESTING_NOT_SUPPORTED);\n }\n\n this.handleClose(state, result);\n }\n } else {\n this.handleClose(state, result);\n }\n } else if (this.isSwipeableModalActive()) {\n this.resetSwipeableModalPosition();\n }\n }\n\n private async handleClose(state: ModalCloseMode, result: R | undefined): Promise<void> {\n this.isOpen.set(false);\n this.setSwipeableModalFinishedState(true);\n\n const returnResult = {\n data: result,\n state: state,\n } as IGenericCloseResult<R | undefined>;\n\n if (this.closeFunction) {\n this.closeFunction(returnResult);\n }\n }\n\n protected onBackdropClick(event: MouseEvent) {\n this.backdropClickSubject.next(event);\n if (this.config?.style?.hasBackdrop && this.config?.disableCloseOnBackdropClick !== true) {\n this.close(\"cancel\", undefined, true);\n }\n }\n\n //#endregion\n\n //#region Logical Assertions\n\n private shouldOpenConfirmCloseModal(forceClose: boolean, state: ModalCloseMode): boolean {\n if (this.config?.confirmCloseConfig) {\n const closeNotCalledWithForceClose = !forceClose;\n\n if (closeNotCalledWithForceClose) {\n const configuredForConfirmClose = this.config.confirmCloseConfig.confirmClose === true;\n const closeCalledWithCancelState = state === \"cancel\";\n const configuredForConfirmCloseOnSubmit = this.config.confirmCloseConfig.confirmOnSubmit === true;\n\n return configuredForConfirmClose && (closeCalledWithCancelState || configuredForConfirmCloseOnSubmit);\n }\n }\n\n return false;\n }\n\n private shouldOpenConfirmCloseModalSelfCheck(): boolean {\n if (this.config?.confirmCloseConfig) {\n const hasSelfIdentifier = this.componentRef && this.componentRef.instance && this.componentRef.instance.modal && this.componentRef.instance.modal.selfIdentifier !== EMPTY_STRING;\n const bypassSelfCheck = this.config.confirmCloseConfig.bypassSelfCheck === true;\n\n return hasSelfIdentifier || bypassSelfCheck;\n }\n\n return false;\n }\n\n //#endregion\n\n //#region Helper Methods\n\n private getSwipeableModal(): ModalSwipeable | undefined {\n return this.sideModalComponents?.first?.swipeableComponents?.first\n ?? this.centeredModalComponents?.first?.swipeableComponents?.first\n }\n\n private resetSwipeableModalPosition(): void {\n const swipeableModal = this.getSwipeableModal();\n if (swipeableModal) {\n swipeableModal.currentTranslateY = 0;\n }\n }\n\n private setSwipeableModalFinishedState(isFinished: boolean): void {\n const swipeableModal = this.getSwipeableModal();\n if (swipeableModal) {\n swipeableModal.isSwipingVerticallyFinished = isFinished;\n }\n }\n\n //#endregion\n}\n","@if (config?.style?.hasBackdrop && (isSide || isSwipeableModalActive())) {\n<modal-backdrop [isAnimated]=\"isAnimated\" [isOpen]=\"isOpen()\" (click)=\"onBackdropClick($event)\">\n</modal-backdrop>\n}\n\n<ng-container #modalContainer>\n @switch (true) {\n @case (isSide) {\n <modal-side [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated\"\n [isSwipeableModalActive]=\"isSwipeableModalActive()\" [animationDuration]=\"animationDuration\"\n [hasDefaultContentWrapperClass]=\"hasDefaultContentWrapperClass\" [hasBanner]=\"hasBanner\" (close)=\"close($event)\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\">\n </ng-container>\n </modal-side>\n } \n @case (isCentered) {\n <modal-centered [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated\"\n [isSwipeableModalActive]=\"isSwipeableModalActive()\" [animationDuration]=\"animationDuration\"\n [hasDefaultContentWrapperClass]=\"hasDefaultContentWrapperClass\" [hasBanner]=\"hasBanner\" (close)=\"close($event)\"\n (onBackdropClick)=\"onBackdropClick($event)\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\">\n </ng-container>\n </modal-centered>\n }\n }\n</ng-container>\n\n<ng-template #contentTemplate>\n <ng-container #dynamicContainer></ng-container>\n</ng-template>","export const LOWEST_CHARACTER_CAP = 23;\nexport const LOWER_CHARACTER_CAP = 33;\nexport const MID_CHARACTER_CAP = 49;\nexport const UPPER_CHARACTER_CAP = 60;","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { GenericModalComponent } from '../components/generic-modal';\nimport { GenericModalWarnings } from '../enums/generic-modal-warnings.enum';\n\n@Directive({\n selector: '[modalFooter]', \n standalone: true\n})\nexport class ModalFooterDirective {\n private templateRef = inject(TemplateRef);\n private modal = inject(GenericModalComponent, { optional: true });\n\n constructor() {\n if (this.modal) {\n this.modal.setFooterTemplate(this.templateRef);\n } else {\n console.warn(GenericModalWarnings.FOOTER_DIRECTIVE_OUTSIDE_MODAL);\n }\n }\n}","/*\n * Public API Surface of modal\n */\n\nexport * from './lib/components/generic-modal';\nexport * from './lib/components/views/swipeable/modal-swipeable';\nexport * from './lib/components/views/side/modal-side';\nexport * from './lib/components/views/centered/modal-centered';\nexport * from './lib/components/shared/ui/backdrop/modal-backdrop';\nexport * from './lib/components/shared/ui/banner/modal-banner';\n\nexport * from './lib/services/generic-modal.service';\n\nexport * from './lib/classes/generic-modal';\nexport * from './lib/classes/generic-modal-config';\nexport * from './lib/classes/generic-modal-ref';\nexport * from './lib/classes/generic-modal-style.config';\n\nexport * from './lib/interfaces/igeneric-close-result.interface';\nexport * from './lib/interfaces/igeneric-confirm-close.interface';\nexport * from './lib/interfaces/igeneric-modal-component.interface';\nexport * from './lib/interfaces/igeneric-modal-config.interface';\nexport * from './lib/interfaces/igeneric-modal-ref.interface';\nexport * from './lib/interfaces/igeneric-modal-service.interface';\nexport * from './lib/interfaces/igeneric-modal-style-config.interface';\nexport * from './lib/interfaces/igeneric-modal-view.interface';\nexport * from './lib/interfaces/igeneric-swipeable-modal-config';\n\nexport * from './lib/constants/generic-modal-animation.constants';\nexport * from './lib/constants/generic-modal-common.constants';\nexport * from './lib/constants/generic-modal-swipe.constants';\nexport * from './lib/constants/generic-modal-text.constants';\n\nexport * from './lib/enums/generic-modal-errors.enum';\nexport * from './lib/enums/generic-modal-warnings.enum';\nexport * from './lib/enums/generic-modal-state.enum';\n\nexport * from './lib/directives/modal-footer.directive';\n\nexport * from './lib/tokens/generic-modal-data.token';\n\nexport * from './lib/types/modal.types';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["swipeConst.GENERIC_MODAL_SWIPE_VELOCITY_THRESHOLD","swipeConst.GENERIC_MODAL_DOWN_SWIPE_LIMIT","swipeConst.GENERIC_MODAL_UP_SWIPE_LIMIT","animConst.GENERIC_MODAL_DEFAULT_ANIM_DURATION"],"mappings":"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"}
1
+ {"version":3,"file":"filip.mazev-modal.mjs","sources":["../../../projects/modal/src/lib/constants/generic-modal-common.constants.ts","../../../projects/modal/src/lib/enums/generic-modal-warnings.enum.ts","../../../projects/modal/src/lib/classes/generic-modal-style.config.ts","../../../projects/modal/src/lib/classes/generic-modal-config.ts","../../../projects/modal/src/lib/enums/generic-modal-state.enum.ts","../../../projects/modal/src/lib/classes/generic-modal-ref.ts","../../../projects/modal/src/lib/classes/generic-modal.ts","../../../projects/modal/src/lib/enums/generic-modal-errors.enum.ts","../../../projects/modal/src/lib/tokens/generic-modal-data.token.ts","../../../projects/modal/src/lib/services/generic-modal.service.ts","../../../projects/modal/src/lib/components/shared/ui/backdrop/modal-backdrop.ts","../../../projects/modal/src/lib/components/shared/ui/backdrop/modal-backdrop.html","../../../projects/modal/src/lib/components/shared/ui/default-close-button/default-close-button.ts","../../../projects/modal/src/lib/components/shared/ui/default-close-button/default-close-button.html","../../../projects/modal/src/lib/components/shared/ui/banner/modal-banner.ts","../../../projects/modal/src/lib/components/shared/ui/banner/modal-banner.html","../../../projects/modal/src/lib/constants/generic-modal-swipe.constants.ts","../../../projects/modal/src/lib/components/views/swipeable/modal-swipeable.ts","../../../projects/modal/src/lib/components/views/swipeable/modal-swipeable.html","../../../projects/modal/src/lib/components/views/centered/modal-centered.ts","../../../projects/modal/src/lib/components/views/centered/modal-centered.html","../../../projects/modal/src/lib/components/views/side/modal-side.ts","../../../projects/modal/src/lib/components/views/side/modal-side.html","../../../projects/modal/src/lib/constants/generic-modal-animation.constants.ts","../../../projects/modal/src/lib/components/generic-modal.ts","../../../projects/modal/src/lib/components/generic-modal.html","../../../projects/modal/src/lib/constants/generic-modal-text.constants.ts","../../../projects/modal/src/lib/directives/modal-footer.directive.ts","../../../projects/modal/src/public-api.ts","../../../projects/modal/src/filip.mazev-modal.ts"],"sourcesContent":["export const EMPTY_STRING = '';","export enum GenericModalWarnings {\n //#region Multi-level modals\n NO_PARENT_PROVIDED = \"No parent modal provided for multilevel modal. Please provide a parent modal or set openAsMultilevel to false.\",\n MULTILEVEL_INLINE_NOT_SUPPORTED = \"As of this version, opening a multi-level modal from inline HTML is not possible. Please set openAsMultilevel to false or open your modal through the GenericModalService! Opening modal as normal modal.\",\n MULTILEVEL_NO_PARENT = \"Cannot open a multilevel modal with only one modal open. Please open another modal before opening a multilevel modal or set openAsMultilevel to false.\",\n PARENT_MODAL_NOT_SET = \"Error setting parent modal. Opening modal as normal modal\",\n //#endregion\n\n //#region Confirm close\n CONFIRM_MODAL_NESTING_NOT_SUPPORTED = \"Cannot open a confirm modal from within a confirm modal. If you want to allow this behaviour, set bypassSelfCheck to true in the confirmCloseConfig.\",\n //#endregion\n\n //#region Directive usage\n FOOTER_DIRECTIVE_OUTSIDE_MODAL = \"[ModalFooter] Directive used outside of a GenericModalComponent.\",\n HEADER_DIRECTIVE_OUTSIDE_MODAL = \"[ModalHeader] Directive used outside of a GenericModalComponent.\",\n //#endregion\n}","import { EMPTY_STRING } from \"../constants/generic-modal-common.constants\";\nimport { IGenericModalStyleConfig } from \"../interfaces/igeneric-modal-style-config.interface\";\nimport { IGenericSwipeableModalConfig } from \"../interfaces/igeneric-swipeable-modal-config\";\nimport { ModalPoistion } from \"../types/modal.types\";\n\nexport class GenericModalStyleConfig implements IGenericModalStyleConfig {\n position: ModalPoistion;\n handleMobile: boolean;\n\n animate: boolean;\n hasBackdrop: boolean;\n closeDelay?: number;\n showCloseButton?: boolean;\n\n mobileConfig: IGenericSwipeableModalConfig;\n\n contentWrapper: boolean;\n\n wrapperClasses: string;\n wrapperStyles: string;\n\n overrideFullHeight: boolean;\n\n constructor(config?: IGenericModalStyleConfig) {\n this.position = config?.position ?? \"center\";\n this.handleMobile = config?.handleMobile ?? true;\n\n this.animate = config?.animate ?? true;\n this.hasBackdrop = config?.hasBackdrop ?? true;\n this.closeDelay = config?.closeDelay;\n this.showCloseButton = config?.showCloseButton ?? true;\n\n this.mobileConfig = config?.mobileConfig ?? {};\n\n this.contentWrapper = config?.contentWrapper ?? true;\n\n this.wrapperClasses = config?.wrapperClasses ?? EMPTY_STRING;\n this.wrapperStyles = config?.wrapperStyles ?? EMPTY_STRING;\n\n this.overrideFullHeight = config?.overrideFullHeight ?? false;\n }\n}\n","import { EMPTY_STRING } from \"../constants/generic-modal-common.constants\";\nimport { IGenericConfirmCloseConfig } from \"../interfaces/igeneric-confirm-close.interface\";\nimport { IGenericModalConfig } from \"../interfaces/igeneric-modal-config.interface\";\nimport { IGenericModalStyleConfig } from \"../interfaces/igeneric-modal-style-config.interface\";\nimport { GenericModal } from \"./generic-modal\";\nimport { GenericModalStyleConfig } from \"./generic-modal-style.config\";\nimport { uuidv4 } from \"@filip.mazev/blocks-core\";\n\nexport class GenericModalConfig<\n D = unknown,\n ConfirmComponentData = any,\n ConfirmComponent extends GenericModal<ConfirmComponentData, undefined> = GenericModal<ConfirmComponentData, undefined>> {\n public open: boolean;\n\n public afterClose?: Function;\n public confirmCloseConfig?: IGenericConfirmCloseConfig<ConfirmComponentData, ConfirmComponent>;\n\n public disableClose: boolean;\n public disableCloseOnBackdropClick: boolean;\n public disableCloseOnNavigation: boolean;\n\n public enableExtremeOverflowHandling?: boolean;\n public webkitOnlyOverflowMobileHandling?: boolean;\n\n public data: D | null;\n\n public style: IGenericModalStyleConfig;\n\n public bannerText: string;\n\n public contentClasses: string;\n public contentStyles: string;\n\n public disableConsoleWarnings: boolean;\n public disableConsoleInfo: boolean;\n\n public id: string;\n\n constructor(config?: IGenericModalConfig<D, ConfirmComponentData, ConfirmComponent>) {\n this.open = config?.open ?? true;\n\n this.afterClose = config?.afterClose;\n\n this.confirmCloseConfig = config?.confirmCloseConfig;\n\n this.disableClose = config?.disableClose ?? false;\n this.disableCloseOnBackdropClick = config?.disableCloseOnBackdropClick ?? false;\n this.disableCloseOnNavigation = config?.disableCloseOnNavigation ?? false;\n\n this.enableExtremeOverflowHandling = config?.enableExtremeOverflowHandling ?? false;\n this.webkitOnlyOverflowMobileHandling = config?.webkitOnlyOverflowMobileHandling ?? true;\n\n this.data = config?.data ?? null;\n this.style = new GenericModalStyleConfig(config?.style);\n\n this.bannerText = config?.bannerText ?? EMPTY_STRING;\n\n this.contentClasses = config?.contentClasses ?? EMPTY_STRING;\n this.contentStyles = config?.contentStyles ?? EMPTY_STRING;\n\n this.disableConsoleWarnings = config?.disableConsoleWarnings ?? false;\n this.disableConsoleInfo = config?.disableConsoleInfo ?? false;\n\n this.id = config?.id ?? uuidv4();\n }\n}\n","export enum GenericModalState {\n OPEN = \"open\",\n OPENING = \"opening\",\n CLOSED = \"closed\",\n CLOSING = \"closing\",\n}\n","import { ComponentRef, Type } from \"@angular/core\";\nimport { BehaviorSubject, Observable, Subject } from \"rxjs\";\nimport { GenericModalConfig } from \"./generic-modal-config\";\nimport { GenericModalComponent } from \"../components/generic-modal\";\nimport { GenericModalState } from \"../enums/generic-modal-state.enum\";\nimport { IGenericCloseResult } from \"../interfaces/igeneric-close-result.interface\";\nimport { IGenericModalRef } from \"../interfaces/igeneric-modal-ref.interface\";\nimport { GenericModalService } from \"../services/generic-modal.service\";\nimport { ModalCloseMode } from \"../types/modal.types\";\nimport { GenericModal } from \"./generic-modal\";\n\nexport class GenericModalRef<\n D = unknown,\n R = any,\n C extends GenericModal<D, R> = GenericModal<D, R>> implements IGenericModalRef<D, R, C> {\n\n //#region Modal Container\n\n private _modalContainer: Type<GenericModalComponent<D, R, C>> = {} as Type<GenericModalComponent<D, R, C>>;\n\n private set modalContainer(modalContainer: Type<GenericModalComponent<D, R, C>>) {\n this._modalContainer = modalContainer;\n }\n\n public get modalContainer(): Type<GenericModalComponent<D, R, C>> {\n return this._modalContainer;\n }\n\n private _modalContainerRef: ComponentRef<GenericModalComponent<D, R, C>> = {} as ComponentRef<GenericModalComponent<D, R, C>>;\n\n private set modalContainerRef(modalContainerRef: ComponentRef<GenericModalComponent<D, R, C>>) {\n this._modalContainerRef = modalContainerRef;\n }\n\n public get modalContainerRef(): ComponentRef<GenericModalComponent<D, R, C>> {\n return this._modalContainerRef;\n }\n\n private _modalContainerElement: HTMLElement = {} as HTMLElement;\n\n private set modalContainerElement(modalContainerElement: HTMLElement) {\n this._modalContainerElement = modalContainerElement;\n }\n\n public get modalContainerElement(): HTMLElement {\n return this._modalContainerElement;\n }\n\n private _parentElement: HTMLElement | undefined = undefined;\n\n private set parentElement(parentElement: HTMLElement | undefined) {\n this._parentElement = parentElement;\n }\n\n public get parentElement(): HTMLElement | undefined {\n return this._parentElement;\n }\n\n //#endregion\n\n //#region Component\n\n private _componentRef: ComponentRef<C> = {} as ComponentRef<C>;\n\n private set componentRef(componentRef: ComponentRef<C>) {\n this._componentRef = componentRef;\n }\n\n public get componentRef(): ComponentRef<C> {\n return this._componentRef;\n }\n\n //#endregion\n\n //#region Self\n\n private _modalState: GenericModalState = GenericModalState.CLOSED;\n\n private modalState = new BehaviorSubject<GenericModalState>(this.getStatus());\n\n public modalState$(): Observable<GenericModalState> {\n return this.modalState.asObservable();\n }\n\n private getStatus(): GenericModalState {\n return this._modalState;\n }\n\n private _selfIdentifier: { constructor: Function } = {} as {\n constructor: Function;\n };\n\n private set selfIdentifier(selfIdentifier: { constructor: Function }) {\n this._selfIdentifier = selfIdentifier;\n }\n\n public get selfIdentifier(): { constructor: Function } {\n return this._selfIdentifier;\n }\n\n private _modalConfig?: GenericModalConfig<D> = undefined;\n\n private set modalConfig(modalConfig: GenericModalConfig<D> | undefined) {\n this._modalConfig = modalConfig;\n }\n\n public get modalConfig(): GenericModalConfig<D> | undefined {\n return this._modalConfig;\n }\n //#endregion\n\n //#region Observables\n\n private backdropClickSubject: Subject<MouseEvent> = new Subject<MouseEvent>();\n\n public backdropClick(): Observable<MouseEvent> {\n return this.backdropClickSubject.asObservable();\n }\n\n private backdropClicked(event: MouseEvent) {\n this.backdropClickSubject.next(event);\n }\n\n private afterCloseSubject: Subject<IGenericCloseResult<R>> = new Subject<IGenericCloseResult<R>>();\n\n public afterClosed(): Observable<IGenericCloseResult<R>> {\n return this.afterCloseSubject.asObservable();\n }\n\n private afterClose(result: IGenericCloseResult<R>) {\n this.afterCloseSubject.next(result);\n }\n\n //#endregion\n\n constructor(\n componentRef: ComponentRef<C>,\n selfIdentifier: { constructor: Function },\n modalContainerRef: ComponentRef<GenericModalComponent<D, R, C>>,\n private modalService: GenericModalService,\n modalConfig?: GenericModalConfig<D>,\n ) {\n this.modalConfig = modalConfig;\n this.modalContainerRef = modalContainerRef;\n this.modalContainerElement = modalContainerRef.location.nativeElement;\n\n this.componentRef = componentRef;\n this.selfIdentifier = selfIdentifier;\n }\n\n //#region Public Methods\n\n public async open(): Promise<void> {\n this._modalState = GenericModalState.OPENING;\n this.modalState.next(GenericModalState.OPENING);\n\n this.modalContainerRef.instance.componentRef = this._componentRef;\n\n const config = new GenericModalConfig(this.modalConfig);\n\n this.modalContainerRef.instance.config = config;\n\n this.modalContainerRef.instance.closeFunction = this.handleClose.bind(this);\n\n this.parentElement?.appendChild(this.modalContainerElement);\n\n this.modalContainerRef.instance.backdropClick.subscribe((event) => {\n this.backdropClicked(event);\n });\n\n this._modalState = GenericModalState.OPEN;\n this.modalState.next(GenericModalState.OPEN);\n }\n\n public close(state: ModalCloseMode = \"cancel\", result: R | undefined = undefined, forceClose: boolean = false): void {\n this.modalContainerRef.instance.close(state, result, false, forceClose);\n }\n\n //#endregion\n\n //#region Private Methods\n\n private handleClose(result: IGenericCloseResult<R>): void {\n this._modalState = GenericModalState.CLOSING;\n this.modalState.next(GenericModalState.CLOSING);\n\n setTimeout(\n () => {\n if (this.modalConfig?.afterClose) {\n this.modalConfig.afterClose();\n }\n\n this.modalContainerRef.destroy();\n\n this._modalState = GenericModalState.CLOSED;\n this.modalState.next(GenericModalState.CLOSED);\n\n this.afterClose(result);\n this.modalService?.close(this.selfIdentifier, true);\n }, this.modalContainerRef.instance.animationDuration);\n }\n //#endregion\n}\n","import { Injectable, OnDestroy, inject } from \"@angular/core\";\nimport { GenericModalRef } from \"./generic-modal-ref\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { GenericModalService } from \"../services/generic-modal.service\";\n\n@Injectable()\nexport abstract class GenericModal<D, R> implements OnDestroy {\n protected genericModalService = inject(GenericModalService);\n\n modal?: GenericModalRef<D, R>;\n\n protected modalGetSubscription$ = new Subject<void>();\n\n constructor() {\n this.createModalSubscription();\n }\n\n ngOnDestroy(): void {\n this.onDestroy();\n this.unsubscribeModalGet();\n }\n\n protected createModalSubscription() {\n this.modalGetSubscription$ = new Subject<void>();\n\n this.genericModalService\n .getSubscribe<D, R>(this.constructor)\n .pipe(takeUntil(this.modalGetSubscription$))\n .subscribe((modal) => {\n if (modal instanceof GenericModalRef) {\n this.modal = modal;\n this.afterModalGet();\n this.modalGetSubscription$.next();\n this.modalGetSubscription$.complete();\n }\n });\n }\n\n protected unsubscribeModalGet() {\n this.modalGetSubscription$.next();\n this.modalGetSubscription$.complete();\n }\n\n abstract afterModalGet(): void;\n abstract onDestroy(): void;\n\n public close() {\n this.modal?.close();\n }\n}\n","export enum GenericModalErrors {\n //#region General\n MODAL_DOESNT_MATCH_THE_REQUESTED_TYPES = \"The modal doesn't match the requested types.\",\n GENERIC_MODAL_SERVICE_RENDERER_NOT_SET = \"ViewContainer and Renderer not set, please set the view container in the constructor of app.module.ts / app.ts (by calling register), before opening a modal\",\n //#endregion\n\n //#region Multi-level modals\n PARENT_MODAL_CANT_BE_THE_SAME_AS_CHILD = \"Parent modal cannot be the same as the child modal\",\n PARENT_MODAL_NOT_FOUND = \"Parent modal does not exist\",\n PARENT_MODAL_NOT_PROVIDED = \"No parent modal provided for multilevel modal\",\n //#endregion\n}","import { InjectionToken } from \"@angular/core\";\n\nexport const GENERIC_MODAL_DATA: InjectionToken<any> = new InjectionToken<any>(\"GENERIC_MODAL_DATA\");\n","import { Injectable, inject, Injector, ViewContainerRef, Renderer2 } from \"@angular/core\";\nimport { Router, NavigationEnd } from \"@angular/router\";\nimport { BehaviorSubject, Subject, filter, takeUntil, Observable, map, skip } from \"rxjs\";\nimport { GenericModal } from \"../classes/generic-modal\";\nimport { GenericModalConfig } from \"../classes/generic-modal-config\";\nimport { GenericModalRef } from \"../classes/generic-modal-ref\";\nimport { GenericModalComponent } from \"../components/generic-modal\";\nimport { GenericModalErrors } from \"../enums/generic-modal-errors.enum\";\nimport { IGenericModalConfig } from \"../interfaces/igeneric-modal-config.interface\";\nimport { IGenericModalService } from \"../interfaces/igeneric-modal-service.interface\";\nimport { GENERIC_MODAL_DATA } from \"../tokens/generic-modal-data.token\";\nimport { ComponentType } from \"@angular/cdk/portal\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class GenericModalService implements IGenericModalService {\n private router = inject(Router);\n protected injector = inject(Injector);\n\n //#region Properties\n\n private modals: Map<{ constructor: Function }, GenericModalRef | GenericModalComponent> = new Map();\n private modalsSubject = new BehaviorSubject<Map<{ constructor: Function }, GenericModalRef | GenericModalComponent>>(this.modals);\n\n public viewContainer?: ViewContainerRef;\n public renderer?: Renderer2;\n\n //#endregion\n\n constructor() {\n this.createSubscriptions();\n }\n\n //#region Private Methods\n\n private createSubscriptions(): void {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n skip(1), \n takeUntilDestroyed()\n )\n .subscribe(() => {\n if (this.modalsCount() > 0) {\n this.closeAll(true);\n }\n });\n }\n\n //#endregion\n\n //#region Public Methods\n\n public register(viewContainer: ViewContainerRef, renderer: Renderer2): void {\n this.viewContainer = viewContainer;\n this.renderer = renderer;\n }\n\n public open<D, R, C extends GenericModal<D, R> = GenericModal<D, R>>(component: ComponentType<C>, config?: IGenericModalConfig<D>): GenericModalRef<D, R, C> {\n if (!this.viewContainer || !this.renderer) {\n throw new Error(GenericModalErrors.GENERIC_MODAL_SERVICE_RENDERER_NOT_SET);\n }\n\n const dataInjector = Injector.create({\n providers: [{ provide: GENERIC_MODAL_DATA, useValue: config?.data }],\n parent: this.injector,\n });\n\n const wrapperRef = this.viewContainer.createComponent(GenericModalComponent<D, R, C>, {\n injector: dataInjector,\n });\n\n const contentInjector = Injector.create({\n providers: [\n { provide: GenericModalComponent, useValue: wrapperRef.instance }\n ],\n parent: wrapperRef.injector,\n });\n\n const contentRef = this.viewContainer.createComponent(component, {\n injector: contentInjector,\n });\n\n const modal = new GenericModalRef<D, R, C>(\n contentRef,\n component,\n wrapperRef,\n this,\n new GenericModalConfig(config),\n );\n\n const modalElement = modal.componentRef.location.nativeElement;\n this.renderer.setStyle(modalElement, 'height', '97%');\n this.renderer.setStyle(modalElement, 'width', '100%');\n this.renderer.setStyle(modalElement, 'display', 'flex');\n this.renderer.setStyle(modalElement, 'flex-grow', '1');\n\n this.modals.set(modal.selfIdentifier, modal);\n this.modalsSubject.next(this.modals);\n\n modal.open();\n\n return modal;\n }\n\n public close(self: { constructor: Function }, fromCloseFunction: boolean | undefined = false): void {\n if (this.modals.has(self)) {\n if (fromCloseFunction !== true) {\n\n const modal = this.modals.get(self);\n if (modal && modal instanceof GenericModalRef) {\n modal.close();\n }\n }\n this.modals.delete(self);\n this.modalsSubject.next(this.modals);\n }\n }\n\n public closeAll(onNavigate: boolean = false): void {\n this.modals.forEach((modal) => {\n if (modal instanceof GenericModalRef) {\n if (modal.modalConfig?.disableCloseOnNavigation !== true || !onNavigate) {\n modal.close(\"cancel\", undefined, true);\n }\n }\n });\n\n this.modals.clear();\n this.modalsSubject.next(this.modals);\n }\n\n public get<D, R, C extends GenericModal<D, R> = GenericModal<D, R>>(self: { constructor: Function }): GenericModalRef<D, R, C> | GenericModalComponent<D, R, C> | undefined {\n const modal = this.modals.get(self);\n this.modalRequestedTypeCheck(modal);\n return modal as GenericModalRef<D, R, C> | GenericModalComponent<D, R, C> | undefined;\n }\n\n public getSubscribe<D, R, C extends GenericModal<D, R> = GenericModal<D, R>>(self: { constructor: Function }): Observable<GenericModalRef<D, R, C> | GenericModalComponent<D, R, C> | undefined> {\n return this.modalsSubject.asObservable().pipe(map((modals) => {\n const modal = modals.get(self);\n this.modalRequestedTypeCheck(modal);\n return modal as GenericModalRef<D, R, C> | GenericModalComponent<D, R, C> | undefined;\n }));\n }\n\n public modalsCount(): number {\n return this.modals.size;\n }\n\n public find(self: { constructor: Function }): boolean {\n return this.modals.has(self);\n }\n\n //#endregion\n\n //#region Helper Methods\n\n public modalRequestedTypeCheck(modal: GenericModalRef | GenericModalComponent | undefined): boolean {\n if (modal) {\n if (modal instanceof GenericModalRef) {\n if (!(modal.componentRef.instance instanceof GenericModal)) {\n throw new Error(GenericModalErrors.MODAL_DOESNT_MATCH_THE_REQUESTED_TYPES);\n }\n } else if (!(modal instanceof GenericModalComponent)) {\n throw new Error(GenericModalErrors.MODAL_DOESNT_MATCH_THE_REQUESTED_TYPES);\n }\n }\n\n return true;\n }\n\n //#endregion\n}\n","import { Component, input, output } from \"@angular/core\";\n\n@Component({\n selector: 'modal-backdrop',\n imports: [],\n templateUrl: './modal-backdrop.html',\n styleUrls: ['./modal-backdrop.scss']\n})\nexport class ModalBackdrop {\n readonly isAnimated = input(false);\n readonly isOpen = input(false);\n \n readonly click = output<MouseEvent>();\n}","<div class=\"modal-backdrop\" [class.backdrop-fade-in]=\"isAnimated() && isOpen()\"\n [class.backdrop-fade-out]=\"isAnimated() && !isOpen()\" (click)=\"click.emit($event)\">\n</div>","import { Component, input, output } from '@angular/core';\nimport { GenericModalConfig, ModalCloseMode } from '../../../../../public-api';\n\n@Component({\n selector: 'modal-default-close-button',\n imports: [],\n templateUrl: './default-close-button.html',\n styleUrl: './default-close-button.scss',\n})\nexport class ModalDefaultCloseButton<D = unknown> {\n readonly config = input.required<GenericModalConfig<D> | undefined>();\n\n readonly close = output<ModalCloseMode | undefined>();\n}"," @if (config()?.disableClose !== true && config()?.style?.showCloseButton !== false) {\n <svg (click)=\"close.emit('cancel')\" aria-label=\"Close\" class=\"default-close-button\" viewBox=\"0 0 24 24\"\n fill=\"#ffffff\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.4 24L0 21.6L9.6 12L0 2.4L2.4 0L12 9.6L21.6 0L24 2.4L14.4 12L24 21.6L21.6 24L12 14.4L2.4 24Z\"\n fill=\"#ffffff\" />\n </svg>\n }","import { Component, input, output } from \"@angular/core\";\nimport { GenericModalConfig } from \"../../../../classes/generic-modal-config\";\nimport { ModalCloseMode } from \"../../../../types/modal.types\";\nimport { ModalDefaultCloseButton } from \"../default-close-button/default-close-button\";\n\n@Component({\n selector: 'modal-banner',\n imports: [\n ModalDefaultCloseButton\n ],\n templateUrl: './modal-banner.html',\n styleUrl: './modal-banner.scss',\n})\nexport class ModalBanner<D = unknown> {\n readonly config = input.required<GenericModalConfig<D> | undefined>();\n\n readonly close = output<ModalCloseMode | undefined>();\n}","<div class=\"modal-top-banner-container\">\n <div class=\"modal-top-banner-title-container\">\n @if (config() && config()?.bannerText && (config() && config()!.bannerText.length > 0)) {\n <div class=\"modal-banner-default-style\">\n <div class=\"generic-modal-banner-text\">\n <div>\n {{ config()?.bannerText }}\n </div>\n </div>\n </div>\n }\n </div>\n \n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n</div>","export const GENERIC_MODAL_DOWN_SWIPE_LIMIT = 2;\nexport const GENERIC_MODAL_UP_SWIPE_LIMIT = 1;\nexport const GENERIC_MODAL_SWIPE_VELOCITY_THRESHOLD = 80; ","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, ElementRef, OnDestroy, OnInit, TemplateRef, ViewChild, input, output } from '@angular/core';\nimport { Subject, take } from 'rxjs';\nimport { GenericModalConfig } from '../../../classes/generic-modal-config';\nimport { ModalCloseMode } from '../../../types/modal.types';\nimport * as swipeConst from '../../../constants/generic-modal-swipe.constants';\n\n@Component({\n selector: 'modal-swipeable',\n imports: [\n NgClass,\n NgTemplateOutlet\n ],\n templateUrl: './modal-swipeable.html',\n styleUrl: './modal-swipeable.scss',\n})\nexport class ModalSwipeable implements OnInit, OnDestroy {\n readonly headerTemplate = input.required<TemplateRef<any> | null>();\n readonly footerTemplate = input.required<TemplateRef<any> | null>();\n \n readonly config = input.required<GenericModalConfig<any> | undefined>();\n readonly isOpen = input.required<boolean>();\n readonly isAnimated = input.required<boolean>();\n readonly animationDuration = input.required<number>();\n\n readonly close = output<ModalCloseMode | undefined>();\n\n public currentTranslateY: number = 0;\n public isSwipingVerticallyFinished: boolean = false;\n\n protected isSwipingVertically: boolean = false;\n\n protected downSwipeLimit: number = 0;\n protected upSwipeLimit: number = 0;\n\n protected windowInnerHeight: number = window.innerHeight;\n\n protected isTrackingSwipe: boolean = false;\n\n private isTouchActive = false;\n private swipeableModalInitiated: boolean = false;\n private globalPointerListenerAdded = false;\n\n private touchDetectionUnsubscribe$ = new Subject<void>();\n\n @ViewChild(\"verticalSwipeTarget\", { static: true }) verticalSwipeTarget?: ElementRef;\n @ViewChild(\"modalContent\", { static: true }) modalContent?: ElementRef;\n\n public ngOnInit(): void {\n this.startVerticalSwipeDetection();\n this.monitorInputType();\n }\n\n public ngOnDestroy(): void {\n this.stopVerticalSwipeDetection();\n }\n\n //#region Swipe Methods\n\n private startVerticalSwipeDetection(): void {\n if (this.isTrackingSwipe) return;\n\n const hasTouch = window.matchMedia('(pointer: coarse)').matches || navigator.maxTouchPoints > 0;\n if (!hasTouch) return;\n\n this.initSwipeableModalParams();\n\n this.touchDetectionUnsubscribe$ = new Subject<void>();\n this.isTrackingSwipe = true;\n\n const target = this.verticalSwipeTarget?.nativeElement;\n if (!target) return;\n\n const limit = document.body.offsetHeight / this.downSwipeLimit;\n\n let startY = 0;\n let currentY = 0;\n let isPointerDown = false;\n\n const pointerDown = (event: PointerEvent) => {\n isPointerDown = true;\n startY = event.clientY;\n this.isSwipingVertically = true;\n };\n\n const pointerMove = (event: PointerEvent) => {\n if (!isPointerDown) return;\n currentY = event.clientY - startY;\n\n event.preventDefault();\n this.currentTranslateY = currentY;\n };\n\n const pointerUp = (event: PointerEvent) => {\n if (!isPointerDown) return;\n isPointerDown = false;\n this.isSwipingVertically = false;\n\n const deltaY = event.clientY - startY;\n const velocityY = (event.clientY - startY) / (event.timeStamp - (event as any).startTime || 1);\n\n if (Math.abs(deltaY) > limit || velocityY > swipeConst.GENERIC_MODAL_SWIPE_VELOCITY_THRESHOLD) {\n this.close.emit('cancel');\n } else {\n this.currentTranslateY = 0;\n }\n };\n\n target.addEventListener('pointerdown', pointerDown);\n target.addEventListener('pointermove', pointerMove);\n target.addEventListener('pointerup', pointerUp);\n target.addEventListener('pointercancel', pointerUp);\n\n this.touchDetectionUnsubscribe$.pipe(take(1)).subscribe(() => {\n target.removeEventListener('pointerdown', pointerDown);\n target.removeEventListener('pointermove', pointerMove);\n target.removeEventListener('pointerup', pointerUp);\n target.removeEventListener('pointercancel', pointerUp);\n });\n }\n\n private stopVerticalSwipeDetection(): void {\n if (!this.isTrackingSwipe) return;\n\n this.isTrackingSwipe = false;\n\n this.touchDetectionUnsubscribe$.next();\n this.touchDetectionUnsubscribe$.complete();\n }\n\n private initSwipeableModalParams(): void {\n if (!this.swipeableModalInitiated) {\n this.swipeableModalInitiated = true;\n\n const config = this.config();\n this.downSwipeLimit = config?.style.mobileConfig?.downSwipeLimit\n ? config.style.mobileConfig.downSwipeLimit > 0\n ? config.style.mobileConfig.downSwipeLimit\n : 1\n : swipeConst.GENERIC_MODAL_DOWN_SWIPE_LIMIT;\n\n const configValue = this.config();\n this.upSwipeLimit = configValue?.style.mobileConfig?.upSwipeLimit\n ? configValue.style.mobileConfig.upSwipeLimit > 0\n ? configValue.style.mobileConfig.upSwipeLimit\n : swipeConst.GENERIC_MODAL_UP_SWIPE_LIMIT\n : window.innerHeight;\n }\n }\n\n private monitorInputType(): void {\n if (this.globalPointerListenerAdded) return;\n this.globalPointerListenerAdded = true;\n\n window.addEventListener('pointerdown', (event: PointerEvent) => {\n const isTouch = event.pointerType === 'touch';\n\n if (isTouch && !this.isTouchActive) {\n this.isTouchActive = true;\n this.startVerticalSwipeDetection();\n } else if (!isTouch && this.isTouchActive) {\n this.isTouchActive = false;\n this.stopVerticalSwipeDetection();\n }\n });\n }\n\n //#endregion\n}\n","<div (click)=\"$event.stopPropagation()\" [id]=\"config()?.id ?? ''\"\n [class]=\"config()?.style?.wrapperClasses !== undefined ? config()!.style.wrapperClasses! : ''\"\n [style]=\"config()?.style?.wrapperStyles !== undefined ? config()!.style.wrapperStyles! : ''\"\n [style.max-height]=\"config() && config()?.style?.mobileConfig && config()?.style?.mobileConfig?.customHeight ? config()?.style?.mobileConfig?.customHeight : ''\"\n [style.transform]=\"!isSwipingVerticallyFinished\n ? 'translateY(' + (currentTranslateY * -1 > windowInnerHeight / upSwipeLimit ? (windowInnerHeight / upSwipeLimit) * -1 : currentTranslateY) + 'px)'\n : 'translateY(100%)'\"\n [style.transition]=\"isAnimated() && !isSwipingVertically ? '300ms ease-in-out' : ''\" [ngClass]=\"{\n 'opened-swipeable-modal': isAnimated()\n }\" data-horizontal-swipe-target=\"swipeable-modal\" class=\"swipeable-modal-style\">\n \n <div #verticalSwipeTarget class=\"touch-hitbox\" class=\"swipeable-modal-top-bar\"\n (click)=\"isTrackingSwipe ? null : close.emit('cancel')\">\n <div class=\"swipe-line\"></div>\n </div>\n\n <div class=\"swipeable-modal-inner-content-container\">\n <div class=\"swipeable-modal-top-group\">\n @if (headerTemplate()) {\n <div class=\"swipeable-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n </div>\n }\n\n <div class=\"swipeable-modal-main-content-container\"\n [style.animationDuration]=\"isAnimated() ? animationDuration().toString() + 'ms' : '0ms'\">\n <ng-content></ng-content>\n </div>\n </div>\n\n @if (footerTemplate()) {\n <div class=\"swipeable-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n </div>\n</div>","import { NgTemplateOutlet, NgClass } from \"@angular/common\";\nimport { Component, input, output, ViewChildren, QueryList, TemplateRef, computed } from \"@angular/core\";\nimport { GenericModalConfig } from \"../../../classes/generic-modal-config\";\nimport { IGenericModalView } from \"../../../interfaces/igeneric-modal-view.interface\";\nimport { ModalCloseMode } from \"../../../types/modal.types\";\nimport { ModalBanner } from \"../../shared/ui/banner/modal-banner\";\nimport { ModalSwipeable } from \"../swipeable/modal-swipeable\";\nimport { ModalDefaultCloseButton } from \"../../shared/ui/default-close-button/default-close-button\";\n\n@Component({\n selector: 'modal-centered',\n imports: [\n NgTemplateOutlet,\n NgClass,\n ModalSwipeable,\n ModalBanner,\n ModalDefaultCloseButton\n ],\n templateUrl: './modal-centered.html',\n styleUrl: './modal-centered.scss'\n})\nexport class ModalCentered<D = unknown> implements IGenericModalView<D> {\n readonly headerTemplate = input.required<TemplateRef<any> | null>();\n readonly footerTemplate = input.required<TemplateRef<any> | null>();\n\n readonly config = input.required<GenericModalConfig<D> | undefined>();\n readonly isOpen = input.required<boolean>();\n readonly isAnimated = input.required<boolean>();\n readonly isSwipeableModalActive = input.required<boolean>();\n readonly animationDuration = input.required<number>();\n readonly hasDefaultContentWrapperClass = input.required<boolean>();\n readonly hasBanner = input.required<boolean>();\n\n readonly close = output<ModalCloseMode | undefined>();\n readonly onBackdropClick = output<MouseEvent>();\n\n @ViewChildren(ModalSwipeable) swipeableComponents!: QueryList<ModalSwipeable>;\n\n public modalClasses = computed(() => {\n return {\n 'centered-modal-content-wrapper': true,\n 'centered-modal-default-style': this.hasDefaultContentWrapperClass() || this.hasBanner(),\n\n 'centered-modal-animate-in': this.isAnimated() && this.isOpen(),\n 'centered-modal-animate-out': this.isAnimated() && !this.isOpen(),\n };\n });\n}","@if(!isSwipeableModalActive()) {\n<div class=\"modal-overlay\" [ngClass]=\"{'modal-backdrop': config()?.style?.hasBackdrop}\" (click)=\"\n config()?.style?.hasBackdrop ? onBackdropClick.emit($event) : null\">\n <div class=\"modal-overlay-wrapper\">\n <div [ngClass]=\"modalClasses()\" (click)=\"$event.stopPropagation()\">\n <div class=\"centered-modal-inner-content-container\"\n [class]=\"config()?.style?.wrapperClasses ?? ''\"\n [style]=\"config()?.style?.wrapperStyles ?? ''\">\n \n <div class=\"centered-modal-top-group\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"centered-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"centered-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n\n @if (footerTemplate()) {\n <div class=\"centered-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>","import { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { Component, QueryList, TemplateRef, ViewChildren, effect, input, output, signal, computed } from '@angular/core';\nimport { GenericModalConfig } from '../../../classes/generic-modal-config';\nimport { IGenericModalView } from '../../../interfaces/igeneric-modal-view.interface';\nimport { ModalCloseMode } from '../../../types/modal.types';\nimport { ModalBanner } from '../../shared/ui/banner/modal-banner';\nimport { ModalSwipeable } from '../swipeable/modal-swipeable';\nimport { ModalDefaultCloseButton } from '../../shared/ui/default-close-button/default-close-button';\nimport * as animConst from '../../../constants/generic-modal-animation.constants';\n\n@Component({\n selector: 'modal-side',\n imports: [\n NgTemplateOutlet,\n ModalSwipeable,\n NgClass,\n ModalBanner,\n ModalDefaultCloseButton\n ],\n templateUrl: './modal-side.html',\n styleUrl: './modal-side.scss',\n})\nexport class ModalSide<D = unknown> implements IGenericModalView<D> {\n readonly headerTemplate = input.required<TemplateRef<any> | null>();\n readonly footerTemplate = input.required<TemplateRef<any> | null>();\n readonly config = input.required<GenericModalConfig<D> | undefined>();\n readonly isOpen = input.required<boolean>();\n readonly isAnimated = input.required<boolean>();\n readonly isSwipeableModalActive = input.required<boolean>();\n readonly animationDuration = input.required<number>();\n readonly hasDefaultContentWrapperClass = input.required<boolean>();\n readonly hasBanner = input.required<boolean>();\n\n readonly close = output<ModalCloseMode | undefined>();\n\n @ViewChildren(ModalSwipeable) swipeableComponents!: QueryList<ModalSwipeable>;\n\n protected renderOpenClass = signal(false);\n\n public modalClasses = computed(() => {\n const config = this.config();\n const positionLeft = config?.style?.position === 'left';\n const positionRight = config?.style?.position === 'right';\n const shouldAnimate = this.isAnimated();\n\n const isRenderedOpen = this.renderOpenClass();\n\n return {\n 'side-modal-content-wrapper': true,\n 'side-modal-default-style': this.hasDefaultContentWrapperClass() || this.hasBanner(),\n 'with-footer': this.footerTemplate() !== null,\n 'left': positionLeft,\n 'right': positionRight,\n\n 'side-modal-animate-in': shouldAnimate ? isRenderedOpen : true, \n 'side-modal-animate-out': shouldAnimate ? !isRenderedOpen : false,\n };\n });\n \n constructor() {\n effect(() => {\n const isOpen = this.isOpen();\n \n if (isOpen) {\n this.renderOpenClass.set(false);\n\n setTimeout(() => {\n this.renderOpenClass.set(true); \n }, 50); \n\n } else {\n this.renderOpenClass.set(false);\n }\n });\n }\n}","@if(!isSwipeableModalActive()) {\n<div [ngClass]=\"modalClasses()\" (click)=\"$event.stopPropagation()\"\n [style.--anim-duration.ms]=\"animationDuration()\">\n <div class=\"side-modal-inner-content-container\"\n [class]=\"config() && config()?.style?.wrapperClasses ? config()?.style?.wrapperClasses : ''\"\n [style]=\"config() && config()?.style?.wrapperStyles ? config()?.style?.wrapperStyles : ''\">\n @if (hasBanner()) {\n <modal-banner [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-banner>\n }\n @if (headerTemplate()) {\n <div class=\"side-modal-header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n @if(!hasBanner()) {\n <modal-default-close-button [config]=\"config()\" (close)=\"close.emit('cancel')\"></modal-default-close-button>\n }\n </div>\n }\n <div class=\"side-modal-main-content-container\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n </div>\n </div>\n \n @if (footerTemplate()) {\n <div class=\"side-modal-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n</div>\n} @else {\n<modal-swipeable [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config()\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated()\"\n [animationDuration]=\"animationDuration()\" (close)=\"close.emit('cancel')\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"> </ng-container>\n</modal-swipeable>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>","export const GENERIC_MODAL_DEFAULT_ANIM_DURATION = 175;\nexport const GENERIC_MODAL_DEFAULT_INTERNAL_ANIM_DURATION = 350;\n\nexport const GENERIC_MODAL_DEFAULT_ANIM_DURATION_MULTIPLIER_SMALL = 0.65;\nexport const GENERIC_MODAL_DEFAULT_ANIM_DURATION_MULTIPLIER_LARGE = 0.85;","import { NgTemplateOutlet } from \"@angular/common\";\nimport { Component, inject, output, ComponentRef, ViewChild, ElementRef, ViewChildren, QueryList, TemplateRef, ViewContainerRef, signal, effect } from \"@angular/core\";\nimport { Subject, Observable, fromEvent, filter, take } from \"rxjs\";\nimport { GenericModal } from \"../classes/generic-modal\";\nimport { GenericModalConfig } from \"../classes/generic-modal-config\";\nimport { EMPTY_STRING } from \"../constants/generic-modal-common.constants\";\nimport { GenericModalWarnings } from \"../enums/generic-modal-warnings.enum\";\nimport { IGenericModalComponenet } from \"../interfaces/igeneric-modal-component.interface\";\nimport { GenericModalService } from \"../services/generic-modal.service\";\nimport { ModalBackdrop } from \"./shared/ui/backdrop/modal-backdrop\";\nimport { ModalCentered } from \"./views/centered/modal-centered\";\nimport { ModalSide } from \"./views/side/modal-side\";\nimport { ModalSwipeable } from \"./views/swipeable/modal-swipeable\";\nimport { ModalCloseMode } from \"../types/modal.types\";\nimport { IGenericCloseResult } from \"../interfaces/igeneric-close-result.interface\";\nimport { DeviceTypeService, ScrollLockService, WindowDimensionsService } from \"@filip.mazev/blocks-core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport * as animConst from \"../constants/generic-modal-animation.constants\";\n\n@Component({\n selector: \"generic-modal\",\n imports: [\n NgTemplateOutlet,\n ModalCentered,\n ModalSide,\n ModalBackdrop\n ],\n templateUrl: \"./generic-modal.html\",\n styleUrl: \"./generic-modal.scss\",\n})\nexport class GenericModalComponent<\n D = unknown,\n R = any,\n C extends GenericModal<D, R> = GenericModal<D, R>>\n implements IGenericModalComponenet<D, R, C> {\n\n private modalService = inject(GenericModalService);\n private windowDimensionService = inject(WindowDimensionsService);\n private scrollLockService = inject(ScrollLockService);\n private deviceTypeService = inject(DeviceTypeService);\n\n readonly afterClose = output<void>();\n\n readonly animationDuration: number = animConst.GENERIC_MODAL_DEFAULT_ANIM_DURATION;\n\n public componentRef: ComponentRef<C> = {} as ComponentRef<C>;\n public config?: GenericModalConfig<D>;\n public closeFunction?: Function;\n\n public backdropClickSubject = new Subject<MouseEvent>();\n public backdropClick: Observable<MouseEvent> = this.backdropClickSubject.asObservable();\n\n public isOpen = signal<boolean>(true);\n public isSwipeableModalActive = signal<boolean>(false);\n\n protected headerTemplate = signal<TemplateRef<any> | null>(null);\n protected footerTemplate = signal<TemplateRef<any> | null>(null);\n\n public isAnimated: boolean = false;\n public isCentered: boolean = false;\n public isSide: boolean = false;\n protected hasBanner: boolean = false;\n protected hasDefaultContentWrapperClass: boolean = false;\n\n private isConfirmCloseModalOpen: boolean = false;\n private isSpecialMobileOverflowHandlingEnabled: boolean = false;\n private isScrollDisabled: boolean = false;\n\n protected windowDimensions = this.windowDimensionService.dimensions;\n\n @ViewChild(\"modalContainer\", { static: true }) modalContainer?: ElementRef;\n\n @ViewChildren(ModalSide) sideModalComponents?: QueryList<ModalSide>;\n @ViewChildren(ModalCentered) centeredModalComponents?: QueryList<ModalCentered>;\n\n @ViewChild(\"contentTemplate\") contentTemplate?: TemplateRef<HTMLElement>;\n @ViewChild(\"dynamicContainer\", { read: ViewContainerRef }) dynamicContainer?: ViewContainerRef;\n\n constructor() {\n this.initKeyboardSubscription();\n\n effect(() => {\n const width = this.windowDimensions().width;\n this.handleWindowDimensionChange(width);\n });\n }\n\n public ngOnInit() {\n this.initParamsFromConfig();\n\n if (this.config?.style.handleMobile !== false && this.windowDimensionService.isMobile()) {\n this.isSwipeableModalActive.set(true);\n } else {\n this.isSwipeableModalActive.set(false);\n }\n }\n\n public ngAfterViewInit(): void {\n if (!this.componentRef) return;\n this.dynamicContainer?.insert(this.componentRef.hostView);\n }\n\n public ngOnDestroy(): void {\n this.componentRef?.destroy();\n this.dynamicContainer?.clear();\n }\n\n //#region Subscription Methods\n\n private initKeyboardSubscription(): void {\n fromEvent<KeyboardEvent>(document, \"keydown\")\n .pipe(\n filter((event: KeyboardEvent) => event.key === \"Escape\"),\n takeUntilDestroyed(),\n )\n .subscribe(() => {\n if (!this.isConfirmCloseModalOpen) {\n this.close(\"cancel\", undefined, true);\n }\n });\n }\n\n private handleWindowDimensionChange(width: number): void {\n if (this.config?.style.handleMobile === false) return;\n\n const smBreakpoint = this.windowDimensionService.breakpoints.sm;\n const currentSwipeState = this.isSwipeableModalActive(); \n\n if (width < smBreakpoint && !currentSwipeState) {\n this.isSwipeableModalActive.set(true);\n\n if (this.isOpen() && this.isSpecialMobileOverflowHandlingEnabled) {\n this.scrollLockService.disableScroll({\n mainContainer: this.modalContainer?.nativeElement,\n handleExtremeOverflow: this.config?.enableExtremeOverflowHandling ?? false,\n animationDuration: this.animationDuration,\n handleTouchInput: true,\n mobileOnlyTouchPrevention: true,\n });\n\n this.isScrollDisabled = true;\n }\n }\n\n if (width >= smBreakpoint && currentSwipeState) {\n this.isSwipeableModalActive.set(false);\n\n if (this.isOpen() && this.isSpecialMobileOverflowHandlingEnabled) {\n this.scrollLockService.enableScroll(this.config?.enableExtremeOverflowHandling ?? false);\n this.isScrollDisabled = false;\n }\n }\n }\n\n //#endregion\n\n //#region Initialization Methods\n\n private initParamsFromConfig() {\n this.isSpecialMobileOverflowHandlingEnabled = (this.deviceTypeService.getDeviceState().isAppleDevice || this.config?.webkitOnlyOverflowMobileHandling === false);\n\n this.hasBanner =\n this.config !== undefined &&\n ((this.config.bannerText !== undefined && this.config.bannerText.length > 0) ||\n (this.config.disableClose !== true && this.config.style.showCloseButton !== false && this.headerTemplate() === null));\n\n this.hasDefaultContentWrapperClass = this.config?.style.contentWrapper !== false;\n\n this.isAnimated = this.config?.style.animate === true;\n this.isCentered = this.config?.style.position === \"center\";\n this.isSide = this.config?.style.position === \"left\" || this.config?.style.position === \"right\";\n }\n\n //#endregion\n\n //#region Public Template Methods\n\n public setHeaderTemplate(template: TemplateRef<any>) {\n this.headerTemplate.set(template);\n }\n\n public setFooterTemplate(template: TemplateRef<any>) {\n this.footerTemplate.set(template);\n }\n\n //#endregion\n\n //#region Closing Methods\n\n public close(state: ModalCloseMode = \"cancel\", result: R | undefined = undefined, fromInsideInteraction: boolean = false, forceClose: boolean = false): void {\n if (this.isConfirmCloseModalOpen) return;\n\n if (this.isScrollDisabled) {\n this.scrollLockService.enableScroll(this.config?.enableExtremeOverflowHandling ?? false);\n }\n\n if ((this.config && this.config?.disableClose !== true) || !fromInsideInteraction || forceClose) {\n if (this.config?.confirmCloseConfig && this.shouldOpenConfirmCloseModal(forceClose, state)) {\n if (this.shouldOpenConfirmCloseModalSelfCheck()) {\n const modal = this.modalService.open<IGenericCloseResult, any>(this.config.confirmCloseConfig.confirmModalComponent, {\n style: this.config.confirmCloseConfig.style ?? {\n handleMobile: false,\n },\n disableClose: true,\n bannerText: this.config.confirmCloseConfig.bannerText ?? EMPTY_STRING,\n data: this.config.confirmCloseConfig.data ?? null,\n });\n\n this.isConfirmCloseModalOpen = true;\n\n if (this.isSwipeableModalActive()) {\n this.resetSwipeableModalPosition();\n }\n\n modal.afterClosed()\n .pipe(take(1))\n .subscribe((_result: IGenericCloseResult) => {\n this.isConfirmCloseModalOpen = false;\n if (_result.state === 'confirm') {\n this.handleClose(state, result);\n }\n });\n } else {\n if (this.config?.disableConsoleWarnings !== true) {\n console.warn(GenericModalWarnings.CONFIRM_MODAL_NESTING_NOT_SUPPORTED);\n }\n\n this.handleClose(state, result);\n }\n } else {\n this.handleClose(state, result);\n }\n } else if (this.isSwipeableModalActive()) {\n this.resetSwipeableModalPosition();\n }\n }\n\n private async handleClose(state: ModalCloseMode, result: R | undefined): Promise<void> {\n this.isOpen.set(false);\n this.setSwipeableModalFinishedState(true);\n\n const returnResult = {\n data: result,\n state: state,\n } as IGenericCloseResult<R | undefined>;\n\n if (this.closeFunction) {\n this.closeFunction(returnResult);\n }\n }\n\n protected onBackdropClick(event: MouseEvent) {\n this.backdropClickSubject.next(event);\n if (this.config?.style?.hasBackdrop && this.config?.disableCloseOnBackdropClick !== true) {\n this.close(\"cancel\", undefined, true);\n }\n }\n\n //#endregion\n\n //#region Logical Assertions\n\n private shouldOpenConfirmCloseModal(forceClose: boolean, state: ModalCloseMode): boolean {\n if (this.config?.confirmCloseConfig) {\n const closeNotCalledWithForceClose = !forceClose;\n\n if (closeNotCalledWithForceClose) {\n const configuredForConfirmClose = this.config.confirmCloseConfig.confirmClose === true;\n const closeCalledWithCancelState = state === \"cancel\";\n const configuredForConfirmCloseOnSubmit = this.config.confirmCloseConfig.confirmOnSubmit === true;\n\n return configuredForConfirmClose && (closeCalledWithCancelState || configuredForConfirmCloseOnSubmit);\n }\n }\n\n return false;\n }\n\n private shouldOpenConfirmCloseModalSelfCheck(): boolean {\n if (this.config?.confirmCloseConfig) {\n const hasSelfIdentifier = this.componentRef && this.componentRef.instance && this.componentRef.instance.modal && this.componentRef.instance.modal.selfIdentifier !== EMPTY_STRING;\n const bypassSelfCheck = this.config.confirmCloseConfig.bypassSelfCheck === true;\n\n return hasSelfIdentifier || bypassSelfCheck;\n }\n\n return false;\n }\n\n //#endregion\n\n //#region Helper Methods\n\n private getSwipeableModal(): ModalSwipeable | undefined {\n return this.sideModalComponents?.first?.swipeableComponents?.first\n ?? this.centeredModalComponents?.first?.swipeableComponents?.first\n }\n\n private resetSwipeableModalPosition(): void {\n const swipeableModal = this.getSwipeableModal();\n if (swipeableModal) {\n swipeableModal.currentTranslateY = 0;\n }\n }\n\n private setSwipeableModalFinishedState(isFinished: boolean): void {\n const swipeableModal = this.getSwipeableModal();\n if (swipeableModal) {\n swipeableModal.isSwipingVerticallyFinished = isFinished;\n }\n }\n\n //#endregion\n}\n","@if (config?.style?.hasBackdrop && (isSide || isSwipeableModalActive())) {\n<modal-backdrop [isAnimated]=\"isAnimated\" [isOpen]=\"isOpen()\" (click)=\"onBackdropClick($event)\">\n</modal-backdrop>\n}\n\n<ng-container #modalContainer>\n @switch (true) {\n @case (isSide) {\n <modal-side [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated\"\n [isSwipeableModalActive]=\"isSwipeableModalActive()\" [animationDuration]=\"animationDuration\"\n [hasDefaultContentWrapperClass]=\"hasDefaultContentWrapperClass\" [hasBanner]=\"hasBanner\" (close)=\"close($event)\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\">\n </ng-container>\n </modal-side>\n } \n @case (isCentered) {\n <modal-centered [headerTemplate]=\"headerTemplate()\" [footerTemplate]=\"footerTemplate()\" [config]=\"config\" [isOpen]=\"isOpen()\" [isAnimated]=\"isAnimated\"\n [isSwipeableModalActive]=\"isSwipeableModalActive()\" [animationDuration]=\"animationDuration\"\n [hasDefaultContentWrapperClass]=\"hasDefaultContentWrapperClass\" [hasBanner]=\"hasBanner\" (close)=\"close($event)\"\n (onBackdropClick)=\"onBackdropClick($event)\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\">\n </ng-container>\n </modal-centered>\n }\n }\n</ng-container>\n\n<ng-template #contentTemplate>\n <ng-container #dynamicContainer></ng-container>\n</ng-template>","export const LOWEST_CHARACTER_CAP = 23;\nexport const LOWER_CHARACTER_CAP = 33;\nexport const MID_CHARACTER_CAP = 49;\nexport const UPPER_CHARACTER_CAP = 60;","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { GenericModalComponent } from '../components/generic-modal';\nimport { GenericModalWarnings } from '../enums/generic-modal-warnings.enum';\n\n@Directive({\n selector: '[modalFooter]', \n standalone: true\n})\nexport class ModalFooterDirective {\n private templateRef = inject(TemplateRef);\n private modal = inject(GenericModalComponent, { optional: true });\n\n constructor() {\n if (this.modal) {\n this.modal.setFooterTemplate(this.templateRef);\n } else {\n console.warn(GenericModalWarnings.FOOTER_DIRECTIVE_OUTSIDE_MODAL);\n }\n }\n}","/*\n * Public API Surface of modal\n */\n\nexport * from './lib/components/generic-modal';\nexport * from './lib/components/views/swipeable/modal-swipeable';\nexport * from './lib/components/views/side/modal-side';\nexport * from './lib/components/views/centered/modal-centered';\nexport * from './lib/components/shared/ui/backdrop/modal-backdrop';\nexport * from './lib/components/shared/ui/banner/modal-banner';\n\nexport * from './lib/services/generic-modal.service';\n\nexport * from './lib/classes/generic-modal';\nexport * from './lib/classes/generic-modal-config';\nexport * from './lib/classes/generic-modal-ref';\nexport * from './lib/classes/generic-modal-style.config';\n\nexport * from './lib/interfaces/igeneric-close-result.interface';\nexport * from './lib/interfaces/igeneric-confirm-close.interface';\nexport * from './lib/interfaces/igeneric-modal-component.interface';\nexport * from './lib/interfaces/igeneric-modal-config.interface';\nexport * from './lib/interfaces/igeneric-modal-ref.interface';\nexport * from './lib/interfaces/igeneric-modal-service.interface';\nexport * from './lib/interfaces/igeneric-modal-style-config.interface';\nexport * from './lib/interfaces/igeneric-modal-view.interface';\nexport * from './lib/interfaces/igeneric-swipeable-modal-config';\n\nexport * from './lib/constants/generic-modal-animation.constants';\nexport * from './lib/constants/generic-modal-common.constants';\nexport * from './lib/constants/generic-modal-swipe.constants';\nexport * from './lib/constants/generic-modal-text.constants';\n\nexport * from './lib/enums/generic-modal-errors.enum';\nexport * from './lib/enums/generic-modal-warnings.enum';\nexport * from './lib/enums/generic-modal-state.enum';\n\nexport * from './lib/directives/modal-footer.directive';\n\nexport * from './lib/tokens/generic-modal-data.token';\n\nexport * from './lib/types/modal.types';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["swipeConst.GENERIC_MODAL_SWIPE_VELOCITY_THRESHOLD","swipeConst.GENERIC_MODAL_DOWN_SWIPE_LIMIT","swipeConst.GENERIC_MODAL_UP_SWIPE_LIMIT","animConst.GENERIC_MODAL_DEFAULT_ANIM_DURATION"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@filip.mazev/modal",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "exports": {
5
5
  "./_modal-theme": "./lib/styles/_modal-theme.scss",
6
6
  "./index": "./lib/styles/_index.scss",
@@ -1,6 +1,6 @@
1
1
  import * as _filip_mazev_blocks_core from '@filip.mazev/blocks-core';
2
2
  import * as _angular_core from '@angular/core';
3
- import { Type, ComponentRef, OnDestroy, ViewContainerRef, Renderer2, Injector, OnInit, Signal, TemplateRef, ElementRef, InputSignal, OutputEmitterRef, QueryList, InjectionToken } from '@angular/core';
3
+ import { Type, ComponentRef, ViewContainerRef, Renderer2, Injector, OnDestroy, OnInit, Signal, TemplateRef, ElementRef, InputSignal, OutputEmitterRef, QueryList, InjectionToken } from '@angular/core';
4
4
  import { Observable, Subject } from 'rxjs';
5
5
  import { ComponentType } from '@angular/cdk/portal';
6
6
  import * as _filip_mazev_modal from '@filip.mazev/modal';
@@ -149,7 +149,7 @@ interface IGenericModalRef<D = any, R = any, C extends GenericModal<D, R> = Gene
149
149
  } | undefined) => void;
150
150
  }
151
151
 
152
- interface IGenericModalService extends OnDestroy {
152
+ interface IGenericModalService {
153
153
  viewContainer?: ViewContainerRef;
154
154
  register: (viewContainer: ViewContainerRef, renderer: Renderer2) => void;
155
155
  open: (component: ComponentType<any>, config?: IGenericModalConfig<any>) => GenericModalRef<any, any, any>;
@@ -173,9 +173,7 @@ declare class GenericModalService implements IGenericModalService {
173
173
  private modalsSubject;
174
174
  viewContainer?: ViewContainerRef;
175
175
  renderer?: Renderer2;
176
- private unsubscribe$;
177
176
  constructor();
178
- ngOnDestroy(): void;
179
177
  private createSubscriptions;
180
178
  register(viewContainer: ViewContainerRef, renderer: Renderer2): void;
181
179
  open<D, R, C extends GenericModal<D, R> = GenericModal<D, R>>(component: ComponentType<C>, config?: IGenericModalConfig<D>): GenericModalRef<D, R, C>;
@@ -327,9 +325,9 @@ interface IGenericModalView<D = unknown> {
327
325
  hasBanner: InputSignal<boolean>;
328
326
  close: OutputEmitterRef<ModalCloseMode | undefined>;
329
327
  swipeableComponents: QueryList<ModalSwipeable>;
330
- get modalClasses(): {
328
+ modalClasses: Signal<{
331
329
  [key: string]: boolean;
332
- };
330
+ }>;
333
331
  }
334
332
 
335
333
  declare class ModalCentered<D = unknown> implements IGenericModalView<D> {
@@ -345,9 +343,12 @@ declare class ModalCentered<D = unknown> implements IGenericModalView<D> {
345
343
  readonly close: _angular_core.OutputEmitterRef<ModalCloseMode | undefined>;
346
344
  readonly onBackdropClick: _angular_core.OutputEmitterRef<MouseEvent>;
347
345
  swipeableComponents: QueryList<ModalSwipeable>;
348
- get modalClasses(): {
349
- [key: string]: boolean;
350
- };
346
+ modalClasses: _angular_core.Signal<{
347
+ 'centered-modal-content-wrapper': boolean;
348
+ 'centered-modal-default-style': boolean;
349
+ 'centered-modal-animate-in': boolean;
350
+ 'centered-modal-animate-out': boolean;
351
+ }>;
351
352
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ModalCentered<any>, never>;
352
353
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ModalCentered<any>, "modal-centered", never, { "headerTemplate": { "alias": "headerTemplate"; "required": true; "isSignal": true; }; "footerTemplate": { "alias": "footerTemplate"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": true; "isSignal": true; }; "isAnimated": { "alias": "isAnimated"; "required": true; "isSignal": true; }; "isSwipeableModalActive": { "alias": "isSwipeableModalActive"; "required": true; "isSignal": true; }; "animationDuration": { "alias": "animationDuration"; "required": true; "isSignal": true; }; "hasDefaultContentWrapperClass": { "alias": "hasDefaultContentWrapperClass"; "required": true; "isSignal": true; }; "hasBanner": { "alias": "hasBanner"; "required": true; "isSignal": true; }; }, { "close": "close"; "onBackdropClick": "onBackdropClick"; }, never, ["*"], true, never>;
353
354
  }
@@ -357,7 +358,6 @@ declare class ModalSide<D = unknown> implements IGenericModalView<D> {
357
358
  readonly footerTemplate: _angular_core.InputSignal<TemplateRef<any> | null>;
358
359
  readonly config: _angular_core.InputSignal<GenericModalConfig<D, any, _filip_mazev_modal.GenericModal<any, undefined>> | undefined>;
359
360
  readonly isOpen: _angular_core.InputSignal<boolean>;
360
- protected renderOpenClass: boolean;
361
361
  readonly isAnimated: _angular_core.InputSignal<boolean>;
362
362
  readonly isSwipeableModalActive: _angular_core.InputSignal<boolean>;
363
363
  readonly animationDuration: _angular_core.InputSignal<number>;
@@ -365,10 +365,17 @@ declare class ModalSide<D = unknown> implements IGenericModalView<D> {
365
365
  readonly hasBanner: _angular_core.InputSignal<boolean>;
366
366
  readonly close: _angular_core.OutputEmitterRef<ModalCloseMode | undefined>;
367
367
  swipeableComponents: QueryList<ModalSwipeable>;
368
+ protected renderOpenClass: _angular_core.WritableSignal<boolean>;
369
+ modalClasses: _angular_core.Signal<{
370
+ 'side-modal-content-wrapper': boolean;
371
+ 'side-modal-default-style': boolean;
372
+ 'with-footer': boolean;
373
+ left: boolean;
374
+ right: boolean;
375
+ 'side-modal-animate-in': boolean;
376
+ 'side-modal-animate-out': boolean;
377
+ }>;
368
378
  constructor();
369
- get modalClasses(): {
370
- [key: string]: boolean;
371
- };
372
379
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ModalSide<any>, never>;
373
380
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ModalSide<any>, "modal-side", never, { "headerTemplate": { "alias": "headerTemplate"; "required": true; "isSignal": true; }; "footerTemplate": { "alias": "footerTemplate"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": true; "isSignal": true; }; "isAnimated": { "alias": "isAnimated"; "required": true; "isSignal": true; }; "isSwipeableModalActive": { "alias": "isSwipeableModalActive"; "required": true; "isSignal": true; }; "animationDuration": { "alias": "animationDuration"; "required": true; "isSignal": true; }; "hasDefaultContentWrapperClass": { "alias": "hasDefaultContentWrapperClass"; "required": true; "isSignal": true; }; "hasBanner": { "alias": "hasBanner"; "required": true; "isSignal": true; }; }, { "close": "close"; }, never, ["*"], true, never>;
374
381
  }