{"version":3,"file":"failed-successfully-ngx-darkbox-gallery.mjs","sources":["../../../projects/ngx-darkbox-gallery/src/lib/ngx-darkbox-gallery.service.ts","../../../projects/ngx-darkbox-gallery/src/lib/model/darkbox-configuration.ts","../../../projects/ngx-darkbox-gallery/src/lib/model/grid-configuration.ts","../../../projects/ngx-darkbox-gallery/src/lib/components/loading/loading-placeholder/loading-placeholder.component.ts","../../../projects/ngx-darkbox-gallery/src/lib/components/loading/loading-placeholder/loading-placeholder.component.html","../../../projects/ngx-darkbox-gallery/src/lib/directives/touchable/swipe-direction.ts","../../../projects/ngx-darkbox-gallery/src/lib/components/loading/loading-animation/dot/dot.component.ts","../../../projects/ngx-darkbox-gallery/src/lib/components/loading/loading-animation/dot/dot.component.html","../../../projects/ngx-darkbox-gallery/src/lib/components/loading/loading-animation/flex-ring/flex-ring.component.ts","../../../projects/ngx-darkbox-gallery/src/lib/components/loading/loading-animation/flex-ring/flex-ring.component.html","../../../projects/ngx-darkbox-gallery/src/lib/components/loading/loading-animation/svg-loader/svg-loader.component.ts","../../../projects/ngx-darkbox-gallery/src/lib/components/loading/loading-animation/svg-loader/svg-loader.component.html","../../../projects/ngx-darkbox-gallery/src/lib/components/loading/loading-animation/loading-animation.component.ts","../../../projects/ngx-darkbox-gallery/src/lib/components/loading/loading-animation/loading-animation.component.html","../../../projects/ngx-darkbox-gallery/src/lib/directives/touchable/touchable.directive.ts","../../../projects/ngx-darkbox-gallery/src/lib/services/image-caption.service.ts","../../../projects/ngx-darkbox-gallery/src/lib/components/darkbox/darkbox.component.ts","../../../projects/ngx-darkbox-gallery/src/lib/components/darkbox/darkbox.component.html","../../../projects/ngx-darkbox-gallery/src/lib/config/darkbox-configuration.default.ts","../../../projects/ngx-darkbox-gallery/src/lib/config/grid-configuration.default.ts","../../../projects/ngx-darkbox-gallery/src/lib/config/configuration.default.ts","../../../projects/ngx-darkbox-gallery/src/lib/services/configuration.service.ts","../../../projects/ngx-darkbox-gallery/src/lib/services/image-index.service.ts","../../../projects/ngx-darkbox-gallery/src/lib/ngx-darkbox-gallery.component.ts","../../../projects/ngx-darkbox-gallery/src/lib/ngx-darkbox-gallery.component.html","../../../projects/ngx-darkbox-gallery/src/lib/model/image.ts","../../../projects/ngx-darkbox-gallery/src/public-api.ts","../../../projects/ngx-darkbox-gallery/src/failed-successfully-ngx-darkbox-gallery.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgxDarkboxGalleryService {\n\n  constructor() { }\n}\n","import { ColorConfiguration } from \"./color-configuration\";\n\nexport interface DarkboxConfiguration {\n  /**\n   * Sets the direction the darkbox will allow looping through the images\n   * FORWARD: Only after the last image the first one will be displayed again\n   * BACKWARD: Only before the first image the last one will be displayed again\n   * BOTH: The first image will be displayed after the last one and vise versa\n   * NONE: There is a fixed end in both directions\n   */\n  loopDirection?: LoopDirection;\n  /**\n   * Sets if the caption should be displayed or not\n   * true: Show the caption including the current position in the image set\n   * false: Caption is not shown\n   */\n  enableCaption?: boolean;\n  /**\n   * Separtor between the image number and the caption\n   * Is only shown when the caption has text in it\n   */\n  captionSeparator?: string;\n  /**\n   * The template string for the image caption\n   * The following values will be replaced:\n   * ${currentNumber} Number of the currently visible image within the gallery\n   * ${totalNumber} Total number of images in the gallery\n   * ${separator} Sepertor between the image number and the caption. Is only shown when the caption has text in it\n   * ${caption} Caption of the selected image. Is only shown when the caption has text in it\n   */\n  captionTemplate?: string;\n\n  /**\n   * Defines the colors to be used on the image caption\n   */\n  captionColorConfiguration?: ColorConfiguration;\n\n  /**\n   * Loading animation shown while the full sized image is loading\n   * DOT: A line of jumping dots moving in a wave like form\n   * BAR: Three vertical bars getting wider and smaller\n   * FLEX_RING: A ring flexing in and out\n   * SPINNER: A classical spinner animation turning infinitely\n   * SQUARE: A line of jumping squares moving in a wave like form\n   */\n  loadingAnimation?: LoadingAnimation;\n\n  /**\n   * The button style to use for the close button\n   * FAB: A round floating action button placed besides the image. Its position depends on the button it is set for\n   * BAR: A vertical or horizontal bar surrounding the image depending on the button it is set for\n   */\n  closeButtonStyle?: ButtonStyle;\n\n  /**\n   * Defines the colors to be used for the close button\n   */\n  closeButtonColorConfiguration?: ColorConfiguration;\n\n  /**\n   * The button style to use for the previous and next buttons\n   * FAB: A round floating action button placed besides the image. Its position depends on the button it is set for\n   * BAR: A vertical or horizontal bar surrounding the image depending on the button it is set for\n   */\n  prevNextButtonStyle?: ButtonStyle;\n\n  /**\n   * Defines the colors to be used for the prevoius and next buttons\n   */\n  prevNextButtonColorConfiguration?: ColorConfiguration;\n}\n\nexport enum LoopDirection {\n  FORWARD = 'FORWARD',\n  BACKWARD = 'BACKWARD',\n  BOTH = 'BOTH',\n  NONE = 'NONE'\n}\n\nexport enum LoadingAnimation {\n  DOT = 'DOT',\n  BAR = 'BAR',\n  FLEX_RING = 'FLEX_RING',\n  SPINNER = 'SPINNER',\n  SQUARE = 'SQUARE'\n}\n\nexport enum ButtonStyle {\n  FAB = 'FAB',\n  BAR = 'BAR'\n}\n","import { ResolutionConfiguration } from \"./resolution-configuration\";\n\nexport interface GridConfiguration {\n  /**\n   * Number of images loaded initially on small and medium sized devices (smartphone / tablet)\n   * This is scaled by a factor according to the resolution of bigger displays\n   */\n  initialBatchSize?: number;\n  /**\n   * The number of images loaded in each load more images call\n   */\n  batchSize?: number;\n\n  /**\n   * A list of scaling factors to be used to scale the initial batch size by screen width\n   */\n  batchSizeScalingFactors?: ResolutionConfiguration[];\n\n  /**\n   * Sets the type of the image grid\n   * STATIC: A grid of images rendered in rows of dynamic length,\n   *         preferrebly used for equal sized thumbnails (thumbnail size can be configured seperatly)\n   * FLUID: A grid optimized for thumbnails with different aspect ratios and orientations,\n   *        rendered in columns (if selected thumbnailHeight and thumbnailWidth are only used for placeholders while loading)\n   */\n  gridType?: GridType;\n\n  /**\n   * Allows for configuration of the flex property justifiy-content\n   * All option of the css property justifiy-cotnent are allowed\n   */\n  thumbnailAlignment?: string | null;\n\n  /**\n   * Enables / Disables zooming effect for thumbnail hovering\n   */\n  zoomImages?: boolean;\n\n  /**\n   * Size used to define the height of the thumbnails and loading placeholders\n   * For gridType FLUID this applies only to the loading placeholders\n   * This should be defined like you would in css including the unit (e.g. px, em, rem)\n   */\n  thumbnailHeight?: string | null;\n\n  /**\n   * Size used to define the width of the thumbnails and loading placeholders\n   * For gridType FLUID this applies only to the loading placeholders\n   * This should be defined like you would in css including the unit (e.g. px, em, rem)\n   */\n  thumbnailWidth?: string | null;\n\n  /**\n   * Enables / Disables the shimmer placeholder while loading the thumbnail images\n   */\n  enableLoadingPlaceholder?: boolean;\n\n  /**\n   * Configures the behavior of the loading placeholders for thumbnail images.\n   * If true, the thumbnails of a batch are shown, when all thumbnails of the batch are loaded.\n   * If false, the thumbnail for each image is shown as soon as it gets available.\n   *\n   * This only takes effect if loading placeholders are enabled.\n   */\n  thumbnailsWaitForBatch?: boolean;\n}\n\nexport enum GridType {\n  STATIC = 'STATIC',\n  FLUID = 'FLUID'\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { NgStyle } from '@angular/common';\n\n@Component({\n    selector: 'loading-placeholder',\n    templateUrl: './loading-placeholder.component.html',\n    styleUrls: ['./loading-placeholder.component.scss'],\n    imports: [NgStyle]\n})\nexport class LoadingPlaceholderComponent implements OnInit {\n\n  @Input()\n  placeholderHeight: string;\n\n  @Input()\n  placeholderWidth: string;\n\n  constructor() { }\n\n  ngOnInit(): void {\n  }\n}\n","<div class=\"placeholder\" [ngStyle]=\"{'height': placeholderHeight, 'width': placeholderWidth}\"></div>\n","export enum SwipeDirection {\n  UP,\n  DOWN,\n  LEFT,\n  RIGHT\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { LoadingAnimation } from '../../../../model/darkbox-configuration';\nimport { NgClass } from '@angular/common';\n\n@Component({\n    selector: 'lib-dot',\n    templateUrl: './dot.component.html',\n    styleUrls: ['./dot.component.scss'],\n    imports: [NgClass]\n})\nexport class DotComponent implements OnInit {\n\n  @Input()\n  animationType: LoadingAnimation;\n\n  loadingAnimation: typeof LoadingAnimation = LoadingAnimation;\n  constructor() { }\n\n  ngOnInit(): void {\n  }\n}\n","<div class=\"loader\">\n  @for (i of [0,1,2,3,4,5,6]; track i) {\n    <span [ngClass]=\"animationType === loadingAnimation.DOT ? 'dot' : ''\"></span>\n  }\n</div>\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n    selector: 'lib-flex-ring',\n    templateUrl: './flex-ring.component.html',\n    styleUrls: ['./flex-ring.component.scss']\n})\nexport class FlexRingComponent implements OnInit {\n\n  constructor() { }\n\n  ngOnInit(): void {\n  }\n}\n","<div class=\"loader-container\">\n  <div class=\"flex\">\n    <div class=\"loader\"></div>\n  </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { LoadingAnimation } from '../../../../model/darkbox-configuration';\n\n\n@Component({\n    selector: 'lib-svg-loader',\n    templateUrl: './svg-loader.component.html',\n    styleUrls: ['./svg-loader.component.scss'],\n    imports: []\n})\nexport class SvgLoaderComponent implements OnInit {\n\n  @Input()\n  animationType: LoadingAnimation;\n\n  loadingAnimation: typeof LoadingAnimation = LoadingAnimation;\n\n  constructor() { }\n\n  ngOnInit(): void {\n  }\n}\n","<div class=\"loader-container\">\n  <div class=\"loader\">\n    @if (animationType === loadingAnimation.SPINNER) {\n      <svg version=\" 1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n        viewBox=\"0 0 50 50\" xml:space=\"preserve\">\n        <path d=\"M25.251,6.461c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615V6.461z\">\n          <animateTransform attributeType=\"xml\" attributeName=\"transform\" type=\"rotate\" from=\"0 25 25\" to=\"360 25 25\"\n            dur=\"0.75s\" repeatCount=\"indefinite\" />\n          </path>\n        </svg>\n      }\n\n      @if (animationType === loadingAnimation.BAR) {\n        <svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n          viewBox=\"0 0 24 30\" style=\"enable-background:new 0 0 50 50;\" xml:space=\"preserve\">\n          <rect x=\"0\" y=\"13\" width=\"4\" height=\"5\">\n            <animate attributeName=\"height\" attributeType=\"XML\" values=\"5;21;5\" begin=\"0s\" dur=\"0.6s\"\n              repeatCount=\"indefinite\" />\n              <animate attributeName=\"y\" attributeType=\"XML\" values=\"13; 5; 13\" begin=\"0s\" dur=\"0.6s\"\n                repeatCount=\"indefinite\" />\n              </rect>\n              <rect x=\"10\" y=\"13\" width=\"4\" height=\"5\">\n                <animate attributeName=\"height\" attributeType=\"XML\" values=\"5;21;5\" begin=\"0.15s\" dur=\"0.6s\"\n                  repeatCount=\"indefinite\" />\n                  <animate attributeName=\"y\" attributeType=\"XML\" values=\"13; 5; 13\" begin=\"0.15s\" dur=\"0.6s\"\n                    repeatCount=\"indefinite\" />\n                  </rect>\n                  <rect x=\"20\" y=\"13\" width=\"4\" height=\"5\">\n                    <animate attributeName=\"height\" attributeType=\"XML\" values=\"5;21;5\" begin=\"0.3s\" dur=\"0.6s\"\n                      repeatCount=\"indefinite\" />\n                      <animate attributeName=\"y\" attributeType=\"XML\" values=\"13; 5; 13\" begin=\"0.3s\" dur=\"0.6s\"\n                        repeatCount=\"indefinite\" />\n                      </rect>\n                    </svg>\n                  }\n                </div>\n              </div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { LoadingAnimation } from '../../../model/darkbox-configuration';\nimport { DotComponent } from './dot/dot.component';\nimport { FlexRingComponent } from './flex-ring/flex-ring.component';\nimport { SvgLoaderComponent } from './svg-loader/svg-loader.component';\n\n@Component({\n    selector: 'lib-loading-animation',\n    templateUrl: './loading-animation.component.html',\n    styleUrls: ['./loading-animation.component.scss'],\n    imports: [DotComponent, FlexRingComponent, SvgLoaderComponent]\n})\nexport class LoadingAnimationComponent implements OnInit {\n\n  @Input()\n  animationType: LoadingAnimation;\n\n  loadingAnimation: typeof LoadingAnimation = LoadingAnimation;\n\n  constructor() { }\n\n  ngOnInit(): void {\n  }\n}\n","@if (animationType === loadingAnimation.DOT || animationType === loadingAnimation.SQUARE) {\n  <lib-dot [animationType]=\"animationType\" />\n}\n@if (animationType === loadingAnimation.FLEX_RING) {\n  <lib-flex-ring />\n}\n@if (animationType === loadingAnimation.BAR || animationType === loadingAnimation.SPINNER) {\n  <lib-svg-loader\n    [animationType]=\"animationType\" />\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { SwipeDirection } from './swipe-direction';\n\n@Directive({ selector: '[touchable]' })\nexport class TouchableDirective {\n\n  @Output()\n  swipe = new EventEmitter<SwipeDirection>();\n\n  private touchStartX;\n  private touchStartY;\n  private touchEndX;\n  private touchEndY;\n\n  constructor() { }\n\n  /**\n   * Event listener for touchstart events\n   * @param event Touch event\n   */\n  @HostListener('touchstart', ['$event'])\n  onTouchStart(event: TouchEvent): void {\n    this.touchStartX = event.changedTouches[0].screenX;\n    this.touchStartY = event.changedTouches[0].screenY;\n  }\n\n  /**\n   * Event listener for touchend events\n   * @param event Touch event\n   */\n  @HostListener('touchend', ['$event'])\n  onTouchEnd(event: TouchEvent): void {\n    this.touchEndX = event.changedTouches[0].screenX;\n    this.touchEndY = event.changedTouches[0].screenY;\n    this.handleGesture();\n  }\n\n  /**\n   * Handler for all gestures\n   */\n  private handleGesture(): void {\n    // Swipe to the left\n    if (this.touchEndX < this.touchStartX) {\n      this.swipe.emit(SwipeDirection.LEFT);\n    }\n\n    // Swipe to the right\n    if (this.touchEndX > this.touchStartX) {\n      this.swipe.emit(SwipeDirection.RIGHT);\n    }\n\n    // Swipe up\n    if (this.touchEndY < this.touchStartY) {\n      this.swipe.emit(SwipeDirection.UP);\n    }\n\n    // Swipe down\n    if (this.touchEndY > this.touchStartY) {\n      this.swipe.emit(SwipeDirection.DOWN);\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { DarkboxConfiguration } from '../model/darkbox-configuration';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ImageCaptionService {\n\n  constructor() { }\n\n  /**\n   * Replace the image caption template string with the actual values\n   * @param darkboxConfiguration current darkbox configuration\n   * @param currentNumer number of the currently selected image within the gallery\n   * @param totalNumber total number of images in the gallery\n   * @param imageCaption caption of the selected image\n   * @returns the formatted image caption\n   */\n  public getImageCaption(darkboxConfiguration: DarkboxConfiguration, currentNumer: number, totalNumber: number, imageCaption: string): string {\n    let caption = darkboxConfiguration.captionTemplate;\n    if (!imageCaption) {\n      caption = caption.replace('${caption}', '');\n      caption = caption.replace('${separator}', '');\n    } else {\n      caption = caption.replace('${caption}', imageCaption);\n      caption = caption.replace('${separator}', darkboxConfiguration.captionSeparator);\n    }\n    caption = caption.replace('${currentNumber}', currentNumer.toString());\n    caption = caption.replace('${totalNumber}', totalNumber.toString());\n\n    return caption;\n  }\n}\n","import { Component, EventEmitter, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { SwipeDirection } from '../../directives/touchable/swipe-direction';\nimport { ButtonStyle, DarkboxConfiguration } from '../../model/darkbox-configuration';\nimport { Image } from '../../model/image';\nimport { ImageCaptionService } from '../../services/image-caption.service';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { LoadingAnimationComponent } from '../loading/loading-animation/loading-animation.component';\nimport { TouchableDirective } from '../../directives/touchable/touchable.directive';\n\nexport enum KEY_CODE {\n  RIGHT_ARROW = 39,\n  LEFT_ARROW = 37,\n  ESCAPE = 27\n}\n\n@Component({\n    selector: 'darkbox',\n    templateUrl: './darkbox.component.html',\n    styleUrls: ['./darkbox.component.scss'],\n    imports: [NgClass, NgStyle, LoadingAnimationComponent, TouchableDirective]\n})\nexport class DarkboxComponent implements OnInit, OnChanges {\n\n  @Input()\n  image: Image;\n\n  @Input()\n  darkboxConfiguration: DarkboxConfiguration;\n\n  @Input()\n  currentNumber: number;\n\n  @Input()\n  totalNumber: number;\n\n  @Input()\n  hasNext: boolean;\n\n  @Input()\n  hasPrev: boolean;\n\n  @Output()\n  close = new EventEmitter<boolean>();\n\n  @Output()\n  next = new EventEmitter<boolean>();\n\n  @Output()\n  prev = new EventEmitter<boolean>();\n\n  @Output()\n  imageLoaded = new EventEmitter<Image>();\n\n  /**\n   * Loading state holder for the full sized image\n   */\n  fullSizedImageLoaded = false;\n\n  /**\n   * Interpolated image caption\n   */\n  imageCaption: string;\n\n  constructor(private imageCaptionService: ImageCaptionService) { }\n\n  ngOnInit(): void {\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.currentNumber) {\n      this.imageCaption = this.imageCaptionService.getImageCaption(this.darkboxConfiguration, this.currentNumber, this.totalNumber, this.image.caption);\n    }\n  }\n\n  onClose(): void {\n    this.close.emit(true);\n  }\n\n  /**\n   * Handle swipe interactions\n   * @param event\n   */\n  onSwipe(event: SwipeDirection): void {\n    if (event === SwipeDirection.LEFT) {\n      this.onNext();\n    }\n    if (event === SwipeDirection.RIGHT) {\n      this.onPrev();\n    }\n  }\n\n  onNext(): void {\n    this.fullSizedImageLoaded = false;\n    this.next.emit(true);\n  }\n\n  onPrev(): void {\n    this.fullSizedImageLoaded = false;\n    this.prev.emit(true);\n  }\n\n  onImageLoaded(): void {\n    this.fullSizedImageLoaded = true;\n    this.imageLoaded.emit(this.image);\n  }\n\n  getCloseButtonStyle(): string {\n    if (this.darkboxConfiguration.closeButtonStyle === ButtonStyle.FAB) {\n      return 'fab';\n    }\n\n    if (this.darkboxConfiguration.closeButtonStyle === ButtonStyle.BAR) {\n      return 'bar';\n    }\n  }\n\n  getPrevNextButtonStyle(): string {\n    if (this.darkboxConfiguration.prevNextButtonStyle === ButtonStyle.FAB) {\n      return 'fab';\n    }\n\n    if (this.darkboxConfiguration.prevNextButtonStyle === ButtonStyle.BAR) {\n      return 'bar';\n    }\n  }\n\n  getCloseButtonBackgroundColor(): string {\n    return this.darkboxConfiguration.closeButtonColorConfiguration.backgroundColor;\n  }\n\n  getCloseButtonForegroundColor(): string {\n    return this.darkboxConfiguration.closeButtonColorConfiguration.foregroundColor;\n  }\n\n  getPrevNextButtonBackgroundColor(): string {\n    return this.darkboxConfiguration.prevNextButtonColorConfiguration.backgroundColor;\n  }\n\n  getPrevNextButtonForegroundColor(): string {\n    return this.darkboxConfiguration.prevNextButtonColorConfiguration.foregroundColor;\n  }\n\n  getCaptionBackgroundColor(): string {\n    return this.darkboxConfiguration.captionColorConfiguration.backgroundColor;\n  }\n\n  getCaptionForegroundColor(): string {\n    return this.darkboxConfiguration.captionColorConfiguration.foregroundColor;\n  }\n\n  @HostListener('window:keyup', ['$event'])\n  onKeyUp(event: KeyboardEvent): void {\n    let code: string | number;\n    if (event.key !== undefined) {\n      code = event.key;\n    } else if (event.keyCode !== undefined) {\n      code = event.keyCode;\n    }\n\n    if (this.hasNext && (code === 'ArrowRight' || code === KEY_CODE.RIGHT_ARROW)) {\n      this.onNext();\n    }\n\n    if (this.hasPrev && (code === 'ArrowLeft' || code === KEY_CODE.LEFT_ARROW)) {\n      this.onPrev();\n    }\n\n    if (code === 'Escape' || code === KEY_CODE.ESCAPE) {\n      this.onClose();\n    }\n  }\n}\n","<div class=\"overlay\">\n  <button [ngClass]=\"getCloseButtonStyle()\" class=\"close\"\n    [ngStyle]=\"{'background-color': getCloseButtonBackgroundColor(), 'color': getCloseButtonForegroundColor()}\"\n  (click)=\"onClose()\">x</button>\n  <!-- The loading animation -->\n  @if (!fullSizedImageLoaded) {\n    <lib-loading-animation [animationType]=\"darkboxConfiguration.loadingAnimation\" />\n  }\n  <!-- The actual full sized image -->\n  <div class=\"image\" [ngStyle]=\"{'display': fullSizedImageLoaded ? '' : 'none'}\">\n    <img touchable src=\"{{image.url}}\" alt=\"{{image.altText}}\" (load)=\"onImageLoaded()\" (swipe)=\"onSwipe($event)\">\n    @if (darkboxConfiguration.enableCaption) {\n      <div class=\"caption\"\n        [ngStyle]=\"{'background-color': getCaptionBackgroundColor(), 'color': getCaptionForegroundColor()}\">\n        {{imageCaption}}\n      </div>\n    }\n  </div>\n  @if (hasPrev) {\n    <button [ngClass]=\"getPrevNextButtonStyle()\" class=\"prev\"\n      [ngStyle]=\"{'background-color': getPrevNextButtonBackgroundColor(), 'color': getPrevNextButtonForegroundColor()}\"\n    (click)=\"onPrev()\">&lt;</button>\n  }\n  @if (hasNext) {\n    <button [ngClass]=\"getPrevNextButtonStyle()\" class=\"next\"\n      [ngStyle]=\"{'background-color': getPrevNextButtonBackgroundColor(), 'color': getPrevNextButtonForegroundColor()}\"\n    (click)=\"onNext()\">&gt;</button>\n  }\n</div>\n","import { ColorConfiguration } from '../model/color-configuration';\nimport { ButtonStyle, DarkboxConfiguration, LoadingAnimation, LoopDirection } from '../model/darkbox-configuration';\n\nexport class DefaultDarkboxConfiguration implements DarkboxConfiguration {\n  loopDirection = LoopDirection.BOTH;\n  enableCaption = true;\n  captionColorConfiguration = {\n    backgroundColor: '#FFFFFF',\n    foregroundColor: '#000000'\n  } as ColorConfiguration;\n  loadingAnimation = LoadingAnimation.SPINNER;\n  closeButtonStyle = ButtonStyle.FAB;\n  closeButtonColorConfiguration = {\n    backgroundColor: '#FFFFFF',\n    foregroundColor: '#000000'\n  } as ColorConfiguration;\n  prevNextButtonStyle = ButtonStyle.FAB;\n  prevNextButtonColorConfiguration = {\n    backgroundColor: '#FFFFFF',\n    foregroundColor: '#000000'\n  } as ColorConfiguration;\n  captionSeparator = ' - ';\n  captionTemplate = '${currentNumber}/${totalNumber}${separator}${caption}';\n}\n","import { GridConfiguration, GridType } from '../model/grid-configuration';\n\nexport class DefaultGridConfiguration implements GridConfiguration {\n  initialBatchSize = 10;\n  batchSize = 15;\n  batchSizeScalingFactors = [\n    {\n      pxWidth: 1400,\n      scalingFactor: 5\n    },\n    {\n      pxWidth: 992,\n      scalingFactor: 2\n    }\n  ];\n  gridType = GridType.STATIC;\n  thumbnailAlignment = 'flex-start';\n  zoomImages = true;\n  thumbnailHeight = '175px';\n  thumbnailWidth = '175px';\n  enableLoadingPlaceholder = true;\n  thumbnailsWaitForBatch = true;\n}\n","import { Configuration } from '../model/configuration';\nimport { DefaultDarkboxConfiguration } from './darkbox-configuration.default';\nimport { DefaultGridConfiguration } from './grid-configuration.default';\n\nexport class DefaultConfiguration implements Configuration {\n  darkboxConfiguration = new  DefaultDarkboxConfiguration();\n  gridConfiguration = new  DefaultGridConfiguration();\n}\n","import { Injectable } from '@angular/core';\nimport { DefaultConfiguration } from '../config/configuration.default';\nimport { Configuration } from '../model/configuration';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ConfigurationService {\n\n  private defaultConfiguration = new DefaultConfiguration();\n\n  constructor() { }\n\n  public getEffectiveConfiguration(customConfiguration: Configuration): Configuration {\n    if (!this.defaultConfiguration) {\n      this.defaultConfiguration = new DefaultConfiguration();\n    }\n\n    const effectiveGridConfig = { ...this.defaultConfiguration.gridConfiguration, ...customConfiguration?.gridConfiguration };\n    const effectiveDarkboxConfig = { ...this.defaultConfiguration.darkboxConfiguration, ...customConfiguration?.darkboxConfiguration };\n    return {\n      gridConfiguration: effectiveGridConfig,\n      darkboxConfiguration: effectiveDarkboxConfig\n    } as Configuration;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Configuration } from '../model/configuration';\nimport { LoopDirection } from '../model/darkbox-configuration';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ImageIndexService {\n\n  constructor() { }\n\n  /**\n * Calculates the next valid image index based on the currentImageIndex and the images array\n * @param configuration currently used for the Darkbox instance\n * @param currentIndex of the image being displayed\n * @param totalImageCount number of total images provided to Darkbox\n * @param increase true if the index should be increased, false otherwise\n * @return the new index\n */\n  public calculateValidImageIndex(configuration: Configuration, currentIndex: number, totalImageCount: number, increase: boolean): number {\n    const loopDirection = configuration.darkboxConfiguration.loopDirection;\n    const addend = increase ? 1 : -1;\n    const targetIndex = currentIndex + addend;\n    const maxImageIndex = totalImageCount - 1;\n\n    if (targetIndex >= 0 && targetIndex <= maxImageIndex) {\n      return targetIndex;\n    }\n\n    if (loopDirection !== LoopDirection.NONE) {\n      if (targetIndex > maxImageIndex && (loopDirection === LoopDirection.FORWARD || loopDirection === LoopDirection.BOTH)) {\n        return 0;\n      }\n\n      if (targetIndex < 0 && (loopDirection === LoopDirection.BACKWARD || loopDirection === LoopDirection.BOTH)) {\n        // If we rollover to the back, make sure all images are displayed in the grid\n        return maxImageIndex;\n      }\n    }\n    return currentIndex;\n  }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { Configuration } from './model/configuration';\nimport { LoopDirection } from './model/darkbox-configuration';\nimport { GridType } from './model/grid-configuration';\nimport { Image } from './model/image';\nimport { ConfigurationService } from './services/configuration.service';\nimport { ImageIndexService } from './services/image-index.service';\nimport { NgClass, NgStyle, SlicePipe } from '@angular/common';\nimport { LoadingPlaceholderComponent } from './components/loading/loading-placeholder/loading-placeholder.component';\nimport { DarkboxComponent } from './components/darkbox/darkbox.component';\n\n@Component({\n    selector: 'darkbox-gallery',\n    templateUrl: './ngx-darkbox-gallery.component.html',\n    styleUrls: ['./ngx-darkbox-gallery.component.scss'],\n    imports: [NgClass, NgStyle, LoadingPlaceholderComponent, DarkboxComponent, SlicePipe]\n})\nexport class NgxDarkboxGalleryComponent implements OnInit, OnChanges, OnDestroy {\n\n  /**\n   * List of images displayed in Darkbox\n   */\n  @Input()\n  images: Image[] = [];\n  imageCount: number;\n  currentImageIndex: number;\n  loadedThumbnails: Set<Image> = new Set();\n  batchLoadedThumbnails: Set<Image> = new Set();\n\n  @Input()\n  configuration: Configuration;\n  effectiveConfiguration: Configuration;\n\n  private eventsSubscription: Subscription;\n  /**\n   * Input to handle click events from the outside world\n   */\n  @Input()\n  loadMoreImagesEvents: Observable<void>;\n\n  /**\n   * Signals that a single image was clicked\n   * The clicked images is being emitted\n   */\n  @Output()\n  imageClicked = new EventEmitter<Image>();\n\n  /**\n   * Signals that a single thumbnail was loaded\n   * The image containing the thumbnail is being emitted\n   */\n  @Output()\n  thumbnailLoaded = new EventEmitter<Image>();\n\n  /**\n   * Signals that all thumbnails currently displayed have bean loaded\n   */\n  @Output()\n  allThumbnailsLoaded = new EventEmitter<boolean>();\n\n  /**\n   * Signals that all images provided from the input are displayed in the DOM\n   * This does not mean that all thumbnails/images are completely loaded\n   */\n  @Output()\n  allImagesInDom = new EventEmitter<boolean>();\n\n  /**\n   * Signals that the lightbox/Darkbox was closed by the user\n   */\n  @Output()\n  darkboxClosed = new EventEmitter<boolean>();\n\n  /**\n   * Signals that the user clicked the next image button\n   */\n  @Output()\n  darkboxNext = new EventEmitter<boolean>();\n\n  /**\n   * Signals that the user clicked the previous image button\n   */\n  @Output()\n  darkboxPrev = new EventEmitter<boolean>();\n\n  /**\n   * Signals that the full sized images was loaded\n   * The loaded images is being emitted\n   */\n  @Output()\n  darkboxImageLoaded = new EventEmitter<Image>();\n\n  constructor(private configurationService: ConfigurationService,\n              private imageIndexService: ImageIndexService) { }\n\n  ngOnInit(): void {\n    this.initializeConfiguration(this.configuration);\n    this.subscribeToOutsideClickEvents();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.configuration) {\n      this.initializeConfiguration(this.configuration);\n    }\n    if (changes.loadMoreImagesEvents) {\n      this.subscribeToOutsideClickEvents();\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.eventsSubscription) {\n      this.eventsSubscription.unsubscribe();\n    }\n  }\n\n  private initializeConfiguration(customConfiguration: Configuration): void {\n    this.effectiveConfiguration = this.configurationService.getEffectiveConfiguration(customConfiguration);\n    this.scaleInitialBatchSize();\n    this.imageCount = this.effectiveConfiguration.gridConfiguration.initialBatchSize;\n  }\n\n  private subscribeToOutsideClickEvents(): void {\n    if (this.eventsSubscription) {\n      this.eventsSubscription.unsubscribe();\n    }\n    if (this.loadMoreImagesEvents) {\n      this.eventsSubscription = this.loadMoreImagesEvents.subscribe(() => this.showMoreImages());\n    }\n  }\n\n  onImageClicked(image: Image): void {\n    this.currentImageIndex = this.images.indexOf(image);\n    this.imageClicked.emit(image);\n  }\n\n  onDarkboxClose(): void {\n    this.currentImageIndex = null;\n    this.darkboxClosed.emit(true);\n  }\n\n  onDarkboxNextImage(): void {\n    this.currentImageIndex = this.calculateValidImageIndex(true);\n    this.darkboxNext.emit(true);\n  }\n\n  onDarkboxPrevImage(): void {\n    this.currentImageIndex = this.calculateValidImageIndex(false);\n    this.darkboxPrev.emit(true);\n  }\n\n  onDarkboxImageLoaded(image: Image): void {\n    this.darkboxImageLoaded.emit(image);\n  }\n\n  /**\n   * Event emitter signaling that one image is loaded\n   * Additionally signals that all images of one batch are loaded\n   */\n  onThumbnailLoaded(image: Image): void {\n    if (this.effectiveConfiguration.gridConfiguration.thumbnailsWaitForBatch) {\n      this.batchLoadedThumbnails.add(image);\n    } else {\n      this.loadedThumbnails.add(image);\n    }\n\n    this.thumbnailLoaded.emit(image);\n    if (this.loadedThumbnails.size + this.batchLoadedThumbnails.size >= this.imageCount) {\n      if (this.effectiveConfiguration.gridConfiguration.thumbnailsWaitForBatch) {\n        this.batchLoadedThumbnails.forEach(i => this.loadedThumbnails.add(i));\n        this.batchLoadedThumbnails.clear();\n      }\n      this.allThumbnailsLoaded.emit(true);\n    }\n  }\n\n  isNextImageAvailable(): boolean {\n    const loopDirection = this.effectiveConfiguration.darkboxConfiguration.loopDirection;\n    return this.currentImageIndex + 1 < this.images.length || loopDirection === LoopDirection.FORWARD || loopDirection === LoopDirection.BOTH;\n  }\n\n  isPrevImageAvailable(): boolean {\n    const loopDirection = this.effectiveConfiguration.darkboxConfiguration.loopDirection;\n    return this.currentImageIndex - 1 >= 0 || loopDirection === LoopDirection.BACKWARD || loopDirection === LoopDirection.BOTH;\n  }\n\n  /**\n   * Calculates the next valid image index based on the currentImageIndex and the images array\n   * @param increase true if the index should be increased, false otherwise\n   * @return the new index\n   */\n  private calculateValidImageIndex(increase: boolean): number {\n    const newImageIndex = this.imageIndexService.calculateValidImageIndex(this.effectiveConfiguration,\n                                                                          this.currentImageIndex,\n                                                                          this.images.length,\n                                                                          increase);\n    const rollOverRequired = newImageIndex === this.images.length - 1 && this.imageCount < this.images.length;\n\n    // Roll over to the last image when the image before the first one is requested\n    if (rollOverRequired) {\n      this.showMoreImages(true);\n    }\n\n    if (newImageIndex >= this.imageCount && !rollOverRequired) {\n      this.showMoreImages();\n    }\n    return newImageIndex;\n  }\n\n  /**\n   * Increase the imageCount and thereby increase the number of displayed thumbnails/images\n   * @param showAllImages If true all thumbnails/images are displayed\n   */\n  private showMoreImages(showAllImages: boolean = false): void {\n    this.imageCount += this.effectiveConfiguration.gridConfiguration.batchSize;\n\n    if (showAllImages) {\n      this.imageCount = this.images.length;\n    }\n\n    if (this.imageCount >= this.images.length) {\n      this.allImagesInDom.emit(true);\n      this.imageCount = this.images.length;\n    }\n  }\n\n  /**\n   * Calculates the correct initial number of images based on the screen resolution\n   */\n  private scaleInitialBatchSize(): void {\n    const windowWidth = window.screen.width;\n    const scalingFactors = this.effectiveConfiguration.gridConfiguration.batchSizeScalingFactors;\n    scalingFactors.sort((a, b) => b.pxWidth - a.pxWidth);\n\n    const factor = scalingFactors.find(currentFactor => windowWidth >= currentFactor.pxWidth);\n\n    this.effectiveConfiguration.gridConfiguration.initialBatchSize *= factor ? factor.scalingFactor : 1;\n  }\n\n  /**\n   * Compiles the css classes needed to reflect the configuration of the image-grid\n   * @returns a string of css class names for the main image grid\n   */\n  public getImageGridClasses(): string {\n    const classConfig = [];\n\n    if (this.effectiveConfiguration.gridConfiguration.gridType === GridType.STATIC) {\n      classConfig.push('static-image-grid');\n    }\n\n    if (this.effectiveConfiguration.gridConfiguration.gridType === GridType.FLUID) {\n      classConfig.push('fluid-image-grid');\n    }\n\n    if (this.effectiveConfiguration.gridConfiguration.zoomImages) {\n      classConfig.push('zooming-images');\n    }\n\n    return classConfig.join(' ');\n  }\n\n  /**\n   * Returns the configuration parameter for content justification in the main image grid\n   * @returns a string for the justifiy-content css property\n   */\n  public getContentJustification(): string | null {\n    return this.effectiveConfiguration.gridConfiguration.thumbnailAlignment;\n  }\n\n  /**\n   * @param isPlaceholder whether the size is calculated for a placeholder or not\n   * @returns the thumbnail height from the configuration\n   */\n  public getThumbnailHeight(isPlaceholder: boolean = false): string | null {\n    // Check for the fluid style\n    if (this.effectiveConfiguration.gridConfiguration.gridType === GridType.FLUID && !isPlaceholder) {\n      return null;\n    }\n    return this.effectiveConfiguration.gridConfiguration.thumbnailHeight;\n  }\n\n  /**\n   * @param isPlaceholder whether the size is calculated for a placeholder or not\n   * @returns the thumbnail width from the configuration\n   */\n  public getThumbnailWidth(isPlaceholder: boolean = false): string | null {\n    // Check for the fluid style\n    if (this.effectiveConfiguration.gridConfiguration.gridType === GridType.FLUID && !isPlaceholder) {\n      return null;\n    }\n    return this.effectiveConfiguration.gridConfiguration.thumbnailWidth;\n  }\n\n  public isLoadingPlaceholderEnabled(): boolean {\n    return this.effectiveConfiguration.gridConfiguration?.enableLoadingPlaceholder;\n  }\n}\n","<div [ngClass]=\"getImageGridClasses()\" [ngStyle]=\"{'justify-content': getContentJustification()}\">\n  @for (image of images | slice:0:imageCount; track image) {\n    <div class=\"image-container\" [ngStyle]=\"{'height': getThumbnailHeight(), 'width': getThumbnailWidth()}\"\n      (click)=\"onImageClicked(image)\">\n      <!-- The actual thumbnail image -->\n      <img [ngStyle]=\"{'display': isLoadingPlaceholderEnabled() && !loadedThumbnails.has(image) ? 'none' : ''}\"\n        src=\"{{image.thumbnailUrl}}\" alt=\"{{image.altText}}\" (load)=\"onThumbnailLoaded(image)\">\n        <!-- Loading placeholder in the configured size -->\n        @if (isLoadingPlaceholderEnabled() && !loadedThumbnails.has(image)) {\n          <loading-placeholder\n            [placeholderHeight]=\"getThumbnailHeight(true)\" [placeholderWidth]=\"getThumbnailWidth(true)\">\n          </loading-placeholder>\n        }\n      </div>\n    }\n  </div>\n\n  @if (currentImageIndex != null) {\n    <darkbox [image]=\"images[currentImageIndex]\"\n      [darkboxConfiguration]=\"effectiveConfiguration.darkboxConfiguration\" [currentNumber]=\"currentImageIndex + 1\"\n      [totalNumber]=\"images.length\" [hasNext]=\"isNextImageAvailable()\" [hasPrev]=\"isPrevImageAvailable()\"\n      (close)=\"onDarkboxClose()\" (next)=\"onDarkboxNextImage()\" (prev)=\"onDarkboxPrevImage()\"\n    (imageLoaded)=\"onDarkboxImageLoaded($event)\"/>\n  }\n","export class Image {\n  /**\n   * An id to identify the image in events. This is not used by the library itself\n   */\n  public identifier?: string;\n  /**\n   * URL of the full sized image\n   */\n  public url: string;\n  /**\n   * URL of the thumbnail image\n   */\n  public thumbnailUrl: string;\n  /**\n   * A short caption that can be shown under the  image in darkbox\n   */\n  public caption?: string;\n  /**\n   * The alternative text shown when the image can not be loaded\n   */\n  public altText?: string;\n}\n","/*\n * Public API Surface of ngx-darkbox-gallery\n */\n\nexport * from './lib/ngx-darkbox-gallery.service';\nexport * from './lib/ngx-darkbox-gallery.component';\n\nexport * from './lib/model/color-configuration';\nexport * from './lib/model/configuration';\nexport * from './lib/model/darkbox-configuration';\nexport * from './lib/model/grid-configuration';\nexport * from './lib/model/image';\nexport * from './lib/model/resolution-configuration';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ImageCaptionService","i1.ConfigurationService","i2.ImageIndexService"],"mappings":"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"}