@failed-successfully/ngx-darkbox-gallery
Version:
Darkbox Gallery is a highly configurable lightbox themed gallery library for Angular applications using the ivy engine (Angular 18+).
1 lines • 62.6 kB
Source Map (JSON)
{"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()\"><</button>\n }\n @if (hasNext) {\n <button [ngClass]=\"getPrevNextButtonStyle()\" class=\"next\"\n [ngStyle]=\"{'background-color': getPrevNextButtonBackgroundColor(), 'color': getPrevNextButtonForegroundColor()}\"\n (click)=\"onNext()\">></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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"}